webruby 0.2.2 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (245) hide show
  1. checksums.yaml +4 -4
  2. data/lib/webruby/config.rb +4 -9
  3. data/lib/webruby/rake/files.rake +2 -2
  4. data/modules/emscripten/AUTHORS +9 -1
  5. data/modules/emscripten/CONTRIBUTING.markdown +5 -0
  6. data/modules/emscripten/ChangeLog +435 -0
  7. data/modules/emscripten/cmake/Modules/FindOpenAL.cmake +26 -0
  8. data/modules/emscripten/cmake/Platform/Emscripten.cmake +9 -2
  9. data/modules/emscripten/em++ +0 -2
  10. data/modules/emscripten/emcc +92 -32
  11. data/modules/emscripten/emlink.py +16 -13
  12. data/modules/emscripten/emmake +1 -1
  13. data/modules/emscripten/emrun +918 -0
  14. data/modules/emscripten/emrun.bat +2 -0
  15. data/modules/emscripten/emscripten.py +545 -20
  16. data/modules/emscripten/src/analyzer.js +6 -1
  17. data/modules/emscripten/src/compiler.js +25 -16
  18. data/modules/emscripten/src/emrun_postjs.js +20 -0
  19. data/modules/emscripten/{tests → src}/hello_world.js +0 -0
  20. data/modules/emscripten/src/intertyper.js +45 -16
  21. data/modules/emscripten/src/jsifier.js +78 -48
  22. data/modules/emscripten/src/library.js +381 -96
  23. data/modules/emscripten/src/library_browser.js +50 -53
  24. data/modules/emscripten/src/library_egl.js +66 -24
  25. data/modules/emscripten/src/library_fs.js +122 -90
  26. data/modules/emscripten/src/library_gl.js +739 -353
  27. data/modules/emscripten/src/library_glfw.js +9 -3
  28. data/modules/emscripten/src/library_glut.js +10 -5
  29. data/modules/emscripten/src/library_idbfs.js +14 -14
  30. data/modules/emscripten/src/library_memfs.js +65 -41
  31. data/modules/emscripten/src/library_nodefs.js +61 -9
  32. data/modules/emscripten/src/library_openal.js +4 -4
  33. data/modules/emscripten/src/library_path.js +9 -13
  34. data/modules/emscripten/src/library_sdl.js +301 -64
  35. data/modules/emscripten/src/library_sockfs.js +7 -5
  36. data/modules/emscripten/src/modules.js +62 -22
  37. data/modules/emscripten/src/parseTools.js +135 -102
  38. data/modules/emscripten/src/postamble.js +3 -4
  39. data/modules/emscripten/src/preamble.js +49 -29
  40. data/modules/emscripten/src/proxyClient.js +1 -1
  41. data/modules/emscripten/src/proxyWorker.js +10 -10
  42. data/modules/emscripten/src/relooper/Relooper.cpp +15 -4
  43. data/modules/emscripten/src/runtime.js +32 -8
  44. data/modules/emscripten/src/settings.js +25 -8
  45. data/modules/emscripten/src/shell.html +6 -3
  46. data/modules/emscripten/src/shell.js +13 -11
  47. data/modules/emscripten/src/simd.js +602 -432
  48. data/modules/emscripten/src/struct_info.json +22 -2
  49. data/modules/emscripten/src/utility.js +32 -17
  50. data/modules/emscripten/system/include/SDL/SDL_events.h +1 -0
  51. data/modules/emscripten/system/include/compat/ctype.h +17 -0
  52. data/modules/emscripten/system/include/compat/wchar.h +23 -0
  53. data/modules/emscripten/system/include/compat/wctype.h +23 -0
  54. data/modules/emscripten/system/include/emscripten/emmintrin.h +87 -0
  55. data/modules/emscripten/system/include/emscripten/emscripten.h +30 -4
  56. data/modules/emscripten/system/include/emscripten/vector.h +29 -1
  57. data/modules/emscripten/system/include/emscripten/xmmintrin.h +131 -0
  58. data/modules/emscripten/system/include/libcxx/CREDITS.TXT +9 -1
  59. data/modules/emscripten/system/include/libcxx/__bit_reference +8 -8
  60. data/modules/emscripten/system/include/libcxx/__config +95 -17
  61. data/modules/emscripten/system/include/libcxx/__debug +25 -4
  62. data/modules/emscripten/system/include/libcxx/__functional_03 +7 -7
  63. data/modules/emscripten/system/include/libcxx/__functional_base +169 -9
  64. data/modules/emscripten/system/include/libcxx/__functional_base_03 +1 -1
  65. data/modules/emscripten/system/include/libcxx/__hash_table +25 -25
  66. data/modules/emscripten/system/include/libcxx/__locale +21 -19
  67. data/modules/emscripten/system/include/libcxx/__mutex_base +2 -33
  68. data/modules/emscripten/system/include/libcxx/__split_buffer +9 -9
  69. data/modules/emscripten/system/include/libcxx/__std_stream +14 -0
  70. data/modules/emscripten/system/include/libcxx/__tree +35 -26
  71. data/modules/emscripten/system/include/libcxx/__tuple +15 -15
  72. data/modules/emscripten/system/include/libcxx/__tuple_03 +2 -2
  73. data/modules/emscripten/system/include/libcxx/__undef_min_max +8 -0
  74. data/modules/emscripten/system/include/libcxx/algorithm +121 -110
  75. data/modules/emscripten/system/include/libcxx/array +15 -15
  76. data/modules/emscripten/system/include/libcxx/bitset +4 -4
  77. data/modules/emscripten/system/include/libcxx/chrono +51 -17
  78. data/modules/emscripten/system/include/libcxx/cmath +25 -23
  79. data/modules/emscripten/system/include/libcxx/codecvt +21 -18
  80. data/modules/emscripten/system/include/libcxx/complex +48 -7
  81. data/modules/emscripten/system/include/libcxx/cstddef +1 -1
  82. data/modules/emscripten/system/include/libcxx/cstdio +8 -1
  83. data/modules/emscripten/system/include/libcxx/cstdlib +1 -1
  84. data/modules/emscripten/system/include/libcxx/cwchar +1 -1
  85. data/modules/emscripten/system/include/libcxx/deque +26 -12
  86. data/modules/emscripten/system/include/libcxx/dynarray +311 -0
  87. data/modules/emscripten/system/include/libcxx/exception +4 -4
  88. data/modules/emscripten/system/include/libcxx/ext/__hash +3 -3
  89. data/modules/emscripten/system/include/libcxx/ext/hash_map +19 -15
  90. data/modules/emscripten/system/include/libcxx/ext/hash_set +7 -3
  91. data/modules/emscripten/system/include/libcxx/forward_list +33 -7
  92. data/modules/emscripten/system/include/libcxx/fstream +4 -4
  93. data/modules/emscripten/system/include/libcxx/functional +200 -170
  94. data/modules/emscripten/system/include/libcxx/future +83 -39
  95. data/modules/emscripten/system/include/libcxx/initializer_list +24 -11
  96. data/modules/emscripten/system/include/libcxx/iomanip +147 -0
  97. data/modules/emscripten/system/include/libcxx/ios +24 -16
  98. data/modules/emscripten/system/include/libcxx/iosfwd +19 -19
  99. data/modules/emscripten/system/include/libcxx/istream +13 -8
  100. data/modules/emscripten/system/include/libcxx/iterator +108 -417
  101. data/modules/emscripten/system/include/libcxx/limits +8 -4
  102. data/modules/emscripten/system/include/libcxx/list +28 -8
  103. data/modules/emscripten/system/include/libcxx/locale +153 -390
  104. data/modules/emscripten/system/include/libcxx/map +280 -100
  105. data/modules/emscripten/system/include/libcxx/memory +49 -97
  106. data/modules/emscripten/system/include/libcxx/mutex +2 -2
  107. data/modules/emscripten/system/include/libcxx/new +43 -14
  108. data/modules/emscripten/system/include/libcxx/numeric +2 -2
  109. data/modules/emscripten/system/include/libcxx/optional +697 -0
  110. data/modules/emscripten/system/include/libcxx/ostream +17 -8
  111. data/modules/emscripten/system/include/libcxx/queue +5 -5
  112. data/modules/emscripten/system/include/libcxx/random +53 -51
  113. data/modules/emscripten/system/include/libcxx/ratio +11 -11
  114. data/modules/emscripten/system/include/libcxx/readme.txt +1 -1
  115. data/modules/emscripten/system/include/libcxx/regex +23 -20
  116. data/modules/emscripten/system/include/libcxx/scoped_allocator +1 -1
  117. data/modules/emscripten/system/include/libcxx/set +166 -2
  118. data/modules/emscripten/system/include/libcxx/shared_mutex +419 -0
  119. data/modules/emscripten/system/include/libcxx/sstream +4 -4
  120. data/modules/emscripten/system/include/libcxx/stack +3 -3
  121. data/modules/emscripten/system/include/libcxx/streambuf +5 -5
  122. data/modules/emscripten/system/include/libcxx/string +372 -324
  123. data/modules/emscripten/system/include/libcxx/support/ibm/limits.h +99 -0
  124. data/modules/emscripten/system/include/libcxx/support/ibm/support.h +54 -0
  125. data/modules/emscripten/system/include/libcxx/support/ibm/xlocale.h +326 -0
  126. data/modules/emscripten/system/include/libcxx/support/win32/limits_win32.h +6 -6
  127. data/modules/emscripten/system/include/libcxx/support/win32/locale_win32.h +15 -15
  128. data/modules/emscripten/system/include/libcxx/support/win32/math_win32.h +2 -0
  129. data/modules/emscripten/system/include/libcxx/support/win32/support.h +6 -1
  130. data/modules/emscripten/system/include/libcxx/system_error +14 -8
  131. data/modules/emscripten/system/include/libcxx/thread +7 -8
  132. data/modules/emscripten/system/include/libcxx/tuple +29 -88
  133. data/modules/emscripten/system/include/libcxx/type_traits +253 -209
  134. data/modules/emscripten/system/include/libcxx/typeindex +3 -3
  135. data/modules/emscripten/system/include/libcxx/unordered_map +162 -101
  136. data/modules/emscripten/system/include/libcxx/unordered_set +79 -2
  137. data/modules/emscripten/system/include/libcxx/utility +20 -20
  138. data/modules/emscripten/system/include/libcxx/valarray +23 -23
  139. data/modules/emscripten/system/include/libcxx/vector +114 -91
  140. data/modules/emscripten/system/lib/libc/musl/src/regex/regcomp.c +3352 -0
  141. data/modules/emscripten/system/lib/libc/musl/src/regex/regerror.c +35 -0
  142. data/modules/emscripten/system/lib/libc/musl/src/regex/regexec.c +1011 -0
  143. data/modules/emscripten/system/lib/libc/musl/src/regex/tre-mem.c +158 -0
  144. data/modules/emscripten/system/lib/libc/musl/src/regex/tre.h +231 -0
  145. data/modules/emscripten/system/lib/libcextra.symbols +7 -0
  146. data/modules/emscripten/system/lib/libcxx/CREDITS.TXT +9 -1
  147. data/modules/emscripten/system/lib/libcxx/algorithm.cpp +1 -0
  148. data/modules/emscripten/system/lib/libcxx/debug.cpp +66 -42
  149. data/modules/emscripten/system/lib/libcxx/exception.cpp +88 -16
  150. data/modules/emscripten/system/lib/libcxx/future.cpp +6 -0
  151. data/modules/emscripten/system/lib/libcxx/ios.cpp +7 -2
  152. data/modules/emscripten/system/lib/libcxx/iostream.cpp +8 -8
  153. data/modules/emscripten/system/lib/libcxx/locale.cpp +38 -11
  154. data/modules/emscripten/system/lib/libcxx/mutex.cpp +3 -0
  155. data/modules/emscripten/system/lib/libcxx/new.cpp +44 -10
  156. data/modules/emscripten/system/lib/libcxx/optional.cpp +25 -0
  157. data/modules/emscripten/system/lib/libcxx/random.cpp +26 -0
  158. data/modules/emscripten/system/lib/libcxx/readme.txt +1 -1
  159. data/modules/emscripten/system/lib/libcxx/shared_mutex.cpp +101 -0
  160. data/modules/emscripten/system/lib/libcxx/stdexcept.cpp +11 -7
  161. data/modules/emscripten/system/lib/libcxx/string.cpp +3 -1
  162. data/modules/emscripten/system/lib/libcxx/strstream.cpp +7 -7
  163. data/modules/emscripten/system/lib/libcxx/support/win32/locale_win32.cpp +12 -13
  164. data/modules/emscripten/system/lib/libcxx/support/win32/support.cpp +33 -36
  165. data/modules/emscripten/system/lib/libcxx/symbols +187 -168
  166. data/modules/emscripten/system/lib/libcxx/system_error.cpp +1 -0
  167. data/modules/emscripten/system/lib/libcxx/thread.cpp +7 -3
  168. data/modules/emscripten/system/lib/libcxx/typeinfo.cpp +9 -6
  169. data/modules/emscripten/system/lib/libcxx/valarray.cpp +2 -0
  170. data/modules/emscripten/third_party/lzma.js/doit.bat +4 -0
  171. data/modules/emscripten/third_party/lzma.js/doit.sh +9 -2
  172. data/modules/emscripten/tools/cache.py +5 -7
  173. data/modules/emscripten/tools/cache.pyc +0 -0
  174. data/modules/emscripten/tools/eliminator/asm-eliminator-test-output.js +7 -0
  175. data/modules/emscripten/tools/eliminator/asm-eliminator-test.js +9 -1
  176. data/modules/emscripten/tools/eliminator/eliminator-test-output.js +3 -0
  177. data/modules/emscripten/tools/eliminator/eliminator-test.js +9 -1
  178. data/modules/emscripten/tools/file_packager.py +93 -50
  179. data/modules/emscripten/tools/js-optimizer.js +98 -48
  180. data/modules/emscripten/tools/js_optimizer.py +4 -4
  181. data/modules/emscripten/tools/js_optimizer.pyc +0 -0
  182. data/modules/emscripten/tools/jsrun.py +1 -1
  183. data/modules/emscripten/tools/jsrun.pyc +0 -0
  184. data/modules/emscripten/tools/response_file.py +6 -0
  185. data/modules/emscripten/tools/response_file.pyc +0 -0
  186. data/modules/emscripten/tools/settings_template_readonly.py +2 -0
  187. data/modules/emscripten/tools/shared.py +88 -34
  188. data/modules/emscripten/tools/shared.pyc +0 -0
  189. data/modules/emscripten/tools/split.py +21 -13
  190. data/modules/mruby/build_config.rb +7 -1
  191. data/modules/mruby/doc/compile/README.md +5 -9
  192. data/modules/mruby/include/mrbconf.h +5 -2
  193. data/modules/mruby/include/mruby/array.h +1 -0
  194. data/modules/mruby/include/mruby/compile.h +2 -4
  195. data/modules/mruby/include/mruby/dump.h +7 -16
  196. data/modules/mruby/include/mruby/hash.h +1 -1
  197. data/modules/mruby/include/mruby/irep.h +14 -2
  198. data/modules/mruby/include/mruby/khash.h +8 -7
  199. data/modules/mruby/include/mruby/string.h +1 -0
  200. data/modules/mruby/include/mruby/value.h +5 -2
  201. data/modules/mruby/include/mruby.h +12 -13
  202. data/modules/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c +16 -6
  203. data/modules/mruby/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c +18 -30
  204. data/modules/mruby/mrbgems/mruby-fiber/src/fiber.c +21 -0
  205. data/modules/mruby/mrbgems/mruby-math/src/math.c +1 -1
  206. data/modules/mruby/mrbgems/mruby-random/src/random.c +144 -47
  207. data/modules/mruby/mrbgems/mruby-random/test/random.rb +44 -0
  208. data/modules/mruby/mrbgems/mruby-struct/src/struct.c +5 -5
  209. data/modules/mruby/mrblib/numeric.rb +99 -33
  210. data/modules/mruby/src/array.c +11 -4
  211. data/modules/mruby/src/backtrace.c +2 -2
  212. data/modules/mruby/src/class.c +49 -30
  213. data/modules/mruby/src/codegen.c +131 -79
  214. data/modules/mruby/src/debug.c +1 -1
  215. data/modules/mruby/src/dump.c +213 -163
  216. data/modules/mruby/src/error.c +17 -17
  217. data/modules/mruby/src/error.h +1 -1
  218. data/modules/mruby/src/etc.c +10 -0
  219. data/modules/mruby/src/gc.c +35 -17
  220. data/modules/mruby/src/hash.c +5 -5
  221. data/modules/mruby/src/kernel.c +36 -14
  222. data/modules/mruby/src/load.c +238 -296
  223. data/modules/mruby/src/numeric.c +18 -98
  224. data/modules/mruby/src/object.c +3 -5
  225. data/modules/mruby/src/parse.y +63 -56
  226. data/modules/mruby/src/proc.c +8 -5
  227. data/modules/mruby/src/re.h +0 -1
  228. data/modules/mruby/src/state.c +65 -27
  229. data/modules/mruby/src/string.c +3 -31
  230. data/modules/mruby/src/symbol.c +3 -3
  231. data/modules/mruby/src/variable.c +12 -5
  232. data/modules/mruby/src/vm.c +90 -72
  233. data/modules/mruby/tasks/mruby_build.rake +10 -1
  234. data/modules/mruby/tasks/toolchains/gcc.rake +12 -2
  235. data/modules/mruby/tasks/toolchains/{vs2012.rake → visualcpp.rake} +1 -1
  236. data/modules/mruby/test/driver.c +3 -3
  237. data/modules/mruby/test/t/array.rb +5 -5
  238. data/modules/mruby/test/t/class.rb +14 -1
  239. data/modules/mruby/test/t/kernel.rb +4 -0
  240. data/modules/mruby/test/t/module.rb +4 -4
  241. data/modules/mruby/test/t/nameerror.rb +1 -1
  242. data/modules/mruby/tools/mrbc/mrbc.c +23 -17
  243. data/modules/mruby/travis_config.rb +10 -1
  244. metadata +28 -5
  245. data/modules/mruby/tasks/toolchains/vs2010.rake +0 -3
