Simplify conversion between VM::Value and V8::Value
authorLars Knoll <lars.knoll@digia.com>
Tue, 5 Mar 2013 21:41:49 +0000 (22:41 +0100)
committerSimon Hausmann <simon.hausmann@digia.com>
Tue, 5 Mar 2013 22:09:51 +0000 (23:09 +0100)
Also implement the Exception class and ThrowException.

Change-Id: Ib9ca804cb82288d9da8b74f6cd3c38ecd61dbc1b
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
src/v4/qv4v8.cpp
src/v4/qv4v8.h

index 312e524..05c9618 100644 (file)
@@ -111,6 +111,18 @@ bool Value::StrictEquals(Handle<Value> that) const
     return __qmljs_strict_equal(*ConstValuePtr(this), *ConstValuePtr(&that));
 }
 
+VM::Value Value::vmValue() const
+{
+    return *ConstValuePtr(this);
+}
+
+Handle<Value> Value::fromVmValue(const VM::Value &vmValue)
+{
+    Handle<Value> res;
+    res.val = vmValue.val;
+    return res;
+}
+
 Local<Boolean> Value::ToBoolean() const
 {
     return Local<Boolean>::New(Value::NewFromInternalValue(QQmlJS::VM::Value::fromBoolean(ConstValuePtr(this)->toBoolean()).val));
@@ -470,5 +482,39 @@ Handle<Boolean> False()
     return val;
 }
 
+Handle<Value> ThrowException(Handle<Value> exception)
+{
+    __qmljs_throw(currentEngine()->current, exception->vmValue());
+    return Handle<Value>();
+}
+
+
+Local<Value> Exception::ReferenceError(Handle<String> message)
+{
+    Q_UNUSED(message);
+    VM::Object *o = currentEngine()->newReferenceErrorObject(currentEngine()->current, message->ToString()->asQString());
+    return Local<Value>::New(Value::fromVmValue(VM::Value::fromObject(o)));
+}
+
+Local<Value> Exception::SyntaxError(Handle<String> message)
+{
+    Q_UNUSED(message);
+    VM::Object *o = currentEngine()->newSyntaxErrorObject(currentEngine()->current, 0);
+    return Local<Value>::New(Value::fromVmValue(VM::Value::fromObject(o)));
+}
+
+Local<Value> Exception::TypeError(Handle<String> message)
+{
+    Q_UNUSED(message);
+    VM::Object *o = currentEngine()->newTypeErrorObject(currentEngine()->current, message->ToString()->asQString());
+    return Local<Value>::New(Value::fromVmValue(VM::Value::fromObject(o)));
+}
+
+Local<Value> Exception::Error(Handle<String> message)
+{
+    Q_UNUSED(message);
+    VM::Object *o = currentEngine()->newErrorObject(VM::Value::fromString(currentEngine()->current, message->ToString()->asQString()));
+    return Local<Value>::New(Value::fromVmValue(VM::Value::fromObject(o)));
+}
 
 }
index 1261dfd..4c38c8b 100644 (file)
@@ -966,6 +966,9 @@ class V8EXPORT Value : public Data {
       return res;
   }
 
+  QQmlJS::VM::Value vmValue() const;
+  static Handle<Value> fromVmValue(const QQmlJS::VM::Value &vmValue);
+
 };
 
 
@@ -2048,7 +2051,6 @@ Handle<Value> V8EXPORT ThrowException(Handle<Value> exception);
  */
 class V8EXPORT Exception {
  public:
-  static Local<Value> RangeError(Handle<String> message);
   static Local<Value> ReferenceError(Handle<String> message);
   static Local<Value> SyntaxError(Handle<String> message);
   static Local<Value> TypeError(Handle<String> message);