diff options
author | Mike Pall <mike> | 2013-02-27 17:11:31 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2013-02-27 17:29:35 +0100 |
commit | 28cfcf77445e144335961a020e3e08d84cf0091f (patch) | |
tree | 1a769d0ee0fab26a79073a118ba4f9e1557b081a | |
parent | d44337a566bb3de06a6ac4ecf2d2a77767b86029 (diff) | |
download | luajit-28cfcf77445e144335961a020e3e08d84cf0091f.tar.gz luajit-28cfcf77445e144335961a020e3e08d84cf0091f.tar.bz2 luajit-28cfcf77445e144335961a020e3e08d84cf0091f.zip |
String buffer refactoring, part 1.
Move string buffer handling to lj_buf.*.
Use common buffer resizing function.
-rw-r--r-- | src/Makefile | 2 | ||||
-rw-r--r-- | src/Makefile.dep | 101 | ||||
-rw-r--r-- | src/lib_io.c | 7 | ||||
-rw-r--r-- | src/lib_string.c | 41 | ||||
-rw-r--r-- | src/lj_bcread.c | 23 | ||||
-rw-r--r-- | src/lj_bcwrite.c | 24 | ||||
-rw-r--r-- | src/lj_buf.c | 40 | ||||
-rw-r--r-- | src/lj_buf.h | 27 | ||||
-rw-r--r-- | src/lj_cparse.c | 12 | ||||
-rw-r--r-- | src/lj_gc.c | 4 | ||||
-rw-r--r-- | src/lj_lex.c | 15 | ||||
-rw-r--r-- | src/lj_lex.h | 1 | ||||
-rw-r--r-- | src/lj_load.c | 3 | ||||
-rw-r--r-- | src/lj_meta.c | 9 | ||||
-rw-r--r-- | src/lj_obj.h | 2 | ||||
-rw-r--r-- | src/lj_opt_loop.c | 4 | ||||
-rw-r--r-- | src/lj_opt_split.c | 3 | ||||
-rw-r--r-- | src/lj_parse.c | 13 | ||||
-rw-r--r-- | src/lj_state.c | 5 | ||||
-rw-r--r-- | src/lj_str.c | 34 | ||||
-rw-r--r-- | src/lj_str.h | 10 | ||||
-rw-r--r-- | src/ljamalg.c | 1 |
22 files changed, 197 insertions, 184 deletions
diff --git a/src/Makefile b/src/Makefile index 95671792..0065b8c2 100644 --- a/src/Makefile +++ b/src/Makefile | |||
@@ -436,7 +436,7 @@ LJLIB_O= lib_base.o lib_math.o lib_bit.o lib_string.o lib_table.o \ | |||
436 | lib_io.o lib_os.o lib_package.o lib_debug.o lib_jit.o lib_ffi.o | 436 | lib_io.o lib_os.o lib_package.o lib_debug.o lib_jit.o lib_ffi.o |
437 | LJLIB_C= $(LJLIB_O:.o=.c) | 437 | LJLIB_C= $(LJLIB_O:.o=.c) |
438 | 438 | ||
439 | LJCORE_O= lj_gc.o lj_err.o lj_char.o lj_bc.o lj_obj.o \ | 439 | LJCORE_O= lj_gc.o lj_err.o lj_char.o lj_bc.o lj_obj.o lj_buf.o \ |
440 | lj_str.o lj_tab.o lj_func.o lj_udata.o lj_meta.o lj_debug.o \ | 440 | lj_str.o lj_tab.o lj_func.o lj_udata.o lj_meta.o lj_debug.o \ |
441 | lj_state.o lj_dispatch.o lj_vmevent.o lj_vmmath.o lj_strscan.o \ | 441 | lj_state.o lj_dispatch.o lj_vmevent.o lj_vmmath.o lj_strscan.o \ |
442 | lj_api.o lj_lex.o lj_parse.o lj_bcread.o lj_bcwrite.o lj_load.o \ | 442 | lj_api.o lj_lex.o lj_parse.o lj_bcread.o lj_bcwrite.o lj_load.o \ |
diff --git a/src/Makefile.dep b/src/Makefile.dep index 10118c5e..56594704 100644 --- a/src/Makefile.dep +++ b/src/Makefile.dep | |||
@@ -17,8 +17,8 @@ lib_ffi.o: lib_ffi.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h lj_def.h \ | |||
17 | lj_ccallback.h lj_clib.h lj_ff.h lj_ffdef.h lj_lib.h lj_libdef.h | 17 | lj_ccallback.h lj_clib.h lj_ff.h lj_ffdef.h lj_lib.h lj_libdef.h |
18 | lib_init.o: lib_init.c lua.h luaconf.h lauxlib.h lualib.h lj_arch.h | 18 | lib_init.o: lib_init.c lua.h luaconf.h lauxlib.h lualib.h lj_arch.h |
19 | lib_io.o: lib_io.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h lj_def.h \ | 19 | lib_io.o: lib_io.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h lj_def.h \ |
20 | lj_arch.h lj_err.h lj_errmsg.h lj_str.h lj_state.h lj_ff.h lj_ffdef.h \ | 20 | lj_arch.h lj_err.h lj_errmsg.h lj_buf.h lj_str.h lj_state.h lj_ff.h \ |
21 | lj_lib.h lj_libdef.h | 21 | lj_ffdef.h lj_lib.h lj_libdef.h |
22 | lib_jit.o: lib_jit.c lua.h luaconf.h lauxlib.h lualib.h lj_arch.h \ | 22 | lib_jit.o: lib_jit.c lua.h luaconf.h lauxlib.h lualib.h lj_arch.h \ |
23 | lj_obj.h lj_def.h lj_err.h lj_errmsg.h lj_debug.h lj_str.h lj_tab.h \ | 23 | lj_obj.h lj_def.h lj_err.h lj_errmsg.h lj_debug.h lj_str.h lj_tab.h \ |
24 | lj_bc.h lj_ir.h lj_jit.h lj_ircall.h lj_iropt.h lj_target.h \ | 24 | lj_bc.h lj_ir.h lj_jit.h lj_ircall.h lj_iropt.h lj_target.h \ |
@@ -32,8 +32,8 @@ lib_package.o: lib_package.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h \ | |||
32 | lj_def.h lj_arch.h lj_err.h lj_errmsg.h lj_lib.h | 32 | lj_def.h lj_arch.h lj_err.h lj_errmsg.h lj_lib.h |
33 | lib_string.o: lib_string.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h \ | 33 | lib_string.o: lib_string.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h \ |
34 | lj_def.h lj_arch.h lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h \ | 34 | lj_def.h lj_arch.h lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h \ |
35 | lj_meta.h lj_state.h lj_ff.h lj_ffdef.h lj_bcdump.h lj_lex.h lj_char.h \ | 35 | lj_meta.h lj_state.h lj_ff.h lj_ffdef.h lj_bcdump.h lj_lex.h lj_buf.h \ |
36 | lj_lib.h lj_libdef.h | 36 | lj_char.h lj_lib.h lj_libdef.h |
37 | lib_table.o: lib_table.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h \ | 37 | lib_table.o: lib_table.c lua.h luaconf.h lauxlib.h lualib.h lj_obj.h \ |
38 | lj_def.h lj_arch.h lj_gc.h lj_err.h lj_errmsg.h lj_tab.h lj_lib.h \ | 38 | lj_def.h lj_arch.h lj_gc.h lj_err.h lj_errmsg.h lj_tab.h lj_lib.h \ |
39 | lj_libdef.h | 39 | lj_libdef.h |
@@ -50,11 +50,13 @@ lj_asm.o: lj_asm.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \ | |||
50 | lj_bc.o: lj_bc.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_bc.h \ | 50 | lj_bc.o: lj_bc.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_bc.h \ |
51 | lj_bcdef.h | 51 | lj_bcdef.h |
52 | lj_bcread.o: lj_bcread.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ | 52 | lj_bcread.o: lj_bcread.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ |
53 | lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_bc.h lj_ctype.h \ | 53 | lj_gc.h lj_err.h lj_errmsg.h lj_buf.h lj_str.h lj_tab.h lj_bc.h \ |
54 | lj_cdata.h lualib.h lj_lex.h lj_bcdump.h lj_state.h | 54 | lj_ctype.h lj_cdata.h lualib.h lj_lex.h lj_bcdump.h lj_state.h |
55 | lj_bcwrite.o: lj_bcwrite.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ | 55 | lj_bcwrite.o: lj_bcwrite.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ |
56 | lj_gc.h lj_str.h lj_bc.h lj_ctype.h lj_dispatch.h lj_jit.h lj_ir.h \ | 56 | lj_gc.h lj_buf.h lj_str.h lj_bc.h lj_ctype.h lj_dispatch.h lj_jit.h \ |
57 | lj_bcdump.h lj_lex.h lj_err.h lj_errmsg.h lj_vm.h | 57 | lj_ir.h lj_bcdump.h lj_lex.h lj_err.h lj_errmsg.h lj_vm.h |
58 | lj_buf.o: lj_buf.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \ | ||
59 | lj_err.h lj_errmsg.h lj_buf.h | ||
58 | lj_carith.o: lj_carith.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ | 60 | lj_carith.o: lj_carith.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ |
59 | lj_gc.h lj_err.h lj_errmsg.h lj_tab.h lj_meta.h lj_ctype.h lj_cconv.h \ | 61 | lj_gc.h lj_err.h lj_errmsg.h lj_tab.h lj_meta.h lj_ctype.h lj_cconv.h \ |
60 | lj_cdata.h lj_carith.h | 62 | lj_cdata.h lj_carith.h |
@@ -78,8 +80,8 @@ lj_clib.o: lj_clib.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \ | |||
78 | lj_err.h lj_errmsg.h lj_tab.h lj_str.h lj_udata.h lj_ctype.h lj_cconv.h \ | 80 | lj_err.h lj_errmsg.h lj_tab.h lj_str.h lj_udata.h lj_ctype.h lj_cconv.h \ |
79 | lj_cdata.h lj_clib.h | 81 | lj_cdata.h lj_clib.h |
80 | lj_cparse.o: lj_cparse.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ | 82 | lj_cparse.o: lj_cparse.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ |
81 | lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_ctype.h lj_cparse.h lj_frame.h \ | 83 | lj_gc.h lj_err.h lj_errmsg.h lj_buf.h lj_str.h lj_ctype.h lj_cparse.h \ |
82 | lj_bc.h lj_vm.h lj_char.h lj_strscan.h | 84 | lj_frame.h lj_bc.h lj_vm.h lj_char.h lj_strscan.h |
83 | lj_crecord.o: lj_crecord.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ | 85 | lj_crecord.o: lj_crecord.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ |
84 | lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_frame.h lj_bc.h lj_ctype.h \ | 86 | lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_frame.h lj_bc.h lj_ctype.h \ |
85 | lj_gc.h lj_cdata.h lj_cparse.h lj_cconv.h lj_clib.h lj_ccall.h lj_ff.h \ | 87 | lj_gc.h lj_cdata.h lj_cparse.h lj_cconv.h lj_clib.h lj_ccall.h lj_ff.h \ |
@@ -109,9 +111,9 @@ lj_func.o: lj_func.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \ | |||
109 | lj_func.h lj_trace.h lj_jit.h lj_ir.h lj_dispatch.h lj_bc.h \ | 111 | lj_func.h lj_trace.h lj_jit.h lj_ir.h lj_dispatch.h lj_bc.h \ |
110 | lj_traceerr.h lj_vm.h | 112 | lj_traceerr.h lj_vm.h |
111 | lj_gc.o: lj_gc.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \ | 113 | lj_gc.o: lj_gc.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \ |
112 | lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_func.h lj_udata.h lj_meta.h \ | 114 | lj_err.h lj_errmsg.h lj_buf.h lj_str.h lj_tab.h lj_func.h lj_udata.h \ |
113 | lj_state.h lj_frame.h lj_bc.h lj_ctype.h lj_cdata.h lj_trace.h lj_jit.h \ | 115 | lj_meta.h lj_state.h lj_frame.h lj_bc.h lj_ctype.h lj_cdata.h lj_trace.h \ |
114 | lj_ir.h lj_dispatch.h lj_traceerr.h lj_vm.h | 116 | lj_jit.h lj_ir.h lj_dispatch.h lj_traceerr.h lj_vm.h |
115 | lj_gdbjit.o: lj_gdbjit.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ | 117 | lj_gdbjit.o: lj_gdbjit.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ |
116 | lj_gc.h lj_err.h lj_errmsg.h lj_debug.h lj_frame.h lj_bc.h lj_jit.h \ | 118 | lj_gc.h lj_err.h lj_errmsg.h lj_debug.h lj_frame.h lj_bc.h lj_jit.h \ |
117 | lj_ir.h lj_dispatch.h | 119 | lj_ir.h lj_dispatch.h |
@@ -121,20 +123,20 @@ lj_ir.o: lj_ir.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \ | |||
121 | lj_vm.h lj_strscan.h lj_lib.h | 123 | lj_vm.h lj_strscan.h lj_lib.h |
122 | lj_lex.o: lj_lex.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \ | 124 | lj_lex.o: lj_lex.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \ |
123 | lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_ctype.h lj_cdata.h lualib.h \ | 125 | lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_ctype.h lj_cdata.h lualib.h \ |
124 | lj_state.h lj_lex.h lj_parse.h lj_char.h lj_strscan.h | 126 | lj_state.h lj_lex.h lj_buf.h lj_parse.h lj_char.h lj_strscan.h |
125 | lj_lib.o: lj_lib.c lauxlib.h lua.h luaconf.h lj_obj.h lj_def.h lj_arch.h \ | 127 | lj_lib.o: lj_lib.c lauxlib.h lua.h luaconf.h lj_obj.h lj_def.h lj_arch.h \ |
126 | lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_func.h lj_bc.h \ | 128 | lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_func.h lj_bc.h \ |
127 | lj_dispatch.h lj_jit.h lj_ir.h lj_vm.h lj_strscan.h lj_lex.h lj_bcdump.h \ | 129 | lj_dispatch.h lj_jit.h lj_ir.h lj_vm.h lj_strscan.h lj_lex.h lj_buf.h \ |
128 | lj_lib.h | 130 | lj_bcdump.h lj_lib.h |
129 | lj_load.o: lj_load.c lua.h luaconf.h lauxlib.h lj_obj.h lj_def.h \ | 131 | lj_load.o: lj_load.c lua.h luaconf.h lauxlib.h lj_obj.h lj_def.h \ |
130 | lj_arch.h lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_func.h lj_frame.h \ | 132 | lj_arch.h lj_gc.h lj_err.h lj_errmsg.h lj_buf.h lj_str.h lj_func.h \ |
131 | lj_bc.h lj_vm.h lj_lex.h lj_bcdump.h lj_parse.h | 133 | lj_frame.h lj_bc.h lj_vm.h lj_lex.h lj_bcdump.h lj_parse.h |
132 | lj_mcode.o: lj_mcode.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ | 134 | lj_mcode.o: lj_mcode.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ |
133 | lj_gc.h lj_jit.h lj_ir.h lj_mcode.h lj_trace.h lj_dispatch.h lj_bc.h \ | 135 | lj_gc.h lj_jit.h lj_ir.h lj_mcode.h lj_trace.h lj_dispatch.h lj_bc.h \ |
134 | lj_traceerr.h lj_vm.h | 136 | lj_traceerr.h lj_vm.h |
135 | lj_meta.o: lj_meta.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \ | 137 | lj_meta.o: lj_meta.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \ |
136 | lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_meta.h lj_frame.h lj_bc.h \ | 138 | lj_err.h lj_errmsg.h lj_buf.h lj_str.h lj_tab.h lj_meta.h lj_frame.h \ |
137 | lj_vm.h lj_strscan.h lj_lib.h | 139 | lj_bc.h lj_vm.h lj_strscan.h lj_lib.h |
138 | lj_obj.o: lj_obj.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h | 140 | lj_obj.o: lj_obj.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h |
139 | lj_opt_dce.o: lj_opt_dce.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ | 141 | lj_opt_dce.o: lj_opt_dce.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ |
140 | lj_ir.h lj_jit.h lj_iropt.h | 142 | lj_ir.h lj_jit.h lj_iropt.h |
@@ -143,8 +145,8 @@ lj_opt_fold.o: lj_opt_fold.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ | |||
143 | lj_bc.h lj_traceerr.h lj_ctype.h lj_gc.h lj_carith.h lj_vm.h \ | 145 | lj_bc.h lj_traceerr.h lj_ctype.h lj_gc.h lj_carith.h lj_vm.h \ |
144 | lj_strscan.h lj_folddef.h | 146 | lj_strscan.h lj_folddef.h |
145 | lj_opt_loop.o: lj_opt_loop.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ | 147 | lj_opt_loop.o: lj_opt_loop.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ |
146 | lj_err.h lj_errmsg.h lj_str.h lj_ir.h lj_jit.h lj_iropt.h lj_trace.h \ | 148 | lj_err.h lj_errmsg.h lj_buf.h lj_str.h lj_ir.h lj_jit.h lj_iropt.h \ |
147 | lj_dispatch.h lj_bc.h lj_traceerr.h lj_snap.h lj_vm.h | 149 | lj_trace.h lj_dispatch.h lj_bc.h lj_traceerr.h lj_snap.h lj_vm.h |
148 | lj_opt_mem.o: lj_opt_mem.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ | 150 | lj_opt_mem.o: lj_opt_mem.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ |
149 | lj_tab.h lj_ir.h lj_jit.h lj_iropt.h | 151 | lj_tab.h lj_ir.h lj_jit.h lj_iropt.h |
150 | lj_opt_narrow.o: lj_opt_narrow.c lj_obj.h lua.h luaconf.h lj_def.h \ | 152 | lj_opt_narrow.o: lj_opt_narrow.c lj_obj.h lua.h luaconf.h lj_def.h \ |
@@ -153,11 +155,12 @@ lj_opt_narrow.o: lj_opt_narrow.c lj_obj.h lua.h luaconf.h lj_def.h \ | |||
153 | lj_opt_sink.o: lj_opt_sink.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ | 155 | lj_opt_sink.o: lj_opt_sink.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ |
154 | lj_ir.h lj_jit.h lj_iropt.h lj_target.h lj_target_*.h | 156 | lj_ir.h lj_jit.h lj_iropt.h lj_target.h lj_target_*.h |
155 | lj_opt_split.o: lj_opt_split.c lj_obj.h lua.h luaconf.h lj_def.h \ | 157 | lj_opt_split.o: lj_opt_split.c lj_obj.h lua.h luaconf.h lj_def.h \ |
156 | lj_arch.h lj_err.h lj_errmsg.h lj_str.h lj_ir.h lj_jit.h lj_ircall.h \ | 158 | lj_arch.h lj_err.h lj_errmsg.h lj_buf.h lj_str.h lj_ir.h lj_jit.h \ |
157 | lj_iropt.h lj_vm.h | 159 | lj_ircall.h lj_iropt.h lj_vm.h |
158 | lj_parse.o: lj_parse.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ | 160 | lj_parse.o: lj_parse.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ |
159 | lj_gc.h lj_err.h lj_errmsg.h lj_debug.h lj_str.h lj_tab.h lj_func.h \ | 161 | lj_gc.h lj_err.h lj_errmsg.h lj_debug.h lj_str.h lj_tab.h lj_func.h \ |
160 | lj_state.h lj_bc.h lj_ctype.h lj_lex.h lj_parse.h lj_vm.h lj_vmevent.h | 162 | lj_state.h lj_bc.h lj_ctype.h lj_lex.h lj_buf.h lj_parse.h lj_vm.h \ |
163 | lj_vmevent.h | ||
161 | lj_record.o: lj_record.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ | 164 | lj_record.o: lj_record.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ |
162 | lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_meta.h lj_frame.h lj_bc.h \ | 165 | lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_meta.h lj_frame.h lj_bc.h \ |
163 | lj_ctype.h lj_gc.h lj_ff.h lj_ffdef.h lj_ir.h lj_jit.h lj_ircall.h \ | 166 | lj_ctype.h lj_gc.h lj_ff.h lj_ffdef.h lj_ir.h lj_jit.h lj_ircall.h \ |
@@ -168,11 +171,11 @@ lj_snap.o: lj_snap.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \ | |||
168 | lj_trace.h lj_dispatch.h lj_traceerr.h lj_snap.h lj_target.h \ | 171 | lj_trace.h lj_dispatch.h lj_traceerr.h lj_snap.h lj_target.h \ |
169 | lj_target_*.h lj_ctype.h lj_cdata.h | 172 | lj_target_*.h lj_ctype.h lj_cdata.h |
170 | lj_state.o: lj_state.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ | 173 | lj_state.o: lj_state.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ |
171 | lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_func.h lj_meta.h \ | 174 | lj_gc.h lj_err.h lj_errmsg.h lj_buf.h lj_str.h lj_tab.h lj_func.h \ |
172 | lj_state.h lj_frame.h lj_bc.h lj_ctype.h lj_trace.h lj_jit.h lj_ir.h \ | 175 | lj_meta.h lj_state.h lj_frame.h lj_bc.h lj_ctype.h lj_trace.h lj_jit.h \ |
173 | lj_dispatch.h lj_traceerr.h lj_vm.h lj_lex.h lj_alloc.h | 176 | lj_ir.h lj_dispatch.h lj_traceerr.h lj_vm.h lj_lex.h lj_alloc.h |
174 | lj_str.o: lj_str.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \ | 177 | lj_str.o: lj_str.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \ |
175 | lj_err.h lj_errmsg.h lj_str.h lj_state.h lj_char.h | 178 | lj_err.h lj_errmsg.h lj_buf.h lj_str.h lj_state.h lj_char.h |
176 | lj_strscan.o: lj_strscan.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ | 179 | lj_strscan.o: lj_strscan.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ |
177 | lj_char.h lj_strscan.h | 180 | lj_char.h lj_strscan.h |
178 | lj_tab.o: lj_tab.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \ | 181 | lj_tab.o: lj_tab.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h lj_gc.h \ |
@@ -190,26 +193,26 @@ lj_vmevent.o: lj_vmevent.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ | |||
190 | lj_vmmath.o: lj_vmmath.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ | 193 | lj_vmmath.o: lj_vmmath.c lj_obj.h lua.h luaconf.h lj_def.h lj_arch.h \ |
191 | lj_ir.h lj_vm.h | 194 | lj_ir.h lj_vm.h |
192 | ljamalg.o: ljamalg.c lua.h luaconf.h lauxlib.h lj_gc.c lj_obj.h lj_def.h \ | 195 | ljamalg.o: ljamalg.c lua.h luaconf.h lauxlib.h lj_gc.c lj_obj.h lj_def.h \ |
193 | lj_arch.h lj_gc.h lj_err.h lj_errmsg.h lj_str.h lj_tab.h lj_func.h \ | 196 | lj_arch.h lj_gc.h lj_err.h lj_errmsg.h lj_buf.h lj_str.h lj_tab.h \ |
194 | lj_udata.h lj_meta.h lj_state.h lj_frame.h lj_bc.h lj_ctype.h lj_cdata.h \ | 197 | lj_func.h lj_udata.h lj_meta.h lj_state.h lj_frame.h lj_bc.h lj_ctype.h \ |
195 | lj_trace.h lj_jit.h lj_ir.h lj_dispatch.h lj_traceerr.h lj_vm.h lj_err.c \ | 198 | lj_cdata.h lj_trace.h lj_jit.h lj_ir.h lj_dispatch.h lj_traceerr.h \ |
196 | lj_debug.h lj_ff.h lj_ffdef.h lj_char.c lj_char.h lj_bc.c lj_bcdef.h \ | 199 | lj_vm.h lj_err.c lj_debug.h lj_ff.h lj_ffdef.h lj_char.c lj_char.h \ |
197 | lj_obj.c lj_str.c lj_tab.c lj_func.c lj_udata.c lj_meta.c lj_strscan.h \ | 200 | lj_bc.c lj_bcdef.h lj_obj.c lj_buf.c lj_str.c lj_tab.c lj_func.c \ |
198 | lj_lib.h lj_debug.c lj_state.c lj_lex.h lj_alloc.h lj_dispatch.c \ | 201 | lj_udata.c lj_meta.c lj_strscan.h lj_lib.h lj_debug.c lj_state.c \ |
199 | lj_ccallback.h luajit.h lj_vmevent.c lj_vmevent.h lj_vmmath.c \ | 202 | lj_lex.h lj_alloc.h lj_dispatch.c lj_ccallback.h luajit.h lj_vmevent.c \ |
200 | lj_strscan.c lj_api.c lj_lex.c lualib.h lj_parse.h lj_parse.c \ | 203 | lj_vmevent.h lj_vmmath.c lj_strscan.c lj_api.c lj_lex.c lualib.h \ |
201 | lj_bcread.c lj_bcdump.h lj_bcwrite.c lj_load.c lj_ctype.c lj_cdata.c \ | 204 | lj_parse.h lj_parse.c lj_bcread.c lj_bcdump.h lj_bcwrite.c lj_load.c \ |
202 | lj_cconv.h lj_cconv.c lj_ccall.c lj_ccall.h lj_ccallback.c lj_target.h \ | 205 | lj_ctype.c lj_cdata.c lj_cconv.h lj_cconv.c lj_ccall.c lj_ccall.h \ |
203 | lj_target_*.h lj_mcode.h lj_carith.c lj_carith.h lj_clib.c lj_clib.h \ | 206 | lj_ccallback.c lj_target.h lj_target_*.h lj_mcode.h lj_carith.c \ |
204 | lj_cparse.c lj_cparse.h lj_lib.c lj_ir.c lj_ircall.h lj_iropt.h \ | 207 | lj_carith.h lj_clib.c lj_clib.h lj_cparse.c lj_cparse.h lj_lib.c lj_ir.c \ |
205 | lj_opt_mem.c lj_opt_fold.c lj_folddef.h lj_opt_narrow.c lj_opt_dce.c \ | 208 | lj_ircall.h lj_iropt.h lj_opt_mem.c lj_opt_fold.c lj_folddef.h \ |
206 | lj_opt_loop.c lj_snap.h lj_opt_split.c lj_opt_sink.c lj_mcode.c \ | 209 | lj_opt_narrow.c lj_opt_dce.c lj_opt_loop.c lj_snap.h lj_opt_split.c \ |
207 | lj_snap.c lj_record.c lj_record.h lj_ffrecord.h lj_crecord.c \ | 210 | lj_opt_sink.c lj_mcode.c lj_snap.c lj_record.c lj_record.h lj_ffrecord.h \ |
208 | lj_crecord.h lj_ffrecord.c lj_recdef.h lj_asm.c lj_asm.h lj_emit_*.h \ | 211 | lj_crecord.c lj_crecord.h lj_ffrecord.c lj_recdef.h lj_asm.c lj_asm.h \ |
209 | lj_asm_*.h lj_trace.c lj_gdbjit.h lj_gdbjit.c lj_alloc.c lib_aux.c \ | 212 | lj_emit_*.h lj_asm_*.h lj_trace.c lj_gdbjit.h lj_gdbjit.c lj_alloc.c \ |
210 | lib_base.c lj_libdef.h lib_math.c lib_string.c lib_table.c lib_io.c \ | 213 | lib_aux.c lib_base.c lj_libdef.h lib_math.c lib_string.c lib_table.c \ |
211 | lib_os.c lib_package.c lib_debug.c lib_bit.c lib_jit.c lib_ffi.c \ | 214 | lib_io.c lib_os.c lib_package.c lib_debug.c lib_bit.c lib_jit.c \ |
212 | lib_init.c | 215 | lib_ffi.c lib_init.c |
213 | luajit.o: luajit.c lua.h luaconf.h lauxlib.h lualib.h luajit.h lj_arch.h | 216 | luajit.o: luajit.c lua.h luaconf.h lauxlib.h lualib.h luajit.h lj_arch.h |
214 | host/buildvm.o: host/buildvm.c host/buildvm.h lj_def.h lua.h luaconf.h \ | 217 | host/buildvm.o: host/buildvm.c host/buildvm.h lj_def.h lua.h luaconf.h \ |
215 | lj_arch.h lj_obj.h lj_def.h lj_arch.h lj_gc.h lj_obj.h lj_bc.h lj_ir.h \ | 218 | lj_arch.h lj_obj.h lj_def.h lj_arch.h lj_gc.h lj_obj.h lj_bc.h lj_ir.h \ |
diff --git a/src/lib_io.c b/src/lib_io.c index 8858683f..e9472ba5 100644 --- a/src/lib_io.c +++ b/src/lib_io.c | |||
@@ -18,6 +18,7 @@ | |||
18 | 18 | ||
19 | #include "lj_obj.h" | 19 | #include "lj_obj.h" |
20 | #include "lj_err.h" | 20 | #include "lj_err.h" |
21 | #include "lj_buf.h" | ||
21 | #include "lj_str.h" | 22 | #include "lj_str.h" |
22 | #include "lj_state.h" | 23 | #include "lj_state.h" |
23 | #include "lj_ff.h" | 24 | #include "lj_ff.h" |
@@ -144,7 +145,7 @@ static int io_file_readline(lua_State *L, FILE *fp, MSize chop) | |||
144 | MSize m = LUAL_BUFFERSIZE, n = 0, ok = 0; | 145 | MSize m = LUAL_BUFFERSIZE, n = 0, ok = 0; |
145 | char *buf; | 146 | char *buf; |
146 | for (;;) { | 147 | for (;;) { |
147 | buf = lj_str_needbuf(L, &G(L)->tmpbuf, m); | 148 | buf = lj_buf_tmp(L, m); |
148 | if (fgets(buf+n, m-n, fp) == NULL) break; | 149 | if (fgets(buf+n, m-n, fp) == NULL) break; |
149 | n += (MSize)strlen(buf+n); | 150 | n += (MSize)strlen(buf+n); |
150 | ok |= n; | 151 | ok |= n; |
@@ -159,7 +160,7 @@ static void io_file_readall(lua_State *L, FILE *fp) | |||
159 | { | 160 | { |
160 | MSize m, n; | 161 | MSize m, n; |
161 | for (m = LUAL_BUFFERSIZE, n = 0; ; m += m) { | 162 | for (m = LUAL_BUFFERSIZE, n = 0; ; m += m) { |
162 | char *buf = lj_str_needbuf(L, &G(L)->tmpbuf, m); | 163 | char *buf = lj_buf_tmp(L, m); |
163 | n += (MSize)fread(buf+n, 1, m-n, fp); | 164 | n += (MSize)fread(buf+n, 1, m-n, fp); |
164 | if (n != m) { | 165 | if (n != m) { |
165 | setstrV(L, L->top++, lj_str_new(L, buf, (size_t)n)); | 166 | setstrV(L, L->top++, lj_str_new(L, buf, (size_t)n)); |
@@ -171,7 +172,7 @@ static void io_file_readall(lua_State *L, FILE *fp) | |||
171 | static int io_file_readlen(lua_State *L, FILE *fp, MSize m) | 172 | static int io_file_readlen(lua_State *L, FILE *fp, MSize m) |
172 | { | 173 | { |
173 | if (m) { | 174 | if (m) { |
174 | char *buf = lj_str_needbuf(L, &G(L)->tmpbuf, m); | 175 | char *buf = lj_buf_tmp(L, m); |
175 | MSize n = (MSize)fread(buf, 1, m, fp); | 176 | MSize n = (MSize)fread(buf, 1, m, fp); |
176 | setstrV(L, L->top++, lj_str_new(L, buf, (size_t)n)); | 177 | setstrV(L, L->top++, lj_str_new(L, buf, (size_t)n)); |
177 | return (n > 0 || m == 0); | 178 | return (n > 0 || m == 0); |
diff --git a/src/lib_string.c b/src/lib_string.c index 9e8ab900..5fdfcd91 100644 --- a/src/lib_string.c +++ b/src/lib_string.c | |||
@@ -64,7 +64,7 @@ LJLIB_ASM(string_byte) LJLIB_REC(string_range 0) | |||
64 | LJLIB_ASM(string_char) | 64 | LJLIB_ASM(string_char) |
65 | { | 65 | { |
66 | int i, nargs = (int)(L->top - L->base); | 66 | int i, nargs = (int)(L->top - L->base); |
67 | char *buf = lj_str_needbuf(L, &G(L)->tmpbuf, (size_t)nargs); | 67 | char *buf = lj_buf_tmp(L, (size_t)nargs); |
68 | for (i = 1; i <= nargs; i++) { | 68 | for (i = 1; i <= nargs; i++) { |
69 | int32_t k = lj_lib_checkint(L, i); | 69 | int32_t k = lj_lib_checkint(L, i); |
70 | if (!checku8(k)) | 70 | if (!checku8(k)) |
@@ -91,8 +91,6 @@ LJLIB_ASM(string_rep) | |||
91 | int32_t len = (int32_t)s->len; | 91 | int32_t len = (int32_t)s->len; |
92 | global_State *g = G(L); | 92 | global_State *g = G(L); |
93 | int64_t tlen; | 93 | int64_t tlen; |
94 | const char *src; | ||
95 | char *buf; | ||
96 | if (k <= 0) { | 94 | if (k <= 0) { |
97 | empty: | 95 | empty: |
98 | setstrV(L, L->base-1, &g->strempty); | 96 | setstrV(L, L->base-1, &g->strempty); |
@@ -110,31 +108,34 @@ LJLIB_ASM(string_rep) | |||
110 | if (tlen > LJ_MAX_STR) | 108 | if (tlen > LJ_MAX_STR) |
111 | lj_err_caller(L, LJ_ERR_STROV); | 109 | lj_err_caller(L, LJ_ERR_STROV); |
112 | } | 110 | } |
113 | if (tlen == 0) goto empty; | 111 | if (tlen == 0) { |
114 | buf = lj_str_needbuf(L, &g->tmpbuf, (MSize)tlen); | 112 | goto empty; |
115 | src = strdata(s); | 113 | } else { |
116 | if (sep) { | 114 | char *buf = lj_buf_tmp(L, (MSize)tlen), *p = buf; |
117 | tlen -= sep->len; /* Ignore trailing separator. */ | 115 | const char *src = strdata(s); |
118 | if (k > 1) { /* Paste one string and one separator. */ | 116 | if (sep) { |
119 | int32_t i; | 117 | tlen -= sep->len; /* Ignore trailing separator. */ |
120 | i = 0; while (i < len) *buf++ = src[i++]; | 118 | if (k > 1) { /* Paste one string and one separator. */ |
121 | src = strdata(sep); len = sep->len; | 119 | int32_t i; |
122 | i = 0; while (i < len) *buf++ = src[i++]; | 120 | i = 0; while (i < len) *p++ = src[i++]; |
123 | src = g->tmpbuf.buf; len += s->len; k--; /* Now copy that k-1 times. */ | 121 | src = strdata(sep); len = sep->len; |
122 | i = 0; while (i < len) *p++ = src[i++]; | ||
123 | src = buf; len += s->len; k--; /* Now copy that k-1 times. */ | ||
124 | } | ||
124 | } | 125 | } |
126 | do { | ||
127 | int32_t i = 0; | ||
128 | do { *p++ = src[i++]; } while (i < len); | ||
129 | } while (--k > 0); | ||
130 | setstrV(L, L->base-1, lj_str_new(L, buf, (size_t)tlen)); | ||
125 | } | 131 | } |
126 | do { | ||
127 | int32_t i = 0; | ||
128 | do { *buf++ = src[i++]; } while (i < len); | ||
129 | } while (--k > 0); | ||
130 | setstrV(L, L->base-1, lj_str_new(L, g->tmpbuf.buf, (size_t)tlen)); | ||
131 | return FFH_RES(1); | 132 | return FFH_RES(1); |
132 | } | 133 | } |
133 | 134 | ||
134 | LJLIB_ASM(string_reverse) | 135 | LJLIB_ASM(string_reverse) |
135 | { | 136 | { |
136 | GCstr *s = lj_lib_checkstr(L, 1); | 137 | GCstr *s = lj_lib_checkstr(L, 1); |
137 | lj_str_needbuf(L, &G(L)->tmpbuf, s->len); | 138 | lj_buf_tmp(L, s->len); |
138 | return FFH_RETRY; | 139 | return FFH_RETRY; |
139 | } | 140 | } |
140 | LJLIB_ASM_(string_lower) | 141 | LJLIB_ASM_(string_lower) |
diff --git a/src/lj_bcread.c b/src/lj_bcread.c index 7a8c08f5..fabe76da 100644 --- a/src/lj_bcread.c +++ b/src/lj_bcread.c | |||
@@ -9,6 +9,7 @@ | |||
9 | #include "lj_obj.h" | 9 | #include "lj_obj.h" |
10 | #include "lj_gc.h" | 10 | #include "lj_gc.h" |
11 | #include "lj_err.h" | 11 | #include "lj_err.h" |
12 | #include "lj_buf.h" | ||
12 | #include "lj_str.h" | 13 | #include "lj_str.h" |
13 | #include "lj_tab.h" | 14 | #include "lj_tab.h" |
14 | #include "lj_bc.h" | 15 | #include "lj_bc.h" |
@@ -42,17 +43,6 @@ static LJ_NOINLINE void bcread_error(LexState *ls, ErrMsg em) | |||
42 | lj_err_throw(L, LUA_ERRSYNTAX); | 43 | lj_err_throw(L, LUA_ERRSYNTAX); |
43 | } | 44 | } |
44 | 45 | ||
45 | /* Resize input buffer. */ | ||
46 | static void bcread_resize(LexState *ls, MSize len) | ||
47 | { | ||
48 | if (ls->sb.sz < len) { | ||
49 | MSize sz = ls->sb.sz * 2; | ||
50 | while (len > sz) sz = sz * 2; | ||
51 | lj_str_resizebuf(ls->L, &ls->sb, sz); | ||
52 | /* Caveat: this may change ls->sb.buf which may affect ls->p. */ | ||
53 | } | ||
54 | } | ||
55 | |||
56 | /* Refill buffer if needed. */ | 46 | /* Refill buffer if needed. */ |
57 | static LJ_NOINLINE void bcread_fill(LexState *ls, MSize len, int need) | 47 | static LJ_NOINLINE void bcread_fill(LexState *ls, MSize len, int need) |
58 | { | 48 | { |
@@ -68,8 +58,7 @@ static LJ_NOINLINE void bcread_fill(LexState *ls, MSize len, int need) | |||
68 | if (ls->n != ls->sb.n) | 58 | if (ls->n != ls->sb.n) |
69 | memmove(ls->sb.buf, ls->p, ls->n); | 59 | memmove(ls->sb.buf, ls->p, ls->n); |
70 | } else { /* Copy from buffer provided by reader. */ | 60 | } else { /* Copy from buffer provided by reader. */ |
71 | bcread_resize(ls, len); | 61 | memcpy(lj_buf_need(ls->L, &ls->sb, len), ls->p, ls->n); |
72 | memcpy(ls->sb.buf, ls->p, ls->n); | ||
73 | } | 62 | } |
74 | ls->p = ls->sb.buf; | 63 | ls->p = ls->sb.buf; |
75 | } | 64 | } |
@@ -82,10 +71,10 @@ static LJ_NOINLINE void bcread_fill(LexState *ls, MSize len, int need) | |||
82 | } | 71 | } |
83 | if (ls->sb.n) { /* Append to buffer. */ | 72 | if (ls->sb.n) { /* Append to buffer. */ |
84 | MSize n = ls->sb.n + (MSize)size; | 73 | MSize n = ls->sb.n + (MSize)size; |
85 | bcread_resize(ls, n < len ? len : n); | 74 | char *p = lj_buf_need(ls->L, &ls->sb, n < len ? len : n); |
86 | memcpy(ls->sb.buf + ls->sb.n, buf, size); | 75 | memcpy(p + ls->sb.n, buf, size); |
87 | ls->n = ls->sb.n = n; | 76 | ls->n = ls->sb.n = n; |
88 | ls->p = ls->sb.buf; | 77 | ls->p = p; |
89 | } else { /* Return buffer provided by reader. */ | 78 | } else { /* Return buffer provided by reader. */ |
90 | ls->n = (MSize)size; | 79 | ls->n = (MSize)size; |
91 | ls->p = buf; | 80 | ls->p = buf; |
@@ -442,7 +431,7 @@ GCproto *lj_bcread(LexState *ls) | |||
442 | lua_State *L = ls->L; | 431 | lua_State *L = ls->L; |
443 | lua_assert(ls->current == BCDUMP_HEAD1); | 432 | lua_assert(ls->current == BCDUMP_HEAD1); |
444 | bcread_savetop(L, ls, L->top); | 433 | bcread_savetop(L, ls, L->top); |
445 | lj_str_resetbuf(&ls->sb); | 434 | lj_buf_reset(&ls->sb); |
446 | /* Check for a valid bytecode dump header. */ | 435 | /* Check for a valid bytecode dump header. */ |
447 | if (!bcread_header(ls)) | 436 | if (!bcread_header(ls)) |
448 | bcread_error(ls, LJ_ERR_BCFMT); | 437 | bcread_error(ls, LJ_ERR_BCFMT); |
diff --git a/src/lj_bcwrite.c b/src/lj_bcwrite.c index 4805d515..474234c5 100644 --- a/src/lj_bcwrite.c +++ b/src/lj_bcwrite.c | |||
@@ -8,6 +8,7 @@ | |||
8 | 8 | ||
9 | #include "lj_obj.h" | 9 | #include "lj_obj.h" |
10 | #include "lj_gc.h" | 10 | #include "lj_gc.h" |
11 | #include "lj_buf.h" | ||
11 | #include "lj_str.h" | 12 | #include "lj_str.h" |
12 | #include "lj_bc.h" | 13 | #include "lj_bc.h" |
13 | #if LJ_HASFFI | 14 | #if LJ_HASFFI |
@@ -33,19 +34,10 @@ typedef struct BCWriteCtx { | |||
33 | 34 | ||
34 | /* -- Output buffer handling ---------------------------------------------- */ | 35 | /* -- Output buffer handling ---------------------------------------------- */ |
35 | 36 | ||
36 | /* Resize buffer if needed. */ | 37 | /* Ensure a certain amount of buffer space. */ |
37 | static LJ_NOINLINE void bcwrite_resize(BCWriteCtx *ctx, MSize len) | ||
38 | { | ||
39 | MSize sz = ctx->sb.sz * 2; | ||
40 | while (ctx->sb.n + len > sz) sz = sz * 2; | ||
41 | lj_str_resizebuf(ctx->L, &ctx->sb, sz); | ||
42 | } | ||
43 | |||
44 | /* Need a certain amount of buffer space. */ | ||
45 | static LJ_AINLINE void bcwrite_need(BCWriteCtx *ctx, MSize len) | 38 | static LJ_AINLINE void bcwrite_need(BCWriteCtx *ctx, MSize len) |
46 | { | 39 | { |
47 | if (LJ_UNLIKELY(ctx->sb.n + len > ctx->sb.sz)) | 40 | lj_buf_need(ctx->L, &ctx->sb, ctx->sb.n + len); |
48 | bcwrite_resize(ctx, len); | ||
49 | } | 41 | } |
50 | 42 | ||
51 | /* Add memory block to buffer. */ | 43 | /* Add memory block to buffer. */ |
@@ -285,7 +277,7 @@ static void bcwrite_proto(BCWriteCtx *ctx, GCproto *pt) | |||
285 | } | 277 | } |
286 | 278 | ||
287 | /* Start writing the prototype info to a buffer. */ | 279 | /* Start writing the prototype info to a buffer. */ |
288 | lj_str_resetbuf(&ctx->sb); | 280 | lj_buf_reset(&ctx->sb); |
289 | ctx->sb.n = 5; /* Leave room for final size. */ | 281 | ctx->sb.n = 5; /* Leave room for final size. */ |
290 | bcwrite_need(ctx, 4+6*5+(pt->sizebc-1)*(MSize)sizeof(BCIns)+pt->sizeuv*2); | 282 | bcwrite_need(ctx, 4+6*5+(pt->sizebc-1)*(MSize)sizeof(BCIns)+pt->sizeuv*2); |
291 | 283 | ||
@@ -338,7 +330,7 @@ static void bcwrite_header(BCWriteCtx *ctx) | |||
338 | GCstr *chunkname = proto_chunkname(ctx->pt); | 330 | GCstr *chunkname = proto_chunkname(ctx->pt); |
339 | const char *name = strdata(chunkname); | 331 | const char *name = strdata(chunkname); |
340 | MSize len = chunkname->len; | 332 | MSize len = chunkname->len; |
341 | lj_str_resetbuf(&ctx->sb); | 333 | lj_buf_reset(&ctx->sb); |
342 | bcwrite_need(ctx, 5+5+len); | 334 | bcwrite_need(ctx, 5+5+len); |
343 | bcwrite_byte(ctx, BCDUMP_HEAD1); | 335 | bcwrite_byte(ctx, BCDUMP_HEAD1); |
344 | bcwrite_byte(ctx, BCDUMP_HEAD2); | 336 | bcwrite_byte(ctx, BCDUMP_HEAD2); |
@@ -368,7 +360,7 @@ static TValue *cpwriter(lua_State *L, lua_CFunction dummy, void *ud) | |||
368 | { | 360 | { |
369 | BCWriteCtx *ctx = (BCWriteCtx *)ud; | 361 | BCWriteCtx *ctx = (BCWriteCtx *)ud; |
370 | UNUSED(dummy); | 362 | UNUSED(dummy); |
371 | lj_str_resizebuf(L, &ctx->sb, 1024); /* Avoids resize for most prototypes. */ | 363 | lj_buf_grow(L, &ctx->sb, 1024); /* Avoids resize for most prototypes. */ |
372 | bcwrite_header(ctx); | 364 | bcwrite_header(ctx); |
373 | bcwrite_proto(ctx, ctx->pt); | 365 | bcwrite_proto(ctx, ctx->pt); |
374 | bcwrite_footer(ctx); | 366 | bcwrite_footer(ctx); |
@@ -387,10 +379,10 @@ int lj_bcwrite(lua_State *L, GCproto *pt, lua_Writer writer, void *data, | |||
387 | ctx.wdata = data; | 379 | ctx.wdata = data; |
388 | ctx.strip = strip; | 380 | ctx.strip = strip; |
389 | ctx.status = 0; | 381 | ctx.status = 0; |
390 | lj_str_initbuf(&ctx.sb); | 382 | lj_buf_init(&ctx.sb); |
391 | status = lj_vm_cpcall(L, NULL, &ctx, cpwriter); | 383 | status = lj_vm_cpcall(L, NULL, &ctx, cpwriter); |
392 | if (status == 0) status = ctx.status; | 384 | if (status == 0) status = ctx.status; |
393 | lj_str_freebuf(G(ctx.L), &ctx.sb); | 385 | lj_buf_free(G(ctx.L), &ctx.sb); |
394 | return status; | 386 | return status; |
395 | } | 387 | } |
396 | 388 | ||
diff --git a/src/lj_buf.c b/src/lj_buf.c new file mode 100644 index 00000000..5d901d2a --- /dev/null +++ b/src/lj_buf.c | |||
@@ -0,0 +1,40 @@ | |||
1 | /* | ||
2 | ** Buffer handling. | ||
3 | ** Copyright (C) 2005-2013 Mike Pall. See Copyright Notice in luajit.h | ||
4 | */ | ||
5 | |||
6 | #include <stdio.h> | ||
7 | |||
8 | #define lj_buf_c | ||
9 | #define LUA_CORE | ||
10 | |||
11 | #include "lj_obj.h" | ||
12 | #include "lj_gc.h" | ||
13 | #include "lj_err.h" | ||
14 | #include "lj_buf.h" | ||
15 | |||
16 | LJ_NOINLINE void lj_buf_grow(lua_State *L, SBuf *sb, MSize sz) | ||
17 | { | ||
18 | MSize bsz = sb->sz * 2; | ||
19 | if (LJ_UNLIKELY(sz > LJ_MAX_MEM)) | ||
20 | lj_err_mem(L); | ||
21 | if (bsz < LJ_MIN_SBUF) bsz = LJ_MIN_SBUF; | ||
22 | while (bsz < sz) bsz += bsz; | ||
23 | sb->buf = lj_mem_realloc(L, sb->buf, sb->sz, bsz); | ||
24 | sb->sz = bsz; | ||
25 | } | ||
26 | |||
27 | char *lj_buf_tmp(lua_State *L, MSize sz) | ||
28 | { | ||
29 | return lj_buf_need(L, &G(L)->tmpbuf, sz); | ||
30 | } | ||
31 | |||
32 | void lj_buf_shrink(lua_State *L, SBuf *sb) | ||
33 | { | ||
34 | MSize sz = sb->sz; | ||
35 | if (sz > 2*LJ_MIN_SBUF) { | ||
36 | sb->buf = lj_mem_realloc(L, sb->buf, sz, (sz >> 1)); | ||
37 | sb->sz = (sz >> 1); | ||
38 | } | ||
39 | } | ||
40 | |||
diff --git a/src/lj_buf.h b/src/lj_buf.h new file mode 100644 index 00000000..19f2bb0d --- /dev/null +++ b/src/lj_buf.h | |||
@@ -0,0 +1,27 @@ | |||
1 | /* | ||
2 | ** Buffer handling. | ||
3 | ** Copyright (C) 2005-2013 Mike Pall. See Copyright Notice in luajit.h | ||
4 | */ | ||
5 | |||
6 | #ifndef _LJ_BUF_H | ||
7 | #define _LJ_BUF_H | ||
8 | |||
9 | #include "lj_obj.h" | ||
10 | |||
11 | /* Resizable string buffers. Struct definition in lj_obj.h. */ | ||
12 | LJ_FUNC char *lj_buf_tmp(lua_State *L, MSize sz); | ||
13 | LJ_FUNC void lj_buf_grow(lua_State *L, SBuf *sb, MSize sz); | ||
14 | LJ_FUNC void lj_buf_shrink(lua_State *L, SBuf *sb); | ||
15 | |||
16 | #define lj_buf_init(sb) ((sb)->buf = NULL, (sb)->sz = 0) | ||
17 | #define lj_buf_reset(sb) ((sb)->n = 0) | ||
18 | #define lj_buf_free(g, sb) lj_mem_free(g, (void *)(sb)->buf, (sb)->sz) | ||
19 | |||
20 | static LJ_AINLINE char *lj_buf_need(lua_State *L, SBuf *sb, MSize sz) | ||
21 | { | ||
22 | if (LJ_UNLIKELY(sz > sb->sz)) | ||
23 | lj_buf_grow(L, sb, sz); | ||
24 | return sb->buf; | ||
25 | } | ||
26 | |||
27 | #endif | ||
diff --git a/src/lj_cparse.c b/src/lj_cparse.c index 107c0381..b88ce5d3 100644 --- a/src/lj_cparse.c +++ b/src/lj_cparse.c | |||
@@ -9,6 +9,7 @@ | |||
9 | 9 | ||
10 | #include "lj_gc.h" | 10 | #include "lj_gc.h" |
11 | #include "lj_err.h" | 11 | #include "lj_err.h" |
12 | #include "lj_buf.h" | ||
12 | #include "lj_str.h" | 13 | #include "lj_str.h" |
13 | #include "lj_ctype.h" | 14 | #include "lj_ctype.h" |
14 | #include "lj_cparse.h" | 15 | #include "lj_cparse.h" |
@@ -88,11 +89,9 @@ static LJ_AINLINE CPChar cp_get(CPState *cp) | |||
88 | /* Grow save buffer. */ | 89 | /* Grow save buffer. */ |
89 | static LJ_NOINLINE void cp_save_grow(CPState *cp, CPChar c) | 90 | static LJ_NOINLINE void cp_save_grow(CPState *cp, CPChar c) |
90 | { | 91 | { |
91 | MSize newsize; | ||
92 | if (cp->sb.sz >= CPARSE_MAX_BUF/2) | 92 | if (cp->sb.sz >= CPARSE_MAX_BUF/2) |
93 | cp_err(cp, LJ_ERR_XELEM); | 93 | cp_err(cp, LJ_ERR_XELEM); |
94 | newsize = cp->sb.sz * 2; | 94 | lj_buf_grow(cp->L, &cp->sb, 0); |
95 | lj_str_resizebuf(cp->L, &cp->sb, newsize); | ||
96 | cp->sb.buf[cp->sb.n++] = (char)c; | 95 | cp->sb.buf[cp->sb.n++] = (char)c; |
97 | } | 96 | } |
98 | 97 | ||
@@ -296,7 +295,7 @@ static void cp_comment_cpp(CPState *cp) | |||
296 | /* Lexical scanner for C. Only a minimal subset is implemented. */ | 295 | /* Lexical scanner for C. Only a minimal subset is implemented. */ |
297 | static CPToken cp_next_(CPState *cp) | 296 | static CPToken cp_next_(CPState *cp) |
298 | { | 297 | { |
299 | lj_str_resetbuf(&cp->sb); | 298 | lj_buf_reset(&cp->sb); |
300 | for (;;) { | 299 | for (;;) { |
301 | if (lj_char_isident(cp->c)) | 300 | if (lj_char_isident(cp->c)) |
302 | return lj_char_isdigit(cp->c) ? cp_number(cp) : cp_ident(cp); | 301 | return lj_char_isdigit(cp->c) ? cp_number(cp) : cp_ident(cp); |
@@ -380,8 +379,7 @@ static void cp_init(CPState *cp) | |||
380 | cp->depth = 0; | 379 | cp->depth = 0; |
381 | cp->curpack = 0; | 380 | cp->curpack = 0; |
382 | cp->packstack[0] = 255; | 381 | cp->packstack[0] = 255; |
383 | lj_str_initbuf(&cp->sb); | 382 | lj_buf_init(&cp->sb); |
384 | lj_str_resizebuf(cp->L, &cp->sb, LJ_MIN_SBUF); | ||
385 | lua_assert(cp->p != NULL); | 383 | lua_assert(cp->p != NULL); |
386 | cp_get(cp); /* Read-ahead first char. */ | 384 | cp_get(cp); /* Read-ahead first char. */ |
387 | cp->tok = 0; | 385 | cp->tok = 0; |
@@ -393,7 +391,7 @@ static void cp_init(CPState *cp) | |||
393 | static void cp_cleanup(CPState *cp) | 391 | static void cp_cleanup(CPState *cp) |
394 | { | 392 | { |
395 | global_State *g = G(cp->L); | 393 | global_State *g = G(cp->L); |
396 | lj_str_freebuf(g, &cp->sb); | 394 | lj_buf_free(g, &cp->sb); |
397 | } | 395 | } |
398 | 396 | ||
399 | /* Check and consume optional token. */ | 397 | /* Check and consume optional token. */ |
diff --git a/src/lj_gc.c b/src/lj_gc.c index 79f8b720..4ce6eb19 100644 --- a/src/lj_gc.c +++ b/src/lj_gc.c | |||
@@ -12,6 +12,7 @@ | |||
12 | #include "lj_obj.h" | 12 | #include "lj_obj.h" |
13 | #include "lj_gc.h" | 13 | #include "lj_gc.h" |
14 | #include "lj_err.h" | 14 | #include "lj_err.h" |
15 | #include "lj_buf.h" | ||
15 | #include "lj_str.h" | 16 | #include "lj_str.h" |
16 | #include "lj_tab.h" | 17 | #include "lj_tab.h" |
17 | #include "lj_func.h" | 18 | #include "lj_func.h" |
@@ -353,8 +354,7 @@ static void gc_shrink(global_State *g, lua_State *L) | |||
353 | { | 354 | { |
354 | if (g->strnum <= (g->strmask >> 2) && g->strmask > LJ_MIN_STRTAB*2-1) | 355 | if (g->strnum <= (g->strmask >> 2) && g->strmask > LJ_MIN_STRTAB*2-1) |
355 | lj_str_resize(L, g->strmask >> 1); /* Shrink string table. */ | 356 | lj_str_resize(L, g->strmask >> 1); /* Shrink string table. */ |
356 | if (g->tmpbuf.sz > LJ_MIN_SBUF*2) | 357 | lj_buf_shrink(L, &g->tmpbuf); /* Shrink temp buffer. */ |
357 | lj_str_resizebuf(L, &g->tmpbuf, g->tmpbuf.sz >> 1); /* Shrink temp buf. */ | ||
358 | } | 358 | } |
359 | 359 | ||
360 | /* Type of GC free functions. */ | 360 | /* Type of GC free functions. */ |
diff --git a/src/lj_lex.c b/src/lj_lex.c index 9f2b06f8..3227cadd 100644 --- a/src/lj_lex.c +++ b/src/lj_lex.c | |||
@@ -56,11 +56,9 @@ static int fillbuf(LexState *ls) | |||
56 | 56 | ||
57 | static LJ_NOINLINE void save_grow(LexState *ls, int c) | 57 | static LJ_NOINLINE void save_grow(LexState *ls, int c) |
58 | { | 58 | { |
59 | MSize newsize; | ||
60 | if (ls->sb.sz >= LJ_MAX_STR/2) | 59 | if (ls->sb.sz >= LJ_MAX_STR/2) |
61 | lj_lex_error(ls, 0, LJ_ERR_XELEM); | 60 | lj_lex_error(ls, 0, LJ_ERR_XELEM); |
62 | newsize = ls->sb.sz * 2; | 61 | lj_buf_grow(ls->L, &ls->sb, 0); |
63 | lj_str_resizebuf(ls->L, &ls->sb, newsize); | ||
64 | ls->sb.buf[ls->sb.n++] = (char)c; | 62 | ls->sb.buf[ls->sb.n++] = (char)c; |
65 | } | 63 | } |
66 | 64 | ||
@@ -167,7 +165,7 @@ static void read_long_string(LexState *ls, TValue *tv, int sep) | |||
167 | case '\r': | 165 | case '\r': |
168 | save(ls, '\n'); | 166 | save(ls, '\n'); |
169 | inclinenumber(ls); | 167 | inclinenumber(ls); |
170 | if (!tv) lj_str_resetbuf(&ls->sb); /* avoid wasting space */ | 168 | if (!tv) lj_buf_reset(&ls->sb); /* Don't waste space for comments. */ |
171 | break; | 169 | break; |
172 | default: | 170 | default: |
173 | if (tv) save_and_next(ls); | 171 | if (tv) save_and_next(ls); |
@@ -259,7 +257,7 @@ static void read_string(LexState *ls, int delim, TValue *tv) | |||
259 | 257 | ||
260 | static int llex(LexState *ls, TValue *tv) | 258 | static int llex(LexState *ls, TValue *tv) |
261 | { | 259 | { |
262 | lj_str_resetbuf(&ls->sb); | 260 | lj_buf_reset(&ls->sb); |
263 | for (;;) { | 261 | for (;;) { |
264 | if (lj_char_isident(ls->current)) { | 262 | if (lj_char_isident(ls->current)) { |
265 | GCstr *s; | 263 | GCstr *s; |
@@ -295,10 +293,10 @@ static int llex(LexState *ls, TValue *tv) | |||
295 | next(ls); | 293 | next(ls); |
296 | if (ls->current == '[') { | 294 | if (ls->current == '[') { |
297 | int sep = skip_sep(ls); | 295 | int sep = skip_sep(ls); |
298 | lj_str_resetbuf(&ls->sb); /* `skip_sep' may dirty the buffer */ | 296 | lj_buf_reset(&ls->sb); /* `skip_sep' may dirty the buffer */ |
299 | if (sep >= 0) { | 297 | if (sep >= 0) { |
300 | read_long_string(ls, NULL, sep); /* long comment */ | 298 | read_long_string(ls, NULL, sep); /* long comment */ |
301 | lj_str_resetbuf(&ls->sb); | 299 | lj_buf_reset(&ls->sb); |
302 | continue; | 300 | continue; |
303 | } | 301 | } |
304 | } | 302 | } |
@@ -381,7 +379,6 @@ int lj_lex_setup(lua_State *L, LexState *ls) | |||
381 | ls->lookahead = TK_eof; /* No look-ahead token. */ | 379 | ls->lookahead = TK_eof; /* No look-ahead token. */ |
382 | ls->linenumber = 1; | 380 | ls->linenumber = 1; |
383 | ls->lastline = 1; | 381 | ls->lastline = 1; |
384 | lj_str_resizebuf(ls->L, &ls->sb, LJ_MIN_SBUF); | ||
385 | next(ls); /* Read-ahead first char. */ | 382 | next(ls); /* Read-ahead first char. */ |
386 | if (ls->current == 0xef && ls->n >= 2 && char2int(ls->p[0]) == 0xbb && | 383 | if (ls->current == 0xef && ls->n >= 2 && char2int(ls->p[0]) == 0xbb && |
387 | char2int(ls->p[1]) == 0xbf) { /* Skip UTF-8 BOM (if buffered). */ | 384 | char2int(ls->p[1]) == 0xbf) { /* Skip UTF-8 BOM (if buffered). */ |
@@ -420,7 +417,7 @@ void lj_lex_cleanup(lua_State *L, LexState *ls) | |||
420 | global_State *g = G(L); | 417 | global_State *g = G(L); |
421 | lj_mem_freevec(g, ls->bcstack, ls->sizebcstack, BCInsLine); | 418 | lj_mem_freevec(g, ls->bcstack, ls->sizebcstack, BCInsLine); |
422 | lj_mem_freevec(g, ls->vstack, ls->sizevstack, VarInfo); | 419 | lj_mem_freevec(g, ls->vstack, ls->sizevstack, VarInfo); |
423 | lj_str_freebuf(g, &ls->sb); | 420 | lj_buf_free(g, &ls->sb); |
424 | } | 421 | } |
425 | 422 | ||
426 | void lj_lex_next(LexState *ls) | 423 | void lj_lex_next(LexState *ls) |
diff --git a/src/lj_lex.h b/src/lj_lex.h index 6e18e4b0..7013f6eb 100644 --- a/src/lj_lex.h +++ b/src/lj_lex.h | |||
@@ -10,6 +10,7 @@ | |||
10 | 10 | ||
11 | #include "lj_obj.h" | 11 | #include "lj_obj.h" |
12 | #include "lj_err.h" | 12 | #include "lj_err.h" |
13 | #include "lj_buf.h" | ||
13 | 14 | ||
14 | /* Lua lexer tokens. */ | 15 | /* Lua lexer tokens. */ |
15 | #define TKDEF(_, __) \ | 16 | #define TKDEF(_, __) \ |
diff --git a/src/lj_load.c b/src/lj_load.c index 9d892678..2572e79b 100644 --- a/src/lj_load.c +++ b/src/lj_load.c | |||
@@ -15,6 +15,7 @@ | |||
15 | #include "lj_obj.h" | 15 | #include "lj_obj.h" |
16 | #include "lj_gc.h" | 16 | #include "lj_gc.h" |
17 | #include "lj_err.h" | 17 | #include "lj_err.h" |
18 | #include "lj_buf.h" | ||
18 | #include "lj_str.h" | 19 | #include "lj_str.h" |
19 | #include "lj_func.h" | 20 | #include "lj_func.h" |
20 | #include "lj_frame.h" | 21 | #include "lj_frame.h" |
@@ -54,7 +55,7 @@ LUA_API int lua_loadx(lua_State *L, lua_Reader reader, void *data, | |||
54 | ls.rdata = data; | 55 | ls.rdata = data; |
55 | ls.chunkarg = chunkname ? chunkname : "?"; | 56 | ls.chunkarg = chunkname ? chunkname : "?"; |
56 | ls.mode = mode; | 57 | ls.mode = mode; |
57 | lj_str_initbuf(&ls.sb); | 58 | lj_buf_init(&ls.sb); |
58 | status = lj_vm_cpcall(L, NULL, &ls, cpparser); | 59 | status = lj_vm_cpcall(L, NULL, &ls, cpparser); |
59 | lj_lex_cleanup(L, &ls); | 60 | lj_lex_cleanup(L, &ls); |
60 | lj_gc_check(L); | 61 | lj_gc_check(L); |
diff --git a/src/lj_meta.c b/src/lj_meta.c index e11f1b75..db1ce928 100644 --- a/src/lj_meta.c +++ b/src/lj_meta.c | |||
@@ -12,6 +12,7 @@ | |||
12 | #include "lj_obj.h" | 12 | #include "lj_obj.h" |
13 | #include "lj_gc.h" | 13 | #include "lj_gc.h" |
14 | #include "lj_err.h" | 14 | #include "lj_err.h" |
15 | #include "lj_buf.h" | ||
15 | #include "lj_str.h" | 16 | #include "lj_str.h" |
16 | #include "lj_tab.h" | 17 | #include "lj_tab.h" |
17 | #include "lj_meta.h" | 18 | #include "lj_meta.h" |
@@ -283,7 +284,7 @@ TValue *lj_meta_cat(lua_State *L, TValue *top, int left) | |||
283 | ** next step: [...][CAT stack ............] | 284 | ** next step: [...][CAT stack ............] |
284 | */ | 285 | */ |
285 | MSize tlen = strV(top)->len; | 286 | MSize tlen = strV(top)->len; |
286 | char *buffer; | 287 | char *buf; |
287 | int i; | 288 | int i; |
288 | for (n = 1; n <= left && tostring(L, top-n); n++) { | 289 | for (n = 1; n <= left && tostring(L, top-n); n++) { |
289 | MSize len = strV(top-n)->len; | 290 | MSize len = strV(top-n)->len; |
@@ -291,15 +292,15 @@ TValue *lj_meta_cat(lua_State *L, TValue *top, int left) | |||
291 | lj_err_msg(L, LJ_ERR_STROV); | 292 | lj_err_msg(L, LJ_ERR_STROV); |
292 | tlen += len; | 293 | tlen += len; |
293 | } | 294 | } |
294 | buffer = lj_str_needbuf(L, &G(L)->tmpbuf, tlen); | 295 | buf = lj_buf_tmp(L, tlen); |
295 | n--; | 296 | n--; |
296 | tlen = 0; | 297 | tlen = 0; |
297 | for (i = n; i >= 0; i--) { | 298 | for (i = n; i >= 0; i--) { |
298 | MSize len = strV(top-i)->len; | 299 | MSize len = strV(top-i)->len; |
299 | memcpy(buffer + tlen, strVdata(top-i), len); | 300 | memcpy(buf + tlen, strVdata(top-i), len); |
300 | tlen += len; | 301 | tlen += len; |
301 | } | 302 | } |
302 | setstrV(L, top-n, lj_str_new(L, buffer, tlen)); | 303 | setstrV(L, top-n, lj_str_new(L, buf, tlen)); |
303 | } | 304 | } |
304 | left -= n; | 305 | left -= n; |
305 | top -= n; | 306 | top -= n; |
diff --git a/src/lj_obj.h b/src/lj_obj.h index 6f367ea2..6faedd10 100644 --- a/src/lj_obj.h +++ b/src/lj_obj.h | |||
@@ -119,7 +119,7 @@ typedef int32_t BCLine; /* Bytecode line number. */ | |||
119 | /* Internal assembler functions. Never call these directly from C. */ | 119 | /* Internal assembler functions. Never call these directly from C. */ |
120 | typedef void (*ASMFunction)(void); | 120 | typedef void (*ASMFunction)(void); |
121 | 121 | ||
122 | /* Resizable string buffer. Need this here, details in lj_str.h. */ | 122 | /* Resizable string buffer. Need this here, details in lj_buf.h. */ |
123 | typedef struct SBuf { | 123 | typedef struct SBuf { |
124 | char *buf; /* String buffer base. */ | 124 | char *buf; /* String buffer base. */ |
125 | MSize n; /* String buffer length. */ | 125 | MSize n; /* String buffer length. */ |
diff --git a/src/lj_opt_loop.c b/src/lj_opt_loop.c index 3a119f47..2d574089 100644 --- a/src/lj_opt_loop.c +++ b/src/lj_opt_loop.c | |||
@@ -11,6 +11,7 @@ | |||
11 | #if LJ_HASJIT | 11 | #if LJ_HASJIT |
12 | 12 | ||
13 | #include "lj_err.h" | 13 | #include "lj_err.h" |
14 | #include "lj_buf.h" | ||
14 | #include "lj_str.h" | 15 | #include "lj_str.h" |
15 | #include "lj_ir.h" | 16 | #include "lj_ir.h" |
16 | #include "lj_jit.h" | 17 | #include "lj_jit.h" |
@@ -271,8 +272,7 @@ static void loop_unroll(jit_State *J) | |||
271 | ** Caveat: don't call into the VM or run the GC or the buffer may be gone. | 272 | ** Caveat: don't call into the VM or run the GC or the buffer may be gone. |
272 | */ | 273 | */ |
273 | invar = J->cur.nins; | 274 | invar = J->cur.nins; |
274 | subst = (IRRef1 *)lj_str_needbuf(J->L, &G(J->L)->tmpbuf, | 275 | subst = (IRRef1 *)lj_buf_tmp(J->L, (invar-REF_BIAS)*sizeof(IRRef1))-REF_BIAS; |
275 | (invar-REF_BIAS)*sizeof(IRRef1)) - REF_BIAS; | ||
276 | subst[REF_BASE] = REF_BASE; | 276 | subst[REF_BASE] = REF_BASE; |
277 | 277 | ||
278 | /* LOOP separates the pre-roll from the loop body. */ | 278 | /* LOOP separates the pre-roll from the loop body. */ |
diff --git a/src/lj_opt_split.c b/src/lj_opt_split.c index 303af03c..2b04e77d 100644 --- a/src/lj_opt_split.c +++ b/src/lj_opt_split.c | |||
@@ -11,6 +11,7 @@ | |||
11 | #if LJ_HASJIT && (LJ_SOFTFP || (LJ_32 && LJ_HASFFI)) | 11 | #if LJ_HASJIT && (LJ_SOFTFP || (LJ_32 && LJ_HASFFI)) |
12 | 12 | ||
13 | #include "lj_err.h" | 13 | #include "lj_err.h" |
14 | #include "lj_buf.h" | ||
14 | #include "lj_str.h" | 15 | #include "lj_str.h" |
15 | #include "lj_ir.h" | 16 | #include "lj_ir.h" |
16 | #include "lj_jit.h" | 17 | #include "lj_jit.h" |
@@ -201,7 +202,7 @@ static void split_ir(jit_State *J) | |||
201 | IRRef nins = J->cur.nins, nk = J->cur.nk; | 202 | IRRef nins = J->cur.nins, nk = J->cur.nk; |
202 | MSize irlen = nins - nk; | 203 | MSize irlen = nins - nk; |
203 | MSize need = (irlen+1)*(sizeof(IRIns) + sizeof(IRRef1)); | 204 | MSize need = (irlen+1)*(sizeof(IRIns) + sizeof(IRRef1)); |
204 | IRIns *oir = (IRIns *)lj_str_needbuf(J->L, &G(J->L)->tmpbuf, need); | 205 | IRIns *oir = (IRIns *)lj_buf_tmp(J->L, need); |
205 | IRRef1 *hisubst; | 206 | IRRef1 *hisubst; |
206 | IRRef ref; | 207 | IRRef ref; |
207 | 208 | ||
diff --git a/src/lj_parse.c b/src/lj_parse.c index 7ff7d728..3f992bec 100644 --- a/src/lj_parse.c +++ b/src/lj_parse.c | |||
@@ -1429,18 +1429,9 @@ static void fs_fixup_line(FuncState *fs, GCproto *pt, | |||
1429 | } | 1429 | } |
1430 | } | 1430 | } |
1431 | 1431 | ||
1432 | /* Resize buffer if needed. */ | ||
1433 | static LJ_NOINLINE void fs_buf_resize(LexState *ls, MSize len) | ||
1434 | { | ||
1435 | MSize sz = ls->sb.sz * 2; | ||
1436 | while (ls->sb.n + len > sz) sz = sz * 2; | ||
1437 | lj_str_resizebuf(ls->L, &ls->sb, sz); | ||
1438 | } | ||
1439 | |||
1440 | static LJ_AINLINE void fs_buf_need(LexState *ls, MSize len) | 1432 | static LJ_AINLINE void fs_buf_need(LexState *ls, MSize len) |
1441 | { | 1433 | { |
1442 | if (LJ_UNLIKELY(ls->sb.n + len > ls->sb.sz)) | 1434 | lj_buf_need(ls->L, &ls->sb, ls->sb.n + len); |
1443 | fs_buf_resize(ls, len); | ||
1444 | } | 1435 | } |
1445 | 1436 | ||
1446 | /* Add string to buffer. */ | 1437 | /* Add string to buffer. */ |
@@ -1469,7 +1460,7 @@ static size_t fs_prep_var(LexState *ls, FuncState *fs, size_t *ofsvar) | |||
1469 | VarInfo *vs =ls->vstack, *ve; | 1460 | VarInfo *vs =ls->vstack, *ve; |
1470 | MSize i, n; | 1461 | MSize i, n; |
1471 | BCPos lastpc; | 1462 | BCPos lastpc; |
1472 | lj_str_resetbuf(&ls->sb); /* Copy to temp. string buffer. */ | 1463 | lj_buf_reset(&ls->sb); /* Copy to temp. string buffer. */ |
1473 | /* Store upvalue names. */ | 1464 | /* Store upvalue names. */ |
1474 | for (i = 0, n = fs->nuv; i < n; i++) { | 1465 | for (i = 0, n = fs->nuv; i < n; i++) { |
1475 | GCstr *s = strref(vs[fs->uvmap[i]].name); | 1466 | GCstr *s = strref(vs[fs->uvmap[i]].name); |
diff --git a/src/lj_state.c b/src/lj_state.c index 8c53d37f..6c3e97b1 100644 --- a/src/lj_state.c +++ b/src/lj_state.c | |||
@@ -12,6 +12,7 @@ | |||
12 | #include "lj_obj.h" | 12 | #include "lj_obj.h" |
13 | #include "lj_gc.h" | 13 | #include "lj_gc.h" |
14 | #include "lj_err.h" | 14 | #include "lj_err.h" |
15 | #include "lj_buf.h" | ||
15 | #include "lj_str.h" | 16 | #include "lj_str.h" |
16 | #include "lj_tab.h" | 17 | #include "lj_tab.h" |
17 | #include "lj_func.h" | 18 | #include "lj_func.h" |
@@ -164,7 +165,7 @@ static void close_state(lua_State *L) | |||
164 | lj_ctype_freestate(g); | 165 | lj_ctype_freestate(g); |
165 | #endif | 166 | #endif |
166 | lj_mem_freevec(g, g->strhash, g->strmask+1, GCRef); | 167 | lj_mem_freevec(g, g->strhash, g->strmask+1, GCRef); |
167 | lj_str_freebuf(g, &g->tmpbuf); | 168 | lj_buf_free(g, &g->tmpbuf); |
168 | lj_mem_freevec(g, tvref(L->stack), L->stacksize, TValue); | 169 | lj_mem_freevec(g, tvref(L->stack), L->stacksize, TValue); |
169 | lua_assert(g->gc.total == sizeof(GG_State)); | 170 | lua_assert(g->gc.total == sizeof(GG_State)); |
170 | #ifndef LUAJIT_USE_SYSMALLOC | 171 | #ifndef LUAJIT_USE_SYSMALLOC |
@@ -203,7 +204,7 @@ LUA_API lua_State *lua_newstate(lua_Alloc f, void *ud) | |||
203 | setnilV(&g->nilnode.val); | 204 | setnilV(&g->nilnode.val); |
204 | setnilV(&g->nilnode.key); | 205 | setnilV(&g->nilnode.key); |
205 | setmref(g->nilnode.freetop, &g->nilnode); | 206 | setmref(g->nilnode.freetop, &g->nilnode); |
206 | lj_str_initbuf(&g->tmpbuf); | 207 | lj_buf_init(&g->tmpbuf); |
207 | g->gc.state = GCSpause; | 208 | g->gc.state = GCSpause; |
208 | setgcref(g->gc.root, obj2gco(L)); | 209 | setgcref(g->gc.root, obj2gco(L)); |
209 | setmref(g->gc.sweep, &g->gc.root); | 210 | setmref(g->gc.sweep, &g->gc.root); |
diff --git a/src/lj_str.c b/src/lj_str.c index 6548ee4d..623b362d 100644 --- a/src/lj_str.c +++ b/src/lj_str.c | |||
@@ -1,9 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | ** String handling. | 2 | ** String handling. |
3 | ** Copyright (C) 2005-2013 Mike Pall. See Copyright Notice in luajit.h | 3 | ** Copyright (C) 2005-2013 Mike Pall. See Copyright Notice in luajit.h |
4 | ** | ||
5 | ** Portions taken verbatim or adapted from the Lua interpreter. | ||
6 | ** Copyright (C) 1994-2008 Lua.org, PUC-Rio. See Copyright Notice in lua.h | ||
7 | */ | 4 | */ |
8 | 5 | ||
9 | #include <stdio.h> | 6 | #include <stdio.h> |
@@ -14,6 +11,7 @@ | |||
14 | #include "lj_obj.h" | 11 | #include "lj_obj.h" |
15 | #include "lj_gc.h" | 12 | #include "lj_gc.h" |
16 | #include "lj_err.h" | 13 | #include "lj_err.h" |
14 | #include "lj_buf.h" | ||
17 | #include "lj_str.h" | 15 | #include "lj_str.h" |
18 | #include "lj_state.h" | 16 | #include "lj_state.h" |
19 | #include "lj_char.h" | 17 | #include "lj_char.h" |
@@ -222,33 +220,24 @@ GCstr * LJ_FASTCALL lj_str_fromnumber(lua_State *L, cTValue *o) | |||
222 | 220 | ||
223 | static void addstr(lua_State *L, SBuf *sb, const char *str, MSize len) | 221 | static void addstr(lua_State *L, SBuf *sb, const char *str, MSize len) |
224 | { | 222 | { |
225 | char *p; | ||
226 | MSize i; | 223 | MSize i; |
227 | if (sb->n + len > sb->sz) { | 224 | char *p = lj_buf_need(L, sb, sb->n+len) + sb->n; |
228 | MSize sz = sb->sz * 2; | ||
229 | while (sb->n + len > sz) sz = sz * 2; | ||
230 | lj_str_resizebuf(L, sb, sz); | ||
231 | } | ||
232 | p = sb->buf + sb->n; | ||
233 | sb->n += len; | 225 | sb->n += len; |
234 | for (i = 0; i < len; i++) p[i] = str[i]; | 226 | for (i = 0; i < len; i++) p[i] = str[i]; |
235 | } | 227 | } |
236 | 228 | ||
237 | static void addchar(lua_State *L, SBuf *sb, int c) | 229 | static void addchar(lua_State *L, SBuf *sb, int c) |
238 | { | 230 | { |
239 | if (sb->n + 1 > sb->sz) { | 231 | char *p = lj_buf_need(L, sb, sb->n+1); |
240 | MSize sz = sb->sz * 2; | 232 | p[sb->n++] = (char)c; |
241 | lj_str_resizebuf(L, sb, sz); | ||
242 | } | ||
243 | sb->buf[sb->n++] = (char)c; | ||
244 | } | 233 | } |
245 | 234 | ||
246 | /* Push formatted message as a string object to Lua stack. va_list variant. */ | 235 | /* Push formatted message as a string object to Lua stack. va_list variant. */ |
247 | const char *lj_str_pushvf(lua_State *L, const char *fmt, va_list argp) | 236 | const char *lj_str_pushvf(lua_State *L, const char *fmt, va_list argp) |
248 | { | 237 | { |
249 | SBuf *sb = &G(L)->tmpbuf; | 238 | SBuf *sb = &G(L)->tmpbuf; |
250 | lj_str_needbuf(L, sb, (MSize)strlen(fmt)); | 239 | lj_buf_need(L, sb, (MSize)strlen(fmt)); |
251 | lj_str_resetbuf(sb); | 240 | lj_buf_reset(sb); |
252 | for (;;) { | 241 | for (;;) { |
253 | const char *e = strchr(fmt, '%'); | 242 | const char *e = strchr(fmt, '%'); |
254 | if (e == NULL) break; | 243 | if (e == NULL) break; |
@@ -326,14 +315,3 @@ const char *lj_str_pushf(lua_State *L, const char *fmt, ...) | |||
326 | return msg; | 315 | return msg; |
327 | } | 316 | } |
328 | 317 | ||
329 | /* -- Buffer handling ----------------------------------------------------- */ | ||
330 | |||
331 | char *lj_str_needbuf(lua_State *L, SBuf *sb, MSize sz) | ||
332 | { | ||
333 | if (sz > sb->sz) { | ||
334 | if (sz < LJ_MIN_SBUF) sz = LJ_MIN_SBUF; | ||
335 | lj_str_resizebuf(L, sb, sz); | ||
336 | } | ||
337 | return sb->buf; | ||
338 | } | ||
339 | |||
diff --git a/src/lj_str.h b/src/lj_str.h index 3aa03662..3dcd1a9b 100644 --- a/src/lj_str.h +++ b/src/lj_str.h | |||
@@ -37,14 +37,4 @@ LJ_FUNC const char *lj_str_pushf(lua_State *L, const char *fmt, ...) | |||
37 | #endif | 37 | #endif |
38 | ; | 38 | ; |
39 | 39 | ||
40 | /* Resizable string buffers. Struct definition in lj_obj.h. */ | ||
41 | LJ_FUNC char *lj_str_needbuf(lua_State *L, SBuf *sb, MSize sz); | ||
42 | |||
43 | #define lj_str_initbuf(sb) ((sb)->buf = NULL, (sb)->sz = 0) | ||
44 | #define lj_str_resetbuf(sb) ((sb)->n = 0) | ||
45 | #define lj_str_resizebuf(L, sb, size) \ | ||
46 | ((sb)->buf = (char *)lj_mem_realloc(L, (sb)->buf, (sb)->sz, (size)), \ | ||
47 | (sb)->sz = (size)) | ||
48 | #define lj_str_freebuf(g, sb) lj_mem_free(g, (void *)(sb)->buf, (sb)->sz) | ||
49 | |||
50 | #endif | 40 | #endif |
diff --git a/src/ljamalg.c b/src/ljamalg.c index 962b3134..487609c4 100644 --- a/src/ljamalg.c +++ b/src/ljamalg.c | |||
@@ -33,6 +33,7 @@ | |||
33 | #include "lj_char.c" | 33 | #include "lj_char.c" |
34 | #include "lj_bc.c" | 34 | #include "lj_bc.c" |
35 | #include "lj_obj.c" | 35 | #include "lj_obj.c" |
36 | #include "lj_buf.c" | ||
36 | #include "lj_str.c" | 37 | #include "lj_str.c" |
37 | #include "lj_tab.c" | 38 | #include "lj_tab.c" |
38 | #include "lj_func.c" | 39 | #include "lj_func.c" |