return object;
}
+Object *ExecutionEngine::newRangeErrorObject(ExecutionContext *ctx, const QString &message)
+{
+ RangeErrorObject *object = new (memoryManager) RangeErrorObject(ctx, message);
+ object->prototype = rangeErrorPrototype;
+ return object;
+}
+
Object *ExecutionEngine::newMathObject(ExecutionContext *ctx)
{
MathObject *object = new (memoryManager) MathObject(ctx);
Object *newSyntaxErrorObject(ExecutionContext *ctx, DiagnosticMessage *message);
Object *newReferenceErrorObject(ExecutionContext *ctx, const QString &message);
Object *newTypeErrorObject(ExecutionContext *ctx, const QString &message);
+ Object *newRangeErrorObject(ExecutionContext *ctx, const QString &message);
Object *newMathObject(ExecutionContext *ctx);
Object *newActivationObject();
throwError(Value::fromObject(engine->newReferenceErrorObject(this, msg)));
}
+void ExecutionContext::throwRangeError(Value value)
+{
+ String *s = value.toString(this);
+ QString msg = s->toQString() + QStringLiteral(" out of range");
+ throwError(Value::fromObject(engine->newRangeErrorObject(this, msg)));
+}
+
void ExecutionContext::initCallContext(ExecutionContext *parent, const Value that, FunctionObject *f, Value *args, unsigned argc)
{
MemoryManager::GCBlocker blockGC(parent->engine->memoryManager);
void throwSyntaxError(DiagnosticMessage *message);
void throwTypeError();
void throwReferenceError(Value value);
+ void throwRangeError(Value value);
void throwUnimplemented(const QString &message);
void setProperty(String *name, Value value);
struct RangeErrorObject: ErrorObject {
RangeErrorObject(ExecutionContext *ctx)
: ErrorObject(ctx->argument(0)) { setNameProperty(ctx); }
+ RangeErrorObject(ExecutionContext *ctx, const QString &msg)
+ : ErrorObject(Value::fromString(ctx,msg)) { setNameProperty(ctx); }
virtual QString className() { return QStringLiteral("RangeError"); }
};
quint32 isize = Value::toUInt32(size);
if (size != double(isize)) {
- // ### Should be a RangeError
- ctx->throwError(QStringLiteral("Invalid array length"));
+ ctx->throwRangeError(ctx->argument(0));
return Value::undefinedValue();
}