| 1 | #!/usr/bin/env ruby1.9 |
|---|
| 2 | require 'optparse' |
|---|
| 3 | |
|---|
| 4 | use_repl = false |
|---|
| 5 | package_path = nil |
|---|
| 6 | show_sequence = false |
|---|
| 7 | show_main_loop = false |
|---|
| 8 | compile_only = false |
|---|
| 9 | js_type = 'spider-monkey' |
|---|
| 10 | js = nil |
|---|
| 11 | |
|---|
| 12 | opt = OptionParser.new |
|---|
| 13 | opt.on('--repl') {|v| use_repl = v} |
|---|
| 14 | opt.on('--package=PATH') {|v| package_path = v } |
|---|
| 15 | opt.on('--[no-]show-sequence') {|v| show_sequence = v } |
|---|
| 16 | opt.on('--[no-]show-main-loop') {|v| show_main_loop = v } |
|---|
| 17 | opt.on('--[no-]compile-only') {|v| compile_only = v } |
|---|
| 18 | opt.on('--js=COMMAND') {|v| js = v } |
|---|
| 19 | opt.on('--v8') {|v| js ||= js_type = 'v8' } |
|---|
| 20 | opt.on('--rhino') {|v| js ||= js_type = 'rhino' } |
|---|
| 21 | |
|---|
| 22 | opt.parse!(ARGV) |
|---|
| 23 | js ||= 'js' |
|---|
| 24 | |
|---|
| 25 | message = IO.popen('hspcmp -d t.hsp'){|io|io.read} |
|---|
| 26 | if $?.exitstatus != 0 |
|---|
| 27 | puts message.encode(Encoding.default_external, 'cp932') |
|---|
| 28 | exit 1 |
|---|
| 29 | end |
|---|
| 30 | |
|---|
| 31 | dump = open('t.ax','rb') do |f| |
|---|
| 32 | f.each_byte.each_slice(16).map do |i| |
|---|
| 33 | "'%s'" % i.map{|j| '\x%02x'%j }.join |
|---|
| 34 | end.join(",\n") |
|---|
| 35 | end |
|---|
| 36 | |
|---|
| 37 | open('t.ax.js', 'wb') do |f| |
|---|
| 38 | f.puts "var runInShellOptions = {" |
|---|
| 39 | f.puts "axBinary: [\n#{dump}\n].join('')," |
|---|
| 40 | f.puts "showSequence: #{show_sequence}," |
|---|
| 41 | f.puts "showMainLoop: #{show_main_loop}," |
|---|
| 42 | f.puts "compileOnly: #{compile_only}" |
|---|
| 43 | f.puts "};" |
|---|
| 44 | end |
|---|
| 45 | |
|---|
| 46 | if package_path |
|---|
| 47 | filenames = [package_path] |
|---|
| 48 | else |
|---|
| 49 | filenames = %w[ |
|---|
| 50 | head-for-run-in-shell.js |
|---|
| 51 | binary-parser.js |
|---|
| 52 | cp932.js |
|---|
| 53 | utils.js |
|---|
| 54 | vcrandom.js |
|---|
| 55 | vartype.js |
|---|
| 56 | calc-code.js |
|---|
| 57 | formatter.js |
|---|
| 58 | exception.js |
|---|
| 59 | axdata.js |
|---|
| 60 | instruction.js |
|---|
| 61 | user-def-func.js |
|---|
| 62 | builtin-func-names.js |
|---|
| 63 | value.js |
|---|
| 64 | label-value.js |
|---|
| 65 | str-value.js |
|---|
| 66 | double-value.js |
|---|
| 67 | int-value.js |
|---|
| 68 | struct-value.js |
|---|
| 69 | jump-type.js |
|---|
| 70 | str-buffer.js |
|---|
| 71 | hsp-array.js |
|---|
| 72 | reference.js |
|---|
| 73 | uninitialized-array.js |
|---|
| 74 | label-array.js |
|---|
| 75 | str-array.js |
|---|
| 76 | double-array.js |
|---|
| 77 | int-array.js |
|---|
| 78 | struct-array.js |
|---|
| 79 | variable.js |
|---|
| 80 | variable-agent.js |
|---|
| 81 | param-info.js |
|---|
| 82 | compiler.js |
|---|
| 83 | mainloop-generator.js |
|---|
| 84 | builtin-funcs.js |
|---|
| 85 | evaluator.js |
|---|
| 86 | ] |
|---|
| 87 | end |
|---|
| 88 | |
|---|
| 89 | filenames << 't.ax.js' << 'run-in-shell.js' |
|---|
| 90 | |
|---|
| 91 | if use_repl and js_type != 'v8' |
|---|
| 92 | filenames << '-' |
|---|
| 93 | end |
|---|
| 94 | |
|---|
| 95 | case js_type |
|---|
| 96 | when 'rhino' |
|---|
| 97 | system(js, *filenames.map{|i|["-f", i]}.flatten) |
|---|
| 98 | when 'v8' |
|---|
| 99 | system(js, *(use_repl ? ['--shell'] : []), *filenames) |
|---|
| 100 | else |
|---|
| 101 | system(js, '-s', '-w', *filenames.map{|i|["-f", i]}.flatten) |
|---|
| 102 | end |
|---|
| 103 | |
|---|