webruby 0.2.2 → 0.2.4
Sign up to get free protection for your applications and to get access to all the features.
- 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);
|