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

Side by Side Diff: tools/js2c.py

Issue 317633003: Revert "Support external startup data in V8." (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 6 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 | Annotate | Revision Log
« no previous file with comments | « tools/gyp/v8.gyp ('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 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # 2 #
3 # Copyright 2012 the V8 project authors. All rights reserved. 3 # Copyright 2012 the V8 project authors. All rights reserved.
4 # Redistribution and use in source and binary forms, with or without 4 # Redistribution and use in source and binary forms, with or without
5 # modification, are permitted provided that the following conditions are 5 # modification, are permitted provided that the following conditions are
6 # met: 6 # met:
7 # 7 #
8 # * Redistributions of source code must retain the above copyright 8 # * Redistributions of source code must retain the above copyright
9 # notice, this list of conditions and the following disclaimer. 9 # notice, this list of conditions and the following disclaimer.
10 # * Redistributions in binary form must reproduce the above 10 # * Redistributions in binary form must reproduce the above
(...skipping 379 matching lines...) Expand 10 before | Expand all | Expand 10 after
390 result.modules.append(lines); 390 result.modules.append(lines);
391 391
392 is_debugger = IsDebuggerFile(source) 392 is_debugger = IsDebuggerFile(source)
393 result.is_debugger_id.append(is_debugger); 393 result.is_debugger_id.append(is_debugger);
394 394
395 name = os.path.basename(source)[:-3] 395 name = os.path.basename(source)[:-3]
396 result.names.append(name if not is_debugger else name[:-9]); 396 result.names.append(name if not is_debugger else name[:-9]);
397 return result 397 return result
398 398
399 399
400 def BuildMetadata(sources, source_bytes, native_type): 400 def BuildMetadata(sources, source_bytes, native_type, omit):
401 """Build the meta data required to generate a libaries file. 401 """Build the meta data required to generate a libaries file.
402 402
403 Args: 403 Args:
404 sources: A Sources instance with the prepared sources. 404 sources: A Sources instance with the prepared sources.
405 source_bytes: A list of source bytes. 405 source_bytes: A list of source bytes.
406 (The concatenation of all sources; might be compressed.) 406 (The concatenation of all sources; might be compressed.)
407 native_type: The parameter for the NativesCollection template. 407 native_type: The parameter for the NativesCollection template.
408 omit: bool, whether we should omit the sources in the output.
408 409
409 Returns: 410 Returns:
410 A dictionary for use with HEADER_TEMPLATE. 411 A dictionary for use with HEADER_TEMPLATE.
411 """ 412 """
412 total_length = len(source_bytes) 413 total_length = len(source_bytes)
413 raw_sources = "".join(sources.modules) 414 raw_sources = "".join(sources.modules)
414 415
415 # The sources are expected to be ASCII-only. 416 # The sources are expected to be ASCII-only.
416 assert not filter(lambda value: ord(value) >= 128, raw_sources) 417 assert not filter(lambda value: ord(value) >= 128, raw_sources)
417 418
(...skipping 12 matching lines...) Expand all
430 "offset": offset, 431 "offset": offset,
431 "raw_length": len(sources.modules[i]), 432 "raw_length": len(sources.modules[i]),
432 } 433 }
433 get_index_cases.append(GET_INDEX_CASE % d) 434 get_index_cases.append(GET_INDEX_CASE % d)
434 get_script_name_cases.append(GET_SCRIPT_NAME_CASE % d) 435 get_script_name_cases.append(GET_SCRIPT_NAME_CASE % d)
435 get_raw_script_source_cases.append(GET_RAW_SCRIPT_SOURCE_CASE % d) 436 get_raw_script_source_cases.append(GET_RAW_SCRIPT_SOURCE_CASE % d)
436 offset += len(sources.modules[i]) 437 offset += len(sources.modules[i])
437 assert offset == len(raw_sources) 438 assert offset == len(raw_sources)
438 439
439 # If we have the raw sources we can declare them accordingly. 440 # If we have the raw sources we can declare them accordingly.
440 have_raw_sources = source_bytes == raw_sources 441 have_raw_sources = source_bytes == raw_sources and not omit
441 raw_sources_declaration = (RAW_SOURCES_DECLARATION 442 raw_sources_declaration = (RAW_SOURCES_DECLARATION
442 if have_raw_sources else RAW_SOURCES_COMPRESSION_DECLARATION) 443 if have_raw_sources else RAW_SOURCES_COMPRESSION_DECLARATION)
443 444
444 metadata = { 445 metadata = {
445 "builtin_count": len(sources.modules), 446 "builtin_count": len(sources.modules),
446 "debugger_count": sum(sources.is_debugger_id), 447 "debugger_count": sum(sources.is_debugger_id),
447 "sources_declaration": SOURCES_DECLARATION % ToCArray(source_bytes), 448 "sources_declaration": SOURCES_DECLARATION % ToCArray(source_bytes),
449 "sources_data": ToCArray(source_bytes) if not omit else "",
448 "raw_sources_declaration": raw_sources_declaration, 450 "raw_sources_declaration": raw_sources_declaration,
449 "raw_total_length": sum(map(len, sources.modules)), 451 "raw_total_length": sum(map(len, sources.modules)),
450 "total_length": total_length, 452 "total_length": total_length,
451 "get_index_cases": "".join(get_index_cases), 453 "get_index_cases": "".join(get_index_cases),
452 "get_raw_script_source_cases": "".join(get_raw_script_source_cases), 454 "get_raw_script_source_cases": "".join(get_raw_script_source_cases),
453 "get_script_name_cases": "".join(get_script_name_cases), 455 "get_script_name_cases": "".join(get_script_name_cases),
454 "type": native_type, 456 "type": native_type,
455 } 457 }
456 return metadata 458 return metadata
457 459
(...skipping 10 matching lines...) Expand all
468 """ 470 """
469 sources_bytes = "".join(sources.modules) 471 sources_bytes = "".join(sources.modules)
470 if compression_type == "off": 472 if compression_type == "off":
471 return sources_bytes 473 return sources_bytes
472 elif compression_type == "bz2": 474 elif compression_type == "bz2":
473 return bz2.compress(sources_bytes) 475 return bz2.compress(sources_bytes)
474 else: 476 else:
475 raise Error("Unknown compression type %s." % compression_type) 477 raise Error("Unknown compression type %s." % compression_type)
476 478
477 479
478 def PutInt(blob_file, value): 480 def JS2C(source, target, native_type, compression_type, raw_file, omit):
479 assert(value >= 0 and value < (1 << 20))
480 size = 1 if (value < 1 << 6) else (2 if (value < 1 << 14) else 3)
481 value_with_length = (value << 2) | size
482
483 byte_sequence = bytearray()
484 for i in xrange(size):
485 byte_sequence.append(value_with_length & 255)
486 value_with_length >>= 8;
487 blob_file.write(byte_sequence)
488
489
490 def PutStr(blob_file, value):
491 PutInt(blob_file, len(value));
492 blob_file.write(value);
493
494
495 def WriteStartupBlob(sources, startup_blob):
496 """Write a startup blob, as expected by V8 Initialize ...
497 TODO(vogelheim): Add proper method name.
498
499 Args:
500 sources: A Sources instance with the prepared sources.
501 startup_blob_file: Name of file to write the blob to.
502 """
503 output = open(startup_blob, "wb")
504
505 debug_sources = sum(sources.is_debugger_id);
506 PutInt(output, debug_sources)
507 for i in xrange(debug_sources):
508 PutStr(output, sources.names[i]);
509 PutStr(output, sources.modules[i]);
510
511 PutInt(output, len(sources.names) - debug_sources)
512 for i in xrange(debug_sources, len(sources.names)):
513 PutStr(output, sources.names[i]);
514 PutStr(output, sources.modules[i]);
515
516 output.close()
517
518
519 def JS2C(source, target, native_type, compression_type, raw_file, startup_blob):
520 sources = PrepareSources(source) 481 sources = PrepareSources(source)
521 sources_bytes = CompressMaybe(sources, compression_type) 482 sources_bytes = CompressMaybe(sources, compression_type)
522 metadata = BuildMetadata(sources, sources_bytes, native_type) 483 metadata = BuildMetadata(sources, sources_bytes, native_type, omit)
523 484
524 # Optionally emit raw file. 485 # Optionally emit raw file.
525 if raw_file: 486 if raw_file:
526 output = open(raw_file, "w") 487 output = open(raw_file, "w")
527 output.write(sources_bytes) 488 output.write(sources_bytes)
528 output.close() 489 output.close()
529 490
530 if startup_blob:
531 WriteStartupBlob(sources, startup_blob);
532
533 # Emit resulting source file. 491 # Emit resulting source file.
534 output = open(target, "w") 492 output = open(target, "w")
535 output.write(HEADER_TEMPLATE % metadata) 493 output.write(HEADER_TEMPLATE % metadata)
536 output.close() 494 output.close()
537 495
538 496
539 def main(): 497 def main():
540 parser = optparse.OptionParser() 498 parser = optparse.OptionParser()
541 parser.add_option("--raw", action="store", 499 parser.add_option("--raw", action="store",
542 help="file to write the processed sources array to.") 500 help="file to write the processed sources array to.")
543 parser.add_option("--startup_blob", action="store", 501 parser.add_option("--omit", dest="omit", action="store_true",
544 help="file to write the startup blob to.") 502 help="Omit the raw sources from the generated code.")
545 parser.set_usage("""js2c out.cc type compression sources.js ... 503 parser.set_usage("""js2c out.cc type compression sources.js ...
546 out.cc: C code to be generated. 504 out.cc: C code to be generated.
547 type: type parameter for NativesCollection template. 505 type: type parameter for NativesCollection template.
548 compression: type of compression used. [off|bz2] 506 compression: type of compression used. [off|bz2]
549 sources.js: JS internal sources or macros.py.""") 507 sources.js: JS internal sources or macros.py.""")
550 (options, args) = parser.parse_args() 508 (options, args) = parser.parse_args()
551 509
552 JS2C(args[3:], args[0], args[1], args[2], options.raw, options.startup_blob) 510 JS2C(args[3:], args[0], args[1], args[2], options.raw, options.omit)
553 511
554 512
555 if __name__ == "__main__": 513 if __name__ == "__main__":
556 main() 514 main()
OLDNEW
« no previous file with comments | « tools/gyp/v8.gyp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698