Fix Value usage in ErrorObjects
Change-Id: Iaa14ad5a8d3f085843e49195f8f4bb7bb020b9b6 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
This commit is contained in:
parent
150731fc68
commit
18d4794e3f
|
@ -66,7 +66,7 @@ using namespace QV4;
|
|||
|
||||
#define V4THROW_SQL(error, desc) { \
|
||||
QV4::Scoped<String> v(scope, Value::fromString(ctx, desc)); \
|
||||
QV4::Scoped<Object> ex(scope, ctx->engine->newErrorObject(v.asValue())); \
|
||||
QV4::Scoped<Object> ex(scope, ctx->engine->newErrorObject(v)); \
|
||||
ex->put(QV4::ScopedString(scope, ctx->engine->newIdentifier(QStringLiteral("code"))), QV4::ScopedValue(scope, Primitive::fromInt32(error))); \
|
||||
ctx->throwError(ex); \
|
||||
}
|
||||
|
|
|
@ -273,8 +273,10 @@ ReturnedValue ArrayPrototype::method_push(SimpleCallContext *ctx)
|
|||
double newLen = l + ctx->callData->argc;
|
||||
if (!instance->isArrayObject())
|
||||
instance->put(ctx->engine->id_length, ScopedValue(scope, Primitive::fromDouble(newLen)));
|
||||
else
|
||||
ctx->throwRangeError(Value::fromString(ctx, QStringLiteral("Array.prototype.push: Overflow")));
|
||||
else {
|
||||
ScopedString str(scope, ctx->engine->newString(QStringLiteral("Array.prototype.push: Overflow")));
|
||||
ctx->throwRangeError(str);
|
||||
}
|
||||
return Primitive::fromDouble(newLen).asReturnedValue();
|
||||
}
|
||||
|
||||
|
|
|
@ -662,19 +662,19 @@ void ExecutionContext::throwReferenceError(const QString &message, const QString
|
|||
throwError(error);
|
||||
}
|
||||
|
||||
void ExecutionContext::throwRangeError(Value value)
|
||||
void ExecutionContext::throwRangeError(const ValueRef value)
|
||||
{
|
||||
Scope scope(this);
|
||||
Scoped<String> s(scope, value.toString(this));
|
||||
ScopedString s(scope, value->toString(this));
|
||||
QString msg = s->toQString() + QStringLiteral(" out of range");
|
||||
Scoped<Object> error(scope, engine->newRangeErrorObject(msg));
|
||||
ScopedObject error(scope, engine->newRangeErrorObject(msg));
|
||||
throwError(error);
|
||||
}
|
||||
|
||||
void ExecutionContext::throwURIError(Value msg)
|
||||
void ExecutionContext::throwURIError(const ValueRef msg)
|
||||
{
|
||||
Scope scope(this);
|
||||
Scoped<Object> error(scope, engine->newURIErrorObject(msg));
|
||||
ScopedObject error(scope, engine->newURIErrorObject(msg));
|
||||
throwError(error);
|
||||
}
|
||||
|
||||
|
|
|
@ -133,8 +133,8 @@ struct Q_QML_EXPORT ExecutionContext
|
|||
void Q_NORETURN throwTypeError(const QString &message);
|
||||
void Q_NORETURN throwReferenceError(const ValueRef value);
|
||||
void Q_NORETURN throwReferenceError(const QString &value, const QString &fileName, int line, int column);
|
||||
void Q_NORETURN throwRangeError(Value value);
|
||||
void Q_NORETURN throwURIError(Value msg);
|
||||
void Q_NORETURN throwRangeError(const ValueRef value);
|
||||
void Q_NORETURN throwURIError(const ValueRef msg);
|
||||
void Q_NORETURN throwUnimplemented(const QString &message);
|
||||
|
||||
void setProperty(const StringRef name, const ValueRef value);
|
||||
|
|
|
@ -475,7 +475,7 @@ Returned<RegExpObject> *ExecutionEngine::newRegExpObject(const QRegExp &re)
|
|||
return object->asReturned<RegExpObject>();
|
||||
}
|
||||
|
||||
Returned<Object> *ExecutionEngine::newErrorObject(const Value &value)
|
||||
Returned<Object> *ExecutionEngine::newErrorObject(const ValueRef value)
|
||||
{
|
||||
ErrorObject *object = new (memoryManager) ErrorObject(errorClass, value);
|
||||
return object->asReturned<Object>();
|
||||
|
@ -483,7 +483,9 @@ Returned<Object> *ExecutionEngine::newErrorObject(const Value &value)
|
|||
|
||||
Returned<Object> *ExecutionEngine::newSyntaxErrorObject(const QString &message)
|
||||
{
|
||||
Object *error = new (memoryManager) SyntaxErrorObject(this, Value::fromString(this, message));
|
||||
Scope scope(this);
|
||||
ScopedString s(scope, newString(message));
|
||||
Object *error = new (memoryManager) SyntaxErrorObject(this, s);
|
||||
return error->asReturned<Object>();
|
||||
}
|
||||
|
||||
|
@ -519,7 +521,7 @@ Returned<Object> *ExecutionEngine::newRangeErrorObject(const QString &message)
|
|||
return o->asReturned<Object>();
|
||||
}
|
||||
|
||||
Returned<Object> *ExecutionEngine::newURIErrorObject(Value message)
|
||||
Returned<Object> *ExecutionEngine::newURIErrorObject(const ValueRef message)
|
||||
{
|
||||
Object *o = new (memoryManager) URIErrorObject(this, message);
|
||||
return o->asReturned<Object>();
|
||||
|
|
|
@ -290,14 +290,14 @@ struct Q_QML_EXPORT ExecutionEngine
|
|||
Returned<RegExpObject> *newRegExpObject(RegExp* re, bool global);
|
||||
Returned<RegExpObject> *newRegExpObject(const QRegExp &re);
|
||||
|
||||
Returned<Object> *newErrorObject(const Value &value);
|
||||
Returned<Object> *newErrorObject(const ValueRef value);
|
||||
Returned<Object> *newSyntaxErrorObject(const QString &message, const QString &fileName, int line, int column);
|
||||
Returned<Object> *newSyntaxErrorObject(const QString &message);
|
||||
Returned<Object> *newReferenceErrorObject(const QString &message);
|
||||
Returned<Object> *newReferenceErrorObject(const QString &message, const QString &fileName, int lineNumber, int columnNumber);
|
||||
Returned<Object> *newTypeErrorObject(const QString &message);
|
||||
Returned<Object> *newRangeErrorObject(const QString &message);
|
||||
Returned<Object> *newURIErrorObject(Value message);
|
||||
Returned<Object> *newURIErrorObject(const ValueRef message);
|
||||
|
||||
Returned<Object> *newVariantObject(const QVariant &v);
|
||||
|
||||
|
|
|
@ -85,7 +85,7 @@ ErrorObject::ErrorObject(InternalClass *ic)
|
|||
defineDefaultProperty(QStringLiteral("name"), Value::fromString(ic->engine, "Error"));
|
||||
}
|
||||
|
||||
ErrorObject::ErrorObject(InternalClass *ic, const Value &message, ErrorType t)
|
||||
ErrorObject::ErrorObject(InternalClass *ic, const ValueRef message, ErrorType t)
|
||||
: Object(ic)
|
||||
, stack(0)
|
||||
{
|
||||
|
@ -98,8 +98,32 @@ ErrorObject::ErrorObject(InternalClass *ic, const Value &message, ErrorType t)
|
|||
|
||||
defineAccessorProperty(QStringLiteral("stack"), ErrorObject::method_get_stack, 0);
|
||||
|
||||
if (!message.isUndefined())
|
||||
defineDefaultProperty(QStringLiteral("message"), message);
|
||||
if (!message->isUndefined())
|
||||
defineDefaultProperty(QStringLiteral("message"), *message);
|
||||
defineDefaultProperty(QStringLiteral("name"), Value::fromString(ic->engine, className()));
|
||||
|
||||
stackTrace = ic->engine->stackTrace();
|
||||
if (!stackTrace.isEmpty()) {
|
||||
defineDefaultProperty(QStringLiteral("fileName"), Value::fromString(ic->engine, stackTrace.at(0).source));
|
||||
defineDefaultProperty(QStringLiteral("lineNumber"), Primitive::fromInt32(stackTrace.at(0).line));
|
||||
}
|
||||
}
|
||||
|
||||
ErrorObject::ErrorObject(InternalClass *ic, const QString &message, ErrorObject::ErrorType t)
|
||||
: Object(ic)
|
||||
, stack(0)
|
||||
{
|
||||
type = Type_ErrorObject;
|
||||
vtbl = &static_vtbl;
|
||||
subtype = t;
|
||||
|
||||
Scope scope(engine());
|
||||
ScopedValue protectThis(scope, this);
|
||||
|
||||
defineAccessorProperty(QStringLiteral("stack"), ErrorObject::method_get_stack, 0);
|
||||
|
||||
ScopedValue v(scope, ic->engine->newString(message));
|
||||
defineDefaultProperty(QStringLiteral("message"), v);
|
||||
defineDefaultProperty(QStringLiteral("name"), Value::fromString(ic->engine, className()));
|
||||
|
||||
stackTrace = ic->engine->stackTrace();
|
||||
|
@ -175,7 +199,7 @@ DEFINE_MANAGED_VTABLE(ErrorObject);
|
|||
|
||||
DEFINE_MANAGED_VTABLE(SyntaxErrorObject);
|
||||
|
||||
SyntaxErrorObject::SyntaxErrorObject(ExecutionEngine *engine, const Value &msg)
|
||||
SyntaxErrorObject::SyntaxErrorObject(ExecutionEngine *engine, const ValueRef msg)
|
||||
: ErrorObject(engine->syntaxErrorClass, msg, SyntaxError)
|
||||
{
|
||||
vtbl = &static_vtbl;
|
||||
|
@ -187,28 +211,28 @@ SyntaxErrorObject::SyntaxErrorObject(ExecutionEngine *engine, const QString &msg
|
|||
vtbl = &static_vtbl;
|
||||
}
|
||||
|
||||
EvalErrorObject::EvalErrorObject(ExecutionEngine *engine, const Value &message)
|
||||
EvalErrorObject::EvalErrorObject(ExecutionEngine *engine, const ValueRef message)
|
||||
: ErrorObject(engine->evalErrorClass, message, EvalError)
|
||||
{
|
||||
}
|
||||
|
||||
RangeErrorObject::RangeErrorObject(ExecutionEngine *engine, const Value &message)
|
||||
RangeErrorObject::RangeErrorObject(ExecutionEngine *engine, const ValueRef message)
|
||||
: ErrorObject(engine->rangeErrorClass, message, RangeError)
|
||||
{
|
||||
}
|
||||
|
||||
RangeErrorObject::RangeErrorObject(ExecutionEngine *engine, const QString &message)
|
||||
: ErrorObject(engine->rangeErrorClass, Value::fromString(engine, message), RangeError)
|
||||
: ErrorObject(engine->rangeErrorClass, message, RangeError)
|
||||
{
|
||||
}
|
||||
|
||||
ReferenceErrorObject::ReferenceErrorObject(ExecutionEngine *engine, const Value &message)
|
||||
ReferenceErrorObject::ReferenceErrorObject(ExecutionEngine *engine, const ValueRef message)
|
||||
: ErrorObject(engine->referenceErrorClass, message, ReferenceError)
|
||||
{
|
||||
}
|
||||
|
||||
ReferenceErrorObject::ReferenceErrorObject(ExecutionEngine *engine, const QString &message)
|
||||
: ErrorObject(engine->referenceErrorClass, Value::fromString(engine, message), ReferenceError)
|
||||
: ErrorObject(engine->referenceErrorClass, message, ReferenceError)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -217,17 +241,17 @@ ReferenceErrorObject::ReferenceErrorObject(ExecutionEngine *engine, const QStrin
|
|||
{
|
||||
}
|
||||
|
||||
TypeErrorObject::TypeErrorObject(ExecutionEngine *engine, const Value &message)
|
||||
TypeErrorObject::TypeErrorObject(ExecutionEngine *engine, const ValueRef message)
|
||||
: ErrorObject(engine->typeErrorClass, message, TypeError)
|
||||
{
|
||||
}
|
||||
|
||||
TypeErrorObject::TypeErrorObject(ExecutionEngine *engine, const QString &message)
|
||||
: ErrorObject(engine->typeErrorClass, Value::fromString(engine, message), TypeError)
|
||||
: ErrorObject(engine->typeErrorClass, message, TypeError)
|
||||
{
|
||||
}
|
||||
|
||||
URIErrorObject::URIErrorObject(ExecutionEngine *engine, const Value &message)
|
||||
URIErrorObject::URIErrorObject(ExecutionEngine *engine, const ValueRef message)
|
||||
: ErrorObject(engine->uriErrorClass, message, URIError)
|
||||
{
|
||||
}
|
||||
|
@ -254,7 +278,9 @@ ErrorCtor::ErrorCtor(ExecutionContext *scope, const QString &name)
|
|||
|
||||
ReturnedValue ErrorCtor::construct(Managed *m, CallData *callData)
|
||||
{
|
||||
return Encode(m->engine()->newErrorObject(callData->argc ? callData->args[0] : Primitive::undefinedValue()));
|
||||
Scope scope(m->engine());
|
||||
ScopedValue v(scope, callData->argc ? callData->args[0] : Primitive::undefinedValue());
|
||||
return Encode(m->engine()->newErrorObject(v));
|
||||
}
|
||||
|
||||
ReturnedValue ErrorCtor::call(Managed *that, CallData *callData)
|
||||
|
@ -270,8 +296,9 @@ EvalErrorCtor::EvalErrorCtor(ExecutionContext *scope)
|
|||
|
||||
ReturnedValue EvalErrorCtor::construct(Managed *m, CallData *callData)
|
||||
{
|
||||
return Value::fromObject(new (m->engine()->memoryManager) EvalErrorObject(m->engine(), callData->argc ? callData->args[0] : Primitive::undefinedValue()))
|
||||
.asReturnedValue();
|
||||
Scope scope(m->engine());
|
||||
ScopedValue v(scope, callData->argc ? callData->args[0] : Primitive::undefinedValue());
|
||||
return (new (m->engine()->memoryManager) EvalErrorObject(m->engine(), v))->asReturnedValue();
|
||||
}
|
||||
|
||||
RangeErrorCtor::RangeErrorCtor(ExecutionContext *scope)
|
||||
|
@ -283,8 +310,8 @@ RangeErrorCtor::RangeErrorCtor(ExecutionContext *scope)
|
|||
ReturnedValue RangeErrorCtor::construct(Managed *m, CallData *callData)
|
||||
{
|
||||
Scope scope(m->engine());
|
||||
ScopedValue v(scope, new (m->engine()->memoryManager) RangeErrorObject(m->engine(), callData->argc ? callData->args[0] : Primitive::undefinedValue()));
|
||||
return v.asReturnedValue();
|
||||
ScopedValue v(scope, callData->argc ? callData->args[0] : Primitive::undefinedValue());
|
||||
return (new (m->engine()->memoryManager) RangeErrorObject(scope.engine, v))->asReturnedValue();
|
||||
}
|
||||
|
||||
ReferenceErrorCtor::ReferenceErrorCtor(ExecutionContext *scope)
|
||||
|
@ -296,8 +323,8 @@ ReferenceErrorCtor::ReferenceErrorCtor(ExecutionContext *scope)
|
|||
ReturnedValue ReferenceErrorCtor::construct(Managed *m, CallData *callData)
|
||||
{
|
||||
Scope scope(m->engine());
|
||||
ScopedValue v(scope, new (m->engine()->memoryManager) ReferenceErrorObject(m->engine(), callData->argc ? callData->args[0] : Primitive::undefinedValue()));
|
||||
return v.asReturnedValue();
|
||||
ScopedValue v(scope, callData->argc ? callData->args[0] : Primitive::undefinedValue());
|
||||
return (new (m->engine()->memoryManager) ReferenceErrorObject(scope.engine, v))->asReturnedValue();
|
||||
}
|
||||
|
||||
SyntaxErrorCtor::SyntaxErrorCtor(ExecutionContext *scope)
|
||||
|
@ -309,8 +336,8 @@ SyntaxErrorCtor::SyntaxErrorCtor(ExecutionContext *scope)
|
|||
ReturnedValue SyntaxErrorCtor::construct(Managed *m, CallData *callData)
|
||||
{
|
||||
Scope scope(m->engine());
|
||||
ScopedValue v(scope, new (m->engine()->memoryManager) SyntaxErrorObject(m->engine(), callData->argc ? callData->args[0] : Primitive::undefinedValue()));
|
||||
return v.asReturnedValue();
|
||||
ScopedValue v(scope, callData->argc ? callData->args[0] : Primitive::undefinedValue());
|
||||
return (new (m->engine()->memoryManager) SyntaxErrorObject(scope.engine, v))->asReturnedValue();
|
||||
}
|
||||
|
||||
TypeErrorCtor::TypeErrorCtor(ExecutionContext *scope)
|
||||
|
@ -322,8 +349,8 @@ TypeErrorCtor::TypeErrorCtor(ExecutionContext *scope)
|
|||
ReturnedValue TypeErrorCtor::construct(Managed *m, CallData *callData)
|
||||
{
|
||||
Scope scope(m->engine());
|
||||
ScopedValue v(scope, new (m->engine()->memoryManager) TypeErrorObject(m->engine(), callData->argc ? callData->args[0] : Primitive::undefinedValue()));
|
||||
return v.asReturnedValue();
|
||||
ScopedValue v(scope, callData->argc ? callData->args[0] : Primitive::undefinedValue());
|
||||
return (new (m->engine()->memoryManager) TypeErrorObject(scope.engine, v))->asReturnedValue();
|
||||
}
|
||||
|
||||
URIErrorCtor::URIErrorCtor(ExecutionContext *scope)
|
||||
|
@ -335,8 +362,8 @@ URIErrorCtor::URIErrorCtor(ExecutionContext *scope)
|
|||
ReturnedValue URIErrorCtor::construct(Managed *m, CallData *callData)
|
||||
{
|
||||
Scope scope(m->engine());
|
||||
ScopedValue v(scope, new (m->engine()->memoryManager) URIErrorObject(m->engine(), callData->argc ? callData->args[0] : Primitive::undefinedValue()));
|
||||
return v.asReturnedValue();
|
||||
ScopedValue v(scope, callData->argc ? callData->args[0] : Primitive::undefinedValue());
|
||||
return (new (m->engine()->memoryManager) URIErrorObject(scope.engine, v))->asReturnedValue();
|
||||
}
|
||||
|
||||
void ErrorPrototype::init(ExecutionEngine *engine, const Value &ctor, Object *obj)
|
||||
|
|
|
@ -64,7 +64,8 @@ struct ErrorObject: Object {
|
|||
};
|
||||
|
||||
ErrorObject(InternalClass *ic);
|
||||
ErrorObject(InternalClass *ic, const Value &message, ErrorType t = Error);
|
||||
ErrorObject(InternalClass *ic, const ValueRef message, ErrorType t = Error);
|
||||
ErrorObject(InternalClass *ic, const QString &message, ErrorType t = Error);
|
||||
ErrorObject(InternalClass *ic, const QString &message, const QString &fileName, int line, int column, ErrorType t = Error);
|
||||
|
||||
SyntaxErrorObject *asSyntaxError();
|
||||
|
@ -83,33 +84,33 @@ inline ErrorObject *value_cast(const Value &v) {
|
|||
}
|
||||
|
||||
struct EvalErrorObject: ErrorObject {
|
||||
EvalErrorObject(ExecutionEngine *engine, const Value &message);
|
||||
EvalErrorObject(ExecutionEngine *engine, const ValueRef message);
|
||||
};
|
||||
|
||||
struct RangeErrorObject: ErrorObject {
|
||||
RangeErrorObject(ExecutionEngine *engine, const Value &message);
|
||||
RangeErrorObject(ExecutionEngine *engine, const ValueRef message);
|
||||
RangeErrorObject(ExecutionEngine *engine, const QString &msg);
|
||||
};
|
||||
|
||||
struct ReferenceErrorObject: ErrorObject {
|
||||
ReferenceErrorObject(ExecutionEngine *engine, const Value &message);
|
||||
ReferenceErrorObject(ExecutionEngine *engine, const ValueRef message);
|
||||
ReferenceErrorObject(ExecutionEngine *engine, const QString &msg);
|
||||
ReferenceErrorObject(ExecutionEngine *engine, const QString &msg, const QString &fileName, int lineNumber, int columnNumber);
|
||||
};
|
||||
|
||||
struct SyntaxErrorObject: ErrorObject {
|
||||
Q_MANAGED
|
||||
SyntaxErrorObject(ExecutionEngine *engine, const Value &msg);
|
||||
SyntaxErrorObject(ExecutionEngine *engine, const ValueRef msg);
|
||||
SyntaxErrorObject(ExecutionEngine *engine, const QString &msg, const QString &fileName, int lineNumber, int columnNumber);
|
||||
};
|
||||
|
||||
struct TypeErrorObject: ErrorObject {
|
||||
TypeErrorObject(ExecutionEngine *engine, const Value &message);
|
||||
TypeErrorObject(ExecutionEngine *engine, const ValueRef message);
|
||||
TypeErrorObject(ExecutionEngine *engine, const QString &msg);
|
||||
};
|
||||
|
||||
struct URIErrorObject: ErrorObject {
|
||||
URIErrorObject(ExecutionEngine *engine, const Value &message);
|
||||
URIErrorObject(ExecutionEngine *engine, const ValueRef message);
|
||||
};
|
||||
|
||||
struct ErrorCtor: FunctionObject
|
||||
|
|
|
@ -599,8 +599,11 @@ ReturnedValue GlobalFunctions::method_decodeURI(SimpleCallContext *context)
|
|||
QString uriString = context->callData->args[0].toString(context)->toQString();
|
||||
bool ok;
|
||||
QString out = decode(uriString, DecodeNonReserved, &ok);
|
||||
if (!ok)
|
||||
context->throwURIError(Value::fromString(context, QStringLiteral("malformed URI sequence")));
|
||||
if (!ok) {
|
||||
Scope scope(context);
|
||||
ScopedString s(scope, context->engine->newString(QStringLiteral("malformed URI sequence")));
|
||||
context->throwURIError(s);
|
||||
}
|
||||
|
||||
return Value::fromString(context, out).asReturnedValue();
|
||||
}
|
||||
|
@ -614,8 +617,11 @@ ReturnedValue GlobalFunctions::method_decodeURIComponent(SimpleCallContext *cont
|
|||
QString uriString = context->callData->args[0].toString(context)->toQString();
|
||||
bool ok;
|
||||
QString out = decode(uriString, DecodeAll, &ok);
|
||||
if (!ok)
|
||||
context->throwURIError(Value::fromString(context, QStringLiteral("malformed URI sequence")));
|
||||
if (!ok) {
|
||||
Scope scope(context);
|
||||
ScopedString s(scope, context->engine->newString(QStringLiteral("malformed URI sequence")));
|
||||
context->throwURIError(s);
|
||||
}
|
||||
|
||||
return Value::fromString(context, out).asReturnedValue();
|
||||
}
|
||||
|
@ -629,8 +635,11 @@ ReturnedValue GlobalFunctions::method_encodeURI(SimpleCallContext *context)
|
|||
QString uriString = context->callData->args[0].toString(context)->toQString();
|
||||
bool ok;
|
||||
QString out = encode(uriString, uriUnescapedReserved, &ok);
|
||||
if (!ok)
|
||||
context->throwURIError(Value::fromString(context, QStringLiteral("malformed URI sequence")));
|
||||
if (!ok) {
|
||||
Scope scope(context);
|
||||
ScopedString s(scope, context->engine->newString(QStringLiteral("malformed URI sequence")));
|
||||
context->throwURIError(s);
|
||||
}
|
||||
|
||||
return Value::fromString(context, out).asReturnedValue();
|
||||
}
|
||||
|
@ -644,8 +653,11 @@ ReturnedValue GlobalFunctions::method_encodeURIComponent(SimpleCallContext *cont
|
|||
QString uriString = context->callData->args[0].toString(context)->toQString();
|
||||
bool ok;
|
||||
QString out = encode(uriString, uriUnescaped, &ok);
|
||||
if (!ok)
|
||||
context->throwURIError(Value::fromString(context, QStringLiteral("malformed URI sequence")));
|
||||
if (!ok) {
|
||||
Scope scope(context);
|
||||
ScopedString s(scope, context->engine->newString(QStringLiteral("malformed URI sequence")));
|
||||
context->throwURIError(s);
|
||||
}
|
||||
|
||||
return Value::fromString(context, out).asReturnedValue();
|
||||
}
|
||||
|
|
|
@ -212,7 +212,7 @@ ReturnedValue NumberPrototype::method_toExponential(SimpleCallContext *ctx)
|
|||
int fdigits = ctx->callData->args[0].toInt32();
|
||||
if (fdigits < 0 || fdigits > 20) {
|
||||
ScopedString error(scope, ctx->engine->newString(QStringLiteral("Number.prototype.toExponential: fractionDigits out of range")));
|
||||
ctx->throwRangeError(error.asValue());
|
||||
ctx->throwRangeError(error);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -236,7 +236,7 @@ ReturnedValue NumberPrototype::method_toPrecision(SimpleCallContext *ctx)
|
|||
double precision = ctx->callData->args[0].toInt32();
|
||||
if (precision < 1 || precision > 21) {
|
||||
ScopedString error(scope, ctx->engine->newString(QStringLiteral("Number.prototype.toPrecision: precision out of range")));
|
||||
ctx->throwRangeError(error.asValue());
|
||||
ctx->throwRangeError(error);
|
||||
}
|
||||
|
||||
char str[100];
|
||||
|
|
|
@ -743,7 +743,7 @@ void Object::internalPut(const StringRef name, const ValueRef value)
|
|||
bool ok;
|
||||
uint l = value->asArrayLength(&ok);
|
||||
if (!ok)
|
||||
engine()->current->throwRangeError(*value);
|
||||
engine()->current->throwRangeError(value);
|
||||
ok = setArrayLength(l);
|
||||
if (!ok)
|
||||
goto reject;
|
||||
|
@ -927,6 +927,7 @@ bool Object::__defineOwnProperty__(ExecutionContext *ctx, const StringRef name,
|
|||
|
||||
name->makeIdentifier();
|
||||
|
||||
Scope scope(ctx);
|
||||
Property *current;
|
||||
PropertyAttributes *cattrs;
|
||||
|
||||
|
@ -942,8 +943,10 @@ bool Object::__defineOwnProperty__(ExecutionContext *ctx, const StringRef name,
|
|||
if (attrs.type() == PropertyAttributes::Data) {
|
||||
bool ok;
|
||||
uint l = p.value.asArrayLength(&ok);
|
||||
if (!ok)
|
||||
ctx->throwRangeError(p.value);
|
||||
if (!ok) {
|
||||
ScopedValue v(scope, p.value);
|
||||
ctx->throwRangeError(v);
|
||||
}
|
||||
succeeded = setArrayLength(l);
|
||||
}
|
||||
if (attrs.hasWritable() && !attrs.isWritable())
|
||||
|
|
Loading…
Reference in New Issue