| OLD | NEW |
| 1 // Copyright 2016 the V8 project authors. All rights reserved. | 1 // Copyright 2016 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <cstring> | 5 #include <cstring> |
| 6 #include <functional> | 6 #include <functional> |
| 7 #include <iostream> | 7 #include <iostream> |
| 8 #include <memory> | 8 #include <memory> |
| 9 | 9 |
| 10 #include "src/asmjs/asm-typer.h" | 10 #include "src/asmjs/asm-typer.h" |
| (...skipping 487 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 498 } | 498 } |
| 499 } | 499 } |
| 500 } | 500 } |
| 501 | 501 |
| 502 TEST(ErrorsInGlobalVariableDefinition) { | 502 TEST(ErrorsInGlobalVariableDefinition) { |
| 503 const struct { | 503 const struct { |
| 504 const char* decl; | 504 const char* decl; |
| 505 const char* error_message; | 505 const char* error_message; |
| 506 } kTests[] = { | 506 } kTests[] = { |
| 507 {"var v;", "Global variable missing initializer"}, | 507 {"var v;", "Global variable missing initializer"}, |
| 508 {"var v = uninitialized;", "Invalid global variable initializer"}, | 508 {"var v = uninitialized;", "Undeclared identifier in global"}, |
| 509 {"var v = 'use asm';", "type annotation - forbidden literal"}, | 509 {"var v = 'use asm';", "type annotation - forbidden literal"}, |
| 510 {"var v = 4294967296;", " - forbidden literal"}, | 510 {"var v = 4294967296;", " - forbidden literal"}, |
| 511 {"var v = not_fround;", "Invalid global variable initializer"}, | 511 {"var v = not_fround;", "initialize a global must be a const"}, |
| 512 {"var v = not_fround(1);", "expected call fround(literal)"}, | 512 {"var v = not_fround(1);", "expected call fround(literal)"}, |
| 513 {"var v = __fround__(1.0);", "expected call fround(literal)"}, | 513 {"var v = __fround__(1.0);", "expected call fround(literal)"}, |
| 514 {"var v = fround(1.0, 1.0);", "expected call fround(literal)"}, | 514 {"var v = fround(1.0, 1.0);", "expected call fround(literal)"}, |
| 515 {"var v = fround(not_fround);", "literal argument for call to fround"}, | 515 {"var v = fround(not_fround);", "literal argument for call to fround"}, |
| 516 {"var v = i?0:1;", "Invalid global variable initializer"}, |
| 516 {"var v = stdlib.nan", "Invalid import"}, | 517 {"var v = stdlib.nan", "Invalid import"}, |
| 517 {"var v = stdlib.Math.nan", "Invalid import"}, | 518 {"var v = stdlib.Math.nan", "Invalid import"}, |
| 518 {"var v = stdlib.Mathh.E", "Invalid import"}, | 519 {"var v = stdlib.Mathh.E", "Invalid import"}, |
| 519 {"var v = stdlib.Math", "Invalid import"}, | 520 {"var v = stdlib.Math", "Invalid import"}, |
| 520 {"var v = Stdlib.Math.E", "Invalid import"}, | 521 {"var v = Stdlib.Math.E", "Invalid import"}, |
| 521 {"var v = stdlib.Math.E[0]", "Invalid import"}, | 522 {"var v = stdlib.Math.E[0]", "Invalid import"}, |
| 522 {"var v = stdlibb.NaN", "Invalid import"}, | 523 {"var v = stdlibb.NaN", "Invalid import"}, |
| 523 {"var v = ffi.NaN[0]", "Invalid import"}, | 524 {"var v = ffi.NaN[0]", "Invalid import"}, |
| 524 {"var v = heap.NaN[0]", "Invalid import"}, | 525 {"var v = heap.NaN[0]", "Invalid import"}, |
| 525 {"var v = ffi.foo * 2.0;", "unrecognized annotation"}, | 526 {"var v = ffi.foo * 2.0;", "unrecognized annotation"}, |
| (...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 781 " var c = 0; var c = 1.0;\n" | 782 " var c = 0; var c = 1.0;\n" |
| 782 "}\n", | 783 "}\n", |
| 783 "Redeclared local"}, | 784 "Redeclared local"}, |
| 784 {"function f(b, a) {\n" | 785 {"function f(b, a) {\n" |
| 785 " b = +b;\n" | 786 " b = +b;\n" |
| 786 " a = a|0;\n" | 787 " a = a|0;\n" |
| 787 " f();\n" | 788 " f();\n" |
| 788 " var c = 0;\n" | 789 " var c = 0;\n" |
| 789 "}\n", | 790 "}\n", |
| 790 "Local variable missing initializer in asm.js module"}, | 791 "Local variable missing initializer in asm.js module"}, |
| 792 {"function f(a) {\n" |
| 793 " a = a|0;\n" |
| 794 " var x = a;\n" |
| 795 "}\n", |
| 796 "variable declaration initializer must be const"}, |
| 797 {"function f() {\n" |
| 798 " var x = 1+i;\n" |
| 799 "}\n", |
| 800 "should be a literal, const, or fround(literal"}, |
| 801 {"function f() {\n" |
| 802 " var x = a;\n" |
| 803 "}\n", |
| 804 "Undeclared identifier in variable declaration initializer"}, |
| 791 {"function f() {\n" | 805 {"function f() {\n" |
| 792 " function ff() {}\n" | 806 " function ff() {}\n" |
| 793 "}\n", | 807 "}\n", |
| 794 "Functions may only define inner variables"}, | 808 "Functions may only define inner variables"}, |
| 795 {"function f() {\n" | 809 {"function f() {\n" |
| 796 " return a+1;\n" | 810 " return a+1;\n" |
| 797 "}\n", | 811 "}\n", |
| 798 "Invalid return type annotation"}, | 812 "Invalid return type annotation"}, |
| 799 {"function f() {\n" | 813 {"function f() {\n" |
| 800 " return ~~x;\n" | 814 " return ~~x;\n" |
| 801 "}\n", | 815 "}\n", |
| 802 "Invalid return type annotation"}, | 816 "Invalid return type annotation"}, |
| 803 {"function f() {\n" | 817 {"function f() {\n" |
| 804 " return d();\n" | 818 " return d();\n" |
| 805 "}\n", | 819 "}\n", |
| 806 "Invalid function call in return statement"}, | 820 "Invalid function call in return statement"}, |
| 807 {"function f() {\n" | 821 {"function f() {\n" |
| 808 " return 'use asm';\n" | 822 " return 'use asm';\n" |
| 809 "}\n", | 823 "}\n", |
| 810 "Invalid literal in return statement"}, | 824 "Invalid literal in return statement"}, |
| 811 {"function f() {\n" | 825 {"function f() {\n" |
| 812 " return 2147483648;\n" | 826 " return 2147483648;\n" |
| 813 "}\n", | 827 "}\n", |
| 814 "Invalid literal in return statement"}, | 828 "Invalid literal in return statement"}, |
| 829 {"function f(a) {\n" |
| 830 " a = a|0;\n" |
| 831 " return a;\n" |
| 832 "}\n", |
| 833 "in return statement is not const"}, |
| 834 {"function f() {\n" |
| 835 " return a;\n" |
| 836 "}\n", |
| 837 "Undeclared identifier in return statement"}, |
| 838 {"function f() {\n" |
| 839 " return i?0:1;\n" |
| 840 "}\n", |
| 841 "Invalid return type expression"}, |
| 815 {"function f() {\n" | 842 {"function f() {\n" |
| 816 " return stdlib.Math.E;" | 843 " return stdlib.Math.E;" |
| 817 "}\n", | 844 "}\n", |
| 818 "Invalid return type expression"}, | 845 "Invalid return type expression"}, |
| 819 {"function f() {\n" | 846 {"function f() {\n" |
| 820 " return E[0];" | 847 " return E[0];" |
| 821 "}\n", | 848 "}\n", |
| 822 "Invalid return type expression"}, | 849 "Invalid return type expression"}, |
| 823 {"function I() {}\n", "Identifier redefined as function"}, | 850 {"function I() {}\n", "Identifier redefined as function"}, |
| 824 {"function foo() {}\n", "Identifier redefined as function"}, | 851 {"function foo() {}\n", "Identifier redefined as function"}, |
| (...skipping 1167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1992 for (size_t ii = 0; ii < arraysize(kTests); ++ii) { | 2019 for (size_t ii = 0; ii < arraysize(kTests); ++ii) { |
| 1993 if (!ValidationOf(Module(kTests[ii])) | 2020 if (!ValidationOf(Module(kTests[ii])) |
| 1994 ->FailsWithMessage("Can't assign to immutable symbol")) { | 2021 ->FailsWithMessage("Can't assign to immutable symbol")) { |
| 1995 std::cerr << "Test:\n" << kTests[ii]; | 2022 std::cerr << "Test:\n" << kTests[ii]; |
| 1996 CHECK(false); | 2023 CHECK(false); |
| 1997 } | 2024 } |
| 1998 } | 2025 } |
| 1999 } | 2026 } |
| 2000 | 2027 |
| 2001 } // namespace | 2028 } // namespace |
| OLD | NEW |