summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--AUTHORS1
-rw-r--r--CODEOWNERS1
-rw-r--r--LICENSE2
-rw-r--r--Makefile2
-rw-r--r--Rakefile227
-rw-r--r--build_config/ArduinoDue.rb2
-rw-r--r--build_config/chipKITMax32.rb2
-rw-r--r--build_config/ci/msvc.rb4
-rw-r--r--build_config/gameboyadvance.rb73
-rw-r--r--build_config/mrbc.rb11
-rw-r--r--include/mruby.h5
-rw-r--r--include/mruby/compile.h3
-rw-r--r--include/mruby/presym.h56
-rw-r--r--include/mruby/presym/disable.h68
-rw-r--r--include/mruby/presym/enable.h45
-rw-r--r--include/mruby/presym/scanning.h69
-rw-r--r--lib/mruby/build.rb147
-rw-r--r--lib/mruby/build/command.rb34
-rw-r--r--lib/mruby/gem.rb33
-rw-r--r--lib/mruby/presym.rb113
-rw-r--r--mrbgems/mruby-bin-mirb/tools/mirb/mirb.c3
-rw-r--r--mrbgems/mruby-bin-mruby/mrbgem.rake2
-rw-r--r--mrbgems/mruby-compiler/core/codegen.c26
-rw-r--r--mrbgems/mruby-compiler/core/parse.y334
-rw-r--r--mrbgems/mruby-compiler/core/y.tab.c2298
-rw-r--r--mrbgems/mruby-compiler/mrbgem.rake6
-rw-r--r--mrbgems/mruby-error/mrbgem.rake4
-rw-r--r--mrbgems/mruby-eval/src/eval.c2
-rw-r--r--mrbgems/mruby-fiber/src/fiber.c8
-rw-r--r--mrbgems/mruby-hash-ext/src/hash-ext.c26
-rw-r--r--mrbgems/mruby-hash-ext/test/hash.rb7
-rw-r--r--mrbgems/mruby-rational/src/rational.c17
-rw-r--r--mrbgems/mruby-sprintf/src/sprintf.c39
-rw-r--r--src/class.c19
-rw-r--r--src/codedump.c4
-rw-r--r--src/debug.c2
-rw-r--r--src/dump.c201
-rw-r--r--src/fmt_fp.c1
-rw-r--r--src/gc.c10
-rw-r--r--src/hash.c24
-rw-r--r--src/numeric.c22
-rw-r--r--src/string.c36
-rw-r--r--src/symbol.c18
-rw-r--r--src/vm.c12
-rw-r--r--tasks/benchmark.rake2
-rw-r--r--tasks/bin.rake35
-rw-r--r--tasks/core.rake5
-rw-r--r--tasks/libmruby.rake4
-rw-r--r--tasks/mrblib.rake30
-rw-r--r--tasks/presym.rake41
-rw-r--r--tasks/toolchains/gcc.rake4
-rw-r--r--tasks/toolchains/openwrt.rake23
-rw-r--r--tasks/toolchains/visualcpp.rake38
-rw-r--r--test/bintest.rb3
-rw-r--r--test/t/argumenterror.rb16
-rw-r--r--test/t/literals.rb50
56 files changed, 2601 insertions, 1669 deletions
diff --git a/AUTHORS b/AUTHORS
index 86428f554..97ab00311 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -45,3 +45,4 @@ of this list.
RIZAL Reckordp
Rory O'Connell
John Bampton
+ Seeker
diff --git a/CODEOWNERS b/CODEOWNERS
new file mode 100644
index 000000000..9f91caaf8
--- /dev/null
+++ b/CODEOWNERS
@@ -0,0 +1 @@
+* @matz
diff --git a/LICENSE b/LICENSE
index 363428a1e..68921b942 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2020 mruby developers
+Copyright (c) 2010-2021 mruby developers
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the "Software"),
diff --git a/Makefile b/Makefile
index 7f1a744e5..6e20d9dbf 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-# mruby is using Rake (http://rake.rubyforge.org) as a build tool.
+# mruby is using Rake (https://ruby.github.io/rake/) as a build tool.
RAKE = rake
diff --git a/Rakefile b/Rakefile
index e54983f41..813486bf6 100644
--- a/Rakefile
+++ b/Rakefile
@@ -25,12 +25,11 @@ end
# load custom rules
load "#{MRUBY_ROOT}/tasks/core.rake"
load "#{MRUBY_ROOT}/tasks/mrblib.rake"
-
load "#{MRUBY_ROOT}/tasks/mrbgems.rake"
load "#{MRUBY_ROOT}/tasks/libmruby.rake"
-
+load "#{MRUBY_ROOT}/tasks/bin.rake"
+load "#{MRUBY_ROOT}/tasks/presym.rake"
load "#{MRUBY_ROOT}/tasks/benchmark.rake"
-
load "#{MRUBY_ROOT}/tasks/gitlab.rake"
load "#{MRUBY_ROOT}/tasks/doc.rake"
@@ -38,219 +37,19 @@ load "#{MRUBY_ROOT}/tasks/doc.rake"
# generic build targets, rules
task :default => :all
-bin_path = ENV['INSTALL_DIR'] || "#{MRUBY_ROOT}/bin"
-
-if MRuby.targets['host']
- target = MRuby.targets['host']
- depfiles = target.bins.map do |bin|
- install_path = target.exefile("#{bin_path}/#{bin}")
- source_path = target.exefile("#{target.build_dir}/bin/#{bin}")
-
- file install_path => source_path do |t|
- install_D t.prerequisites.first, t.name
- end
- install_path
- end
-else
- depfiles = []
-end
-
-cfiles = Dir.glob("#{MRUBY_ROOT}/src/*.c")
-rbfiles = Dir.glob("#{MRUBY_ROOT}/mrblib/**/*.rb")
-psfiles = []
-MRuby.each_target do |target|
- gems.each do |gem|
- current_dir = gem.dir.relative_path_from(Dir.pwd)
- relative_from_root = gem.dir.relative_path_from(MRUBY_ROOT)
- current_build_dir = File.expand_path "#{build_dir}/#{relative_from_root}"
-
- if current_build_dir !~ /^#{Regexp.escape(build_dir)}/
- current_build_dir = "#{build_dir}/mrbgems/#{gem.name}"
- end
-
- gem.bins.each do |bin|
- exec = exefile("#{build_dir}/bin/#{bin}")
- objs = Dir.glob("#{current_dir}/tools/#{bin}/*.{c,cpp,cxx,cc}").map { |f| objfile(f.pathmap("#{current_build_dir}/tools/#{bin}/%n")) }
-
- file exec => objs + target.libraries do |t|
- gem_flags = gems.map { |g| g.linker.flags }
- gem_flags_before_libraries = gems.map { |g| g.linker.flags_before_libraries }
- gem_flags_after_libraries = gems.map { |g| g.linker.flags_after_libraries }
- gem_libraries = gems.map { |g| g.linker.libraries }
- gem_library_paths = gems.map { |g| g.linker.library_paths }
- linker.run t.name, t.prerequisites, gem_libraries, gem_library_paths, gem_flags, gem_flags_before_libraries, gem_flags_after_libraries
- end
-
- if target == MRuby.targets['host']
- install_path = MRuby.targets['host'].exefile("#{bin_path}/#{bin}")
-
- file install_path => exec do |t|
- install_D t.prerequisites.first, t.name
- end
- depfiles += [ install_path ]
- else
- depfiles += [ exec ]
- end
- end
-
- cfiles += Dir.glob(gem.dir+"/{src,core,tools/*}/*.c")
- if gem.cdump?
- rbfiles += Dir.glob(gem.dir+"/mrblib/**/*.rb")
- psfiles += Dir.glob(gem.dir+"/**/presym")
- end
- end
-end
-
-mkdir_p "#{MRUBY_ROOT}/build"
-symbols = []
-psfiles.each do |file|
- symbols += File.readlines(file).grep_v(/^# /)
-end
-symbols.each{|x| x.chomp!}
-presym_file="#{MRUBY_ROOT}/build/presym"
-presym_inc="#{presym_file}.inc"
-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",
-}
-macro_to_symbol = {
-# Macro Symbol
-# [prefix, suffix] => [prefix, suffix]
- ["CV" , "" ] => ["@@" , "" ],
- ["IV" , "" ] => ["@" , "" ],
- ["" , "_B" ] => ["" , "!" ],
- ["" , "_Q" ] => ["" , "?" ],
- ["" , "_E" ] => ["" , "=" ],
- ["" , "" ] => ["" , "" ],
-}
-
-file presym_file => cfiles+rbfiles+psfiles+[__FILE__] do
- prefix_re = Regexp.union(*macro_to_symbol.keys.map(&:first).uniq)
- suffix_re = Regexp.union(*macro_to_symbol.keys.map(&:last).uniq)
- macro_re = /MRB_(#{prefix_re})SYM(#{suffix_re})\((\w+)\)/o
- csymbols = cfiles.map do |f|
- src = File.read(f)
- src.gsub!(/\/\/.+(\n|$)/, "\n")
- [src.scan(/intern_lit\([^\n"]*"([^\n "]*)"/),
- src.scan(/mrb_define_method\([^\n"]*"([^\n"]*)"/),
- src.scan(/mrb_define_class_method\([^\n"]*"([^\n"]*)"/),
- src.scan(/mrb_define_class\([^\n"]*"([^\n"]*)"/),
- src.scan(/mrb_define_module\([^\n"]*"([^\n"]*)"/),
- src.scan(/mrb_define_module_function\([^\n"]*"([^\n"]*)"/),
- src.scan(/mrb_define_const\([^\n"]*"([^\n"]*)"/),
- src.scan(/mrb_define_global_const\([^\n"]*"([^\n"]*)"/),
- src.scan(macro_re).map{|prefix, suffix, name|
- macro_to_symbol[[prefix, suffix]] * name
- }]
- end
- csymbols += File.readlines("#{MRUBY_ROOT}/include/mruby.h").grep(/define E_/).join.scan(/MRB_SYM\((\w+)\)/)
-
- rbsymbols = rbfiles.map do |f|
- src = File.read(f)
- src.force_encoding(Encoding::BINARY)
- [src.scan(/\bclass +([A-Z]\w*)/),
- src.scan(/\bmodule +([A-Z]\w*)/),
- src.scan(/\bdef +(\w+[!?=]?)/),
- src.scan(/\balias +(\w+[!?]?)/),
- src.scan(/\b([A-Z]\w*) *=[^=]/),
- src.scan(/(\$[a-zA-Z_]\w*)/),
- src.scan(/(\$[$!?0-9]\w*)/),
- src.scan(/(@@?[a-zA-Z_]\w*)/),
- src.scan(/[^.]\.([a-zA-Z_]\w*[!?]?)/),
- src.scan(/\.([a-zA-Z_]\w* *=)/).map{|x|x.map{|s|s.gsub(' ', '')}},
- src.scan(/\b([a-zA-Z_]\w*):/),
- src.scan(/:([a-zA-Z_]\w*[!?=]?)/),
- src.scan(/[\(\[\{ ]:"([^"]+)"/).map{|x|x.map{|s|s.gsub('\#', '#')}},
- src.scan(/[ \(\[\{]:'([^']+)'/)
- ]
- end
- symbols = (symbols+csymbols+rbsymbols+op_table.keys).flatten.compact.uniq.grep_v(/#/).map{|x| x.gsub("\n", '\n')}.sort_by!{|x| [x.bytesize, x]}
- presyms = File.readlines(presym_file) rescue []
- presyms.each{|x| x.chomp!}
- if presyms != symbols
- _pp "GEN", presym_file.relative_path
- File.write(presym_file, symbols.join("\n"))
- Rake::Task[presym_inc].invoke
- end
-end
-
-task presym_inc do
- presyms = File.readlines(presym_file)
- presyms.each{|x| x.chomp!}
- symbol_to_macro = macro_to_symbol.invert
- prefix_re = Regexp.union(*symbol_to_macro.keys.map(&:first).uniq)
- suffix_re = Regexp.union(*symbol_to_macro.keys.map(&:last).uniq)
- sym_re = /\A(#{prefix_re})?([\w&&\D]\w*)(#{suffix_re})?\z/o
- _pp "GEN", presym_inc.relative_path
- File.open(presym_inc, "w") do |f|
- f.puts "/* MRB_PRESYM_NAMED(lit, num, type, name) */"
- f.puts "/* MRB_PRESYM_UNNAMED(lit, num) */"
- presyms.each.with_index(1) do |sym, num|
- if sym_re =~ sym && (affixes = symbol_to_macro[[$1, $3]])
- f.puts %|MRB_PRESYM_NAMED("#{sym}", #{num}, #{affixes * 'SYM'}, #{$2})|
- elsif name = op_table[sym]
- f.puts %|MRB_PRESYM_NAMED("#{sym}", #{num}, OPSYM, #{name})|
- elsif
- f.puts %|MRB_PRESYM_UNNAMED("#{sym}", #{num})|
- end
- end
- f.print "#define MRB_PRESYM_MAX #{presyms.size}"
- end
-end
-
-desc "preallocated symbols"
-task :gensym => presym_file
-
-depfiles += MRuby.targets.map { |n, t|
- t.libmruby_enabled? ? t.libraries : t.libmruby_core_static
-}.flatten
-
-depfiles += MRuby.targets.reject { |n, t| n == 'host' }.map { |n, t|
- t.bins.map { |bin| t.exefile("#{t.build_dir}/bin/#{bin}") }
-}.flatten
-
desc "build all targets, install (locally) in-repo"
-task :all => :build do
+task :all => :gensym do
+ Rake::Task[:build].invoke
puts
puts "Build summary:"
puts
- MRuby.each_target do
- print_build_summary
+ MRuby.each_target do |build|
+ build.print_build_summary
end
MRuby::Lockfile.write
end
-task :build => :gensym do
- depfiles.each {|dep| Rake::Task[dep].invoke}
-end
+task :build => MRuby.targets.flat_map{|_, build| build.products}
desc "run all mruby tests"
task :test
@@ -274,19 +73,17 @@ end
desc "clean all built and in-repo installed artifacts"
task :clean do
- MRuby.each_target do |t|
- rm_rf t.build_dir
+ MRuby.each_target do |build|
+ rm_rf build.products
+ rm_rf build.build_dir
end
- rm_f depfiles
- rm_f presym_file
- rm_f presym_inc
puts "Cleaned up target build folder"
end
desc "clean everything!"
task :deep_clean => ["clean", "clean_doc"] do
- MRuby.each_target do |t|
- rm_rf t.gem_clone_dir
+ MRuby.each_target do |build|
+ rm_rf build.gem_clone_dir
end
puts "Cleaned up mrbgems build folder"
end
diff --git a/build_config/ArduinoDue.rb b/build_config/ArduinoDue.rb
index a5d6102c0..ba7271633 100644
--- a/build_config/ArduinoDue.rb
+++ b/build_config/ArduinoDue.rb
@@ -1,5 +1,5 @@
# Cross Compiling configuration for Arduino Due
-# http://arduino.cc/en/Main/ArduinoBoardDue
+# https://arduino.cc/en/Main/ArduinoBoardDue
#
# Requires Arduino IDE >= 1.5
MRuby::CrossBuild.new("ArduinoDue") do |conf|
diff --git a/build_config/chipKITMax32.rb b/build_config/chipKITMax32.rb
index 2a8ebe16d..4fe8b4ba2 100644
--- a/build_config/chipKITMax32.rb
+++ b/build_config/chipKITMax32.rb
@@ -1,5 +1,5 @@
# Cross Compiling configuration for Digilent chipKIT Max32
-# http://www.digilentinc.com/Products/Detail.cfm?Prod=CHIPKIT-MAX32
+# https://www.digilentinc.com/Products/Detail.cfm?Prod=CHIPKIT-MAX32
#
# Requires MPIDE (https://github.com/chipKIT32/chipKIT32-MAX)
#
diff --git a/build_config/ci/msvc.rb b/build_config/ci/msvc.rb
index e084a6a36..2df2d4864 100644
--- a/build_config/ci/msvc.rb
+++ b/build_config/ci/msvc.rb
@@ -1,6 +1,6 @@
def setup_option(conf)
- conf.cc.flags[0].delete("/Zi") unless ENV['CFLAGS']
- conf.cxx.flags[0].delete("/Zi") unless ENV['CFLAGS'] || ENV['CXXFLAGS']
+ conf.cc.compile_options.sub!(%r{/Zi }, "") unless ENV['CFLAGS']
+ conf.cxx.compile_options.sub!(%r{/Zi }, "") unless ENV['CFLAGS'] || ENV['CXXFLAGS']
conf.linker.flags << "/DEBUG:NONE" unless ENV['LDFLAGS']
end
diff --git a/build_config/gameboyadvance.rb b/build_config/gameboyadvance.rb
new file mode 100644
index 000000000..964dc7af1
--- /dev/null
+++ b/build_config/gameboyadvance.rb
@@ -0,0 +1,73 @@
+# Cross Compiling configuration for the Nintendo GameBoyAdvance.
+# This configuration requires devkitARM
+# https://devkitpro.org/wiki/Getting_Started/devkitARM
+#
+# Tested only on GNU/Linux
+#
+MRuby::CrossBuild.new("gameboyadvance") do |conf|
+ toolchain :gcc
+
+ DEVKITPRO_PATH = "/opt/devkitpro"
+ BIN_PATH = "#{DEVKITPRO_PATH}/devkitARM/bin"
+
+ # C compiler
+ conf.cc do |cc|
+ cc.command = "#{BIN_PATH}/arm-none-eabi-gcc"
+ cc.flags << ["-mthumb-interwork", "-mthumb", "-O2"]
+ cc.compile_options = %(%{flags} -o "%{outfile}" -c "%{infile}")
+ end
+
+ # C++ compiler
+ conf.cxx do |cxx|
+ cxx.command = "#{BIN_PATH}/arm-none-eabi-g++"
+ cxx.include_paths = conf.cc.include_paths.dup
+ cxx.flags = conf.cc.flags.dup
+ cxx.flags << %w[-fno-rtti -fno-exceptions]
+ cxx.defines = conf.cc.defines.dup
+ cxx.compile_options = conf.cc.compile_options.dup
+ end
+
+ # Linker
+ conf.linker do |linker|
+ linker.command = "#{BIN_PATH}/arm-none-eabi-gcc"
+ linker.flags << ["-mthumb-interwork", "-mthumb", "-specs=gba.specs"]
+ end
+
+ # No executables
+ conf.bins = []
+
+ # Do not build executable test
+ conf.build_mrbtest_lib_only
+
+ # Disable C++ exception
+ conf.disable_cxx_exception
+
+ # Gems from core
+ # removing mruby-io
+ conf.gem core: "mruby-metaprog"
+ conf.gem core: "mruby-pack"
+ conf.gem core: "mruby-sprintf"
+ conf.gem core: "mruby-print"
+ conf.gem core: "mruby-math"
+ conf.gem core: "mruby-time"
+ conf.gem core: "mruby-struct"
+ conf.gem core: "mruby-compar-ext"
+ conf.gem core: "mruby-enum-ext"
+ conf.gem core: "mruby-string-ext"
+ conf.gem core: "mruby-numeric-ext"
+ conf.gem core: "mruby-array-ext"
+ conf.gem core: "mruby-hash-ext"
+ conf.gem core: "mruby-range-ext"
+ conf.gem core: "mruby-proc-ext"
+ conf.gem core: "mruby-symbol-ext"
+ conf.gem core: "mruby-random"
+ conf.gem core: "mruby-object-ext"
+ conf.gem core: "mruby-objectspace"
+ conf.gem core: "mruby-fiber"
+ conf.gem core: "mruby-enumerator"
+ conf.gem core: "mruby-enum-lazy"
+ conf.gem core: "mruby-toplevel-ext"
+ conf.gem core: "mruby-kernel-ext"
+ conf.gem core: "mruby-class-ext"
+ conf.gem core: "mruby-compiler"
+end
diff --git a/build_config/mrbc.rb b/build_config/mrbc.rb
new file mode 100644
index 000000000..95444b936
--- /dev/null
+++ b/build_config/mrbc.rb
@@ -0,0 +1,11 @@
+MRuby::Build.new do |conf|
+ if ENV['VisualStudioVersion'] || ENV['VSINSTALLDIR']
+ conf.toolchain :visualcpp
+ else
+ conf.toolchain :gcc
+ end
+
+ conf.build_mrbc_exec
+ conf.disable_libmruby
+ conf.disable_presym
+end
diff --git a/include/mruby.h b/include/mruby.h
index 6f58fd7cd..ccb76ebe4 100644
--- a/include/mruby.h
+++ b/include/mruby.h
@@ -1,7 +1,7 @@
/*
** mruby - An embeddable Ruby implementation
**
-** Copyright (c) mruby developers 2010-2020
+** Copyright (c) mruby developers 2010-2021
**
** Permission is hereby granted, free of charge, to any person obtaining
** a copy of this software and associated documentation files (the
@@ -93,7 +93,6 @@
#include <mruby/common.h>
#include <mruby/value.h>
#include <mruby/gc.h>
-#include <mruby/presym.h>
#include <mruby/version.h>
#ifndef MRB_NO_FLOAT
@@ -1410,6 +1409,8 @@ MRB_API void mrb_show_copyright(mrb_state *mrb);
MRB_API mrb_value mrb_format(mrb_state *mrb, const char *format, ...);
+#include <mruby/presym.h>
+
#if 0
/* memcpy and memset does not work with gdb reverse-next on my box */
/* use naive memcpy and memset instead */
diff --git a/include/mruby/compile.h b/include/mruby/compile.h
index 9b062e60b..8159cd696 100644
--- a/include/mruby/compile.h
+++ b/include/mruby/compile.h
@@ -99,6 +99,9 @@ enum mrb_string_type {
/* heredoc structure */
struct mrb_parser_heredoc_info {
mrb_bool allow_indent:1;
+ mrb_bool remove_indent:1;
+ size_t indent;
+ mrb_ast_node *indented;
mrb_bool line_head:1;
enum mrb_string_type type;
const char *term;
diff --git a/include/mruby/presym.h b/include/mruby/presym.h
index fd08a24da..fd326c758 100644
--- a/include/mruby/presym.h
+++ b/include/mruby/presym.h
@@ -7,42 +7,36 @@
#ifndef MRUBY_PRESYM_H
#define MRUBY_PRESYM_H
-#undef MRB_PRESYM_MAX
-#ifdef MRB_USE_ALL_SYMBOLS
-#define MRB_PRESYM_NAMED(lit, num, type, name) MRB_##type##__##name = (num),
+#if defined(MRB_PRESYM_SCANNING)
+# include <mruby/presym/scanning.h>
+#elif defined(MRB_NO_PRESYM)
+# include <mruby/presym/disable.h>
#else
-#define MRB_PRESYM_NAMED(lit, num, type, name) MRB_##type##__##name = (num<<1),
+# include <mruby/presym/enable.h>
#endif
-#define MRB_PRESYM_UNNAMED(lit, num)
-
-enum mruby_presym {
-#include <../build/presym.inc>
-};
-
-#undef MRB_PRESYM_NAMED
-#undef MRB_PRESYM_UNNAMED
/*
- * For `MRB_OPSYM`, specify the names corresponding to operators (refer to
- * `op_table` in `Rakefile` for the names that can be specified for it).
- * Other than that, describe only word characters excluding leading and
- * ending punctuations.
+ * Where `mrb_intern_lit` is allowed for symbol interning, it is directly
+ * replaced by the symbol ID if presym is enabled by using the following
+ * macros.
+ *
+ * MRB_OPSYM(xor) //=> ^ (Operator)
+ * MRB_CVSYM(xor) //=> @@xor (Class Variable)
+ * MRB_IVSYM(xor) //=> @xor (Instance Variable)
+ * MRB_SYM_B(xor) //=> xor! (Method with Bang)
+ * MRB_SYM_Q(xor) //=> xor? (Method with Question mark)
+ * MRB_SYM_E(xor) //=> xor= (Method with Equal)
+ * MRB_SYM(xor) //=> xor (Word characters)
+ *
+ * For `MRB_OPSYM`, specify the names corresponding to operators (see
+ * `MRuby::Presym::OPERATORS` in `lib/mruby/presym.rb for the names that can
+ * be specified for it). Other than that, describe only word characters
+ * excluding leading and ending punctuations.
*
- * Example:
- * MRB_OPSYM(and) //=> &
- * MRB_CVSYM(foo) //=> @@foo
- * MRB_IVSYM(foo) //=> @foo
- * MRB_SYM_B(foo) //=> foo!
- * MRB_SYM_Q(foo) //=> foo?
- * MRB_SYM_E(foo) //=> foo=
- * MRB_SYM(foo) //=> foo
+ * These macros are expanded to `mrb_intern_lit` if presym is disabled,
+ * therefore the mruby state variable is required. The above macros can be
+ * used when the variable name is `mrb`. If you want to use other variable
+ * names, you need to use macros with `_2` suffix, such as `MRB_SYM_2`.
*/
-#define MRB_OPSYM(name) MRB_OPSYM__##name /* Operator */
-#define MRB_CVSYM(name) MRB_CVSYM__##name /* Class Variable */
-#define MRB_IVSYM(name) MRB_IVSYM__##name /* Instance Variable */
-#define MRB_SYM_B(name) MRB_SYM_B__##name /* Method with Bang */
-#define MRB_SYM_Q(name) MRB_SYM_Q__##name /* Method with Question mark */
-#define MRB_SYM_E(name) MRB_SYM_E__##name /* Method with Equal */
-#define MRB_SYM(name) MRB_SYM__##name /* Word characters */
#endif /* MRUBY_PRESYM_H */
diff --git a/include/mruby/presym/disable.h b/include/mruby/presym/disable.h
new file mode 100644
index 000000000..477405225
--- /dev/null
+++ b/include/mruby/presym/disable.h
@@ -0,0 +1,68 @@
+/**
+** @file mruby/presym/scanning.h - Disable Preallocated Symbols
+**
+** See Copyright Notice in mruby.h
+*/
+
+#ifndef MRUBY_PRESYM_DISABLE_H
+#define MRUBY_PRESYM_DISABLE_H
+
+#include <string.h>
+
+#define MRB_PRESYM_MAX 0
+
+#define MRB_OPSYM(name) MRB_OPSYM__##name(mrb)
+#define MRB_CVSYM(name) mrb_intern_lit(mrb, "@@" #name)
+#define MRB_IVSYM(name) mrb_intern_lit(mrb, "@" #name)
+#define MRB_SYM_B(name) mrb_intern_lit(mrb, #name "!")
+#define MRB_SYM_Q(name) mrb_intern_lit(mrb, #name "?")
+#define MRB_SYM_E(name) mrb_intern_lit(mrb, #name "=")
+#define MRB_SYM(name) mrb_intern_lit(mrb, #name)
+
+#define MRB_OPSYM_2(mrb, name) MRB_OPSYM__##name(mrb)
+#define MRB_CVSYM_2(mrb, name) mrb_intern_lit(mrb, "@@" #name)
+#define MRB_IVSYM_2(mrb, name) mrb_intern_lit(mrb, "@" #name)
+#define MRB_SYM_B_2(mrb, name) mrb_intern_lit(mrb, #name "!")
+#define MRB_SYM_Q_2(mrb, name) mrb_intern_lit(mrb, #name "?")
+#define MRB_SYM_E_2(mrb, name) mrb_intern_lit(mrb, #name "=")
+#define MRB_SYM_2(mrb, name) mrb_intern_lit(mrb, #name)
+
+#define MRB_OPSYM__not(mrb) mrb_intern_lit(mrb, "!")
+#define MRB_OPSYM__mod(mrb) mrb_intern_lit(mrb, "%")
+#define MRB_OPSYM__and(mrb) mrb_intern_lit(mrb, "&")
+#define MRB_OPSYM__mul(mrb) mrb_intern_lit(mrb, "*")
+#define MRB_OPSYM__add(mrb) mrb_intern_lit(mrb, "+")
+#define MRB_OPSYM__sub(mrb) mrb_intern_lit(mrb, "-")
+#define MRB_OPSYM__div(mrb) mrb_intern_lit(mrb, "/")
+#define MRB_OPSYM__lt(mrb) mrb_intern_lit(mrb, "<")
+#define MRB_OPSYM__gt(mrb) mrb_intern_lit(mrb, ">")
+#define MRB_OPSYM__xor(mrb) mrb_intern_lit(mrb, "^")
+#define MRB_OPSYM__tick(mrb) mrb_intern_lit(mrb, "`")
+#define MRB_OPSYM__or(mrb) mrb_intern_lit(mrb, "|")
+#define MRB_OPSYM__neg(mrb) mrb_intern_lit(mrb, "~")
+#define MRB_OPSYM__neq(mrb) mrb_intern_lit(mrb, "!=")
+#define MRB_OPSYM__nmatch(mrb) mrb_intern_lit(mrb, "!~")
+#define MRB_OPSYM__andand(mrb) mrb_intern_lit(mrb, "&&")
+#define MRB_OPSYM__pow(mrb) mrb_intern_lit(mrb, "**")
+#define MRB_OPSYM__plus(mrb) mrb_intern_lit(mrb, "+@")
+#define MRB_OPSYM__minus(mrb) mrb_intern_lit(mrb, "-@")
+#define MRB_OPSYM__lshift(mrb) mrb_intern_lit(mrb, "<<")
+#define MRB_OPSYM__le(mrb) mrb_intern_lit(mrb, "<=")
+#define MRB_OPSYM__eq(mrb) mrb_intern_lit(mrb, "==")
+#define MRB_OPSYM__match(mrb) mrb_intern_lit(mrb, "=~")
+#define MRB_OPSYM__ge(mrb) mrb_intern_lit(mrb, ">=")
+#define MRB_OPSYM__rshift(mrb) mrb_intern_lit(mrb, ">>")
+#define MRB_OPSYM__aref(mrb) mrb_intern_lit(mrb, "[]")
+#define MRB_OPSYM__oror(mrb) mrb_intern_lit(mrb, "||")
+#define MRB_OPSYM__cmp(mrb) mrb_intern_lit(mrb, "<=>")
+#define MRB_OPSYM__eqq(mrb) mrb_intern_lit(mrb, "===")
+#define MRB_OPSYM__aset(mrb) mrb_intern_lit(mrb, "[]=")
+
+#define MRB_PRESYM_DEFINE_VAR_AND_INITER(name, size, ...) \
+ static mrb_sym name[size]; \
+ static void init_##name(mrb_state *mrb) { \
+ mrb_sym name__[] = {__VA_ARGS__}; \
+ memcpy(name, name__, sizeof(name)); \
+ }
+
+#endif /* MRUBY_PRESYM_DISABLE_H */
diff --git a/include/mruby/presym/enable.h b/include/mruby/presym/enable.h
new file mode 100644
index 000000000..0aec7274d
--- /dev/null
+++ b/include/mruby/presym/enable.h
@@ -0,0 +1,45 @@
+/**
+** @file mruby/presym/scanning.h - Enable Preallocated Symbols
+**
+** See Copyright Notice in mruby.h
+*/
+
+#ifndef MRUBY_PRESYM_ENABLE_H
+#define MRUBY_PRESYM_ENABLE_H
+
+#undef MRB_PRESYM_MAX
+#ifdef MRB_USE_ALL_SYMBOLS
+# define MRB_PRESYM_NAMED(lit, num, type, name) MRB_##type##__##name = (num),
+#else
+# define MRB_PRESYM_NAMED(lit, num, type, name) MRB_##type##__##name = (num<<1),
+#endif
+#define MRB_PRESYM_UNNAMED(lit, num)
+
+enum mruby_presym {
+# include <mruby/presym.inc>
+};
+
+#undef MRB_PRESYM_NAMED
+#undef MRB_PRESYM_UNNAMED
+
+#define MRB_OPSYM(name) MRB_OPSYM__##name
+#define MRB_CVSYM(name) MRB_CVSYM__##name
+#define MRB_IVSYM(name) MRB_IVSYM__##name
+#define MRB_SYM_B(name) MRB_SYM_B__##name
+#define MRB_SYM_Q(name) MRB_SYM_Q__##name
+#define MRB_SYM_E(name) MRB_SYM_E__##name
+#define MRB_SYM(name) MRB_SYM__##name
+
+#define MRB_OPSYM_2(mrb, name) MRB_OPSYM__##name
+#define MRB_CVSYM_2(mrb, name) MRB_CVSYM__##name
+#define MRB_IVSYM_2(mrb, name) MRB_IVSYM__##name
+#define MRB_SYM_B_2(mrb, name) MRB_SYM_B__##name
+#define MRB_SYM_Q_2(mrb, name) MRB_SYM_Q__##name
+#define MRB_SYM_E_2(mrb, name) MRB_SYM_E__##name
+#define MRB_SYM_2(mrb, name) MRB_SYM__##name
+
+#define MRB_PRESYM_DEFINE_VAR_AND_INITER(name, size, ...) \
+ static const mrb_sym name[] = {__VA_ARGS__}; \
+ static void init_##name(mrb_state *mrb) {}
+
+#endif /* MRUBY_PRESYM_ENABLE_H */
diff --git a/include/mruby/presym/scanning.h b/include/mruby/presym/scanning.h
new file mode 100644
index 000000000..11a3ba312
--- /dev/null
+++ b/include/mruby/presym/scanning.h
@@ -0,0 +1,69 @@
+/**
+** @file mruby/presym/scanning.h - Scanning Preallocated Symbols
+**
+** See Copyright Notice in mruby.h
+*/
+
+#ifndef MRUBY_PRESYM_SCANNING_H
+#define MRUBY_PRESYM_SCANNING_H
+
+#define MRB_PRESYM_SCANNING_TAGGED(arg) <@! arg !@>
+
+#undef mrb_intern_lit
+#define mrb_intern_lit(mrb, name) MRB_PRESYM_SCANNING_TAGGED(name)
+#define mrb_define_method(mrb, c, name, f, a) MRB_PRESYM_SCANNING_TAGGED(name)
+#define mrb_define_class_method(mrb, c, name, f, a) MRB_PRESYM_SCANNING_TAGGED(name)
+#define mrb_define_class(mrb, name, s) MRB_PRESYM_SCANNING_TAGGED(name)
+#define mrb_define_module(mrb, name) MRB_PRESYM_SCANNING_TAGGED(name)
+#define mrb_define_module_function(mrb, c, name, f, s) MRB_PRESYM_SCANNING_TAGGED(name)
+#define mrb_define_const(mrb, c, name, v) MRB_PRESYM_SCANNING_TAGGED(name)
+#define mrb_define_global_const(mrb, name, v) MRB_PRESYM_SCANNING_TAGGED(name)
+
+#define MRB_OPSYM(name) MRB_OPSYM__##name(mrb)
+#define MRB_CVSYM(name) MRB_PRESYM_SCANNING_TAGGED("@@" #name)
+#define MRB_IVSYM(name) MRB_PRESYM_SCANNING_TAGGED("@" #name)
+#define MRB_SYM_B(name) MRB_PRESYM_SCANNING_TAGGED(#name "!")
+#define MRB_SYM_Q(name) MRB_PRESYM_SCANNING_TAGGED(#name "?")
+#define MRB_SYM_E(name) MRB_PRESYM_SCANNING_TAGGED(#name "=")
+#define MRB_SYM(name) MRB_PRESYM_SCANNING_TAGGED(#name)
+
+#define MRB_OPSYM_2(mrb, name) MRB_OPSYM__##name(mrb)
+#define MRB_CVSYM_2(mrb, name) MRB_PRESYM_SCANNING_TAGGED("@@" #name)
+#define MRB_IVSYM_2(mrb, name) MRB_PRESYM_SCANNING_TAGGED("@" #name)
+#define MRB_SYM_B_2(mrb, name) MRB_PRESYM_SCANNING_TAGGED(#name "!")
+#define MRB_SYM_Q_2(mrb, name) MRB_PRESYM_SCANNING_TAGGED(#name "?")
+#define MRB_SYM_E_2(mrb, name) MRB_PRESYM_SCANNING_TAGGED(#name "=")
+#define MRB_SYM_2(mrb, name) MRB_PRESYM_SCANNING_TAGGED(#name)
+
+#define MRB_OPSYM__not(mrb) MRB_PRESYM_SCANNING_TAGGED("!")
+#define MRB_OPSYM__mod(mrb) MRB_PRESYM_SCANNING_TAGGED("%")
+#define MRB_OPSYM__and(mrb) MRB_PRESYM_SCANNING_TAGGED("&")
+#define MRB_OPSYM__mul(mrb) MRB_PRESYM_SCANNING_TAGGED("*")
+#define MRB_OPSYM__add(mrb) MRB_PRESYM_SCANNING_TAGGED("+")
+#define MRB_OPSYM__sub(mrb) MRB_PRESYM_SCANNING_TAGGED("-")
+#define MRB_OPSYM__div(mrb) MRB_PRESYM_SCANNING_TAGGED("/")
+#define MRB_OPSYM__lt(mrb) MRB_PRESYM_SCANNING_TAGGED("<")
+#define MRB_OPSYM__gt(mrb) MRB_PRESYM_SCANNING_TAGGED(">")
+#define MRB_OPSYM__xor(mrb) MRB_PRESYM_SCANNING_TAGGED("^")
+#define MRB_OPSYM__tick(mrb) MRB_PRESYM_SCANNING_TAGGED("`")
+#define MRB_OPSYM__or(mrb) MRB_PRESYM_SCANNING_TAGGED("|")
+#define MRB_OPSYM__neg(mrb) MRB_PRESYM_SCANNING_TAGGED("~")
+#define MRB_OPSYM__neq(mrb) MRB_PRESYM_SCANNING_TAGGED("!=")
+#define MRB_OPSYM__nmatch(mrb) MRB_PRESYM_SCANNING_TAGGED("!~")
+#define MRB_OPSYM__andand(mrb) MRB_PRESYM_SCANNING_TAGGED("&&")
+#define MRB_OPSYM__pow(mrb) MRB_PRESYM_SCANNING_TAGGED("**")
+#define MRB_OPSYM__plus(mrb) MRB_PRESYM_SCANNING_TAGGED("+@")
+#define MRB_OPSYM__minus(mrb) MRB_PRESYM_SCANNING_TAGGED("-@")
+#define MRB_OPSYM__lshift(mrb) MRB_PRESYM_SCANNING_TAGGED("<<")
+#define MRB_OPSYM__le(mrb) MRB_PRESYM_SCANNING_TAGGED("<=")
+#define MRB_OPSYM__eq(mrb) MRB_PRESYM_SCANNING_TAGGED("==")
+#define MRB_OPSYM__match(mrb) MRB_PRESYM_SCANNING_TAGGED("=~")
+#define MRB_OPSYM__ge(mrb) MRB_PRESYM_SCANNING_TAGGED(">=")
+#define MRB_OPSYM__rshift(mrb) MRB_PRESYM_SCANNING_TAGGED(">>")
+#define MRB_OPSYM__aref(mrb) MRB_PRESYM_SCANNING_TAGGED("[]")
+#define MRB_OPSYM__oror(mrb) MRB_PRESYM_SCANNING_TAGGED("||")
+#define MRB_OPSYM__cmp(mrb) MRB_PRESYM_SCANNING_TAGGED("<=>")
+#define MRB_OPSYM__eqq(mrb) MRB_PRESYM_SCANNING_TAGGED("===")
+#define MRB_OPSYM__aset(mrb) MRB_PRESYM_SCANNING_TAGGED("[]=")
+
+#endif /* MRUBY_PRESYM_SCANNING_H */
diff --git a/lib/mruby/build.rb b/lib/mruby/build.rb
index 8fe1da2de..2819ad594 100644
--- a/lib/mruby/build.rb
+++ b/lib/mruby/build.rb
@@ -5,6 +5,7 @@ require "mruby/build/command"
module MRuby
autoload :Gem, "mruby/gem"
autoload :Lockfile, "mruby/lockfile"
+ autoload :Presym, "mruby/presym"
class << self
def targets
@@ -51,6 +52,7 @@ module MRuby
class Build
class << self
attr_accessor :current
+
def mruby_config_path
path = ENV['MRUBY_CONFIG'] || ENV['CONFIG']
if path.nil? || path.empty?
@@ -61,11 +63,16 @@ module MRuby
end
path
end
+
+ def install_dir
+ @install_dir ||= ENV['INSTALL_DIR'] || "#{MRUBY_ROOT}/bin"
+ end
end
+
include Rake::DSL
include LoadGems
attr_accessor :name, :bins, :exts, :file_separator, :build_dir, :gem_clone_dir
- attr_reader :libmruby_core_objs, :libmruby_objs, :gems, :toolchains, :gem_dir_to_repo_url
+ attr_reader :products, :libmruby_core_objs, :libmruby_objs, :gems, :toolchains, :presym, :mrbc_build, :gem_dir_to_repo_url
alias libmruby libmruby_objs
@@ -73,16 +80,16 @@ module MRuby
COMMANDS = COMPILERS + %w(linker archiver yacc gperf git exts mrbc)
attr_block MRuby::Build::COMMANDS
- Exts = Struct.new(:object, :executable, :library)
+ Exts = Struct.new(:object, :executable, :library, :preprocessed)
- def initialize(name='host', build_dir=nil, &block)
+ def initialize(name='host', build_dir=nil, internal: false, &block)
@name = name.to_s
unless current = MRuby.targets[@name]
if ENV['OS'] == 'Windows_NT'
- @exts = Exts.new('.o', '.exe', '.a')
+ @exts = Exts.new('.o', '.exe', '.a', '.i')
else
- @exts = Exts.new('.o', '', '.a')
+ @exts = Exts.new('.o', '', '.a', '.i')
end
build_dir = build_dir || ENV['MRUBY_BUILD_DIR'] || "#{MRUBY_ROOT}/build"
@@ -101,6 +108,7 @@ module MRuby
@git = Command::Git.new(self)
@mrbc = Command::Mrbc.new(self)
+ @products = []
@bins = []
@gems = MRuby::Gem::List.new
@libmruby_core_objs = []
@@ -113,6 +121,9 @@ module MRuby
@enable_bintest = false
@enable_test = false
@enable_lock = true
+ @enable_presym = true
+ @mrbcfile_external = false
+ @internal = internal
@toolchains = []
@gem_dir_to_repo_url = {}
@@ -121,7 +132,14 @@ module MRuby
MRuby::Build.current = current
current.instance_eval(&block)
- current.build_mrbc_exec if current.libmruby_enabled? && @name == "host"
+ if current.libmruby_enabled? && !current.mrbcfile_external?
+ if current.presym_enabled?
+ current.create_mrbc_build if current.host? || current.gems["mruby-bin-mrbc"]
+ elsif current.host?
+ current.build_mrbc_exec
+ end
+ end
+ current.presym = Presym.new(current) if current.presym_enabled?
current.build_mrbtest if current.test_enabled?
end
@@ -149,6 +167,17 @@ module MRuby
@enable_debug = true
end
+ def presym_enabled?
+ @enable_presym
+ end
+
+ def disable_presym
+ if @enable_presym
+ @enable_presym = false
+ compilers.each{|c| c.defines << "MRB_NO_PRESYM"}
+ end
+ end
+
def disable_lock
@enable_lock = false
end
@@ -200,8 +229,29 @@ module MRuby
@cxx_abi_enabled = true
end
- def compile_as_cxx src, cxx_src, obj = nil, includes = []
- obj = objfile(cxx_src) if obj.nil?
+ def compile_as_cxx(src, cxx_src = nil, obj = nil, includes = [])
+ #
+ # If `cxx_src` is specified, this method behaves the same as before as
+ # compatibility mode, but `.d` file is not read.
+ #
+ # If `cxx_src` is omitted, `.d` file is read by using mruby standard
+ # Rake rule (C++ source name is also changed).
+ #
+ if cxx_src
+ obj ||= cxx_src + @exts.object
+ dsts = [obj]
+ dsts << (cxx_src + @exts.preprocessed) if presym_enabled?
+ defines = []
+ include_paths = ["#{MRUBY_ROOT}/src", *includes]
+ dsts.each do |dst|
+ file dst => cxx_src do |t|
+ cxx.run t.name, t.prerequisites.first, defines, include_paths
+ end
+ end
+ else
+ cxx_src = "#{build_dir}/#{src.relative_path})".ext << "-cxx.cxx"
+ obj = cxx_src.ext(@exts.object)
+ end
file cxx_src => [src, __FILE__] do |t|
mkdir_p File.dirname t.name
@@ -219,10 +269,6 @@ extern "C" {
EOS
end
- file obj => cxx_src do |t|
- cxx.run t.name, t.prerequisites.first, [], ["#{MRUBY_ROOT}/src"] + includes
- end
-
obj
end
@@ -263,11 +309,11 @@ EOS
end
def build_mrbtest
- gem :core => 'mruby-test'
+ gem :core => 'mruby-test' unless @gems['mruby-test']
end
def build_mrbc_exec
- gem :core => 'mruby-bin-mrbc'
+ gem :core => 'mruby-bin-mrbc' unless @gems['mruby-bin-mrbc']
end
def locks
@@ -278,10 +324,23 @@ EOS
return @mrbcfile if @mrbcfile
gem_name = "mruby-bin-mrbc"
- gem = gems[gem_name] || MRuby.targets["host"].gems[gem_name]
+ gem = @gems[gem_name]
+ gem ||= (host = MRuby.targets["host"]) && host.gems[gem_name]
+ unless gem
+ fail "external mrbc or mruby-bin-mrbc gem in current('#{@name}') or 'host' build is required"
+ end
@mrbcfile = exefile("#{gem.build.build_dir}/bin/mrbc")
end
+ def mrbcfile=(path)
+ @mrbcfile = path
+ @mrbcfile_external = true
+ end
+
+ def mrbcfile_external?
+ @mrbcfile_external
+ end
+
def compilers
COMPILERS.map do |c|
instance_variable_get("@#{c}")
@@ -289,7 +348,7 @@ EOS
end
def define_rules
- use_mrdb = @gems.find{|g| g.name == "mruby-bin-debugger"}
+ use_mrdb = @gems["mruby-bin-debugger"]
compilers.each do |compiler|
if respond_to?(:enable_gems?) && enable_gems?
compiler.defines -= %w(MRB_NO_GEMS)
@@ -298,7 +357,10 @@ EOS
end
compiler.defines |= %w(MRB_USE_DEBUG_HOOK) if use_mrdb
end
- cc.define_rules(build_dir, MRUBY_ROOT)
+ [@cc, *(@cxx if cxx_exception_enabled?)].each do |compiler|
+ compiler.define_rules(@build_dir, MRUBY_ROOT, @exts.object)
+ compiler.define_rules(@build_dir, MRUBY_ROOT, @exts.preprocessed) if presym_enabled?
+ end
end
def filename(name)
@@ -359,7 +421,8 @@ EOS
puts ">>> Bintest #{name} <<<"
targets = @gems.select { |v| File.directory? "#{v.dir}/bintest" }.map { |v| filename v.dir }
targets << filename(".") if File.directory? "./bintest"
- env = {"BUILD_DIR" => @build_dir}
+ mrbc = @gems["mruby-bin-mrbc"] ? exefile("#{@build_dir}/bin/mrbc") : mrbcfile
+ env = {"BUILD_DIR" => @build_dir, "MRBCFILE" => mrbc}
sh env, "ruby test/bintest.rb#{verbose_flag} #{targets.join ' '}"
end
@@ -393,6 +456,41 @@ EOS
def libraries
[libmruby_static]
end
+
+ def host?
+ @name == "host"
+ end
+
+ def internal?
+ @internal
+ end
+
+ protected
+
+ attr_writer :presym
+
+ def create_mrbc_build
+ exclusions = %i[@name @build_dir @gems @enable_test @enable_bintest @internal]
+ name = "#{@name}/mrbc"
+ MRuby.targets.delete(name)
+ build = self.class.new(name, internal: true){}
+ instance_variables.each do |n|
+ next if exclusions.include?(n)
+ v = instance_variable_get(n)
+ v = case v
+ when nil, true, false, Numeric; v
+ when String, Command; v.clone
+ else Marshal.load(Marshal.dump(v)) # deep clone
+ end
+ build.instance_variable_set(n, v)
+ end
+ build.build_mrbc_exec
+ build.disable_libmruby
+ build.disable_presym
+ @mrbc_build = build
+ self.mrbcfile = build.mrbcfile
+ build
+ end
end # Build
class CrossBuild < Build
@@ -405,7 +503,7 @@ EOS
def initialize(name, build_dir=nil, &block)
@test_runner = Command::CrossTestRunner.new(self)
super
- unless MRuby.targets['host']
+ unless mrbcfile_external? || MRuby.targets['host']
# add minimal 'host'
MRuby::Build.new('host') do |conf|
if ENV['VisualStudioVersion'] || ENV['VSINSTALLDIR']
@@ -413,16 +511,13 @@ EOS
else
toolchain :gcc
end
- conf.gem :core => 'mruby-bin-mrbc'
+ conf.build_mrbc_exec
conf.disable_libmruby
+ conf.disable_presym
end
end
end
- def mrbcfile
- MRuby.targets['host'].mrbcfile
- end
-
def run_test
@test_runner.runner_options << verbose_flag
mrbtest = exefile("#{build_dir}/bin/mrbtest")
@@ -433,5 +528,9 @@ EOS
@test_runner.run(mrbtest)
end
end
+
+ protected
+
+ def create_mrbc_build; end
end # CrossBuild
end # MRuby
diff --git a/lib/mruby/build/command.rb b/lib/mruby/build/command.rb
index 80657eadc..9362a9d95 100644
--- a/lib/mruby/build/command.rb
+++ b/lib/mruby/build/command.rb
@@ -42,6 +42,7 @@ module MRuby
attr_accessor :label, :flags, :include_paths, :defines, :source_exts
attr_accessor :compile_options, :option_define, :option_include_path, :out_ext
attr_accessor :cxx_compile_flag, :cxx_exception_flag, :cxx_invalid_flags
+ attr_writer :preprocess_options
def initialize(build, source_exts=[], label: "CC")
super(build)
@@ -55,9 +56,15 @@ module MRuby
@option_define = %q[-D"%s"]
@compile_options = %q[%{flags} -o "%{outfile}" -c "%{infile}"]
@cxx_invalid_flags = []
+ @out_ext = build.exts.object
end
alias header_search_paths include_paths
+
+ def preprocess_options
+ @preprocess_options ||= @compile_options.sub(/(?:\A|\s)\K-c(?=\s)/, "-E -P")
+ end
+
def search_header_path(name)
header_search_paths.find do |v|
File.exist? build.filename("#{v}/#{name}").sub(/^"(.*)"$/, '\1')
@@ -79,13 +86,20 @@ module MRuby
def run(outfile, infile, _defines=[], _include_paths=[], _flags=[])
mkdir_p File.dirname(outfile)
- _pp @label, infile.relative_path, outfile.relative_path
- _run compile_options, { :flags => all_flags(_defines, _include_paths, _flags),
- :infile => filename(infile), :outfile => filename(outfile) }
+ flags = all_flags(_defines, _include_paths, _flags)
+ if File.extname(outfile) == build.exts.object
+ label = @label
+ opts = compile_options
+ else
+ label = "CPP"
+ opts = preprocess_options
+ flags << " -DMRB_PRESYM_SCANNING"
+ end
+ _pp label, infile.relative_path, outfile.relative_path
+ _run opts, flags: flags, infile: filename(infile), outfile: filename(outfile)
end
- def define_rules(build_dir, source_dir='')
- @out_ext = build.exts.object
+ def define_rules(build_dir, source_dir='', out_ext=build.exts.object)
gemrake = File.join(source_dir, "mrbgem.rake")
rakedep = File.exist?(gemrake) ? [ gemrake ] : []
@@ -143,10 +157,10 @@ module MRuby
# /src/value_array.h:
#
def get_dependencies(file)
- file = file.ext('d') unless File.extname(file) == '.d'
- return [MRUBY_CONFIG] unless File.exist?(file)
+ dep_file = "#{file}.d"
+ return [MRUBY_CONFIG] unless File.exist?(dep_file)
- deps = File.read(file).gsub("\\\n ", "").split("\n").map do |dep_line|
+ deps = File.read(dep_file).gsub("\\\n ", "").split("\n").map do |dep_line|
# dep_line:
# - "/build/host/src/array.o: /src/array.c /include/mruby/common.h ..."
# - ""
@@ -187,6 +201,10 @@ module MRuby
[libraries, _libraries].flatten.map{ |d| option_library % d }.join(' ')
end
+ def run_attrs
+ [@libraries, @library_paths, @flags, @flags_before_libraries, @flags_after_libraries]
+ end
+
def run(outfile, objfiles, _libraries=[], _library_paths=[], _flags=[], _flags_before_libraries=[], _flags_after_libraries=[])
mkdir_p File.dirname(outfile)
library_flags = [libraries, _libraries].flatten.map { |d| option_library % d }
diff --git a/lib/mruby/gem.rb b/lib/mruby/gem.rb
index e3b758f4f..4e918745f 100644
--- a/lib/mruby/gem.rb
+++ b/lib/mruby/gem.rb
@@ -7,7 +7,6 @@ module MRuby
class << self
attr_accessor :current
end
- LinkerConfig = Struct.new(:libraries, :library_paths, :flags, :flags_before_libraries, :flags_after_libraries)
class Specification
include Rake::DSL
@@ -50,13 +49,13 @@ module MRuby
end
def setup
- return if defined?(@linker) # return if already set up
+ return if defined?(@bins) # return if already set up
MRuby::Gem.current = self
MRuby::Build::COMMANDS.each do |command|
instance_variable_set("@#{command}", @build.send(command).clone)
end
- @linker = LinkerConfig.new([], [], [], [], [])
+ @linker.run_attrs.each(&:clear)
@rbfiles = Dir.glob("#{@dir}/mrblib/**/*.rb").sort
@objs = Dir.glob("#{@dir}/src/*.{c,cpp,cxx,cc,m,asm,s,S}").map do |f|
@@ -72,6 +71,7 @@ module MRuby
@test_args = {}
@bins = []
+ @cdump = true
@requirements = []
@export_include_paths = []
@@ -81,7 +81,6 @@ module MRuby
@generate_functions = !(@rbfiles.empty? && @objs.empty?)
@objs << objfile("#{build_dir}/gem_init") if @generate_functions
- @cdump = core? # by default core gems use cdump and others use mrb dump
if !name || !licenses || !authors
fail "#{name || dir} required to set name, license(s) and author(s)"
@@ -96,10 +95,11 @@ module MRuby
end
def setup_compilers
- (core? ? [cc] : compilers).each do |compiler|
- compiler.define_rules build_dir, "#{dir}"
+ (core? ? [@cc, *(@cxx if build.cxx_exception_enabled?)] : compilers).each do |compiler|
+ compiler.define_rules build_dir, @dir, @build.exts.preprocessed if build.presym_enabled?
+ compiler.define_rules build_dir, @dir, @build.exts.object
compiler.defines << %Q[MRBGEM_#{funcname.upcase}_VERSION=#{version}]
- compiler.include_paths << "#{dir}/include" if File.directory? "#{dir}/include"
+ compiler.include_paths << "#{@dir}/include" if File.directory? "#{@dir}/include"
end
define_gem_init_builder if @generate_functions
@@ -114,12 +114,12 @@ module MRuby
return false
end
- def enable_cdump
- @cdump = true
+ def disable_cdump
+ @cdump = false
end
def cdump?
- @cdump
+ build.presym_enabled? && @cdump
end
def core?
@@ -175,7 +175,6 @@ module MRuby
end
def define_gem_init_builder
- file objfile("#{build_dir}/gem_init") => [ "#{build_dir}/gem_init.c", File.join(dir, "mrbgem.rake") ]
file "#{build_dir}/gem_init.c" => [build.mrbcfile, __FILE__] + [rbfiles].flatten do |t|
mkdir_p build_dir
generate_gem_init("#{build_dir}/gem_init.c")
@@ -187,7 +186,7 @@ module MRuby
open(fname, 'w') do |f|
print_gem_init_header f
unless rbfiles.empty?
- if @cdump
+ if cdump?
build.mrbc.run f, rbfiles, "gem_mrblib_#{funcname}_proc"
else
build.mrbc.run f, rbfiles, "gem_mrblib_irep_#{funcname}", false
@@ -198,10 +197,10 @@ module MRuby
f.puts %Q[]
f.puts %Q[void GENERATED_TMP_mrb_#{funcname}_gem_init(mrb_state *mrb) {]
f.puts %Q[ int ai = mrb_gc_arena_save(mrb);]
- f.puts %Q[ struct REnv *e;] unless rbfiles.empty?
+ f.puts %Q[ gem_mrblib_#{funcname}_proc_init_syms(mrb);] if !rbfiles.empty? && cdump?
f.puts %Q[ mrb_#{funcname}_gem_init(mrb);] if objs != [objfile("#{build_dir}/gem_init")]
unless rbfiles.empty?
- if @cdump
+ if cdump?
f.puts %Q[ mrb_load_proc(mrb, gem_mrblib_#{funcname}_proc);]
else
f.puts %Q[ mrb_load_irep(mrb, gem_mrblib_irep_#{funcname});]
@@ -211,7 +210,7 @@ module MRuby
f.puts %Q[ mrb_close(mrb);]
f.puts %Q[ exit(EXIT_FAILURE);]
f.puts %Q[ }]
- f.puts %Q[ e = mrb->c->cibase->env;]
+ f.puts %Q[ struct REnv *e = mrb->c->cibase->env;]
f.puts %Q[ mrb->c->cibase->env = NULL;]
f.puts %Q[ mrb_env_unshare(mrb, e);]
end
@@ -241,8 +240,6 @@ module MRuby
f.puts %Q[#include <mruby.h>]
else
f.puts %Q[#include <stdlib.h>]
- f.puts %Q[#include <mruby.h>]
- f.puts %Q[#include <mruby/proc.h>]
end
end
@@ -251,7 +248,7 @@ module MRuby
f.puts %Q[#include <stdio.h>]
f.puts %Q[#include <stdlib.h>]
f.puts %Q[#include <mruby.h>]
- f.puts %Q[#include <mruby/proc.h>]
+ f.puts %Q[#include <mruby/irep.h>]
f.puts %Q[#include <mruby/variable.h>]
f.puts %Q[#include <mruby/hash.h>] unless test_args.empty?
end
diff --git a/lib/mruby/presym.rb b/lib/mruby/presym.rb
new file mode 100644
index 000000000..75a903dba
--- /dev/null
+++ b/lib/mruby/presym.rb
@@ -0,0 +1,113 @@
+module MRuby
+ class Presym
+ include Rake::DSL
+
+ OPERATORS = {
+ "!" => "not",
+ "%" => "mod",
+ "&" => "and",
+ "*" => "mul",
+ "+" => "add",
+ "-" => "sub",
+ "/" => "div",
+ "<" => "lt",
+ ">" => "gt",
+ "^" => "xor",
+ "`" => "tick",
+ "|" => "or",
+ "~" => "neg",
+ "!=" => "neq",
+ "!~" => "nmatch",
+ "&&" => "andand",
+ "**" => "pow",
+ "+@" => "plus",
+ "-@" => "minus",
+ "<<" => "lshift",
+ "<=" => "le",
+ "==" => "eq",
+ "=~" => "match",
+ ">=" => "ge",
+ ">>" => "rshift",
+ "[]" => "aref",
+ "||" => "oror",
+ "<=>" => "cmp",
+ "===" => "eqq",
+ "[]=" => "aset",
+ }.freeze
+
+ SYMBOL_TO_MACRO = {
+ # Symbol => Macro
+ # [prefix, suffix] => [prefix, suffix]
+ ["@@" , "" ] => ["CV" , "" ],
+ ["@" , "" ] => ["IV" , "" ],
+ ["" , "!" ] => ["" , "_B" ],
+ ["" , "?" ] => ["" , "_Q" ],
+ ["" , "=" ] => ["" , "_E" ],
+ ["" , "" ] => ["" , "" ],
+ }.freeze
+
+ C_STR_LITERAL_RE = /"(?:[^\\\"]|\\.)*"/
+
+ def initialize(build)
+ @build = build
+ end
+
+ def scan(paths)
+ presym_hash = {}
+ paths.each {|path| read_preprocessed(presym_hash, path)}
+ presym_hash.keys.sort_by!{|sym| [c_literal_size(sym), sym]}
+ end
+
+ def read_list
+ File.readlines(list_path, mode: "r:binary").each(&:chomp!)
+ end
+
+ def write_list(presyms)
+ _pp "GEN", list_path.relative_path
+ File.binwrite(list_path, presyms.join("\n") << "\n")
+ end
+
+ def write_header(presyms)
+ prefix_re = Regexp.union(*SYMBOL_TO_MACRO.keys.map(&:first).uniq)
+ suffix_re = Regexp.union(*SYMBOL_TO_MACRO.keys.map(&:last).uniq)
+ sym_re = /\A(#{prefix_re})?([\w&&\D]\w*)(#{suffix_re})?\z/o
+ _pp "GEN", header_path.relative_path
+ mkdir_p(File.dirname(header_path))
+ File.open(header_path, "w:binary") do |f|
+ f.puts "/* MRB_PRESYM_NAMED(lit, num, type, name) */"
+ f.puts "/* MRB_PRESYM_UNNAMED(lit, num) */"
+ presyms.each.with_index(1) do |sym, num|
+ if sym_re =~ sym && (affixes = SYMBOL_TO_MACRO[[$1, $3]])
+ f.puts %|MRB_PRESYM_NAMED("#{sym}", #{num}, #{affixes * 'SYM'}, #{$2})|
+ elsif name = OPERATORS[sym]
+ f.puts %|MRB_PRESYM_NAMED("#{sym}", #{num}, OPSYM, #{name})|
+ elsif
+ f.puts %|MRB_PRESYM_UNNAMED("#{sym}", #{num})|
+ end
+ end
+ f.puts "#define MRB_PRESYM_MAX #{presyms.size}"
+ end
+ end
+
+ def list_path
+ @list_pat ||= "#{@build.build_dir}/presym".freeze
+ end
+
+ def header_path
+ @header_path ||= "#{@build.build_dir}/include/mruby/presym.inc".freeze
+ end
+
+ private
+
+ def read_preprocessed(presym_hash, path)
+ File.binread(path).scan(/<@! (.*?) !@>/) do |part,|
+ literals = part.scan(C_STR_LITERAL_RE)
+ presym_hash[literals.map{|l| l[1..-2]}.join] = true unless literals.empty?
+ end
+ end
+
+ def c_literal_size(literal_without_quote)
+ literal_without_quote.size # TODO: consider escape sequence
+ end
+ end
+end
diff --git a/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c b/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c
index be73c2e86..b626024d1 100644
--- a/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c
+++ b/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c
@@ -650,9 +650,8 @@ main(int argc, char **argv)
/* generate bytecode */
struct RProc *proc = mrb_generate_code(mrb, parser);
if (proc == NULL) {
- fputs("codegen error\n", stderr);
mrb_parser_free(parser);
- break;
+ continue;
}
if (args.verbose) {
diff --git a/mrbgems/mruby-bin-mruby/mrbgem.rake b/mrbgems/mruby-bin-mruby/mrbgem.rake
index 1415013e3..36bf2fa61 100644
--- a/mrbgems/mruby-bin-mruby/mrbgem.rake
+++ b/mrbgems/mruby-bin-mruby/mrbgem.rake
@@ -7,6 +7,6 @@ MRuby::Gem::Specification.new('mruby-bin-mruby') do |spec|
spec.add_test_dependency('mruby-print', :core => 'mruby-print')
if build.cxx_exception_enabled?
- build.compile_as_cxx("#{spec.dir}/tools/mruby/mruby.c", "#{spec.build_dir}/tools/mruby/mruby.cxx")
+ build.compile_as_cxx("#{spec.dir}/tools/mruby/mruby.c")
end
end
diff --git a/mrbgems/mruby-compiler/core/codegen.c b/mrbgems/mruby-compiler/core/codegen.c
index 4ac092176..00a33021f 100644
--- a/mrbgems/mruby-compiler/core/codegen.c
+++ b/mrbgems/mruby-compiler/core/codegen.c
@@ -819,7 +819,7 @@ for_body(codegen_scope *s, node *tree)
genop_2(s, OP_BLOCK, cursp(), s->irep->rlen-1);
push();pop(); /* space for a block */
pop();
- idx = new_sym(s, MRB_SYM(each));
+ idx = new_sym(s, MRB_SYM_2(s->mrb, each));
genop_3(s, OP_SENDB, cursp(), idx, 0);
}
@@ -1547,14 +1547,14 @@ codegen(codegen_scope *s, node *tree, int val)
gen_move(s, cursp(), exc, 0);
push_n(2); pop_n(2); /* space for one arg and a block */
pop();
- genop_3(s, OP_SEND, cursp(), new_sym(s, MRB_SYM(__case_eqq)), 1);
+ genop_3(s, OP_SEND, cursp(), new_sym(s, MRB_SYM_2(s->mrb, __case_eqq)), 1);
}
else {
if (n4) {
codegen(s, n4->car, VAL);
}
else {
- genop_2(s, OP_GETCONST, cursp(), new_sym(s, MRB_SYM(StandardError)));
+ genop_2(s, OP_GETCONST, cursp(), new_sym(s, MRB_SYM_2(s->mrb, StandardError)));
push();
}
pop();
@@ -1668,7 +1668,7 @@ codegen(codegen_scope *s, node *tree, int val)
{
node *n = tree->car->cdr;
mrb_sym mid = nsym(n->cdr->car);
- mrb_sym mnil = MRB_SYM_Q(nil);
+ mrb_sym mnil = MRB_SYM_Q_2(s->mrb, nil);
if (mid == mnil && n->cdr->cdr->car == NULL) {
nil_p = TRUE;
codegen(s, n->car, VAL);
@@ -1804,10 +1804,10 @@ codegen(codegen_scope *s, node *tree, int val)
gen_move(s, cursp(), head, 0);
push(); push(); pop(); pop(); pop();
if (nint(n->car->car) == NODE_SPLAT) {
- genop_3(s, OP_SEND, cursp(), new_sym(s, MRB_SYM(__case_eqq)), 1);
+ genop_3(s, OP_SEND, cursp(), new_sym(s, MRB_SYM_2(s->mrb, __case_eqq)), 1);
}
else {
- genop_3(s, OP_SEND, cursp(), new_sym(s, MRB_OPSYM(eqq)), 1);
+ genop_3(s, OP_SEND, cursp(), new_sym(s, MRB_OPSYM_2(s->mrb, eqq)), 1);
}
}
else {
@@ -2333,7 +2333,7 @@ codegen(codegen_scope *s, node *tree, int val)
pop_n(n+1);
genop_2S(s, OP_BLKPUSH, cursp(), (ainfo<<4)|(lv & 0xf));
if (sendv) n = CALL_MAXARGS;
- genop_3(s, OP_SEND, cursp(), new_sym(s, MRB_SYM(call)), n);
+ genop_3(s, OP_SEND, cursp(), new_sym(s, MRB_SYM_2(s->mrb, call)), n);
if (val) push();
}
break;
@@ -2582,7 +2582,7 @@ codegen(codegen_scope *s, node *tree, int val)
default:
if (val) {
- int sym = new_sym(s, MRB_OPSYM(minus));
+ int sym = new_sym(s, MRB_OPSYM_2(s->mrb, minus));
codegen(s, tree, VAL);
pop();
genop_3(s, OP_SEND, cursp(), sym, 0);
@@ -2655,7 +2655,7 @@ codegen(codegen_scope *s, node *tree, int val)
{
node *n;
int ai = mrb_gc_arena_save(s->mrb);
- int sym = new_sym(s, MRB_SYM(Kernel));
+ int sym = new_sym(s, MRB_SYM_2(s->mrb, Kernel));
genop_1(s, OP_LOADSELF, cursp());
push();
@@ -2674,7 +2674,7 @@ codegen(codegen_scope *s, node *tree, int val)
}
push(); /* for block */
pop_n(3);
- sym = new_sym(s, MRB_OPSYM(tick)); /* ` */
+ sym = new_sym(s, MRB_OPSYM_2(s->mrb, tick)); /* ` */
genop_3(s, OP_SEND, cursp(), sym, 1);
if (val) push();
mrb_gc_arena_restore(s->mrb, ai);
@@ -2694,7 +2694,7 @@ codegen(codegen_scope *s, node *tree, int val)
genop_bs(s, OP_STRING, cursp(), off);
push(); push();
pop_n(3);
- sym = new_sym(s, MRB_OPSYM(tick)); /* ` */
+ sym = new_sym(s, MRB_OPSYM_2(s->mrb, tick)); /* ` */
genop_3(s, OP_SEND, cursp(), sym, 1);
if (val) push();
mrb_gc_arena_restore(s->mrb, ai);
@@ -2735,7 +2735,7 @@ codegen(codegen_scope *s, node *tree, int val)
}
push(); /* space for a block */
pop_n(argc+2);
- sym = new_sym(s, MRB_SYM(compile));
+ sym = new_sym(s, MRB_SYM_2(s->mrb, compile));
genop_3(s, OP_SEND, cursp(), sym, argc);
mrb_gc_arena_restore(s->mrb, ai);
push();
@@ -2789,7 +2789,7 @@ codegen(codegen_scope *s, node *tree, int val)
}
push(); /* space for a block */
pop_n(argc+2);
- sym = new_sym(s, MRB_SYM(compile));
+ sym = new_sym(s, MRB_SYM_2(s->mrb, compile));
genop_3(s, OP_SEND, cursp(), sym, argc);
mrb_gc_arena_restore(s->mrb, ai);
push();
diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y
index 16e1cef32..680b57d25 100644
--- a/mrbgems/mruby-compiler/core/parse.y
+++ b/mrbgems/mruby-compiler/core/parse.y
@@ -70,6 +70,7 @@ typedef unsigned int stack_type;
#define nsym(x) ((node*)(intptr_t)(x))
#define nint(x) ((node*)(intptr_t)(x))
#define intn(x) ((int)(intptr_t)(x))
+#define typen(x) ((enum node_type)(intptr_t)(x))
#define NUM_SUFFIX_R (1<<0)
#define NUM_SUFFIX_I (1<<1)
@@ -88,7 +89,7 @@ intern_gen(parser_state *p, const char *s, size_t len)
}
#define intern(s,len) intern_gen(p,(s),(len))
-#define intern_lit(s) mrb_intern_lit(p->mrb, s)
+#define intern_op(op) MRB_OPSYM_2(p->mrb, op)
static void
cons_free_gen(parser_state *p, node *cons)
@@ -314,14 +315,14 @@ static void
local_add_blk(parser_state *p, mrb_sym blk)
{
/* allocate register for block */
- local_add_f(p, blk ? blk : MRB_OPSYM(and));
+ local_add_f(p, blk ? blk : intern_op(and));
}
static void
local_add_kw(parser_state *p, mrb_sym kwd)
{
/* allocate register for keywords hash */
- local_add_f(p, kwd ? kwd : MRB_OPSYM(pow));
+ local_add_f(p, kwd ? kwd : intern_op(pow));
}
static node*
@@ -779,7 +780,7 @@ static void
local_add_margs(parser_state *p, node *n)
{
while (n) {
- if (n->car->car == (node*)NODE_MASGN) {
+ if (typen(n->car->car) == NODE_MASGN) {
node *t = n->car->cdr->cdr;
n->car->cdr->cdr = NULL;
@@ -959,13 +960,13 @@ new_op_asgn(parser_state *p, node *a, mrb_sym op, node *b)
static node*
new_imaginary(parser_state *p, node *imaginary)
{
- return new_call(p, new_const(p, MRB_SYM(Kernel)), MRB_SYM(Complex), list1(list2(list3((node*)NODE_INT, (node*)strdup("0"), nint(10)), imaginary)), 1);
+ return new_call(p, new_const(p, MRB_SYM_2(p->mrb, Kernel)), MRB_SYM_2(p->mrb, Complex), list1(list2(list3((node*)NODE_INT, (node*)strdup("0"), nint(10)), imaginary)), 1);
}
static node*
new_rational(parser_state *p, node *rational)
{
- return new_call(p, new_const(p, MRB_SYM(Kernel)), MRB_SYM(Rational), list1(list1(rational)), 1);
+ return new_call(p, new_const(p, MRB_SYM_2(p->mrb, Kernel)), MRB_SYM_2(p->mrb, Rational), list1(list1(rational)), 1);
}
/* (:int . i) */
@@ -1015,7 +1016,7 @@ new_dstr(parser_state *p, node *a)
static int
string_node_p(node *n)
{
- return (int)((enum node_type)(intptr_t)n->car == NODE_STR);
+ return (int)(typen(n->car) == NODE_STR);
}
static node*
@@ -1207,7 +1208,7 @@ call_with_block(parser_state *p, node *a, node *b)
{
node *n;
- switch ((enum node_type)intn(a->car)) {
+ switch (typen(a->car)) {
case NODE_SUPER:
case NODE_ZSUPER:
if (!a->cdr) a->cdr = cons(0, b);
@@ -1281,7 +1282,7 @@ typedef enum mrb_string_type string_type;
static node*
new_strterm(parser_state *p, string_type type, int term, int paren)
{
- return cons(nint(type), cons((node*)0, cons(nint(paren), nint(term))));
+ return cons(nint(type), cons(nint(0), cons(nint(paren), nint(term))));
}
static void
@@ -1499,7 +1500,7 @@ heredoc_end(parser_state *p)
%token tANDDOT /* &. */
%token tSYMBEG tREGEXP_BEG tWORDS_BEG tSYMBOLS_BEG
%token tSTRING_BEG tXSTRING_BEG tSTRING_DVAR tLAMBEG
-%token <nd> tHEREDOC_BEG /* <<, <<- */
+%token <nd> tHEREDOC_BEG /* <<, <<-, <<~ */
%token tHEREDOC_END tLITERAL_DELIM tHD_LITERAL_DELIM
%token <nd> tHD_STRING_PART tHD_STRING_MID
@@ -1706,7 +1707,7 @@ command_asgn : lhs '=' command_rhs
}
| primary_value '[' opt_call_args ']' tOP_ASGN command_rhs
{
- $$ = new_op_asgn(p, new_call(p, $1, MRB_OPSYM(aref), $3, '.'), $5, $6);
+ $$ = new_op_asgn(p, new_call(p, $1, intern_op(aref), $3, '.'), $5, $6);
}
| primary_value call_op tIDENTIFIER tOP_ASGN command_rhs
{
@@ -1962,7 +1963,7 @@ mlhs_node : variable
}
| primary_value '[' opt_call_args ']'
{
- $$ = new_call(p, $1, MRB_OPSYM(aref), $3, '.');
+ $$ = new_call(p, $1, intern_op(aref), $3, '.');
}
| primary_value call_op tIDENTIFIER
{
@@ -2001,7 +2002,7 @@ lhs : variable
}
| primary_value '[' opt_call_args ']'
{
- $$ = new_call(p, $1, MRB_OPSYM(aref), $3, '.');
+ $$ = new_call(p, $1, intern_op(aref), $3, '.');
}
| primary_value call_op tIDENTIFIER
{
@@ -2047,11 +2048,11 @@ cname : tIDENTIFIER
cpath : tCOLON3 cname
{
- $$ = cons((node*)1, nsym($2));
+ $$ = cons(nint(1), nsym($2));
}
| cname
{
- $$ = cons((node*)0, nsym($1));
+ $$ = cons(nint(0), nsym($1));
}
| primary_value tCOLON2 cname
{
@@ -2089,36 +2090,36 @@ undef_list : fsym
}
;
-op : '|' { $$ = MRB_OPSYM(or); }
- | '^' { $$ = MRB_OPSYM(xor); }
- | '&' { $$ = MRB_OPSYM(and); }
- | tCMP { $$ = MRB_OPSYM(cmp); }
- | tEQ { $$ = MRB_OPSYM(eq); }
- | tEQQ { $$ = MRB_OPSYM(eqq); }
- | tMATCH { $$ = MRB_OPSYM(match); }
- | tNMATCH { $$ = MRB_OPSYM(nmatch); }
- | '>' { $$ = MRB_OPSYM(gt); }
- | tGEQ { $$ = MRB_OPSYM(ge); }
- | '<' { $$ = MRB_OPSYM(lt); }
- | tLEQ { $$ = MRB_OPSYM(le); }
- | tNEQ { $$ = MRB_OPSYM(neq); }
- | tLSHFT { $$ = MRB_OPSYM(lshift); }
- | tRSHFT { $$ = MRB_OPSYM(rshift); }
- | '+' { $$ = MRB_OPSYM(add); }
- | '-' { $$ = MRB_OPSYM(sub); }
- | '*' { $$ = MRB_OPSYM(mul); }
- | tSTAR { $$ = MRB_OPSYM(mul); }
- | '/' { $$ = MRB_OPSYM(div); }
- | '%' { $$ = MRB_OPSYM(mod); }
- | tPOW { $$ = MRB_OPSYM(pow); }
- | tDSTAR { $$ = MRB_OPSYM(pow); }
- | '!' { $$ = MRB_OPSYM(not); }
- | '~' { $$ = MRB_OPSYM(neg); }
- | tUPLUS { $$ = MRB_OPSYM(plus); }
- | tUMINUS { $$ = MRB_OPSYM(minus); }
- | tAREF { $$ = MRB_OPSYM(aref); }
- | tASET { $$ = MRB_OPSYM(aset); }
- | '`' { $$ = MRB_OPSYM(tick); }
+op : '|' { $$ = intern_op(or); }
+ | '^' { $$ = intern_op(xor); }
+ | '&' { $$ = intern_op(and); }
+ | tCMP { $$ = intern_op(cmp); }
+ | tEQ { $$ = intern_op(eq); }
+ | tEQQ { $$ = intern_op(eqq); }
+ | tMATCH { $$ = intern_op(match); }
+ | tNMATCH { $$ = intern_op(nmatch); }
+ | '>' { $$ = intern_op(gt); }
+ | tGEQ { $$ = intern_op(ge); }
+ | '<' { $$ = intern_op(lt); }
+ | tLEQ { $$ = intern_op(le); }
+ | tNEQ { $$ = intern_op(neq); }
+ | tLSHFT { $$ = intern_op(lshift); }
+ | tRSHFT { $$ = intern_op(rshift); }
+ | '+' { $$ = intern_op(add); }
+ | '-' { $$ = intern_op(sub); }
+ | '*' { $$ = intern_op(mul); }
+ | tSTAR { $$ = intern_op(mul); }
+ | '/' { $$ = intern_op(div); }
+ | '%' { $$ = intern_op(mod); }
+ | tPOW { $$ = intern_op(pow); }
+ | tDSTAR { $$ = intern_op(pow); }
+ | '!' { $$ = intern_op(not); }
+ | '~' { $$ = intern_op(neg); }
+ | tUPLUS { $$ = intern_op(plus); }
+ | tUMINUS { $$ = intern_op(minus); }
+ | tAREF { $$ = intern_op(aref); }
+ | tASET { $$ = intern_op(aset); }
+ | '`' { $$ = intern_op(tick); }
;
reswords : keyword__LINE__ | keyword__FILE__ | keyword__ENCODING__
@@ -2145,7 +2146,7 @@ arg : lhs '=' arg_rhs
}
| primary_value '[' opt_call_args ']' tOP_ASGN arg_rhs
{
- $$ = new_op_asgn(p, new_call(p, $1, MRB_OPSYM(aref), $3, '.'), $5, $6);
+ $$ = new_op_asgn(p, new_call(p, $1, intern_op(aref), $3, '.'), $5, $6);
}
| primary_value call_op tIDENTIFIER tOP_ASGN arg_rhs
{
@@ -2400,14 +2401,14 @@ paren_args : '(' opt_call_args ')'
| '(' args comma tBDOT3 rparen
{
#if 1
- mrb_sym r = MRB_OPSYM(mul);
- mrb_sym b = MRB_OPSYM(and);
+ mrb_sym r = intern_op(mul);
+ mrb_sym b = intern_op(and);
$$ = cons(push($2, new_splat(p, new_lvar(p, r))),
new_block_arg(p, new_lvar(p, b)));
#else
- mrb_sym r = MRB_OPSYM(mul);
- mrb_sym k = MRB_OPSYM(pow);
- mrb_sym b = MRB_OPSYM(and);
+ mrb_sym r = intern_op(mul);
+ mrb_sym k = intern_op(pow);
+ mrb_sym b = intern_op(and);
$$ = cons(list2(push($2, new_splat(p, new_lvar(p, r))),
new_kw_hash(p, list1(cons(new_kw_rest_args(p, 0), new_lvar(p, k))))),
new_block_arg(p, new_lvar(p, b)));
@@ -2416,16 +2417,16 @@ paren_args : '(' opt_call_args ')'
| '(' tBDOT3 rparen
{
#if 1
- mrb_sym r = MRB_OPSYM(mul);
- mrb_sym b = MRB_OPSYM(and);
+ mrb_sym r = intern_op(mul);
+ mrb_sym b = intern_op(and);
if (local_var_p(p, r) && local_var_p(p, b)) {
$$ = cons(list1(new_splat(p, new_lvar(p, r))),
new_block_arg(p, new_lvar(p, b)));
}
#else
- mrb_sym r = MRB_OPSYM(mul);
- mrb_sym k = MRB_OPSYM(pow);
- mrb_sym b = MRB_OPSYM(and);
+ mrb_sym r = intern_op(mul);
+ mrb_sym k = intern_op(pow);
+ mrb_sym b = intern_op(and);
if (local_var_p(p, r) && local_var_p(p, k) && local_var_p(p, b)) {
$$ = cons(list2(new_splat(p, new_lvar(p, r)),
new_kw_hash(p, list1(cons(new_kw_rest_args(p, 0), new_lvar(p, k))))),
@@ -2866,11 +2867,11 @@ f_margs : f_arg
| f_arg ',' tSTAR
{
local_add_f(p, 0);
- $$ = list3($1, (node*)-1, 0);
+ $$ = list3($1, nint(-1), 0);
}
| f_arg ',' tSTAR ',' f_arg
{
- $$ = list3($1, (node*)-1, $5);
+ $$ = list3($1, nint(-1), $5);
}
| tSTAR f_norm_arg
{
@@ -2883,7 +2884,7 @@ f_margs : f_arg
| tSTAR
{
local_add_f(p, 0);
- $$ = list3(0, (node*)-1, 0);
+ $$ = list3(0, nint(-1), 0);
}
| tSTAR ','
{
@@ -2891,7 +2892,7 @@ f_margs : f_arg
}
f_arg
{
- $$ = list3(0, (node*)-1, $4);
+ $$ = list3(0, nint(-1), $4);
}
;
@@ -3072,7 +3073,7 @@ do_block : keyword_do_block
block_call : command do_block
{
- if ($1->car == (node*)NODE_YIELD) {
+ if (typen($1->car) == NODE_YIELD) {
yyerror(p, "block given to yield");
}
else {
@@ -3114,11 +3115,11 @@ method_call : operation paren_args
}
| primary_value call_op paren_args
{
- $$ = new_call(p, $1, MRB_SYM(call), $3, $2);
+ $$ = new_call(p, $1, MRB_SYM_2(p->mrb, call), $3, $2);
}
| primary_value tCOLON2 paren_args
{
- $$ = new_call(p, $1, MRB_SYM(call), $3, tCOLON2);
+ $$ = new_call(p, $1, MRB_SYM_2(p->mrb, call), $3, tCOLON2);
}
| keyword_super paren_args
{
@@ -3130,7 +3131,7 @@ method_call : operation paren_args
}
| primary_value '[' opt_call_args ']'
{
- $$ = new_call(p, $1, MRB_OPSYM(aref), $3, '.');
+ $$ = new_call(p, $1, intern_op(aref), $3, '.');
}
;
@@ -3513,15 +3514,15 @@ f_arglist_paren : '(' f_args rparen
{
#if 1
/* til real keyword args implemented */
- mrb_sym r = MRB_OPSYM(mul);
- mrb_sym b = MRB_OPSYM(and);
+ mrb_sym r = intern_op(mul);
+ mrb_sym b = intern_op(and);
local_add_f(p, r);
$$ = new_args(p, $2, 0, r, 0,
new_args_tail(p, 0, 0, b));
#else
- mrb_sym r = MRB_OPSYM(mul);
- mrb_sym k = MRB_OPSYM(pow);
- mrb_sym b = MRB_OPSYM(and);
+ mrb_sym r = intern_op(mul);
+ mrb_sym k = intern_op(pow);
+ mrb_sym b = intern_op(and);
local_add_f(p, r); local_add_f(p, k);
$$ = new_args(p, $2, 0, r, 0,
new_args_tail(p, 0, new_kw_rest_args(p, nsym(k)), b));
@@ -3531,15 +3532,15 @@ f_arglist_paren : '(' f_args rparen
{
#if 1
/* til real keyword args implemented */
- mrb_sym r = MRB_OPSYM(mul);
- mrb_sym b = MRB_OPSYM(and);
+ mrb_sym r = intern_op(mul);
+ mrb_sym b = intern_op(and);
local_add_f(p, r);
$$ = new_args(p, 0, 0, r, 0,
new_args_tail(p, 0, 0, b));
#else
- mrb_sym r = MRB_OPSYM(mul);
- mrb_sym k = MRB_OPSYM(pow);
- mrb_sym b = MRB_OPSYM(and);
+ mrb_sym r = intern_op(mul);
+ mrb_sym k = intern_op(pow);
+ mrb_sym b = intern_op(and);
local_add_f(p, r); local_add_f(p, k);
$$ = new_args(p, 0, 0, r, 0,
new_args_tail(p, 0, new_kw_rest_args(p, nsym(k)), b));
@@ -3705,7 +3706,7 @@ f_args : f_arg ',' f_optarg ',' f_rest_arg opt_args_tail
}
| /* none */
{
- local_add_f(p, MRB_OPSYM(and));
+ local_add_f(p, intern_op(and));
$$ = new_args(p, 0, 0, 0, 0, 0);
}
;
@@ -3829,7 +3830,7 @@ f_rest_arg : restarg_mark tIDENTIFIER
}
| restarg_mark
{
- local_add_f(p, MRB_OPSYM(mul));
+ local_add_f(p, intern_op(mul));
$$ = -1;
}
;
@@ -3865,7 +3866,7 @@ singleton : var_ref
yyerror(p, "can't define singleton method for ().");
}
else {
- switch ((enum node_type)intn($3->car)) {
+ switch (typen($3->car)) {
case NODE_STR:
case NODE_DSTR:
case NODE_XSTR:
@@ -3920,7 +3921,7 @@ assoc : arg tASSOC arg
| string_fragment label_tag arg
{
void_expr_error(p, $3);
- if ($1->car == (node*)NODE_DSTR) {
+ if (typen($1->car) == NODE_DSTR) {
$$ = cons(new_dsym(p, $1), $3);
}
else {
@@ -4624,6 +4625,93 @@ read_escape(parser_state *p)
}
}
+static void
+heredoc_count_indent(parser_heredoc_info *hinf, const char *str, size_t len, size_t *indent, size_t *offset)
+{
+ *indent = 0;
+ *offset = 0;
+ for (size_t i = 0; i < len; i++) {
+ size_t size;
+ if (str[i] == '\n')
+ break;
+ else if (str[i] == '\t')
+ size = 8;
+ else if (ISSPACE(str[i]))
+ size = 1;
+ else
+ break;
+ if (*indent + size > hinf->indent)
+ break;
+ *indent += size;
+ *offset += 1;
+ }
+}
+
+static void
+heredoc_remove_indent(parser_state *p, parser_heredoc_info *hinf)
+{
+ if (!hinf->remove_indent)
+ return;
+ node *indented, *n, *pair, *escaped;
+ const char *str;
+ size_t len, indent, offset, start, end;
+ indented = hinf->indented;
+ while (indented) {
+ n = indented->car;
+ pair = n->car;
+ str = (char*)pair->car;
+ len = (size_t)pair->cdr;
+ escaped = n->cdr;
+ if (escaped) {
+ start = 0;
+ while (start < len) {
+ end = escaped ? (size_t)escaped->car : len;
+ heredoc_count_indent(hinf, str + start, end - start, &indent, &offset);
+ if (indent < hinf->indent)
+ hinf->indent = indent;
+ start = end;
+ if (escaped)
+ escaped = escaped->cdr;
+ }
+ }
+ indented = indented->cdr;
+ }
+ if (hinf->indent == 0)
+ return;
+ indented = hinf->indented;
+ while (indented) {
+ n = indented->car;
+ pair = n->car;
+ str = (char*)pair->car;
+ len = (size_t)pair->cdr;
+ escaped = n->cdr;
+ if (escaped) {
+ char *newstr = strndup(str, len);
+ size_t newlen = 0;
+ start = 0;
+ while (start < len) {
+ end = escaped ? (size_t)escaped->car : len;
+ size_t esclen = end - start;
+ heredoc_count_indent(hinf, str + start, esclen, &indent, &offset);
+ esclen -= offset;
+ memcpy(newstr + newlen, str + start + offset, esclen);
+ newlen += esclen;
+ start = end;
+ if (escaped)
+ escaped = escaped->cdr;
+ }
+ newstr[newlen] = '\0';
+ pair->car = (node*)newstr;
+ pair->cdr = (node*)newlen;
+ } else {
+ heredoc_count_indent(hinf, str, len, &indent, &offset);
+ pair->car = (node*)(str + offset);
+ pair->cdr = (node*)(len - offset);
+ }
+ indented = indented->cdr;
+ }
+}
+
static int
parse_string(parser_state *p)
{
@@ -4634,10 +4722,18 @@ parse_string(parser_state *p)
int end = intn(p->lex_strterm->cdr->cdr->cdr);
parser_heredoc_info *hinf = (type & STR_FUNC_HEREDOC) ? parsing_heredoc_inf(p) : NULL;
+ mrb_bool unindent = hinf && hinf->remove_indent;
+ mrb_bool head = hinf && hinf->line_head;
+ mrb_bool empty = TRUE;
+ size_t spaces = 0;
+ size_t pos = -1;
+ node *escaped = NULL;
+
if (beg == 0) beg = -3; /* should never happen */
if (end == 0) end = -3;
newtok(p);
while ((c = nextc(p)) != end || nest_level != 0) {
+ pos++;
if (hinf && (c == '\n' || c < 0)) {
mrb_bool line_head;
tokadd(p, '\n');
@@ -4657,6 +4753,7 @@ parse_string(parser_state *p)
}
}
if ((len-1 == hinf->term_len) && (strncmp(s, hinf->term, len-1) == 0)) {
+ heredoc_remove_indent(p, hinf);
return tHEREDOC_END;
}
}
@@ -4675,9 +4772,23 @@ parse_string(parser_state *p)
}
return 0;
}
- pylval.nd = new_str(p, tok(p), toklen(p));
+ node *nd = new_str(p, tok(p), toklen(p));
+ pylval.nd = nd;
+ if (unindent && head) {
+ hinf->indented = push(hinf->indented, cons(nd->cdr, escaped));
+ if ((hinf->indent == ~0U || spaces < hinf->indent) && (!empty || !line_head))
+ hinf->indent = spaces;
+ }
return tHD_STRING_MID;
}
+ if (unindent && head && empty) {
+ if (c == '\t')
+ spaces += 8;
+ else if (ISSPACE(c))
+ ++spaces;
+ else
+ empty = FALSE;
+ }
if (c < 0) {
yyerror(p, "unterminated string meets end of file");
return 0;
@@ -4699,6 +4810,10 @@ parse_string(parser_state *p)
else if (c == '\n') {
p->lineno++;
p->column = 0;
+ if (unindent) {
+ escaped = push(escaped, (node*)pos);
+ pos--;
+ }
if (type & STR_FUNC_ARRAY) {
tokadd(p, '\n');
}
@@ -4748,8 +4863,14 @@ parse_string(parser_state *p)
tokfix(p);
p->lstate = EXPR_BEG;
p->cmd_start = TRUE;
- pylval.nd = new_str(p, tok(p), toklen(p));
+ node *nd = new_str(p, tok(p), toklen(p));
+ pylval.nd = nd;
if (hinf) {
+ if (unindent && head) {
+ hinf->indented = push(hinf->indented, cons(nd->cdr, escaped));
+ if (hinf->indent == ~0U || spaces < hinf->indent)
+ hinf->indent = spaces;
+ }
hinf->line_head = FALSE;
return tHD_STRING_PART;
}
@@ -4870,7 +4991,7 @@ number_literal_suffix(parser_state *p)
int mask = NUM_SUFFIX_R|NUM_SUFFIX_I;
while ((c = nextc(p)) != -1) {
- list = push(list, (node*)(intptr_t)c);
+ list = push(list, nint(c));
if ((mask & NUM_SUFFIX_I) && c == 'i') {
result |= (mask & NUM_SUFFIX_I);
@@ -4906,6 +5027,7 @@ heredoc_identifier(parser_state *p)
int c;
int type = str_heredoc;
mrb_bool indent = FALSE;
+ mrb_bool squiggly = FALSE;
mrb_bool quote = FALSE;
node *newnode;
parser_heredoc_info *info;
@@ -4915,8 +5037,11 @@ heredoc_identifier(parser_state *p)
pushback(p, c);
return 0;
}
- if (c == '-') {
- indent = TRUE;
+ if (c == '-' || c == '~') {
+ if (c == '-')
+ indent = TRUE;
+ if (c == '~')
+ squiggly = TRUE;
c = nextc(p);
}
if (c == '\'' || c == '"') {
@@ -4943,6 +5068,7 @@ heredoc_identifier(parser_state *p)
if (! identchar(c)) {
pushback(p, c);
if (indent) pushback(p, '-');
+ if (squiggly) pushback(p, '~');
return 0;
}
newtok(p);
@@ -4959,7 +5085,10 @@ heredoc_identifier(parser_state *p)
if (! quote)
type |= STR_FUNC_EXPAND;
info->type = (string_type)type;
- info->allow_indent = indent;
+ info->allow_indent = indent || squiggly;
+ info->remove_indent = squiggly;
+ info->indent = ~0U;
+ info->indented = NULL;
info->line_head = TRUE;
info->doc = NULL;
p->heredocs_from_nextline = push(p->heredocs_from_nextline, newnode);
@@ -5086,7 +5215,7 @@ parser_yylex(parser_state *p)
case '*':
if ((c = nextc(p)) == '*') {
if ((c = nextc(p)) == '=') {
- pylval.id = MRB_OPSYM(pow);
+ pylval.id = intern_op(pow);
p->lstate = EXPR_BEG;
return tOP_ASGN;
}
@@ -5104,7 +5233,7 @@ parser_yylex(parser_state *p)
}
else {
if (c == '=') {
- pylval.id = MRB_OPSYM(mul);
+ pylval.id = intern_op(mul);
p->lstate = EXPR_BEG;
return tOP_ASGN;
}
@@ -5220,7 +5349,7 @@ parser_yylex(parser_state *p)
}
if (c == '<') {
if ((c = nextc(p)) == '=') {
- pylval.id = MRB_OPSYM(lshift);
+ pylval.id = intern_op(lshift);
p->lstate = EXPR_BEG;
return tOP_ASGN;
}
@@ -5242,7 +5371,7 @@ parser_yylex(parser_state *p)
}
if (c == '>') {
if ((c = nextc(p)) == '=') {
- pylval.id = MRB_OPSYM(rshift);
+ pylval.id = intern_op(rshift);
p->lstate = EXPR_BEG;
return tOP_ASGN;
}
@@ -5350,7 +5479,7 @@ parser_yylex(parser_state *p)
if ((c = nextc(p)) == '&') {
p->lstate = EXPR_BEG;
if ((c = nextc(p)) == '=') {
- pylval.id = MRB_OPSYM(andand);
+ pylval.id = intern_op(andand);
p->lstate = EXPR_BEG;
return tOP_ASGN;
}
@@ -5362,7 +5491,7 @@ parser_yylex(parser_state *p)
return tANDDOT;
}
else if (c == '=') {
- pylval.id = MRB_OPSYM(and);
+ pylval.id = intern_op(and);
p->lstate = EXPR_BEG;
return tOP_ASGN;
}
@@ -5389,7 +5518,7 @@ parser_yylex(parser_state *p)
if ((c = nextc(p)) == '|') {
p->lstate = EXPR_BEG;
if ((c = nextc(p)) == '=') {
- pylval.id = MRB_OPSYM(oror);
+ pylval.id = intern_op(oror);
p->lstate = EXPR_BEG;
return tOP_ASGN;
}
@@ -5397,7 +5526,7 @@ parser_yylex(parser_state *p)
return tOROP;
}
if (c == '=') {
- pylval.id = MRB_OPSYM(or);
+ pylval.id = intern_op(or);
p->lstate = EXPR_BEG;
return tOP_ASGN;
}
@@ -5421,7 +5550,7 @@ parser_yylex(parser_state *p)
return '+';
}
if (c == '=') {
- pylval.id = MRB_OPSYM(add);
+ pylval.id = intern_op(add);
p->lstate = EXPR_BEG;
return tOP_ASGN;
}
@@ -5449,7 +5578,7 @@ parser_yylex(parser_state *p)
return '-';
}
if (c == '=') {
- pylval.id = MRB_OPSYM(sub);
+ pylval.id = intern_op(sub);
p->lstate = EXPR_BEG;
return tOP_ASGN;
}
@@ -5772,7 +5901,7 @@ parser_yylex(parser_state *p)
return tREGEXP_BEG;
}
if ((c = nextc(p)) == '=') {
- pylval.id = MRB_OPSYM(div);
+ pylval.id = intern_op(div);
p->lstate = EXPR_BEG;
return tOP_ASGN;
}
@@ -5791,7 +5920,7 @@ parser_yylex(parser_state *p)
case '^':
if ((c = nextc(p)) == '=') {
- pylval.id = MRB_OPSYM(xor);
+ pylval.id = intern_op(xor);
p->lstate = EXPR_BEG;
return tOP_ASGN;
}
@@ -5844,6 +5973,7 @@ parser_yylex(parser_state *p)
p->paren_nest++;
if (p->lstate == EXPR_FNAME || p->lstate == EXPR_DOT) {
p->lstate = EXPR_ARG;
+ p->paren_nest--;
if ((c = nextc(p)) == ']') {
if ((c = nextc(p)) == '=') {
return tASET;
@@ -5968,7 +6098,7 @@ parser_yylex(parser_state *p)
}
}
if ((c = nextc(p)) == '=') {
- pylval.id = MRB_OPSYM(mod);
+ pylval.id = intern_op(mod);
p->lstate = EXPR_BEG;
return tOP_ASGN;
}
@@ -7168,7 +7298,7 @@ mrb_parser_dump(mrb_state *mrb, node *tree, int offset)
if (n2->car) {
dump_prefix(n2, offset+2);
printf("rest:\n");
- if (n2->car == (node*)-1) {
+ if (n2->car == nint(-1)) {
dump_prefix(n2, offset+2);
printf("(empty)\n");
}
@@ -7410,11 +7540,11 @@ mrb_parser_dump(mrb_state *mrb, node *tree, int offset)
case NODE_CLASS:
printf("NODE_CLASS:\n");
- if (tree->car->car == (node*)0) {
+ if (tree->car->car == nint(0)) {
dump_prefix(tree, offset+1);
printf(":%s\n", mrb_sym_name(mrb, sym(tree->car->cdr)));
}
- else if (tree->car->car == (node*)1) {
+ else if (tree->car->car == nint(1)) {
dump_prefix(tree, offset+1);
printf("::%s\n", mrb_sym_name(mrb, sym(tree->car->cdr)));
}
@@ -7435,11 +7565,11 @@ mrb_parser_dump(mrb_state *mrb, node *tree, int offset)
case NODE_MODULE:
printf("NODE_MODULE:\n");
- if (tree->car->car == (node*)0) {
+ if (tree->car->car == nint(0)) {
dump_prefix(tree, offset+1);
printf(":%s\n", mrb_sym_name(mrb, sym(tree->car->cdr)));
}
- else if (tree->car->car == (node*)1) {
+ else if (tree->car->car == nint(1)) {
dump_prefix(tree, offset+1);
printf("::%s\n", mrb_sym_name(mrb, sym(tree->car->cdr)));
}
diff --git a/mrbgems/mruby-compiler/core/y.tab.c b/mrbgems/mruby-compiler/core/y.tab.c
index 012f4a74e..a715abd0e 100644
--- a/mrbgems/mruby-compiler/core/y.tab.c
+++ b/mrbgems/mruby-compiler/core/y.tab.c
@@ -16,7 +16,7 @@
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program. If not, see <https://www.gnu.org/licenses/>. */
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
/* As a special exception, you may create a larger work that contains
part or all of the Bison parser skeleton and distribute that work
@@ -133,6 +133,7 @@ typedef unsigned int stack_type;
#define nsym(x) ((node*)(intptr_t)(x))
#define nint(x) ((node*)(intptr_t)(x))
#define intn(x) ((int)(intptr_t)(x))
+#define typen(x) ((enum node_type)(intptr_t)(x))
#define NUM_SUFFIX_R (1<<0)
#define NUM_SUFFIX_I (1<<1)
@@ -151,7 +152,7 @@ intern_gen(parser_state *p, const char *s, size_t len)
}
#define intern(s,len) intern_gen(p,(s),(len))
-#define intern_lit(s) mrb_intern_lit(p->mrb, s)
+#define intern_op(op) MRB_OPSYM_2(p->mrb, op)
static void
cons_free_gen(parser_state *p, node *cons)
@@ -377,14 +378,14 @@ static void
local_add_blk(parser_state *p, mrb_sym blk)
{
/* allocate register for block */
- local_add_f(p, blk ? blk : MRB_OPSYM(and));
+ local_add_f(p, blk ? blk : intern_op(and));
}
static void
local_add_kw(parser_state *p, mrb_sym kwd)
{
/* allocate register for keywords hash */
- local_add_f(p, kwd ? kwd : MRB_OPSYM(pow));
+ local_add_f(p, kwd ? kwd : intern_op(pow));
}
static node*
@@ -842,7 +843,7 @@ static void
local_add_margs(parser_state *p, node *n)
{
while (n) {
- if (n->car->car == (node*)NODE_MASGN) {
+ if (typen(n->car->car) == NODE_MASGN) {
node *t = n->car->cdr->cdr;
n->car->cdr->cdr = NULL;
@@ -1022,13 +1023,13 @@ new_op_asgn(parser_state *p, node *a, mrb_sym op, node *b)
static node*
new_imaginary(parser_state *p, node *imaginary)
{
- return new_call(p, new_const(p, MRB_SYM(Kernel)), MRB_SYM(Complex), list1(list2(list3((node*)NODE_INT, (node*)strdup("0"), nint(10)), imaginary)), 1);
+ return new_call(p, new_const(p, MRB_SYM_2(p->mrb, Kernel)), MRB_SYM_2(p->mrb, Complex), list1(list2(list3((node*)NODE_INT, (node*)strdup("0"), nint(10)), imaginary)), 1);
}
static node*
new_rational(parser_state *p, node *rational)
{
- return new_call(p, new_const(p, MRB_SYM(Kernel)), MRB_SYM(Rational), list1(list1(rational)), 1);
+ return new_call(p, new_const(p, MRB_SYM_2(p->mrb, Kernel)), MRB_SYM_2(p->mrb, Rational), list1(list1(rational)), 1);
}
/* (:int . i) */
@@ -1078,7 +1079,7 @@ new_dstr(parser_state *p, node *a)
static int
string_node_p(node *n)
{
- return (int)((enum node_type)(intptr_t)n->car == NODE_STR);
+ return (int)(typen(n->car) == NODE_STR);
}
static node*
@@ -1270,7 +1271,7 @@ call_with_block(parser_state *p, node *a, node *b)
{
node *n;
- switch ((enum node_type)intn(a->car)) {
+ switch (typen(a->car)) {
case NODE_SUPER:
case NODE_ZSUPER:
if (!a->cdr) a->cdr = cons(0, b);
@@ -1344,7 +1345,7 @@ typedef enum mrb_string_type string_type;
static node*
new_strterm(parser_state *p, string_type type, int term, int paren)
{
- return cons(nint(type), cons((node*)0, cons(nint(paren), nint(term))));
+ return cons(nint(type), cons(nint(0), cons(nint(paren), nint(term))));
}
static void
@@ -1431,7 +1432,7 @@ heredoc_end(parser_state *p)
/* xxx ----------------------------- */
-#line 1435 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 1436 "mrbgems/mruby-compiler/core/y.tab.c"
# ifndef YY_CAST
# ifdef __cplusplus
@@ -1603,7 +1604,7 @@ extern int yydebug;
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
union YYSTYPE
{
-#line 1377 "mrbgems/mruby-compiler/core/parse.y"
+#line 1378 "mrbgems/mruby-compiler/core/parse.y"
node *nd;
mrb_sym id;
@@ -1611,7 +1612,7 @@ union YYSTYPE
stack_type stack;
const struct vtable *vars;
-#line 1615 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 1616 "mrbgems/mruby-compiler/core/y.tab.c"
};
typedef union YYSTYPE YYSTYPE;
@@ -1997,67 +1998,67 @@ static const yytype_uint8 yytranslate[] =
/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
static const yytype_int16 yyrline[] =
{
- 0, 1536, 1536, 1536, 1547, 1553, 1557, 1562, 1566, 1572,
- 1574, 1573, 1587, 1614, 1620, 1624, 1629, 1633, 1639, 1639,
- 1643, 1647, 1651, 1655, 1659, 1663, 1667, 1672, 1673, 1677,
- 1681, 1685, 1689, 1696, 1699, 1703, 1707, 1711, 1715, 1719,
- 1724, 1728, 1735, 1736, 1740, 1744, 1745, 1749, 1753, 1757,
- 1761, 1765, 1775, 1774, 1789, 1798, 1799, 1802, 1803, 1810,
- 1809, 1824, 1828, 1833, 1837, 1842, 1846, 1851, 1855, 1859,
- 1863, 1867, 1873, 1877, 1883, 1884, 1890, 1894, 1898, 1902,
- 1906, 1910, 1914, 1918, 1922, 1926, 1932, 1933, 1939, 1943,
- 1949, 1953, 1959, 1963, 1967, 1971, 1975, 1979, 1985, 1991,
- 1998, 2002, 2006, 2010, 2014, 2018, 2024, 2030, 2035, 2041,
- 2045, 2048, 2052, 2056, 2063, 2064, 2065, 2066, 2071, 2078,
- 2079, 2082, 2086, 2086, 2092, 2093, 2094, 2095, 2096, 2097,
- 2098, 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107,
- 2108, 2109, 2110, 2111, 2112, 2113, 2114, 2115, 2116, 2117,
- 2118, 2119, 2120, 2121, 2124, 2124, 2124, 2125, 2125, 2126,
- 2126, 2126, 2127, 2127, 2127, 2127, 2128, 2128, 2128, 2129,
- 2129, 2129, 2130, 2130, 2130, 2130, 2131, 2131, 2131, 2131,
- 2132, 2132, 2132, 2132, 2133, 2133, 2133, 2133, 2134, 2134,
- 2134, 2134, 2135, 2135, 2138, 2142, 2146, 2150, 2154, 2158,
- 2162, 2167, 2172, 2177, 2181, 2185, 2189, 2193, 2197, 2201,
- 2205, 2209, 2213, 2217, 2221, 2225, 2229, 2233, 2237, 2241,
- 2245, 2249, 2253, 2257, 2261, 2265, 2269, 2273, 2277, 2281,
- 2285, 2289, 2293, 2297, 2301, 2305, 2309, 2313, 2317, 2321,
- 2325, 2333, 2342, 2351, 2361, 2367, 2368, 2373, 2377, 2384,
- 2388, 2396, 2400, 2416, 2442, 2443, 2446, 2447, 2448, 2453,
- 2458, 2465, 2471, 2476, 2481, 2486, 2493, 2493, 2504, 2510,
- 2514, 2520, 2521, 2524, 2530, 2536, 2541, 2548, 2553, 2558,
- 2565, 2566, 2567, 2568, 2569, 2570, 2571, 2572, 2576, 2581,
- 2580, 2592, 2596, 2591, 2601, 2601, 2605, 2609, 2613, 2617,
- 2622, 2627, 2631, 2635, 2639, 2643, 2647, 2648, 2654, 2660,
- 2653, 2672, 2680, 2688, 2688, 2688, 2695, 2695, 2695, 2702,
- 2708, 2713, 2715, 2712, 2724, 2722, 2740, 2745, 2738, 2762,
- 2760, 2776, 2786, 2797, 2801, 2805, 2809, 2815, 2822, 2823,
- 2824, 2827, 2828, 2831, 2832, 2840, 2841, 2847, 2851, 2854,
- 2858, 2862, 2866, 2871, 2875, 2879, 2883, 2889, 2888, 2898,
- 2902, 2906, 2910, 2916, 2921, 2926, 2930, 2934, 2938, 2942,
- 2946, 2950, 2954, 2958, 2962, 2966, 2970, 2974, 2978, 2982,
- 2988, 2993, 3000, 3000, 3004, 3009, 3016, 3020, 3026, 3027,
- 3030, 3035, 3038, 3042, 3048, 3052, 3059, 3058, 3073, 3083,
- 3087, 3092, 3099, 3103, 3107, 3111, 3115, 3119, 3123, 3127,
- 3131, 3138, 3137, 3152, 3151, 3167, 3175, 3184, 3187, 3194,
- 3197, 3201, 3202, 3205, 3209, 3212, 3216, 3219, 3220, 3221,
- 3222, 3225, 3226, 3232, 3233, 3234, 3238, 3244, 3245, 3251,
- 3256, 3255, 3266, 3270, 3276, 3280, 3286, 3290, 3296, 3299,
- 3300, 3303, 3309, 3315, 3316, 3319, 3326, 3325, 3339, 3343,
- 3350, 3355, 3362, 3368, 3369, 3370, 3371, 3372, 3376, 3382,
- 3386, 3392, 3393, 3394, 3398, 3404, 3408, 3412, 3416, 3420,
- 3426, 3430, 3436, 3440, 3444, 3448, 3452, 3456, 3464, 3471,
- 3482, 3483, 3487, 3491, 3490, 3506, 3512, 3530, 3550, 3551,
- 3557, 3563, 3569, 3576, 3581, 3588, 3592, 3598, 3602, 3608,
- 3609, 3612, 3616, 3622, 3626, 3630, 3634, 3640, 3645, 3650,
- 3654, 3658, 3662, 3666, 3670, 3674, 3678, 3682, 3686, 3690,
- 3694, 3698, 3702, 3707, 3713, 3718, 3723, 3728, 3733, 3740,
- 3744, 3751, 3756, 3755, 3767, 3771, 3777, 3785, 3793, 3801,
- 3805, 3811, 3815, 3821, 3822, 3825, 3830, 3837, 3838, 3841,
- 3847, 3851, 3857, 3862, 3862, 3887, 3888, 3894, 3899, 3905,
- 3906, 3909, 3915, 3920, 3930, 3937, 3938, 3939, 3942, 3943,
- 3944, 3945, 3948, 3949, 3950, 3953, 3954, 3957, 3961, 3967,
- 3968, 3974, 3975, 3978, 3979, 3982, 3985, 3986, 3987, 3990,
- 3991, 3992, 3995, 4002, 4003, 4007
+ 0, 1537, 1537, 1537, 1548, 1554, 1558, 1563, 1567, 1573,
+ 1575, 1574, 1588, 1615, 1621, 1625, 1630, 1634, 1640, 1640,
+ 1644, 1648, 1652, 1656, 1660, 1664, 1668, 1673, 1674, 1678,
+ 1682, 1686, 1690, 1697, 1700, 1704, 1708, 1712, 1716, 1720,
+ 1725, 1729, 1736, 1737, 1741, 1745, 1746, 1750, 1754, 1758,
+ 1762, 1766, 1776, 1775, 1790, 1799, 1800, 1803, 1804, 1811,
+ 1810, 1825, 1829, 1834, 1838, 1843, 1847, 1852, 1856, 1860,
+ 1864, 1868, 1874, 1878, 1884, 1885, 1891, 1895, 1899, 1903,
+ 1907, 1911, 1915, 1919, 1923, 1927, 1933, 1934, 1940, 1944,
+ 1950, 1954, 1960, 1964, 1968, 1972, 1976, 1980, 1986, 1992,
+ 1999, 2003, 2007, 2011, 2015, 2019, 2025, 2031, 2036, 2042,
+ 2046, 2049, 2053, 2057, 2064, 2065, 2066, 2067, 2072, 2079,
+ 2080, 2083, 2087, 2087, 2093, 2094, 2095, 2096, 2097, 2098,
+ 2099, 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107, 2108,
+ 2109, 2110, 2111, 2112, 2113, 2114, 2115, 2116, 2117, 2118,
+ 2119, 2120, 2121, 2122, 2125, 2125, 2125, 2126, 2126, 2127,
+ 2127, 2127, 2128, 2128, 2128, 2128, 2129, 2129, 2129, 2130,
+ 2130, 2130, 2131, 2131, 2131, 2131, 2132, 2132, 2132, 2132,
+ 2133, 2133, 2133, 2133, 2134, 2134, 2134, 2134, 2135, 2135,
+ 2135, 2135, 2136, 2136, 2139, 2143, 2147, 2151, 2155, 2159,
+ 2163, 2168, 2173, 2178, 2182, 2186, 2190, 2194, 2198, 2202,
+ 2206, 2210, 2214, 2218, 2222, 2226, 2230, 2234, 2238, 2242,
+ 2246, 2250, 2254, 2258, 2262, 2266, 2270, 2274, 2278, 2282,
+ 2286, 2290, 2294, 2298, 2302, 2306, 2310, 2314, 2318, 2322,
+ 2326, 2334, 2343, 2352, 2362, 2368, 2369, 2374, 2378, 2385,
+ 2389, 2397, 2401, 2417, 2443, 2444, 2447, 2448, 2449, 2454,
+ 2459, 2466, 2472, 2477, 2482, 2487, 2494, 2494, 2505, 2511,
+ 2515, 2521, 2522, 2525, 2531, 2537, 2542, 2549, 2554, 2559,
+ 2566, 2567, 2568, 2569, 2570, 2571, 2572, 2573, 2577, 2582,
+ 2581, 2593, 2597, 2592, 2602, 2602, 2606, 2610, 2614, 2618,
+ 2623, 2628, 2632, 2636, 2640, 2644, 2648, 2649, 2655, 2661,
+ 2654, 2673, 2681, 2689, 2689, 2689, 2696, 2696, 2696, 2703,
+ 2709, 2714, 2716, 2713, 2725, 2723, 2741, 2746, 2739, 2763,
+ 2761, 2777, 2787, 2798, 2802, 2806, 2810, 2816, 2823, 2824,
+ 2825, 2828, 2829, 2832, 2833, 2841, 2842, 2848, 2852, 2855,
+ 2859, 2863, 2867, 2872, 2876, 2880, 2884, 2890, 2889, 2899,
+ 2903, 2907, 2911, 2917, 2922, 2927, 2931, 2935, 2939, 2943,
+ 2947, 2951, 2955, 2959, 2963, 2967, 2971, 2975, 2979, 2983,
+ 2989, 2994, 3001, 3001, 3005, 3010, 3017, 3021, 3027, 3028,
+ 3031, 3036, 3039, 3043, 3049, 3053, 3060, 3059, 3074, 3084,
+ 3088, 3093, 3100, 3104, 3108, 3112, 3116, 3120, 3124, 3128,
+ 3132, 3139, 3138, 3153, 3152, 3168, 3176, 3185, 3188, 3195,
+ 3198, 3202, 3203, 3206, 3210, 3213, 3217, 3220, 3221, 3222,
+ 3223, 3226, 3227, 3233, 3234, 3235, 3239, 3245, 3246, 3252,
+ 3257, 3256, 3267, 3271, 3277, 3281, 3287, 3291, 3297, 3300,
+ 3301, 3304, 3310, 3316, 3317, 3320, 3327, 3326, 3340, 3344,
+ 3351, 3356, 3363, 3369, 3370, 3371, 3372, 3373, 3377, 3383,
+ 3387, 3393, 3394, 3395, 3399, 3405, 3409, 3413, 3417, 3421,
+ 3427, 3431, 3437, 3441, 3445, 3449, 3453, 3457, 3465, 3472,
+ 3483, 3484, 3488, 3492, 3491, 3507, 3513, 3531, 3551, 3552,
+ 3558, 3564, 3570, 3577, 3582, 3589, 3593, 3599, 3603, 3609,
+ 3610, 3613, 3617, 3623, 3627, 3631, 3635, 3641, 3646, 3651,
+ 3655, 3659, 3663, 3667, 3671, 3675, 3679, 3683, 3687, 3691,
+ 3695, 3699, 3703, 3708, 3714, 3719, 3724, 3729, 3734, 3741,
+ 3745, 3752, 3757, 3756, 3768, 3772, 3778, 3786, 3794, 3802,
+ 3806, 3812, 3816, 3822, 3823, 3826, 3831, 3838, 3839, 3842,
+ 3848, 3852, 3858, 3863, 3863, 3888, 3889, 3895, 3900, 3906,
+ 3907, 3910, 3916, 3921, 3931, 3938, 3939, 3940, 3943, 3944,
+ 3945, 3946, 3949, 3950, 3951, 3954, 3955, 3958, 3962, 3968,
+ 3969, 3975, 3976, 3979, 3980, 3983, 3986, 3987, 3988, 3991,
+ 3992, 3993, 3996, 4003, 4004, 4008
};
#endif
@@ -5869,86 +5870,86 @@ yyreduce:
switch (yyn)
{
case 2:
-#line 1536 "mrbgems/mruby-compiler/core/parse.y"
+#line 1537 "mrbgems/mruby-compiler/core/parse.y"
{
p->lstate = EXPR_BEG;
if (!p->locals) p->locals = cons(0,0);
}
-#line 5878 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 5879 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 3:
-#line 1541 "mrbgems/mruby-compiler/core/parse.y"
+#line 1542 "mrbgems/mruby-compiler/core/parse.y"
{
p->tree = new_scope(p, (yyvsp[0].nd));
NODE_LINENO(p->tree, (yyvsp[0].nd));
}
-#line 5887 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 5888 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 4:
-#line 1548 "mrbgems/mruby-compiler/core/parse.y"
+#line 1549 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = (yyvsp[-1].nd);
}
-#line 5895 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 5896 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 5:
-#line 1554 "mrbgems/mruby-compiler/core/parse.y"
+#line 1555 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_begin(p, 0);
}
-#line 5903 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 5904 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 6:
-#line 1558 "mrbgems/mruby-compiler/core/parse.y"
+#line 1559 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_begin(p, (yyvsp[0].nd));
NODE_LINENO((yyval.nd), (yyvsp[0].nd));
}
-#line 5912 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 5913 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 7:
-#line 1563 "mrbgems/mruby-compiler/core/parse.y"
+#line 1564 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = push((yyvsp[-2].nd), newline_node((yyvsp[0].nd)));
}
-#line 5920 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 5921 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 8:
-#line 1567 "mrbgems/mruby-compiler/core/parse.y"
+#line 1568 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_begin(p, 0);
}
-#line 5928 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 5929 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 10:
-#line 1574 "mrbgems/mruby-compiler/core/parse.y"
+#line 1575 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = local_switch(p);
nvars_block(p);
}
-#line 5937 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 5938 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 11:
-#line 1579 "mrbgems/mruby-compiler/core/parse.y"
+#line 1580 "mrbgems/mruby-compiler/core/parse.y"
{
yyerror(p, "BEGIN not supported");
local_resume(p, (yyvsp[-3].nd));
nvars_unnest(p);
(yyval.nd) = 0;
}
-#line 5948 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 5949 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 12:
-#line 1591 "mrbgems/mruby-compiler/core/parse.y"
+#line 1592 "mrbgems/mruby-compiler/core/parse.y"
{
if ((yyvsp[-2].nd)) {
(yyval.nd) = new_rescue(p, (yyvsp[-3].nd), (yyvsp[-2].nd), (yyvsp[-1].nd));
@@ -5970,291 +5971,291 @@ yyreduce:
}
}
}
-#line 5974 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 5975 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 13:
-#line 1615 "mrbgems/mruby-compiler/core/parse.y"
+#line 1616 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = (yyvsp[-1].nd);
}
-#line 5982 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 5983 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 14:
-#line 1621 "mrbgems/mruby-compiler/core/parse.y"
+#line 1622 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_begin(p, 0);
}
-#line 5990 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 5991 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 15:
-#line 1625 "mrbgems/mruby-compiler/core/parse.y"
+#line 1626 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_begin(p, (yyvsp[0].nd));
NODE_LINENO((yyval.nd), (yyvsp[0].nd));
}
-#line 5999 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6000 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 16:
-#line 1630 "mrbgems/mruby-compiler/core/parse.y"
+#line 1631 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = push((yyvsp[-2].nd), newline_node((yyvsp[0].nd)));
}
-#line 6007 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6008 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 17:
-#line 1634 "mrbgems/mruby-compiler/core/parse.y"
+#line 1635 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_begin(p, (yyvsp[0].nd));
}
-#line 6015 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6016 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 18:
-#line 1639 "mrbgems/mruby-compiler/core/parse.y"
+#line 1640 "mrbgems/mruby-compiler/core/parse.y"
{p->lstate = EXPR_FNAME;}
-#line 6021 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6022 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 19:
-#line 1640 "mrbgems/mruby-compiler/core/parse.y"
+#line 1641 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_alias(p, (yyvsp[-2].id), (yyvsp[0].id));
}
-#line 6029 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6030 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 20:
-#line 1644 "mrbgems/mruby-compiler/core/parse.y"
+#line 1645 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = (yyvsp[0].nd);
}
-#line 6037 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6038 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 21:
-#line 1648 "mrbgems/mruby-compiler/core/parse.y"
+#line 1649 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_if(p, cond((yyvsp[0].nd)), (yyvsp[-2].nd), 0);
}
-#line 6045 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6046 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 22:
-#line 1652 "mrbgems/mruby-compiler/core/parse.y"
+#line 1653 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_unless(p, cond((yyvsp[0].nd)), (yyvsp[-2].nd), 0);
}
-#line 6053 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6054 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 23:
-#line 1656 "mrbgems/mruby-compiler/core/parse.y"
+#line 1657 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_while(p, cond((yyvsp[0].nd)), (yyvsp[-2].nd));
}
-#line 6061 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6062 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 24:
-#line 1660 "mrbgems/mruby-compiler/core/parse.y"
+#line 1661 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_until(p, cond((yyvsp[0].nd)), (yyvsp[-2].nd));
}
-#line 6069 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6070 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 25:
-#line 1664 "mrbgems/mruby-compiler/core/parse.y"
+#line 1665 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_mod_rescue(p, (yyvsp[-2].nd), (yyvsp[0].nd));
}
-#line 6077 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6078 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 26:
-#line 1668 "mrbgems/mruby-compiler/core/parse.y"
+#line 1669 "mrbgems/mruby-compiler/core/parse.y"
{
yyerror(p, "END not supported");
(yyval.nd) = new_postexe(p, (yyvsp[-1].nd));
}
-#line 6086 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6087 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 28:
-#line 1674 "mrbgems/mruby-compiler/core/parse.y"
+#line 1675 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_masgn(p, (yyvsp[-2].nd), (yyvsp[0].nd));
}
-#line 6094 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6095 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 29:
-#line 1678 "mrbgems/mruby-compiler/core/parse.y"
+#line 1679 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_asgn(p, (yyvsp[-2].nd), new_array(p, (yyvsp[0].nd)));
}
-#line 6102 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6103 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 30:
-#line 1682 "mrbgems/mruby-compiler/core/parse.y"
+#line 1683 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_masgn(p, (yyvsp[-2].nd), (yyvsp[0].nd));
}
-#line 6110 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6111 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 31:
-#line 1686 "mrbgems/mruby-compiler/core/parse.y"
+#line 1687 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_masgn(p, (yyvsp[-2].nd), new_array(p, (yyvsp[0].nd)));
}
-#line 6118 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6119 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 32:
-#line 1690 "mrbgems/mruby-compiler/core/parse.y"
+#line 1691 "mrbgems/mruby-compiler/core/parse.y"
{
node *lhs = new_lvar(p, (yyvsp[0].id));
void_expr_error(p, (yyvsp[-2].nd));
assignable(p, lhs);
(yyval.nd) = new_asgn(p, lhs, (yyvsp[-2].nd));
}
-#line 6129 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6130 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 34:
-#line 1700 "mrbgems/mruby-compiler/core/parse.y"
+#line 1701 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_asgn(p, (yyvsp[-2].nd), (yyvsp[0].nd));
}
-#line 6137 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6138 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 35:
-#line 1704 "mrbgems/mruby-compiler/core/parse.y"
+#line 1705 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_op_asgn(p, (yyvsp[-2].nd), (yyvsp[-1].id), (yyvsp[0].nd));
}
-#line 6145 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6146 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 36:
-#line 1708 "mrbgems/mruby-compiler/core/parse.y"
+#line 1709 "mrbgems/mruby-compiler/core/parse.y"
{
- (yyval.nd) = new_op_asgn(p, new_call(p, (yyvsp[-5].nd), MRB_OPSYM(aref), (yyvsp[-3].nd), '.'), (yyvsp[-1].id), (yyvsp[0].nd));
+ (yyval.nd) = new_op_asgn(p, new_call(p, (yyvsp[-5].nd), intern_op(aref), (yyvsp[-3].nd), '.'), (yyvsp[-1].id), (yyvsp[0].nd));
}
-#line 6153 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6154 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 37:
-#line 1712 "mrbgems/mruby-compiler/core/parse.y"
+#line 1713 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_op_asgn(p, new_call(p, (yyvsp[-4].nd), (yyvsp[-2].id), 0, (yyvsp[-3].num)), (yyvsp[-1].id), (yyvsp[0].nd));
}
-#line 6161 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6162 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 38:
-#line 1716 "mrbgems/mruby-compiler/core/parse.y"
+#line 1717 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_op_asgn(p, new_call(p, (yyvsp[-4].nd), (yyvsp[-2].id), 0, (yyvsp[-3].num)), (yyvsp[-1].id), (yyvsp[0].nd));
}
-#line 6169 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6170 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 39:
-#line 1720 "mrbgems/mruby-compiler/core/parse.y"
+#line 1721 "mrbgems/mruby-compiler/core/parse.y"
{
yyerror(p, "constant re-assignment");
(yyval.nd) = 0;
}
-#line 6178 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6179 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 40:
-#line 1725 "mrbgems/mruby-compiler/core/parse.y"
+#line 1726 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_op_asgn(p, new_call(p, (yyvsp[-4].nd), (yyvsp[-2].id), 0, tCOLON2), (yyvsp[-1].id), (yyvsp[0].nd));
}
-#line 6186 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6187 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 41:
-#line 1729 "mrbgems/mruby-compiler/core/parse.y"
+#line 1730 "mrbgems/mruby-compiler/core/parse.y"
{
backref_error(p, (yyvsp[-2].nd));
(yyval.nd) = new_begin(p, 0);
}
-#line 6195 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6196 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 43:
-#line 1737 "mrbgems/mruby-compiler/core/parse.y"
+#line 1738 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_mod_rescue(p, (yyvsp[-2].nd), (yyvsp[0].nd));
}
-#line 6203 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6204 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 46:
-#line 1746 "mrbgems/mruby-compiler/core/parse.y"
+#line 1747 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_and(p, (yyvsp[-2].nd), (yyvsp[0].nd));
}
-#line 6211 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6212 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 47:
-#line 1750 "mrbgems/mruby-compiler/core/parse.y"
+#line 1751 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_or(p, (yyvsp[-2].nd), (yyvsp[0].nd));
}
-#line 6219 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6220 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 48:
-#line 1754 "mrbgems/mruby-compiler/core/parse.y"
+#line 1755 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = call_uni_op(p, cond((yyvsp[0].nd)), "!");
}
-#line 6227 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6228 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 49:
-#line 1758 "mrbgems/mruby-compiler/core/parse.y"
+#line 1759 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = call_uni_op(p, cond((yyvsp[0].nd)), "!");
}
-#line 6235 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6236 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 51:
-#line 1766 "mrbgems/mruby-compiler/core/parse.y"
+#line 1767 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_def(p, (yyvsp[0].id), nint(p->cmdarg_stack), local_switch(p));
p->cmdarg_stack = 0;
p->in_def++;
nvars_block(p);
}
-#line 6246 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6247 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 52:
-#line 1775 "mrbgems/mruby-compiler/core/parse.y"
+#line 1776 "mrbgems/mruby-compiler/core/parse.y"
{
p->lstate = EXPR_FNAME;
}
-#line 6254 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6255 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 53:
-#line 1779 "mrbgems/mruby-compiler/core/parse.y"
+#line 1780 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_sdef(p, (yyvsp[-3].nd), (yyvsp[0].id), nint(p->cmdarg_stack), local_switch(p));
p->cmdarg_stack = 0;
@@ -6263,1054 +6264,1054 @@ yyreduce:
nvars_block(p);
p->lstate = EXPR_ENDFN; /* force for args */
}
-#line 6267 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6268 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 54:
-#line 1790 "mrbgems/mruby-compiler/core/parse.y"
+#line 1791 "mrbgems/mruby-compiler/core/parse.y"
{
if (!(yyvsp[0].nd)) (yyval.nd) = new_nil(p);
else {
(yyval.nd) = (yyvsp[0].nd);
}
}
-#line 6278 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6279 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 58:
-#line 1804 "mrbgems/mruby-compiler/core/parse.y"
+#line 1805 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_call(p, (yyvsp[-3].nd), (yyvsp[-1].id), (yyvsp[0].nd), (yyvsp[-2].num));
}
-#line 6286 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6287 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 59:
-#line 1810 "mrbgems/mruby-compiler/core/parse.y"
+#line 1811 "mrbgems/mruby-compiler/core/parse.y"
{
local_nest(p);
nvars_nest(p);
}
-#line 6295 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6296 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 60:
-#line 1817 "mrbgems/mruby-compiler/core/parse.y"
+#line 1818 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_block(p, (yyvsp[-2].nd), (yyvsp[-1].nd));
local_unnest(p);
nvars_unnest(p);
}
-#line 6305 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6306 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 61:
-#line 1825 "mrbgems/mruby-compiler/core/parse.y"
+#line 1826 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_fcall(p, (yyvsp[-1].id), (yyvsp[0].nd));
}
-#line 6313 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6314 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 62:
-#line 1829 "mrbgems/mruby-compiler/core/parse.y"
+#line 1830 "mrbgems/mruby-compiler/core/parse.y"
{
args_with_block(p, (yyvsp[-1].nd), (yyvsp[0].nd));
(yyval.nd) = new_fcall(p, (yyvsp[-2].id), (yyvsp[-1].nd));
}
-#line 6322 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6323 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 63:
-#line 1834 "mrbgems/mruby-compiler/core/parse.y"
+#line 1835 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_call(p, (yyvsp[-3].nd), (yyvsp[-1].id), (yyvsp[0].nd), (yyvsp[-2].num));
}
-#line 6330 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6331 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 64:
-#line 1838 "mrbgems/mruby-compiler/core/parse.y"
+#line 1839 "mrbgems/mruby-compiler/core/parse.y"
{
args_with_block(p, (yyvsp[-1].nd), (yyvsp[0].nd));
(yyval.nd) = new_call(p, (yyvsp[-4].nd), (yyvsp[-2].id), (yyvsp[-1].nd), (yyvsp[-3].num));
}
-#line 6339 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6340 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 65:
-#line 1843 "mrbgems/mruby-compiler/core/parse.y"
+#line 1844 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_call(p, (yyvsp[-3].nd), (yyvsp[-1].id), (yyvsp[0].nd), tCOLON2);
}
-#line 6347 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6348 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 66:
-#line 1847 "mrbgems/mruby-compiler/core/parse.y"
+#line 1848 "mrbgems/mruby-compiler/core/parse.y"
{
args_with_block(p, (yyvsp[-1].nd), (yyvsp[0].nd));
(yyval.nd) = new_call(p, (yyvsp[-4].nd), (yyvsp[-2].id), (yyvsp[-1].nd), tCOLON2);
}
-#line 6356 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6357 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 67:
-#line 1852 "mrbgems/mruby-compiler/core/parse.y"
+#line 1853 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_super(p, (yyvsp[0].nd));
}
-#line 6364 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6365 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 68:
-#line 1856 "mrbgems/mruby-compiler/core/parse.y"
+#line 1857 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_yield(p, (yyvsp[0].nd));
}
-#line 6372 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6373 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 69:
-#line 1860 "mrbgems/mruby-compiler/core/parse.y"
+#line 1861 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_return(p, ret_args(p, (yyvsp[0].nd)));
}
-#line 6380 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6381 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 70:
-#line 1864 "mrbgems/mruby-compiler/core/parse.y"
+#line 1865 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_break(p, ret_args(p, (yyvsp[0].nd)));
}
-#line 6388 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6389 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 71:
-#line 1868 "mrbgems/mruby-compiler/core/parse.y"
+#line 1869 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_next(p, ret_args(p, (yyvsp[0].nd)));
}
-#line 6396 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6397 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 72:
-#line 1874 "mrbgems/mruby-compiler/core/parse.y"
+#line 1875 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = (yyvsp[0].nd);
}
-#line 6404 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6405 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 73:
-#line 1878 "mrbgems/mruby-compiler/core/parse.y"
+#line 1879 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = (yyvsp[-1].nd);
}
-#line 6412 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6413 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 75:
-#line 1885 "mrbgems/mruby-compiler/core/parse.y"
+#line 1886 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = (yyvsp[-1].nd);
}
-#line 6420 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6421 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 76:
-#line 1891 "mrbgems/mruby-compiler/core/parse.y"
+#line 1892 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = list1((yyvsp[0].nd));
}
-#line 6428 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6429 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 77:
-#line 1895 "mrbgems/mruby-compiler/core/parse.y"
+#line 1896 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = list1(push((yyvsp[-1].nd),(yyvsp[0].nd)));
}
-#line 6436 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6437 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 78:
-#line 1899 "mrbgems/mruby-compiler/core/parse.y"
+#line 1900 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = list2((yyvsp[-2].nd), (yyvsp[0].nd));
}
-#line 6444 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6445 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 79:
-#line 1903 "mrbgems/mruby-compiler/core/parse.y"
+#line 1904 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = list3((yyvsp[-4].nd), (yyvsp[-2].nd), (yyvsp[0].nd));
}
-#line 6452 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6453 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 80:
-#line 1907 "mrbgems/mruby-compiler/core/parse.y"
+#line 1908 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = list2((yyvsp[-1].nd), new_nil(p));
}
-#line 6460 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6461 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 81:
-#line 1911 "mrbgems/mruby-compiler/core/parse.y"
+#line 1912 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = list3((yyvsp[-3].nd), new_nil(p), (yyvsp[0].nd));
}
-#line 6468 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6469 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 82:
-#line 1915 "mrbgems/mruby-compiler/core/parse.y"
+#line 1916 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = list2(0, (yyvsp[0].nd));
}
-#line 6476 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6477 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 83:
-#line 1919 "mrbgems/mruby-compiler/core/parse.y"
+#line 1920 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = list3(0, (yyvsp[-2].nd), (yyvsp[0].nd));
}
-#line 6484 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6485 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 84:
-#line 1923 "mrbgems/mruby-compiler/core/parse.y"
+#line 1924 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = list2(0, new_nil(p));
}
-#line 6492 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6493 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 85:
-#line 1927 "mrbgems/mruby-compiler/core/parse.y"
+#line 1928 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = list3(0, new_nil(p), (yyvsp[0].nd));
}
-#line 6500 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6501 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 87:
-#line 1934 "mrbgems/mruby-compiler/core/parse.y"
+#line 1935 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_masgn(p, (yyvsp[-1].nd), NULL);
}
-#line 6508 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6509 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 88:
-#line 1940 "mrbgems/mruby-compiler/core/parse.y"
+#line 1941 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = list1((yyvsp[-1].nd));
}
-#line 6516 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6517 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 89:
-#line 1944 "mrbgems/mruby-compiler/core/parse.y"
+#line 1945 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = push((yyvsp[-2].nd), (yyvsp[-1].nd));
}
-#line 6524 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6525 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 90:
-#line 1950 "mrbgems/mruby-compiler/core/parse.y"
+#line 1951 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = list1((yyvsp[0].nd));
}
-#line 6532 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6533 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 91:
-#line 1954 "mrbgems/mruby-compiler/core/parse.y"
+#line 1955 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = push((yyvsp[-1].nd), (yyvsp[0].nd));
}
-#line 6540 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6541 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 92:
-#line 1960 "mrbgems/mruby-compiler/core/parse.y"
+#line 1961 "mrbgems/mruby-compiler/core/parse.y"
{
assignable(p, (yyvsp[0].nd));
}
-#line 6548 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6549 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 93:
-#line 1964 "mrbgems/mruby-compiler/core/parse.y"
+#line 1965 "mrbgems/mruby-compiler/core/parse.y"
{
- (yyval.nd) = new_call(p, (yyvsp[-3].nd), MRB_OPSYM(aref), (yyvsp[-1].nd), '.');
+ (yyval.nd) = new_call(p, (yyvsp[-3].nd), intern_op(aref), (yyvsp[-1].nd), '.');
}
-#line 6556 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6557 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 94:
-#line 1968 "mrbgems/mruby-compiler/core/parse.y"
+#line 1969 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_call(p, (yyvsp[-2].nd), (yyvsp[0].id), 0, (yyvsp[-1].num));
}
-#line 6564 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6565 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 95:
-#line 1972 "mrbgems/mruby-compiler/core/parse.y"
+#line 1973 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_call(p, (yyvsp[-2].nd), (yyvsp[0].id), 0, tCOLON2);
}
-#line 6572 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6573 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 96:
-#line 1976 "mrbgems/mruby-compiler/core/parse.y"
+#line 1977 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_call(p, (yyvsp[-2].nd), (yyvsp[0].id), 0, (yyvsp[-1].num));
}
-#line 6580 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6581 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 97:
-#line 1980 "mrbgems/mruby-compiler/core/parse.y"
+#line 1981 "mrbgems/mruby-compiler/core/parse.y"
{
if (p->in_def || p->in_single)
yyerror(p, "dynamic constant assignment");
(yyval.nd) = new_colon2(p, (yyvsp[-2].nd), (yyvsp[0].id));
}
-#line 6590 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6591 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 98:
-#line 1986 "mrbgems/mruby-compiler/core/parse.y"
+#line 1987 "mrbgems/mruby-compiler/core/parse.y"
{
if (p->in_def || p->in_single)
yyerror(p, "dynamic constant assignment");
(yyval.nd) = new_colon3(p, (yyvsp[0].id));
}
-#line 6600 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6601 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 99:
-#line 1992 "mrbgems/mruby-compiler/core/parse.y"
+#line 1993 "mrbgems/mruby-compiler/core/parse.y"
{
backref_error(p, (yyvsp[0].nd));
(yyval.nd) = 0;
}
-#line 6609 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6610 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 100:
-#line 1999 "mrbgems/mruby-compiler/core/parse.y"
+#line 2000 "mrbgems/mruby-compiler/core/parse.y"
{
assignable(p, (yyvsp[0].nd));
}
-#line 6617 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6618 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 101:
-#line 2003 "mrbgems/mruby-compiler/core/parse.y"
+#line 2004 "mrbgems/mruby-compiler/core/parse.y"
{
- (yyval.nd) = new_call(p, (yyvsp[-3].nd), MRB_OPSYM(aref), (yyvsp[-1].nd), '.');
+ (yyval.nd) = new_call(p, (yyvsp[-3].nd), intern_op(aref), (yyvsp[-1].nd), '.');
}
-#line 6625 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6626 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 102:
-#line 2007 "mrbgems/mruby-compiler/core/parse.y"
+#line 2008 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_call(p, (yyvsp[-2].nd), (yyvsp[0].id), 0, (yyvsp[-1].num));
}
-#line 6633 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6634 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 103:
-#line 2011 "mrbgems/mruby-compiler/core/parse.y"
+#line 2012 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_call(p, (yyvsp[-2].nd), (yyvsp[0].id), 0, tCOLON2);
}
-#line 6641 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6642 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 104:
-#line 2015 "mrbgems/mruby-compiler/core/parse.y"
+#line 2016 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_call(p, (yyvsp[-2].nd), (yyvsp[0].id), 0, (yyvsp[-1].num));
}
-#line 6649 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6650 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 105:
-#line 2019 "mrbgems/mruby-compiler/core/parse.y"
+#line 2020 "mrbgems/mruby-compiler/core/parse.y"
{
if (p->in_def || p->in_single)
yyerror(p, "dynamic constant assignment");
(yyval.nd) = new_colon2(p, (yyvsp[-2].nd), (yyvsp[0].id));
}
-#line 6659 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6660 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 106:
-#line 2025 "mrbgems/mruby-compiler/core/parse.y"
+#line 2026 "mrbgems/mruby-compiler/core/parse.y"
{
if (p->in_def || p->in_single)
yyerror(p, "dynamic constant assignment");
(yyval.nd) = new_colon3(p, (yyvsp[0].id));
}
-#line 6669 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6670 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 107:
-#line 2031 "mrbgems/mruby-compiler/core/parse.y"
+#line 2032 "mrbgems/mruby-compiler/core/parse.y"
{
backref_error(p, (yyvsp[0].nd));
(yyval.nd) = 0;
}
-#line 6678 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6679 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 108:
-#line 2036 "mrbgems/mruby-compiler/core/parse.y"
+#line 2037 "mrbgems/mruby-compiler/core/parse.y"
{
yyerror(p, "can't assign to numbered parameter");
}
-#line 6686 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6687 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 109:
-#line 2042 "mrbgems/mruby-compiler/core/parse.y"
+#line 2043 "mrbgems/mruby-compiler/core/parse.y"
{
yyerror(p, "class/module name must be CONSTANT");
}
-#line 6694 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6695 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 111:
-#line 2049 "mrbgems/mruby-compiler/core/parse.y"
+#line 2050 "mrbgems/mruby-compiler/core/parse.y"
{
- (yyval.nd) = cons((node*)1, nsym((yyvsp[0].id)));
+ (yyval.nd) = cons(nint(1), nsym((yyvsp[0].id)));
}
-#line 6702 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6703 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 112:
-#line 2053 "mrbgems/mruby-compiler/core/parse.y"
+#line 2054 "mrbgems/mruby-compiler/core/parse.y"
{
- (yyval.nd) = cons((node*)0, nsym((yyvsp[0].id)));
+ (yyval.nd) = cons(nint(0), nsym((yyvsp[0].id)));
}
-#line 6710 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6711 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 113:
-#line 2057 "mrbgems/mruby-compiler/core/parse.y"
+#line 2058 "mrbgems/mruby-compiler/core/parse.y"
{
void_expr_error(p, (yyvsp[-2].nd));
(yyval.nd) = cons((yyvsp[-2].nd), nsym((yyvsp[0].id)));
}
-#line 6719 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6720 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 117:
-#line 2067 "mrbgems/mruby-compiler/core/parse.y"
+#line 2068 "mrbgems/mruby-compiler/core/parse.y"
{
p->lstate = EXPR_ENDFN;
(yyval.id) = (yyvsp[0].id);
}
-#line 6728 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6729 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 118:
-#line 2072 "mrbgems/mruby-compiler/core/parse.y"
+#line 2073 "mrbgems/mruby-compiler/core/parse.y"
{
p->lstate = EXPR_ENDFN;
(yyval.id) = (yyvsp[0].id);
}
-#line 6737 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6738 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 121:
-#line 2083 "mrbgems/mruby-compiler/core/parse.y"
+#line 2084 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_undef(p, (yyvsp[0].id));
}
-#line 6745 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6746 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 122:
-#line 2086 "mrbgems/mruby-compiler/core/parse.y"
+#line 2087 "mrbgems/mruby-compiler/core/parse.y"
{p->lstate = EXPR_FNAME;}
-#line 6751 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6752 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 123:
-#line 2087 "mrbgems/mruby-compiler/core/parse.y"
+#line 2088 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = push((yyvsp[-3].nd), nsym((yyvsp[0].id)));
}
-#line 6759 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6760 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 124:
-#line 2092 "mrbgems/mruby-compiler/core/parse.y"
- { (yyval.id) = MRB_OPSYM(or); }
-#line 6765 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 2093 "mrbgems/mruby-compiler/core/parse.y"
+ { (yyval.id) = intern_op(or); }
+#line 6766 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 125:
-#line 2093 "mrbgems/mruby-compiler/core/parse.y"
- { (yyval.id) = MRB_OPSYM(xor); }
-#line 6771 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 2094 "mrbgems/mruby-compiler/core/parse.y"
+ { (yyval.id) = intern_op(xor); }
+#line 6772 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 126:
-#line 2094 "mrbgems/mruby-compiler/core/parse.y"
- { (yyval.id) = MRB_OPSYM(and); }
-#line 6777 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 2095 "mrbgems/mruby-compiler/core/parse.y"
+ { (yyval.id) = intern_op(and); }
+#line 6778 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 127:
-#line 2095 "mrbgems/mruby-compiler/core/parse.y"
- { (yyval.id) = MRB_OPSYM(cmp); }
-#line 6783 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 2096 "mrbgems/mruby-compiler/core/parse.y"
+ { (yyval.id) = intern_op(cmp); }
+#line 6784 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 128:
-#line 2096 "mrbgems/mruby-compiler/core/parse.y"
- { (yyval.id) = MRB_OPSYM(eq); }
-#line 6789 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 2097 "mrbgems/mruby-compiler/core/parse.y"
+ { (yyval.id) = intern_op(eq); }
+#line 6790 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 129:
-#line 2097 "mrbgems/mruby-compiler/core/parse.y"
- { (yyval.id) = MRB_OPSYM(eqq); }
-#line 6795 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 2098 "mrbgems/mruby-compiler/core/parse.y"
+ { (yyval.id) = intern_op(eqq); }
+#line 6796 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 130:
-#line 2098 "mrbgems/mruby-compiler/core/parse.y"
- { (yyval.id) = MRB_OPSYM(match); }
-#line 6801 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 2099 "mrbgems/mruby-compiler/core/parse.y"
+ { (yyval.id) = intern_op(match); }
+#line 6802 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 131:
-#line 2099 "mrbgems/mruby-compiler/core/parse.y"
- { (yyval.id) = MRB_OPSYM(nmatch); }
-#line 6807 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 2100 "mrbgems/mruby-compiler/core/parse.y"
+ { (yyval.id) = intern_op(nmatch); }
+#line 6808 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 132:
-#line 2100 "mrbgems/mruby-compiler/core/parse.y"
- { (yyval.id) = MRB_OPSYM(gt); }
-#line 6813 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 2101 "mrbgems/mruby-compiler/core/parse.y"
+ { (yyval.id) = intern_op(gt); }
+#line 6814 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 133:
-#line 2101 "mrbgems/mruby-compiler/core/parse.y"
- { (yyval.id) = MRB_OPSYM(ge); }
-#line 6819 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 2102 "mrbgems/mruby-compiler/core/parse.y"
+ { (yyval.id) = intern_op(ge); }
+#line 6820 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 134:
-#line 2102 "mrbgems/mruby-compiler/core/parse.y"
- { (yyval.id) = MRB_OPSYM(lt); }
-#line 6825 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 2103 "mrbgems/mruby-compiler/core/parse.y"
+ { (yyval.id) = intern_op(lt); }
+#line 6826 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 135:
-#line 2103 "mrbgems/mruby-compiler/core/parse.y"
- { (yyval.id) = MRB_OPSYM(le); }
-#line 6831 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 2104 "mrbgems/mruby-compiler/core/parse.y"
+ { (yyval.id) = intern_op(le); }
+#line 6832 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 136:
-#line 2104 "mrbgems/mruby-compiler/core/parse.y"
- { (yyval.id) = MRB_OPSYM(neq); }
-#line 6837 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 2105 "mrbgems/mruby-compiler/core/parse.y"
+ { (yyval.id) = intern_op(neq); }
+#line 6838 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 137:
-#line 2105 "mrbgems/mruby-compiler/core/parse.y"
- { (yyval.id) = MRB_OPSYM(lshift); }
-#line 6843 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 2106 "mrbgems/mruby-compiler/core/parse.y"
+ { (yyval.id) = intern_op(lshift); }
+#line 6844 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 138:
-#line 2106 "mrbgems/mruby-compiler/core/parse.y"
- { (yyval.id) = MRB_OPSYM(rshift); }
-#line 6849 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 2107 "mrbgems/mruby-compiler/core/parse.y"
+ { (yyval.id) = intern_op(rshift); }
+#line 6850 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 139:
-#line 2107 "mrbgems/mruby-compiler/core/parse.y"
- { (yyval.id) = MRB_OPSYM(add); }
-#line 6855 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 2108 "mrbgems/mruby-compiler/core/parse.y"
+ { (yyval.id) = intern_op(add); }
+#line 6856 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 140:
-#line 2108 "mrbgems/mruby-compiler/core/parse.y"
- { (yyval.id) = MRB_OPSYM(sub); }
-#line 6861 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 2109 "mrbgems/mruby-compiler/core/parse.y"
+ { (yyval.id) = intern_op(sub); }
+#line 6862 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 141:
-#line 2109 "mrbgems/mruby-compiler/core/parse.y"
- { (yyval.id) = MRB_OPSYM(mul); }
-#line 6867 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 2110 "mrbgems/mruby-compiler/core/parse.y"
+ { (yyval.id) = intern_op(mul); }
+#line 6868 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 142:
-#line 2110 "mrbgems/mruby-compiler/core/parse.y"
- { (yyval.id) = MRB_OPSYM(mul); }
-#line 6873 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 2111 "mrbgems/mruby-compiler/core/parse.y"
+ { (yyval.id) = intern_op(mul); }
+#line 6874 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 143:
-#line 2111 "mrbgems/mruby-compiler/core/parse.y"
- { (yyval.id) = MRB_OPSYM(div); }
-#line 6879 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 2112 "mrbgems/mruby-compiler/core/parse.y"
+ { (yyval.id) = intern_op(div); }
+#line 6880 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 144:
-#line 2112 "mrbgems/mruby-compiler/core/parse.y"
- { (yyval.id) = MRB_OPSYM(mod); }
-#line 6885 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 2113 "mrbgems/mruby-compiler/core/parse.y"
+ { (yyval.id) = intern_op(mod); }
+#line 6886 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 145:
-#line 2113 "mrbgems/mruby-compiler/core/parse.y"
- { (yyval.id) = MRB_OPSYM(pow); }
-#line 6891 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 2114 "mrbgems/mruby-compiler/core/parse.y"
+ { (yyval.id) = intern_op(pow); }
+#line 6892 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 146:
-#line 2114 "mrbgems/mruby-compiler/core/parse.y"
- { (yyval.id) = MRB_OPSYM(pow); }
-#line 6897 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 2115 "mrbgems/mruby-compiler/core/parse.y"
+ { (yyval.id) = intern_op(pow); }
+#line 6898 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 147:
-#line 2115 "mrbgems/mruby-compiler/core/parse.y"
- { (yyval.id) = MRB_OPSYM(not); }
-#line 6903 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 2116 "mrbgems/mruby-compiler/core/parse.y"
+ { (yyval.id) = intern_op(not); }
+#line 6904 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 148:
-#line 2116 "mrbgems/mruby-compiler/core/parse.y"
- { (yyval.id) = MRB_OPSYM(neg); }
-#line 6909 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 2117 "mrbgems/mruby-compiler/core/parse.y"
+ { (yyval.id) = intern_op(neg); }
+#line 6910 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 149:
-#line 2117 "mrbgems/mruby-compiler/core/parse.y"
- { (yyval.id) = MRB_OPSYM(plus); }
-#line 6915 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 2118 "mrbgems/mruby-compiler/core/parse.y"
+ { (yyval.id) = intern_op(plus); }
+#line 6916 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 150:
-#line 2118 "mrbgems/mruby-compiler/core/parse.y"
- { (yyval.id) = MRB_OPSYM(minus); }
-#line 6921 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 2119 "mrbgems/mruby-compiler/core/parse.y"
+ { (yyval.id) = intern_op(minus); }
+#line 6922 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 151:
-#line 2119 "mrbgems/mruby-compiler/core/parse.y"
- { (yyval.id) = MRB_OPSYM(aref); }
-#line 6927 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 2120 "mrbgems/mruby-compiler/core/parse.y"
+ { (yyval.id) = intern_op(aref); }
+#line 6928 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 152:
-#line 2120 "mrbgems/mruby-compiler/core/parse.y"
- { (yyval.id) = MRB_OPSYM(aset); }
-#line 6933 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 2121 "mrbgems/mruby-compiler/core/parse.y"
+ { (yyval.id) = intern_op(aset); }
+#line 6934 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 153:
-#line 2121 "mrbgems/mruby-compiler/core/parse.y"
- { (yyval.id) = MRB_OPSYM(tick); }
-#line 6939 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 2122 "mrbgems/mruby-compiler/core/parse.y"
+ { (yyval.id) = intern_op(tick); }
+#line 6940 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 194:
-#line 2139 "mrbgems/mruby-compiler/core/parse.y"
+#line 2140 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_asgn(p, (yyvsp[-2].nd), (yyvsp[0].nd));
}
-#line 6947 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6948 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 195:
-#line 2143 "mrbgems/mruby-compiler/core/parse.y"
+#line 2144 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_op_asgn(p, (yyvsp[-2].nd), (yyvsp[-1].id), (yyvsp[0].nd));
}
-#line 6955 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6956 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 196:
-#line 2147 "mrbgems/mruby-compiler/core/parse.y"
+#line 2148 "mrbgems/mruby-compiler/core/parse.y"
{
- (yyval.nd) = new_op_asgn(p, new_call(p, (yyvsp[-5].nd), MRB_OPSYM(aref), (yyvsp[-3].nd), '.'), (yyvsp[-1].id), (yyvsp[0].nd));
+ (yyval.nd) = new_op_asgn(p, new_call(p, (yyvsp[-5].nd), intern_op(aref), (yyvsp[-3].nd), '.'), (yyvsp[-1].id), (yyvsp[0].nd));
}
-#line 6963 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6964 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 197:
-#line 2151 "mrbgems/mruby-compiler/core/parse.y"
+#line 2152 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_op_asgn(p, new_call(p, (yyvsp[-4].nd), (yyvsp[-2].id), 0, (yyvsp[-3].num)), (yyvsp[-1].id), (yyvsp[0].nd));
}
-#line 6971 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6972 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 198:
-#line 2155 "mrbgems/mruby-compiler/core/parse.y"
+#line 2156 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_op_asgn(p, new_call(p, (yyvsp[-4].nd), (yyvsp[-2].id), 0, (yyvsp[-3].num)), (yyvsp[-1].id), (yyvsp[0].nd));
}
-#line 6979 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6980 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 199:
-#line 2159 "mrbgems/mruby-compiler/core/parse.y"
+#line 2160 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_op_asgn(p, new_call(p, (yyvsp[-4].nd), (yyvsp[-2].id), 0, tCOLON2), (yyvsp[-1].id), (yyvsp[0].nd));
}
-#line 6987 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6988 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 200:
-#line 2163 "mrbgems/mruby-compiler/core/parse.y"
+#line 2164 "mrbgems/mruby-compiler/core/parse.y"
{
yyerror(p, "constant re-assignment");
(yyval.nd) = new_begin(p, 0);
}
-#line 6996 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 6997 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 201:
-#line 2168 "mrbgems/mruby-compiler/core/parse.y"
+#line 2169 "mrbgems/mruby-compiler/core/parse.y"
{
yyerror(p, "constant re-assignment");
(yyval.nd) = new_begin(p, 0);
}
-#line 7005 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7006 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 202:
-#line 2173 "mrbgems/mruby-compiler/core/parse.y"
+#line 2174 "mrbgems/mruby-compiler/core/parse.y"
{
backref_error(p, (yyvsp[-2].nd));
(yyval.nd) = new_begin(p, 0);
}
-#line 7014 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7015 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 203:
-#line 2178 "mrbgems/mruby-compiler/core/parse.y"
+#line 2179 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_dot2(p, (yyvsp[-2].nd), (yyvsp[0].nd));
}
-#line 7022 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7023 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 204:
-#line 2182 "mrbgems/mruby-compiler/core/parse.y"
+#line 2183 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_dot2(p, (yyvsp[-1].nd), new_nil(p));
}
-#line 7030 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7031 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 205:
-#line 2186 "mrbgems/mruby-compiler/core/parse.y"
+#line 2187 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_dot2(p, new_nil(p), (yyvsp[0].nd));
}
-#line 7038 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7039 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 206:
-#line 2190 "mrbgems/mruby-compiler/core/parse.y"
+#line 2191 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_dot3(p, (yyvsp[-2].nd), (yyvsp[0].nd));
}
-#line 7046 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7047 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 207:
-#line 2194 "mrbgems/mruby-compiler/core/parse.y"
+#line 2195 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_dot3(p, (yyvsp[-1].nd), new_nil(p));
}
-#line 7054 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7055 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 208:
-#line 2198 "mrbgems/mruby-compiler/core/parse.y"
+#line 2199 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_dot3(p, new_nil(p), (yyvsp[0].nd));
}
-#line 7062 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7063 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 209:
-#line 2202 "mrbgems/mruby-compiler/core/parse.y"
+#line 2203 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "+", (yyvsp[0].nd));
}
-#line 7070 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7071 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 210:
-#line 2206 "mrbgems/mruby-compiler/core/parse.y"
+#line 2207 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "-", (yyvsp[0].nd));
}
-#line 7078 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7079 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 211:
-#line 2210 "mrbgems/mruby-compiler/core/parse.y"
+#line 2211 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "*", (yyvsp[0].nd));
}
-#line 7086 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7087 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 212:
-#line 2214 "mrbgems/mruby-compiler/core/parse.y"
+#line 2215 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "/", (yyvsp[0].nd));
}
-#line 7094 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7095 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 213:
-#line 2218 "mrbgems/mruby-compiler/core/parse.y"
+#line 2219 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "%", (yyvsp[0].nd));
}
-#line 7102 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7103 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 214:
-#line 2222 "mrbgems/mruby-compiler/core/parse.y"
+#line 2223 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "**", (yyvsp[0].nd));
}
-#line 7110 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7111 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 215:
-#line 2226 "mrbgems/mruby-compiler/core/parse.y"
+#line 2227 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = call_uni_op(p, call_bin_op(p, (yyvsp[-2].nd), "**", (yyvsp[0].nd)), "-@");
}
-#line 7118 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7119 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 216:
-#line 2230 "mrbgems/mruby-compiler/core/parse.y"
+#line 2231 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = call_uni_op(p, call_bin_op(p, (yyvsp[-2].nd), "**", (yyvsp[0].nd)), "-@");
}
-#line 7126 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7127 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 217:
-#line 2234 "mrbgems/mruby-compiler/core/parse.y"
+#line 2235 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = call_uni_op(p, (yyvsp[0].nd), "+@");
}
-#line 7134 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7135 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 218:
-#line 2238 "mrbgems/mruby-compiler/core/parse.y"
+#line 2239 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = call_uni_op(p, (yyvsp[0].nd), "-@");
}
-#line 7142 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7143 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 219:
-#line 2242 "mrbgems/mruby-compiler/core/parse.y"
+#line 2243 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "|", (yyvsp[0].nd));
}
-#line 7150 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7151 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 220:
-#line 2246 "mrbgems/mruby-compiler/core/parse.y"
+#line 2247 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "^", (yyvsp[0].nd));
}
-#line 7158 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7159 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 221:
-#line 2250 "mrbgems/mruby-compiler/core/parse.y"
+#line 2251 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "&", (yyvsp[0].nd));
}
-#line 7166 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7167 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 222:
-#line 2254 "mrbgems/mruby-compiler/core/parse.y"
+#line 2255 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "<=>", (yyvsp[0].nd));
}
-#line 7174 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7175 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 223:
-#line 2258 "mrbgems/mruby-compiler/core/parse.y"
+#line 2259 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), ">", (yyvsp[0].nd));
}
-#line 7182 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7183 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 224:
-#line 2262 "mrbgems/mruby-compiler/core/parse.y"
+#line 2263 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), ">=", (yyvsp[0].nd));
}
-#line 7190 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7191 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 225:
-#line 2266 "mrbgems/mruby-compiler/core/parse.y"
+#line 2267 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "<", (yyvsp[0].nd));
}
-#line 7198 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7199 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 226:
-#line 2270 "mrbgems/mruby-compiler/core/parse.y"
+#line 2271 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "<=", (yyvsp[0].nd));
}
-#line 7206 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7207 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 227:
-#line 2274 "mrbgems/mruby-compiler/core/parse.y"
+#line 2275 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "==", (yyvsp[0].nd));
}
-#line 7214 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7215 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 228:
-#line 2278 "mrbgems/mruby-compiler/core/parse.y"
+#line 2279 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "===", (yyvsp[0].nd));
}
-#line 7222 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7223 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 229:
-#line 2282 "mrbgems/mruby-compiler/core/parse.y"
+#line 2283 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "!=", (yyvsp[0].nd));
}
-#line 7230 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7231 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 230:
-#line 2286 "mrbgems/mruby-compiler/core/parse.y"
+#line 2287 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "=~", (yyvsp[0].nd));
}
-#line 7238 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7239 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 231:
-#line 2290 "mrbgems/mruby-compiler/core/parse.y"
+#line 2291 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "!~", (yyvsp[0].nd));
}
-#line 7246 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7247 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 232:
-#line 2294 "mrbgems/mruby-compiler/core/parse.y"
+#line 2295 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = call_uni_op(p, cond((yyvsp[0].nd)), "!");
}
-#line 7254 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7255 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 233:
-#line 2298 "mrbgems/mruby-compiler/core/parse.y"
+#line 2299 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = call_uni_op(p, cond((yyvsp[0].nd)), "~");
}
-#line 7262 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7263 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 234:
-#line 2302 "mrbgems/mruby-compiler/core/parse.y"
+#line 2303 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), "<<", (yyvsp[0].nd));
}
-#line 7270 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7271 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 235:
-#line 2306 "mrbgems/mruby-compiler/core/parse.y"
+#line 2307 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = call_bin_op(p, (yyvsp[-2].nd), ">>", (yyvsp[0].nd));
}
-#line 7278 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7279 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 236:
-#line 2310 "mrbgems/mruby-compiler/core/parse.y"
+#line 2311 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_and(p, (yyvsp[-2].nd), (yyvsp[0].nd));
}
-#line 7286 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7287 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 237:
-#line 2314 "mrbgems/mruby-compiler/core/parse.y"
+#line 2315 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_or(p, (yyvsp[-2].nd), (yyvsp[0].nd));
}
-#line 7294 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7295 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 238:
-#line 2318 "mrbgems/mruby-compiler/core/parse.y"
+#line 2319 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_if(p, cond((yyvsp[-5].nd)), (yyvsp[-3].nd), (yyvsp[0].nd));
}
-#line 7302 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7303 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 239:
-#line 2322 "mrbgems/mruby-compiler/core/parse.y"
+#line 2323 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_if(p, cond((yyvsp[-5].nd)), (yyvsp[-3].nd), (yyvsp[0].nd));
}
-#line 7310 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7311 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 240:
-#line 2326 "mrbgems/mruby-compiler/core/parse.y"
+#line 2327 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = (yyvsp[-3].nd);
void_expr_error(p, (yyvsp[0].nd));
@@ -7318,11 +7319,11 @@ yyreduce:
nvars_unnest(p);
p->in_def--;
}
-#line 7322 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7323 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 241:
-#line 2334 "mrbgems/mruby-compiler/core/parse.y"
+#line 2335 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = (yyvsp[-5].nd);
void_expr_error(p, (yyvsp[-2].nd));
@@ -7331,11 +7332,11 @@ yyreduce:
nvars_unnest(p);
p->in_def--;
}
-#line 7335 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7336 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 242:
-#line 2343 "mrbgems/mruby-compiler/core/parse.y"
+#line 2344 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = (yyvsp[-3].nd);
void_expr_error(p, (yyvsp[0].nd));
@@ -7344,11 +7345,11 @@ yyreduce:
p->in_def--;
p->in_single--;
}
-#line 7348 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7349 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 243:
-#line 2352 "mrbgems/mruby-compiler/core/parse.y"
+#line 2353 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = (yyvsp[-5].nd);
void_expr_error(p, (yyvsp[-2].nd));
@@ -7358,103 +7359,103 @@ yyreduce:
p->in_def--;
p->in_single--;
}
-#line 7362 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7363 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 244:
-#line 2362 "mrbgems/mruby-compiler/core/parse.y"
+#line 2363 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = (yyvsp[0].nd);
}
-#line 7370 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7371 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 246:
-#line 2369 "mrbgems/mruby-compiler/core/parse.y"
+#line 2370 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = (yyvsp[-1].nd);
NODE_LINENO((yyval.nd), (yyvsp[-1].nd));
}
-#line 7379 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7380 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 247:
-#line 2374 "mrbgems/mruby-compiler/core/parse.y"
+#line 2375 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = push((yyvsp[-3].nd), new_kw_hash(p, (yyvsp[-1].nd)));
}
-#line 7387 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7388 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 248:
-#line 2378 "mrbgems/mruby-compiler/core/parse.y"
+#line 2379 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = cons(new_kw_hash(p, (yyvsp[-1].nd)), 0);
NODE_LINENO((yyval.nd), (yyvsp[-1].nd));
}
-#line 7396 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7397 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 249:
-#line 2385 "mrbgems/mruby-compiler/core/parse.y"
+#line 2386 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = (yyvsp[0].nd);
}
-#line 7404 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7405 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 250:
-#line 2389 "mrbgems/mruby-compiler/core/parse.y"
+#line 2390 "mrbgems/mruby-compiler/core/parse.y"
{
void_expr_error(p, (yyvsp[-2].nd));
void_expr_error(p, (yyvsp[0].nd));
(yyval.nd) = new_mod_rescue(p, (yyvsp[-2].nd), (yyvsp[0].nd));
}
-#line 7414 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7415 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 251:
-#line 2397 "mrbgems/mruby-compiler/core/parse.y"
+#line 2398 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = (yyvsp[-1].nd);
}
-#line 7422 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7423 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 252:
-#line 2401 "mrbgems/mruby-compiler/core/parse.y"
+#line 2402 "mrbgems/mruby-compiler/core/parse.y"
{
#if 1
- mrb_sym r = MRB_OPSYM(mul);
- mrb_sym b = MRB_OPSYM(and);
+ mrb_sym r = intern_op(mul);
+ mrb_sym b = intern_op(and);
(yyval.nd) = cons(push((yyvsp[-3].nd), new_splat(p, new_lvar(p, r))),
new_block_arg(p, new_lvar(p, b)));
#else
- mrb_sym r = MRB_OPSYM(mul);
- mrb_sym k = MRB_OPSYM(pow);
- mrb_sym b = MRB_OPSYM(and);
+ mrb_sym r = intern_op(mul);
+ mrb_sym k = intern_op(pow);
+ mrb_sym b = intern_op(and);
(yyval.nd) = cons(list2(push((yyvsp[-3].nd), new_splat(p, new_lvar(p, r))),
new_kw_hash(p, list1(cons(new_kw_rest_args(p, 0), new_lvar(p, k))))),
new_block_arg(p, new_lvar(p, b)));
#endif
}
-#line 7442 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7443 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 253:
-#line 2417 "mrbgems/mruby-compiler/core/parse.y"
+#line 2418 "mrbgems/mruby-compiler/core/parse.y"
{
#if 1
- mrb_sym r = MRB_OPSYM(mul);
- mrb_sym b = MRB_OPSYM(and);
+ mrb_sym r = intern_op(mul);
+ mrb_sym b = intern_op(and);
if (local_var_p(p, r) && local_var_p(p, b)) {
(yyval.nd) = cons(list1(new_splat(p, new_lvar(p, r))),
new_block_arg(p, new_lvar(p, b)));
}
#else
- mrb_sym r = MRB_OPSYM(mul);
- mrb_sym k = MRB_OPSYM(pow);
- mrb_sym b = MRB_OPSYM(and);
+ mrb_sym r = intern_op(mul);
+ mrb_sym k = intern_op(pow);
+ mrb_sym b = intern_op(and);
if (local_var_p(p, r) && local_var_p(p, k) && local_var_p(p, b)) {
(yyval.nd) = cons(list2(new_splat(p, new_lvar(p, r)),
new_kw_hash(p, list1(cons(new_kw_rest_args(p, 0), new_lvar(p, k))))),
@@ -7466,373 +7467,373 @@ yyreduce:
(yyval.nd) = 0;
}
}
-#line 7470 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7471 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 258:
-#line 2449 "mrbgems/mruby-compiler/core/parse.y"
+#line 2450 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = cons((yyvsp[-1].nd),0);
NODE_LINENO((yyval.nd), (yyvsp[-1].nd));
}
-#line 7479 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7480 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 259:
-#line 2454 "mrbgems/mruby-compiler/core/parse.y"
+#line 2455 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = cons(push((yyvsp[-3].nd), new_kw_hash(p, (yyvsp[-1].nd))), 0);
NODE_LINENO((yyval.nd), (yyvsp[-3].nd));
}
-#line 7488 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7489 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 260:
-#line 2459 "mrbgems/mruby-compiler/core/parse.y"
+#line 2460 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = cons(list1(new_kw_hash(p, (yyvsp[-1].nd))), 0);
NODE_LINENO((yyval.nd), (yyvsp[-1].nd));
}
-#line 7497 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7498 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 261:
-#line 2466 "mrbgems/mruby-compiler/core/parse.y"
+#line 2467 "mrbgems/mruby-compiler/core/parse.y"
{
void_expr_error(p, (yyvsp[0].nd));
(yyval.nd) = cons(list1((yyvsp[0].nd)), 0);
NODE_LINENO((yyval.nd), (yyvsp[0].nd));
}
-#line 7507 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7508 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 262:
-#line 2472 "mrbgems/mruby-compiler/core/parse.y"
+#line 2473 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = cons((yyvsp[-1].nd), (yyvsp[0].nd));
NODE_LINENO((yyval.nd), (yyvsp[-1].nd));
}
-#line 7516 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7517 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 263:
-#line 2477 "mrbgems/mruby-compiler/core/parse.y"
+#line 2478 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = cons(list1(new_kw_hash(p, (yyvsp[-1].nd))), (yyvsp[0].nd));
NODE_LINENO((yyval.nd), (yyvsp[-1].nd));
}
-#line 7525 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7526 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 264:
-#line 2482 "mrbgems/mruby-compiler/core/parse.y"
+#line 2483 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = cons(push((yyvsp[-3].nd), new_kw_hash(p, (yyvsp[-1].nd))), (yyvsp[0].nd));
NODE_LINENO((yyval.nd), (yyvsp[-3].nd));
}
-#line 7534 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7535 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 265:
-#line 2487 "mrbgems/mruby-compiler/core/parse.y"
+#line 2488 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = cons(0, (yyvsp[0].nd));
NODE_LINENO((yyval.nd), (yyvsp[0].nd));
}
-#line 7543 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7544 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 266:
-#line 2493 "mrbgems/mruby-compiler/core/parse.y"
+#line 2494 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.stack) = p->cmdarg_stack;
CMDARG_PUSH(1);
}
-#line 7552 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7553 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 267:
-#line 2498 "mrbgems/mruby-compiler/core/parse.y"
+#line 2499 "mrbgems/mruby-compiler/core/parse.y"
{
p->cmdarg_stack = (yyvsp[-1].stack);
(yyval.nd) = (yyvsp[0].nd);
}
-#line 7561 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7562 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 268:
-#line 2505 "mrbgems/mruby-compiler/core/parse.y"
+#line 2506 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_block_arg(p, (yyvsp[0].nd));
}
-#line 7569 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7570 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 269:
-#line 2511 "mrbgems/mruby-compiler/core/parse.y"
+#line 2512 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = (yyvsp[0].nd);
}
-#line 7577 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7578 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 270:
-#line 2515 "mrbgems/mruby-compiler/core/parse.y"
+#line 2516 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = 0;
}
-#line 7585 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7586 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 273:
-#line 2525 "mrbgems/mruby-compiler/core/parse.y"
+#line 2526 "mrbgems/mruby-compiler/core/parse.y"
{
void_expr_error(p, (yyvsp[0].nd));
(yyval.nd) = cons((yyvsp[0].nd), 0);
NODE_LINENO((yyval.nd), (yyvsp[0].nd));
}
-#line 7595 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7596 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 274:
-#line 2531 "mrbgems/mruby-compiler/core/parse.y"
+#line 2532 "mrbgems/mruby-compiler/core/parse.y"
{
void_expr_error(p, (yyvsp[0].nd));
(yyval.nd) = cons(new_splat(p, (yyvsp[0].nd)), 0);
NODE_LINENO((yyval.nd), (yyvsp[0].nd));
}
-#line 7605 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7606 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 275:
-#line 2537 "mrbgems/mruby-compiler/core/parse.y"
+#line 2538 "mrbgems/mruby-compiler/core/parse.y"
{
void_expr_error(p, (yyvsp[0].nd));
(yyval.nd) = push((yyvsp[-2].nd), (yyvsp[0].nd));
}
-#line 7614 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7615 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 276:
-#line 2542 "mrbgems/mruby-compiler/core/parse.y"
+#line 2543 "mrbgems/mruby-compiler/core/parse.y"
{
void_expr_error(p, (yyvsp[0].nd));
(yyval.nd) = push((yyvsp[-3].nd), new_splat(p, (yyvsp[0].nd)));
}
-#line 7623 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7624 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 277:
-#line 2549 "mrbgems/mruby-compiler/core/parse.y"
+#line 2550 "mrbgems/mruby-compiler/core/parse.y"
{
void_expr_error(p, (yyvsp[0].nd));
(yyval.nd) = push((yyvsp[-2].nd), (yyvsp[0].nd));
}
-#line 7632 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7633 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 278:
-#line 2554 "mrbgems/mruby-compiler/core/parse.y"
+#line 2555 "mrbgems/mruby-compiler/core/parse.y"
{
void_expr_error(p, (yyvsp[0].nd));
(yyval.nd) = push((yyvsp[-3].nd), new_splat(p, (yyvsp[0].nd)));
}
-#line 7641 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7642 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 279:
-#line 2559 "mrbgems/mruby-compiler/core/parse.y"
+#line 2560 "mrbgems/mruby-compiler/core/parse.y"
{
void_expr_error(p, (yyvsp[0].nd));
(yyval.nd) = list1(new_splat(p, (yyvsp[0].nd)));
}
-#line 7650 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7651 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 287:
-#line 2573 "mrbgems/mruby-compiler/core/parse.y"
+#line 2574 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_nvar(p, (yyvsp[0].num));
}
-#line 7658 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7659 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 288:
-#line 2577 "mrbgems/mruby-compiler/core/parse.y"
+#line 2578 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_fcall(p, (yyvsp[0].id), 0);
}
-#line 7666 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7667 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 289:
-#line 2581 "mrbgems/mruby-compiler/core/parse.y"
+#line 2582 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.stack) = p->cmdarg_stack;
p->cmdarg_stack = 0;
}
-#line 7675 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7676 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 290:
-#line 2587 "mrbgems/mruby-compiler/core/parse.y"
+#line 2588 "mrbgems/mruby-compiler/core/parse.y"
{
p->cmdarg_stack = (yyvsp[-2].stack);
(yyval.nd) = (yyvsp[-1].nd);
}
-#line 7684 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7685 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 291:
-#line 2592 "mrbgems/mruby-compiler/core/parse.y"
+#line 2593 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.stack) = p->cmdarg_stack;
p->cmdarg_stack = 0;
}
-#line 7693 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7694 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 292:
-#line 2596 "mrbgems/mruby-compiler/core/parse.y"
+#line 2597 "mrbgems/mruby-compiler/core/parse.y"
{p->lstate = EXPR_ENDARG;}
-#line 7699 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7700 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 293:
-#line 2597 "mrbgems/mruby-compiler/core/parse.y"
+#line 2598 "mrbgems/mruby-compiler/core/parse.y"
{
p->cmdarg_stack = (yyvsp[-3].stack);
(yyval.nd) = (yyvsp[-2].nd);
}
-#line 7708 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7709 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 294:
-#line 2601 "mrbgems/mruby-compiler/core/parse.y"
+#line 2602 "mrbgems/mruby-compiler/core/parse.y"
{p->lstate = EXPR_ENDARG;}
-#line 7714 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7715 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 295:
-#line 2602 "mrbgems/mruby-compiler/core/parse.y"
+#line 2603 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_nil(p);
}
-#line 7722 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7723 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 296:
-#line 2606 "mrbgems/mruby-compiler/core/parse.y"
+#line 2607 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = (yyvsp[-1].nd);
}
-#line 7730 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7731 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 297:
-#line 2610 "mrbgems/mruby-compiler/core/parse.y"
+#line 2611 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_colon2(p, (yyvsp[-2].nd), (yyvsp[0].id));
}
-#line 7738 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7739 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 298:
-#line 2614 "mrbgems/mruby-compiler/core/parse.y"
+#line 2615 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_colon3(p, (yyvsp[0].id));
}
-#line 7746 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7747 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 299:
-#line 2618 "mrbgems/mruby-compiler/core/parse.y"
+#line 2619 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_array(p, (yyvsp[-1].nd));
NODE_LINENO((yyval.nd), (yyvsp[-1].nd));
}
-#line 7755 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7756 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 300:
-#line 2623 "mrbgems/mruby-compiler/core/parse.y"
+#line 2624 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_hash(p, (yyvsp[-1].nd));
NODE_LINENO((yyval.nd), (yyvsp[-1].nd));
}
-#line 7764 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7765 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 301:
-#line 2628 "mrbgems/mruby-compiler/core/parse.y"
+#line 2629 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_return(p, 0);
}
-#line 7772 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7773 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 302:
-#line 2632 "mrbgems/mruby-compiler/core/parse.y"
+#line 2633 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_yield(p, (yyvsp[0].nd));
}
-#line 7780 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7781 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 303:
-#line 2636 "mrbgems/mruby-compiler/core/parse.y"
+#line 2637 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = call_uni_op(p, cond((yyvsp[-1].nd)), "!");
}
-#line 7788 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7789 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 304:
-#line 2640 "mrbgems/mruby-compiler/core/parse.y"
+#line 2641 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = call_uni_op(p, new_nil(p), "!");
}
-#line 7796 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7797 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 305:
-#line 2644 "mrbgems/mruby-compiler/core/parse.y"
+#line 2645 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_fcall(p, (yyvsp[-1].id), cons(0, (yyvsp[0].nd)));
}
-#line 7804 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7805 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 307:
-#line 2649 "mrbgems/mruby-compiler/core/parse.y"
+#line 2650 "mrbgems/mruby-compiler/core/parse.y"
{
call_with_block(p, (yyvsp[-1].nd), (yyvsp[0].nd));
(yyval.nd) = (yyvsp[-1].nd);
}
-#line 7813 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7814 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 308:
-#line 2654 "mrbgems/mruby-compiler/core/parse.y"
+#line 2655 "mrbgems/mruby-compiler/core/parse.y"
{
local_nest(p);
(yyval.num) = p->lpar_beg;
p->lpar_beg = ++p->paren_nest;
}
-#line 7823 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7824 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 309:
-#line 2660 "mrbgems/mruby-compiler/core/parse.y"
+#line 2661 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.stack) = p->cmdarg_stack;
p->cmdarg_stack = 0;
}
-#line 7832 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7833 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 310:
-#line 2665 "mrbgems/mruby-compiler/core/parse.y"
+#line 2666 "mrbgems/mruby-compiler/core/parse.y"
{
p->lpar_beg = (yyvsp[-3].num);
(yyval.nd) = new_lambda(p, (yyvsp[-2].nd), (yyvsp[0].nd));
@@ -7840,149 +7841,149 @@ yyreduce:
p->cmdarg_stack = (yyvsp[-1].stack);
CMDARG_LEXPOP();
}
-#line 7844 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7845 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 311:
-#line 2676 "mrbgems/mruby-compiler/core/parse.y"
+#line 2677 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_if(p, cond((yyvsp[-4].nd)), (yyvsp[-2].nd), (yyvsp[-1].nd));
SET_LINENO((yyval.nd), (yyvsp[-5].num));
}
-#line 7853 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7854 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 312:
-#line 2684 "mrbgems/mruby-compiler/core/parse.y"
+#line 2685 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_unless(p, cond((yyvsp[-4].nd)), (yyvsp[-2].nd), (yyvsp[-1].nd));
SET_LINENO((yyval.nd), (yyvsp[-5].num));
}
-#line 7862 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7863 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 313:
-#line 2688 "mrbgems/mruby-compiler/core/parse.y"
+#line 2689 "mrbgems/mruby-compiler/core/parse.y"
{COND_PUSH(1);}
-#line 7868 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7869 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 314:
-#line 2688 "mrbgems/mruby-compiler/core/parse.y"
+#line 2689 "mrbgems/mruby-compiler/core/parse.y"
{COND_POP();}
-#line 7874 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7875 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 315:
-#line 2691 "mrbgems/mruby-compiler/core/parse.y"
+#line 2692 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_while(p, cond((yyvsp[-4].nd)), (yyvsp[-1].nd));
SET_LINENO((yyval.nd), (yyvsp[-6].num));
}
-#line 7883 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7884 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 316:
-#line 2695 "mrbgems/mruby-compiler/core/parse.y"
+#line 2696 "mrbgems/mruby-compiler/core/parse.y"
{COND_PUSH(1);}
-#line 7889 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7890 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 317:
-#line 2695 "mrbgems/mruby-compiler/core/parse.y"
+#line 2696 "mrbgems/mruby-compiler/core/parse.y"
{COND_POP();}
-#line 7895 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7896 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 318:
-#line 2698 "mrbgems/mruby-compiler/core/parse.y"
+#line 2699 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_until(p, cond((yyvsp[-4].nd)), (yyvsp[-1].nd));
SET_LINENO((yyval.nd), (yyvsp[-6].num));
}
-#line 7904 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7905 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 319:
-#line 2705 "mrbgems/mruby-compiler/core/parse.y"
+#line 2706 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_case(p, (yyvsp[-3].nd), (yyvsp[-1].nd));
}
-#line 7912 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7913 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 320:
-#line 2709 "mrbgems/mruby-compiler/core/parse.y"
+#line 2710 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_case(p, 0, (yyvsp[-1].nd));
}
-#line 7920 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7921 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 321:
-#line 2713 "mrbgems/mruby-compiler/core/parse.y"
+#line 2714 "mrbgems/mruby-compiler/core/parse.y"
{COND_PUSH(1);}
-#line 7926 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7927 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 322:
-#line 2715 "mrbgems/mruby-compiler/core/parse.y"
+#line 2716 "mrbgems/mruby-compiler/core/parse.y"
{COND_POP();}
-#line 7932 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7933 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 323:
-#line 2718 "mrbgems/mruby-compiler/core/parse.y"
+#line 2719 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_for(p, (yyvsp[-7].nd), (yyvsp[-4].nd), (yyvsp[-1].nd));
SET_LINENO((yyval.nd), (yyvsp[-8].num));
}
-#line 7941 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7942 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 324:
-#line 2724 "mrbgems/mruby-compiler/core/parse.y"
+#line 2725 "mrbgems/mruby-compiler/core/parse.y"
{
if (p->in_def || p->in_single)
yyerror(p, "class definition in method body");
(yyval.nd) = local_switch(p);
nvars_block(p);
}
-#line 7952 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7953 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 325:
-#line 2732 "mrbgems/mruby-compiler/core/parse.y"
+#line 2733 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_class(p, (yyvsp[-4].nd), (yyvsp[-3].nd), (yyvsp[-1].nd));
SET_LINENO((yyval.nd), (yyvsp[-5].num));
local_resume(p, (yyvsp[-2].nd));
nvars_unnest(p);
}
-#line 7963 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7964 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 326:
-#line 2740 "mrbgems/mruby-compiler/core/parse.y"
+#line 2741 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.num) = p->in_def;
p->in_def = 0;
}
-#line 7972 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7973 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 327:
-#line 2745 "mrbgems/mruby-compiler/core/parse.y"
+#line 2746 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = cons(local_switch(p), nint(p->in_single));
nvars_block(p);
p->in_single = 0;
}
-#line 7982 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7983 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 328:
-#line 2752 "mrbgems/mruby-compiler/core/parse.y"
+#line 2753 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_sclass(p, (yyvsp[-5].nd), (yyvsp[-1].nd));
SET_LINENO((yyval.nd), (yyvsp[-7].num));
@@ -7991,44 +7992,44 @@ yyreduce:
p->in_def = (yyvsp[-4].num);
p->in_single = intn((yyvsp[-2].nd)->cdr);
}
-#line 7995 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 7996 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 329:
-#line 2762 "mrbgems/mruby-compiler/core/parse.y"
+#line 2763 "mrbgems/mruby-compiler/core/parse.y"
{
if (p->in_def || p->in_single)
yyerror(p, "module definition in method body");
(yyval.nd) = local_switch(p);
nvars_block(p);
}
-#line 8006 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8007 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 330:
-#line 2770 "mrbgems/mruby-compiler/core/parse.y"
+#line 2771 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_module(p, (yyvsp[-3].nd), (yyvsp[-1].nd));
SET_LINENO((yyval.nd), (yyvsp[-4].num));
local_resume(p, (yyvsp[-2].nd));
nvars_unnest(p);
}
-#line 8017 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8018 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 331:
-#line 2780 "mrbgems/mruby-compiler/core/parse.y"
+#line 2781 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = (yyvsp[-3].nd);
defn_setup(p, (yyval.nd), (yyvsp[-2].nd), (yyvsp[-1].nd));
nvars_unnest(p);
p->in_def--;
}
-#line 8028 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8029 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 332:
-#line 2790 "mrbgems/mruby-compiler/core/parse.y"
+#line 2791 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = (yyvsp[-3].nd);
defs_setup(p, (yyval.nd), (yyvsp[-2].nd), (yyvsp[-1].nd));
@@ -8036,453 +8037,453 @@ yyreduce:
p->in_def--;
p->in_single--;
}
-#line 8040 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8041 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 333:
-#line 2798 "mrbgems/mruby-compiler/core/parse.y"
+#line 2799 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_break(p, 0);
}
-#line 8048 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8049 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 334:
-#line 2802 "mrbgems/mruby-compiler/core/parse.y"
+#line 2803 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_next(p, 0);
}
-#line 8056 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8057 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 335:
-#line 2806 "mrbgems/mruby-compiler/core/parse.y"
+#line 2807 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_redo(p);
}
-#line 8064 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8065 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 336:
-#line 2810 "mrbgems/mruby-compiler/core/parse.y"
+#line 2811 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_retry(p);
}
-#line 8072 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8073 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 337:
-#line 2816 "mrbgems/mruby-compiler/core/parse.y"
+#line 2817 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = (yyvsp[0].nd);
if (!(yyval.nd)) (yyval.nd) = new_nil(p);
}
-#line 8081 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8082 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 344:
-#line 2835 "mrbgems/mruby-compiler/core/parse.y"
+#line 2836 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_if(p, cond((yyvsp[-3].nd)), (yyvsp[-1].nd), (yyvsp[0].nd));
}
-#line 8089 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8090 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 346:
-#line 2842 "mrbgems/mruby-compiler/core/parse.y"
+#line 2843 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = (yyvsp[0].nd);
}
-#line 8097 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8098 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 347:
-#line 2848 "mrbgems/mruby-compiler/core/parse.y"
+#line 2849 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = list1(list1((yyvsp[0].nd)));
}
-#line 8105 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8106 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 349:
-#line 2855 "mrbgems/mruby-compiler/core/parse.y"
+#line 2856 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = list3((yyvsp[0].nd),0,0);
}
-#line 8113 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8114 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 350:
-#line 2859 "mrbgems/mruby-compiler/core/parse.y"
+#line 2860 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = list3((yyvsp[-3].nd), new_arg(p, (yyvsp[0].id)), 0);
}
-#line 8121 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8122 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 351:
-#line 2863 "mrbgems/mruby-compiler/core/parse.y"
+#line 2864 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = list3((yyvsp[-5].nd), new_arg(p, (yyvsp[-2].id)), (yyvsp[0].nd));
}
-#line 8129 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8130 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 352:
-#line 2867 "mrbgems/mruby-compiler/core/parse.y"
+#line 2868 "mrbgems/mruby-compiler/core/parse.y"
{
local_add_f(p, 0);
- (yyval.nd) = list3((yyvsp[-2].nd), (node*)-1, 0);
+ (yyval.nd) = list3((yyvsp[-2].nd), nint(-1), 0);
}
-#line 8138 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8139 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 353:
-#line 2872 "mrbgems/mruby-compiler/core/parse.y"
+#line 2873 "mrbgems/mruby-compiler/core/parse.y"
{
- (yyval.nd) = list3((yyvsp[-4].nd), (node*)-1, (yyvsp[0].nd));
+ (yyval.nd) = list3((yyvsp[-4].nd), nint(-1), (yyvsp[0].nd));
}
-#line 8146 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8147 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 354:
-#line 2876 "mrbgems/mruby-compiler/core/parse.y"
+#line 2877 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = list3(0, new_arg(p, (yyvsp[0].id)), 0);
}
-#line 8154 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8155 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 355:
-#line 2880 "mrbgems/mruby-compiler/core/parse.y"
+#line 2881 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = list3(0, new_arg(p, (yyvsp[-2].id)), (yyvsp[0].nd));
}
-#line 8162 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8163 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 356:
-#line 2884 "mrbgems/mruby-compiler/core/parse.y"
+#line 2885 "mrbgems/mruby-compiler/core/parse.y"
{
local_add_f(p, 0);
- (yyval.nd) = list3(0, (node*)-1, 0);
+ (yyval.nd) = list3(0, nint(-1), 0);
}
-#line 8171 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8172 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 357:
-#line 2889 "mrbgems/mruby-compiler/core/parse.y"
+#line 2890 "mrbgems/mruby-compiler/core/parse.y"
{
local_add_f(p, 0);
}
-#line 8179 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8180 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 358:
-#line 2893 "mrbgems/mruby-compiler/core/parse.y"
+#line 2894 "mrbgems/mruby-compiler/core/parse.y"
{
- (yyval.nd) = list3(0, (node*)-1, (yyvsp[0].nd));
+ (yyval.nd) = list3(0, nint(-1), (yyvsp[0].nd));
}
-#line 8187 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8188 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 359:
-#line 2899 "mrbgems/mruby-compiler/core/parse.y"
+#line 2900 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_args_tail(p, (yyvsp[-3].nd), (yyvsp[-1].nd), (yyvsp[0].id));
}
-#line 8195 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8196 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 360:
-#line 2903 "mrbgems/mruby-compiler/core/parse.y"
+#line 2904 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_args_tail(p, (yyvsp[-1].nd), 0, (yyvsp[0].id));
}
-#line 8203 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8204 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 361:
-#line 2907 "mrbgems/mruby-compiler/core/parse.y"
+#line 2908 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_args_tail(p, 0, (yyvsp[-1].nd), (yyvsp[0].id));
}
-#line 8211 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8212 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 362:
-#line 2911 "mrbgems/mruby-compiler/core/parse.y"
+#line 2912 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_args_tail(p, 0, 0, (yyvsp[0].id));
}
-#line 8219 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8220 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 363:
-#line 2917 "mrbgems/mruby-compiler/core/parse.y"
+#line 2918 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = (yyvsp[0].nd);
}
-#line 8227 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8228 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 364:
-#line 2921 "mrbgems/mruby-compiler/core/parse.y"
+#line 2922 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_args_tail(p, 0, 0, 0);
}
-#line 8235 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8236 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 365:
-#line 2927 "mrbgems/mruby-compiler/core/parse.y"
+#line 2928 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_args(p, (yyvsp[-5].nd), (yyvsp[-3].nd), (yyvsp[-1].id), 0, (yyvsp[0].nd));
}
-#line 8243 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8244 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 366:
-#line 2931 "mrbgems/mruby-compiler/core/parse.y"
+#line 2932 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_args(p, (yyvsp[-7].nd), (yyvsp[-5].nd), (yyvsp[-3].id), (yyvsp[-1].nd), (yyvsp[0].nd));
}
-#line 8251 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8252 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 367:
-#line 2935 "mrbgems/mruby-compiler/core/parse.y"
+#line 2936 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_args(p, (yyvsp[-3].nd), (yyvsp[-1].nd), 0, 0, (yyvsp[0].nd));
}
-#line 8259 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8260 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 368:
-#line 2939 "mrbgems/mruby-compiler/core/parse.y"
+#line 2940 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_args(p, (yyvsp[-5].nd), (yyvsp[-3].nd), 0, (yyvsp[-1].nd), (yyvsp[0].nd));
}
-#line 8267 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8268 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 369:
-#line 2943 "mrbgems/mruby-compiler/core/parse.y"
+#line 2944 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_args(p, (yyvsp[-3].nd), 0, (yyvsp[-1].id), 0, (yyvsp[0].nd));
}
-#line 8275 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8276 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 370:
-#line 2947 "mrbgems/mruby-compiler/core/parse.y"
+#line 2948 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_args(p, (yyvsp[-2].nd), 0, 0, 0, (yyvsp[0].nd));
}
-#line 8283 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8284 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 371:
-#line 2951 "mrbgems/mruby-compiler/core/parse.y"
+#line 2952 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_args(p, (yyvsp[-5].nd), 0, (yyvsp[-3].id), (yyvsp[-1].nd), (yyvsp[0].nd));
}
-#line 8291 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8292 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 372:
-#line 2955 "mrbgems/mruby-compiler/core/parse.y"
+#line 2956 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_args(p, (yyvsp[-1].nd), 0, 0, 0, (yyvsp[0].nd));
}
-#line 8299 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8300 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 373:
-#line 2959 "mrbgems/mruby-compiler/core/parse.y"
+#line 2960 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_args(p, 0, (yyvsp[-3].nd), (yyvsp[-1].id), 0, (yyvsp[0].nd));
}
-#line 8307 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8308 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 374:
-#line 2963 "mrbgems/mruby-compiler/core/parse.y"
+#line 2964 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_args(p, 0, (yyvsp[-5].nd), (yyvsp[-3].id), (yyvsp[-1].nd), (yyvsp[0].nd));
}
-#line 8315 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8316 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 375:
-#line 2967 "mrbgems/mruby-compiler/core/parse.y"
+#line 2968 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_args(p, 0, (yyvsp[-1].nd), 0, 0, (yyvsp[0].nd));
}
-#line 8323 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8324 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 376:
-#line 2971 "mrbgems/mruby-compiler/core/parse.y"
+#line 2972 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_args(p, 0, (yyvsp[-3].nd), 0, (yyvsp[-1].nd), (yyvsp[0].nd));
}
-#line 8331 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8332 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 377:
-#line 2975 "mrbgems/mruby-compiler/core/parse.y"
+#line 2976 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_args(p, 0, 0, (yyvsp[-1].id), 0, (yyvsp[0].nd));
}
-#line 8339 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8340 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 378:
-#line 2979 "mrbgems/mruby-compiler/core/parse.y"
+#line 2980 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_args(p, 0, 0, (yyvsp[-3].id), (yyvsp[-1].nd), (yyvsp[0].nd));
}
-#line 8347 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8348 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 379:
-#line 2983 "mrbgems/mruby-compiler/core/parse.y"
+#line 2984 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_args(p, 0, 0, 0, 0, (yyvsp[0].nd));
}
-#line 8355 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8356 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 380:
-#line 2989 "mrbgems/mruby-compiler/core/parse.y"
+#line 2990 "mrbgems/mruby-compiler/core/parse.y"
{
local_add_blk(p, 0);
(yyval.nd) = 0;
}
-#line 8364 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8365 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 381:
-#line 2994 "mrbgems/mruby-compiler/core/parse.y"
+#line 2995 "mrbgems/mruby-compiler/core/parse.y"
{
p->cmd_start = TRUE;
(yyval.nd) = (yyvsp[0].nd);
}
-#line 8373 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8374 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 382:
-#line 3000 "mrbgems/mruby-compiler/core/parse.y"
+#line 3001 "mrbgems/mruby-compiler/core/parse.y"
{local_add_blk(p, 0);}
-#line 8379 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8380 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 383:
-#line 3001 "mrbgems/mruby-compiler/core/parse.y"
+#line 3002 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = 0;
}
-#line 8387 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8388 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 384:
-#line 3005 "mrbgems/mruby-compiler/core/parse.y"
+#line 3006 "mrbgems/mruby-compiler/core/parse.y"
{
local_add_blk(p, 0);
(yyval.nd) = 0;
}
-#line 8396 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8397 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 385:
-#line 3010 "mrbgems/mruby-compiler/core/parse.y"
+#line 3011 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = (yyvsp[-2].nd);
}
-#line 8404 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8405 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 386:
-#line 3017 "mrbgems/mruby-compiler/core/parse.y"
+#line 3018 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = 0;
}
-#line 8412 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8413 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 387:
-#line 3021 "mrbgems/mruby-compiler/core/parse.y"
+#line 3022 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = 0;
}
-#line 8420 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8421 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 390:
-#line 3031 "mrbgems/mruby-compiler/core/parse.y"
+#line 3032 "mrbgems/mruby-compiler/core/parse.y"
{
local_add_f(p, (yyvsp[0].id));
new_bv(p, (yyvsp[0].id));
}
-#line 8429 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8430 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 392:
-#line 3039 "mrbgems/mruby-compiler/core/parse.y"
+#line 3040 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = (yyvsp[-2].nd);
}
-#line 8437 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8438 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 393:
-#line 3043 "mrbgems/mruby-compiler/core/parse.y"
+#line 3044 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = (yyvsp[0].nd);
}
-#line 8445 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8446 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 394:
-#line 3049 "mrbgems/mruby-compiler/core/parse.y"
+#line 3050 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = (yyvsp[-1].nd);
}
-#line 8453 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8454 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 395:
-#line 3053 "mrbgems/mruby-compiler/core/parse.y"
+#line 3054 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = (yyvsp[-1].nd);
}
-#line 8461 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8462 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 396:
-#line 3059 "mrbgems/mruby-compiler/core/parse.y"
+#line 3060 "mrbgems/mruby-compiler/core/parse.y"
{
local_nest(p);
nvars_nest(p);
}
-#line 8470 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8471 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 397:
-#line 3066 "mrbgems/mruby-compiler/core/parse.y"
+#line 3067 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_block(p,(yyvsp[-2].nd),(yyvsp[-1].nd));
local_unnest(p);
nvars_unnest(p);
}
-#line 8480 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8481 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 398:
-#line 3074 "mrbgems/mruby-compiler/core/parse.y"
+#line 3075 "mrbgems/mruby-compiler/core/parse.y"
{
- if ((yyvsp[-1].nd)->car == (node*)NODE_YIELD) {
+ if (typen((yyvsp[-1].nd)->car) == NODE_YIELD) {
yyerror(p, "block given to yield");
}
else {
@@ -8490,159 +8491,159 @@ yyreduce:
}
(yyval.nd) = (yyvsp[-1].nd);
}
-#line 8494 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8495 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 399:
-#line 3084 "mrbgems/mruby-compiler/core/parse.y"
+#line 3085 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_call(p, (yyvsp[-3].nd), (yyvsp[-1].id), (yyvsp[0].nd), (yyvsp[-2].num));
}
-#line 8502 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8503 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 400:
-#line 3088 "mrbgems/mruby-compiler/core/parse.y"
+#line 3089 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_call(p, (yyvsp[-4].nd), (yyvsp[-2].id), (yyvsp[-1].nd), (yyvsp[-3].num));
call_with_block(p, (yyval.nd), (yyvsp[0].nd));
}
-#line 8511 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8512 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 401:
-#line 3093 "mrbgems/mruby-compiler/core/parse.y"
+#line 3094 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_call(p, (yyvsp[-4].nd), (yyvsp[-2].id), (yyvsp[-1].nd), (yyvsp[-3].num));
call_with_block(p, (yyval.nd), (yyvsp[0].nd));
}
-#line 8520 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8521 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 402:
-#line 3100 "mrbgems/mruby-compiler/core/parse.y"
+#line 3101 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_fcall(p, (yyvsp[-1].id), (yyvsp[0].nd));
}
-#line 8528 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8529 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 403:
-#line 3104 "mrbgems/mruby-compiler/core/parse.y"
+#line 3105 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_call(p, (yyvsp[-3].nd), (yyvsp[-1].id), (yyvsp[0].nd), (yyvsp[-2].num));
}
-#line 8536 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8537 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 404:
-#line 3108 "mrbgems/mruby-compiler/core/parse.y"
+#line 3109 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_call(p, (yyvsp[-3].nd), (yyvsp[-1].id), (yyvsp[0].nd), tCOLON2);
}
-#line 8544 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8545 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 405:
-#line 3112 "mrbgems/mruby-compiler/core/parse.y"
+#line 3113 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_call(p, (yyvsp[-2].nd), (yyvsp[0].id), 0, tCOLON2);
}
-#line 8552 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8553 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 406:
-#line 3116 "mrbgems/mruby-compiler/core/parse.y"
+#line 3117 "mrbgems/mruby-compiler/core/parse.y"
{
- (yyval.nd) = new_call(p, (yyvsp[-2].nd), MRB_SYM(call), (yyvsp[0].nd), (yyvsp[-1].num));
+ (yyval.nd) = new_call(p, (yyvsp[-2].nd), MRB_SYM_2(p->mrb, call), (yyvsp[0].nd), (yyvsp[-1].num));
}
-#line 8560 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8561 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 407:
-#line 3120 "mrbgems/mruby-compiler/core/parse.y"
+#line 3121 "mrbgems/mruby-compiler/core/parse.y"
{
- (yyval.nd) = new_call(p, (yyvsp[-2].nd), MRB_SYM(call), (yyvsp[0].nd), tCOLON2);
+ (yyval.nd) = new_call(p, (yyvsp[-2].nd), MRB_SYM_2(p->mrb, call), (yyvsp[0].nd), tCOLON2);
}
-#line 8568 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8569 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 408:
-#line 3124 "mrbgems/mruby-compiler/core/parse.y"
+#line 3125 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_super(p, (yyvsp[0].nd));
}
-#line 8576 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8577 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 409:
-#line 3128 "mrbgems/mruby-compiler/core/parse.y"
+#line 3129 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_zsuper(p);
}
-#line 8584 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8585 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 410:
-#line 3132 "mrbgems/mruby-compiler/core/parse.y"
+#line 3133 "mrbgems/mruby-compiler/core/parse.y"
{
- (yyval.nd) = new_call(p, (yyvsp[-3].nd), MRB_OPSYM(aref), (yyvsp[-1].nd), '.');
+ (yyval.nd) = new_call(p, (yyvsp[-3].nd), intern_op(aref), (yyvsp[-1].nd), '.');
}
-#line 8592 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8593 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 411:
-#line 3138 "mrbgems/mruby-compiler/core/parse.y"
+#line 3139 "mrbgems/mruby-compiler/core/parse.y"
{
local_nest(p);
nvars_nest(p);
(yyval.num) = p->lineno;
}
-#line 8602 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8603 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 412:
-#line 3145 "mrbgems/mruby-compiler/core/parse.y"
+#line 3146 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_block(p,(yyvsp[-2].nd),(yyvsp[-1].nd));
SET_LINENO((yyval.nd), (yyvsp[-3].num));
local_unnest(p);
nvars_unnest(p);
}
-#line 8613 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8614 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 413:
-#line 3152 "mrbgems/mruby-compiler/core/parse.y"
+#line 3153 "mrbgems/mruby-compiler/core/parse.y"
{
local_nest(p);
nvars_nest(p);
(yyval.num) = p->lineno;
}
-#line 8623 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8624 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 414:
-#line 3159 "mrbgems/mruby-compiler/core/parse.y"
+#line 3160 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_block(p,(yyvsp[-2].nd),(yyvsp[-1].nd));
SET_LINENO((yyval.nd), (yyvsp[-3].num));
local_unnest(p);
nvars_unnest(p);
}
-#line 8634 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8635 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 415:
-#line 3170 "mrbgems/mruby-compiler/core/parse.y"
+#line 3171 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = cons(cons((yyvsp[-3].nd), (yyvsp[-1].nd)), (yyvsp[0].nd));
}
-#line 8642 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8643 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 416:
-#line 3176 "mrbgems/mruby-compiler/core/parse.y"
+#line 3177 "mrbgems/mruby-compiler/core/parse.y"
{
if ((yyvsp[0].nd)) {
(yyval.nd) = cons(cons(0, (yyvsp[0].nd)), 0);
@@ -8651,383 +8652,383 @@ yyreduce:
(yyval.nd) = 0;
}
}
-#line 8655 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8656 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 418:
-#line 3190 "mrbgems/mruby-compiler/core/parse.y"
+#line 3191 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = list1(list3((yyvsp[-4].nd), (yyvsp[-3].nd), (yyvsp[-1].nd)));
if ((yyvsp[0].nd)) (yyval.nd) = append((yyval.nd), (yyvsp[0].nd));
}
-#line 8664 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8665 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 420:
-#line 3198 "mrbgems/mruby-compiler/core/parse.y"
+#line 3199 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = list1((yyvsp[0].nd));
}
-#line 8672 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8673 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 423:
-#line 3206 "mrbgems/mruby-compiler/core/parse.y"
+#line 3207 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = (yyvsp[0].nd);
}
-#line 8680 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8681 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 425:
-#line 3213 "mrbgems/mruby-compiler/core/parse.y"
+#line 3214 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = (yyvsp[0].nd);
}
-#line 8688 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8689 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 432:
-#line 3227 "mrbgems/mruby-compiler/core/parse.y"
+#line 3228 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = concat_string(p, (yyvsp[-1].nd), (yyvsp[0].nd));
}
-#line 8696 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8697 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 435:
-#line 3235 "mrbgems/mruby-compiler/core/parse.y"
+#line 3236 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = (yyvsp[0].nd);
}
-#line 8704 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8705 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 436:
-#line 3239 "mrbgems/mruby-compiler/core/parse.y"
+#line 3240 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_dstr(p, push((yyvsp[-1].nd), (yyvsp[0].nd)));
}
-#line 8712 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8713 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 438:
-#line 3246 "mrbgems/mruby-compiler/core/parse.y"
+#line 3247 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = append((yyvsp[-1].nd), (yyvsp[0].nd));
}
-#line 8720 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8721 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 439:
-#line 3252 "mrbgems/mruby-compiler/core/parse.y"
+#line 3253 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = list1((yyvsp[0].nd));
}
-#line 8728 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8729 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 440:
-#line 3256 "mrbgems/mruby-compiler/core/parse.y"
+#line 3257 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = p->lex_strterm;
p->lex_strterm = NULL;
}
-#line 8737 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8738 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 441:
-#line 3262 "mrbgems/mruby-compiler/core/parse.y"
+#line 3263 "mrbgems/mruby-compiler/core/parse.y"
{
p->lex_strterm = (yyvsp[-2].nd);
(yyval.nd) = list2((yyvsp[-3].nd), (yyvsp[-1].nd));
}
-#line 8746 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8747 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 442:
-#line 3267 "mrbgems/mruby-compiler/core/parse.y"
+#line 3268 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = list1(new_literal_delim(p));
}
-#line 8754 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8755 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 443:
-#line 3271 "mrbgems/mruby-compiler/core/parse.y"
+#line 3272 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = list1(new_literal_delim(p));
}
-#line 8762 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8763 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 444:
-#line 3277 "mrbgems/mruby-compiler/core/parse.y"
+#line 3278 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = (yyvsp[0].nd);
}
-#line 8770 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8771 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 445:
-#line 3281 "mrbgems/mruby-compiler/core/parse.y"
+#line 3282 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_dxstr(p, push((yyvsp[-1].nd), (yyvsp[0].nd)));
}
-#line 8778 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8779 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 446:
-#line 3287 "mrbgems/mruby-compiler/core/parse.y"
+#line 3288 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = (yyvsp[0].nd);
}
-#line 8786 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8787 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 447:
-#line 3291 "mrbgems/mruby-compiler/core/parse.y"
+#line 3292 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_dregx(p, (yyvsp[-1].nd), (yyvsp[0].nd));
}
-#line 8794 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8795 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 451:
-#line 3304 "mrbgems/mruby-compiler/core/parse.y"
+#line 3305 "mrbgems/mruby-compiler/core/parse.y"
{
parser_heredoc_info * inf = parsing_heredoc_inf(p);
inf->doc = push(inf->doc, new_str(p, "", 0));
heredoc_end(p);
}
-#line 8804 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8805 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 452:
-#line 3310 "mrbgems/mruby-compiler/core/parse.y"
+#line 3311 "mrbgems/mruby-compiler/core/parse.y"
{
heredoc_end(p);
}
-#line 8812 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8813 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 455:
-#line 3320 "mrbgems/mruby-compiler/core/parse.y"
+#line 3321 "mrbgems/mruby-compiler/core/parse.y"
{
parser_heredoc_info * inf = parsing_heredoc_inf(p);
inf->doc = push(inf->doc, (yyvsp[0].nd));
heredoc_treat_nextline(p);
}
-#line 8822 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8823 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 456:
-#line 3326 "mrbgems/mruby-compiler/core/parse.y"
+#line 3327 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = p->lex_strterm;
p->lex_strterm = NULL;
}
-#line 8831 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8832 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 457:
-#line 3332 "mrbgems/mruby-compiler/core/parse.y"
+#line 3333 "mrbgems/mruby-compiler/core/parse.y"
{
parser_heredoc_info * inf = parsing_heredoc_inf(p);
p->lex_strterm = (yyvsp[-2].nd);
inf->doc = push(push(inf->doc, (yyvsp[-3].nd)), (yyvsp[-1].nd));
}
-#line 8841 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8842 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 458:
-#line 3340 "mrbgems/mruby-compiler/core/parse.y"
+#line 3341 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_words(p, list1((yyvsp[0].nd)));
}
-#line 8849 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8850 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 459:
-#line 3344 "mrbgems/mruby-compiler/core/parse.y"
+#line 3345 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_words(p, push((yyvsp[-1].nd), (yyvsp[0].nd)));
}
-#line 8857 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8858 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 460:
-#line 3351 "mrbgems/mruby-compiler/core/parse.y"
+#line 3352 "mrbgems/mruby-compiler/core/parse.y"
{
p->lstate = EXPR_ENDARG;
(yyval.nd) = new_sym(p, (yyvsp[0].id));
}
-#line 8866 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8867 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 461:
-#line 3356 "mrbgems/mruby-compiler/core/parse.y"
+#line 3357 "mrbgems/mruby-compiler/core/parse.y"
{
p->lstate = EXPR_ENDARG;
(yyval.nd) = new_dsym(p, new_dstr(p, push((yyvsp[-1].nd), (yyvsp[0].nd))));
}
-#line 8875 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8876 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 462:
-#line 3363 "mrbgems/mruby-compiler/core/parse.y"
+#line 3364 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.id) = (yyvsp[0].id);
}
-#line 8883 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8884 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 467:
-#line 3373 "mrbgems/mruby-compiler/core/parse.y"
+#line 3374 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.id) = new_strsym(p, (yyvsp[0].nd));
}
-#line 8891 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8892 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 468:
-#line 3377 "mrbgems/mruby-compiler/core/parse.y"
+#line 3378 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.id) = new_strsym(p, (yyvsp[0].nd));
}
-#line 8899 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8900 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 469:
-#line 3383 "mrbgems/mruby-compiler/core/parse.y"
+#line 3384 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_symbols(p, list1((yyvsp[0].nd)));
}
-#line 8907 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8908 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 470:
-#line 3387 "mrbgems/mruby-compiler/core/parse.y"
+#line 3388 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_symbols(p, push((yyvsp[-1].nd), (yyvsp[0].nd)));
}
-#line 8915 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8916 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 473:
-#line 3395 "mrbgems/mruby-compiler/core/parse.y"
+#line 3396 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = negate_lit(p, (yyvsp[0].nd));
}
-#line 8923 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8924 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 474:
-#line 3399 "mrbgems/mruby-compiler/core/parse.y"
+#line 3400 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = negate_lit(p, (yyvsp[0].nd));
}
-#line 8931 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8932 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 475:
-#line 3405 "mrbgems/mruby-compiler/core/parse.y"
+#line 3406 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_lvar(p, (yyvsp[0].id));
}
-#line 8939 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8940 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 476:
-#line 3409 "mrbgems/mruby-compiler/core/parse.y"
+#line 3410 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_ivar(p, (yyvsp[0].id));
}
-#line 8947 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8948 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 477:
-#line 3413 "mrbgems/mruby-compiler/core/parse.y"
+#line 3414 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_gvar(p, (yyvsp[0].id));
}
-#line 8955 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8956 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 478:
-#line 3417 "mrbgems/mruby-compiler/core/parse.y"
+#line 3418 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_cvar(p, (yyvsp[0].id));
}
-#line 8963 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8964 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 479:
-#line 3421 "mrbgems/mruby-compiler/core/parse.y"
+#line 3422 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_const(p, (yyvsp[0].id));
}
-#line 8971 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8972 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 480:
-#line 3427 "mrbgems/mruby-compiler/core/parse.y"
+#line 3428 "mrbgems/mruby-compiler/core/parse.y"
{
assignable(p, (yyvsp[0].nd));
}
-#line 8979 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8980 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 481:
-#line 3431 "mrbgems/mruby-compiler/core/parse.y"
+#line 3432 "mrbgems/mruby-compiler/core/parse.y"
{
yyerror(p, "can't assign to numbered parameter");
}
-#line 8987 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8988 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 482:
-#line 3437 "mrbgems/mruby-compiler/core/parse.y"
+#line 3438 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = var_reference(p, (yyvsp[0].nd));
}
-#line 8995 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 8996 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 483:
-#line 3441 "mrbgems/mruby-compiler/core/parse.y"
+#line 3442 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_nil(p);
}
-#line 9003 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9004 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 484:
-#line 3445 "mrbgems/mruby-compiler/core/parse.y"
+#line 3446 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_self(p);
}
-#line 9011 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9012 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 485:
-#line 3449 "mrbgems/mruby-compiler/core/parse.y"
+#line 3450 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_true(p);
}
-#line 9019 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9020 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 486:
-#line 3453 "mrbgems/mruby-compiler/core/parse.y"
+#line 3454 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_false(p);
}
-#line 9027 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9028 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 487:
-#line 3457 "mrbgems/mruby-compiler/core/parse.y"
+#line 3458 "mrbgems/mruby-compiler/core/parse.y"
{
const char *fn = mrb_sym_name_len(p->mrb, p->filename_sym, NULL);
if (!fn) {
@@ -9035,22 +9036,22 @@ yyreduce:
}
(yyval.nd) = new_str(p, fn, strlen(fn));
}
-#line 9039 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9040 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 488:
-#line 3465 "mrbgems/mruby-compiler/core/parse.y"
+#line 3466 "mrbgems/mruby-compiler/core/parse.y"
{
char buf[16];
dump_int(p->lineno, buf);
(yyval.nd) = new_int(p, buf, 10, 0);
}
-#line 9050 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9051 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 489:
-#line 3472 "mrbgems/mruby-compiler/core/parse.y"
+#line 3473 "mrbgems/mruby-compiler/core/parse.y"
{
#ifdef MRB_UTF8_STRING
const char *enc = "UTF-8";
@@ -9059,589 +9060,589 @@ yyreduce:
#endif
(yyval.nd) = new_str(p, enc, strlen(enc));
}
-#line 9063 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9064 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 492:
-#line 3487 "mrbgems/mruby-compiler/core/parse.y"
+#line 3488 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = 0;
}
-#line 9071 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9072 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 493:
-#line 3491 "mrbgems/mruby-compiler/core/parse.y"
+#line 3492 "mrbgems/mruby-compiler/core/parse.y"
{
p->lstate = EXPR_BEG;
p->cmd_start = TRUE;
}
-#line 9080 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9081 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 494:
-#line 3496 "mrbgems/mruby-compiler/core/parse.y"
+#line 3497 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = (yyvsp[-1].nd);
}
-#line 9088 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9089 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 495:
-#line 3507 "mrbgems/mruby-compiler/core/parse.y"
+#line 3508 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = (yyvsp[-1].nd);
p->lstate = EXPR_BEG;
p->cmd_start = TRUE;
}
-#line 9098 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9099 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 496:
-#line 3513 "mrbgems/mruby-compiler/core/parse.y"
+#line 3514 "mrbgems/mruby-compiler/core/parse.y"
{
#if 1
/* til real keyword args implemented */
- mrb_sym r = MRB_OPSYM(mul);
- mrb_sym b = MRB_OPSYM(and);
+ mrb_sym r = intern_op(mul);
+ mrb_sym b = intern_op(and);
local_add_f(p, r);
(yyval.nd) = new_args(p, (yyvsp[-3].nd), 0, r, 0,
new_args_tail(p, 0, 0, b));
#else
- mrb_sym r = MRB_OPSYM(mul);
- mrb_sym k = MRB_OPSYM(pow);
- mrb_sym b = MRB_OPSYM(and);
+ mrb_sym r = intern_op(mul);
+ mrb_sym k = intern_op(pow);
+ mrb_sym b = intern_op(and);
local_add_f(p, r); local_add_f(p, k);
(yyval.nd) = new_args(p, (yyvsp[-3].nd), 0, r, 0,
new_args_tail(p, 0, new_kw_rest_args(p, nsym(k)), b));
#endif
}
-#line 9120 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9121 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 497:
-#line 3531 "mrbgems/mruby-compiler/core/parse.y"
+#line 3532 "mrbgems/mruby-compiler/core/parse.y"
{
#if 1
/* til real keyword args implemented */
- mrb_sym r = MRB_OPSYM(mul);
- mrb_sym b = MRB_OPSYM(and);
+ mrb_sym r = intern_op(mul);
+ mrb_sym b = intern_op(and);
local_add_f(p, r);
(yyval.nd) = new_args(p, 0, 0, r, 0,
new_args_tail(p, 0, 0, b));
#else
- mrb_sym r = MRB_OPSYM(mul);
- mrb_sym k = MRB_OPSYM(pow);
- mrb_sym b = MRB_OPSYM(and);
+ mrb_sym r = intern_op(mul);
+ mrb_sym k = intern_op(pow);
+ mrb_sym b = intern_op(and);
local_add_f(p, r); local_add_f(p, k);
(yyval.nd) = new_args(p, 0, 0, r, 0,
new_args_tail(p, 0, new_kw_rest_args(p, nsym(k)), b));
#endif
}
-#line 9142 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9143 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 499:
-#line 3552 "mrbgems/mruby-compiler/core/parse.y"
+#line 3553 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = (yyvsp[-1].nd);
}
-#line 9150 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9151 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 500:
-#line 3558 "mrbgems/mruby-compiler/core/parse.y"
+#line 3559 "mrbgems/mruby-compiler/core/parse.y"
{
local_nest(p);
}
-#line 9158 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9159 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 501:
-#line 3564 "mrbgems/mruby-compiler/core/parse.y"
+#line 3565 "mrbgems/mruby-compiler/core/parse.y"
{
void_expr_error(p, (yyvsp[0].nd));
(yyval.nd) = new_kw_arg(p, (yyvsp[-1].id), cons((yyvsp[0].nd), locals_node(p)));
local_unnest(p);
}
-#line 9168 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9169 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 502:
-#line 3570 "mrbgems/mruby-compiler/core/parse.y"
+#line 3571 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_kw_arg(p, (yyvsp[0].id), 0);
local_unnest(p);
}
-#line 9177 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9178 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 503:
-#line 3577 "mrbgems/mruby-compiler/core/parse.y"
+#line 3578 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_kw_arg(p, (yyvsp[-1].id), cons((yyvsp[0].nd), locals_node(p)));
local_unnest(p);
}
-#line 9186 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9187 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 504:
-#line 3582 "mrbgems/mruby-compiler/core/parse.y"
+#line 3583 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_kw_arg(p, (yyvsp[0].id), 0);
local_unnest(p);
}
-#line 9195 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9196 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 505:
-#line 3589 "mrbgems/mruby-compiler/core/parse.y"
+#line 3590 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = list1((yyvsp[0].nd));
}
-#line 9203 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9204 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 506:
-#line 3593 "mrbgems/mruby-compiler/core/parse.y"
+#line 3594 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = push((yyvsp[-2].nd), (yyvsp[0].nd));
}
-#line 9211 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9212 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 507:
-#line 3599 "mrbgems/mruby-compiler/core/parse.y"
+#line 3600 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = list1((yyvsp[0].nd));
}
-#line 9219 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9220 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 508:
-#line 3603 "mrbgems/mruby-compiler/core/parse.y"
+#line 3604 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = push((yyvsp[-2].nd), (yyvsp[0].nd));
}
-#line 9227 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9228 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 511:
-#line 3613 "mrbgems/mruby-compiler/core/parse.y"
+#line 3614 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_kw_rest_args(p, nsym((yyvsp[0].id)));
}
-#line 9235 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9236 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 512:
-#line 3617 "mrbgems/mruby-compiler/core/parse.y"
+#line 3618 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_kw_rest_args(p, 0);
}
-#line 9243 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9244 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 513:
-#line 3623 "mrbgems/mruby-compiler/core/parse.y"
+#line 3624 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_args_tail(p, (yyvsp[-3].nd), (yyvsp[-1].nd), (yyvsp[0].id));
}
-#line 9251 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9252 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 514:
-#line 3627 "mrbgems/mruby-compiler/core/parse.y"
+#line 3628 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_args_tail(p, (yyvsp[-1].nd), 0, (yyvsp[0].id));
}
-#line 9259 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9260 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 515:
-#line 3631 "mrbgems/mruby-compiler/core/parse.y"
+#line 3632 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_args_tail(p, 0, (yyvsp[-1].nd), (yyvsp[0].id));
}
-#line 9267 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9268 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 516:
-#line 3635 "mrbgems/mruby-compiler/core/parse.y"
+#line 3636 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_args_tail(p, 0, 0, (yyvsp[0].id));
}
-#line 9275 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9276 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 517:
-#line 3641 "mrbgems/mruby-compiler/core/parse.y"
+#line 3642 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = (yyvsp[0].nd);
}
-#line 9283 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9284 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 518:
-#line 3645 "mrbgems/mruby-compiler/core/parse.y"
+#line 3646 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_args_tail(p, 0, 0, 0);
}
-#line 9291 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9292 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 519:
-#line 3651 "mrbgems/mruby-compiler/core/parse.y"
+#line 3652 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_args(p, (yyvsp[-5].nd), (yyvsp[-3].nd), (yyvsp[-1].id), 0, (yyvsp[0].nd));
}
-#line 9299 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9300 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 520:
-#line 3655 "mrbgems/mruby-compiler/core/parse.y"
+#line 3656 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_args(p, (yyvsp[-7].nd), (yyvsp[-5].nd), (yyvsp[-3].id), (yyvsp[-1].nd), (yyvsp[0].nd));
}
-#line 9307 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9308 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 521:
-#line 3659 "mrbgems/mruby-compiler/core/parse.y"
+#line 3660 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_args(p, (yyvsp[-3].nd), (yyvsp[-1].nd), 0, 0, (yyvsp[0].nd));
}
-#line 9315 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9316 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 522:
-#line 3663 "mrbgems/mruby-compiler/core/parse.y"
+#line 3664 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_args(p, (yyvsp[-5].nd), (yyvsp[-3].nd), 0, (yyvsp[-1].nd), (yyvsp[0].nd));
}
-#line 9323 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9324 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 523:
-#line 3667 "mrbgems/mruby-compiler/core/parse.y"
+#line 3668 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_args(p, (yyvsp[-3].nd), 0, (yyvsp[-1].id), 0, (yyvsp[0].nd));
}
-#line 9331 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9332 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 524:
-#line 3671 "mrbgems/mruby-compiler/core/parse.y"
+#line 3672 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_args(p, (yyvsp[-5].nd), 0, (yyvsp[-3].id), (yyvsp[-1].nd), (yyvsp[0].nd));
}
-#line 9339 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9340 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 525:
-#line 3675 "mrbgems/mruby-compiler/core/parse.y"
+#line 3676 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_args(p, (yyvsp[-1].nd), 0, 0, 0, (yyvsp[0].nd));
}
-#line 9347 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9348 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 526:
-#line 3679 "mrbgems/mruby-compiler/core/parse.y"
+#line 3680 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_args(p, 0, (yyvsp[-3].nd), (yyvsp[-1].id), 0, (yyvsp[0].nd));
}
-#line 9355 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9356 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 527:
-#line 3683 "mrbgems/mruby-compiler/core/parse.y"
+#line 3684 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_args(p, 0, (yyvsp[-5].nd), (yyvsp[-3].id), (yyvsp[-1].nd), (yyvsp[0].nd));
}
-#line 9363 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9364 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 528:
-#line 3687 "mrbgems/mruby-compiler/core/parse.y"
+#line 3688 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_args(p, 0, (yyvsp[-1].nd), 0, 0, (yyvsp[0].nd));
}
-#line 9371 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9372 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 529:
-#line 3691 "mrbgems/mruby-compiler/core/parse.y"
+#line 3692 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_args(p, 0, (yyvsp[-3].nd), 0, (yyvsp[-1].nd), (yyvsp[0].nd));
}
-#line 9379 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9380 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 530:
-#line 3695 "mrbgems/mruby-compiler/core/parse.y"
+#line 3696 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_args(p, 0, 0, (yyvsp[-1].id), 0, (yyvsp[0].nd));
}
-#line 9387 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9388 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 531:
-#line 3699 "mrbgems/mruby-compiler/core/parse.y"
+#line 3700 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_args(p, 0, 0, (yyvsp[-3].id), (yyvsp[-1].nd), (yyvsp[0].nd));
}
-#line 9395 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9396 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 532:
-#line 3703 "mrbgems/mruby-compiler/core/parse.y"
+#line 3704 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_args(p, 0, 0, 0, 0, (yyvsp[0].nd));
}
-#line 9403 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9404 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 533:
-#line 3707 "mrbgems/mruby-compiler/core/parse.y"
+#line 3708 "mrbgems/mruby-compiler/core/parse.y"
{
- local_add_f(p, MRB_OPSYM(and));
+ local_add_f(p, intern_op(and));
(yyval.nd) = new_args(p, 0, 0, 0, 0, 0);
}
-#line 9412 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9413 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 534:
-#line 3714 "mrbgems/mruby-compiler/core/parse.y"
+#line 3715 "mrbgems/mruby-compiler/core/parse.y"
{
yyerror(p, "formal argument cannot be a constant");
(yyval.nd) = 0;
}
-#line 9421 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9422 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 535:
-#line 3719 "mrbgems/mruby-compiler/core/parse.y"
+#line 3720 "mrbgems/mruby-compiler/core/parse.y"
{
yyerror(p, "formal argument cannot be an instance variable");
(yyval.nd) = 0;
}
-#line 9430 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9431 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 536:
-#line 3724 "mrbgems/mruby-compiler/core/parse.y"
+#line 3725 "mrbgems/mruby-compiler/core/parse.y"
{
yyerror(p, "formal argument cannot be a global variable");
(yyval.nd) = 0;
}
-#line 9439 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9440 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 537:
-#line 3729 "mrbgems/mruby-compiler/core/parse.y"
+#line 3730 "mrbgems/mruby-compiler/core/parse.y"
{
yyerror(p, "formal argument cannot be a class variable");
(yyval.nd) = 0;
}
-#line 9448 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9449 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 538:
-#line 3734 "mrbgems/mruby-compiler/core/parse.y"
+#line 3735 "mrbgems/mruby-compiler/core/parse.y"
{
yyerror(p, "formal argument cannot be a numbered parameter");
(yyval.nd) = 0;
}
-#line 9457 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9458 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 539:
-#line 3741 "mrbgems/mruby-compiler/core/parse.y"
+#line 3742 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.id) = 0;
}
-#line 9465 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9466 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 540:
-#line 3745 "mrbgems/mruby-compiler/core/parse.y"
+#line 3746 "mrbgems/mruby-compiler/core/parse.y"
{
local_add_f(p, (yyvsp[0].id));
(yyval.id) = (yyvsp[0].id);
}
-#line 9474 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9475 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 541:
-#line 3752 "mrbgems/mruby-compiler/core/parse.y"
+#line 3753 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_arg(p, (yyvsp[0].id));
}
-#line 9482 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9483 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 542:
-#line 3756 "mrbgems/mruby-compiler/core/parse.y"
+#line 3757 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = local_switch(p);
}
-#line 9490 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9491 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 543:
-#line 3760 "mrbgems/mruby-compiler/core/parse.y"
+#line 3761 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = new_masgn_param(p, (yyvsp[-1].nd), p->locals->car);
local_resume(p, (yyvsp[-2].nd));
local_add_f(p, 0);
}
-#line 9500 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9501 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 544:
-#line 3768 "mrbgems/mruby-compiler/core/parse.y"
+#line 3769 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = list1((yyvsp[0].nd));
}
-#line 9508 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9509 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 545:
-#line 3772 "mrbgems/mruby-compiler/core/parse.y"
+#line 3773 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = push((yyvsp[-2].nd), (yyvsp[0].nd));
}
-#line 9516 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9517 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 546:
-#line 3778 "mrbgems/mruby-compiler/core/parse.y"
+#line 3779 "mrbgems/mruby-compiler/core/parse.y"
{
local_add_f(p, (yyvsp[-1].id));
local_nest(p);
(yyval.id) = (yyvsp[-1].id);
}
-#line 9526 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9527 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 547:
-#line 3786 "mrbgems/mruby-compiler/core/parse.y"
+#line 3787 "mrbgems/mruby-compiler/core/parse.y"
{
void_expr_error(p, (yyvsp[0].nd));
(yyval.nd) = cons(nsym((yyvsp[-1].id)), cons((yyvsp[0].nd), locals_node(p)));
local_unnest(p);
}
-#line 9536 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9537 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 548:
-#line 3794 "mrbgems/mruby-compiler/core/parse.y"
+#line 3795 "mrbgems/mruby-compiler/core/parse.y"
{
void_expr_error(p, (yyvsp[0].nd));
(yyval.nd) = cons(nsym((yyvsp[-1].id)), cons((yyvsp[0].nd), locals_node(p)));
local_unnest(p);
}
-#line 9546 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9547 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 549:
-#line 3802 "mrbgems/mruby-compiler/core/parse.y"
+#line 3803 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = list1((yyvsp[0].nd));
}
-#line 9554 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9555 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 550:
-#line 3806 "mrbgems/mruby-compiler/core/parse.y"
+#line 3807 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = push((yyvsp[-2].nd), (yyvsp[0].nd));
}
-#line 9562 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9563 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 551:
-#line 3812 "mrbgems/mruby-compiler/core/parse.y"
+#line 3813 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = list1((yyvsp[0].nd));
}
-#line 9570 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9571 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 552:
-#line 3816 "mrbgems/mruby-compiler/core/parse.y"
+#line 3817 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = push((yyvsp[-2].nd), (yyvsp[0].nd));
}
-#line 9578 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9579 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 555:
-#line 3826 "mrbgems/mruby-compiler/core/parse.y"
+#line 3827 "mrbgems/mruby-compiler/core/parse.y"
{
local_add_f(p, (yyvsp[0].id));
(yyval.id) = (yyvsp[0].id);
}
-#line 9587 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9588 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 556:
-#line 3831 "mrbgems/mruby-compiler/core/parse.y"
+#line 3832 "mrbgems/mruby-compiler/core/parse.y"
{
- local_add_f(p, MRB_OPSYM(mul));
+ local_add_f(p, intern_op(mul));
(yyval.id) = -1;
}
-#line 9596 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9597 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 559:
-#line 3842 "mrbgems/mruby-compiler/core/parse.y"
+#line 3843 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.id) = (yyvsp[0].id);
}
-#line 9604 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9605 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 560:
-#line 3848 "mrbgems/mruby-compiler/core/parse.y"
+#line 3849 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.id) = (yyvsp[0].id);
}
-#line 9612 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9613 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 561:
-#line 3852 "mrbgems/mruby-compiler/core/parse.y"
+#line 3853 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.id) = 0;
}
-#line 9620 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9621 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 562:
-#line 3858 "mrbgems/mruby-compiler/core/parse.y"
+#line 3859 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = (yyvsp[0].nd);
if (!(yyval.nd)) (yyval.nd) = new_nil(p);
}
-#line 9629 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9630 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 563:
-#line 3862 "mrbgems/mruby-compiler/core/parse.y"
+#line 3863 "mrbgems/mruby-compiler/core/parse.y"
{p->lstate = EXPR_BEG;}
-#line 9635 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9636 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 564:
-#line 3863 "mrbgems/mruby-compiler/core/parse.y"
+#line 3864 "mrbgems/mruby-compiler/core/parse.y"
{
if ((yyvsp[-1].nd) == 0) {
yyerror(p, "can't define singleton method for ().");
}
else {
- switch ((enum node_type)intn((yyvsp[-1].nd)->car)) {
+ switch (typen((yyvsp[-1].nd)->car)) {
case NODE_STR:
case NODE_DSTR:
case NODE_XSTR:
@@ -9658,125 +9659,125 @@ yyreduce:
}
(yyval.nd) = (yyvsp[-1].nd);
}
-#line 9662 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9663 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 566:
-#line 3889 "mrbgems/mruby-compiler/core/parse.y"
+#line 3890 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = (yyvsp[-1].nd);
}
-#line 9670 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9671 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 567:
-#line 3895 "mrbgems/mruby-compiler/core/parse.y"
+#line 3896 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = list1((yyvsp[0].nd));
NODE_LINENO((yyval.nd), (yyvsp[0].nd));
}
-#line 9679 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9680 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 568:
-#line 3900 "mrbgems/mruby-compiler/core/parse.y"
+#line 3901 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = push((yyvsp[-2].nd), (yyvsp[0].nd));
}
-#line 9687 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9688 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 571:
-#line 3910 "mrbgems/mruby-compiler/core/parse.y"
+#line 3911 "mrbgems/mruby-compiler/core/parse.y"
{
void_expr_error(p, (yyvsp[-2].nd));
void_expr_error(p, (yyvsp[0].nd));
(yyval.nd) = cons((yyvsp[-2].nd), (yyvsp[0].nd));
}
-#line 9697 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9698 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 572:
-#line 3916 "mrbgems/mruby-compiler/core/parse.y"
+#line 3917 "mrbgems/mruby-compiler/core/parse.y"
{
void_expr_error(p, (yyvsp[0].nd));
(yyval.nd) = cons(new_sym(p, (yyvsp[-2].id)), (yyvsp[0].nd));
}
-#line 9706 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9707 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 573:
-#line 3921 "mrbgems/mruby-compiler/core/parse.y"
+#line 3922 "mrbgems/mruby-compiler/core/parse.y"
{
void_expr_error(p, (yyvsp[0].nd));
- if ((yyvsp[-2].nd)->car == (node*)NODE_DSTR) {
+ if (typen((yyvsp[-2].nd)->car) == NODE_DSTR) {
(yyval.nd) = cons(new_dsym(p, (yyvsp[-2].nd)), (yyvsp[0].nd));
}
else {
(yyval.nd) = cons(new_sym(p, new_strsym(p, (yyvsp[-2].nd))), (yyvsp[0].nd));
}
}
-#line 9720 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9721 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 574:
-#line 3931 "mrbgems/mruby-compiler/core/parse.y"
+#line 3932 "mrbgems/mruby-compiler/core/parse.y"
{
void_expr_error(p, (yyvsp[0].nd));
(yyval.nd) = cons(new_kw_rest_args(p, 0), (yyvsp[0].nd));
}
-#line 9729 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9730 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 587:
-#line 3958 "mrbgems/mruby-compiler/core/parse.y"
+#line 3959 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.num) = '.';
}
-#line 9737 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9738 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 588:
-#line 3962 "mrbgems/mruby-compiler/core/parse.y"
+#line 3963 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.num) = 0;
}
-#line 9745 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9746 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 590:
-#line 3969 "mrbgems/mruby-compiler/core/parse.y"
+#line 3970 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.num) = tCOLON2;
}
-#line 9753 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9754 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 599:
-#line 3990 "mrbgems/mruby-compiler/core/parse.y"
+#line 3991 "mrbgems/mruby-compiler/core/parse.y"
{yyerrok;}
-#line 9759 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9760 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 602:
-#line 3996 "mrbgems/mruby-compiler/core/parse.y"
+#line 3997 "mrbgems/mruby-compiler/core/parse.y"
{
p->lineno += (yyvsp[0].num);
p->column = 0;
}
-#line 9768 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9769 "mrbgems/mruby-compiler/core/y.tab.c"
break;
case 605:
-#line 4007 "mrbgems/mruby-compiler/core/parse.y"
+#line 4008 "mrbgems/mruby-compiler/core/parse.y"
{
(yyval.nd) = 0;
}
-#line 9776 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9777 "mrbgems/mruby-compiler/core/y.tab.c"
break;
-#line 9780 "mrbgems/mruby-compiler/core/y.tab.c"
+#line 9781 "mrbgems/mruby-compiler/core/y.tab.c"
default: break;
}
@@ -10008,7 +10009,7 @@ yyreturn:
#endif
return yyresult;
}
-#line 4011 "mrbgems/mruby-compiler/core/parse.y"
+#line 4012 "mrbgems/mruby-compiler/core/parse.y"
#define pylval (*((YYSTYPE*)(p->ylval)))
@@ -10625,6 +10626,93 @@ read_escape(parser_state *p)
}
}
+static void
+heredoc_count_indent(parser_heredoc_info *hinf, const char *str, size_t len, size_t *indent, size_t *offset)
+{
+ *indent = 0;
+ *offset = 0;
+ for (size_t i = 0; i < len; i++) {
+ size_t size;
+ if (str[i] == '\n')
+ break;
+ else if (str[i] == '\t')
+ size = 8;
+ else if (ISSPACE(str[i]))
+ size = 1;
+ else
+ break;
+ if (*indent + size > hinf->indent)
+ break;
+ *indent += size;
+ *offset += 1;
+ }
+}
+
+static void
+heredoc_remove_indent(parser_state *p, parser_heredoc_info *hinf)
+{
+ if (!hinf->remove_indent)
+ return;
+ node *indented, *n, *pair, *escaped;
+ const char *str;
+ size_t len, indent, offset, start, end;
+ indented = hinf->indented;
+ while (indented) {
+ n = indented->car;
+ pair = n->car;
+ str = (char*)pair->car;
+ len = (size_t)pair->cdr;
+ escaped = n->cdr;
+ if (escaped) {
+ start = 0;
+ while (start < len) {
+ end = escaped ? (size_t)escaped->car : len;
+ heredoc_count_indent(hinf, str + start, end - start, &indent, &offset);
+ if (indent < hinf->indent)
+ hinf->indent = indent;
+ start = end;
+ if (escaped)
+ escaped = escaped->cdr;
+ }
+ }
+ indented = indented->cdr;
+ }
+ if (hinf->indent == 0)
+ return;
+ indented = hinf->indented;
+ while (indented) {
+ n = indented->car;
+ pair = n->car;
+ str = (char*)pair->car;
+ len = (size_t)pair->cdr;
+ escaped = n->cdr;
+ if (escaped) {
+ char *newstr = strndup(str, len);
+ size_t newlen = 0;
+ start = 0;
+ while (start < len) {
+ end = escaped ? (size_t)escaped->car : len;
+ size_t esclen = end - start;
+ heredoc_count_indent(hinf, str + start, esclen, &indent, &offset);
+ esclen -= offset;
+ memcpy(newstr + newlen, str + start + offset, esclen);
+ newlen += esclen;
+ start = end;
+ if (escaped)
+ escaped = escaped->cdr;
+ }
+ newstr[newlen] = '\0';
+ pair->car = (node*)newstr;
+ pair->cdr = (node*)newlen;
+ } else {
+ heredoc_count_indent(hinf, str, len, &indent, &offset);
+ pair->car = (node*)(str + offset);
+ pair->cdr = (node*)(len - offset);
+ }
+ indented = indented->cdr;
+ }
+}
+
static int
parse_string(parser_state *p)
{
@@ -10635,10 +10723,18 @@ parse_string(parser_state *p)
int end = intn(p->lex_strterm->cdr->cdr->cdr);
parser_heredoc_info *hinf = (type & STR_FUNC_HEREDOC) ? parsing_heredoc_inf(p) : NULL;
+ mrb_bool unindent = hinf && hinf->remove_indent;
+ mrb_bool head = hinf && hinf->line_head;
+ mrb_bool empty = TRUE;
+ size_t spaces = 0;
+ size_t pos = -1;
+ node *escaped = NULL;
+
if (beg == 0) beg = -3; /* should never happen */
if (end == 0) end = -3;
newtok(p);
while ((c = nextc(p)) != end || nest_level != 0) {
+ pos++;
if (hinf && (c == '\n' || c < 0)) {
mrb_bool line_head;
tokadd(p, '\n');
@@ -10658,6 +10754,7 @@ parse_string(parser_state *p)
}
}
if ((len-1 == hinf->term_len) && (strncmp(s, hinf->term, len-1) == 0)) {
+ heredoc_remove_indent(p, hinf);
return tHEREDOC_END;
}
}
@@ -10676,9 +10773,23 @@ parse_string(parser_state *p)
}
return 0;
}
- pylval.nd = new_str(p, tok(p), toklen(p));
+ node *nd = new_str(p, tok(p), toklen(p));
+ pylval.nd = nd;
+ if (unindent && head) {
+ hinf->indented = push(hinf->indented, cons(nd->cdr, escaped));
+ if ((hinf->indent == ~0U || spaces < hinf->indent) && (!empty || !line_head))
+ hinf->indent = spaces;
+ }
return tHD_STRING_MID;
}
+ if (unindent && head && empty) {
+ if (c == '\t')
+ spaces += 8;
+ else if (ISSPACE(c))
+ ++spaces;
+ else
+ empty = FALSE;
+ }
if (c < 0) {
yyerror(p, "unterminated string meets end of file");
return 0;
@@ -10700,6 +10811,10 @@ parse_string(parser_state *p)
else if (c == '\n') {
p->lineno++;
p->column = 0;
+ if (unindent) {
+ escaped = push(escaped, (node*)pos);
+ pos--;
+ }
if (type & STR_FUNC_ARRAY) {
tokadd(p, '\n');
}
@@ -10749,8 +10864,14 @@ parse_string(parser_state *p)
tokfix(p);
p->lstate = EXPR_BEG;
p->cmd_start = TRUE;
- pylval.nd = new_str(p, tok(p), toklen(p));
+ node *nd = new_str(p, tok(p), toklen(p));
+ pylval.nd = nd;
if (hinf) {
+ if (unindent && head) {
+ hinf->indented = push(hinf->indented, cons(nd->cdr, escaped));
+ if (hinf->indent == ~0U || spaces < hinf->indent)
+ hinf->indent = spaces;
+ }
hinf->line_head = FALSE;
return tHD_STRING_PART;
}
@@ -10871,7 +10992,7 @@ number_literal_suffix(parser_state *p)
int mask = NUM_SUFFIX_R|NUM_SUFFIX_I;
while ((c = nextc(p)) != -1) {
- list = push(list, (node*)(intptr_t)c);
+ list = push(list, nint(c));
if ((mask & NUM_SUFFIX_I) && c == 'i') {
result |= (mask & NUM_SUFFIX_I);
@@ -10907,6 +11028,7 @@ heredoc_identifier(parser_state *p)
int c;
int type = str_heredoc;
mrb_bool indent = FALSE;
+ mrb_bool squiggly = FALSE;
mrb_bool quote = FALSE;
node *newnode;
parser_heredoc_info *info;
@@ -10916,8 +11038,11 @@ heredoc_identifier(parser_state *p)
pushback(p, c);
return 0;
}
- if (c == '-') {
- indent = TRUE;
+ if (c == '-' || c == '~') {
+ if (c == '-')
+ indent = TRUE;
+ if (c == '~')
+ squiggly = TRUE;
c = nextc(p);
}
if (c == '\'' || c == '"') {
@@ -10944,6 +11069,7 @@ heredoc_identifier(parser_state *p)
if (! identchar(c)) {
pushback(p, c);
if (indent) pushback(p, '-');
+ if (squiggly) pushback(p, '~');
return 0;
}
newtok(p);
@@ -10960,7 +11086,10 @@ heredoc_identifier(parser_state *p)
if (! quote)
type |= STR_FUNC_EXPAND;
info->type = (string_type)type;
- info->allow_indent = indent;
+ info->allow_indent = indent || squiggly;
+ info->remove_indent = squiggly;
+ info->indent = ~0U;
+ info->indented = NULL;
info->line_head = TRUE;
info->doc = NULL;
p->heredocs_from_nextline = push(p->heredocs_from_nextline, newnode);
@@ -11087,7 +11216,7 @@ parser_yylex(parser_state *p)
case '*':
if ((c = nextc(p)) == '*') {
if ((c = nextc(p)) == '=') {
- pylval.id = MRB_OPSYM(pow);
+ pylval.id = intern_op(pow);
p->lstate = EXPR_BEG;
return tOP_ASGN;
}
@@ -11105,7 +11234,7 @@ parser_yylex(parser_state *p)
}
else {
if (c == '=') {
- pylval.id = MRB_OPSYM(mul);
+ pylval.id = intern_op(mul);
p->lstate = EXPR_BEG;
return tOP_ASGN;
}
@@ -11221,7 +11350,7 @@ parser_yylex(parser_state *p)
}
if (c == '<') {
if ((c = nextc(p)) == '=') {
- pylval.id = MRB_OPSYM(lshift);
+ pylval.id = intern_op(lshift);
p->lstate = EXPR_BEG;
return tOP_ASGN;
}
@@ -11243,7 +11372,7 @@ parser_yylex(parser_state *p)
}
if (c == '>') {
if ((c = nextc(p)) == '=') {
- pylval.id = MRB_OPSYM(rshift);
+ pylval.id = intern_op(rshift);
p->lstate = EXPR_BEG;
return tOP_ASGN;
}
@@ -11351,7 +11480,7 @@ parser_yylex(parser_state *p)
if ((c = nextc(p)) == '&') {
p->lstate = EXPR_BEG;
if ((c = nextc(p)) == '=') {
- pylval.id = MRB_OPSYM(andand);
+ pylval.id = intern_op(andand);
p->lstate = EXPR_BEG;
return tOP_ASGN;
}
@@ -11363,7 +11492,7 @@ parser_yylex(parser_state *p)
return tANDDOT;
}
else if (c == '=') {
- pylval.id = MRB_OPSYM(and);
+ pylval.id = intern_op(and);
p->lstate = EXPR_BEG;
return tOP_ASGN;
}
@@ -11390,7 +11519,7 @@ parser_yylex(parser_state *p)
if ((c = nextc(p)) == '|') {
p->lstate = EXPR_BEG;
if ((c = nextc(p)) == '=') {
- pylval.id = MRB_OPSYM(oror);
+ pylval.id = intern_op(oror);
p->lstate = EXPR_BEG;
return tOP_ASGN;
}
@@ -11398,7 +11527,7 @@ parser_yylex(parser_state *p)
return tOROP;
}
if (c == '=') {
- pylval.id = MRB_OPSYM(or);
+ pylval.id = intern_op(or);
p->lstate = EXPR_BEG;
return tOP_ASGN;
}
@@ -11422,7 +11551,7 @@ parser_yylex(parser_state *p)
return '+';
}
if (c == '=') {
- pylval.id = MRB_OPSYM(add);
+ pylval.id = intern_op(add);
p->lstate = EXPR_BEG;
return tOP_ASGN;
}
@@ -11450,7 +11579,7 @@ parser_yylex(parser_state *p)
return '-';
}
if (c == '=') {
- pylval.id = MRB_OPSYM(sub);
+ pylval.id = intern_op(sub);
p->lstate = EXPR_BEG;
return tOP_ASGN;
}
@@ -11773,7 +11902,7 @@ parser_yylex(parser_state *p)
return tREGEXP_BEG;
}
if ((c = nextc(p)) == '=') {
- pylval.id = MRB_OPSYM(div);
+ pylval.id = intern_op(div);
p->lstate = EXPR_BEG;
return tOP_ASGN;
}
@@ -11792,7 +11921,7 @@ parser_yylex(parser_state *p)
case '^':
if ((c = nextc(p)) == '=') {
- pylval.id = MRB_OPSYM(xor);
+ pylval.id = intern_op(xor);
p->lstate = EXPR_BEG;
return tOP_ASGN;
}
@@ -11845,6 +11974,7 @@ parser_yylex(parser_state *p)
p->paren_nest++;
if (p->lstate == EXPR_FNAME || p->lstate == EXPR_DOT) {
p->lstate = EXPR_ARG;
+ p->paren_nest--;
if ((c = nextc(p)) == ']') {
if ((c = nextc(p)) == '=') {
return tASET;
@@ -11969,7 +12099,7 @@ parser_yylex(parser_state *p)
}
}
if ((c = nextc(p)) == '=') {
- pylval.id = MRB_OPSYM(mod);
+ pylval.id = intern_op(mod);
p->lstate = EXPR_BEG;
return tOP_ASGN;
}
@@ -13169,7 +13299,7 @@ mrb_parser_dump(mrb_state *mrb, node *tree, int offset)
if (n2->car) {
dump_prefix(n2, offset+2);
printf("rest:\n");
- if (n2->car == (node*)-1) {
+ if (n2->car == nint(-1)) {
dump_prefix(n2, offset+2);
printf("(empty)\n");
}
@@ -13411,11 +13541,11 @@ mrb_parser_dump(mrb_state *mrb, node *tree, int offset)
case NODE_CLASS:
printf("NODE_CLASS:\n");
- if (tree->car->car == (node*)0) {
+ if (tree->car->car == nint(0)) {
dump_prefix(tree, offset+1);
printf(":%s\n", mrb_sym_name(mrb, sym(tree->car->cdr)));
}
- else if (tree->car->car == (node*)1) {
+ else if (tree->car->car == nint(1)) {
dump_prefix(tree, offset+1);
printf("::%s\n", mrb_sym_name(mrb, sym(tree->car->cdr)));
}
@@ -13436,11 +13566,11 @@ mrb_parser_dump(mrb_state *mrb, node *tree, int offset)
case NODE_MODULE:
printf("NODE_MODULE:\n");
- if (tree->car->car == (node*)0) {
+ if (tree->car->car == nint(0)) {
dump_prefix(tree, offset+1);
printf(":%s\n", mrb_sym_name(mrb, sym(tree->car->cdr)));
}
- else if (tree->car->car == (node*)1) {
+ else if (tree->car->car == nint(1)) {
dump_prefix(tree, offset+1);
printf("::%s\n", mrb_sym_name(mrb, sym(tree->car->cdr)));
}
diff --git a/mrbgems/mruby-compiler/mrbgem.rake b/mrbgems/mruby-compiler/mrbgem.rake
index 70f9e19d8..da910537a 100644
--- a/mrbgems/mruby-compiler/mrbgem.rake
+++ b/mrbgems/mruby-compiler/mrbgem.rake
@@ -5,13 +5,13 @@ MRuby::Gem::Specification.new 'mruby-compiler' do |spec|
as_cxx_srcs = %w[codegen y.tab].map{|name| "#{dir}/core/#{name}.c"}
objs = Dir.glob("#{dir}/core/*.c").map do |src|
- dst = src.pathmap("#{build_dir}/core/%n")
if build.cxx_exception_enabled? && as_cxx_srcs.include?(src)
- build.compile_as_cxx(src, "#{dst}.cxx")
+ build.compile_as_cxx(src)
else
- objfile(dst)
+ objfile(src.pathmap("#{build_dir}/core/%n"))
end
end
+ objs << objfile("#{build_dir}/core/y.tab")
build.libmruby_core_objs << objs
lex_def = "#{dir}/core/lex.def"
diff --git a/mrbgems/mruby-error/mrbgem.rake b/mrbgems/mruby-error/mrbgem.rake
index 30a4259a8..ff7334744 100644
--- a/mrbgems/mruby-error/mrbgem.rake
+++ b/mrbgems/mruby-error/mrbgem.rake
@@ -4,7 +4,7 @@ MRuby::Gem::Specification.new('mruby-error') do |spec|
spec.summary = 'extensional error handling'
if build.cxx_exception_enabled?
- @objs << build.compile_as_cxx("#{spec.dir}/src/exception.c", "#{spec.build_dir}/src/exception.cxx")
- @objs.delete_if { |v| v == objfile("#{spec.build_dir}/src/exception") }
+ objs << build.compile_as_cxx("#{spec.dir}/src/exception.c")
+ objs.delete_if { |v| v == objfile("#{spec.build_dir}/src/exception") }
end
end
diff --git a/mrbgems/mruby-eval/src/eval.c b/mrbgems/mruby-eval/src/eval.c
index d9df8678f..c7a511fe4 100644
--- a/mrbgems/mruby-eval/src/eval.c
+++ b/mrbgems/mruby-eval/src/eval.c
@@ -39,7 +39,7 @@ create_proc_from_string(mrb_state *mrb, const char *s, mrb_int len, mrb_value bi
/* only occur when memory ran out */
if (!p) {
- mrb_raise(mrb, E_RUNTIME_ERROR, "Failed to create parser state.");
+ mrb_raise(mrb, E_RUNTIME_ERROR, "Failed to create parser state (out of memory)");
}
if (0 < p->nerr) {
diff --git a/mrbgems/mruby-fiber/src/fiber.c b/mrbgems/mruby-fiber/src/fiber.c
index 41fda9eed..5567ed6cf 100644
--- a/mrbgems/mruby-fiber/src/fiber.c
+++ b/mrbgems/mruby-fiber/src/fiber.c
@@ -219,8 +219,11 @@ fiber_switch(mrb_state *mrb, mrb_value self, mrb_int len, const mrb_value *a, mr
while (b<e) {
*b++ = *a++;
}
+ if (vmexec) {
+ c->ci--; /* pop dummy callinfo */
+ }
c->cibase->argc = (int)len;
- value = c->stack[0] = MRB_PROC_ENV(c->ci->proc)->stack[0];
+ value = c->stack[0] = MRB_PROC_ENV(c->cibase->proc)->stack[0];
}
else {
value = fiber_result(mrb, a, len);
@@ -228,7 +231,7 @@ fiber_switch(mrb_state *mrb, mrb_value self, mrb_int len, const mrb_value *a, mr
if (vmexec) {
c->vmexec = TRUE;
- value = mrb_vm_exec(mrb, c->ci[-1].proc, c->ci->pc);
+ value = mrb_vm_exec(mrb, c->ci->proc, c->ci->pc);
mrb->c = old_c;
}
else {
@@ -354,6 +357,7 @@ mrb_fiber_yield(mrb_state *mrb, mrb_int len, const mrb_value *a)
if (c->vmexec) {
c->vmexec = FALSE;
mrb->c->ci->acc = CI_ACC_RESUMED;
+ c->ci--; /* pop callinfo for yield */
}
MARK_CONTEXT_MODIFY(mrb->c);
return fiber_result(mrb, a, len);
diff --git a/mrbgems/mruby-hash-ext/src/hash-ext.c b/mrbgems/mruby-hash-ext/src/hash-ext.c
index 16e066c73..6345420ed 100644
--- a/mrbgems/mruby-hash-ext/src/hash-ext.c
+++ b/mrbgems/mruby-hash-ext/src/hash-ext.c
@@ -69,6 +69,31 @@ hash_slice(mrb_state *mrb, mrb_value hash)
return result;
}
+/*
+ * call-seq:
+ * hsh.except(*keys) -> a_hash
+ *
+ * Returns a hash excluding the given keys and their values.
+ *
+ * h = { a: 100, b: 200, c: 300 }
+ * h.except(:a) #=> {:b=>200, :c=>300}
+ * h.except(:b, :c, :d) #=> {:a=>100}
+ */
+static mrb_value
+hash_except(mrb_state *mrb, mrb_value hash)
+{
+ const mrb_value *argv;
+ mrb_value result;
+ mrb_int argc, i;
+
+ mrb_get_args(mrb, "*", &argv, &argc);
+ result = mrb_hash_dup(mrb, hash);
+ for (i = 0; i < argc; i++) {
+ mrb_hash_delete_key(mrb, result, argv[i]);
+ }
+ return result;
+}
+
void
mrb_mruby_hash_ext_gem_init(mrb_state *mrb)
{
@@ -77,6 +102,7 @@ mrb_mruby_hash_ext_gem_init(mrb_state *mrb)
h = mrb->hash_class;
mrb_define_method(mrb, h, "values_at", hash_values_at, MRB_ARGS_ANY());
mrb_define_method(mrb, h, "slice", hash_slice, MRB_ARGS_ANY());
+ mrb_define_method(mrb, h, "except", hash_except, MRB_ARGS_ANY());
}
void
diff --git a/mrbgems/mruby-hash-ext/test/hash.rb b/mrbgems/mruby-hash-ext/test/hash.rb
index fdf4c57a8..78e8b3a3a 100644
--- a/mrbgems/mruby-hash-ext/test/hash.rb
+++ b/mrbgems/mruby-hash-ext/test/hash.rb
@@ -288,3 +288,10 @@ assert("Hash#slice") do
assert_equal({:a=>100}, h.slice(:a))
assert_equal({:b=>200, :c=>300}, h.slice(:b, :c, :d))
end
+
+assert("Hash#except") do
+ h = { a: 100, b: 200, c: 300 }
+ assert_equal({:b=>200, :c=>300}, h.except(:a))
+ assert_equal({:a=>100}, h.except(:b, :c, :d))
+ assert_equal(h, h.except)
+end
diff --git a/mrbgems/mruby-rational/src/rational.c b/mrbgems/mruby-rational/src/rational.c
index 6d94cb21f..deb48ef8a 100644
--- a/mrbgems/mruby-rational/src/rational.c
+++ b/mrbgems/mruby-rational/src/rational.c
@@ -102,9 +102,14 @@ rational_new(mrb_state *mrb, mrb_int numerator, mrb_int denominator)
*/
#ifdef MRB_INT32
typedef float rat_float;
+typedef int32_t rat_int;
#else
typedef double rat_float;
+typedef int64_t rat_int;
#endif
+
+void mrb_check_num_exact(mrb_state *mrb, mrb_float num);
+
static mrb_value
rational_new_f(mrb_state *mrb, mrb_float f0)
{
@@ -113,9 +118,10 @@ rational_new_f(mrb_state *mrb, mrb_float f0)
/* a: continued fraction coefficients. */
mrb_int a, h[3] = { 0, 1, 0 }, k[3] = { 1, 0, 0 };
mrb_int x, d;
- int64_t n = 1;
+ rat_int n = 1;
int i, neg = 0;
+ mrb_check_num_exact(mrb, f0);
if (f < 0) { neg = 1; f = -f; }
while (f != floor(f)) { n <<= 1; f *= 2; }
if (!TYPED_FIXABLE(f, rat_float)) {
@@ -192,7 +198,14 @@ static mrb_value
rational_to_f(mrb_state *mrb, mrb_value self)
{
struct mrb_rational *p = rational_ptr(mrb, self);
- mrb_float f = (mrb_float)p->numerator / (mrb_float)p->denominator;
+ mrb_float f;
+
+ if (p->denominator == 0.0) {
+ f = INFINITY;
+ }
+ else {
+ f = (mrb_float)p->numerator / (mrb_float)p->denominator;
+ }
return mrb_float_value(mrb, f);
}
diff --git a/mrbgems/mruby-sprintf/src/sprintf.c b/mrbgems/mruby-sprintf/src/sprintf.c
index 97e821c2f..411aec295 100644
--- a/mrbgems/mruby-sprintf/src/sprintf.c
+++ b/mrbgems/mruby-sprintf/src/sprintf.c
@@ -75,19 +75,35 @@ mrb_fix2binstr(mrb_state *mrb, mrb_value x, int base)
{
char buf[66], *b = buf + sizeof buf;
mrb_int num = mrb_integer(x);
+ const int mask = base -1;
+ int shift;
+#ifdef MRB_INT64
uint64_t val = (uint64_t)num;
+#else
+ uint32_t val = (uint32_t)num;
+#endif
char d;
- if (base != 2) {
+ switch (base) {
+ case 2:
+ shift = 1;
+ break;
+ case 8:
+ shift = 3;
+ break;
+ case 16:
+ shift = 4;
+ break;
+ default:
mrb_raisef(mrb, E_ARGUMENT_ERROR, "invalid radix %d", base);
}
- if (val == 0) {
+ if (num == 0) {
return mrb_str_new_lit(mrb, "0");
}
*--b = '\0';
do {
- *--b = mrb_digitmap[(int)(val % base)];
- } while (val /= base);
+ *--b = mrb_digitmap[(int)(val & mask)];
+ } while (val >>= shift);
if (num < 0) {
b = remove_sign_bits(b, base);
@@ -944,21 +960,6 @@ retry:
val = mrb_fixnum_to_str(mrb, mrb_int_value(mrb, v), base);
}
strncpy(++s, RSTRING_PTR(val), sizeof(nbuf)-2);
- if (v < 0) {
- char d;
-
- s = remove_sign_bits(s, base);
- switch (base) {
- case 16: d = 'f'; break;
- case 8: d = '7'; break;
- case 2: d = '1'; break;
- default: d = 0; break;
- }
-
- if (d && *s != d) {
- *--s = d;
- }
- }
}
{
size_t size;
diff --git a/src/class.c b/src/class.c
index 92b58c3ff..85a26d343 100644
--- a/src/class.c
+++ b/src/class.c
@@ -840,7 +840,7 @@ mrb_get_arg1(mrb_state *mrb)
array_argv = ARY_PTR(a);
}
if (argc != 1) {
- mrb_raise(mrb, E_ARGUMENT_ERROR, "wrong number of arguments");
+ mrb_argnum_error(mrb, argc, 1, 1);
}
return array_argv[0];
}
@@ -894,7 +894,7 @@ mrb_get_args(mrb_state *mrb, const char *format, ...)
mrb_bool given = TRUE;
mrb_value kdict;
mrb_bool reqkarg = FALSE;
- mrb_int needargc = 0;
+ int argc_min = 0, argc_max = 0;
if (!argv_on_stack) {
struct RArray *a = mrb_ary_ptr(*array_argv);
@@ -912,6 +912,7 @@ mrb_get_args(mrb_state *mrb, const char *format, ...)
break;
case '*':
opt_skip = FALSE;
+ argc_max = -1;
if (!reqkarg) reqkarg = strchr(fmt, ':') ? TRUE : FALSE;
goto check_exit;
case '!':
@@ -923,13 +924,14 @@ mrb_get_args(mrb_state *mrb, const char *format, ...)
if (opt) opt_skip = FALSE;
break;
default:
- if (!opt) needargc ++;
+ if (!opt) argc_min++;
+ argc_max++;
break;
}
}
check_exit:
- if (reqkarg && argc > needargc && mrb_hash_p(kdict = ARGV[argc - 1])) {
+ if (reqkarg && argc > argc_min && mrb_hash_p(kdict = ARGV[argc - 1])) {
mrb_hash_check_kdict(mrb, kdict);
argc --;
}
@@ -952,7 +954,7 @@ mrb_get_args(mrb_state *mrb, const char *format, ...)
given = FALSE;
}
else {
- mrb_raise(mrb, E_ARGUMENT_ERROR, "wrong number of arguments");
+ mrb_argnum_error(mrb, argc, argc_min, argc_max);
}
}
break;
@@ -1315,7 +1317,7 @@ mrb_get_args(mrb_state *mrb, const char *format, ...)
#undef ARGV
if (!c && argc > i) {
- mrb_raise(mrb, E_ARGUMENT_ERROR, "wrong number of arguments");
+ mrb_argnum_error(mrb, argc, argc_min, argc_max);
}
finish:
@@ -2232,7 +2234,6 @@ mrb_define_alias_id(mrb_state *mrb, struct RClass *klass, mrb_sym a, mrb_sym b)
mrb_value
mrb_mod_to_s(mrb_state *mrb, mrb_value klass)
{
-
if (mrb_sclass_p(klass)) {
mrb_value v = mrb_iv_get(mrb, klass, MRB_SYM(__attached__));
mrb_value str = mrb_str_new_lit(mrb, "#<Class:");
@@ -2791,7 +2792,8 @@ static const mrb_code new_iseq[] = {
OP_RETURN, 0x0 /* OP_RETURN R0 */
};
-const mrb_sym new_syms[] = { MRB_SYM(allocate), MRB_SYM(initialize) };
+MRB_PRESYM_DEFINE_VAR_AND_INITER(new_syms, 2, MRB_SYM(allocate), MRB_SYM(initialize))
+
static const mrb_irep new_irep = {
3, 6, 0, MRB_IREP_STATIC,
new_iseq, NULL, new_syms, NULL, NULL, NULL,
@@ -2804,6 +2806,7 @@ init_class_new(mrb_state *mrb, struct RClass *cls)
struct RProc *p;
mrb_method_t m;
+ init_new_syms(mrb);
p = mrb_proc_new(mrb, &new_irep);
MRB_METHOD_FROM_PROC(m, p);
mrb_define_method_raw(mrb, cls, MRB_SYM(new), m);
diff --git a/src/codedump.c b/src/codedump.c
index 576ff6ceb..e6c6e6c3d 100644
--- a/src/codedump.c
+++ b/src/codedump.c
@@ -172,7 +172,7 @@ codedump(mrb_state *mrb, const mrb_irep *irep)
print_lv_a(mrb, irep, a);
break;
CASE(OP_LOADI32, BSS);
- printf("OP_LOADI32\tR%d\t%d\t", a, (int)(((uint32_t)b<<16)+c));
+ printf("OP_LOADI32\tR%d\t%d\t", a, (int32_t)(((uint32_t)b<<16)+c));
print_lv_a(mrb, irep, a);
break;
CASE(OP_LOADI__1, B);
@@ -219,7 +219,7 @@ codedump(mrb_state *mrb, const mrb_irep *irep)
print_lv_a(mrb, irep, a);
break;
CASE(OP_SETGV, BB);
- printf("OP_SETGV\t;%s\tR%d", mrb_sym_dump(mrb, irep->syms[b]), a);
+ printf("OP_SETGV\t:%s\tR%d", mrb_sym_dump(mrb, irep->syms[b]), a);
print_lv_a(mrb, irep, a);
break;
CASE(OP_GETSV, BB);
diff --git a/src/debug.c b/src/debug.c
index c03c91cf5..2f9320ac9 100644
--- a/src/debug.c
+++ b/src/debug.c
@@ -66,7 +66,7 @@ mrb_debug_get_filename(mrb_state *mrb, const mrb_irep *irep, uint32_t pc)
MRB_API int32_t
mrb_debug_get_line(mrb_state *mrb, const mrb_irep *irep, uint32_t pc)
{
- if (irep && pc < irep->ilen) {
+ if (irep && pc >= 0 && pc < irep->ilen) {
mrb_irep_debug_info_file* f = NULL;
if (!irep->debug_info) {
return -1;
diff --git a/src/dump.c b/src/dump.c
index 40f149f5d..3464f08b9 100644
--- a/src/dump.c
+++ b/src/dump.c
@@ -10,7 +10,6 @@
#include <mruby/dump.h>
#include <mruby/string.h>
#include <mruby/irep.h>
-#include <mruby/numeric.h>
#include <mruby/debug.h>
#ifndef MRB_NO_FLOAT
@@ -24,6 +23,45 @@ static size_t get_irep_record_size_1(mrb_state *mrb, const mrb_irep *irep);
# error This code cannot be built on your environment.
#endif
+#define OPERATOR_SYMBOL(sym_name, name) {name, sym_name, sizeof(sym_name)-1}
+struct operator_symbol {
+ const char *name;
+ const char *sym_name;
+ uint16_t sym_name_len;
+};
+static const struct operator_symbol operator_table[] = {
+ OPERATOR_SYMBOL("!", "not"),
+ OPERATOR_SYMBOL("%", "mod"),
+ OPERATOR_SYMBOL("&", "and"),
+ OPERATOR_SYMBOL("*", "mul"),
+ OPERATOR_SYMBOL("+", "add"),
+ OPERATOR_SYMBOL("-", "sub"),
+ OPERATOR_SYMBOL("/", "div"),
+ OPERATOR_SYMBOL("<", "lt"),
+ OPERATOR_SYMBOL(">", "gt"),
+ OPERATOR_SYMBOL("^", "xor"),
+ OPERATOR_SYMBOL("`", "tick"),
+ OPERATOR_SYMBOL("|", "or"),
+ OPERATOR_SYMBOL("~", "neg"),
+ OPERATOR_SYMBOL("!=", "neq"),
+ OPERATOR_SYMBOL("!~", "nmatch"),
+ OPERATOR_SYMBOL("&&", "andand"),
+ OPERATOR_SYMBOL("**", "pow"),
+ OPERATOR_SYMBOL("+@", "plus"),
+ OPERATOR_SYMBOL("-@", "minus"),
+ OPERATOR_SYMBOL("<<", "lshift"),
+ OPERATOR_SYMBOL("<=", "le"),
+ OPERATOR_SYMBOL("==", "eq"),
+ OPERATOR_SYMBOL("=~", "match"),
+ OPERATOR_SYMBOL(">=", "ge"),
+ OPERATOR_SYMBOL(">>", "rshift"),
+ OPERATOR_SYMBOL("[]", "aref"),
+ OPERATOR_SYMBOL("||", "oror"),
+ OPERATOR_SYMBOL("<=>", "cmp"),
+ OPERATOR_SYMBOL("===", "eqq"),
+ OPERATOR_SYMBOL("[]=", "aset"),
+};
+
static size_t
get_irep_header_size(mrb_state *mrb)
{
@@ -888,6 +926,8 @@ mrb_dump_irep_cfunc(mrb_state *mrb, const mrb_irep *irep, uint8_t flags, FILE *f
return MRB_DUMP_WRITE_FAULT;
}
if (fprintf(fp,
+ "#include <mruby.h>\n"
+ "#include <mruby/proc.h>\n"
"#ifdef __cplusplus\n"
"extern const uint8_t %s[];\n"
"#endif\n"
@@ -960,26 +1000,132 @@ dump_pool(mrb_state *mrb, const mrb_pool_value *p, FILE *fp)
return MRB_DUMP_OK;
}
-mrb_bool mrb_sym_static_p(mrb_state *mrb, mrb_sym sym);
+static mrb_bool
+sym_name_word_p(const char *name, mrb_int len)
+{
+ if (len == 0) return FALSE;
+ if (name[0] != '_' && !ISALPHA(name[0])) return FALSE;
+ for (int i = 1; i < len; i++) {
+ if (name[i] != '_' && !ISALNUM(name[i])) return FALSE;
+ }
+ return TRUE;
+}
+
+static mrb_bool
+sym_name_with_equal_p(const char *name, mrb_int len)
+{
+ return len >= 2 && name[len-1] == '=' && sym_name_word_p(name, len-1);
+}
+
+static mrb_bool
+sym_name_with_question_mark_p(const char *name, mrb_int len)
+{
+ return len >= 2 && name[len-1] == '?' && sym_name_word_p(name, len-1);
+}
+
+static mrb_bool
+sym_name_with_bang_p(const char *name, mrb_int len)
+{
+ return len >= 2 && name[len-1] == '!' && sym_name_word_p(name, len-1);
+}
+
+static mrb_bool
+sym_name_ivar_p(const char *name, mrb_int len)
+{
+ return len >= 2 && name[0] == '@' && sym_name_word_p(name+1, len-1);
+}
+
+static mrb_bool
+sym_name_cvar_p(const char *name, mrb_int len)
+{
+ return len >= 3 && name[0] == '@' && sym_name_ivar_p(name+1, len-1);
+}
+
+const char *
+sym_operator_p(const char *name, mrb_int len)
+{
+ mrb_sym start, idx;
+ mrb_sym table_size = sizeof(operator_table)/sizeof(struct operator_symbol);
+ int cmp;
+ const struct operator_symbol *op_sym;
+ for (start = 0; table_size != 0; table_size/=2) {
+ idx = start+table_size/2;
+ op_sym = &operator_table[idx];
+ cmp = len-op_sym->sym_name_len;
+ if (cmp == 0) {
+ cmp = memcmp(name, op_sym->sym_name, len);
+ if (cmp == 0) return op_sym->name;
+ }
+ if (0 < cmp) {
+ start = ++idx;
+ --table_size;
+ }
+ }
+ return NULL;
+}
static int
-dump_sym(mrb_state *mrb, mrb_sym sym, FILE *fp)
+dump_sym(mrb_state *mrb, mrb_sym sym, const char *var_name, int idx, mrb_value init_syms_code, FILE *fp, mrb_bool *presymp)
{
- const char *name;
if (sym == 0) return MRB_DUMP_INVALID_ARGUMENT;
- name = mrb_sym_name(mrb, sym);
- if (!name) {
- fprintf(stderr, "undefined symbol (%d) - define presym\n", sym);
+
+ mrb_int len;
+ const char *name = mrb_sym_name_len(mrb, sym, &len), *op_name;
+ if (!name) return MRB_DUMP_INVALID_ARGUMENT;
+ if (presymp) *presymp = TRUE;
+ if (sym_name_word_p(name, len)) {
+ fprintf(fp, "MRB_SYM(%s)", name);
+ }
+ else if (sym_name_with_equal_p(name, len)) {
+ fprintf(fp, "MRB_SYM_E(%.*s)", (int)(len-1), name);
+ }
+ else if (sym_name_with_question_mark_p(name, len)) {
+ fprintf(fp, "MRB_SYM_Q(%.*s)", (int)(len-1), name);
+ }
+ else if (sym_name_with_bang_p(name, len)) {
+ fprintf(fp, "MRB_SYM_B(%.*s)", (int)(len-1), name);
}
- if (!mrb_sym_static_p(mrb, sym)) {
- fprintf(stderr, "no static symbol (%s) - define presym\n", name);
+ else if (sym_name_ivar_p(name, len)) {
+ fprintf(fp, "MRB_IVSYM(%s)", name+1);
}
- fprintf(fp, "%d /* %s */,", sym, name);
+ else if (sym_name_cvar_p(name, len)) {
+ fprintf(fp, "MRB_CVSYM(%s)", name+2);
+ }
+ else if ((op_name = sym_operator_p(name, len))) {
+ fprintf(fp, "MRB_OPSYM(%s)", op_name);
+ }
+ else {
+ mrb_assert(var_name);
+ char buf[32];
+ mrb_str_cat_lit(mrb, init_syms_code, " ");
+ mrb_str_cat_cstr(mrb, init_syms_code, var_name);
+ snprintf(buf, sizeof(buf), "[%d] = ", idx);
+ mrb_str_cat_cstr(mrb, init_syms_code, buf);
+ mrb_str_cat_lit(mrb, init_syms_code, "mrb_intern_lit(mrb, \"");
+ mrb_str_cat_cstr(mrb, init_syms_code, mrb_sym_dump(mrb, sym));
+ mrb_str_cat_lit(mrb, init_syms_code, "\");\n");
+ *presymp = FALSE;
+ fputs("0", fp);
+ }
+ fputs(", ", fp);
return MRB_DUMP_OK;
}
+static const char*
+sym_var_name(mrb_state *mrb, const char *initname, const char *key, int n)
+{
+ char buf[32];
+ mrb_value s = mrb_str_new_cstr(mrb, initname);
+ mrb_str_cat_lit(mrb, s, "_");
+ mrb_str_cat_cstr(mrb, s, key);
+ mrb_str_cat_lit(mrb, s, "_");
+ snprintf(buf, sizeof(buf), "%d", n);
+ mrb_str_cat_cstr(mrb, s, buf);
+ return RSTRING_PTR(s);
+}
+
static int
-dump_irep_struct(mrb_state *mrb, const mrb_irep *irep, uint8_t flags, FILE *fp, const char *name, int n, int *mp)
+dump_irep_struct(mrb_state *mrb, const mrb_irep *irep, uint8_t flags, FILE *fp, const char *name, int n, mrb_value init_syms_code, int *mp)
{
int i, len;
int max = *mp;
@@ -988,7 +1134,7 @@ dump_irep_struct(mrb_state *mrb, const mrb_irep *irep, uint8_t flags, FILE *fp,
if (irep->reps) {
for (i=0,len=irep->rlen; i<len; i++) {
*mp += len;
- if (dump_irep_struct(mrb, irep->reps[i], flags, fp, name, max+i, mp) != MRB_DUMP_OK)
+ if (dump_irep_struct(mrb, irep->reps[i], flags, fp, name, max+i, init_syms_code, mp) != MRB_DUMP_OK)
return MRB_DUMP_INVALID_ARGUMENT;
}
fprintf(fp, "static const mrb_irep *%s_reps_%d[%d] = {\n", name, n, len);
@@ -1009,12 +1155,19 @@ dump_irep_struct(mrb_state *mrb, const mrb_irep *irep, uint8_t flags, FILE *fp,
}
/* dump syms */
if (irep->syms) {
+ int ai = mrb_gc_arena_save(mrb);
+ const char *var_name = sym_var_name(mrb, name, "syms", n);
+ mrb_bool all_presym = TRUE, presym;
len=irep->slen;
- fprintf(fp, "static const mrb_sym %s_syms_%d[%d] = {", name, n, len);
+ fprintf(fp, "mrb_DEFINE_SYMS_VAR(%s, %d, (", var_name, len);
for (i=0; i<len; i++) {
- dump_sym(mrb, irep->syms[i], fp);
+ dump_sym(mrb, irep->syms[i], var_name, i, init_syms_code, fp, &presym);
+ all_presym &= presym;
}
- fputs("};\n", fp);
+ fputs("), ", fp);
+ if (all_presym) fputs("const", fp);
+ fputs(");\n", fp);
+ mrb_gc_arena_restore(mrb, ai);
}
/* dump iseq */
len=irep->ilen+sizeof(struct mrb_irep_catch_handler)*irep->clen;
@@ -1029,7 +1182,7 @@ dump_irep_struct(mrb_state *mrb, const mrb_irep *irep, uint8_t flags, FILE *fp,
len=irep->nlocals;
fprintf(fp, "static const mrb_sym %s_lv_%d[%d] = {", name, n, len-1);
for (i=0; i+1<len; i++) {
- fprintf(fp, "%uU, ", irep->lv[i]);
+ dump_sym(mrb, irep->lv[i], NULL, 0, mrb_nil_value(), fp, NULL);
}
fputs("};\n", fp);
}
@@ -1070,20 +1223,28 @@ dump_irep_struct(mrb_state *mrb, const mrb_irep *irep, uint8_t flags, FILE *fp,
int
mrb_dump_irep_cstruct(mrb_state *mrb, const mrb_irep *irep, uint8_t flags, FILE *fp, const char *initname)
{
- int max = 1;
- int n;
-
if (fp == NULL || initname == NULL || initname[0] == '\0') {
return MRB_DUMP_INVALID_ARGUMENT;
}
if (fprintf(fp, "#include <mruby.h>\n" "#include <mruby/proc.h>\n\n") < 0) {
return MRB_DUMP_WRITE_FAULT;
}
- n = dump_irep_struct(mrb, irep, flags, fp, initname, 0, &max);
+ fputs("#define mrb_BRACED(...) {__VA_ARGS__}\n", fp);
+ fputs("#define mrb_DEFINE_SYMS_VAR(name, len, syms, qualifier) \\\n", fp);
+ fputs(" static qualifier mrb_sym name[len] = mrb_BRACED syms\n", fp);
+ fputs("\n", fp);
+ mrb_value init_syms_code = mrb_str_new_capa(mrb, 0);
+ int max = 1;
+ int n = dump_irep_struct(mrb, irep, flags, fp, initname, 0, init_syms_code, &max);
if (n != MRB_DUMP_OK) return n;
fprintf(fp, "#ifdef __cplusplus\nextern const struct RProc %s[];\n#endif\n", initname);
fprintf(fp, "const struct RProc %s[] = {{\n", initname);
fprintf(fp, "NULL,NULL,MRB_TT_PROC,7,0,{&%s_irep_0},NULL,{NULL},\n}};\n", initname);
+ fputs("static void\n", fp);
+ fprintf(fp, "%s_init_syms(mrb_state *mrb)\n", initname);
+ fputs("{\n", fp);
+ fputs(RSTRING_PTR(init_syms_code), fp);
+ fputs("}\n", fp);
return MRB_DUMP_OK;
}
diff --git a/src/fmt_fp.c b/src/fmt_fp.c
index c46baabbc..448c20df8 100644
--- a/src/fmt_fp.c
+++ b/src/fmt_fp.c
@@ -443,7 +443,6 @@ mrb_float_to_cstr(mrb_state *mrb, char *buf, size_t len, const char *fmt, mrb_fl
return (int)(cstr.buf - buf);
}
#else /* MRB_NO_STDIO || _WIN32 || _WIN64 */
-#include <mruby.h>
#include <stdio.h>
MRB_API mrb_value
diff --git a/src/gc.c b/src/gc.c
index 85c22caad..eeabc3bf9 100644
--- a/src/gc.c
+++ b/src/gc.c
@@ -1614,11 +1614,6 @@ mrb_objspace_page_slot_size(void)
return sizeof(RVALUE);
}
-#ifdef GC_TEST
-#ifdef GC_DEBUG
-static mrb_value gc_test(mrb_state *, mrb_value);
-#endif
-#endif
void
mrb_init_gc(mrb_state *mrb)
@@ -1639,9 +1634,4 @@ mrb_init_gc(mrb_state *mrb)
mrb_define_class_method(mrb, gc, "step_ratio=", gc_step_ratio_set, MRB_ARGS_REQ(1));
mrb_define_class_method(mrb, gc, "generational_mode=", gc_generational_mode_set, MRB_ARGS_REQ(1));
mrb_define_class_method(mrb, gc, "generational_mode", gc_generational_mode_get, MRB_ARGS_NONE());
-#ifdef GC_TEST
-#ifdef GC_DEBUG
- mrb_define_class_method(mrb, gc, "test", gc_test, MRB_ARGS_NONE());
-#endif
-#endif
}
diff --git a/src/hash.c b/src/hash.c
index b800a251a..fe14865cf 100644
--- a/src/hash.c
+++ b/src/hash.c
@@ -251,7 +251,6 @@ HT_ASSERT_SAFE_READ(ea_capa);
} while (0)
#define U32(v) ((uint32_t)(v))
-#define U64(v) ((uint64_t)(v))
#define h_ar_p(h) (!h_ht_p(h))
#define h_ar_on(h) h_ht_off(h)
#define lesser(a, b) ((a) < (b) ? (a) : (b))
@@ -360,7 +359,13 @@ ea_next_capa_for(uint32_t size, uint32_t max_capa)
return AR_DEFAULT_CAPA;
}
else {
- uint64_t capa = U64(size) * EA_INCREASE_RATIO, inc = capa - size;
+ /*
+ * For 32-bit CPU, the theoretical value of max EA capa is
+ * `UINT32_MAX / sizeof (hash_entry)`. At this time, if
+ * `EA_INCREASE_RATIO` is the current value, 32-bit range will not be
+ * exceeded during the calculation of `capa`, so `size_t` is used.
+ */
+ size_t capa = size * EA_INCREASE_RATIO, inc = capa - size;
if (EA_MAX_INCREASE < inc) capa = size + EA_MAX_INCREASE;
return capa <= max_capa ? U32(capa) : max_capa;
}
@@ -621,10 +626,13 @@ ib_it_next(index_buckets_iter *it)
* \ `-- bit_pos(34)
* `-- bit(5)
*/
- uint64_t bit_pos;
- bit_pos = U64(it->bit) * (it->pos + 1) - 1;
- it->ary_index = U32(bit_pos / IB_TYPE_BIT);
- it->shift2 = U32((U64(it->ary_index) + 1) * IB_TYPE_BIT - bit_pos - 1);
+
+ /* Slide to handle as `capa == 32` to avoid 64-bit operations */
+ uint32_t slid_pos = it->pos & (IB_TYPE_BIT - 1);
+ uint32_t slid_bit_pos = it->bit * (slid_pos + 1) - 1;
+ uint32_t slid_ary_index = slid_bit_pos / IB_TYPE_BIT;
+ it->ary_index = slid_ary_index + it->pos / IB_TYPE_BIT * it->bit;
+ it->shift2 = (slid_ary_index + 1) * IB_TYPE_BIT - slid_bit_pos - 1;
it->ea_index = (ht_ib(it->h)[it->ary_index] >> it->shift2) & it->mask;
if (IB_TYPE_BIT - it->bit < it->shift2) {
it->shift1 = IB_TYPE_BIT - it->shift2;
@@ -707,7 +715,9 @@ ib_bit_for(uint32_t size)
static uint32_t
ib_byte_size_for(uint32_t ib_bit)
{
- uint64_t ary_size = (U64(1) << ib_bit) * ib_bit / IB_TYPE_BIT;
+ uint32_t ary_size = IB_INIT_BIT == 4 ?
+ ib_bit_to_capa(ib_bit) * 2 / IB_TYPE_BIT * ib_bit / 2 :
+ ib_bit_to_capa(ib_bit) / IB_TYPE_BIT * ib_bit;
return U32(sizeof(uint32_t) * ary_size);
}
diff --git a/src/numeric.c b/src/numeric.c
index 2eb5e0ff1..117f447e5 100644
--- a/src/numeric.c
+++ b/src/numeric.c
@@ -484,7 +484,12 @@ value_int64(mrb_state *mrb, mrb_value x)
case MRB_TT_INTEGER:
return (int64_t)mrb_integer(x);
case MRB_TT_FLOAT:
- return (int64_t)mrb_float(x);
+ {
+ double f = mrb_float(x);
+
+ if ((mrb_float)INT64_MAX >= f && f >= (mrb_float)INT64_MIN)
+ return (int64_t)f;
+ }
default:
mrb_raise(mrb, E_TYPE_ERROR, "cannot convert to Integer");
break;
@@ -496,17 +501,16 @@ value_int64(mrb_state *mrb, mrb_value x)
static mrb_value
int64_value(mrb_state *mrb, int64_t v)
{
- if (TYPED_FIXABLE(v,int64_t)) {
- return mrb_fixnum_value((mrb_int)v);
+ if (!TYPED_FIXABLE(v,int64_t)) {
+ int_overflow(mrb, "bit operation");
}
- return mrb_float_value(mrb, (mrb_float)v);
+ return mrb_fixnum_value((mrb_int)v);
}
static mrb_value
flo_rev(mrb_state *mrb, mrb_value x)
{
- int64_t v1;
- v1 = (int64_t)mrb_float(x);
+ int64_t v1 = value_int64(mrb, x);
return int64_value(mrb, ~v1);
}
@@ -516,7 +520,7 @@ flo_and(mrb_state *mrb, mrb_value x)
mrb_value y = mrb_get_arg1(mrb);
int64_t v1, v2;
- v1 = (int64_t)mrb_float(x);
+ v1 = value_int64(mrb, x);
v2 = value_int64(mrb, y);
return int64_value(mrb, v1 & v2);
}
@@ -527,7 +531,7 @@ flo_or(mrb_state *mrb, mrb_value x)
mrb_value y = mrb_get_arg1(mrb);
int64_t v1, v2;
- v1 = (int64_t)mrb_float(x);
+ v1 = value_int64(mrb, x);
v2 = value_int64(mrb, y);
return int64_value(mrb, v1 | v2);
}
@@ -538,7 +542,7 @@ flo_xor(mrb_state *mrb, mrb_value x)
mrb_value y = mrb_get_arg1(mrb);
int64_t v1, v2;
- v1 = (int64_t)mrb_float(x);
+ v1 = value_int64(mrb, x);
v2 = value_int64(mrb, y);
return int64_value(mrb, v1 ^ v2);
}
diff --git a/src/string.c b/src/string.c
index 4d09c7eab..946dc8be1 100644
--- a/src/string.c
+++ b/src/string.c
@@ -1752,13 +1752,17 @@ mrb_str_hash(mrb_state *mrb, mrb_value str)
struct RString *s = mrb_str_ptr(str);
mrb_int len = RSTR_LEN(s);
char *p = RSTR_PTR(s);
- uint64_t key = 0;
+ uint32_t hash = 0;
- while (len--) {
- key = key*65599 + *p;
- p++;
+ for(int i = 0; i < len; ++i) {
+ hash += p[i];
+ hash += (hash << 10);
+ hash ^= (hash >> 6);
}
- return (uint32_t)(key + (key>>5));
+ hash += (hash << 3);
+ hash ^= (hash >> 11);
+ hash += (hash << 15);
+ return hash;
}
/* 15.2.10.5.20 */
@@ -2216,7 +2220,7 @@ mrb_str_len_to_inum(mrb_state *mrb, const char *str, size_t len, mrb_int base, i
const char *pend = str + len;
char sign = 1;
int c;
- uint64_t n = 0;
+ mrb_int n = 0;
mrb_int val;
#define conv_digit(c) \
@@ -2343,19 +2347,17 @@ mrb_str_len_to_inum(mrb_state *mrb, const char *str, size_t len, mrb_int base, i
if (c < 0 || c >= base) {
break;
}
- n *= base;
- n += c;
- if (n > (uint64_t)MRB_INT_MAX + (sign ? 0 : 1)) {
-#ifndef MRB_NO_FLOAT
- if (base == 10) {
- return mrb_float_value(mrb, mrb_str_to_dbl(mrb, mrb_str_new(mrb, str, len), badcheck));
- }
- else
-#endif
- {
- mrb_raisef(mrb, E_RANGE_ERROR, "string (%l) too big for integer", str, pend-str);
+ if (mrb_int_mul_overflow(n, base, &n)) goto overflow;
+ if (MRB_INT_MAX - c < n) {
+ if (sign == 0 && MRB_INT_MAX - n == c - 1) {
+ n = MRB_INT_MIN;
+ sign = 1;
+ break;
}
+ overflow:
+ mrb_raisef(mrb, E_RANGE_ERROR, "string (%l) too big for integer", str, pend-str);
}
+ n += c;
}
val = (mrb_int)n;
if (badcheck) {
diff --git a/src/symbol.c b/src/symbol.c
index c78f41f63..58decc1f1 100644
--- a/src/symbol.c
+++ b/src/symbol.c
@@ -12,15 +12,19 @@
#include <mruby/dump.h>
#include <mruby/class.h>
-#undef MRB_PRESYM_MAX
-#define MRB_PRESYM_NAMED(lit, num, type, name) {lit, sizeof(lit)-1},
-#define MRB_PRESYM_UNNAMED(lit, num) {lit, sizeof(lit)-1},
+#ifndef MRB_NO_PRESYM
+
+# undef MRB_PRESYM_MAX
+# define MRB_PRESYM_NAMED(lit, num, type, name) {lit, sizeof(lit)-1},
+# define MRB_PRESYM_UNNAMED(lit, num) {lit, sizeof(lit)-1},
static const struct {
const char *name;
uint16_t len;
} presym_table[] = {
-#include <../build/presym.inc>
+#ifndef MRB_PRESYM_SCANNING
+# include <mruby/presym.inc>
+#endif
};
static mrb_sym
@@ -51,6 +55,8 @@ presym_sym2name(mrb_sym sym, mrb_int *lenp)
return presym_table[sym-1].name;
}
+#endif /* MRB_NO_PRESYM */
+
/* ------------------------------------------------------ */
typedef struct symbol_name {
mrb_bool lit : 1;
@@ -147,9 +153,11 @@ find_symbol(mrb_state *mrb, const char *name, size_t len, uint8_t *hashp)
symbol_name *sname;
uint8_t hash;
+#ifndef MRB_NO_PRESYM
/* presym */
i = presym_find(name, len);
if (i > 0) return i<<SYMBOL_SHIFT;
+#endif
/* inline symbol */
i = sym_inline_pack(name, len);
@@ -306,10 +314,12 @@ sym2name_len(mrb_state *mrb, mrb_sym sym, char *buf, mrb_int *lenp)
if (SYMBOL_INLINE_P(sym)) return sym_inline_unpack(sym, buf, lenp);
sym >>= SYMBOL_SHIFT;
+#ifndef MRB_NO_PRESYM
{
const char *name = presym_sym2name(sym, lenp);
if (name) return name;
}
+#endif
sym -= MRB_PRESYM_MAX;
if (sym == 0 || mrb->symidx < sym) {
diff --git a/src/vm.c b/src/vm.c
index 76bd541c3..57b38ee39 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -1134,7 +1134,7 @@ RETRY_TRY_BLOCK:
}
CASE(OP_LOADI32, BSS) {
- SET_INT_VALUE(mrb, regs[a], (mrb_int)(((uint32_t)b<<16)+c));
+ SET_INT_VALUE(mrb, regs[a], (int32_t)(((uint32_t)b<<16)+c));
NEXT;
}
@@ -2074,7 +2074,7 @@ RETRY_TRY_BLOCK:
regs[irep->nlocals] = v;
goto CHECKPOINT_LABEL_MAKE(RBREAK_TAG_STOP);
}
- if (c->prev->ci == c->prev->cibase) {
+ if (!c->vmexec && c->prev->ci == c->prev->cibase) {
mrb_value exc = mrb_exc_new_lit(mrb, E_FIBER_ERROR, "double resume");
mrb_exc_set(mrb, exc);
goto L_RAISE;
@@ -2089,8 +2089,14 @@ RETRY_TRY_BLOCK:
/* automatic yield at the end */
c->status = MRB_FIBER_TERMINATED;
mrb->c = c->prev;
- c->prev = NULL;
mrb->c->status = MRB_FIBER_RUNNING;
+ c->prev = NULL;
+ if (c->vmexec) {
+ mrb_gc_arena_restore(mrb, ai);
+ c->vmexec = FALSE;
+ mrb->jmp = prev_jmp;
+ return v;
+ }
ci = mrb->c->ci;
}
CHECKPOINT_RESTORE(RBREAK_TAG_RETURN) {
diff --git a/tasks/benchmark.rake b/tasks/benchmark.rake
index 6f0b0ef6a..12e0d4602 100644
--- a/tasks/benchmark.rake
+++ b/tasks/benchmark.rake
@@ -50,7 +50,7 @@ end
MRuby.each_target do |target|
- next if target.name == 'host'
+ next if target.name == 'host' || target.internal?
mruby_bin = "#{target.build_dir}/bin/mruby"
bm_files.each do |bm_file|
diff --git a/tasks/bin.rake b/tasks/bin.rake
new file mode 100644
index 000000000..afef065a1
--- /dev/null
+++ b/tasks/bin.rake
@@ -0,0 +1,35 @@
+install_task = ->(src) do
+ dst = "#{MRuby::Build.install_dir}/#{File.basename(src)}"
+ file dst => src do
+ install_D src, dst
+ end
+ dst
+end
+
+MRuby.each_target do |build|
+ if build.host? && build.mrbc_build && !build.gems["mruby-bin-mrbc"]
+ exe = build.exefile("#{build.mrbc_build.build_dir}/bin/mrbc")
+ build.products << install_task.(exe)
+ end
+
+ build.bins.each do |bin|
+ exe = build.exefile("#{build.build_dir}/bin/#{bin}")
+ build.products << (build.host? ? install_task.(exe) : exe)
+ end
+
+ linker_attrs = build.gems.map{|gem| gem.linker.run_attrs}.transpose
+ build.gems.each do |gem|
+ gem.bins.each do |bin|
+ exe = build.exefile("#{build.build_dir}/bin/#{bin}")
+ objs = Dir["#{gem.dir}/tools/#{bin}/*.{c,cpp,cxx,cc}"].map do |f|
+ build.objfile(f.pathmap("#{gem.build_dir}/tools/#{bin}/%n"))
+ end
+
+ file exe => objs.concat(build.libraries) do |t|
+ build.linker.run t.name, t.prerequisites, *linker_attrs
+ end
+
+ build.products << (build.host? ? install_task.(exe) : exe)
+ end
+ end
+end
diff --git a/tasks/core.rake b/tasks/core.rake
index aca5faed8..a47722e8b 100644
--- a/tasks/core.rake
+++ b/tasks/core.rake
@@ -2,11 +2,10 @@ as_cxx_srcs = %w[vm error gc].map{|name| "#{MRUBY_ROOT}/src/#{name}.c"}
MRuby.each_target do
objs = Dir.glob("#{MRUBY_ROOT}/src/*.c").map do |src|
- dst = src.pathmap("#{build_dir}/src/%n")
if cxx_exception_enabled? && as_cxx_srcs.include?(src)
- compile_as_cxx(src, "#{dst}.cxx")
+ compile_as_cxx(src)
else
- objfile(dst)
+ objfile(src.pathmap("#{build_dir}/src/%n"))
end
end
self.libmruby_core_objs << objs
diff --git a/tasks/libmruby.rake b/tasks/libmruby.rake
index c73b25d3b..23cd992ff 100644
--- a/tasks/libmruby.rake
+++ b/tasks/libmruby.rake
@@ -3,6 +3,8 @@ MRuby.each_target do
archiver.run t.name, t.prerequisites
end
+ products << libmruby_core_static
+
next unless libmruby_enabled?
file libmruby_static => libmruby_objs.flatten do |t|
@@ -27,4 +29,6 @@ MRuby.each_target do
f.puts "MRUBY_LIBMRUBY_PATH = #{libmruby_static}"
end
end
+
+ products << libmruby_static
end
diff --git a/tasks/mrblib.rake b/tasks/mrblib.rake
index a7f592593..5567515d6 100644
--- a/tasks/mrblib.rake
+++ b/tasks/mrblib.rake
@@ -2,13 +2,18 @@ MRuby.each_target do
next unless libmruby_enabled?
src = "#{build_dir}/mrblib/mrblib.c"
- obj = objfile(src.ext)
rbfiles = Dir["#{MRUBY_ROOT}/mrblib/*.rb"].sort!
- self.libmruby_objs << obj
+ self.libmruby_objs << objfile(src.ext)
- file obj => src
file src => [mrbcfile, __FILE__, *rbfiles] do |t|
+ if presym_enabled?
+ cdump = true
+ suffix = "proc"
+ else
+ cdump = false
+ suffix = "irep"
+ end
mkdir_p File.dirname(t.name)
File.open(t.name, 'w') do |f|
_pp "GEN", "mrblib/*.rb", "#{t.name.relative_path}"
@@ -19,14 +24,17 @@ MRuby.each_target do
f.puts %Q[ * This file was generated!]
f.puts %Q[ * All manual changes will get lost.]
f.puts %Q[ */]
- mrbc.run f, rbfiles, 'mrblib_proc'
- f.puts <<INIT_END
-void
-mrb_init_mrblib(mrb_state *mrb)
-{
- mrb_load_proc(mrb, mrblib_proc);
-}
-INIT_END
+ unless presym_enabled?
+ f.puts %Q[#include <mruby.h>]
+ f.puts %Q[#include <mruby/irep.h>]
+ end
+ mrbc.run f, rbfiles, "mrblib_#{suffix}", cdump
+ f.puts %Q[void]
+ f.puts %Q[mrb_init_mrblib(mrb_state *mrb)]
+ f.puts %Q[{]
+ f.puts %Q[ mrblib_#{suffix}_init_syms(mrb);] if cdump
+ f.puts %Q[ mrb_load_#{suffix}(mrb, mrblib_#{suffix});]
+ f.puts %Q[}]
end
end
end
diff --git a/tasks/presym.rake b/tasks/presym.rake
new file mode 100644
index 000000000..f3a076ac6
--- /dev/null
+++ b/tasks/presym.rake
@@ -0,0 +1,41 @@
+all_prerequisites = ->(task_name, prereqs) do
+ Rake::Task[task_name].prerequisites.each do |prereq_name|
+ next if prereqs[prereq_name]
+ prereqs[prereq_name] = true
+ all_prerequisites.(Rake::Task[prereq_name].name, prereqs)
+ end
+end
+
+MRuby.each_target do |build|
+ gensym_task = task(:gensym)
+ next unless build.presym_enabled?
+
+ presym = build.presym
+
+ include_dir = "#{build.build_dir}/include"
+ build.compilers.each{|c| c.include_paths << include_dir}
+ build.gems.each{|gem| gem.compilers.each{|c| c.include_paths << include_dir}}
+
+ prereqs = {}
+ pps = []
+ mrbtest = "#{build.class.install_dir}/mrbtest"
+ mrbc_build_dir = "#{build.mrbc_build.build_dir}/" if build.mrbc_build
+ build.products.each do |product|
+ all_prerequisites.(product, prereqs) unless product == mrbtest
+ end
+ prereqs.each_key do |prereq|
+ next unless File.extname(prereq) == build.exts.object
+ next if mrbc_build_dir && prereq.start_with?(mrbc_build_dir)
+ pps << prereq.ext(build.exts.preprocessed)
+ end
+
+ file presym.list_path => pps do
+ presyms = presym.scan(pps)
+ current_presyms = presym.read_list if File.exist?(presym.list_path)
+ update = presyms != current_presyms
+ presym.write_list(presyms) if update
+ presym.write_header(presyms) if update || !File.exist?(presym.header_path)
+ end
+
+ gensym_task.enhance([presym.list_path])
+end
diff --git a/tasks/toolchains/gcc.rake b/tasks/toolchains/gcc.rake
index 316d2d9a1..8714e1854 100644
--- a/tasks/toolchains/gcc.rake
+++ b/tasks/toolchains/gcc.rake
@@ -3,6 +3,7 @@ MRuby::Toolchain.new(:gcc) do |conf, params|
compiler_flags = %w(-g -O3 -Wall -Wundef)
c_mandatory_flags = %w(-std=gnu99)
cxx_invalid_flags = %w(-Werror-implicit-function-declaration)
+ compile_opt = '%{flags} -MMD -MF "%{outfile}.d" -o "%{outfile}" "%{infile}"'
[conf.cc, conf.objc, conf.asm, conf.cxx].each do |compiler|
if compiler == conf.cxx
@@ -14,7 +15,8 @@ MRuby::Toolchain.new(:gcc) do |conf, params|
end
compiler.option_include_path = %q[-I"%s"]
compiler.option_define = '-D%s'
- compiler.compile_options = %q[%{flags} -MMD -o "%{outfile}" -c "%{infile}"]
+ compiler.compile_options = "-c #{compile_opt}"
+ compiler.preprocess_options = "-E -P #{compile_opt}"
compiler.cxx_compile_flag = '-x c++ -std=gnu++03'
compiler.cxx_exception_flag = '-fexceptions'
compiler.cxx_invalid_flags = c_mandatory_flags + cxx_invalid_flags
diff --git a/tasks/toolchains/openwrt.rake b/tasks/toolchains/openwrt.rake
index c376d96ec..d5763d8de 100644
--- a/tasks/toolchains/openwrt.rake
+++ b/tasks/toolchains/openwrt.rake
@@ -1,24 +1,19 @@
# usage of environmental variables to set the
# cross compiling toolchain proper
MRuby::Toolchain.new(:openwrt) do |conf|
- [conf.cc, conf.objc, conf.asm].each do |cc|
- cc.command = ENV['TARGET_CC']
- cc.flags = ENV['TARGET_CFLAGS']
- cc.include_paths = ["#{MRUBY_ROOT}/include"]
+ [conf.cc, conf.cxx, conf.objc, conf.asm].each do |cc|
+ if cc == conf.cxx
+ cc.command = ENV['TARGET_CXX']
+ cc.flags = ENV['TARGET_CXXFLAGS']
+ else
+ cc.command = ENV['TARGET_CC']
+ cc.flags = ENV['TARGET_CFLAGS']
+ end
cc.option_include_path = %q[-I"%s"]
cc.option_define = '-D%s'
- cc.compile_options = %q[%{flags} -MMD -o "%{outfile}" -c "%{infile}"]
+ cc.compile_options = %q[%{flags} -MMD -MF "%{outfile}.d" -o "%{outfile}" -c "%{infile}"]
end
- [conf.cxx].each do |cxx|
- cxx.command = ENV['TARGET_CXX']
- cxx.flags = ENV['TARGET_CXXFLAGS']
- cxx.include_paths = ["#{MRUBY_ROOT}/include"]
- cxx.option_include_path = %q[-I"%s"]
- cxx.option_define = '-D%s'
- cxx.compile_options = %q[%{flags} -MMD -o "%{outfile}" -c "%{infile}"]
- end
-
conf.linker do |linker|
linker.command = ENV['TARGET_CC']
linker.flags = ENV['TARGET_LDFLAGS']
diff --git a/tasks/toolchains/visualcpp.rake b/tasks/toolchains/visualcpp.rake
index 5094495e3..00e364082 100644
--- a/tasks/toolchains/visualcpp.rake
+++ b/tasks/toolchains/visualcpp.rake
@@ -1,25 +1,21 @@
MRuby::Toolchain.new(:visualcpp) do |conf, _params|
- conf.cc do |cc|
- cc.command = ENV['CC'] || 'cl.exe'
- # C4013: implicit function declaration
- cc.flags = [ENV['CFLAGS'] || %w(/c /nologo /W3 /we4013 /Zi /MD /O2 /D_CRT_SECURE_NO_WARNINGS)]
- cc.defines = %w(MRB_STACK_EXTEND_DOUBLING)
- cc.option_include_path = %q[/I"%s"]
- cc.option_define = '/D%s'
- cc.compile_options = %Q[%{flags} /Fo"%{outfile}" "%{infile}"]
- cc.cxx_compile_flag = '/TP'
- cc.cxx_exception_flag = '/EHs'
- end
-
- conf.cxx do |cxx|
- cxx.command = ENV['CXX'] || 'cl.exe'
- cxx.flags = [ENV['CXXFLAGS'] || ENV['CFLAGS'] || %w(/c /nologo /W3 /Zi /MD /O2 /EHs /D_CRT_SECURE_NO_WARNINGS)]
- cxx.defines = %w(MRB_STACK_EXTEND_DOUBLING)
- cxx.option_include_path = %q[/I"%s"]
- cxx.option_define = '/D%s'
- cxx.compile_options = %Q[%{flags} /Fo"%{outfile}" "%{infile}"]
- cxx.cxx_compile_flag = '/TP'
- cxx.cxx_exception_flag = '/EHs'
+ compiler_flags = %w(/nologo /W3 /MD /O2 /D_CRT_SECURE_NO_WARNINGS)
+ [conf.cc, conf.cxx].each do |compiler|
+ if compiler == conf.cc
+ compiler.command = ENV['CC'] || 'cl.exe'
+ # C4013: implicit function declaration
+ compiler.flags = [*(ENV['CFLAGS'] || compiler_flags + %w(/we4013))]
+ else
+ compiler.command = ENV['CXX'] || 'cl.exe'
+ compiler.flags = [*(ENV['CXXFLAGS'] || ENV['CFLAGS'] || compiler_flags + %w(/EHs))]
+ end
+ compiler.defines = %w(MRB_STACK_EXTEND_DOUBLING)
+ compiler.option_include_path = %q[/I"%s"]
+ compiler.option_define = '/D%s'
+ compiler.compile_options = %Q[/Zi /c /Fo"%{outfile}" %{flags} "%{infile}"]
+ compiler.preprocess_options = %Q[/EP %{flags} "%{infile}" > "%{outfile}"]
+ compiler.cxx_compile_flag = '/TP'
+ compiler.cxx_exception_flag = '/EHs'
end
conf.linker do |linker|
diff --git a/test/bintest.rb b/test/bintest.rb
index 4a3f161ba..a6888c9fb 100644
--- a/test/bintest.rb
+++ b/test/bintest.rb
@@ -4,7 +4,8 @@ require 'test/assert.rb'
GEMNAME = ""
def cmd(s)
- path = "#{ENV['BUILD_DIR']}/bin/#{s}"
+ path = s == "mrbc" ? ENV['MRBCFILE'] : "#{ENV['BUILD_DIR']}/bin/#{s}"
+ path = path.sub(/\.exe\z/, "")
if /mswin(?!ce)|mingw|bccwin/ =~ RbConfig::CONFIG['host_os']
path = "#{path}.exe".tr("/", "\\")
end
diff --git a/test/t/argumenterror.rb b/test/t/argumenterror.rb
index abb53429b..3dcb29a4b 100644
--- a/test/t/argumenterror.rb
+++ b/test/t/argumenterror.rb
@@ -1,6 +1,13 @@
##
# ArgumentError ISO Test
+def assert_argnum_error(given, expected, &block)
+ assert("wrong number of arguments") do
+ message = "wrong number of arguments (given #{given}, expected #{expected})"
+ assert_raise_with_message(ArgumentError, message, &block)
+ end
+end
+
assert('ArgumentError', '15.2.24') do
e2 = nil
a = []
@@ -14,3 +21,12 @@ assert('ArgumentError', '15.2.24') do
assert_equal(Class, ArgumentError.class)
assert_equal(ArgumentError, e2.class)
end
+
+assert("'wrong number of arguments' from mrb_get_args") do
+ assert_argnum_error(0, "1+"){__send__}
+ assert_argnum_error(0, 1..2){Object.const_defined?}
+ assert_argnum_error(3, 1..2){Object.const_defined?(:A, true, 2)}
+ assert_argnum_error(2, 0..1){{}.default(1, 2)}
+ assert_argnum_error(1, 2){Object.const_set(:B)}
+ assert_argnum_error(3, 2){Object.const_set(:C, 1, 2)}
+end
diff --git a/test/t/literals.rb b/test/t/literals.rb
index 6344219aa..b7b07cd9d 100644
--- a/test/t/literals.rb
+++ b/test/t/literals.rb
@@ -162,6 +162,47 @@ qq
QQ2
"o")
+ r = <<~RRR
+ rrr
+ rrr
+ RRR
+ s = <<~"SSS"
+ sss
+ sss
+ SSS
+ t = <<~'TTT'
+ ttt
+ ttt
+ TTT
+ u = [<<~UUU1 , <<~"UUU2" , <<~'UUU3' ]
+ u#{1}u
+ UUU1
+ u#{2}u
+ UUU2
+ u#{3}u
+ UUU3
+ v1 = <<~VVV
+
+ vvv
+ #{"vvv"}
+ VVV
+ v2 = <<~VVV
+\tvvv
+ vvv
+ VVV
+ v3 = <<~VVV
+ v v v
+ vvv
+ VVV
+ v4 = <<~VVV
+ vvv \
+ vvv
+ VVV
+ v5 = <<~VVV
+ vvv \
+ vvv
+ VVV
+
w = %W( 1 #{<<WWW} 3
www
WWW
@@ -197,6 +238,15 @@ ZZZ
assert_equal [1, "nn1\n", 3, 4], n
assert_equal "a $ q\n $ c $ d", q1
assert_equal "l $ mqq\nn $ o", q2
+ assert_equal "rrr\n rrr\n", r
+ assert_equal "sss\n sss\n", s
+ assert_equal "ttt\n ttt\n", t
+ assert_equal ["u1u\n", "u2u\n", "u\#{3}u\n"], u
+ assert_equal "\nvvv\nvvv\n", v1
+ assert_equal "\tvvv\n vvv\n", v2
+ assert_equal "v v v\n vvv\n", v3
+ assert_equal "vvv vvv\n", v4
+ assert_equal " vvv vvv\n", v5
assert_equal ["1", "www\n", "3", "4", "5"], w
assert_equal [1, "foo 222 333\n 444\n5\n bar\n6\n", 9], x
assert_equal "", z