aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@digia.com>2013-04-08 13:42:27 +0200
committerSimon Hausmann <simon.hausmann@digia.com>2013-04-08 16:29:04 +0200
commit29439b9cd745964a54af95682a869f61b102bb00 (patch)
treef9c5ebb8c969e8477d7b60b5c6f5e01b6182b397 /src
parent8dfc088d2f8b1e0eb2c000a80c04ee574f6aba8f (diff)
Avoid defining name twice in some error objects
Change-Id: I2e96718556ef5a4262816233351b71dd6a80cb9d Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
Diffstat (limited to 'src')
-rw-r--r--src/v4/qv4engine.cpp4
-rw-r--r--src/v4/qv4errorobject.cpp51
-rw-r--r--src/v4/qv4errorobject.h7
3 files changed, 18 insertions, 44 deletions
diff --git a/src/v4/qv4engine.cpp b/src/v4/qv4engine.cpp
index 7064ba42ca..54655d173b 100644
--- a/src/v4/qv4engine.cpp
+++ b/src/v4/qv4engine.cpp
@@ -120,7 +120,7 @@ ExecutionEngine::ExecutionEngine(EvalISelFactory *factory)
datePrototype = new (memoryManager) DatePrototype(this);
functionPrototype = new (memoryManager) FunctionPrototype(rootContext);
regExpPrototype = new (memoryManager) RegExpPrototype(this);
- errorPrototype = new (memoryManager) ErrorPrototype(this);
+ errorPrototype = new (memoryManager) ErrorPrototype(rootContext);
evalErrorPrototype = new (memoryManager) EvalErrorPrototype(rootContext);
rangeErrorPrototype = new (memoryManager) RangeErrorPrototype(rootContext);
referenceErrorPrototype = new (memoryManager) ReferenceErrorPrototype(rootContext);
@@ -435,7 +435,7 @@ RegExpObject *ExecutionEngine::newRegExpObject(RegExp* re, bool global)
Object *ExecutionEngine::newErrorObject(const Value &value)
{
- ErrorObject *object = new (memoryManager) ErrorObject(this, value);
+ ErrorObject *object = new (memoryManager) ErrorObject(rootContext, value);
object->prototype = errorPrototype;
return object;
}
diff --git a/src/v4/qv4errorobject.cpp b/src/v4/qv4errorobject.cpp
index 51a0930524..b69262e77c 100644
--- a/src/v4/qv4errorobject.cpp
+++ b/src/v4/qv4errorobject.cpp
@@ -73,96 +73,74 @@
using namespace QQmlJS::VM;
-ErrorObject::ErrorObject(ExecutionEngine* engine, const Value &message)
- : Object(engine)
+ErrorObject::ErrorObject(ExecutionContext *context, const Value &message, ErrorType t)
+ : Object(context->engine)
{
type = Type_ErrorObject;
- subtype = Error;
+ subtype = t;
if (!message.isUndefined())
- defineDefaultProperty(engine->newString(QStringLiteral("message")), message);
-}
-
-void ErrorObject::setNameProperty(ExecutionContext *ctx)
-{
- defineDefaultProperty(ctx, QLatin1String("name"), Value::fromString(ctx, className()));
+ defineDefaultProperty(context->engine->newString(QStringLiteral("message")), message);
+ defineDefaultProperty(context, QLatin1String("name"), Value::fromString(context, className()));
}
DEFINE_MANAGED_VTABLE(SyntaxErrorObject);
SyntaxErrorObject::SyntaxErrorObject(ExecutionContext *ctx, DiagnosticMessage *message)
- : ErrorObject(ctx->engine, message ? Value::fromString(message->buildFullMessage(ctx)) : ctx->argument(0))
+ : ErrorObject(ctx, message ? Value::fromString(message->buildFullMessage(ctx)) : ctx->argument(0), SyntaxError)
, msg(message)
{
vtbl = &static_vtbl;
- subtype = SyntaxError;
prototype = ctx->engine->syntaxErrorPrototype;
- setNameProperty(ctx);
}
EvalErrorObject::EvalErrorObject(ExecutionContext *ctx, const Value &message)
- : ErrorObject(ctx->engine, message)
+ : ErrorObject(ctx, message, EvalError)
{
- subtype = EvalError;
- setNameProperty(ctx);
prototype = ctx->engine->evalErrorPrototype;
}
RangeErrorObject::RangeErrorObject(ExecutionContext *ctx, const Value &message)
- : ErrorObject(ctx->engine, message)
+ : ErrorObject(ctx, message, RangeError)
{
- subtype = RangeError;
- setNameProperty(ctx);
prototype = ctx->engine->rangeErrorPrototype;
}
RangeErrorObject::RangeErrorObject(ExecutionContext *ctx, const QString &message)
- : ErrorObject(ctx->engine, Value::fromString(ctx,message))
+ : ErrorObject(ctx, Value::fromString(ctx,message), RangeError)
{
- subtype = RangeError;
- setNameProperty(ctx);
prototype = ctx->engine->rangeErrorPrototype;
}
ReferenceErrorObject::ReferenceErrorObject(ExecutionContext *ctx, const Value &message)
- : ErrorObject(ctx->engine, message)
+ : ErrorObject(ctx, message, ReferenceError)
{
- subtype = ReferenceError;
- setNameProperty(ctx);
prototype = ctx->engine->referenceErrorPrototype;
}
ReferenceErrorObject::ReferenceErrorObject(ExecutionContext *ctx, const QString &message)
- : ErrorObject(ctx->engine, Value::fromString(ctx,message))
+ : ErrorObject(ctx, Value::fromString(ctx,message), ReferenceError)
{
- subtype = ReferenceError;
- setNameProperty(ctx);
prototype = ctx->engine->referenceErrorPrototype;
}
TypeErrorObject::TypeErrorObject(ExecutionContext *ctx, const Value &message)
- : ErrorObject(ctx->engine, message)
+ : ErrorObject(ctx, message, TypeError)
{
- subtype = TypeError;
- setNameProperty(ctx);
prototype = ctx->engine->typeErrorPrototype;
}
TypeErrorObject::TypeErrorObject(ExecutionContext *ctx, const QString &message)
- : ErrorObject(ctx->engine, Value::fromString(ctx,message))
+ : ErrorObject(ctx, Value::fromString(ctx,message), TypeError)
{
- subtype = TypeError;
- setNameProperty(ctx);
prototype = ctx->engine->typeErrorPrototype;
}
URIErrorObject::URIErrorObject(ExecutionContext *ctx, const Value &message)
- : ErrorObject(ctx->engine, message)
+ : ErrorObject(ctx, message, URIError)
{
- subtype = URIError;
- setNameProperty(ctx);
prototype = ctx->engine->uRIErrorPrototype;
}
@@ -227,7 +205,6 @@ void ErrorPrototype::init(ExecutionContext *ctx, const Value &ctor, Object *obj)
obj->defineDefaultProperty(ctx, QStringLiteral("constructor"), ctor);
obj->defineDefaultProperty(ctx, QStringLiteral("toString"), method_toString, 0);
obj->defineDefaultProperty(ctx, QStringLiteral("message"), Value::fromString(ctx, QString()));
- obj->defineDefaultProperty(ctx, QStringLiteral("name"), Value::fromString(ctx, QStringLiteral("Error")));
}
Value ErrorPrototype::method_toString(SimpleCallContext *ctx)
diff --git a/src/v4/qv4errorobject.h b/src/v4/qv4errorobject.h
index 2db8848855..20a20ad980 100644
--- a/src/v4/qv4errorobject.h
+++ b/src/v4/qv4errorobject.h
@@ -62,12 +62,9 @@ struct ErrorObject: Object {
URIError
};
- ErrorObject(ExecutionEngine* engine, const Value &message);
+ ErrorObject(ExecutionContext *context, const Value &message, ErrorType t = Error);
SyntaxErrorObject *asSyntaxError();
-
-protected:
- void setNameProperty(ExecutionContext *ctx);
};
struct EvalErrorObject: ErrorObject {
@@ -181,7 +178,7 @@ protected:
struct ErrorPrototype: ErrorObject
{
// ### shouldn't be undefined
- ErrorPrototype(ExecutionEngine* engine): ErrorObject(engine, Value::undefinedValue()) {}
+ ErrorPrototype(ExecutionContext *context): ErrorObject(context, Value::undefinedValue()) {}
void init(ExecutionContext *ctx, const Value &ctor) { init(ctx, ctor, this); }
static void init(ExecutionContext *ctx, const Value &ctor, Object *obj);