script_core 0.2.7 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
}
|