OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 5848 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5859 }; | 5859 }; |
5860 RunParserSyncTest(sloppy_context_data, data, kSuccess, NULL, 0, always_flags, | 5860 RunParserSyncTest(sloppy_context_data, data, kSuccess, NULL, 0, always_flags, |
5861 arraysize(always_flags)); | 5861 arraysize(always_flags)); |
5862 RunParserSyncTest(strict_context_data, data, kSuccess, NULL, 0, always_flags, | 5862 RunParserSyncTest(strict_context_data, data, kSuccess, NULL, 0, always_flags, |
5863 arraysize(always_flags)); | 5863 arraysize(always_flags)); |
5864 RunParserSyncTest(strong_context_data, data, kError, NULL, 0, always_flags, | 5864 RunParserSyncTest(strong_context_data, data, kError, NULL, 0, always_flags, |
5865 arraysize(always_flags)); | 5865 arraysize(always_flags)); |
5866 } | 5866 } |
5867 | 5867 |
5868 | 5868 |
5869 TEST(StrongSuperCalls) { | 5869 TEST(StrongConstructorThis) { |
5870 const char* sloppy_context_data[][2] = {{"", ""}, {NULL}}; | 5870 const char* sloppy_context_data[][2] = {{"", ""}, {NULL}}; |
5871 const char* strict_context_data[][2] = {{"'use strict';", ""}, {NULL}}; | 5871 const char* strict_context_data[][2] = {{"'use strict';", ""}, {NULL}}; |
5872 const char* strong_context_data[][2] = {{"'use strong';", ""}, {NULL}}; | 5872 const char* strong_context_data[][2] = {{"'use strong';", ""}, {NULL}}; |
5873 | 5873 |
5874 const char* data[] = { | 5874 const char* error_data[] = { |
5875 "class C extends Object { constructor() {} }", | 5875 "class C { constructor() { this; } }", |
5876 "class C extends Object { constructor() { (super()); } }", | 5876 "class C { constructor() { this.a; } }", |
5877 "class C extends Object { constructor() { (() => super())(); } }", | 5877 "class C { constructor() { this['a']; } }", |
5878 "class C extends Object { constructor() { { super(); } } }", | 5878 "class C { constructor() { (this); } }", |
5879 "class C extends Object { constructor() { if (1) super(); } }", | 5879 "class C { constructor() { this(); } }", |
5880 "class C extends Object { constructor() { super(), super(); } }", | 5880 // TODO(rossberg): arrow functions not handled yet. |
5881 "class C extends Object { constructor() { super(); super(); } }", | 5881 // "class C { constructor() { () => this; } }", |
5882 "class C extends Object { constructor() { super(); (super()); } }", | 5882 "class C { constructor() { this.a = 0, 0; } }", |
5883 "class C extends Object { constructor() { super(); { super() } } }", | 5883 "class C { constructor() { (this.a = 0); } }", |
| 5884 // "class C { constructor() { (() => this.a = 0)(); } }", |
| 5885 "class C { constructor() { { this.a = 0; } } }", |
| 5886 "class C { constructor() { if (1) this.a = 0; } }", |
| 5887 "class C { constructor() { label: this.a = 0; } }", |
| 5888 "class C { constructor() { this.a = this.b; } }", |
| 5889 "class C { constructor() { this.a = {b: 1}; this.a.b } }", |
| 5890 "class C { constructor() { this.a = {b: 1}; this.a.b = 0 } }", |
| 5891 "class C { constructor() { this.a = function(){}; this.a() } }", |
| 5892 NULL}; |
| 5893 |
| 5894 const char* success_data[] = { |
| 5895 "class C { constructor() { this.a = 0; } }", |
| 5896 "class C { constructor() { label: 0; this.a = 0; this.b = 6; } }", |
5884 NULL}; | 5897 NULL}; |
5885 | 5898 |
5886 static const ParserFlag always_flags[] = { | 5899 static const ParserFlag always_flags[] = { |
5887 kAllowStrongMode, kAllowHarmonyClasses, kAllowHarmonyObjectLiterals, | 5900 kAllowStrongMode, kAllowHarmonyClasses, kAllowHarmonyObjectLiterals, |
5888 kAllowHarmonyArrowFunctions | 5901 kAllowHarmonyArrowFunctions |
5889 }; | 5902 }; |
5890 RunParserSyncTest(sloppy_context_data, data, kError, NULL, 0, always_flags, | 5903 RunParserSyncTest(sloppy_context_data, error_data, kError, NULL, 0, |
5891 arraysize(always_flags)); | 5904 always_flags, arraysize(always_flags)); |
5892 RunParserSyncTest(strict_context_data, data, kSuccess, NULL, 0, always_flags, | 5905 RunParserSyncTest(strict_context_data, error_data, kSuccess, NULL, 0, |
5893 arraysize(always_flags)); | 5906 always_flags, arraysize(always_flags)); |
5894 RunParserSyncTest(strong_context_data, data, kError, NULL, 0, always_flags, | 5907 RunParserSyncTest(strong_context_data, error_data, kError, NULL, 0, |
5895 arraysize(always_flags)); | 5908 always_flags, arraysize(always_flags)); |
| 5909 |
| 5910 RunParserSyncTest(sloppy_context_data, success_data, kError, NULL, 0, |
| 5911 always_flags, arraysize(always_flags)); |
| 5912 RunParserSyncTest(strict_context_data, success_data, kSuccess, NULL, 0, |
| 5913 always_flags, arraysize(always_flags)); |
| 5914 RunParserSyncTest(strong_context_data, success_data, kSuccess, NULL, 0, |
| 5915 always_flags, arraysize(always_flags)); |
5896 } | 5916 } |
5897 | 5917 |
5898 | 5918 |
| 5919 TEST(StrongConstructorSuper) { |
| 5920 const char* sloppy_context_data[][2] = {{"", ""}, {NULL}}; |
| 5921 const char* strict_context_data[][2] = {{"'use strict';", ""}, {NULL}}; |
| 5922 const char* strong_context_data[][2] = {{"'use strong';", ""}, {NULL}}; |
| 5923 |
| 5924 const char* error_data[] = { |
| 5925 "class C extends Object { constructor() {} }", |
| 5926 "class C extends Object { constructor() { super.a; } }", |
| 5927 "class C extends Object { constructor() { super['a']; } }", |
| 5928 "class C extends Object { constructor() { super.a = 0; } }", |
| 5929 "class C extends Object { constructor() { (super.a); } }", |
| 5930 // TODO(rossberg): arrow functions do not handle super yet. |
| 5931 // "class C extends Object { constructor() { () => super.a; } }", |
| 5932 "class C extends Object { constructor() { super(), 0; } }", |
| 5933 "class C extends Object { constructor() { (super()); } }", |
| 5934 // "class C extends Object { constructor() { (() => super())(); } }", |
| 5935 "class C extends Object { constructor() { { super(); } } }", |
| 5936 "class C extends Object { constructor() { if (1) super(); } }", |
| 5937 "class C extends Object { constructor() { label: super(); } }", |
| 5938 "class C extends Object { constructor() { super(), super(); } }", |
| 5939 "class C extends Object { constructor() { super(); super(); } }", |
| 5940 "class C extends Object { constructor() { super(); (super()); } }", |
| 5941 "class C extends Object { constructor() { super(); { super() } } }", |
| 5942 "class C extends Object { constructor() { this.a = 0, super(); } }", |
| 5943 "class C extends Object { constructor() { this.a = 0; super(); } }", |
| 5944 "class C extends Object { constructor() { super(this.a = 0); } }", |
| 5945 "class C extends Object { constructor() { super().a; } }", |
| 5946 NULL}; |
| 5947 |
| 5948 const char* success_data[] = { |
| 5949 "class C extends Object { constructor() { super(); } }", |
| 5950 "class C extends Object { constructor() { label: 66; super(); } }", |
| 5951 "class C extends Object { constructor() { super(3); this.x = 0; } }", |
| 5952 "class C extends Object { constructor() { 3; super(3); this.x = 0; } }", |
| 5953 NULL}; |
| 5954 |
| 5955 static const ParserFlag always_flags[] = { |
| 5956 kAllowStrongMode, kAllowHarmonyClasses, kAllowHarmonyObjectLiterals, |
| 5957 kAllowHarmonyArrowFunctions |
| 5958 }; |
| 5959 RunParserSyncTest(sloppy_context_data, error_data, kError, NULL, 0, |
| 5960 always_flags, arraysize(always_flags)); |
| 5961 RunParserSyncTest(strict_context_data, error_data, kSuccess, NULL, 0, |
| 5962 always_flags, arraysize(always_flags)); |
| 5963 RunParserSyncTest(strong_context_data, error_data, kError, NULL, 0, |
| 5964 always_flags, arraysize(always_flags)); |
| 5965 |
| 5966 RunParserSyncTest(sloppy_context_data, success_data, kError, NULL, 0, |
| 5967 always_flags, arraysize(always_flags)); |
| 5968 RunParserSyncTest(strict_context_data, success_data, kSuccess, NULL, 0, |
| 5969 always_flags, arraysize(always_flags)); |
| 5970 RunParserSyncTest(strong_context_data, success_data, kSuccess, NULL, 0, |
| 5971 always_flags, arraysize(always_flags)); |
| 5972 } |
| 5973 |
| 5974 |
5899 TEST(StrongConstructorReturns) { | 5975 TEST(StrongConstructorReturns) { |
5900 const char* sloppy_context_data[][2] = {{"", ""}, {NULL}}; | 5976 const char* sloppy_context_data[][2] = {{"", ""}, {NULL}}; |
5901 const char* strict_context_data[][2] = {{"'use strict';", ""}, {NULL}}; | 5977 const char* strict_context_data[][2] = {{"'use strict';", ""}, {NULL}}; |
5902 const char* strong_context_data[][2] = {{"'use strong';", ""}, {NULL}}; | 5978 const char* strong_context_data[][2] = {{"'use strong';", ""}, {NULL}}; |
5903 | 5979 |
5904 const char* data[] = { | 5980 const char* error_data[] = { |
5905 "class C extends Object { constructor() { super(); return {}; } }", | 5981 "class C extends Object { constructor() { super(); return {}; } }", |
5906 "class C extends Object { constructor() { super(); { return {}; } } }", | 5982 "class C extends Object { constructor() { super(); { return {}; } } }", |
5907 "class C extends Object { constructor() { super(); if (1) return {}; } }", | 5983 "class C extends Object { constructor() { super(); if (1) return {}; } }", |
5908 "class C extends Object { constructor() { return; super(); } }", | 5984 "class C extends Object { constructor() { return; super(); } }", |
5909 "class C extends Object { constructor() { { return; } super(); } }", | 5985 "class C extends Object { constructor() { { return; } super(); } }", |
5910 "class C extends Object { constructor() { if (0) return; super(); } }", | 5986 "class C extends Object { constructor() { if (0) return; super(); } }", |
| 5987 "class C { constructor() { return; this.a = 0; } }", |
| 5988 "class C { constructor() { { return; } this.a = 0; } }", |
| 5989 "class C { constructor() { if (0) return; this.a = 0; } }", |
| 5990 "class C { constructor() { this.a = 0; if (0) return; this.b = 0; } }", |
| 5991 NULL}; |
| 5992 |
| 5993 const char* success_data[] = { |
| 5994 "class C extends Object { constructor() { super(); return; } }", |
| 5995 "class C extends Object { constructor() { super(); { return } } }", |
| 5996 "class C extends Object { constructor() { super(); if (1) return; } }", |
| 5997 "class C { constructor() { this.a = 0; return; } }", |
| 5998 "class C { constructor() { this.a = 0; { return; } } }", |
| 5999 "class C { constructor() { this.a = 0; if (0) return; 65; } }", |
| 6000 "class C extends Array { constructor() { super(); this.a = 9; return } }", |
5911 NULL}; | 6001 NULL}; |
5912 | 6002 |
5913 static const ParserFlag always_flags[] = { | 6003 static const ParserFlag always_flags[] = { |
5914 kAllowStrongMode, kAllowHarmonyClasses, kAllowHarmonyObjectLiterals | 6004 kAllowStrongMode, kAllowHarmonyClasses, kAllowHarmonyObjectLiterals |
5915 }; | 6005 }; |
5916 RunParserSyncTest(sloppy_context_data, data, kError, NULL, 0, always_flags, | 6006 RunParserSyncTest(sloppy_context_data, error_data, kError, NULL, 0, |
5917 arraysize(always_flags)); | 6007 always_flags, arraysize(always_flags)); |
5918 RunParserSyncTest(strict_context_data, data, kSuccess, NULL, 0, always_flags, | 6008 RunParserSyncTest(strict_context_data, error_data, kSuccess, NULL, 0, |
5919 arraysize(always_flags)); | 6009 always_flags, arraysize(always_flags)); |
5920 RunParserSyncTest(strong_context_data, data, kError, NULL, 0, always_flags, | 6010 RunParserSyncTest(strong_context_data, error_data, kError, NULL, 0, |
5921 arraysize(always_flags)); | 6011 always_flags, arraysize(always_flags)); |
| 6012 |
| 6013 RunParserSyncTest(sloppy_context_data, success_data, kError, NULL, 0, |
| 6014 always_flags, arraysize(always_flags)); |
| 6015 RunParserSyncTest(strict_context_data, success_data, kSuccess, NULL, 0, |
| 6016 always_flags, arraysize(always_flags)); |
| 6017 RunParserSyncTest(strong_context_data, success_data, kSuccess, NULL, 0, |
| 6018 always_flags, arraysize(always_flags)); |
5922 } | 6019 } |
5923 | 6020 |
5924 | 6021 |
5925 TEST(StrongUndefinedLocal) { | 6022 TEST(StrongUndefinedLocal) { |
5926 const char* context_data[][2] = {{"", ""}, {NULL}}; | 6023 const char* context_data[][2] = {{"", ""}, {NULL}}; |
5927 | 6024 |
5928 const char* data[] = { | 6025 const char* data[] = { |
5929 "function undefined() {'use strong';}", | 6026 "function undefined() {'use strong';}", |
5930 "function* undefined() {'use strong';}", | 6027 "function* undefined() {'use strong';}", |
5931 "(function undefined() {'use strong';});", | 6028 "(function undefined() {'use strong';});", |
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6239 v8::Script::Compile(v8_str(script3)); | 6336 v8::Script::Compile(v8_str(script3)); |
6240 CHECK(try_catch2.HasCaught()); | 6337 CHECK(try_catch2.HasCaught()); |
6241 v8::String::Utf8Value exception(try_catch2.Exception()); | 6338 v8::String::Utf8Value exception(try_catch2.Exception()); |
6242 CHECK_EQ(0, | 6339 CHECK_EQ(0, |
6243 strcmp( | 6340 strcmp( |
6244 "ReferenceError: In strong mode, using an undeclared global " | 6341 "ReferenceError: In strong mode, using an undeclared global " |
6245 "variable 'not_there3' is not allowed", | 6342 "variable 'not_there3' is not allowed", |
6246 *exception)); | 6343 *exception)); |
6247 } | 6344 } |
6248 } | 6345 } |
OLD | NEW |