Browse Source

added support for lua tables

v0.2.x
Brett Langdon 13 years ago
parent
commit
1ac331663b
1 changed files with 24 additions and 0 deletions
  1. +24
    -0
      src/utils.cc

+ 24
- 0
src/utils.cc View File

@ -25,6 +25,19 @@ v8::Local<v8::Value> lua_to_value(lua_State* L, int i){
case LUA_TSTRING:
return v8::String::New((char *)lua_tostring(L, i));
break;
case LUA_TTABLE:
{
v8::Local<v8::Object> obj = v8::Object::New();
lua_pushnil(L);
while(lua_next(L, i-1) != 0){
v8::Local<v8::Value> key = lua_to_value(L, -2);
v8::Local<v8::Value> value = lua_to_value(L, -1);
obj->Set(key, value);
lua_pop(L, 1);
}
return obj;
break;
}
default:
return v8::Local<v8::Primitive>::New(v8::Undefined());
break;
@ -40,6 +53,17 @@ void push_value_to_lua(lua_State* L, v8::Handle<v8::Value> value){
}else if(value->IsBoolean()){
int b_value = (int)value->ToBoolean()->Value();
lua_pushboolean(L, b_value);
}else if(value->IsObject()){
lua_newtable(L);
v8::Local<v8::Object> obj = value->ToObject();
v8::Local<v8::Array> keys = obj->GetPropertyNames();
for(uint32_t i = 0; i < keys->Length(); ++i){
v8::Local<v8::String> key = keys->Get(i)->ToString();
v8::Local<v8::Value> val = obj->Get(key);
push_value_to_lua(L, key);
push_value_to_lua(L, val);
lua_settable(L, -3);
}
}else{
lua_pushnil(L);
}


Loading…
Cancel
Save