aboutsummaryrefslogtreecommitdiffstats
path: root/template
diff options
context:
space:
mode:
author卜部昌平 <shyouhei@ruby-lang.org>2020-08-11 11:40:37 +0900
committer卜部昌平 <shyouhei@ruby-lang.org>2020-08-11 16:51:07 +0900
commitacd8ee8dbc0c0c5da8aa486db7dca169d8239196 (patch)
tree61682013138b9a846ba3e2c3dbefacd9bb779f31 /template
parentb0eb5aa34476636771a6bfa1397115011066c410 (diff)
downloadruby-acd8ee8dbc0c0c5da8aa486db7dca169d8239196.tar.gz
tool/prelude.c.tmpl: use RubyVM::CEscape
Do not repeat yourself.
Diffstat (limited to 'template')
-rw-r--r--template/prelude.c.tmpl26
1 files changed, 7 insertions, 19 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%>"
};