示例#1
0
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;
}
示例#2
0
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);
}
示例#3
0
文件: sqwrap.cpp 项目: comarius/pizu
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);
}
示例#4
0
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;
}
示例#5
0
//<<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;
}