static SQRESULT sqrat_importscript(HSQUIRRELVM v, const SQChar* moduleName) { std::basic_string<SQChar> filename(moduleName); filename += _SC(".nut"); if(SQ_FAILED(sqstd_loadfile(v, moduleName, true))) { if(SQ_FAILED(sqstd_loadfile(v, filename.c_str(), true))) { return SQ_ERROR; } } sq_push(v, -2); sq_call(v, 1, false, true); return SQ_OK; }
SquirrelObject SquirrelVM::CompileScript(const SQChar *s) { #define MAX_EXPANDED_PATH 1023 SquirrelObject ret(_VM); if(SUCCEEDED(sqstd_loadfile(_VM,s,1))) { ret.AttachToStackObject(-1); sq_pop(_VM,1); return ret; } throw SquirrelError(_VM); }
MyScript SqEnv::compile_script(const std::string& s, const SQChar * debugInfo)const { // AutoLock a(&_m); Sqrat::DefaultVM::Set(*_vm); SQObject obj; if(SQ_FAILED(sqstd_loadfile(*_vm, s.c_str(), true))) { //return false; throw Sqrat::Exception(Sqrat::LastErrorString(*_vm)); } sq_getstackobj(*_vm,-1,&obj); //sq_pop(_vm,1); //mco return MyScript(*_vm, obj); }
static SQRESULT sq_slave_vm_loadfile(HSQUIRRELVM v) { SQ_FUNC_VARS(v); GET_sq_slave_vm_INSTANCE(v, 1); SQ_GET_STRING(v, 2, func_name); SQ_GET_STRING(v, 3, file_name); SQ_OPT_BOOL(v, 4, printerror, false); SQ_OPT_BOOL(v, 5, show_warnings, false); SQInteger top = sq_gettop(self); SQRESULT result = SQ_ERROR; sq_pushroottable(self); sq_pushstring(self, func_name, func_name_size); if(sqstd_loadfile(self, file_name, printerror, show_warnings) >= 0) { result = sq_newslot(self, -3, SQFalse); } sq_settop(self, top); return result; }
//<<FIXME>> this func is a mess int getargs(HSQUIRRELVM v,int argc, char* argv[],SQInteger *retval) { int i; int compiles_only = 0; static SQChar temp[500]; const SQChar *ret=NULL; char * output = NULL; int lineinfo=0; *retval = 0; if(argc>1) { int arg=1,exitloop=0; while(arg < argc && !exitloop) { if(argv[arg][0]=='-') { switch(argv[arg][1]) { case 'd': //DEBUG(debug infos) sq_enabledebuginfo(v,1); break; case 'c': compiles_only = 1; break; case 'o': if(arg < argc) { arg++; output = argv[arg]; } break; case 'v': PrintVersionInfos(); return _DONE; case 'h': PrintVersionInfos(); PrintUsage(); return _DONE; default: PrintVersionInfos(); scprintf(_SC("unknown prameter '-%c'\n"),argv[arg][1]); PrintUsage(); *retval = -1; return _ERROR; } }else break; arg++; } // src file if(arg<argc) { const SQChar *filename=NULL; #ifdef SQUNICODE mbstowcs(temp,argv[arg],strlen(argv[arg])); filename=temp; #else filename=argv[arg]; #endif arg++; //sq_pushstring(v,_SC("ARGS"),-1); //sq_newarray(v,0); //sq_createslot(v,-3); //sq_pop(v,1); if(compiles_only) { if(SQ_SUCCEEDED(sqstd_loadfile(v,filename,SQTrue))){ const SQChar *outfile = _SC("out.cnut"); if(output) { #ifdef SQUNICODE int len = (int)(strlen(output)+1); mbstowcs(sq_getscratchpad(v,len*sizeof(SQChar)),output,len); outfile = sq_getscratchpad(v,-1); #else outfile = output; #endif } if(SQ_SUCCEEDED(sqstd_writeclosuretofile(v,outfile))) return _DONE; } } else { //if(SQ_SUCCEEDED(sqstd_dofile(v,filename,SQFalse,SQTrue))) { //return _DONE; //} if(SQ_SUCCEEDED(sqstd_loadfile(v,filename,SQTrue))) { int callargs = 1; sq_pushroottable(v); for(i=arg;i<argc;i++) { const SQChar *a; #ifdef SQUNICODE int alen=(int)strlen(argv[i]); a=sq_getscratchpad(v,(int)(alen*sizeof(SQChar))); mbstowcs(sq_getscratchpad(v,-1),argv[i],alen); sq_getscratchpad(v,-1)[alen] = _SC('\0'); #else a=argv[i]; #endif sq_pushstring(v,a,-1); callargs++; //sq_arrayappend(v,-2); } if(SQ_SUCCEEDED(sq_call(v,callargs,SQTrue,SQTrue))) { SQObjectType type = sq_gettype(v,-1); if(type == OT_INTEGER) { *retval = type; sq_getinteger(v,-1,retval); } return _DONE; } else{ return _ERROR; } } } //if this point is reached an error occured { const SQChar *err; sq_getlasterror(v); if(SQ_SUCCEEDED(sq_getstring(v,-1,&err))) { scprintf(_SC("Error [%s]\n"),err); *retval = -2; return _ERROR; } } } } return _INTERACTIVE; }