[SCM] WebKit Debian packaging branch, webkit-1.1, updated. upstream/1.1.21-584-g1e41756

zherczeg at webkit.org zherczeg at webkit.org
Fri Feb 26 22:15:28 UTC 2010


The following commit has been merged in the webkit-1.1 branch:
commit 4ea9e22f2ed5afe62b0bd993b0634cc7dad0dbb4
Author: zherczeg at webkit.org <zherczeg at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Tue Feb 9 07:32:11 2010 +0000

    Add numerous parse-only tests.
    https://bugs.webkit.org/show_bug.cgi?id=34019
    
    Patch by Zoltan Herczeg <zherczeg at inf.u-szeged.hu> on 2010-02-09
    Reviewed by Oliver Hunt.
    
    The input file contains a lot of strings, and tests whether they are
    valid JavaScript code snippets or contains various syntax errors.
    No semantic checks: even if a tests throws an exception, which is not
    syntax error, it is considered successfull.
    
    * fast/js/parser-syntax-check-expected.txt: Added.
    * fast/js/parser-syntax-check.html: Added.
    * fast/js/script-tests/parser-syntax-check.js: Added.
    (runTest):
    (valid):
    (invalid):
    
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@54530 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index 08f40a1..2d13e20 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,22 @@
+2010-02-09  Zoltan Herczeg  <zherczeg at inf.u-szeged.hu>
+
+        Reviewed by Oliver Hunt.
+
+        Add numerous parse-only tests.
+        https://bugs.webkit.org/show_bug.cgi?id=34019
+
+        The input file contains a lot of strings, and tests whether they are
+        valid JavaScript code snippets or contains various syntax errors.
+        No semantic checks: even if a tests throws an exception, which is not
+        syntax error, it is considered successfull.
+
+        * fast/js/parser-syntax-check-expected.txt: Added.
+        * fast/js/parser-syntax-check.html: Added.
+        * fast/js/script-tests/parser-syntax-check.js: Added.
+        (runTest):
+        (valid):
+        (invalid):
+
 2010-02-08  Shinichiro Hamaji  <hamaji at chromium.org>
 
         Unreviewed GTK+ test fix.
