summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2014-06-06 22:03:02 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2014-06-06 22:03:02 +0900
commit04edab4c2117acd71031f62c753ed09f6d0da5bb (patch)
tree9626f8e42d02e10de14f43387afc2608e84f1818
parentff4ca4c195144b5ac21ffd5434f2f955471ca8e7 (diff)
parent39bbdd5f2fa9f429b94bab759fa2da4524b52708 (diff)
downloadmruby-04edab4c2117acd71031f62c753ed09f6d0da5bb.tar.gz
mruby-04edab4c2117acd71031f62c753ed09f6d0da5bb.zip
Merge pull request #2368 from take-cheeze/partial_hook_fix
Treat partial hook success '\n' to fix #2361 .
-rw-r--r--bintest/mrbc.rb12
-rw-r--r--src/parse.y7
-rw-r--r--tasks/mruby_build.rake1
3 files changed, 15 insertions, 5 deletions
diff --git a/bintest/mrbc.rb b/bintest/mrbc.rb
new file mode 100644
index 000000000..b016378a1
--- /dev/null
+++ b/bintest/mrbc.rb
@@ -0,0 +1,12 @@
+require 'tempfile'
+
+assert('Compiling multiple files without new line in last line. #2361') do
+ a, b, out = Tempfile.new('a.rb'), Tempfile.new('b.rb'), Tempfile.new('out.mrb')
+ a.write('module A; end')
+ a.flush
+ b.write('module B; end')
+ b.flush
+ result = `bin/mrbc -c -o #{out.path} #{a.path} #{b.path} 2>&1`
+ assert_equal "bin/mrbc:#{a.path}:Syntax OK", result.chomp
+ assert_equal 0, $?.exitstatus
+end
diff --git a/src/parse.y b/src/parse.y
index 1d4e83cde..27c2dd80d 100644
--- a/src/parse.y
+++ b/src/parse.y
@@ -3389,7 +3389,7 @@ nextc(parser_state *p)
else {
if (p->cxt->partial_hook(p) < 0)
return -1;
- return -2;
+ return '\n';
}
}
@@ -3777,7 +3777,6 @@ read_escape(parser_state *p)
eof:
case -1:
- case -2:
yyerror(p, "Invalid escape character syntax");
return '\0';
@@ -4093,7 +4092,6 @@ parser_yylex(parser_state *p)
case '#': /* it's a comment */
skip(p, '\n');
/* fall through */
- case -2: /* end of partial script. */
case '\n':
maybe_heredoc:
heredoc_treat_nextline(p);
@@ -4128,7 +4126,6 @@ parser_yylex(parser_state *p)
goto retry;
}
case -1: /* EOF */
- case -2: /* end of partial script */
goto normal_newline;
default:
pushback(p, c);
@@ -5450,7 +5447,7 @@ mrb_parser_set_filename(struct mrb_parser_state *p, const char *f)
sym = mrb_intern_cstr(p->mrb, f);
p->filename = mrb_sym2name_len(p->mrb, sym, NULL);
- p->lineno = (p->filename_table_length > 0)? 0 : 1;
+ p->lineno = (p->filename_table_length > 0)? -1 : 1;
for (i = 0; i < p->filename_table_length; ++i) {
if (p->filename_table[i] == sym) {
diff --git a/tasks/mruby_build.rake b/tasks/mruby_build.rake
index 966c602a4..09175d533 100644
--- a/tasks/mruby_build.rake
+++ b/tasks/mruby_build.rake
@@ -209,6 +209,7 @@ module MRuby
def run_bintest
targets = @gems.select { |v| File.directory? "#{v.dir}/bintest" }.map { |v| filename v.dir }
+ targets << filename(".") if File.directory? "./bintest"
sh "ruby test/bintest.rb #{targets.join ' '}"
end