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

Side by Side Diff: test/cctest/interpreter/generate-bytecode-expectations.cc

Issue 2393453003: [interpreter] Add some bytecode tests for modules. (Closed)
Patch Set: Created 4 years, 2 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
OLDNEW
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 <fstream> 6 #include <fstream>
7 #include <memory> 7 #include <memory>
8 #include <vector> 8 #include <vector>
9 9
10 #include "test/cctest/interpreter/bytecode-expectations-printer.h" 10 #include "test/cctest/interpreter/bytecode-expectations-printer.h"
(...skipping 22 matching lines...) Expand all
33 public: 33 public:
34 static ProgramOptions FromCommandLine(int argc, char** argv); 34 static ProgramOptions FromCommandLine(int argc, char** argv);
35 35
36 ProgramOptions() 36 ProgramOptions()
37 : parsing_failed_(false), 37 : parsing_failed_(false),
38 print_help_(false), 38 print_help_(false),
39 read_raw_js_snippet_(false), 39 read_raw_js_snippet_(false),
40 read_from_stdin_(false), 40 read_from_stdin_(false),
41 rebaseline_(false), 41 rebaseline_(false),
42 wrap_(true), 42 wrap_(true),
43 module_(false),
43 top_level_(false), 44 top_level_(false),
44 do_expressions_(false), 45 do_expressions_(false),
45 verbose_(false) {} 46 verbose_(false) {}
46 47
47 bool Validate() const; 48 bool Validate() const;
48 void UpdateFromHeader(std::istream& stream); // NOLINT 49 void UpdateFromHeader(std::istream& stream); // NOLINT
49 void PrintHeader(std::ostream& stream) const; // NOLINT 50 void PrintHeader(std::ostream& stream) const; // NOLINT
50 51
51 bool parsing_failed() const { return parsing_failed_; } 52 bool parsing_failed() const { return parsing_failed_; }
52 bool print_help() const { return print_help_; } 53 bool print_help() const { return print_help_; }
53 bool read_raw_js_snippet() const { return read_raw_js_snippet_; } 54 bool read_raw_js_snippet() const { return read_raw_js_snippet_; }
54 bool read_from_stdin() const { return read_from_stdin_; } 55 bool read_from_stdin() const { return read_from_stdin_; }
55 bool write_to_stdout() const { 56 bool write_to_stdout() const {
56 return output_filename_.empty() && !rebaseline_; 57 return output_filename_.empty() && !rebaseline_;
57 } 58 }
58 bool rebaseline() const { return rebaseline_; } 59 bool rebaseline() const { return rebaseline_; }
59 bool wrap() const { return wrap_; } 60 bool wrap() const { return wrap_; }
61 bool module() const { return module_; }
60 bool top_level() const { return top_level_; } 62 bool top_level() const { return top_level_; }
61 bool do_expressions() const { return do_expressions_; } 63 bool do_expressions() const { return do_expressions_; }
62 bool verbose() const { return verbose_; } 64 bool verbose() const { return verbose_; }
63 bool suppress_runtime_errors() const { return rebaseline_ && !verbose_; } 65 bool suppress_runtime_errors() const { return rebaseline_ && !verbose_; }
64 std::vector<std::string> input_filenames() const { return input_filenames_; } 66 std::vector<std::string> input_filenames() const { return input_filenames_; }
65 std::string output_filename() const { return output_filename_; } 67 std::string output_filename() const { return output_filename_; }
66 std::string test_function_name() const { return test_function_name_; } 68 std::string test_function_name() const { return test_function_name_; }
67 69
68 private: 70 private:
69 bool parsing_failed_; 71 bool parsing_failed_;
70 bool print_help_; 72 bool print_help_;
71 bool read_raw_js_snippet_; 73 bool read_raw_js_snippet_;
72 bool read_from_stdin_; 74 bool read_from_stdin_;
73 bool rebaseline_; 75 bool rebaseline_;
74 bool wrap_; 76 bool wrap_;
77 bool module_;
75 bool top_level_; 78 bool top_level_;
76 bool do_expressions_; 79 bool do_expressions_;
77 bool verbose_; 80 bool verbose_;
78 std::vector<std::string> input_filenames_; 81 std::vector<std::string> input_filenames_;
79 std::string output_filename_; 82 std::string output_filename_;
80 std::string test_function_name_; 83 std::string test_function_name_;
81 }; 84 };
82 85
83 class V8InitializationScope final { 86 class V8InitializationScope final {
84 public: 87 public:
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 if (strcmp(argv[i], "--help") == 0) { 153 if (strcmp(argv[i], "--help") == 0) {
151 options.print_help_ = true; 154 options.print_help_ = true;
152 } else if (strcmp(argv[i], "--raw-js") == 0) { 155 } else if (strcmp(argv[i], "--raw-js") == 0) {
153 options.read_raw_js_snippet_ = true; 156 options.read_raw_js_snippet_ = true;
154 } else if (strcmp(argv[i], "--stdin") == 0) { 157 } else if (strcmp(argv[i], "--stdin") == 0) {
155 options.read_from_stdin_ = true; 158 options.read_from_stdin_ = true;
156 } else if (strcmp(argv[i], "--rebaseline") == 0) { 159 } else if (strcmp(argv[i], "--rebaseline") == 0) {
157 options.rebaseline_ = true; 160 options.rebaseline_ = true;
158 } else if (strcmp(argv[i], "--no-wrap") == 0) { 161 } else if (strcmp(argv[i], "--no-wrap") == 0) {
159 options.wrap_ = false; 162 options.wrap_ = false;
163 } else if (strcmp(argv[i], "--module") == 0) {
164 options.module_ = true;
160 } else if (strcmp(argv[i], "--top-level") == 0) { 165 } else if (strcmp(argv[i], "--top-level") == 0) {
161 options.top_level_ = true; 166 options.top_level_ = true;
162 } else if (strcmp(argv[i], "--do-expressions") == 0) { 167 } else if (strcmp(argv[i], "--do-expressions") == 0) {
163 options.do_expressions_ = true; 168 options.do_expressions_ = true;
164 } else if (strcmp(argv[i], "--verbose") == 0) { 169 } else if (strcmp(argv[i], "--verbose") == 0) {
165 options.verbose_ = true; 170 options.verbose_ = true;
166 } else if (strncmp(argv[i], "--output=", 9) == 0) { 171 } else if (strncmp(argv[i], "--output=", 9) == 0) {
167 options.output_filename_ = argv[i] + 9; 172 options.output_filename_ = argv[i] + 9;
168 } else if (strncmp(argv[i], "--test-function-name=", 21) == 0) { 173 } else if (strncmp(argv[i], "--test-function-name=", 21) == 0) {
169 options.test_function_name_ = argv[i] + 21; 174 options.test_function_name_ = argv[i] + 21;
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
228 "Multiple input files, but no --rebaseline or --raw-js specified."); 233 "Multiple input files, but no --rebaseline or --raw-js specified.");
229 return false; 234 return false;
230 } 235 }
231 236
232 if (top_level_ && !test_function_name_.empty()) { 237 if (top_level_ && !test_function_name_.empty()) {
233 REPORT_ERROR( 238 REPORT_ERROR(
234 "Test function name specified while processing top level code."); 239 "Test function name specified while processing top level code.");
235 return false; 240 return false;
236 } 241 }
237 242
243 if (module_ && (!top_level_ || wrap_)) {
244 REPORT_ERROR(
245 "The flag --module currently requires --top-level and --no-wrap.");
246 return false;
247 }
248
238 return true; 249 return true;
239 } 250 }
240 251
241 void ProgramOptions::UpdateFromHeader(std::istream& stream) { 252 void ProgramOptions::UpdateFromHeader(std::istream& stream) {
242 std::string line; 253 std::string line;
243 254
244 // Skip to the beginning of the options header 255 // Skip to the beginning of the options header
245 while (std::getline(stream, line)) { 256 while (std::getline(stream, line)) {
246 if (line == "---") break; 257 if (line == "---") break;
247 } 258 }
248 259
249 while (std::getline(stream, line)) { 260 while (std::getline(stream, line)) {
250 if (line.compare(0, 6, "wrap: ") == 0) { 261 if (line.compare(0, 8, "module: ") == 0) {
262 module_ = ParseBoolean(line.c_str() + 8);
263 } else if (line.compare(0, 6, "wrap: ") == 0) {
251 wrap_ = ParseBoolean(line.c_str() + 6); 264 wrap_ = ParseBoolean(line.c_str() + 6);
252 } else if (line.compare(0, 20, "test function name: ") == 0) { 265 } else if (line.compare(0, 20, "test function name: ") == 0) {
253 test_function_name_ = line.c_str() + 20; 266 test_function_name_ = line.c_str() + 20;
254 } else if (line.compare(0, 11, "top level: ") == 0) { 267 } else if (line.compare(0, 11, "top level: ") == 0) {
255 top_level_ = ParseBoolean(line.c_str() + 11); 268 top_level_ = ParseBoolean(line.c_str() + 11);
256 } else if (line.compare(0, 16, "do expressions: ") == 0) { 269 } else if (line.compare(0, 16, "do expressions: ") == 0) {
257 do_expressions_ = ParseBoolean(line.c_str() + 16); 270 do_expressions_ = ParseBoolean(line.c_str() + 16);
258 } else if (line == "---") { 271 } else if (line == "---") {
259 break; 272 break;
260 } else if (line.empty()) { 273 } else if (line.empty()) {
261 continue; 274 continue;
262 } else { 275 } else {
263 UNREACHABLE(); 276 UNREACHABLE();
264 return; 277 return;
265 } 278 }
266 } 279 }
267 } 280 }
268 281
269 void ProgramOptions::PrintHeader(std::ostream& stream) const { // NOLINT 282 void ProgramOptions::PrintHeader(std::ostream& stream) const { // NOLINT
270 stream << "---" 283 stream << "---"
271 << "\nwrap: " << BooleanToString(wrap_); 284 << "\nwrap: " << BooleanToString(wrap_);
272 285
273 if (!test_function_name_.empty()) { 286 if (!test_function_name_.empty()) {
274 stream << "\ntest function name: " << test_function_name_; 287 stream << "\ntest function name: " << test_function_name_;
275 } 288 }
276 289
290 if (module_) stream << "\nmodule: yes";
277 if (top_level_) stream << "\ntop level: yes"; 291 if (top_level_) stream << "\ntop level: yes";
278 if (do_expressions_) stream << "\ndo expressions: yes"; 292 if (do_expressions_) stream << "\ndo expressions: yes";
279 293
280 stream << "\n\n"; 294 stream << "\n\n";
281 } 295 }
282 296
283 V8InitializationScope::V8InitializationScope(const char* exec_path) 297 V8InitializationScope::V8InitializationScope(const char* exec_path)
284 : platform_(v8::platform::CreateDefaultPlatform()) { 298 : platform_(v8::platform::CreateDefaultPlatform()) {
285 i::FLAG_ignition = true; 299 i::FLAG_ignition = true;
286 i::FLAG_always_opt = false; 300 i::FLAG_always_opt = false;
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
366 const std::vector<std::string>& snippet_list, 380 const std::vector<std::string>& snippet_list,
367 const V8InitializationScope& platform, 381 const V8InitializationScope& platform,
368 const ProgramOptions& options) { 382 const ProgramOptions& options) {
369 v8::Isolate::Scope isolate_scope(platform.isolate()); 383 v8::Isolate::Scope isolate_scope(platform.isolate());
370 v8::HandleScope handle_scope(platform.isolate()); 384 v8::HandleScope handle_scope(platform.isolate());
371 v8::Local<v8::Context> context = v8::Context::New(platform.isolate()); 385 v8::Local<v8::Context> context = v8::Context::New(platform.isolate());
372 v8::Context::Scope context_scope(context); 386 v8::Context::Scope context_scope(context);
373 387
374 BytecodeExpectationsPrinter printer(platform.isolate()); 388 BytecodeExpectationsPrinter printer(platform.isolate());
375 printer.set_wrap(options.wrap()); 389 printer.set_wrap(options.wrap());
390 printer.set_module(options.module());
376 printer.set_top_level(options.top_level()); 391 printer.set_top_level(options.top_level());
377 if (!options.test_function_name().empty()) { 392 if (!options.test_function_name().empty()) {
378 printer.set_test_function_name(options.test_function_name()); 393 printer.set_test_function_name(options.test_function_name());
379 } 394 }
380 395
381 if (options.do_expressions()) i::FLAG_harmony_do_expressions = true; 396 if (options.do_expressions()) i::FLAG_harmony_do_expressions = true;
382 397
383 stream << "#\n# Autogenerated by generate-bytecode-expectations.\n#\n\n"; 398 stream << "#\n# Autogenerated by generate-bytecode-expectations.\n#\n\n";
384 options.PrintHeader(stream); 399 options.PrintHeader(stream);
385 for (const std::string& snippet : snippet_list) { 400 for (const std::string& snippet : snippet_list) {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
419 std::cerr 434 std::cerr
420 << "\nUsage: " << exec_path 435 << "\nUsage: " << exec_path
421 << " [OPTIONS]... [INPUT FILES]...\n\n" 436 << " [OPTIONS]... [INPUT FILES]...\n\n"
422 "Options:\n" 437 "Options:\n"
423 " --help Print this help message.\n" 438 " --help Print this help message.\n"
424 " --verbose Emit messages about the progress of the tool.\n" 439 " --verbose Emit messages about the progress of the tool.\n"
425 " --raw-js Read raw JavaScript, instead of the output format.\n" 440 " --raw-js Read raw JavaScript, instead of the output format.\n"
426 " --stdin Read from standard input instead of file.\n" 441 " --stdin Read from standard input instead of file.\n"
427 " --rebaseline Rebaseline input snippet file.\n" 442 " --rebaseline Rebaseline input snippet file.\n"
428 " --no-wrap Do not wrap the snippet in a function.\n" 443 " --no-wrap Do not wrap the snippet in a function.\n"
444 " --module Compile as JavaScript module.\n"
429 " --test-function-name=foo " 445 " --test-function-name=foo "
430 "Specify the name of the test function.\n" 446 "Specify the name of the test function.\n"
431 " --top-level Process top level code, not the top-level function.\n" 447 " --top-level Process top level code, not the top-level function.\n"
432 " --do-expressions Enable harmony_do_expressions flag.\n" 448 " --do-expressions Enable harmony_do_expressions flag.\n"
433 " --output=file.name\n" 449 " --output=file.name\n"
434 " Specify the output file. If not specified, output goes to " 450 " Specify the output file. If not specified, output goes to "
435 "stdout.\n" 451 "stdout.\n"
436 " --pool-type=(number|string|mixed)\n" 452 " --pool-type=(number|string|mixed)\n"
437 " Specify the type of the entries in the constant pool " 453 " Specify the type of the entries in the constant pool "
438 "(default: mixed).\n" 454 "(default: mixed).\n"
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
498 } 514 }
499 } 515 }
500 516
501 if (!options.rebaseline()) { 517 if (!options.rebaseline()) {
502 if (!WriteExpectationsFile(snippet_list, platform, options, 518 if (!WriteExpectationsFile(snippet_list, platform, options,
503 options.output_filename())) { 519 options.output_filename())) {
504 return 3; 520 return 3;
505 } 521 }
506 } 522 }
507 } 523 }
OLDNEW
« no previous file with comments | « test/cctest/interpreter/bytecode_expectations/Modules.golden ('k') | test/cctest/interpreter/test-bytecode-generator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698