@@ -13,7 +13,7 @@
13
13
  #include "mruby/numeric.h"
14
14
  #include "mruby/debug.h"
15
15
 
16
- static size_t get_irep_record_size(mrb_state *mrb, mrb_irep *irep);
16
+ static size_t get_irep_record_size_1(mrb_state *mrb, mrb_irep *irep);
17
17
 
18
18
  static uint32_t
19
19
  get_irep_header_size(mrb_state *mrb)
@@ -21,7 +21,7 @@ get_irep_header_size(mrb_state *mrb)
21
21
  uint32_t size = 0;
22
22
 
23
23
  size += sizeof(uint32_t) * 1;
24
- size += sizeof(uint16_t) * 2;
24
+ size += sizeof(uint16_t) * 3;
25
25
 
26
26
  return size;
27
27
  }
@@ -31,9 +31,10 @@ write_irep_header(mrb_state *mrb, mrb_irep *irep, uint8_t *buf)
31
31
  {
32
32
  uint8_t *cur = buf;
33
33
 
34
- cur += uint32_to_bin(get_irep_record_size(mrb, irep), cur); /* record size */
34
+ cur += uint32_to_bin(get_irep_record_size_1(mrb, irep), cur); /* record size */
35
35
  cur += uint16_to_bin((uint16_t)irep->nlocals, cur); /* number of local variable */
36
36
  cur += uint16_to_bin((uint16_t)irep->nregs, cur); /* number of register variable */
37
+ cur += uint16_to_bin((uint16_t)irep->rlen, cur); /* number of child irep */
37
38
 
38
39
  return (cur - buf);
39
40
  }
