From 1ac331663bfb72de572d763b2fa2864e6f333bcd Mon Sep 17 00:00:00 2001 From: Brett Langdon Date: Mon, 31 Dec 2012 01:54:07 -0500 Subject: [PATCH] added support for lua tables --- src/utils.cc | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/utils.cc b/src/utils.cc index a7e2e5d..51362e2 100644 --- a/src/utils.cc +++ b/src/utils.cc @@ -25,6 +25,19 @@ v8::Local 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 obj = v8::Object::New(); + lua_pushnil(L); + while(lua_next(L, i-1) != 0){ + v8::Local key = lua_to_value(L, -2); + v8::Local value = lua_to_value(L, -1); + obj->Set(key, value); + lua_pop(L, 1); + } + return obj; + break; + } default: return v8::Local::New(v8::Undefined()); break; @@ -40,6 +53,17 @@ void push_value_to_lua(lua_State* L, v8::Handle 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 obj = value->ToObject(); + v8::Local keys = obj->GetPropertyNames(); + for(uint32_t i = 0; i < keys->Length(); ++i){ + v8::Local key = keys->Get(i)->ToString(); + v8::Local val = obj->Get(key); + push_value_to_lua(L, key); + push_value_to_lua(L, val); + lua_settable(L, -3); + } }else{ lua_pushnil(L); }