diff options
author | 卜部昌平 <[email protected]> | 2020-08-11 11:40:37 +0900 |
---|---|---|
committer | 卜部昌平 <[email protected]> | 2020-08-11 16:51:07 +0900 |
commit | acd8ee8dbc0c0c5da8aa486db7dca169d8239196 (patch) | |
tree | 61682013138b9a846ba3e2c3dbefacd9bb779f31 | |
parent | b0eb5aa34476636771a6bfa1397115011066c410 (diff) |
tool/prelude.c.tmpl: use RubyVM::CEscape
Do not repeat yourself.
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/3405
-rw-r--r-- | template/prelude.c.tmpl | 26 | ||||
-rw-r--r-- | tool/ruby_vm/helpers/c_escape.rb | 2 |
2 files changed, 8 insertions, 20 deletions
diff --git a/template/prelude.c.tmpl b/template/prelude.c.tmpl index a8b53d05c9..73d35fc282 100644 --- a/template/prelude.c.tmpl +++ b/template/prelude.c.tmpl @@ -5,24 +5,12 @@ # Since $(BASERUBY) may be older than Ruby 1.9, # Ruby 1.9 feature should not be used. +require_relative '../tool/ruby_vm/helpers/c_escape' + class Prelude + include RubyVM::CEscape LINE_LIMIT = 509 # by C89 - C_ESC = { - "/*" => "/\\*", - "*/" => "*\\/", - "\\" => "\\\\", - '"' => '\"', - "\n" => '\n', - } - - 0x00.upto(0x1f) {|ch| C_ESC[[ch].pack("C")] ||= "\\%03o" % ch } - 0x7f.upto(0xff) {|ch| C_ESC[[ch].pack("C")] = "\\%03o" % ch } - C_ESC_PAT = Regexp.union(*C_ESC.keys) - - def c_esc(str) - str.gsub(C_ESC_PAT) { C_ESC[$&] } - end def prelude_base(filename) filename.chomp(".rb") end @@ -97,7 +85,7 @@ Prelude.new(output, ARGV, vpath).instance_eval do % preludes.each {|i, prelude, lines, sub| % name = prelude_name(*prelude) -static const char prelude_name<%=i%><%=%>[] = "<%=c_esc(name)%>"; +static const char prelude_name<%=i%><%=%>[] = <%=rstring2cstr(name)%>; static const struct { % size = beg = 0 % lines.each_with_index {|(line, comment), n| @@ -114,15 +102,15 @@ static const struct { % end } prelude_code<%=i%><%=%> = { % size = 0 -#line 1 "<%=c_esc(prelude)%>" +#line 1 <%=rstring2cstr(prelude)%> % lines.each_with_index {|(line, comment), n| % if size + line.size >= Prelude::LINE_LIMIT % size = 0 , -#line <%=n+1%> "<%=c_esc(prelude)%>" +#line <%=n+1%> <%=rstring2cstr(prelude)%> % end % size += line.size -"<%=c_esc(line)%>"<%if comment%>/* <%=c_esc(comment)%> */<%end%> +<%=rstring2cstr(line)%><%if comment%><%=commentify(comment)%><%end%> % } #line <%=_erbout.count("\n")+2%> "<%=@output%>" }; diff --git a/tool/ruby_vm/helpers/c_escape.rb b/tool/ruby_vm/helpers/c_escape.rb index a3368b8cc9..e9a8da6e50 100644 --- a/tool/ruby_vm/helpers/c_escape.rb +++ b/tool/ruby_vm/helpers/c_escape.rb @@ -17,7 +17,7 @@ module RubyVM::CEscape # generate comment, with escaps. def commentify str - return "/* #{str.strip.b.gsub '*/', '*\\/'} */" + return "/* #{str.b.gsub '*/', '*\\/'} */" end # Mimic gensym of CL. |