From 2b59eda8304c6c40c9c286abe6070a88f24a3905 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Thu, 14 Feb 2013 10:46:30 +0100 Subject: [PATCH] Remove the virtual contruct(ctx) method The more general and faster construct method taking more arguments is now used in all cases. Change-Id: I183e4279526e5a937938a72d494a537faf4bc825 Reviewed-by: Simon Hausmann --- src/v4/qv4errorobject.cpp | 4 ++-- src/v4/qv4errorobject.h | 2 +- src/v4/qv4functionobject.cpp | 7 +------ src/v4/qv4functionobject.h | 1 - src/v4/qv4regexpobject.cpp | 16 ++++++++-------- src/v4/qv4regexpobject.h | 4 ++-- src/v4/qv4stringobject.cpp | 6 +++--- src/v4/qv4stringobject.h | 2 +- 8 files changed, 18 insertions(+), 24 deletions(-) diff --git a/src/v4/qv4errorobject.cpp b/src/v4/qv4errorobject.cpp index 50797b7..8ad7d5e 100644 --- a/src/v4/qv4errorobject.cpp +++ b/src/v4/qv4errorobject.cpp @@ -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) diff --git a/src/v4/qv4errorobject.h b/src/v4/qv4errorobject.h index 651951c..734ee3f 100644 --- a/src/v4/qv4errorobject.h +++ b/src/v4/qv4errorobject.h @@ -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); }; diff --git a/src/v4/qv4functionobject.cpp b/src/v4/qv4functionobject.cpp index 0f9655c..69302dd 100644 --- a/src/v4/qv4functionobject.cpp +++ b/src/v4/qv4functionobject.cpp @@ -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, diff --git a/src/v4/qv4functionobject.h b/src/v4/qv4functionobject.h index c5f74de..dff95d2 100644 --- a/src/v4/qv4functionobject.h +++ b/src/v4/qv4functionobject.h @@ -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); diff --git a/src/v4/qv4regexpobject.cpp b/src/v4/qv4regexpobject.cpp index 2762c98..19aee55 100644 --- a/src/v4/qv4regexpobject.cpp +++ b/src/v4/qv4regexpobject.cpp @@ -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) diff --git a/src/v4/qv4regexpobject.h b/src/v4/qv4regexpobject.h index dcf6120..d310374 100644 --- a/src/v4/qv4regexpobject.h +++ b/src/v4/qv4regexpobject.h @@ -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 diff --git a/src/v4/qv4stringobject.cpp b/src/v4/qv4stringobject.cpp index eab9e0c..e8ec9e6 100644 --- a/src/v4/qv4stringobject.cpp +++ b/src/v4/qv4stringobject.cpp @@ -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)); diff --git a/src/v4/qv4stringobject.h b/src/v4/qv4stringobject.h index 106ba14..5c295e2 100644 --- a/src/v4/qv4stringobject.h +++ b/src/v4/qv4stringobject.h @@ -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); }; -- 2.7.4