@@ -90,14 +91,12 @@ get_pool_block_size(mrb_state *mrb, mrb_irep *irep)
90
91
  break;
91
92
 
92
93
  case MRB_TT_STRING:
93
- str = mrb_str_to_str(mrb, irep->pool[pool_no]);
94
- size += RSTRING_LEN(str);
94
+ size += RSTRING_LEN(irep->pool[pool_no]);
95
95
  break;
96
96
 
97
97
  default:
98
98
  break;
99
99
  }
100
-
101
100
  mrb_gc_arena_restore(mrb, ai);
102
101
  }
103
102
 
@@ -119,24 +118,24 @@ write_pool_block(mrb_state *mrb, mrb_irep *irep, uint8_t *buf)
119
118
  for (pool_no = 0; pool_no < irep->plen; pool_no++) {
120
119
  int ai = mrb_gc_arena_save(mrb);
121
120
 
122
- cur += uint8_to_bin(mrb_type(irep->pool[pool_no]), cur); /* data type */
123
-
124
121
  switch (mrb_type(irep->pool[pool_no])) {
125
122
  case MRB_TT_FIXNUM:
123
+ cur += uint8_to_bin(IREP_TT_FIXNUM, cur); /* data type */
126
124
  str = mrb_fixnum_to_str(mrb, irep->pool[pool_no], 10);
127
125
  char_ptr = RSTRING_PTR(str);
128
126
  len = RSTRING_LEN(str);
129
127
  break;
130
128
 
131
129
  case MRB_TT_FLOAT:
130
+ cur += uint8_to_bin(IREP_TT_FLOAT, cur); /* data type */
132
131
  len = mrb_float_to_str(char_buf, mrb_float(irep->pool[pool_no]));
133
132
  char_ptr = &char_buf[0];
134
133
  break;
135
134
 
136
135
  case MRB_TT_STRING:
137
- str = irep->pool[pool_no];
138
- char_ptr = RSTRING_PTR(str);
139
- len = RSTRING_LEN(str);
136
+ cur += uint8_to_bin(IREP_TT_STRING, cur); /* data type */
137
+ char_ptr = RSTRING_PTR(irep->pool[pool_no]);
138
+ len = RSTRING_LEN(irep->pool[pool_no]);
140
139
  break;
141
140
 
142
141
  default:
@@ -204,47 +203,68 @@ write_syms_block(mrb_state *mrb, mrb_irep *irep, uint8_t *buf)
204
203
  return (int)(cur - buf);
205
204
  }
206
205
 
207
-
208
-
209
206
  static size_t
210
- get_irep_record_size(mrb_state *mrb, mrb_irep *irep)
207
+ get_irep_record_size_1(mrb_state *mrb, mrb_irep *irep)
211
208
  {
212
209
  uint32_t size = 0;
213
210
 
214
- //size += sizeof(uint16_t); /* rlen */
215
211
  size += get_irep_header_size(mrb);
216
212
  size += get_iseq_block_size(mrb, irep);
217
213
  size += get_pool_block_size(mrb, irep);
218
214
  size += get_syms_block_size(mrb, irep);
215
+ return size;
216
+ }
219
217
 
218
+ static size_t
219
+ get_irep_record_size(mrb_state *mrb, mrb_irep *irep)
220
+ {
221
+ uint32_t size = 0;
222
+ size_t irep_no;
223
+
224
+ size = get_irep_record_size_1(mrb, irep);
225
+ for (irep_no = 0; irep_no < irep->rlen; irep_no++) {
226
+ size += get_irep_record_size(mrb, irep->reps[irep_no]);
227
+ }
220
228
  return size;
221
229
  }
222
230
 
223
231
  static int
224
232
  write_irep_record(mrb_state *mrb, mrb_irep *irep, uint8_t* bin, uint32_t *irep_record_size)
225
233
  {
234
+ size_t i;
235
+
226
236
  if (irep == NULL) {
227
237
  return MRB_DUMP_INVALID_IREP;
228
238
  }
229
239
 
230
- *irep_record_size = get_irep_record_size(mrb, irep);
240
+ *irep_record_size = get_irep_record_size_1(mrb, irep);
231
241
  if (*irep_record_size == 0) {
232
242
  return MRB_DUMP_GENERAL_FAILURE;
233
243
  }
234
244
 
235
245
  memset(bin, 0, *irep_record_size);
236
246
 
237
- //bin += uint16_to_bin(*irep_record_size, bin);
238
247
  bin += write_irep_header(mrb, irep, bin);
239
248
  bin += write_iseq_block(mrb, irep, bin);
240
249
  bin += write_pool_block(mrb, irep, bin);
241
250
  bin += write_syms_block(mrb, irep, bin);
242
251
 
252
+ for (i = 0; i < irep->rlen; i++) {
253
+ int result;
254
+ uint32_t rlen;
255
+
256
+ result = write_irep_record(mrb, irep->reps[i], bin, &rlen);
257
+ if (result != MRB_DUMP_OK) {
258
+ return result;
259
+ }
260
+ *irep_record_size += rlen;
261
+ bin += rlen;
262
+ }
243
263
  return MRB_DUMP_OK;
244
264
  }
245
265
 
246
266
  static size_t
247
- mrb_write_eof(mrb_state *mrb, uint8_t *bin)
267
+ write_footer(mrb_state *mrb, uint8_t *bin)
248
268
  {
249
269
  struct rite_binary_footer footer;
250
270
 
@@ -257,58 +277,50 @@ mrb_write_eof(mrb_state *mrb, uint8_t *bin)
257
277
 
258
278
 
259
279
  static int
260
- mrb_write_section_irep_header(mrb_state *mrb, uint32_t section_size, uint16_t nirep, uint16_t sirep, uint8_t *bin)
280
+ write_section_irep_header(mrb_state *mrb, uint32_t section_size, uint8_t *bin)
261
281
  {
262
282
  struct rite_section_irep_header *header = (struct rite_section_irep_header*)bin;
263
283
 
264
284
  memcpy(header->section_identify, RITE_SECTION_IREP_IDENTIFIER, sizeof(header->section_identify));
265
285
  uint32_to_bin(section_size, header->section_size);
266
286
  memcpy(header->rite_version, RITE_VM_VER, sizeof(header->rite_version));
267
- uint16_to_bin(nirep, header->nirep);
268
- uint16_to_bin(sirep, header->sirep);
269
287
 
270
288
  return MRB_DUMP_OK;
271
289
  }
272
290
 
273
291
  static int
274
- mrb_write_section_irep(mrb_state *mrb, size_t start_index, uint8_t *bin)
292
+ write_section_irep(mrb_state *mrb, mrb_irep *irep, uint8_t *bin)
275
293
  {
276
294
  int result;
277
- size_t irep_no;
278
295
  uint32_t section_size = 0, rlen = 0; /* size of irep record */
279
296
  uint8_t *cur = bin;
280
297
 
281
- if (mrb == NULL || start_index >= mrb->irep_len || bin == NULL) {
298
+ if (mrb == NULL || bin == NULL) {
282
299
  return MRB_DUMP_INVALID_ARGUMENT;
283
300
  }
284
301
 
285
302
  cur += sizeof(struct rite_section_irep_header);
286
303
  section_size += sizeof(struct rite_section_irep_header);
287
304
 
288
- for (irep_no = start_index; irep_no < mrb->irep_len; irep_no++) {
289
- result = write_irep_record(mrb, mrb->irep[irep_no], cur, &rlen);
290
- if (result != MRB_DUMP_OK) {
291
- return result;
292
- }
293
- cur += rlen;
294
- section_size += rlen;
305
+ result = write_irep_record(mrb, irep, cur, &rlen);
306
+ if (result != MRB_DUMP_OK) {
307
+ return result;
295
308
  }
296
-
297
- mrb_write_section_irep_header(mrb, section_size, mrb->irep_len - start_index, start_index, bin);
309
+ cur += rlen;
310
+ section_size += rlen;
311
+ write_section_irep_header(mrb, section_size, bin);
298
312
 
299
313
  return MRB_DUMP_OK;
300
314
  }
301
315
 
302
316
  static int
303
- mrb_write_section_lineno_header(mrb_state *mrb, uint32_t section_size, uint16_t nirep, uint16_t sirep, uint8_t *bin)
317
+ write_section_lineno_header(mrb_state *mrb, uint32_t section_size, uint8_t *bin)
304
318
  {
305
319
  struct rite_section_lineno_header *header = (struct rite_section_lineno_header*)bin;
306
320
 
307
321
  // TODO
308
322
  memcpy(header->section_identify, RITE_SECTION_LINENO_IDENTIFIER, sizeof(header->section_identify));
309
323
  uint32_to_bin(section_size, header->section_size);
310
- uint16_to_bin(nirep, header->nirep);
311
- uint16_to_bin(sirep, header->sirep);
312
324
 
313
325
  return MRB_DUMP_OK;
314
326
  }
@@ -327,12 +339,11 @@ get_lineno_record_size(mrb_state *mrb, mrb_irep *irep)
327
339
  if (irep->lines) {
328
340
  size += sizeof(uint16_t) * irep->ilen; // lineno
329
341
  }
330
-
331
342
  return size;
332
343
  }
333
344
 
334
345
  static int
335
- write_lineno_record(mrb_state *mrb, mrb_irep *irep, uint8_t* bin)
346
+ write_lineno_record_1(mrb_state *mrb, mrb_irep *irep, uint8_t* bin)
336
347
  {
337
348
  uint8_t *cur = bin;
338
349
  size_t filename_len = 0, iseq_no;
@@ -365,26 +376,39 @@ write_lineno_record(mrb_state *mrb, mrb_irep *irep, uint8_t* bin)
365
376
  }
366
377
 
367
378
  static int
368
- mrb_write_section_lineno(mrb_state *mrb, size_t start_index, uint8_t *bin)
379
+ write_lineno_record(mrb_state *mrb, mrb_irep *irep, uint8_t* bin)
380
+ {
381
+ size_t i;
382
+ uint32_t rlen, size = 0;
383
+
384
+ rlen = write_lineno_record_1(mrb, irep, bin);
385
+ bin += rlen;
386
+ size += rlen;
387
+ for (i=0; i<irep->rlen; i++) {
388
+ rlen = write_lineno_record(mrb, irep, bin);
389
+ bin += rlen;
390
+ size += rlen;
391
+ }
392
+ return size;
393
+ }
394
+
395
+ static int
396
+ write_section_lineno(mrb_state *mrb, mrb_irep *irep, uint8_t *bin)
369
397
  {
370
- size_t irep_no;
371
398
  uint32_t section_size = 0, rlen = 0; /* size of irep record */
372
399
  uint8_t *cur = bin;
373
400
 
374
- if (mrb == NULL || start_index >= mrb->irep_len || bin == NULL) {
401
+ if (mrb == NULL || bin == NULL) {
375
402
  return MRB_DUMP_INVALID_ARGUMENT;
376
403
  }
377
404
 
378
405
  cur += sizeof(struct rite_section_lineno_header);
379
406
  section_size += sizeof(struct rite_section_lineno_header);
380
407
 
381
- for (irep_no = start_index; irep_no < mrb->irep_len; irep_no++) {
382
- rlen = write_lineno_record(mrb, mrb->irep[irep_no], cur);
383
- cur += rlen;
384
- section_size += rlen;
385
- }
408
+ rlen = write_lineno_record(mrb, irep, cur);
409
+ section_size += rlen;
386
410
 
387
- mrb_write_section_lineno_header(mrb, section_size, mrb->irep_len - start_index, start_index, bin);
411
+ write_section_lineno_header(mrb, section_size, bin);
388
412
 
389
413
  return MRB_DUMP_OK;
390
414
  }
@@ -394,11 +418,12 @@ get_debug_record_size(mrb_state *mrb, mrb_irep *irep)
394
418
  {
395
419
  size_t ret = 0;
396
420
  uint32_t f_idx;
421
+ size_t i;
397
422
 
398
423
  ret += sizeof(uint32_t); // record size
399
424
  ret += sizeof(uint16_t); // file count
400
425
 
401
- for(f_idx = 0; f_idx < irep->debug_info->flen; ++f_idx) {
426
+ for (f_idx = 0; f_idx < irep->debug_info->flen; ++f_idx) {
402
427
  mrb_irep_debug_info_file const* file = irep->debug_info->files[f_idx];
403
428
 
404
429
  ret += sizeof(uint32_t); // position
@@ -419,6 +444,9 @@ get_debug_record_size(mrb_state *mrb, mrb_irep *irep)
419
444
  default: mrb_assert(0); break;
420
445
  }
421
446
  }
447
+ for (i=0; i<irep->rlen; i++) {
448
+ ret += get_debug_record_size(mrb, irep->reps[i]);
449
+ }
422
450
 
423
451
  return ret;
424
452
  }
@@ -428,14 +456,50 @@ find_filename_index(const mrb_sym *ary, size_t ary_len, mrb_sym s)
428
456
  {
429
457
  size_t i;
430
458
 
431
- for(i = 0; i < ary_len; ++i) {
432
- if(ary[i] == s) { return i; }
459
+ for (i = 0; i < ary_len; ++i) {
460
+ if (ary[i] == s) { return i; }
433
461
  }
434
462
  return -1;
435
463
  }
436
464
 
465
+ static size_t
466
+ get_filename_table_size(mrb_state *mrb, mrb_irep *irep, mrb_sym **fp, size_t *lp)
467
+ {
468
+ mrb_sym *filenames = *fp;
469
+ size_t tsize = 0;
470
+ size_t file_i;
471
+ size_t size = 0;
472
+ mrb_irep_debug_info *di = irep->debug_info;
473
+
474
+ if (lp == NULL) {
475
+ lp = &tsize;
476
+ }
477
+ for (file_i = 0; file_i < di->flen; ++file_i) {
478
+ mrb_irep_debug_info_file *file;
479
+ size_t filename_len;
480
+ size_t i;
481
+
482
+ file = di->files[file_i];
483
+ if (find_filename_index(filenames, *lp, file->filename_sym) == -1) {
484
+ // register filename
485
+ *lp += 1;
486
+ *fp = filenames = (mrb_sym *)mrb_realloc(mrb, filenames, sizeof(mrb_sym) * (*lp));
487
+ filenames[*lp - 1] = file->filename_sym;
488
+
489
+ // filename
490
+ mrb_sym2name_len(mrb, file->filename_sym, &filename_len);
491
+ size += sizeof(uint16_t) + filename_len;
492
+ }
493
+ for (i=0; i<irep->rlen; i++) {
494
+ size += get_filename_table_size(mrb, irep->reps[i], fp, lp);
495
+ filenames = *fp;
496
+ }
497
+ }
498
+ return size;
499
+ }
500
+
437
501
  static int
438
- write_debug_record(mrb_state *mrb, mrb_irep *irep, uint8_t *bin, mrb_sym const* filenames, size_t filenames_len)
502
+ write_debug_record_1(mrb_state *mrb, mrb_irep *irep, uint8_t *bin, mrb_sym const* filenames, size_t filenames_len)
439
503
  {
440
504
  uint8_t *cur;
441
505
  uint32_t f_idx;
@@ -444,7 +508,7 @@ write_debug_record(mrb_state *mrb, mrb_irep *irep, uint8_t *bin, mrb_sym const*
444
508
  cur = bin + sizeof(uint32_t); // skip record size
445
509
  cur += uint16_to_bin(irep->debug_info->flen, cur); // file count
446
510
 
447
- for(f_idx = 0; f_idx < irep->debug_info->flen; ++f_idx) {
511
+ for (f_idx = 0; f_idx < irep->debug_info->flen; ++f_idx) {
448
512
  int filename_idx;
449
513
  const mrb_irep_debug_info_file *file = irep->debug_info->files[f_idx];
450
514
 
@@ -453,7 +517,7 @@ write_debug_record(mrb_state *mrb, mrb_irep *irep, uint8_t *bin, mrb_sym const*
453
517
 
454
518
  // filename index
455
519
  filename_idx = find_filename_index(filenames, filenames_len,
456
- file->filename_sym);
520
+ file->filename_sym);
457
521
  mrb_assert(filename_idx != -1);
458
522
  cur += uint16_to_bin(filename_idx, cur);
459
523
 
@@ -463,14 +527,14 @@ write_debug_record(mrb_state *mrb, mrb_irep *irep, uint8_t *bin, mrb_sym const*
463
527
  switch(file->line_type) {
464
528
  case mrb_debug_line_ary: {
465
529
  size_t l;
466
- for(l = 0; l < file->line_entry_count; ++l) {
530
+ for (l = 0; l < file->line_entry_count; ++l) {
467
531
  cur += uint16_to_bin(file->line_ary[l], cur);
468
532
  }
469
533
  } break;
470
534
 
471
535
  case mrb_debug_line_flat_map: {
472
536
  uint32_t line;
473
- for(line = 0; line < file->line_entry_count; ++line) {
537
+ for (line = 0; line < file->line_entry_count; ++line) {
474
538
  cur += uint32_to_bin(file->line_flat_map[line].start_pos, cur);
475
539
  cur += uint16_to_bin(file->line_flat_map[line].line, cur);
476
540
  }
@@ -483,26 +547,70 @@ write_debug_record(mrb_state *mrb, mrb_irep *irep, uint8_t *bin, mrb_sym const*
483
547
  ret = cur - bin;
484
548
  uint32_to_bin(ret, bin);
485
549
 
486
- mrb_assert((cur - bin) == (int)get_debug_record_size(mrb, irep));
487
-
488
550
  return ret;
489
551
  }
490
552
 
491
553
  static int
492
- mrb_write_section_debug(mrb_state *mrb, size_t start_index, uint8_t *cur)
554
+ write_debug_record(mrb_state *mrb, mrb_irep *irep, uint8_t *bin, mrb_sym const* filenames, size_t filenames_len)
555
+ {
556
+ uint32_t size, len;
557
+ size_t irep_no;
558
+
559
+ size = len = write_debug_record_1(mrb, irep, bin, filenames, filenames_len);
560
+ bin += len;
561
+ for (irep_no = 0; irep_no < irep->rlen; irep_no++) {
562
+ len = write_debug_record(mrb, irep->reps[irep_no], bin, filenames, filenames_len);
563
+ bin += len;
564
+ size += len;
565
+ }
566
+
567
+ mrb_assert(size == (int)get_debug_record_size(mrb, irep));
568
+ return size;
569
+ }
570
+
571
+ static int
572
+ write_filename_table(mrb_state *mrb, mrb_irep *irep, uint8_t **cp, mrb_sym **fp, size_t *lp)
573
+ {
574
+ uint8_t *cur = *cp;
575
+ mrb_sym *filenames = *fp;
576
+ size_t file_i;
577
+ uint16_t fn_len;
578
+ size_t size = 0;
579
+ mrb_irep_debug_info *debug_info = irep->debug_info;
580
+
581
+ for (file_i = 0; file_i < debug_info->flen; ++file_i) {
582
+ mrb_irep_debug_info_file *file = debug_info->files[file_i];
583
+ if (find_filename_index(filenames, *lp, file->filename_sym) != -1) continue;
584
+
585
+ // register filename
586
+ *lp += 1;
587
+ *fp = filenames = (mrb_sym*)mrb_realloc(mrb, filenames, sizeof(mrb_sym) * (*lp));
588
+ filenames[*lp - 1] = file->filename_sym;
589
+
590
+ // filename
591
+ fn_len = (uint16_t)strlen(file->filename);
592
+ cur += uint16_to_bin(fn_len, cur);
593
+ memcpy(cur, file->filename, fn_len);
594
+ cur += fn_len;
595
+
596
+ size += sizeof(uint16_t) + fn_len;
597
+ }
598
+ *cp = cur;
599
+ return size;
600
+ }
601
+
602
+ static int
603
+ write_section_debug(mrb_state *mrb, mrb_irep *irep, uint8_t *cur)
493
604
  {
494
605
  uint32_t section_size = 0;
495
606
  const uint8_t *bin = cur;
496
607
  struct rite_section_debug_header *header;
497
608
  mrb_sym *filenames;
498
- size_t filenames_len;
609
+ size_t filenames_len = 0, i;
499
610
  uint8_t *filenames_len_out;
500
- size_t irep_i;
501
- size_t file_i;
502
- uint16_t fn_len;
503
- size_t i;
611
+ uint32_t dlen;
504
612
 
505
- if (mrb == NULL || start_index >= mrb->irep_len || cur == NULL) {
613
+ if (mrb == NULL || cur == NULL) {
506
614
  return MRB_DUMP_INVALID_ARGUMENT;
507
615
  }
508
616
 
@@ -511,44 +619,22 @@ mrb_write_section_debug(mrb_state *mrb, size_t start_index, uint8_t *cur)
511
619
  section_size += sizeof(struct rite_section_debug_header);
512
620
 
513
621
  // filename table
514
- filenames = (mrb_sym *)mrb_malloc(mrb, sizeof(mrb_sym *) * 1);
515
- filenames_len = 0;
622
+ filenames = (mrb_sym *)mrb_malloc(mrb, sizeof(mrb_sym) * 1);
516
623
  filenames_len_out = cur;
517
624
  cur += sizeof(uint16_t);
518
625
  section_size += sizeof(uint16_t);
519
- for (irep_i = start_index; irep_i < mrb->irep_len; ++irep_i) {
520
- mrb_irep_debug_info *debug_info = mrb->irep[irep_i]->debug_info;
521
-
522
- for(file_i = 0; file_i < debug_info->flen; ++file_i) {
523
- mrb_irep_debug_info_file *file = debug_info->files[file_i];
524
- if(find_filename_index(filenames, filenames_len, file->filename_sym) != -1) continue;
525
-
526
- // register filename
527
- filenames = (mrb_sym*)mrb_realloc(mrb, filenames, sizeof(mrb_sym*) * ++filenames_len);
528
- filenames[filenames_len - 1] = file->filename_sym;
529
-
530
- // filename
531
- fn_len = (uint16_t)strlen(file->filename);
532
- cur += uint16_to_bin(fn_len, cur);
533
- memcpy(cur, file->filename, fn_len);
534
- cur += fn_len;
535
-
536
- section_size += sizeof(uint16_t) + fn_len;
537
- }
626
+ section_size += write_filename_table(mrb, irep, &cur, &filenames, &filenames_len);
627
+ for (i=0; i<irep->rlen; i++) {
628
+ section_size += write_filename_table(mrb, irep->reps[i], &cur, &filenames, &filenames_len);
538
629
  }
539
630
  uint16_to_bin(filenames_len, filenames_len_out);
540
631
 
541
- // records
542
- for (i = start_index; i < mrb->irep_len; ++i) {
543
- uint32_t rlen = write_debug_record(mrb, mrb->irep[i], cur, filenames, filenames_len);
544
- cur += rlen;
545
- section_size += rlen;
546
- }
632
+ // debug records
633
+ dlen = write_debug_record(mrb, irep, cur, filenames, filenames_len);
634
+ section_size += dlen;
547
635
 
548
636
  memcpy(header->section_identify, RITE_SECTION_DEBUG_IDENTIFIER, sizeof(header->section_identify));
549
637
  uint32_to_bin(section_size, header->section_size);
550
- uint16_to_bin(mrb->irep_len - start_index, header->nirep);
551
- uint16_to_bin(start_index, header->sirep);
552
638
 
553
639
  mrb_free(mrb, filenames);
554
640
 
@@ -575,124 +661,88 @@ write_rite_binary_header(mrb_state *mrb, size_t binary_size, uint8_t *bin)
575
661
  return MRB_DUMP_OK;
576
662
  }
577
663
 
578
- mrb_bool is_debug_info_defined(mrb_state *mrb, size_t const start_index)
664
+ static mrb_bool
665
+ is_debug_info_defined(mrb_irep *irep)
579
666
  {
580
667
  size_t i;
581
- for (i = start_index; i < mrb->irep_len; ++i) {
582
- if (!mrb->irep[i]->debug_info) { return 0; }
668
+
669
+ if (!irep->debug_info) return 0;
670
+ for (i=0; i<irep->rlen; i++) {
671
+ if (!is_debug_info_defined(irep->reps[i])) return 0;
583
672
  }
584
673
  return 1;
585
674
  }
586
675
 
587
676
  static int
588
- mrb_dump_irep(mrb_state *mrb, size_t start_index, int debug_info, uint8_t **bin, size_t *bin_size)
677
+ dump_irep(mrb_state *mrb, mrb_irep *irep, int debug_info, uint8_t **bin, size_t *bin_size)
589
678
  {
590
679
  int result = MRB_DUMP_GENERAL_FAILURE;
591
- size_t section_size = 0;
592
680
  size_t section_irep_size;
593
681
  size_t section_lineno_size = 0;
594
- size_t irep_no;
595
682
  uint8_t *cur = NULL;
683
+ mrb_bool const debug_info_defined = is_debug_info_defined(irep);
596
684
 
597
- mrb_bool const debug_info_defined = is_debug_info_defined(mrb, start_index);
598
-
599
- if (mrb == NULL || start_index >= mrb->irep_len) {
685
+ if (mrb == NULL) {
600
686
  *bin = NULL;
601
687
  return MRB_DUMP_GENERAL_FAILURE;
602
688
  }
603
689
 
604
690
  section_irep_size = sizeof(struct rite_section_irep_header);
605
- for (irep_no = start_index; irep_no < mrb->irep_len; irep_no++) {
606
- section_irep_size += get_irep_record_size(mrb, mrb->irep[irep_no]);
607
- }
608
- section_size += section_irep_size;
691
+ section_irep_size += get_irep_record_size(mrb, irep);
609
692
 
610
693
  /* DEBUG section size */
611
694
  if (debug_info) {
612
695
  if (debug_info_defined) {
613
696
  mrb_sym *filenames;
614
- size_t filenames_len;
615
- size_t irep_i;
616
- size_t file_i;
617
697
 
618
698
  section_lineno_size += sizeof(struct rite_section_debug_header);
619
-
620
699
  // filename table
621
- filenames = (mrb_sym *)mrb_malloc(mrb, sizeof(mrb_sym *) + 1);
622
- filenames_len = 0;
700
+ filenames = (mrb_sym*)mrb_malloc(mrb, sizeof(mrb_sym) + 1);
701
+
623
702
  // filename table size
624
703
  section_lineno_size += sizeof(uint16_t);
625
- for (irep_i = start_index; irep_i < mrb->irep_len; ++irep_i) {
626
- mrb_irep_debug_info *di = mrb->irep[irep_i]->debug_info;
627
-
628
- for(file_i = 0; file_i < di->flen; ++file_i) {
629
- mrb_irep_debug_info_file *file;
630
- size_t filename_len;
631
-
632
- file = di->files[file_i];
633
- if(find_filename_index(filenames, filenames_len, file->filename_sym) != -1) continue;
634
-
635
- // register filename
636
- filenames = (mrb_sym *)mrb_realloc(mrb, filenames, sizeof(mrb_sym*) * ++filenames_len);
637
- filenames[filenames_len - 1] = file->filename_sym;
638
-
639
- // filename
640
- mrb_sym2name_len(mrb, file->filename_sym, &filename_len);
641
- section_lineno_size += sizeof(uint16_t) + filename_len;
642
- }
643
- }
704
+ section_lineno_size += get_filename_table_size(mrb, irep, &filenames, NULL);
644
705
  mrb_free(mrb, filenames);
645
706
 
646
- for(irep_no = start_index; irep_no < mrb->irep_len; ++irep_no) {
647
- section_lineno_size += get_debug_record_size(mrb, mrb->irep[irep_no]);
648
- }
649
- section_size += section_lineno_size;
707
+ section_lineno_size += get_debug_record_size(mrb, irep);
650
708
  }
651
709
  else {
652
710
  section_lineno_size += sizeof(struct rite_section_lineno_header);
653
- for (irep_no = start_index; irep_no < mrb->irep_len; irep_no++) {
654
- section_lineno_size += get_lineno_record_size(mrb, mrb->irep[irep_no]);
655
- }
656
- section_size += section_lineno_size;
711
+ section_lineno_size += get_lineno_record_size(mrb, irep);
657
712
  }
658
713
  }
659
714
 
660
- *bin_size += sizeof(struct rite_binary_header) + section_size + sizeof(struct rite_binary_footer);
661
- cur = *bin = (uint8_t *)mrb_malloc(mrb, *bin_size);
715
+ *bin_size = sizeof(struct rite_binary_header) +
716
+ section_irep_size + section_lineno_size +
717
+ sizeof(struct rite_binary_footer);
718
+ cur = *bin = (uint8_t*)mrb_malloc(mrb, *bin_size);
662
719
  if (cur == NULL) {
663
720
  goto error_exit;
664
721
  }
665
-
666
722
  cur += sizeof(struct rite_binary_header);
667
723
 
668
- result = mrb_write_section_irep(mrb, start_index, cur);
724
+ result = write_section_irep(mrb, irep, cur);
669
725
  if (result != MRB_DUMP_OK) {
670
726
  goto error_exit;
671
727
  }
672
-
673
728
  cur += section_irep_size;
674
729
 
675
730
  /* write DEBUG section */
676
731
  if (debug_info) {
677
- if(debug_info_defined) {
678
- result = mrb_write_section_debug(mrb, start_index, cur);
679
- if(result != MRB_DUMP_OK) {
680
- goto error_exit;
681
- }
682
- cur += section_lineno_size;
732
+ if (debug_info_defined) {
733
+ result = write_section_debug(mrb, irep, cur);
683
734
  }
684
735
  else {
685
- result = mrb_write_section_lineno(mrb, start_index, cur);
686
- if (result != MRB_DUMP_OK) {
687
- goto error_exit;
688
- }
689
- cur += section_lineno_size;
736
+ result = write_section_lineno(mrb, irep, cur);
690
737
  }
738
+ if (result != MRB_DUMP_OK) {
739
+ goto error_exit;
740
+ }
741
+ cur += section_lineno_size;
691
742
  }
692
743
 
693
- mrb_write_eof(mrb, cur);
694
-
695
- result = write_rite_binary_header(mrb, *bin_size, *bin);
744
+ write_footer(mrb, cur);
745
+ write_rite_binary_header(mrb, *bin_size, *bin);
696
746
 
697
747
  error_exit:
698
748
  if (result != MRB_DUMP_OK) {
@@ -706,7 +756,7 @@ error_exit:
706
756
  #ifdef ENABLE_STDIO
707
757
 
708
758
  int
709
- mrb_dump_irep_binary(mrb_state *mrb, size_t start_index, int debug_info, FILE* fp)
759
+ mrb_dump_irep_binary(mrb_state *mrb, mrb_irep *irep, int debug_info, FILE* fp)
710
760
  {
711
761
  uint8_t *bin = NULL;
712
762
  size_t bin_size = 0;
@@ -716,7 +766,7 @@ mrb_dump_irep_binary(mrb_state *mrb, size_t start_index, int debug_info, FILE* f
716
766
  return MRB_DUMP_INVALID_ARGUMENT;
717
767
  }
718
768
 
719
- result = mrb_dump_irep(mrb, start_index, debug_info, &bin, &bin_size);
769
+ result = dump_irep(mrb, irep, debug_info, &bin, &bin_size);
720
770
  if (result == MRB_DUMP_OK) {
721
771
  fwrite(bin, bin_size, 1, fp);
722
772
  }
@@ -742,7 +792,7 @@ is_valid_c_symbol_name(const char *name)
742
792
  }
743
793
 
744
794
  int
745
- mrb_dump_irep_cfunc(mrb_state *mrb, size_t start_index, int debug_info, FILE *fp, const char *initname)
795
+ mrb_dump_irep_cfunc(mrb_state *mrb, mrb_irep *irep, int debug_info, FILE *fp, const char *initname)
746
796
  {
747
797
  uint8_t *bin = NULL;
748
798
  size_t bin_size = 0, bin_idx = 0;
@@ -752,12 +802,12 @@ mrb_dump_irep_cfunc(mrb_state *mrb, size_t start_index, int debug_info, FILE *fp
752
802
  return MRB_DUMP_INVALID_ARGUMENT;
753
803
  }
754
804
 
755
- result = mrb_dump_irep(mrb, start_index, debug_info, &bin, &bin_size);
805
+ result = dump_irep(mrb, irep, debug_info, &bin, &bin_size);
756
806
  if (result == MRB_DUMP_OK) {
757
807
  fprintf(fp, "#include <stdint.h>\n"); // for uint8_t under at least Darwin
758
808
  fprintf(fp, "const uint8_t %s[] = {", initname);
759
809
  while (bin_idx < bin_size) {
760
- if (bin_idx % 16 == 0 ) fputs("\n", fp);
810
+ if (bin_idx % 16 == 0) fputs("\n", fp);
761
811
  fprintf(fp, "0x%02x,", bin[bin_idx++]);
762
812
  }
763
813
  fputs("\n};\n", fp);