Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(184)

Side by Side Diff: test/cctest/test-parsing.cc

Issue 2223893004: [modules] Detect all indirect exports and represent them as such. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@modules-imports
Patch Set: Move call into Validate Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/ast/modules.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 5570 matching lines...) Expand 10 before | Expand all | Expand 10 after
5581 "import { a, b as d, c, } from 'm.js';", 5581 "import { a, b as d, c, } from 'm.js';",
5582 "import * as thing from 'm.js';", 5582 "import * as thing from 'm.js';",
5583 "import thing from 'm.js';", 5583 "import thing from 'm.js';",
5584 "import thing, * as rest from 'm.js';", 5584 "import thing, * as rest from 'm.js';",
5585 "import thing, { a, b, c } from 'm.js';", 5585 "import thing, { a, b, c } from 'm.js';",
5586 "import { arguments as a } from 'm.js';", 5586 "import { arguments as a } from 'm.js';",
5587 "import { for as f } from 'm.js';", 5587 "import { for as f } from 'm.js';",
5588 "import { yield as y } from 'm.js';", 5588 "import { yield as y } from 'm.js';",
5589 "import { static as s } from 'm.js';", 5589 "import { static as s } from 'm.js';",
5590 "import { let as l } from 'm.js';", 5590 "import { let as l } from 'm.js';",
5591
5592 "import thing from 'a.js'; export {thing};",
5593 "export {thing}; import thing from 'a.js';",
5594 "import {thing} from 'a.js'; export {thing};",
5595 "export {thing}; import {thing} from 'a.js';",
5596 "import * as thing from 'a.js'; export {thing};",
5597 "export {thing}; import * as thing from 'a.js';",
5591 }; 5598 };
5592 // clang-format on 5599 // clang-format on
5593 5600
5594 i::Isolate* isolate = CcTest::i_isolate(); 5601 i::Isolate* isolate = CcTest::i_isolate();
5595 i::Factory* factory = isolate->factory(); 5602 i::Factory* factory = isolate->factory();
5596 5603
5597 v8::HandleScope handles(CcTest::isolate()); 5604 v8::HandleScope handles(CcTest::isolate());
5598 v8::Local<v8::Context> context = v8::Context::New(CcTest::isolate()); 5605 v8::Local<v8::Context> context = v8::Context::New(CcTest::isolate());
5599 v8::Context::Scope context_scope(context); 5606 v8::Context::Scope context_scope(context);
5600 5607
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after
5904 "try {} catch (enum) {}", 5911 "try {} catch (enum) {}",
5905 "try {} catch (enum) {} finally {}", 5912 "try {} catch (enum) {} finally {}",
5906 NULL 5913 NULL
5907 }; 5914 };
5908 // clang-format on 5915 // clang-format on
5909 const char* context_data[][2] = {{"", ""}, {NULL, NULL}}; 5916 const char* context_data[][2] = {{"", ""}, {NULL, NULL}};
5910 5917
5911 RunModuleParserSyncTest(context_data, kErrorSources, kError); 5918 RunModuleParserSyncTest(context_data, kErrorSources, kError);
5912 } 5919 }
5913 5920
5921 static void CheckModuleEntry(const i::ModuleDescriptor::ModuleEntry* entry,
5922 const char* export_name, const char* local_name, const char* import_name,
5923 const char* module_request) {
5924 CHECK_NOT_NULL(entry);
5925 if (export_name == nullptr) {
5926 CHECK_NULL(entry->export_name);
5927 } else {
5928 entry->export_name->IsOneByteEqualTo(export_name);
5929 }
5930 if (local_name == nullptr) {
5931 CHECK_NULL(entry->local_name);
5932 } else {
5933 entry->local_name->IsOneByteEqualTo(local_name);
5934 }
5935 if (import_name == nullptr) {
5936 CHECK_NULL(entry->import_name);
5937 } else {
5938 entry->import_name->IsOneByteEqualTo(import_name);
5939 }
5940 if (module_request == nullptr) {
5941 CHECK_NULL(entry->module_request);
5942 } else {
5943 entry->module_request->IsOneByteEqualTo(module_request);
5944 }
5945 }
5946
5914 TEST(ModuleParsingInternals) { 5947 TEST(ModuleParsingInternals) {
5915 i::Isolate* isolate = CcTest::i_isolate(); 5948 i::Isolate* isolate = CcTest::i_isolate();
5916 i::Factory* factory = isolate->factory(); 5949 i::Factory* factory = isolate->factory();
5917 v8::HandleScope handles(CcTest::isolate()); 5950 v8::HandleScope handles(CcTest::isolate());
5918 v8::Local<v8::Context> context = v8::Context::New(CcTest::isolate()); 5951 v8::Local<v8::Context> context = v8::Context::New(CcTest::isolate());
5919 v8::Context::Scope context_scope(context); 5952 v8::Context::Scope context_scope(context);
5920 isolate->stack_guard()->SetStackLimit(i::GetCurrentStackPosition() - 5953 isolate->stack_guard()->SetStackLimit(i::GetCurrentStackPosition() -
5921 128 * 1024); 5954 128 * 1024);
5922 5955
5923 static const char kSource[] = 5956 static const char kSource[] =
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
6033 CHECK(declarations->at(12)->proxy()->raw_name()->IsOneByteEqualTo("foob")); 6066 CHECK(declarations->at(12)->proxy()->raw_name()->IsOneByteEqualTo("foob"));
6034 CHECK(declarations->at(12)->proxy()->var()->mode() == i::CONST); 6067 CHECK(declarations->at(12)->proxy()->var()->mode() == i::CONST);
6035 CHECK(!declarations->at(12)->proxy()->var()->binding_needs_init()); 6068 CHECK(!declarations->at(12)->proxy()->var()->binding_needs_init());
6036 CHECK(declarations->at(12)->proxy()->var()->location() == 6069 CHECK(declarations->at(12)->proxy()->var()->location() ==
6037 i::VariableLocation::MODULE); 6070 i::VariableLocation::MODULE);
6038 6071
6039 i::ModuleDescriptor* descriptor = module_scope->module(); 6072 i::ModuleDescriptor* descriptor = module_scope->module();
6040 CHECK_NOT_NULL(descriptor); 6073 CHECK_NOT_NULL(descriptor);
6041 6074
6042 CHECK_EQ(11, descriptor->exports().length()); 6075 CHECK_EQ(11, descriptor->exports().length());
6043 6076 CheckModuleEntry(
6044 CHECK(descriptor->exports().at(0)->export_name->IsOneByteEqualTo("y")); 6077 descriptor->exports().at(0), "y", "x", nullptr, nullptr);
6045 CHECK(descriptor->exports().at(0)->local_name->IsOneByteEqualTo("x")); 6078 CheckModuleEntry(
6046 CHECK_NULL(descriptor->exports().at(0)->module_request); 6079 descriptor->exports().at(1), "b", nullptr, "a", "m.js");
6047 CHECK_NULL(descriptor->exports().at(0)->import_name); 6080 CheckModuleEntry(
6048 6081 descriptor->exports().at(2), nullptr, nullptr, nullptr, "p.js");
6049 CHECK(descriptor->exports().at(1)->export_name->IsOneByteEqualTo("b")); 6082 CheckModuleEntry(
6050 CHECK(descriptor->exports().at(1)->import_name->IsOneByteEqualTo("a")); 6083 descriptor->exports().at(3), "foo", "foo", nullptr, nullptr);
6051 CHECK(descriptor->exports().at(1)->module_request->IsOneByteEqualTo("m.js")); 6084 CheckModuleEntry(
6052 CHECK_NULL(descriptor->exports().at(1)->local_name); 6085 descriptor->exports().at(4), "goo", "goo", nullptr, nullptr);
6053 6086 CheckModuleEntry(
6054 CHECK(descriptor->exports().at(2)->module_request->IsOneByteEqualTo("p.js")); 6087 descriptor->exports().at(5), "hoo", "hoo", nullptr, nullptr);
6055 CHECK_NULL(descriptor->exports().at(2)->local_name); 6088 CheckModuleEntry(
6056 CHECK_NULL(descriptor->exports().at(2)->import_name); 6089 descriptor->exports().at(6), "joo", "joo", nullptr, nullptr);
6057 CHECK_NULL(descriptor->exports().at(2)->export_name); 6090 CheckModuleEntry(
6058 6091 descriptor->exports().at(7), "default", "*default*", nullptr, nullptr);
6059 CHECK(descriptor->exports().at(3)->export_name->IsOneByteEqualTo("foo")); 6092 CheckModuleEntry(
6060 CHECK(descriptor->exports().at(3)->local_name->IsOneByteEqualTo("foo")); 6093 descriptor->exports().at(8), "bb", nullptr, "aa", "m.js"); // !!!
6061 CHECK_NULL(descriptor->exports().at(3)->module_request); 6094 CheckModuleEntry(
6062 CHECK_NULL(descriptor->exports().at(3)->import_name); 6095 descriptor->exports().at(9), "x", "x", nullptr, nullptr);
6063 6096 CheckModuleEntry(
6064 CHECK(descriptor->exports().at(4)->export_name->IsOneByteEqualTo("goo")); 6097 descriptor->exports().at(10), "foob", "foob", nullptr, nullptr);
6065 CHECK(descriptor->exports().at(4)->local_name->IsOneByteEqualTo("goo"));
6066 CHECK_NULL(descriptor->exports().at(4)->module_request);
6067 CHECK_NULL(descriptor->exports().at(4)->import_name);
6068
6069 CHECK(descriptor->exports().at(5)->export_name->IsOneByteEqualTo("hoo"));
6070 CHECK(descriptor->exports().at(5)->local_name->IsOneByteEqualTo("hoo"));
6071 CHECK_NULL(descriptor->exports().at(5)->module_request);
6072 CHECK_NULL(descriptor->exports().at(5)->import_name);
6073
6074 CHECK(descriptor->exports().at(6)->export_name->IsOneByteEqualTo("joo"));
6075 CHECK(descriptor->exports().at(6)->local_name->IsOneByteEqualTo("joo"));
6076 CHECK_NULL(descriptor->exports().at(6)->module_request);
6077 CHECK_NULL(descriptor->exports().at(6)->import_name);
6078
6079 CHECK(descriptor->exports().at(7)->export_name->IsOneByteEqualTo("default"));
6080 CHECK(descriptor->exports().at(7)->local_name->IsOneByteEqualTo("*default*"));
6081 CHECK_NULL(descriptor->exports().at(7)->module_request);
6082 CHECK_NULL(descriptor->exports().at(7)->import_name);
6083
6084 CHECK(descriptor->exports().at(8)->export_name->IsOneByteEqualTo("bb"));
6085 CHECK(descriptor->exports().at(8)->local_name->IsOneByteEqualTo("aa"));
6086 CHECK_NULL(descriptor->exports().at(8)->module_request);
6087 CHECK_NULL(descriptor->exports().at(8)->import_name);
6088
6089 CHECK(descriptor->exports().at(9)->export_name->IsOneByteEqualTo("x"));
6090 CHECK(descriptor->exports().at(9)->local_name->IsOneByteEqualTo("x"));
6091 CHECK_NULL(descriptor->exports().at(9)->module_request);
6092 CHECK_NULL(descriptor->exports().at(9)->import_name);
6093
6094 CHECK(descriptor->exports().at(10)->export_name->IsOneByteEqualTo("foob"));
6095 CHECK(descriptor->exports().at(10)->local_name->IsOneByteEqualTo("foob"));
6096 CHECK_NULL(descriptor->exports().at(10)->module_request);
6097 CHECK_NULL(descriptor->exports().at(10)->import_name);
6098 6098
6099 CHECK_EQ(3, descriptor->special_imports().length()); 6099 CHECK_EQ(3, descriptor->special_imports().length());
6100 6100 CheckModuleEntry(
6101 CHECK_NULL(descriptor->special_imports().at(0)->local_name); 6101 descriptor->special_imports().at(0), nullptr, nullptr, nullptr, "q.js");
6102 CHECK_NULL(descriptor->special_imports().at(0)->export_name); 6102 CheckModuleEntry(
6103 CHECK_NULL(descriptor->special_imports().at(0)->import_name); 6103 descriptor->special_imports().at(1), nullptr, "loo", nullptr, "bar.js");
6104 CHECK(descriptor->special_imports().at(0)->module_request->IsOneByteEqualTo( 6104 CheckModuleEntry(
6105 "q.js")); 6105 descriptor->special_imports().at(2), nullptr, "foob", nullptr, "bar.js");
6106
6107 CHECK(
6108 descriptor->special_imports().at(1)->local_name->IsOneByteEqualTo("loo"));
6109 CHECK_NULL(descriptor->special_imports().at(1)->export_name);
6110 CHECK_NULL(descriptor->special_imports().at(1)->import_name);
6111 CHECK(descriptor->special_imports().at(1)->module_request->IsOneByteEqualTo(
6112 "bar.js"));
6113
6114 CHECK(descriptor->special_imports().at(2)->local_name->IsOneByteEqualTo(
6115 "foob"));
6116 CHECK_NULL(descriptor->special_imports().at(2)->export_name);
6117 CHECK_NULL(descriptor->special_imports().at(2)->import_name);
6118 CHECK(descriptor->special_imports().at(2)->module_request->IsOneByteEqualTo(
6119 "bar.js"));
6120 6106
6121 CHECK_EQ(4, descriptor->regular_imports().size()); 6107 CHECK_EQ(4, descriptor->regular_imports().size());
6122 6108 const i::ModuleDescriptor::ModuleEntry* entry;
6123 CHECK_NULL(descriptor->regular_imports() 6109 entry = descriptor->regular_imports().find(
6124 .find(declarations->at(1)->proxy()->raw_name()) 6110 declarations->at(1)->proxy()->raw_name())->second;
6125 ->second->export_name); 6111 CheckModuleEntry(entry, nullptr, "z", "q", "m.js");
6126 CHECK(descriptor->regular_imports() 6112 entry = descriptor->regular_imports().find(
6127 .find(declarations->at(1)->proxy()->raw_name()) 6113 declarations->at(2)->proxy()->raw_name())->second;
6128 ->second->import_name->IsOneByteEqualTo("q")); 6114 CheckModuleEntry(entry, nullptr, "n", "default", "n.js");
6129 CHECK(descriptor->regular_imports() 6115 entry = descriptor->regular_imports().find(
6130 .find(declarations->at(1)->proxy()->raw_name()) 6116 declarations->at(9)->proxy()->raw_name())->second;
6131 ->second->module_request->IsOneByteEqualTo("m.js")); 6117 CheckModuleEntry(entry, nullptr, "mm", "m", "m.js");
6132 6118 entry = descriptor->regular_imports().find(
6133 CHECK_NULL(descriptor->regular_imports() 6119 declarations->at(10)->proxy()->raw_name())->second;
6134 .find(declarations->at(2)->proxy()->raw_name()) 6120 CheckModuleEntry(entry, nullptr, "aa", "aa", "m.js");
6135 ->second->export_name);
6136 CHECK(descriptor->regular_imports()
6137 .find(declarations->at(2)->proxy()->raw_name())
6138 ->second->import_name->IsOneByteEqualTo("default"));
6139 CHECK(descriptor->regular_imports()
6140 .find(declarations->at(2)->proxy()->raw_name())
6141 ->second->module_request->IsOneByteEqualTo("n.js"));
6142
6143 CHECK_NULL(descriptor->regular_imports()
6144 .find(declarations->at(9)->proxy()->raw_name())
6145 ->second->export_name);
6146 CHECK(descriptor->regular_imports()
6147 .find(declarations->at(9)->proxy()->raw_name())
6148 ->second->import_name->IsOneByteEqualTo("m"));
6149 CHECK(descriptor->regular_imports()
6150 .find(declarations->at(9)->proxy()->raw_name())
6151 ->second->module_request->IsOneByteEqualTo("m.js"));
6152
6153 CHECK_NULL(descriptor->regular_imports()
6154 .find(declarations->at(10)->proxy()->raw_name())
6155 ->second->export_name);
6156 CHECK(descriptor->regular_imports()
6157 .find(declarations->at(10)->proxy()->raw_name())
6158 ->second->import_name->IsOneByteEqualTo("aa"));
6159 CHECK(descriptor->regular_imports()
6160 .find(declarations->at(10)->proxy()->raw_name())
6161 ->second->module_request->IsOneByteEqualTo("m.js"));
6162 } 6121 }
6163 6122
6164 6123
6165 TEST(DuplicateProtoError) { 6124 TEST(DuplicateProtoError) {
6166 const char* context_data[][2] = { 6125 const char* context_data[][2] = {
6167 {"({", "});"}, 6126 {"({", "});"},
6168 {"'use strict'; ({", "});"}, 6127 {"'use strict'; ({", "});"},
6169 {NULL, NULL} 6128 {NULL, NULL}
6170 }; 6129 };
6171 const char* error_data[] = { 6130 const char* error_data[] = {
(...skipping 2010 matching lines...) Expand 10 before | Expand all | Expand 10 after
8182 "(a,);", 8141 "(a,);",
8183 "(a,b,c,);", 8142 "(a,b,c,);",
8184 NULL 8143 NULL
8185 }; 8144 };
8186 // clang-format on 8145 // clang-format on
8187 8146
8188 static const ParserFlag always_flags[] = {kAllowHarmonyTrailingCommas}; 8147 static const ParserFlag always_flags[] = {kAllowHarmonyTrailingCommas};
8189 RunParserSyncTest(context_data, data, kError, NULL, 0, always_flags, 8148 RunParserSyncTest(context_data, data, kError, NULL, 0, always_flags,
8190 arraysize(always_flags)); 8149 arraysize(always_flags));
8191 } 8150 }
OLDNEW
« no previous file with comments | « src/ast/modules.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698