int ejsDefineDateClass(Ejs *ep) { EjsVar *dateClass; dateClass = ejsDefineClass(ep, "Date", "Object", ejsDateConstructor); if (dateClass == 0) { return MPR_ERR_CANT_INITIALIZE; } ejsDefineCMethod(ep, dateClass, "getDate", xxxProc, EJS_NO_LOCAL); /* Returns "Friday" or 4 ? */ ejsDefineCMethod(ep, dateClass, "getDay", xxxProc, EJS_NO_LOCAL); ejsDefineCMethod(ep, dateClass, "getMonth", xxxProc, EJS_NO_LOCAL); ejsDefineCMethod(ep, dateClass, "getFullYear", xxxProc, EJS_NO_LOCAL); ejsDefineCMethod(ep, dateClass, "getYear", xxxProc, EJS_NO_LOCAL); ejsDefineCMethod(ep, dateClass, "getHours", xxxProc, EJS_NO_LOCAL); ejsDefineCMethod(ep, dateClass, "getMinutes", xxxProc, EJS_NO_LOCAL); ejsDefineCMethod(ep, dateClass, "getSeconds", xxxProc, EJS_NO_LOCAL); ejsDefineCMethod(ep, dateClass, "getMilliseconds", xxxProc, EJS_NO_LOCAL); ejsDefineCMethod(ep, dateClass, "getTime", xxxProc, EJS_NO_LOCAL); ejsDefineCMethod(ep, dateClass, "getTimeZoneOffset", xxxProc, EJS_NO_LOCAL); ejsDefineCMethod(ep, dateClass, "parse", xxxProc, EJS_NO_LOCAL); ejsDefineCMethod(ep, dateClass, "setDate", xxxProc, EJS_NO_LOCAL); ejsDefineCMethod(ep, dateClass, "setMonth", xxxProc, EJS_NO_LOCAL); ejsDefineCMethod(ep, dateClass, "setFullYear", xxxProc, EJS_NO_LOCAL); ejsDefineCMethod(ep, dateClass, "setYear", xxxProc, EJS_NO_LOCAL); ejsDefineCMethod(ep, dateClass, "setMinutes", xxxProc, EJS_NO_LOCAL); ejsDefineCMethod(ep, dateClass, "setSeconds", xxxProc, EJS_NO_LOCAL); ejsDefineCMethod(ep, dateClass, "setMilliseconds", xxxProc, EJS_NO_LOCAL); ejsDefineCMethod(ep, dateClass, "setTime", xxxProc, EJS_NO_LOCAL); ejsDefineCMethod(ep, dateClass, "toString", xxxProc, EJS_NO_LOCAL); ejsDefineCMethod(ep, dateClass, "toGMTString", xxxProc, EJS_NO_LOCAL); ejsDefineCMethod(ep, dateClass, "toUTCString", xxxProc, EJS_NO_LOCAL); ejsDefineCMethod(ep, dateClass, "toLocaleString", xxxProc, EJS_NO_LOCAL); ejsDefineCMethod(ep, dateClass, "UTC", xxxProc, EJS_NO_LOCAL); ejsDefineCMethod(ep, dateClass, "valueOf", xxxProc, EJS_NO_LOCAL); /* UTC: getUTCDate, getUTCDay, getUTCMonth, getUTCFullYear, getUTCHours, getUTCMinutes, getUTCSeconds, getUTCMilliseconds setUTCDate, setUTCDay, setUTCMonth, setUTCFullYear, setUTCHours, setUTCMinutes, setUTCSeconds, setUTCMilliseconds */ return ejsObjHasErrors(dateClass) ? MPR_ERR_CANT_INITIALIZE : 0; }
int ejsDefineDebugClass(EjsFiber *fp) { EjsVar *systemDebugClass; systemDebugClass = ejsDefineClass(fp, "System.Debug", "Object", 0); if (systemDebugClass == 0) { return MPR_ERR_CANT_INITIALIZE; } /* * Define the class methods */ ejsDefineCMethod(fp, systemDebugClass, "isDebugMode", isDebugMode, 0); return ejsObjHasErrors(systemDebugClass) ? MPR_ERR_CANT_INITIALIZE : 0; }
int ejsDefineFileClass(Ejs *ep) { EjsVar *fileClass; fileClass = ejsDefineClass(ep, "File", "Object", 0); if (fileClass == 0) { return MPR_ERR_CANT_INITIALIZE; } /* * Define the methods */ ejsDefineCMethod(ep, fileClass, "open", openProc, 0); ejsDefineCMethod(ep, fileClass, "close", closeProc, 0); ejsDefineCMethod(ep, fileClass, "read", readProc, 0); ejsDefineCMethod(ep, fileClass, "write", writeProc, 0); return ejsObjHasErrors(fileClass) ? MPR_ERR_CANT_INITIALIZE: 0; }
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; }