Initial work on the Object prototype
authorRoberto Raggi <roberto.raggi@nokia.com>
Mon, 4 Jun 2012 12:02:40 +0000 (14:02 +0200)
committerRoberto Raggi <roberto.raggi@nokia.com>
Mon, 4 Jun 2012 12:02:40 +0000 (14:02 +0200)
qv4ecmaobjects.cpp
qv4ecmaobjects_p.h

index 82c7e30..deab3c1 100644 (file)
@@ -491,8 +491,92 @@ void ObjectCtor::call(Context *ctx)
 void ObjectPrototype::init(Context *ctx, const Value &ctor)
 {
     ctor.objectValue->setProperty(ctx, ctx->engine->id_prototype, Value::fromObject(this));
+    ctor.objectValue->setProperty(ctx, QStringLiteral("getPrototypeOf"), method_getPrototypeOf, 0);
+    ctor.objectValue->setProperty(ctx, QStringLiteral("getOwnPropertyDescriptor"), method_getOwnPropertyDescriptor, 0);
+    ctor.objectValue->setProperty(ctx, QStringLiteral("getOwnPropertyNames"), method_getOwnPropertyNames, 0);
+    ctor.objectValue->setProperty(ctx, QStringLiteral("create"), method_create, 0);
+    ctor.objectValue->setProperty(ctx, QStringLiteral("defineProperty"), method_defineProperty, 0);
+    ctor.objectValue->setProperty(ctx, QStringLiteral("defineProperties"), method_defineProperties, 0);
+    ctor.objectValue->setProperty(ctx, QStringLiteral("seal"), method_seal, 0);
+    ctor.objectValue->setProperty(ctx, QStringLiteral("freeze"), method_freeze, 0);
+    ctor.objectValue->setProperty(ctx, QStringLiteral("preventExtensions"), method_preventExtensions, 0);
+    ctor.objectValue->setProperty(ctx, QStringLiteral("isSealed"), method_isSealed, 0);
+    ctor.objectValue->setProperty(ctx, QStringLiteral("isFrozen"), method_isFrozen, 0);
+    ctor.objectValue->setProperty(ctx, QStringLiteral("isExtensible"), method_isExtensible, 0);
+    ctor.objectValue->setProperty(ctx, QStringLiteral("keys"), method_keys, 0);
+
     setProperty(ctx, QStringLiteral("constructor"), ctor);
     setProperty(ctx, QStringLiteral("toString"), method_toString, 0);
+    setProperty(ctx, QStringLiteral("toLocaleString"), method_toLocaleString, 0);
+    setProperty(ctx, QStringLiteral("valueOf"), method_valueOf, 0);
+    setProperty(ctx, QStringLiteral("hasOwnProperty"), method_hasOwnProperty, 0);
+    setProperty(ctx, QStringLiteral("isPrototypeOf"), method_isPrototypeOf, 0);
+    setProperty(ctx, QStringLiteral("propertyIsEnumerable"), method_propertyIsEnumerable, 0);
+}
+
+void ObjectPrototype::method_getPrototypeOf(Context *ctx)
+{
+    ctx->throwUnimplemented(QStringLiteral("Object.getPrototypeOf"));
+}
+
+void ObjectPrototype::method_getOwnPropertyDescriptor(Context *ctx)
+{
+    ctx->throwUnimplemented(QStringLiteral("Object.getOwnPropertyDescriptors"));
+}
+
+void ObjectPrototype::method_getOwnPropertyNames(Context *ctx)
+{
+    ctx->throwUnimplemented(QStringLiteral("Object.getOwnPropertyNames"));
+}
+
+void ObjectPrototype::method_create(Context *ctx)
+{
+    ctx->throwUnimplemented(QStringLiteral("Object.create"));
+}
+
+void ObjectPrototype::method_defineProperty(Context *ctx)
+{
+    ctx->throwUnimplemented(QStringLiteral("Object.defineProperty"));
+}
+
+void ObjectPrototype::method_defineProperties(Context *ctx)
+{
+    ctx->throwUnimplemented(QStringLiteral("Object.defineProperties"));
+}
+
+void ObjectPrototype::method_seal(Context *ctx)
+{
+    ctx->throwUnimplemented(QStringLiteral("Object.seal"));
+}
+
+void ObjectPrototype::method_freeze(Context *ctx)
+{
+    ctx->throwUnimplemented(QStringLiteral("Object.freeze"));
+}
+
+void ObjectPrototype::method_preventExtensions(Context *ctx)
+{
+    ctx->throwUnimplemented(QStringLiteral("Object.preventExtensions"));
+}
+
+void ObjectPrototype::method_isSealed(Context *ctx)
+{
+    ctx->throwUnimplemented(QStringLiteral("Object.isSealed"));
+}
+
+void ObjectPrototype::method_isFrozen(Context *ctx)
+{
+    ctx->throwUnimplemented(QStringLiteral("Object.isFrozen"));
+}
+
+void ObjectPrototype::method_isExtensible(Context *ctx)
+{
+    ctx->throwUnimplemented(QStringLiteral("Object.isExtensible"));
+}
+
+void ObjectPrototype::method_keys(Context *ctx)
+{
+    ctx->throwUnimplemented(QStringLiteral("Object.keys"));
 }
 
 void ObjectPrototype::method_toString(Context *ctx)
@@ -503,6 +587,31 @@ void ObjectPrototype::method_toString(Context *ctx)
         ctx->result = Value::fromString(ctx, QString::fromUtf8("[object %1]").arg(ctx->thisObject.objectValue->className()));
 }
 
+void ObjectPrototype::method_toLocaleString(Context *ctx)
+{
+    method_toString(ctx);
+}
+
+void ObjectPrototype::method_valueOf(Context *ctx)
+{
+    ctx->throwUnimplemented(QStringLiteral("Object.prototype.valueOf"));
+}
+
+void ObjectPrototype::method_hasOwnProperty(Context *ctx)
+{
+    ctx->throwUnimplemented(QStringLiteral("Object.prototype.hasOwnProperty"));
+}
+
+void ObjectPrototype::method_isPrototypeOf(Context *ctx)
+{
+    ctx->throwUnimplemented(QStringLiteral("Object.prototype.isPrototypeOf"));
+}
+
+void ObjectPrototype::method_propertyIsEnumerable(Context *ctx)
+{
+    ctx->throwUnimplemented(QStringLiteral("Object.prototype.propertyIsEnumerable"));
+}
+
 //
 // String
 //
index 1936a20..6517ad1 100644 (file)
@@ -19,7 +19,26 @@ struct ObjectPrototype: Object
 {
     void init(Context *ctx, const Value &ctor);
 
+    static void method_getPrototypeOf(Context *ctx);
+    static void method_getOwnPropertyDescriptor(Context *ctx);
+    static void method_getOwnPropertyNames(Context *ctx);
+    static void method_create(Context *ctx);
+    static void method_defineProperty(Context *ctx);
+    static void method_defineProperties(Context *ctx);
+    static void method_seal(Context *ctx);
+    static void method_freeze(Context *ctx);
+    static void method_preventExtensions(Context *ctx);
+    static void method_isSealed(Context *ctx);
+    static void method_isFrozen(Context *ctx);
+    static void method_isExtensible(Context *ctx);
+    static void method_keys(Context *ctx);
+
     static void method_toString(Context *ctx);
+    static void method_toLocaleString(Context *ctx);
+    static void method_valueOf(Context *ctx);
+    static void method_hasOwnProperty(Context *ctx);
+    static void method_isPrototypeOf(Context *ctx);
+    static void method_propertyIsEnumerable(Context *ctx);
 };
 
 struct StringCtor: FunctionObject