0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022 #ifndef _PSCRIPT_H_
0023 #define _PSCRIPT_H_
0024
0025 #ifdef __cplusplus
0026 extern "C" {
0027 #endif
0028
0029 #ifndef PSCRIPT_API
0030 #define PSCRIPT_API extern
0031 #endif
0032
0033 #if (defined(_WIN64) || defined(_LP64))
0034 #ifndef _PS64
0035 #define _PS64
0036 #endif
0037 #endif
0038
0039
0040 #define PSTrue (1)
0041 #define PSFalse (0)
0042
0043 struct PSVM;
0044 struct PSTable;
0045 struct PSArray;
0046 struct PSString;
0047 struct PSClosure;
0048 struct PSGenerator;
0049 struct PSNativeClosure;
0050 struct PSUserData;
0051 struct PSFunctionProto;
0052 struct PSRefCounted;
0053 struct PSClass;
0054 struct PSInstance;
0055 struct PSDelegable;
0056 struct PSOuter;
0057
0058 #ifdef _UNICODE
0059 #define PSUNICODE
0060 #endif
0061
0062 #include "psconfig.h"
0063
0064 #define PSCRIPT_VERSION _SC("Pscript 3.1 stable")
0065 #define PSCRIPT_COPYRIGHT _SC("Copyright (C) 2003-2016 Alberto Demichelis\nPlatform Script for Enduro/X by Mavimax Ltd")
0066 #define PSCRIPT_AUTHOR _SC("Alberto Demichelis; Mavimax Ltd")
0067 #define PSCRIPT_VERSION_NUMBER 310
0068
0069 #define PS_VMSTATE_IDLE 0
0070 #define PS_VMSTATE_RUNNING 1
0071 #define PS_VMSTATE_SUSPENDED 2
0072
0073 #define PSCRIPT_EOB 0
0074 #define PS_BYTECODE_STREAM_TAG 0xFAFA
0075
0076 #define PSOBJECT_REF_COUNTED 0x08000000
0077 #define PSOBJECT_NUMERIC 0x04000000
0078 #define PSOBJECT_DELEGABLE 0x02000000
0079 #define PSOBJECT_CANBEFALSE 0x01000000
0080
0081 #define PS_MATCHTYPEMASKSTRING (-99999)
0082
0083 #define _RT_MASK 0x00FFFFFF
0084 #define _RAW_TYPE(type) (type&_RT_MASK)
0085
0086 #define _RT_NULL 0x00000001
0087 #define _RT_INTEGER 0x00000002
0088 #define _RT_FLOAT 0x00000004
0089 #define _RT_BOOL 0x00000008
0090 #define _RT_STRING 0x00000010
0091 #define _RT_TABLE 0x00000020
0092 #define _RT_ARRAY 0x00000040
0093 #define _RT_USERDATA 0x00000080
0094 #define _RT_CLOSURE 0x00000100
0095 #define _RT_NATIVECLOSURE 0x00000200
0096 #define _RT_GENERATOR 0x00000400
0097 #define _RT_USERPOINTER 0x00000800
0098 #define _RT_THREAD 0x00001000
0099 #define _RT_FUNCPROTO 0x00002000
0100 #define _RT_CLASS 0x00004000
0101 #define _RT_INSTANCE 0x00008000
0102 #define _RT_WEAKREF 0x00010000
0103 #define _RT_OUTER 0x00020000
0104
0105 typedef enum tagPSObjectType{
0106 OT_NULL = (_RT_NULL|PSOBJECT_CANBEFALSE),
0107 OT_INTEGER = (_RT_INTEGER|PSOBJECT_NUMERIC|PSOBJECT_CANBEFALSE),
0108 OT_FLOAT = (_RT_FLOAT|PSOBJECT_NUMERIC|PSOBJECT_CANBEFALSE),
0109 OT_BOOL = (_RT_BOOL|PSOBJECT_CANBEFALSE),
0110 OT_STRING = (_RT_STRING|PSOBJECT_REF_COUNTED),
0111 OT_TABLE = (_RT_TABLE|PSOBJECT_REF_COUNTED|PSOBJECT_DELEGABLE),
0112 OT_ARRAY = (_RT_ARRAY|PSOBJECT_REF_COUNTED),
0113 OT_USERDATA = (_RT_USERDATA|PSOBJECT_REF_COUNTED|PSOBJECT_DELEGABLE),
0114 OT_CLOSURE = (_RT_CLOSURE|PSOBJECT_REF_COUNTED),
0115 OT_NATIVECLOSURE = (_RT_NATIVECLOSURE|PSOBJECT_REF_COUNTED),
0116 OT_GENERATOR = (_RT_GENERATOR|PSOBJECT_REF_COUNTED),
0117 OT_USERPOINTER = _RT_USERPOINTER,
0118 OT_THREAD = (_RT_THREAD|PSOBJECT_REF_COUNTED) ,
0119 OT_FUNCPROTO = (_RT_FUNCPROTO|PSOBJECT_REF_COUNTED),
0120 OT_CLASS = (_RT_CLASS|PSOBJECT_REF_COUNTED),
0121 OT_INSTANCE = (_RT_INSTANCE|PSOBJECT_REF_COUNTED|PSOBJECT_DELEGABLE),
0122 OT_WEAKREF = (_RT_WEAKREF|PSOBJECT_REF_COUNTED),
0123 OT_OUTER = (_RT_OUTER|PSOBJECT_REF_COUNTED)
0124 }PSObjectType;
0125
0126 #define ISREFCOUNTED(t) (t&PSOBJECT_REF_COUNTED)
0127
0128
0129 typedef union tagPSObjectValue
0130 {
0131 struct PSTable *pTable;
0132 struct PSArray *pArray;
0133 struct PSClosure *pClosure;
0134 struct PSOuter *pOuter;
0135 struct PSGenerator *pGenerator;
0136 struct PSNativeClosure *pNativeClosure;
0137 struct PSString *pString;
0138 struct PSUserData *pUserData;
0139 PSInteger nInteger;
0140 PSFloat fFloat;
0141 PSUserPointer pUserPointer;
0142 struct PSFunctionProto *pFunctionProto;
0143 struct PSRefCounted *pRefCounted;
0144 struct PSDelegable *pDelegable;
0145 struct PSVM *pThread;
0146 struct PSClass *pClass;
0147 struct PSInstance *pInstance;
0148 struct PSWeakRef *pWeakRef;
0149 PSRawObjectVal raw;
0150 }PSObjectValue;
0151
0152
0153 typedef struct tagPSObject
0154 {
0155 PSObjectType _type;
0156 PSObjectValue _unVal;
0157 }PSObject;
0158
0159 typedef struct tagPSMemberHandle{
0160 PSBool _static;
0161 PSInteger _index;
0162 }PSMemberHandle;
0163
0164 typedef struct tagPSStackInfos{
0165 const PSChar* funcname;
0166 const PSChar* source;
0167 PSInteger line;
0168 }PSStackInfos;
0169
0170 typedef struct PSVM* HPSCRIPTVM;
0171 typedef PSObject HPSOBJECT;
0172 typedef PSMemberHandle HPSMEMBERHANDLE;
0173 typedef PSInteger (*PSFUNCTION)(HPSCRIPTVM);
0174 typedef PSInteger (*PSRELEASEHOOK)(PSUserPointer,PSInteger size);
0175 typedef void (*PSCOMPILERERROR)(HPSCRIPTVM,const PSChar * ,const PSChar * ,PSInteger ,PSInteger );
0176 typedef void (*PSPRINTFUNCTION)(HPSCRIPTVM,const PSChar * ,...);
0177 typedef void (*PSDEBUGHOOK)(HPSCRIPTVM , PSInteger , const PSChar * , PSInteger , const PSChar * );
0178 typedef PSInteger (*PSWRITEFUNC)(PSUserPointer,PSUserPointer,PSInteger);
0179 typedef PSInteger (*PSREADFUNC)(PSUserPointer,PSUserPointer,PSInteger);
0180
0181 typedef PSInteger (*PSLEXREADFUNC)(PSUserPointer);
0182
0183 typedef struct tagPSRegFunction{
0184 const PSChar *name;
0185 PSFUNCTION f;
0186 PSInteger nparamscheck;
0187 const PSChar *typemask;
0188 }PSRegFunction;
0189
0190 typedef struct tagPSFunctionInfo {
0191 PSUserPointer funcid;
0192 const PSChar *name;
0193 const PSChar *source;
0194 PSInteger line;
0195 }PSFunctionInfo;
0196
0197
0198 PSCRIPT_API HPSCRIPTVM ps_open(PSInteger initialstacksize);
0199 PSCRIPT_API HPSCRIPTVM ps_newthread(HPSCRIPTVM friendvm, PSInteger initialstacksize);
0200 PSCRIPT_API void ps_seterrorhandler(HPSCRIPTVM v);
0201 PSCRIPT_API void ps_close(HPSCRIPTVM v);
0202 PSCRIPT_API void ps_setforeignptr(HPSCRIPTVM v,PSUserPointer p);
0203 PSCRIPT_API PSUserPointer ps_getforeignptr(HPSCRIPTVM v);
0204 PSCRIPT_API void ps_setsharedforeignptr(HPSCRIPTVM v,PSUserPointer p);
0205 PSCRIPT_API PSUserPointer ps_getsharedforeignptr(HPSCRIPTVM v);
0206 PSCRIPT_API void ps_setvmreleasehook(HPSCRIPTVM v,PSRELEASEHOOK hook);
0207 PSCRIPT_API PSRELEASEHOOK ps_getvmreleasehook(HPSCRIPTVM v);
0208 PSCRIPT_API void ps_setsharedreleasehook(HPSCRIPTVM v,PSRELEASEHOOK hook);
0209 PSCRIPT_API PSRELEASEHOOK ps_getsharedreleasehook(HPSCRIPTVM v);
0210 PSCRIPT_API void ps_setprintfunc(HPSCRIPTVM v, PSPRINTFUNCTION printfunc,PSPRINTFUNCTION errfunc);
0211 PSCRIPT_API PSPRINTFUNCTION ps_getprintfunc(HPSCRIPTVM v);
0212 PSCRIPT_API PSPRINTFUNCTION ps_geterrorfunc(HPSCRIPTVM v);
0213 PSCRIPT_API PSRESULT ps_suspendvm(HPSCRIPTVM v);
0214 PSCRIPT_API PSRESULT ps_wakeupvm(HPSCRIPTVM v,PSBool resumedret,PSBool retval,PSBool raiseerror,PSBool throwerror);
0215 PSCRIPT_API PSInteger ps_getvmstate(HPSCRIPTVM v);
0216 PSCRIPT_API PSInteger ps_getversion();
0217
0218
0219 PSCRIPT_API PSRESULT ps_compile(HPSCRIPTVM v,PSLEXREADFUNC read,PSUserPointer p,const PSChar *sourcename,PSBool raiseerror);
0220 PSCRIPT_API PSRESULT ps_compilebuffer(HPSCRIPTVM v,const PSChar *s,PSInteger size,const PSChar *sourcename,PSBool raiseerror);
0221 PSCRIPT_API void ps_enabledebuginfo(HPSCRIPTVM v, PSBool enable);
0222 PSCRIPT_API void ps_notifyallexceptions(HPSCRIPTVM v, PSBool enable);
0223 PSCRIPT_API void ps_setcompilererrorhandler(HPSCRIPTVM v,PSCOMPILERERROR f);
0224
0225
0226 PSCRIPT_API void ps_push(HPSCRIPTVM v,PSInteger idx);
0227 PSCRIPT_API void ps_pop(HPSCRIPTVM v,PSInteger nelemstopop);
0228 PSCRIPT_API void ps_poptop(HPSCRIPTVM v);
0229 PSCRIPT_API void ps_remove(HPSCRIPTVM v,PSInteger idx);
0230 PSCRIPT_API PSInteger ps_gettop(HPSCRIPTVM v);
0231 PSCRIPT_API void ps_settop(HPSCRIPTVM v,PSInteger newtop);
0232 PSCRIPT_API PSRESULT ps_reservestack(HPSCRIPTVM v,PSInteger nsize);
0233 PSCRIPT_API PSInteger ps_cmp(HPSCRIPTVM v);
0234 PSCRIPT_API void ps_move(HPSCRIPTVM dest,HPSCRIPTVM src,PSInteger idx);
0235
0236
0237 PSCRIPT_API PSUserPointer ps_newuserdata(HPSCRIPTVM v,PSUnsignedInteger size);
0238 PSCRIPT_API void ps_newtable(HPSCRIPTVM v);
0239 PSCRIPT_API void ps_newtableex(HPSCRIPTVM v,PSInteger initialcapacity);
0240 PSCRIPT_API void ps_newarray(HPSCRIPTVM v,PSInteger size);
0241 PSCRIPT_API void ps_newclosure(HPSCRIPTVM v,PSFUNCTION func,PSUnsignedInteger nfreevars);
0242 PSCRIPT_API PSRESULT ps_setparamscheck(HPSCRIPTVM v,PSInteger nparamscheck,const PSChar *typemask);
0243 PSCRIPT_API PSRESULT ps_bindenv(HPSCRIPTVM v,PSInteger idx);
0244 PSCRIPT_API PSRESULT ps_setclosureroot(HPSCRIPTVM v,PSInteger idx);
0245 PSCRIPT_API PSRESULT ps_getclosureroot(HPSCRIPTVM v,PSInteger idx);
0246 PSCRIPT_API void ps_pushstring(HPSCRIPTVM v,const PSChar *s,PSInteger len);
0247 PSCRIPT_API void ps_pushfloat(HPSCRIPTVM v,PSFloat f);
0248 PSCRIPT_API void ps_pushinteger(HPSCRIPTVM v,PSInteger n);
0249 PSCRIPT_API void ps_pushbool(HPSCRIPTVM v,PSBool b);
0250 PSCRIPT_API void ps_pushuserpointer(HPSCRIPTVM v,PSUserPointer p);
0251 PSCRIPT_API void ps_pushnull(HPSCRIPTVM v);
0252 PSCRIPT_API void ps_pushthread(HPSCRIPTVM v, HPSCRIPTVM thread);
0253 PSCRIPT_API PSObjectType ps_gettype(HPSCRIPTVM v,PSInteger idx);
0254 PSCRIPT_API PSRESULT ps_typeof(HPSCRIPTVM v,PSInteger idx);
0255 PSCRIPT_API PSInteger ps_getsize(HPSCRIPTVM v,PSInteger idx);
0256 PSCRIPT_API PSHash ps_gethash(HPSCRIPTVM v, PSInteger idx);
0257 PSCRIPT_API PSRESULT ps_getbase(HPSCRIPTVM v,PSInteger idx);
0258 PSCRIPT_API PSBool ps_instanceof(HPSCRIPTVM v);
0259 PSCRIPT_API PSRESULT ps_tostring(HPSCRIPTVM v,PSInteger idx);
0260 PSCRIPT_API void ps_tobool(HPSCRIPTVM v, PSInteger idx, PSBool *b);
0261 PSCRIPT_API PSRESULT ps_getstring(HPSCRIPTVM v,PSInteger idx,const PSChar **c);
0262 PSCRIPT_API PSRESULT ps_getinteger(HPSCRIPTVM v,PSInteger idx,PSInteger *i);
0263 PSCRIPT_API PSRESULT ps_getfloat(HPSCRIPTVM v,PSInteger idx,PSFloat *f);
0264 PSCRIPT_API PSRESULT ps_getbool(HPSCRIPTVM v,PSInteger idx,PSBool *b);
0265 PSCRIPT_API PSRESULT ps_getthread(HPSCRIPTVM v,PSInteger idx,HPSCRIPTVM *thread);
0266 PSCRIPT_API PSRESULT ps_getuserpointer(HPSCRIPTVM v,PSInteger idx,PSUserPointer *p);
0267 PSCRIPT_API PSRESULT ps_getuserdata(HPSCRIPTVM v,PSInteger idx,PSUserPointer *p,PSUserPointer *typetag);
0268 PSCRIPT_API PSRESULT ps_settypetag(HPSCRIPTVM v,PSInteger idx,PSUserPointer typetag);
0269 PSCRIPT_API PSRESULT ps_gettypetag(HPSCRIPTVM v,PSInteger idx,PSUserPointer *typetag);
0270 PSCRIPT_API void ps_setreleasehook(HPSCRIPTVM v,PSInteger idx,PSRELEASEHOOK hook);
0271 PSCRIPT_API PSRELEASEHOOK ps_getreleasehook(HPSCRIPTVM v,PSInteger idx);
0272 PSCRIPT_API PSChar *ps_getscratchpad(HPSCRIPTVM v,PSInteger minsize);
0273 PSCRIPT_API PSRESULT ps_getfunctioninfo(HPSCRIPTVM v,PSInteger level,PSFunctionInfo *fi);
0274 PSCRIPT_API PSRESULT ps_getclosureinfo(HPSCRIPTVM v,PSInteger idx,PSUnsignedInteger *nparams,PSUnsignedInteger *nfreevars);
0275 PSCRIPT_API PSRESULT ps_getclosurename(HPSCRIPTVM v,PSInteger idx);
0276 PSCRIPT_API PSRESULT ps_setnativeclosurename(HPSCRIPTVM v,PSInteger idx,const PSChar *name);
0277 PSCRIPT_API PSRESULT ps_setinstanceup(HPSCRIPTVM v, PSInteger idx, PSUserPointer p);
0278 PSCRIPT_API PSRESULT ps_getinstanceup(HPSCRIPTVM v, PSInteger idx, PSUserPointer *p,PSUserPointer typetag);
0279 PSCRIPT_API PSRESULT ps_setclassudsize(HPSCRIPTVM v, PSInteger idx, PSInteger udsize);
0280 PSCRIPT_API PSRESULT ps_newclass(HPSCRIPTVM v,PSBool hasbase);
0281 PSCRIPT_API PSRESULT ps_createinstance(HPSCRIPTVM v,PSInteger idx);
0282 PSCRIPT_API PSRESULT ps_setattributes(HPSCRIPTVM v,PSInteger idx);
0283 PSCRIPT_API PSRESULT ps_getattributes(HPSCRIPTVM v,PSInteger idx);
0284 PSCRIPT_API PSRESULT ps_getclass(HPSCRIPTVM v,PSInteger idx);
0285 PSCRIPT_API void ps_weakref(HPSCRIPTVM v,PSInteger idx);
0286 PSCRIPT_API PSRESULT ps_getdefaultdelegate(HPSCRIPTVM v,PSObjectType t);
0287 PSCRIPT_API PSRESULT ps_getmemberhandle(HPSCRIPTVM v,PSInteger idx,HPSMEMBERHANDLE *handle);
0288 PSCRIPT_API PSRESULT ps_getbyhandle(HPSCRIPTVM v,PSInteger idx,const HPSMEMBERHANDLE *handle);
0289 PSCRIPT_API PSRESULT ps_setbyhandle(HPSCRIPTVM v,PSInteger idx,const HPSMEMBERHANDLE *handle);
0290
0291
0292 PSCRIPT_API void ps_pushroottable(HPSCRIPTVM v);
0293 PSCRIPT_API void ps_pushregistrytable(HPSCRIPTVM v);
0294 PSCRIPT_API void ps_pushconsttable(HPSCRIPTVM v);
0295 PSCRIPT_API PSRESULT ps_setroottable(HPSCRIPTVM v);
0296 PSCRIPT_API PSRESULT ps_setconsttable(HPSCRIPTVM v);
0297 PSCRIPT_API PSRESULT ps_newslot(HPSCRIPTVM v, PSInteger idx, PSBool bstatic);
0298 PSCRIPT_API PSRESULT ps_deleteslot(HPSCRIPTVM v,PSInteger idx,PSBool pushval);
0299 PSCRIPT_API PSRESULT ps_set(HPSCRIPTVM v,PSInteger idx);
0300 PSCRIPT_API PSRESULT ps_get(HPSCRIPTVM v,PSInteger idx);
0301 PSCRIPT_API PSRESULT ps_rawget(HPSCRIPTVM v,PSInteger idx);
0302 PSCRIPT_API PSRESULT ps_rawset(HPSCRIPTVM v,PSInteger idx);
0303 PSCRIPT_API PSRESULT ps_rawdeleteslot(HPSCRIPTVM v,PSInteger idx,PSBool pushval);
0304 PSCRIPT_API PSRESULT ps_newmember(HPSCRIPTVM v,PSInteger idx,PSBool bstatic);
0305 PSCRIPT_API PSRESULT ps_rawnewmember(HPSCRIPTVM v,PSInteger idx,PSBool bstatic);
0306 PSCRIPT_API PSRESULT ps_arrayappend(HPSCRIPTVM v,PSInteger idx);
0307 PSCRIPT_API PSRESULT ps_arraypop(HPSCRIPTVM v,PSInteger idx,PSBool pushval);
0308 PSCRIPT_API PSRESULT ps_arrayresize(HPSCRIPTVM v,PSInteger idx,PSInteger newsize);
0309 PSCRIPT_API PSRESULT ps_arrayreverse(HPSCRIPTVM v,PSInteger idx);
0310 PSCRIPT_API PSRESULT ps_arrayremove(HPSCRIPTVM v,PSInteger idx,PSInteger itemidx);
0311 PSCRIPT_API PSRESULT ps_arrayinsert(HPSCRIPTVM v,PSInteger idx,PSInteger destpos);
0312 PSCRIPT_API PSRESULT ps_setdelegate(HPSCRIPTVM v,PSInteger idx);
0313 PSCRIPT_API PSRESULT ps_getdelegate(HPSCRIPTVM v,PSInteger idx);
0314 PSCRIPT_API PSRESULT ps_clone(HPSCRIPTVM v,PSInteger idx);
0315 PSCRIPT_API PSRESULT ps_setfreevariable(HPSCRIPTVM v,PSInteger idx,PSUnsignedInteger nval);
0316 PSCRIPT_API PSRESULT ps_next(HPSCRIPTVM v,PSInteger idx);
0317 PSCRIPT_API PSRESULT ps_getweakrefval(HPSCRIPTVM v,PSInteger idx);
0318 PSCRIPT_API PSRESULT ps_clear(HPSCRIPTVM v,PSInteger idx);
0319
0320
0321 PSCRIPT_API PSRESULT ps_call(HPSCRIPTVM v,PSInteger params,PSBool retval,PSBool raiseerror);
0322 PSCRIPT_API PSRESULT ps_resume(HPSCRIPTVM v,PSBool retval,PSBool raiseerror);
0323 PSCRIPT_API const PSChar *ps_getlocal(HPSCRIPTVM v,PSUnsignedInteger level,PSUnsignedInteger idx);
0324 PSCRIPT_API PSRESULT ps_getcallee(HPSCRIPTVM v);
0325 PSCRIPT_API const PSChar *ps_getfreevariable(HPSCRIPTVM v,PSInteger idx,PSUnsignedInteger nval);
0326 PSCRIPT_API PSRESULT ps_throwerror(HPSCRIPTVM v,const PSChar *err);
0327 PSCRIPT_API PSRESULT ps_throwobject(HPSCRIPTVM v);
0328 PSCRIPT_API void ps_reseterror(HPSCRIPTVM v);
0329 PSCRIPT_API void ps_getlasterror(HPSCRIPTVM v);
0330
0331
0332 PSCRIPT_API PSRESULT ps_getstackobj(HPSCRIPTVM v,PSInteger idx,HPSOBJECT *po);
0333 PSCRIPT_API void ps_pushobject(HPSCRIPTVM v,HPSOBJECT obj);
0334 PSCRIPT_API void ps_addref(HPSCRIPTVM v,HPSOBJECT *po);
0335 PSCRIPT_API PSBool ps_release(HPSCRIPTVM v,HPSOBJECT *po);
0336 PSCRIPT_API PSUnsignedInteger ps_getrefcount(HPSCRIPTVM v,HPSOBJECT *po);
0337 PSCRIPT_API void ps_resetobject(HPSOBJECT *po);
0338 PSCRIPT_API const PSChar *ps_objtostring(const HPSOBJECT *o);
0339 PSCRIPT_API PSBool ps_objtobool(const HPSOBJECT *o);
0340 PSCRIPT_API PSInteger ps_objtointeger(const HPSOBJECT *o);
0341 PSCRIPT_API PSFloat ps_objtofloat(const HPSOBJECT *o);
0342 PSCRIPT_API PSUserPointer ps_objtouserpointer(const HPSOBJECT *o);
0343 PSCRIPT_API PSRESULT ps_getobjtypetag(const HPSOBJECT *o,PSUserPointer * typetag);
0344 PSCRIPT_API PSUnsignedInteger ps_getvmrefcount(HPSCRIPTVM v, const HPSOBJECT *po);
0345
0346
0347
0348 PSCRIPT_API PSInteger ps_collectgarbage(HPSCRIPTVM v);
0349 PSCRIPT_API PSRESULT ps_resurrectunreachable(HPSCRIPTVM v);
0350
0351
0352 PSCRIPT_API PSRESULT ps_writeclosure(HPSCRIPTVM vm,PSWRITEFUNC writef,PSUserPointer up);
0353 PSCRIPT_API PSRESULT ps_readclosure(HPSCRIPTVM vm,PSREADFUNC readf,PSUserPointer up);
0354
0355
0356 PSCRIPT_API void *ps_malloc(PSUnsignedInteger size);
0357 PSCRIPT_API void *ps_realloc(void* p,PSUnsignedInteger oldsize,PSUnsignedInteger newsize);
0358 PSCRIPT_API void ps_free(void *p,PSUnsignedInteger size);
0359
0360
0361 PSCRIPT_API PSRESULT ps_stackinfos(HPSCRIPTVM v,PSInteger level,PSStackInfos *si);
0362 PSCRIPT_API void ps_setdebughook(HPSCRIPTVM v);
0363 PSCRIPT_API void ps_setnativedebughook(HPSCRIPTVM v,PSDEBUGHOOK hook);
0364
0365
0366 #define ps_isnumeric(o) ((o)._type&PSOBJECT_NUMERIC)
0367 #define ps_istable(o) ((o)._type==OT_TABLE)
0368 #define ps_isarray(o) ((o)._type==OT_ARRAY)
0369 #define ps_isfunction(o) ((o)._type==OT_FUNCPROTO)
0370 #define ps_isclosure(o) ((o)._type==OT_CLOSURE)
0371 #define ps_isgenerator(o) ((o)._type==OT_GENERATOR)
0372 #define ps_isnativeclosure(o) ((o)._type==OT_NATIVECLOSURE)
0373 #define ps_isstring(o) ((o)._type==OT_STRING)
0374 #define ps_isinteger(o) ((o)._type==OT_INTEGER)
0375 #define ps_isfloat(o) ((o)._type==OT_FLOAT)
0376 #define ps_isuserpointer(o) ((o)._type==OT_USERPOINTER)
0377 #define ps_isuserdata(o) ((o)._type==OT_USERDATA)
0378 #define ps_isthread(o) ((o)._type==OT_THREAD)
0379 #define ps_isnull(o) ((o)._type==OT_NULL)
0380 #define ps_isclass(o) ((o)._type==OT_CLASS)
0381 #define ps_isinstance(o) ((o)._type==OT_INSTANCE)
0382 #define ps_isbool(o) ((o)._type==OT_BOOL)
0383 #define ps_isweakref(o) ((o)._type==OT_WEAKREF)
0384 #define ps_type(o) ((o)._type)
0385
0386
0387 #define ps_createslot(v,n) ps_newslot(v,n,PSFalse)
0388
0389 #define PS_OK (0)
0390 #define PS_ERROR (-1)
0391
0392 #define PS_FAILED(res) (res<0)
0393 #define PS_SUCCEEDED(res) (res>=0)
0394
0395 #ifdef __GNUC__
0396 # define PS_UNUSED_ARG(x) __attribute__((unused)) x
0397 #else
0398 # define PS_UNUSED_ARG(x) x
0399 #endif
0400
0401 #ifdef __cplusplus
0402 }
0403 #endif
0404
0405 #endif