|
|
|
@ -55,20 +55,7 @@ Handle<Value> LuaObject::New(const Arguments& args) { |
|
|
|
return args.This(); |
|
|
|
} |
|
|
|
|
|
|
|
Handle<Value> LuaObject::Close(const Arguments& args){ |
|
|
|
HandleScope scope; |
|
|
|
LuaObject* obj = ObjectWrap::Unwrap<LuaObject>(args.This()); |
|
|
|
lua_close(obj->lua_); |
|
|
|
return scope.Close(Undefined()); |
|
|
|
} |
|
|
|
|
|
|
|
Handle<Value> LuaObject::Status(const Arguments& args){ |
|
|
|
HandleScope scope; |
|
|
|
LuaObject* obj = ObjectWrap::Unwrap<LuaObject>(args.This()); |
|
|
|
int status = lua_status(obj->lua_); |
|
|
|
|
|
|
|
return scope.Close(Number::New(status)); |
|
|
|
} |
|
|
|
|
|
|
|
Handle<Value> LuaObject::CollectGarbage(const Arguments& args){ |
|
|
|
HandleScope scope; |
|
|
|
@ -90,45 +77,9 @@ Handle<Value> LuaObject::CollectGarbage(const Arguments& args){ |
|
|
|
return scope.Close(Number::New(gc)); |
|
|
|
} |
|
|
|
|
|
|
|
Handle<Value> 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<LuaObject>(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<Value> 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<LuaObject>(args.This()); |
|
|
|
lua_getglobal(obj->lua_, global_name); |
|
|
|
|
|
|
|
Local<Value> val = lua_to_value(obj->lua_, -1); |
|
|
|
|
|
|
|
return scope.Close(val); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
Handle<Value> LuaObject::Push(const Arguments& args) { |
|
|
|
@ -203,60 +154,3 @@ Handle<Value> LuaObject::Replace(const Arguments& args) { |
|
|
|
|
|
|
|
return scope.Close(Undefined()); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
Handle<Value> 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<Object> handle = Handle<Object>::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<Value>* argv = new Local<Value>[argc]; |
|
|
|
int i; |
|
|
|
for(i = 1; i <= n; ++i){ |
|
|
|
argv[i-1] = lua_to_value(L, i+1); |
|
|
|
} |
|
|
|
|
|
|
|
Handle<Value> ret_val = Undefined(); |
|
|
|
|
|
|
|
std::map<char *,Persistent<Function> >::iterator iter; |
|
|
|
for(iter = functions.begin(); iter != functions.end(); iter++){ |
|
|
|
if(strcmp(iter->first, func_name) == 0){ |
|
|
|
Persistent<Function> func = iter->second; |
|
|
|
ret_val = func->Call(Context::GetCurrent()->Global(), argc, argv); |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
push_value_to_lua(L, ret_val); |
|
|
|
return 1; |
|
|
|
} |