mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
node.c: hidden options hash
* node.c (dump_option): nd_compile_option is a hidden hash object, cannot call inspect on it. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54077 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
9871d88ee4
commit
a944bdd5fa
3 changed files with 57 additions and 12 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
Thu Mar 10 15:19:54 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
|
* node.c (dump_option): nd_compile_option is a hidden hash object,
|
||||||
|
cannot call inspect on it.
|
||||||
|
|
||||||
Thu Mar 10 09:49:54 2016 Rei Odaira <Rei.Odaira@gmail.com>
|
Thu Mar 10 09:49:54 2016 Rei Odaira <Rei.Odaira@gmail.com>
|
||||||
|
|
||||||
* test/socket/test_socket.rb (test_udp_recvmsg_truncation):
|
* test/socket/test_socket.rb (test_udp_recvmsg_truncation):
|
||||||
|
|
49
node.c
49
node.c
|
@ -37,6 +37,11 @@
|
||||||
rb_str_resize(indent, RSTRING_LEN(indent) - 4); \
|
rb_str_resize(indent, RSTRING_LEN(indent) - 4); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
#define COMPOUND_FIELD1(name, ann, block) \
|
||||||
|
COMPOUND_FIELD(FIELD_NAME_LEN(#name, ann), \
|
||||||
|
FIELD_NAME_DESC(#name, ann), \
|
||||||
|
block)
|
||||||
|
|
||||||
#define FIELD_NAME_DESC(name, ann) name " (" ann ")"
|
#define FIELD_NAME_DESC(name, ann) name " (" ann ")"
|
||||||
#define FIELD_NAME_LEN(name, ann) (int)( \
|
#define FIELD_NAME_LEN(name, ann) (int)( \
|
||||||
comment ? \
|
comment ? \
|
||||||
|
@ -57,9 +62,9 @@
|
||||||
#define F_MSG(name, ann, desc) SIMPLE_FIELD1(#name, ann) A(desc)
|
#define F_MSG(name, ann, desc) SIMPLE_FIELD1(#name, ann) A(desc)
|
||||||
|
|
||||||
#define F_NODE(name, ann) \
|
#define F_NODE(name, ann) \
|
||||||
COMPOUND_FIELD(FIELD_NAME_LEN(#name, ann), \
|
COMPOUND_FIELD1(name, ann, dump_node(buf, indent, comment, node->name))
|
||||||
FIELD_NAME_DESC(#name, ann), \
|
#define F_OPTION(name, ann) \
|
||||||
dump_node(buf, indent, comment, node->name))
|
COMPOUND_FIELD1(name, ann, dump_option(buf, indent, node->name))
|
||||||
|
|
||||||
#define ANN(ann) \
|
#define ANN(ann) \
|
||||||
if (comment) { \
|
if (comment) { \
|
||||||
|
@ -91,6 +96,42 @@ add_id(VALUE buf, ID id)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct add_option_arg {
|
||||||
|
VALUE buf, indent;
|
||||||
|
st_index_t count;
|
||||||
|
};
|
||||||
|
|
||||||
|
static int
|
||||||
|
add_option_i(VALUE key, VALUE val, VALUE args)
|
||||||
|
{
|
||||||
|
struct add_option_arg *argp = (void *)args;
|
||||||
|
VALUE buf = argp->buf;
|
||||||
|
VALUE indent = argp->indent;
|
||||||
|
|
||||||
|
A_INDENT;
|
||||||
|
A("+- ");
|
||||||
|
AR(rb_sym2str(key));
|
||||||
|
A(": ");
|
||||||
|
A_LIT(val);
|
||||||
|
A("\n");
|
||||||
|
return ST_CONTINUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
dump_option(VALUE buf, VALUE indent, VALUE opt)
|
||||||
|
{
|
||||||
|
struct add_option_arg arg;
|
||||||
|
|
||||||
|
if (!RB_TYPE_P(opt, T_HASH)) {
|
||||||
|
A_LIT(opt);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
arg.buf = buf;
|
||||||
|
arg.indent = indent;
|
||||||
|
arg.count = 0;
|
||||||
|
rb_hash_foreach(opt, add_option_i, (VALUE)&arg);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
dump_node(VALUE buf, VALUE indent, int comment, NODE *node)
|
dump_node(VALUE buf, VALUE indent, int comment, NODE *node)
|
||||||
{
|
{
|
||||||
|
@ -828,7 +869,7 @@ dump_node(VALUE buf, VALUE indent, int comment, NODE *node)
|
||||||
F_NODE(nd_body, "body");
|
F_NODE(nd_body, "body");
|
||||||
LAST_NODE;
|
LAST_NODE;
|
||||||
#define nd_compile_option u3.value
|
#define nd_compile_option u3.value
|
||||||
F_LIT(nd_compile_option, "compile_option");
|
F_OPTION(nd_compile_option, "compile_option");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NODE_LAMBDA:
|
case NODE_LAMBDA:
|
||||||
|
|
|
@ -752,21 +752,19 @@ class TestRubyOptions < Test::Unit::TestCase
|
||||||
assert_in_out_err(['-p', '-e', 'sub(/t.*/){"TEST"}'], %[test], %w[TEST], [], bug7157)
|
assert_in_out_err(['-p', '-e', 'sub(/t.*/){"TEST"}'], %[test], %w[TEST], [], bug7157)
|
||||||
end
|
end
|
||||||
|
|
||||||
def assert_norun_with_rflag(opt)
|
def assert_norun_with_rflag(*opt)
|
||||||
bug10435 = "[ruby-dev:48712] [Bug #10435]: should not run with #{opt} option"
|
bug10435 = "[ruby-dev:48712] [Bug #10435]: should not run with #{opt} option"
|
||||||
stderr = []
|
stderr = []
|
||||||
Tempfile.create(%w"bug10435- .rb") do |script|
|
Tempfile.create(%w"bug10435- .rb") do |script|
|
||||||
dir, base = File.split(script.path)
|
dir, base = File.split(script.path)
|
||||||
script.puts "abort ':run'"
|
script.puts "abort ':run'"
|
||||||
script.close
|
script.close
|
||||||
opts = ['-C', dir, '-r', "./#{base}", opt]
|
opts = ['-C', dir, '-r', "./#{base}", *opt]
|
||||||
assert_in_out_err([*opts, '-ep']) do |_, e|
|
_, e = assert_in_out_err([*opts, '-ep'], "", //)
|
||||||
stderr.concat(e)
|
stderr.concat(e) if e
|
||||||
end
|
|
||||||
stderr << "---"
|
stderr << "---"
|
||||||
assert_in_out_err([*opts, base]) do |_, e|
|
_, e = assert_in_out_err([*opts, base], "", //)
|
||||||
stderr.concat(e)
|
stderr.concat(e) if e
|
||||||
end
|
|
||||||
end
|
end
|
||||||
assert_not_include(stderr, ":run", bug10435)
|
assert_not_include(stderr, ":run", bug10435)
|
||||||
end
|
end
|
||||||
|
@ -783,6 +781,7 @@ class TestRubyOptions < Test::Unit::TestCase
|
||||||
|
|
||||||
def test_dump_parsetree_with_rflag
|
def test_dump_parsetree_with_rflag
|
||||||
assert_norun_with_rflag('--dump=parsetree')
|
assert_norun_with_rflag('--dump=parsetree')
|
||||||
|
assert_norun_with_rflag('--dump=parsetree', '-e', '#frozen-string-literal: true')
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_dump_insns_with_rflag
|
def test_dump_insns_with_rflag
|
||||||
|
|
Loading…
Reference in a new issue