static int valueOfMethod(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv) { if (argc != 0) { mprAssert(0); return -1; } switch (thisObj->type) { default: case EJS_TYPE_UNDEFINED: case EJS_TYPE_NULL: case EJS_TYPE_CMETHOD: case EJS_TYPE_OBJECT: case EJS_TYPE_METHOD: case EJS_TYPE_STRING_CMETHOD: ejsWriteVar(ep, ep->result, thisObj, EJS_SHALLOW_COPY); break; case EJS_TYPE_STRING: ejsWriteVarAsInteger(ep, ep->result, atoi(thisObj->string)); break; case EJS_TYPE_BOOL: case EJS_TYPE_INT: #if BLD_FEATURE_INT64 case EJS_TYPE_INT64: #endif #if BLD_FEATURE_FLOATING_POINT case EJS_TYPE_FLOAT: #endif ejsWriteVar(ep, ep->result, thisObj, EJS_SHALLOW_COPY); break; } return 0; }
static int cloneMethod(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv) { int copyDepth; copyDepth = EJS_DEEP_COPY; if (argc == 1 && ejsVarToBoolean(argv[0])) { copyDepth = EJS_RECURSIVE_DEEP_COPY; } ejsWriteVar(ep, ep->result, thisObj, copyDepth); return 0; }
static EjsVar *setObjProperty(Ejs *ep, EjsVar *obj, const char *property, const EjsVar *value) { EjsProperty *pp; EjsVar *vp; pp = ejsCreateSimpleProperty(ep, obj, property); if (pp == 0) { mprAssert(pp); return 0; } vp = ejsGetVarPtr(pp); if (ejsWriteVar(ep, vp, value, EJS_SHALLOW_COPY) < 0) { mprAssert(0); return 0; } return ejsGetVarPtr(pp); }
EjsVar *ejsAddArrayElt(Ejs *ep, EjsVar *op, EjsVar *element, EjsCopyDepth copyDepth) { EjsProperty *pp; EjsVar *vp; char idx[16]; int length; mprAssert(op->isArray); length = ejsGetPropertyAsInteger(ep, op, "length"); mprItoa(idx, sizeof(idx), length); pp = ejsCreateProperty(ep, op, idx); vp = ejsGetVarPtr(pp); ejsWriteVar(ep, vp, element, copyDepth); ejsSetPropertyToInteger(ep, op, "length", length + 1); return vp; }
int ejsArrayConstructor(Ejs *ep, EjsVar *thisObj, int argc, EjsVar **argv) { EjsProperty *pp; EjsVar *vp; char idx[16]; int i, max; thisObj->isArray = 1; max = 0; if (argc > 0) { if (argc == 1 && ejsVarIsNumber(argv[0])) { /* * x = new Array(size); */ max = (int) ejsVarToInteger(argv[0]); } else { /* * x = new Array(element0, element1, ..., elementN): */ max = argc; for (i = 0; i < max; i++) { mprItoa(idx, sizeof(idx), i); pp = ejsCreateSimpleProperty(ep, thisObj, idx); vp = ejsGetVarPtr(pp); ejsWriteVar(ep, vp, argv[i], EJS_SHALLOW_COPY); } } } pp = ejsCreateSimpleProperty(ep, thisObj, "length"); ejsMakePropertyEnumerable(pp, 0); vp = ejsGetVarPtr(pp); ejsWriteVarAsInteger(ep, vp, max); vp->isArrayLength = 1; return 0; }
int espWriteVar(EspRequest *ep, char *var, MprVar *value) { return ejsWriteVar(ep->eid, var, value); }