diff --git a/src/libs/qmljs/qmljsbind.cpp b/src/libs/qmljs/qmljsbind.cpp index 7935452be576cdc01e2e69c0e43be90beaf71caf..bdc0749063390adeb30da85b2520729ea735ee89 100644 --- a/src/libs/qmljs/qmljsbind.cpp +++ b/src/libs/qmljs/qmljsbind.cpp @@ -30,6 +30,7 @@ #include "parser/qmljsast_p.h" #include "qmljsbind.h" #include "qmljslink.h" +#include "qmljscheck.h" #include "qmljsmetatypesystem.h" #include <QtCore/QDir> @@ -126,7 +127,8 @@ class ProcessSourceElements: protected AST::Visitor public: ProcessSourceElements(Interpreter::Engine *interp) - : _interp(interp) + : _interp(interp), + typeOfExpression(interp) { } @@ -149,11 +151,19 @@ protected: virtual bool visit(VariableDeclaration *ast) { - if (ast->name) - _interp->globalObject()->setProperty(ast->name->asString(), _interp->undefinedValue()); + if (ast->name) { + const Value *value = _interp->undefinedValue(); + + if (ast->expression) + value = typeOfExpression(ast->expression, _interp->globalObject()); + + _interp->globalObject()->setProperty(ast->name->asString(), value); + } return false; } + + Check typeOfExpression; }; } // end of anonymous namespace diff --git a/src/libs/qmljs/qmljscheck.cpp b/src/libs/qmljs/qmljscheck.cpp index 877959b967ae7e74e49c4b7d6e8739d858208559..1dbd12a9076562813b10ab8abb16bbffab472cbe 100644 --- a/src/libs/qmljs/qmljscheck.cpp +++ b/src/libs/qmljs/qmljscheck.cpp @@ -286,13 +286,19 @@ bool Check::visit(AST::FieldMemberExpression *ast) return false; } -bool Check::visit(AST::NewMemberExpression *) +bool Check::visit(AST::NewMemberExpression *ast) { + if (const FunctionValue *ctor = value_cast<const FunctionValue *>(check(ast->base))) { + _result = ctor->construct(); + } return false; } -bool Check::visit(AST::NewExpression *) +bool Check::visit(AST::NewExpression *ast) { + if (const FunctionValue *ctor = value_cast<const FunctionValue *>(check(ast->expression))) { + _result = ctor->construct(); + } return false; }