Back to home page

Enduro/X

 
 

    


0001 /*

0002 Copyright (c) 2003-2016 Alberto Demichelis

0003 

0004 Permission is hereby granted, free of charge, to any person obtaining a copy

0005 of this software and associated documentation files (the "Software"), to deal

0006 in the Software without restriction, including without limitation the rights

0007 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell

0008 copies of the Software, and to permit persons to whom the Software is

0009 furnished to do so, subject to the following conditions:

0010 

0011 The above copyright notice and this permission notice shall be included in

0012 all copies or substantial portions of the Software.

0013 

0014 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR

0015 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,

0016 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE

0017 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER

0018 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,

0019 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN

0020 THE SOFTWARE.

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), //internal usage only

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) //internal usage only

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 * /*desc*/,const PSChar * /*source*/,PSInteger /*line*/,PSInteger /*column*/);
0176 typedef void (*PSPRINTFUNCTION)(HPSCRIPTVM,const PSChar * ,...);
0177 typedef void (*PSDEBUGHOOK)(HPSCRIPTVM /*v*/, PSInteger /*type*/, const PSChar * /*sourcename*/, PSInteger /*line*/, const PSChar * /*funcname*/);
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 /*vm*/
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 /*compiler*/
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 /*stack operations*/
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 /*object creation handling*/
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 /*object manipulation*/
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 /*calls*/
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 /*raw object handling*/
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 /*GC*/
0348 PSCRIPT_API PSInteger ps_collectgarbage(HPSCRIPTVM v);
0349 PSCRIPT_API PSRESULT ps_resurrectunreachable(HPSCRIPTVM v);
0350 
0351 /*serialization*/
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 /*mem allocation*/
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 /*debug*/
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 /*UTILITY MACRO*/
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 /* deprecated */
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 } /*extern "C"*/
0403 #endif
0404 
0405 #endif /*_PSCRIPT_H_*/