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();
|
||||
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;
|
||||
|
||||
rb_io_close(f);
|
||||
|
|
|
@ -98,6 +98,22 @@ class TestISeq < Test::Unit::TestCase
|
|||
assert_include(RubyVM::InstructionSequence.of(obj.method(name)).disasm, name)
|
||||
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__
|
||||
def method_test_line_trace
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue