diff options
author | Lars Knoll <lars.knoll@qt.io> | 2018-03-26 22:59:28 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@qt.io> | 2018-05-02 14:17:46 +0000 |
commit | 20d30b6b3a253eebedc927dbb91685bbec52cfee (patch) | |
tree | 0e91a6c519829bd279258f3fe807519e6c8a1e3d /tests/auto/qml | |
parent | d499a995292629d3522f5e77b7c958bacdf5d0ae (diff) |
Add support for proper lexical scoping
This is still to some extend work in progress as
lexically scoped for loops won't yet do the right
thing.
let and const variables are still accessible before
they are declared, and the global scope doesn't yet
have a proper context for lexically declared variables.
Change-Id: Ie39f74a8fccdaead437fbf07f9fc228a444c26ed
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'tests/auto/qml')
-rw-r--r-- | tests/auto/qml/debugger/qv4debugger/tst_qv4debugger.cpp | 16 | ||||
-rw-r--r-- | tests/auto/qml/ecmascripttests/TestExpectations | 35 | ||||
-rw-r--r-- | tests/auto/qml/qjsengine/tst_qjsengine.cpp | 7 |
3 files changed, 20 insertions, 38 deletions
diff --git a/tests/auto/qml/debugger/qv4debugger/tst_qv4debugger.cpp b/tests/auto/qml/debugger/qv4debugger/tst_qv4debugger.cpp index 17a99d6a43..ccb3a2dcdc 100644 --- a/tests/auto/qml/debugger/qv4debugger/tst_qv4debugger.cpp +++ b/tests/auto/qml/debugger/qv4debugger/tst_qv4debugger.cpp @@ -220,7 +220,21 @@ public: { for (int i = 0, ei = m_stackTrace.size(); i != ei; ++i) { m_capturedScope.append(NamedRefs()); - ScopeJob job(&collector, i, 0); + FrameJob frameJob(&collector, i); + debugger->runInEngine(&frameJob); + QJsonObject frameObj = frameJob.returnValue(); + QJsonArray scopes = frameObj.value(QLatin1String("scopes")).toArray(); + int nscopes = scopes.size(); + int s = 0; + for (s = 0; s < nscopes; ++s) { + QJsonObject o = scopes.at(s).toObject(); + if (o.value(QLatin1String("type")).toInt(-2) == 1) // CallContext + break; + } + if (s == nscopes) + return; + + ScopeJob job(&collector, i, s); debugger->runInEngine(&job); NamedRefs &refs = m_capturedScope.last(); QJsonObject object = job.returnValue(); diff --git a/tests/auto/qml/ecmascripttests/TestExpectations b/tests/auto/qml/ecmascripttests/TestExpectations index 55007189b8..9576dca707 100644 --- a/tests/auto/qml/ecmascripttests/TestExpectations +++ b/tests/auto/qml/ecmascripttests/TestExpectations @@ -3938,25 +3938,8 @@ language/arguments-object/mapped/nonconfigurable-nonwritable-descriptors-set-by- language/arguments-object/mapped/nonwritable-nonconfigurable-descriptors-set-by-arguments language/arguments-object/mapped/Symbol.iterator language/arguments-object/unmapped/Symbol.iterator -language/block-scope/leave/finally-block-let-declaration-only-shadows-outer-parameter-value-1 -language/block-scope/leave/finally-block-let-declaration-only-shadows-outer-parameter-value-2 -language/block-scope/leave/for-loop-block-let-declaration-only-shadows-outer-parameter-value-1 -language/block-scope/leave/for-loop-block-let-declaration-only-shadows-outer-parameter-value-2 -language/block-scope/leave/nested-block-let-declaration-only-shadows-outer-parameter-value-1 -language/block-scope/leave/nested-block-let-declaration-only-shadows-outer-parameter-value-2 -language/block-scope/leave/outermost-binding-updated-in-catch-block-nested-block-let-declaration-unseen-outside-of-block -language/block-scope/leave/try-block-let-declaration-only-shadows-outer-parameter-value-1 -language/block-scope/leave/try-block-let-declaration-only-shadows-outer-parameter-value-2 -language/block-scope/leave/verify-context-in-finally-block -language/block-scope/leave/verify-context-in-for-loop-block -language/block-scope/leave/verify-context-in-labelled-block -language/block-scope/leave/verify-context-in-try-block -language/block-scope/leave/x-after-break-to-label -language/block-scope/leave/x-before-continue -language/block-scope/shadowing/const-declaration-shadowing-catch-parameter -language/block-scope/shadowing/const-declarations-shadowing-parameter-name-let-const-and-var-variables -language/block-scope/shadowing/let-declaration-shadowing-catch-parameter -language/block-scope/shadowing/let-declarations-shadowing-parameter-name-let-const-and-var +language/block-scope/syntax/for-in/acquire-properties-from-array +language/block-scope/syntax/for-in/acquire-properties-from-object language/block-scope/syntax/for-in/mixed-values-in-iteration language/computed-property-names/basics/string language/computed-property-names/basics/symbol @@ -4004,7 +3987,6 @@ language/destructuring/binding/syntax/recursive-array-and-object-patterns language/eval-code/direct/lex-env-distinct-cls language/eval-code/direct/lex-env-distinct-const language/eval-code/direct/lex-env-distinct-let -language/eval-code/direct/lex-env-heritage language/eval-code/direct/lex-env-no-init-cls language/eval-code/direct/lex-env-no-init-const language/eval-code/direct/lex-env-no-init-let @@ -4026,7 +4008,6 @@ language/eval-code/indirect/always-non-strict language/eval-code/indirect/lex-env-distinct-cls language/eval-code/indirect/lex-env-distinct-const language/eval-code/indirect/lex-env-distinct-let -language/eval-code/indirect/lex-env-heritage language/eval-code/indirect/lex-env-no-init-cls language/eval-code/indirect/lex-env-no-init-const language/eval-code/indirect/lex-env-no-init-let @@ -6186,14 +6167,12 @@ language/expressions/yield/star-rhs-unresolvable language/expressions/yield/star-string language/expressions/yield/then-return language/expressions/yield/within-for -language/function-code/block-decl-strict language/function-code/each-param-has-own-non-shared-eval-scope language/function-code/each-param-has-own-scope language/function-code/eval-param-env-with-computed-key language/function-code/eval-param-env-with-prop-initializer language/function-code/switch-case-decl-strict language/function-code/switch-dflt-decl-strict -language/global-code/block-decl-strict language/global-code/decl-lex language/global-code/decl-lex-configurable-global language/global-code/decl-lex-deletion @@ -6442,8 +6421,6 @@ language/statements/async-function/try-return-finally-throw language/statements/async-function/try-throw-finally-reject language/statements/async-function/try-throw-finally-return language/statements/async-function/try-throw-finally-throw -language/statements/block/scope-lex-close -language/statements/block/scope-lex-open language/statements/block/tco-stmt language/statements/block/tco-stmt-list language/statements/class/accessor-name-inst-computed @@ -7445,12 +7422,10 @@ language/statements/const/function-local-closure-get-before-initialization language/statements/const/function-local-use-before-initialization-in-declaration-statement language/statements/const/function-local-use-before-initialization-in-prior-statement language/statements/const/global-closure-get-before-initialization -language/statements/const/syntax/const language/statements/const/syntax/const-invalid-assignment-next-expression-for language/statements/const/syntax/const-invalid-assignment-statement-body-for-in language/statements/const/syntax/const-invalid-assignment-statement-body-for-of language/statements/const/syntax/const-outer-inner-let-bindings -language/statements/continue/shadowing-loop-variable-in-same-scope-as-continue language/statements/do-while/tco-body language/statements/empty/cptn-value language/statements/for/dstr-const-ary-init-iter-close @@ -8697,7 +8672,6 @@ language/statements/try/dstr-obj-ptrn-list-err language/statements/try/dstr-obj-ptrn-prop-eval-err language/statements/try/dstr-obj-ptrn-prop-id-get-value-err language/statements/try/dstr-obj-ptrn-prop-id-init-throws -language/statements/try/scope-catch-block-lex-close language/statements/try/scope-catch-block-lex-open language/statements/try/scope-catch-param-lex-open language/statements/try/scope-catch-param-var-none @@ -8776,14 +8750,11 @@ built-ins/NativeErrors/SyntaxError/is-error-object built-ins/NativeErrors/TypeError/is-error-object built-ins/NativeErrors/URIError/is-error-object -built-ins/Object/prototype/toLocaleString/primitive_this_value language/expressions/object/yield-non-strict-access language/expressions/object/yield-non-strict-syntax language/expressions/object/not-defined language/expressions/object/prop-def-id-get-error language/expressions/object/prop-def-id-valid -language/function-code/10.4.3-1-104 -language/function-code/10.4.3-1-106 # Expected to fail but passed --- language/eval-code/direct/var-env-global-lex-non-strict @@ -8791,4 +8762,4 @@ language/global-code/decl-lex-restricted-global language/statements/const/global-use-before-initialization-in-declaration-statement language/statements/const/global-use-before-initialization-in-prior-statement language/statements/let/global-use-before-initialization-in-declaration-statement -language/statements/let/global-use-before-initialization-in-prior-statement
\ No newline at end of file +language/statements/let/global-use-before-initialization-in-prior-statement diff --git a/tests/auto/qml/qjsengine/tst_qjsengine.cpp b/tests/auto/qml/qjsengine/tst_qjsengine.cpp index a57e0b2c79..4945a23302 100644 --- a/tests/auto/qml/qjsengine/tst_qjsengine.cpp +++ b/tests/auto/qml/qjsengine/tst_qjsengine.cpp @@ -3209,9 +3209,7 @@ void tst_QJSEngine::threadedEngine() void tst_QJSEngine::functionDeclarationsInConditionals() { - // Even though this is bad practice (and test262 covers it with best practices test cases), - // we do allow for function declarations in if and while statements, as unfortunately that's - // real world JavaScript. (QTBUG-33064 for example) + // Visibility of function declarations inside blocks is limited to the block QJSEngine eng; QJSValue result = eng.evaluate("if (true) {\n" " function blah() { return false; }\n" @@ -3219,8 +3217,7 @@ void tst_QJSEngine::functionDeclarationsInConditionals() " function blah() { return true; }\n" "}\n" "blah();"); - QVERIFY(result.isBool()); - QCOMPARE(result.toBool(), true); + QVERIFY(result.isError()); } void tst_QJSEngine::arrayPop_QTBUG_35979() |