StringConstructor(ObjectValue* string) : string(string), arguments(new FormalParameterList), prototype(new ObjectValue) { ObjectValue* function = static_cast<ObjectValue*>(getGlobal()->get("Function")); arguments->add(new Identifier("value")); prototype->put("constructor", string); prototype->setPrototype(function->getPrototype()->getPrototype()); for (int i = 0; i < StringMethod::methodCount(); ++i) { ObjectValue* function = new ObjectValue; StringMethod* method = new StringMethod(function, i); function->setCode(method); prototype->put(method->name(), function); } string->setParameterList(arguments); string->setScope(getGlobal()); string->put("prototype", prototype); string->setPrototype(function->getPrototype()); for (int i = 0; i < StringConstructorMethod::methodCount(); ++i) { ObjectValue* function = new ObjectValue; StringConstructorMethod* method = new StringConstructorMethod(function, i); function->setCode(method); string->put(method->name(), function); } }
InterfaceStoreConstructor(ObjectValue* object) : arguments(new FormalParameterList), prototype(new ObjectValue) { ObjectValue* function = static_cast<ObjectValue*>(getGlobal()->get("Function")); arguments->add(new Identifier("iid")); object->setParameterList(arguments); object->setScope(getGlobal()); // Create Interface.prototype prototype->setPrototype(function->getPrototype()->getPrototype()); prototype->put("constructor", object); object->put("prototype", prototype); object->setPrototype(function->getPrototype()); }
void constructGlobalObject() { global = new ObjectValue; global->put("undefined", UndefinedValue::getInstance()); global->put("NaN", new NumberValue(NAN)); global->put("Infinity", new NumberValue(INFINITY)); // Register function properties of the Global object for (int i = 0; i < GlobalMethod::methodCount(); ++i) { ObjectValue* function = new ObjectValue; GlobalMethod* method = new GlobalMethod(function, i); function->setCode(method); global->put(method->name(), function); } // Register Function ObjectValue* function = constructFunctionConstructor(); global->put("Function", function); // Register Object ObjectValue* object = constructObjectConstructor(); global->put("Object", object); function->getPrototype()->setPrototype(object->get("prototype")); // Register Error objects ObjectValue* error; error = new ObjectValue; error->setCode(new ErrorConstructor(error, "Error", function)); global->put("Error", error); error = new ObjectValue; error->setCode(new ErrorConstructor(error, "EvalError", function)); global->put("EvalError", error); error = new ObjectValue; error->setCode(new ErrorConstructor(error, "RangeError", function)); global->put("RangeError", error); error = new ObjectValue; error->setCode(new ErrorConstructor(error, "ReferenceError", function)); global->put("ReferenceError", error); error = new ObjectValue; error->setCode(new ErrorConstructor(error, "SyntaxError", function)); global->put("SyntaxError", error); error = new ObjectValue; error->setCode(new ErrorConstructor(error, "TypeError", function)); global->put("TypeError", error); error = new ObjectValue; error->setCode(new ErrorConstructor(error, "URIError", function)); global->put("URIError", error); // Register String object ObjectValue* string = constructStringObject(); global->put("String", string); // Register Math object ObjectValue* math = constructMathObject(); global->put("Math", math); // Register Array object ObjectValue* array = constructArrayObject(); global->put("Array", array); // Register Boolean object ObjectValue* boolean = constructBooleanObject(); global->put("Boolean", boolean); // Register RegExp object ObjectValue* regexp = constructRegExpObject(); global->put("RegExp", regexp); // Register Date object ObjectValue* date = constructDateObject(); global->put("Date", date); // Register Interface Store object global->put("InterfaceStore", constructInterfaceObject()); // Register System object global->put("System", constructSystemObject(0)); // Register Number object global->put("Number", constructNumberObject()); }