From 293a49d906475802f5cebc890baa3522946da364 Mon Sep 17 00:00:00 2001 From: Brett Langdon Date: Mon, 31 Dec 2012 15:05:13 -0500 Subject: [PATCH] moved more functions from luaobject to luastate --- src/luaobject.cc | 106 ----------------------------------------------- src/luastate.cc | 5 +-- 2 files changed, 2 insertions(+), 109 deletions(-) diff --git a/src/luaobject.cc b/src/luaobject.cc index 12e48de..17434f2 100644 --- a/src/luaobject.cc +++ b/src/luaobject.cc @@ -55,20 +55,7 @@ Handle LuaObject::New(const Arguments& args) { return args.This(); } -Handle LuaObject::Close(const Arguments& args){ - HandleScope scope; - LuaObject* obj = ObjectWrap::Unwrap(args.This()); - lua_close(obj->lua_); - return scope.Close(Undefined()); -} -Handle LuaObject::Status(const Arguments& args){ - HandleScope scope; - LuaObject* obj = ObjectWrap::Unwrap(args.This()); - int status = lua_status(obj->lua_); - - return scope.Close(Number::New(status)); -} Handle LuaObject::CollectGarbage(const Arguments& args){ HandleScope scope; @@ -90,45 +77,9 @@ Handle LuaObject::CollectGarbage(const Arguments& args){ return scope.Close(Number::New(gc)); } -Handle LuaObject::DoString(const Arguments& args) { - HandleScope scope; - - if(args.Length() < 1){ - ThrowException(Exception::TypeError(String::New("Wrong number of arguments"))); - return scope.Close(Undefined()); - } - - char *lua_code = get_str(args[0]); - - LuaObject* obj = ObjectWrap::Unwrap(args.This()); - if(luaL_dostring(obj->lua_, lua_code)){ - char buf[1000]; - sprintf(buf, "Execution Of Lua Code Has Failed:\n%s\n", lua_tostring(obj->lua_, -1)); - ThrowException(Exception::TypeError(String::New(buf))); - return scope.Close(Undefined()); - } - - return scope.Close(Undefined()); -} - - -Handle LuaObject::GetGlobal(const Arguments& args) { - HandleScope scope; - - if(args.Length() < 1){ - ThrowException(Exception::TypeError(String::New("Wrong number of arguments"))); - return scope.Close(Undefined()); - } - - char *global_name = get_str(args[0]); - LuaObject* obj = ObjectWrap::Unwrap(args.This()); - lua_getglobal(obj->lua_, global_name); - Local val = lua_to_value(obj->lua_, -1); - return scope.Close(val); -} Handle LuaObject::Push(const Arguments& args) { @@ -203,60 +154,3 @@ Handle LuaObject::Replace(const Arguments& args) { return scope.Close(Undefined()); } - - -Handle LuaObject::RegisterFunction(const Arguments& args){ - HandleScope scope; - - if(args.Length() < 1){ - ThrowException(Exception::TypeError(String::New("Must Have 1 Argument"))); - return scope.Close(Undefined()); - } - - if(!args[0]->IsObject()){ - ThrowException(Exception::TypeError(String::New("Argument 1 Must Be An Object"))); - return scope.Close(Undefined()); - } - - Handle handle = Handle::Cast(args[0]); - class LuaFunction* func = LuaFunction::unwrap(handle); - - functions[func->func_name] = func->func_def_; - return scope.Close(Undefined()); -} - -int LuaObject::CallFunction(lua_State *L){ - int n = lua_gettop(L); - if(n < 1){ - lua_pushstring(L, "must have at least 1 argument"); - lua_error(L); - } - - if (!lua_isstring(L, 1)) { - lua_pushstring(L, "argument 1 must be a string"); - lua_error(L); - } - - char * func_name = (char *)lua_tostring(L, 1); - - const unsigned argc = n - 1; - Local* argv = new Local[argc]; - int i; - for(i = 1; i <= n; ++i){ - argv[i-1] = lua_to_value(L, i+1); - } - - Handle ret_val = Undefined(); - - std::map >::iterator iter; - for(iter = functions.begin(); iter != functions.end(); iter++){ - if(strcmp(iter->first, func_name) == 0){ - Persistent func = iter->second; - ret_val = func->Call(Context::GetCurrent()->Global(), argc, argv); - break; - } - } - - push_value_to_lua(L, ret_val); - return 1; -} diff --git a/src/luastate.cc b/src/luastate.cc index 8a8e63d..083efa2 100644 --- a/src/luastate.cc +++ b/src/luastate.cc @@ -15,7 +15,6 @@ struct async_baton{ LuaState* state; }; - void do_file(uv_work_t *req){ async_baton* baton = static_cast(req->data); @@ -389,12 +388,12 @@ Handle LuaState::RegisterFunction(const Arguments& args){ return scope.Close(Undefined()); } + LuaState* obj = ObjectWrap::Unwrap(args.This()); + Persistent func = Persistent::New(Local::Cast(args[1])); char* func_name = get_str(args[0]); functions[func_name] = func; - LuaState* obj = ObjectWrap::Unwrap(args.This()); - lua_pushstring(obj->lua_, func_name); lua_pushcclosure(obj->lua_, CallFunction, 1); lua_setglobal(obj->lua_, func_name);