aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/qmljs/qmljsinterpreter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/qmljs/qmljsinterpreter.cpp')
-rw-r--r--src/libs/qmljs/qmljsinterpreter.cpp147
1 files changed, 25 insertions, 122 deletions
diff --git a/src/libs/qmljs/qmljsinterpreter.cpp b/src/libs/qmljs/qmljsinterpreter.cpp
index b231815d6d7..746bbb0f01d 100644
--- a/src/libs/qmljs/qmljsinterpreter.cpp
+++ b/src/libs/qmljs/qmljsinterpreter.cpp
@@ -169,11 +169,6 @@ public:
{
return false;
}
-
- virtual const Value *invoke(const Activation *) const
- {
- return valueOwner()->unknownValue();
- }
};
} // end of anonymous namespace
@@ -1115,105 +1110,18 @@ QList<const ObjectValue *> PrototypeIterator::all()
return m_prototypes;
}
-Activation::Activation(Context *parentContext)
- : _thisObject(0),
- _calledAsFunction(true),
- _parentContext(parentContext)
-{
-}
-
-Activation::~Activation()
-{
-}
-
-Context *Activation::parentContext() const
-{
- return _parentContext;
-}
-
-Context *Activation::context() const
-{
- // ### FIXME: Real context for activations.
- return 0;
-}
-
-bool Activation::calledAsConstructor() const
-{
- return ! _calledAsFunction;
-}
-
-void Activation::setCalledAsConstructor(bool calledAsConstructor)
-{
- _calledAsFunction = ! calledAsConstructor;
-}
-
-bool Activation::calledAsFunction() const
-{
- return _calledAsFunction;
-}
-
-void Activation::setCalledAsFunction(bool calledAsFunction)
-{
- _calledAsFunction = calledAsFunction;
-}
-
-ObjectValue *Activation::thisObject() const
-{
- return _thisObject;
-}
-
-void Activation::setThisObject(ObjectValue *thisObject)
-{
- _thisObject = thisObject;
-}
-
-ValueList Activation::arguments() const
-{
- return _arguments;
-}
-
-void Activation::setArguments(const ValueList &arguments)
-{
- _arguments = arguments;
-}
-
FunctionValue::FunctionValue(ValueOwner *valueOwner)
: ObjectValue(valueOwner)
{
+ setClassName("Function");
setMember(QLatin1String("length"), valueOwner->numberValue());
+ setPrototype(valueOwner->functionPrototype());
}
FunctionValue::~FunctionValue()
{
}
-const Value *FunctionValue::construct(const ValueList &actuals) const
-{
- Activation activation;
- activation.setCalledAsConstructor(true);
- activation.setThisObject(valueOwner()->newObject());
- activation.setArguments(actuals);
- return invoke(&activation);
-}
-
-const Value *FunctionValue::call(const ValueList &actuals) const
-{
- Activation activation;
- activation.setCalledAsFunction(true);
- activation.setThisObject(valueOwner()->globalObject()); // ### FIXME: it should be `null'
- activation.setArguments(actuals);
- return invoke(&activation);
-}
-
-const Value *FunctionValue::call(const ObjectValue *thisObject, const ValueList &actuals) const
-{
- Activation activation;
- activation.setCalledAsFunction(true);
- activation.setThisObject(const_cast<ObjectValue *>(thisObject)); // ### FIXME: remove the const_cast
- activation.setArguments(actuals);
- return invoke(&activation);
-}
-
const Value *FunctionValue::returnValue() const
{
return valueOwner()->unknownValue();
@@ -1244,11 +1152,6 @@ bool FunctionValue::isVariadic() const
return true;
}
-const Value *FunctionValue::invoke(const Activation *activation) const
-{
- return activation->thisObject(); // ### FIXME: it should return undefined
-}
-
const FunctionValue *FunctionValue::asFunctionValue() const
{
return this;
@@ -1265,7 +1168,6 @@ Function::Function(ValueOwner *valueOwner)
, _optionalNamedArgumentCount(0)
, _isVariadic(false)
{
- setClassName("Function");
}
Function::~Function()
@@ -1327,11 +1229,6 @@ QString Function::argumentName(int index) const
return FunctionValue::argumentName(index);
}
-const Value *Function::invoke(const Activation *) const
-{
- return _returnValue;
-}
-
bool Function::isVariadic() const
{
return _isVariadic;
@@ -1394,7 +1291,9 @@ void CppQmlTypesLoader::parseQmlTypeDescriptions(const QByteArray &xml,
}
CppQmlTypes::CppQmlTypes(ValueOwner *valueOwner)
- : _valueOwner(valueOwner)
+ : _cppContextProperties(0)
+ , _valueOwner(valueOwner)
+
{
}
@@ -1544,6 +1443,16 @@ const CppComponentValue *CppQmlTypes::objectByCppName(const QString &cppName) co
return objectByQualifiedName(qualifiedName(cppPackage, cppName, ComponentVersion()));
}
+void CppQmlTypes::setCppContextProperties(const ObjectValue *contextProperties)
+{
+ _cppContextProperties = contextProperties;
+}
+
+const ObjectValue *CppQmlTypes::cppContextProperties() const
+{
+ return _cppContextProperties;
+}
+
ConvertToNumber::ConvertToNumber(ValueOwner *valueOwner)
: _valueOwner(valueOwner), _result(0)
@@ -1595,14 +1504,14 @@ void ConvertToNumber::visit(const StringValue *)
void ConvertToNumber::visit(const ObjectValue *object)
{
if (const FunctionValue *valueOfMember = value_cast<FunctionValue>(object->lookupMember("valueOf", ContextPtr()))) {
- _result = value_cast<NumberValue>(valueOfMember->call(object)); // ### invoke convert-to-number?
+ _result = value_cast<NumberValue>(valueOfMember->returnValue());
}
}
void ConvertToNumber::visit(const FunctionValue *object)
{
if (const FunctionValue *valueOfMember = value_cast<FunctionValue>(object->lookupMember("valueOf", ContextPtr()))) {
- _result = value_cast<NumberValue>(valueOfMember->call(object)); // ### invoke convert-to-number?
+ _result = value_cast<NumberValue>(valueOfMember->returnValue());
}
}
@@ -1656,14 +1565,14 @@ void ConvertToString::visit(const StringValue *value)
void ConvertToString::visit(const ObjectValue *object)
{
if (const FunctionValue *toStringMember = value_cast<FunctionValue>(object->lookupMember("toString", ContextPtr()))) {
- _result = value_cast<StringValue>(toStringMember->call(object)); // ### invoke convert-to-string?
+ _result = value_cast<StringValue>(toStringMember->returnValue());
}
}
void ConvertToString::visit(const FunctionValue *object)
{
if (const FunctionValue *toStringMember = value_cast<FunctionValue>(object->lookupMember("toString", ContextPtr()))) {
- _result = value_cast<StringValue>(toStringMember->call(object)); // ### invoke convert-to-string?
+ _result = value_cast<StringValue>(toStringMember->returnValue());
}
}
@@ -1699,25 +1608,19 @@ void ConvertToObject::visit(const UndefinedValue *)
_result = _valueOwner->nullValue();
}
-void ConvertToObject::visit(const NumberValue *value)
+void ConvertToObject::visit(const NumberValue *)
{
- ValueList actuals;
- actuals.append(value);
- _result = _valueOwner->numberCtor()->construct(actuals);
+ _result = _valueOwner->numberCtor()->returnValue();
}
-void ConvertToObject::visit(const BooleanValue *value)
+void ConvertToObject::visit(const BooleanValue *)
{
- ValueList actuals;
- actuals.append(value);
- _result = _valueOwner->booleanCtor()->construct(actuals);
+ _result = _valueOwner->booleanCtor()->returnValue();
}
-void ConvertToObject::visit(const StringValue *value)
+void ConvertToObject::visit(const StringValue *)
{
- ValueList actuals;
- actuals.append(value);
- _result = _valueOwner->stringCtor()->construct(actuals);
+ _result = _valueOwner->stringCtor()->returnValue();
}
void ConvertToObject::visit(const ObjectValue *object)