[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [qmlweb/development/qmlweb2] /: [Compiler] Implement function calls
From: Jan Marker <jan () jangmarker ! de>
Date: 2015-09-30 20:44:34
Message-ID: E1ZhOEs-0000CB-DV () scm ! kde ! org
[Download RAW message or body]
Git commit ffdefc21736b310d99a83094f8d261e4a8f78d07 by Jan Marker.
Committed on 30/09/2015 at 20:41.
Pushed by jangmarker into branch 'development/qmlweb2'.
[Compiler] Implement function calls
M +10 -0 src/qmljsc/purejavascriptgenerator.cpp
M +3 -1 src/qmljsc/purejavascriptgenerator.h
A +1 -0 tests/auto/data/javascript/functioncalls.compiled.js
A +8 -0 tests/auto/data/javascript/functioncalls.js
M +17 -0 tests/auto/qmljsc/testpurejavascriptgenerator.cpp
M +1 -0 tests/auto/qmljsc/testpurejavascriptgenerator_integration.cpp
http://commits.kde.org/qmlweb/ffdefc21736b310d99a83094f8d261e4a8f78d07
diff --git a/src/qmljsc/purejavascriptgenerator.cpp \
b/src/qmljsc/purejavascriptgenerator.cpp index fc15853..0ec9859 100644
--- a/src/qmljsc/purejavascriptgenerator.cpp
+++ b/src/qmljsc/purejavascriptgenerator.cpp
@@ -164,6 +164,10 @@ bool PureJavaScriptGenerator::visit(AST::TrueLiteral \
*) { return true;
}
+void PureJavaScriptGenerator::endVisit(AST::ArgumentList *argumentList) {
+ reduceListStack<AST::ArgumentList>(argumentList, ",");
+}
+
void PureJavaScriptGenerator::endVisit(AST::ArrayLiteral *arrayLiteral) {
const QString elision = \
(arrayLiteral->elision)?m_outputStack.pop():"";
const QString elements = \
(arrayLiteral->elements)?m_outputStack.pop():""; @@ -189,6 +193,12 @@ void \
PureJavaScriptGenerator::endVisit(AST::Block *) { m_outputStack << '{' + \
blockCode + '}'; }
+void PureJavaScriptGenerator::endVisit(AST::CallExpression \
*callExpression) { + const QString arguments = \
(callExpression->arguments)?m_outputStack.pop():""; + const QString \
function = m_outputStack.pop(); + m_outputStack << function + '(' + \
arguments + ')'; +}
+
void PureJavaScriptGenerator::endVisit(AST::CaseBlock *caseBlock) {
QString clausesRight;
if (caseBlock->moreClauses) {
diff --git a/src/qmljsc/purejavascriptgenerator.h \
b/src/qmljsc/purejavascriptgenerator.h index ea0187f..ea64b2f 100644
--- a/src/qmljsc/purejavascriptgenerator.h
+++ b/src/qmljsc/purejavascriptgenerator.h
@@ -47,11 +47,13 @@ public:
virtual bool visit(QQmlJS::AST::StringLiteral *) override;
virtual bool visit(QQmlJS::AST::ThisExpression *) override;
virtual bool visit(QQmlJS::AST::TrueLiteral *) override;
-
+
+ virtual void endVisit(QQmlJS::AST::ArgumentList *) override;
virtual void endVisit(QQmlJS::AST::ArrayLiteral *) override;
virtual void endVisit(QQmlJS::AST::ArrayMemberExpression *) override;
virtual void endVisit(QQmlJS::AST::BinaryExpression *) override;
virtual void endVisit(QQmlJS::AST::Block *) override;
+ virtual void endVisit(QQmlJS::AST::CallExpression *) override;
virtual void endVisit(QQmlJS::AST::CaseBlock *) override;
virtual void endVisit(QQmlJS::AST::CaseClause *) override;
virtual void endVisit(QQmlJS::AST::CaseClauses *) override;
diff --git a/tests/auto/data/javascript/functioncalls.compiled.js \
b/tests/auto/data/javascript/functioncalls.compiled.js new file mode 100644
index 0000000..17db647
--- /dev/null
+++ b/tests/auto/data/javascript/functioncalls.compiled.js
@@ -0,0 +1 @@
+functionCall();functionCall(arg1);functionCall(arg1,arg2);obj.functionCall( \
);obj.functionCall(arg1);obj.functionCall(arg1,arg2);i=functionCall();i=obj.functionCall();
\ No newline at end of file
diff --git a/tests/auto/data/javascript/functioncalls.js \
b/tests/auto/data/javascript/functioncalls.js new file mode 100644
index 0000000..ed3801a
--- /dev/null
+++ b/tests/auto/data/javascript/functioncalls.js
@@ -0,0 +1,8 @@
+functionCall();
+functionCall(arg1);
+functionCall(arg1, arg2);
+obj.functionCall();
+obj.functionCall(arg1);
+obj.functionCall(arg1, arg2);
+i = functionCall();
+i = obj.functionCall();
\ No newline at end of file
diff --git a/tests/auto/qmljsc/testpurejavascriptgenerator.cpp \
b/tests/auto/qmljsc/testpurejavascriptgenerator.cpp index ed21e3d..b194a6d \
100644
--- a/tests/auto/qmljsc/testpurejavascriptgenerator.cpp
+++ b/tests/auto/qmljsc/testpurejavascriptgenerator.cpp
@@ -121,6 +121,11 @@ public:
, m_block(nullptr)
, m_fieldMemberExpression(&m_identifierExpression, \
m_propertyIdentifierStringRef) , m_arrayMemberExpression(nullptr, nullptr)
+ , m_argumentListOneArgument(&m_trueLiteral)
+ , m_argumentListTwoArguments(&m_trueLiteral)
+ , m_argumentListTwoArgumentsPart2(&m_argumentListTwoArguments, \
&m_trueLiteral) + , \
m_callExpressionWithArguments(&m_identifierExpression, \
&m_argumentListTwoArguments) + , \
m_callExpressionWithoutArguments(&m_identifierExpression, nullptr) /* \
Variable Declarations */ , m_constDeclaration1(m_someIdentifierStringRef, \
nullptr) , m_constDeclaration2(m_anotherIdentifierStringRef, nullptr)
@@ -180,6 +185,8 @@ public:
m_arrayElementsElisionExp.finish();
m_arrayElementsExpElisionExpPart2.finish();
m_twoPropertiesPart2.finish();
+ m_argumentListOneArgument.finish();
+ m_argumentListTwoArgumentsPart2.finish();
m_statementListPart3.finish();
m_sourceElementsListPart3.finish();
m_parameterListPart2.finish();
@@ -246,6 +253,12 @@ private:
AST::FieldMemberExpression m_fieldMemberExpression;
AST::ArrayMemberExpression m_arrayMemberExpression;
+ AST::ArgumentList m_argumentListOneArgument;
+ AST::ArgumentList m_argumentListTwoArguments;
+ AST::ArgumentList m_argumentListTwoArgumentsPart2;
+ AST::CallExpression m_callExpressionWithArguments;
+ AST::CallExpression m_callExpressionWithoutArguments;
+
/* Variable Declarations */
AST::VariableDeclaration m_constDeclaration1;
AST::VariableDeclaration m_constDeclaration2;
@@ -369,12 +382,16 @@ private slots:
TEST_VISIT_DEFAULT_IMPL_(VariableDeclarationList \
, m_twoConstDeclarations)
TEST_VISIT_DEFAULT_IMPL_(VariableStatement \
, m_variableStatement)
+ TEST_ENDVISIT_REDUCES(ArgumentList , OneArgument , \
"1" , ({"1"}) , \
m_argumentListOneArgument) + TEST_ENDVISIT_REDUCES(ArgumentList \
, TwoArguments , "1,2" , ({"1", "2"}) , \
m_argumentListTwoArguments)
TEST_ENDVISIT_REDUCES(ArrayLiteral , OnlyElision , \
"[,,,]" , ({",,,"}) , \
m_arrayLiteralOnlyElision)
TEST_ENDVISIT_REDUCES(ArrayLiteral , WithElision , \
"[5,,,]" , ({"5", ",,,"}) , \
m_arrayLiteralWithElision)
TEST_ENDVISIT_REDUCES(ArrayLiteral , WithoutElision , \
"[5]" , ({"5"}) , \
m_arrayLiteralWithoutElision)
TEST_ENDVISIT_REDUCES(ArrayMemberExpression , AnyCase , \
"i[2]" , ({"i", "2"}) , \
m_arrayMemberExpression)
TEST_ENDVISIT_REDUCES(BinaryExpression , TwoOperands , \
"2==4" , ({"==", "2", "4"}) , \
m_equalsBinaryExpression)
TEST_ENDVISIT_REDUCES(Block , AnyCase , \
"{content}" , ({"content"}) , m_block) + \
TEST_ENDVISIT_REDUCES(CallExpression , WithArguments , \
"func(args)" , ({"func", "args"}) , \
m_callExpressionWithArguments) + TEST_ENDVISIT_REDUCES(CallExpression \
, WithoutArguments , "func()" , ({"func"}) , \
m_callExpressionWithoutArguments)
TEST_ENDVISIT_REDUCES(CaseBlock , OnlyCases , \
"{cases;}" , ({"cases;"}) , \
m_caseBlockOnlyCases)
TEST_ENDVISIT_REDUCES(CaseBlock , CasesAndDefault , \
"{cases;default;}", ({"cases;", "default;"}) , \
m_caseBlockCasesAndDefault)
TEST_ENDVISIT_REDUCES(CaseBlock , CasesDefaultCases , \
"{cases;default;cases;}", ({"cases;", "default;", "cases;"}), \
m_caseBlockCasesDefaultCases)
diff --git a/tests/auto/qmljsc/testpurejavascriptgenerator_integration.cpp \
b/tests/auto/qmljsc/testpurejavascriptgenerator_integration.cpp index \
a10fb0e..e88c8dd 100644
--- a/tests/auto/qmljsc/testpurejavascriptgenerator_integration.cpp
+++ b/tests/auto/qmljsc/testpurejavascriptgenerator_integration.cpp
@@ -91,6 +91,7 @@ private slots:
addRowForFileWithCompiled("arrayliterals");
addRowForFileWithCompiled("objectliterals");
addRowForFileWithCompiled("propertyaccess");
+ addRowForFileWithCompiled("functioncalls");
}
void test_compileJavaScriptFile() {
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic