Merge branch 'master' of https://github.com/albertodemichelis/squirrel
This commit is contained in:
commit
ab7243ca59
17
.travis.yml
Normal file
17
.travis.yml
Normal file
@ -0,0 +1,17 @@
|
||||
language: cpp
|
||||
compiler:
|
||||
- gcc
|
||||
- clang
|
||||
|
||||
# Travis VMs are 64-bit but we compile both for 32 and 64 bit. To enable the
|
||||
# 32-bit builds to work, we need gcc-multilib.
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- gcc-multilib
|
||||
- g++-multilib
|
||||
|
||||
# Enable container-based builds.
|
||||
sudo: false
|
||||
|
||||
script: mkdir build && cd build && cmake .. && make -j2
|
2
COMPILE
2
COMPILE
@ -83,4 +83,4 @@ DOCUMENTATION GENERATION
|
||||
To be able to compile the documentation, make sure that you have Python
|
||||
installed and the packages sphinx and sphinx_rtd_theme. Browse into doc/
|
||||
and use either the Makefile for GCC-based platforms or make.bat for
|
||||
Windows platforms.
|
||||
Windows platforms.
|
||||
|
@ -1,4 +1,4 @@
|
||||
Copyright (c) 2003-2016 Alberto Demichelis
|
||||
Copyright (c) 2003-2017 Alberto Demichelis
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
|
28
appveyor.yml
Normal file
28
appveyor.yml
Normal file
@ -0,0 +1,28 @@
|
||||
version: 0.0.{build}
|
||||
|
||||
platform:
|
||||
- x86
|
||||
- x64
|
||||
|
||||
configuration:
|
||||
- Debug
|
||||
- Release
|
||||
|
||||
clone_folder: c:\sq
|
||||
|
||||
before_build:
|
||||
- mkdir build
|
||||
- cd build
|
||||
- call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" %platform%
|
||||
- echo %platform%
|
||||
- if %platform%==X64 (cmake .. -G "Visual Studio 14 2015 Win64")
|
||||
- if %platform%==x86 (cmake .. -G "Visual Studio 14 2015")
|
||||
|
||||
build_script:
|
||||
- cmake --build . --config %configuration% -- /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll"
|
||||
|
||||
artifacts:
|
||||
- path: build\*\%configuration%\*.exe
|
||||
- path: build\*\%configuration%\*.dll
|
||||
|
||||
test: off
|
@ -29,4 +29,4 @@ serialize (read) a closure and pushes it on top of the stack, the source is user
|
||||
:returns: a SQRESULT
|
||||
:remarks: closures with free variables cannot be serialized
|
||||
|
||||
serializes(writes) the closure on top of the stack, the destination is user defined through a write callback.
|
||||
serializes(writes) the closure on top of the stack, the destination is user defined through a write callback.
|
||||
|
@ -76,4 +76,4 @@ enable/disable the error callback notification of handled exceptions.
|
||||
:param SQCOMPILERERROR f: A pointer to the error handler function
|
||||
:remarks: if the parameter f is NULL no function will be called when a compiler error occurs. The compiler error handler is shared between friend VMs.
|
||||
|
||||
sets the compiler error handler function
|
||||
sets the compiler error handler function
|
||||
|
@ -69,4 +69,4 @@ sets the native debug hook. When a native hook is set it overrides any previousl
|
||||
:param SQStackInfos * si: pointer to the SQStackInfos structure that will store the stack informations
|
||||
:returns: a SQRESULT.
|
||||
|
||||
retrieve the calls stack informations of a ceratain level in the calls stack.
|
||||
retrieve the calls stack informations of a ceratain level in the calls stack.
|
||||
|
@ -24,4 +24,4 @@ runs the garbage collector and returns the number of reference cycles found (and
|
||||
:param HSQUIRRELVM v: the target VM
|
||||
:remarks: this api only works with garbage collector builds (NO_GARBAGE_COLLECTOR is not defined)
|
||||
|
||||
runs the garbage collector and pushes an array in the stack containing all unreachable object found. If no unreachable object is found, null is pushed instead. This function is meant to help debug reference cycles.
|
||||
runs the garbage collector and pushes an array in the stack containing all unreachable object found. If no unreachable object is found, null is pushed instead. This function is meant to help debug reference cycles.
|
||||
|
@ -355,7 +355,7 @@ creates a new array and pushes it in the stack
|
||||
:param SQBool hasbase: if the parameter is true the function expects a base class on top of the stack.
|
||||
:returns: a SQRESULT
|
||||
|
||||
creates a new class object. If the parameter 'hasbase' is different than 0, the function pops a class from the stack and inherits the new created class from it.
|
||||
creates a new class object. If the parameter 'hasbase' is different than 0, the function pops a class from the stack and inherits the new created class from it. The new class is pushed in the stack.
|
||||
|
||||
|
||||
|
||||
|
@ -448,4 +448,4 @@ pops a value from the stack and sets it as a free variable of the closure at the
|
||||
:returns: a SQRESULT
|
||||
:remarks: if the object at idx position is one of (integer, float, bool, null), the object itself is pushed instead of a weak ref.
|
||||
|
||||
pushes a weak reference to the object at position idx in the stack.
|
||||
pushes a weak reference to the object at position idx in the stack.
|
||||
|
@ -338,4 +338,4 @@ Suspends the execution of the specified vm.
|
||||
:param SQBool throwerror: if true, the vm will thow an exception as soon as is resumed. the exception payload must be set beforehand invoking sq_thowerror().
|
||||
:returns: an HRESULT.
|
||||
|
||||
wake up the execution a previously suspended virtual machine
|
||||
wake up the execution a previously suspended virtual machine
|
||||
|
@ -5,7 +5,7 @@ The registry table
|
||||
==================
|
||||
|
||||
The registry table is an hidden table shared between vm and all his thread(friend vms).
|
||||
This table is accessible only through the C API and is ment to be an utility structure
|
||||
This table is accessible only through the C API and is meant to be an utility structure
|
||||
for native C library implementation.
|
||||
For instance the sqstdlib(squirrel standard library)uses it to store configuration and shared objects
|
||||
delegates.
|
||||
|
@ -26,4 +26,4 @@ All declarations needed for embedding the language in an application are in the
|
||||
embedding/userdata_and_userpointers.rst
|
||||
embedding/the_registry_table.rst
|
||||
embedding/references_from_c.rst
|
||||
embedding/debug_interface.rst
|
||||
embedding/debug_interface.rst
|
||||
|
@ -31,4 +31,4 @@ THE SOFTWARE.
|
||||
introduction.rst
|
||||
language.rst
|
||||
embedding_squirrel.rst
|
||||
api_reference.rst
|
||||
api_reference.rst
|
||||
|
@ -20,4 +20,4 @@
|
||||
language/weak_references.rst
|
||||
language/delegation.rst
|
||||
language/metamethods.rst
|
||||
language/builtin_functions.rst
|
||||
language/builtin_functions.rst
|
||||
|
@ -371,4 +371,4 @@ Creates a new array.::
|
||||
|
||||
Arrays can be initialized with values during the construction::
|
||||
|
||||
a <- [1,"string!",[],{}] //creates an array with 4 elements
|
||||
a <- [1,"string!",[],{}] //creates an array with 4 elements
|
||||
|
@ -28,4 +28,4 @@ C API
|
||||
|
||||
prints the call stack and stack contents. the function
|
||||
uses the print function set through(:ref:`sq_setprintfunc <sq_setprintfunc>`) to output
|
||||
the stack dump.
|
||||
the stack dump.
|
||||
|
@ -210,4 +210,4 @@ C API
|
||||
:param SQInteger size: the size of the blob payload that has to be created
|
||||
:returns: a pointer to the newly created blob payload
|
||||
|
||||
creates a blob with the given payload size and pushes it in the stack.
|
||||
creates a blob with the given payload size and pushes it in the stack.
|
||||
|
@ -79,4 +79,4 @@ C API
|
||||
:returns: an SQRESULT
|
||||
:remarks: The function aspects a table on top of the stack where to register the global library functions.
|
||||
|
||||
initialize and register the system library in the given VM.
|
||||
initialize and register the system library in the given VM.
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright (c) 2003-2016 Alberto Demichelis
|
||||
Copyright (c) 2003-2017 Alberto Demichelis
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
@ -66,7 +66,7 @@ struct SQOuter;
|
||||
#include "sqconfig.h"
|
||||
|
||||
#define SQUIRREL_VERSION _SC("Squirrel 3.1 stable")
|
||||
#define SQUIRREL_COPYRIGHT _SC("Copyright (C) 2003-2016 Alberto Demichelis")
|
||||
#define SQUIRREL_COPYRIGHT _SC("Copyright (C) 2003-2017 Alberto Demichelis")
|
||||
#define SQUIRREL_AUTHOR _SC("Alberto Demichelis")
|
||||
#define SQUIRREL_VERSION_NUMBER 310
|
||||
|
||||
|
@ -1,4 +1,7 @@
|
||||
if(NOT DEFINED DISABLE_DYNAMIC)
|
||||
if(CMAKE_COMPILER_IS_GNUCXX)
|
||||
set_source_files_properties(sq.c PROPERTIES COMPILE_FLAGS -std=c99)
|
||||
endif()
|
||||
add_executable(sq sq.c)
|
||||
set_target_properties(sq PROPERTIES LINKER_LANGUAGE C)
|
||||
target_link_libraries(sq squirrel sqstdlib)
|
||||
|
@ -1,8 +1,10 @@
|
||||
SQUIRREL= ..
|
||||
|
||||
|
||||
OUT= $(SQUIRREL)/lib/libsqstdlib.a
|
||||
INCZ= -I$(SQUIRREL)/include -I. -Iinclude
|
||||
OUT?= $(SQUIRREL)/lib/libsqstdlib.a
|
||||
INCZ?= -I$(SQUIRREL)/include -I. -Iinclude
|
||||
DEFS= $(CC_EXTRA_FLAGS)
|
||||
LIB=
|
||||
|
||||
OBJS= \
|
||||
sqstdblob.o \
|
||||
@ -26,16 +28,16 @@ SRCS= \
|
||||
|
||||
|
||||
sq32:
|
||||
gcc -O2 -fno-exceptions -fno-rtti -Wall -fno-strict-aliasing -c $(SRCS) $(INCZ)
|
||||
gcc -O2 -fno-exceptions -fno-rtti -Wall -fno-strict-aliasing -c $(SRCS) $(INCZ) $(DEFS)
|
||||
ar rc $(OUT) *.o
|
||||
rm *.o
|
||||
|
||||
sqprof:
|
||||
gcc -O2 -pg -fno-exceptions -fno-rtti -pie -gstabs -g3 -Wall -fno-strict-aliasing -c $(SRCS) $(INCZ)
|
||||
gcc -O2 -pg -fno-exceptions -fno-rtti -pie -gstabs -g3 -Wall -fno-strict-aliasing -c $(SRCS) $(INCZ) $(DEFS)
|
||||
ar rc $(OUT) *.o
|
||||
rm *.o
|
||||
|
||||
sq64:
|
||||
gcc -O2 -m64 -fno-exceptions -D_SQ64 -fno-rtti -Wall -fno-strict-aliasing -c $(SRCS) $(INCZ)
|
||||
gcc -O2 -m64 -fno-exceptions -D_SQ64 -fno-rtti -Wall -fno-strict-aliasing -c $(SRCS) $(INCZ) $(DEFS)
|
||||
ar rc $(OUT) *.o
|
||||
rm *.o
|
||||
|
@ -1,9 +1,9 @@
|
||||
SQUIRREL= ..
|
||||
|
||||
|
||||
OUT= $(SQUIRREL)/lib/libsquirrel.a
|
||||
INCZ= -I$(SQUIRREL)/include -I. -Iinclude
|
||||
DEFS=
|
||||
OUT?= $(SQUIRREL)/lib/libsquirrel.a
|
||||
INCZ?= -I$(SQUIRREL)/include -I. -Iinclude
|
||||
DEFS= $(CC_EXTRA_FLAGS)
|
||||
LIB=
|
||||
|
||||
OBJS= \
|
||||
|
@ -16,7 +16,7 @@
|
||||
static bool sq_aux_gettypedarg(HSQUIRRELVM v,SQInteger idx,SQObjectType type,SQObjectPtr **o)
|
||||
{
|
||||
*o = &stack_get(v,idx);
|
||||
if(type(**o) != type){
|
||||
if(sq_type(**o) != type){
|
||||
SQObjectPtr oval = v->PrintObjVal(**o);
|
||||
v->Raise_Error(_SC("wrong argument type, expected '%s' got '%.50s'"),IdType2Name(type),_stringval(oval));
|
||||
return false;
|
||||
@ -150,7 +150,7 @@ void sq_notifyallexceptions(HSQUIRRELVM v, SQBool enable)
|
||||
|
||||
void sq_addref(HSQUIRRELVM v,HSQOBJECT *po)
|
||||
{
|
||||
if(!ISREFCOUNTED(type(*po))) return;
|
||||
if(!ISREFCOUNTED(sq_type(*po))) return;
|
||||
#ifdef NO_GARBAGE_COLLECTOR
|
||||
__AddRef(po->_type,po->_unVal);
|
||||
#else
|
||||
@ -160,7 +160,7 @@ void sq_addref(HSQUIRRELVM v,HSQOBJECT *po)
|
||||
|
||||
SQUnsignedInteger sq_getrefcount(HSQUIRRELVM v,HSQOBJECT *po)
|
||||
{
|
||||
if(!ISREFCOUNTED(type(*po))) return 0;
|
||||
if(!ISREFCOUNTED(sq_type(*po))) return 0;
|
||||
#ifdef NO_GARBAGE_COLLECTOR
|
||||
return po->_unVal.pRefCounted->_uiRef;
|
||||
#else
|
||||
@ -170,7 +170,7 @@ SQUnsignedInteger sq_getrefcount(HSQUIRRELVM v,HSQOBJECT *po)
|
||||
|
||||
SQBool sq_release(HSQUIRRELVM v,HSQOBJECT *po)
|
||||
{
|
||||
if(!ISREFCOUNTED(type(*po))) return SQTrue;
|
||||
if(!ISREFCOUNTED(sq_type(*po))) return SQTrue;
|
||||
#ifdef NO_GARBAGE_COLLECTOR
|
||||
bool ret = (po->_unVal.pRefCounted->_uiRef <= 1) ? SQTrue : SQFalse;
|
||||
__Release(po->_type,po->_unVal);
|
||||
@ -182,7 +182,7 @@ SQBool sq_release(HSQUIRRELVM v,HSQOBJECT *po)
|
||||
|
||||
SQUnsignedInteger sq_getvmrefcount(HSQUIRRELVM SQ_UNUSED_ARG(v), const HSQOBJECT *po)
|
||||
{
|
||||
if (!ISREFCOUNTED(type(*po))) return 0;
|
||||
if (!ISREFCOUNTED(sq_type(*po))) return 0;
|
||||
return po->_unVal.pRefCounted->_uiRef;
|
||||
}
|
||||
|
||||
@ -290,7 +290,7 @@ SQRESULT sq_newclass(HSQUIRRELVM v,SQBool hasbase)
|
||||
SQClass *baseclass = NULL;
|
||||
if(hasbase) {
|
||||
SQObjectPtr &base = stack_get(v,-1);
|
||||
if(type(base) != OT_CLASS)
|
||||
if(sq_type(base) != OT_CLASS)
|
||||
return sq_throwerror(v,_SC("invalid base type"));
|
||||
baseclass = _class(base);
|
||||
}
|
||||
@ -304,7 +304,7 @@ SQBool sq_instanceof(HSQUIRRELVM v)
|
||||
{
|
||||
SQObjectPtr &inst = stack_get(v,-1);
|
||||
SQObjectPtr &cl = stack_get(v,-2);
|
||||
if(type(inst) != OT_INSTANCE || type(cl) != OT_CLASS)
|
||||
if(sq_type(inst) != OT_INSTANCE || sq_type(cl) != OT_CLASS)
|
||||
return sq_throwerror(v,_SC("invalid param type"));
|
||||
return _instance(inst)->InstanceOf(_class(cl))?SQTrue:SQFalse;
|
||||
}
|
||||
@ -397,14 +397,14 @@ void sq_newclosure(HSQUIRRELVM v,SQFUNCTION func,SQUnsignedInteger nfreevars)
|
||||
SQRESULT sq_getclosureinfo(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger *nparams,SQUnsignedInteger *nfreevars)
|
||||
{
|
||||
SQObject o = stack_get(v, idx);
|
||||
if(type(o) == OT_CLOSURE) {
|
||||
if(sq_type(o) == OT_CLOSURE) {
|
||||
SQClosure *c = _closure(o);
|
||||
SQFunctionProto *proto = c->_function;
|
||||
*nparams = (SQUnsignedInteger)proto->_nparameters;
|
||||
*nfreevars = (SQUnsignedInteger)proto->_noutervalues;
|
||||
return SQ_OK;
|
||||
}
|
||||
else if(type(o) == OT_NATIVECLOSURE)
|
||||
else if(sq_type(o) == OT_NATIVECLOSURE)
|
||||
{
|
||||
SQNativeClosure *c = _nativeclosure(o);
|
||||
*nparams = (SQUnsignedInteger)c->_nparamscheck;
|
||||
@ -459,7 +459,7 @@ SQRESULT sq_bindenv(HSQUIRRELVM v,SQInteger idx)
|
||||
!sq_isclass(env) &&
|
||||
!sq_isinstance(env))
|
||||
return sq_throwerror(v,_SC("invalid environment"));
|
||||
SQWeakRef *w = _refcounted(env)->GetWeakRef(type(env));
|
||||
SQWeakRef *w = _refcounted(env)->GetWeakRef(sq_type(env));
|
||||
SQObjectPtr ret;
|
||||
if(sq_isclosure(o)) {
|
||||
SQClosure *c = _closure(o)->Clone();
|
||||
@ -524,7 +524,7 @@ SQRESULT sq_getclosureroot(HSQUIRRELVM v,SQInteger idx)
|
||||
SQRESULT sq_clear(HSQUIRRELVM v,SQInteger idx)
|
||||
{
|
||||
SQObject &o=stack_get(v,idx);
|
||||
switch(type(o)) {
|
||||
switch(sq_type(o)) {
|
||||
case OT_TABLE: _table(o)->Clear(); break;
|
||||
case OT_ARRAY: _array(o)->Resize(0); break;
|
||||
default:
|
||||
@ -619,7 +619,7 @@ void sq_push(HSQUIRRELVM v,SQInteger idx)
|
||||
|
||||
SQObjectType sq_gettype(HSQUIRRELVM v,SQInteger idx)
|
||||
{
|
||||
return type(stack_get(v, idx));
|
||||
return sq_type(stack_get(v, idx));
|
||||
}
|
||||
|
||||
SQRESULT sq_typeof(HSQUIRRELVM v,SQInteger idx)
|
||||
@ -723,7 +723,7 @@ SQRESULT sq_clone(HSQUIRRELVM v,SQInteger idx)
|
||||
SQInteger sq_getsize(HSQUIRRELVM v, SQInteger idx)
|
||||
{
|
||||
SQObjectPtr &o = stack_get(v, idx);
|
||||
SQObjectType type = type(o);
|
||||
SQObjectType type = sq_type(o);
|
||||
switch(type) {
|
||||
case OT_STRING: return _string(o)->_len;
|
||||
case OT_TABLE: return _table(o)->CountUsed();
|
||||
@ -754,7 +754,7 @@ SQRESULT sq_getuserdata(HSQUIRRELVM v,SQInteger idx,SQUserPointer *p,SQUserPoint
|
||||
SQRESULT sq_settypetag(HSQUIRRELVM v,SQInteger idx,SQUserPointer typetag)
|
||||
{
|
||||
SQObjectPtr &o = stack_get(v,idx);
|
||||
switch(type(o)) {
|
||||
switch(sq_type(o)) {
|
||||
case OT_USERDATA: _userdata(o)->_typetag = typetag; break;
|
||||
case OT_CLASS: _class(o)->_typetag = typetag; break;
|
||||
default: return sq_throwerror(v,_SC("invalid object type"));
|
||||
@ -764,7 +764,7 @@ SQRESULT sq_settypetag(HSQUIRRELVM v,SQInteger idx,SQUserPointer typetag)
|
||||
|
||||
SQRESULT sq_getobjtypetag(const HSQOBJECT *o,SQUserPointer * typetag)
|
||||
{
|
||||
switch(type(*o)) {
|
||||
switch(sq_type(*o)) {
|
||||
case OT_INSTANCE: *typetag = _instance(*o)->_class->_typetag; break;
|
||||
case OT_USERDATA: *typetag = _userdata(*o)->_typetag; break;
|
||||
case OT_CLASS: *typetag = _class(*o)->_typetag; break;
|
||||
@ -776,8 +776,8 @@ SQRESULT sq_getobjtypetag(const HSQOBJECT *o,SQUserPointer * typetag)
|
||||
SQRESULT sq_gettypetag(HSQUIRRELVM v,SQInteger idx,SQUserPointer *typetag)
|
||||
{
|
||||
SQObjectPtr &o = stack_get(v,idx);
|
||||
if (SQ_FAILED(sq_getobjtypetag(&o, typetag)))
|
||||
return SQ_ERROR;// this is not an error it should be a bool but would break backward compatibility
|
||||
if (SQ_FAILED(sq_getobjtypetag(&o, typetag)))
|
||||
return SQ_ERROR;// this is not an error it should be a bool but would break backward compatibility
|
||||
return SQ_OK;
|
||||
}
|
||||
|
||||
@ -792,7 +792,7 @@ SQRESULT sq_getuserpointer(HSQUIRRELVM v, SQInteger idx, SQUserPointer *p)
|
||||
SQRESULT sq_setinstanceup(HSQUIRRELVM v, SQInteger idx, SQUserPointer p)
|
||||
{
|
||||
SQObjectPtr &o = stack_get(v,idx);
|
||||
if(type(o) != OT_INSTANCE) return sq_throwerror(v,_SC("the object is not a class instance"));
|
||||
if(sq_type(o) != OT_INSTANCE) return sq_throwerror(v,_SC("the object is not a class instance"));
|
||||
_instance(o)->_userpointer = p;
|
||||
return SQ_OK;
|
||||
}
|
||||
@ -800,7 +800,7 @@ SQRESULT sq_setinstanceup(HSQUIRRELVM v, SQInteger idx, SQUserPointer p)
|
||||
SQRESULT sq_setclassudsize(HSQUIRRELVM v, SQInteger idx, SQInteger udsize)
|
||||
{
|
||||
SQObjectPtr &o = stack_get(v,idx);
|
||||
if(type(o) != OT_CLASS) return sq_throwerror(v,_SC("the object is not a class"));
|
||||
if(sq_type(o) != OT_CLASS) return sq_throwerror(v,_SC("the object is not a class"));
|
||||
if(_class(o)->_locked) return sq_throwerror(v,_SC("the class is locked"));
|
||||
_class(o)->_udsize = udsize;
|
||||
return SQ_OK;
|
||||
@ -810,7 +810,7 @@ SQRESULT sq_setclassudsize(HSQUIRRELVM v, SQInteger idx, SQInteger udsize)
|
||||
SQRESULT sq_getinstanceup(HSQUIRRELVM v, SQInteger idx, SQUserPointer *p,SQUserPointer typetag)
|
||||
{
|
||||
SQObjectPtr &o = stack_get(v,idx);
|
||||
if(type(o) != OT_INSTANCE) return sq_throwerror(v,_SC("the object is not a class instance"));
|
||||
if(sq_type(o) != OT_INSTANCE) return sq_throwerror(v,_SC("the object is not a class instance"));
|
||||
(*p) = _instance(o)->_userpointer;
|
||||
if(typetag != 0) {
|
||||
SQClass *cl = _instance(o)->_class;
|
||||
@ -867,9 +867,9 @@ SQRESULT sq_newslot(HSQUIRRELVM v, SQInteger idx, SQBool bstatic)
|
||||
{
|
||||
sq_aux_paramscheck(v, 3);
|
||||
SQObjectPtr &self = stack_get(v, idx);
|
||||
if(type(self) == OT_TABLE || type(self) == OT_CLASS) {
|
||||
if(sq_type(self) == OT_TABLE || sq_type(self) == OT_CLASS) {
|
||||
SQObjectPtr &key = v->GetUp(-2);
|
||||
if(type(key) == OT_NULL) return sq_throwerror(v, _SC("null is not a valid key"));
|
||||
if(sq_type(key) == OT_NULL) return sq_throwerror(v, _SC("null is not a valid key"));
|
||||
v->NewSlot(self, key, v->GetUp(-1),bstatic?true:false);
|
||||
v->Pop(2);
|
||||
}
|
||||
@ -882,7 +882,7 @@ SQRESULT sq_deleteslot(HSQUIRRELVM v,SQInteger idx,SQBool pushval)
|
||||
SQObjectPtr *self;
|
||||
_GETSAFE_OBJ(v, idx, OT_TABLE,self);
|
||||
SQObjectPtr &key = v->GetUp(-1);
|
||||
if(type(key) == OT_NULL) return sq_throwerror(v, _SC("null is not a valid key"));
|
||||
if(sq_type(key) == OT_NULL) return sq_throwerror(v, _SC("null is not a valid key"));
|
||||
SQObjectPtr res;
|
||||
if(!v->DeleteSlot(*self, key, res)){
|
||||
v->Pop();
|
||||
@ -907,11 +907,11 @@ SQRESULT sq_rawset(HSQUIRRELVM v,SQInteger idx)
|
||||
{
|
||||
SQObjectPtr &self = stack_get(v, idx);
|
||||
SQObjectPtr &key = v->GetUp(-2);
|
||||
if(type(key) == OT_NULL) {
|
||||
if(sq_type(key) == OT_NULL) {
|
||||
v->Pop(2);
|
||||
return sq_throwerror(v, _SC("null key"));
|
||||
}
|
||||
switch(type(self)) {
|
||||
switch(sq_type(self)) {
|
||||
case OT_TABLE:
|
||||
_table(self)->NewSlot(key, v->GetUp(-1));
|
||||
v->Pop(2);
|
||||
@ -944,22 +944,28 @@ SQRESULT sq_rawset(HSQUIRRELVM v,SQInteger idx)
|
||||
SQRESULT sq_newmember(HSQUIRRELVM v,SQInteger idx,SQBool bstatic)
|
||||
{
|
||||
SQObjectPtr &self = stack_get(v, idx);
|
||||
if(type(self) != OT_CLASS) return sq_throwerror(v, _SC("new member only works with classes"));
|
||||
if(sq_type(self) != OT_CLASS) return sq_throwerror(v, _SC("new member only works with classes"));
|
||||
SQObjectPtr &key = v->GetUp(-3);
|
||||
if(type(key) == OT_NULL) return sq_throwerror(v, _SC("null key"));
|
||||
if(!v->NewSlotA(self,key,v->GetUp(-2),v->GetUp(-1),bstatic?true:false,false))
|
||||
if(sq_type(key) == OT_NULL) return sq_throwerror(v, _SC("null key"));
|
||||
if(!v->NewSlotA(self,key,v->GetUp(-2),v->GetUp(-1),bstatic?true:false,false)) {
|
||||
v->Pop(3);
|
||||
return SQ_ERROR;
|
||||
}
|
||||
v->Pop(3);
|
||||
return SQ_OK;
|
||||
}
|
||||
|
||||
SQRESULT sq_rawnewmember(HSQUIRRELVM v,SQInteger idx,SQBool bstatic)
|
||||
{
|
||||
SQObjectPtr &self = stack_get(v, idx);
|
||||
if(type(self) != OT_CLASS) return sq_throwerror(v, _SC("new member only works with classes"));
|
||||
if(sq_type(self) != OT_CLASS) return sq_throwerror(v, _SC("new member only works with classes"));
|
||||
SQObjectPtr &key = v->GetUp(-3);
|
||||
if(type(key) == OT_NULL) return sq_throwerror(v, _SC("null key"));
|
||||
if(!v->NewSlotA(self,key,v->GetUp(-2),v->GetUp(-1),bstatic?true:false,true))
|
||||
if(sq_type(key) == OT_NULL) return sq_throwerror(v, _SC("null key"));
|
||||
if(!v->NewSlotA(self,key,v->GetUp(-2),v->GetUp(-1),bstatic?true:false,true)) {
|
||||
v->Pop(3);
|
||||
return SQ_ERROR;
|
||||
}
|
||||
v->Pop(3);
|
||||
return SQ_OK;
|
||||
}
|
||||
|
||||
@ -967,23 +973,23 @@ SQRESULT sq_setdelegate(HSQUIRRELVM v,SQInteger idx)
|
||||
{
|
||||
SQObjectPtr &self = stack_get(v, idx);
|
||||
SQObjectPtr &mt = v->GetUp(-1);
|
||||
SQObjectType type = type(self);
|
||||
SQObjectType type = sq_type(self);
|
||||
switch(type) {
|
||||
case OT_TABLE:
|
||||
if(type(mt) == OT_TABLE) {
|
||||
if(sq_type(mt) == OT_TABLE) {
|
||||
if(!_table(self)->SetDelegate(_table(mt))) {
|
||||
return sq_throwerror(v, _SC("delagate cycle"));
|
||||
}
|
||||
v->Pop();
|
||||
}
|
||||
else if(type(mt)==OT_NULL) {
|
||||
else if(sq_type(mt)==OT_NULL) {
|
||||
_table(self)->SetDelegate(NULL); v->Pop(); }
|
||||
else return sq_aux_invalidtype(v,type);
|
||||
break;
|
||||
case OT_USERDATA:
|
||||
if(type(mt)==OT_TABLE) {
|
||||
if(sq_type(mt)==OT_TABLE) {
|
||||
_userdata(self)->SetDelegate(_table(mt)); v->Pop(); }
|
||||
else if(type(mt)==OT_NULL) {
|
||||
else if(sq_type(mt)==OT_NULL) {
|
||||
_userdata(self)->SetDelegate(NULL); v->Pop(); }
|
||||
else return sq_aux_invalidtype(v, type);
|
||||
break;
|
||||
@ -1014,7 +1020,7 @@ SQRESULT sq_rawdeleteslot(HSQUIRRELVM v,SQInteger idx,SQBool pushval)
|
||||
SQRESULT sq_getdelegate(HSQUIRRELVM v,SQInteger idx)
|
||||
{
|
||||
SQObjectPtr &self=stack_get(v,idx);
|
||||
switch(type(self)){
|
||||
switch(sq_type(self)){
|
||||
case OT_TABLE:
|
||||
case OT_USERDATA:
|
||||
if(!_delegable(self)->_delegate){
|
||||
@ -1043,7 +1049,7 @@ SQRESULT sq_rawget(HSQUIRRELVM v,SQInteger idx)
|
||||
{
|
||||
SQObjectPtr &self=stack_get(v,idx);
|
||||
SQObjectPtr &obj = v->GetUp(-1);
|
||||
switch(type(self)) {
|
||||
switch(sq_type(self)) {
|
||||
case OT_TABLE:
|
||||
if(_table(self)->Get(obj,obj))
|
||||
return SQ_OK;
|
||||
@ -1093,7 +1099,7 @@ const SQChar *sq_getlocal(HSQUIRRELVM v,SQUnsignedInteger level,SQUnsignedIntege
|
||||
stackbase-=ci._prevstkbase;
|
||||
}
|
||||
SQVM::CallInfo &ci=v->_callsstack[lvl];
|
||||
if(type(ci._closure)!=OT_CLOSURE)
|
||||
if(sq_type(ci._closure)!=OT_CLOSURE)
|
||||
return NULL;
|
||||
SQClosure *c=_closure(ci._closure);
|
||||
SQFunctionProto *func=c->_function;
|
||||
@ -1154,7 +1160,7 @@ SQRESULT sq_reservestack(HSQUIRRELVM v,SQInteger nsize)
|
||||
|
||||
SQRESULT sq_resume(HSQUIRRELVM v,SQBool retval,SQBool raiseerror)
|
||||
{
|
||||
if (type(v->GetUp(-1)) == OT_GENERATOR)
|
||||
if (sq_type(v->GetUp(-1)) == OT_GENERATOR)
|
||||
{
|
||||
v->PushNull(); //retval
|
||||
if (!v->Execute(v->GetUp(-2), 0, v->_top, v->GetUp(-1), raiseerror, SQVM::ET_RESUME_GENERATOR))
|
||||
@ -1236,7 +1242,7 @@ SQRESULT sq_wakeupvm(HSQUIRRELVM v,SQBool wakeupret,SQBool retval,SQBool raiseer
|
||||
void sq_setreleasehook(HSQUIRRELVM v,SQInteger idx,SQRELEASEHOOK hook)
|
||||
{
|
||||
SQObjectPtr &ud=stack_get(v,idx);
|
||||
switch( type(ud) ) {
|
||||
switch(sq_type(ud) ) {
|
||||
case OT_USERDATA: _userdata(ud)->_hook = hook; break;
|
||||
case OT_INSTANCE: _instance(ud)->_hook = hook; break;
|
||||
case OT_CLASS: _class(ud)->_hook = hook; break;
|
||||
@ -1247,7 +1253,7 @@ void sq_setreleasehook(HSQUIRRELVM v,SQInteger idx,SQRELEASEHOOK hook)
|
||||
SQRELEASEHOOK sq_getreleasehook(HSQUIRRELVM v,SQInteger idx)
|
||||
{
|
||||
SQObjectPtr &ud=stack_get(v,idx);
|
||||
switch( type(ud) ) {
|
||||
switch(sq_type(ud) ) {
|
||||
case OT_USERDATA: return _userdata(ud)->_hook; break;
|
||||
case OT_INSTANCE: return _instance(ud)->_hook; break;
|
||||
case OT_CLASS: return _class(ud)->_hook; break;
|
||||
@ -1327,7 +1333,7 @@ const SQChar *sq_getfreevariable(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger n
|
||||
{
|
||||
SQObjectPtr &self=stack_get(v,idx);
|
||||
const SQChar *name = NULL;
|
||||
switch(type(self))
|
||||
switch(sq_type(self))
|
||||
{
|
||||
case OT_CLOSURE:{
|
||||
SQClosure *clo = _closure(self);
|
||||
@ -1355,7 +1361,7 @@ const SQChar *sq_getfreevariable(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger n
|
||||
SQRESULT sq_setfreevariable(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger nval)
|
||||
{
|
||||
SQObjectPtr &self=stack_get(v,idx);
|
||||
switch(type(self))
|
||||
switch(sq_type(self))
|
||||
{
|
||||
case OT_CLOSURE:{
|
||||
SQFunctionProto *fp = _closure(self)->_function;
|
||||
@ -1372,7 +1378,7 @@ SQRESULT sq_setfreevariable(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger nval)
|
||||
else return sq_throwerror(v,_SC("invalid free var index"));
|
||||
break;
|
||||
default:
|
||||
return sq_aux_invalidtype(v,type(self));
|
||||
return sq_aux_invalidtype(v, sq_type(self));
|
||||
}
|
||||
v->Pop();
|
||||
return SQ_OK;
|
||||
@ -1385,7 +1391,7 @@ SQRESULT sq_setattributes(HSQUIRRELVM v,SQInteger idx)
|
||||
SQObjectPtr &key = stack_get(v,-2);
|
||||
SQObjectPtr &val = stack_get(v,-1);
|
||||
SQObjectPtr attrs;
|
||||
if(type(key) == OT_NULL) {
|
||||
if(sq_type(key) == OT_NULL) {
|
||||
attrs = _class(*o)->_attributes;
|
||||
_class(*o)->_attributes = val;
|
||||
v->Pop(2);
|
||||
@ -1406,7 +1412,7 @@ SQRESULT sq_getattributes(HSQUIRRELVM v,SQInteger idx)
|
||||
_GETSAFE_OBJ(v, idx, OT_CLASS,o);
|
||||
SQObjectPtr &key = stack_get(v,-1);
|
||||
SQObjectPtr attrs;
|
||||
if(type(key) == OT_NULL) {
|
||||
if(sq_type(key) == OT_NULL) {
|
||||
attrs = _class(*o)->_attributes;
|
||||
v->Pop();
|
||||
v->Push(attrs);
|
||||
@ -1438,7 +1444,7 @@ SQRESULT sq_getmemberhandle(HSQUIRRELVM v,SQInteger idx,HSQMEMBERHANDLE *handle)
|
||||
|
||||
SQRESULT _getmemberbyhandle(HSQUIRRELVM v,SQObjectPtr &self,const HSQMEMBERHANDLE *handle,SQObjectPtr *&val)
|
||||
{
|
||||
switch(type(self)) {
|
||||
switch(sq_type(self)) {
|
||||
case OT_INSTANCE: {
|
||||
SQInstance *i = _instance(self);
|
||||
if(handle->_static) {
|
||||
@ -1521,8 +1527,8 @@ SQRESULT sq_createinstance(HSQUIRRELVM v,SQInteger idx)
|
||||
void sq_weakref(HSQUIRRELVM v,SQInteger idx)
|
||||
{
|
||||
SQObject &o=stack_get(v,idx);
|
||||
if(ISREFCOUNTED(type(o))) {
|
||||
v->Push(_refcounted(o)->GetWeakRef(type(o)));
|
||||
if(ISREFCOUNTED(sq_type(o))) {
|
||||
v->Push(_refcounted(o)->GetWeakRef(sq_type(o)));
|
||||
return;
|
||||
}
|
||||
v->Push(o);
|
||||
@ -1531,7 +1537,7 @@ void sq_weakref(HSQUIRRELVM v,SQInteger idx)
|
||||
SQRESULT sq_getweakrefval(HSQUIRRELVM v,SQInteger idx)
|
||||
{
|
||||
SQObjectPtr &o = stack_get(v,idx);
|
||||
if(type(o) != OT_WEAKREF) {
|
||||
if(sq_type(o) != OT_WEAKREF) {
|
||||
return sq_throwerror(v,_SC("the object must be a weakref"));
|
||||
}
|
||||
v->Push(_weakref(o)->_obj);
|
||||
@ -1560,7 +1566,7 @@ SQRESULT sq_getdefaultdelegate(HSQUIRRELVM v,SQObjectType t)
|
||||
SQRESULT sq_next(HSQUIRRELVM v,SQInteger idx)
|
||||
{
|
||||
SQObjectPtr o=stack_get(v,idx),&refpos = stack_get(v,-1),realkey,val;
|
||||
if(type(o) == OT_GENERATOR) {
|
||||
if(sq_type(o) == OT_GENERATOR) {
|
||||
return sq_throwerror(v,_SC("cannot iterate a generator"));
|
||||
}
|
||||
int faketojump;
|
||||
|
@ -169,7 +169,7 @@ static SQInteger get_slice_params(HSQUIRRELVM v,SQInteger &sidx,SQInteger &eidx,
|
||||
o=stack_get(v,1);
|
||||
if(top>1){
|
||||
SQObjectPtr &start=stack_get(v,2);
|
||||
if(type(start)!=OT_NULL && sq_isnumeric(start)){
|
||||
if(sq_type(start)!=OT_NULL && sq_isnumeric(start)){
|
||||
sidx=tointeger(start);
|
||||
}
|
||||
}
|
||||
@ -340,7 +340,7 @@ static SQInteger default_delegate_len(HSQUIRRELVM v)
|
||||
static SQInteger default_delegate_tofloat(HSQUIRRELVM v)
|
||||
{
|
||||
SQObjectPtr &o=stack_get(v,1);
|
||||
switch(type(o)){
|
||||
switch(sq_type(o)){
|
||||
case OT_STRING:{
|
||||
SQObjectPtr res;
|
||||
if(str2num(_stringval(o),res,10)){
|
||||
@ -369,7 +369,7 @@ static SQInteger default_delegate_tointeger(HSQUIRRELVM v)
|
||||
if(sq_gettop(v) > 1) {
|
||||
sq_getinteger(v,2,&base);
|
||||
}
|
||||
switch(type(o)){
|
||||
switch(sq_type(o)){
|
||||
case OT_STRING:{
|
||||
SQObjectPtr res;
|
||||
if(str2num(_stringval(o),res,base)){
|
||||
@ -936,7 +936,7 @@ static SQInteger closure_setroot(HSQUIRRELVM v)
|
||||
static SQInteger closure_getinfos(HSQUIRRELVM v) {
|
||||
SQObject o = stack_get(v,1);
|
||||
SQTable *res = SQTable::Create(_ss(v),4);
|
||||
if(type(o) == OT_CLOSURE) {
|
||||
if(sq_type(o) == OT_CLOSURE) {
|
||||
SQFunctionProto *f = _closure(o)->_function;
|
||||
SQInteger nparams = f->_nparameters + (f->_varparams?1:0);
|
||||
SQObjectPtr params = SQArray::Create(_ss(v),nparams);
|
||||
@ -1015,7 +1015,7 @@ const SQRegFunction SQSharedState::_generator_default_delegate_funcz[]={
|
||||
static SQInteger thread_call(HSQUIRRELVM v)
|
||||
{
|
||||
SQObjectPtr o = stack_get(v,1);
|
||||
if(type(o) == OT_THREAD) {
|
||||
if(sq_type(o) == OT_THREAD) {
|
||||
SQInteger nparams = sq_gettop(v);
|
||||
_thread(o)->Push(_thread(o)->_roottable);
|
||||
for(SQInteger i = 2; i<(nparams+1); i++)
|
||||
@ -1034,7 +1034,7 @@ static SQInteger thread_call(HSQUIRRELVM v)
|
||||
static SQInteger thread_wakeup(HSQUIRRELVM v)
|
||||
{
|
||||
SQObjectPtr o = stack_get(v,1);
|
||||
if(type(o) == OT_THREAD) {
|
||||
if(sq_type(o) == OT_THREAD) {
|
||||
SQVM *thread = _thread(o);
|
||||
SQInteger state = sq_getvmstate(thread);
|
||||
if(state != SQ_VMSTATE_SUSPENDED) {
|
||||
@ -1070,7 +1070,7 @@ static SQInteger thread_wakeup(HSQUIRRELVM v)
|
||||
static SQInteger thread_wakeupthrow(HSQUIRRELVM v)
|
||||
{
|
||||
SQObjectPtr o = stack_get(v,1);
|
||||
if(type(o) == OT_THREAD) {
|
||||
if(sq_type(o) == OT_THREAD) {
|
||||
SQVM *thread = _thread(o);
|
||||
SQInteger state = sq_getvmstate(thread);
|
||||
if(state != SQ_VMSTATE_SUSPENDED) {
|
||||
@ -1130,7 +1130,7 @@ static SQInteger thread_getstatus(HSQUIRRELVM v)
|
||||
static SQInteger thread_getstackinfos(HSQUIRRELVM v)
|
||||
{
|
||||
SQObjectPtr o = stack_get(v,1);
|
||||
if(type(o) == OT_THREAD) {
|
||||
if(sq_type(o) == OT_THREAD) {
|
||||
SQVM *thread = _thread(o);
|
||||
SQInteger threadtop = sq_gettop(thread);
|
||||
SQInteger level;
|
||||
@ -1139,7 +1139,7 @@ static SQInteger thread_getstackinfos(HSQUIRRELVM v)
|
||||
if(SQ_FAILED(res))
|
||||
{
|
||||
sq_settop(thread,threadtop);
|
||||
if(type(thread->_lasterror) == OT_STRING) {
|
||||
if(sq_type(thread->_lasterror) == OT_STRING) {
|
||||
sq_throwerror(v,_stringval(thread->_lasterror));
|
||||
}
|
||||
else {
|
||||
|
@ -53,7 +53,7 @@ SQClass::~SQClass()
|
||||
bool SQClass::NewSlot(SQSharedState *ss,const SQObjectPtr &key,const SQObjectPtr &val,bool bstatic)
|
||||
{
|
||||
SQObjectPtr temp;
|
||||
bool belongs_to_static_table = type(val) == OT_CLOSURE || type(val) == OT_NATIVECLOSURE || bstatic;
|
||||
bool belongs_to_static_table = sq_type(val) == OT_CLOSURE || sq_type(val) == OT_NATIVECLOSURE || bstatic;
|
||||
if(_locked && !belongs_to_static_table)
|
||||
return false; //the class already has an instance so cannot be modified
|
||||
if(_members->Get(key,temp) && _isfield(temp)) //overrides the default value
|
||||
@ -63,18 +63,18 @@ bool SQClass::NewSlot(SQSharedState *ss,const SQObjectPtr &key,const SQObjectPtr
|
||||
}
|
||||
if(belongs_to_static_table) {
|
||||
SQInteger mmidx;
|
||||
if((type(val) == OT_CLOSURE || type(val) == OT_NATIVECLOSURE) &&
|
||||
if((sq_type(val) == OT_CLOSURE || sq_type(val) == OT_NATIVECLOSURE) &&
|
||||
(mmidx = ss->GetMetaMethodIdxByName(key)) != -1) {
|
||||
_metamethods[mmidx] = val;
|
||||
}
|
||||
else {
|
||||
SQObjectPtr theval = val;
|
||||
if(_base && type(val) == OT_CLOSURE) {
|
||||
if(_base && sq_type(val) == OT_CLOSURE) {
|
||||
theval = _closure(val)->Clone();
|
||||
_closure(theval)->_base = _base;
|
||||
__ObjAddRef(_base); //ref for the closure
|
||||
}
|
||||
if(type(temp) == OT_NULL) {
|
||||
if(sq_type(temp) == OT_NULL) {
|
||||
bool isconstructor;
|
||||
SQVM::IsEqual(ss->_constructoridx, key, isconstructor);
|
||||
if(isconstructor) {
|
||||
@ -191,7 +191,7 @@ SQInstance::~SQInstance()
|
||||
|
||||
bool SQInstance::GetMetaMethod(SQVM* SQ_UNUSED_ARG(v),SQMetaMethod mm,SQObjectPtr &res)
|
||||
{
|
||||
if(type(_class->_metamethods[mm]) != OT_NULL) {
|
||||
if(sq_type(_class->_metamethods[mm]) != OT_NULL) {
|
||||
res = _class->_metamethods[mm];
|
||||
return true;
|
||||
}
|
||||
|
@ -191,7 +191,7 @@ public:
|
||||
}
|
||||
else {
|
||||
if(_raiseerror && _ss(_vm)->_compilererrorhandler) {
|
||||
_ss(_vm)->_compilererrorhandler(_vm, _compilererror, type(_sourcename) == OT_STRING?_stringval(_sourcename):_SC("unknown"),
|
||||
_ss(_vm)->_compilererrorhandler(_vm, _compilererror, sq_type(_sourcename) == OT_STRING?_stringval(_sourcename):_SC("unknown"),
|
||||
_lex._currentline, _lex._currentcolumn);
|
||||
}
|
||||
_vm->_lasterror = SQString::Create(_ss(_vm), _compilererror, -1);
|
||||
@ -466,7 +466,7 @@ public:
|
||||
INVOKE_EXP(f);
|
||||
SQInteger op1 = _fs->PopTarget();SQInteger op2 = _fs->PopTarget();
|
||||
_fs->AddInstruction(op, _fs->PushTarget(), op1, op2, op3);
|
||||
_es.etype = EXPR;
|
||||
_es.etype = EXPR;
|
||||
}
|
||||
void LogicalOrExp()
|
||||
{
|
||||
@ -483,7 +483,7 @@ public:
|
||||
if(trg != second_exp) _fs->AddInstruction(_OP_MOVE, trg, second_exp);
|
||||
_fs->SnoozeOpt();
|
||||
_fs->SetIntructionParam(jpos, 1, (_fs->GetCurrentPos() - jpos));
|
||||
_es.etype = EXPR;
|
||||
_es.etype = EXPR;
|
||||
break;
|
||||
}else return;
|
||||
}
|
||||
@ -503,7 +503,7 @@ public:
|
||||
if(trg != second_exp) _fs->AddInstruction(_OP_MOVE, trg, second_exp);
|
||||
_fs->SnoozeOpt();
|
||||
_fs->SetIntructionParam(jpos, 1, (_fs->GetCurrentPos() - jpos));
|
||||
_es.etype = EXPR;
|
||||
_es.etype = EXPR;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -765,7 +765,7 @@ public:
|
||||
/* Handle named constant */
|
||||
SQObjectPtr constval;
|
||||
SQObject constid;
|
||||
if(type(constant) == OT_TABLE) {
|
||||
if(sq_type(constant) == OT_TABLE) {
|
||||
Expect('.');
|
||||
constid = Expect(TK_IDENTIFIER);
|
||||
if(!_table(constant)->Get(constid, constval)) {
|
||||
@ -779,7 +779,7 @@ public:
|
||||
_es.epos = _fs->PushTarget();
|
||||
|
||||
/* generate direct or literal function depending on size */
|
||||
SQObjectType ctype = type(constval);
|
||||
SQObjectType ctype = sq_type(constval);
|
||||
switch(ctype) {
|
||||
case OT_INTEGER: EmitLoadConstInt(_integer(constval),_es.epos); break;
|
||||
case OT_FLOAT: EmitLoadConstFloat(_float(constval),_es.epos); break;
|
||||
|
@ -17,8 +17,8 @@ SQRESULT sq_getfunctioninfo(HSQUIRRELVM v,SQInteger level,SQFunctionInfo *fi)
|
||||
SQClosure *c = _closure(ci._closure);
|
||||
SQFunctionProto *proto = c->_function;
|
||||
fi->funcid = proto;
|
||||
fi->name = type(proto->_name) == OT_STRING?_stringval(proto->_name):_SC("unknown");
|
||||
fi->source = type(proto->_sourcename) == OT_STRING?_stringval(proto->_sourcename):_SC("unknown");
|
||||
fi->name = sq_type(proto->_name) == OT_STRING?_stringval(proto->_name):_SC("unknown");
|
||||
fi->source = sq_type(proto->_sourcename) == OT_STRING?_stringval(proto->_sourcename):_SC("unknown");
|
||||
fi->line = proto->_lineinfos[0]._line;
|
||||
return SQ_OK;
|
||||
}
|
||||
@ -32,12 +32,12 @@ SQRESULT sq_stackinfos(HSQUIRRELVM v, SQInteger level, SQStackInfos *si)
|
||||
if (cssize > level) {
|
||||
memset(si, 0, sizeof(SQStackInfos));
|
||||
SQVM::CallInfo &ci = v->_callsstack[cssize-level-1];
|
||||
switch (type(ci._closure)) {
|
||||
switch (sq_type(ci._closure)) {
|
||||
case OT_CLOSURE:{
|
||||
SQFunctionProto *func = _closure(ci._closure)->_function;
|
||||
if (type(func->_name) == OT_STRING)
|
||||
if (sq_type(func->_name) == OT_STRING)
|
||||
si->funcname = _stringval(func->_name);
|
||||
if (type(func->_sourcename) == OT_STRING)
|
||||
if (sq_type(func->_sourcename) == OT_STRING)
|
||||
si->source = _stringval(func->_sourcename);
|
||||
si->line = func->GetLine(ci._ip);
|
||||
}
|
||||
@ -45,7 +45,7 @@ SQRESULT sq_stackinfos(HSQUIRRELVM v, SQInteger level, SQStackInfos *si)
|
||||
case OT_NATIVECLOSURE:
|
||||
si->source = _SC("NATIVE");
|
||||
si->funcname = _SC("unknown");
|
||||
if(type(_nativeclosure(ci._closure)->_name) == OT_STRING)
|
||||
if(sq_type(_nativeclosure(ci._closure)->_name) == OT_STRING)
|
||||
si->funcname = _stringval(_nativeclosure(ci._closure)->_name);
|
||||
si->line = -1;
|
||||
break;
|
||||
@ -73,7 +73,7 @@ void SQVM::Raise_Error(const SQObjectPtr &desc)
|
||||
|
||||
SQString *SQVM::PrintObjVal(const SQObjectPtr &o)
|
||||
{
|
||||
switch(type(o)) {
|
||||
switch(sq_type(o)) {
|
||||
case OT_STRING: return _string(o);
|
||||
case OT_INTEGER:
|
||||
scsprintf(_sp(sq_rsl(NUMBER_MAX_CHAR+1)),sq_rsl(NUMBER_MAX_CHAR), _PRINT_INT_FMT, _integer(o));
|
||||
|
@ -77,7 +77,7 @@ SQInstructionDesc g_InstrDesc[]={
|
||||
#endif
|
||||
void DumpLiteral(SQObjectPtr &o)
|
||||
{
|
||||
switch(type(o)){
|
||||
switch(sq_type(o)){
|
||||
case OT_STRING: scprintf(_SC("\"%s\""),_stringval(o));break;
|
||||
case OT_FLOAT: scprintf(_SC("{%f}"),_float(o));break;
|
||||
case OT_INTEGER: scprintf(_SC("{") _PRINT_INT_FMT _SC("}"),_integer(o));break;
|
||||
@ -290,7 +290,7 @@ SQInteger SQFuncState::PopTarget()
|
||||
SQUnsignedInteger npos=_targetstack.back();
|
||||
assert(npos < _vlocals.size());
|
||||
SQLocalVarInfo &t = _vlocals[npos];
|
||||
if(type(t._name)==OT_NULL){
|
||||
if(sq_type(t._name)==OT_NULL){
|
||||
_vlocals.pop_back();
|
||||
}
|
||||
_targetstack.pop_back();
|
||||
@ -322,7 +322,7 @@ void SQFuncState::SetStackSize(SQInteger n)
|
||||
while(size>n){
|
||||
size--;
|
||||
SQLocalVarInfo lvi = _vlocals.back();
|
||||
if(type(lvi._name)!=OT_NULL){
|
||||
if(sq_type(lvi._name)!=OT_NULL){
|
||||
if(lvi._end_op == UINT_MINUS_ONE) { //this means is an outer
|
||||
_outers--;
|
||||
}
|
||||
@ -346,7 +346,7 @@ bool SQFuncState::IsConstant(const SQObject &name,SQObject &e)
|
||||
bool SQFuncState::IsLocal(SQUnsignedInteger stkpos)
|
||||
{
|
||||
if(stkpos>=_vlocals.size())return false;
|
||||
else if(type(_vlocals[stkpos]._name)!=OT_NULL)return true;
|
||||
else if(sq_type(_vlocals[stkpos]._name)!=OT_NULL)return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -369,7 +369,7 @@ SQInteger SQFuncState::GetLocalVariable(const SQObject &name)
|
||||
SQInteger locals=_vlocals.size();
|
||||
while(locals>=1){
|
||||
SQLocalVarInfo &lvi = _vlocals[locals-1];
|
||||
if(type(lvi._name)==OT_STRING && _string(lvi._name)==_string(name)){
|
||||
if(sq_type(lvi._name)==OT_STRING && _string(lvi._name)==_string(name)){
|
||||
return locals-1;
|
||||
}
|
||||
locals--;
|
||||
|
@ -43,7 +43,7 @@ const SQChar *IdType2Name(SQObjectType type)
|
||||
|
||||
const SQChar *GetTypeName(const SQObjectPtr &obj1)
|
||||
{
|
||||
return IdType2Name(type(obj1));
|
||||
return IdType2Name(sq_type(obj1));
|
||||
}
|
||||
|
||||
SQString *SQString::Create(SQSharedState *ss,const SQChar *s,SQInteger len)
|
||||
@ -72,7 +72,7 @@ SQInteger SQString::Next(const SQObjectPtr &refpos, SQObjectPtr &outkey, SQObjec
|
||||
|
||||
SQUnsignedInteger TranslateIndex(const SQObjectPtr &idx)
|
||||
{
|
||||
switch(type(idx)){
|
||||
switch(sq_type(idx)){
|
||||
case OT_NULL:
|
||||
return 0;
|
||||
case OT_INTEGER:
|
||||
@ -139,7 +139,7 @@ bool SQGenerator::Yield(SQVM *v,SQInteger target)
|
||||
|
||||
_stack.resize(size);
|
||||
SQObject _this = v->_stack[v->_stackbase];
|
||||
_stack._vals[0] = ISREFCOUNTED(type(_this)) ? SQObjectPtr(_refcounted(_this)->GetWeakRef(type(_this))) : _this;
|
||||
_stack._vals[0] = ISREFCOUNTED(sq_type(_this)) ? SQObjectPtr(_refcounted(_this)->GetWeakRef(sq_type(_this))) : _this;
|
||||
for(SQInteger n =1; n<target; n++) {
|
||||
_stack._vals[n] = v->_stack[v->_stackbase+n];
|
||||
}
|
||||
@ -191,7 +191,7 @@ bool SQGenerator::Resume(SQVM *v,SQObjectPtr &dest)
|
||||
et._stacksize += newbase;
|
||||
}
|
||||
SQObject _this = _stack._vals[0];
|
||||
v->_stack[v->_stackbase] = type(_this) == OT_WEAKREF ? _weakref(_this)->_obj : _this;
|
||||
v->_stack[v->_stackbase] = sq_type(_this) == OT_WEAKREF ? _weakref(_this)->_obj : _this;
|
||||
|
||||
for(SQInteger n = 1; n<size; n++) {
|
||||
v->_stack[v->_stackbase+n] = _stack._vals[n];
|
||||
@ -312,9 +312,9 @@ bool CheckTag(HSQUIRRELVM v,SQWRITEFUNC read,SQUserPointer up,SQUnsignedInteger3
|
||||
|
||||
bool WriteObject(HSQUIRRELVM v,SQUserPointer up,SQWRITEFUNC write,SQObjectPtr &o)
|
||||
{
|
||||
SQUnsignedInteger32 _type = (SQUnsignedInteger32)type(o);
|
||||
SQUnsignedInteger32 _type = (SQUnsignedInteger32)sq_type(o);
|
||||
_CHECK_IO(SafeWrite(v,write,up,&_type,sizeof(_type)));
|
||||
switch(type(o)){
|
||||
switch(sq_type(o)){
|
||||
case OT_STRING:
|
||||
_CHECK_IO(SafeWrite(v,write,up,&_string(o)->_len,sizeof(SQInteger)));
|
||||
_CHECK_IO(SafeWrite(v,write,up,_stringval(o),sq_rsl(_string(o)->_len)));
|
||||
|
@ -101,7 +101,7 @@ struct SQWeakRef : SQRefCounted
|
||||
SQObject _obj;
|
||||
};
|
||||
|
||||
#define _realval(o) (type((o)) != OT_WEAKREF?(SQObject)o:_weakref(o)->_obj)
|
||||
#define _realval(o) (sq_type((o)) != OT_WEAKREF?(SQObject)o:_weakref(o)->_obj)
|
||||
|
||||
struct SQObjectPtr;
|
||||
|
||||
@ -128,8 +128,7 @@ struct SQObjectPtr;
|
||||
(obj)->_uiRef++; \
|
||||
}
|
||||
|
||||
#define type(obj) ((obj)._type)
|
||||
#define is_delegable(t) (type(t)&SQOBJECT_DELEGABLE)
|
||||
#define is_delegable(t) (sq_type(t)&SQOBJECT_DELEGABLE)
|
||||
#define raw_type(obj) _RAW_TYPE((obj)._type)
|
||||
|
||||
#define _integer(obj) ((obj)._unVal.nInteger)
|
||||
@ -155,8 +154,8 @@ struct SQObjectPtr;
|
||||
#define _stringval(obj) (obj)._unVal.pString->_val
|
||||
#define _userdataval(obj) ((SQUserPointer)sq_aligning((obj)._unVal.pUserData + 1))
|
||||
|
||||
#define tofloat(num) ((type(num)==OT_INTEGER)?(SQFloat)_integer(num):_float(num))
|
||||
#define tointeger(num) ((type(num)==OT_FLOAT)?(SQInteger)_float(num):_integer(num))
|
||||
#define tofloat(num) ((sq_type(num)==OT_INTEGER)?(SQFloat)_integer(num):_float(num))
|
||||
#define tointeger(num) ((sq_type(num)==OT_FLOAT)?(SQInteger)_float(num):_integer(num))
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
#if defined(SQUSEDOUBLE) && !defined(_SQ64) || !defined(SQUSEDOUBLE) && defined(_SQ64)
|
||||
|
@ -212,7 +212,7 @@ SQSharedState::~SQSharedState()
|
||||
|
||||
SQInteger SQSharedState::GetMetaMethodIdxByName(const SQObjectPtr &name)
|
||||
{
|
||||
if(type(name) != OT_STRING)
|
||||
if(sq_type(name) != OT_STRING)
|
||||
return -1;
|
||||
SQObjectPtr ret;
|
||||
if(_table(_metamethodsmap)->Get(name,ret)) {
|
||||
@ -225,7 +225,7 @@ SQInteger SQSharedState::GetMetaMethodIdxByName(const SQObjectPtr &name)
|
||||
|
||||
void SQSharedState::MarkObject(SQObjectPtr &o,SQCollectable **chain)
|
||||
{
|
||||
switch(type(o)){
|
||||
switch(sq_type(o)){
|
||||
case OT_TABLE:_table(o)->Mark(chain);break;
|
||||
case OT_ARRAY:_array(o)->Mark(chain);break;
|
||||
case OT_USERDATA:_userdata(o)->Mark(chain);break;
|
||||
@ -413,7 +413,7 @@ void RefTable::Mark(SQCollectable **chain)
|
||||
{
|
||||
RefNode *nodes = (RefNode *)_nodes;
|
||||
for(SQUnsignedInteger n = 0; n < _numofslots; n++) {
|
||||
if(type(nodes->obj) != OT_NULL) {
|
||||
if(sq_type(nodes->obj) != OT_NULL) {
|
||||
SQSharedState::MarkObject(nodes->obj,chain);
|
||||
}
|
||||
nodes++;
|
||||
@ -475,7 +475,7 @@ void RefTable::Resize(SQUnsignedInteger size)
|
||||
//rehash
|
||||
SQUnsignedInteger nfound = 0;
|
||||
for(SQUnsignedInteger n = 0; n < oldnumofslots; n++) {
|
||||
if(type(t->obj) != OT_NULL) {
|
||||
if(sq_type(t->obj) != OT_NULL) {
|
||||
//add back;
|
||||
assert(t->refs != 0);
|
||||
RefNode *nn = Add(::HashObj(t->obj)&(_numofslots-1),t->obj);
|
||||
@ -508,7 +508,7 @@ RefTable::RefNode *RefTable::Get(SQObject &obj,SQHash &mainpos,RefNode **prev,bo
|
||||
mainpos = ::HashObj(obj)&(_numofslots-1);
|
||||
*prev = NULL;
|
||||
for (ref = _buckets[mainpos]; ref; ) {
|
||||
if(_rawval(ref->obj) == _rawval(obj) && type(ref->obj) == type(obj))
|
||||
if(_rawval(ref->obj) == _rawval(obj) && sq_type(ref->obj) == sq_type(obj))
|
||||
break;
|
||||
*prev = ref;
|
||||
ref = ref->next;
|
||||
|
@ -62,7 +62,7 @@ void SQTable::Rehash(bool force)
|
||||
_usednodes = 0;
|
||||
for (SQInteger i=0; i<oldsize; i++) {
|
||||
_HashNode *old = nold+i;
|
||||
if (type(old->key) != OT_NULL)
|
||||
if (sq_type(old->key) != OT_NULL)
|
||||
NewSlot(old->key,old->val);
|
||||
}
|
||||
for(SQInteger k=0;k<oldsize;k++)
|
||||
@ -107,7 +107,7 @@ SQTable *SQTable::Clone()
|
||||
|
||||
bool SQTable::Get(const SQObjectPtr &key,SQObjectPtr &val)
|
||||
{
|
||||
if(type(key) == OT_NULL)
|
||||
if(sq_type(key) == OT_NULL)
|
||||
return false;
|
||||
_HashNode *n = _Get(key, HashObj(key) & (_numofnodes - 1));
|
||||
if (n) {
|
||||
@ -118,7 +118,7 @@ bool SQTable::Get(const SQObjectPtr &key,SQObjectPtr &val)
|
||||
}
|
||||
bool SQTable::NewSlot(const SQObjectPtr &key,const SQObjectPtr &val)
|
||||
{
|
||||
assert(type(key) != OT_NULL);
|
||||
assert(sq_type(key) != OT_NULL);
|
||||
SQHash h = HashObj(key) & (_numofnodes - 1);
|
||||
_HashNode *n = _Get(key, h);
|
||||
if (n) {
|
||||
@ -132,7 +132,7 @@ bool SQTable::NewSlot(const SQObjectPtr &key,const SQObjectPtr &val)
|
||||
//key not found I'll insert it
|
||||
//main pos is not free
|
||||
|
||||
if(type(mp->key) != OT_NULL) {
|
||||
if(sq_type(mp->key) != OT_NULL) {
|
||||
n = _firstfree; /* get a free place */
|
||||
SQHash mph = HashObj(mp->key) & (_numofnodes - 1);
|
||||
_HashNode *othern; /* main position of colliding node */
|
||||
@ -161,7 +161,7 @@ bool SQTable::NewSlot(const SQObjectPtr &key,const SQObjectPtr &val)
|
||||
mp->key = key;
|
||||
|
||||
for (;;) { /* correct `firstfree' */
|
||||
if (type(_firstfree->key) == OT_NULL && _firstfree->next == NULL) {
|
||||
if (sq_type(_firstfree->key) == OT_NULL && _firstfree->next == NULL) {
|
||||
mp->val = val;
|
||||
_usednodes++;
|
||||
return true; /* OK; table still has a free place */
|
||||
@ -177,7 +177,7 @@ SQInteger SQTable::Next(bool getweakrefs,const SQObjectPtr &refpos, SQObjectPtr
|
||||
{
|
||||
SQInteger idx = (SQInteger)TranslateIndex(refpos);
|
||||
while (idx < _numofnodes) {
|
||||
if(type(_nodes[idx].key) != OT_NULL) {
|
||||
if(sq_type(_nodes[idx].key) != OT_NULL) {
|
||||
//first found
|
||||
_HashNode &n = _nodes[idx];
|
||||
outkey = n.key;
|
||||
|
@ -14,7 +14,7 @@
|
||||
|
||||
inline SQHash HashObj(const SQObjectPtr &key)
|
||||
{
|
||||
switch(type(key)) {
|
||||
switch(sq_type(key)) {
|
||||
case OT_STRING: return _string(key)->_hash;
|
||||
case OT_FLOAT: return (SQHash)((SQInteger)_float(key));
|
||||
case OT_BOOL: case OT_INTEGER: return (SQHash)((SQInteger)_integer(key));
|
||||
@ -67,7 +67,7 @@ public:
|
||||
{
|
||||
_HashNode *n = &_nodes[hash];
|
||||
do{
|
||||
if(_rawval(n->key) == _rawval(key) && type(n->key) == type(key)){
|
||||
if(_rawval(n->key) == _rawval(key) && sq_type(n->key) == sq_type(key)){
|
||||
return n;
|
||||
}
|
||||
}while((n = n->next));
|
||||
@ -80,7 +80,7 @@ public:
|
||||
_HashNode *n = &_nodes[hash & (_numofnodes - 1)];
|
||||
_HashNode *res = NULL;
|
||||
do{
|
||||
if(type(n->key) == OT_STRING && (scstrcmp(_stringval(n->key),key) == 0)){
|
||||
if(sq_type(n->key) == OT_STRING && (scstrcmp(_stringval(n->key),key) == 0)){
|
||||
res = n;
|
||||
break;
|
||||
}
|
||||
|
@ -21,7 +21,7 @@
|
||||
bool SQVM::BW_OP(SQUnsignedInteger op,SQObjectPtr &trg,const SQObjectPtr &o1,const SQObjectPtr &o2)
|
||||
{
|
||||
SQInteger res;
|
||||
if((type(o1)|type(o2)) == OT_INTEGER)
|
||||
if((sq_type(o1)| sq_type(o2)) == OT_INTEGER)
|
||||
{
|
||||
SQInteger i1 = _integer(o1), i2 = _integer(o2);
|
||||
switch(op) {
|
||||
@ -41,7 +41,7 @@ bool SQVM::BW_OP(SQUnsignedInteger op,SQObjectPtr &trg,const SQObjectPtr &o1,con
|
||||
|
||||
#define _ARITH_(op,trg,o1,o2) \
|
||||
{ \
|
||||
SQInteger tmask = type(o1)|type(o2); \
|
||||
SQInteger tmask = sq_type(o1)|sq_type(o2); \
|
||||
switch(tmask) { \
|
||||
case OT_INTEGER: trg = _integer(o1) op _integer(o2);break; \
|
||||
case (OT_FLOAT|OT_INTEGER): \
|
||||
@ -52,7 +52,7 @@ bool SQVM::BW_OP(SQUnsignedInteger op,SQObjectPtr &trg,const SQObjectPtr &o1,con
|
||||
|
||||
#define _ARITH_NOZERO(op,trg,o1,o2,err) \
|
||||
{ \
|
||||
SQInteger tmask = type(o1)|type(o2); \
|
||||
SQInteger tmask = sq_type(o1)|sq_type(o2); \
|
||||
switch(tmask) { \
|
||||
case OT_INTEGER: { SQInteger i2 = _integer(o2); if(i2 == 0) { Raise_Error(err); SQ_THROW(); } trg = _integer(o1) op i2; } break;\
|
||||
case (OT_FLOAT|OT_INTEGER): \
|
||||
@ -63,7 +63,7 @@ bool SQVM::BW_OP(SQUnsignedInteger op,SQObjectPtr &trg,const SQObjectPtr &o1,con
|
||||
|
||||
bool SQVM::ARITH_OP(SQUnsignedInteger op,SQObjectPtr &trg,const SQObjectPtr &o1,const SQObjectPtr &o2)
|
||||
{
|
||||
SQInteger tmask = type(o1)|type(o2);
|
||||
SQInteger tmask = sq_type(o1)| sq_type(o2);
|
||||
switch(tmask) {
|
||||
case OT_INTEGER:{
|
||||
SQInteger res, i1 = _integer(o1), i2 = _integer(o2);
|
||||
@ -177,7 +177,7 @@ bool SQVM::ArithMetaMethod(SQInteger op,const SQObjectPtr &o1,const SQObjectPtr
|
||||
bool SQVM::NEG_OP(SQObjectPtr &trg,const SQObjectPtr &o)
|
||||
{
|
||||
|
||||
switch(type(o)) {
|
||||
switch(sq_type(o)) {
|
||||
case OT_INTEGER:
|
||||
trg = -_integer(o);
|
||||
return true;
|
||||
@ -206,7 +206,7 @@ bool SQVM::NEG_OP(SQObjectPtr &trg,const SQObjectPtr &o)
|
||||
#define _RET_SUCCEED(exp) { result = (exp); return true; }
|
||||
bool SQVM::ObjCmp(const SQObjectPtr &o1,const SQObjectPtr &o2,SQInteger &result)
|
||||
{
|
||||
SQObjectType t1 = type(o1), t2 = type(o2);
|
||||
SQObjectType t1 = sq_type(o1), t2 = sq_type(o2);
|
||||
if(t1 == t2) {
|
||||
if(_rawval(o1) == _rawval(o2))_RET_SUCCEED(0);
|
||||
SQObjectPtr res;
|
||||
@ -225,7 +225,7 @@ bool SQVM::ObjCmp(const SQObjectPtr &o1,const SQObjectPtr &o2,SQInteger &result)
|
||||
if(_delegable(o1)->GetMetaMethod(this, MT_CMP, closure)) {
|
||||
Push(o1);Push(o2);
|
||||
if(CallMetaMethod(closure,MT_CMP,2,res)) {
|
||||
if(type(res) != OT_INTEGER) {
|
||||
if(sq_type(res) != OT_INTEGER) {
|
||||
Raise_Error(_SC("_cmp must return an integer"));
|
||||
return false;
|
||||
}
|
||||
@ -283,7 +283,7 @@ bool SQVM::CMP_OP(CmpOP op, const SQObjectPtr &o1,const SQObjectPtr &o2,SQObject
|
||||
|
||||
bool SQVM::ToString(const SQObjectPtr &o,SQObjectPtr &res)
|
||||
{
|
||||
switch(type(o)) {
|
||||
switch(sq_type(o)) {
|
||||
case OT_STRING:
|
||||
res = o;
|
||||
return true;
|
||||
@ -304,7 +304,7 @@ bool SQVM::ToString(const SQObjectPtr &o,SQObjectPtr &res)
|
||||
if(_delegable(o)->GetMetaMethod(this, MT_TOSTRING, closure)) {
|
||||
Push(o);
|
||||
if(CallMetaMethod(closure,MT_TOSTRING,1,res)) {
|
||||
if(type(res) == OT_STRING)
|
||||
if(sq_type(res) == OT_STRING)
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
@ -519,7 +519,7 @@ bool SQVM::FOREACH_OP(SQObjectPtr &o1,SQObjectPtr &o2,SQObjectPtr
|
||||
&o3,SQObjectPtr &o4,SQInteger SQ_UNUSED_ARG(arg_2),int exitpos,int &jump)
|
||||
{
|
||||
SQInteger nrefidx;
|
||||
switch(type(o1)) {
|
||||
switch(sq_type(o1)) {
|
||||
case OT_TABLE:
|
||||
if((nrefidx = _table(o1)->Next(false,o4, o2, o3)) == -1) _FINISH(exitpos);
|
||||
o4 = (SQInteger)nrefidx; _FINISH(1);
|
||||
@ -542,7 +542,7 @@ bool SQVM::FOREACH_OP(SQObjectPtr &o1,SQObjectPtr &o2,SQObjectPtr
|
||||
Push(o4);
|
||||
if(CallMetaMethod(closure, MT_NEXTI, 2, itr)) {
|
||||
o4 = o2 = itr;
|
||||
if(type(itr) == OT_NULL) _FINISH(exitpos);
|
||||
if(sq_type(itr) == OT_NULL) _FINISH(exitpos);
|
||||
if(!Get(o1, itr, o3, 0, DONT_FALL_BACK)) {
|
||||
Raise_Error(_SC("_nexti returned an invalid idx")); // cloud be changed
|
||||
return false;
|
||||
@ -561,7 +561,7 @@ bool SQVM::FOREACH_OP(SQObjectPtr &o1,SQObjectPtr &o2,SQObjectPtr
|
||||
if(_generator(o1)->_state == SQGenerator::eDead) _FINISH(exitpos);
|
||||
if(_generator(o1)->_state == SQGenerator::eSuspended) {
|
||||
SQInteger idx = 0;
|
||||
if(type(o4) == OT_INTEGER) {
|
||||
if(sq_type(o4) == OT_INTEGER) {
|
||||
idx = _integer(o4) + 1;
|
||||
}
|
||||
o2 = idx;
|
||||
@ -616,14 +616,14 @@ bool SQVM::CLASS_OP(SQObjectPtr &target,SQInteger baseclass,SQInteger attributes
|
||||
SQClass *base = NULL;
|
||||
SQObjectPtr attrs;
|
||||
if(baseclass != -1) {
|
||||
if(type(_stack._vals[_stackbase+baseclass]) != OT_CLASS) { Raise_Error(_SC("trying to inherit from a %s"),GetTypeName(_stack._vals[_stackbase+baseclass])); return false; }
|
||||
if(sq_type(_stack._vals[_stackbase+baseclass]) != OT_CLASS) { Raise_Error(_SC("trying to inherit from a %s"),GetTypeName(_stack._vals[_stackbase+baseclass])); return false; }
|
||||
base = _class(_stack._vals[_stackbase + baseclass]);
|
||||
}
|
||||
if(attributes != MAX_FUNC_STACKSIZE) {
|
||||
attrs = _stack._vals[_stackbase+attributes];
|
||||
}
|
||||
target = SQClass::Create(_ss(this),base);
|
||||
if(type(_class(target)->_metamethods[MT_INHERITED]) != OT_NULL) {
|
||||
if(sq_type(_class(target)->_metamethods[MT_INHERITED]) != OT_NULL) {
|
||||
int nparams = 2;
|
||||
SQObjectPtr ret;
|
||||
Push(target); Push(attrs);
|
||||
@ -639,7 +639,7 @@ bool SQVM::CLASS_OP(SQObjectPtr &target,SQInteger baseclass,SQInteger attributes
|
||||
|
||||
bool SQVM::IsEqual(const SQObjectPtr &o1,const SQObjectPtr &o2,bool &res)
|
||||
{
|
||||
if(type(o1) == type(o2)) {
|
||||
if(sq_type(o1) == sq_type(o2)) {
|
||||
res = (_rawval(o1) == _rawval(o2));
|
||||
}
|
||||
else {
|
||||
@ -655,8 +655,8 @@ bool SQVM::IsEqual(const SQObjectPtr &o1,const SQObjectPtr &o2,bool &res)
|
||||
|
||||
bool SQVM::IsFalse(SQObjectPtr &o)
|
||||
{
|
||||
if(((type(o) & SQOBJECT_CANBEFALSE)
|
||||
&& ( ((type(o) == OT_FLOAT) && (_float(o) == SQFloat(0.0))) ))
|
||||
if(((sq_type(o) & SQOBJECT_CANBEFALSE)
|
||||
&& ( ((sq_type(o) == OT_FLOAT) && (_float(o) == SQFloat(0.0))) ))
|
||||
#if !defined(SQUSEDOUBLE) || (defined(SQUSEDOUBLE) && defined(_SQ64))
|
||||
|| (_integer(o) == 0) ) //OT_NULL|OT_INTEGER|OT_BOOL
|
||||
#else
|
||||
@ -723,22 +723,22 @@ exception_restore:
|
||||
case _OP_DLOAD: TARGET = ci->_literals[arg1]; STK(arg2) = ci->_literals[arg3];continue;
|
||||
case _OP_TAILCALL:{
|
||||
SQObjectPtr &t = STK(arg1);
|
||||
if (type(t) == OT_CLOSURE
|
||||
if (sq_type(t) == OT_CLOSURE
|
||||
&& (!_closure(t)->_function->_bgenerator)){
|
||||
SQObjectPtr clo = t;
|
||||
SQInteger last_top = _top;
|
||||
SQInteger last_top = _top;
|
||||
if(_openouters) CloseOuters(&(_stack._vals[_stackbase]));
|
||||
for (SQInteger i = 0; i < arg3; i++) STK(i) = STK(arg2 + i);
|
||||
_GUARD(StartCall(_closure(clo), ci->_target, arg3, _stackbase, true));
|
||||
if (last_top >= _top) {
|
||||
_top = last_top;
|
||||
}
|
||||
if (last_top >= _top) {
|
||||
_top = last_top;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
}
|
||||
case _OP_CALL: {
|
||||
SQObjectPtr clo = STK(arg1);
|
||||
switch (type(clo)) {
|
||||
switch (sq_type(clo)) {
|
||||
case OT_CLOSURE:
|
||||
_GUARD(StartCall(_closure(clo), sarg0, arg3, _stackbase+arg2, false));
|
||||
continue;
|
||||
@ -766,7 +766,7 @@ exception_restore:
|
||||
STK(arg0) = inst;
|
||||
}
|
||||
SQInteger stkbase;
|
||||
switch(type(clo)) {
|
||||
switch(sq_type(clo)) {
|
||||
case OT_CLOSURE:
|
||||
stkbase = _stackbase+arg2;
|
||||
_stack._vals[stkbase] = inst;
|
||||
@ -864,7 +864,7 @@ exception_restore:
|
||||
case _OP_LOADNULLS:{ for(SQInt32 n=0; n < arg1; n++) STK(arg0+n).Null(); }continue;
|
||||
case _OP_LOADROOT: {
|
||||
SQWeakRef *w = _closure(ci->_closure)->_root;
|
||||
if(type(w->_obj) != OT_NULL) {
|
||||
if(sq_type(w->_obj) != OT_NULL) {
|
||||
TARGET = w->_obj;
|
||||
} else {
|
||||
TARGET = _roottable; //shoud this be like this? or null
|
||||
@ -940,7 +940,7 @@ exception_restore:
|
||||
case _OP_INC: {SQObjectPtr o(sarg3); _GUARD(DerefInc('+',TARGET, STK(arg1), STK(arg2), o, false, arg1));} continue;
|
||||
case _OP_INCL: {
|
||||
SQObjectPtr &a = STK(arg1);
|
||||
if(type(a) == OT_INTEGER) {
|
||||
if(sq_type(a) == OT_INTEGER) {
|
||||
a._unVal.nInteger = _integer(a) + sarg3;
|
||||
}
|
||||
else {
|
||||
@ -951,7 +951,7 @@ exception_restore:
|
||||
case _OP_PINC: {SQObjectPtr o(sarg3); _GUARD(DerefInc('+',TARGET, STK(arg1), STK(arg2), o, true, arg1));} continue;
|
||||
case _OP_PINCL: {
|
||||
SQObjectPtr &a = STK(arg1);
|
||||
if(type(a) == OT_INTEGER) {
|
||||
if(sq_type(a) == OT_INTEGER) {
|
||||
TARGET = a;
|
||||
a._unVal.nInteger = _integer(a) + sarg3;
|
||||
}
|
||||
@ -963,9 +963,9 @@ exception_restore:
|
||||
case _OP_CMP: _GUARD(CMP_OP((CmpOP)arg3,STK(arg2),STK(arg1),TARGET)) continue;
|
||||
case _OP_EXISTS: TARGET = Get(STK(arg1), STK(arg2), temp_reg, GET_FLAG_DO_NOT_RAISE_ERROR | GET_FLAG_RAW, DONT_FALL_BACK) ? true : false; continue;
|
||||
case _OP_INSTANCEOF:
|
||||
if(type(STK(arg1)) != OT_CLASS)
|
||||
if(sq_type(STK(arg1)) != OT_CLASS)
|
||||
{Raise_Error(_SC("cannot apply instanceof between a %s and a %s"),GetTypeName(STK(arg1)),GetTypeName(STK(arg2))); SQ_THROW();}
|
||||
TARGET = (type(STK(arg2)) == OT_INSTANCE) ? (_instance(STK(arg2))->InstanceOf(_class(STK(arg1)))?true:false) : false;
|
||||
TARGET = (sq_type(STK(arg2)) == OT_INSTANCE) ? (_instance(STK(arg2))->InstanceOf(_class(STK(arg1)))?true:false) : false;
|
||||
continue;
|
||||
case _OP_AND:
|
||||
if(IsFalse(STK(arg2))) {
|
||||
@ -982,7 +982,7 @@ exception_restore:
|
||||
case _OP_NEG: _GUARD(NEG_OP(TARGET,STK(arg1))); continue;
|
||||
case _OP_NOT: TARGET = IsFalse(STK(arg1)); continue;
|
||||
case _OP_BWNOT:
|
||||
if(type(STK(arg1)) == OT_INTEGER) {
|
||||
if(sq_type(STK(arg1)) == OT_INTEGER) {
|
||||
SQInteger t = _integer(STK(arg1));
|
||||
TARGET = SQInteger(~t);
|
||||
continue;
|
||||
@ -1012,7 +1012,7 @@ exception_restore:
|
||||
}
|
||||
continue;
|
||||
case _OP_RESUME:
|
||||
if(type(STK(arg1)) != OT_GENERATOR){ Raise_Error(_SC("trying to resume a '%s',only genenerator can be resumed"), GetTypeName(STK(arg1))); SQ_THROW();}
|
||||
if(sq_type(STK(arg1)) != OT_GENERATOR){ Raise_Error(_SC("trying to resume a '%s',only genenerator can be resumed"), GetTypeName(STK(arg1))); SQ_THROW();}
|
||||
_GUARD(_generator(STK(arg1))->Resume(this, TARGET));
|
||||
traps += ci->_etraps;
|
||||
continue;
|
||||
@ -1021,7 +1021,7 @@ exception_restore:
|
||||
ci->_ip += tojump; }
|
||||
continue;
|
||||
case _OP_POSTFOREACH:
|
||||
assert(type(STK(arg0)) == OT_GENERATOR);
|
||||
assert(sq_type(STK(arg0)) == OT_GENERATOR);
|
||||
if(_generator(STK(arg0))->_state == SQGenerator::eDead)
|
||||
ci->_ip += (sarg1 - 1);
|
||||
continue;
|
||||
@ -1111,7 +1111,7 @@ bool SQVM::CreateClassInstance(SQClass *theclass, SQObjectPtr &inst, SQObjectPtr
|
||||
|
||||
void SQVM::CallErrorHandler(SQObjectPtr &error)
|
||||
{
|
||||
if(type(_errorhandler) != OT_NULL) {
|
||||
if(sq_type(_errorhandler) != OT_NULL) {
|
||||
SQObjectPtr out;
|
||||
Push(_roottable); Push(error);
|
||||
Call(_errorhandler, 2, _top-2, out,SQFalse);
|
||||
@ -1125,8 +1125,8 @@ void SQVM::CallDebugHook(SQInteger type,SQInteger forcedline)
|
||||
_debughook = false;
|
||||
SQFunctionProto *func=_closure(ci->_closure)->_function;
|
||||
if(_debughook_native) {
|
||||
const SQChar *src = type(func->_sourcename) == OT_STRING?_stringval(func->_sourcename):NULL;
|
||||
const SQChar *fname = type(func->_name) == OT_STRING?_stringval(func->_name):NULL;
|
||||
const SQChar *src = sq_type(func->_sourcename) == OT_STRING?_stringval(func->_sourcename):NULL;
|
||||
const SQChar *fname = sq_type(func->_name) == OT_STRING?_stringval(func->_name):NULL;
|
||||
SQInteger line = forcedline?forcedline:func->GetLine(ci->_ip);
|
||||
_debughook_native(this,type,src,line,fname);
|
||||
}
|
||||
@ -1161,8 +1161,8 @@ bool SQVM::CallNative(SQNativeClosure *nclosure, SQInteger nargs, SQInteger newb
|
||||
SQIntVec &tc = nclosure->_typecheck;
|
||||
if((tcs = tc.size())) {
|
||||
for(SQInteger i = 0; i < nargs && i < tcs; i++) {
|
||||
if((tc._vals[i] != -1) && !(type(_stack._vals[newbase+i]) & tc._vals[i])) {
|
||||
Raise_ParamTypeError(i,tc._vals[i],type(_stack._vals[newbase+i]));
|
||||
if((tc._vals[i] != -1) && !(sq_type(_stack._vals[newbase+i]) & tc._vals[i])) {
|
||||
Raise_ParamTypeError(i,tc._vals[i], sq_type(_stack._vals[newbase+i]));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -1232,7 +1232,7 @@ bool SQVM::TailCall(SQClosure *closure, SQInteger parambase,SQInteger nparams)
|
||||
|
||||
bool SQVM::Get(const SQObjectPtr &self, const SQObjectPtr &key, SQObjectPtr &dest, SQUnsignedInteger getflags, SQInteger selfidx)
|
||||
{
|
||||
switch(type(self)){
|
||||
switch(sq_type(self)){
|
||||
case OT_TABLE:
|
||||
if(_table(self)->Get(key,dest))return true;
|
||||
break;
|
||||
@ -1273,7 +1273,7 @@ bool SQVM::Get(const SQObjectPtr &self, const SQObjectPtr &key, SQObjectPtr &des
|
||||
//#ifdef ROOT_FALLBACK
|
||||
if(selfidx == 0) {
|
||||
SQWeakRef *w = _closure(ci->_closure)->_root;
|
||||
if(type(w->_obj) != OT_NULL)
|
||||
if(sq_type(w->_obj) != OT_NULL)
|
||||
{
|
||||
if(Get(*((const SQObjectPtr *)&w->_obj),key,dest,0,DONT_FALL_BACK)) return true;
|
||||
}
|
||||
@ -1287,7 +1287,7 @@ bool SQVM::Get(const SQObjectPtr &self, const SQObjectPtr &key, SQObjectPtr &des
|
||||
bool SQVM::InvokeDefaultDelegate(const SQObjectPtr &self,const SQObjectPtr &key,SQObjectPtr &dest)
|
||||
{
|
||||
SQTable *ddel = NULL;
|
||||
switch(type(self)) {
|
||||
switch(sq_type(self)) {
|
||||
case OT_CLASS: ddel = _class_ddel; break;
|
||||
case OT_TABLE: ddel = _table_ddel; break;
|
||||
case OT_ARRAY: ddel = _array_ddel; break;
|
||||
@ -1306,7 +1306,7 @@ bool SQVM::InvokeDefaultDelegate(const SQObjectPtr &self,const SQObjectPtr &key,
|
||||
|
||||
SQInteger SQVM::FallBackGet(const SQObjectPtr &self,const SQObjectPtr &key,SQObjectPtr &dest)
|
||||
{
|
||||
switch(type(self)){
|
||||
switch(sq_type(self)){
|
||||
case OT_TABLE:
|
||||
case OT_USERDATA:
|
||||
//delegation
|
||||
@ -1329,7 +1329,7 @@ SQInteger SQVM::FallBackGet(const SQObjectPtr &self,const SQObjectPtr &key,SQObj
|
||||
}
|
||||
else {
|
||||
Pop(2);
|
||||
if(type(_lasterror) != OT_NULL) { //NULL means "clean failure" (not found)
|
||||
if(sq_type(_lasterror) != OT_NULL) { //NULL means "clean failure" (not found)
|
||||
return FALLBACK_ERROR;
|
||||
}
|
||||
}
|
||||
@ -1344,7 +1344,7 @@ SQInteger SQVM::FallBackGet(const SQObjectPtr &self,const SQObjectPtr &key,SQObj
|
||||
|
||||
bool SQVM::Set(const SQObjectPtr &self,const SQObjectPtr &key,const SQObjectPtr &val,SQInteger selfidx)
|
||||
{
|
||||
switch(type(self)){
|
||||
switch(sq_type(self)){
|
||||
case OT_TABLE:
|
||||
if(_table(self)->Set(key,val)) return true;
|
||||
break;
|
||||
@ -1358,7 +1358,7 @@ bool SQVM::Set(const SQObjectPtr &self,const SQObjectPtr &key,const SQObjectPtr
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
case OT_USERDATA: break; // must fall back
|
||||
case OT_USERDATA: break; // must fall back
|
||||
default:
|
||||
Raise_Error(_SC("trying to set '%s'"),GetTypeName(self));
|
||||
return false;
|
||||
@ -1379,7 +1379,7 @@ bool SQVM::Set(const SQObjectPtr &self,const SQObjectPtr &key,const SQObjectPtr
|
||||
|
||||
SQInteger SQVM::FallBackSet(const SQObjectPtr &self,const SQObjectPtr &key,const SQObjectPtr &val)
|
||||
{
|
||||
switch(type(self)) {
|
||||
switch(sq_type(self)) {
|
||||
case OT_TABLE:
|
||||
if(_table(self)->_delegate) {
|
||||
if(Set(_table(self)->_delegate,key,val,DONT_FALL_BACK)) return FALLBACK_OK;
|
||||
@ -1399,7 +1399,7 @@ SQInteger SQVM::FallBackSet(const SQObjectPtr &self,const SQObjectPtr &key,const
|
||||
}
|
||||
else {
|
||||
Pop(3);
|
||||
if(type(_lasterror) != OT_NULL) { //NULL means "clean failure" (not found)
|
||||
if(sq_type(_lasterror) != OT_NULL) { //NULL means "clean failure" (not found)
|
||||
return FALLBACK_ERROR;
|
||||
}
|
||||
}
|
||||
@ -1416,7 +1416,7 @@ bool SQVM::Clone(const SQObjectPtr &self,SQObjectPtr &target)
|
||||
{
|
||||
SQObjectPtr temp_reg;
|
||||
SQObjectPtr newobj;
|
||||
switch(type(self)){
|
||||
switch(sq_type(self)){
|
||||
case OT_TABLE:
|
||||
newobj = _table(self)->Clone();
|
||||
goto cloned_mt;
|
||||
@ -1444,14 +1444,14 @@ cloned_mt:
|
||||
|
||||
bool SQVM::NewSlotA(const SQObjectPtr &self,const SQObjectPtr &key,const SQObjectPtr &val,const SQObjectPtr &attrs,bool bstatic,bool raw)
|
||||
{
|
||||
if(type(self) != OT_CLASS) {
|
||||
if(sq_type(self) != OT_CLASS) {
|
||||
Raise_Error(_SC("object must be a class"));
|
||||
return false;
|
||||
}
|
||||
SQClass *c = _class(self);
|
||||
if(!raw) {
|
||||
SQObjectPtr &mm = c->_metamethods[MT_NEWMEMBER];
|
||||
if(type(mm) != OT_NULL ) {
|
||||
if(sq_type(mm) != OT_NULL ) {
|
||||
Push(self); Push(key); Push(val);
|
||||
Push(attrs);
|
||||
Push(bstatic);
|
||||
@ -1460,7 +1460,7 @@ bool SQVM::NewSlotA(const SQObjectPtr &self,const SQObjectPtr &key,const SQObjec
|
||||
}
|
||||
if(!NewSlot(self, key, val,bstatic))
|
||||
return false;
|
||||
if(type(attrs) != OT_NULL) {
|
||||
if(sq_type(attrs) != OT_NULL) {
|
||||
c->SetAttributes(key,attrs);
|
||||
}
|
||||
return true;
|
||||
@ -1468,8 +1468,8 @@ bool SQVM::NewSlotA(const SQObjectPtr &self,const SQObjectPtr &key,const SQObjec
|
||||
|
||||
bool SQVM::NewSlot(const SQObjectPtr &self,const SQObjectPtr &key,const SQObjectPtr &val,bool bstatic)
|
||||
{
|
||||
if(type(key) == OT_NULL) { Raise_Error(_SC("null cannot be used as index")); return false; }
|
||||
switch(type(self)) {
|
||||
if(sq_type(key) == OT_NULL) { Raise_Error(_SC("null cannot be used as index")); return false; }
|
||||
switch(sq_type(self)) {
|
||||
case OT_TABLE: {
|
||||
bool rawcall = true;
|
||||
if(_table(self)->_delegate) {
|
||||
@ -1529,7 +1529,7 @@ bool SQVM::NewSlot(const SQObjectPtr &self,const SQObjectPtr &key,const SQObject
|
||||
|
||||
bool SQVM::DeleteSlot(const SQObjectPtr &self,const SQObjectPtr &key,SQObjectPtr &res)
|
||||
{
|
||||
switch(type(self)) {
|
||||
switch(sq_type(self)) {
|
||||
case OT_TABLE:
|
||||
case OT_INSTANCE:
|
||||
case OT_USERDATA: {
|
||||
@ -1541,7 +1541,7 @@ bool SQVM::DeleteSlot(const SQObjectPtr &self,const SQObjectPtr &key,SQObjectPtr
|
||||
return CallMetaMethod(closure,MT_DELSLOT,2,res);
|
||||
}
|
||||
else {
|
||||
if(type(self) == OT_TABLE) {
|
||||
if(sq_type(self) == OT_TABLE) {
|
||||
if(_table(self)->Get(key,t)) {
|
||||
_table(self)->Remove(key);
|
||||
}
|
||||
@ -1570,7 +1570,7 @@ bool SQVM::Call(SQObjectPtr &closure,SQInteger nparams,SQInteger stackbase,SQObj
|
||||
#ifdef _DEBUG
|
||||
SQInteger prevstackbase = _stackbase;
|
||||
#endif
|
||||
switch(type(closure)) {
|
||||
switch(sq_type(closure)) {
|
||||
case OT_CLOSURE:
|
||||
return Execute(closure, nparams, stackbase, outres, raiseerror);
|
||||
break;
|
||||
@ -1584,7 +1584,7 @@ SQInteger prevstackbase = _stackbase;
|
||||
SQObjectPtr constr;
|
||||
SQObjectPtr temp;
|
||||
CreateClassInstance(_class(closure),outres,constr);
|
||||
SQObjectType ctype = type(constr);
|
||||
SQObjectType ctype = sq_type(constr);
|
||||
if (ctype == OT_NATIVECLOSURE || ctype == OT_CLOSURE) {
|
||||
_stack[stackbase] = outres;
|
||||
return Call(constr,nparams,stackbase,temp,raiseerror);
|
||||
|
Loading…
Reference in New Issue
Block a user