mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Make RubyVM::InstructionSequence.compile_file use same encoding as load
This switches the internal function from rb_parser_compile_file_path to rb_parser_load_file, which is the same internal method that Kernel#load uses. Fixes [Bug #17308]
This commit is contained in:
parent
fee0073726
commit
4a5c42db88
Notes:
git
2020-11-19 07:13:15 +09:00
2 changed files with 17 additions and 1 deletions
2
iseq.c
2
iseq.c
|
@ -1303,7 +1303,7 @@ iseqw_s_compile_file(int argc, VALUE *argv, VALUE self)
|
||||||
|
|
||||||
parser = rb_parser_new();
|
parser = rb_parser_new();
|
||||||
rb_parser_set_context(parser, NULL, FALSE);
|
rb_parser_set_context(parser, NULL, FALSE);
|
||||||
ast = rb_parser_compile_file_path(parser, file, f, NUM2INT(line));
|
ast = (rb_ast_t *)rb_parser_load_file(parser, file);
|
||||||
if (!ast->body.root) exc = GET_EC()->errinfo;
|
if (!ast->body.root) exc = GET_EC()->errinfo;
|
||||||
|
|
||||||
rb_io_close(f);
|
rb_io_close(f);
|
||||||
|
|
|
@ -98,6 +98,22 @@ class TestISeq < Test::Unit::TestCase
|
||||||
assert_include(RubyVM::InstructionSequence.of(obj.method(name)).disasm, name)
|
assert_include(RubyVM::InstructionSequence.of(obj.method(name)).disasm, name)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_compile_file_encoding
|
||||||
|
Tempfile.create(%w"test_iseq .rb") do |f|
|
||||||
|
f.puts "{ '\u00de' => 'Th', '\u00df' => 'ss', '\u00e0' => 'a' }"
|
||||||
|
f.close
|
||||||
|
|
||||||
|
previous_external = Encoding.default_external
|
||||||
|
Encoding.default_external = Encoding::US_ASCII
|
||||||
|
begin
|
||||||
|
load f.path
|
||||||
|
RubyVM::InstructionSequence.compile_file(f.path)
|
||||||
|
ensure
|
||||||
|
Encoding.default_external = previous_external
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
LINE_BEFORE_METHOD = __LINE__
|
LINE_BEFORE_METHOD = __LINE__
|
||||||
def method_test_line_trace
|
def method_test_line_trace
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue