This commit is contained in:
albertodemichelis 2017-11-17 04:01:47 +08:00
commit ab7243ca59
35 changed files with 247 additions and 192 deletions

17
.travis.yml Normal file
View 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

View File

@ -83,4 +83,4 @@ DOCUMENTATION GENERATION
To be able to compile the documentation, make sure that you have Python 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/ 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 and use either the Makefile for GCC-based platforms or make.bat for
Windows platforms. Windows platforms.

View File

@ -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 Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

28
appveyor.yml Normal file
View 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

View File

@ -29,4 +29,4 @@ serialize (read) a closure and pushes it on top of the stack, the source is user
:returns: a SQRESULT :returns: a SQRESULT
:remarks: closures with free variables cannot be serialized :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.

View File

@ -76,4 +76,4 @@ enable/disable the error callback notification of handled exceptions.
:param SQCOMPILERERROR f: A pointer to the error handler function :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. :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

View File

@ -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 :param SQStackInfos * si: pointer to the SQStackInfos structure that will store the stack informations
:returns: a SQRESULT. :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.

View File

@ -24,4 +24,4 @@ runs the garbage collector and returns the number of reference cycles found (and
:param HSQUIRRELVM v: the target VM :param HSQUIRRELVM v: the target VM
:remarks: this api only works with garbage collector builds (NO_GARBAGE_COLLECTOR is not defined) :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.

View File

@ -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. :param SQBool hasbase: if the parameter is true the function expects a base class on top of the stack.
:returns: a SQRESULT :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.

View File

@ -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 :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. :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.

View File

@ -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(). :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. :returns: an HRESULT.
wake up the execution a previously suspended virtual machine wake up the execution a previously suspended virtual machine

View File

@ -5,7 +5,7 @@ The registry table
================== ==================
The registry table is an hidden table shared between vm and all his thread(friend vms). 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 native C library implementation.
For instance the sqstdlib(squirrel standard library)uses it to store configuration and shared objects For instance the sqstdlib(squirrel standard library)uses it to store configuration and shared objects
delegates. delegates.

View File

@ -26,4 +26,4 @@ All declarations needed for embedding the language in an application are in the
embedding/userdata_and_userpointers.rst embedding/userdata_and_userpointers.rst
embedding/the_registry_table.rst embedding/the_registry_table.rst
embedding/references_from_c.rst embedding/references_from_c.rst
embedding/debug_interface.rst embedding/debug_interface.rst

View File

@ -31,4 +31,4 @@ THE SOFTWARE.
introduction.rst introduction.rst
language.rst language.rst
embedding_squirrel.rst embedding_squirrel.rst
api_reference.rst api_reference.rst

View File

@ -20,4 +20,4 @@
language/weak_references.rst language/weak_references.rst
language/delegation.rst language/delegation.rst
language/metamethods.rst language/metamethods.rst
language/builtin_functions.rst language/builtin_functions.rst

View File

@ -371,4 +371,4 @@ Creates a new array.::
Arrays can be initialized with values during the construction:: 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

View File

@ -28,4 +28,4 @@ C API
prints the call stack and stack contents. the function prints the call stack and stack contents. the function
uses the print function set through(:ref:`sq_setprintfunc <sq_setprintfunc>`) to output uses the print function set through(:ref:`sq_setprintfunc <sq_setprintfunc>`) to output
the stack dump. the stack dump.

View File

@ -210,4 +210,4 @@ C API
:param SQInteger size: the size of the blob payload that has to be created :param SQInteger size: the size of the blob payload that has to be created
:returns: a pointer to the newly created blob payload :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.

View File

@ -79,4 +79,4 @@ C API
:returns: an SQRESULT :returns: an SQRESULT
:remarks: The function aspects a table on top of the stack where to register the global library functions. :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.

View File

@ -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 Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal
@ -66,7 +66,7 @@ struct SQOuter;
#include "sqconfig.h" #include "sqconfig.h"
#define SQUIRREL_VERSION _SC("Squirrel 3.1 stable") #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_AUTHOR _SC("Alberto Demichelis")
#define SQUIRREL_VERSION_NUMBER 310 #define SQUIRREL_VERSION_NUMBER 310

View File

@ -1,4 +1,7 @@
if(NOT DEFINED DISABLE_DYNAMIC) 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) add_executable(sq sq.c)
set_target_properties(sq PROPERTIES LINKER_LANGUAGE C) set_target_properties(sq PROPERTIES LINKER_LANGUAGE C)
target_link_libraries(sq squirrel sqstdlib) target_link_libraries(sq squirrel sqstdlib)

View File

@ -1,8 +1,10 @@
SQUIRREL= .. SQUIRREL= ..
OUT= $(SQUIRREL)/lib/libsqstdlib.a OUT?= $(SQUIRREL)/lib/libsqstdlib.a
INCZ= -I$(SQUIRREL)/include -I. -Iinclude INCZ?= -I$(SQUIRREL)/include -I. -Iinclude
DEFS= $(CC_EXTRA_FLAGS)
LIB=
OBJS= \ OBJS= \
sqstdblob.o \ sqstdblob.o \
@ -26,16 +28,16 @@ SRCS= \
sq32: 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 ar rc $(OUT) *.o
rm *.o rm *.o
sqprof: 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 ar rc $(OUT) *.o
rm *.o rm *.o
sq64: 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 ar rc $(OUT) *.o
rm *.o rm *.o

View File

@ -1,9 +1,9 @@
SQUIRREL= .. SQUIRREL= ..
OUT= $(SQUIRREL)/lib/libsquirrel.a OUT?= $(SQUIRREL)/lib/libsquirrel.a
INCZ= -I$(SQUIRREL)/include -I. -Iinclude INCZ?= -I$(SQUIRREL)/include -I. -Iinclude
DEFS= DEFS= $(CC_EXTRA_FLAGS)
LIB= LIB=
OBJS= \ OBJS= \

View File

