📄 ejsvar.h
字号:
extern bool ejsIsObjDirty(EjsVar *vp); extern void ejsResetObjDirtyBit(EjsVar *vp); extern int ejsObjHasErrors(EjsVar *vp);extern void ejsClearObjErrors(EjsVar *vp);extern EjsVar *ejsClearProperty(Ejs *ep, EjsVar *obj, const char *prop);typedef int (*EjsSortFn)(Ejs *ep, EjsProperty *p1, EjsProperty *p2, const char *propertyName, int order);extern void ejsSortProperties(Ejs *ep, EjsVar *obj, EjsSortFn fn, const char *propertyName, int order);#if BLD_DEBUG#define ejsSetVarName(ep, vp, varName) \ if (1) { \ (vp)->propertyName = varName; \ if ((vp)->type == EJS_TYPE_OBJECT && \ (vp)->objectState && \ ((vp)->objectState->objName == 0)) { \ (vp)->objectState->objName = \ mprStrdup(ep, varName); \ } \ } else#else#define ejsSetVarName(ep, vp, varName) #endifEjsVar *ejsFindProperty(Ejs *ep, EjsVar **obj, char **property, EjsVar *global, EjsVar *local, const char *fullName, int create);extern EjsVar *ejsCopyProperties(Ejs *ep, EjsVar *dest, const EjsVar *src, EjsCopyDepth copyDepth);#define EJS_LINK_OFFSET ((uint) (&((EjsProperty*) 0)->link))#define ejsGetPropertyFromLink(lp) \ ((EjsProperty*) ((char*) lp - EJS_LINK_OFFSET))#define ejsGetObjPtr(vp) ((EjsObj*) vp->objectState)extern void ejsMakePropertyPrivate(EjsProperty *pp, int isPrivate);extern void ejsMakePropertyReadOnly(EjsProperty *pp, int readonly);extern void ejsMakePropertyUndeleteable(EjsProperty *pp, int deletable);extern int ejsMakeObjLive(EjsVar *vp, bool alive);extern void ejsMakeClassNoConstructor(EjsVar *vp);extern bool ejsBlockInUseInt(EjsVar *vp);#if BLD_DEBUG #define ejsBlockInUse(vp) ejsBlockInUseInt(vp)#else #define ejsBlockInUse(vp)#endif/********************************* Prototypes *********************************//* * Variable constructors and destructors */extern EjsVar *ejsCreateBinaryStringVar(Ejs *ep, const uchar *value, int len);extern EjsVar *ejsCreateBoolVar(Ejs *ep, int value);extern EjsVar *ejsCreateCMethodVar(Ejs *ep, EjsCMethod fn, void *userData, int flags);#if BLD_FEATURE_FLOATING_POINTextern EjsVar *ejsCreateFloatVar(Ejs *ep, double value);#endifextern EjsVar *ejsCreateIntegerVar(Ejs *ep, int value);#if BLD_FEATURE_INT64extern EjsVar *ejsCreateInteger64Var(Ejs *ep, int64 value);#endifextern EjsVar *ejsCreateMethodVar(Ejs *ep, const char *body, MprArray *args, int flags);extern EjsVar *ejsCreateNullVar(Ejs *ep);extern EjsVar *ejsCreateNumberVar(Ejs *ep, EjsNumber value);#define ejsCreateObjVar(ep) \ ejsCreateObjVarInternal(EJS_LOC_ARGS(ep))extern EjsVar *ejsCreateObjVarInternal(EJS_LOC_DEC(ep, loc));extern EjsVar *ejsCreatePtrVar(Ejs *ep, void *ptr, EjsDestructor dest);extern EjsVar *ejsCreateStringCMethodVar(Ejs *ep, EjsStringCMethod fn, void *userData, int flags);#define ejsCreateStringVar(ep, value) \ ejsCreateStringVarInternal(EJS_LOC_ARGS(ep), value)extern EjsVar *ejsCreateStringVarInternal(EJS_LOC_DEC(ep, loc), const char *value);extern EjsVar *ejsCreateUndefinedVar(Ejs *ep);/* MOB -- naming. Should be Create/Destroy */extern void ejsFreeVar(Ejs *ep, EjsVar *vp);/* * Var support routines */extern int ejsGetVarFlags(EjsVar *vp);extern void ejsSetVarFlags(EjsVar *obj, int flags);extern EjsType ejsGetVarType(EjsVar *vp);extern const char *ejsGetVarTypeAsString(EjsVar *vp);extern void *ejsGetCMethodUserData(EjsVar *obj);extern void ejsSetCMethodUserData(EjsVar *obj, void *userData);extern void *ejsGetVarUserPtr(EjsVar *vp);extern void ejsSetVarUserPtr(EjsVar *vp, void *data);/* * Variable access and manipulation. These work on standalone objects. */#define ejsDupVar(ep, src, copyDepth) \ ejsDupVarInternal(EJS_LOC_ARGS(ep), src, copyDepth)extern EjsVar *ejsDupVarInternal(EJS_LOC_DEC(ep, loc), EjsVar *src, EjsCopyDepth copyDepth);#define ejsWriteVar(ep, dest, src, copyDepth) \ ejsWriteVarInternal(EJS_LOC_ARGS(ep), dest, src, copyDepth)extern EjsVar *ejsWriteVarInternal(EJS_LOC_DEC(ep, loc), EjsVar *dest, const EjsVar *src, EjsCopyDepth copyDepth);extern EjsVar *ejsWriteVarAsBinaryString(Ejs *ep, EjsVar *dest, const uchar *value, int len);extern EjsVar *ejsWriteVarAsBoolean(Ejs *ep, EjsVar *dest, bool value);extern EjsVar *ejsWriteVarAsCMethod(Ejs *ep, EjsVar *dest, EjsCMethod fn, void *userData, int flags);#if BLD_FEATURE_FLOATING_POINTextern EjsVar *ejsWriteVarAsFloat(Ejs *ep, EjsVar *dest, double value);#endifextern EjsVar *ejsWriteVarAsInteger(Ejs *ep, EjsVar *dest, int value);#if BLD_FEATURE_INT64extern EjsVar *ejsWriteVarAsInteger64(Ejs *ep, EjsVar *dest, int64 value);#endifextern EjsVar *ejsWriteVarAsMethod(Ejs *ep, EjsVar *dest, const char *body, MprArray *args);extern EjsVar *ejsWriteVarAsNull(Ejs *ep, EjsVar *dest);extern EjsVar *ejsWriteVarAsNumber(Ejs *ep, EjsVar *dest, EjsNum value);#define ejsWriteVarAsString(ep, dest, value) \ ejsWriteVarAsStringInternal(EJS_LOC_ARGS(ep), dest, value)extern EjsVar *ejsWriteVarAsStringInternal(EJS_LOC_DEC(ep, loc), EjsVar *dest, const char *value);extern EjsVar *ejsWriteVarAsStringCMethod(Ejs *ep, EjsVar *dest, EjsStringCMethod fn, void *userData, int flags);extern EjsVar *ejsWriteVarAsUndefined(Ejs *ep, EjsVar *dest);/* * These routines do not convert types *//* MOB -- make this a fn and pass back the length as an arg */#define ejsReadVarAsBinaryString(vp) ((const uchar*) (vp->ustring));#define ejsReadVarAsBoolean(vp) (vp->boolean);#define ejsReadVarAsCMethod(vp) (vp->cMethod);#if BLD_FEATURE_FLOATING_POINT#define ejsReadVarAsFloat(vp) (vp->floating);#endif#define ejsReadVarAsInteger(vp) (vp->integer);#if BLD_FEATURE_INT64#define ejsReadVarAsInteger64(vp) (vp->int64);#endif#define ejsReadVarAsString(vp) ((const char*) (vp->string));#define ejsReadVarAsStringCMethod(vp) (vp->cMethodWithStrings);/* MOB -- remove this fn */#define ejsReadVarStringLength(vp) (vp->length);/* * Object property creation routines */extern EjsProperty *ejsCreateProperty(Ejs *ep, EjsVar *obj, const char *prop);extern EjsProperty *ejsCreateSimpleProperty(Ejs *ep, EjsVar *obj, const char *prop);extern EjsProperty *ejsCreateSimpleNonUniqueProperty(Ejs *ep, EjsVar *obj, const char *prop);/* MOB -- should be destroy */extern int ejsDeleteProperty(Ejs *ep, EjsVar *obj, const char *prop);/* * Get property routines */extern EjsProperty *ejsGetProperty(Ejs *ep, EjsVar *obj, const char *prop);extern EjsProperty *ejsGetSimpleProperty(Ejs *ep, EjsVar *obj, const char *prop);extern EjsVar *ejsGetPropertyAsVar(Ejs *ep, EjsVar *obj, const char *prop);extern int ejsGetPropertyCount(EjsVar *obj);extern const uchar *ejsGetPropertyAsBinaryString(Ejs *ep, EjsVar *obj, const char *prop, int *length);extern bool ejsGetPropertyAsBoolean(Ejs *ep, EjsVar *obj, const char *prop);extern int ejsGetPropertyAsInteger(Ejs *ep, EjsVar *obj, const char *prop);extern int64 ejsGetPropertyAsInteger64(Ejs *ep, EjsVar *obj, const char *prop);extern EjsNum ejsGetPropertyAsNumber(Ejs *ep, EjsVar *obj, const char *prop);extern void *ejsGetPropertyAsPtr(Ejs *ep, EjsVar *obj, const char *prop);extern const char *ejsGetPropertyAsString(Ejs *ep, EjsVar *obj, const char *prop);/* * Object property update routines */extern EjsProperty *ejsSetBaseProperty(Ejs *ep, EjsVar *obj, const char *prop, const EjsVar *value);extern EjsProperty *ejsSetProperty(Ejs *ep, EjsVar *obj, const char *prop, const EjsVar *value);extern EjsProperty *ejsSetPropertyAndFree(Ejs *ep, EjsVar *obj, const char *prop, EjsVar *value);extern EjsProperty *ejsSetPropertyToBinaryString(Ejs *ep, EjsVar *obj, const char *prop, const uchar *value, int len);extern EjsProperty *ejsSetPropertyToBoolean(Ejs *ep, EjsVar *obj, const char *prop, bool value);extern EjsProperty *ejsSetPropertyToCMethod(Ejs *ep, EjsVar *obj, const char *prop, EjsCMethod fn, void *userData, int flags);#if BLD_FEATURE_FLOATING_POINTextern EjsProperty *ejsSetPropertyToFloat(Ejs *ep, EjsVar *obj, const char *prop, double value);#endifextern EjsProperty *ejsSetPropertyToInteger(Ejs *ep, EjsVar *obj, const char *prop, int value);#if BLD_FEATURE_INT64extern EjsProperty *ejsSetPropertyToInteger64(Ejs *ep, EjsVar *obj, const char *prop, int64 value);#endifextern EjsProperty *ejsSetPropertyToMethod(Ejs *ep, EjsVar *obj, const char *prop, const char *body, MprArray *args, int flags);extern EjsProperty *ejsSetPropertyToNewObj(Ejs *ep, EjsVar *obj, const char *prop, const char *className, MprArray *args);extern EjsProperty *ejsSetPropertyToNull(Ejs *ep, EjsVar *obj, const char *prop);extern EjsProperty *ejsSetPropertyToNumber(Ejs *ep, EjsVar *obj, const char *prop, EjsNum value);extern EjsProperty *ejsSetPropertyToObj(Ejs *ep, EjsVar *obj, const char *prop);extern EjsProperty *ejsSetPropertyToPtr(Ejs *ep, EjsVar *obj, const char *prop, void *ptr, EjsDestructor destructor);extern EjsProperty *ejsSetPropertyToStringCMethod(Ejs *ep, EjsVar *obj, const char *prop, EjsStringCMethod fn, void *userData, int flags);extern EjsProperty *ejsSetPropertyToString(Ejs *ep, EjsVar *obj, const char *prop, const char *value);extern EjsProperty *ejsSetPropertyToUndefined(Ejs *ep, EjsVar *obj, const char *prop);/* Convenience function */extern EjsVar *ejsSetPropertyToObjAsVar(Ejs *ep, EjsVar *obj, const char *prop);extern void ejsSetObjDestructor(Ejs *ep, EjsVar *obj, EjsDestructor destructor);extern void ejsClearObjDestructor(Ejs *ep, EjsVar *obj);/* * Enumeration of properties * MOB -- should these take an ejs parameter to be consistent */extern EjsProperty *ejsGetFirstProperty(const EjsVar *obj, int flags);extern EjsProperty *ejsGetNextProperty(EjsProperty *last, int flags);/* * Method definition and control. */extern EjsProperty *ejsDefineMethod(Ejs *ep, EjsVar *obj, const char *prop, const char *body, MprArray *args);extern EjsProperty *ejsDefineCMethod(Ejs *ep, EjsVar *obj, const char *prop, EjsCMethod fn, int flags);extern EjsProperty *ejsDefineStringCMethod(Ejs *ep, EjsVar *obj, const char *prop, EjsStringCMethod fn, int flags);extern EjsProperty *ejsDefineAccessors(Ejs *ep, EjsVar *obj, const char *prop, const char *getBody, const char *setBody);extern EjsProperty *ejsDefineCAccessors(Ejs *ep, EjsVar *obj, const char *prop, EjsCMethod getFn, EjsCMethod setFn, int flags);/* * Macro to get the variable value portion of a property */#define ejsGetVarPtr(pp) (&((pp)->var))#define ejsGetPropertyPtr(vp) ((EjsProperty*) vp)/* MOB -- take ejs to be consistent */extern int ejsMakePropertyEnumerable(EjsProperty *pp, bool enumerable);extern int ejsMakeObjPermanent(EjsVar *vp, bool permanent);/* * Var conversion routines * MOB -- should these take an Ejs as first arg for consistency */extern bool ejsVarToBoolean(EjsVar *vp);#if BLD_FEATURE_FLOATING_POINTextern double ejsVarToFloat(EjsVar *vp);#endifextern int ejsVarToInteger(EjsVar *vp);#if BLD_FEATURE_INT64extern int64 ejsVarToInteger64(EjsVar *vp);#endifextern EjsNum ejsVarToNumber(EjsVar *vp);extern char *ejsVarToString(Ejs *ep, EjsVar *vp);extern char *ejsVarToStringEx(Ejs *ep, EjsVar *vp, bool *alloc);extern char *ejsFormatVar(Ejs *ep, const char *fmt, EjsVar *vp);#if BLD_FEATURE_FLOATING_POINTextern double ejsParseFloat(const char *str);#endif/* * Parsing and type range checking routines */extern bool ejsParseBoolean(const char *str);extern int ejsParseInteger(const char *str);#if BLD_FEATURE_INT64extern int64 ejsParseInteger64(const char *str);#endifextern EjsNum ejsParseNumber(const char *str);extern EjsVar *ejsParseVar(Ejs *ep, const char *str, EjsType prefType);#if BLD_FEATURE_FLOATING_POINTextern bool ejsIsInfinite(double f);extern bool ejsIsNan(double f);#endif/* * Advisory locking support */#if BLD_FEATURE_MULTITHREADextern void ejsLockObj(EjsVar *vp);extern void ejsUnlockObj(EjsVar *vp);#endif/* * Just for debugging */extern bool ejsObjIsCollectable(EjsVar *vp);#ifdef __cplusplus}#endif/*****************************************************************************/#endif /* _h_EJS_VAR *//* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim:tw=78 * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -