Remove the virtual contruct(ctx) method
authorLars Knoll <lars.knoll@digia.com>
Thu, 14 Feb 2013 09:46:30 +0000 (10:46 +0100)
committerSimon Hausmann <simon.hausmann@digia.com>
Thu, 14 Feb 2013 11:02:33 +0000 (12:02 +0100)
The more general and faster construct method taking
more arguments is now used in all cases.

Change-Id: I183e4279526e5a937938a72d494a537faf4bc825
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
src/v4/qv4errorobject.cpp
src/v4/qv4errorobject.h
src/v4/qv4functionobject.cpp
src/v4/qv4functionobject.h
src/v4/qv4regexpobject.cpp
src/v4/qv4regexpobject.h
src/v4/qv4stringobject.cpp
src/v4/qv4stringobject.h

index 50797b7..8ad7d5e 100644 (file)
@@ -169,9 +169,9 @@ ErrorCtor::ErrorCtor(ExecutionContext *scope)
 {
 }
 
-Value ErrorCtor::construct(ExecutionContext *context, Value *args, int argc)
+Value ErrorCtor::construct(ExecutionContext *ctx, Value *args, int argc)
 {
-    return Value::fromObject(context->engine->newErrorObject(argc ? args[0] : Value::undefinedValue()));
+    return Value::fromObject(ctx->engine->newErrorObject(argc ? args[0] : Value::undefinedValue()));
 }
 
 Value ErrorCtor::call(ExecutionContext *ctx, Value thisObject, Value *args, int argc)
index 651951c..734ee3f 100644 (file)
@@ -106,7 +106,7 @@ struct ErrorCtor: FunctionObject
 {
     ErrorCtor(ExecutionContext *scope);
 
-    virtual Value construct(ExecutionContext *context, Value *args, int argc);
+    virtual Value construct(ExecutionContext *ctx, Value *args, int argc);
     virtual Value call(ExecutionContext *ctx, Value thisObject, Value *args, int argc);
 };
 
index 0f9655c..69302dd 100644 (file)
@@ -143,7 +143,7 @@ Value FunctionObject::construct(ExecutionContext *context, Value *args, int argc
     ctx->argumentCount = argc;
 
     ctx->initCallContext(context);
-    Value result = construct(ctx);
+    Value result = call(ctx);
     ctx->leaveCallContext();
 
     if (result.isObject())
@@ -202,11 +202,6 @@ Value FunctionObject::call(ExecutionContext *ctx)
     return Value::undefinedValue();
 }
 
-Value FunctionObject::construct(ExecutionContext *ctx)
-{
-    return call(ctx);
-}
-
 const ManagedVTable FunctionObject::static_vtbl =
 {
     FunctionObject::markObjects,
index c5f74de..dff95d2 100644 (file)
@@ -163,7 +163,6 @@ struct Q_V4_EXPORT FunctionObject: Object {
 
 protected:
     virtual Value call(ExecutionContext *ctx);
-    virtual Value construct(ExecutionContext *ctx);
 
     static const ManagedVTable static_vtbl;
     static void markObjects(Managed *that);
index 2762c98..19aee55 100644 (file)
@@ -98,10 +98,10 @@ RegExpCtor::RegExpCtor(ExecutionContext *scope)
 {
 }
 
-Value RegExpCtor::construct(ExecutionContext *ctx)
+Value RegExpCtor::construct(ExecutionContext *ctx, Value *argv, int argc)
 {
-    Value r = ctx->argumentCount > 0 ? ctx->argument(0) : Value::undefinedValue();
-    Value f = ctx->argumentCount > 1 ? ctx->argument(1) : Value::undefinedValue();
+    Value r = argc > 0 ? argv[0] : Value::undefinedValue();
+    Value f = argc > 1 ? argv[1] : Value::undefinedValue();
     if (RegExpObject *re = r.asRegExpObject()) {
         if (!f.isUndefined())
             ctx->throwTypeError();
@@ -142,14 +142,14 @@ Value RegExpCtor::construct(ExecutionContext *ctx)
     return Value::fromObject(o);
 }
 
-Value RegExpCtor::call(ExecutionContext *ctx)
+Value RegExpCtor::call(ExecutionContext *ctx, Value thisObject, Value *argv, int argc)
 {
-    if (ctx->argumentCount > 0 && ctx->argument(0).asRegExpObject()) {
-        if (ctx->argumentCount == 1 || ctx->argument(1).isUndefined())
-            return ctx->argument(0);
+    if (argc > 0 && argv[0].asRegExpObject()) {
+        if (argc == 1 || argv[1].isUndefined())
+            return argv[0];
     }
 
-    return construct(ctx);
+    return construct(ctx, argv, argc);
 }
 
 void RegExpPrototype::init(ExecutionContext *ctx, const Value &ctor)
index dcf6120..d310374 100644 (file)
@@ -76,8 +76,8 @@ struct RegExpCtor: FunctionObject
 {
     RegExpCtor(ExecutionContext *scope);
 
-    virtual Value construct(ExecutionContext *ctx);
-    virtual Value call(ExecutionContext *ctx);
+    virtual Value construct(ExecutionContext *ctx, Value *argv, int argc);
+    virtual Value call(ExecutionContext *ctx, Value thisObject, Value *argv, int argc);
 };
 
 struct RegExpPrototype: RegExpObject
index eab9e0c..e8ec9e6 100644 (file)
@@ -119,11 +119,11 @@ StringCtor::StringCtor(ExecutionContext *scope)
 {
 }
 
-Value StringCtor::construct(ExecutionContext *ctx)
+Value StringCtor::construct(ExecutionContext *ctx, Value *argv, int argc)
 {
     Value value;
-    if (ctx->argumentCount)
-        value = Value::fromString(ctx->argument(0).toString(ctx));
+    if (argc)
+        value = Value::fromString(argv[0].toString(ctx));
     else
         value = Value::fromString(ctx, QString());
     return Value::fromObject(ctx->engine->newStringObject(ctx, value));
index 106ba14..5c295e2 100644 (file)
@@ -66,7 +66,7 @@ struct StringCtor: FunctionObject
 {
     StringCtor(ExecutionContext *scope);
 
-    virtual Value construct(ExecutionContext *ctx);
+    virtual Value construct(ExecutionContext *ctx, Value *argv, int argc);
     virtual Value call(ExecutionContext *parentCtx, Value thisObject, Value *argv, int argc);
 };