diff --git a/LayoutTests/fast/js/parser-syntax-check-expected.txt b/LayoutTests/fast/js/parser-syntax-check-expected.txt
new file mode 100644
index 0000000..8066907
--- /dev/null
+++ b/LayoutTests/fast/js/parser-syntax-check-expected.txt
@@ -0,0 +1,537 @@
+This test checks that the following expressions or statements are valid ECMASCRIPT code or should throw parse error
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Unary operators and member access
+PASS Valid:   ""
+PASS Valid:   "function f() {  }"
+PASS Invalid: "(a"
+PASS Invalid: "function f() { (a }"
+PASS Invalid: "a[5"
+PASS Invalid: "function f() { a[5 }"
+PASS Invalid: "a[5 + 6"
+PASS Invalid: "function f() { a[5 + 6 }"
+PASS Invalid: "a."
+PASS Invalid: "function f() { a. }"
+PASS Invalid: "()"
+PASS Invalid: "function f() { () }"
+PASS Invalid: "a.'l'"
+PASS Invalid: "function f() { a.'l' }"
+PASS Valid:   "a: +~!new a"
+PASS Valid:   "function f() { a: +~!new a }"
+PASS Invalid: "new -a"
+PASS Invalid: "function f() { new -a }"
+PASS Valid:   "new (-1)"
+PASS Valid:   "function f() { new (-1) }"
+PASS Valid:   "a: b: c: new f(x++)++"
+PASS Valid:   "function f() { a: b: c: new f(x++)++ }"
+PASS Valid:   "(a)++"
+PASS Valid:   "function f() { (a)++ }"
+PASS Valid:   "(1--).x"
+PASS Valid:   "function f() { (1--).x }"
+PASS Invalid: "a-- ++"
+PASS Invalid: "function f() { a-- ++ }"
+PASS Invalid: "(a:) --b"
+PASS Invalid: "function f() { (a:) --b }"
+PASS Valid:   "++ -- ++ a"
+PASS Valid:   "function f() { ++ -- ++ a }"
+PASS Valid:   "++ new new a ++"
+PASS Valid:   "function f() { ++ new new a ++ }"
+PASS Valid:   "delete void 0"
+PASS Valid:   "function f() { delete void 0 }"
+PASS Invalid: "delete the void"
+PASS Invalid: "function f() { delete the void }"
+PASS Invalid: "(a++"
+PASS Invalid: "function f() { (a++ }"
+PASS Valid:   "++a--"
+PASS Valid:   "function f() { ++a-- }"
+PASS Valid:   "++((a))--"
+PASS Valid:   "function f() { ++((a))-- }"
+PASS Valid:   "(a.x++)++"
+PASS Valid:   "function f() { (a.x++)++ }"
+PASS Invalid: "1: null"
+PASS Invalid: "function f() { 1: null }"
+PASS Invalid: "+-!~"
+PASS Invalid: "function f() { +-!~ }"
+PASS Invalid: "+-!~(("
+PASS Invalid: "function f() { +-!~(( }"
+PASS Invalid: "a)"
+PASS Invalid: "function f() { a) }"
+PASS Invalid: "a]"
+PASS Invalid: "function f() { a] }"
+PASS Invalid: ".l"
+PASS Invalid: "function f() { .l }"
+PASS Invalid: "1.l"
+PASS Invalid: "function f() { 1.l }"
+PASS Valid:   "1 .l"
+PASS Valid:   "function f() { 1 .l }"
+Binary and conditional operators
+PASS Valid:   "a + + typeof this"
+PASS Valid:   "function f() { a + + typeof this }"
+PASS Invalid: "a + * b"
+PASS Invalid: "function f() { a + * b }"
+PASS Invalid: "a ? b"
+PASS Invalid: "function f() { a ? b }"
+PASS Invalid: "a ? b :"
+PASS Invalid: "function f() { a ? b : }"
+PASS Invalid: "%a"
+PASS Invalid: "function f() { %a }"
+PASS Invalid: "a-"
+PASS Invalid: "function f() { a- }"
+PASS Valid:   "a = b ? b = c : d = e"
+PASS Valid:   "function f() { a = b ? b = c : d = e }"
+PASS Valid:   "s: a[1].l ? b.l['s'] ? c++ : d : true"
+PASS Valid:   "function f() { s: a[1].l ? b.l['s'] ? c++ : d : true }"
+PASS Valid:   "a ? b + 1 ? c + 3 * d.l : d[5][6] : e"
+PASS Valid:   "function f() { a ? b + 1 ? c + 3 * d.l : d[5][6] : e }"
+PASS Valid:   "a in b instanceof delete -c"
+PASS Valid:   "function f() { a in b instanceof delete -c }"
+PASS Invalid: "a in instanceof b.l"
+PASS Invalid: "function f() { a in instanceof b.l }"
+PASS Valid:   "- - true % 5"
+PASS Valid:   "function f() { - - true % 5 }"
+PASS Invalid: "- false = 3"
+PASS Invalid: "function f() { - false = 3 }"
+PASS Valid:   "a: b: c: (1 + null) = 3"
+PASS Valid:   "function f() { a: b: c: (1 + null) = 3 }"
+PASS Valid:   "a[2] = b.l += c /= 4 * 7 ^ !6"
+PASS Valid:   "function f() { a[2] = b.l += c /= 4 * 7 ^ !6 }"
+PASS Invalid: "a + typeof b += c in d"
+PASS Invalid: "function f() { a + typeof b += c in d }"
+PASS Invalid: "typeof a &= typeof b"
+PASS Invalid: "function f() { typeof a &= typeof b }"
+PASS Valid:   "a: ((typeof (a))) >>>= a || b.l && c"
+PASS Valid:   "function f() { a: ((typeof (a))) >>>= a || b.l && c }"
+PASS Valid:   "a: b: c[a /= f[a %= b]].l[c[x] = 7] -= a ? b <<= f : g"
+PASS Valid:   "function f() { a: b: c[a /= f[a %= b]].l[c[x] = 7] -= a ? b <<= f : g }"
+PASS Valid:   "-void+x['y'].l == x.l != 5 - f[7]"
+PASS Valid:   "function f() { -void+x['y'].l == x.l != 5 - f[7] }"
+Function calls (and new with arguments)
+PASS Valid:   "a()()()"
+PASS Valid:   "function f() { a()()() }"
+PASS Valid:   "s: l: a[2](4 == 6, 5 = 6)(f[4], 6)"
+PASS Valid:   "function f() { s: l: a[2](4 == 6, 5 = 6)(f[4], 6) }"
+PASS Valid:   "s: eval(a.apply(), b.call(c[5] - f[7]))"
+PASS Valid:   "function f() { s: eval(a.apply(), b.call(c[5] - f[7])) }"
+PASS Invalid: "a("
+PASS Invalid: "function f() { a( }"
+PASS Invalid: "a(5"
+PASS Invalid: "function f() { a(5 }"
+PASS Invalid: "a(5,"
+PASS Invalid: "function f() { a(5, }"
+PASS Invalid: "a(5,)"
+PASS Invalid: "function f() { a(5,) }"
+PASS Invalid: "a(5,6"
+PASS Invalid: "function f() { a(5,6 }"
+PASS Valid:   "a(b[7], c <d> e.l, new a() > b)"
+PASS Valid:   "function f() { a(b[7], c <d> e.l, new a() > b) }"
+PASS Invalid: "a(b[5)"
+PASS Invalid: "function f() { a(b[5) }"
+PASS Invalid: "a(b.)"
+PASS Invalid: "function f() { a(b.) }"
+PASS Valid:   "~new new a(1)(i++)(c[l])"
+PASS Valid:   "function f() { ~new new a(1)(i++)(c[l]) }"
+PASS Invalid: "a(*a)"
+PASS Invalid: "function f() { a(*a) }"
+PASS Valid:   "((((a))((b)()).l))()"
+PASS Valid:   "function f() { ((((a))((b)()).l))() }"
+PASS Valid:   "(a)[b + (c) / (d())].l--"
+PASS Valid:   "function f() { (a)[b + (c) / (d())].l-- }"
+PASS Valid:   "new (5)"
+PASS Valid:   "function f() { new (5) }"
+PASS Invalid: "new a(5"
+PASS Invalid: "function f() { new a(5 }"
+PASS Valid:   "new (f + 5)(6, (g)() - 'l'() - true(false))"
+PASS Valid:   "function f() { new (f + 5)(6, (g)() - 'l'() - true(false)) }"
+PASS Invalid: "a(.length)"
+PASS Invalid: "function f() { a(.length) }"
+function declaration and expression
+PASS Valid:   "function f() {}"
+PASS Valid:   "function f() { function f() {} }"
+PASS Valid:   "function f(a,b) {}"
+PASS Valid:   "function f() { function f(a,b) {} }"
+PASS Invalid: "function () {}"
+PASS Invalid: "function f() { function () {} }"
+PASS Invalid: "function f(a b) {}"
+PASS Invalid: "function f() { function f(a b) {} }"
+PASS Invalid: "function f(a,) {}"
+PASS Invalid: "function f() { function f(a,) {} }"
+PASS Invalid: "function f(a,"
+PASS Invalid: "function f() { function f(a, }"
+PASS Invalid: "function f(a, 1) {}"
+PASS Invalid: "function f() { function f(a, 1) {} }"
+PASS Valid:   "function g(arguments, eval) {}"
+PASS Valid:   "function f() { function g(arguments, eval) {} }"
+PASS Valid:   "function f() {} + function g() {}"
+PASS Valid:   "function f() { function f() {} + function g() {} }"
+PASS Invalid: "(function a{})"
+PASS Invalid: "function f() { (function a{}) }"
+PASS Invalid: "(function this(){})"
+PASS Invalid: "function f() { (function this(){}) }"
+PASS Valid:   "(delete new function f(){} + function(a,b){}(5)(6))"
+PASS Valid:   "function f() { (delete new function f(){} + function(a,b){}(5)(6)) }"
+PASS Valid:   "6 - function (m) { function g() {} }"
+PASS Valid:   "function f() { 6 - function (m) { function g() {} } }"
+PASS Invalid: "function l() {"
+PASS Invalid: "function f() { function l() { }"
+PASS Invalid: "function l++(){}"
+PASS Invalid: "function f() { function l++(){} }"
+Array and object literal, comma operator
+PASS Valid:   "[] in [5,6] * [,5,] / [,,5,,] || [a,] && new [,b] % [,,]"
+PASS Valid:   "function f() { [] in [5,6] * [,5,] / [,,5,,] || [a,] && new [,b] % [,,] }"
+PASS Invalid: "[5,"
+PASS Invalid: "function f() { [5, }"
+PASS Invalid: "[,"
+PASS Invalid: "function f() { [, }"
+PASS Invalid: "(a,)"
+PASS Invalid: "function f() { (a,) }"
+PASS Valid:   "1 + {get get(){}, set set(a){}, get:4, set:get-set, }"
+PASS Valid:   "function f() { 1 + {get get(){}, set set(a){}, get:4, set:get-set, } }"
+PASS Invalid: "1 + {a"
+PASS Invalid: "function f() { 1 + {a }"
+PASS Invalid: "1 + {a:"
+PASS Invalid: "function f() { 1 + {a: }"
+PASS Invalid: "1 + {get l("
+PASS Invalid: "function f() { 1 + {get l( }"
+PASS Invalid: ",a"
+PASS Invalid: "function f() { ,a }"
+PASS Valid:   "(4,(5,a(3,4))),f[4,a-6]"
+PASS Valid:   "function f() { (4,(5,a(3,4))),f[4,a-6] }"
+PASS Invalid: "(,f)"
+PASS Invalid: "function f() { (,f) }"
+PASS Invalid: "a,,b"
+PASS Invalid: "function f() { a,,b }"
+PASS Invalid: "a ? b, c : d"
+PASS Invalid: "function f() { a ? b, c : d }"
+simple statements
+PASS Valid:   "{ }"
+PASS Valid:   "function f() { { } }"
+PASS Invalid: "{ { }"
+PASS Invalid: "function f() { { { } }"
+PASS Valid:   "{ ; ; ; }"
+PASS Valid:   "function f() { { ; ; ; } }"
+PASS Valid:   "a: { ; }"
+PASS Valid:   "function f() { a: { ; } }"
+PASS Invalid: "{ a: }"
+PASS Invalid: "function f() { { a: } }"
+PASS Valid:   "{} f; { 6 + f() }"
+PASS Valid:   "function f() { {} f; { 6 + f() } }"
+PASS Valid:   "{ a[5],6; {} ++b-new (-5)() } c().l++"
+PASS Valid:   "function f() { { a[5],6; {} ++b-new (-5)() } c().l++ }"
+PASS Valid:   "{ l1: l2: l3: { this } a = 32 ; { i++ ; { { { } } ++i } } }"
+PASS Valid:   "function f() { { l1: l2: l3: { this } a = 32 ; { i++ ; { { { } } ++i } } } }"
+PASS Valid:   "if (a) ;"
+PASS Valid:   "function f() { if (a) ; }"
+PASS Invalid: "{ if (a) }"
+PASS Invalid: "function f() { { if (a) } }"
+PASS Invalid: "if a {}"
+PASS Invalid: "function f() { if a {} }"
+PASS Invalid: "if (a"
+PASS Invalid: "function f() { if (a }"
+PASS Invalid: "if (a { }"
+PASS Invalid: "function f() { if (a { } }"
+PASS Valid:   "x: s: if (a) ; else b"
+PASS Valid:   "function f() { x: s: if (a) ; else b }"
+PASS Invalid: "else {}"
+PASS Invalid: "function f() { else {} }"
+PASS Valid:   "if (a) if (b) y; else {} else ;"
+PASS Valid:   "function f() { if (a) if (b) y; else {} else ; }"
+PASS Invalid: "if (a) {} else x; else"
+PASS Invalid: "function f() { if (a) {} else x; else }"
+PASS Invalid: "if (a) { else }"
+PASS Invalid: "function f() { if (a) { else } }"
+PASS Valid:   "if (a.l + new b()) 4 + 5 - f()"
+PASS Valid:   "function f() { if (a.l + new b()) 4 + 5 - f() }"
+PASS Valid:   "if (a) with (x) ; else with (y) ;"
+PASS Valid:   "function f() { if (a) with (x) ; else with (y) ; }"
+PASS Invalid: "with a.b { }"
+PASS Invalid: "function f() { with a.b { } }"
+PASS Valid:   "while (a() - new b) ;"
+PASS Valid:   "function f() { while (a() - new b) ; }"
+PASS Invalid: "while a {}"
+PASS Invalid: "function f() { while a {} }"
+PASS Valid:   "do ; while(0) i++"
+PASS Valid:   "function f() { do ; while(0) i++ }"
+PASS Valid:   "do if (a) x; else y; while(z)"
+PASS Valid:   "function f() { do if (a) x; else y; while(z) }"
+PASS Invalid: "do g; while 4"
+PASS Invalid: "function f() { do g; while 4 }"
+PASS Invalid: "do g; while ((4)"
+PASS Invalid: "function f() { do g; while ((4) }"
+PASS Valid:   "{ { do do do ; while(0) while(0) while(0) } }"
+PASS Valid:   "function f() { { { do do do ; while(0) while(0) while(0) } } }"
+PASS Valid:   "do while (0) if (a) {} else y; while(0)"
+PASS Valid:   "function f() { do while (0) if (a) {} else y; while(0) }"
+PASS Valid:   "if (a) while (b) if (c) with(d) {} else e; else f"
+PASS Valid:   "function f() { if (a) while (b) if (c) with(d) {} else e; else f }"
+PASS Valid:   "break ; break your_limits ; continue ; continue living ; debugger"
+PASS Valid:   "function f() { break ; break your_limits ; continue ; continue living ; debugger }"
+PASS Invalid: "debugger X"
+PASS Invalid: "function f() { debugger X }"
+PASS Invalid: "break 0.2"
+PASS Invalid: "function f() { break 0.2 }"
+PASS Invalid: "continue a++"
+PASS Invalid: "function f() { continue a++ }"
+PASS Invalid: "continue (my_friend)"
+PASS Invalid: "function f() { continue (my_friend) }"
+PASS Valid:   "while (1) break"
+PASS Valid:   "function f() { while (1) break }"
+PASS Valid:   "do if (a) with (b) continue; else debugger; while (false)"
+PASS Valid:   "function f() { do if (a) with (b) continue; else debugger; while (false) }"
+PASS Invalid: "do if (a) while (false) else debugger"
+PASS Invalid: "function f() { do if (a) while (false) else debugger }"
+PASS Invalid: "while if (a) ;"
+PASS Invalid: "function f() { while if (a) ; }"
+PASS Valid:   "if (a) function f() {} else function g() {}"
+PASS Valid:   "function f() { if (a) function f() {} else function g() {} }"
+PASS Valid:   "if (a()) while(0) function f() {} else function g() {}"
+PASS Valid:   "function f() { if (a()) while(0) function f() {} else function g() {} }"
+PASS Invalid: "if (a()) function f() { else function g() }"
+PASS Invalid: "function f() { if (a()) function f() { else function g() } }"
+PASS Invalid: "if (a) if (b) ; else function f {}"
+PASS Invalid: "function f() { if (a) if (b) ; else function f {} }"
+PASS Invalid: "if (a) if (b) ; else function (){}"
+PASS Invalid: "function f() { if (a) if (b) ; else function (){} }"
+PASS Valid:   "throw a"
+PASS Valid:   "function f() { throw a }"
+PASS Valid:   "throw a + b in void c"
+PASS Valid:   "function f() { throw a + b in void c }"
+PASS Invalid: "throw"
+PASS Invalid: "function f() { throw }"
+var and const statements
+PASS Valid:   "var a, b = null"
+PASS Valid:   "function f() { var a, b = null }"
+PASS Valid:   "const a = 5, b, c"
+PASS Valid:   "function f() { const a = 5, b, c }"
+PASS Invalid: "var"
+PASS Invalid: "function f() { var }"
+PASS Invalid: "var = 7"
+PASS Invalid: "function f() { var = 7 }"
+PASS Invalid: "var c (6)"
+PASS Invalid: "function f() { var c (6) }"
+PASS Valid:   "if (a) var a,b; else const b, c"
+PASS Valid:   "function f() { if (a) var a,b; else const b, c }"
+PASS Invalid: "var 5 = 6"
+PASS Invalid: "function f() { var 5 = 6 }"
+PASS Valid:   "while (0) var a, b, c=6, d, e, f=5*6, g=f*h, h"
+PASS Valid:   "function f() { while (0) var a, b, c=6, d, e, f=5*6, g=f*h, h }"
+PASS Invalid: "var a = if (b) { c }"
+PASS Invalid: "function f() { var a = if (b) { c } }"
+PASS Invalid: "var a = var b"
+PASS Invalid: "function f() { var a = var b }"
+PASS Valid:   "const a = b += c, a, a, a = (b - f())"
+PASS Valid:   "function f() { const a = b += c, a, a, a = (b - f()) }"
+PASS Invalid: "var a %= b | 5"
+PASS Invalid: "function f() { var a %= b | 5 }"
+PASS Invalid: "var (a) = 5"
+PASS Invalid: "function f() { var (a) = 5 }"
+PASS Invalid: "var a = (4, b = 6"
+PASS Invalid: "function f() { var a = (4, b = 6 }"
+PASS Invalid: "const 'l' = 3"
+PASS Invalid: "function f() { const 'l' = 3 }"
+PASS Invalid: "var var = 3"
+PASS Invalid: "function f() { var var = 3 }"
+PASS Valid:   "var varr = 3 in 1"
+PASS Valid:   "function f() { var varr = 3 in 1 }"
+PASS Valid:   "const a, a, a = void 7 - typeof 8, a = 8"
+PASS Valid:   "function f() { const a, a, a = void 7 - typeof 8, a = 8 }"
+PASS Valid:   "const x_x = 6 /= 7 ? e : f"
+PASS Valid:   "function f() { const x_x = 6 /= 7 ? e : f }"
+PASS Invalid: "var a = ?"
+PASS Invalid: "function f() { var a = ? }"
+PASS Invalid: "const a = *7"
+PASS Invalid: "function f() { const a = *7 }"
+PASS Invalid: "var a = :)"
+PASS Invalid: "function f() { var a = :) }"
+PASS Valid:   "var a = a in b in c instanceof d"
+PASS Valid:   "function f() { var a = a in b in c instanceof d }"
+PASS Invalid: "var a = b ? c, b"
+PASS Invalid: "function f() { var a = b ? c, b }"
+PASS Invalid: "const a = b : c"
+PASS Invalid: "function f() { const a = b : c }"
+for statement
+PASS Valid:   "for ( ; ; ) { break }"
+PASS Valid:   "function f() { for ( ; ; ) { break } }"
+PASS Valid:   "for ( a ; ; ) { break }"
+PASS Valid:   "function f() { for ( a ; ; ) { break } }"
+PASS Valid:   "for ( ; a ; ) { break }"
+PASS Valid:   "function f() { for ( ; a ; ) { break } }"
+PASS Valid:   "for ( ; ; a ) { break }"
+PASS Valid:   "function f() { for ( ; ; a ) { break } }"
+PASS Valid:   "for ( a ; a ; ) break"
+PASS Valid:   "function f() { for ( a ; a ; ) break }"
+PASS Valid:   "for ( a ; ; a ) break"
+PASS Valid:   "function f() { for ( a ; ; a ) break }"
+PASS Valid:   "for ( ; a ; a ) break"
+PASS Valid:   "function f() { for ( ; a ; a ) break }"
+PASS Invalid: "for () { }"
+PASS Invalid: "function f() { for () { } }"
+PASS Invalid: "for ( a ) { }"
+PASS Invalid: "function f() { for ( a ) { } }"
+PASS Invalid: "for ( ; ) ;"
+PASS Invalid: "function f() { for ( ; ) ; }"
+PASS Invalid: "for a ; b ; c { }"
+PASS Invalid: "function f() { for a ; b ; c { } }"
+PASS Invalid: "for (a ; { }"
+PASS Invalid: "function f() { for (a ; { } }"
+PASS Invalid: "for ( a ; ) ;"
+PASS Invalid: "function f() { for ( a ; ) ; }"
+PASS Invalid: "for ( ; a ) break"
+PASS Invalid: "function f() { for ( ; a ) break }"
+PASS Valid:   "for (var a, b ; ; ) { break } "
+PASS Valid:   "function f() { for (var a, b ; ; ) { break }  }"
+PASS Valid:   "for (var a = b, b = a ; ; ) break"
+PASS Valid:   "function f() { for (var a = b, b = a ; ; ) break }"
+PASS Valid:   "for (var a = b, c, d, b = a ; x in b ; ) { break }"
+PASS Valid:   "function f() { for (var a = b, c, d, b = a ; x in b ; ) { break } }"
+PASS Valid:   "for (var a = b, c, d ; ; 1 in a()) break"
+PASS Valid:   "function f() { for (var a = b, c, d ; ; 1 in a()) break }"
+PASS Invalid: "for ( ; var a ; ) break"
+PASS Invalid: "function f() { for ( ; var a ; ) break }"
+PASS Invalid: "for (const a; ; ) break"
+PASS Invalid: "function f() { for (const a; ; ) break }"
+PASS Invalid: "for ( %a ; ; ) { }"
+PASS Invalid: "function f() { for ( %a ; ; ) { } }"
+PASS Valid:   "for (a in b) break"
+PASS Valid:   "function f() { for (a in b) break }"
+PASS Valid:   "for (a() in b) break"
+PASS Valid:   "function f() { for (a() in b) break }"
+PASS Valid:   "for (a().l[4] in b) break"
+PASS Valid:   "function f() { for (a().l[4] in b) break }"
+PASS Valid:   "for (new a in b in c in d) break"
+PASS Valid:   "function f() { for (new a in b in c in d) break }"
+PASS Valid:   "for (new new new a in b) break"
+PASS Valid:   "function f() { for (new new new a in b) break }"
+PASS Invalid: "for (delete new a() in b) break"
+PASS Invalid: "function f() { for (delete new a() in b) break }"
+PASS Invalid: "for (a * a in b) break"
+PASS Invalid: "function f() { for (a * a in b) break }"
+PASS Valid:   "for ((a * a) in b) break"
+PASS Valid:   "function f() { for ((a * a) in b) break }"
+PASS Invalid: "for (a++ in b) break"
+PASS Invalid: "function f() { for (a++ in b) break }"
+PASS Valid:   "for ((a++) in b) break"
+PASS Valid:   "function f() { for ((a++) in b) break }"
+PASS Invalid: "for (++a in b) break"
+PASS Invalid: "function f() { for (++a in b) break }"
+PASS Valid:   "for ((++a) in b) break"
+PASS Valid:   "function f() { for ((++a) in b) break }"
+PASS Invalid: "for (a, b in c) break"
+PASS Invalid: "function f() { for (a, b in c) break }"
+PASS Invalid: "for (a,b in c ;;) break"
+PASS Invalid: "function f() { for (a,b in c ;;) break }"
+PASS Valid:   "for (a,(b in c) ;;) break"
+PASS Valid:   "function f() { for (a,(b in c) ;;) break }"
+PASS Valid:   "for ((a, b) in c) break"
+PASS Valid:   "function f() { for ((a, b) in c) break }"
+PASS Invalid: "for (a ? b : c in c) break"
+PASS Invalid: "function f() { for (a ? b : c in c) break }"
+PASS Valid:   "for ((a ? b : c) in c) break"
+PASS Valid:   "function f() { for ((a ? b : c) in c) break }"
+PASS Valid:   "for (var a in b in c) break"
+PASS Valid:   "function f() { for (var a in b in c) break }"
+PASS Valid:   "for (var a = 5 += 6 in b) break"
+PASS Valid:   "function f() { for (var a = 5 += 6 in b) break }"
+PASS Invalid: "for (var a += 5 in b) break"
+PASS Invalid: "function f() { for (var a += 5 in b) break }"
+PASS Invalid: "for (var a = in b) break"
+PASS Invalid: "function f() { for (var a = in b) break }"
+PASS Invalid: "for (var a, b in b) break"
+PASS Invalid: "function f() { for (var a, b in b) break }"
+PASS Invalid: "for (var a = -6, b in b) break"
+PASS Invalid: "function f() { for (var a = -6, b in b) break }"
+PASS Invalid: "for (var a, b = 8 in b) break"
+PASS Invalid: "function f() { for (var a, b = 8 in b) break }"
+PASS Valid:   "for (var a = (b in c) in d) break"
+PASS Valid:   "function f() { for (var a = (b in c) in d) break }"
+PASS Invalid: "for (var a = (b in c in d) break"
+PASS Invalid: "function f() { for (var a = (b in c in d) break }"
+PASS Invalid: "for (var (a) in b) { }"
+PASS Invalid: "function f() { for (var (a) in b) { } }"
+PASS Valid:   "for (var a = 7, b = c < d >= d ; f()[6]++ ; --i()[1]++ ) {}"
+PASS Valid:   "function f() { for (var a = 7, b = c < d >= d ; f()[6]++ ; --i()[1]++ ) {} }"
+try statement
+PASS Valid:   "try { break } catch(e) {}"
+PASS Valid:   "function f() { try { break } catch(e) {} }"
+PASS Valid:   "try {} finally { c++ }"
+PASS Valid:   "function f() { try {} finally { c++ } }"
+PASS Valid:   "try { with (x) { } } catch(e) {} finally { if (a) ; }"
+PASS Valid:   "function f() { try { with (x) { } } catch(e) {} finally { if (a) ; } }"
+PASS Invalid: "try {}"
+PASS Invalid: "function f() { try {} }"
+PASS Invalid: "catch(e) {}"
+PASS Invalid: "function f() { catch(e) {} }"
+PASS Invalid: "finally {}"
+PASS Invalid: "function f() { finally {} }"
+PASS Invalid: "try a; catch(e) {}"
+PASS Invalid: "function f() { try a; catch(e) {} }"
+PASS Invalid: "try {} catch(e) a()"
+PASS Invalid: "function f() { try {} catch(e) a() }"
+PASS Invalid: "try {} finally a()"
+PASS Invalid: "function f() { try {} finally a() }"
+PASS Invalid: "try {} catch(e)"
+PASS Invalid: "function f() { try {} catch(e) }"
+PASS Invalid: "try {} finally"
+PASS Invalid: "function f() { try {} finally }"
+PASS Invalid: "try {} finally {} catch(e) {}"
+PASS Invalid: "function f() { try {} finally {} catch(e) {} }"
+PASS Invalid: "try {} catch (...) {}"
+PASS Invalid: "function f() { try {} catch (...) {} }"
+PASS Invalid: "try {} catch {}"
+PASS Invalid: "function f() { try {} catch {} }"
+PASS Valid:   "if (a) try {} finally {} else b;"
+PASS Valid:   "function f() { if (a) try {} finally {} else b; }"
+PASS Valid:   "if (--a()) do with(1) try {} catch(ke) { f() ; g() } while (a in b) else {}"
+PASS Valid:   "function f() { if (--a()) do with(1) try {} catch(ke) { f() ; g() } while (a in b) else {} }"
+PASS Invalid: "if (a) try {} else b; catch (e) { }"
+PASS Invalid: "function f() { if (a) try {} else b; catch (e) { } }"
+PASS Invalid: "try { finally {}"
+PASS Invalid: "function f() { try { finally {} }"
+switch statement
+PASS Valid:   "switch (a) {}"
+PASS Valid:   "function f() { switch (a) {} }"
+PASS Invalid: "switch () {}"
+PASS Invalid: "function f() { switch () {} }"
+PASS Invalid: "case 5:"
+PASS Invalid: "function f() { case 5: }"
+PASS Invalid: "default:"
+PASS Invalid: "function f() { default: }"
+PASS Invalid: "switch (a) b;"
+PASS Invalid: "function f() { switch (a) b; }"
+PASS Invalid: "switch (a) case 3: b;"
+PASS Invalid: "function f() { switch (a) case 3: b; }"
+PASS Valid:   "switch (f()) { case 5 * f(): default: case '6' - 9: ++i }"
+PASS Valid:   "function f() { switch (f()) { case 5 * f(): default: case '6' - 9: ++i } }"
+PASS Invalid: "switch (true) { default: case 6: default: }"
+PASS Invalid: "function f() { switch (true) { default: case 6: default: } }"
+PASS Invalid: "switch (l) { f(); }"
+PASS Invalid: "function f() { switch (l) { f(); } }"
+PASS Invalid: "switch (l) { case 1: ; a: case 5: }"
+PASS Invalid: "function f() { switch (l) { case 1: ; a: case 5: } }"
+PASS Valid:   "switch (g() - h[5].l) { case 1 + 6: a: b: c: ++f }"
+PASS Valid:   "function f() { switch (g() - h[5].l) { case 1 + 6: a: b: c: ++f } }"
+PASS Invalid: "switch (g) { case 1: a: }"
+PASS Invalid: "function f() { switch (g) { case 1: a: } }"
+PASS Invalid: "switch (g) { case 1: a: default: }"
+PASS Invalid: "function f() { switch (g) { case 1: a: default: } }"
+PASS Invalid: "switch g { case 1: l() }"
+PASS Invalid: "function f() { switch g { case 1: l() } }"
+PASS Invalid: "switch (g) { case 1:"
+PASS Invalid: "function f() { switch (g) { case 1: }"
+PASS Valid:   "switch (l) { case a = b ? c : d : }"
+PASS Valid:   "function f() { switch (l) { case a = b ? c : d : } }"
+PASS Valid:   "switch (sw) { case a ? b - 7[1] ? [c,,] : d = 6 : { } : }"
+PASS Valid:   "function f() { switch (sw) { case a ? b - 7[1] ? [c,,] : d = 6 : { } : } }"
+PASS Invalid: "switch (l) { case b ? c : }"
+PASS Invalid: "function f() { switch (l) { case b ? c : } }"
+PASS Valid:   "switch (l) { case 1: a: with(g) switch (g) { case 2: default: } default: }"
+PASS Valid:   "function f() { switch (l) { case 1: a: with(g) switch (g) { case 2: default: } default: } }"
+PASS Invalid: "switch (4 - ) { }"
+PASS Invalid: "function f() { switch (4 - ) { } }"
+PASS Invalid: "switch (l) { default case: 5; }"
+PASS Invalid: "function f() { switch (l) { default case: 5; } }"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/js/parser-syntax-check.html b/LayoutTests/fast/js/parser-syntax-check.html
new file mode 100644
index 0000000..12b5779
--- /dev/null
+++ b/LayoutTests/fast/js/parser-syntax-check.html
@@ -0,0 +1,13 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="resources/js-test-style.css">
+<script src="resources/js-test-pre.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script src="script-tests/parser-syntax-check.js"></script>
+<script src="resources/js-test-post.js"></script>
+</body>
+</html>
diff --git a/LayoutTests/fast/js/script-tests/parser-syntax-check.js b/LayoutTests/fast/js/script-tests/parser-syntax-check.js
new file mode 100644
index 0000000..daa4971
--- /dev/null
+++ b/LayoutTests/fast/js/script-tests/parser-syntax-check.js
@@ -0,0 +1,342 @@
+description(
+"This test checks that the following expressions or statements are valid ECMASCRIPT code or should throw parse error"
+);
+
+function runTest(_a, throws)
+{
+    var success;
+    if (typeof _a != "string")
+        testFailed("runTest expects string argument: " + _a);
+    try {
+        eval(_a);
+        success = true;
+    } catch (e) {
+        success = e.toString() != "SyntaxError: Parse error";
+    }
+    if (throws == !success) {
+        if (throws)
+            testPassed('Invalid: "' + _a + '"');
+        else
+            testPassed('Valid:   "' + _a + '"');
+    } else {
+        if (throws)
+            testFailed('Invalid: "' + _a + '" should throw SyntaxError: Parse error');
+        else
+            testFailed('Valid:   "' + _a + '" should NOT throw SyntaxError: Parse error');
+    }
+}
+
+function valid(_a)
+{
+    // Test both the grammar and the syntax checker
+    runTest(_a, false);
+    runTest("function f() { " + _a + " }", false);
+}
+
+function invalid(_a)
+{
+    // Test both the grammar and the syntax checker
+    runTest(_a, true);
+    runTest("function f() { " + _a + " }", true);
+}
+
+// known issue:
+//   some statements requires statement as argument, and
+//   it seems the End-Of-File terminator is converted to semicolon
+//      "a:[EOF]" is not parse error, while "{ a: }" is parse error
+//      "if (a)[EOF]" is not parse error, while "{ if (a) }" is parse error
+// known issues of bison parser:
+//   accepts: 'function f() { return 6 + }' (only inside a function declaration)
+//   some comma expressions: see reparsing-semicolon-insertion.js
+
+debug  ("Unary operators and member access");
+
+valid  ("");
+invalid("(a");
+invalid("a[5");
+invalid("a[5 + 6");
+invalid("a.");
+invalid("()");
+invalid("a.'l'");
+valid  ("a: +~!new a");
+invalid("new -a");
+valid  ("new (-1)")
+valid  ("a: b: c: new f(x++)++")
+valid  ("(a)++");
+valid  ("(1--).x");
+invalid("a-- ++");
+invalid("(a:) --b");
+valid  ("++ -- ++ a");
+valid  ("++ new new a ++");
+valid  ("delete void 0");
+invalid("delete the void");
+invalid("(a++");
+valid  ("++a--");
+valid  ("++((a))--");
+valid  ("(a.x++)++");
+invalid("1: null");
+invalid("+-!~");
+invalid("+-!~((");
+invalid("a)");
+invalid("a]");
+invalid(".l");
+invalid("1.l");
+valid  ("1 .l");
+
+debug  ("Binary and conditional operators");
+
+valid  ("a + + typeof this");
+invalid("a + * b");
+invalid("a ? b");
+invalid("a ? b :");
+invalid("%a");
+invalid("a-");
+valid  ("a = b ? b = c : d = e");
+valid  ("s: a[1].l ? b.l['s'] ? c++ : d : true");
+valid  ("a ? b + 1 ? c + 3 * d.l : d[5][6] : e");
+valid  ("a in b instanceof delete -c");
+invalid("a in instanceof b.l");
+valid  ("- - true % 5");
+invalid("- false = 3");
+valid  ("a: b: c: (1 + null) = 3");
+valid  ("a[2] = b.l += c /= 4 * 7 ^ !6");
+invalid("a + typeof b += c in d");
+invalid("typeof a &= typeof b");
+valid  ("a: ((typeof (a))) >>>= a || b.l && c");
+valid  ("a: b: c[a /= f[a %= b]].l[c[x] = 7] -= a ? b <<= f : g");
+valid  ("-void+x['y'].l == x.l != 5 - f[7]");
+
+debug  ("Function calls (and new with arguments)");
+
+valid  ("a()()()");
+valid  ("s: l: a[2](4 == 6, 5 = 6)(f[4], 6)");
+valid  ("s: eval(a.apply(), b.call(c[5] - f[7]))");
+invalid("a(");
+invalid("a(5");
+invalid("a(5,");
+invalid("a(5,)");
+invalid("a(5,6");
+valid  ("a(b[7], c <d> e.l, new a() > b)");
+invalid("a(b[5)");
+invalid("a(b.)");
+valid  ("~new new a(1)(i++)(c[l])");
+invalid("a(*a)");
+valid  ("((((a))((b)()).l))()");
+valid  ("(a)[b + (c) / (d())].l--");
+valid  ("new (5)");
+invalid("new a(5");
+valid  ("new (f + 5)(6, (g)() - 'l'() - true(false))");
+invalid("a(.length)");
+
+debug  ("function declaration and expression");
+
+valid  ("function f() {}");
+valid  ("function f(a,b) {}");
+invalid("function () {}");
+invalid("function f(a b) {}");
+invalid("function f(a,) {}");
+invalid("function f(a,");
+invalid("function f(a, 1) {}");
+valid  ("function g(arguments, eval) {}");
+valid  ("function f() {} + function g() {}");
+invalid("(function a{})");
+invalid("(function this(){})");
+valid  ("(delete new function f(){} + function(a,b){}(5)(6))");
+valid  ("6 - function (m) { function g() {} }");
+invalid("function l() {");
+invalid("function l++(){}");
+
+debug  ("Array and object literal, comma operator");
+
+// Note these are tested elsewhere, no need to repeat those tests here
+valid  ("[] in [5,6] * [,5,] / [,,5,,] || [a,] && new [,b] % [,,]");
+invalid("[5,");
+invalid("[,");
+invalid("(a,)");
+valid  ("1 + {get get(){}, set set(a){}, get:4, set:get-set, }");
+invalid("1 + {a");
+invalid("1 + {a:");
+invalid("1 + {get l(");
+invalid(",a");
+valid  ("(4,(5,a(3,4))),f[4,a-6]");
+invalid("(,f)");
+invalid("a,,b");
+invalid("a ? b, c : d");
+
+debug  ("simple statements");
+
+valid  ("{ }");
+invalid("{ { }");
+valid  ("{ ; ; ; }");
+valid  ("a: { ; }");
+invalid("{ a: }");
+valid  ("{} f; { 6 + f() }");
+valid  ("{ a[5],6; {} ++b-new (-5)() } c().l++");
+valid  ("{ l1: l2: l3: { this } a = 32 ; { i++ ; { { { } } ++i } } }");
+valid  ("if (a) ;");
+invalid("{ if (a) }");
+invalid("if a {}");
+invalid("if (a");
+invalid("if (a { }");
+valid  ("x: s: if (a) ; else b");
+invalid("else {}");
+valid  ("if (a) if (b) y; else {} else ;");
+invalid("if (a) {} else x; else");
+invalid("if (a) { else }");
+valid  ("if (a.l + new b()) 4 + 5 - f()");
+valid  ("if (a) with (x) ; else with (y) ;");
+invalid("with a.b { }");
+valid  ("while (a() - new b) ;");
+invalid("while a {}");
+valid  ("do ; while(0) i++"); // Is this REALLY valid? (Firefox also accepts this)
+valid  ("do if (a) x; else y; while(z)");
+invalid("do g; while 4");
+invalid("do g; while ((4)");
+valid  ("{ { do do do ; while(0) while(0) while(0) } }");
+valid  ("do while (0) if (a) {} else y; while(0)");
+valid  ("if (a) while (b) if (c) with(d) {} else e; else f");
+valid  ("break ; break your_limits ; continue ; continue living ; debugger");
+invalid("debugger X");
+invalid("break 0.2");
+invalid("continue a++");
+invalid("continue (my_friend)");
+valid  ("while (1) break");
+valid  ("do if (a) with (b) continue; else debugger; while (false)");
+invalid("do if (a) while (false) else debugger");
+invalid("while if (a) ;");
+valid  ("if (a) function f() {} else function g() {}");
+valid  ("if (a()) while(0) function f() {} else function g() {}");
+invalid("if (a()) function f() { else function g() }");
+invalid("if (a) if (b) ; else function f {}");
+invalid("if (a) if (b) ; else function (){}");
+valid  ("throw a");
+valid  ("throw a + b in void c");
+invalid("throw");
+
+debug  ("var and const statements");
+
+valid  ("var a, b = null");
+valid  ("const a = 5, b, c");
+invalid("var");
+invalid("var = 7");
+invalid("var c (6)");
+valid  ("if (a) var a,b; else const b, c");
+invalid("var 5 = 6");
+valid  ("while (0) var a, b, c=6, d, e, f=5*6, g=f*h, h");
+invalid("var a = if (b) { c }");
+invalid("var a = var b");
+valid  ("const a = b += c, a, a, a = (b - f())");
+invalid("var a %= b | 5");
+invalid("var (a) = 5");
+invalid("var a = (4, b = 6");
+invalid("const 'l' = 3");
+invalid("var var = 3");
+valid  ("var varr = 3 in 1");
+valid  ("const a, a, a = void 7 - typeof 8, a = 8");
+valid  ("const x_x = 6 /= 7 ? e : f");
+invalid("var a = ?");
+invalid("const a = *7");
+invalid("var a = :)");
+valid  ("var a = a in b in c instanceof d");
+invalid("var a = b ? c, b");
+invalid("const a = b : c");
+
+debug  ("for statement");
+
+valid  ("for ( ; ; ) { break }");
+valid  ("for ( a ; ; ) { break }");
+valid  ("for ( ; a ; ) { break }");
+valid  ("for ( ; ; a ) { break }");
+valid  ("for ( a ; a ; ) break");
+valid  ("for ( a ; ; a ) break");
+valid  ("for ( ; a ; a ) break");
+invalid("for () { }");
+invalid("for ( a ) { }");
+invalid("for ( ; ) ;");
+invalid("for a ; b ; c { }");
+invalid("for (a ; { }");
+invalid("for ( a ; ) ;");
+invalid("for ( ; a ) break");
+valid  ("for (var a, b ; ; ) { break } ");
+valid  ("for (var a = b, b = a ; ; ) break");
+valid  ("for (var a = b, c, d, b = a ; x in b ; ) { break }");
+valid  ("for (var a = b, c, d ; ; 1 in a()) break");
+invalid("for ( ; var a ; ) break");
+invalid("for (const a; ; ) break");
+invalid("for ( %a ; ; ) { }");
+valid  ("for (a in b) break");
+valid  ("for (a() in b) break");
+valid  ("for (a().l[4] in b) break");
+valid  ("for (new a in b in c in d) break");
+valid  ("for (new new new a in b) break");
+invalid("for (delete new a() in b) break");
+invalid("for (a * a in b) break");
+valid  ("for ((a * a) in b) break");
+invalid("for (a++ in b) break");
+valid  ("for ((a++) in b) break");
+invalid("for (++a in b) break");
+valid  ("for ((++a) in b) break");
+invalid("for (a, b in c) break");
+invalid("for (a,b in c ;;) break");
+valid  ("for (a,(b in c) ;;) break");
+valid  ("for ((a, b) in c) break");
+invalid("for (a ? b : c in c) break");
+valid  ("for ((a ? b : c) in c) break");
+valid  ("for (var a in b in c) break");
+valid  ("for (var a = 5 += 6 in b) break");
+invalid("for (var a += 5 in b) break");
+invalid("for (var a = in b) break");
+invalid("for (var a, b in b) break");
+invalid("for (var a = -6, b in b) break");
+invalid("for (var a, b = 8 in b) break");
+valid  ("for (var a = (b in c) in d) break");
+invalid("for (var a = (b in c in d) break");
+invalid("for (var (a) in b) { }");
+valid  ("for (var a = 7, b = c < d >= d ; f()[6]++ ; --i()[1]++ ) {}");
+
+debug  ("try statement");
+
+valid  ("try { break } catch(e) {}");
+valid  ("try {} finally { c++ }");
+valid  ("try { with (x) { } } catch(e) {} finally { if (a) ; }");
+invalid("try {}");
+invalid("catch(e) {}");
+invalid("finally {}");
+invalid("try a; catch(e) {}");
+invalid("try {} catch(e) a()");
+invalid("try {} finally a()");
+invalid("try {} catch(e)");
+invalid("try {} finally");
+invalid("try {} finally {} catch(e) {}");
+invalid("try {} catch (...) {}");
+invalid("try {} catch {}");
+valid  ("if (a) try {} finally {} else b;");
+valid  ("if (--a()) do with(1) try {} catch(ke) { f() ; g() } while (a in b) else {}");
+invalid("if (a) try {} else b; catch (e) { }");
+invalid("try { finally {}");
+
+debug  ("switch statement");
+
+valid  ("switch (a) {}");
+invalid("switch () {}");
+invalid("case 5:");
+invalid("default:");
+invalid("switch (a) b;");
+invalid("switch (a) case 3: b;");
+valid  ("switch (f()) { case 5 * f(): default: case '6' - 9: ++i }");
+invalid("switch (true) { default: case 6: default: }");
+invalid("switch (l) { f(); }");
+invalid("switch (l) { case 1: ; a: case 5: }");
+valid  ("switch (g() - h[5].l) { case 1 + 6: a: b: c: ++f }");
+invalid("switch (g) { case 1: a: }");
+invalid("switch (g) { case 1: a: default: }");
+invalid("switch g { case 1: l() }");
+invalid("switch (g) { case 1:");
+valid  ("switch (l) { case a = b ? c : d : }");
+valid  ("switch (sw) { case a ? b - 7[1] ? [c,,] : d = 6 : { } : }");
+invalid("switch (l) { case b ? c : }");
+valid  ("switch (l) { case 1: a: with(g) switch (g) { case 2: default: } default: }");
+invalid("switch (4 - ) { }");
+invalid("switch (l) { default case: 5; }");
+
+var successfullyParsed = true;

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list