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 5944 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5955 NULL | 5955 NULL |
5956 }; | 5956 }; |
5957 // clang-format on | 5957 // clang-format on |
5958 const char* context_data[][2] = {{"", ""}, {NULL, NULL}}; | 5958 const char* context_data[][2] = {{"", ""}, {NULL, NULL}}; |
5959 | 5959 |
5960 RunModuleParserSyncTest(context_data, kErrorSources, kError); | 5960 RunModuleParserSyncTest(context_data, kErrorSources, kError); |
5961 } | 5961 } |
5962 | 5962 |
5963 static void CheckEntry(const i::ModuleDescriptor::Entry* entry, | 5963 static void CheckEntry(const i::ModuleDescriptor::Entry* entry, |
5964 const char* export_name, const char* local_name, | 5964 const char* export_name, const char* local_name, |
5965 const char* import_name, const char* module_request) { | 5965 const char* import_name, int module_request) { |
5966 CHECK_NOT_NULL(entry); | 5966 CHECK_NOT_NULL(entry); |
5967 if (export_name == nullptr) { | 5967 if (export_name == nullptr) { |
5968 CHECK_NULL(entry->export_name); | 5968 CHECK_NULL(entry->export_name); |
5969 } else { | 5969 } else { |
5970 CHECK(entry->export_name->IsOneByteEqualTo(export_name)); | 5970 CHECK(entry->export_name->IsOneByteEqualTo(export_name)); |
5971 } | 5971 } |
5972 if (local_name == nullptr) { | 5972 if (local_name == nullptr) { |
5973 CHECK_NULL(entry->local_name); | 5973 CHECK_NULL(entry->local_name); |
5974 } else { | 5974 } else { |
5975 CHECK(entry->local_name->IsOneByteEqualTo(local_name)); | 5975 CHECK(entry->local_name->IsOneByteEqualTo(local_name)); |
5976 } | 5976 } |
5977 if (import_name == nullptr) { | 5977 if (import_name == nullptr) { |
5978 CHECK_NULL(entry->import_name); | 5978 CHECK_NULL(entry->import_name); |
5979 } else { | 5979 } else { |
5980 CHECK(entry->import_name->IsOneByteEqualTo(import_name)); | 5980 CHECK(entry->import_name->IsOneByteEqualTo(import_name)); |
5981 } | 5981 } |
5982 if (module_request == nullptr) { | 5982 CHECK_EQ(entry->module_request, module_request); |
5983 CHECK_NULL(entry->module_request); | |
5984 } else { | |
5985 CHECK(entry->module_request->IsOneByteEqualTo(module_request)); | |
5986 } | |
5987 } | 5983 } |
5988 | 5984 |
5989 TEST(ModuleParsingInternals) { | 5985 TEST(ModuleParsingInternals) { |
5990 i::Isolate* isolate = CcTest::i_isolate(); | 5986 i::Isolate* isolate = CcTest::i_isolate(); |
5991 i::Factory* factory = isolate->factory(); | 5987 i::Factory* factory = isolate->factory(); |
5992 v8::HandleScope handles(CcTest::isolate()); | 5988 v8::HandleScope handles(CcTest::isolate()); |
5993 v8::Local<v8::Context> context = v8::Context::New(CcTest::isolate()); | 5989 v8::Local<v8::Context> context = v8::Context::New(CcTest::isolate()); |
5994 v8::Context::Scope context_scope(context); | 5990 v8::Context::Scope context_scope(context); |
5995 isolate->stack_guard()->SetStackLimit(i::GetCurrentStackPosition() - | 5991 isolate->stack_guard()->SetStackLimit(i::GetCurrentStackPosition() - |
5996 128 * 1024); | 5992 128 * 1024); |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6108 | 6104 |
6109 CHECK(declarations->at(12)->proxy()->raw_name()->IsOneByteEqualTo("foob")); | 6105 CHECK(declarations->at(12)->proxy()->raw_name()->IsOneByteEqualTo("foob")); |
6110 CHECK(declarations->at(12)->proxy()->var()->mode() == i::CONST); | 6106 CHECK(declarations->at(12)->proxy()->var()->mode() == i::CONST); |
6111 CHECK(!declarations->at(12)->proxy()->var()->binding_needs_init()); | 6107 CHECK(!declarations->at(12)->proxy()->var()->binding_needs_init()); |
6112 CHECK(declarations->at(12)->proxy()->var()->location() == | 6108 CHECK(declarations->at(12)->proxy()->var()->location() == |
6113 i::VariableLocation::MODULE); | 6109 i::VariableLocation::MODULE); |
6114 | 6110 |
6115 i::ModuleDescriptor* descriptor = module_scope->module(); | 6111 i::ModuleDescriptor* descriptor = module_scope->module(); |
6116 CHECK_NOT_NULL(descriptor); | 6112 CHECK_NOT_NULL(descriptor); |
6117 | 6113 |
| 6114 CHECK_EQ(5, descriptor->module_requests().size()); |
| 6115 for (const auto& elem : descriptor->module_requests()) { |
| 6116 if (elem.first->IsOneByteEqualTo("m.js")) |
| 6117 CHECK_EQ(elem.second, 0); |
| 6118 else if (elem.first->IsOneByteEqualTo("n.js")) |
| 6119 CHECK_EQ(elem.second, 1); |
| 6120 else if (elem.first->IsOneByteEqualTo("p.js")) |
| 6121 CHECK_EQ(elem.second, 2); |
| 6122 else if (elem.first->IsOneByteEqualTo("q.js")) |
| 6123 CHECK_EQ(elem.second, 3); |
| 6124 else if (elem.first->IsOneByteEqualTo("bar.js")) |
| 6125 CHECK_EQ(elem.second, 4); |
| 6126 else |
| 6127 CHECK(false); |
| 6128 } |
| 6129 |
6118 CHECK_EQ(3, descriptor->special_exports().length()); | 6130 CHECK_EQ(3, descriptor->special_exports().length()); |
6119 CheckEntry(descriptor->special_exports().at(0), "b", nullptr, "a", "m.js"); | 6131 CheckEntry(descriptor->special_exports().at(0), "b", nullptr, "a", 0); |
6120 CheckEntry(descriptor->special_exports().at(1), nullptr, nullptr, nullptr, | 6132 CheckEntry(descriptor->special_exports().at(1), nullptr, nullptr, nullptr, 2); |
6121 "p.js"); | |
6122 CheckEntry(descriptor->special_exports().at(2), "bb", nullptr, "aa", | 6133 CheckEntry(descriptor->special_exports().at(2), "bb", nullptr, "aa", |
6123 "m.js"); // !!! | 6134 0); // !!! |
6124 | 6135 |
6125 CHECK_EQ(8, descriptor->regular_exports().size()); | 6136 CHECK_EQ(8, descriptor->regular_exports().size()); |
6126 entry = descriptor->regular_exports() | 6137 entry = descriptor->regular_exports() |
6127 .find(declarations->at(3)->proxy()->raw_name()) | 6138 .find(declarations->at(3)->proxy()->raw_name()) |
6128 ->second; | 6139 ->second; |
6129 CheckEntry(entry, "foo", "foo", nullptr, nullptr); | 6140 CheckEntry(entry, "foo", "foo", nullptr, -1); |
6130 entry = descriptor->regular_exports() | 6141 entry = descriptor->regular_exports() |
6131 .find(declarations->at(4)->proxy()->raw_name()) | 6142 .find(declarations->at(4)->proxy()->raw_name()) |
6132 ->second; | 6143 ->second; |
6133 CheckEntry(entry, "goo", "goo", nullptr, nullptr); | 6144 CheckEntry(entry, "goo", "goo", nullptr, -1); |
6134 entry = descriptor->regular_exports() | 6145 entry = descriptor->regular_exports() |
6135 .find(declarations->at(5)->proxy()->raw_name()) | 6146 .find(declarations->at(5)->proxy()->raw_name()) |
6136 ->second; | 6147 ->second; |
6137 CheckEntry(entry, "hoo", "hoo", nullptr, nullptr); | 6148 CheckEntry(entry, "hoo", "hoo", nullptr, -1); |
6138 entry = descriptor->regular_exports() | 6149 entry = descriptor->regular_exports() |
6139 .find(declarations->at(6)->proxy()->raw_name()) | 6150 .find(declarations->at(6)->proxy()->raw_name()) |
6140 ->second; | 6151 ->second; |
6141 CheckEntry(entry, "joo", "joo", nullptr, nullptr); | 6152 CheckEntry(entry, "joo", "joo", nullptr, -1); |
6142 entry = descriptor->regular_exports() | 6153 entry = descriptor->regular_exports() |
6143 .find(declarations->at(7)->proxy()->raw_name()) | 6154 .find(declarations->at(7)->proxy()->raw_name()) |
6144 ->second; | 6155 ->second; |
6145 CheckEntry(entry, "default", "*default*", nullptr, nullptr); | 6156 CheckEntry(entry, "default", "*default*", nullptr, -1); |
6146 entry = descriptor->regular_exports() | 6157 entry = descriptor->regular_exports() |
6147 .find(declarations->at(12)->proxy()->raw_name()) | 6158 .find(declarations->at(12)->proxy()->raw_name()) |
6148 ->second; | 6159 ->second; |
6149 CheckEntry(entry, "foob", "foob", nullptr, nullptr); | 6160 CheckEntry(entry, "foob", "foob", nullptr, -1); |
6150 // TODO(neis): The next lines are terrible. Find a better way. | 6161 // TODO(neis): The next lines are terrible. Find a better way. |
6151 auto name_x = declarations->at(0)->proxy()->raw_name(); | 6162 auto name_x = declarations->at(0)->proxy()->raw_name(); |
6152 CHECK_EQ(2, descriptor->regular_exports().count(name_x)); | 6163 CHECK_EQ(2, descriptor->regular_exports().count(name_x)); |
6153 auto it = descriptor->regular_exports().equal_range(name_x).first; | 6164 auto it = descriptor->regular_exports().equal_range(name_x).first; |
6154 entry = it->second; | 6165 entry = it->second; |
6155 if (entry->export_name->IsOneByteEqualTo("y")) { | 6166 if (entry->export_name->IsOneByteEqualTo("y")) { |
6156 CheckEntry(entry, "y", "x", nullptr, nullptr); | 6167 CheckEntry(entry, "y", "x", nullptr, -1); |
6157 entry = (++it)->second; | 6168 entry = (++it)->second; |
6158 CheckEntry(entry, "x", "x", nullptr, nullptr); | 6169 CheckEntry(entry, "x", "x", nullptr, -1); |
6159 } else { | 6170 } else { |
6160 CheckEntry(entry, "x", "x", nullptr, nullptr); | 6171 CheckEntry(entry, "x", "x", nullptr, -1); |
6161 entry = (++it)->second; | 6172 entry = (++it)->second; |
6162 CheckEntry(entry, "y", "x", nullptr, nullptr); | 6173 CheckEntry(entry, "y", "x", nullptr, -1); |
6163 } | 6174 } |
6164 | 6175 |
6165 CHECK_EQ(3, descriptor->special_imports().length()); | 6176 CHECK_EQ(3, descriptor->special_imports().length()); |
6166 CheckEntry(descriptor->special_imports().at(0), nullptr, nullptr, nullptr, | 6177 CheckEntry(descriptor->special_imports().at(0), nullptr, nullptr, nullptr, 3); |
6167 "q.js"); | 6178 CheckEntry(descriptor->special_imports().at(1), nullptr, "loo", nullptr, 4); |
6168 CheckEntry(descriptor->special_imports().at(1), nullptr, "loo", nullptr, | 6179 CheckEntry(descriptor->special_imports().at(2), nullptr, "foob", nullptr, 4); |
6169 "bar.js"); | |
6170 CheckEntry(descriptor->special_imports().at(2), nullptr, "foob", nullptr, | |
6171 "bar.js"); | |
6172 | 6180 |
6173 CHECK_EQ(4, descriptor->regular_imports().size()); | 6181 CHECK_EQ(4, descriptor->regular_imports().size()); |
6174 entry = descriptor->regular_imports().find( | 6182 entry = descriptor->regular_imports().find( |
6175 declarations->at(1)->proxy()->raw_name())->second; | 6183 declarations->at(1)->proxy()->raw_name())->second; |
6176 CheckEntry(entry, nullptr, "z", "q", "m.js"); | 6184 CheckEntry(entry, nullptr, "z", "q", 0); |
6177 entry = descriptor->regular_imports().find( | 6185 entry = descriptor->regular_imports().find( |
6178 declarations->at(2)->proxy()->raw_name())->second; | 6186 declarations->at(2)->proxy()->raw_name())->second; |
6179 CheckEntry(entry, nullptr, "n", "default", "n.js"); | 6187 CheckEntry(entry, nullptr, "n", "default", 1); |
6180 entry = descriptor->regular_imports().find( | 6188 entry = descriptor->regular_imports().find( |
6181 declarations->at(9)->proxy()->raw_name())->second; | 6189 declarations->at(9)->proxy()->raw_name())->second; |
6182 CheckEntry(entry, nullptr, "mm", "m", "m.js"); | 6190 CheckEntry(entry, nullptr, "mm", "m", 0); |
6183 entry = descriptor->regular_imports().find( | 6191 entry = descriptor->regular_imports().find( |
6184 declarations->at(10)->proxy()->raw_name())->second; | 6192 declarations->at(10)->proxy()->raw_name())->second; |
6185 CheckEntry(entry, nullptr, "aa", "aa", "m.js"); | 6193 CheckEntry(entry, nullptr, "aa", "aa", 0); |
6186 } | 6194 } |
6187 | 6195 |
6188 | 6196 |
6189 TEST(DuplicateProtoError) { | 6197 TEST(DuplicateProtoError) { |
6190 const char* context_data[][2] = { | 6198 const char* context_data[][2] = { |
6191 {"({", "});"}, | 6199 {"({", "});"}, |
6192 {"'use strict'; ({", "});"}, | 6200 {"'use strict'; ({", "});"}, |
6193 {NULL, NULL} | 6201 {NULL, NULL} |
6194 }; | 6202 }; |
6195 const char* error_data[] = { | 6203 const char* error_data[] = { |
(...skipping 2123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8319 const char* data[] = { | 8327 const char* data[] = { |
8320 "const arguments = 1", | 8328 "const arguments = 1", |
8321 "let arguments", | 8329 "let arguments", |
8322 "var arguments", | 8330 "var arguments", |
8323 NULL | 8331 NULL |
8324 }; | 8332 }; |
8325 // clang-format on | 8333 // clang-format on |
8326 RunParserSyncTest(context_data, data, kSuccess); | 8334 RunParserSyncTest(context_data, data, kSuccess); |
8327 } | 8335 } |
8328 } | 8336 } |
OLD | NEW |