static void destroyArray(Ejs *ejs, EjsArray *ap) { mprAssert(ap); mprFree(ap->data); ap->data = 0; ejsFreeVar(ejs, (EjsVar*) ap, -1); }
static void destroyWorker(Ejs *ejs, EjsWorker *worker) { if (!worker->inside) { removeWorker(ejs, worker); mprAssert(worker->pair); mprFree(worker->pair->ejs); worker->pair = 0; } ejsFreeVar(ejs, (EjsVar*) worker, -1); }
/* Destroy the instance. The default implementation is to just call the GC ejsFreeVar routine which will either free the memory or return it to a type specific pool, ready for reuse */ static void destroyVar(Ejs *ejs, EjsObj *obj) { ejsFreeVar(ejs, obj); }
static void destroyVar(Ejs *ejs, EjsVar *vp) { ejsFreeVar(ejs, vp); }
int ejsDefineObjectClass(Ejs *ep) { EjsMethods *methods; EjsProperty *objectProp, *protoProp; EjsVar *op, *globalClass; /* * Must specially hand-craft the object class as it is the base class * of all objects. */ op = ejsCreateObjVar(ep); if (op == 0) { return MPR_ERR_CANT_CREATE; } ejsSetClassName(ep, op, "Object"); /* * Don't use a constructor for objects for speed */ ejsMakeClassNoConstructor(op); /* * MOB -- should mark properties as public / private and class or instance. */ ejsDefineCMethod(ep, op, "clone", cloneMethod, EJS_NO_LOCAL); ejsDefineCMethod(ep, op, "toString", toStringMethod, EJS_NO_LOCAL); ejsDefineCMethod(ep, op, "valueOf", valueOfMethod, EJS_NO_LOCAL); ejsDefineCMethod(ep, op, "mixin", mixinMethod, EJS_NO_LOCAL); ejsDefineCAccessors(ep, op, "hash", hashGetAccessor, 0, EJS_NO_LOCAL); ejsDefineCAccessors(ep, op, "baseClass", classGetAccessor, 0, EJS_NO_LOCAL); /* * MOB -- make this an accessor */ protoProp = ejsSetProperty(ep, op, "prototype", op); if (protoProp == 0) { ejsFreeVar(ep, op); return MPR_ERR_CANT_CREATE; } /* * Setup the internal methods. Most classes will never override these. * The XML class will. We rely on talloc to free internal. Use "ep" as * the parent as we need "methods" to live while the interpreter lives. */ methods = mprAllocTypeZeroed(ep, EjsMethods); op->objectState->methods = methods; methods->createProperty = createObjProperty; methods->deleteProperty = deleteObjProperty; methods->getProperty = getObjProperty; methods->setProperty = setObjProperty; objectProp = ejsSetPropertyAndFree(ep, ep->global, "Object", op); /* * Change the global class to use Object's methods */ globalClass = ep->service->globalClass; globalClass->objectState->methods = methods; globalClass->objectState->baseClass = ejsGetVarPtr(protoProp); ep->objectClass = ejsGetVarPtr(objectProp); if (ejsObjHasErrors(ejsGetVarPtr(objectProp))) { ejsFreeVar(ep, op); return MPR_ERR_CANT_CREATE; } return 0; }