示例#1
0
/*
    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);
}
示例#2
0
/*
 *  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;
}
示例#3
0
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);
    }
}
示例#4
0
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);
}
示例#5
0
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;
}
示例#6
0
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"));
}
示例#7
0
文件: ejsApp.c 项目: embedthis/ejs-1
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);
}
示例#8
0
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;
}
示例#9
0
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;
}
示例#10
0
文件: ejsVoid.c 项目: liexusong/ejs-2
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");
}
示例#11
0
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;
}
示例#12
0
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;
}