/* Create the Iterator and StopIteration types */ void ejsCreateIteratorType(Ejs *ejs) { ejsCreateCoreType(ejs, N(EJS_ITERATOR_NAMESPACE, "Iterator"), sizeof(EjsIterator), S_Iterator, ES_iterator_Iterator_NUM_CLASS_PROP, manageIterator, EJS_TYPE_OBJ); ejsCreateCoreType(ejs, N(EJS_ITERATOR_NAMESPACE, "StopIteration"), sizeof(EjsError), S_StopIteration, ES_iterator_StopIteration_NUM_CLASS_PROP, manageIterator, EJS_TYPE_OBJ); }
/* * Create the Iterator and StopIteration types */ void ejsCreateIteratorType(Ejs *ejs) { EjsType *type; EjsName qname; type = ejsCreateCoreType(ejs, ejsName(&qname, EJS_ITERATOR_NAMESPACE, "Iterator"), ejs->objectType, sizeof(EjsIterator), ES_Iterator, ES_Iterator_NUM_CLASS_PROP, ES_Iterator_NUM_INSTANCE_PROP, EJS_ATTR_NATIVE); ejs->iteratorType = type; type->helpers->markVar = (EjsMarkVarHelper) markIteratorVar; type = ejsCreateCoreType(ejs, ejsName(&qname, EJS_ITERATOR_NAMESPACE, "StopIteration"), ejs->objectType, sizeof(EjsVar), ES_StopIteration, ES_StopIteration_NUM_CLASS_PROP, ES_StopIteration_NUM_INSTANCE_PROP, EJS_ATTR_NATIVE); ejs->stopIterationType = type; }
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); } }
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 ejsCreateArrayType(Ejs *ejs) { EjsType *type; EjsName qname; type = ejsCreateCoreType(ejs, ejsName(&qname, EJS_INTRINSIC_NAMESPACE, "Array"), ejs->objectType, sizeof(EjsArray), ES_Array, ES_Array_NUM_CLASS_PROP, ES_Array_NUM_INSTANCE_PROP, EJS_ATTR_NATIVE | EJS_ATTR_OBJECT | EJS_ATTR_DYNAMIC_INSTANCE | EJS_ATTR_HAS_CONSTRUCTOR | EJS_ATTR_OBJECT_HELPERS); ejs->arrayType = type; /* * Define the helper functions. */ type->helpers->castVar = (EjsCastVarHelper) castArray; type->helpers->cloneVar = (EjsCloneVarHelper) cloneArray; type->helpers->createVar = (EjsCreateVarHelper) createArray; type->helpers->destroyVar = (EjsDestroyVarHelper) destroyArray; type->helpers->getProperty = (EjsGetPropertyHelper) getArrayProperty; type->helpers->getPropertyCount = (EjsGetPropertyCountHelper) getArrayPropertyCount; type->helpers->getPropertyByName = (EjsGetPropertyByNameHelper) getArrayPropertyByName; type->helpers->deleteProperty = (EjsDeletePropertyHelper) deleteArrayProperty; type->helpers->deletePropertyByName = (EjsDeletePropertyByNameHelper) deleteArrayPropertyByName; type->helpers->invokeOperator = (EjsInvokeOperatorHelper) invokeArrayOperator; type->helpers->lookupProperty = (EjsLookupPropertyHelper) lookupArrayProperty; type->helpers->markVar = (EjsMarkVarHelper) markArrayVar; type->helpers->setProperty = (EjsSetPropertyHelper) setArrayProperty; type->helpers->setPropertyByName = (EjsSetPropertyByNameHelper) setArrayPropertyByName; type->numericIndicies = 1; }
PUBLIC void ejsCreateArrayType(Ejs *ejs) { EjsType *type; EjsHelpers *helpers; type = ejsCreateCoreType(ejs, N("ejs", "Array"), sizeof(EjsArray), S_Array, ES_Array_NUM_CLASS_PROP, manageArray, EJS_TYPE_POT | EJS_TYPE_NUMERIC_INDICIES | EJS_TYPE_VIRTUAL_SLOTS | EJS_TYPE_MUTABLE_INSTANCES | EJS_TYPE_DYNAMIC_INSTANCES); helpers = &type->helpers; helpers->cast = (EjsCastHelper) castArray; helpers->clone = (EjsCloneHelper) ejsCloneArray; helpers->create = (EjsCreateHelper) createArray; helpers->getProperty = (EjsGetPropertyHelper) getArrayProperty; helpers->getPropertyCount = (EjsGetPropertyCountHelper) getArrayPropertyCount; helpers->getPropertyByName = (EjsGetPropertyByNameHelper) getArrayPropertyByName; helpers->deleteProperty = (EjsDeletePropertyHelper) deleteArrayProperty; helpers->deletePropertyByName = (EjsDeletePropertyByNameHelper) deleteArrayPropertyByName; helpers->invokeOperator = (EjsInvokeOperatorHelper) invokeArrayOperator; helpers->lookupProperty = (EjsLookupPropertyHelper) lookupArrayProperty; helpers->setProperty = (EjsSetPropertyHelper) setArrayProperty; helpers->setPropertyByName = (EjsSetPropertyByNameHelper) setArrayPropertyByName; ejsAddImmutable(ejs, S_length, EN("length"), ejsCreateStringFromAsc(ejs, "length")); }
void ejsCreateAppType(Ejs *ejs) { EjsName qname; ejsCreateCoreType(ejs, ejsName(&qname, "ejs.sys", "App"), ejs->objectType, sizeof(EjsObject), ES_ejs_sys_App, ES_ejs_sys_App_NUM_CLASS_PROP, ES_ejs_sys_App_NUM_INSTANCE_PROP, EJS_ATTR_NATIVE | EJS_ATTR_OBJECT_HELPERS); }
PUBLIC void ejsCreateRegExpType(Ejs *ejs) { EjsType *type; type = ejsCreateCoreType(ejs, N("ejs", "RegExp"), sizeof(EjsRegExp), S_RegExp, ES_RegExp_NUM_CLASS_PROP, manageRegExp, EJS_TYPE_OBJ | EJS_TYPE_MUTABLE_INSTANCES); type->helpers.cast = (EjsCastHelper) castRegExp; }
static EjsType *defineType(Ejs *ejs, cchar *name, int id) { EjsType *type; type = ejsCreateCoreType(ejs, N("ejs", name), sizeof(EjsError), id, ES_Error_NUM_CLASS_PROP, ejsManagePot, EJS_TYPE_POT | EJS_TYPE_DYNAMIC_INSTANCES | EJS_TYPE_HAS_INSTANCE_VARS | EJS_TYPE_MUTABLE_INSTANCES); type->constructor.block.nobind = 1; type->helpers.cast = (EjsCastHelper) castError; return type; }
PUBLIC void ejsCreateVoidType(Ejs *ejs) { EjsType *type; type = ejsCreateCoreType(ejs, N("ejs", "Void"), sizeof(EjsVoid), S_Void, ES_Void_NUM_CLASS_PROP, NULL, EJS_TYPE_OBJ); type->helpers.cast = (EjsCastHelper) castVoid; type->helpers.invokeOperator = (EjsInvokeOperatorHelper) invokeVoidOperator; type->helpers.getProperty = (EjsGetPropertyHelper) getVoidProperty; ejsAddImmutable(ejs, ES_undefined, EN("undefined"), ejsCreateObj(ejs, type, 0)); mprSetName(ESV(undefined), "undefined"); }
static EjsType *createErrorType(Ejs *ejs, cchar *name, int numClassProp, int numInstanceProp) { EjsType *type, *baseType; EjsName qname; int flags; flags = EJS_ATTR_NATIVE | EJS_ATTR_OBJECT | EJS_ATTR_DYNAMIC_INSTANCE | EJS_ATTR_OBJECT_HELPERS | EJS_ATTR_HAS_CONSTRUCTOR | EJS_ATTR_NO_BIND; baseType = (ejs->errorType) ? ejs->errorType: ejs->objectType; type = ejsCreateCoreType(ejs, ejsName(&qname, EJS_INTRINSIC_NAMESPACE, name), baseType, sizeof(EjsError), ES_Error, numClassProp, numInstanceProp, flags); type->helpers->castVar = (EjsCastVarHelper) castError; type->helpers->getProperty = (EjsGetPropertyHelper) getErrorProperty; type->helpers->lookupProperty = (EjsLookupPropertyHelper) lookupErrorProperty; return type; }
PUBLIC void ejsCreateXMLType(Ejs *ejs) { EjsType *type; type = ejsCreateCoreType(ejs, N("ejs", "XML"), sizeof(EjsXML), S_XML, ES_XML_NUM_CLASS_PROP, ejsManageXML, EJS_TYPE_OBJ); /* Must not bind as XML uses get/setPropertyByName to defer to user XML elements over XML methods */ type->constructor.block.nobind = 1; type->helpers.clone = (EjsCloneHelper) cloneXml; type->helpers.cast = (EjsCastHelper) castXml; type->helpers.create = (EjsCreateHelper) createXml; type->helpers.getPropertyByName = (EjsGetPropertyByNameHelper) getXmlPropertyByName; type->helpers.getPropertyCount = (EjsGetPropertyCountHelper) getXmlPropertyCount; type->helpers.deletePropertyByName = (EjsDeletePropertyByNameHelper) deleteXmlPropertyByName; type->helpers.invokeOperator = (EjsInvokeOperatorHelper) invokeXmlOperator; type->helpers.setPropertyByName = (EjsSetPropertyByNameHelper) setXmlPropertyByName; }