@ -16,7 +16,7 @@
static bool sq_aux_gettypedarg(HSQUIRRELVM v,SQInteger idx,SQObjectType type,SQObjectPtr **o) static bool sq_aux_gettypedarg(HSQUIRRELVM v,SQInteger idx,SQObjectType type,SQObjectPtr **o)
{ {
*o = &stack_get(v,idx); *o = &stack_get(v,idx);
if(type(**o) != type){ if(sq_type(**o) != type){
SQObjectPtr oval = v->PrintObjVal(**o); SQObjectPtr oval = v->PrintObjVal(**o);
v->Raise_Error(_SC("wrong argument type, expected '%s' got '%.50s'"),IdType2Name(type),_stringval(oval)); v->Raise_Error(_SC("wrong argument type, expected '%s' got '%.50s'"),IdType2Name(type),_stringval(oval));
return false; return false;
@ -150,7 +150,7 @@ void sq_notifyallexceptions(HSQUIRRELVM v, SQBool enable)
void sq_addref(HSQUIRRELVM v,HSQOBJECT *po) void sq_addref(HSQUIRRELVM v,HSQOBJECT *po)
{ {
if(!ISREFCOUNTED(type(*po))) return; if(!ISREFCOUNTED(sq_type(*po))) return;
#ifdef NO_GARBAGE_COLLECTOR #ifdef NO_GARBAGE_COLLECTOR
__AddRef(po->_type,po->_unVal); __AddRef(po->_type,po->_unVal);
#else #else
@ -160,7 +160,7 @@ void sq_addref(HSQUIRRELVM v,HSQOBJECT *po)
SQUnsignedInteger sq_getrefcount(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 #ifdef NO_GARBAGE_COLLECTOR
return po->_unVal.pRefCounted->_uiRef; return po->_unVal.pRefCounted->_uiRef;
#else #else
@ -170,7 +170,7 @@ SQUnsignedInteger sq_getrefcount(HSQUIRRELVM v,HSQOBJECT *po)
SQBool sq_release(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 #ifdef NO_GARBAGE_COLLECTOR
bool ret = (po->_unVal.pRefCounted->_uiRef <= 1) ? SQTrue : SQFalse; bool ret = (po->_unVal.pRefCounted->_uiRef <= 1) ? SQTrue : SQFalse;
__Release(po->_type,po->_unVal); __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) 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; return po->_unVal.pRefCounted->_uiRef;
} }
@ -290,7 +290,7 @@ SQRESULT sq_newclass(HSQUIRRELVM v,SQBool hasbase)
SQClass *baseclass = NULL; SQClass *baseclass = NULL;
if(hasbase) { if(hasbase) {
SQObjectPtr &base = stack_get(v,-1); 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")); return sq_throwerror(v,_SC("invalid base type"));
baseclass = _class(base); baseclass = _class(base);
} }
@ -304,7 +304,7 @@ SQBool sq_instanceof(HSQUIRRELVM v)
{ {
SQObjectPtr &inst = stack_get(v,-1); SQObjectPtr &inst = stack_get(v,-1);
SQObjectPtr &cl = stack_get(v,-2); 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 sq_throwerror(v,_SC("invalid param type"));
return _instance(inst)->InstanceOf(_class(cl))?SQTrue:SQFalse; 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) SQRESULT sq_getclosureinfo(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger *nparams,SQUnsignedInteger *nfreevars)
{ {
SQObject o = stack_get(v, idx); SQObject o = stack_get(v, idx);
if(type(o) == OT_CLOSURE) { if(sq_type(o) == OT_CLOSURE) {
SQClosure *c = _closure(o); SQClosure *c = _closure(o);
SQFunctionProto *proto = c->_function; SQFunctionProto *proto = c->_function;
*nparams = (SQUnsignedInteger)proto->_nparameters; *nparams = (SQUnsignedInteger)proto->_nparameters;
*nfreevars = (SQUnsignedInteger)proto->_noutervalues; *nfreevars = (SQUnsignedInteger)proto->_noutervalues;
return SQ_OK; return SQ_OK;
} }
else if(type(o) == OT_NATIVECLOSURE) else if(sq_type(o) == OT_NATIVECLOSURE)
{ {
SQNativeClosure *c = _nativeclosure(o); SQNativeClosure *c = _nativeclosure(o);
*nparams = (SQUnsignedInteger)c->_nparamscheck; *nparams = (SQUnsignedInteger)c->_nparamscheck;
@ -459,7 +459,7 @@ SQRESULT sq_bindenv(HSQUIRRELVM v,SQInteger idx)
!sq_isclass(env) && !sq_isclass(env) &&
!sq_isinstance(env)) !sq_isinstance(env))
return sq_throwerror(v,_SC("invalid environment")); return sq_throwerror(v,_SC("invalid environment"));
SQWeakRef *w = _refcounted(env)->GetWeakRef(type(env)); SQWeakRef *w = _refcounted(env)->GetWeakRef(sq_type(env));
SQObjectPtr ret; SQObjectPtr ret;
if(sq_isclosure(o)) { if(sq_isclosure(o)) {
SQClosure *c = _closure(o)->Clone(); SQClosure *c = _closure(o)->Clone();
@ -524,7 +524,7 @@ SQRESULT sq_getclosureroot(HSQUIRRELVM v,SQInteger idx)
SQRESULT sq_clear(HSQUIRRELVM v,SQInteger idx) SQRESULT sq_clear(HSQUIRRELVM v,SQInteger idx)
{ {
SQObject &o=stack_get(v,idx); SQObject &o=stack_get(v,idx);
switch(type(o)) { switch(sq_type(o)) {
case OT_TABLE: _table(o)->Clear(); break; case OT_TABLE: _table(o)->Clear(); break;
case OT_ARRAY: _array(o)->Resize(0); break; case OT_ARRAY: _array(o)->Resize(0); break;
default: default:
@ -619,7 +619,7 @@ void sq_push(HSQUIRRELVM v,SQInteger idx)
SQObjectType sq_gettype(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) 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) SQInteger sq_getsize(HSQUIRRELVM v, SQInteger idx)
{ {
SQObjectPtr &o = stack_get(v, idx); SQObjectPtr &o = stack_get(v, idx);
SQObjectType type = type(o); SQObjectType type = sq_type(o);
switch(type) { switch(type) {
case OT_STRING: return _string(o)->_len; case OT_STRING: return _string(o)->_len;
case OT_TABLE: return _table(o)->CountUsed(); 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) SQRESULT sq_settypetag(HSQUIRRELVM v,SQInteger idx,SQUserPointer typetag)
{ {
SQObjectPtr &o = stack_get(v,idx); SQObjectPtr &o = stack_get(v,idx);
switch(type(o)) { switch(sq_type(o)) {
case OT_USERDATA: _userdata(o)->_typetag = typetag; break; case OT_USERDATA: _userdata(o)->_typetag = typetag; break;
case OT_CLASS: _class(o)->_typetag = typetag; break; case OT_CLASS: _class(o)->_typetag = typetag; break;
default: return sq_throwerror(v,_SC("invalid object type")); 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) 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_INSTANCE: *typetag = _instance(*o)->_class->_typetag; break;
case OT_USERDATA: *typetag = _userdata(*o)->_typetag; break; case OT_USERDATA: *typetag = _userdata(*o)->_typetag; break;
case OT_CLASS: *typetag = _class(*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) SQRESULT sq_gettypetag(HSQUIRRELVM v,SQInteger idx,SQUserPointer *typetag)
{ {
SQObjectPtr &o = stack_get(v,idx); SQObjectPtr &o = stack_get(v,idx);
if (SQ_FAILED(sq_getobjtypetag(&o, typetag))) 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_ERROR;// this is not an error it should be a bool but would break backward compatibility
return SQ_OK; 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) SQRESULT sq_setinstanceup(HSQUIRRELVM v, SQInteger idx, SQUserPointer p)
{ {
SQObjectPtr &o = stack_get(v,idx); 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; _instance(o)->_userpointer = p;
return SQ_OK; 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) SQRESULT sq_setclassudsize(HSQUIRRELVM v, SQInteger idx, SQInteger udsize)
{ {
SQObjectPtr &o = stack_get(v,idx); 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")); if(_class(o)->_locked) return sq_throwerror(v,_SC("the class is locked"));
_class(o)->_udsize = udsize; _class(o)->_udsize = udsize;
return SQ_OK; 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) SQRESULT sq_getinstanceup(HSQUIRRELVM v, SQInteger idx, SQUserPointer *p,SQUserPointer typetag)
{ {
SQObjectPtr &o = stack_get(v,idx); 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; (*p) = _instance(o)->_userpointer;
if(typetag != 0) { if(typetag != 0) {
SQClass *cl = _instance(o)->_class; SQClass *cl = _instance(o)->_class;
@ -867,9 +867,9 @@ SQRESULT sq_newslot(HSQUIRRELVM v, SQInteger idx, SQBool bstatic)
{ {
sq_aux_paramscheck(v, 3); sq_aux_paramscheck(v, 3);
SQObjectPtr &self = stack_get(v, idx); 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); 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->NewSlot(self, key, v->GetUp(-1),bstatic?true:false);
v->Pop(2); v->Pop(2);
} }
@ -882,7 +882,7 @@ SQRESULT sq_deleteslot(HSQUIRRELVM v,SQInteger idx,SQBool pushval)
SQObjectPtr *self; SQObjectPtr *self;
_GETSAFE_OBJ(v, idx, OT_TABLE,self); _GETSAFE_OBJ(v, idx, OT_TABLE,self);
SQObjectPtr &key = v->GetUp(-1); 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; SQObjectPtr res;
if(!v->DeleteSlot(*self, key, res)){ if(!v->DeleteSlot(*self, key, res)){
v->Pop(); v->Pop();
@ -907,11 +907,11 @@ SQRESULT sq_rawset(HSQUIRRELVM v,SQInteger idx)
{ {
SQObjectPtr &self = stack_get(v, idx); SQObjectPtr &self = stack_get(v, idx);
SQObjectPtr &key = v->GetUp(-2); SQObjectPtr &key = v->GetUp(-2);
if(type(key) == OT_NULL) { if(sq_type(key) == OT_NULL) {
v->Pop(2); v->Pop(2);
return sq_throwerror(v, _SC("null key")); return sq_throwerror(v, _SC("null key"));
} }
switch(type(self)) { switch(sq_type(self)) {
case OT_TABLE: case OT_TABLE:
_table(self)->NewSlot(key, v->GetUp(-1)); _table(self)->NewSlot(key, v->GetUp(-1));
v->Pop(2); v->Pop(2);
@ -944,22 +944,28 @@ SQRESULT sq_rawset(HSQUIRRELVM v,SQInteger idx)
SQRESULT sq_newmember(HSQUIRRELVM v,SQInteger idx,SQBool bstatic) SQRESULT sq_newmember(HSQUIRRELVM v,SQInteger idx,SQBool bstatic)
{ {
SQObjectPtr &self = stack_get(v, idx); 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); SQObjectPtr &key = v->GetUp(-3);
if(type(key) == OT_NULL) return sq_throwerror(v, _SC("null key")); 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)) if(!v->NewSlotA(self,key,v->GetUp(-2),v->GetUp(-1),bstatic?true:false,false)) {
v->Pop(3);
return SQ_ERROR; return SQ_ERROR;
}
v->Pop(3);
return SQ_OK; return SQ_OK;
} }
SQRESULT sq_rawnewmember(HSQUIRRELVM v,SQInteger idx,SQBool bstatic) SQRESULT sq_rawnewmember(HSQUIRRELVM v,SQInteger idx,SQBool bstatic)
{ {
SQObjectPtr &self = stack_get(v, idx); 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); SQObjectPtr &key = v->GetUp(-3);
if(type(key) == OT_NULL) return sq_throwerror(v, _SC("null key")); 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)) if(!v->NewSlotA(self,key,v->GetUp(-2),v->GetUp(-1),bstatic?true:false,true)) {
v->Pop(3);
return SQ_ERROR; return SQ_ERROR;
}
v->Pop(3);
return SQ_OK; return SQ_OK;
} }
@ -967,23 +973,23 @@ SQRESULT sq_setdelegate(HSQUIRRELVM v,SQInteger idx)
{ {
SQObjectPtr &self = stack_get(v, idx); SQObjectPtr &self = stack_get(v, idx);
SQObjectPtr &mt = v->GetUp(-1); SQObjectPtr &mt = v->GetUp(-1);
SQObjectType type = type(self); SQObjectType type = sq_type(self);
switch(type) { switch(type) {
case OT_TABLE: case OT_TABLE:
if(type(mt) == OT_TABLE) { if(sq_type(mt) == OT_TABLE) {
if(!_table(self)->SetDelegate(_table(mt))) { if(!_table(self)->SetDelegate(_table(mt))) {
return sq_throwerror(v, _SC("delagate cycle")); return sq_throwerror(v, _SC("delagate cycle"));
} }
v->Pop(); v->Pop();
} }
else if(type(mt)==OT_NULL) { else if(sq_type(mt)==OT_NULL) {
_table(self)->SetDelegate(NULL); v->Pop(); } _table(self)->SetDelegate(NULL); v->Pop(); }
else return sq_aux_invalidtype(v,type); else return sq_aux_invalidtype(v,type);
break; break;
case OT_USERDATA: case OT_USERDATA:
if(type(mt)==OT_TABLE) { if(sq_type(mt)==OT_TABLE) {
_userdata(self)->SetDelegate(_table(mt)); v->Pop(); } _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(); } _userdata(self)->SetDelegate(NULL); v->Pop(); }
else return sq_aux_invalidtype(v, type); else return sq_aux_invalidtype(v, type);
break; break;
@ -1014,7 +1020,7 @@ SQRESULT sq_rawdeleteslot(HSQUIRRELVM v,SQInteger idx,SQBool pushval)
SQRESULT sq_getdelegate(HSQUIRRELVM v,SQInteger idx) SQRESULT sq_getdelegate(HSQUIRRELVM v,SQInteger idx)
{ {
SQObjectPtr &self=stack_get(v,idx); SQObjectPtr &self=stack_get(v,idx);
switch(type(self)){ switch(sq_type(self)){
case OT_TABLE: case OT_TABLE:
case OT_USERDATA: case OT_USERDATA:
if(!_delegable(self)->_delegate){ if(!_delegable(self)->_delegate){
@ -1043,7 +1049,7 @@ SQRESULT sq_rawget(HSQUIRRELVM v,SQInteger idx)
{ {
SQObjectPtr &self=stack_get(v,idx); SQObjectPtr &self=stack_get(v,idx);
SQObjectPtr &obj = v->GetUp(-1); SQObjectPtr &obj = v->GetUp(-1);
switch(type(self)) { switch(sq_type(self)) {
case OT_TABLE: case OT_TABLE:
if(_table(self)->Get(obj,obj)) if(_table(self)->Get(obj,obj))
return SQ_OK; return SQ_OK;
@ -1093,7 +1099,7 @@ const SQChar *sq_getlocal(HSQUIRRELVM v,SQUnsignedInteger level,SQUnsignedIntege
stackbase-=ci._prevstkbase; stackbase-=ci._prevstkbase;
} }
SQVM::CallInfo &ci=v->_callsstack[lvl]; SQVM::CallInfo &ci=v->_callsstack[lvl];
if(type(ci._closure)!=OT_CLOSURE) if(sq_type(ci._closure)!=OT_CLOSURE)
return NULL; return NULL;
SQClosure *c=_closure(ci._closure); SQClosure *c=_closure(ci._closure);
SQFunctionProto *func=c->_function; SQFunctionProto *func=c->_function;
@ -1154,7 +1160,7 @@ SQRESULT sq_reservestack(HSQUIRRELVM v,SQInteger nsize)
SQRESULT sq_resume(HSQUIRRELVM v,SQBool retval,SQBool raiseerror) 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 v->PushNull(); //retval
if (!v->Execute(v->GetUp(-2), 0, v->_top, v->GetUp(-1), raiseerror, SQVM::ET_RESUME_GENERATOR)) 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) void sq_setreleasehook(HSQUIRRELVM v,SQInteger idx,SQRELEASEHOOK hook)
{ {
SQObjectPtr &ud=stack_get(v,idx); SQObjectPtr &ud=stack_get(v,idx);
switch( type(ud) ) { switch(sq_type(ud) ) {
case OT_USERDATA: _userdata(ud)->_hook = hook; break; case OT_USERDATA: _userdata(ud)->_hook = hook; break;
case OT_INSTANCE: _instance(ud)->_hook = hook; break; case OT_INSTANCE: _instance(ud)->_hook = hook; break;
case OT_CLASS: _class(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) SQRELEASEHOOK sq_getreleasehook(HSQUIRRELVM v,SQInteger idx)
{ {
SQObjectPtr &ud=stack_get(v,idx); SQObjectPtr &ud=stack_get(v,idx);
switch( type(ud) ) { switch(sq_type(ud) ) {
case OT_USERDATA: return _userdata(ud)->_hook; break; case OT_USERDATA: return _userdata(ud)->_hook; break;
case OT_INSTANCE: return _instance(ud)->_hook; break; case OT_INSTANCE: return _instance(ud)->_hook; break;
case OT_CLASS: return _class(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); SQObjectPtr &self=stack_get(v,idx);
const SQChar *name = NULL; const SQChar *name = NULL;
switch(type(self)) switch(sq_type(self))
{ {
case OT_CLOSURE:{ case OT_CLOSURE:{
SQClosure *clo = _closure(self); 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) SQRESULT sq_setfreevariable(HSQUIRRELVM v,SQInteger idx,SQUnsignedInteger nval)
{ {
SQObjectPtr &self=stack_get(v,idx); SQObjectPtr &self=stack_get(v,idx);
switch(type(self)) switch(sq_type(self))
{ {
case OT_CLOSURE:{ case OT_CLOSURE:{
SQFunctionProto *fp = _closure(self)->_function; 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")); else return sq_throwerror(v,_SC("invalid free var index"));
break; break;
default: default:
return sq_aux_invalidtype(v,type(self)); return sq_aux_invalidtype(v, sq_type(self));
} }
v->Pop(); v->Pop();
return SQ_OK; return SQ_OK;
@ -1385,7 +1391,7 @@ SQRESULT sq_setattributes(HSQUIRRELVM v,SQInteger idx)
SQObjectPtr &key = stack_get(v,-2); SQObjectPtr &key = stack_get(v,-2);
SQObjectPtr &val = stack_get(v,-1); SQObjectPtr &val = stack_get(v,-1);
SQObjectPtr attrs; SQObjectPtr attrs;
if(type(key) == OT_NULL) { if(sq_type(key) == OT_NULL) {
attrs = _class(*o)->_attributes; attrs = _class(*o)->_attributes;
_class(*o)->_attributes = val; _class(*o)->_attributes = val;
v->Pop(2); v->Pop(2);
@ -1406,7 +1412,7 @@ SQRESULT sq_getattributes(HSQUIRRELVM v,SQInteger idx)
_GETSAFE_OBJ(v, idx, OT_CLASS,o); _GETSAFE_OBJ(v, idx, OT_CLASS,o);
SQObjectPtr &key = stack_get(v,-1); SQObjectPtr &key = stack_get(v,-1);
SQObjectPtr attrs; SQObjectPtr attrs;
if(type(key) == OT_NULL) { if(sq_type(key) == OT_NULL) {
attrs = _class(*o)->_attributes; attrs = _class(*o)->_attributes;
v->Pop(); v->Pop();
v->Push(attrs); 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) SQRESULT _getmemberbyhandle(HSQUIRRELVM v,SQObjectPtr &self,const HSQMEMBERHANDLE *handle,SQObjectPtr *&val)
{ {
switch(type(self)) { switch(sq_type(self)) {
case OT_INSTANCE: { case OT_INSTANCE: {
SQInstance *i = _instance(self); SQInstance *i = _instance(self);
if(handle->_static) { if(handle->_static) {
@ -1521,8 +1527,8 @@ SQRESULT sq_createinstance(HSQUIRRELVM v,SQInteger idx)
void sq_weakref(HSQUIRRELVM v,SQInteger idx) void sq_weakref(HSQUIRRELVM v,SQInteger idx)
{ {
SQObject &o=stack_get(v,idx); SQObject &o=stack_get(v,idx);
if(ISREFCOUNTED(type(o))) { if(ISREFCOUNTED(sq_type(o))) {
v->Push(_refcounted(o)->GetWeakRef(type(o))); v->Push(_refcounted(o)->GetWeakRef(sq_type(o)));
return; return;
} }
v->Push(o); v->Push(o);
@ -1531,7 +1537,7 @@ void sq_weakref(HSQUIRRELVM v,SQInteger idx)
SQRESULT sq_getweakrefval(HSQUIRRELVM v,SQInteger idx) SQRESULT sq_getweakrefval(HSQUIRRELVM v,SQInteger idx)
{ {
SQObjectPtr &o = stack_get(v,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")); return sq_throwerror(v,_SC("the object must be a weakref"));
} }
v->Push(_weakref(o)->_obj); v->Push(_weakref(o)->_obj);
@ -1560,7 +1566,7 @@ SQRESULT sq_getdefaultdelegate(HSQUIRRELVM v,SQObjectType t)
SQRESULT sq_next(HSQUIRRELVM v,SQInteger idx) SQRESULT sq_next(HSQUIRRELVM v,SQInteger idx)
{ {
SQObjectPtr o=stack_get(v,idx),&refpos = stack_get(v,-1),realkey,val; 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")); return sq_throwerror(v,_SC("cannot iterate a generator"));
} }
int faketojump; int faketojump;

View File

@ -169,7 +169,7 @@ static SQInteger get_slice_params(HSQUIRRELVM v,SQInteger &sidx,SQInteger &eidx,
o=stack_get(v,1); o=stack_get(v,1);
if(top>1){ if(top>1){
SQObjectPtr &start=stack_get(v,2); 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); sidx=tointeger(start);
} }
} }
@ -340,7 +340,7 @@ static SQInteger default_delegate_len(HSQUIRRELVM v)
static SQInteger default_delegate_tofloat(HSQUIRRELVM v) static SQInteger default_delegate_tofloat(HSQUIRRELVM v)
{ {
SQObjectPtr &o=stack_get(v,1); SQObjectPtr &o=stack_get(v,1);
switch(type(o)){ switch(sq_type(o)){
case OT_STRING:{ case OT_STRING:{
SQObjectPtr res; SQObjectPtr res;
if(str2num(_stringval(o),res,10)){ if(str2num(_stringval(o),res,10)){
@ -369,7 +369,7 @@ static SQInteger default_delegate_tointeger(HSQUIRRELVM v)
if(sq_gettop(v) > 1) { if(sq_gettop(v) > 1) {
sq_getinteger(v,2,&base); sq_getinteger(v,2,&base);
} }
switch(type(o)){ switch(sq_type(o)){
case OT_STRING:{ case OT_STRING:{
SQObjectPtr res; SQObjectPtr res;
if(str2num(_stringval(o),res,base)){ if(str2num(_stringval(o),res,base)){
@ -936,7 +936,7 @@ static SQInteger closure_setroot(HSQUIRRELVM v)
static SQInteger closure_getinfos(HSQUIRRELVM v) { static SQInteger closure_getinfos(HSQUIRRELVM v) {
SQObject o = stack_get(v,1); SQObject o = stack_get(v,1);
SQTable *res = SQTable::Create(_ss(v),4); SQTable *res = SQTable::Create(_ss(v),4);
if(type(o) == OT_CLOSURE) { if(sq_type(o) == OT_CLOSURE) {
SQFunctionProto *f = _closure(o)->_function; SQFunctionProto *f = _closure(o)->_function;
SQInteger nparams = f->_nparameters + (f->_varparams?1:0); SQInteger nparams = f->_nparameters + (f->_varparams?1:0);
SQObjectPtr params = SQArray::Create(_ss(v),nparams); SQObjectPtr params = SQArray::Create(_ss(v),nparams);
@ -1015,7 +1015,7 @@ const SQRegFunction SQSharedState::_generator_default_delegate_funcz[]={
static SQInteger thread_call(HSQUIRRELVM v) static SQInteger thread_call(HSQUIRRELVM v)
{ {
SQObjectPtr o = stack_get(v,1); SQObjectPtr o = stack_get(v,1);
if(type(o) == OT_THREAD) { if(sq_type(o) == OT_THREAD) {
SQInteger nparams = sq_gettop(v); SQInteger nparams = sq_gettop(v);
_thread(o)->Push(_thread(o)->_roottable); _thread(o)->Push(_thread(o)->_roottable);
for(SQInteger i = 2; i<(nparams+1); i++) for(SQInteger i = 2; i<(nparams+1); i++)
@ -1034,7 +1034,7 @@ static SQInteger thread_call(HSQUIRRELVM v)
static SQInteger thread_wakeup(HSQUIRRELVM v) static SQInteger thread_wakeup(HSQUIRRELVM v)
{ {
SQObjectPtr o = stack_get(v,1); SQObjectPtr o = stack_get(v,1);
if(type(o) == OT_THREAD) { if(sq_type(o) == OT_THREAD) {
SQVM *thread = _thread(o); SQVM *thread = _thread(o);
SQInteger state = sq_getvmstate(thread); SQInteger state = sq_getvmstate(thread);
if(state != SQ_VMSTATE_SUSPENDED) { if(state != SQ_VMSTATE_SUSPENDED) {
@ -1070,7 +1070,7 @@ static SQInteger thread_wakeup(HSQUIRRELVM v)
static SQInteger thread_wakeupthrow(HSQUIRRELVM v) static SQInteger thread_wakeupthrow(HSQUIRRELVM v)
{ {
SQObjectPtr o = stack_get(v,1); SQObjectPtr o = stack_get(v,1);
if(type(o) == OT_THREAD) { if(sq_type(o) == OT_THREAD) {
SQVM *thread = _thread(o); SQVM *thread = _thread(o);
SQInteger state = sq_getvmstate(thread); SQInteger state = sq_getvmstate(thread);
if(state != SQ_VMSTATE_SUSPENDED) { if(state != SQ_VMSTATE_SUSPENDED) {
@ -1130,7 +1130,7 @@ static SQInteger thread_getstatus(HSQUIRRELVM v)
static SQInteger thread_getstackinfos(HSQUIRRELVM v) static SQInteger thread_getstackinfos(HSQUIRRELVM v)
{ {
SQObjectPtr o = stack_get(v,1); SQObjectPtr o = stack_get(v,1);
if(type(o) == OT_THREAD) { if(sq_type(o) == OT_THREAD) {
SQVM *thread = _thread(o); SQVM *thread = _thread(o);
SQInteger threadtop = sq_gettop(thread); SQInteger threadtop = sq_gettop(thread);
SQInteger level; SQInteger level;
@ -1139,7 +1139,7 @@ static SQInteger thread_getstackinfos(HSQUIRRELVM v)
if(SQ_FAILED(res)) if(SQ_FAILED(res))
{ {
sq_settop(thread,threadtop); sq_settop(thread,threadtop);
if(type(thread->_lasterror) == OT_STRING) { if(sq_type(thread->_lasterror) == OT_STRING) {
sq_throwerror(v,_stringval(thread->_lasterror)); sq_throwerror(v,_stringval(thread->_lasterror));
} }
else { else {

View File

@ -53,7 +53,7 @@ SQClass::~SQClass()
bool SQClass::NewSlot(SQSharedState *ss,const SQObjectPtr &key,const SQObjectPtr &val,bool bstatic) bool SQClass::NewSlot(SQSharedState *ss,const SQObjectPtr &key,const SQObjectPtr &val,bool bstatic)
{ {
SQObjectPtr temp; 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) if(_locked && !belongs_to_static_table)
return false; //the class already has an instance so cannot be modified return false; //the class already has an instance so cannot be modified
if(_members->Get(key,temp) && _isfield(temp)) //overrides the default value 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) { if(belongs_to_static_table) {
SQInteger mmidx; 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) { (mmidx = ss->GetMetaMethodIdxByName(key)) != -1) {
_metamethods[mmidx] = val; _metamethods[mmidx] = val;
} }
else { else {
SQObjectPtr theval = val; SQObjectPtr theval = val;
if(_base && type(val) == OT_CLOSURE) { if(_base && sq_type(val) == OT_CLOSURE) {
theval = _closure(val)->Clone(); theval = _closure(val)->Clone();
_closure(theval)->_base = _base; _closure(theval)->_base = _base;
__ObjAddRef(_base); //ref for the closure __ObjAddRef(_base); //ref for the closure
} }
if(type(temp) == OT_NULL) { if(sq_type(temp) == OT_NULL) {
bool isconstructor; bool isconstructor;
SQVM::IsEqual(ss->_constructoridx, key, isconstructor); SQVM::IsEqual(ss->_constructoridx, key, isconstructor);
if(isconstructor) { if(isconstructor) {
@ -191,7 +191,7 @@ SQInstance::~SQInstance()
bool SQInstance::GetMetaMethod(SQVM* SQ_UNUSED_ARG(v),SQMetaMethod mm,SQObjectPtr &res) 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]; res = _class->_metamethods[mm];
return true; return true;
} }

View File

@ -191,7 +191,7 @@ public:
} }
else { else {
if(_raiseerror && _ss(_vm)->_compilererrorhandler) { 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); _lex._currentline, _lex._currentcolumn);
} }
_vm->_lasterror = SQString::Create(_ss(_vm), _compilererror, -1); _vm->_lasterror = SQString::Create(_ss(_vm), _compilererror, -1);
@ -466,7 +466,7 @@ public:
INVOKE_EXP(f); INVOKE_EXP(f);
SQInteger op1 = _fs->PopTarget();SQInteger op2 = _fs->PopTarget(); SQInteger op1 = _fs->PopTarget();SQInteger op2 = _fs->PopTarget();
_fs->AddInstruction(op, _fs->PushTarget(), op1, op2, op3); _fs->AddInstruction(op, _fs->PushTarget(), op1, op2, op3);
_es.etype = EXPR; _es.etype = EXPR;
} }
void LogicalOrExp() void LogicalOrExp()
{ {
@ -483,7 +483,7 @@ public:
if(trg != second_exp) _fs->AddInstruction(_OP_MOVE, trg, second_exp); if(trg != second_exp) _fs->AddInstruction(_OP_MOVE, trg, second_exp);
_fs->SnoozeOpt(); _fs->SnoozeOpt();
_fs->SetIntructionParam(jpos, 1, (_fs->GetCurrentPos() - jpos)); _fs->SetIntructionParam(jpos, 1, (_fs->GetCurrentPos() - jpos));
_es.etype = EXPR; _es.etype = EXPR;
break; break;
}else return; }else return;
} }
@ -503,7 +503,7 @@ public:
if(trg != second_exp) _fs->AddInstruction(_OP_MOVE, trg, second_exp); if(trg != second_exp) _fs->AddInstruction(_OP_MOVE, trg, second_exp);
_fs->SnoozeOpt(); _fs->SnoozeOpt();
_fs->SetIntructionParam(jpos, 1, (_fs->GetCurrentPos() - jpos)); _fs->SetIntructionParam(jpos, 1, (_fs->GetCurrentPos() - jpos));
_es.etype = EXPR; _es.etype = EXPR;
break; break;
} }
@ -765,7 +765,7 @@ public:
/* Handle named constant */ /* Handle named constant */
SQObjectPtr constval; SQObjectPtr constval;
SQObject constid; SQObject constid;
if(type(constant) == OT_TABLE) { if(sq_type(constant) == OT_TABLE) {
Expect('.'); Expect('.');
constid = Expect(TK_IDENTIFIER); constid = Expect(TK_IDENTIFIER);
if(!_table(constant)->Get(constid, constval)) { if(!_table(constant)->Get(constid, constval)) {
@ -779,7 +779,7 @@ public:
_es.epos = _fs->PushTarget(); _es.epos = _fs->PushTarget();
/* generate direct or literal function depending on size */ /* generate direct or literal function depending on size */
SQObjectType ctype = type(constval); SQObjectType ctype = sq_type(constval);
switch(ctype) { switch(ctype) {
case OT_INTEGER: EmitLoadConstInt(_integer(constval),_es.epos); break; case OT_INTEGER: EmitLoadConstInt(_integer(constval),_es.epos); break;
case OT_FLOAT: EmitLoadConstFloat(_float(constval),_es.epos); break; case OT_FLOAT: EmitLoadConstFloat(_float(constval),_es.epos); break;

View File

@ -17,8 +17,8 @@ SQRESULT sq_getfunctioninfo(HSQUIRRELVM v,SQInteger level,SQFunctionInfo *fi)
SQClosure *c = _closure(ci._closure); SQClosure *c = _closure(ci._closure);
SQFunctionProto *proto = c->_function; SQFunctionProto *proto = c->_function;
fi->funcid = proto; fi->funcid = proto;
fi->name = type(proto->_name) == OT_STRING?_stringval(proto->_name):_SC("unknown"); fi->name = sq_type(proto->_name) == OT_STRING?_stringval(proto->_name):_SC("unknown");
fi->source = type(proto->_sourcename) == OT_STRING?_stringval(proto->_sourcename):_SC("unknown"); fi->source = sq_type(proto->_sourcename) == OT_STRING?_stringval(proto->_sourcename):_SC("unknown");
fi->line = proto->_lineinfos[0]._line; fi->line = proto->_lineinfos[0]._line;
return SQ_OK; return SQ_OK;
} }
@ -32,12 +32,12 @@ SQRESULT sq_stackinfos(HSQUIRRELVM v, SQInteger level, SQStackInfos *si)
if (cssize > level) { if (cssize > level) {
memset(si, 0, sizeof(SQStackInfos)); memset(si, 0, sizeof(SQStackInfos));
SQVM::CallInfo &ci = v->_callsstack[cssize-level-1]; SQVM::CallInfo &ci = v->_callsstack[cssize-level-1];
switch (type(ci._closure)) { switch (sq_type(ci._closure)) {
case OT_CLOSURE:{ case OT_CLOSURE:{
SQFunctionProto *func = _closure(ci._closure)->_function; SQFunctionProto *func = _closure(ci._closure)->_function;
if (type(func->_name) == OT_STRING) if (sq_type(func->_name) == OT_STRING)
si->funcname = _stringval(func->_name); si->funcname = _stringval(func->_name);
if (type(func->_sourcename) == OT_STRING) if (sq_type(func->_sourcename) == OT_STRING)
si->source = _stringval(func->_sourcename); si->source = _stringval(func->_sourcename);
si->line = func->GetLine(ci._ip); si->line = func->GetLine(ci._ip);
} }
@ -45,7 +45,7 @@ SQRESULT sq_stackinfos(HSQUIRRELVM v, SQInteger level, SQStackInfos *si)
case OT_NATIVECLOSURE: case OT_NATIVECLOSURE:
si->source = _SC("NATIVE"); si->source = _SC("NATIVE");
si->funcname = _SC("unknown"); 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->funcname = _stringval(_nativeclosure(ci._closure)->_name);
si->line = -1; si->line = -1;
break; break;
@ -73,7 +73,7 @@ void SQVM::Raise_Error(const SQObjectPtr &desc)
SQString *SQVM::PrintObjVal(const SQObjectPtr &o) SQString *SQVM::PrintObjVal(const SQObjectPtr &o)
{ {
switch(type(o)) { switch(sq_type(o)) {
case OT_STRING: return _string(o); case OT_STRING: return _string(o);
case OT_INTEGER: case OT_INTEGER:
scsprintf(_sp(sq_rsl(NUMBER_MAX_CHAR+1)),sq_rsl(NUMBER_MAX_CHAR), _PRINT_INT_FMT, _integer(o)); scsprintf(_sp(sq_rsl(NUMBER_MAX_CHAR+1)),sq_rsl(NUMBER_MAX_CHAR), _PRINT_INT_FMT, _integer(o));

View File

@ -77,7 +77,7 @@ SQInstructionDesc g_InstrDesc[]={
#endif #endif
void DumpLiteral(SQObjectPtr &o) void DumpLiteral(SQObjectPtr &o)
{ {
switch(type(o)){ switch(sq_type(o)){
case OT_STRING: scprintf(_SC("\"%s\""),_stringval(o));break; case OT_STRING: scprintf(_SC("\"%s\""),_stringval(o));break;
case OT_FLOAT: scprintf(_SC("{%f}"),_float(o));break; case OT_FLOAT: scprintf(_SC("{%f}"),_float(o));break;
case OT_INTEGER: scprintf(_SC("{") _PRINT_INT_FMT _SC("}"),_integer(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(); SQUnsignedInteger npos=_targetstack.back();
assert(npos < _vlocals.size()); assert(npos < _vlocals.size());
SQLocalVarInfo &t = _vlocals[npos]; SQLocalVarInfo &t = _vlocals[npos];
if(type(t._name)==OT_NULL){ if(sq_type(t._name)==OT_NULL){
_vlocals.pop_back(); _vlocals.pop_back();
} }
_targetstack.pop_back(); _targetstack.pop_back();
@ -322,7 +322,7 @@ void SQFuncState::SetStackSize(SQInteger n)
while(size>n){ while(size>n){
size--; size--;
SQLocalVarInfo lvi = _vlocals.back(); 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 if(lvi._end_op == UINT_MINUS_ONE) { //this means is an outer
_outers--; _outers--;
} }
@ -346,7 +346,7 @@ bool SQFuncState::IsConstant(const SQObject &name,SQObject &e)
bool SQFuncState::IsLocal(SQUnsignedInteger stkpos) bool SQFuncState::IsLocal(SQUnsignedInteger stkpos)
{ {
if(stkpos>=_vlocals.size())return false; 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; return false;
} }
@ -369,7 +369,7 @@ SQInteger SQFuncState::GetLocalVariable(const SQObject &name)
SQInteger locals=_vlocals.size(); SQInteger locals=_vlocals.size();
while(locals>=1){ while(locals>=1){
SQLocalVarInfo &lvi = _vlocals[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; return locals-1;
} }
locals--; locals--;

View File

@ -43,7 +43,7 @@ const SQChar *IdType2Name(SQObjectType type)
const SQChar *GetTypeName(const SQObjectPtr &obj1) 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) 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) SQUnsignedInteger TranslateIndex(const SQObjectPtr &idx)
{ {
switch(type(idx)){ switch(sq_type(idx)){
case OT_NULL: case OT_NULL:
return 0; return 0;
case OT_INTEGER: case OT_INTEGER:
@ -139,7 +139,7 @@ bool SQGenerator::Yield(SQVM *v,SQInteger target)
_stack.resize(size); _stack.resize(size);
SQObject _this = v->_stack[v->_stackbase]; 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++) { for(SQInteger n =1; n<target; n++) {
_stack._vals[n] = v->_stack[v->_stackbase+n]; _stack._vals[n] = v->_stack[v->_stackbase+n];
} }
@ -191,7 +191,7 @@ bool SQGenerator::Resume(SQVM *v,SQObjectPtr &dest)
et._stacksize += newbase; et._stacksize += newbase;
} }
SQObject _this = _stack._vals[0]; 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++) { for(SQInteger n = 1; n<size; n++) {
v->_stack[v->_stackbase+n] = _stack._vals[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) 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))); _CHECK_IO(SafeWrite(v,write,up,&_type,sizeof(_type)));
switch(type(o)){ switch(sq_type(o)){
case OT_STRING: case OT_STRING:
_CHECK_IO(SafeWrite(v,write,up,&_string(o)->_len,sizeof(SQInteger))); _CHECK_IO(SafeWrite(v,write,up,&_string(o)->_len,sizeof(SQInteger)));
_CHECK_IO(SafeWrite(v,write,up,_stringval(o),sq_rsl(_string(o)->_len))); _CHECK_IO(SafeWrite(v,write,up,_stringval(o),sq_rsl(_string(o)->_len)));

View File

@ -101,7 +101,7 @@ struct SQWeakRef : SQRefCounted
SQObject _obj; 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; struct SQObjectPtr;
@ -128,8 +128,7 @@ struct SQObjectPtr;
(obj)->_uiRef++; \ (obj)->_uiRef++; \
} }
#define type(obj) ((obj)._type) #define is_delegable(t) (sq_type(t)&SQOBJECT_DELEGABLE)
#define is_delegable(t) (type(t)&SQOBJECT_DELEGABLE)
#define raw_type(obj) _RAW_TYPE((obj)._type) #define raw_type(obj) _RAW_TYPE((obj)._type)
#define _integer(obj) ((obj)._unVal.nInteger) #define _integer(obj) ((obj)._unVal.nInteger)
@ -155,8 +154,8 @@ struct SQObjectPtr;
#define _stringval(obj) (obj)._unVal.pString->_val #define _stringval(obj) (obj)._unVal.pString->_val
#define _userdataval(obj) ((SQUserPointer)sq_aligning((obj)._unVal.pUserData + 1)) #define _userdataval(obj) ((SQUserPointer)sq_aligning((obj)._unVal.pUserData + 1))
#define tofloat(num) ((type(num)==OT_INTEGER)?(SQFloat)_integer(num):_float(num)) #define tofloat(num) ((sq_type(num)==OT_INTEGER)?(SQFloat)_integer(num):_float(num))
#define tointeger(num) ((type(num)==OT_FLOAT)?(SQInteger)_float(num):_integer(num)) #define tointeger(num) ((sq_type(num)==OT_FLOAT)?(SQInteger)_float(num):_integer(num))
///////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////
#if defined(SQUSEDOUBLE) && !defined(_SQ64) || !defined(SQUSEDOUBLE) && defined(_SQ64) #if defined(SQUSEDOUBLE) && !defined(_SQ64) || !defined(SQUSEDOUBLE) && defined(_SQ64)

View File

@ -212,7 +212,7 @@ SQSharedState::~SQSharedState()
SQInteger SQSharedState::GetMetaMethodIdxByName(const SQObjectPtr &name) SQInteger SQSharedState::GetMetaMethodIdxByName(const SQObjectPtr &name)
{ {
if(type(name) != OT_STRING) if(sq_type(name) != OT_STRING)
return -1; return -1;
SQObjectPtr ret; SQObjectPtr ret;
if(_table(_metamethodsmap)->Get(name,ret)) { if(_table(_metamethodsmap)->Get(name,ret)) {
@ -225,7 +225,7 @@ SQInteger SQSharedState::GetMetaMethodIdxByName(const SQObjectPtr &name)
void SQSharedState::MarkObject(SQObjectPtr &o,SQCollectable **chain) void SQSharedState::MarkObject(SQObjectPtr &o,SQCollectable **chain)
{ {
switch(type(o)){ switch(sq_type(o)){
case OT_TABLE:_table(o)->Mark(chain);break; case OT_TABLE:_table(o)->Mark(chain);break;
case OT_ARRAY:_array(o)->Mark(chain);break; case OT_ARRAY:_array(o)->Mark(chain);break;
case OT_USERDATA:_userdata(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; RefNode *nodes = (RefNode *)_nodes;
for(SQUnsignedInteger n = 0; n < _numofslots; n++) { 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); SQSharedState::MarkObject(nodes->obj,chain);
} }
nodes++; nodes++;
@ -475,7 +475,7 @@ void RefTable::Resize(SQUnsignedInteger size)
//rehash //rehash
SQUnsignedInteger nfound = 0; SQUnsignedInteger nfound = 0;
for(SQUnsignedInteger n = 0; n < oldnumofslots; n++) { for(SQUnsignedInteger n = 0; n < oldnumofslots; n++) {
if(type(t->obj) != OT_NULL) { if(sq_type(t->obj) != OT_NULL) {
//add back; //add back;
assert(t->refs != 0); assert(t->refs != 0);
RefNode *nn = Add(::HashObj(t->obj)&(_numofslots-1),t->obj); 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); mainpos = ::HashObj(obj)&(_numofslots-1);
*prev = NULL; *prev = NULL;
for (ref = _buckets[mainpos]; ref; ) { 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; break;
*prev = ref; *prev = ref;
ref = ref->next; ref = ref->next;

View File

@ -62,7 +62,7 @@ void SQTable::Rehash(bool force)
_usednodes = 0; _usednodes = 0;
for (SQInteger i=0; i<oldsize; i++) { for (SQInteger i=0; i<oldsize; i++) {
_HashNode *old = nold+i; _HashNode *old = nold+i;
if (type(old->key) != OT_NULL) if (sq_type(old->key) != OT_NULL)
NewSlot(old->key,old->val); NewSlot(old->key,old->val);
} }
for(SQInteger k=0;k<oldsize;k++) for(SQInteger k=0;k<oldsize;k++)
@ -107,7 +107,7 @@ SQTable *SQTable::Clone()
bool SQTable::Get(const SQObjectPtr &key,SQObjectPtr &val) bool SQTable::Get(const SQObjectPtr &key,SQObjectPtr &val)
{ {
if(type(key) == OT_NULL) if(sq_type(key) == OT_NULL)
return false; return false;
_HashNode *n = _Get(key, HashObj(key) & (_numofnodes - 1)); _HashNode *n = _Get(key, HashObj(key) & (_numofnodes - 1));
if (n) { if (n) {
@ -118,7 +118,7 @@ bool SQTable::Get(const SQObjectPtr &key,SQObjectPtr &val)
} }
bool SQTable::NewSlot(const SQObjectPtr &key,const 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); SQHash h = HashObj(key) & (_numofnodes - 1);
_HashNode *n = _Get(key, h); _HashNode *n = _Get(key, h);
if (n) { if (n) {
@ -132,7 +132,7 @@ bool SQTable::NewSlot(const SQObjectPtr &key,const SQObjectPtr &val)
//key not found I'll insert it //key not found I'll insert it
//main pos is not free //main pos is not free
if(type(mp->key) != OT_NULL) { if(sq_type(mp->key) != OT_NULL) {
n = _firstfree; /* get a free place */ n = _firstfree; /* get a free place */
SQHash mph = HashObj(mp->key) & (_numofnodes - 1); SQHash mph = HashObj(mp->key) & (_numofnodes - 1);
_HashNode *othern; /* main position of colliding node */ _HashNode *othern; /* main position of colliding node */
@ -161,7 +161,7 @@ bool SQTable::NewSlot(const SQObjectPtr &key,const SQObjectPtr &val)
mp->key = key; mp->key = key;
for (;;) { /* correct `firstfree' */ 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; mp->val = val;
_usednodes++; _usednodes++;
return true; /* OK; table still has a free place */ 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); SQInteger idx = (SQInteger)TranslateIndex(refpos);
while (idx < _numofnodes) { while (idx < _numofnodes) {
if(type(_nodes[idx].key) != OT_NULL) { if(sq_type(_nodes[idx].key) != OT_NULL) {
//first found //first found
_HashNode &n = _nodes[idx]; _HashNode &n = _nodes[idx];
outkey = n.key; outkey = n.key;

View File

@ -14,7 +14,7 @@
inline SQHash HashObj(const SQObjectPtr &key) inline SQHash HashObj(const SQObjectPtr &key)
{ {
switch(type(key)) { switch(sq_type(key)) {
case OT_STRING: return _string(key)->_hash; case OT_STRING: return _string(key)->_hash;
case OT_FLOAT: return (SQHash)((SQInteger)_float(key)); case OT_FLOAT: return (SQHash)((SQInteger)_float(key));
case OT_BOOL: case OT_INTEGER: return (SQHash)((SQInteger)_integer(key)); case OT_BOOL: case OT_INTEGER: return (SQHash)((SQInteger)_integer(key));
@ -67,7 +67,7 @@ public:
{ {
_HashNode *n = &_nodes[hash]; _HashNode *n = &_nodes[hash];
do{ 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; return n;
} }
}while((n = n->next)); }while((n = n->next));
@ -80,7 +80,7 @@ public:
_HashNode *n = &_nodes[hash & (_numofnodes - 1)]; _HashNode *n = &_nodes[hash & (_numofnodes - 1)];
_HashNode *res = NULL; _HashNode *res = NULL;
do{ 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; res = n;
break; break;
} }

View File

@ -21,7 +21,7 @@
bool SQVM::BW_OP(SQUnsignedInteger op,SQObjectPtr &trg,const SQObjectPtr &o1,const SQObjectPtr &o2) bool SQVM::BW_OP(SQUnsignedInteger op,SQObjectPtr &trg,const SQObjectPtr &o1,const SQObjectPtr &o2)
{ {
SQInteger res; 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); SQInteger i1 = _integer(o1), i2 = _integer(o2);
switch(op) { switch(op) {
@ -41,7 +41,7 @@ bool SQVM::BW_OP(SQUnsignedInteger op,SQObjectPtr &trg,const SQObjectPtr &o1,con
#define _ARITH_(op,trg,o1,o2) \ #define _ARITH_(op,trg,o1,o2) \
{ \ { \
SQInteger tmask = type(o1)|type(o2); \ SQInteger tmask = sq_type(o1)|sq_type(o2); \
switch(tmask) { \ switch(tmask) { \
case OT_INTEGER: trg = _integer(o1) op _integer(o2);break; \ case OT_INTEGER: trg = _integer(o1) op _integer(o2);break; \
case (OT_FLOAT|OT_INTEGER): \ 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) \ #define _ARITH_NOZERO(op,trg,o1,o2,err) \
{ \ { \
SQInteger tmask = type(o1)|type(o2); \ SQInteger tmask = sq_type(o1)|sq_type(o2); \
switch(tmask) { \ 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_INTEGER: { SQInteger i2 = _integer(o2); if(i2 == 0) { Raise_Error(err); SQ_THROW(); } trg = _integer(o1) op i2; } break;\
case (OT_FLOAT|OT_INTEGER): \ 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) 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) { switch(tmask) {
case OT_INTEGER:{ case OT_INTEGER:{
SQInteger res, i1 = _integer(o1), i2 = _integer(o2); 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) bool SQVM::NEG_OP(SQObjectPtr &trg,const SQObjectPtr &o)
{ {
switch(type(o)) { switch(sq_type(o)) {
case OT_INTEGER: case OT_INTEGER:
trg = -_integer(o); trg = -_integer(o);
return true; return true;
@ -206,7 +206,7 @@ bool SQVM::NEG_OP(SQObjectPtr &trg,const SQObjectPtr &o)
#define _RET_SUCCEED(exp) { result = (exp); return true; } #define _RET_SUCCEED(exp) { result = (exp); return true; }
bool SQVM::ObjCmp(const SQObjectPtr &o1,const SQObjectPtr &o2,SQInteger &result) 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(t1 == t2) {
if(_rawval(o1) == _rawval(o2))_RET_SUCCEED(0); if(_rawval(o1) == _rawval(o2))_RET_SUCCEED(0);
SQObjectPtr res; 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)) { if(_delegable(o1)->GetMetaMethod(this, MT_CMP, closure)) {
Push(o1);Push(o2); Push(o1);Push(o2);
if(CallMetaMethod(closure,MT_CMP,2,res)) { 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")); Raise_Error(_SC("_cmp must return an integer"));
return false; 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) bool SQVM::ToString(const SQObjectPtr &o,SQObjectPtr &res)
{ {
switch(type(o)) { switch(sq_type(o)) {
case OT_STRING: case OT_STRING:
res = o; res = o;
return true; return true;
@ -304,7 +304,7 @@ bool SQVM::ToString(const SQObjectPtr &o,SQObjectPtr &res)
if(_delegable(o)->GetMetaMethod(this, MT_TOSTRING, closure)) { if(_delegable(o)->GetMetaMethod(this, MT_TOSTRING, closure)) {
Push(o); Push(o);
if(CallMetaMethod(closure,MT_TOSTRING,1,res)) { if(CallMetaMethod(closure,MT_TOSTRING,1,res)) {
if(type(res) == OT_STRING) if(sq_type(res) == OT_STRING)
return true; return true;
} }
else { 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) &o3,SQObjectPtr &o4,SQInteger SQ_UNUSED_ARG(arg_2),int exitpos,int &jump)
{ {
SQInteger nrefidx; SQInteger nrefidx;
switch(type(o1)) { switch(sq_type(o1)) {
case OT_TABLE: case OT_TABLE:
if((nrefidx = _table(o1)->Next(false,o4, o2, o3)) == -1) _FINISH(exitpos); if((nrefidx = _table(o1)->Next(false,o4, o2, o3)) == -1) _FINISH(exitpos);
o4 = (SQInteger)nrefidx; _FINISH(1); o4 = (SQInteger)nrefidx; _FINISH(1);
@ -542,7 +542,7 @@ bool SQVM::FOREACH_OP(SQObjectPtr &o1,SQObjectPtr &o2,SQObjectPtr
Push(o4); Push(o4);
if(CallMetaMethod(closure, MT_NEXTI, 2, itr)) { if(CallMetaMethod(closure, MT_NEXTI, 2, itr)) {
o4 = o2 = 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)) { if(!Get(o1, itr, o3, 0, DONT_FALL_BACK)) {
Raise_Error(_SC("_nexti returned an invalid idx")); // cloud be changed Raise_Error(_SC("_nexti returned an invalid idx")); // cloud be changed
return false; 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::eDead) _FINISH(exitpos);
if(_generator(o1)->_state == SQGenerator::eSuspended) { if(_generator(o1)->_state == SQGenerator::eSuspended) {
SQInteger idx = 0; SQInteger idx = 0;
if(type(o4) == OT_INTEGER) { if(sq_type(o4) == OT_INTEGER) {
idx = _integer(o4) + 1; idx = _integer(o4) + 1;
} }
o2 = idx; o2 = idx;
@ -616,14 +616,14 @@ bool SQVM::CLASS_OP(SQObjectPtr &target,SQInteger baseclass,SQInteger attributes
SQClass *base = NULL; SQClass *base = NULL;
SQObjectPtr attrs; SQObjectPtr attrs;
if(baseclass != -1) { 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]); base = _class(_stack._vals[_stackbase + baseclass]);
} }
if(attributes != MAX_FUNC_STACKSIZE) { if(attributes != MAX_FUNC_STACKSIZE) {
attrs = _stack._vals[_stackbase+attributes]; attrs = _stack._vals[_stackbase+attributes];
} }
target = SQClass::Create(_ss(this),base); 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; int nparams = 2;
SQObjectPtr ret; SQObjectPtr ret;
Push(target); Push(attrs); 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) 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)); res = (_rawval(o1) == _rawval(o2));
} }
else { else {
@ -655,8 +655,8 @@ bool SQVM::IsEqual(const SQObjectPtr &o1,const SQObjectPtr &o2,bool &res)
bool SQVM::IsFalse(SQObjectPtr &o) bool SQVM::IsFalse(SQObjectPtr &o)
{ {
if(((type(o) & SQOBJECT_CANBEFALSE) if(((sq_type(o) & SQOBJECT_CANBEFALSE)
&& ( ((type(o) == OT_FLOAT) && (_float(o) == SQFloat(0.0))) )) && ( ((sq_type(o) == OT_FLOAT) && (_float(o) == SQFloat(0.0))) ))
#if !defined(SQUSEDOUBLE) || (defined(SQUSEDOUBLE) && defined(_SQ64)) #if !defined(SQUSEDOUBLE) || (defined(SQUSEDOUBLE) && defined(_SQ64))
|| (_integer(o) == 0) ) //OT_NULL|OT_INTEGER|OT_BOOL || (_integer(o) == 0) ) //OT_NULL|OT_INTEGER|OT_BOOL
#else #else
@ -723,22 +723,22 @@ exception_restore:
case _OP_DLOAD: TARGET = ci->_literals[arg1]; STK(arg2) = ci->_literals[arg3];continue; case _OP_DLOAD: TARGET = ci->_literals[arg1]; STK(arg2) = ci->_literals[arg3];continue;
case _OP_TAILCALL:{ case _OP_TAILCALL:{
SQObjectPtr &t = STK(arg1); SQObjectPtr &t = STK(arg1);
if (type(t) == OT_CLOSURE if (sq_type(t) == OT_CLOSURE
&& (!_closure(t)->_function->_bgenerator)){ && (!_closure(t)->_function->_bgenerator)){
SQObjectPtr clo = t; SQObjectPtr clo = t;
SQInteger last_top = _top; SQInteger last_top = _top;
if(_openouters) CloseOuters(&(_stack._vals[_stackbase])); if(_openouters) CloseOuters(&(_stack._vals[_stackbase]));
for (SQInteger i = 0; i < arg3; i++) STK(i) = STK(arg2 + i); for (SQInteger i = 0; i < arg3; i++) STK(i) = STK(arg2 + i);
_GUARD(StartCall(_closure(clo), ci->_target, arg3, _stackbase, true)); _GUARD(StartCall(_closure(clo), ci->_target, arg3, _stackbase, true));
if (last_top >= _top) { if (last_top >= _top) {
_top = last_top; _top = last_top;
} }
continue; continue;
} }
} }
case _OP_CALL: { case _OP_CALL: {
SQObjectPtr clo = STK(arg1); SQObjectPtr clo = STK(arg1);
switch (type(clo)) { switch (sq_type(clo)) {
case OT_CLOSURE: case OT_CLOSURE:
_GUARD(StartCall(_closure(clo), sarg0, arg3, _stackbase+arg2, false)); _GUARD(StartCall(_closure(clo), sarg0, arg3, _stackbase+arg2, false));
continue; continue;
@ -766,7 +766,7 @@ exception_restore:
STK(arg0) = inst; STK(arg0) = inst;
} }
SQInteger stkbase; SQInteger stkbase;
switch(type(clo)) { switch(sq_type(clo)) {
case OT_CLOSURE: case OT_CLOSURE:
stkbase = _stackbase+arg2; stkbase = _stackbase+arg2;
_stack._vals[stkbase] = inst; _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_LOADNULLS:{ for(SQInt32 n=0; n < arg1; n++) STK(arg0+n).Null(); }continue;
case _OP_LOADROOT: { case _OP_LOADROOT: {
SQWeakRef *w = _closure(ci->_closure)->_root; SQWeakRef *w = _closure(ci->_closure)->_root;
if(type(w->_obj) != OT_NULL) { if(sq_type(w->_obj) != OT_NULL) {
TARGET = w->_obj; TARGET = w->_obj;
} else { } else {
TARGET = _roottable; //shoud this be like this? or null 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_INC: {SQObjectPtr o(sarg3); _GUARD(DerefInc('+',TARGET, STK(arg1), STK(arg2), o, false, arg1));} continue;
case _OP_INCL: { case _OP_INCL: {
SQObjectPtr &a = STK(arg1); SQObjectPtr &a = STK(arg1);
if(type(a) == OT_INTEGER) { if(sq_type(a) == OT_INTEGER) {
a._unVal.nInteger = _integer(a) + sarg3; a._unVal.nInteger = _integer(a) + sarg3;
} }
else { 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_PINC: {SQObjectPtr o(sarg3); _GUARD(DerefInc('+',TARGET, STK(arg1), STK(arg2), o, true, arg1));} continue;
case _OP_PINCL: { case _OP_PINCL: {
SQObjectPtr &a = STK(arg1); SQObjectPtr &a = STK(arg1);
if(type(a) == OT_INTEGER) { if(sq_type(a) == OT_INTEGER) {
TARGET = a; TARGET = a;
a._unVal.nInteger = _integer(a) + sarg3; 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_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_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: 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();} {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; continue;
case _OP_AND: case _OP_AND:
if(IsFalse(STK(arg2))) { if(IsFalse(STK(arg2))) {
@ -982,7 +982,7 @@ exception_restore:
case _OP_NEG: _GUARD(NEG_OP(TARGET,STK(arg1))); continue; case _OP_NEG: _GUARD(NEG_OP(TARGET,STK(arg1))); continue;
case _OP_NOT: TARGET = IsFalse(STK(arg1)); continue; case _OP_NOT: TARGET = IsFalse(STK(arg1)); continue;
case _OP_BWNOT: case _OP_BWNOT:
if(type(STK(arg1)) == OT_INTEGER) { if(sq_type(STK(arg1)) == OT_INTEGER) {
SQInteger t = _integer(STK(arg1)); SQInteger t = _integer(STK(arg1));
TARGET = SQInteger(~t); TARGET = SQInteger(~t);
continue; continue;
@ -1012,7 +1012,7 @@ exception_restore:
} }
continue; continue;
case _OP_RESUME: 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)); _GUARD(_generator(STK(arg1))->Resume(this, TARGET));
traps += ci->_etraps; traps += ci->_etraps;
continue; continue;
@ -1021,7 +1021,7 @@ exception_restore:
ci->_ip += tojump; } ci->_ip += tojump; }
continue; continue;
case _OP_POSTFOREACH: case _OP_POSTFOREACH:
assert(type(STK(arg0)) == OT_GENERATOR); assert(sq_type(STK(arg0)) == OT_GENERATOR);
if(_generator(STK(arg0))->_state == SQGenerator::eDead) if(_generator(STK(arg0))->_state == SQGenerator::eDead)
ci->_ip += (sarg1 - 1); ci->_ip += (sarg1 - 1);
continue; continue;
@ -1111,7 +1111,7 @@ bool SQVM::CreateClassInstance(SQClass *theclass, SQObjectPtr &inst, SQObjectPtr
void SQVM::CallErrorHandler(SQObjectPtr &error) void SQVM::CallErrorHandler(SQObjectPtr &error)
{ {
if(type(_errorhandler) != OT_NULL) { if(sq_type(_errorhandler) != OT_NULL) {
SQObjectPtr out; SQObjectPtr out;
Push(_roottable); Push(error); Push(_roottable); Push(error);
Call(_errorhandler, 2, _top-2, out,SQFalse); Call(_errorhandler, 2, _top-2, out,SQFalse);
@ -1125,8 +1125,8 @@ void SQVM::CallDebugHook(SQInteger type,SQInteger forcedline)
_debughook = false; _debughook = false;
SQFunctionProto *func=_closure(ci->_closure)->_function; SQFunctionProto *func=_closure(ci->_closure)->_function;
if(_debughook_native) { if(_debughook_native) {
const SQChar *src = type(func->_sourcename) == OT_STRING?_stringval(func->_sourcename):NULL; const SQChar *src = sq_type(func->_sourcename) == OT_STRING?_stringval(func->_sourcename):NULL;
const SQChar *fname = type(func->_name) == OT_STRING?_stringval(func->_name):NULL; const SQChar *fname = sq_type(func->_name) == OT_STRING?_stringval(func->_name):NULL;
SQInteger line = forcedline?forcedline:func->GetLine(ci->_ip); SQInteger line = forcedline?forcedline:func->GetLine(ci->_ip);
_debughook_native(this,type,src,line,fname); _debughook_native(this,type,src,line,fname);
} }
@ -1161,8 +1161,8 @@ bool SQVM::CallNative(SQNativeClosure *nclosure, SQInteger nargs, SQInteger newb
SQIntVec &tc = nclosure->_typecheck; SQIntVec &tc = nclosure->_typecheck;
if((tcs = tc.size())) { if((tcs = tc.size())) {
for(SQInteger i = 0; i < nargs && i < tcs; i++) { for(SQInteger i = 0; i < nargs && i < tcs; i++) {
if((tc._vals[i] != -1) && !(type(_stack._vals[newbase+i]) & tc._vals[i])) { if((tc._vals[i] != -1) && !(sq_type(_stack._vals[newbase+i]) & tc._vals[i])) {
Raise_ParamTypeError(i,tc._vals[i],type(_stack._vals[newbase+i])); Raise_ParamTypeError(i,tc._vals[i], sq_type(_stack._vals[newbase+i]));
return false; 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) 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: case OT_TABLE:
if(_table(self)->Get(key,dest))return true; if(_table(self)->Get(key,dest))return true;
break; break;
@ -1273,7 +1273,7 @@ bool SQVM::Get(const SQObjectPtr &self, const SQObjectPtr &key, SQObjectPtr &des
//#ifdef ROOT_FALLBACK //#ifdef ROOT_FALLBACK
if(selfidx == 0) { if(selfidx == 0) {
SQWeakRef *w = _closure(ci->_closure)->_root; 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; 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) bool SQVM::InvokeDefaultDelegate(const SQObjectPtr &self,const SQObjectPtr &key,SQObjectPtr &dest)
{ {
SQTable *ddel = NULL; SQTable *ddel = NULL;
switch(type(self)) { switch(sq_type(self)) {
case OT_CLASS: ddel = _class_ddel; break; case OT_CLASS: ddel = _class_ddel; break;
case OT_TABLE: ddel = _table_ddel; break; case OT_TABLE: ddel = _table_ddel; break;
case OT_ARRAY: ddel = _array_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) SQInteger SQVM::FallBackGet(const SQObjectPtr &self,const SQObjectPtr &key,SQObjectPtr &dest)
{ {
switch(type(self)){ switch(sq_type(self)){
case OT_TABLE: case OT_TABLE:
case OT_USERDATA: case OT_USERDATA:
//delegation //delegation
@ -1329,7 +1329,7 @@ SQInteger SQVM::FallBackGet(const SQObjectPtr &self,const SQObjectPtr &key,SQObj
} }
else { else {
Pop(2); 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; 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) bool SQVM::Set(const SQObjectPtr &self,const SQObjectPtr &key,const SQObjectPtr &val,SQInteger selfidx)
{ {
switch(type(self)){ switch(sq_type(self)){
case OT_TABLE: case OT_TABLE:
if(_table(self)->Set(key,val)) return true; if(_table(self)->Set(key,val)) return true;
break; break;
@ -1358,7 +1358,7 @@ bool SQVM::Set(const SQObjectPtr &self,const SQObjectPtr &key,const SQObjectPtr
return false; return false;
} }
return true; return true;
case OT_USERDATA: break; // must fall back case OT_USERDATA: break; // must fall back
default: default:
Raise_Error(_SC("trying to set '%s'"),GetTypeName(self)); Raise_Error(_SC("trying to set '%s'"),GetTypeName(self));
return false; 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) SQInteger SQVM::FallBackSet(const SQObjectPtr &self,const SQObjectPtr &key,const SQObjectPtr &val)
{ {
switch(type(self)) { switch(sq_type(self)) {
case OT_TABLE: case OT_TABLE:
if(_table(self)->_delegate) { if(_table(self)->_delegate) {
if(Set(_table(self)->_delegate,key,val,DONT_FALL_BACK)) return FALLBACK_OK; 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 { else {
Pop(3); 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; return FALLBACK_ERROR;
} }
} }
@ -1416,7 +1416,7 @@ bool SQVM::Clone(const SQObjectPtr &self,SQObjectPtr &target)
{ {
SQObjectPtr temp_reg; SQObjectPtr temp_reg;
SQObjectPtr newobj; SQObjectPtr newobj;
switch(type(self)){ switch(sq_type(self)){
case OT_TABLE: case OT_TABLE:
newobj = _table(self)->Clone(); newobj = _table(self)->Clone();
goto cloned_mt; 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) 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")); Raise_Error(_SC("object must be a class"));
return false; return false;
} }
SQClass *c = _class(self); SQClass *c = _class(self);
if(!raw) { if(!raw) {
SQObjectPtr &mm = c->_metamethods[MT_NEWMEMBER]; SQObjectPtr &mm = c->_metamethods[MT_NEWMEMBER];
if(type(mm) != OT_NULL ) { if(sq_type(mm) != OT_NULL ) {
Push(self); Push(key); Push(val); Push(self); Push(key); Push(val);
Push(attrs); Push(attrs);
Push(bstatic); Push(bstatic);
@ -1460,7 +1460,7 @@ bool SQVM::NewSlotA(const SQObjectPtr &self,const SQObjectPtr &key,const SQObjec
} }
if(!NewSlot(self, key, val,bstatic)) if(!NewSlot(self, key, val,bstatic))
return false; return false;
if(type(attrs) != OT_NULL) { if(sq_type(attrs) != OT_NULL) {
c->SetAttributes(key,attrs); c->SetAttributes(key,attrs);
} }
return true; 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) 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; } if(sq_type(key) == OT_NULL) { Raise_Error(_SC("null cannot be used as index")); return false; }
switch(type(self)) { switch(sq_type(self)) {
case OT_TABLE: { case OT_TABLE: {
bool rawcall = true; bool rawcall = true;
if(_table(self)->_delegate) { 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) bool SQVM::DeleteSlot(const SQObjectPtr &self,const SQObjectPtr &key,SQObjectPtr &res)
{ {
switch(type(self)) { switch(sq_type(self)) {
case OT_TABLE: case OT_TABLE:
case OT_INSTANCE: case OT_INSTANCE:
case OT_USERDATA: { case OT_USERDATA: {
@ -1541,7 +1541,7 @@ bool SQVM::DeleteSlot(const SQObjectPtr &self,const SQObjectPtr &key,SQObjectPtr
return CallMetaMethod(closure,MT_DELSLOT,2,res); return CallMetaMethod(closure,MT_DELSLOT,2,res);
} }
else { else {
if(type(self) == OT_TABLE) { if(sq_type(self) == OT_TABLE) {
if(_table(self)->Get(key,t)) { if(_table(self)->Get(key,t)) {
_table(self)->Remove(key); _table(self)->Remove(key);
} }
@ -1570,7 +1570,7 @@ bool SQVM::Call(SQObjectPtr &closure,SQInteger nparams,SQInteger stackbase,SQObj
#ifdef _DEBUG #ifdef _DEBUG
SQInteger prevstackbase = _stackbase; SQInteger prevstackbase = _stackbase;
#endif #endif
switch(type(closure)) { switch(sq_type(closure)) {
case OT_CLOSURE: case OT_CLOSURE:
return Execute(closure, nparams, stackbase, outres, raiseerror); return Execute(closure, nparams, stackbase, outres, raiseerror);
break; break;
@ -1584,7 +1584,7 @@ SQInteger prevstackbase = _stackbase;
SQObjectPtr constr; SQObjectPtr constr;
SQObjectPtr temp; SQObjectPtr temp;
CreateClassInstance(_class(closure),outres,constr); CreateClassInstance(_class(closure),outres,constr);
SQObjectType ctype = type(constr); SQObjectType ctype = sq_type(constr);
if (ctype == OT_NATIVECLOSURE || ctype == OT_CLOSURE) { if (ctype == OT_NATIVECLOSURE || ctype == OT_CLOSURE) {
_stack[stackbase] = outres; _stack[stackbase] = outres;
return Call(constr,nparams,stackbase,temp,raiseerror); return Call(constr,nparams,stackbase,temp,raiseerror);