summaryrefslogtreecommitdiffhomepage
path: root/mrbgems
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2020-06-11 15:37:49 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2020-10-12 16:21:10 +0900
commit52507b1083ba1c562ae506d63a07a51a26815c21 (patch)
tree1c4087091f82fd792b5d81c3ef2c8c384e1854f4 /mrbgems
parent7deb41b0e88b3670476ed86bab541340f5551b52 (diff)
downloadmruby-52507b1083ba1c562ae506d63a07a51a26815c21.tar.gz
mruby-52507b1083ba1c562ae506d63a07a51a26815c21.zip
Generate C struct from `irep` instead of binary dump.
Diffstat (limited to 'mrbgems')
-rw-r--r--mrbgems/mruby-compiler/core/codegen.c2
-rw-r--r--mrbgems/mruby-compiler/core/parse.y4
-rw-r--r--mrbgems/mruby-compiler/core/y.tab.c4
-rw-r--r--mrbgems/mruby-enumerator/mrblib/enumerator.rb1
-rw-r--r--mrbgems/mruby-metaprog/src/metaprog.c7
-rw-r--r--mrbgems/mruby-socket/src/socket.c4
-rw-r--r--mrbgems/mruby-symbol-ext/test/symbol.rb6
-rw-r--r--mrbgems/mruby-test/driver.c4
-rw-r--r--mrbgems/mruby-test/mrbgem.rake14
9 files changed, 25 insertions, 21 deletions
diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c
index 0000e6dbe..5d29dcb2d 100644
--- a/mrbgems/mruby-compiler/core/codegen.c
+++ b/mrbgems/mruby-compiler/core/codegen.c
@@ -706,7 +706,7 @@ lv_idx(codegen_scope *s, mrb_sym id)
static int
search_upvar(codegen_scope *s, mrb_sym id, int *idx)
{
- struct RProc *u;
+ const struct RProc *u;
int lv = 0;
codegen_scope *up = s->prev;
diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y
index cb4126713..c7c3d2a2f 100644
--- a/mrbgems/mruby-compiler/core/parse.y
+++ b/mrbgems/mruby-compiler/core/parse.y
@@ -265,7 +265,7 @@ local_unnest(parser_state *p)
static mrb_bool
local_var_p(parser_state *p, mrb_sym sym)
{
- struct RProc *u;
+ const struct RProc *u;
node *l = p->locals;
while (l) {
@@ -282,7 +282,7 @@ local_var_p(parser_state *p, mrb_sym sym)
const struct mrb_irep *ir = u->body.irep;
uint_fast16_t n = ir->nlocals;
const struct mrb_lvinfo *v = ir->lv;
- for (; n > 1; n --, v ++) {
+ for (; v && n > 1; n--, v++) {
if (v->name == sym) return TRUE;
}
if (MRB_PROC_SCOPE_P(u)) break;
diff --git a/mrbgems/mruby-compiler/core/y.tab.c b/mrbgems/mruby-compiler/core/y.tab.c
index 504ec6d04..dbcc6a5bd 100644
--- a/mrbgems/mruby-compiler/core/y.tab.c
+++ b/mrbgems/mruby-compiler/core/y.tab.c
@@ -328,7 +328,7 @@ local_unnest(parser_state *p)
static mrb_bool
local_var_p(parser_state *p, mrb_sym sym)
{
- struct RProc *u;
+ const struct RProc *u;
node *l = p->locals;
while (l) {
@@ -345,7 +345,7 @@ local_var_p(parser_state *p, mrb_sym sym)
const struct mrb_irep *ir = u->body.irep;
uint_fast16_t n = ir->nlocals;
const struct mrb_lvinfo *v = ir->lv;
- for (; n > 1; n --, v ++) {
+ for (; v && n > 1; n--, v++) {
if (v->name == sym) return TRUE;
}
if (MRB_PROC_SCOPE_P(u)) break;
diff --git a/mrbgems/mruby-enumerator/mrblib/enumerator.rb b/mrbgems/mruby-enumerator/mrblib/enumerator.rb
index 5a98dc964..f007b8553 100644
--- a/mrbgems/mruby-enumerator/mrblib/enumerator.rb
+++ b/mrbgems/mruby-enumerator/mrblib/enumerator.rb
@@ -130,6 +130,7 @@ class Enumerator
@feedvalue = nil
@stop_exc = false
end
+
attr_accessor :obj, :meth, :args
attr_reader :fib
diff --git a/mrbgems/mruby-metaprog/src/metaprog.c b/mrbgems/mruby-metaprog/src/metaprog.c
index 8a4a6dc69..7a7639410 100644
--- a/mrbgems/mruby-metaprog/src/metaprog.c
+++ b/mrbgems/mruby-metaprog/src/metaprog.c
@@ -132,7 +132,7 @@ mrb_obj_ivar_set(mrb_state *mrb, mrb_value self)
static mrb_value
mrb_local_variables(mrb_state *mrb, mrb_value self)
{
- struct RProc *proc;
+ const struct RProc *proc;
const mrb_irep *irep;
mrb_value vars;
size_t i;
@@ -664,7 +664,7 @@ mrb_mod_s_constants(mrb_state *mrb, mrb_value mod)
static mrb_value
mrb_mod_s_nesting(mrb_state *mrb, mrb_value mod)
{
- struct RProc *proc;
+ const struct RProc *proc;
mrb_value ary;
struct RClass *c = NULL;
@@ -684,6 +684,9 @@ mrb_mod_s_nesting(mrb_state *mrb, mrb_value mod)
return ary;
}
+/* implementation of #send method */
+mrb_value mrb_f_send(mrb_state *mrb, mrb_value self);
+
void
mrb_mruby_metaprog_gem_init(mrb_state* mrb)
{
diff --git a/mrbgems/mruby-socket/src/socket.c b/mrbgems/mruby-socket/src/socket.c
index f158959a7..001021b81 100644
--- a/mrbgems/mruby-socket/src/socket.c
+++ b/mrbgems/mruby-socket/src/socket.c
@@ -200,7 +200,7 @@ mrb_addrinfo_getnameinfo(mrb_state *mrb, mrb_value self)
host = mrb_str_buf_new(mrb, NI_MAXHOST);
serv = mrb_str_buf_new(mrb, NI_MAXSERV);
- sastr = mrb_iv_get(mrb, self, MRB_QSYM(a_sockaddr));
+ sastr = mrb_iv_get(mrb, self, MRB_QSYM(0_sockaddr));
if (!mrb_string_p(sastr)) {
mrb_raise(mrb, E_SOCKET_ERROR, "invalid sockaddr");
}
@@ -222,7 +222,7 @@ mrb_addrinfo_unix_path(mrb_state *mrb, mrb_value self)
{
mrb_value sastr;
- sastr = mrb_iv_get(mrb, self, MRB_QSYM(a_sockaddr));
+ sastr = mrb_iv_get(mrb, self, MRB_QSYM(0_sockaddr));
if (((struct sockaddr *)RSTRING_PTR(sastr))->sa_family != AF_UNIX)
mrb_raise(mrb, E_SOCKET_ERROR, "need AF_UNIX address");
if (RSTRING_LEN(sastr) < (mrb_int)offsetof(struct sockaddr_un, sun_path) + 1) {
diff --git a/mrbgems/mruby-symbol-ext/test/symbol.rb b/mrbgems/mruby-symbol-ext/test/symbol.rb
index db686e5f4..34c3c6ba5 100644
--- a/mrbgems/mruby-symbol-ext/test/symbol.rb
+++ b/mrbgems/mruby-symbol-ext/test/symbol.rb
@@ -13,13 +13,13 @@ end
%w[size length].each do |n|
assert("Symbol##{n}") do
assert_equal 5, :hello.__send__(n)
- assert_equal 4, :"aA\0b".__send__(n)
+ assert_equal 4, :"aA b".__send__(n)
if __ENCODING__ == "UTF-8"
assert_equal 8, :"こんにちは世界!".__send__(n)
- assert_equal 4, :"aあ\0b".__send__(n)
+ assert_equal 4, :"aあ b".__send__(n)
else
assert_equal 22, :"こんにちは世界!".__send__(n)
- assert_equal 6, :"aあ\0b".__send__(n)
+ assert_equal 6, :"aあ b".__send__(n)
end
end
end
diff --git a/mrbgems/mruby-test/driver.c b/mrbgems/mruby-test/driver.c
index a5f723927..fe1a475d5 100644
--- a/mrbgems/mruby-test/driver.c
+++ b/mrbgems/mruby-test/driver.c
@@ -18,7 +18,7 @@
#include <mruby/variable.h>
#include <mruby/array.h>
-extern const uint8_t mrbtest_assert_irep[];
+extern const struct RProc mrbtest_assert_proc[];
void mrbgemtest_init(mrb_state* mrb);
void mrb_init_test_vformat(mrb_state* mrb);
@@ -300,7 +300,7 @@ main(int argc, char **argv)
}
mrb_init_test_driver(mrb, verbose);
- mrb_load_irep(mrb, mrbtest_assert_irep);
+ mrb_load_proc(mrb, mrbtest_assert_proc);
mrbgemtest_init(mrb);
ret = eval_test(mrb);
mrb_close(mrb);
diff --git a/mrbgems/mruby-test/mrbgem.rake b/mrbgems/mruby-test/mrbgem.rake
index ced252ae6..9e8e4041f 100644
--- a/mrbgems/mruby-test/mrbgem.rake
+++ b/mrbgems/mruby-test/mrbgem.rake
@@ -28,7 +28,7 @@ MRuby::Gem::Specification.new('mruby-test') do |spec|
file assert_c => [assert_rb, build.mrbcfile] do |t|
mkdir_p File.dirname(t.name)
open(t.name, 'w') do |f|
- mrbc.run f, assert_rb, 'mrbtest_assert_irep'
+ mrbc.run f, assert_rb, 'mrbtest_assert_proc'
end
end
@@ -56,12 +56,12 @@ MRuby::Gem::Specification.new('mruby-test') do |spec|
f.puts %Q[ * All manual changes will get lost.]
f.puts %Q[ */]
if test_preload.nil?
- f.puts %Q[extern const uint8_t mrbtest_assert_irep[];]
+ f.puts %Q[extern const struct RProc mrbtest_assert_proc[];]
else
- g.build.mrbc.run f, test_preload, "gem_test_irep_#{g.funcname}_preload"
+ g.build.mrbc.run f, test_preload, "gem_test_#{g.funcname}_preload"
end
g.test_rbfiles.flatten.each_with_index do |rbfile, i|
- g.build.mrbc.run f, rbfile, "gem_test_irep_#{g.funcname}_#{i}"
+ g.build.mrbc.run f, rbfile, "gem_test_#{g.funcname}_#{i}_proc"
end
f.puts %Q[void mrb_#{g.funcname}_gem_test(mrb_state *mrb);] unless g.test_objs.empty?
dep_list.each do |d|
@@ -90,9 +90,9 @@ MRuby::Gem::Specification.new('mruby-test') do |spec|
end
f.puts %Q[ mrb_init_test_driver(mrb2, mrb_test(mrb_gv_get(mrb, mrb_intern_lit(mrb, "$mrbtest_verbose"))));]
if test_preload.nil?
- f.puts %Q[ mrb_load_irep(mrb2, mrbtest_assert_irep);]
+ f.puts %Q[ mrb_load_proc(mrb2, mrbtest_assert_proc);]
else
- f.puts %Q[ mrb_load_irep(mrb2, gem_test_irep_#{g.funcname}_preload);]
+ f.puts %Q[ mrb_load_proc(mrb2, gem_test_#{g.funcname}_preload);]
end
f.puts %Q[ if (mrb2->exc) {]
f.puts %Q[ mrb_print_error(mrb2);]
@@ -113,7 +113,7 @@ MRuby::Gem::Specification.new('mruby-test') do |spec|
f.puts %Q[ mrb_#{g.funcname}_gem_test(mrb2);] if g.custom_test_init?
- f.puts %Q[ mrb_load_irep(mrb2, gem_test_irep_#{g.funcname}_#{i});]
+ f.puts %Q[ mrb_load_proc(mrb2, gem_test_#{g.funcname}_#{i}_proc);]
f.puts %Q[ ]
f.puts %Q[ mrb_t_pass_result(mrb, mrb2);]