Browse Source

moved more functions from luaobject to luastate

v0.2.x
Brett Langdon 13 years ago
parent
commit
293a49d906
2 changed files with 2 additions and 109 deletions
  1. +0
    -106
      src/luaobject.cc
  2. +2
    -3
      src/luastate.cc

+ 0
- 106
src/luaobject.cc View File

@ -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;
}

+ 2
- 3
src/luastate.cc View File

@ -15,7 +15,6 @@ struct async_baton{
LuaState* state;
};
void do_file(uv_work_t *req){
async_baton* baton = static_cast<async_baton*>(req->data);
@ -389,12 +388,12 @@ Handle<Value> LuaState::RegisterFunction(const Arguments& args){
return scope.Close(Undefined());
}
LuaState* obj = ObjectWrap::Unwrap<LuaState>(args.This());
Persistent<Function> func = Persistent<Function>::New(Local<Function>::Cast(args[1]));
char* func_name = get_str(args[0]);
functions[func_name] = func;
LuaState* obj = ObjectWrap::Unwrap<LuaState>(args.This());
lua_pushstring(obj->lua_, func_name);
lua_pushcclosure(obj->lua_, CallFunction, 1);
lua_setglobal(obj->lua_, func_name);


Loading…
Cancel
Save