void ejsCreateBooleanType(Ejs *ejs) { EjsType *type; EjsName qname; type = ejsCreateCoreType(ejs, ejsName(&qname, EJS_INTRINSIC_NAMESPACE, "Boolean"), ejs->objectType, sizeof(EjsBoolean), ES_Boolean, ES_Boolean_NUM_CLASS_PROP, ES_Boolean_NUM_INSTANCE_PROP, EJS_ATTR_NATIVE | EJS_ATTR_HAS_CONSTRUCTOR); ejs->booleanType = type; /* * Define the helper functions. */ type->helpers->castVar = (EjsCastVarHelper) castBooleanVar; type->helpers->invokeOperator = (EjsInvokeOperatorHelper) invokeBooleanOperator; /* * Pre-create the only two valid instances for boolean */ ejs->trueValue = (EjsBoolean*) ejsCreateVar(ejs, type, 0); ejs->trueValue->value = 1; ejs->falseValue = (EjsBoolean*) ejsCreateVar(ejs, type, 0); ejs->falseValue->value = 0; ejsSetDebugName(ejs->falseValue, "false"); ejsSetDebugName(ejs->trueValue, "true"); defineBooleanConstants(ejs); }
void ejsCreateVoidType(Ejs *ejs) { EjsType *type; EjsName qname; type = ejsCreateCoreType(ejs, ejsName(&qname, EJS_INTRINSIC_NAMESPACE, "Void"), ejs->objectType, sizeof(EjsVoid), ES_Void, ES_Void_NUM_CLASS_PROP, ES_Void_NUM_INSTANCE_PROP, EJS_ATTR_NATIVE); ejs->voidType = type; /* * Define the helper functions. */ type->helpers->castVar = (EjsCastVarHelper) castVoid; type->helpers->invokeOperator = (EjsInvokeOperatorHelper) invokeVoidOperator; ejs->undefinedValue = ejsCreateVar(ejs, type, 0); ejsSetDebugName(ejs->undefinedValue, "undefined"); if (!(ejs->flags & EJS_FLAG_EMPTY)) { /* * Define the "undefined" value */ ejsSetProperty(ejs, ejs->global, ES_undefined, ejs->undefinedValue); } }
EjsWebHost *ejsCreateWebHostObject(Ejs *ejs, void *handle) { EjsWebHost *vp; EjsType *requestType; EjsName qname; requestType = (EjsType*) ejsGetPropertyByName(ejs, ejs->global, ejsName(&qname, "ejs.web", "Host")); vp = (EjsWebHost*) ejsCreateVar(ejs, requestType, 0); ejsSetDebugName(vp, "EjsWeb Host Instance"); return vp; }
/* * Create an iterator. */ EjsIterator *ejsCreateIterator(Ejs *ejs, EjsVar *obj, EjsNativeFunction nativeNext, bool deep, EjsArray *namespaces) { EjsIterator *ip; ip = (EjsIterator*) ejsCreateVar(ejs, ejs->iteratorType, 0); if (ip) { ip->nativeNext = nativeNext; ip->target = obj; ip->deep = deep; ip->namespaces = namespaces; ejsSetDebugName(ip, "iterator"); } return ip; }
EjsArray *ejsCreateArray(Ejs *ejs, int size) { EjsArray *ap; /* * No need to invoke constructor */ ap = (EjsArray*) ejsCreateObject(ejs, ejs->arrayType, 0); if (ap != 0) { ap->length = 0; if (size > 0 && growArray(ejs, ap, size) < 0) { ejsThrowMemoryError(ejs); return 0; } } ejsSetDebugName(ap, "array instance"); return ap; }