script_core 0.2.7 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/Gemfile +2 -2
- data/ext/enterprise_script_service/Rakefile +1 -1
- data/ext/enterprise_script_service/mruby/.github/workflows/build.yml +117 -74
- data/ext/enterprise_script_service/mruby/.github/workflows/codeql-analysis.yml +41 -37
- data/ext/enterprise_script_service/mruby/.github/workflows/lint.yml +23 -0
- data/ext/enterprise_script_service/mruby/.github/workflows/oss-fuzz.yml +27 -0
- data/ext/enterprise_script_service/mruby/.github/workflows/spell-checker.yml +17 -0
- data/ext/enterprise_script_service/mruby/.gitlab-ci.yml +3 -3
- data/ext/enterprise_script_service/mruby/.markdownlint.yml +16 -0
- data/ext/enterprise_script_service/mruby/.travis.yml +2 -2
- data/ext/enterprise_script_service/mruby/.yamllint +8 -0
- data/ext/enterprise_script_service/mruby/AUTHORS +3 -0
- data/ext/enterprise_script_service/mruby/CODEOWNERS +1 -0
- data/ext/enterprise_script_service/mruby/CONTRIBUTING.md +6 -13
- data/ext/enterprise_script_service/mruby/Doxyfile +4 -4
- data/ext/enterprise_script_service/mruby/LICENSE +1 -1
- data/ext/enterprise_script_service/mruby/Makefile +1 -1
- data/ext/enterprise_script_service/mruby/README.md +4 -14
- data/ext/enterprise_script_service/mruby/Rakefile +18 -108
- data/ext/enterprise_script_service/mruby/TODO.md +17 -0
- data/ext/enterprise_script_service/mruby/appveyor.yml +31 -25
- data/ext/enterprise_script_service/mruby/benchmark/bm_ao_render.rb +1 -1
- data/ext/enterprise_script_service/mruby/build_config.rb +9 -152
- data/ext/enterprise_script_service/mruby/{examples/targets/build_config_ArduinoDue.rb → build_config/ArduinoDue.rb} +2 -19
- data/ext/enterprise_script_service/mruby/{examples/targets/build_config_IntelEdison.rb → build_config/IntelEdison.rb} +2 -2
- data/ext/enterprise_script_service/mruby/{examples/targets/build_config_IntelGalileo.rb → build_config/IntelGalileo.rb} +1 -18
- data/ext/enterprise_script_service/mruby/{examples/targets/build_config_RX630.rb → build_config/RX630.rb} +2 -19
- data/ext/enterprise_script_service/mruby/build_config/android_arm64-v8a.rb +11 -0
- data/ext/enterprise_script_service/mruby/build_config/android_armeabi.rb +11 -0
- data/ext/enterprise_script_service/mruby/{examples/targets/build_config_android_armeabi_v7a_neon_hard.rb → build_config/android_armeabi_v7a_neon_hard.rb} +0 -15
- data/ext/enterprise_script_service/mruby/build_config/bench.rb +11 -0
- data/ext/enterprise_script_service/mruby/build_config/boxing.rb +21 -0
- data/ext/enterprise_script_service/mruby/{examples/targets/build_config_chipKITMax32.rb → build_config/chipKITMax32.rb} +2 -19
- data/ext/enterprise_script_service/mruby/{travis_config.rb → build_config/ci/gcc-clang.rb} +10 -10
- data/ext/enterprise_script_service/mruby/build_config/ci/msvc.rb +20 -0
- data/ext/enterprise_script_service/mruby/build_config/clang-asan.rb +11 -0
- data/ext/enterprise_script_service/mruby/build_config/cross-32bit.rb +14 -0
- data/ext/enterprise_script_service/mruby/build_config/default.rb +80 -0
- data/ext/enterprise_script_service/mruby/{examples/targets/build_config_dreamcast_shelf.rb → build_config/dreamcast_shelf.rb} +5 -19
- data/ext/enterprise_script_service/mruby/build_config/gameboyadvance.rb +73 -0
- data/ext/enterprise_script_service/mruby/build_config/host-cxx.rb +12 -0
- data/ext/enterprise_script_service/mruby/build_config/host-debug.rb +20 -0
- data/ext/enterprise_script_service/mruby/build_config/host-gprof.rb +14 -0
- data/ext/enterprise_script_service/mruby/build_config/host-m32.rb +15 -0
- data/ext/enterprise_script_service/mruby/build_config/host-shared.rb +36 -0
- data/ext/enterprise_script_service/mruby/build_config/mrbc.rb +11 -0
- data/ext/enterprise_script_service/mruby/build_config/no-float.rb +17 -0
- data/ext/enterprise_script_service/mruby/doc/guides/compile.md +138 -49
- data/ext/enterprise_script_service/mruby/doc/guides/debugger.md +5 -4
- data/ext/enterprise_script_service/mruby/doc/guides/gc-arena-howto.md +1 -1
- data/ext/enterprise_script_service/mruby/doc/guides/mrbconf.md +49 -22
- data/ext/enterprise_script_service/mruby/doc/guides/mrbgems.md +31 -14
- data/ext/enterprise_script_service/mruby/doc/guides/symbol.md +83 -0
- data/ext/enterprise_script_service/mruby/doc/limitations.md +35 -36
- data/ext/enterprise_script_service/mruby/doc/mruby3.md +163 -0
- data/ext/enterprise_script_service/mruby/doc/opcode.md +93 -107
- data/ext/enterprise_script_service/mruby/examples/mrbgems/c_and_ruby_extension_example/mrblib/example.rb +1 -1
- data/ext/enterprise_script_service/mruby/examples/mrbgems/c_and_ruby_extension_example/src/example.c +5 -1
- data/ext/enterprise_script_service/mruby/examples/mrbgems/c_extension_example/src/example.c +5 -1
- data/ext/enterprise_script_service/mruby/examples/mrbgems/ruby_extension_example/mrblib/example.rb +1 -1
- data/ext/enterprise_script_service/mruby/include/mrbconf.h +81 -62
- data/ext/enterprise_script_service/mruby/include/mruby.h +137 -96
- data/ext/enterprise_script_service/mruby/include/mruby/array.h +23 -6
- data/ext/enterprise_script_service/mruby/include/mruby/boxing_nan.h +73 -48
- data/ext/enterprise_script_service/mruby/include/mruby/boxing_no.h +8 -8
- data/ext/enterprise_script_service/mruby/include/mruby/boxing_word.h +79 -48
- data/ext/enterprise_script_service/mruby/include/mruby/class.h +10 -8
- data/ext/enterprise_script_service/mruby/include/mruby/common.h +4 -1
- data/ext/enterprise_script_service/mruby/include/mruby/compile.h +13 -7
- data/ext/enterprise_script_service/mruby/include/mruby/debug.h +2 -2
- data/ext/enterprise_script_service/mruby/include/mruby/dump.h +17 -35
- data/ext/enterprise_script_service/mruby/include/mruby/endian.h +44 -0
- data/ext/enterprise_script_service/mruby/include/mruby/error.h +39 -5
- data/ext/enterprise_script_service/mruby/include/mruby/gc.h +1 -0
- data/ext/enterprise_script_service/mruby/include/mruby/hash.h +33 -13
- data/ext/enterprise_script_service/mruby/include/mruby/irep.h +64 -14
- data/ext/enterprise_script_service/mruby/include/mruby/khash.h +6 -14
- data/ext/enterprise_script_service/mruby/include/mruby/numeric.h +36 -63
- data/ext/enterprise_script_service/mruby/include/mruby/opcode.h +1 -27
- data/ext/enterprise_script_service/mruby/include/mruby/ops.h +27 -23
- data/ext/enterprise_script_service/mruby/include/mruby/presym.h +40 -0
- data/ext/enterprise_script_service/mruby/include/mruby/presym/disable.h +70 -0
- data/ext/enterprise_script_service/mruby/include/mruby/presym/enable.h +37 -0
- data/ext/enterprise_script_service/mruby/include/mruby/presym/scanning.h +73 -0
- data/ext/enterprise_script_service/mruby/include/mruby/proc.h +80 -13
- data/ext/enterprise_script_service/mruby/include/mruby/string.h +10 -15
- data/ext/enterprise_script_service/mruby/include/mruby/throw.h +14 -3
- data/ext/enterprise_script_service/mruby/include/mruby/value.h +29 -19
- data/ext/enterprise_script_service/mruby/include/mruby/variable.h +1 -0
- data/ext/enterprise_script_service/mruby/include/mruby/version.h +26 -7
- data/ext/enterprise_script_service/mruby/lib/mruby/build.rb +198 -44
- data/ext/enterprise_script_service/mruby/lib/mruby/build/command.rb +55 -37
- data/ext/enterprise_script_service/mruby/lib/mruby/build/load_gems.rb +12 -10
- data/ext/enterprise_script_service/mruby/lib/{mruby-core-ext.rb → mruby/core_ext.rb} +10 -3
- data/ext/enterprise_script_service/mruby/lib/mruby/gem.rb +75 -32
- data/ext/enterprise_script_service/mruby/lib/mruby/lockfile.rb +1 -1
- data/ext/enterprise_script_service/mruby/lib/mruby/presym.rb +132 -0
- data/ext/enterprise_script_service/mruby/mrbgems/default-no-fpu.gembox +3 -0
- data/ext/enterprise_script_service/mruby/mrbgems/default-no-stdio.gembox +4 -0
- data/ext/enterprise_script_service/mruby/mrbgems/default.gembox +9 -88
- data/ext/enterprise_script_service/mruby/mrbgems/full-core.gembox +1 -4
- data/ext/enterprise_script_service/mruby/mrbgems/math.gembox +10 -0
- data/ext/enterprise_script_service/mruby/mrbgems/metaprog.gembox +15 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-array-ext/mrblib/array.rb +1 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-array-ext/src/array.c +5 -4
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-config/mrbgem.rake +28 -19
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-config/mruby-config +18 -8
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/bintest/mrdb.rb +3 -6
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/bintest/print.rb +10 -10
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apibreak.c +14 -9
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apiprint.c +3 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c +4 -3
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.h +2 -6
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdbconf.h +4 -4
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mirb/bintest/mirb.rb +23 -5
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mirb/mrbgem.rake +11 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c +41 -34
- data/ext/enterprise_script_service/mruby/mrbgems/{mruby-compiler → mruby-bin-mrbc}/bintest/mrbc.rb +0 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mrbc/mrbgem.rake +3 -4
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mrbc/tools/mrbc/mrbc.c +19 -9
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mruby/bintest/mruby.rb +25 -4
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mruby/mrbgem.rake +1 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c +22 -6
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-strip/bintest/mruby-strip.rb +1 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-strip/tools/mruby-strip/mruby-strip.c +2 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-catch/mrbgem.rake +5 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-catch/mrblib/catch.rb +27 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-class-ext/src/class.c +2 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/codegen.c +430 -399
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/keywords +5 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/lex.def +49 -44
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/parse.y +559 -217
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/y.tab.c +4774 -4193
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/mrbgem.rake +18 -19
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-complex/mrblib/complex.rb +1 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-complex/src/complex.c +8 -7
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-complex/test/complex.rb +4 -4
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-enumerator/mrblib/enumerator.rb +1 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-enumerator/test/enumerator.rb +2 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-error/mrbgem.rake +2 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-eval/src/eval.c +17 -25
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-fiber/src/fiber.c +18 -13
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/src/hash-ext.c +30 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/test/hash.rb +7 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-inline-struct/test/inline.c +2 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/README.md +18 -16
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/include/mruby/ext/io.h +2 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/mrblib/file.rb +9 -4
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/mrblib/io.rb +2 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/src/file.c +55 -52
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/src/file_test.c +4 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/src/io.c +99 -87
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/test/file.rb +2 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/test/io.rb +2 -3
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/test/mruby_io_test.c +1 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-kernel-ext/src/kernel.c +7 -6
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-math/src/math.c +13 -12
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-math/test/math.rb +5 -4
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-metaprog/src/metaprog.c +43 -58
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-metaprog/test/metaprog.rb +4 -4
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-method/README.md +4 -3
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-method/src/method.c +77 -74
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-method/test/method.rb +4 -4
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-numeric-ext/src/numeric_ext.c +14 -13
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-object-ext/src/object.c +5 -4
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-objectspace/src/mruby_objectspace.c +18 -12
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-os-memsize/mrbgem.rake +10 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-os-memsize/src/memsize.c +231 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-os-memsize/test/memsize.rb +63 -0
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-pack/README.md +15 -18
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-pack/src/pack.c +38 -88
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-print/mrblib/print.rb +1 -30
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-print/src/print.c +62 -26
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-proc-ext/src/proc.c +32 -19
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-proc-ext/test/proc.c +1 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-random/src/random.c +98 -43
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-random/test/random.rb +2 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-range-ext/mrblib/range.rb +39 -6
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-range-ext/src/range.c +20 -40
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-range-ext/test/range.rb +27 -3
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-rational/mrblib/rational.rb +11 -17
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-rational/src/rational.c +216 -38
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-rational/test/rational.rb +6 -6
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-sleep/README.md +6 -4
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-sleep/src/mrb_sleep.c +4 -4
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-socket/README.md +3 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-socket/src/socket.c +47 -45
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-sprintf/src/sprintf.c +102 -71
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-sprintf/test/sprintf.rb +4 -2
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-string-ext/mrblib/string.rb +23 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-string-ext/src/string.c +13 -9
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-struct/mrblib/struct.rb +1 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-struct/src/struct.c +18 -25
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-symbol-ext/src/symbol.c +6 -5
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-symbol-ext/test/symbol.rb +1 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-test/README.md +0 -1
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-test/driver.c +5 -5
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-test/mrbgem.rake +16 -44
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-test/vformat.c +4 -4
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-time/src/time.c +27 -27
- data/ext/enterprise_script_service/mruby/mrbgems/stdlib-ext.gembox +18 -0
- data/ext/enterprise_script_service/mruby/mrbgems/stdlib-io.gembox +12 -0
- data/ext/enterprise_script_service/mruby/mrbgems/stdlib.gembox +54 -0
- data/ext/enterprise_script_service/mruby/mrblib/10error.rb +4 -0
- data/ext/enterprise_script_service/mruby/mrblib/array.rb +17 -9
- data/ext/enterprise_script_service/mruby/mrblib/enum.rb +1 -1
- data/ext/enterprise_script_service/mruby/mrblib/hash.rb +0 -20
- data/ext/enterprise_script_service/mruby/mrblib/init_mrblib.c +0 -11
- data/ext/enterprise_script_service/mruby/mrblib/numeric.rb +36 -11
- data/ext/enterprise_script_service/mruby/mrblib/range.rb +25 -3
- data/ext/enterprise_script_service/mruby/oss-fuzz/mruby_proto_fuzzer.cpp +2 -2
- data/ext/enterprise_script_service/mruby/oss-fuzz/proto_to_ruby.h +1 -1
- data/ext/enterprise_script_service/mruby/src/array.c +43 -80
- data/ext/enterprise_script_service/mruby/src/backtrace.c +16 -17
- data/ext/enterprise_script_service/mruby/src/class.c +774 -182
- data/ext/enterprise_script_service/mruby/src/codedump.c +223 -198
- data/ext/enterprise_script_service/mruby/src/debug.c +6 -6
- data/ext/enterprise_script_service/mruby/src/dump.c +466 -141
- data/ext/enterprise_script_service/mruby/src/enum.c +1 -1
- data/ext/enterprise_script_service/mruby/src/error.c +36 -13
- data/ext/enterprise_script_service/mruby/src/etc.c +43 -34
- data/ext/enterprise_script_service/mruby/src/fmt_fp.c +5 -6
- data/ext/enterprise_script_service/mruby/src/gc.c +73 -71
- data/ext/enterprise_script_service/mruby/src/hash.c +1050 -707
- data/ext/enterprise_script_service/mruby/src/kernel.c +75 -220
- data/ext/enterprise_script_service/mruby/src/load.c +196 -166
- data/ext/enterprise_script_service/mruby/src/numeric.c +352 -314
- data/ext/enterprise_script_service/mruby/src/object.c +97 -90
- data/ext/enterprise_script_service/mruby/src/print.c +4 -3
- data/ext/enterprise_script_service/mruby/src/proc.c +48 -56
- data/ext/enterprise_script_service/mruby/src/range.c +45 -21
- data/ext/enterprise_script_service/mruby/src/state.c +25 -32
- data/ext/enterprise_script_service/mruby/src/string.c +59 -101
- data/ext/enterprise_script_service/mruby/src/symbol.c +121 -56
- data/ext/enterprise_script_service/mruby/src/value_array.h +1 -0
- data/ext/enterprise_script_service/mruby/src/variable.c +158 -158
- data/ext/enterprise_script_service/mruby/src/vm.c +617 -602
- data/ext/enterprise_script_service/mruby/tasks/benchmark.rake +6 -6
- data/ext/enterprise_script_service/mruby/tasks/bin.rake +23 -0
- data/ext/enterprise_script_service/mruby/tasks/core.rake +12 -0
- data/ext/enterprise_script_service/mruby/tasks/doc.rake +50 -38
- data/ext/enterprise_script_service/mruby/tasks/gitlab.rake +83 -77
- data/ext/enterprise_script_service/mruby/tasks/libmruby.rake +10 -1
- data/ext/enterprise_script_service/mruby/tasks/mrbgems.rake +13 -1
- data/ext/enterprise_script_service/mruby/tasks/mrblib.rake +40 -0
- data/ext/enterprise_script_service/mruby/tasks/presym.rake +44 -0
- data/ext/enterprise_script_service/mruby/tasks/test.rake +68 -0
- data/ext/enterprise_script_service/mruby/tasks/toolchains/gcc.rake +6 -5
- data/ext/enterprise_script_service/mruby/tasks/toolchains/openwrt.rake +10 -14
- data/ext/enterprise_script_service/mruby/tasks/toolchains/visualcpp.rake +17 -21
- data/ext/enterprise_script_service/mruby/test/bintest.rb +5 -5
- data/ext/enterprise_script_service/mruby/test/t/argumenterror.rb +16 -0
- data/ext/enterprise_script_service/mruby/test/t/array.rb +7 -3
- data/ext/enterprise_script_service/mruby/test/t/bs_literal.rb +1 -1
- data/ext/enterprise_script_service/mruby/test/t/float.rb +18 -8
- data/ext/enterprise_script_service/mruby/test/t/hash.rb +903 -281
- data/ext/enterprise_script_service/mruby/test/t/integer.rb +10 -38
- data/ext/enterprise_script_service/mruby/test/t/kernel.rb +1 -1
- data/ext/enterprise_script_service/mruby/test/t/literals.rb +50 -0
- data/ext/enterprise_script_service/mruby/test/t/module.rb +2 -2
- data/ext/enterprise_script_service/mruby/test/t/numeric.rb +1 -1
- data/ext/enterprise_script_service/mruby/test/t/range.rb +83 -1
- data/ext/enterprise_script_service/mruby/test/t/string.rb +4 -0
- data/ext/enterprise_script_service/mruby/test/t/superclass.rb +10 -10
- data/ext/enterprise_script_service/mruby/test/t/syntax.rb +24 -0
- data/ext/enterprise_script_service/mruby/test/t/vformat.rb +3 -3
- data/ext/enterprise_script_service/mruby_config.rb +2 -5
- data/ext/enterprise_script_service/mruby_engine.cpp +1 -1
- data/lib/script_core/version.rb +1 -1
- data/spec/script_core_spec.rb +13 -0
- metadata +61 -23
- data/ext/enterprise_script_service/mruby/.github/workflows/main.yml +0 -24
- data/ext/enterprise_script_service/mruby/TODO +0 -8
- data/ext/enterprise_script_service/mruby/appveyor_config.rb +0 -46
- data/ext/enterprise_script_service/mruby/benchmark/build_config_boxing.rb +0 -28
- data/ext/enterprise_script_service/mruby/examples/targets/build_config_android_arm64-v8a.rb +0 -26
- data/ext/enterprise_script_service/mruby/examples/targets/build_config_android_armeabi.rb +0 -26
- data/ext/enterprise_script_service/mruby/mrbgems/mruby-sprintf/src/kernel.c +0 -30
- data/ext/enterprise_script_service/mruby/mrblib/mrblib.rake +0 -18
- data/ext/enterprise_script_service/mruby/src/crc.c +0 -39
- data/ext/enterprise_script_service/mruby/src/mruby_core.rake +0 -19
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* ANSI-C code produced by gperf version 3.1 */
|
|
2
|
-
/* Command-line: gperf -L ANSI-C -C -p -j1 -i 1 -g -o -t -N mrb_reserved_word -k'1,3,$'
|
|
2
|
+
/* Command-line: gperf -L ANSI-C -C -p -j1 -i 1 -g -o -t -N mrb_reserved_word -k'1,3,$' mrbgems/mruby-compiler/core/keywords */
|
|
3
3
|
|
|
4
4
|
#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
|
|
5
5
|
&& ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
|
|
@@ -28,10 +28,15 @@
|
|
|
28
28
|
#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gperf@gnu.org>."
|
|
29
29
|
#endif
|
|
30
30
|
|
|
31
|
-
#line 1 "
|
|
31
|
+
#line 1 "mrbgems/mruby-compiler/core/keywords"
|
|
32
|
+
|
|
33
|
+
/* Workaround for `enable_cxx_exception` (#5199) */
|
|
34
|
+
#if defined __cplusplus && __cplusplus >= 201103L
|
|
35
|
+
# define register
|
|
36
|
+
#endif
|
|
32
37
|
|
|
33
38
|
struct kwtable {const char *name; int id[2]; enum mrb_lex_state_enum state;};
|
|
34
|
-
#line
|
|
39
|
+
#line 10 "mrbgems/mruby-compiler/core/keywords"
|
|
35
40
|
struct kwtable;
|
|
36
41
|
|
|
37
42
|
#define TOTAL_KEYWORDS 40
|
|
@@ -101,87 +106,87 @@ mrb_reserved_word (register const char *str, register size_t len)
|
|
|
101
106
|
static const struct kwtable wordlist[] =
|
|
102
107
|
{
|
|
103
108
|
{""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
|
|
104
|
-
#line
|
|
109
|
+
#line 20 "mrbgems/mruby-compiler/core/keywords"
|
|
105
110
|
{"break", {keyword_break, keyword_break}, EXPR_MID},
|
|
106
|
-
#line
|
|
111
|
+
#line 25 "mrbgems/mruby-compiler/core/keywords"
|
|
107
112
|
{"else", {keyword_else, keyword_else}, EXPR_BEG},
|
|
108
|
-
#line
|
|
113
|
+
#line 35 "mrbgems/mruby-compiler/core/keywords"
|
|
109
114
|
{"nil", {keyword_nil, keyword_nil}, EXPR_END},
|
|
110
|
-
#line
|
|
115
|
+
#line 28 "mrbgems/mruby-compiler/core/keywords"
|
|
111
116
|
{"ensure", {keyword_ensure, keyword_ensure}, EXPR_BEG},
|
|
112
|
-
#line
|
|
117
|
+
#line 27 "mrbgems/mruby-compiler/core/keywords"
|
|
113
118
|
{"end", {keyword_end, keyword_end}, EXPR_END},
|
|
114
|
-
#line
|
|
119
|
+
#line 44 "mrbgems/mruby-compiler/core/keywords"
|
|
115
120
|
{"then", {keyword_then, keyword_then}, EXPR_BEG},
|
|
116
|
-
#line
|
|
121
|
+
#line 36 "mrbgems/mruby-compiler/core/keywords"
|
|
117
122
|
{"not", {keyword_not, keyword_not}, EXPR_ARG},
|
|
118
|
-
#line
|
|
123
|
+
#line 29 "mrbgems/mruby-compiler/core/keywords"
|
|
119
124
|
{"false", {keyword_false, keyword_false}, EXPR_END},
|
|
120
|
-
#line
|
|
125
|
+
#line 42 "mrbgems/mruby-compiler/core/keywords"
|
|
121
126
|
{"self", {keyword_self, keyword_self}, EXPR_END},
|
|
122
|
-
#line
|
|
127
|
+
#line 26 "mrbgems/mruby-compiler/core/keywords"
|
|
123
128
|
{"elsif", {keyword_elsif, keyword_elsif}, EXPR_VALUE},
|
|
124
|
-
#line
|
|
129
|
+
#line 39 "mrbgems/mruby-compiler/core/keywords"
|
|
125
130
|
{"rescue", {keyword_rescue, modifier_rescue}, EXPR_MID},
|
|
126
|
-
#line
|
|
131
|
+
#line 45 "mrbgems/mruby-compiler/core/keywords"
|
|
127
132
|
{"true", {keyword_true, keyword_true}, EXPR_END},
|
|
128
|
-
#line
|
|
133
|
+
#line 48 "mrbgems/mruby-compiler/core/keywords"
|
|
129
134
|
{"until", {keyword_until, modifier_until}, EXPR_VALUE},
|
|
130
|
-
#line
|
|
135
|
+
#line 47 "mrbgems/mruby-compiler/core/keywords"
|
|
131
136
|
{"unless", {keyword_unless, modifier_unless}, EXPR_VALUE},
|
|
132
|
-
#line
|
|
137
|
+
#line 41 "mrbgems/mruby-compiler/core/keywords"
|
|
133
138
|
{"return", {keyword_return, keyword_return}, EXPR_MID},
|
|
134
|
-
#line
|
|
139
|
+
#line 23 "mrbgems/mruby-compiler/core/keywords"
|
|
135
140
|
{"def", {keyword_def, keyword_def}, EXPR_FNAME},
|
|
136
|
-
#line
|
|
141
|
+
#line 18 "mrbgems/mruby-compiler/core/keywords"
|
|
137
142
|
{"and", {keyword_and, keyword_and}, EXPR_VALUE},
|
|
138
|
-
#line
|
|
143
|
+
#line 24 "mrbgems/mruby-compiler/core/keywords"
|
|
139
144
|
{"do", {keyword_do, keyword_do}, EXPR_BEG},
|
|
140
|
-
#line
|
|
145
|
+
#line 51 "mrbgems/mruby-compiler/core/keywords"
|
|
141
146
|
{"yield", {keyword_yield, keyword_yield}, EXPR_ARG},
|
|
142
|
-
#line
|
|
147
|
+
#line 30 "mrbgems/mruby-compiler/core/keywords"
|
|
143
148
|
{"for", {keyword_for, keyword_for}, EXPR_VALUE},
|
|
144
|
-
#line
|
|
149
|
+
#line 46 "mrbgems/mruby-compiler/core/keywords"
|
|
145
150
|
{"undef", {keyword_undef, keyword_undef}, EXPR_FNAME},
|
|
146
|
-
#line
|
|
151
|
+
#line 37 "mrbgems/mruby-compiler/core/keywords"
|
|
147
152
|
{"or", {keyword_or, keyword_or}, EXPR_VALUE},
|
|
148
|
-
#line
|
|
153
|
+
#line 32 "mrbgems/mruby-compiler/core/keywords"
|
|
149
154
|
{"in", {keyword_in, keyword_in}, EXPR_VALUE},
|
|
150
|
-
#line
|
|
155
|
+
#line 49 "mrbgems/mruby-compiler/core/keywords"
|
|
151
156
|
{"when", {keyword_when, keyword_when}, EXPR_VALUE},
|
|
152
|
-
#line
|
|
157
|
+
#line 40 "mrbgems/mruby-compiler/core/keywords"
|
|
153
158
|
{"retry", {keyword_retry, keyword_retry}, EXPR_END},
|
|
154
|
-
#line
|
|
159
|
+
#line 31 "mrbgems/mruby-compiler/core/keywords"
|
|
155
160
|
{"if", {keyword_if, modifier_if}, EXPR_VALUE},
|
|
156
|
-
#line
|
|
161
|
+
#line 21 "mrbgems/mruby-compiler/core/keywords"
|
|
157
162
|
{"case", {keyword_case, keyword_case}, EXPR_VALUE},
|
|
158
|
-
#line
|
|
163
|
+
#line 38 "mrbgems/mruby-compiler/core/keywords"
|
|
159
164
|
{"redo", {keyword_redo, keyword_redo}, EXPR_END},
|
|
160
|
-
#line
|
|
165
|
+
#line 34 "mrbgems/mruby-compiler/core/keywords"
|
|
161
166
|
{"next", {keyword_next, keyword_next}, EXPR_MID},
|
|
162
|
-
#line
|
|
167
|
+
#line 43 "mrbgems/mruby-compiler/core/keywords"
|
|
163
168
|
{"super", {keyword_super, keyword_super}, EXPR_ARG},
|
|
164
|
-
#line
|
|
169
|
+
#line 33 "mrbgems/mruby-compiler/core/keywords"
|
|
165
170
|
{"module", {keyword_module, keyword_module}, EXPR_VALUE},
|
|
166
|
-
#line
|
|
171
|
+
#line 19 "mrbgems/mruby-compiler/core/keywords"
|
|
167
172
|
{"begin", {keyword_begin, keyword_begin}, EXPR_BEG},
|
|
168
|
-
#line
|
|
173
|
+
#line 14 "mrbgems/mruby-compiler/core/keywords"
|
|
169
174
|
{"__LINE__", {keyword__LINE__, keyword__LINE__}, EXPR_END},
|
|
170
|
-
#line
|
|
175
|
+
#line 13 "mrbgems/mruby-compiler/core/keywords"
|
|
171
176
|
{"__FILE__", {keyword__FILE__, keyword__FILE__}, EXPR_END},
|
|
172
|
-
#line
|
|
177
|
+
#line 12 "mrbgems/mruby-compiler/core/keywords"
|
|
173
178
|
{"__ENCODING__", {keyword__ENCODING__, keyword__ENCODING__}, EXPR_END},
|
|
174
|
-
#line
|
|
179
|
+
#line 16 "mrbgems/mruby-compiler/core/keywords"
|
|
175
180
|
{"END", {keyword_END, keyword_END}, EXPR_END},
|
|
176
|
-
#line
|
|
181
|
+
#line 17 "mrbgems/mruby-compiler/core/keywords"
|
|
177
182
|
{"alias", {keyword_alias, keyword_alias}, EXPR_FNAME},
|
|
178
|
-
#line
|
|
183
|
+
#line 15 "mrbgems/mruby-compiler/core/keywords"
|
|
179
184
|
{"BEGIN", {keyword_BEGIN, keyword_BEGIN}, EXPR_END},
|
|
180
185
|
{""},
|
|
181
|
-
#line
|
|
186
|
+
#line 22 "mrbgems/mruby-compiler/core/keywords"
|
|
182
187
|
{"class", {keyword_class, keyword_class}, EXPR_CLASS},
|
|
183
188
|
{""}, {""},
|
|
184
|
-
#line
|
|
189
|
+
#line 50 "mrbgems/mruby-compiler/core/keywords"
|
|
185
190
|
{"while", {keyword_while, modifier_while}, EXPR_VALUE}
|
|
186
191
|
};
|
|
187
192
|
|
|
@@ -199,5 +204,5 @@ mrb_reserved_word (register const char *str, register size_t len)
|
|
|
199
204
|
}
|
|
200
205
|
return 0;
|
|
201
206
|
}
|
|
202
|
-
#line
|
|
207
|
+
#line 52 "mrbgems/mruby-compiler/core/keywords"
|
|
203
208
|
|
|
@@ -21,6 +21,8 @@
|
|
|
21
21
|
#include <mruby/error.h>
|
|
22
22
|
#include <mruby/throw.h>
|
|
23
23
|
#include <mruby/string.h>
|
|
24
|
+
#include <mruby/dump.h>
|
|
25
|
+
#include <mruby/presym.h>
|
|
24
26
|
#include "node.h"
|
|
25
27
|
|
|
26
28
|
#define YYLEX_PARAM p
|
|
@@ -69,6 +71,7 @@ typedef unsigned int stack_type;
|
|
|
69
71
|
#define nsym(x) ((node*)(intptr_t)(x))
|
|
70
72
|
#define nint(x) ((node*)(intptr_t)(x))
|
|
71
73
|
#define intn(x) ((int)(intptr_t)(x))
|
|
74
|
+
#define typen(x) ((enum node_type)(intptr_t)(x))
|
|
72
75
|
|
|
73
76
|
#define NUM_SUFFIX_R (1<<0)
|
|
74
77
|
#define NUM_SUFFIX_I (1<<1)
|
|
@@ -87,7 +90,7 @@ intern_gen(parser_state *p, const char *s, size_t len)
|
|
|
87
90
|
}
|
|
88
91
|
#define intern(s,len) intern_gen(p,(s),(len))
|
|
89
92
|
|
|
90
|
-
#define
|
|
93
|
+
#define intern_op(op) MRB_OPSYM_2(p->mrb, op)
|
|
91
94
|
|
|
92
95
|
static void
|
|
93
96
|
cons_free_gen(parser_state *p, node *cons)
|
|
@@ -265,7 +268,7 @@ local_unnest(parser_state *p)
|
|
|
265
268
|
static mrb_bool
|
|
266
269
|
local_var_p(parser_state *p, mrb_sym sym)
|
|
267
270
|
{
|
|
268
|
-
struct RProc *u;
|
|
271
|
+
const struct RProc *u;
|
|
269
272
|
node *l = p->locals;
|
|
270
273
|
|
|
271
274
|
while (l) {
|
|
@@ -279,11 +282,13 @@ local_var_p(parser_state *p, mrb_sym sym)
|
|
|
279
282
|
|
|
280
283
|
u = p->upper;
|
|
281
284
|
while (u && !MRB_PROC_CFUNC_P(u)) {
|
|
282
|
-
struct mrb_irep *ir = u->body.irep;
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
285
|
+
const struct mrb_irep *ir = u->body.irep;
|
|
286
|
+
const mrb_sym *v = ir->lv;
|
|
287
|
+
int i;
|
|
288
|
+
|
|
289
|
+
if (!v) break;
|
|
290
|
+
for (i=0; i+1 < ir->nlocals; i++) {
|
|
291
|
+
if (v[i] == sym) return TRUE;
|
|
287
292
|
}
|
|
288
293
|
if (MRB_PROC_SCOPE_P(u)) break;
|
|
289
294
|
u = u->upper;
|
|
@@ -311,14 +316,14 @@ static void
|
|
|
311
316
|
local_add_blk(parser_state *p, mrb_sym blk)
|
|
312
317
|
{
|
|
313
318
|
/* allocate register for block */
|
|
314
|
-
local_add_f(p, blk ? blk :
|
|
319
|
+
local_add_f(p, blk ? blk : intern_op(and));
|
|
315
320
|
}
|
|
316
321
|
|
|
317
322
|
static void
|
|
318
323
|
local_add_kw(parser_state *p, mrb_sym kwd)
|
|
319
324
|
{
|
|
320
325
|
/* allocate register for keywords hash */
|
|
321
|
-
local_add_f(p, kwd ? kwd :
|
|
326
|
+
local_add_f(p, kwd ? kwd : intern_op(pow));
|
|
322
327
|
}
|
|
323
328
|
|
|
324
329
|
static node*
|
|
@@ -730,7 +735,19 @@ new_module(parser_state *p, node *m, node *b)
|
|
|
730
735
|
static node*
|
|
731
736
|
new_def(parser_state *p, mrb_sym m, node *a, node *b)
|
|
732
737
|
{
|
|
733
|
-
return list5((node*)NODE_DEF, nsym(m),
|
|
738
|
+
return list5((node*)NODE_DEF, nsym(m), 0, a, b);
|
|
739
|
+
}
|
|
740
|
+
|
|
741
|
+
static void
|
|
742
|
+
defn_setup(parser_state *p, node *d, node *a, node *b)
|
|
743
|
+
{
|
|
744
|
+
node *n = d->cdr->cdr;
|
|
745
|
+
|
|
746
|
+
n->car = locals_node(p);
|
|
747
|
+
p->cmdarg_stack = intn(n->cdr->car);
|
|
748
|
+
n->cdr->car = a;
|
|
749
|
+
local_resume(p, n->cdr->cdr->car);
|
|
750
|
+
n->cdr->cdr->car = b;
|
|
734
751
|
}
|
|
735
752
|
|
|
736
753
|
/* (:sdef obj m lv (arg . body)) */
|
|
@@ -738,7 +755,19 @@ static node*
|
|
|
738
755
|
new_sdef(parser_state *p, node *o, mrb_sym m, node *a, node *b)
|
|
739
756
|
{
|
|
740
757
|
void_expr_error(p, o);
|
|
741
|
-
return list6((node*)NODE_SDEF, o, nsym(m),
|
|
758
|
+
return list6((node*)NODE_SDEF, o, nsym(m), 0, a, b);
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
static void
|
|
762
|
+
defs_setup(parser_state *p, node *d, node *a, node *b)
|
|
763
|
+
{
|
|
764
|
+
node *n = d->cdr->cdr->cdr;
|
|
765
|
+
|
|
766
|
+
n->car = locals_node(p);
|
|
767
|
+
p->cmdarg_stack = intn(n->cdr->car);
|
|
768
|
+
n->cdr->car = a;
|
|
769
|
+
local_resume(p, n->cdr->cdr->car);
|
|
770
|
+
n->cdr->cdr->car = b;
|
|
742
771
|
}
|
|
743
772
|
|
|
744
773
|
/* (:arg . sym) */
|
|
@@ -752,7 +781,7 @@ static void
|
|
|
752
781
|
local_add_margs(parser_state *p, node *n)
|
|
753
782
|
{
|
|
754
783
|
while (n) {
|
|
755
|
-
if (n->car->car ==
|
|
784
|
+
if (typen(n->car->car) == NODE_MASGN) {
|
|
756
785
|
node *t = n->car->cdr->cdr;
|
|
757
786
|
|
|
758
787
|
n->car->cdr->cdr = NULL;
|
|
@@ -932,13 +961,13 @@ new_op_asgn(parser_state *p, node *a, mrb_sym op, node *b)
|
|
|
932
961
|
static node*
|
|
933
962
|
new_imaginary(parser_state *p, node *imaginary)
|
|
934
963
|
{
|
|
935
|
-
return new_call(p, new_const(p,
|
|
964
|
+
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);
|
|
936
965
|
}
|
|
937
966
|
|
|
938
967
|
static node*
|
|
939
968
|
new_rational(parser_state *p, node *rational)
|
|
940
969
|
{
|
|
941
|
-
return new_call(p, new_const(p,
|
|
970
|
+
return new_call(p, new_const(p, MRB_SYM_2(p->mrb, Kernel)), MRB_SYM_2(p->mrb, Rational), list1(list1(rational)), 1);
|
|
942
971
|
}
|
|
943
972
|
|
|
944
973
|
/* (:int . i) */
|
|
@@ -955,7 +984,7 @@ new_int(parser_state *p, const char *s, int base, int suffix)
|
|
|
955
984
|
return result;
|
|
956
985
|
}
|
|
957
986
|
|
|
958
|
-
#ifndef
|
|
987
|
+
#ifndef MRB_NO_FLOAT
|
|
959
988
|
/* (:float . i) */
|
|
960
989
|
static node*
|
|
961
990
|
new_float(parser_state *p, const char *s, int suffix)
|
|
@@ -988,7 +1017,7 @@ new_dstr(parser_state *p, node *a)
|
|
|
988
1017
|
static int
|
|
989
1018
|
string_node_p(node *n)
|
|
990
1019
|
{
|
|
991
|
-
return (int)((
|
|
1020
|
+
return (int)(typen(n->car) == NODE_STR);
|
|
992
1021
|
}
|
|
993
1022
|
|
|
994
1023
|
static node*
|
|
@@ -1180,7 +1209,7 @@ call_with_block(parser_state *p, node *a, node *b)
|
|
|
1180
1209
|
{
|
|
1181
1210
|
node *n;
|
|
1182
1211
|
|
|
1183
|
-
switch ((
|
|
1212
|
+
switch (typen(a->car)) {
|
|
1184
1213
|
case NODE_SUPER:
|
|
1185
1214
|
case NODE_ZSUPER:
|
|
1186
1215
|
if (!a->cdr) a->cdr = cons(0, b);
|
|
@@ -1254,7 +1283,7 @@ typedef enum mrb_string_type string_type;
|
|
|
1254
1283
|
static node*
|
|
1255
1284
|
new_strterm(parser_state *p, string_type type, int term, int paren)
|
|
1256
1285
|
{
|
|
1257
|
-
return cons(nint(type), cons((
|
|
1286
|
+
return cons(nint(type), cons(nint(0), cons(nint(paren), nint(term))));
|
|
1258
1287
|
}
|
|
1259
1288
|
|
|
1260
1289
|
static void
|
|
@@ -1407,15 +1436,24 @@ heredoc_end(parser_state *p)
|
|
|
1407
1436
|
keyword__FILE__
|
|
1408
1437
|
keyword__ENCODING__
|
|
1409
1438
|
|
|
1410
|
-
%token <id> tIDENTIFIER
|
|
1411
|
-
%token <
|
|
1439
|
+
%token <id> tIDENTIFIER "local variable or method"
|
|
1440
|
+
%token <id> tFID "method"
|
|
1441
|
+
%token <id> tGVAR "global variable"
|
|
1442
|
+
%token <id> tIVAR "instance variable"
|
|
1443
|
+
%token <id> tCONSTANT "constant"
|
|
1444
|
+
%token <id> tCVAR "class variable"
|
|
1445
|
+
%token <id> tLABEL_TAG "label"
|
|
1446
|
+
%token <nd> tINTEGER "integer literal"
|
|
1447
|
+
%token <nd> tFLOAT "float literal"
|
|
1448
|
+
%token <nd> tCHAR "character literal"
|
|
1449
|
+
%token <nd> tXSTRING tREGEXP
|
|
1412
1450
|
%token <nd> tSTRING tSTRING_PART tSTRING_MID
|
|
1413
1451
|
%token <nd> tNTH_REF tBACK_REF
|
|
1414
1452
|
%token <num> tREGEXP_END
|
|
1415
|
-
%token <num> tNUMPARAM
|
|
1453
|
+
%token <num> tNUMPARAM "numbered paraemeter"
|
|
1416
1454
|
|
|
1417
1455
|
%type <nd> singleton string string_fragment string_rep string_interp xstring regexp
|
|
1418
|
-
%type <nd> literal numeric cpath symbol
|
|
1456
|
+
%type <nd> literal numeric cpath symbol defn_head defs_head
|
|
1419
1457
|
%type <nd> top_compstmt top_stmts top_stmt
|
|
1420
1458
|
%type <nd> bodystmt compstmt stmts stmt expr arg primary command command_call method_call
|
|
1421
1459
|
%type <nd> expr_value arg_rhs primary_value
|
|
@@ -1425,7 +1463,7 @@ heredoc_end(parser_state *p)
|
|
|
1425
1463
|
%type <nd> command_args aref_args opt_block_arg block_arg var_ref var_lhs
|
|
1426
1464
|
%type <nd> command_asgn command_rhs mrhs superclass block_call block_command
|
|
1427
1465
|
%type <nd> f_block_optarg f_block_opt
|
|
1428
|
-
%type <nd> f_arglist f_args f_arg f_arg_item f_optarg f_margs
|
|
1466
|
+
%type <nd> f_arglist_paren f_arglist f_args f_arg f_arg_item f_optarg f_margs
|
|
1429
1467
|
%type <nd> assoc_list assocs assoc undef_list backref for_var
|
|
1430
1468
|
%type <nd> block_param opt_block_param block_param_def f_opt
|
|
1431
1469
|
%type <nd> bv_decls opt_bv_decl bvar f_larglist lambda_body
|
|
@@ -1440,38 +1478,41 @@ heredoc_end(parser_state *p)
|
|
|
1440
1478
|
%type <nd> f_block_kwarg f_block_kw block_args_tail opt_block_args_tail
|
|
1441
1479
|
%type <id> f_label
|
|
1442
1480
|
|
|
1443
|
-
%token tUPLUS
|
|
1444
|
-
%token tUMINUS
|
|
1445
|
-
%token
|
|
1446
|
-
%token
|
|
1447
|
-
%token
|
|
1448
|
-
%token
|
|
1449
|
-
%token
|
|
1450
|
-
%token
|
|
1451
|
-
%token
|
|
1452
|
-
%token
|
|
1453
|
-
%token tMATCH
|
|
1454
|
-
%token
|
|
1481
|
+
%token tUPLUS "unary plus"
|
|
1482
|
+
%token tUMINUS "unary minus"
|
|
1483
|
+
%token tCMP "<=>"
|
|
1484
|
+
%token tEQ "=="
|
|
1485
|
+
%token tEQQ "==="
|
|
1486
|
+
%token tNEQ "!="
|
|
1487
|
+
%token tGEQ ">="
|
|
1488
|
+
%token tLEQ "<="
|
|
1489
|
+
%token tANDOP "&&"
|
|
1490
|
+
%token tOROP "||"
|
|
1491
|
+
%token tMATCH "=~"
|
|
1492
|
+
%token tNMATCH "!~"
|
|
1493
|
+
%token tDOT2 ".."
|
|
1494
|
+
%token tDOT3 "..."
|
|
1495
|
+
%token tBDOT2 tBDOT3 /* (.. and (... */
|
|
1455
1496
|
%token tAREF tASET /* [] and []= */
|
|
1456
|
-
%token tLSHFT
|
|
1457
|
-
%token
|
|
1497
|
+
%token tLSHFT "<<"
|
|
1498
|
+
%token tRSHFT ">>"
|
|
1499
|
+
%token tCOLON2 "::"
|
|
1458
1500
|
%token tCOLON3 /* :: at EXPR_BEG */
|
|
1459
1501
|
%token <id> tOP_ASGN /* +=, -= etc. */
|
|
1460
|
-
%token tASSOC
|
|
1461
|
-
%token tLPAREN
|
|
1462
|
-
%token
|
|
1463
|
-
%token
|
|
1464
|
-
%token
|
|
1465
|
-
%token
|
|
1466
|
-
%token
|
|
1467
|
-
%token
|
|
1468
|
-
%token
|
|
1469
|
-
%token
|
|
1470
|
-
%token
|
|
1471
|
-
%token
|
|
1472
|
-
%token
|
|
1473
|
-
%token
|
|
1474
|
-
%token <nd> tHEREDOC_BEG /* <<, <<- */
|
|
1502
|
+
%token tASSOC "=>"
|
|
1503
|
+
%token tLPAREN tLPAREN_ARG "("
|
|
1504
|
+
%token tRPAREN ")"
|
|
1505
|
+
%token tLBRACK "["
|
|
1506
|
+
%token tLBRACE tLBRACE_ARG "{"
|
|
1507
|
+
%token tSTAR "*"
|
|
1508
|
+
%token tPOW tDSTAR "**"
|
|
1509
|
+
%token tAMPER "&"
|
|
1510
|
+
%token tLAMBDA "->"
|
|
1511
|
+
%token tANDDOT "&."
|
|
1512
|
+
%token tSYMBEG "symbol"
|
|
1513
|
+
%token tSTRING_BEG "string literal"
|
|
1514
|
+
%token tXSTRING_BEG tSTRING_DVAR tREGEXP_BEG tWORDS_BEG tSYMBOLS_BEG tLAMBEG
|
|
1515
|
+
%token <nd> tHEREDOC_BEG "here document"
|
|
1475
1516
|
%token tHEREDOC_END tLITERAL_DELIM tHD_LITERAL_DELIM
|
|
1476
1517
|
%token <nd> tHD_STRING_PART tHD_STRING_MID
|
|
1477
1518
|
|
|
@@ -1488,7 +1529,7 @@ heredoc_end(parser_state *p)
|
|
|
1488
1529
|
%right '=' tOP_ASGN
|
|
1489
1530
|
%left modifier_rescue
|
|
1490
1531
|
%right '?' ':' tLABEL_TAG
|
|
1491
|
-
%nonassoc tDOT2 tDOT3
|
|
1532
|
+
%nonassoc tDOT2 tDOT3 tBDOT2 tBDOT3
|
|
1492
1533
|
%left tOROP
|
|
1493
1534
|
%left tANDOP
|
|
1494
1535
|
%nonassoc tCMP tEQ tEQQ tNEQ tMATCH tNMATCH
|
|
@@ -1658,6 +1699,13 @@ stmt : keyword_alias fsym {p->lstate = EXPR_FNAME;} fsym
|
|
|
1658
1699
|
{
|
|
1659
1700
|
$$ = new_masgn(p, $1, new_array(p, $3));
|
|
1660
1701
|
}
|
|
1702
|
+
| arg tASSOC tIDENTIFIER
|
|
1703
|
+
{
|
|
1704
|
+
node *lhs = new_lvar(p, $3);
|
|
1705
|
+
void_expr_error(p, $1);
|
|
1706
|
+
assignable(p, lhs);
|
|
1707
|
+
$$ = new_asgn(p, lhs, $1);
|
|
1708
|
+
}
|
|
1661
1709
|
| expr
|
|
1662
1710
|
;
|
|
1663
1711
|
|
|
@@ -1671,7 +1719,7 @@ command_asgn : lhs '=' command_rhs
|
|
|
1671
1719
|
}
|
|
1672
1720
|
| primary_value '[' opt_call_args ']' tOP_ASGN command_rhs
|
|
1673
1721
|
{
|
|
1674
|
-
$$ = new_op_asgn(p, new_call(p, $1,
|
|
1722
|
+
$$ = new_op_asgn(p, new_call(p, $1, intern_op(aref), $3, '.'), $5, $6);
|
|
1675
1723
|
}
|
|
1676
1724
|
| primary_value call_op tIDENTIFIER tOP_ASGN command_rhs
|
|
1677
1725
|
{
|
|
@@ -1726,6 +1774,31 @@ expr : command_call
|
|
|
1726
1774
|
| arg
|
|
1727
1775
|
;
|
|
1728
1776
|
|
|
1777
|
+
|
|
1778
|
+
defn_head : keyword_def fname
|
|
1779
|
+
{
|
|
1780
|
+
$$ = new_def(p, $2, nint(p->cmdarg_stack), local_switch(p));
|
|
1781
|
+
p->cmdarg_stack = 0;
|
|
1782
|
+
p->in_def++;
|
|
1783
|
+
nvars_block(p);
|
|
1784
|
+
}
|
|
1785
|
+
;
|
|
1786
|
+
|
|
1787
|
+
defs_head : keyword_def singleton dot_or_colon
|
|
1788
|
+
{
|
|
1789
|
+
p->lstate = EXPR_FNAME;
|
|
1790
|
+
}
|
|
1791
|
+
fname
|
|
1792
|
+
{
|
|
1793
|
+
$$ = new_sdef(p, $2, $5, nint(p->cmdarg_stack), local_switch(p));
|
|
1794
|
+
p->cmdarg_stack = 0;
|
|
1795
|
+
p->in_def++;
|
|
1796
|
+
p->in_single++;
|
|
1797
|
+
nvars_block(p);
|
|
1798
|
+
p->lstate = EXPR_ENDFN; /* force for args */
|
|
1799
|
+
}
|
|
1800
|
+
;
|
|
1801
|
+
|
|
1729
1802
|
expr_value : expr
|
|
1730
1803
|
{
|
|
1731
1804
|
if (!$1) $$ = new_nil(p);
|
|
@@ -1902,7 +1975,7 @@ mlhs_node : variable
|
|
|
1902
1975
|
}
|
|
1903
1976
|
| primary_value '[' opt_call_args ']'
|
|
1904
1977
|
{
|
|
1905
|
-
$$ = new_call(p, $1,
|
|
1978
|
+
$$ = new_call(p, $1, intern_op(aref), $3, '.');
|
|
1906
1979
|
}
|
|
1907
1980
|
| primary_value call_op tIDENTIFIER
|
|
1908
1981
|
{
|
|
@@ -1941,7 +2014,7 @@ lhs : variable
|
|
|
1941
2014
|
}
|
|
1942
2015
|
| primary_value '[' opt_call_args ']'
|
|
1943
2016
|
{
|
|
1944
|
-
$$ = new_call(p, $1,
|
|
2017
|
+
$$ = new_call(p, $1, intern_op(aref), $3, '.');
|
|
1945
2018
|
}
|
|
1946
2019
|
| primary_value call_op tIDENTIFIER
|
|
1947
2020
|
{
|
|
@@ -1987,11 +2060,11 @@ cname : tIDENTIFIER
|
|
|
1987
2060
|
|
|
1988
2061
|
cpath : tCOLON3 cname
|
|
1989
2062
|
{
|
|
1990
|
-
$$ = cons((
|
|
2063
|
+
$$ = cons(nint(1), nsym($2));
|
|
1991
2064
|
}
|
|
1992
2065
|
| cname
|
|
1993
2066
|
{
|
|
1994
|
-
$$ = cons((
|
|
2067
|
+
$$ = cons(nint(0), nsym($1));
|
|
1995
2068
|
}
|
|
1996
2069
|
| primary_value tCOLON2 cname
|
|
1997
2070
|
{
|
|
@@ -2029,36 +2102,36 @@ undef_list : fsym
|
|
|
2029
2102
|
}
|
|
2030
2103
|
;
|
|
2031
2104
|
|
|
2032
|
-
op : '|' { $$ =
|
|
2033
|
-
| '^' { $$ =
|
|
2034
|
-
| '&' { $$ =
|
|
2035
|
-
| tCMP { $$ =
|
|
2036
|
-
| tEQ { $$ =
|
|
2037
|
-
| tEQQ { $$ =
|
|
2038
|
-
| tMATCH { $$ =
|
|
2039
|
-
| tNMATCH { $$ =
|
|
2040
|
-
| '>' { $$ =
|
|
2041
|
-
| tGEQ { $$ =
|
|
2042
|
-
| '<' { $$ =
|
|
2043
|
-
| tLEQ { $$ =
|
|
2044
|
-
| tNEQ { $$ =
|
|
2045
|
-
| tLSHFT { $$ =
|
|
2046
|
-
| tRSHFT { $$ =
|
|
2047
|
-
| '+' { $$ =
|
|
2048
|
-
| '-' { $$ =
|
|
2049
|
-
| '*' { $$ =
|
|
2050
|
-
| tSTAR { $$ =
|
|
2051
|
-
| '/' { $$ =
|
|
2052
|
-
| '%' { $$ =
|
|
2053
|
-
| tPOW { $$ =
|
|
2054
|
-
| tDSTAR { $$ =
|
|
2055
|
-
| '!' { $$ =
|
|
2056
|
-
| '~' { $$ =
|
|
2057
|
-
| tUPLUS { $$ =
|
|
2058
|
-
| tUMINUS { $$ =
|
|
2059
|
-
| tAREF { $$ =
|
|
2060
|
-
| tASET { $$ =
|
|
2061
|
-
| '`' { $$ =
|
|
2105
|
+
op : '|' { $$ = intern_op(or); }
|
|
2106
|
+
| '^' { $$ = intern_op(xor); }
|
|
2107
|
+
| '&' { $$ = intern_op(and); }
|
|
2108
|
+
| tCMP { $$ = intern_op(cmp); }
|
|
2109
|
+
| tEQ { $$ = intern_op(eq); }
|
|
2110
|
+
| tEQQ { $$ = intern_op(eqq); }
|
|
2111
|
+
| tMATCH { $$ = intern_op(match); }
|
|
2112
|
+
| tNMATCH { $$ = intern_op(nmatch); }
|
|
2113
|
+
| '>' { $$ = intern_op(gt); }
|
|
2114
|
+
| tGEQ { $$ = intern_op(ge); }
|
|
2115
|
+
| '<' { $$ = intern_op(lt); }
|
|
2116
|
+
| tLEQ { $$ = intern_op(le); }
|
|
2117
|
+
| tNEQ { $$ = intern_op(neq); }
|
|
2118
|
+
| tLSHFT { $$ = intern_op(lshift); }
|
|
2119
|
+
| tRSHFT { $$ = intern_op(rshift); }
|
|
2120
|
+
| '+' { $$ = intern_op(add); }
|
|
2121
|
+
| '-' { $$ = intern_op(sub); }
|
|
2122
|
+
| '*' { $$ = intern_op(mul); }
|
|
2123
|
+
| tSTAR { $$ = intern_op(mul); }
|
|
2124
|
+
| '/' { $$ = intern_op(div); }
|
|
2125
|
+
| '%' { $$ = intern_op(mod); }
|
|
2126
|
+
| tPOW { $$ = intern_op(pow); }
|
|
2127
|
+
| tDSTAR { $$ = intern_op(pow); }
|
|
2128
|
+
| '!' { $$ = intern_op(not); }
|
|
2129
|
+
| '~' { $$ = intern_op(neg); }
|
|
2130
|
+
| tUPLUS { $$ = intern_op(plus); }
|
|
2131
|
+
| tUMINUS { $$ = intern_op(minus); }
|
|
2132
|
+
| tAREF { $$ = intern_op(aref); }
|
|
2133
|
+
| tASET { $$ = intern_op(aset); }
|
|
2134
|
+
| '`' { $$ = intern_op(tick); }
|
|
2062
2135
|
;
|
|
2063
2136
|
|
|
2064
2137
|
reswords : keyword__LINE__ | keyword__FILE__ | keyword__ENCODING__
|
|
@@ -2085,7 +2158,7 @@ arg : lhs '=' arg_rhs
|
|
|
2085
2158
|
}
|
|
2086
2159
|
| primary_value '[' opt_call_args ']' tOP_ASGN arg_rhs
|
|
2087
2160
|
{
|
|
2088
|
-
$$ = new_op_asgn(p, new_call(p, $1,
|
|
2161
|
+
$$ = new_op_asgn(p, new_call(p, $1, intern_op(aref), $3, '.'), $5, $6);
|
|
2089
2162
|
}
|
|
2090
2163
|
| primary_value call_op tIDENTIFIER tOP_ASGN arg_rhs
|
|
2091
2164
|
{
|
|
@@ -2118,10 +2191,26 @@ arg : lhs '=' arg_rhs
|
|
|
2118
2191
|
{
|
|
2119
2192
|
$$ = new_dot2(p, $1, $3);
|
|
2120
2193
|
}
|
|
2194
|
+
| arg tDOT2
|
|
2195
|
+
{
|
|
2196
|
+
$$ = new_dot2(p, $1, new_nil(p));
|
|
2197
|
+
}
|
|
2198
|
+
| tBDOT2 arg
|
|
2199
|
+
{
|
|
2200
|
+
$$ = new_dot2(p, new_nil(p), $2);
|
|
2201
|
+
}
|
|
2121
2202
|
| arg tDOT3 arg
|
|
2122
2203
|
{
|
|
2123
2204
|
$$ = new_dot3(p, $1, $3);
|
|
2124
2205
|
}
|
|
2206
|
+
| arg tDOT3
|
|
2207
|
+
{
|
|
2208
|
+
$$ = new_dot3(p, $1, new_nil(p));
|
|
2209
|
+
}
|
|
2210
|
+
| tBDOT3 arg
|
|
2211
|
+
{
|
|
2212
|
+
$$ = new_dot3(p, new_nil(p), $2);
|
|
2213
|
+
}
|
|
2125
2214
|
| arg '+' arg
|
|
2126
2215
|
{
|
|
2127
2216
|
$$ = call_bin_op(p, $1, "+", $3);
|
|
@@ -2246,6 +2335,42 @@ arg : lhs '=' arg_rhs
|
|
|
2246
2335
|
{
|
|
2247
2336
|
$$ = new_if(p, cond($1), $3, $6);
|
|
2248
2337
|
}
|
|
2338
|
+
| defn_head f_arglist_paren '=' arg
|
|
2339
|
+
{
|
|
2340
|
+
$$ = $1;
|
|
2341
|
+
void_expr_error(p, $4);
|
|
2342
|
+
defn_setup(p, $$, $2, $4);
|
|
2343
|
+
nvars_unnest(p);
|
|
2344
|
+
p->in_def--;
|
|
2345
|
+
}
|
|
2346
|
+
| defn_head f_arglist_paren '=' arg modifier_rescue arg
|
|
2347
|
+
{
|
|
2348
|
+
$$ = $1;
|
|
2349
|
+
void_expr_error(p, $4);
|
|
2350
|
+
void_expr_error(p, $6);
|
|
2351
|
+
defn_setup(p, $$, $2, new_mod_rescue(p, $4, $6));
|
|
2352
|
+
nvars_unnest(p);
|
|
2353
|
+
p->in_def--;
|
|
2354
|
+
}
|
|
2355
|
+
| defs_head f_arglist_paren '=' arg
|
|
2356
|
+
{
|
|
2357
|
+
$$ = $1;
|
|
2358
|
+
void_expr_error(p, $4);
|
|
2359
|
+
defs_setup(p, $$, $2, $4);
|
|
2360
|
+
nvars_unnest(p);
|
|
2361
|
+
p->in_def--;
|
|
2362
|
+
p->in_single--;
|
|
2363
|
+
}
|
|
2364
|
+
| defs_head f_arglist_paren '=' arg modifier_rescue arg
|
|
2365
|
+
{
|
|
2366
|
+
$$ = $1;
|
|
2367
|
+
void_expr_error(p, $4);
|
|
2368
|
+
void_expr_error(p, $6);
|
|
2369
|
+
defs_setup(p, $$, $2, new_mod_rescue(p, $4, $6));
|
|
2370
|
+
nvars_unnest(p);
|
|
2371
|
+
p->in_def--;
|
|
2372
|
+
p->in_single--;
|
|
2373
|
+
}
|
|
2249
2374
|
| primary
|
|
2250
2375
|
{
|
|
2251
2376
|
$$ = $1;
|
|
@@ -2285,19 +2410,35 @@ paren_args : '(' opt_call_args ')'
|
|
|
2285
2410
|
{
|
|
2286
2411
|
$$ = $2;
|
|
2287
2412
|
}
|
|
2288
|
-
| '('
|
|
2413
|
+
| '(' args comma tBDOT3 rparen
|
|
2289
2414
|
{
|
|
2290
2415
|
#if 1
|
|
2291
|
-
mrb_sym r =
|
|
2292
|
-
mrb_sym b =
|
|
2416
|
+
mrb_sym r = intern_op(mul);
|
|
2417
|
+
mrb_sym b = intern_op(and);
|
|
2418
|
+
$$ = cons(push($2, new_splat(p, new_lvar(p, r))),
|
|
2419
|
+
new_block_arg(p, new_lvar(p, b)));
|
|
2420
|
+
#else
|
|
2421
|
+
mrb_sym r = intern_op(mul);
|
|
2422
|
+
mrb_sym k = intern_op(pow);
|
|
2423
|
+
mrb_sym b = intern_op(and);
|
|
2424
|
+
$$ = cons(list2(push($2, new_splat(p, new_lvar(p, r))),
|
|
2425
|
+
new_kw_hash(p, list1(cons(new_kw_rest_args(p, 0), new_lvar(p, k))))),
|
|
2426
|
+
new_block_arg(p, new_lvar(p, b)));
|
|
2427
|
+
#endif
|
|
2428
|
+
}
|
|
2429
|
+
| '(' tBDOT3 rparen
|
|
2430
|
+
{
|
|
2431
|
+
#if 1
|
|
2432
|
+
mrb_sym r = intern_op(mul);
|
|
2433
|
+
mrb_sym b = intern_op(and);
|
|
2293
2434
|
if (local_var_p(p, r) && local_var_p(p, b)) {
|
|
2294
2435
|
$$ = cons(list1(new_splat(p, new_lvar(p, r))),
|
|
2295
2436
|
new_block_arg(p, new_lvar(p, b)));
|
|
2296
2437
|
}
|
|
2297
2438
|
#else
|
|
2298
|
-
mrb_sym r =
|
|
2299
|
-
mrb_sym k =
|
|
2300
|
-
mrb_sym b =
|
|
2439
|
+
mrb_sym r = intern_op(mul);
|
|
2440
|
+
mrb_sym k = intern_op(pow);
|
|
2441
|
+
mrb_sym b = intern_op(and);
|
|
2301
2442
|
if (local_var_p(p, r) && local_var_p(p, k) && local_var_p(p, b)) {
|
|
2302
2443
|
$$ = cons(list2(new_splat(p, new_lvar(p, r)),
|
|
2303
2444
|
new_kw_hash(p, list1(cons(new_kw_rest_args(p, 0), new_lvar(p, k))))),
|
|
@@ -2645,50 +2786,26 @@ primary : literal
|
|
|
2645
2786
|
local_resume(p, $<nd>3);
|
|
2646
2787
|
nvars_unnest(p);
|
|
2647
2788
|
}
|
|
2648
|
-
|
|
|
2649
|
-
{
|
|
2650
|
-
$<stack>$ = p->cmdarg_stack;
|
|
2651
|
-
p->cmdarg_stack = 0;
|
|
2652
|
-
}
|
|
2653
|
-
{
|
|
2654
|
-
p->in_def++;
|
|
2655
|
-
$<nd>$ = local_switch(p);
|
|
2656
|
-
nvars_block(p);
|
|
2657
|
-
}
|
|
2789
|
+
| defn_head
|
|
2658
2790
|
f_arglist
|
|
2659
2791
|
bodystmt
|
|
2660
2792
|
keyword_end
|
|
2661
2793
|
{
|
|
2662
|
-
$$ =
|
|
2663
|
-
|
|
2664
|
-
local_resume(p, $<nd>4);
|
|
2794
|
+
$$ = $1;
|
|
2795
|
+
defn_setup(p, $$, $2, $3);
|
|
2665
2796
|
nvars_unnest(p);
|
|
2666
2797
|
p->in_def--;
|
|
2667
|
-
p->cmdarg_stack = $<stack>3;
|
|
2668
|
-
}
|
|
2669
|
-
| keyword_def singleton dot_or_colon
|
|
2670
|
-
{
|
|
2671
|
-
p->lstate = EXPR_FNAME;
|
|
2672
|
-
$<stack>$ = p->cmdarg_stack;
|
|
2673
|
-
p->cmdarg_stack = 0;
|
|
2674
|
-
}
|
|
2675
|
-
fname
|
|
2676
|
-
{
|
|
2677
|
-
p->in_single++;
|
|
2678
|
-
p->lstate = EXPR_ENDFN; /* force for args */
|
|
2679
|
-
$<nd>$ = local_switch(p);
|
|
2680
|
-
nvars_block(p);
|
|
2681
2798
|
}
|
|
2799
|
+
| defs_head
|
|
2682
2800
|
f_arglist
|
|
2683
2801
|
bodystmt
|
|
2684
2802
|
keyword_end
|
|
2685
2803
|
{
|
|
2686
|
-
$$ =
|
|
2687
|
-
|
|
2688
|
-
local_resume(p, $<nd>6);
|
|
2804
|
+
$$ = $1;
|
|
2805
|
+
defs_setup(p, $$, $2, $3);
|
|
2689
2806
|
nvars_unnest(p);
|
|
2807
|
+
p->in_def--;
|
|
2690
2808
|
p->in_single--;
|
|
2691
|
-
p->cmdarg_stack = $<stack>4;
|
|
2692
2809
|
}
|
|
2693
2810
|
| keyword_break
|
|
2694
2811
|
{
|
|
@@ -2762,11 +2879,11 @@ f_margs : f_arg
|
|
|
2762
2879
|
| f_arg ',' tSTAR
|
|
2763
2880
|
{
|
|
2764
2881
|
local_add_f(p, 0);
|
|
2765
|
-
$$ = list3($1, (
|
|
2882
|
+
$$ = list3($1, nint(-1), 0);
|
|
2766
2883
|
}
|
|
2767
2884
|
| f_arg ',' tSTAR ',' f_arg
|
|
2768
2885
|
{
|
|
2769
|
-
$$ = list3($1, (
|
|
2886
|
+
$$ = list3($1, nint(-1), $5);
|
|
2770
2887
|
}
|
|
2771
2888
|
| tSTAR f_norm_arg
|
|
2772
2889
|
{
|
|
@@ -2779,7 +2896,7 @@ f_margs : f_arg
|
|
|
2779
2896
|
| tSTAR
|
|
2780
2897
|
{
|
|
2781
2898
|
local_add_f(p, 0);
|
|
2782
|
-
$$ = list3(0, (
|
|
2899
|
+
$$ = list3(0, nint(-1), 0);
|
|
2783
2900
|
}
|
|
2784
2901
|
| tSTAR ','
|
|
2785
2902
|
{
|
|
@@ -2787,7 +2904,7 @@ f_margs : f_arg
|
|
|
2787
2904
|
}
|
|
2788
2905
|
f_arg
|
|
2789
2906
|
{
|
|
2790
|
-
$$ = list3(0, (
|
|
2907
|
+
$$ = list3(0, nint(-1), $4);
|
|
2791
2908
|
}
|
|
2792
2909
|
;
|
|
2793
2910
|
|
|
@@ -2968,7 +3085,7 @@ do_block : keyword_do_block
|
|
|
2968
3085
|
|
|
2969
3086
|
block_call : command do_block
|
|
2970
3087
|
{
|
|
2971
|
-
if ($1->car ==
|
|
3088
|
+
if (typen($1->car) == NODE_YIELD) {
|
|
2972
3089
|
yyerror(p, "block given to yield");
|
|
2973
3090
|
}
|
|
2974
3091
|
else {
|
|
@@ -3010,11 +3127,11 @@ method_call : operation paren_args
|
|
|
3010
3127
|
}
|
|
3011
3128
|
| primary_value call_op paren_args
|
|
3012
3129
|
{
|
|
3013
|
-
$$ = new_call(p, $1,
|
|
3130
|
+
$$ = new_call(p, $1, MRB_SYM_2(p->mrb, call), $3, $2);
|
|
3014
3131
|
}
|
|
3015
3132
|
| primary_value tCOLON2 paren_args
|
|
3016
3133
|
{
|
|
3017
|
-
$$ = new_call(p, $1,
|
|
3134
|
+
$$ = new_call(p, $1, MRB_SYM_2(p->mrb, call), $3, tCOLON2);
|
|
3018
3135
|
}
|
|
3019
3136
|
| keyword_super paren_args
|
|
3020
3137
|
{
|
|
@@ -3026,7 +3143,7 @@ method_call : operation paren_args
|
|
|
3026
3143
|
}
|
|
3027
3144
|
| primary_value '[' opt_call_args ']'
|
|
3028
3145
|
{
|
|
3029
|
-
$$ = new_call(p, $1,
|
|
3146
|
+
$$ = new_call(p, $1, intern_op(aref), $3, '.');
|
|
3030
3147
|
}
|
|
3031
3148
|
;
|
|
3032
3149
|
|
|
@@ -3399,30 +3516,51 @@ superclass : /* term */
|
|
|
3399
3516
|
} */
|
|
3400
3517
|
;
|
|
3401
3518
|
|
|
3402
|
-
|
|
3519
|
+
f_arglist_paren : '(' f_args rparen
|
|
3403
3520
|
{
|
|
3404
3521
|
$$ = $2;
|
|
3405
3522
|
p->lstate = EXPR_BEG;
|
|
3406
3523
|
p->cmd_start = TRUE;
|
|
3407
3524
|
}
|
|
3408
|
-
| '('
|
|
3525
|
+
| '(' f_arg ',' tBDOT3 rparen
|
|
3409
3526
|
{
|
|
3410
3527
|
#if 1
|
|
3411
3528
|
/* til real keyword args implemented */
|
|
3412
|
-
mrb_sym r =
|
|
3413
|
-
mrb_sym b =
|
|
3529
|
+
mrb_sym r = intern_op(mul);
|
|
3530
|
+
mrb_sym b = intern_op(and);
|
|
3531
|
+
local_add_f(p, r);
|
|
3532
|
+
$$ = new_args(p, $2, 0, r, 0,
|
|
3533
|
+
new_args_tail(p, 0, 0, b));
|
|
3534
|
+
#else
|
|
3535
|
+
mrb_sym r = intern_op(mul);
|
|
3536
|
+
mrb_sym k = intern_op(pow);
|
|
3537
|
+
mrb_sym b = intern_op(and);
|
|
3538
|
+
local_add_f(p, r); local_add_f(p, k);
|
|
3539
|
+
$$ = new_args(p, $2, 0, r, 0,
|
|
3540
|
+
new_args_tail(p, 0, new_kw_rest_args(p, nsym(k)), b));
|
|
3541
|
+
#endif
|
|
3542
|
+
}
|
|
3543
|
+
| '(' tBDOT3 rparen
|
|
3544
|
+
{
|
|
3545
|
+
#if 1
|
|
3546
|
+
/* til real keyword args implemented */
|
|
3547
|
+
mrb_sym r = intern_op(mul);
|
|
3548
|
+
mrb_sym b = intern_op(and);
|
|
3414
3549
|
local_add_f(p, r);
|
|
3415
3550
|
$$ = new_args(p, 0, 0, r, 0,
|
|
3416
3551
|
new_args_tail(p, 0, 0, b));
|
|
3417
3552
|
#else
|
|
3418
|
-
mrb_sym r =
|
|
3419
|
-
mrb_sym k =
|
|
3420
|
-
mrb_sym b =
|
|
3553
|
+
mrb_sym r = intern_op(mul);
|
|
3554
|
+
mrb_sym k = intern_op(pow);
|
|
3555
|
+
mrb_sym b = intern_op(and);
|
|
3421
3556
|
local_add_f(p, r); local_add_f(p, k);
|
|
3422
3557
|
$$ = new_args(p, 0, 0, r, 0,
|
|
3423
3558
|
new_args_tail(p, 0, new_kw_rest_args(p, nsym(k)), b));
|
|
3424
3559
|
#endif
|
|
3425
3560
|
}
|
|
3561
|
+
;
|
|
3562
|
+
|
|
3563
|
+
f_arglist : f_arglist_paren
|
|
3426
3564
|
| f_args term
|
|
3427
3565
|
{
|
|
3428
3566
|
$$ = $1;
|
|
@@ -3580,7 +3718,7 @@ f_args : f_arg ',' f_optarg ',' f_rest_arg opt_args_tail
|
|
|
3580
3718
|
}
|
|
3581
3719
|
| /* none */
|
|
3582
3720
|
{
|
|
3583
|
-
local_add_f(p,
|
|
3721
|
+
local_add_f(p, intern_op(and));
|
|
3584
3722
|
$$ = new_args(p, 0, 0, 0, 0, 0);
|
|
3585
3723
|
}
|
|
3586
3724
|
;
|
|
@@ -3704,7 +3842,7 @@ f_rest_arg : restarg_mark tIDENTIFIER
|
|
|
3704
3842
|
}
|
|
3705
3843
|
| restarg_mark
|
|
3706
3844
|
{
|
|
3707
|
-
local_add_f(p,
|
|
3845
|
+
local_add_f(p, intern_op(mul));
|
|
3708
3846
|
$$ = -1;
|
|
3709
3847
|
}
|
|
3710
3848
|
;
|
|
@@ -3740,7 +3878,7 @@ singleton : var_ref
|
|
|
3740
3878
|
yyerror(p, "can't define singleton method for ().");
|
|
3741
3879
|
}
|
|
3742
3880
|
else {
|
|
3743
|
-
switch ((
|
|
3881
|
+
switch (typen($3->car)) {
|
|
3744
3882
|
case NODE_STR:
|
|
3745
3883
|
case NODE_DSTR:
|
|
3746
3884
|
case NODE_XSTR:
|
|
@@ -3795,7 +3933,7 @@ assoc : arg tASSOC arg
|
|
|
3795
3933
|
| string_fragment label_tag arg
|
|
3796
3934
|
{
|
|
3797
3935
|
void_expr_error(p, $3);
|
|
3798
|
-
if ($1->car ==
|
|
3936
|
+
if (typen($1->car) == NODE_DSTR) {
|
|
3799
3937
|
$$ = cons(new_dsym(p, $1), $3);
|
|
3800
3938
|
}
|
|
3801
3939
|
else {
|
|
@@ -3893,7 +4031,7 @@ yyerror(parser_state *p, const char *s)
|
|
|
3893
4031
|
size_t n;
|
|
3894
4032
|
|
|
3895
4033
|
if (! p->capture_errors) {
|
|
3896
|
-
#ifndef
|
|
4034
|
+
#ifndef MRB_NO_STDIO
|
|
3897
4035
|
if (p->filename_sym) {
|
|
3898
4036
|
const char *filename = mrb_sym_name_len(p->mrb, p->filename_sym, NULL);
|
|
3899
4037
|
fprintf(stderr, "%s:%d:%d: %s\n", filename, p->lineno, p->column, s);
|
|
@@ -3932,7 +4070,7 @@ yywarn(parser_state *p, const char *s)
|
|
|
3932
4070
|
size_t n;
|
|
3933
4071
|
|
|
3934
4072
|
if (! p->capture_errors) {
|
|
3935
|
-
#ifndef
|
|
4073
|
+
#ifndef MRB_NO_STDIO
|
|
3936
4074
|
if (p->filename_sym) {
|
|
3937
4075
|
const char *filename = mrb_sym_name_len(p->mrb, p->filename_sym, NULL);
|
|
3938
4076
|
fprintf(stderr, "%s:%d:%d: warning: %s\n", filename, p->lineno, p->column, s);
|
|
@@ -4032,20 +4170,20 @@ static inline int
|
|
|
4032
4170
|
nextc0(parser_state *p)
|
|
4033
4171
|
{
|
|
4034
4172
|
int c;
|
|
4035
|
-
|
|
4036
|
-
if (p->
|
|
4037
|
-
|
|
4038
|
-
c = fgetc(p->f);
|
|
4039
|
-
if (c == EOF) return -1;
|
|
4173
|
+
|
|
4174
|
+
if (p->s && p->s < p->send) {
|
|
4175
|
+
c = (unsigned char)*p->s++;
|
|
4040
4176
|
}
|
|
4041
|
-
else
|
|
4177
|
+
else {
|
|
4178
|
+
#ifndef MRB_NO_STDIO
|
|
4179
|
+
if (p->f) {
|
|
4180
|
+
c = fgetc(p->f);
|
|
4181
|
+
if (feof(p->f)) return -1;
|
|
4182
|
+
}
|
|
4183
|
+
else
|
|
4042
4184
|
#endif
|
|
4043
|
-
if (!p->s || p->s >= p->send) {
|
|
4044
4185
|
return -1;
|
|
4045
|
-
|
|
4046
|
-
else {
|
|
4047
|
-
c = (unsigned char)*p->s++;
|
|
4048
|
-
}
|
|
4186
|
+
}
|
|
4049
4187
|
return c;
|
|
4050
4188
|
}
|
|
4051
4189
|
|
|
@@ -4121,7 +4259,7 @@ peekc_n(parser_state *p, int n)
|
|
|
4121
4259
|
list = push(list, nint(c0));
|
|
4122
4260
|
} while(n--);
|
|
4123
4261
|
if (p->pb) {
|
|
4124
|
-
p->pb = append(
|
|
4262
|
+
p->pb = append(list, p->pb);
|
|
4125
4263
|
}
|
|
4126
4264
|
else {
|
|
4127
4265
|
p->pb = list;
|
|
@@ -4141,7 +4279,7 @@ peeks(parser_state *p, const char *s)
|
|
|
4141
4279
|
{
|
|
4142
4280
|
size_t len = strlen(s);
|
|
4143
4281
|
|
|
4144
|
-
#ifndef
|
|
4282
|
+
#ifndef MRB_NO_STDIO
|
|
4145
4283
|
if (p->f) {
|
|
4146
4284
|
int n = 0;
|
|
4147
4285
|
while (*s) {
|
|
@@ -4499,6 +4637,88 @@ read_escape(parser_state *p)
|
|
|
4499
4637
|
}
|
|
4500
4638
|
}
|
|
4501
4639
|
|
|
4640
|
+
static void
|
|
4641
|
+
heredoc_count_indent(parser_heredoc_info *hinf, const char *str, size_t len, size_t spaces, size_t *offset)
|
|
4642
|
+
{
|
|
4643
|
+
size_t indent = 0;
|
|
4644
|
+
*offset = 0;
|
|
4645
|
+
for (size_t i = 0; i < len; i++) {
|
|
4646
|
+
size_t size;
|
|
4647
|
+
if (str[i] == '\n')
|
|
4648
|
+
break;
|
|
4649
|
+
else if (str[i] == '\t')
|
|
4650
|
+
size = 8;
|
|
4651
|
+
else if (ISSPACE(str[i]))
|
|
4652
|
+
size = 1;
|
|
4653
|
+
else
|
|
4654
|
+
break;
|
|
4655
|
+
size_t nindent = indent + size;
|
|
4656
|
+
if (nindent > spaces || nindent > hinf->indent)
|
|
4657
|
+
break;
|
|
4658
|
+
indent = nindent;
|
|
4659
|
+
*offset += 1;
|
|
4660
|
+
}
|
|
4661
|
+
}
|
|
4662
|
+
|
|
4663
|
+
static void
|
|
4664
|
+
heredoc_remove_indent(parser_state *p, parser_heredoc_info *hinf)
|
|
4665
|
+
{
|
|
4666
|
+
if (!hinf->remove_indent || hinf->indent == 0)
|
|
4667
|
+
return;
|
|
4668
|
+
node *indented, *n, *pair, *escaped, *nspaces;
|
|
4669
|
+
const char *str;
|
|
4670
|
+
size_t len, spaces, offset, start, end;
|
|
4671
|
+
indented = hinf->indented;
|
|
4672
|
+
while (indented) {
|
|
4673
|
+
n = indented->car;
|
|
4674
|
+
pair = n->car;
|
|
4675
|
+
str = (char*)pair->car;
|
|
4676
|
+
len = (size_t)pair->cdr;
|
|
4677
|
+
escaped = n->cdr->car;
|
|
4678
|
+
nspaces = n->cdr->cdr;
|
|
4679
|
+
if (escaped) {
|
|
4680
|
+
char *newstr = strndup(str, len);
|
|
4681
|
+
size_t newlen = 0;
|
|
4682
|
+
start = 0;
|
|
4683
|
+
while (start < len) {
|
|
4684
|
+
end = escaped ? (size_t)escaped->car : len;
|
|
4685
|
+
spaces = (size_t)nspaces->car;
|
|
4686
|
+
size_t esclen = end - start;
|
|
4687
|
+
heredoc_count_indent(hinf, str + start, esclen, spaces, &offset);
|
|
4688
|
+
esclen -= offset;
|
|
4689
|
+
memcpy(newstr + newlen, str + start + offset, esclen);
|
|
4690
|
+
newlen += esclen;
|
|
4691
|
+
start = end;
|
|
4692
|
+
if (escaped)
|
|
4693
|
+
escaped = escaped->cdr;
|
|
4694
|
+
nspaces = nspaces->cdr;
|
|
4695
|
+
}
|
|
4696
|
+
if (newlen < len)
|
|
4697
|
+
newstr[newlen] = '\0';
|
|
4698
|
+
pair->car = (node*)newstr;
|
|
4699
|
+
pair->cdr = (node*)newlen;
|
|
4700
|
+
} else {
|
|
4701
|
+
spaces = (size_t)nspaces->car;
|
|
4702
|
+
heredoc_count_indent(hinf, str, len, spaces, &offset);
|
|
4703
|
+
pair->car = (node*)(str + offset);
|
|
4704
|
+
pair->cdr = (node*)(len - offset);
|
|
4705
|
+
}
|
|
4706
|
+
indented = indented->cdr;
|
|
4707
|
+
}
|
|
4708
|
+
}
|
|
4709
|
+
|
|
4710
|
+
static void
|
|
4711
|
+
heredoc_push_indented(parser_state *p, parser_heredoc_info *hinf, node *pair, node *escaped, node *nspaces, mrb_bool empty_line)
|
|
4712
|
+
{
|
|
4713
|
+
hinf->indented = push(hinf->indented, cons(pair, cons(escaped, nspaces)));
|
|
4714
|
+
while (nspaces) {
|
|
4715
|
+
size_t tspaces = (size_t)nspaces->car;
|
|
4716
|
+
if ((hinf->indent == ~0U || tspaces < hinf->indent) && !empty_line)
|
|
4717
|
+
hinf->indent = tspaces;
|
|
4718
|
+
nspaces = nspaces->cdr;
|
|
4719
|
+
}
|
|
4720
|
+
}
|
|
4721
|
+
|
|
4502
4722
|
static int
|
|
4503
4723
|
parse_string(parser_state *p)
|
|
4504
4724
|
{
|
|
@@ -4509,10 +4729,19 @@ parse_string(parser_state *p)
|
|
|
4509
4729
|
int end = intn(p->lex_strterm->cdr->cdr->cdr);
|
|
4510
4730
|
parser_heredoc_info *hinf = (type & STR_FUNC_HEREDOC) ? parsing_heredoc_inf(p) : NULL;
|
|
4511
4731
|
|
|
4732
|
+
mrb_bool unindent = hinf && hinf->remove_indent;
|
|
4733
|
+
mrb_bool head = hinf && hinf->line_head;
|
|
4734
|
+
mrb_bool empty = TRUE;
|
|
4735
|
+
size_t spaces = 0;
|
|
4736
|
+
size_t pos = -1;
|
|
4737
|
+
node *escaped = NULL;
|
|
4738
|
+
node *nspaces = NULL;
|
|
4739
|
+
|
|
4512
4740
|
if (beg == 0) beg = -3; /* should never happen */
|
|
4513
4741
|
if (end == 0) end = -3;
|
|
4514
4742
|
newtok(p);
|
|
4515
4743
|
while ((c = nextc(p)) != end || nest_level != 0) {
|
|
4744
|
+
pos++;
|
|
4516
4745
|
if (hinf && (c == '\n' || c < 0)) {
|
|
4517
4746
|
mrb_bool line_head;
|
|
4518
4747
|
tokadd(p, '\n');
|
|
@@ -4532,6 +4761,7 @@ parse_string(parser_state *p)
|
|
|
4532
4761
|
}
|
|
4533
4762
|
}
|
|
4534
4763
|
if ((len-1 == hinf->term_len) && (strncmp(s, hinf->term, len-1) == 0)) {
|
|
4764
|
+
heredoc_remove_indent(p, hinf);
|
|
4535
4765
|
return tHEREDOC_END;
|
|
4536
4766
|
}
|
|
4537
4767
|
}
|
|
@@ -4550,9 +4780,22 @@ parse_string(parser_state *p)
|
|
|
4550
4780
|
}
|
|
4551
4781
|
return 0;
|
|
4552
4782
|
}
|
|
4553
|
-
|
|
4783
|
+
node *nd = new_str(p, tok(p), toklen(p));
|
|
4784
|
+
pylval.nd = nd;
|
|
4785
|
+
if (unindent && head) {
|
|
4786
|
+
nspaces = push(nspaces, nint(spaces));
|
|
4787
|
+
heredoc_push_indented(p, hinf, nd->cdr, escaped, nspaces, empty && line_head);
|
|
4788
|
+
}
|
|
4554
4789
|
return tHD_STRING_MID;
|
|
4555
4790
|
}
|
|
4791
|
+
if (unindent && empty) {
|
|
4792
|
+
if (c == '\t')
|
|
4793
|
+
spaces += 8;
|
|
4794
|
+
else if (ISSPACE(c))
|
|
4795
|
+
++spaces;
|
|
4796
|
+
else
|
|
4797
|
+
empty = FALSE;
|
|
4798
|
+
}
|
|
4556
4799
|
if (c < 0) {
|
|
4557
4800
|
yyerror(p, "unterminated string meets end of file");
|
|
4558
4801
|
return 0;
|
|
@@ -4574,6 +4817,13 @@ parse_string(parser_state *p)
|
|
|
4574
4817
|
else if (c == '\n') {
|
|
4575
4818
|
p->lineno++;
|
|
4576
4819
|
p->column = 0;
|
|
4820
|
+
if (unindent) {
|
|
4821
|
+
nspaces = push(nspaces, nint(spaces));
|
|
4822
|
+
escaped = push(escaped, nint(pos));
|
|
4823
|
+
pos--;
|
|
4824
|
+
empty = TRUE;
|
|
4825
|
+
spaces = 0;
|
|
4826
|
+
}
|
|
4577
4827
|
if (type & STR_FUNC_ARRAY) {
|
|
4578
4828
|
tokadd(p, '\n');
|
|
4579
4829
|
}
|
|
@@ -4623,8 +4873,13 @@ parse_string(parser_state *p)
|
|
|
4623
4873
|
tokfix(p);
|
|
4624
4874
|
p->lstate = EXPR_BEG;
|
|
4625
4875
|
p->cmd_start = TRUE;
|
|
4626
|
-
|
|
4876
|
+
node *nd = new_str(p, tok(p), toklen(p));
|
|
4877
|
+
pylval.nd = nd;
|
|
4627
4878
|
if (hinf) {
|
|
4879
|
+
if (unindent && head) {
|
|
4880
|
+
nspaces = push(nspaces, nint(spaces));
|
|
4881
|
+
heredoc_push_indented(p, hinf, nd->cdr, escaped, nspaces, FALSE);
|
|
4882
|
+
}
|
|
4628
4883
|
hinf->line_head = FALSE;
|
|
4629
4884
|
return tHD_STRING_PART;
|
|
4630
4885
|
}
|
|
@@ -4745,7 +5000,7 @@ number_literal_suffix(parser_state *p)
|
|
|
4745
5000
|
int mask = NUM_SUFFIX_R|NUM_SUFFIX_I;
|
|
4746
5001
|
|
|
4747
5002
|
while ((c = nextc(p)) != -1) {
|
|
4748
|
-
list = push(list, (
|
|
5003
|
+
list = push(list, nint(c));
|
|
4749
5004
|
|
|
4750
5005
|
if ((mask & NUM_SUFFIX_I) && c == 'i') {
|
|
4751
5006
|
result |= (mask & NUM_SUFFIX_I);
|
|
@@ -4762,7 +5017,7 @@ number_literal_suffix(parser_state *p)
|
|
|
4762
5017
|
if (!ISASCII(c) || ISALPHA(c) || c == '_') {
|
|
4763
5018
|
p->column = column;
|
|
4764
5019
|
if (p->pb) {
|
|
4765
|
-
p->pb = append(
|
|
5020
|
+
p->pb = append(list, p->pb);
|
|
4766
5021
|
}
|
|
4767
5022
|
else {
|
|
4768
5023
|
p->pb = list;
|
|
@@ -4781,6 +5036,7 @@ heredoc_identifier(parser_state *p)
|
|
|
4781
5036
|
int c;
|
|
4782
5037
|
int type = str_heredoc;
|
|
4783
5038
|
mrb_bool indent = FALSE;
|
|
5039
|
+
mrb_bool squiggly = FALSE;
|
|
4784
5040
|
mrb_bool quote = FALSE;
|
|
4785
5041
|
node *newnode;
|
|
4786
5042
|
parser_heredoc_info *info;
|
|
@@ -4790,8 +5046,11 @@ heredoc_identifier(parser_state *p)
|
|
|
4790
5046
|
pushback(p, c);
|
|
4791
5047
|
return 0;
|
|
4792
5048
|
}
|
|
4793
|
-
if (c == '-') {
|
|
4794
|
-
|
|
5049
|
+
if (c == '-' || c == '~') {
|
|
5050
|
+
if (c == '-')
|
|
5051
|
+
indent = TRUE;
|
|
5052
|
+
if (c == '~')
|
|
5053
|
+
squiggly = TRUE;
|
|
4795
5054
|
c = nextc(p);
|
|
4796
5055
|
}
|
|
4797
5056
|
if (c == '\'' || c == '"') {
|
|
@@ -4818,6 +5077,7 @@ heredoc_identifier(parser_state *p)
|
|
|
4818
5077
|
if (! identchar(c)) {
|
|
4819
5078
|
pushback(p, c);
|
|
4820
5079
|
if (indent) pushback(p, '-');
|
|
5080
|
+
if (squiggly) pushback(p, '~');
|
|
4821
5081
|
return 0;
|
|
4822
5082
|
}
|
|
4823
5083
|
newtok(p);
|
|
@@ -4834,7 +5094,10 @@ heredoc_identifier(parser_state *p)
|
|
|
4834
5094
|
if (! quote)
|
|
4835
5095
|
type |= STR_FUNC_EXPAND;
|
|
4836
5096
|
info->type = (string_type)type;
|
|
4837
|
-
info->allow_indent = indent;
|
|
5097
|
+
info->allow_indent = indent || squiggly;
|
|
5098
|
+
info->remove_indent = squiggly;
|
|
5099
|
+
info->indent = ~0U;
|
|
5100
|
+
info->indented = NULL;
|
|
4838
5101
|
info->line_head = TRUE;
|
|
4839
5102
|
info->doc = NULL;
|
|
4840
5103
|
p->heredocs_from_nextline = push(p->heredocs_from_nextline, newnode);
|
|
@@ -4961,7 +5224,7 @@ parser_yylex(parser_state *p)
|
|
|
4961
5224
|
case '*':
|
|
4962
5225
|
if ((c = nextc(p)) == '*') {
|
|
4963
5226
|
if ((c = nextc(p)) == '=') {
|
|
4964
|
-
pylval.id =
|
|
5227
|
+
pylval.id = intern_op(pow);
|
|
4965
5228
|
p->lstate = EXPR_BEG;
|
|
4966
5229
|
return tOP_ASGN;
|
|
4967
5230
|
}
|
|
@@ -4979,7 +5242,7 @@ parser_yylex(parser_state *p)
|
|
|
4979
5242
|
}
|
|
4980
5243
|
else {
|
|
4981
5244
|
if (c == '=') {
|
|
4982
|
-
pylval.id =
|
|
5245
|
+
pylval.id = intern_op(mul);
|
|
4983
5246
|
p->lstate = EXPR_BEG;
|
|
4984
5247
|
return tOP_ASGN;
|
|
4985
5248
|
}
|
|
@@ -5095,7 +5358,7 @@ parser_yylex(parser_state *p)
|
|
|
5095
5358
|
}
|
|
5096
5359
|
if (c == '<') {
|
|
5097
5360
|
if ((c = nextc(p)) == '=') {
|
|
5098
|
-
pylval.id =
|
|
5361
|
+
pylval.id = intern_op(lshift);
|
|
5099
5362
|
p->lstate = EXPR_BEG;
|
|
5100
5363
|
return tOP_ASGN;
|
|
5101
5364
|
}
|
|
@@ -5117,7 +5380,7 @@ parser_yylex(parser_state *p)
|
|
|
5117
5380
|
}
|
|
5118
5381
|
if (c == '>') {
|
|
5119
5382
|
if ((c = nextc(p)) == '=') {
|
|
5120
|
-
pylval.id =
|
|
5383
|
+
pylval.id = intern_op(rshift);
|
|
5121
5384
|
p->lstate = EXPR_BEG;
|
|
5122
5385
|
return tOP_ASGN;
|
|
5123
5386
|
}
|
|
@@ -5225,7 +5488,7 @@ parser_yylex(parser_state *p)
|
|
|
5225
5488
|
if ((c = nextc(p)) == '&') {
|
|
5226
5489
|
p->lstate = EXPR_BEG;
|
|
5227
5490
|
if ((c = nextc(p)) == '=') {
|
|
5228
|
-
pylval.id =
|
|
5491
|
+
pylval.id = intern_op(andand);
|
|
5229
5492
|
p->lstate = EXPR_BEG;
|
|
5230
5493
|
return tOP_ASGN;
|
|
5231
5494
|
}
|
|
@@ -5237,7 +5500,7 @@ parser_yylex(parser_state *p)
|
|
|
5237
5500
|
return tANDDOT;
|
|
5238
5501
|
}
|
|
5239
5502
|
else if (c == '=') {
|
|
5240
|
-
pylval.id =
|
|
5503
|
+
pylval.id = intern_op(and);
|
|
5241
5504
|
p->lstate = EXPR_BEG;
|
|
5242
5505
|
return tOP_ASGN;
|
|
5243
5506
|
}
|
|
@@ -5264,7 +5527,7 @@ parser_yylex(parser_state *p)
|
|
|
5264
5527
|
if ((c = nextc(p)) == '|') {
|
|
5265
5528
|
p->lstate = EXPR_BEG;
|
|
5266
5529
|
if ((c = nextc(p)) == '=') {
|
|
5267
|
-
pylval.id =
|
|
5530
|
+
pylval.id = intern_op(oror);
|
|
5268
5531
|
p->lstate = EXPR_BEG;
|
|
5269
5532
|
return tOP_ASGN;
|
|
5270
5533
|
}
|
|
@@ -5272,7 +5535,7 @@ parser_yylex(parser_state *p)
|
|
|
5272
5535
|
return tOROP;
|
|
5273
5536
|
}
|
|
5274
5537
|
if (c == '=') {
|
|
5275
|
-
pylval.id =
|
|
5538
|
+
pylval.id = intern_op(or);
|
|
5276
5539
|
p->lstate = EXPR_BEG;
|
|
5277
5540
|
return tOP_ASGN;
|
|
5278
5541
|
}
|
|
@@ -5296,7 +5559,7 @@ parser_yylex(parser_state *p)
|
|
|
5296
5559
|
return '+';
|
|
5297
5560
|
}
|
|
5298
5561
|
if (c == '=') {
|
|
5299
|
-
pylval.id =
|
|
5562
|
+
pylval.id = intern_op(add);
|
|
5300
5563
|
p->lstate = EXPR_BEG;
|
|
5301
5564
|
return tOP_ASGN;
|
|
5302
5565
|
}
|
|
@@ -5324,7 +5587,7 @@ parser_yylex(parser_state *p)
|
|
|
5324
5587
|
return '-';
|
|
5325
5588
|
}
|
|
5326
5589
|
if (c == '=') {
|
|
5327
|
-
pylval.id =
|
|
5590
|
+
pylval.id = intern_op(sub);
|
|
5328
5591
|
p->lstate = EXPR_BEG;
|
|
5329
5592
|
return tOP_ASGN;
|
|
5330
5593
|
}
|
|
@@ -5345,20 +5608,23 @@ parser_yylex(parser_state *p)
|
|
|
5345
5608
|
return '-';
|
|
5346
5609
|
|
|
5347
5610
|
case '.':
|
|
5348
|
-
|
|
5349
|
-
|
|
5611
|
+
{
|
|
5612
|
+
int is_beg = IS_BEG();
|
|
5613
|
+
p->lstate = EXPR_BEG;
|
|
5350
5614
|
if ((c = nextc(p)) == '.') {
|
|
5351
|
-
|
|
5615
|
+
if ((c = nextc(p)) == '.') {
|
|
5616
|
+
return is_beg ? tBDOT3 : tDOT3;
|
|
5617
|
+
}
|
|
5618
|
+
pushback(p, c);
|
|
5619
|
+
return is_beg ? tBDOT2 : tDOT2;
|
|
5352
5620
|
}
|
|
5353
5621
|
pushback(p, c);
|
|
5354
|
-
|
|
5355
|
-
|
|
5356
|
-
|
|
5357
|
-
|
|
5358
|
-
|
|
5622
|
+
if (c >= 0 && ISDIGIT(c)) {
|
|
5623
|
+
yyerror(p, "no .<digit> floating literal anymore; put 0 before dot");
|
|
5624
|
+
}
|
|
5625
|
+
p->lstate = EXPR_DOT;
|
|
5626
|
+
return '.';
|
|
5359
5627
|
}
|
|
5360
|
-
p->lstate = EXPR_DOT;
|
|
5361
|
-
return '.';
|
|
5362
5628
|
|
|
5363
5629
|
start_num:
|
|
5364
5630
|
case '0': case '1': case '2': case '3': case '4':
|
|
@@ -5574,7 +5840,7 @@ parser_yylex(parser_state *p)
|
|
|
5574
5840
|
}
|
|
5575
5841
|
tokfix(p);
|
|
5576
5842
|
if (is_float) {
|
|
5577
|
-
#ifdef
|
|
5843
|
+
#ifdef MRB_NO_FLOAT
|
|
5578
5844
|
yywarning_s(p, "floating point numbers are not supported", tok(p));
|
|
5579
5845
|
pylval.nd = new_int(p, "0", 10, 0);
|
|
5580
5846
|
return tINTEGER;
|
|
@@ -5592,6 +5858,10 @@ parser_yylex(parser_state *p)
|
|
|
5592
5858
|
errno = 0;
|
|
5593
5859
|
}
|
|
5594
5860
|
suffix = number_literal_suffix(p);
|
|
5861
|
+
if (seen_e && (suffix & NUM_SUFFIX_R)) {
|
|
5862
|
+
pushback(p, 'r');
|
|
5863
|
+
suffix &= ~NUM_SUFFIX_R;
|
|
5864
|
+
}
|
|
5595
5865
|
pylval.nd = new_float(p, tok(p), suffix);
|
|
5596
5866
|
return tFLOAT;
|
|
5597
5867
|
#endif
|
|
@@ -5629,14 +5899,14 @@ parser_yylex(parser_state *p)
|
|
|
5629
5899
|
p->lstate = EXPR_BEG;
|
|
5630
5900
|
return tLABEL_TAG;
|
|
5631
5901
|
}
|
|
5632
|
-
if (
|
|
5902
|
+
if (IS_END() || ISSPACE(c) || c == '#') {
|
|
5633
5903
|
pushback(p, c);
|
|
5634
|
-
p->lstate =
|
|
5635
|
-
return
|
|
5904
|
+
p->lstate = EXPR_BEG;
|
|
5905
|
+
return ':';
|
|
5636
5906
|
}
|
|
5637
5907
|
pushback(p, c);
|
|
5638
|
-
p->lstate =
|
|
5639
|
-
return
|
|
5908
|
+
p->lstate = EXPR_FNAME;
|
|
5909
|
+
return tSYMBEG;
|
|
5640
5910
|
|
|
5641
5911
|
case '/':
|
|
5642
5912
|
if (IS_BEG()) {
|
|
@@ -5644,7 +5914,7 @@ parser_yylex(parser_state *p)
|
|
|
5644
5914
|
return tREGEXP_BEG;
|
|
5645
5915
|
}
|
|
5646
5916
|
if ((c = nextc(p)) == '=') {
|
|
5647
|
-
pylval.id =
|
|
5917
|
+
pylval.id = intern_op(div);
|
|
5648
5918
|
p->lstate = EXPR_BEG;
|
|
5649
5919
|
return tOP_ASGN;
|
|
5650
5920
|
}
|
|
@@ -5663,7 +5933,7 @@ parser_yylex(parser_state *p)
|
|
|
5663
5933
|
|
|
5664
5934
|
case '^':
|
|
5665
5935
|
if ((c = nextc(p)) == '=') {
|
|
5666
|
-
pylval.id =
|
|
5936
|
+
pylval.id = intern_op(xor);
|
|
5667
5937
|
p->lstate = EXPR_BEG;
|
|
5668
5938
|
return tOP_ASGN;
|
|
5669
5939
|
}
|
|
@@ -5716,6 +5986,7 @@ parser_yylex(parser_state *p)
|
|
|
5716
5986
|
p->paren_nest++;
|
|
5717
5987
|
if (p->lstate == EXPR_FNAME || p->lstate == EXPR_DOT) {
|
|
5718
5988
|
p->lstate = EXPR_ARG;
|
|
5989
|
+
p->paren_nest--;
|
|
5719
5990
|
if ((c = nextc(p)) == ']') {
|
|
5720
5991
|
if ((c = nextc(p)) == '=') {
|
|
5721
5992
|
return tASET;
|
|
@@ -5840,7 +6111,7 @@ parser_yylex(parser_state *p)
|
|
|
5840
6111
|
}
|
|
5841
6112
|
}
|
|
5842
6113
|
if ((c = nextc(p)) == '=') {
|
|
5843
|
-
pylval.id =
|
|
6114
|
+
pylval.id = intern_op(mod);
|
|
5844
6115
|
p->lstate = EXPR_BEG;
|
|
5845
6116
|
return tOP_ASGN;
|
|
5846
6117
|
}
|
|
@@ -6043,7 +6314,7 @@ parser_yylex(parser_state *p)
|
|
|
6043
6314
|
break;
|
|
6044
6315
|
|
|
6045
6316
|
case '_':
|
|
6046
|
-
if (toklen(p) == 2 && ISDIGIT(tok(p)[1]) && p->nvars) {
|
|
6317
|
+
if (p->lstate != EXPR_FNAME && toklen(p) == 2 && ISDIGIT(tok(p)[1]) && p->nvars) {
|
|
6047
6318
|
int n = tok(p)[1] - '0';
|
|
6048
6319
|
int nvar;
|
|
6049
6320
|
|
|
@@ -6304,7 +6575,7 @@ mrb_parser_new(mrb_state *mrb)
|
|
|
6304
6575
|
p->pool = pool;
|
|
6305
6576
|
|
|
6306
6577
|
p->s = p->send = NULL;
|
|
6307
|
-
#ifndef
|
|
6578
|
+
#ifndef MRB_NO_STDIO
|
|
6308
6579
|
p->f = NULL;
|
|
6309
6580
|
#endif
|
|
6310
6581
|
|
|
@@ -6376,11 +6647,21 @@ mrbc_partial_hook(mrb_state *mrb, mrbc_context *c, int (*func)(struct mrb_parser
|
|
|
6376
6647
|
c->partial_data = data;
|
|
6377
6648
|
}
|
|
6378
6649
|
|
|
6650
|
+
MRB_API void
|
|
6651
|
+
mrbc_cleanup_local_variables(mrb_state *mrb, mrbc_context *c)
|
|
6652
|
+
{
|
|
6653
|
+
if (c->syms) {
|
|
6654
|
+
mrb_free(mrb, c->syms);
|
|
6655
|
+
c->syms = NULL;
|
|
6656
|
+
c->slen = 0;
|
|
6657
|
+
}
|
|
6658
|
+
}
|
|
6659
|
+
|
|
6379
6660
|
MRB_API void
|
|
6380
6661
|
mrb_parser_set_filename(struct mrb_parser_state *p, const char *f)
|
|
6381
6662
|
{
|
|
6382
6663
|
mrb_sym sym;
|
|
6383
|
-
|
|
6664
|
+
uint16_t i;
|
|
6384
6665
|
mrb_sym* new_table;
|
|
6385
6666
|
|
|
6386
6667
|
sym = mrb_intern_cstr(p->mrb, f);
|
|
@@ -6389,7 +6670,7 @@ mrb_parser_set_filename(struct mrb_parser_state *p, const char *f)
|
|
|
6389
6670
|
|
|
6390
6671
|
for (i = 0; i < p->filename_table_length; ++i) {
|
|
6391
6672
|
if (p->filename_table[i] == sym) {
|
|
6392
|
-
p->current_filename_index =
|
|
6673
|
+
p->current_filename_index = i;
|
|
6393
6674
|
return;
|
|
6394
6675
|
}
|
|
6395
6676
|
}
|
|
@@ -6416,20 +6697,32 @@ mrb_parser_get_filename(struct mrb_parser_state* p, uint16_t idx) {
|
|
|
6416
6697
|
}
|
|
6417
6698
|
}
|
|
6418
6699
|
|
|
6419
|
-
#ifndef
|
|
6420
|
-
|
|
6421
|
-
|
|
6700
|
+
#ifndef MRB_NO_STDIO
|
|
6701
|
+
static struct mrb_parser_state *
|
|
6702
|
+
mrb_parse_file_continue(mrb_state *mrb, FILE *f, const void *prebuf, size_t prebufsize, mrbc_context *c)
|
|
6422
6703
|
{
|
|
6423
6704
|
parser_state *p;
|
|
6424
6705
|
|
|
6425
6706
|
p = mrb_parser_new(mrb);
|
|
6426
6707
|
if (!p) return NULL;
|
|
6427
|
-
|
|
6708
|
+
if (prebuf) {
|
|
6709
|
+
p->s = (const char *)prebuf;
|
|
6710
|
+
p->send = (const char *)prebuf + prebufsize;
|
|
6711
|
+
}
|
|
6712
|
+
else {
|
|
6713
|
+
p->s = p->send = NULL;
|
|
6714
|
+
}
|
|
6428
6715
|
p->f = f;
|
|
6429
6716
|
|
|
6430
6717
|
mrb_parser_parse(p, c);
|
|
6431
6718
|
return p;
|
|
6432
6719
|
}
|
|
6720
|
+
|
|
6721
|
+
MRB_API parser_state*
|
|
6722
|
+
mrb_parse_file(mrb_state *mrb, FILE *f, mrbc_context *c)
|
|
6723
|
+
{
|
|
6724
|
+
return mrb_parse_file_continue(mrb, f, NULL, 0, c);
|
|
6725
|
+
}
|
|
6433
6726
|
#endif
|
|
6434
6727
|
|
|
6435
6728
|
MRB_API parser_state*
|
|
@@ -6458,7 +6751,7 @@ mrb_load_exec(mrb_state *mrb, struct mrb_parser_state *p, mrbc_context *c)
|
|
|
6458
6751
|
struct RClass *target = mrb->object_class;
|
|
6459
6752
|
struct RProc *proc;
|
|
6460
6753
|
mrb_value v;
|
|
6461
|
-
|
|
6754
|
+
mrb_int keep = 0;
|
|
6462
6755
|
|
|
6463
6756
|
if (!p) {
|
|
6464
6757
|
return mrb_undef_value();
|
|
@@ -6478,7 +6771,7 @@ mrb_load_exec(mrb_state *mrb, struct mrb_parser_state *p, mrbc_context *c)
|
|
|
6478
6771
|
}
|
|
6479
6772
|
else {
|
|
6480
6773
|
if (mrb->exc == NULL) {
|
|
6481
|
-
mrb->exc = mrb_obj_ptr(
|
|
6774
|
+
mrb->exc = mrb_obj_ptr(mrb_exc_new_lit(mrb, E_SYNTAX_ERROR, "syntax error"));
|
|
6482
6775
|
}
|
|
6483
6776
|
mrb_parser_free(p);
|
|
6484
6777
|
return mrb_undef_value();
|
|
@@ -6488,7 +6781,7 @@ mrb_load_exec(mrb_state *mrb, struct mrb_parser_state *p, mrbc_context *c)
|
|
|
6488
6781
|
mrb_parser_free(p);
|
|
6489
6782
|
if (proc == NULL) {
|
|
6490
6783
|
if (mrb->exc == NULL) {
|
|
6491
|
-
mrb->exc = mrb_obj_ptr(
|
|
6784
|
+
mrb->exc = mrb_obj_ptr(mrb_exc_new_lit(mrb, E_SCRIPT_ERROR, "codegen error"));
|
|
6492
6785
|
}
|
|
6493
6786
|
return mrb_undef_value();
|
|
6494
6787
|
}
|
|
@@ -6507,14 +6800,14 @@ mrb_load_exec(mrb_state *mrb, struct mrb_parser_state *p, mrbc_context *c)
|
|
|
6507
6800
|
}
|
|
6508
6801
|
MRB_PROC_SET_TARGET_CLASS(proc, target);
|
|
6509
6802
|
if (mrb->c->ci) {
|
|
6510
|
-
mrb->c->ci
|
|
6803
|
+
mrb_vm_ci_target_class_set(mrb->c->ci, target);
|
|
6511
6804
|
}
|
|
6512
6805
|
v = mrb_top_run(mrb, proc, mrb_top_self(mrb), keep);
|
|
6513
6806
|
if (mrb->exc) return mrb_nil_value();
|
|
6514
6807
|
return v;
|
|
6515
6808
|
}
|
|
6516
6809
|
|
|
6517
|
-
#ifndef
|
|
6810
|
+
#ifndef MRB_NO_STDIO
|
|
6518
6811
|
MRB_API mrb_value
|
|
6519
6812
|
mrb_load_file_cxt(mrb_state *mrb, FILE *f, mrbc_context *c)
|
|
6520
6813
|
{
|
|
@@ -6526,6 +6819,55 @@ mrb_load_file(mrb_state *mrb, FILE *f)
|
|
|
6526
6819
|
{
|
|
6527
6820
|
return mrb_load_file_cxt(mrb, f, NULL);
|
|
6528
6821
|
}
|
|
6822
|
+
|
|
6823
|
+
#define DETECT_SIZE 64
|
|
6824
|
+
|
|
6825
|
+
/*
|
|
6826
|
+
* In order to be recognized as a `.mrb` file, the following three points must be satisfied:
|
|
6827
|
+
* - File starts with "RITE"
|
|
6828
|
+
* - At least `sizeof(struct rite_binary_header)` bytes can be read
|
|
6829
|
+
* - `NUL` is included in the first 64 bytes of the file
|
|
6830
|
+
*/
|
|
6831
|
+
MRB_API mrb_value
|
|
6832
|
+
mrb_load_detect_file_cxt(mrb_state *mrb, FILE *fp, mrbc_context *c)
|
|
6833
|
+
{
|
|
6834
|
+
union {
|
|
6835
|
+
char b[DETECT_SIZE];
|
|
6836
|
+
struct rite_binary_header h;
|
|
6837
|
+
} leading;
|
|
6838
|
+
size_t bufsize;
|
|
6839
|
+
|
|
6840
|
+
if (mrb == NULL || fp == NULL) {
|
|
6841
|
+
return mrb_nil_value();
|
|
6842
|
+
}
|
|
6843
|
+
|
|
6844
|
+
bufsize = fread(leading.b, sizeof(char), sizeof(leading), fp);
|
|
6845
|
+
if (bufsize < sizeof(leading.h) ||
|
|
6846
|
+
memcmp(leading.h.binary_ident, RITE_BINARY_IDENT, sizeof(leading.h.binary_ident)) != 0 ||
|
|
6847
|
+
memchr(leading.b, '\0', bufsize) == NULL) {
|
|
6848
|
+
return mrb_load_exec(mrb, mrb_parse_file_continue(mrb, fp, leading.b, bufsize, c), c);
|
|
6849
|
+
}
|
|
6850
|
+
else {
|
|
6851
|
+
size_t binsize;
|
|
6852
|
+
uint8_t *bin;
|
|
6853
|
+
mrb_value bin_obj = mrb_nil_value(); /* temporary string object */
|
|
6854
|
+
mrb_value result;
|
|
6855
|
+
|
|
6856
|
+
binsize = bin_to_uint32(leading.h.binary_size);
|
|
6857
|
+
bin_obj = mrb_str_new(mrb, NULL, binsize);
|
|
6858
|
+
bin = (uint8_t *)RSTRING_PTR(bin_obj);
|
|
6859
|
+
memcpy(bin, leading.b, bufsize);
|
|
6860
|
+
if (binsize > bufsize &&
|
|
6861
|
+
fread(bin + bufsize, binsize - bufsize, 1, fp) == 0) {
|
|
6862
|
+
binsize = bufsize;
|
|
6863
|
+
/* The error is reported by mrb_load_irep_buf_cxt() */
|
|
6864
|
+
}
|
|
6865
|
+
|
|
6866
|
+
result = mrb_load_irep_buf_cxt(mrb, bin, binsize, c);
|
|
6867
|
+
if (mrb_string_p(bin_obj)) mrb_str_resize(mrb, bin_obj, 0);
|
|
6868
|
+
return result;
|
|
6869
|
+
}
|
|
6870
|
+
}
|
|
6529
6871
|
#endif
|
|
6530
6872
|
|
|
6531
6873
|
MRB_API mrb_value
|
|
@@ -6552,7 +6894,7 @@ mrb_load_string(mrb_state *mrb, const char *s)
|
|
|
6552
6894
|
return mrb_load_string_cxt(mrb, s, NULL);
|
|
6553
6895
|
}
|
|
6554
6896
|
|
|
6555
|
-
#ifndef
|
|
6897
|
+
#ifndef MRB_NO_STDIO
|
|
6556
6898
|
|
|
6557
6899
|
static void
|
|
6558
6900
|
dump_prefix(node *tree, int offset)
|
|
@@ -6627,7 +6969,7 @@ str_dump(mrb_state *mrb, const char *str, int len)
|
|
|
6627
6969
|
int ai = mrb_gc_arena_save(mrb);
|
|
6628
6970
|
mrb_value s;
|
|
6629
6971
|
# if INT_MAX > MRB_INT_MAX / 4
|
|
6630
|
-
/* check maximum length with "\xNN"
|
|
6972
|
+
/* check maximum length with "\xNN" character */
|
|
6631
6973
|
if (len > MRB_INT_MAX / 4) {
|
|
6632
6974
|
len = MRB_INT_MAX / 4;
|
|
6633
6975
|
}
|
|
@@ -6642,7 +6984,7 @@ str_dump(mrb_state *mrb, const char *str, int len)
|
|
|
6642
6984
|
void
|
|
6643
6985
|
mrb_parser_dump(mrb_state *mrb, node *tree, int offset)
|
|
6644
6986
|
{
|
|
6645
|
-
#ifndef
|
|
6987
|
+
#ifndef MRB_NO_STDIO
|
|
6646
6988
|
int nodetype;
|
|
6647
6989
|
|
|
6648
6990
|
if (!tree) return;
|
|
@@ -6969,7 +7311,7 @@ mrb_parser_dump(mrb_state *mrb, node *tree, int offset)
|
|
|
6969
7311
|
if (n2->car) {
|
|
6970
7312
|
dump_prefix(n2, offset+2);
|
|
6971
7313
|
printf("rest:\n");
|
|
6972
|
-
if (n2->car == (
|
|
7314
|
+
if (n2->car == nint(-1)) {
|
|
6973
7315
|
dump_prefix(n2, offset+2);
|
|
6974
7316
|
printf("(empty)\n");
|
|
6975
7317
|
}
|
|
@@ -7211,11 +7553,11 @@ mrb_parser_dump(mrb_state *mrb, node *tree, int offset)
|
|
|
7211
7553
|
|
|
7212
7554
|
case NODE_CLASS:
|
|
7213
7555
|
printf("NODE_CLASS:\n");
|
|
7214
|
-
if (tree->car->car == (
|
|
7556
|
+
if (tree->car->car == nint(0)) {
|
|
7215
7557
|
dump_prefix(tree, offset+1);
|
|
7216
7558
|
printf(":%s\n", mrb_sym_name(mrb, sym(tree->car->cdr)));
|
|
7217
7559
|
}
|
|
7218
|
-
else if (tree->car->car == (
|
|
7560
|
+
else if (tree->car->car == nint(1)) {
|
|
7219
7561
|
dump_prefix(tree, offset+1);
|
|
7220
7562
|
printf("::%s\n", mrb_sym_name(mrb, sym(tree->car->cdr)));
|
|
7221
7563
|
}
|
|
@@ -7236,11 +7578,11 @@ mrb_parser_dump(mrb_state *mrb, node *tree, int offset)
|
|
|
7236
7578
|
|
|
7237
7579
|
case NODE_MODULE:
|
|
7238
7580
|
printf("NODE_MODULE:\n");
|
|
7239
|
-
if (tree->car->car == (
|
|
7581
|
+
if (tree->car->car == nint(0)) {
|
|
7240
7582
|
dump_prefix(tree, offset+1);
|
|
7241
7583
|
printf(":%s\n", mrb_sym_name(mrb, sym(tree->car->cdr)));
|
|
7242
7584
|
}
|
|
7243
|
-
else if (tree->car->car == (
|
|
7585
|
+
else if (tree->car->car == nint(1)) {
|
|
7244
7586
|
dump_prefix(tree, offset+1);
|
|
7245
7587
|
printf("::%s\n", mrb_sym_name(mrb, sym(tree->car->cdr)));
|
|
7246
7588
|
}
|