From 5ec1fc52c1640c75899972ad99734ff22a90694a Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Thu, 24 Aug 2023 19:10:33 +0900 Subject: [PATCH] Escape non-ascii characters in prelude C comments Non-ASCII code are often warned by localized compilers. --- template/prelude.c.tmpl | 6 +++++- tool/ruby_vm/helpers/c_escape.rb | 5 ++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/template/prelude.c.tmpl b/template/prelude.c.tmpl index aa8b0c1fef..74f6c08da7 100644 --- a/template/prelude.c.tmpl +++ b/template/prelude.c.tmpl @@ -43,7 +43,10 @@ class Prelude lineno = 0 result = [@preludes.size, @vpath.strip(filename), lines, sub] @vpath.foreach(filename) do |line| - line.force_encoding("ASCII-8BIT") if line.respond_to?(:force_encoding) + if line.respond_to?(:force_encoding) + enc = line.encoding + line.force_encoding("ASCII-8BIT") + end line.rstrip! lineno += 1 @preludes[filename] ||= result @@ -71,6 +74,7 @@ class Prelude orig end end + comment.force_encoding(enc) if enc and comment lines << [line, comment] end result << (start_line || 1) diff --git a/tool/ruby_vm/helpers/c_escape.rb b/tool/ruby_vm/helpers/c_escape.rb index 34fafd1e34..2a99e408da 100644 --- a/tool/ruby_vm/helpers/c_escape.rb +++ b/tool/ruby_vm/helpers/c_escape.rb @@ -17,7 +17,10 @@ module RubyVM::CEscape # generate comment, with escaps. def commentify str - return "/* #{str.b.gsub('*/', '*\\/').gsub('/*', '/\\*')} */" + unless str = str.dump[/\A"\K.*(?="\z)/] + raise Encoding::CompatibilityError, "must be ASCII-compatible (#{str.encoding})" + end + return "/* #{str.gsub('*/', '*\\/').gsub('/*', '/\\*')} */" end # Mimic gensym of CL.