aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--node.c49
-rw-r--r--test/ruby/test_rubyoptions.rb15
3 files changed, 57 insertions, 12 deletions
diff --git a/ChangeLog b/ChangeLog
index 4c7f7e2a4c..3b02b53e68 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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>
* test/socket/test_socket.rb (test_udp_recvmsg_truncation):
diff --git a/node.c b/node.c
index a8ccf05780..0e0a863386 100644
--- a/node.c
+++ b/node.c
@@ -37,6 +37,11 @@
rb_str_resize(indent, RSTRING_LEN(indent) - 4); \
} 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_LEN(name, ann) (int)( \
comment ? \
@@ -57,9 +62,9 @@
#define F_MSG(name, ann, desc) SIMPLE_FIELD1(#name, ann) A(desc)
#define F_NODE(name, ann) \
- COMPOUND_FIELD(FIELD_NAME_LEN(#name, ann), \
- FIELD_NAME_DESC(#name, ann), \
- dump_node(buf, indent, comment, node->name))
+ COMPOUND_FIELD1(name, ann, dump_node(buf, indent, comment, node->name))
+#define F_OPTION(name, ann) \
+ COMPOUND_FIELD1(name, ann, dump_option(buf, indent, node->name))
#define ANN(ann) \
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
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");
LAST_NODE;
#define nd_compile_option u3.value
- F_LIT(nd_compile_option, "compile_option");
+ F_OPTION(nd_compile_option, "compile_option");
break;
case NODE_LAMBDA:
diff --git a/test/ruby/test_rubyoptions.rb b/test/ruby/test_rubyoptions.rb
index 82fc5e44e7..ea361bcf37 100644
--- a/test/ruby/test_rubyoptions.rb
+++ b/test/ruby/test_rubyoptions.rb
@@ -752,21 +752,19 @@ class TestRubyOptions < Test::Unit::TestCase
assert_in_out_err(['-p', '-e', 'sub(/t.*/){"TEST"}'], %[test], %w[TEST], [], bug7157)
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"
stderr = []
Tempfile.create(%w"bug10435- .rb") do |script|
dir, base = File.split(script.path)
script.puts "abort ':run'"
script.close
- opts = ['-C', dir, '-r', "./#{base}", opt]
- assert_in_out_err([*opts, '-ep']) do |_, e|
- stderr.concat(e)
- end
+ opts = ['-C', dir, '-r', "./#{base}", *opt]
+ _, e = assert_in_out_err([*opts, '-ep'], "", //)
+ stderr.concat(e) if e
stderr << "---"
- assert_in_out_err([*opts, base]) do |_, e|
- stderr.concat(e)
- end
+ _, e = assert_in_out_err([*opts, base], "", //)
+ stderr.concat(e) if e
end
assert_not_include(stderr, ":run", bug10435)
end
@@ -783,6 +781,7 @@ class TestRubyOptions < Test::Unit::TestCase
def test_dump_parsetree_with_rflag
assert_norun_with_rflag('--dump=parsetree')
+ assert_norun_with_rflag('--dump=parsetree', '-e', '#frozen-string-literal: true')
end
def test_dump_insns_with_rflag