diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2020-05-15 16:44:36 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2020-10-12 16:20:51 +0900 |
| commit | 1bcf6d9f3cacf6a5c54ee0c74d0dad0f0e9ed436 (patch) | |
| tree | 50807553ee909e0956b84cfd05d40bbdfb5ef320 /Rakefile | |
| parent | 97e3c3a5a339696827bd5c936c12df3241f3a81c (diff) | |
| download | mruby-1bcf6d9f3cacf6a5c54ee0c74d0dad0f0e9ed436.tar.gz mruby-1bcf6d9f3cacf6a5c54ee0c74d0dad0f0e9ed436.zip | |
Create `MRB_OPSYM()` macro to refer symbols corresponding operators.
For example, `MRB_OPSYM(add)` refers a symbol for `+`.
Diffstat (limited to 'Rakefile')
| -rw-r--r-- | Rakefile | 35 |
1 files changed, 35 insertions, 0 deletions
@@ -146,11 +146,46 @@ file presym_inc => presym_file do presyms = File.readlines(presym_file, chomp: true) rm_f presym_inc File.open(presym_inc, "w") do |f| + op_table = { + "!" => "not", + "!=" => "neq", + "!~" => "nmatch", + "%" => "mod", + "&" => "and", + "&&" => "andand", + "*" => "mul", + "**" => "pow", + "+" => "add", + "+@" => "plus", + "-" => "sub", + "-@" => "minus", + "/" => "div", + "<" => "lt", + "<=" => "le", + "<<" => "lshift", + "<=>" => "cmp", + "==" => "eq", + "===" => "eqq", + "=~" => "match", + ">" => "gt", + ">=" => "ge", + ">>" => "rshift", + "[]" => "aref", + "[]=" => "aset", + "^" => "xor", + "`" => "tick", + "|" => "or", + "||" => "oror", + "~" => "neg", + } f.print "/* MRB_PRESYM_CSYM(sym, num) - symbol which is valid C id name */\n" + f.print "/* MRB_PRESYM_OPSYM(op, sym, num) - symbol which is an operator id */\n" f.print "/* MRB_PRESYM_SYM(sym, num) - symbol which is not valid C id */\n\n" presyms.each.with_index do |sym,i| if /\A\w+\Z/ =~ sym f.print "MRB_PRESYM_CSYM(#{sym}, #{i+1})\n" + elsif op_table.key?(sym) + f.print "MRB_PRESYM_OPSYM(#{sym}, #{op_table[sym]}, #{i+1})\n" else f.print "MRB_PRESYM_SYM(#{sym}, #{i+1})\n" end |
