diff --git a/src/libs/qmljs/qmljsbind.cpp b/src/libs/qmljs/qmljsbind.cpp index 76572957bd5f62624c62a3d322d83c4e3c3a18ea..fda4b8c2d3c649bbb791e2371553f155b5b198b4 100644 --- a/src/libs/qmljs/qmljsbind.cpp +++ b/src/libs/qmljs/qmljsbind.cpp @@ -106,7 +106,7 @@ bool Bind::usesQmlPrototype(ObjectValue *prototype, return false; } -Interpreter::ObjectValue *Bind::findFunctionScope(AST::FunctionDeclaration *node) const +Interpreter::ObjectValue *Bind::findFunctionScope(AST::FunctionExpression *node) const { return _functionScopes.value(node); } @@ -278,7 +278,7 @@ bool Bind::visit(UiScriptBinding *ast) _idEnvironment->setProperty(i->name->asString(), _currentObjectValue); } - return false; + return true; } bool Bind::visit(UiArrayBinding *) @@ -298,7 +298,7 @@ bool Bind::visit(VariableDeclaration *ast) return false; } -bool Bind::visit(FunctionDeclaration *ast) +bool Bind::visit(FunctionExpression *ast) { if (!ast->name) return false; @@ -341,3 +341,8 @@ bool Bind::visit(FunctionDeclaration *ast) return false; } + +bool Bind::visit(FunctionDeclaration *ast) +{ + return visit(static_cast<FunctionExpression *>(ast)); +} diff --git a/src/libs/qmljs/qmljsbind.h b/src/libs/qmljs/qmljsbind.h index b5e779616b6b1d51ba834c68e4c823be648b2349..0ca726e4f4f33b551ab9a37c4bdd897f0b8fcc92 100644 --- a/src/libs/qmljs/qmljsbind.h +++ b/src/libs/qmljs/qmljsbind.h @@ -62,7 +62,7 @@ public: bool usesQmlPrototype(Interpreter::ObjectValue *prototype, const Interpreter::Context *context) const; - Interpreter::ObjectValue *findFunctionScope(AST::FunctionDeclaration *node) const; + Interpreter::ObjectValue *findFunctionScope(AST::FunctionExpression *node) const; bool isGroupedPropertyBinding(AST::Node *node) const; static QString toString(AST::UiQualifiedId *qualifiedId, QChar delimiter = QChar('.')); @@ -85,6 +85,7 @@ protected: // QML/JS virtual bool visit(AST::FunctionDeclaration *ast); + virtual bool visit(AST::FunctionExpression *ast); virtual bool visit(AST::VariableDeclaration *ast); Interpreter::ObjectValue *switchObjectValue(Interpreter::ObjectValue *newObjectValue); @@ -102,7 +103,7 @@ private: QHash<AST::Node *, Interpreter::ObjectValue *> _qmlObjects; QSet<AST::Node *> _groupedPropertyBindings; - QHash<AST::FunctionDeclaration *, Interpreter::ObjectValue *> _functionScopes; + QHash<AST::FunctionExpression *, Interpreter::ObjectValue *> _functionScopes; QStringList _includedScripts; QList<Interpreter::ImportInfo> _imports; diff --git a/src/libs/qmljs/qmljsinterpreter.cpp b/src/libs/qmljs/qmljsinterpreter.cpp index a715c6900e380a0c5dc1126aae7088ad0a404053..c4767c399c3a80c7270850eaf529872f64b98166 100644 --- a/src/libs/qmljs/qmljsinterpreter.cpp +++ b/src/libs/qmljs/qmljsinterpreter.cpp @@ -3309,7 +3309,7 @@ const Value *ASTVariableReference::value(const Context *context) const return check(_ast->expression); } -ASTFunctionValue::ASTFunctionValue(FunctionDeclaration *ast, const QmlJS::Document *doc, Engine *engine) +ASTFunctionValue::ASTFunctionValue(FunctionExpression *ast, const QmlJS::Document *doc, Engine *engine) : FunctionValue(engine), _ast(ast), _doc(doc) { setPrototype(engine->functionPrototype()); @@ -3322,7 +3322,7 @@ ASTFunctionValue::~ASTFunctionValue() { } -FunctionDeclaration *ASTFunctionValue::ast() const +FunctionExpression *ASTFunctionValue::ast() const { return _ast; } diff --git a/src/libs/qmljs/qmljsinterpreter.h b/src/libs/qmljs/qmljsinterpreter.h index 27f0d4f5ca9d0ff0e03149fdaed4d7d33fbcbfe4..482d9c78526701f6df489aac0f624ed75e45987e 100644 --- a/src/libs/qmljs/qmljsinterpreter.h +++ b/src/libs/qmljs/qmljsinterpreter.h @@ -866,15 +866,15 @@ private: class QMLJS_EXPORT ASTFunctionValue: public FunctionValue { - AST::FunctionDeclaration *_ast; + AST::FunctionExpression *_ast; const Document *_doc; QList<NameId *> _argumentNames; public: - ASTFunctionValue(AST::FunctionDeclaration *ast, const Document *doc, Engine *engine); + ASTFunctionValue(AST::FunctionExpression *ast, const Document *doc, Engine *engine); virtual ~ASTFunctionValue(); - AST::FunctionDeclaration *ast() const; + AST::FunctionExpression *ast() const; virtual const Value *returnValue() const; virtual int argumentCount() const;