webruby 0.2.2 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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);