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.
- checksums.yaml +4 -4
- data/lib/webruby/config.rb +4 -9
- data/lib/webruby/rake/files.rake +2 -2
- data/modules/emscripten/AUTHORS +9 -1
- data/modules/emscripten/CONTRIBUTING.markdown +5 -0
- data/modules/emscripten/ChangeLog +435 -0
- data/modules/emscripten/cmake/Modules/FindOpenAL.cmake +26 -0
- data/modules/emscripten/cmake/Platform/Emscripten.cmake +9 -2
- data/modules/emscripten/em++ +0 -2
- data/modules/emscripten/emcc +92 -32
- data/modules/emscripten/emlink.py +16 -13
- data/modules/emscripten/emmake +1 -1
- data/modules/emscripten/emrun +918 -0
- data/modules/emscripten/emrun.bat +2 -0
- data/modules/emscripten/emscripten.py +545 -20
- data/modules/emscripten/src/analyzer.js +6 -1
- data/modules/emscripten/src/compiler.js +25 -16
- data/modules/emscripten/src/emrun_postjs.js +20 -0
- data/modules/emscripten/{tests → src}/hello_world.js +0 -0
- data/modules/emscripten/src/intertyper.js +45 -16
- data/modules/emscripten/src/jsifier.js +78 -48
- data/modules/emscripten/src/library.js +381 -96
- data/modules/emscripten/src/library_browser.js +50 -53
- data/modules/emscripten/src/library_egl.js +66 -24
- data/modules/emscripten/src/library_fs.js +122 -90
- data/modules/emscripten/src/library_gl.js +739 -353
- data/modules/emscripten/src/library_glfw.js +9 -3
- data/modules/emscripten/src/library_glut.js +10 -5
- data/modules/emscripten/src/library_idbfs.js +14 -14
- data/modules/emscripten/src/library_memfs.js +65 -41
- data/modules/emscripten/src/library_nodefs.js +61 -9
- data/modules/emscripten/src/library_openal.js +4 -4
- data/modules/emscripten/src/library_path.js +9 -13
- data/modules/emscripten/src/library_sdl.js +301 -64
- data/modules/emscripten/src/library_sockfs.js +7 -5
- data/modules/emscripten/src/modules.js +62 -22
- data/modules/emscripten/src/parseTools.js +135 -102
- data/modules/emscripten/src/postamble.js +3 -4
- data/modules/emscripten/src/preamble.js +49 -29
- data/modules/emscripten/src/proxyClient.js +1 -1
- data/modules/emscripten/src/proxyWorker.js +10 -10
- data/modules/emscripten/src/relooper/Relooper.cpp +15 -4
- data/modules/emscripten/src/runtime.js +32 -8
- data/modules/emscripten/src/settings.js +25 -8
- data/modules/emscripten/src/shell.html +6 -3
- data/modules/emscripten/src/shell.js +13 -11
- data/modules/emscripten/src/simd.js +602 -432
- data/modules/emscripten/src/struct_info.json +22 -2
- data/modules/emscripten/src/utility.js +32 -17
- data/modules/emscripten/system/include/SDL/SDL_events.h +1 -0
- data/modules/emscripten/system/include/compat/ctype.h +17 -0
- data/modules/emscripten/system/include/compat/wchar.h +23 -0
- data/modules/emscripten/system/include/compat/wctype.h +23 -0
- data/modules/emscripten/system/include/emscripten/emmintrin.h +87 -0
- data/modules/emscripten/system/include/emscripten/emscripten.h +30 -4
- data/modules/emscripten/system/include/emscripten/vector.h +29 -1
- data/modules/emscripten/system/include/emscripten/xmmintrin.h +131 -0
- data/modules/emscripten/system/include/libcxx/CREDITS.TXT +9 -1
- data/modules/emscripten/system/include/libcxx/__bit_reference +8 -8
- data/modules/emscripten/system/include/libcxx/__config +95 -17
- data/modules/emscripten/system/include/libcxx/__debug +25 -4
- data/modules/emscripten/system/include/libcxx/__functional_03 +7 -7
- data/modules/emscripten/system/include/libcxx/__functional_base +169 -9
- data/modules/emscripten/system/include/libcxx/__functional_base_03 +1 -1
- data/modules/emscripten/system/include/libcxx/__hash_table +25 -25
- data/modules/emscripten/system/include/libcxx/__locale +21 -19
- data/modules/emscripten/system/include/libcxx/__mutex_base +2 -33
- data/modules/emscripten/system/include/libcxx/__split_buffer +9 -9
- data/modules/emscripten/system/include/libcxx/__std_stream +14 -0
- data/modules/emscripten/system/include/libcxx/__tree +35 -26
- data/modules/emscripten/system/include/libcxx/__tuple +15 -15
- data/modules/emscripten/system/include/libcxx/__tuple_03 +2 -2
- data/modules/emscripten/system/include/libcxx/__undef_min_max +8 -0
- data/modules/emscripten/system/include/libcxx/algorithm +121 -110
- data/modules/emscripten/system/include/libcxx/array +15 -15
- data/modules/emscripten/system/include/libcxx/bitset +4 -4
- data/modules/emscripten/system/include/libcxx/chrono +51 -17
- data/modules/emscripten/system/include/libcxx/cmath +25 -23
- data/modules/emscripten/system/include/libcxx/codecvt +21 -18
- data/modules/emscripten/system/include/libcxx/complex +48 -7
- data/modules/emscripten/system/include/libcxx/cstddef +1 -1
- data/modules/emscripten/system/include/libcxx/cstdio +8 -1
- data/modules/emscripten/system/include/libcxx/cstdlib +1 -1
- data/modules/emscripten/system/include/libcxx/cwchar +1 -1
- data/modules/emscripten/system/include/libcxx/deque +26 -12
- data/modules/emscripten/system/include/libcxx/dynarray +311 -0
- data/modules/emscripten/system/include/libcxx/exception +4 -4
- data/modules/emscripten/system/include/libcxx/ext/__hash +3 -3
- data/modules/emscripten/system/include/libcxx/ext/hash_map +19 -15
- data/modules/emscripten/system/include/libcxx/ext/hash_set +7 -3
- data/modules/emscripten/system/include/libcxx/forward_list +33 -7
- data/modules/emscripten/system/include/libcxx/fstream +4 -4
- data/modules/emscripten/system/include/libcxx/functional +200 -170
- data/modules/emscripten/system/include/libcxx/future +83 -39
- data/modules/emscripten/system/include/libcxx/initializer_list +24 -11
- data/modules/emscripten/system/include/libcxx/iomanip +147 -0
- data/modules/emscripten/system/include/libcxx/ios +24 -16
- data/modules/emscripten/system/include/libcxx/iosfwd +19 -19
- data/modules/emscripten/system/include/libcxx/istream +13 -8
- data/modules/emscripten/system/include/libcxx/iterator +108 -417
- data/modules/emscripten/system/include/libcxx/limits +8 -4
- data/modules/emscripten/system/include/libcxx/list +28 -8
- data/modules/emscripten/system/include/libcxx/locale +153 -390
- data/modules/emscripten/system/include/libcxx/map +280 -100
- data/modules/emscripten/system/include/libcxx/memory +49 -97
- data/modules/emscripten/system/include/libcxx/mutex +2 -2
- data/modules/emscripten/system/include/libcxx/new +43 -14
- data/modules/emscripten/system/include/libcxx/numeric +2 -2
- data/modules/emscripten/system/include/libcxx/optional +697 -0
- data/modules/emscripten/system/include/libcxx/ostream +17 -8
- data/modules/emscripten/system/include/libcxx/queue +5 -5
- data/modules/emscripten/system/include/libcxx/random +53 -51
- data/modules/emscripten/system/include/libcxx/ratio +11 -11
- data/modules/emscripten/system/include/libcxx/readme.txt +1 -1
- data/modules/emscripten/system/include/libcxx/regex +23 -20
- data/modules/emscripten/system/include/libcxx/scoped_allocator +1 -1
- data/modules/emscripten/system/include/libcxx/set +166 -2
- data/modules/emscripten/system/include/libcxx/shared_mutex +419 -0
- data/modules/emscripten/system/include/libcxx/sstream +4 -4
- data/modules/emscripten/system/include/libcxx/stack +3 -3
- data/modules/emscripten/system/include/libcxx/streambuf +5 -5
- data/modules/emscripten/system/include/libcxx/string +372 -324
- data/modules/emscripten/system/include/libcxx/support/ibm/limits.h +99 -0
- data/modules/emscripten/system/include/libcxx/support/ibm/support.h +54 -0
- data/modules/emscripten/system/include/libcxx/support/ibm/xlocale.h +326 -0
- data/modules/emscripten/system/include/libcxx/support/win32/limits_win32.h +6 -6
- data/modules/emscripten/system/include/libcxx/support/win32/locale_win32.h +15 -15
- data/modules/emscripten/system/include/libcxx/support/win32/math_win32.h +2 -0
- data/modules/emscripten/system/include/libcxx/support/win32/support.h +6 -1
- data/modules/emscripten/system/include/libcxx/system_error +14 -8
- data/modules/emscripten/system/include/libcxx/thread +7 -8
- data/modules/emscripten/system/include/libcxx/tuple +29 -88
- data/modules/emscripten/system/include/libcxx/type_traits +253 -209
- data/modules/emscripten/system/include/libcxx/typeindex +3 -3
- data/modules/emscripten/system/include/libcxx/unordered_map +162 -101
- data/modules/emscripten/system/include/libcxx/unordered_set +79 -2
- data/modules/emscripten/system/include/libcxx/utility +20 -20
- data/modules/emscripten/system/include/libcxx/valarray +23 -23
- data/modules/emscripten/system/include/libcxx/vector +114 -91
- data/modules/emscripten/system/lib/libc/musl/src/regex/regcomp.c +3352 -0
- data/modules/emscripten/system/lib/libc/musl/src/regex/regerror.c +35 -0
- data/modules/emscripten/system/lib/libc/musl/src/regex/regexec.c +1011 -0
- data/modules/emscripten/system/lib/libc/musl/src/regex/tre-mem.c +158 -0
- data/modules/emscripten/system/lib/libc/musl/src/regex/tre.h +231 -0
- data/modules/emscripten/system/lib/libcextra.symbols +7 -0
- data/modules/emscripten/system/lib/libcxx/CREDITS.TXT +9 -1
- data/modules/emscripten/system/lib/libcxx/algorithm.cpp +1 -0
- data/modules/emscripten/system/lib/libcxx/debug.cpp +66 -42
- data/modules/emscripten/system/lib/libcxx/exception.cpp +88 -16
- data/modules/emscripten/system/lib/libcxx/future.cpp +6 -0
- data/modules/emscripten/system/lib/libcxx/ios.cpp +7 -2
- data/modules/emscripten/system/lib/libcxx/iostream.cpp +8 -8
- data/modules/emscripten/system/lib/libcxx/locale.cpp +38 -11
- data/modules/emscripten/system/lib/libcxx/mutex.cpp +3 -0
- data/modules/emscripten/system/lib/libcxx/new.cpp +44 -10
- data/modules/emscripten/system/lib/libcxx/optional.cpp +25 -0
- data/modules/emscripten/system/lib/libcxx/random.cpp +26 -0
- data/modules/emscripten/system/lib/libcxx/readme.txt +1 -1
- data/modules/emscripten/system/lib/libcxx/shared_mutex.cpp +101 -0
- data/modules/emscripten/system/lib/libcxx/stdexcept.cpp +11 -7
- data/modules/emscripten/system/lib/libcxx/string.cpp +3 -1
- data/modules/emscripten/system/lib/libcxx/strstream.cpp +7 -7
- data/modules/emscripten/system/lib/libcxx/support/win32/locale_win32.cpp +12 -13
- data/modules/emscripten/system/lib/libcxx/support/win32/support.cpp +33 -36
- data/modules/emscripten/system/lib/libcxx/symbols +187 -168
- data/modules/emscripten/system/lib/libcxx/system_error.cpp +1 -0
- data/modules/emscripten/system/lib/libcxx/thread.cpp +7 -3
- data/modules/emscripten/system/lib/libcxx/typeinfo.cpp +9 -6
- data/modules/emscripten/system/lib/libcxx/valarray.cpp +2 -0
- data/modules/emscripten/third_party/lzma.js/doit.bat +4 -0
- data/modules/emscripten/third_party/lzma.js/doit.sh +9 -2
- data/modules/emscripten/tools/cache.py +5 -7
- data/modules/emscripten/tools/cache.pyc +0 -0
- data/modules/emscripten/tools/eliminator/asm-eliminator-test-output.js +7 -0
- data/modules/emscripten/tools/eliminator/asm-eliminator-test.js +9 -1
- data/modules/emscripten/tools/eliminator/eliminator-test-output.js +3 -0
- data/modules/emscripten/tools/eliminator/eliminator-test.js +9 -1
- data/modules/emscripten/tools/file_packager.py +93 -50
- data/modules/emscripten/tools/js-optimizer.js +98 -48
- data/modules/emscripten/tools/js_optimizer.py +4 -4
- data/modules/emscripten/tools/js_optimizer.pyc +0 -0
- data/modules/emscripten/tools/jsrun.py +1 -1
- data/modules/emscripten/tools/jsrun.pyc +0 -0
- data/modules/emscripten/tools/response_file.py +6 -0
- data/modules/emscripten/tools/response_file.pyc +0 -0
- data/modules/emscripten/tools/settings_template_readonly.py +2 -0
- data/modules/emscripten/tools/shared.py +88 -34
- data/modules/emscripten/tools/shared.pyc +0 -0
- data/modules/emscripten/tools/split.py +21 -13
- data/modules/mruby/build_config.rb +7 -1
- data/modules/mruby/doc/compile/README.md +5 -9
- data/modules/mruby/include/mrbconf.h +5 -2
- data/modules/mruby/include/mruby/array.h +1 -0
- data/modules/mruby/include/mruby/compile.h +2 -4
- data/modules/mruby/include/mruby/dump.h +7 -16
- data/modules/mruby/include/mruby/hash.h +1 -1
- data/modules/mruby/include/mruby/irep.h +14 -2
- data/modules/mruby/include/mruby/khash.h +8 -7
- data/modules/mruby/include/mruby/string.h +1 -0
- data/modules/mruby/include/mruby/value.h +5 -2
- data/modules/mruby/include/mruby.h +12 -13
- data/modules/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c +16 -6
- data/modules/mruby/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c +18 -30
- data/modules/mruby/mrbgems/mruby-fiber/src/fiber.c +21 -0
- data/modules/mruby/mrbgems/mruby-math/src/math.c +1 -1
- data/modules/mruby/mrbgems/mruby-random/src/random.c +144 -47
- data/modules/mruby/mrbgems/mruby-random/test/random.rb +44 -0
- data/modules/mruby/mrbgems/mruby-struct/src/struct.c +5 -5
- data/modules/mruby/mrblib/numeric.rb +99 -33
- data/modules/mruby/src/array.c +11 -4
- data/modules/mruby/src/backtrace.c +2 -2
- data/modules/mruby/src/class.c +49 -30
- data/modules/mruby/src/codegen.c +131 -79
- data/modules/mruby/src/debug.c +1 -1
- data/modules/mruby/src/dump.c +213 -163
- data/modules/mruby/src/error.c +17 -17
- data/modules/mruby/src/error.h +1 -1
- data/modules/mruby/src/etc.c +10 -0
- data/modules/mruby/src/gc.c +35 -17
- data/modules/mruby/src/hash.c +5 -5
- data/modules/mruby/src/kernel.c +36 -14
- data/modules/mruby/src/load.c +238 -296
- data/modules/mruby/src/numeric.c +18 -98
- data/modules/mruby/src/object.c +3 -5
- data/modules/mruby/src/parse.y +63 -56
- data/modules/mruby/src/proc.c +8 -5
- data/modules/mruby/src/re.h +0 -1
- data/modules/mruby/src/state.c +65 -27
- data/modules/mruby/src/string.c +3 -31
- data/modules/mruby/src/symbol.c +3 -3
- data/modules/mruby/src/variable.c +12 -5
- data/modules/mruby/src/vm.c +90 -72
- data/modules/mruby/tasks/mruby_build.rake +10 -1
- data/modules/mruby/tasks/toolchains/gcc.rake +12 -2
- data/modules/mruby/tasks/toolchains/{vs2012.rake → visualcpp.rake} +1 -1
- data/modules/mruby/test/driver.c +3 -3
- data/modules/mruby/test/t/array.rb +5 -5
- data/modules/mruby/test/t/class.rb +14 -1
- data/modules/mruby/test/t/kernel.rb +4 -0
- data/modules/mruby/test/t/module.rb +4 -4
- data/modules/mruby/test/t/nameerror.rb +1 -1
- data/modules/mruby/tools/mrbc/mrbc.c +23 -17
- data/modules/mruby/travis_config.rb +10 -1
- metadata +28 -5
- data/modules/mruby/tasks/toolchains/vs2010.rake +0 -3
data/modules/mruby/src/dump.c
CHANGED
@@ -13,7 +13,7 @@
|
|
13
13
|
#include "mruby/numeric.h"
|
14
14
|
#include "mruby/debug.h"
|
15
15
|
|
16
|
-
static size_t
|
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) *
|
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(
|
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
|
-
|
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
|
-
|
138
|
-
char_ptr = RSTRING_PTR(
|
139
|
-
len = RSTRING_LEN(
|
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
|
-
|
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 =
|
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
|
-
|
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
|
-
|
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
|
-
|
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 ||
|
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
|
-
|
289
|
-
|
290
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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 ||
|
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
|
-
|
382
|
-
|
383
|
-
cur += rlen;
|
384
|
-
section_size += rlen;
|
385
|
-
}
|
408
|
+
rlen = write_lineno_record(mrb, irep, cur);
|
409
|
+
section_size += rlen;
|
386
410
|
|
387
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
501
|
-
size_t file_i;
|
502
|
-
uint16_t fn_len;
|
503
|
-
size_t i;
|
611
|
+
uint32_t dlen;
|
504
612
|
|
505
|
-
if (mrb == 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
|
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
|
-
|
520
|
-
|
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
|
-
|
543
|
-
|
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
|
664
|
+
static mrb_bool
|
665
|
+
is_debug_info_defined(mrb_irep *irep)
|
579
666
|
{
|
580
667
|
size_t i;
|
581
|
-
|
582
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
622
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
661
|
-
|
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 =
|
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 =
|
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 =
|
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
|
-
|
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,
|
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 =
|
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,
|
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 =
|
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
|
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);
|