diff --git a/.document b/.document index 0665d415b9ba89..b6dfcdeee055f8 100644 --- a/.document +++ b/.document @@ -15,6 +15,7 @@ array.rb ast.rb dir.rb gc.rb +hash.rb io.rb kernel.rb marshal.rb diff --git a/.gdbinit b/.gdbinit index 1b5b6cb5621ff5..911624d8c9b737 100644 --- a/.gdbinit +++ b/.gdbinit @@ -1,5 +1,3 @@ -set startup-with-shell off - define hook-run set $color_type = 0 set $color_highlite = 0 @@ -1345,3 +1343,6 @@ define print_flags end source -s misc/gdb.py + +# Moved from beginning, since it fails on older gdbs +set startup-with-shell off diff --git a/.github/actions/compilers/action.yml b/.github/actions/compilers/action.yml new file mode 100644 index 00000000000000..aa23365e49e99c --- /dev/null +++ b/.github/actions/compilers/action.yml @@ -0,0 +1,101 @@ +name: Compiles ruby in a container +description: >- + Makes ruby using a dedicated container + +inputs: + tag: + required: false + default: clang-18 + description: >- + container image tag to use in this run. + + with_gcc: + required: false + description: >- + override compiler path & flags. + + CFLAGS: + required: false + description: >- + C compiler flags to override. + + CXXFLAGS: + required: false + description: >- + C++ compiler flags to override. + + optflags: + required: false + # -O1 is faster than -O3 in our tests... Majority of time are consumed trying + # to optimize binaries. Also GitHub Actions run on relatively modern CPUs + # compared to, say, GCC 4 or Clang 3. We don't specify `-march=native` + # because compilers tend not understand what the CPU is. + default: '-O1' + description: >- + Compiler flags for optimisations. + + cppflags: + required: false + description: >- + Additional preprocessor flags. + + append_configure: + required: false + default: >- + --without-valgrind + --without-jemalloc + --without-gmp + description: >- + flags to append to configure. + + enable_shared: + required: false + default: true + description: >- + Whether to build libruby.so. + + check: + required: false + default: '' + description: >- + Whether to run `make check` + + mspecopt: + required: false + default: '' + description: >- + Additional options for mspec. + + static_exts: + required: false + description: >- + whitespace separated list of extensions that need be linked statically. + +runs: + using: composite + steps: + - shell: bash + run: docker pull --quiet 'ghcr.io/ruby/ruby-ci-image:${{ inputs.tag }}' + + - name: compile + shell: bash + run: >- + docker run + --rm + --user=root + --volume '${{ github.workspace }}:/github/workspace:ro' + --workdir=/github/workspace + --entrypoint=/github/workspace/.github/actions/compilers/entrypoint.sh + --env CI + --env GITHUB_ACTION + --env INPUT_WITH_GCC='${{ inputs.with_gcc || inputs.tag }}' + --env INPUT_CFLAGS='${{ inputs.CFLAGS }}' + --env INPUT_CXXFLAGS='${{ inputs.CXXFLAGS }}' + --env INPUT_OPTFLAGS='${{ inputs.OPTFLAGS }}' + --env INPUT_CPPFLAGS='${{ inputs.cppflags }}' + --env INPUT_APPEND_CONFIGURE='${{ inputs.append_configure }}' + --env INPUT_CHECK='${{ inputs.check }}' + --env INPUT_MSPECOPT='${{ inputs.mspecopt }}' + --env INPUT_ENABLE_SHARED='${{ inputs.enable_shared }}' + --env INPUT_STATIC_EXTS='${{ inputs.static_exts }}' + 'ghcr.io/ruby/ruby-ci-image:${{ inputs.tag }}' diff --git a/.github/actions/compilers/entrypoint.sh b/.github/actions/compilers/entrypoint.sh new file mode 100755 index 00000000000000..198ac0e1746da6 --- /dev/null +++ b/.github/actions/compilers/entrypoint.sh @@ -0,0 +1,96 @@ +#! /bin/bash + +# Copyright (c) 2024 Ruby developers. All rights reserved. +# +# This file is a part of the programming language Ruby. Permission is hereby +# granted, to either redistribute and/or modify this file, provided that the +# conditions mentioned in the file COPYING are met. Consult the file for +# details. + +grouped() +{ + echo "::group::${@}" + "${@}" + echo "::endgroup::" +} + +set -e +set -u +set -o pipefail + +srcdir="/github/workspace/src" +builddir="$(mktemp -dt)" + +export GITHUB_WORKFLOW='Compilations' +export CONFIGURE_TTY='never' +export RUBY_DEBUG='ci rgengc' +export RUBY_TESTOPTS='-q --color=always --tty=no' +export RUBY_DEBUG_COUNTER_DISABLE='1' +export GNUMAKEFLAGS="-j$((1 + $(nproc --all)))" + +case "x${INPUT_ENABLE_SHARED}" in +x | xno | xfalse ) + enable_shared='--disable-shared' + ;; +*) + enable_shared='--enable-shared' + ;; +esac + +pushd ${builddir} + +grouped ${srcdir}/configure \ + -C \ + --with-gcc="${INPUT_WITH_GCC}" \ + --enable-debug-env \ + --disable-install-doc \ + --with-ext=-test-/cxxanyargs,+ \ + ${enable_shared} \ + ${INPUT_APPEND_CONFIGURE} \ + CFLAGS="${INPUT_CFLAGS}" \ + CXXFLAGS="${INPUT_CXXFLAGS}" \ + optflags="${INPUT_OPTFLAGS}" \ + cppflags="${INPUT_CPPFLAGS}" \ + debugflags='-ggdb3' # -g0 disables backtraces when SEGV. Do not set that. + +popd + +if [[ -n "${INPUT_STATIC_EXTS}" ]]; then + echo "::group::ext/Setup" + set -x + mkdir ${builddir}/ext + ( + for ext in ${INPUT_STATIC_EXTS}; do + echo "${ext}" + done + ) >> ${builddir}/ext/Setup + set +x + echo "::endgroup::" +fi + +pushd ${builddir} + +case "${INPUT_APPEND_CONFIGURE}" in +*--with-shared-gc*) + export RUBY_GC_LIBRARY='librubygc.default.so' + mkdir -p /home/runner/shared-gc + grouped make shared-gc SHARED_GC=default + ;; +esac + +grouped make showflags +grouped make all +grouped make test + +[[ -z "${INPUT_CHECK}" ]] && exit 0 + +if [ "$INPUT_CHECK" = "true" ]; then + tests="ruby -ext-" +else + tests="$INPUT_CHECK" +fi + +grouped make install +grouped make test-tool +grouped make test-all TESTS="-- $tests" +grouped env CHECK_LEAKS=true make test-spec MSPECOPT="$INPUT_MSPECOPT" diff --git a/.github/actions/setup/directories/action.yml b/.github/actions/setup/directories/action.yml index d5c6784abd7db3..0ec91ce96cebf5 100644 --- a/.github/actions/setup/directories/action.yml +++ b/.github/actions/setup/directories/action.yml @@ -88,12 +88,12 @@ runs: git config --global init.defaultBranch garbage - if: inputs.checkout - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 with: path: ${{ inputs.srcdir }} fetch-depth: ${{ inputs.fetch-depth }} - - uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 + - uses: actions/cache@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1 with: path: ${{ inputs.srcdir }}/.downloaded-cache key: downloaded-cache @@ -101,7 +101,7 @@ runs: - if: steps.which.outputs.autoreconf shell: bash working-directory: ${{ inputs.srcdir }} - run: ./autogen.sh + run: ./autogen.sh --install # This is for MinGW. - if: runner.os == 'Windows' @@ -138,7 +138,9 @@ runs: run: | sudo chmod -R go-w /usr/share chmod -v go-w $HOME $HOME/.config || : - sudo bash -c 'IFS=:; for d in '"$PATH"'; do chmod -v go-w $d; done' || : + SAVE_IFS="$IFS" IFS=:; set $PATH; dirs=() IFS="$SAVE_IFS" + for d do [ ! -d "$d" ] || dirs+=("$d"); done + sudo chmod -v go-w "${dirs[@]}" || : - if: inputs.dummy-files == 'true' shell: bash diff --git a/.github/workflows/annocheck.yml b/.github/workflows/annocheck.yml index 848695db24df15..8cc482c428dd8e 100644 --- a/.github/workflows/annocheck.yml +++ b/.github/workflows/annocheck.yml @@ -42,7 +42,7 @@ jobs: || contains(github.event.head_commit.message, 'Document') || contains(github.event.pull_request.title, '[DOC]') || contains(github.event.pull_request.title, 'Document') - || contains(github.event.pull_request.labels.*.name, 'Document') + || contains(github.event.pull_request.labels.*.name, 'Documentation') || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]') )}} @@ -63,7 +63,7 @@ jobs: - run: id working-directory: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 with: sparse-checkout-cone-mode: false sparse-checkout: /.github diff --git a/.github/workflows/baseruby.yml b/.github/workflows/baseruby.yml index 933df34f080e4c..3dbf135736a4d8 100644 --- a/.github/workflows/baseruby.yml +++ b/.github/workflows/baseruby.yml @@ -38,7 +38,7 @@ jobs: || contains(github.event.head_commit.message, 'Document') || contains(github.event.pull_request.title, '[DOC]') || contains(github.event.pull_request.title, 'Document') - || contains(github.event.pull_request.labels.*.name, 'Document') + || contains(github.event.pull_request.labels.*.name, 'Documentation') || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]') )}} @@ -56,7 +56,7 @@ jobs: ruby-version: ${{ matrix.ruby }} bundler: none - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 - uses: ./.github/actions/setup/ubuntu diff --git a/.github/workflows/bundled_gems.yml b/.github/workflows/bundled_gems.yml index feafb9bca8d0c2..da2c7028c2e00c 100644 --- a/.github/workflows/bundled_gems.yml +++ b/.github/workflows/bundled_gems.yml @@ -31,7 +31,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 with: token: ${{ (github.repository == 'ruby/ruby' && !startsWith(github.event_name, 'pull')) && secrets.MATZBOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} @@ -46,10 +46,11 @@ jobs: - name: Download previous gems list run: | - data=bundled_gems.json mkdir -p .downloaded-cache - ln -s .downloaded-cache/$data . - curl -O -R -z ./$data https://stdgems.org/$data + for data in bundled_gems.json default_gems.json; do + ln -s .downloaded-cache/$data . + curl -O -R -z ./$data https://stdgems.org/$data + done - name: Update bundled gems list id: bundled_gems @@ -103,7 +104,7 @@ jobs: timeout-minutes: 30 env: RUBY_TESTOPTS: '-q --tty=no' - TEST_BUNDLED_GEMS_ALLOW_FAILURES: '' + TEST_BUNDLED_GEMS_ALLOW_FAILURES: 'typeprof' if: ${{ steps.diff.outputs.gems }} - name: Commit diff --git a/.github/workflows/check_dependencies.yml b/.github/workflows/check_dependencies.yml index fe13fdc3d83bd0..5536396b86e5f5 100644 --- a/.github/workflows/check_dependencies.yml +++ b/.github/workflows/check_dependencies.yml @@ -40,12 +40,12 @@ jobs: || contains(github.event.head_commit.message, 'Document') || contains(github.event.pull_request.title, '[DOC]') || contains(github.event.pull_request.title, 'Document') - || contains(github.event.pull_request.labels.*.name, 'Document') + || contains(github.event.pull_request.labels.*.name, 'Documentation') || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]') )}} steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 - uses: ./.github/actions/setup/ubuntu if: ${{ contains(matrix.os, 'ubuntu') }} @@ -65,6 +65,8 @@ jobs: - run: make all golf + - run: ./goruby -veh + - run: ruby tool/update-deps --fix - run: git diff --no-ext-diff --ignore-submodules --exit-code diff --git a/.github/workflows/check_misc.yml b/.github/workflows/check_misc.yml index a4317595f45a6d..738a6869025fc1 100644 --- a/.github/workflows/check_misc.yml +++ b/.github/workflows/check_misc.yml @@ -18,7 +18,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 with: token: ${{ (github.repository == 'ruby/ruby' && !startsWith(github.event_name, 'pull')) && secrets.MATZBOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} @@ -111,6 +111,28 @@ jobs: steps.diff.outputs.update }} + - name: Generate docs + id: docs + run: | + ruby -W0 --disable-gems -I./lib tool/rdoc-srcdir -q --op html . + echo htmlout=ruby-html-${GITHUB_SHA:0:10} >> $GITHUB_OUTPUT + # Generate only when document commit/PR + if: >- + ${{false + || contains(github.event.head_commit.message, '[DOC]') + || contains(github.event.head_commit.message, 'Document') + || contains(github.event.pull_request.title, '[DOC]') + || contains(github.event.pull_request.title, 'Document') + || contains(github.event.pull_request.labels.*.name, 'Documentation') + }} + + - name: Upload docs + uses: actions/upload-artifact@v4 + with: + path: html + name: ${{ steps.docs.outputs.htmlout }} + if: ${{ steps.docs.outcome == 'success' }} + - uses: ./.github/actions/slack with: SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index acef86d7b5b3aa..32c49518595817 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -44,7 +44,7 @@ jobs: || contains(github.event.head_commit.message, 'Document') || contains(github.event.pull_request.title, '[DOC]') || contains(github.event.pull_request.title, 'Document') - || contains(github.event.pull_request.labels.*.name, 'Document') + || contains(github.event.pull_request.labels.*.name, 'Documentation') || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]') )}} @@ -60,7 +60,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 - name: Install libraries if: ${{ contains(matrix.os, 'macos') }} @@ -77,15 +77,15 @@ jobs: run: sudo rm /usr/lib/ruby/vendor_ruby/rubygems/defaults/operating_system.rb - name: Initialize CodeQL - uses: github/codeql-action/init@2c779ab0d087cd7fe7b826087247c2c81f27bfa6 # v3.26.5 + uses: github/codeql-action/init@c36620d31ac7c881962c3d9dd939c40ec9434f2b # v3.26.12 with: languages: ${{ matrix.language }} - name: Autobuild - uses: github/codeql-action/autobuild@2c779ab0d087cd7fe7b826087247c2c81f27bfa6 # v3.26.5 + uses: github/codeql-action/autobuild@c36620d31ac7c881962c3d9dd939c40ec9434f2b # v3.26.12 - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@2c779ab0d087cd7fe7b826087247c2c81f27bfa6 # v3.26.5 + uses: github/codeql-action/analyze@c36620d31ac7c881962c3d9dd939c40ec9434f2b # v3.26.12 with: category: '/language:${{ matrix.language }}' upload: False @@ -115,7 +115,7 @@ jobs: continue-on-error: true - name: Upload SARIF - uses: github/codeql-action/upload-sarif@2c779ab0d087cd7fe7b826087247c2c81f27bfa6 # v3.26.5 + uses: github/codeql-action/upload-sarif@c36620d31ac7c881962c3d9dd939c40ec9434f2b # v3.26.12 with: sarif_file: sarif-results/${{ matrix.language }}.sarif continue-on-error: true diff --git a/.github/workflows/compilers.yml b/.github/workflows/compilers.yml index 17361e9b7f277a..785ed5a8d8e647 100644 --- a/.github/workflows/compilers.yml +++ b/.github/workflows/compilers.yml @@ -24,281 +24,363 @@ concurrency: group: ${{ github.workflow }} / ${{ startsWith(github.event_name, 'pull') && github.ref_name || github.sha }} cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }} -# GitHub actions does not support YAML anchors. This creative use of -# environment variables (plus the "echo $GITHUB_ENV" hack) is to reroute that -# restriction. -env: - default_cc: clang-18 - append_cc: '' - - # -O1 is faster than -O3 in our tests... Majority of time are consumed trying - # to optimize binaries. Also GitHub Actions run on relatively modern CPUs - # compared to, say, GCC 4 or Clang 3. We don't specify `-march=native` - # because compilers tend not understand what the CPU is. - optflags: '-O1' - - # -g0 disables backtraces when SEGV. Do not set that. - debugflags: '-ggdb3' - - default_configure: >- - --enable-debug-env - --disable-install-doc - --with-ext=-test-/cxxanyargs,+ - append_configure: >- - --without-valgrind - --without-jemalloc - --without-gmp - - CONFIGURE_TTY: never - GITPULLOPTIONS: --no-tags origin ${{ github.ref }} - RUBY_DEBUG: ci rgengc - RUBY_TESTOPTS: >- - -q - --color=always - --tty=no - permissions: contents: read +# Each job is split so that they roughly take 30min to run through. jobs: - compile: - strategy: - fail-fast: false - matrix: - env: - - {} - entry: - - { name: gcc-13, env: { default_cc: gcc-13 } } - - { name: gcc-12, env: { default_cc: gcc-12 } } - - { name: gcc-11, env: { default_cc: gcc-11 } } - - { name: gcc-10, env: { default_cc: gcc-10 } } - - { name: gcc-9, env: { default_cc: gcc-9 } } - - { name: gcc-8, env: { default_cc: gcc-8 } } - - { name: gcc-7, env: { default_cc: gcc-7 } } - - name: 'gcc-13 LTO' - container: gcc-13 - env: - default_cc: 'gcc-13 -flto=auto -ffat-lto-objects -Werror=lto-type-mismatch' - optflags: '-O2' - shared: disable - # check: true - - { name: clang-19, env: { default_cc: clang-19 } } - - { name: clang-18, env: { default_cc: clang-18 } } - - { name: clang-17, env: { default_cc: clang-17 } } - - { name: clang-16, env: { default_cc: clang-16 } } - - { name: clang-15, env: { default_cc: clang-15 } } - - { name: clang-14, env: { default_cc: clang-14 } } - - { name: clang-13, env: { default_cc: clang-13 } } - - { name: clang-12, env: { default_cc: clang-12 } } - - { name: clang-11, env: { default_cc: clang-11 } } - - { name: clang-10, env: { default_cc: clang-10 } } - # llvm-objcopy<=9 doesn't have --wildcard. It compiles, but leaves Rust symbols in libyjit.o. - - { name: clang-9, env: { default_cc: clang-9, append_configure: '--disable-yjit' } } - - { name: clang-8, env: { default_cc: clang-8, append_configure: '--disable-yjit' } } - - { name: clang-7, env: { default_cc: clang-7, append_configure: '--disable-yjit' } } - - { name: clang-6.0, env: { default_cc: clang-6.0, append_configure: '--disable-yjit' } } - - name: 'clang-16 LTO' - container: clang-16 - env: - default_cc: 'clang-16 -flto=auto' - optflags: '-O2' - shared: disable - # check: true - - - { name: ext/Setup, static-exts: 'etc,json/*,*/escape' } - -# - { name: aarch64-linux-gnu, crosshost: aarch64-linux-gnu, container: crossbuild-essential-arm64 } -# - { name: arm-linux-gnueabi, crosshost: arm-linux-gnueabi } -# - { name: arm-linux-gnueabihf, crosshost: arm-linux-gnueabihf } -# - { name: i686-w64-mingw32, crosshost: i686-w64-mingw32 } -# - { name: powerpc-linux-gnu, crosshost: powerpc-linux-gnu } -# - { name: powerpc64le-linux-gnu, crosshost: powerpc64le-linux-gnu, container: crossbuild-essential-ppc64el } -# - { name: s390x-linux-gnu, crosshost: s390x-linux-gnu, container: crossbuild-essential-s390x } -# - { name: x86_64-w64-mingw32, crosshost: x86_64-w64-mingw32, container: mingw-w64 } - - # -Wno-strict-prototypes is necessary with current clang-15 since - # older autoconf generate functions without prototype and -pedantic - # now implies strict-prototypes. Disabling the error but leaving the - # warning generates a lot of noise from use of ANYARGS in - # rb_define_method() and friends. - # See: https://github.com/llvm/llvm-project/commit/11da1b53d8cd3507959022cd790d5a7ad4573d94 - - { name: c99, env: { CFLAGS: '-std=c99 -Werror=pedantic -pedantic-errors -Wno-strict-prototypes' } } -# - { name: c11, env: { CFLAGS: '-std=c11 -Werror=pedantic -pedantic-errors -Wno-strict-prototypes' } } -# - { name: c17, env: { CFLAGS: '-std=c17 -Werror=pedantic -pedantic-errors -Wno-strict-prototypes' } } - - { name: c23, env: { CFLAGS: '-std=c2x -Werror=pedantic -pedantic-errors -Wno-strict-prototypes' } } - - { name: c++98, env: { CXXFLAGS: '-std=c++98 -Werror=pedantic -pedantic-errors -Wno-c++11-long-long' } } -# - { name: c++11, env: { CXXFLAGS: '-std=c++11 -Werror=pedantic -pedantic-errors -Wno-c++11-long-long' } } -# - { name: c++14, env: { CXXFLAGS: '-std=c++14 -Werror=pedantic -pedantic-errors -Wno-c++11-long-long' } } -# - { name: c++17, env: { CXXFLAGS: '-std=c++17 -Werror=pedantic -pedantic-errors -Wno-c++11-long-long' } } -# - { name: c++20, env: { CXXFLAGS: '-std=c++20 -Werror=pedantic -pedantic-errors -Wno-c++11-long-long' } } -# - { name: c++23, env: { CXXFLAGS: '-std=c++23 -Werror=pedantic -pedantic-errors -Wno-c++11-long-long' } } - - { name: c++26, env: { CXXFLAGS: '-std=c++26 -Werror=pedantic -pedantic-errors -Wno-c++11-long-long' } } - - - { name: '-O0', env: { optflags: '-O0 -march=x86-64 -mtune=generic' } } -# - { name: '-O3', env: { optflags: '-O3 -march=x86-64 -mtune=generic' }, check: true } - - - { name: gmp, env: { append_configure: '--with-gmp' }, check: true } - - { name: jemalloc, env: { append_configure: '--with-jemalloc' } } - - { name: valgrind, env: { append_configure: '--with-valgrind' } } - - { name: 'coroutine=ucontext', env: { append_configure: '--with-coroutine=ucontext' } } - - { name: 'coroutine=pthread', env: { append_configure: '--with-coroutine=pthread' } } - - { name: disable-jit, env: { append_configure: '--disable-yjit --disable-rjit' } } - - { name: disable-dln, env: { append_configure: '--disable-dln' } } - - { name: enable-mkmf-verbose, env: { append_configure: '--enable-mkmf-verbose' } } - - { name: disable-rubygems, env: { append_configure: '--disable-rubygems' } } - - { name: RUBY_DEVEL, env: { append_configure: '--enable-devel' } } - - - { name: OPT_THREADED_CODE=0, env: { cppflags: '-DOPT_THREADED_CODE=0' } } - - { name: OPT_THREADED_CODE=1, env: { cppflags: '-DOPT_THREADED_CODE=1' } } - - { name: OPT_THREADED_CODE=2, env: { cppflags: '-DOPT_THREADED_CODE=2' } } - - - { name: NDEBUG, env: { cppflags: '-DNDEBUG' } } - - { name: RUBY_DEBUG, env: { cppflags: '-DRUBY_DEBUG' } } -# - { name: ARRAY_DEBUG, env: { cppflags: '-DARRAY_DEBUG' } } -# - { name: BIGNUM_DEBUG, env: { cppflags: '-DBIGNUM_DEBUG' } } -# - { name: CCAN_LIST_DEBUG, env: { cppflags: '-DCCAN_LIST_DEBUG' } } -# - { name: CPDEBUG=-1, env: { cppflags: '-DCPDEBUG=-1' } } -# - { name: ENC_DEBUG, env: { cppflags: '-DENC_DEBUG' } } -# - { name: GC_DEBUG, env: { cppflags: '-DGC_DEBUG' } } -# - { name: HASH_DEBUG, env: { cppflags: '-DHASH_DEBUG' } } -# - { name: ID_TABLE_DEBUG, env: { cppflags: '-DID_TABLE_DEBUG' } } -# - { name: RGENGC_DEBUG=-1, env: { cppflags: '-DRGENGC_DEBUG=-1' } } -# - { name: SYMBOL_DEBUG, env: { cppflags: '-DSYMBOL_DEBUG' } } - -# - { name: RGENGC_CHECK_MODE, env: { cppflags: '-DRGENGC_CHECK_MODE' } } -# - { name: VM_CHECK_MODE, env: { cppflags: '-DVM_CHECK_MODE' } } - -# - { name: USE_EMBED_CI=0, env: { cppflags: '-DUSE_EMBED_CI=0' } } - - name: USE_FLONUM=0 - env: - cppflags: '-DUSE_FLONUM=0' - # yjit requires FLONUM for the pointer tagging scheme - append_configure: '--disable-yjit' -# - { name: USE_GC_MALLOC_OBJ_INFO_DETAILS, env: { cppflags: '-DUSE_GC_MALLOC_OBJ_INFO_DETAILS' } } -# - { name: USE_LAZY_LOAD, env: { cppflags: '-DUSE_LAZY_LOAD' } } -# - { name: USE_SYMBOL_GC=0, env: { cppflags: '-DUSE_SYMBOL_GC=0' } } -# - { name: USE_THREAD_CACHE=0, env: { cppflags: '-DUSE_THREAD_CACHE=0' } } - - { name: USE_RUBY_DEBUG_LOG=1, env: { cppflags: '-DUSE_RUBY_DEBUG_LOG=1' } } -# - { name: USE_DEBUG_COUNTER, env: { cppflags: '-DUSE_DEBUG_COUNTER=1', RUBY_DEBUG_COUNTER_DISABLE: '1' } } - - { name: SHARABLE_MIDDLE_SUBSTRING, env: { cppflags: '-DSHARABLE_MIDDLE_SUBSTRING=1' } } - -# - { name: DEBUG_FIND_TIME_NUMGUESS, env: { cppflags: '-DDEBUG_FIND_TIME_NUMGUESS' } } -# - { name: DEBUG_INTEGER_PACK, env: { cppflags: '-DDEBUG_INTEGER_PACK' } } -# - { name: ENABLE_PATH_CHECK, env: { cppflags: '-DENABLE_PATH_CHECK' } } - -# - { name: GC_DEBUG_STRESS_TO_CLASS, env: { cppflags: '-DGC_DEBUG_STRESS_TO_CLASS' } } -# - { name: GC_ENABLE_LAZY_SWEEP=0, env: { cppflags: '-DGC_ENABLE_LAZY_SWEEP=0' } } -# - { name: GC_PROFILE_DETAIL_MEMOTY, env: { cppflags: '-DGC_PROFILE_DETAIL_MEMOTY' } } -# - { name: GC_PROFILE_MORE_DETAIL, env: { cppflags: '-DGC_PROFILE_MORE_DETAIL' } } - -# - { name: CALC_EXACT_MALLOC_SIZE, env: { cppflags: '-DCALC_EXACT_MALLOC_SIZE' } } -# - { name: MALLOC_ALLOCATED_SIZE_CHECK, env: { cppflags: '-DMALLOC_ALLOCATED_SIZE_CHECK' } } - -# - { name: IBF_ISEQ_ENABLE_LOCAL_BUFFER, env: { cppflags: '-DIBF_ISEQ_ENABLE_LOCAL_BUFFER' } } - -# - { name: RGENGC_ESTIMATE_OLDMALLOC, env: { cppflags: '-DRGENGC_ESTIMATE_OLDMALLOC' } } -# - { name: RGENGC_FORCE_MAJOR_GC, env: { cppflags: '-DRGENGC_FORCE_MAJOR_GC' } } -# - { name: RGENGC_OBJ_INFO, env: { cppflags: '-DRGENGC_OBJ_INFO' } } -# - { name: RGENGC_PROFILE, env: { cppflags: '-DRGENGC_PROFILE' } } - -# - { name: VM_DEBUG_BP_CHECK, env: { cppflags: '-DVM_DEBUG_BP_CHECK' } } -# - { name: VM_DEBUG_VERIFY_METHOD_CACHE, env: { cppflags: '-DVM_DEBUG_VERIFY_METHOD_CACHE' } } - - - { name: enable-yjit, env: { append_configure: '--enable-yjit --disable-rjit' } } - - { name: enable-rjit, env: { append_configure: '--enable-rjit --disable-yjit' } } - - { name: YJIT_FORCE_ENABLE, env: { cppflags: '-DYJIT_FORCE_ENABLE' } } -# - { name: RJIT_FORCE_ENABLE, env: { cppflags: '-DRJIT_FORCE_ENABLE' } } - - { name: UNIVERSAL_PARSER, env: { cppflags: '-DUNIVERSAL_PARSER' } } - - name: ${{ matrix.entry.name }} - + compile1: + name: 'omnibus compilations, #1' runs-on: ubuntu-latest - - container: - image: ghcr.io/ruby/ruby-ci-image:${{ matrix.entry.container || matrix.entry.env.default_cc || 'clang-18' }} - options: --user root - if: >- ${{!(false || contains(github.event.head_commit.message, '[DOC]') || contains(github.event.head_commit.message, 'Document') || contains(github.event.pull_request.title, '[DOC]') || contains(github.event.pull_request.title, 'Document') - || contains(github.event.pull_request.labels.*.name, 'Document') + || contains(github.event.pull_request.labels.*.name, 'Documentation') || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]') )}} - - env: ${{ matrix.entry.env || matrix.env }} - + services: { docuum: { image: 'stephanmisc/docuum', options: '--init', volumes: [ '/root', '/var/run/docker.sock:/var/run/docker.sock' ] } } steps: - - run: id - working-directory: - - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + with: { sparse-checkout-cone-mode: false, sparse-checkout: /.github } + - { uses: './.github/actions/setup/directories', with: { srcdir: 'src', builddir: 'build', makeup: true } } + - name: 'clang 18 LTO' + uses: './.github/actions/compilers' with: - sparse-checkout-cone-mode: false - sparse-checkout: /.github - - - uses: ./.github/actions/setup/directories + tag: clang-18 + with_gcc: 'clang-18 -flto=auto' + optflags: '-O2' + enable_shared: false + - name: 'GCC 13 LTO' + uses: './.github/actions/compilers' with: - srcdir: src - builddir: build - makeup: true - clean: true - - - name: Run configure - run: > - ../src/configure -C ${default_configure} ${append_configure} - --${{ - matrix.entry.crosshost && 'host' || 'with-gcc' - }}=${{ - matrix.entry.crosshost || '"${default_cc}${append_cc:+ $append_cc}"' - }} - --${{ matrix.entry.shared || 'enable' }}-shared - - - name: Add to ext/Setup - id: ext-setup - run: | - mkdir ext - cd ext - for ext in {${{ matrix.entry.static-exts }}}; do - echo "${ext}" - done >> Setup - if: ${{ (matrix.entry.static-exts || '') != '' }} - - - name: Clean up ext/Setup - uses: gacts/run-and-post-run@4683764dd706df847f57b9bed39d08164bcd2690 # v1.4.1 - with: - shell: bash - working-directory: build - post: rm ext/Setup - if: ${{ steps.ext-setup.outcome == 'success' }} - - - run: make showflags - - - run: make - - - run: make test - - - run: make install - if: ${{ matrix.entry.check }} - - - run: make test-tool - if: ${{ matrix.entry.check }} - - - run: make test-all TESTS='-- ruby -ext-' - if: ${{ matrix.entry.check }} - - - run: make test-spec - env: - CHECK_LEAKS: true - if: ${{ matrix.entry.check }} + tag: gcc-13 + with_gcc: 'gcc-13 -flto=auto -ffat-lto-objects -Werror=lto-type-mismatch' + optflags: '-O2' + enable_shared: false + compile2: + name: 'omnibus compilations, #2' + runs-on: ubuntu-latest + if: >- + ${{!(false + || contains(github.event.head_commit.message, '[DOC]') + || contains(github.event.head_commit.message, 'Document') + || contains(github.event.pull_request.title, '[DOC]') + || contains(github.event.pull_request.title, 'Document') + || contains(github.event.pull_request.labels.*.name, 'Documentation') + || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]') + )}} + services: { docuum: { image: 'stephanmisc/docuum', options: '--init', volumes: [ '/root', '/var/run/docker.sock:/var/run/docker.sock' ] } } + steps: + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + with: { sparse-checkout-cone-mode: false, sparse-checkout: /.github } + - { uses: './.github/actions/setup/directories', with: { srcdir: 'src', builddir: 'build', makeup: true } } + - { uses: './.github/actions/compilers', name: 'GCC 13', with: { tag: 'gcc-13' } } + - { uses: './.github/actions/compilers', name: 'GCC 12', with: { tag: 'gcc-12' } } + - { uses: './.github/actions/compilers', name: 'GCC 11', with: { tag: 'gcc-11' } } + - { uses: './.github/actions/compilers', name: 'GCC 10', with: { tag: 'gcc-10' } } + - { uses: './.github/actions/compilers', name: 'GCC 9', with: { tag: 'gcc-9' } } + - { uses: './.github/actions/compilers', name: 'GCC 8', with: { tag: 'gcc-8' } } + - { uses: './.github/actions/compilers', name: 'GCC 7', with: { tag: 'gcc-7' } } + + compile3: + name: 'omnibus compilations, #3' + runs-on: ubuntu-latest + if: >- + ${{!(false + || contains(github.event.head_commit.message, '[DOC]') + || contains(github.event.head_commit.message, 'Document') + || contains(github.event.pull_request.title, '[DOC]') + || contains(github.event.pull_request.title, 'Document') + || contains(github.event.pull_request.labels.*.name, 'Documentation') + || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]') + )}} + services: { docuum: { image: 'stephanmisc/docuum', options: '--init', volumes: [ '/root', '/var/run/docker.sock:/var/run/docker.sock' ] } } + steps: + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + with: { sparse-checkout-cone-mode: false, sparse-checkout: /.github } + - { uses: './.github/actions/setup/directories', with: { srcdir: 'src', builddir: 'build', makeup: true } } + - { uses: './.github/actions/compilers', name: 'clang 20', with: { tag: 'clang-20' } } + - { uses: './.github/actions/compilers', name: 'clang 19', with: { tag: 'clang-19' } } + - { uses: './.github/actions/compilers', name: 'clang 18', with: { tag: 'clang-18' } } + - { uses: './.github/actions/compilers', name: 'clang 17', with: { tag: 'clang-17' } } + - { uses: './.github/actions/compilers', name: 'clang 16', with: { tag: 'clang-16' } } + - { uses: './.github/actions/compilers', name: 'clang 15', with: { tag: 'clang-15' } } + - { uses: './.github/actions/compilers', name: 'clang 14', with: { tag: 'clang-14' } } + - { uses: './.github/actions/compilers', name: 'clang 13', with: { tag: 'clang-13' } } + - { uses: './.github/actions/compilers', name: 'clang 12', with: { tag: 'clang-12' } } + + compile4: + name: 'omnibus compilations, #4' + runs-on: ubuntu-latest + if: >- + ${{!(false + || contains(github.event.head_commit.message, '[DOC]') + || contains(github.event.head_commit.message, 'Document') + || contains(github.event.pull_request.title, '[DOC]') + || contains(github.event.pull_request.title, 'Document') + || contains(github.event.pull_request.labels.*.name, 'Documentation') + || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]') + )}} + services: { docuum: { image: 'stephanmisc/docuum', options: '--init', volumes: [ '/root', '/var/run/docker.sock:/var/run/docker.sock' ] } } + steps: + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + with: { sparse-checkout-cone-mode: false, sparse-checkout: /.github } + - { uses: './.github/actions/setup/directories', with: { srcdir: 'src', builddir: 'build', makeup: true } } + - { uses: './.github/actions/compilers', name: 'clang 11', with: { tag: 'clang-11' } } + - { uses: './.github/actions/compilers', name: 'clang 10', with: { tag: 'clang-10' } } + # llvm-objcopy<=9 doesn't have --wildcard. It compiles, but leaves Rust symbols in libyjit.o. + - { uses: './.github/actions/compilers', name: 'clang 9', with: { tag: 'clang-9', append_configure: '--disable-yjit' } } + - { uses: './.github/actions/compilers', name: 'clang 8', with: { tag: 'clang-8', append_configure: '--disable-yjit' } } + - { uses: './.github/actions/compilers', name: 'clang 7', with: { tag: 'clang-7', append_configure: '--disable-yjit' } } + - { uses: './.github/actions/compilers', name: 'clang 6', with: { tag: 'clang-6.0', append_configure: '--disable-yjit' } } + - { uses: './.github/actions/compilers', name: 'ext/Setup', with: { static_exts: 'etc json/* */escape' } } + + compile5: + name: 'omnibus compilations, #5' + runs-on: ubuntu-latest + if: >- + ${{!(false + || contains(github.event.head_commit.message, '[DOC]') + || contains(github.event.head_commit.message, 'Document') + || contains(github.event.pull_request.title, '[DOC]') + || contains(github.event.pull_request.title, 'Document') + || contains(github.event.pull_request.labels.*.name, 'Documentation') + || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]') + )}} + services: { docuum: { image: 'stephanmisc/docuum', options: '--init', volumes: [ '/root', '/var/run/docker.sock:/var/run/docker.sock' ] } } + steps: + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + with: { sparse-checkout-cone-mode: false, sparse-checkout: /.github } + - { uses: './.github/actions/setup/directories', with: { srcdir: 'src', builddir: 'build', makeup: true } } + # -Wno-strict-prototypes is necessary with current clang-15 since + # older autoconf generate functions without prototype and -pedantic + # now implies strict-prototypes. Disabling the error but leaving the + # warning generates a lot of noise from use of ANYARGS in + # rb_define_method() and friends. + # See: https://github.com/llvm/llvm-project/commit/11da1b53d8cd3507959022cd790d5a7ad4573d94 + - { uses: './.github/actions/compilers', name: 'C99', with: { CFLAGS: '-std=c99 -Werror=pedantic -pedantic-errors -Wno-strict-prototypes' } } + - { uses: './.github/actions/compilers', name: 'C11', with: { CFLAGS: '-std=c11 -Werror=pedantic -pedantic-errors -Wno-strict-prototypes' } } + - { uses: './.github/actions/compilers', name: 'C17', with: { CFLAGS: '-std=c17 -Werror=pedantic -pedantic-errors -Wno-strict-prototypes' } } + - { uses: './.github/actions/compilers', name: 'C23', with: { CFLAGS: '-std=c2x -Werror=pedantic -pedantic-errors -Wno-strict-prototypes' } } + - { uses: './.github/actions/compilers', name: 'C++98', with: { CXXFLAGS: '-std=c++98 -Werror=pedantic -pedantic-errors -Wno-c++11-long-long' } } + - { uses: './.github/actions/compilers', name: 'C++11', with: { CXXFLAGS: '-std=c++11 -Werror=pedantic -pedantic-errors -Wno-c++11-long-long' } } + - { uses: './.github/actions/compilers', name: 'C++14', with: { CXXFLAGS: '-std=c++14 -Werror=pedantic -pedantic-errors -Wno-c++11-long-long' } } + - { uses: './.github/actions/compilers', name: 'C++17', with: { CXXFLAGS: '-std=c++17 -Werror=pedantic -pedantic-errors -Wno-c++11-long-long' } } + - { uses: './.github/actions/compilers', name: 'C++20', with: { CXXFLAGS: '-std=c++20 -Werror=pedantic -pedantic-errors -Wno-c++11-long-long' } } + - { uses: './.github/actions/compilers', name: 'C++23', with: { CXXFLAGS: '-std=c++23 -Werror=pedantic -pedantic-errors -Wno-c++11-long-long' } } + - { uses: './.github/actions/compilers', name: 'C++26', with: { CXXFLAGS: '-std=c++26 -Werror=pedantic -pedantic-errors -Wno-c++11-long-long' } } + + compile6: + name: 'omnibus compilations, #6' + runs-on: ubuntu-latest + if: >- + ${{!(false + || contains(github.event.head_commit.message, '[DOC]') + || contains(github.event.head_commit.message, 'Document') + || contains(github.event.pull_request.title, '[DOC]') + || contains(github.event.pull_request.title, 'Document') + || contains(github.event.pull_request.labels.*.name, 'Documentation') + || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]') + )}} + services: { docuum: { image: 'stephanmisc/docuum', options: '--init', volumes: [ '/root', '/var/run/docker.sock:/var/run/docker.sock' ] } } + steps: + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + with: { sparse-checkout-cone-mode: false, sparse-checkout: /.github } + - { uses: './.github/actions/setup/directories', with: { srcdir: 'src', builddir: 'build', makeup: true } } + - { uses: './.github/actions/compilers', name: '-O0', with: { optflags: '-O0 -march=x86-64 -mtune=generic' } } + # - { uses: './.github/actions/compilers', name: '-O3', with: { optflags: '-O3 -march=x86-64 -mtune=generic', check: true } } + - { uses: './.github/actions/compilers', name: 'gmp', with: { append_configure: '--with-gmp', check: 'ruby/test_bignum.rb', mspecopt: "/github/workspace/src/spec/ruby/core/integer" } } + - { uses: './.github/actions/compilers', name: 'jemalloc', with: { append_configure: '--with-jemalloc' } } + - { uses: './.github/actions/compilers', name: 'valgrind', with: { append_configure: '--with-valgrind' } } + - { uses: './.github/actions/compilers', name: 'coroutine=ucontext', with: { append_configure: '--with-coroutine=ucontext' } } + - { uses: './.github/actions/compilers', name: 'coroutine=pthread', with: { append_configure: '--with-coroutine=pthread' } } + + compile7: + name: 'omnibus compilations, #7' + runs-on: ubuntu-latest + if: >- + ${{!(false + || contains(github.event.head_commit.message, '[DOC]') + || contains(github.event.head_commit.message, 'Document') + || contains(github.event.pull_request.title, '[DOC]') + || contains(github.event.pull_request.title, 'Document') + || contains(github.event.pull_request.labels.*.name, 'Documentation') + || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]') + )}} + services: { docuum: { image: 'stephanmisc/docuum', options: '--init', volumes: [ '/root', '/var/run/docker.sock:/var/run/docker.sock' ] } } + steps: + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + with: { sparse-checkout-cone-mode: false, sparse-checkout: /.github } + - { uses: './.github/actions/setup/directories', with: { srcdir: 'src', builddir: 'build', makeup: true } } + - { uses: './.github/actions/compilers', name: 'disable-jit', with: { append_configure: '--disable-yjit --disable-rjit' } } + - { uses: './.github/actions/compilers', name: 'disable-dln', with: { append_configure: '--disable-dln' } } + - { uses: './.github/actions/compilers', name: 'enable-mkmf-verbose', with: { append_configure: '--enable-mkmf-verbose' } } + - { uses: './.github/actions/compilers', name: 'disable-rubygems', with: { append_configure: '--disable-rubygems' } } + - { uses: './.github/actions/compilers', name: 'RUBY_DEVEL', with: { append_configure: '--enable-devel' } } + - { uses: './.github/actions/compilers', name: 'OPT_THREADED_CODE=0', with: { cppflags: '-DOPT_THREADED_CODE=0' } } + - { uses: './.github/actions/compilers', name: 'OPT_THREADED_CODE=1', with: { cppflags: '-DOPT_THREADED_CODE=1' } } + - { uses: './.github/actions/compilers', name: 'OPT_THREADED_CODE=2', with: { cppflags: '-DOPT_THREADED_CODE=2' } } + + compile8: + name: 'omnibus compilations, #8' + runs-on: ubuntu-latest + if: >- + ${{!(false + || contains(github.event.head_commit.message, '[DOC]') + || contains(github.event.head_commit.message, 'Document') + || contains(github.event.pull_request.title, '[DOC]') + || contains(github.event.pull_request.title, 'Document') + || contains(github.event.pull_request.labels.*.name, 'Documentation') + || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]') + )}} + services: { docuum: { image: 'stephanmisc/docuum', options: '--init', volumes: [ '/root', '/var/run/docker.sock:/var/run/docker.sock' ] } } + steps: + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + with: { sparse-checkout-cone-mode: false, sparse-checkout: /.github } + - { uses: './.github/actions/setup/directories', with: { srcdir: 'src', builddir: 'build', makeup: true } } + - { uses: './.github/actions/compilers', name: 'NDEBUG', with: { cppflags: '-DNDEBUG' } } + - { uses: './.github/actions/compilers', name: 'RUBY_DEBUG', with: { cppflags: '-DRUBY_DEBUG' } } + - { uses: './.github/actions/compilers', name: 'ARRAY_DEBUG', with: { cppflags: '-DARRAY_DEBUG' } } + - { uses: './.github/actions/compilers', name: 'BIGNUM_DEBUG', with: { cppflags: '-DBIGNUM_DEBUG' } } + - { uses: './.github/actions/compilers', name: 'CCAN_LIST_DEBUG', with: { cppflags: '-DCCAN_LIST_DEBUG' } } + - { uses: './.github/actions/compilers', name: 'CPDEBUG=-1', with: { cppflags: '-DCPDEBUG=-1' } } + - { uses: './.github/actions/compilers', name: 'ENC_DEBUG', with: { cppflags: '-DENC_DEBUG' } } + - { uses: './.github/actions/compilers', name: 'GC_DEBUG', with: { cppflags: '-DGC_DEBUG' } } + - { uses: './.github/actions/compilers', name: 'HASH_DEBUG', with: { cppflags: '-DHASH_DEBUG' } } + - { uses: './.github/actions/compilers', name: 'ID_TABLE_DEBUG', with: { cppflags: '-DID_TABLE_DEBUG' } } + + compile9: + name: 'omnibus compilations, #9' + runs-on: ubuntu-latest + if: >- + ${{!(false + || contains(github.event.head_commit.message, '[DOC]') + || contains(github.event.head_commit.message, 'Document') + || contains(github.event.pull_request.title, '[DOC]') + || contains(github.event.pull_request.title, 'Document') + || contains(github.event.pull_request.labels.*.name, 'Documentation') + || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]') + )}} + services: { docuum: { image: 'stephanmisc/docuum', options: '--init', volumes: [ '/root', '/var/run/docker.sock:/var/run/docker.sock' ] } } + steps: + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + with: { sparse-checkout-cone-mode: false, sparse-checkout: /.github } + - { uses: './.github/actions/setup/directories', with: { srcdir: 'src', builddir: 'build', makeup: true } } + - { uses: './.github/actions/compilers', name: 'RGENGC_DEBUG=-1', with: { cppflags: '-DRGENGC_DEBUG=-1' } } + - { uses: './.github/actions/compilers', name: 'SYMBOL_DEBUG', with: { cppflags: '-DSYMBOL_DEBUG' } } + - { uses: './.github/actions/compilers', name: 'RGENGC_CHECK_MODE', with: { cppflags: '-DRGENGC_CHECK_MODE' } } + - { uses: './.github/actions/compilers', name: 'VM_CHECK_MODE', with: { cppflags: '-DVM_CHECK_MODE' } } + - { uses: './.github/actions/compilers', name: 'USE_EMBED_CI=0', with: { cppflags: '-DUSE_EMBED_CI=0' } } + - { uses: './.github/actions/compilers', name: 'USE_FLONUM=0', with: { cppflags: '-DUSE_FLONUM=0', append_configure: '--disable-yjit' } } + - { uses: './.github/actions/compilers', name: 'USE_LAZY_LOAD', with: { cppflags: '-DUSE_LAZY_LOAD' } } + - { uses: './.github/actions/compilers', name: 'USE_SYMBOL_GC=0', with: { cppflags: '-DUSE_SYMBOL_GC=0' } } + - { uses: './.github/actions/compilers', name: 'USE_THREAD_CACHE=0', with: { cppflags: '-DUSE_THREAD_CACHE=0' } } + + compileX: + name: 'omnibus compilations, #10' + runs-on: ubuntu-latest + if: >- + ${{!(false + || contains(github.event.head_commit.message, '[DOC]') + || contains(github.event.head_commit.message, 'Document') + || contains(github.event.pull_request.title, '[DOC]') + || contains(github.event.pull_request.title, 'Document') + || contains(github.event.pull_request.labels.*.name, 'Documentation') + || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]') + )}} + services: { docuum: { image: 'stephanmisc/docuum', options: '--init', volumes: [ '/root', '/var/run/docker.sock:/var/run/docker.sock' ] } } + steps: + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + with: { sparse-checkout-cone-mode: false, sparse-checkout: /.github } + - { uses: './.github/actions/setup/directories', with: { srcdir: 'src', builddir: 'build', makeup: true } } + - { uses: './.github/actions/compilers', name: 'USE_RUBY_DEBUG_LOG=1', with: { cppflags: '-DUSE_RUBY_DEBUG_LOG=1' } } + - { uses: './.github/actions/compilers', name: 'USE_DEBUG_COUNTER', with: { cppflags: '-DUSE_DEBUG_COUNTER=1' } } + - { uses: './.github/actions/compilers', name: 'SHARABLE_MIDDLE_SUBSTRING', with: { cppflags: '-DSHARABLE_MIDDLE_SUBSTRING=1' } } + - { uses: './.github/actions/compilers', name: 'DEBUG_FIND_TIME_NUMGUESS', with: { cppflags: '-DDEBUG_FIND_TIME_NUMGUESS' } } + - { uses: './.github/actions/compilers', name: 'DEBUG_INTEGER_PACK', with: { cppflags: '-DDEBUG_INTEGER_PACK' } } + - { uses: './.github/actions/compilers', name: 'GC_DEBUG_STRESS_TO_CLASS', with: { cppflags: '-DGC_DEBUG_STRESS_TO_CLASS' } } + - { uses: './.github/actions/compilers', name: 'GC_ENABLE_LAZY_SWEEP=0', with: { cppflags: '-DGC_ENABLE_LAZY_SWEEP=0' } } + - { uses: './.github/actions/compilers', name: 'GC_PROFILE_DETAIL_MEMORY', with: { cppflags: '-DGC_PROFILE_DETAIL_MEMORY' } } + + compileB: + name: 'omnibus compilations, #11' + runs-on: ubuntu-latest + if: >- + ${{!(false + || contains(github.event.head_commit.message, '[DOC]') + || contains(github.event.head_commit.message, 'Document') + || contains(github.event.pull_request.title, '[DOC]') + || contains(github.event.pull_request.title, 'Document') + || contains(github.event.pull_request.labels.*.name, 'Documentation') + || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]') + )}} + services: { docuum: { image: 'stephanmisc/docuum', options: '--init', volumes: [ '/root', '/var/run/docker.sock:/var/run/docker.sock' ] } } + steps: + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + with: { sparse-checkout-cone-mode: false, sparse-checkout: /.github } + - { uses: './.github/actions/setup/directories', with: { srcdir: 'src', builddir: 'build', makeup: true } } + - { uses: './.github/actions/compilers', name: 'GC_PROFILE_MORE_DETAIL', with: { cppflags: '-DGC_PROFILE_MORE_DETAIL' } } + - { uses: './.github/actions/compilers', name: 'MALLOC_ALLOCATED_SIZE_CHECK', with: { cppflags: '-DMALLOC_ALLOCATED_SIZE_CHECK' } } + - { uses: './.github/actions/compilers', name: 'RGENGC_ESTIMATE_OLDMALLOC', with: { cppflags: '-DRGENGC_ESTIMATE_OLDMALLOC' } } + # - { uses: './.github/actions/compilers', name: 'RGENGC_FORCE_MAJOR_GC', with: { cppflags: '-DRGENGC_FORCE_MAJOR_GC' } } + - { uses: './.github/actions/compilers', name: 'RGENGC_OBJ_INFO', with: { cppflags: '-DRGENGC_OBJ_INFO' } } + - { uses: './.github/actions/compilers', name: 'RGENGC_PROFILE', with: { cppflags: '-DRGENGC_PROFILE' } } + - { uses: './.github/actions/compilers', name: 'VM_DEBUG_BP_CHECK', with: { cppflags: '-DVM_DEBUG_BP_CHECK' } } + - { uses: './.github/actions/compilers', name: 'VM_DEBUG_VERIFY_METHOD_CACHE', with: { cppflags: '-DVM_DEBUG_VERIFY_METHOD_CACHE' } } + + compileC: + name: 'omnibus compilations, #12' + runs-on: ubuntu-latest + if: >- + ${{!(false + || contains(github.event.head_commit.message, '[DOC]') + || contains(github.event.head_commit.message, 'Document') + || contains(github.event.pull_request.title, '[DOC]') + || contains(github.event.pull_request.title, 'Document') + || contains(github.event.pull_request.labels.*.name, 'Documentation') + || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]') + )}} + services: { docuum: { image: 'stephanmisc/docuum', options: '--init', volumes: [ '/root', '/var/run/docker.sock:/var/run/docker.sock' ] } } + steps: + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + with: { sparse-checkout-cone-mode: false, sparse-checkout: /.github } + - { uses: './.github/actions/setup/directories', with: { srcdir: 'src', builddir: 'build', makeup: true } } + - { uses: './.github/actions/compilers', name: 'enable-yjit', with: { append_configure: '--enable-yjit --disable-rjit' } } + - { uses: './.github/actions/compilers', name: 'enable-rjit', with: { append_configure: '--enable-rjit --disable-yjit' } } + - { uses: './.github/actions/compilers', name: 'YJIT_FORCE_ENABLE', with: { cppflags: '-DYJIT_FORCE_ENABLE' } } + - { uses: './.github/actions/compilers', name: 'RJIT_FORCE_ENABLE', with: { cppflags: '-DRJIT_FORCE_ENABLE' } } + - { uses: './.github/actions/compilers', name: 'UNIVERSAL_PARSER', with: { cppflags: '-DUNIVERSAL_PARSER' } } + + compilemax: + name: 'omnibus compilations, result' + runs-on: ubuntu-latest + if: ${{ always() }} + needs: + - 'compile1' + - 'compile2' + - 'compile3' + - 'compile4' + - 'compile5' + - 'compile6' + - 'compile7' + - 'compile8' + - 'compile9' + - 'compileX' + - 'compileB' + - 'compileC' + steps: - uses: ./.github/actions/slack with: - label: ${{ matrix.entry.name }} + label: 'omnibus' SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot - if: ${{ failure() }} + if: ${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }} + - run: false + working-directory: + if: ${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }} defaults: run: diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index 5b4121c7178e1c..b4543ceeb9c2c2 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -51,12 +51,12 @@ jobs: || contains(github.event.head_commit.message, 'Document') || contains(github.event.pull_request.title, '[DOC]') || contains(github.event.pull_request.title, 'Document') - || contains(github.event.pull_request.labels.*.name, 'Document') + || contains(github.event.pull_request.labels.*.name, 'Documentation') || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]') )}} steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 with: sparse-checkout-cone-mode: false sparse-checkout: /.github @@ -80,6 +80,14 @@ jobs: sudo sysctl -w kern.coredump=1 sudo chmod -R +rwx /cores/ + - name: Delete unused SDKs + # To free up disk space to not run out during the run + run: | + sudo rm -rf ~/.dotnet + sudo rm -rf /Library/Android + sudo rm -rf /Library/Developer/CoreSimulator + continue-on-error: true + - name: Run configure run: ../src/configure -C --disable-install-doc ${ruby_configure_args} @@ -88,6 +96,18 @@ jobs: - run: make + - run: | + make golf + case "${{ matrix.configure }}" in + *'--enable-shared'*) + make runnable + ./bin/goruby -veh + ;; + *) + ./goruby -veh + ;; + esac + - name: Set test options for skipped tests run: | set -x @@ -118,7 +138,7 @@ jobs: timeout-minutes: 60 env: RUBY_TESTOPTS: '-q --tty=no' - TEST_BUNDLED_GEMS_ALLOW_FAILURES: '' + TEST_BUNDLED_GEMS_ALLOW_FAILURES: 'typeprof' PRECHECK_BUNDLED_GEMS: 'no' - name: make skipped tests diff --git a/.github/workflows/mingw.yml b/.github/workflows/mingw.yml index b3bacb24163b66..37cbfa5f385663 100644 --- a/.github/workflows/mingw.yml +++ b/.github/workflows/mingw.yml @@ -48,8 +48,9 @@ jobs: matrix: include: # To mitigate flakiness of MinGW CI, we test only one runtime that newer MSYS2 uses. + # Ruby 3.2 is the first Windows Ruby to use OpenSSL 3.x - msystem: 'UCRT64' - baseruby: '3.0' + baseruby: '3.2' test_task: 'check' test-all-opts: '--name=!/TestObjSpace#test_reachable_objects_during_iteration/' fail-fast: false @@ -60,7 +61,7 @@ jobs: || contains(github.event.head_commit.message, 'Document') || contains(github.event.pull_request.title, '[DOC]') || contains(github.event.pull_request.title, 'Document') - || contains(github.event.pull_request.labels.*.name, 'Document') + || contains(github.event.pull_request.labels.*.name, 'Documentation') || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]') )}} @@ -70,34 +71,30 @@ jobs: with: ruby-version: ${{ matrix.baseruby }} - - name: where check + - name: Misc system & package info + working-directory: run: | # show where - mv /c/Windows/System32/libcrypto-1_1-x64.dll /c/Windows/System32/libcrypto-1_1-x64.dll_ - mv /c/Windows/System32/libssl-1_1-x64.dll /c/Windows/System32/libssl-1_1-x64.dll_ result=true - for e in gcc.exe ragel.exe make.exe libcrypto-1_1-x64.dll libssl-1_1-x64.dll; do + for e in gcc.exe ragel.exe make.exe libcrypto-3-x64.dll libssl-3-x64.dll; do echo ::group::$'\033[93m'$e$'\033[m' where $e || result=false echo ::endgroup:: done - $result - working-directory: - - - name: version check - run: | # show version - result=true for e in gcc ragel make "openssl version"; do case "$e" in *" "*) ;; *) e="$e --version";; esac echo ::group::$'\033[93m'$e$'\033[m' $e || result=false echo ::endgroup:: done + # show packages + echo ::group::$'\033[93m'Packages$'\033[m' + pacman -Qs mingw-w64-ucrt-x86_64-* | sed -n "s,local/mingw-w64-ucrt-x86_64-,,p" + echo ::endgroup:: $result - working-directory: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 with: sparse-checkout-cone-mode: false sparse-checkout: /.github diff --git a/.github/workflows/prism.yml b/.github/workflows/parsey.yml similarity index 63% rename from .github/workflows/prism.yml rename to .github/workflows/parsey.yml index de0243cd8f081f..f9b3a868da1848 100644 --- a/.github/workflows/prism.yml +++ b/.github/workflows/parsey.yml @@ -1,22 +1,20 @@ -name: Prism +name: parse.y on: push: paths-ignore: - 'doc/**' + - '**/man/*' - '**.md' - '**.rdoc' - '**/.document' - - '**.[1-8]' - - '**.ronn' - '.*.yml' pull_request: paths-ignore: - 'doc/**' + - '**/man/*' - '**.md' - '**.rdoc' - '**/.document' - - '**.[1-8]' - - '**.ronn' - '.*.yml' merge_group: @@ -32,34 +30,9 @@ jobs: strategy: matrix: include: - - test_task: test - run_opts: '--parser=prism' - testopts: '-v --tty=no' - timeout: 30 - - test_task: test-all - run_opts: '--parser=prism' - testopts: '-q --tty=no --excludes-dir="../src/test/.excludes-prism" --exclude="error_highlight/test_error_highlight.rb"' - timeout: 40 - - test_task: test-spec - run_opts: '--parser=prism' - specopts: '-T --parser=prism' - timeout: 10 - - test_task: test-tool - run_opts: '--parser=prism' - testopts: '-v --tty=no' - timeout: 30 + - test_task: check - test_task: test-bundler-parallel - run_opts: '--parser=prism' - testopts: '-v --tty=no' - timeout: 50 - test_task: test-bundled-gems - run_opts: '--parser=prism' - testopts: '-v --tty=no' - timeout: 30 - - test_task: test-syntax-suggest - run_opts: '--parser=prism' - testopts: '-v --tty=no' - timeout: 30 fail-fast: false env: @@ -75,12 +48,12 @@ jobs: || contains(github.event.head_commit.message, 'Document') || contains(github.event.pull_request.title, '[DOC]') || contains(github.event.pull_request.title, 'Document') - || contains(github.event.pull_request.labels.*.name, 'Document') + || contains(github.event.pull_request.labels.*.name, 'Documentation') || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]') )}} steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 with: sparse-checkout-cone-mode: false sparse-checkout: /.github @@ -92,6 +65,8 @@ jobs: srcdir: src builddir: build makeup: true + clean: true + dummy-files: ${{ matrix.test_task == 'check' }} - name: Run configure run: ../src/configure -C --disable-install-doc cppflags=-DRUBY_DEBUG @@ -100,11 +75,12 @@ jobs: - name: make ${{ matrix.test_task }} run: make -s ${{ matrix.test_task }} RUN_OPTS="$RUN_OPTS" SPECOPTS="$SPECOPTS" - timeout-minutes: ${{ matrix.timeout }} env: RUBY_TESTOPTS: ${{ matrix.testopts }} - RUN_OPTS: ${{ matrix.run_opts }} - SPECOPTS: ${{ matrix.specopts }} + EXCLUDES: '../src/test/.excludes-parsey' + RUN_OPTS: ${{ matrix.run_opts || '--parser=parse.y' }} + SPECOPTS: ${{ matrix.specopts || '-T --parser=parse.y' }} + TEST_BUNDLED_GEMS_ALLOW_FAILURES: 'typeprof' - uses: ./.github/actions/slack with: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e335c965143494..5534e3defec392 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -96,7 +96,7 @@ jobs: -H "Accept: application/vnd.github+json" \ -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/repos/rbenv/ruby-build/dispatches \ - -d '{"event_type": "update-ruby"}' + -d '{"event_type": "update-ruby", "client_payload": {"ruby_version": "${{ env.RUBY_VERSION }}", "openssl_version": "3.0.15"}}' - name: Update all-ruby definition run: | diff --git a/.github/workflows/rjit-bindgen.yml b/.github/workflows/rjit-bindgen.yml index 0782981f96c5b9..c2ec4a6a6824a1 100644 --- a/.github/workflows/rjit-bindgen.yml +++ b/.github/workflows/rjit-bindgen.yml @@ -41,7 +41,7 @@ jobs: || contains(github.event.head_commit.message, 'Document') || contains(github.event.pull_request.title, '[DOC]') || contains(github.event.pull_request.title, 'Document') - || contains(github.event.pull_request.labels.*.name, 'Document') + || contains(github.event.pull_request.labels.*.name, 'Documentation') || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]') )}} @@ -51,7 +51,7 @@ jobs: with: ruby-version: '3.1' - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 with: sparse-checkout-cone-mode: false sparse-checkout: /.github diff --git a/.github/workflows/rjit.yml b/.github/workflows/rjit.yml index 2d5a3a758293c8..12e6b94b53ff9f 100644 --- a/.github/workflows/rjit.yml +++ b/.github/workflows/rjit.yml @@ -50,12 +50,12 @@ jobs: || contains(github.event.head_commit.message, 'Document') || contains(github.event.pull_request.title, '[DOC]') || contains(github.event.pull_request.title, 'Document') - || contains(github.event.pull_request.labels.*.name, 'Document') + || contains(github.event.pull_request.labels.*.name, 'Documentation') || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]') )}} steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 with: sparse-checkout-cone-mode: false sparse-checkout: /.github diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index 406dd41c57a58a..4dc912f3db4ecd 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -32,7 +32,7 @@ jobs: steps: - name: 'Checkout code' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 with: persist-credentials: false @@ -67,6 +67,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: 'Upload to code-scanning' - uses: github/codeql-action/upload-sarif@2c779ab0d087cd7fe7b826087247c2c81f27bfa6 # v3.26.5 + uses: github/codeql-action/upload-sarif@c36620d31ac7c881962c3d9dd939c40ec9434f2b # v3.26.12 with: sarif_file: results.sarif diff --git a/.github/workflows/spec_guards.yml b/.github/workflows/spec_guards.yml index be70a51672a2cb..321099f024a890 100644 --- a/.github/workflows/spec_guards.yml +++ b/.github/workflows/spec_guards.yml @@ -30,7 +30,7 @@ jobs: || contains(github.event.head_commit.message, 'Document') || contains(github.event.pull_request.title, '[DOC]') || contains(github.event.pull_request.title, 'Document') - || contains(github.event.pull_request.labels.*.name, 'Document') + || contains(github.event.pull_request.labels.*.name, 'Documentation') || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]') )}} @@ -45,7 +45,7 @@ jobs: - ruby-3.3 steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 - uses: ruby/setup-ruby@a6e6f86333f0a2523ece813039b8b4be04560854 # v1.190.0 with: diff --git a/.github/workflows/ubuntu.yml b/.github/workflows/ubuntu.yml index ca1074f57b5ad1..750944e754ed30 100644 --- a/.github/workflows/ubuntu.yml +++ b/.github/workflows/ubuntu.yml @@ -35,13 +35,14 @@ jobs: configure: '--enable-shared --enable-load-relative' - test_task: check shared_gc: true - shared_gc_dir: '/home/runner/ruby_gc' configure: '--with-shared-gc=/home/runner/ruby_gc' - test_task: test-bundler-parallel timeout: 50 - test_task: test-bundled-gems - test_task: check os: ubuntu-20.04 + - test_task: check + os: ubuntu-24.04 fail-fast: false env: @@ -56,12 +57,12 @@ jobs: || contains(github.event.head_commit.message, 'Document') || contains(github.event.pull_request.title, '[DOC]') || contains(github.event.pull_request.title, 'Document') - || contains(github.event.pull_request.labels.*.name, 'Document') + || contains(github.event.pull_request.labels.*.name, 'Documentation') || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]') )}} steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 with: sparse-checkout-cone-mode: false sparse-checkout: /.github @@ -97,14 +98,25 @@ jobs: if: ${{ matrix.test_task == 'test-bundled-gems' }} - name: Build shared GC - run: > - echo "RUBY_GC_LIBRARY=librubygc.default.so" >> $GITHUB_ENV && - mkdir ${{ matrix.shared_gc_dir }} && + run: | + echo "RUBY_GC_LIBRARY=librubygc.default.so" >> $GITHUB_ENV make shared-gc SHARED_GC=default if: ${{ matrix.shared_gc }} - run: $SETARCH make + - run: | + $SETARCH make golf + case "${{ matrix.configure }}" in + *'--enable-shared'*) + $SETARCH make runnable + ./bin/goruby -veh + ;; + *) + ./goruby -veh + ;; + esac + - name: Set test options for skipped tests run: | set -x @@ -130,7 +142,7 @@ jobs: timeout-minutes: ${{ matrix.timeout || 40 }} env: RUBY_TESTOPTS: '-q --tty=no' - TEST_BUNDLED_GEMS_ALLOW_FAILURES: '' + TEST_BUNDLED_GEMS_ALLOW_FAILURES: 'typeprof' PRECHECK_BUNDLED_GEMS: 'no' - name: make skipped tests diff --git a/.github/workflows/wasm.yml b/.github/workflows/wasm.yml index 51eeb7a75b2ae7..3924aaeb9905ca 100644 --- a/.github/workflows/wasm.yml +++ b/.github/workflows/wasm.yml @@ -56,12 +56,12 @@ jobs: || contains(github.event.head_commit.message, 'Document') || contains(github.event.pull_request.title, '[DOC]') || contains(github.event.pull_request.title, 'Document') - || contains(github.event.pull_request.labels.*.name, 'Document') + || contains(github.event.pull_request.labels.*.name, 'Documentation') || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]') )}} steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 with: sparse-checkout-cone-mode: false sparse-checkout: /.github @@ -136,7 +136,7 @@ jobs: - run: tar cfz ../install.tar.gz -C ../install . - name: Upload artifacts - uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a # v4.3.6 + uses: actions/upload-artifact@604373da6381bf24206979c74d06a550515601b9 # v4.4.1 with: name: ruby-wasm-install path: ${{ github.workspace }}/install.tar.gz @@ -164,7 +164,7 @@ jobs: - name: Save Pull Request number if: ${{ github.event_name == 'pull_request' }} run: echo "${{ github.event.pull_request.number }}" >> ${{ github.workspace }}/github-pr-info.txt - - uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a # v4.3.6 + - uses: actions/upload-artifact@604373da6381bf24206979c74d06a550515601b9 # v4.4.1 if: ${{ github.event_name == 'pull_request' }} with: name: github-pr-info diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index dde781b9eeda69..61ce6b9efedf2f 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -9,13 +9,8 @@ on: - '**/.document' - '.*.yml' pull_request: - paths-ignore: - - 'doc/**' - - '**/man/*' - - '**.md' - - '**.rdoc' - - '**/.document' - - '.*.yml' + # Do not use paths-ignore for required status checks + # https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/troubleshooting-required-status-checks#handling-skipped-but-required-checks merge_group: concurrency: @@ -45,7 +40,7 @@ jobs: || contains(github.event.head_commit.message, 'Document') || contains(github.event.pull_request.title, '[DOC]') || contains(github.event.pull_request.title, 'Document') - || contains(github.event.pull_request.labels.*.name, 'Document') + || contains(github.event.pull_request.labels.*.name, 'Documentation') || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]') )}} @@ -107,7 +102,7 @@ jobs: Join-Path (Resolve-Path ~).Path "scoop\shims" >> $Env:GITHUB_PATH shell: pwsh - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 with: sparse-checkout-cone-mode: false sparse-checkout: /.github @@ -122,9 +117,12 @@ jobs: # %TEMP% is inconsistent with %TMP% and test-all expects they are consistent. # https://github.com/actions/virtual-environments/issues/712#issuecomment-613004302 run: | - set VS=${{ matrix.vs }} - set VCVARS="C:\Program Files (x86)\Microsoft Visual Studio\%VS%\Enterprise\VC\Auxiliary\Build\vcvars64.bat" - if not exist %VCVARS% set VCVARS="C:\Program Files\Microsoft Visual Studio\%VS%\Enterprise\VC\Auxiliary\Build\vcvars64.bat" + ::- Set up VC ${{ matrix.vc || matrix.vs }} + set vswhere="%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" + for /f "delims=;" %%I in ('%vswhere% -latest -property installationPath') do ( + set VCVARS="%%I\VC\Auxiliary\Build\vcvars64.bat" + ) + set VCVARS set | C:\msys64\usr\bin\sort > old.env call %VCVARS% ${{ matrix.vcvars || '' }} nmake -f nul @@ -142,6 +140,10 @@ jobs: - name: compiler version run: cl + - name: volume info + run: Get-Volume + shell: pwsh + - name: Install libraries with vcpkg run: | vcpkg install diff --git a/.github/workflows/yjit-macos.yml b/.github/workflows/yjit-macos.yml index 304f3c3513a2de..e93981f3792df8 100644 --- a/.github/workflows/yjit-macos.yml +++ b/.github/workflows/yjit-macos.yml @@ -32,12 +32,12 @@ jobs: || contains(github.event.head_commit.message, 'Document') || contains(github.event.pull_request.title, '[DOC]') || contains(github.event.pull_request.title, 'Document') - || contains(github.event.pull_request.labels.*.name, 'Document') + || contains(github.event.pull_request.labels.*.name, 'Documentation') || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]') )}} steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 - run: RUST_BACKTRACE=1 cargo test working-directory: yjit @@ -76,12 +76,12 @@ jobs: || contains(github.event.head_commit.message, 'Document') || contains(github.event.pull_request.title, '[DOC]') || contains(github.event.pull_request.title, 'Document') - || contains(github.event.pull_request.labels.*.name, 'Document') + || contains(github.event.pull_request.labels.*.name, 'Documentation') || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]') )}} steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 with: sparse-checkout-cone-mode: false sparse-checkout: /.github @@ -134,7 +134,7 @@ jobs: timeout-minutes: 60 env: RUBY_TESTOPTS: '-q --tty=no' - TEST_BUNDLED_GEMS_ALLOW_FAILURES: '' + TEST_BUNDLED_GEMS_ALLOW_FAILURES: 'typeprof' SYNTAX_SUGGEST_TIMEOUT: '5' PRECHECK_BUNDLED_GEMS: 'no' continue-on-error: ${{ matrix.continue-on-test_task || false }} diff --git a/.github/workflows/yjit-ubuntu.yml b/.github/workflows/yjit-ubuntu.yml index e585c90ae8f6fe..7b7ec644a2e75e 100644 --- a/.github/workflows/yjit-ubuntu.yml +++ b/.github/workflows/yjit-ubuntu.yml @@ -31,12 +31,12 @@ jobs: ${{!(false || contains(github.event.head_commit.message, '[DOC]') || contains(github.event.pull_request.title, '[DOC]') - || contains(github.event.pull_request.labels.*.name, 'Document') + || contains(github.event.pull_request.labels.*.name, 'Documentation') || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]') )}} steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 # For now we can't run cargo test --offline because it complains about the # capstone dependency, even though the dependency is optional @@ -63,12 +63,12 @@ jobs: ${{!(false || contains(github.event.head_commit.message, '[DOC]') || contains(github.event.pull_request.title, '[DOC]') - || contains(github.event.pull_request.labels.*.name, 'Document') + || contains(github.event.pull_request.labels.*.name, 'Documentation') || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]') )}} steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 # Check that we don't have linting errors in release mode, too - run: cargo clippy --all-targets --all-features @@ -122,12 +122,12 @@ jobs: || contains(github.event.head_commit.message, 'Document') || contains(github.event.pull_request.title, '[DOC]') || contains(github.event.pull_request.title, 'Document') - || contains(github.event.pull_request.labels.*.name, 'Document') + || contains(github.event.pull_request.labels.*.name, 'Documentation') || (github.event_name == 'push' && github.event.pull_request.user.login == 'dependabot[bot]') )}} steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 with: sparse-checkout-cone-mode: false sparse-checkout: /.github @@ -187,7 +187,7 @@ jobs: timeout-minutes: 90 env: RUBY_TESTOPTS: '-q --tty=no' - TEST_BUNDLED_GEMS_ALLOW_FAILURES: '' + TEST_BUNDLED_GEMS_ALLOW_FAILURES: 'typeprof' PRECHECK_BUNDLED_GEMS: 'no' SYNTAX_SUGGEST_TIMEOUT: '5' YJIT_BINDGEN_DIFF_OPTS: '--exit-code' diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 7fad46c601a125..00000000000000 --- a/.travis.yml +++ /dev/null @@ -1,153 +0,0 @@ -# -*- YAML -*- -# Copyright (C) 2011 Urabe, Shyouhei. All rights reserved. -# -# This file is a part of the programming language Ruby. Permission is hereby -# granted, to either redistribute or modify this file, provided that the -# conditions mentioned in the file COPYING are met. Consult the file for -# details. - -# When you see Travis CI issues, or you are interested in understanding how to -# manage, please check the link below. -# https://github.com/ruby/ruby/wiki/CI-Servers#travis-ci - -# We enable Travis on the specific branches or forked repositories here. -if: >- - (repo != ruby/ruby OR branch = master OR branch =~ /^ruby_\d_\d$/) - AND (commit_message !~ /\[DOC\]/) - -language: c - -os: linux - -dist: jammy - -git: - quiet: true - -env: - global: - - NPROC="$(nproc)" - - JOBS="-j${NPROC}" - # SETARCH are overridden when necessary. See below. - - SETARCH= - # https://github.com/travis-ci/travis-build/blob/e411371dda21430a60f61b8f3f57943d2fe4d344/lib/travis/build/bash/travis_apt_get_options.bash#L7 - - travis_apt_get_options='--allow-downgrades --allow-remove-essential --allow-change-held-packages' - - travis_apt_get_options="-yq --no-install-suggests --no-install-recommends $travis_apt_get_options" - # -g0 disables backtraces when SEGV. Do not set that. - - debugflags=-ggdb3 - - RUBY_TESTOPTS="$JOBS -q --tty=no" - -.org.ruby-lang.ci.matrix-definitions: - - &gcc-11 - compiler: gcc-11 - before_install: - - tool/travis_retry.sh sudo bash -c "rm -rf '${TRAVIS_ROOT}/var/lib/apt/lists/'* && exec apt-get update -yq" - - >- - tool/travis_retry.sh sudo -E apt-get $travis_apt_get_options install - gcc-11 - g++-11 - libffi-dev - libncurses-dev - libncursesw5-dev - libreadline-dev - libssl-dev - libyaml-dev - openssl - zlib1g-dev - - gcc-11 --version - - &arm64-linux - name: arm64-linux - arch: arm64 - <<: *gcc-11 - - &ppc64le-linux - name: ppc64le-linux - arch: ppc64le - <<: *gcc-11 - - &s390x-linux - name: s390x-linux - arch: s390x - <<: *gcc-11 - env: - # Avoid possible test failures with the zlib applying the following patch - # on s390x CPU architecture. - # https://github.com/madler/zlib/pull/410 - - DFLTCC=0 - - &arm32-linux - name: arm32-linux - arch: arm64 - # https://packages.ubuntu.com/jammy/crossbuild-essential-armhf - compiler: arm-linux-gnueabihf-gcc - env: - - SETARCH='setarch linux32 --verbose --32bit' - # Still keep the -O1 for only arm32, while we want to test with the - # default optflags -O3. - # Because bootstraptest/test_ractor.rb fails with segfualt with the - # default -O3. - # https://bugs.ruby-lang.org/issues/19981 - - optflags=-O1 - before_install: - - sudo dpkg --add-architecture armhf - - tool/travis_retry.sh sudo bash -c "rm -rf '${TRAVIS_ROOT}/var/lib/apt/lists/'* && exec apt-get update -yq" - - >- - tool/travis_retry.sh sudo -E apt-get $travis_apt_get_options install - crossbuild-essential-armhf - libc6:armhf - libstdc++-10-dev:armhf - libffi-dev:armhf - libncurses-dev:armhf - libncursesw5-dev:armhf - libreadline-dev:armhf - libssl-dev:armhf - libyaml-dev:armhf - linux-libc-dev:armhf - zlib1g-dev:armhf - -matrix: - include: - - <<: *arm64-linux - - <<: *ppc64le-linux - - <<: *s390x-linux - # FIXME: lib/rubygems/util.rb:104 glob_files_in_dir - - # :411:in glob: File name too long - (Errno::ENAMETOOLONG) - # https://github.com/rubygems/rubygems/issues/7132 - - <<: *arm32-linux - allow_failures: - # Allow failures for the unstable jobs. - # - name: arm64-linux - - name: ppc64le-linux - - name: s390x-linux - # The 2nd arm64 pipeline may be unstable. - # - name: arm32-linux - fast_finish: true - -before_script: - - lscpu - - ./autogen.sh - - mkdir build - - cd build - - $SETARCH ../configure -C --disable-install-doc --prefix=$(pwd)/install - - $SETARCH make -s $JOBS - - make -s $JOBS install - # Useful info to report issues to the Ruby. - - $SETARCH $(pwd)/install/bin/ruby -v - # Useful info To report issues to the RubyGems. - - $SETARCH $(pwd)/install/bin/gem env - -script: - - $SETARCH make -s test - - ../tool/travis_wait.sh $SETARCH make -s test-all RUBYOPT="-w" - - ../tool/travis_wait.sh $SETARCH make -s test-spec - -# We want to be notified when something happens. -notifications: - webhooks: - urls: - # ruby-lang slack: ruby/simpler-alerts-bot (travis) - - secure: mRsoS/UbqDkKkW5p3AEqM27d4SZnV6Gsylo3bm8T/deltQzTsGzZwrm7OIBXZv0UFZdE68XmPlyHfZFLSP2V9QZ7apXMf9/vw0GtcSe1gchtnjpAPF6lYBn7nMCbVPPx9cS0dwL927fjdRM1vj7IKZ2bk4F0lAJ25R25S6teqdk= - on_success: never - on_failure: always - email: - recipients: - - jun.aruga@gmail.com - on_success: never - on_failure: always diff --git a/NEWS.md b/NEWS.md index 1dffd2dad0be92..89aad671870881 100644 --- a/NEWS.md +++ b/NEWS.md @@ -25,7 +25,7 @@ Note that each entry is kept to a minimum, see links for details. * Keyword arguments are no longer allowed in index assignment (e.g. `a[0, kw: 1] = 2`). [[Bug #20218]] -* `GC.config` added to allow setting configuration variables on the Garbage +* GC.config added to allow setting configuration variables on the Garbage Collector. [[Feature #20443]] * GC configuration parameter `rgengc_allow_full_mark` introduced. When `false` @@ -37,64 +37,79 @@ Note: We're only listing outstanding class updates. * Exception - * Exception#set_backtrace now accepts arrays of `Thread::Backtrace::Location`. - `Kernel#raise`, `Thread#raise` and `Fiber#raise` also accept this new format. [[Feature #13557]] + * Exception#set_backtrace now accepts arrays of Thread::Backtrace::Location. + Kernel#raise, Thread#raise and Fiber#raise also accept this new format. [[Feature #13557]] * Range - * Range#size now raises TypeError if the range is not iterable. [[Misc #18984]] - * Range#step now consistently has a semantics of iterating by using `+` operator - for all types, not only numerics. [[Feature #18368]] + * Range#size now raises TypeError if the range is not iterable. [[Misc #18984]] + * Range#step now consistently has a semantics of iterating by using `+` operator + for all types, not only numerics. [[Feature #18368]] - ```ruby - (Time.utc(2022, 2, 24)..).step(24*60*60).take(3) - #=> [2022-02-24 00:00:00 UTC, 2022-02-25 00:00:00 UTC, 2022-02-26 00:00:00 UTC] - ``` + ```ruby + (Time.utc(2022, 2, 24)..).step(24*60*60).take(3) + #=> [2022-02-24 00:00:00 UTC, 2022-02-25 00:00:00 UTC, 2022-02-26 00:00:00 UTC] + ``` * RubyVM::AbstractSyntaxTree - * Add `RubyVM::AbstractSyntaxTree::Node#locations` method which returns location objects - associated with the AST node. [[Feature #20624]] - * Add `RubyVM::AbstractSyntaxTree::Location` class which holds location information. [[Feature #20624]] + * Add RubyVM::AbstractSyntaxTree::Node#locations method which returns location objects + associated with the AST node. [[Feature #20624]] + * Add RubyVM::AbstractSyntaxTree::Location class which holds location information. [[Feature #20624]] ## Stdlib updates +The following default gem is added. + +* win32-registry 0.0.1 + * Tempfile - * The keyword argument `anonymous: true` is implemented for `Tempfile.create`. + * The keyword argument `anonymous: true` is implemented for Tempfile.create. `Tempfile.create(anonymous: true)` removes the created temporary file immediately. So applications don't need to remove the file. [[Feature #20497]] +* win32/sspi.rb + + * This library is now extracted from the Ruby repository to [ruby/net-http-sspi]. + [[Feature #20775]] + The following default gems are updated. * RubyGems 3.6.0.dev * bundler 2.6.0.dev * erb 4.0.4 -* fiddle 1.1.3 +* fiddle 1.1.3.dev * io-console 0.7.2 -* irb 1.14.0 +* irb 1.14.1 * json 2.7.2 +* logger 1.6.1 * net-http 0.4.1 * optparse 0.5.0 * prism 1.0.0 +* psych 5.2.0.beta1 * rdoc 6.7.0 -* reline 0.5.9 +* reline 0.5.10 * resolv 0.4.0 -* stringio 3.1.2 -* strscan 3.1.1 +* stringio 3.1.2.dev +* strscan 3.1.1.dev +* time 0.4.0 +* uri 0.13.1 +* zlib 3.1.1 The following bundled gems are updated. * minitest 5.25.1 +* power_assert 2.0.4 * rake 13.2.1 * test-unit 3.6.2 -* rexml 3.3.6 +* rexml 3.3.8 * rss 0.3.1 -* net-ftp 0.3.7 -* net-imap 0.4.15 +* net-ftp 0.3.8 +* net-imap 0.4.16 * net-smtp 0.5.0 -* rbs 3.5.3 +* rbs 3.6.1 * typeprof 0.21.11 * debug 1.9.2 * racc 1.8.1 @@ -114,25 +129,42 @@ The following bundled gems are promoted from default gems. * syslog 0.1.2 * csv 3.3.0 -See GitHub releases like [GitHub Releases of Logger](https://github.com/ruby/logger/releases) or changelog for details of the default gems or bundled gems. +The following bundled gem is added. + +* repl_type_completor 0.1.7 + +See GitHub releases like [GitHub Releases of Logger] or changelog for +details of the default gems or bundled gems. + +[ruby/net-http-sspi]: https://github.com/ruby/net-http-sspi +[GitHub Releases of Logger]: https://github.com/ruby/logger/releases ## Supported platforms ## Compatibility issues * Error messages and backtrace displays have been changed. - * Use a single quote instead of a backtick as a opening quote. [[Feature #16495]] - * Display a class name before a method name (only when the class has a permanent name). [[Feature #19117]] - * `Kernel#caller`, `Thread::Backtrace::Location`'s methods, etc. are also changed accordingly. - ``` - Old: - test.rb:1:in `foo': undefined method `time' for an instance of Integer - from test.rb:2:in `
' - - New: - test.rb:1:in 'Object#foo': undefined method 'time' for an instance of Integer - from test.rb:2:in `
' - ``` + + * Use a single quote instead of a backtick as an opening quote. [[Feature #16495]] + * Display a class name before a method name (only when the class has a permanent name). [[Feature #19117]] + * Kernel#caller, Thread::Backtrace::Location’s methods, etc. are also changed accordingly. + + Old: + ``` + test.rb:1:in `foo': undefined method `time' for an instance of Integer + from test.rb:2:in `
' + ``` + + New: + ``` + test.rb:1:in 'Object#foo': undefined method 'time' for an instance of Integer + from test.rb:2:in '
' + ``` + +* Hash#inspect rendering have been changed. [[Bug #20433]] + + * Symbol keys are displayed using the modern symbol key syntax: `"{user: 1}"` + * Other keys now have spaces around `=>`: `'{"user" => 1}'`, while previously they didn't: `'{"user"=>1}'` ## Stdlib compatibility issues @@ -143,7 +175,7 @@ See GitHub releases like [GitHub Releases of Logger](https://github.com/ruby/log ## Implementation improvements -* `Array#each` is rewritten in Ruby for better performance [[Feature #20182]]. +* Array#each is rewritten in Ruby for better performance [[Feature #20182]]. ## JIT @@ -154,7 +186,7 @@ See GitHub releases like [GitHub Releases of Logger](https://github.com/ruby/log [[Feature #15554]] * Redefining some core methods that are specially optimized by the interpreter - and JIT like `String.freeze` or `Integer#+` now emits a performance class + and JIT like String#freeze or Integer#+ now emits a performance class warning (`-W:performance` or `Warning[:performance] = true`). [[Feature #20429]] @@ -173,6 +205,8 @@ See GitHub releases like [GitHub Releases of Logger](https://github.com/ruby/log [Bug #20218]: https://bugs.ruby-lang.org/issues/20218 [Feature #20265]: https://bugs.ruby-lang.org/issues/20265 [Feature #20429]: https://bugs.ruby-lang.org/issues/20429 +[Bug #20433]: https://bugs.ruby-lang.org/issues/20433 [Feature #20443]: https://bugs.ruby-lang.org/issues/20443 [Feature #20497]: https://bugs.ruby-lang.org/issues/20497 [Feature #20624]: https://bugs.ruby-lang.org/issues/20624 +[Feature #20775]: https://bugs.ruby-lang.org/issues/20775 diff --git a/array.c b/array.c index f835d21b4170ff..c1ae780fc65b32 100644 --- a/array.c +++ b/array.c @@ -41,6 +41,7 @@ #include "internal/mmtk_macros.h" VALUE rb_cArray; +VALUE rb_cArray_empty_frozen; /* Flags of RArray * @@ -787,16 +788,19 @@ ary_ensure_room_for_push(VALUE ary, long add_len) /* * call-seq: - * array.freeze -> self + * freeze -> self * - * Freezes +self+; returns +self+: + * Freezes +self+ (if not already frozen); returns +self+: * * a = [] * a.frozen? # => false * a.freeze * a.frozen? # => true * - * An attempt to modify a frozen +Array+ raises FrozenError. + * No further changes may be made to +self+; + * raises FrozenError if a change is attempted. + * + * Related: Kernel#frozen?. */ VALUE @@ -1686,7 +1690,7 @@ rb_ary_cat(VALUE ary, const VALUE *argv, long len) * a = [:foo, 'bar', 2] # => [:foo, "bar", 2] a.push([:baz, :bat], [:bam, :bad]) # => [:foo, "bar", 2, [:baz, :bat], [:bam, :bad]] * - * Related: Array#pop, Array#shift, Array#unshift. + * Related: see {Methods for Assigning}[rdoc-ref:Array@Methods+for+Assigning]. */ static VALUE @@ -1716,33 +1720,32 @@ rb_ary_pop(VALUE ary) /* * call-seq: - * array.pop -> object or nil - * array.pop(n) -> new_array + * pop -> object or nil + * pop(count) -> new_array * - * Removes and returns trailing elements. + * Removes and returns trailing elements of +self+. * - * When no argument is given and +self+ is not empty, - * removes and returns the last element: + * With no argument given, removes and returns the last element, if available; + * otherwise returns +nil+: * * a = [:foo, 'bar', 2] - * a.pop # => 2 - * a # => [:foo, "bar"] + * a.pop # => 2 + * a # => [:foo, "bar"] + * [].pop # => nil * - * Returns +nil+ if the array is empty. + * With non-negative integer argument +count+ given, + * returns a new array containing the trailing +count+ elements of +self+, as available: * - * When a non-negative Integer argument +n+ is given and is in range, - * - * removes and returns the last +n+ elements in a new +Array+: * a = [:foo, 'bar', 2] * a.pop(2) # => ["bar", 2] - * - * If +n+ is positive and out of range, - * removes and returns all elements: + * a # => [:foo] * * a = [:foo, 'bar', 2] * a.pop(50) # => [:foo, "bar", 2] + * a # => [] * - * Related: #push, #shift, #unshift. + * Related: Array#push; + * see also {Methods for Deleting}[rdoc-ref:Array@Methods+for+Deleting]. */ static VALUE @@ -1964,14 +1967,16 @@ ary_ensure_room_for_unshift(VALUE ary, int argc) /* * call-seq: - * array.unshift(*objects) -> self + * unshift(*objects) -> self + * prepend(*objects) -> self * * Prepends the given +objects+ to +self+: * * a = [:foo, 'bar', 2] * a.unshift(:bam, :bat) # => [:bam, :bat, :foo, "bar", 2] * - * Related: #push, #pop, #shift. + * Related: Array#shift; + * see also {Methods for Assigning}[rdoc-ref:Array@Methods+for+Assigning]. */ VALUE @@ -2164,6 +2169,7 @@ static VALUE rb_ary_aref2(VALUE ary, VALUE b, VALUE e); * # Raises TypeError (no implicit conversion of Symbol into Integer): * a[:foo] * + * Related: see {Methods for Fetching}[rdoc-ref:Array@Methods+for+Fetching]. */ VALUE @@ -2229,7 +2235,8 @@ rb_ary_aref1(VALUE ary, VALUE arg) * * a.at(-2) # => "bar" * - * Related: Array#[]. + * Related: Array#[]; + * see also {Methods for Fetching}[rdoc-ref:Array@Methods+for+Fetching]. */ VALUE @@ -2278,17 +2285,19 @@ rb_ary_last(int argc, const VALUE *argv, VALUE ary) // used by parse.y /* * call-seq: - * array.fetch(index) -> element - * array.fetch(index, default_value) -> element - * array.fetch(index) {|index| ... } -> element + * fetch(index) -> element + * fetch(index, default_value) -> element or default_value + * fetch(index) {|index| ... } -> element or block_return_value * - * Returns the element at offset +index+. + * Returns the element of +self+ at offset +index+ if +index+ is in range; +index+ must be an + * {integer-convertible object}[rdoc-ref:implicit_conversion.rdoc@Integer-Convertible+Objects]. * - * With the single Integer argument +index+, + * With the single argument +index+ and no block, * returns the element at offset +index+: * * a = [:foo, 'bar', 2] - * a.fetch(1) # => "bar" + * a.fetch(1) # => "bar" + * a.fetch(1.1) # => "bar" * * If +index+ is negative, counts from the end of the array: * @@ -2296,12 +2305,12 @@ rb_ary_last(int argc, const VALUE *argv, VALUE ary) // used by parse.y * a.fetch(-1) # => 2 * a.fetch(-2) # => "bar" * - * With arguments +index+ and +default_value+, - * returns the element at offset +index+ if index is in range, - * otherwise returns +default_value+: + * With arguments +index+ and +default_value+ (which may be any object) and no block, + * returns +default_value+ if +index+ is out-of-range: * * a = [:foo, 'bar', 2] - * a.fetch(1, nil) # => "bar" + * a.fetch(1, nil) # => "bar" + * a.fetch(3, :foo) # => :foo * * With argument +index+ and a block, * returns the element at offset +index+ if index is in range @@ -2311,6 +2320,7 @@ rb_ary_last(int argc, const VALUE *argv, VALUE ary) // used by parse.y * a.fetch(1) {|index| raise 'Cannot happen' } # => "bar" * a.fetch(50) {|index| "Value for #{index}" } # => "Value for 50" * + * Related: see {Methods for Fetching}[rdoc-ref:Array@Methods+for+Fetching]. */ static VALUE @@ -2343,13 +2353,16 @@ rb_ary_fetch(int argc, VALUE *argv, VALUE ary) /* * call-seq: - * array.index(object) -> integer or nil - * array.index {|element| ... } -> integer or nil - * array.index -> new_enumerator + * find_index(object) -> integer or nil + * find_index {|element| ... } -> integer or nil + * find_index -> new_enumerator + * index(object) -> integer or nil + * index {|element| ... } -> integer or nil + * index -> new_enumerator * - * Returns the index of a specified element. + * Returns the zero-based integer index of a specified element, or +nil+. * - * When argument +object+ is given but no block, + * With only argument +object+ given, * returns the index of the first element +element+ * for which object == element: * @@ -2358,7 +2371,7 @@ rb_ary_fetch(int argc, VALUE *argv, VALUE ary) * * Returns +nil+ if no such element found. * - * When both argument +object+ and a block are given, + * With only a block given, * calls the block with each successive element; * returns the index of the first element for which the block returns a truthy value: * @@ -2367,14 +2380,9 @@ rb_ary_fetch(int argc, VALUE *argv, VALUE ary) * * Returns +nil+ if the block never returns a truthy value. * - * When neither an argument nor a block is given, returns a new Enumerator: + * With neither an argument nor a block given, returns a new Enumerator. * - * a = [:foo, 'bar', 2] - * e = a.index - * e # => # - * e.each {|element| element == 'bar' } # => 1 - * - * Related: #rindex. + * Related: see {Methods for Querying}[rdoc-ref:Array@Methods+for+Querying]. */ static VALUE @@ -2407,20 +2415,20 @@ rb_ary_index(int argc, VALUE *argv, VALUE ary) /* * call-seq: - * array.rindex(object) -> integer or nil - * array.rindex {|element| ... } -> integer or nil - * array.rindex -> new_enumerator + * rindex(object) -> integer or nil + * rindex {|element| ... } -> integer or nil + * rindex -> new_enumerator * * Returns the index of the last element for which object == element. * - * When argument +object+ is given but no block, returns the index of the last such element found: + * With argument +object+ given, returns the index of the last such element found: * * a = [:foo, 'bar', 2, 'bar'] * a.rindex('bar') # => 3 * * Returns +nil+ if no such object found. * - * When a block is given but no argument, calls the block with each successive element; + * With a block given, calls the block with each successive element; * returns the index of the last element for which the block returns a truthy value: * * a = [:foo, 'bar', 2, 'bar'] @@ -2428,14 +2436,9 @@ rb_ary_index(int argc, VALUE *argv, VALUE ary) * * Returns +nil+ if the block never returns a truthy value. * - * When neither an argument nor a block is given, returns a new Enumerator: + * When neither an argument nor a block is given, returns a new Enumerator. * - * a = [:foo, 'bar', 2, 'bar'] - * e = a.rindex - * e # => # - * e.each {|element| element == 'bar' } # => 3 - * - * Related: #index. + * Related: see {Methods for Querying}[rdoc-ref:Array@Methods+for+Querying]. */ static VALUE @@ -2816,38 +2819,38 @@ rb_ary_aset(int argc, VALUE *argv, VALUE ary) /* * call-seq: - * array.insert(index, *objects) -> self + * insert(index, *objects) -> self * - * Inserts given +objects+ before or after the element at Integer index +offset+; + * Inserts the given +objects+ as elements of +self+; * returns +self+. * - * When +index+ is non-negative, inserts all given +objects+ - * before the element at offset +index+: + * When +index+ is non-negative, inserts +objects+ + * _before_ the element at offset +index+: * - * a = [:foo, 'bar', 2] - * a.insert(1, :bat, :bam) # => [:foo, :bat, :bam, "bar", 2] + * a = ['a', 'b', 'c'] # => ["a", "b", "c"] + * a.insert(1, :x, :y, :z) # => ["a", :x, :y, :z, "b", "c"] * * Extends the array if +index+ is beyond the array (index >= self.size): * - * a = [:foo, 'bar', 2] - * a.insert(5, :bat, :bam) - * a # => [:foo, "bar", 2, nil, nil, :bat, :bam] + * a = ['a', 'b', 'c'] # => ["a", "b", "c"] + * a.insert(5, :x, :y, :z) # => ["a", "b", "c", nil, nil, :x, :y, :z] * - * Does nothing if no objects given: + * When +index+ is negative, inserts +objects+ + * _after_ the element at offset index + self.size: * - * a = [:foo, 'bar', 2] - * a.insert(1) - * a.insert(50) - * a.insert(-50) - * a # => [:foo, "bar", 2] + * a = ['a', 'b', 'c'] # => ["a", "b", "c"] + * a.insert(-2, :x, :y, :z) # => ["a", "b", :x, :y, :z, "c"] * - * When +index+ is negative, inserts all given +objects+ - * _after_ the element at offset index+self.size: + * With no +objects+ given, does nothing: * - * a = [:foo, 'bar', 2] - * a.insert(-2, :bat, :bam) - * a # => [:foo, "bar", :bat, :bam, 2] + * a = ['a', 'b', 'c'] # => ["a", "b", "c"] + * a.insert(1) # => ["a", "b", "c"] + * a.insert(50) # => ["a", "b", "c"] + * a.insert(-50) # => ["a", "b", "c"] + * + * Raises IndexError if +objects+ are given and +index+ is negative and out of range. * + * Related: see {Methods for Assigning}[rdoc-ref:Array@Methods+for+Assigning]. */ static VALUE @@ -2911,12 +2914,11 @@ rb_ary_each(VALUE ary) /* * call-seq: - * array.each_index {|index| ... } -> self - * array.each_index -> Enumerator - * - * Iterates over array indexes. + * each_index {|index| ... } -> self + * each_index -> new_enumerator * - * When a block given, passes each successive array index to the block; + * With a block given, iterates over the elements of +self+, + * passing each array index to the block; * returns +self+: * * a = [:foo, 'bar', 2] @@ -2938,20 +2940,9 @@ rb_ary_each(VALUE ary) * 0 * 1 * - * When no block given, returns a new Enumerator: - * - * a = [:foo, 'bar', 2] - * e = a.each_index - * e # => # - * a1 = e.each {|index| puts "#{index} #{a[index]}"} - * - * Output: - * - * 0 foo - * 1 bar - * 2 2 + * With no block given, returns a new Enumerator. * - * Related: #each, #reverse_each. + * Related: see {Methods for Iterating}[rdoc-ref:Array@Methods+for+Iterating]. */ static VALUE @@ -3031,9 +3022,15 @@ rb_ary_reverse_each(VALUE ary) /* * call-seq: - * array.length -> an_integer + * length -> integer + * size -> integer + * + * Returns the count of elements in +self+: + * + * [0, 1, 2].length # => 3 + * [].length # => 0 * - * Returns the count of elements in +self+. + * Related: see {Methods for Querying}[rdoc-ref:Array@Methods+for+Querying]. */ static VALUE @@ -3049,6 +3046,8 @@ rb_ary_length(VALUE ary) * * Returns +true+ if the count of elements in +self+ is zero, * +false+ otherwise. + * + * Related: see {Methods for Querying}[rdoc-ref:Array@Methods+for+Querying]. */ static VALUE @@ -3212,31 +3211,32 @@ rb_ary_join(VALUE ary, VALUE sep) /* * call-seq: - * array.join ->new_string * array.join(separator = $,) -> new_string * - * Returns the new String formed by joining the array elements after conversion. - * For each element +element+: + * Returns the new string formed by joining the converted elements of +self+; + * for each element +element+: * - * - Uses element.to_s if +element+ is not a kind_of?(Array). - * - Uses recursive element.join(separator) if +element+ is a kind_of?(Array). + * - Converts recursively using element.join(separator) + * if +element+ is a kind_of?(Array). + * - Otherwise, converts using element.to_s. * - * With no argument, joins using the output field separator, $,: + * With no argument given, joins using the output field separator, $,: * * a = [:foo, 'bar', 2] * $, # => nil * a.join # => "foobar2" * - * With \string argument +separator+, joins using that separator: + * With string argument +separator+ given, joins using that separator: * * a = [:foo, 'bar', 2] * a.join("\n") # => "foo\nbar\n2" * - * Joins recursively for nested Arrays: + * Joins recursively for nested arrays: * * a = [:foo, [:bar, [:baz, :bat]]] * a.join # => "foobarbazbat" * + * Related: see {Methods for Converting}[rdoc-ref:Array@Methods+for+Converting]. */ static VALUE rb_ary_join_m(int argc, VALUE *argv, VALUE ary) @@ -3273,14 +3273,15 @@ inspect_ary(VALUE ary, VALUE dummy, int recur) /* * call-seq: - * array.inspect -> new_string + * inspect -> new_string * - * Returns the new String formed by calling method #inspect + * Returns the new string formed by calling method #inspect * on each array element: * * a = [:foo, 'bar', 2] * a.inspect # => "[:foo, \"bar\", 2]" * + * Related: see {Methods for Querying}[rdoc-ref:Array@Methods+for+Querying]. */ static VALUE @@ -3418,13 +3419,16 @@ rb_ary_reverse(VALUE ary) /* * call-seq: - * array.reverse! -> self + * reverse! -> self * - * Reverses +self+ in place: + * Reverses the order of the elements of +self+; + * returns +self+: * - * a = ['foo', 'bar', 'two'] - * a.reverse! # => ["two", "bar", "foo"] + * a = [0, 1, 2] + * a.reverse! # => [2, 1, 0] + * a # => [2, 1, 0] * + * Related: see {Methods for Assigning}[rdoc-ref:Array@Methods+for+Assigning]. */ static VALUE @@ -3435,14 +3439,13 @@ rb_ary_reverse_bang(VALUE ary) /* * call-seq: - * array.reverse -> new_array + * reverse -> new_array * - * Returns a new +Array+ with the elements of +self+ in reverse order: + * Returns a new array containing the elements of +self+ in reverse order: * - * a = ['foo', 'bar', 'two'] - * a1 = a.reverse - * a1 # => ["two", "bar", "foo"] + * [0, 1, 2].reverse # => [2, 1, 0] * + * Related: see {Methods for Combining}[rdoc-ref:Array@Methods+for+Combining]. */ static VALUE @@ -3700,7 +3703,7 @@ sort_2(const void *ap, const void *bp, void *dummy) * * Returns +self+ with its elements sorted in place. * - * With no block, compares elements using operator <=> + * With no block, compares elements using operator #<=> * (see Comparable): * * a = 'abcde'.split('').shuffle @@ -3817,7 +3820,7 @@ rb_ary_sort_bang(VALUE ary) * * Returns a new +Array+ whose elements are those from +self+, sorted. * - * With no block, compares elements using operator <=> + * With no block, compares elements using operator #<=> * (see Comparable): * * a = 'abcde'.split('').shuffle @@ -3871,6 +3874,8 @@ static VALUE rb_ary_bsearch_index(VALUE ary); * or +nil+ if the search found no suitable element. * * See {Binary Searching}[rdoc-ref:bsearch.rdoc]. + * + * Related: see {Methods for Fetching}[rdoc-ref:Array@Methods+for+Fetching]. */ static VALUE @@ -3893,6 +3898,8 @@ rb_ary_bsearch(VALUE ary) * or +nil+ if the search found no suitable element. * * See {Binary Searching}[rdoc-ref:bsearch.rdoc]. + * + * Related: see {Methods for Fetching}[rdoc-ref:Array@Methods+for+Fetching]. */ static VALUE @@ -4003,6 +4010,9 @@ rb_ary_sort_by_bang(VALUE ary) * a1 # => [Symbol, String, Integer] * * With no block given, returns a new Enumerator. + * + * Related: #collect!; + * see also {Methods for Converting}[rdoc-ref:Array@Methods+for+Converting]. */ static VALUE @@ -4035,6 +4045,9 @@ rb_ary_collect(VALUE ary) * a.map! { |element| element.class } # => [Symbol, String, Integer] * * With no block given, returns a new Enumerator. + * + * Related: #collect; + * see also {Methods for Converting}[rdoc-ref:Array@Methods+for+Converting]. */ static VALUE @@ -4162,22 +4175,22 @@ rb_ary_values_at(int argc, VALUE *argv, VALUE ary) /* * call-seq: - * array.select {|element| ... } -> new_array - * array.select -> new_enumerator + * select {|element| ... } -> new_array + * select -> new_enumerator + * filter {|element| ... } -> new_array + * filter -> new_enumerator * - * Calls the block, if given, with each element of +self+; - * returns a new +Array+ containing those elements of +self+ + * With a block given, calls the block with each element of +self+; + * returns a new array containing those elements of +self+ * for which the block returns a truthy value: * * a = [:foo, 'bar', 2, :bam] - * a1 = a.select {|element| element.to_s.start_with?('b') } - * a1 # => ["bar", :bam] - * - * Returns a new Enumerator if no block given: + * a.select {|element| element.to_s.start_with?('b') } + * # => ["bar", :bam] * - * a = [:foo, 'bar', 2, :bam] - * a.select # => # + * With no block given, returns a new Enumerator. * + * Related: see {Methods for Fetching}[rdoc-ref:Array@Methods+for+Fetching]. */ static VALUE @@ -4243,10 +4256,12 @@ select_bang_ensure(VALUE a) /* * call-seq: - * array.select! {|element| ... } -> self or nil - * array.select! -> new_enumerator + * select! {|element| ... } -> self or nil + * select! -> new_enumerator + * filter! {|element| ... } -> self or nil + * filter! -> new_enumerator * - * Calls the block, if given with each element of +self+; + * With a block given, calls the block with each element of +self+; * removes from +self+ those elements for which the block returns +false+ or +nil+. * * Returns +self+ if any elements were removed: @@ -4256,11 +4271,9 @@ select_bang_ensure(VALUE a) * * Returns +nil+ if no elements were removed. * - * Returns a new Enumerator if no block given: - * - * a = [:foo, 'bar', 2, :bam] - * a.select! # => # + * With no block given, returns a new Enumerator. * + * Related: see {Methods for Deleting}[rdoc-ref:Array@Methods+for+Deleting]. */ static VALUE @@ -4278,20 +4291,18 @@ rb_ary_select_bang(VALUE ary) /* * call-seq: - * array.keep_if {|element| ... } -> self - * array.keep_if -> new_enumeration + * keep_if {|element| ... } -> self + * keep_if -> new_enumerator * - * Retains those elements for which the block returns a truthy value; - * deletes all other elements; returns +self+: + * With a block given, calls the block with each element of +self+; + * removes the element from +self+ if the block does not return a truthy value: * * a = [:foo, 'bar', 2, :bam] * a.keep_if {|element| element.to_s.start_with?('b') } # => ["bar", :bam] * - * Returns a new Enumerator if no block given: - * - * a = [:foo, 'bar', 2, :bam] - * a.keep_if # => # + * With no block given, returns a new Enumerator. * + * Related: see {Methods for Deleting}[rdoc-ref:Array@Methods+for+Deleting]. */ static VALUE @@ -4317,14 +4328,14 @@ ary_resize_smaller(VALUE ary, long len) /* * call-seq: - * delete(object) -> last_deleted_object - * delete(object) {|element| ... } -> last_deleted_object or block_return + * delete(object) -> last_removed_object + * delete(object) {|element| ... } -> last_removed_object or block_return * * Removes zero or more elements from +self+. * * With no block given, * removes from +self+ each element +ele+ such that ele == object; - * returns the last deleted element: + * returns the last removed element: * * a = [0, 1, 2, 2.0] * a.delete(2) # => 2.0 @@ -4338,7 +4349,7 @@ ary_resize_smaller(VALUE ary, long len) * removes from +self+ each element +ele+ such that ele == object. * * If any such elements are found, ignores the block - * and returns the last deleted element: + * and returns the last removed element: * * a = [0, 1, 2, 2.0] * a.delete(2) {|element| fail 'Cannot happen' } # => 2.0 @@ -4350,7 +4361,6 @@ ary_resize_smaller(VALUE ary, long len) * # => "Element 2 not found." * * Related: see {Methods for Deleting}[rdoc-ref:Array@Methods+for+Deleting]. - * */ VALUE @@ -4431,9 +4441,9 @@ rb_ary_delete_at(VALUE ary, long pos) /* * call-seq: - * delete_at(index) -> deleted_object or nil + * delete_at(index) -> removed_object or nil * - * Deletes the element of +self+ at the given +index+, which must be an + * Removes the element of +self+ at the given +index+, which must be an * {integer-convertible object}[rdoc-ref:implicit_conversion.rdoc@Integer-Convertible+Objects]. * * When +index+ is non-negative, deletes the element at offset +index+: @@ -4454,6 +4464,7 @@ rb_ary_delete_at(VALUE ary, long pos) * a.delete_at(3) # => nil * a.delete_at(-4) # => nil * + * Related: see {Methods for Deleting}[rdoc-ref:Array@Methods+for+Deleting]. */ static VALUE @@ -4639,10 +4650,11 @@ ary_reject_bang(VALUE ary) /* * call-seq: - * array.reject! {|element| ... } -> self or nil - * array.reject! -> new_enumerator + * reject! {|element| ... } -> self or nil + * reject! -> new_enumerator * - * Removes each element for which the block returns a truthy value. + * With a block given, calls the block with each element of +self+; + * removes each element for which the block returns a truthy value. * * Returns +self+ if any elements removed: * @@ -4651,11 +4663,9 @@ ary_reject_bang(VALUE ary) * * Returns +nil+ if no elements removed. * - * Returns a new Enumerator if no block given: - * - * a = [:foo, 'bar', 2] - * a.reject! # => # + * With no block given, returns a new Enumerator. * + * Related: see {Methods for Deleting}[rdoc-ref:Array@Methods+for+Deleting]. */ static VALUE @@ -4668,21 +4678,19 @@ rb_ary_reject_bang(VALUE ary) /* * call-seq: - * array.reject {|element| ... } -> new_array - * array.reject -> new_enumerator + * reject {|element| ... } -> new_array + * reject -> new_enumerator * - * Returns a new +Array+ whose elements are all those from +self+ + * With a block given, returns a new array whose elements are all those from +self+ * for which the block returns +false+ or +nil+: * * a = [:foo, 'bar', 2, 'bat'] * a1 = a.reject {|element| element.to_s.start_with?('b') } * a1 # => [:foo, 2] * - * Returns a new Enumerator if no block given: - * - * a = [:foo, 'bar', 2] - * a.reject # => # + * With no block given, returns a new Enumerator. * + * Related: {Methods for Fetching}[rdoc-ref:Array@Methods+for+Fetching]. */ static VALUE @@ -4709,6 +4717,8 @@ rb_ary_reject(VALUE ary) * a.delete_if {|element| element.to_s.start_with?('b') } # => [:foo, 2] * * With no block given, returns a new Enumerator. + * + * Related: see {Methods for Deleting}[rdoc-ref:Array@Methods+for+Deleting]. */ static VALUE @@ -4789,10 +4799,10 @@ take_items(VALUE obj, long n) * * If an argument is not an array, it extracts the values by calling #each: * - * a = [:a0, :a1, :a2, :a2] - * b = 1..4 - * c = a.zip(b) - * c # => [[:a0, 1], [:a1, 2], [:a2, 3], [:a2, 4]] + * a = [:a0, :a1, :a2, :a2] + * b = 1..4 + * c = a.zip(b) + * c # => [[:a0, 1], [:a1, 2], [:a2, 3], [:a2, 4]] * * When a block is given, calls the block with each of the sub-arrays (formed as above); returns +nil+: * @@ -4910,13 +4920,17 @@ rb_ary_transpose(VALUE ary) /* * call-seq: - * array.replace(other_array) -> self + * initialize_copy(other_array) -> self + * replace(other_array) -> self * - * Replaces the content of +self+ with the content of +other_array+; returns +self+: + * Replaces the elements of +self+ with the elements of +other_array+, which must be an + * {array-convertible object}[rdoc-ref:implicit_conversion.rdoc@Array-Convertible+Objects]; + * returns +self+: * - * a = [:foo, 'bar', 2] - * a.replace(['foo', :bar, 3]) # => ["foo", :bar, 3] + * a = ['a', 'b', 'c'] # => ["a", "b", "c"] + * a.replace(['d', 'e']) # => ["d", "e"] * + * Related: see {Methods for Assigning}[rdoc-ref:Array@Methods+for+Assigning]. */ VALUE @@ -4987,6 +5001,7 @@ rb_ary_replace(VALUE copy, VALUE orig) * a = [:foo, 'bar', 2] * a.clear # => [] * + * Related: see {Methods for Deleting}[rdoc-ref:Array@Methods+for+Deleting]. */ VALUE @@ -5010,198 +5025,182 @@ rb_ary_clear(VALUE ary) /* * call-seq: - * array.fill(obj) -> self - * array.fill(obj, start) -> self - * array.fill(obj, start, length) -> self - * array.fill(obj, range) -> self - * array.fill {|index| ... } -> self - * array.fill(start) {|index| ... } -> self - * array.fill(start, length) {|index| ... } -> self - * array.fill(range) {|index| ... } -> self - * - * Replaces specified elements in +self+ with specified objects; returns +self+. - * - * With argument +obj+ and no block given, replaces all elements with that one object: - * - * a = ['a', 'b', 'c', 'd'] - * a # => ["a", "b", "c", "d"] - * a.fill(:X) # => [:X, :X, :X, :X] + * fill(object, start = nil, count = nil) -> new_array + * fill(object, range) -> new_array + * fill(start = nil, count = nil) {|element| ... } -> new_array + * fill(range) {|element| ... } -> new_array * - * With arguments +obj+ and Integer +start+, and no block given, - * replaces elements based on the given start. + * Replaces selected elements in +self+; + * may add elements to +self+; + * always returns +self+ (never a new array). * - * If +start+ is in range (0 <= start < array.size), - * replaces all elements from offset +start+ through the end: - * - * a = ['a', 'b', 'c', 'd'] - * a.fill(:X, 2) # => ["a", "b", :X, :X] - * - * If +start+ is too large (start >= array.size), does nothing: - * - * a = ['a', 'b', 'c', 'd'] - * a.fill(:X, 4) # => ["a", "b", "c", "d"] - * a = ['a', 'b', 'c', 'd'] - * a.fill(:X, 5) # => ["a", "b", "c", "d"] + * In brief: * - * If +start+ is negative, counts from the end (starting index is start + array.size): + * # Non-negative start. + * ['a', 'b', 'c', 'd'].fill('-', 1, 2) # => ["a", "-", "-", "d"] + * ['a', 'b', 'c', 'd'].fill(1, 2) {|e| e.to_s } # => ["a", "1", "2", "d"] * - * a = ['a', 'b', 'c', 'd'] - * a.fill(:X, -2) # => ["a", "b", :X, :X] + * # Extends with specified values if necessary. + * ['a', 'b', 'c', 'd'].fill('-', 3, 2) # => ["a", "b", "c", "-", "-"] + * ['a', 'b', 'c', 'd'].fill(3, 2) {|e| e.to_s } # => ["a", "b", "c", "3", "4"] * - * If +start+ is too small (less than and far from zero), replaces all elements: + * # Fills with nils if necessary. + * ['a', 'b', 'c', 'd'].fill('-', 6, 2) # => ["a", "b", "c", "d", nil, nil, "-", "-"] + * ['a', 'b', 'c', 'd'].fill(6, 2) {|e| e.to_s } # => ["a", "b", "c", "d", nil, nil, "6", "7"] * - * a = ['a', 'b', 'c', 'd'] - * a.fill(:X, -6) # => [:X, :X, :X, :X] - * a = ['a', 'b', 'c', 'd'] - * a.fill(:X, -50) # => [:X, :X, :X, :X] + * # For negative start, counts backwards from the end. + * ['a', 'b', 'c', 'd'].fill('-', -3, 3) # => ["a", "-", "-", "-"] + * ['a', 'b', 'c', 'd'].fill(-3, 3) {|e| e.to_s } # => ["a", "1", "2", "3"] * - * With arguments +obj+, Integer +start+, and Integer +length+, and no block given, - * replaces elements based on the given +start+ and +length+. + * # Range. + * ['a', 'b', 'c', 'd'].fill('-', 1..2) # => ["a", "-", "-", "d"] + * ['a', 'b', 'c', 'd'].fill(1..2) {|e| e.to_s } # => ["a", "1", "2", "d"] * - * If +start+ is in range, replaces +length+ elements beginning at offset +start+: + * When arguments +start+ and +count+ are given, + * they select the elements of +self+ to be replaced; + * each must be an + * {integer-convertible object}[rdoc-ref:implicit_conversion.rdoc@Integer-Convertible+Objects] + * (or +nil+): * - * a = ['a', 'b', 'c', 'd'] - * a.fill(:X, 1, 1) # => ["a", :X, "c", "d"] + * - +start+ specifies the zero-based offset of the first element to be replaced; + * +nil+ means zero. + * - +count+ is the number of consecutive elements to be replaced; + * +nil+ means "all the rest." * - * If +start+ is negative, counts from the end: + * With argument +object+ given, + * that one object is used for all replacements: * - * a = ['a', 'b', 'c', 'd'] - * a.fill(:X, -2, 1) # => ["a", "b", :X, "d"] + * o = Object.new # => # + * a = ['a', 'b', 'c', 'd'] # => ["a", "b", "c", "d"] + * a.fill(o, 1, 2) + * # => ["a", #, #, "d"] * - * If +start+ is large (start >= array.size), extends +self+ with +nil+: + * With a block given, the block is called once for each element to be replaced; + * the value passed to the block is the _index_ of the element to be replaced + * (not the element itself); + * the block's return value replaces the element: * - * a = ['a', 'b', 'c', 'd'] - * a.fill(:X, 5, 0) # => ["a", "b", "c", "d", nil] - * a = ['a', 'b', 'c', 'd'] - * a.fill(:X, 5, 2) # => ["a", "b", "c", "d", nil, :X, :X] + * a = ['a', 'b', 'c', 'd'] # => ["a", "b", "c", "d"] + * a.fill(1, 2) {|element| element.to_s } # => ["a", "1", "2", "d"] * - * If +length+ is zero or negative, replaces no elements: + * For arguments +start+ and +count+: * - * a = ['a', 'b', 'c', 'd'] - * a.fill(:X, 1, 0) # => ["a", "b", "c", "d"] - * a.fill(:X, 1, -1) # => ["a", "b", "c", "d"] + * - If +start+ is non-negative, + * replaces +count+ elements beginning at offset +start+: * - * With arguments +obj+ and Range +range+, and no block given, - * replaces elements based on the given range. + * ['a', 'b', 'c', 'd'].fill('-', 0, 2) # => ["-", "-", "c", "d"] + * ['a', 'b', 'c', 'd'].fill('-', 1, 2) # => ["a", "-", "-", "d"] + * ['a', 'b', 'c', 'd'].fill('-', 2, 2) # => ["a", "b", "-", "-"] * - * If the range is positive and ascending (0 < range.begin <= range.end), - * replaces elements from range.begin to range.end: + * ['a', 'b', 'c', 'd'].fill(0, 2) {|e| e.to_s } # => ["0", "1", "c", "d"] + * ['a', 'b', 'c', 'd'].fill(1, 2) {|e| e.to_s } # => ["a", "1", "2", "d"] + * ['a', 'b', 'c', 'd'].fill(2, 2) {|e| e.to_s } # => ["a", "b", "2", "3"] * - * a = ['a', 'b', 'c', 'd'] - * a.fill(:X, (1..1)) # => ["a", :X, "c", "d"] + * Extends +self+ if necessary: * - * If range.first is negative, replaces no elements: + * ['a', 'b', 'c', 'd'].fill('-', 3, 2) # => ["a", "b", "c", "-", "-"] + * ['a', 'b', 'c', 'd'].fill('-', 4, 2) # => ["a", "b", "c", "d", "-", "-"] * - * a = ['a', 'b', 'c', 'd'] - * a.fill(:X, (-1..1)) # => ["a", "b", "c", "d"] + * ['a', 'b', 'c', 'd'].fill(3, 2) {|e| e.to_s } # => ["a", "b", "c", "3", "4"] + * ['a', 'b', 'c', 'd'].fill(4, 2) {|e| e.to_s } # => ["a", "b", "c", "d", "4", "5"] * - * If range.last is negative, counts from the end: + * Fills with +nil+ if necessary: * - * a = ['a', 'b', 'c', 'd'] - * a.fill(:X, (0..-2)) # => [:X, :X, :X, "d"] - * a = ['a', 'b', 'c', 'd'] - * a.fill(:X, (1..-2)) # => ["a", :X, :X, "d"] + * ['a', 'b', 'c', 'd'].fill('-', 5, 2) # => ["a", "b", "c", "d", nil, "-", "-"] + * ['a', 'b', 'c', 'd'].fill('-', 6, 2) # => ["a", "b", "c", "d", nil, nil, "-", "-"] * - * If range.last and range.last are both negative, - * both count from the end of the array: + * ['a', 'b', 'c', 'd'].fill(5, 2) {|e| e.to_s } # => ["a", "b", "c", "d", nil, "5", "6"] + * ['a', 'b', 'c', 'd'].fill(6, 2) {|e| e.to_s } # => ["a", "b", "c", "d", nil, nil, "6", "7"] * - * a = ['a', 'b', 'c', 'd'] - * a.fill(:X, (-1..-1)) # => ["a", "b", "c", :X] - * a = ['a', 'b', 'c', 'd'] - * a.fill(:X, (-2..-2)) # => ["a", "b", :X, "d"] + * Does nothing if +count+ is non-positive: * - * With no arguments and a block given, calls the block with each index; - * replaces the corresponding element with the block's return value: + * ['a', 'b', 'c', 'd'].fill('-', 2, 0) # => ["a", "b", "c", "d"] + * ['a', 'b', 'c', 'd'].fill('-', 2, -100) # => ["a", "b", "c", "d"] + * ['a', 'b', 'c', 'd'].fill('-', 6, -100) # => ["a", "b", "c", "d"] * - * a = ['a', 'b', 'c', 'd'] - * a.fill { |index| "new_#{index}" } # => ["new_0", "new_1", "new_2", "new_3"] + * ['a', 'b', 'c', 'd'].fill(2, 0) {|e| fail 'Cannot happen' } # => ["a", "b", "c", "d"] + * ['a', 'b', 'c', 'd'].fill(2, -100) {|e| fail 'Cannot happen' } # => ["a", "b", "c", "d"] + * ['a', 'b', 'c', 'd'].fill(6, -100) {|e| fail 'Cannot happen' } # => ["a", "b", "c", "d"] * - * With argument +start+ and a block given, calls the block with each index - * from offset +start+ to the end; replaces the corresponding element - * with the block's return value. + * - If +start+ is negative, counts backwards from the end of +self+: * - * If start is in range (0 <= start < array.size), - * replaces from offset +start+ to the end: + * ['a', 'b', 'c', 'd'].fill('-', -4, 3) # => ["-", "-", "-", "d"] + * ['a', 'b', 'c', 'd'].fill('-', -3, 3) # => ["a", "-", "-", "-"] * - * a = ['a', 'b', 'c', 'd'] - * a.fill(1) { |index| "new_#{index}" } # => ["a", "new_1", "new_2", "new_3"] + * ['a', 'b', 'c', 'd'].fill(-4, 3) {|e| e.to_s } # => ["0", "1", "2", "d"] + * ['a', 'b', 'c', 'd'].fill(-3, 3) {|e| e.to_s } # => ["a", "1", "2", "3"] * - * If +start+ is too large(start >= array.size), does nothing: + * Extends +self+ if necessary: * - * a = ['a', 'b', 'c', 'd'] - * a.fill(4) { |index| fail 'Cannot happen' } # => ["a", "b", "c", "d"] - * a = ['a', 'b', 'c', 'd'] - * a.fill(4) { |index| fail 'Cannot happen' } # => ["a", "b", "c", "d"] + * ['a', 'b', 'c', 'd'].fill('-', -2, 3) # => ["a", "b", "-", "-", "-"] + * ['a', 'b', 'c', 'd'].fill('-', -1, 3) # => ["a", "b", "c", "-", "-", "-"] * - * If +start+ is negative, counts from the end: + * ['a', 'b', 'c', 'd'].fill(-2, 3) {|e| e.to_s } # => ["a", "b", "2", "3", "4"] + * ['a', 'b', 'c', 'd'].fill(-1, 3) {|e| e.to_s } # => ["a", "b", "c", "3", "4", "5"] * - * a = ['a', 'b', 'c', 'd'] - * a.fill(-2) { |index| "new_#{index}" } # => ["a", "b", "new_2", "new_3"] + * Starts at the beginning of +self+ if +start+ is negative and out-of-range: * - * If start is too small (start <= -array.size, replaces all elements: + * ['a', 'b', 'c', 'd'].fill('-', -5, 2) # => ["-", "-", "c", "d"] + * ['a', 'b', 'c', 'd'].fill('-', -6, 2) # => ["-", "-", "c", "d"] * - * a = ['a', 'b', 'c', 'd'] - * a.fill(-6) { |index| "new_#{index}" } # => ["new_0", "new_1", "new_2", "new_3"] - * a = ['a', 'b', 'c', 'd'] - * a.fill(-50) { |index| "new_#{index}" } # => ["new_0", "new_1", "new_2", "new_3"] + * ['a', 'b', 'c', 'd'].fill(-5, 2) {|e| e.to_s } # => ["0", "1", "c", "d"] + * ['a', 'b', 'c', 'd'].fill(-6, 2) {|e| e.to_s } # => ["0", "1", "c", "d"] * - * With arguments +start+ and +length+, and a block given, - * calls the block for each index specified by start length; - * replaces the corresponding element with the block's return value. + * Does nothing if +count+ is non-positive: * - * If +start+ is in range, replaces +length+ elements beginning at offset +start+: + * ['a', 'b', 'c', 'd'].fill('-', -2, 0) # => ["a", "b", "c", "d"] + * ['a', 'b', 'c', 'd'].fill('-', -2, -1) # => ["a", "b", "c", "d"] * - * a = ['a', 'b', 'c', 'd'] - * a.fill(1, 1) { |index| "new_#{index}" } # => ["a", "new_1", "c", "d"] + * ['a', 'b', 'c', 'd'].fill(-2, 0) {|e| fail 'Cannot happen' } # => ["a", "b", "c", "d"] + * ['a', 'b', 'c', 'd'].fill(-2, -1) {|e| fail 'Cannot happen' } # => ["a", "b", "c", "d"] * - * If start is negative, counts from the end: + * When argument +range+ is given, + * it must be a Range object whose members are numeric; + * its +begin+ and +end+ values determine the elements of +self+ + * to be replaced: * - * a = ['a', 'b', 'c', 'd'] - * a.fill(-2, 1) { |index| "new_#{index}" } # => ["a", "b", "new_2", "d"] + * - If both +begin+ and +end+ are positive, they specify the first and last elements + * to be replaced: * - * If +start+ is large (start >= array.size), extends +self+ with +nil+: + * ['a', 'b', 'c', 'd'].fill('-', 1..2) # => ["a", "-", "-", "d"] + * ['a', 'b', 'c', 'd'].fill(1..2) {|e| e.to_s } # => ["a", "1", "2", "d"] * - * a = ['a', 'b', 'c', 'd'] - * a.fill(5, 0) { |index| "new_#{index}" } # => ["a", "b", "c", "d", nil] - * a = ['a', 'b', 'c', 'd'] - * a.fill(5, 2) { |index| "new_#{index}" } # => ["a", "b", "c", "d", nil, "new_5", "new_6"] + * If +end+ is smaller than +begin+, replaces no elements: * - * If +length+ is zero or less, replaces no elements: + * ['a', 'b', 'c', 'd'].fill('-', 2..1) # => ["a", "b", "c", "d"] + * ['a', 'b', 'c', 'd'].fill(2..1) {|e| e.to_s } # => ["a", "b", "c", "d"] * - * a = ['a', 'b', 'c', 'd'] - * a.fill(1, 0) { |index| "new_#{index}" } # => ["a", "b", "c", "d"] - * a.fill(1, -1) { |index| "new_#{index}" } # => ["a", "b", "c", "d"] + * - If either is negative (or both are negative), counts backwards from the end of +self+: * - * With arguments +obj+ and +range+, and a block given, - * calls the block with each index in the given range; - * replaces the corresponding element with the block's return value. + * ['a', 'b', 'c', 'd'].fill('-', -3..2) # => ["a", "-", "-", "d"] + * ['a', 'b', 'c', 'd'].fill('-', 1..-2) # => ["a", "-", "-", "d"] + * ['a', 'b', 'c', 'd'].fill('-', -3..-2) # => ["a", "-", "-", "d"] * - * If the range is positive and ascending (range 0 < range.begin <= range.end, - * replaces elements from range.begin to range.end: + * ['a', 'b', 'c', 'd'].fill(-3..2) {|e| e.to_s } # => ["a", "1", "2", "d"] + * ['a', 'b', 'c', 'd'].fill(1..-2) {|e| e.to_s } # => ["a", "1", "2", "d"] + * ['a', 'b', 'c', 'd'].fill(-3..-2) {|e| e.to_s } # => ["a", "1", "2", "d"] * - * a = ['a', 'b', 'c', 'd'] - * a.fill(1..1) { |index| "new_#{index}" } # => ["a", "new_1", "c", "d"] + * - If the +end+ value is excluded (see Range#exclude_end?), omits the last replacement: * - * If +range.first+ is negative, does nothing: + * ['a', 'b', 'c', 'd'].fill('-', 1...2) # => ["a", "-", "c", "d"] + * ['a', 'b', 'c', 'd'].fill('-', 1...-2) # => ["a", "-", "c", "d"] * - * a = ['a', 'b', 'c', 'd'] - * a.fill(-1..1) { |index| fail 'Cannot happen' } # => ["a", "b", "c", "d"] + * ['a', 'b', 'c', 'd'].fill(1...2) {|e| e.to_s } # => ["a", "1", "c", "d"] + * ['a', 'b', 'c', 'd'].fill(1...-2) {|e| e.to_s } # => ["a", "1", "c", "d"] * - * If range.last is negative, counts from the end: + * - If the range is endless (see {Endless Ranges}[rdoc-ref:Range@Endless+Ranges]), + * replaces elements to the end of +self+: * - * a = ['a', 'b', 'c', 'd'] - * a.fill(0..-2) { |index| "new_#{index}" } # => ["new_0", "new_1", "new_2", "d"] - * a = ['a', 'b', 'c', 'd'] - * a.fill(1..-2) { |index| "new_#{index}" } # => ["a", "new_1", "new_2", "d"] + * ['a', 'b', 'c', 'd'].fill('-', 1..) # => ["a", "-", "-", "-"] + * ['a', 'b', 'c', 'd'].fill(1..) {|e| e.to_s } # => ["a", "1", "2", "3"] * - * If range.first and range.last are both negative, - * both count from the end: + * - If the range is beginless (see {Beginless Ranges}[rdoc-ref:Range@Beginless+Ranges]), + * replaces elements from the beginning of +self+: * - * a = ['a', 'b', 'c', 'd'] - * a.fill(-1..-1) { |index| "new_#{index}" } # => ["a", "b", "c", "new_3"] - * a = ['a', 'b', 'c', 'd'] - * a.fill(-2..-2) { |index| "new_#{index}" } # => ["a", "b", "new_2", "d"] + * ['a', 'b', 'c', 'd'].fill('-', ..2) # => ["-", "-", "-", "d"] + * ['a', 'b', 'c', 'd'].fill(..2) {|e| e.to_s } # => ["0", "1", "2", "d"] * + * Related: see {Methods for Assigning}[rdoc-ref:Array@Methods+for+Assigning]. */ static VALUE @@ -5320,6 +5319,7 @@ ary_append(VALUE x, VALUE y) * a.concat(['two', 'three'], [:four, :five], a) * # => [0, 1, "two", "three", :four, :five, 0, 1] * + * Related: see {Methods for Assigning}[rdoc-ref:Array@Methods+for+Assigning]. */ static VALUE @@ -5361,7 +5361,7 @@ rb_ary_concat(VALUE x, VALUE y) * a * 3 # => ["x", "y", "x", "y", "x", "y"] * * When string argument +string_separator+ is given, - * equivalent to array.join(string_separator): + * equivalent to self.join(string_separator): * * [0, [0, 1], {foo: 0}] * ', ' # => "0, 0, 1, {:foo=>0}" * @@ -5423,7 +5423,8 @@ rb_ary_times(VALUE ary, VALUE times) * * Returns +nil+ if no such element is found. * - * Related: Array#rassoc. + * Related: Array#rassoc; + * see also {Methods for Fetching}[rdoc-ref:Array@Methods+for+Fetching]. */ VALUE @@ -5443,17 +5444,19 @@ rb_ary_assoc(VALUE ary, VALUE key) /* * call-seq: - * array.rassoc(obj) -> found_array or nil + * rassoc(object) -> found_array or nil * - * Returns the first element in +self+ that is an +Array+ - * whose second element == +obj+: + * Returns the first element +ele+ in +self+ such that +ele+ is an array + * and ele[1] == object: * * a = [{foo: 0}, [2, 4], [4, 5, 6], [4, 5]] * a.rassoc(4) # => [2, 4] + * a.rassoc(5) # => [4, 5, 6] * * Returns +nil+ if no such element is found. * - * Related: #assoc. + * Related: Array#assoc; + * see also {Methods for Fetching}[rdoc-ref:Array@Methods+for+Fetching]. */ VALUE @@ -5560,7 +5563,7 @@ recursive_eql(VALUE ary1, VALUE ary2, int recur) /* * call-seq: - * array.eql?(other_array) -> true or false + * eql?(other_array) -> true or false * * Returns +true+ if +self+ and +other_array+ are the same size, * and if, for each index +i+ in +self+, self[i].eql?(other_array[i]): @@ -5573,6 +5576,8 @@ recursive_eql(VALUE ary1, VALUE ary2, int recur) * * This method is different from method Array#==, * which compares using method Object#==. + * + * Related: see {Methods for Querying}[rdoc-ref:Array@Methods+for+Querying]. */ static VALUE @@ -5604,14 +5609,16 @@ rb_ary_hash_values(long len, const VALUE *elements) /* * call-seq: - * array.hash -> integer + * hash -> integer * * Returns the integer hash value for +self+. * - * Two arrays with the same content will have the same hash code (and will compare using #eql?): + * Two arrays with the same content will have the same hash value + * (and will compare using eql?): * - * [0, 1, 2].hash == [0, 1, 2].hash # => true - * [0, 1, 2].hash == [0, 1, 3].hash # => false + * ['a', 'b'].hash == ['a', 'b'].hash # => true + * ['a', 'b'].hash == ['a', 'c'].hash # => false + * ['a', 'b'].hash == ['a'].hash # => false * */ @@ -5623,13 +5630,16 @@ rb_ary_hash(VALUE ary) /* * call-seq: - * array.include?(obj) -> true or false + * include?(object) -> true or false * - * Returns +true+ if for some index +i+ in +self+, obj == self[i]; - * otherwise +false+: + * Returns whether for some element +element+ in +self+, + * object == element: * - * [0, 1, 2].include?(2) # => true - * [0, 1, 2].include?(3) # => false + * [0, 1, 2].include?(2) # => true + * [0, 1, 2].include?(2.0) # => true + * [0, 1, 2].include?(2.1) # => false + * + * Related: see {Methods for Querying}[rdoc-ref:Array@Methods+for+Querying]. */ VALUE @@ -5834,19 +5844,21 @@ rb_ary_diff(VALUE ary1, VALUE ary2) /* * call-seq: - * array.difference(*other_arrays) -> new_array + * difference(*other_arrays = []) -> new_array * - * Returns a new +Array+ containing only those elements from +self+ - * that are not found in any of the Arrays +other_arrays+; + * Returns a new array containing only those elements from +self+ + * that are not found in any of the given +other_arrays+; * items are compared using eql?; order from +self+ is preserved: * * [0, 1, 1, 2, 1, 1, 3, 1, 1].difference([1]) # => [0, 2, 3] - * [0, 1, 2, 3].difference([3, 0], [1, 3]) # => [2] - * [0, 1, 2].difference([4]) # => [0, 1, 2] + * [0, 1, 2, 3].difference([3, 0], [1, 3]) # => [2] + * [0, 1, 2].difference([4]) # => [0, 1, 2] + * [0, 1, 2].difference # => [0, 1, 2] * - * Returns a copy of +self+ if no arguments given. + * Returns a copy of +self+ if no arguments are given. * - * Related: Array#-. + * Related: Array#-; + * see also {Methods for Combining}[rdoc-ref:Array@Methods+for+Combining]. */ static VALUE @@ -5946,23 +5958,23 @@ rb_ary_and(VALUE ary1, VALUE ary2) /* * call-seq: - * array.intersection(*other_arrays) -> new_array + * intersection(*other_arrays) -> new_array * - * Returns a new +Array+ containing each element found both in +self+ - * and in all of the given Arrays +other_arrays+; - * duplicates are omitted; items are compared using eql? - * (items must also implement +hash+ correctly): + * Returns a new array containing each element in +self+ that is +#eql?+ + * to at least one element in each of the given +other_arrays+; + * duplicates are omitted: * - * [0, 1, 2, 3].intersection([0, 1, 2], [0, 1, 3]) # => [0, 1] * [0, 0, 1, 1, 2, 3].intersection([0, 1, 2], [0, 1, 3]) # => [0, 1] * - * Preserves order from +self+: + * Each element must correctly implement method #hash. + * + * Order from +self+ is preserved: * * [0, 1, 2].intersection([2, 1, 0]) # => [0, 1, 2] * - * Returns a copy of +self+ if no arguments given. + * Returns a copy of +self+ if no arguments are given. * - * Related: Array#&. + * Related: see {Methods for Combining}[rdoc-ref:Array@Methods+for+Combining]. */ static VALUE @@ -6089,19 +6101,16 @@ rb_ary_union_multi(int argc, VALUE *argv, VALUE ary) /* * call-seq: - * ary.intersect?(other_ary) -> true or false + * intersect?(other_array) -> true or false + * + * Returns whether +other_array+ has at least one element that is +#eql?+ to some element of +self+: * - * Returns +true+ if the array and +other_ary+ have at least one element in - * common, otherwise returns +false+: + * [1, 2, 3].intersect?([3, 4, 5]) # => true + * [1, 2, 3].intersect?([4, 5, 6]) # => false * - * a = [ 1, 2, 3 ] - * b = [ 3, 4, 5 ] - * c = [ 5, 6, 7 ] - * a.intersect?(b) #=> true - * a.intersect?(c) #=> false + * Each element must correctly implement method #hash. * - * +Array+ elements are compared using eql? - * (items must also implement +hash+ correctly). + * Related: see {Methods for Querying}[rdoc-ref:Array@Methods+for+Querying]. */ static VALUE @@ -6235,42 +6244,51 @@ ary_max_opt_string(VALUE ary, long i, VALUE vmax) /* * call-seq: - * array.max -> element - * array.max {|a, b| ... } -> element - * array.max(n) -> new_array - * array.max(n) {|a, b| ... } -> new_array + * max -> element + * max(n) -> new_array + * max {|a, b| ... } -> element + * max(n) {|a, b| ... } -> new_array * * Returns one of the following: * * - The maximum-valued element from +self+. - * - A new +Array+ of maximum-valued elements selected from +self+. + * - A new array of maximum-valued elements from +self+. * - * When no block is given, each element in +self+ must respond to method <=> - * with an Integer. + * Does not modify +self+. + * + * With no block given, each element in +self+ must respond to method #<=> + * with a numeric. * * With no argument and no block, returns the element in +self+ - * having the maximum value per method <=>: + * having the maximum value per method #<=>: * - * [0, 1, 2].max # => 2 + * [1, 0, 3, 2].max # => 3 * - * With an argument Integer +n+ and no block, returns a new +Array+ with at most +n+ elements, - * in descending order per method <=>: + * With non-negative numeric argument +n+ and no block, + * returns a new array with at most +n+ elements, + * in descending order, per method #<=>: * - * [0, 1, 2, 3].max(3) # => [3, 2, 1] - * [0, 1, 2, 3].max(6) # => [3, 2, 1, 0] + * [1, 0, 3, 2].max(3) # => [3, 2, 1] + * [1, 0, 3, 2].max(3.0) # => [3, 2, 1] + * [1, 0, 3, 2].max(9) # => [3, 2, 1, 0] + * [1, 0, 3, 2].max(0) # => [] * - * When a block is given, the block must return an Integer. + * With a block given, the block must return a numeric. * - * With a block and no argument, calls the block self.size-1 times to compare elements; + * With a block and no argument, calls the block self.size - 1 times to compare elements; * returns the element having the maximum value per the block: * - * ['0', '00', '000'].max {|a, b| a.size <=> b.size } # => "000" + * ['0', '', '000', '00'].max {|a, b| a.size <=> b.size } + * # => "000" * - * With an argument +n+ and a block, returns a new +Array+ with at most +n+ elements, - * in descending order per the block: + * With non-negative numeric argument +n+ and a block, + * returns a new array with at most +n+ elements, + * in descending order, per the block: * - * ['0', '00', '000'].max(2) {|a, b| a.size <=> b.size } # => ["000", "00"] + * ['0', '', '000', '00'].max(2) {|a, b| a.size <=> b.size } + * # => ["000", "00"] * + * Related: see {Methods for Fetching}[rdoc-ref:Array@Methods+for+Fetching]. */ static VALUE rb_ary_max(int argc, VALUE *argv, VALUE ary) @@ -6403,42 +6421,51 @@ ary_min_opt_string(VALUE ary, long i, VALUE vmin) /* * call-seq: - * array.min -> element - * array.min { |a, b| ... } -> element - * array.min(n) -> new_array - * array.min(n) { |a, b| ... } -> new_array + * min -> element + * min(n) -> new_array + * min {|a, b| ... } -> element + * min(n) {|a, b| ... } -> new_array * * Returns one of the following: * * - The minimum-valued element from +self+. - * - A new +Array+ of minimum-valued elements selected from +self+. + * - A new array of minimum-valued elements from +self+. + * + * Does not modify +self+. * - * When no block is given, each element in +self+ must respond to method <=> - * with an Integer. + * With no block given, each element in +self+ must respond to method #<=> + * with a numeric. * * With no argument and no block, returns the element in +self+ - * having the minimum value per method <=>: + * having the minimum value per method #<=>: * - * [0, 1, 2].min # => 0 + * [1, 0, 3, 2].min # => 0 * - * With Integer argument +n+ and no block, returns a new +Array+ with at most +n+ elements, - * in ascending order per method <=>: + * With non-negative numeric argument +n+ and no block, + * returns a new array with at most +n+ elements, + * in ascending order, per method #<=>: * - * [0, 1, 2, 3].min(3) # => [0, 1, 2] - * [0, 1, 2, 3].min(6) # => [0, 1, 2, 3] + * [1, 0, 3, 2].min(3) # => [0, 1, 2] + * [1, 0, 3, 2].min(3.0) # => [0, 1, 2] + * [1, 0, 3, 2].min(9) # => [0, 1, 2, 3] + * [1, 0, 3, 2].min(0) # => [] * - * When a block is given, the block must return an Integer. + * With a block given, the block must return a numeric. * - * With a block and no argument, calls the block self.size-1 times to compare elements; + * With a block and no argument, calls the block self.size - 1 times to compare elements; * returns the element having the minimum value per the block: * - * ['0', '00', '000'].min { |a, b| a.size <=> b.size } # => "0" + * ['0', '', '000', '00'].min {|a, b| a.size <=> b.size } + * # => "" * - * With an argument +n+ and a block, returns a new +Array+ with at most +n+ elements, - * in ascending order per the block: + * With non-negative numeric argument +n+ and a block, + * returns a new array with at most +n+ elements, + * in ascending order, per the block: * - * ['0', '00', '000'].min(2) {|a, b| a.size <=> b.size } # => ["0", "00"] + * ['0', '', '000', '00'].min(2) {|a, b| a.size <=> b.size } + * # => ["", "0"] * + * Related: see {Methods for Fetching}[rdoc-ref:Array@Methods+for+Fetching]. */ static VALUE rb_ary_min(int argc, VALUE *argv, VALUE ary) @@ -6482,26 +6509,25 @@ rb_ary_min(int argc, VALUE *argv, VALUE ary) /* * call-seq: - * array.minmax -> [min_val, max_val] - * array.minmax {|a, b| ... } -> [min_val, max_val] + * minmax -> array + * minmax {|a, b| ... } -> array * - * Returns a new 2-element +Array+ containing the minimum and maximum values - * from +self+, either per method <=> or per a given block:. + * Returns a 2-element array containing the minimum-valued and maximum-valued + * elements from +self+; + * does not modify +self+. * - * When no block is given, each element in +self+ must respond to method <=> - * with an Integer; - * returns a new 2-element +Array+ containing the minimum and maximum values - * from +self+, per method <=>: + * With no block given, the minimum and maximum values are determined using method #<=>: * - * [0, 1, 2].minmax # => [0, 2] + * [1, 0, 3, 2].minmax # => [0, 3] * - * When a block is given, the block must return an Integer; - * the block is called self.size-1 times to compare elements; - * returns a new 2-element +Array+ containing the minimum and maximum values - * from +self+, per the block: + * With a block given, the block must return a numeric; + * the block is called self.size - 1 times to compare elements; + * returns the elements having the minimum and maximum values per the block: * - * ['0', '00', '000'].minmax {|a, b| a.size <=> b.size } # => ["0", "000"] + * ['0', '', '000', '00'].minmax {|a, b| a.size <=> b.size } + * # => ["", "000"] * + * Related: see {Methods for Fetching}[rdoc-ref:Array@Methods+for+Fetching]. */ static VALUE rb_ary_minmax(VALUE ary) @@ -6634,7 +6660,8 @@ rb_ary_uniq(VALUE ary) * a # => [0, false, "", [], {}] * a.compact! # => nil * - * Related: Array#compact. + * Related: Array#compact; + * see also {Methods for Deleting}[rdoc-ref:Array@Methods+for+Deleting]. */ static VALUE @@ -6670,7 +6697,8 @@ rb_ary_compact_bang(VALUE ary) * a = [nil, 0, nil, false, nil, '', nil, [], nil, {}] * a.compact # => [0, false, "", [], {}] * - * Related: Array#compact!. + * Related: Array#compact!; + * see also {Methods for Deleting}[rdoc-ref:Array@Methods+for+Deleting]. */ static VALUE @@ -6700,10 +6728,12 @@ rb_ary_compact(VALUE ary) * With no argument and a block given, calls the block with each element; * returns the count of elements for which the block returns a truthy value: * - * [0, 1, 2, 3].count {|element| element > 1} # => 2 + * [0, 1, 2, 3].count {|element| element > 1 } # => 2 * * With argument +object+ and a block given, issues a warning, ignores the block, * and returns the count of elements == to +object+. + * + * Related: see {Methods for Querying}[rdoc-ref:Array@Methods+for+Querying]. */ static VALUE @@ -6823,33 +6853,37 @@ flatten(VALUE ary, int level) /* * call-seq: - * array.flatten! -> self or nil - * array.flatten!(level) -> self or nil + * flatten!(depth = nil) -> self or nil + * + * Returns +self+ as a recursively flattening of +self+ to +depth+ levels of recursion; + * +depth+ must be an + * {integer-convertible object}[rdoc-ref:implicit_conversion.rdoc@Integer-Convertible+Objects], + * or +nil+. + * At each level of recursion: + * + * - Each element that is an array is "flattened" + * (that is, replaced by its individual array elements). + * - Each element that is not an array is unchanged + * (even if the element is an object that has instance method +flatten+). * - * Replaces each nested +Array+ in +self+ with the elements from that +Array+; - * returns +self+ if any changes, +nil+ otherwise. + * Returns +nil+ if no elements were flattened. * - * With non-negative Integer argument +level+, flattens recursively through +level+ levels: + * With non-negative integer argument +depth+, flattens recursively through +depth+ levels: * - * a = [ 0, [ 1, [2, 3], 4 ], 5 ] - * a.flatten!(1) # => [0, 1, [2, 3], 4, 5] - * a = [ 0, [ 1, [2, 3], 4 ], 5 ] - * a.flatten!(2) # => [0, 1, 2, 3, 4, 5] - * a = [ 0, [ 1, [2, 3], 4 ], 5 ] - * a.flatten!(3) # => [0, 1, 2, 3, 4, 5] - * [0, 1, 2].flatten!(1) # => nil + * a = [ 0, [ 1, [2, 3], 4 ], 5, {foo: 0}, Set.new([6, 7]) ] + * a # => [0, [1, [2, 3], 4], 5, {:foo=>0}, #] + * a.dup.flatten!(1) # => [0, 1, [2, 3], 4, 5, {:foo=>0}, #] + * a.dup.flatten!(1.1) # => [0, 1, [2, 3], 4, 5, {:foo=>0}, #] + * a.dup.flatten!(2) # => [0, 1, 2, 3, 4, 5, {:foo=>0}, #] + * a.dup.flatten!(3) # => [0, 1, 2, 3, 4, 5, {:foo=>0}, #] * - * With no argument, a +nil+ argument, or with negative argument +level+, flattens all levels: + * With +nil+ or negative argument +depth+, flattens all levels: * - * a = [ 0, [ 1, [2, 3], 4 ], 5 ] - * a.flatten! # => [0, 1, 2, 3, 4, 5] - * [0, 1, 2].flatten! # => nil - * a = [ 0, [ 1, [2, 3], 4 ], 5 ] - * a.flatten!(-1) # => [0, 1, 2, 3, 4, 5] - * a = [ 0, [ 1, [2, 3], 4 ], 5 ] - * a.flatten!(-2) # => [0, 1, 2, 3, 4, 5] - * [0, 1, 2].flatten!(-1) # => nil + * a.dup.flatten! # => [0, 1, 2, 3, 4, 5, {:foo=>0}, #] + * a.dup.flatten!(-1) # => [0, 1, 2, 3, 4, 5, {:foo=>0}, #] * + * Related: Array#flatten; + * see also {Methods for Assigning}[rdoc-ref:Array@Methods+for+Assigning]. */ static VALUE @@ -6876,35 +6910,37 @@ rb_ary_flatten_bang(int argc, VALUE *argv, VALUE ary) /* * call-seq: - * array.flatten -> new_array - * array.flatten(level) -> new_array - * - * Returns a new +Array+ that is a recursive flattening of +self+: - * - Each non-Array element is unchanged. - * - Each +Array+ is replaced by its individual elements. - * - * With non-negative Integer argument +level+, flattens recursively through +level+ levels: - * - * a = [ 0, [ 1, [2, 3], 4 ], 5 ] - * a.flatten(0) # => [0, [1, [2, 3], 4], 5] - * a = [ 0, [ 1, [2, 3], 4 ], 5 ] - * a.flatten(1) # => [0, 1, [2, 3], 4, 5] - * a = [ 0, [ 1, [2, 3], 4 ], 5 ] - * a.flatten(2) # => [0, 1, 2, 3, 4, 5] - * a = [ 0, [ 1, [2, 3], 4 ], 5 ] - * a.flatten(3) # => [0, 1, 2, 3, 4, 5] - * - * With no argument, a +nil+ argument, or with negative argument +level+, flattens all levels: - * - * a = [ 0, [ 1, [2, 3], 4 ], 5 ] - * a.flatten # => [0, 1, 2, 3, 4, 5] - * [0, 1, 2].flatten # => [0, 1, 2] - * a = [ 0, [ 1, [2, 3], 4 ], 5 ] - * a.flatten(-1) # => [0, 1, 2, 3, 4, 5] - * a = [ 0, [ 1, [2, 3], 4 ], 5 ] - * a.flatten(-2) # => [0, 1, 2, 3, 4, 5] - * [0, 1, 2].flatten(-1) # => [0, 1, 2] + * flatten(depth = nil) -> new_array + * + * Returns a new array that is a recursive flattening of +self+ + * to +depth+ levels of recursion; + * +depth+ must be an + * {integer-convertible object}[rdoc-ref:implicit_conversion.rdoc@Integer-Convertible+Objects] + * or +nil+. + * At each level of recursion: + * + * - Each element that is an array is "flattened" + * (that is, replaced by its individual array elements). + * - Each element that is not an array is unchanged + * (even if the element is an object that has instance method +flatten+). + * + * With non-negative integer argument +depth+, flattens recursively through +depth+ levels: * + * a = [ 0, [ 1, [2, 3], 4 ], 5, {foo: 0}, Set.new([6, 7]) ] + * a # => [0, [1, [2, 3], 4], 5, {:foo=>0}, #] + * a.flatten(0) # => [0, [1, [2, 3], 4], 5, {:foo=>0}, #] + * a.flatten(1 ) # => [0, 1, [2, 3], 4, 5, {:foo=>0}, #] + * a.flatten(1.1) # => [0, 1, [2, 3], 4, 5, {:foo=>0}, #] + * a.flatten(2) # => [0, 1, 2, 3, 4, 5, {:foo=>0}, #] + * a.flatten(3) # => [0, 1, 2, 3, 4, 5, {:foo=>0}, #] + * + * With +nil+ or negative +depth+, flattens all levels. + * + * a.flatten # => [0, 1, 2, 3, 4, 5, {:foo=>0}, #] + * a.flatten(-1) # => [0, 1, 2, 3, 4, 5, {:foo=>0}, #] + * + * Related: Array#flatten!; + * see also {Methods for Converting}[rdoc-ref:Array@Methods+for+Converting]. */ static VALUE @@ -7127,7 +7163,7 @@ rb_ary_cycle_size(VALUE self, VALUE args, VALUE eobj) * {integer-convertible object}[rdoc-ref:implicit_conversion.rdoc@Integer-Convertible+Objects], * or +nil+. * - * If +count+ is positive, + * When +count+ is positive, * calls the block with each element, then does so repeatedly, * until it has done so +count+ times; returns +nil+: * @@ -7135,18 +7171,20 @@ rb_ary_cycle_size(VALUE self, VALUE args, VALUE eobj) * [0, 1].cycle(2) {|element| output.push(element) } # => nil * output # => [0, 1, 0, 1] * - * If +count+ is zero or negative, does not call the block: + * When +count+ is zero or negative, does not call the block: * * [0, 1].cycle(0) {|element| fail 'Cannot happen' } # => nil * [0, 1].cycle(-1) {|element| fail 'Cannot happen' } # => nil * - * If +count+ is +nil+, cycles forever: + * When +count+ is +nil+, cycles forever: * * # Prints 0 and 1 forever. * [0, 1].cycle {|element| puts element } * [0, 1].cycle(nil) {|element| puts element } * * With no block given, returns a new Enumerator. + * + * Related: see {Methods for Iterating}[rdoc-ref:Array@Methods+for+Iterating]. */ static VALUE rb_ary_cycle(int argc, VALUE *argv, VALUE ary) @@ -7290,82 +7328,44 @@ rb_ary_permutation_size(VALUE ary, VALUE args, VALUE eobj) /* * call-seq: - * array.permutation {|element| ... } -> self - * array.permutation(n) {|element| ... } -> self - * array.permutation -> new_enumerator - * array.permutation(n) -> new_enumerator - * - * When invoked with a block, yield all permutations of elements of +self+; returns +self+. - * The order of permutations is indeterminate. - * - * When a block and an in-range positive Integer argument +n+ (0 < n <= self.size) - * are given, calls the block with all +n+-tuple permutations of +self+. + * permutation(n = self.size) {|permutation| ... } -> self + * permutation(n = self.size) -> new_enumerator * - * Example: - * - * a = [0, 1, 2] - * a.permutation(2) {|permutation| p permutation } + * Iterates over permutations of the elements of +self+; + * the order of permutations is indeterminate. * - * Output: - * - * [0, 1] - * [0, 2] - * [1, 0] - * [1, 2] - * [2, 0] - * [2, 1] - * - * Another example: + * With a block and an in-range positive integer argument +n+ (0 < n <= self.size) given, + * calls the block with each +n+-tuple permutations of +self+; + * returns +self+: * * a = [0, 1, 2] - * a.permutation(3) {|permutation| p permutation } - * - * Output: + * perms = [] + * a.permutation(1) {|perm| perms.push(perm) } + * perms # => [[0], [1], [2]] * - * [0, 1, 2] - * [0, 2, 1] - * [1, 0, 2] - * [1, 2, 0] - * [2, 0, 1] - * [2, 1, 0] + * perms = [] + * a.permutation(2) {|perm| perms.push(perm) } + * perms # => [[0, 1], [0, 2], [1, 0], [1, 2], [2, 0], [2, 1]] * - * When +n+ is zero, calls the block once with a new empty +Array+: - * - * a = [0, 1, 2] - * a.permutation(0) {|permutation| p permutation } + * perms = [] + * a.permutation(3) {|perm| perms.push(perm) } + * perms # => [[0, 1, 2], [0, 2, 1], [1, 0, 2], [1, 2, 0], [2, 0, 1], [2, 1, 0]] * - * Output: + * When +n+ is zero, calls the block once with a new empty array: * - * [] + * perms = [] + * a.permutation(0) {|perm| perms.push(perm) } + * perms # => [[]] * * When +n+ is out of range (negative or larger than self.size), * does not call the block: * - * a = [0, 1, 2] * a.permutation(-1) {|permutation| fail 'Cannot happen' } * a.permutation(4) {|permutation| fail 'Cannot happen' } * - * When a block given but no argument, - * behaves the same as a.permutation(a.size): - * - * a = [0, 1, 2] - * a.permutation {|permutation| p permutation } - * - * Output: - * - * [0, 1, 2] - * [0, 2, 1] - * [1, 0, 2] - * [1, 2, 0] - * [2, 0, 1] - * [2, 1, 0] - * - * Returns a new Enumerator if no block given: - * - * a = [0, 1, 2] - * a.permutation # => # - * a.permutation(2) # => # + * With no block given, returns a new Enumerator. * + * Related: {Methods for Iterating}[rdoc-ref:Array@Methods+for+Iterating]. */ static VALUE @@ -7476,7 +7476,8 @@ rb_ary_combination_size(VALUE ary, VALUE args, VALUE eobj) * * With no block given, returns a new Enumerator. * - * Related: Array#permutation. + * Related: Array#permutation; + * see also {Methods for Iterating}[rdoc-ref:Array@Methods+for+Iterating]. */ static VALUE @@ -7793,62 +7794,55 @@ rb_ary_repeated_combination(VALUE ary, VALUE num) /* * call-seq: - * array.product(*other_arrays) -> new_array - * array.product(*other_arrays) {|combination| ... } -> self + * product(*other_arrays) -> new_array + * product(*other_arrays) {|combination| ... } -> self * - * Computes and returns or yields all combinations of elements from all the Arrays, + * Computes all combinations of elements from all the arrays, * including both +self+ and +other_arrays+: * * - The number of combinations is the product of the sizes of all the arrays, * including both +self+ and +other_arrays+. * - The order of the returned combinations is indeterminate. * - * When no block is given, returns the combinations as an +Array+ of Arrays: - * - * a = [0, 1, 2] - * a1 = [3, 4] - * a2 = [5, 6] - * p = a.product(a1) - * p.size # => 6 # a.size * a1.size - * p # => [[0, 3], [0, 4], [1, 3], [1, 4], [2, 3], [2, 4]] - * p = a.product(a1, a2) - * p.size # => 12 # a.size * a1.size * a2.size - * p # => [[0, 3, 5], [0, 3, 6], [0, 4, 5], [0, 4, 6], [1, 3, 5], [1, 3, 6], [1, 4, 5], [1, 4, 6], [2, 3, 5], [2, 3, 6], [2, 4, 5], [2, 4, 6]] - * - * If any argument is an empty +Array+, returns an empty +Array+. - * - * If no argument is given, returns an +Array+ of 1-element Arrays, - * each containing an element of +self+: + * With no block given, returns the combinations as an array of arrays: * - * a.product # => [[0], [1], [2]] + * p = [0, 1].product([2, 3]) + * # => [[0, 2], [0, 3], [1, 2], [1, 3]] + * p.size # => 4 + * p = [0, 1].product([2, 3], [4, 5]) + * # => [[0, 2, 4], [0, 2, 5], [0, 3, 4], [0, 3, 5], [1, 2, 4], [1, 2, 5], [1, 3, 4], [1, 3,... + * p.size # => 8 * - * When a block is given, yields each combination as an +Array+; returns +self+: + * If +self+ or any argument is empty, returns an empty array: * - * a.product(a1) {|combination| p combination } + * [].product([2, 3], [4, 5]) # => [] + * [0, 1].product([2, 3], []) # => [] * - * Output: + * If no argument is given, returns an array of 1-element arrays, + * each containing an element of +self+: * - * [0, 3] - * [0, 4] - * [1, 3] - * [1, 4] - * [2, 3] - * [2, 4] + * a.product # => [[0], [1], [2]] * - * If any argument is an empty +Array+, does not call the block: + * With a block given, calls the block with each combination; returns +self+: * - * a.product(a1, a2, []) {|combination| fail 'Cannot happen' } + * p = [] + * [0, 1].product([2, 3]) {|combination| p.push(combination) } + * p # => [[0, 2], [0, 3], [1, 2], [1, 3]] * - * If no argument is given, yields each element of +self+ as a 1-element +Array+: + * If +self+ or any argument is empty, does not call the block: * - * a.product {|combination| p combination } + * [].product([2, 3], [4, 5]) {|combination| fail 'Cannot happen' } + * # => [] + * [0, 1].product([2, 3], []) {|combination| fail 'Cannot happen' } + * # => [0, 1] * - * Output: + * If no argument is given, calls the block with each element of +self+ as a 1-element array: * - * [0] - * [1] - * [2] + * p = [] + * [0, 1].product {|combination| p.push(combination) } + * p # => [[0], [1]] * + * Related: see {Methods for Combining}[rdoc-ref:Array@Methods+for+Combining]. */ static VALUE @@ -8004,9 +7998,9 @@ rb_ary_take_while(VALUE ary) /* * call-seq: - * array.drop(n) -> new_array + * drop(n) -> new_array * - * Returns a new +Array+ containing all but the first +n+ element of +self+, + * Returns a new array containing all but the first +n+ element of +self+, * where +n+ is a non-negative Integer; * does not modify +self+. * @@ -8016,7 +8010,9 @@ rb_ary_take_while(VALUE ary) * a.drop(0) # => [0, 1, 2, 3, 4, 5] * a.drop(1) # => [1, 2, 3, 4, 5] * a.drop(2) # => [2, 3, 4, 5] + * a.drop(9) # => [] * + * Related: see {Methods for Fetching}[rdoc-ref:Array@Methods+for+Fetching]. */ static VALUE @@ -8035,23 +8031,20 @@ rb_ary_drop(VALUE ary, VALUE n) /* * call-seq: - * array.drop_while {|element| ... } -> new_array - * array.drop_while -> new_enumerator - - * Returns a new +Array+ containing zero or more trailing elements of +self+; - * does not modify +self+. + * drop_while {|element| ... } -> new_array + * drop_while -> new_enumerator * * With a block given, calls the block with each successive element of +self+; * stops if the block returns +false+ or +nil+; - * returns a new +Array+ _omitting_ those elements for which the block returned a truthy value: + * returns a new array _omitting_ those elements for which the block returned a truthy value; + * does not modify +self+: * * a = [0, 1, 2, 3, 4, 5] * a.drop_while {|element| element < 3 } # => [3, 4, 5] * - * With no block given, returns a new Enumerator: - * - * [0, 1].drop_while # => # => # + * With no block given, returns a new Enumerator. * + * Related: see {Methods for Fetching}[rdoc-ref:Array@Methods+for+Fetching]. */ static VALUE @@ -8202,34 +8195,35 @@ rb_ary_all_p(int argc, VALUE *argv, VALUE ary) /* * call-seq: - * array.none? -> true or false - * array.none? {|element| ... } -> true or false - * array.none?(obj) -> true or false + * none? -> true or false + * none?(object) -> true or false + * none? {|element| ... } -> true or false * - * Returns +true+ if no element of +self+ meet a given criterion. + * Returns +true+ if no element of +self+ meets a given criterion, +false+ otherwise. * * With no block given and no argument, returns +true+ if +self+ has no truthy elements, * +false+ otherwise: * - * [nil, false].none? # => true + * [nil, false].none? # => true * [nil, 0, false].none? # => false - * [].none? # => true + * [].none? # => true + * + * With argument +object+ given, returns +false+ if for any element +element+, + * object === element; +true+ otherwise: + * + * ['food', 'drink'].none?(/bar/) # => true + * ['food', 'drink'].none?(/foo/) # => false + * [].none?(/foo/) # => true + * [0, 1, 2].none?(3) # => true + * [0, 1, 2].none?(1) # => false * - * With a block given and no argument, calls the block with each element in +self+; + * With a block given, calls the block with each element in +self+; * returns +true+ if the block returns no truthy value, +false+ otherwise: * * [0, 1, 2].none? {|element| element > 3 } # => true * [0, 1, 2].none? {|element| element > 1 } # => false * - * If argument +obj+ is given, returns +true+ if obj.=== no element, +false+ otherwise: - * - * ['food', 'drink'].none?(/bar/) # => true - * ['food', 'drink'].none?(/foo/) # => false - * [].none?(/foo/) # => true - * [0, 1, 2].none?(3) # => true - * [0, 1, 2].none?(1) # => false - * - * Related: Enumerable#none? + * Related: see {Methods for Querying}[rdoc-ref:Array@Methods+for+Querying]. */ static VALUE @@ -8262,9 +8256,9 @@ rb_ary_none_p(int argc, VALUE *argv, VALUE ary) /* * call-seq: - * array.one? -> true or false - * array.one? {|element| ... } -> true or false - * array.one?(obj) -> true or false + * one? -> true or false + * one? {|element| ... } -> true or false + * one?(object) -> true or false * * Returns +true+ if exactly one element of +self+ meets a given criterion. * @@ -8276,14 +8270,14 @@ rb_ary_none_p(int argc, VALUE *argv, VALUE ary) * [nil, nil].one? # => false * [].one? # => false * - * With a block given and no argument, calls the block with each element in +self+; + * With a block given, calls the block with each element in +self+; * returns +true+ if the block a truthy value for exactly one element, +false+ otherwise: * * [0, 1, 2].one? {|element| element > 0 } # => false * [0, 1, 2].one? {|element| element > 1 } # => true * [0, 1, 2].one? {|element| element > 2 } # => false * - * If argument +obj+ is given, returns +true+ if obj.=== exactly one element, + * With argument +object+ given, returns +true+ if for exactly one element +element+, object === element; * +false+ otherwise: * * [0, 1, 2].one?(0) # => true @@ -8293,7 +8287,7 @@ rb_ary_none_p(int argc, VALUE *argv, VALUE ary) * ['food', 'drink'].one?(/foo/) # => true * [].one?(/foo/) # => false * - * Related: Enumerable#one? + * Related: see {Methods for Querying}[rdoc-ref:Array@Methods+for+Querying]. */ static VALUE @@ -8338,9 +8332,9 @@ rb_ary_one_p(int argc, VALUE *argv, VALUE ary) * call-seq: * array.dig(index, *identifiers) -> object * - * Finds and returns the object in nested objects - * that is specified by +index+ and +identifiers+. - * The nested objects may be instances of various classes. + * Finds and returns the object in nested object + * specified by +index+ and +identifiers+; + * the nested objects may be instances of various classes. * See {Dig Methods}[rdoc-ref:dig_methods.rdoc]. * * Examples: @@ -8351,6 +8345,7 @@ rb_ary_one_p(int argc, VALUE *argv, VALUE ary) * a.dig(1, 2, 0) # => :bat * a.dig(1, 2, 3) # => nil * + * Related: see {Methods for Fetching}[rdoc-ref:Array@Methods+for+Fetching]. */ static VALUE @@ -8882,7 +8877,7 @@ rb_ary_deconstruct(VALUE ary) * * === Methods for Querying * - * - #length, #size: Returns the count of elements. + * - #length (aliased as #size): Returns the count of elements. * - #include?: Returns whether any element == a given object. * - #empty?: Returns whether there are no elements. * - #all?: Returns whether all elements meet a given criterion. @@ -8890,7 +8885,7 @@ rb_ary_deconstruct(VALUE ary) * - #none?: Returns whether no element == a given object. * - #one?: Returns whether exactly one element == a given object. * - #count: Returns the count of elements that meet a given criterion. - * - #find_index, #index: Returns the index of the first element that meets a given criterion. + * - #find_index (aliased as #index): Returns the index of the first element that meets a given criterion. * - #rindex: Returns the index of the last element that meets a given criterion. * - #hash: Returns the integer hash code. * @@ -8907,16 +8902,17 @@ rb_ary_deconstruct(VALUE ary) * * These methods do not modify +self+. * - * - #[]: Returns one or more elements. + * - #[] (aliased as #slice): Returns consecutive elements as determined by a given argument. * - #fetch: Returns the element at a given offset. + * - #fetch_values: Returns elements at given offsets. * - #first: Returns one or more leading elements. * - #last: Returns one or more trailing elements. * - #max: Returns one or more maximum-valued elements, - * as determined by <=> or a given block. + * as determined by #<=> or a given block. * - #min: Returns one or more minimum-valued elements, - * as determined by <=> or a given block. + * as determined by #<=> or a given block. * - #minmax: Returns the minimum-valued and maximum-valued elements, - * as determined by <=> or a given block. + * as determined by #<=> or a given block. * - #assoc: Returns the first element that is an array * whose first element == a given object. * - #rassoc: Returns the first element that is an array @@ -8929,11 +8925,10 @@ rb_ary_deconstruct(VALUE ary) * - #take: Returns leading elements as determined by a given index. * - #drop_while: Returns trailing elements as determined by a given block. * - #take_while: Returns leading elements as determined by a given block. - * - #slice: Returns consecutive elements as determined by a given argument. - * - #sort: Returns all elements in an order determined by <=> or a given block. + * - #sort: Returns all elements in an order determined by #<=> or a given block. * - #reverse: Returns all elements in reverse order. * - #compact: Returns an array containing all non-+nil+ elements. - * - #select, #filter: Returns an array containing elements selected by a given block. + * - #select (aliased as #filter): Returns an array containing elements selected by a given block. * - #uniq: Returns an array containing non-duplicate elements. * - #rotate: Returns all elements with some rotated from one end to the other. * - #bsearch: Returns an element selected via a binary search @@ -8942,6 +8937,7 @@ rb_ary_deconstruct(VALUE ary) * as determined by a given block. * - #sample: Returns one or more random elements. * - #shuffle: Returns elements in a random order. + * - #reject: Returns an array containing elements not rejected by a given block. * * === Methods for Assigning * @@ -8949,17 +8945,18 @@ rb_ary_deconstruct(VALUE ary) * * - #[]=: Assigns specified elements with a given object. * - #<<: Appends an element. - * - #push (and its alias #append): Appends elements. - * - #unshift, #prepend: Prepends leading elements. + * - #push (aliased as #append): Appends elements. + * - #unshift (aliased as #prepend): Prepends leading elements. * - #insert: Inserts given objects at a given offset; does not replace elements. * - #concat: Appends all elements from given arrays. * - #fill: Replaces specified elements with specified objects. - * - #replace: Replaces the content of +self+ with the content of a given array. + * - #flatten!: Replaces each nested array in +self+ with the elements from that array. + * - #initialize_copy (aliased as #replace): Replaces the content of +self+ with the content of a given array. * - #reverse!: Replaces +self+ with its elements reversed. * - #rotate!: Replaces +self+ with its elements rotated. * - #shuffle!: Replaces +self+ with its elements in random order. * - #sort!: Replaces +self+ with its elements sorted, - * as determined by <=> or a given block. + * as determined by #<=> or a given block. * - #sort_by!: Replaces +self+ with its elements sorted, as determined by a given block. * * === Methods for Deleting @@ -8972,9 +8969,10 @@ rb_ary_deconstruct(VALUE ary) * - #delete: Removes elements equal to a given object. * - #delete_at: Removes the element at a given offset. * - #delete_if: Removes elements specified by a given block. + * - #clear: Removes all elements. * - #keep_if: Removes elements not specified by a given block. * - #reject!: Removes elements specified by a given block. - * - #select!, #filter!: Removes elements not specified by a given block. + * - #select! (aliased as #filter!): Removes elements not specified by a given block. * - #slice!: Removes and returns a sequence of elements. * - #uniq!: Removes duplicates. * @@ -8992,6 +8990,7 @@ rb_ary_deconstruct(VALUE ary) * - #difference: Returns an array containing all elements of +self+ that are not found * in any of the given arrays.. * - #product: Returns or yields all combinations of elements from +self+ and given arrays. + * - #reverse: Returns an array containing all elements of +self+ in reverse order. * * === Methods for Iterating * @@ -9011,11 +9010,10 @@ rb_ary_deconstruct(VALUE ary) * * === Methods for Converting * - * - #map, #collect: Returns an array containing the block return-value for each element. - * - #map!, #collect!: Replaces each element with a block return-value. + * - #collect (aliased as #map): Returns an array containing the block return-value for each element. + * - #collect! (aliased as #map!): Replaces each element with a block return-value. * - #flatten: Returns an array that is a recursive flattening of +self+. - * - #flatten!: Replaces each nested array in +self+ with the elements from that array. - * - #inspect, #to_s: Returns a new String containing the elements. + * - #inspect (aliased as #to_s): Returns a new String containing the elements. * - #join: Returns a newsString containing the elements joined by the field separator. * - #to_a: Returns +self+ or a new array containing all elements. * - #to_ary: Returns +self+. @@ -9164,6 +9162,9 @@ Init_Array(void) rb_define_method(rb_cArray, "freeze", rb_ary_freeze, 0); rb_define_method(rb_cArray, "deconstruct", rb_ary_deconstruct, 0); + + rb_cArray_empty_frozen = rb_ary_freeze(rb_ary_new()); + rb_vm_register_global_object(rb_cArray_empty_frozen); } #include "array.rbinc" diff --git a/array.rb b/array.rb index 9bfd7e9e9a900f..866d8877c7ca9c 100644 --- a/array.rb +++ b/array.rb @@ -1,11 +1,10 @@ class Array # call-seq: - # array.each {|element| ... } -> self - # array.each -> Enumerator + # each {|element| ... } -> self + # each -> new_enumerator # - # Iterates over array elements. - # - # When a block given, passes each successive array element to the block; + # With a block given, iterates over the elements of +self+, + # passing each element to the block; # returns +self+: # # a = [:foo, 'bar', 2] @@ -27,20 +26,10 @@ class Array # foo # bar # - # When no block given, returns a new Enumerator: - # a = [:foo, 'bar', 2] - # - # e = a.each - # e # => # - # a1 = e.each {|element| puts "#{element.class} #{element}" } - # - # Output: - # - # Symbol foo - # String bar - # Integer 2 + # With no block given, returns a new Enumerator. # - # Related: #each_index, #reverse_each. + # Related: see {Methods for Iterating}[rdoc-ref:Array@Methods+for+Iterating]. + def each Primitive.attr! :inline_block @@ -124,12 +113,12 @@ def sample(n = (ary = false), random: Random) end # call-seq: - # array.first -> object or nil - # array.first(n) -> new_array + # first -> object or nil + # first(count) -> new_array # - # Returns elements from +self+; does not modify +self+. + # Returns elements from +self+, or +nil+; does not modify +self+. # - # When no argument is given, returns the first element: + # With no argument given, returns the first element (if available): # # a = [:foo, 'bar', 2] # a.first # => :foo @@ -137,23 +126,16 @@ def sample(n = (ary = false), random: Random) # # If +self+ is empty, returns +nil+. # - # When non-negative Integer argument +n+ is given, - # returns the first +n+ elements in a new +Array+: - # - # a = [:foo, 'bar', 2] - # a.first(2) # => [:foo, "bar"] + # [].first # => nil # - # If n >= array.size, returns all elements: + # With non-negative integer argument +count+ given, + # returns the first +count+ elements (as available) in a new array: # - # a = [:foo, 'bar', 2] + # a.first(0) # => [] + # a.first(2) # => [:foo, "bar"] # a.first(50) # => [:foo, "bar", 2] # - # If n == 0 returns an new empty +Array+: - # - # a = [:foo, 'bar', 2] - # a.first(0) # [] - # - # Related: #last. + # Related: see {Methods for Querying}[rdoc-ref:Array@Methods+for+Querying]. def first n = unspecified = true if Primitive.mandatory_only? Primitive.attr! :leaf @@ -168,36 +150,29 @@ def first n = unspecified = true end # call-seq: - # array.last -> object or nil - # array.last(n) -> new_array + # last -> last_object or nil + # last(n) -> new_array # - # Returns elements from +self+; +self+ is not modified. + # Returns elements from +self+, or +nil+; +self+ is not modified. # - # When no argument is given, returns the last element: + # With no argument given, returns the last element, or +nil+ if +self+ is empty: # # a = [:foo, 'bar', 2] # a.last # => 2 # a # => [:foo, "bar", 2] + # [].last # => nil # - # If +self+ is empty, returns +nil+. # - # When non-negative Integer argument +n+ is given, - # returns the last +n+ elements in a new +Array+: - # - # a = [:foo, 'bar', 2] - # a.last(2) # => ["bar", 2] - # - # If n >= array.size, returns all elements: + # With non-negative integer argument +n+ is given, + # returns a new array containing the trailing +n+ elements of +self+, as available: # # a = [:foo, 'bar', 2] + # a.last(2) # => ["bar", 2] # a.last(50) # => [:foo, "bar", 2] + # a.last(0) # => [] + # [].last(3) # => [] # - # If n == 0, returns an new empty +Array+: - # - # a = [:foo, 'bar', 2] - # a.last(0) # [] - # - # Related: #first. + # Related: see {Methods for Fetching}[rdoc-ref:Array@Methods+for+Fetching]. def last n = unspecified = true if Primitive.mandatory_only? Primitive.attr! :leaf @@ -210,4 +185,41 @@ def last n = unspecified = true end end end + + # call-seq: + # fetch_values(*indexes) -> new_array + # fetch_values(*indexes) {|index| ... } -> new_array + # + # With no block given, returns a new array containing the elements of +self+ + # at the offsets given by +indexes+; + # each of the +indexes+ must be an + # {integer-convertible object}[rdoc-ref:implicit_conversion.rdoc@Integer-Convertible+Objects]: + # + # a = [:foo, :bar, :baz] + # a.fetch_values(3, 1) # => [:baz, :foo] + # a.fetch_values(3.1, 1) # => [:baz, :foo] + # a.fetch_values # => [] + # + # For a negative index, counts backwards from the end of the array: + # + # a.fetch_values([-2, -1]) # [:bar, :baz] + # + # When no block is given, raises an exception if any index is out of range. + # + # With a block given, for each index: + # + # - If the index in in range, uses an element of +self+ (as above). + # - Otherwise calls, the block with the index, and uses the block's return value. + # + # Example: + # + # a = [:foo, :bar, :baz] + # a.fetch_values(1, 0, 42, 777) {|index| index.to_s} + # # => [:bar, :foo, "42", "777"] + # + # Related: see {Methods for Fetching}[rdoc-ref:Array@Methods+for+Fetching]. + def fetch_values(*indexes, &block) + indexes.map! { |i| fetch(i, &block) } + indexes + end end diff --git a/ast.c b/ast.c index 338ab00819a37b..a0c1801de197d2 100644 --- a/ast.c +++ b/ast.c @@ -775,12 +775,100 @@ node_locations(VALUE ast_value, const NODE *node) { enum node_type type = nd_type(node); switch (type) { + case NODE_ALIAS: + return rb_ary_new_from_args(2, + location_new(nd_code_loc(node)), + location_new(&RNODE_ALIAS(node)->keyword_loc)); + case NODE_AND: + return rb_ary_new_from_args(2, + location_new(nd_code_loc(node)), + location_new(&RNODE_AND(node)->operator_loc)); + case NODE_BLOCK_PASS: + return rb_ary_new_from_args(2, + location_new(nd_code_loc(node)), + location_new(&RNODE_BLOCK_PASS(node)->operator_loc)); + + case NODE_BREAK: + return rb_ary_new_from_args(2, + location_new(nd_code_loc(node)), + location_new(&RNODE_BREAK(node)->keyword_loc)); + case NODE_CASE: + return rb_ary_new_from_args(3, + location_new(nd_code_loc(node)), + location_new(&RNODE_CASE(node)->case_keyword_loc), + location_new(&RNODE_CASE(node)->end_keyword_loc)); + case NODE_CASE2: + return rb_ary_new_from_args(3, + location_new(nd_code_loc(node)), + location_new(&RNODE_CASE2(node)->case_keyword_loc), + location_new(&RNODE_CASE2(node)->end_keyword_loc)); + case NODE_CASE3: + return rb_ary_new_from_args(3, + location_new(nd_code_loc(node)), + location_new(&RNODE_CASE3(node)->case_keyword_loc), + location_new(&RNODE_CASE3(node)->end_keyword_loc)); + case NODE_NEXT: + return rb_ary_new_from_args(2, + location_new(nd_code_loc(node)), + location_new(&RNODE_NEXT(node)->keyword_loc)); + case NODE_OR: + return rb_ary_new_from_args(2, + location_new(nd_code_loc(node)), + location_new(&RNODE_OR(node)->operator_loc)); + case NODE_OP_ASGN1: + return rb_ary_new_from_args(5, + location_new(nd_code_loc(node)), + location_new(&RNODE_OP_ASGN1(node)->call_operator_loc), + location_new(&RNODE_OP_ASGN1(node)->opening_loc), + location_new(&RNODE_OP_ASGN1(node)->closing_loc), + location_new(&RNODE_OP_ASGN1(node)->binary_operator_loc)); + case NODE_OP_ASGN2: + return rb_ary_new_from_args(4, + location_new(nd_code_loc(node)), + location_new(&RNODE_OP_ASGN2(node)->call_operator_loc), + location_new(&RNODE_OP_ASGN2(node)->message_loc), + location_new(&RNODE_OP_ASGN2(node)->binary_operator_loc)); + case NODE_REDO: + return rb_ary_new_from_args(2, + location_new(nd_code_loc(node)), + location_new(&RNODE_REDO(node)->keyword_loc)); + case NODE_RETURN: + return rb_ary_new_from_args(2, + location_new(nd_code_loc(node)), + location_new(&RNODE_RETURN(node)->keyword_loc)); + case NODE_SPLAT: + return rb_ary_new_from_args(2, + location_new(nd_code_loc(node)), + location_new(&RNODE_SPLAT(node)->operator_loc)); + case NODE_UNDEF: + return rb_ary_new_from_args(2, + location_new(nd_code_loc(node)), + location_new(&RNODE_UNDEF(node)->keyword_loc)); case NODE_UNLESS: return rb_ary_new_from_args(4, location_new(nd_code_loc(node)), location_new(&RNODE_UNLESS(node)->keyword_loc), location_new(&RNODE_UNLESS(node)->then_keyword_loc), location_new(&RNODE_UNLESS(node)->end_keyword_loc)); + case NODE_VALIAS: + return rb_ary_new_from_args(2, + location_new(nd_code_loc(node)), + location_new(&RNODE_VALIAS(node)->keyword_loc)); + case NODE_WHEN: + return rb_ary_new_from_args(3, + location_new(nd_code_loc(node)), + location_new(&RNODE_WHEN(node)->keyword_loc), + location_new(&RNODE_WHEN(node)->then_keyword_loc)); + case NODE_WHILE: + return rb_ary_new_from_args(3, + location_new(nd_code_loc(node)), + location_new(&RNODE_WHILE(node)->keyword_loc), + location_new(&RNODE_WHILE(node)->closing_loc)); + case NODE_UNTIL: + return rb_ary_new_from_args(3, + location_new(nd_code_loc(node)), + location_new(&RNODE_UNTIL(node)->keyword_loc), + location_new(&RNODE_UNTIL(node)->closing_loc)); case NODE_ARGS_AUX: case NODE_LAST: break; diff --git a/ast.rb b/ast.rb index aae68fd9a7c947..3265292f7d08b8 100644 --- a/ast.rb +++ b/ast.rb @@ -13,9 +13,8 @@ # access children nodes by name, etc. # # If you are looking for a stable API or an API working under multiple Ruby -# implementations, consider using the _parser_ gem or Ripper. If you would -# like to make RubyVM::AbstractSyntaxTree stable, please join the discussion -# at https://bugs.ruby-lang.org/issues/14844. +# implementations, consider using the _prism_ gem, which is the official +# Ruby API to parse Ruby code. # module RubyVM::AbstractSyntaxTree diff --git a/benchmark/app_aobench.rb b/benchmark/app_aobench.rb index 16296af12b2a50..c1546e08ab3cf6 100644 --- a/benchmark/app_aobench.rb +++ b/benchmark/app_aobench.rb @@ -151,7 +151,7 @@ def clamp(f) i.to_i end -def otherBasis(basis, n) +def orthoBasis(basis, n) basis[2] = Vec.new(n.x, n.y, n.z) basis[1] = Vec.new(0.0, 0.0, 0.0) @@ -183,7 +183,7 @@ def initialize def ambient_occlusion(isect) basis = Array.new - otherBasis(basis, isect.n) + orthoBasis(basis, isect.n) ntheta = NAO_SAMPLES nphi = NAO_SAMPLES diff --git a/benchmark/data/canada.json b/benchmark/data/canada.json new file mode 100644 index 00000000000000..04f63b405b2ad0 --- /dev/null +++ b/benchmark/data/canada.json @@ -0,0 +1,9 @@ +{ "type": "FeatureCollection", + "features": [ +{ + "type": "Feature", +"properties": { "name": "Canada" }, +"geometry": {"type":"Polygon","coordinates":[[[-65.613616999999977,43.420273000000009],[-65.619720000000029,43.418052999999986],[-65.625,43.421379000000059],[-65.636123999999882,43.449714999999969],[-65.633056999999951,43.474709000000132],[-65.611389000000031,43.513054000000068],[-65.605835000000013,43.516105999999979],[-65.598343,43.515830999999935],[-65.566101000000003,43.508331000000055],[-65.561935000000005,43.504439999999988],[-65.55999799999995,43.499718000000087],[-65.573333999999988,43.476379000000065],[-65.593612999999948,43.444153000000028],[-65.613616999999977,43.420273000000009]],[[-59.816947999999911,43.928328999999962],[-59.841667000000029,43.918602000000021],[-59.866393999999957,43.909987999999998],[-59.879722999999956,43.906654000000003],[-59.895835999999974,43.904160000000047],[-59.919448999999929,43.901099999999985],[-59.953330999999991,43.898604999999975],[-60.013617999999951,43.903320000000008],[-60.028609999999958,43.905548000000124],[-60.078338999999914,43.917496000000028],[-60.103888999999981,43.926659000000029],[-60.121666000000005,43.934990000000084],[-60.129997000000003,43.941933000000063],[-60.124167999999997,43.945267000000058],[-60.095000999999968,43.939430000000129],[-60.017776000000026,43.925827000000083],[-59.975554999999986,43.921936000000017],[-59.966942000000017,43.921936000000017],[-59.915000999999961,43.925552000000096],[-59.861945999999989,43.934433000000013],[-59.841385000000002,43.938880999999981],[-59.80972300000002,43.950828999999999],[-59.793334999999956,43.959435000000099],[-59.777221999999938,43.968048000000067],[-59.755279999999971,43.979431000000091],[-59.724716000000001,43.991104000000121],[-59.727775999999949,43.986382000000049],[-59.736389000000031,43.979156000000103],[-59.753615999999965,43.964995999999985],[-59.762504999999919,43.957771000000093],[-59.782501000000025,43.944434999999999],[-59.793059999999969,43.93832400000008],[-59.816947999999911,43.928328999999962]],[[-66.282775999999956,44.289719000000105],[-66.314437999999996,44.250548999999978],[-66.322234999999978,44.252777000000094],[-66.324448000000018,44.25750000000005],[-66.323897999999986,44.263329000000113],[-66.310271999999998,44.289993000000038],[-66.303054999999915,44.300545000000056],[-66.294723999999917,44.310271999999998],[-66.228333000000021,44.385826000000009],[-66.21945199999999,44.394713999999965],[-66.214447000000007,44.397774000000027],[-66.206389999999942,44.395271000000037],[-66.204726999999934,44.384995000000004],[-66.205275999999969,44.379433000000063],[-66.208053999999947,44.372765000000072],[-66.214721999999938,44.36360900000011],[-66.249725000000012,44.327217000000132],[-66.282775999999956,44.289719000000105]],[[-66.886123999999995,44.614440999999999],[-66.900283999999999,44.61332699999997],[-66.904174999999952,44.618049999999982],[-66.904449,44.622489999999971],[-66.884734999999978,44.68332700000002],[-66.858611999999937,44.743050000000039],[-66.837783999999942,44.770827999999995],[-66.833327999999938,44.774994000000049],[-66.803329000000019,44.798881999999992],[-66.798049999999932,44.802490000000091],[-66.786666999999852,44.808044000000109],[-66.779723999999931,44.809158000000082],[-66.772507000000019,44.809158000000082],[-66.767226999999934,44.805549999999982],[-66.764724999999999,44.801102000000014],[-66.757781999999963,44.792496000000085],[-66.734726000000023,44.729156000000103],[-66.736938000000009,44.717209000000139],[-66.740279999999927,44.70777099999998],[-66.761123999999995,44.676102000000128],[-66.765015000000005,44.671378999999945],[-66.875274999999931,44.619438000000059],[-66.886123999999995,44.614440999999999]],[[-61.199996999999996,45.558327000000077],[-61.204720000000009,45.555267000000072],[-61.212775999999963,45.556656000000032],[-61.219993999999986,45.559990000000028],[-61.224167000000023,45.564156000000139],[-61.222220999999934,45.569443000000035],[-61.21416499999998,45.568886000000134],[-61.208610999999962,45.56721500000009],[-61.202498999999989,45.563324000000023],[-61.199996999999996,45.558327000000077]],[[-60.993889000000024,45.45777099999998],[-61.00028199999997,45.455826000000002],[-61.007781999999963,45.457214000000079],[-61.019446999999957,45.463882000000069],[-61.101943999999946,45.523048000000017],[-61.105835000000013,45.526939000000084],[-61.108337000000006,45.540833000000021],[-61.104445999999939,45.546387000000038],[-61.098609999999951,45.549164000000076],[-61.023612999999955,45.574997000000053],[-61.017220000000009,45.575272000000041],[-60.936942999999985,45.576659999999947],[-60.908051,45.576103000000046],[-60.900275999999906,45.575554000000125],[-60.879996999999946,45.560547000000099],[-60.878608999999869,45.555824000000143],[-60.883888000000013,45.550544999999943],[-60.889167999999984,45.548332000000016],[-60.910277999999948,45.546104000000071],[-60.936110999999983,45.539161999999976],[-60.947495000000004,45.533607000000075],[-60.952498999999932,45.529990999999995],[-60.962501999999915,45.519989000000066],[-60.96305799999999,45.514998999999989],[-60.961669999999913,45.510277000000087],[-60.958611000000019,45.505829000000119],[-60.950553999999954,45.497771999999998],[-60.993889000000024,45.45777099999998]],[[-63.246391000000017,46.435547000000042],[-63.25389100000001,46.435265000000129],[-63.26167299999986,46.436378000000047],[-63.269446999999957,46.439713000000097],[-63.285004000000015,46.450829000000056],[-63.27055399999989,46.450271999999984],[-63.245834000000002,46.442764000000125],[-63.240836999999999,46.438599000000124],[-63.246391000000017,46.435547000000042]],[[-71.111114999999984,46.850548000000003],[-71.118606999999997,46.850273000000016],[-71.127486999999917,46.851662000000033],[-71.130279999999914,46.856102000000021],[-71.128326000000015,46.862213000000111],[-71.121383999999978,46.874161000000129],[-71.098891999999978,46.898048000000017],[-71.078339000000028,46.913605000000075],[-70.936935000000005,46.992493000000024],[-70.896666999999866,47.013329000000056],[-70.87222300000002,47.024162000000047],[-70.860001000000011,47.02777100000003],[-70.845276000000013,47.029160000000047],[-70.836394999999982,47.02777100000003],[-70.818893000000003,47.02276599999999],[-70.81361400000003,47.019440000000145],[-70.809158000000025,47.01527400000009],[-70.807495000000017,47.00999500000006],[-70.809432999999956,47.004439999999988],[-70.814437999999996,46.998329000000126],[-70.877212999999983,46.931107000000111],[-70.887512000000015,46.923607000000004],[-70.904174999999952,46.913605000000075],[-71.009170999999924,46.871101000000067],[-71.033324999999934,46.862494999999967],[-71.040832999999964,46.860549999999989],[-71.082229999999925,46.853325000000098],[-71.111114999999984,46.850548000000003]],[[-60.445273999999984,46.861664000000133],[-60.436942999999985,46.861107000000061],[-60.352782999999988,46.861664000000133],[-60.345832999999857,46.862494999999967],[-60.334441999999967,46.868881000000101],[-60.326110999999969,46.868323999999973],[-60.320838999999978,46.864441000000056],[-60.309440999999936,46.851105000000132],[-60.302223000000026,46.837493999999936],[-60.301392000000021,46.831940000000145],[-60.304442999999935,46.815269000000114],[-60.322776999999917,46.736382000000049],[-60.327224999999885,46.724991000000045],[-60.478881999999942,46.389992000000063],[-60.535277999999948,46.321663000000058],[-60.589438999999857,46.25499700000006],[-60.609169000000009,46.201934999999935],[-60.590331999999933,46.207821000000081],[-60.587001999999984,46.209488000000135],[-60.57150299999995,46.228653000000122],[-60.553329000000019,46.248878000000047],[-60.551391999999964,46.25499700000006],[-60.543335000000013,46.266663000000051],[-60.528053,46.278602999999919],[-60.479720999999984,46.311104000000057],[-60.46805599999999,46.316665999999998],[-60.44388600000002,46.326942000000088],[-60.430557000000022,46.33138299999996],[-60.424171000000001,46.331665000000044],[-60.416388999999867,46.328049000000021],[-60.412216000000001,46.31888600000002],[-60.417777999999942,46.285827999999981],[-60.419997999999964,46.279991000000052],[-60.42472099999992,46.27526899999998],[-60.438048999999921,46.270828000000051],[-60.454719999999952,46.262215000000083],[-60.470550999999944,46.251105999999993],[-60.53583100000003,46.192436000000043],[-60.59027900000001,46.138603000000103],[-60.600280999999939,46.130271999999991],[-60.61611199999993,46.120827000000133],[-60.645836000000031,46.106102000000021],[-60.687774999999874,46.088326000000052],[-60.701110999999912,46.08526599999999],[-60.788895000000025,46.066666000000055],[-60.86333499999995,46.052490000000034],[-60.986114999999927,45.982491000000095],[-61.023887999999943,45.969437000000028],[-61.080283999999949,45.951660000000004],[-61.087776000000019,45.95138500000013],[-61.095832999999971,45.952217000000076],[-61.105003000000011,45.954712000000086],[-61.113059999999905,45.955268999999987],[-61.117774999999938,45.950828999999999],[-61.126944999999978,45.928329000000133],[-61.125556999999958,45.923607000000061],[-61.118332000000009,45.923049999999932],[-61.056999000000019,45.931216999999947],[-61.052834000000018,45.931881000000033],[-61.017497999999989,45.940712000000076],[-61.014835000000005,45.943382000000042],[-60.989165999999955,45.95638300000013],[-60.987777999999935,45.962494000000049],[-60.984168999999952,45.967490999999939],[-60.957221999999945,45.984992999999974],[-60.940551999999911,45.994438000000059],[-60.892776000000026,46.01527400000009],[-60.853057999999976,46.03138000000007],[-60.770835999999917,46.057495000000074],[-60.757506999999919,46.060546999999985],[-60.743056999999965,46.061661000000015],[-60.735557999999912,46.058044000000052],[-60.734169000000009,46.05332199999998],[-60.734169000000009,46.047493000000145],[-60.807502999999997,45.931107000000111],[-60.870276999999987,45.910820000000058],[-60.898055999999997,45.906654000000117],[-60.956947000000014,45.903046000000018],[-61.042888999999946,45.891327000000103],[-61.047053999999946,45.890659000000085],[-61.050555999999972,45.888991999999973],[-61.053390999999976,45.886162000000127],[-61.096663999999976,45.860275000000001],[-61.097777999999948,45.854713000000061],[-61.094718999999998,45.850273000000016],[-61.087776000000019,45.847487999999998],[-61.079726999999991,45.84693900000002],[-61.073059000000001,45.84804500000007],[-61.060829000000012,45.852776000000006],[-61.049445999999989,45.858330000000024],[-61.026107999999965,45.86971299999999],[-60.989997999999957,45.881934999999999],[-60.96805599999999,45.883331000000055],[-60.960281000000009,45.880272000000048],[-60.919448999999986,45.857498000000078],[-60.915833000000021,45.852776000000006],[-60.917777999999942,45.847487999999998],[-60.935271999999941,45.825271999999984],[-60.940551999999911,45.821663000000001],[-60.947495000000004,45.820549000000028],[-61.019446999999957,45.809989999999971],[-61.067504999999983,45.791663999999969],[-61.079169999999976,45.786110000000008],[-61.118057000000022,45.763611000000026],[-61.12777699999998,45.755271999999991],[-61.147223999999994,45.704993999999999],[-61.149170000000026,45.699715000000026],[-61.142501999999922,45.696381000000031],[-61.077498999999932,45.688880999999981],[-61.070838999999978,45.689987000000031],[-61.041945999999996,45.704162999999994],[-61.012778999999966,45.718880000000013],[-60.996391000000017,45.727767999999969],[-60.972771000000023,45.738045],[-60.954719999999952,45.745543999999938],[-60.935829000000012,45.751389000000074],[-60.92222599999991,45.75360900000004],[-60.914443999999946,45.75360900000004],[-60.890556000000004,45.751663000000008],[-60.881942999999922,45.750000000000057],[-60.864165999999898,45.744438000000116],[-60.844161999999983,45.735268000000076],[-60.816665999999998,45.722488000000112],[-60.809998000000007,45.719154000000117],[-60.800835000000006,45.71166199999999],[-60.729438999999957,45.778603000000032],[-60.719718999999998,45.788329999999974],[-60.516944999999964,45.920830000000137],[-60.491942999999878,45.929436000000067],[-60.466942000000017,45.938041999999996],[-60.409163999999976,45.979987999999935],[-60.404166999999973,45.984436000000073],[-60.395835999999974,45.99610100000001],[-60.40166499999998,45.994713000000104],[-60.555000000000007,45.946938000000102],[-60.611671000000001,45.924995000000138],[-60.629722999999899,45.917496000000142],[-60.639998999999989,45.91027100000008],[-60.644721999999945,45.905548000000124],[-60.655272999999966,45.898330999999985],[-60.661110000000008,45.895270999999923],[-60.673331999999903,45.890549000000021],[-60.686110999999926,45.886940000000038],[-60.69388600000002,45.886107999999922],[-60.708892999999875,45.887215000000026],[-60.723327999999981,45.893326000000116],[-60.788337999999953,45.929436000000067],[-60.789725999999973,45.934433000000126],[-60.788895000000025,45.939986999999974],[-60.785278000000005,45.946381000000031],[-60.78055599999999,45.950828999999999],[-60.691382999999973,46.001937999999939],[-60.679168999999945,46.006660000000011],[-60.601395000000025,46.039719000000105],[-60.541114999999991,46.065544000000102],[-60.523612999999955,46.075554000000011],[-60.490836999999942,46.094437000000084],[-60.30999799999995,46.206939999999975],[-60.30499999999995,46.210548000000074],[-60.299994999999967,46.214996000000042],[-60.295279999999934,46.226936000000137],[-60.295279999999934,46.232208000000071],[-60.304169000000002,46.233878999999945],[-60.365554999999972,46.224990999999989],[-60.372771999999998,46.223320000000115],[-60.396111000000019,46.213051000000064],[-60.401938999999913,46.21027399999997],[-60.418335000000013,46.199996999999996],[-60.428054999999915,46.192490000000078],[-60.442497000000003,46.17943600000001],[-60.463332999999921,46.163879000000122],[-60.479163999999912,46.152771000000143],[-60.528053,46.121658000000139],[-60.605835000000013,46.074715000000083],[-60.629997000000003,46.065269000000114],[-60.644164999999987,46.063049000000092],[-60.65193899999997,46.063880999999981],[-60.656104999999968,46.067772000000048],[-60.656386999999938,46.073051000000021],[-60.652495999999985,46.079436999999984],[-60.638335999999867,46.093048000000124],[-60.456107999999972,46.241379000000052],[-60.404998999999975,46.279991000000052],[-60.399726999999984,46.283882000000119],[-60.388892999999996,46.291106999999954],[-60.359725999999966,46.304993000000138],[-60.347778000000005,46.310546999999985],[-60.285278000000005,46.321381000000031],[-60.205558999999994,46.240273000000002],[-60.138054000000011,46.246658000000025],[-60.131942999999922,46.248604000000114],[-60.124167999999997,46.248604000000114],[-60.099997999999971,46.246384000000091],[-60.091666999999916,46.244713000000047],[-59.950553999999897,46.201385000000073],[-59.873054999999965,46.17582699999997],[-59.808608999999876,46.111938000000066],[-59.80972300000002,46.106384000000048],[-59.819449999999961,46.097214000000008],[-59.834166999999979,46.084717000000012],[-59.853888999999924,46.00249500000001],[-59.840553,45.938324000000023],[-59.958610999999962,45.901657000000057],[-60.130279999999971,45.867767000000129],[-60.136115999999959,45.864997999999957],[-60.155272999999966,45.846656999999993],[-60.159438999999963,45.841102999999976],[-60.160552999999936,45.835548000000074],[-60.174445999999989,45.76388500000013],[-60.229163999999969,45.705551000000128],[-60.233886999999925,45.701102999999932],[-60.245834000000002,45.69499200000007],[-60.379723000000013,45.644997000000046],[-60.392226999999991,45.641105999999979],[-60.411666999999966,45.636940000000095],[-60.49888599999997,45.620269999999948],[-60.513061999999934,45.618880999999988],[-60.55750299999994,45.618049999999982],[-60.765556000000004,45.594994000000099],[-60.960830999999928,45.599433999999917],[-61.101669000000015,45.564437999999996],[-61.14833799999991,45.555267000000072],[-61.168334999999956,45.551384000000098],[-61.196917999999982,45.583740000000091],[-61.218696999999963,45.580788000000098],[-61.237521999999956,45.581528000000048],[-61.273055999999997,45.561935000000005],[-61.336945000000014,45.573326000000009],[-61.37557599999991,45.622131000000138],[-61.430556999999965,45.665543000000071],[-61.454719999999952,45.705551000000128],[-61.457503999999972,45.71527100000003],[-61.478049999999996,45.803879000000109],[-61.494720000000029,45.846381999999949],[-61.527495999999985,45.98943300000002],[-61.455558999999994,46.137497000000053],[-61.447776999999974,46.149436999999978],[-61.438888999999961,46.159430999999984],[-61.412772999999959,46.178329000000076],[-61.390839000000028,46.191376000000105],[-61.37388599999997,46.200829000000113],[-61.343329999999924,46.212493999999992],[-61.305557000000022,46.224990999999989],[-61.293892000000028,46.230819999999994],[-61.283332999999971,46.238884000000041],[-61.09722099999999,46.44609800000012],[-61.089438999999913,46.458046000000138],[-61.035278000000005,46.555549999999982],[-61.033057999999926,46.561661000000072],[-61.031113000000005,46.572769000000051],[-61.032501000000025,46.577492000000063],[-60.996947999999918,46.634720000000073],[-60.892226999999991,46.77388000000002],[-60.873610999999869,46.793052999999929],[-60.86361699999992,46.801384000000041],[-60.84027900000001,46.813605999999993],[-60.833884999999896,46.815543999999932],[-60.805557000000022,46.820273999999984],[-60.793892000000028,46.825271999999984],[-60.724716000000001,46.874992000000134],[-60.714721999999995,46.88249200000007],[-60.704444999999907,46.891380000000026],[-60.695273999999927,46.901657],[-60.686660999999958,46.912491000000045],[-60.678336999999942,46.930824000000143],[-60.670554999999979,46.953606000000036],[-60.664444000000003,46.966103000000032],[-60.65694400000001,46.978600000000029],[-60.640282000000013,47],[-60.609169000000009,47.024437000000091],[-60.597777999999892,47.031105000000025],[-60.591942000000017,47.033333000000027],[-60.583327999999938,47.031661999999926],[-60.460830999999871,46.999161000000015],[-60.427498000000014,46.965827999999988],[-60.493889000000024,46.902214000000072],[-60.498055000000022,46.896660000000111],[-60.452224999999942,46.864441000000056],[-60.445273999999984,46.861664000000133]],[[-64.039718999999991,46.743324000000086],[-64.031677000000002,46.742767000000015],[-64.016402999999912,46.743607000000054],[-64.009170999999981,46.744156000000032],[-64.005004999999983,46.749718000000144],[-63.999999999999943,46.75360900000004],[-63.991668999999945,46.753052000000139],[-63.979163999999912,46.746383999999978],[-63.974715999999944,46.742493000000081],[-63.832503999999972,46.617210000000057],[-63.831673000000023,46.611938000000123],[-63.865004999999883,46.537498000000085],[-63.868888999999967,46.531937000000084],[-63.840836000000024,46.464438999999913],[-63.828339000000028,46.458046000000138],[-63.780281000000002,46.44499200000007],[-63.742226000000016,46.439430000000129],[-63.733054999999979,46.438881000000038],[-63.709442000000024,46.43749200000002],[-63.703888000000006,46.440544000000102],[-63.698050999999964,46.456383000000073],[-63.698607999999979,46.461662000000047],[-63.700279000000023,46.466385000000002],[-63.722771000000023,46.48054500000012],[-63.738051999999982,46.491378999999995],[-63.739998000000014,46.496101000000067],[-63.723327999999924,46.543610000000058],[-63.716110000000015,46.553879000000109],[-63.709723999999994,46.556099000000131],[-63.676391999999964,46.564156000000082],[-63.662216000000001,46.566382999999973],[-63.647223999999881,46.56721500000009],[-63.618889000000024,46.561104],[-63.497779999999977,46.527771000000143],[-63.315001999999936,46.488602000000071],[-63.271979999999928,46.426926000000094],[-63.240661999999986,46.420456000000001],[-63.216392999999982,46.412209000000132],[-62.942771999999877,46.426941000000113],[-62.862777999999935,46.434715000000097],[-62.698607999999979,46.452492000000007],[-62.692497000000003,46.456100000000106],[-62.686385999999914,46.457497000000046],[-62.665833000000021,46.461104999999975],[-62.595001000000025,46.470825000000048],[-62.477218999999991,46.477768000000026],[-62.455558999999994,46.478600000000142],[-62.182502999999997,46.485824999999977],[-62.166388999999981,46.486107000000061],[-62.133330999999941,46.482764999999915],[-62.058051999999975,46.472762999999986],[-62.014724999999942,46.46527100000003],[-61.979720999999984,46.45915999999994],[-61.970551,46.456940000000145],[-61.965003999999965,46.453323000000012],[-61.968886999999995,46.447768999999994],[-61.973609999999951,46.443047000000092],[-62.013061999999991,46.421104000000128],[-62.101112000000001,46.379715000000033],[-62.173331999999959,46.349433999999974],[-62.215552999999943,46.343605000000139],[-62.279723999999931,46.338043000000027],[-62.309166000000005,46.349998000000085],[-62.326392999999996,46.354996000000085],[-62.342773000000022,46.356102000000135],[-62.357779999999934,46.35582700000009],[-62.355834999999956,46.35083000000003],[-62.348052999999993,46.332214000000022],[-62.334723999999994,46.311935000000062],[-62.361945999999932,46.276657000000057],[-62.419448999999986,46.219986000000119],[-62.424720999999977,46.215546000000074],[-62.453888000000006,46.21443899999997],[-62.507506999999919,46.214157000000114],[-62.603888999999924,46.182495000000131],[-62.603888999999924,46.177215999999987],[-62.54222900000002,46.122490000000028],[-62.507506999999919,46.118881000000044],[-62.5,46.119156000000089],[-62.478333000000021,46.120827000000133],[-62.477218999999991,46.126380999999924],[-62.478881999999999,46.131935000000112],[-62.481667000000016,46.13638300000008],[-62.489998000000014,46.138328999999999],[-62.497222999999963,46.138046000000031],[-62.506110999999976,46.139717000000076],[-62.513892999999996,46.142220000000066],[-62.509726999999998,46.148605000000032],[-62.504448000000025,46.150825999999995],[-62.489166000000012,46.151382000000126],[-62.473052999999993,46.150269000000094],[-62.468886999999995,46.146102999999982],[-62.449164999999937,46.100548000000003],[-62.447494999999947,46.095543000000134],[-62.446945000000028,46.090546000000018],[-62.454720000000009,46.018883000000073],[-62.459166999999979,46.006386000000077],[-62.473609999999951,45.994713000000104],[-62.496947999999975,45.983879000000002],[-62.510001999999929,45.979156000000046],[-62.541671999999949,45.970543000000077],[-62.548614999999927,45.969437000000028],[-62.591667000000029,45.964996000000099],[-62.613891999999964,45.962769000000037],[-62.650276000000019,45.960274000000027],[-62.761115999999959,45.954162999999937],[-62.837776000000019,45.967490999999939],[-62.856667000000016,45.977486000000056],[-62.882773999999984,45.995544000000109],[-62.930283000000031,46.037215999999944],[-62.970832999999971,46.07416500000005],[-62.922500999999954,46.092491000000052],[-62.917220999999984,46.096382000000119],[-62.875274999999931,46.134995000000004],[-62.871940999999936,46.143607999999972],[-62.885276999999974,46.155823000000055],[-62.890839000000028,46.159430999999984],[-63.025276000000019,46.189156000000082],[-63.103614999999991,46.201934999999935],[-63.112777999999992,46.204163000000108],[-63.119445999999868,46.207214000000135],[-63.12222300000002,46.211662000000103],[-63.120276999999987,46.217766000000097],[-63.115836999999942,46.222487999999998],[-63.038895000000025,46.280273000000079],[-63.02416999999997,46.290275999999949],[-63.017776000000026,46.292496000000142],[-63.010284000000013,46.292770000000075],[-63.002228000000002,46.289992999999981],[-62.99610899999999,46.292220999999984],[-62.979438999999957,46.301658999999972],[-62.969161999999983,46.309432999999956],[-62.964721999999881,46.314156000000139],[-62.962775999999963,46.319992000000013],[-62.969443999999953,46.31888600000002],[-63.035277999999892,46.301658999999972],[-63.041388999999981,46.299721000000034],[-63.052779999999927,46.293884000000048],[-63.058608999999933,46.290833000000021],[-63.090836000000024,46.26915699999995],[-63.165001000000018,46.210548000000074],[-63.143332999999984,46.201660000000118],[-63.139167999999984,46.197769000000051],[-63.138610999999912,46.192490000000078],[-63.140556000000004,46.186378000000104],[-63.22444200000001,46.139717000000076],[-63.23860899999994,46.138046000000031],[-63.253615999999965,46.137497000000053],[-63.26167299999986,46.138046000000031],[-63.289169000000015,46.14388299999996],[-63.409163999999919,46.176940999999999],[-63.519722000000002,46.206099999999935],[-63.591942000000017,46.211937000000091],[-63.642775999999913,46.224990999999989],[-63.649726999999928,46.228043000000071],[-63.699722000000008,46.259437999999989],[-63.700553999999954,46.269989000000066],[-63.702224999999999,46.27526899999998],[-63.70666499999993,46.278602999999919],[-63.741942999999935,46.304436000000067],[-63.754447999999968,46.310822000000144],[-63.811110999999926,46.32749200000012],[-63.772223999999937,46.360825000000091],[-63.736945999999932,46.353882000000112],[-63.729163999999969,46.352776000000063],[-63.714721999999995,46.354164000000026],[-63.739166000000012,46.391106000000036],[-63.745002999999997,46.394714000000135],[-63.754447999999968,46.396385000000009],[-63.761672999999917,46.396659999999997],[-63.841109999999958,46.39888000000002],[-63.963615000000004,46.401100000000042],[-63.981941000000006,46.39388300000013],[-63.989165999999898,46.393608000000086],[-64.121933000000013,46.404709000000025],[-64.129989999999964,46.407211000000132],[-64.133057000000008,46.4116590000001],[-64.135009999999909,46.416382000000056],[-64.133057000000008,46.43332700000002],[-64.115828999999962,46.523048000000017],[-64.11332699999997,46.53472099999999],[-64.110000999999954,46.541107000000125],[-64.105559999999969,46.54583000000008],[-64.100280999999882,46.549720999999977],[-64.094161999999926,46.551659000000086],[-64.105559999999969,46.618050000000096],[-64.273894999999982,46.62332200000003],[-64.387511999999958,46.62082700000002],[-64.391952999999944,46.624709999999936],[-64.413895000000025,46.665825000000098],[-64.415558000000033,46.670546999999999],[-64.416655999999932,46.68110699999994],[-64.414718999999991,46.697769000000108],[-64.410277999999948,46.711105000000089],[-64.400283999999942,46.727486000000113],[-64.382492000000013,46.746658000000082],[-64.346953999999982,46.773605000000032],[-64.323897999999929,46.786384999999996],[-64.296386999999982,46.801659000000029],[-64.286117999999931,46.80943300000007],[-64.27305599999994,46.823607999999979],[-64.249724999999955,46.868050000000039],[-64.247771999999941,46.874161000000129],[-64.247222999999906,46.879714999999976],[-64.243880999999988,46.886108000000092],[-64.236389000000031,46.897491000000116],[-64.226943999999946,46.906097000000045],[-64.182770000000005,46.945541000000105],[-64.168610000000001,46.956657000000064],[-64.020844000000011,47.038605000000132],[-63.99500299999994,46.984161000000086],[-63.969993999999986,46.901657],[-63.967498999999862,46.891662999999994],[-64.041381999999999,46.82249500000006],[-64.066100999999946,46.804436000000123],[-64.076401000000033,46.798881999999992],[-64.091674999999952,46.778603000000032],[-64.077498999999932,46.756386000000134],[-64.074448000000018,46.752220000000023],[-64.067504999999926,46.749161000000072],[-64.039718999999991,46.743324000000086]],[[-55.876105999999993,47.260551000000021],[-55.968329999999867,47.257773999999927],[-55.946388000000013,47.273323000000062],[-55.934440999999936,47.279434000000094],[-55.895003999999972,47.290833000000021],[-55.888053999999954,47.292496000000142],[-55.881110999999976,47.293326999999977],[-55.872771999999998,47.292221000000097],[-55.865836999999885,47.287773000000129],[-55.855003000000011,47.269714000000022],[-55.876105999999993,47.260551000000021]],[[-61.380554000000018,47.620270000000119],[-61.493057000000022,47.552490000000091],[-61.498610999999926,47.550270000000069],[-61.535560999999973,47.54583000000008],[-61.54222900000002,47.545547000000113],[-61.547782999999868,47.549164000000076],[-61.549445999999989,47.553879000000109],[-61.545279999999991,47.55943300000007],[-61.520279000000016,47.569160000000011],[-61.513892999999939,47.572495000000117],[-61.477492999999924,47.60054800000006],[-61.473610000000008,47.6055530000001],[-61.471382000000006,47.611382000000106],[-61.470551,47.616936000000123],[-61.479163999999969,47.618599000000017],[-61.534447,47.618881000000101],[-61.541945999999996,47.617210000000057],[-61.559440999999993,47.609161000000029],[-61.653610000000015,47.549995000000081],[-61.855559999999969,47.417213000000061],[-61.849723999999981,47.413605000000132],[-61.841667000000029,47.410820000000115],[-61.833611000000019,47.409987999999998],[-61.789169000000015,47.425827000000083],[-61.777221999999995,47.431664000000069],[-61.766662999999937,47.439156000000025],[-61.714447000000007,47.489989999999977],[-61.691382999999973,47.515548999999965],[-61.701392999999939,47.491936000000067],[-61.740836999999942,47.44499200000007],[-61.843329999999924,47.388603000000046],[-61.90589099999994,47.354935000000012],[-61.925277999999992,47.343605000000139],[-61.93332700000002,47.333327999999938],[-61.962776000000019,47.281662000000097],[-61.965003999999965,47.275551000000007],[-61.964721999999995,47.270271000000093],[-61.961945000000014,47.266106000000093],[-61.957503999999972,47.261940000000038],[-61.938605999999993,47.257217000000026],[-61.827782000000013,47.234161000000029],[-61.819450000000018,47.233330000000024],[-61.807776999999987,47.239159000000029],[-61.799445999999989,47.250274999999931],[-61.794723999999917,47.254714999999976],[-61.783057999999869,47.260551000000021],[-61.782775999999956,47.255272000000048],[-61.789725999999916,47.242493000000024],[-61.793892000000028,47.236938000000123],[-61.799445999999989,47.232764999999972],[-61.810279999999977,47.226654000000053],[-61.816948000000025,47.224709000000075],[-61.84444400000001,47.219436999999971],[-61.859443999999883,47.218047999999953],[-61.955276000000026,47.211662000000047],[-61.979995999999971,47.213608000000136],[-61.996390999999903,47.214996000000042],[-62.004722999999956,47.217766000000097],[-62.010001999999872,47.22137500000008],[-62.013061999999991,47.225821999999994],[-62.014724999999942,47.23054500000012],[-62.015006999999912,47.235825000000034],[-62.013061999999991,47.241661000000079],[-61.948607999999979,47.379432999999949],[-61.941665999999941,47.392219999999952],[-61.937499999999943,47.39777400000014],[-61.928054999999972,47.407211000000075],[-61.922225999999966,47.409987999999998],[-61.908889999999928,47.413879000000065],[-61.736114999999984,47.507216999999969],[-61.705832999999984,47.532494000000099],[-61.684440999999936,47.547492999999974],[-61.662216000000001,47.561661000000072],[-61.616942999999992,47.588042999999914],[-61.571114000000023,47.613608999999997],[-61.553611999999987,47.623046999999985],[-61.53583500000002,47.631659999999954],[-61.529167000000029,47.633606000000043],[-61.521110999999962,47.634437999999989],[-61.425277999999992,47.642769000000044],[-61.407775999999956,47.641105999999922],[-61.388892999999996,47.637771999999984],[-61.381942999999922,47.634437999999989],[-61.377776999999924,47.631103999999993],[-61.376105999999993,47.626380999999981],[-61.380554000000018,47.620270000000119]],[[-54.261391000000003,47.39027400000009],[-54.268889999999999,47.389717000000019],[-54.293059999999969,47.391663000000051],[-54.341385000000002,47.398048000000074],[-54.358054999999979,47.403046000000074],[-54.364448999999979,47.406654000000003],[-54.365554999999915,47.411659000000043],[-54.359726000000023,47.416664000000083],[-54.326392999999996,47.436653000000035],[-54.295279999999991,47.44999700000011],[-54.278053,47.460823000000062],[-54.267220000000009,47.469437000000084],[-54.262222000000008,47.474709000000018],[-54.257781999999963,47.480820000000108],[-54.230552999999986,47.523605000000032],[-54.229996000000028,47.550270000000069],[-54.204719999999952,47.593605000000082],[-54.13527699999986,47.668053000000043],[-54.128882999999973,47.670546999999999],[-54.122771999999998,47.66693900000007],[-54.121940999999993,47.661934000000031],[-54.122222999999963,47.656937000000084],[-54.124999999999943,47.640831000000105],[-54.160827999999981,47.534996000000035],[-54.238892000000021,47.40387700000008],[-54.243331999999953,47.399437000000091],[-54.255004999999983,47.392769000000101],[-54.261391000000003,47.39027400000009]],[[-54.077498999999989,47.479431000000091],[-54.08306099999993,47.474991000000102],[-54.093055999999933,47.483046999999999],[-54.096663999999976,47.487213000000054],[-54.101112000000001,47.496384000000035],[-54.101944000000003,47.501389000000074],[-54.099723999999924,47.558883999999978],[-54.09833500000002,47.589714000000015],[-54.097220999999934,47.605270000000132],[-54.09332999999998,47.631659999999954],[-54.083610999999962,47.679717999999923],[-54.078612999999962,47.684990000000028],[-54.071388000000013,47.685546999999929],[-54.067504999999983,47.681107000000111],[-54.060555000000022,47.651099999999985],[-54.078056000000004,47.563881000000038],[-54.05972300000002,47.532211000000132],[-54.058891000000017,47.527214000000072],[-54.077498999999989,47.479431000000091]],[[-55.901938999999857,47.602493000000038],[-55.923057999999912,47.599434000000088],[-55.947220000000016,47.601936000000137],[-56.013335999999981,47.611664000000019],[-56.097778000000005,47.627487000000031],[-56.105559999999855,47.630821000000026],[-56.109169000000009,47.63499500000006],[-56.113616999999977,47.644714000000022],[-56.112220999999977,47.649719000000118],[-56.106666999999959,47.654709000000139],[-56.100280999999939,47.657211000000018],[-56.005835999999988,47.680274999999995],[-55.941108999999983,47.689156000000139],[-55.933883999999978,47.688324000000023],[-55.92861199999993,47.684432999999956],[-55.927498000000014,47.676658999999972],[-55.934440999999936,47.658882000000119],[-55.934440999999936,47.653877000000023],[-55.932502999999997,47.643883000000017],[-55.930000000000007,47.639435000000049],[-55.926392000000021,47.635268999999994],[-55.914161999999976,47.628326000000015],[-55.889442000000031,47.618881000000101],[-55.876388999999961,47.611664000000019],[-55.882499999999936,47.607773000000122],[-55.901938999999857,47.602493000000038]],[[-64.482773000000009,47.917770000000019],[-64.50167799999997,47.856384000000048],[-64.503615999999909,47.850273000000016],[-64.514724999999999,47.832497000000046],[-64.523055999999997,47.822220000000016],[-64.541106999999954,47.80332199999998],[-64.604995999999971,47.748329000000126],[-64.610549999999989,47.745270000000005],[-64.635833999999988,47.735825000000091],[-64.647507000000019,47.733879000000002],[-64.690551999999968,47.753052000000139],[-64.693328999999949,47.758049000000028],[-64.702788999999939,47.823607999999979],[-64.697768999999994,47.836104999999918],[-64.685546999999985,47.852219000000048],[-64.667496000000028,47.866936000000067],[-64.662215999999944,47.870827000000133],[-64.624160999999958,47.884719999999959],[-64.617767000000015,47.886658000000125],[-64.609160999999972,47.886939999999981],[-64.584166999999923,47.884995000000004],[-64.508057000000008,47.903877000000023],[-64.482773000000009,47.917770000000019]],[[-64.567504999999926,47.899436999999978],[-64.574448000000018,47.89804799999996],[-64.583617999999888,47.899436999999978],[-64.589447000000007,47.902771000000143],[-64.593886999999995,47.90665400000006],[-64.594451999999933,47.911933999999974],[-64.593612999999891,47.918052999999986],[-64.531677000000002,48.016105999999979],[-64.52694699999995,48.02165999999994],[-64.522780999999952,48.025551000000007],[-64.516952999999944,48.028602999999976],[-64.509734999999921,48.029991000000052],[-64.50111400000003,48.027488999999946],[-64.495543999999938,48.023880000000133],[-64.490828999999906,48.019989000000066],[-64.48582499999992,48.013054000000011],[-64.482773000000009,48.008606000000043],[-64.469726999999978,47.969711000000132],[-64.469161999999869,47.96443899999997],[-64.470550999999944,47.953323000000069],[-64.47444200000001,47.947769000000051],[-64.496383999999978,47.933875999999998],[-64.513901000000033,47.924712999999997],[-64.567504999999926,47.899436999999978]],[[-53.712775999999963,48.14888000000002],[-53.689720000000023,48.147217000000126],[-53.682502999999997,48.147774000000027],[-53.667503000000011,48.150542999999971],[-53.647781000000009,48.155265999999926],[-53.615554999999915,48.167496000000028],[-53.583327999999995,48.18082400000003],[-53.571113999999909,48.186104000000114],[-53.564162999999951,48.190543999999932],[-53.553054999999972,48.199158000000011],[-53.539444000000003,48.202217000000132],[-53.53167000000002,48.202774000000034],[-53.516395999999986,48.201935000000105],[-53.509726999999941,48.198326000000066],[-53.509170999999867,48.193321000000026],[-53.510833999999988,48.150826000000109],[-53.512504999999919,48.145271000000037],[-53.530829999999924,48.097771000000023],[-53.536391999999978,48.093323000000055],[-53.549445999999989,48.088600000000099],[-53.56361400000003,48.084991000000116],[-53.598884999999996,48.079437000000098],[-53.634170999999924,48.075272000000098],[-53.823333999999932,48.092765999999983],[-53.83943899999997,48.094437000000084],[-53.856110000000001,48.098044999999956],[-53.871940999999936,48.104713000000118],[-53.876663000000008,48.108604000000014],[-53.93250299999994,48.172767999999962],[-53.935829000000012,48.182495000000131],[-53.932776999999987,48.198326000000066],[-53.929168999999945,48.209434999999985],[-53.922225999999966,48.212493999999936],[-53.906386999999938,48.21027400000014],[-53.898887999999943,48.206657000000007],[-53.860000999999954,48.174438000000123],[-53.855559999999969,48.169991000000095],[-53.712775999999963,48.14888000000002]],[[-123.47444200000001,48.709160000000054],[-123.48277300000001,48.708328000000108],[-123.48999000000003,48.709435000000042],[-123.51306199999993,48.716385000000116],[-123.52471899999989,48.722488000000055],[-123.54943800000001,48.746658000000082],[-123.551941,48.752220000000023],[-123.59277299999991,48.898331000000098],[-123.595551,48.909714000000122],[-123.59612299999998,48.928329000000076],[-123.59665699999994,48.946938000000046],[-123.59361299999995,48.947211999999979],[-123.58056599999992,48.935547000000042],[-123.57721699999996,48.929161000000136],[-123.53611799999999,48.914993000000095],[-123.53028899999998,48.911933999999974],[-123.45749699999993,48.863052000000039],[-123.43388400000003,48.844437000000084],[-123.37027,48.768326000000002],[-123.36888099999993,48.762771999999984],[-123.37165800000002,48.75750000000005],[-123.37638900000002,48.753608999999983],[-123.43195300000002,48.721099999999979],[-123.47444200000001,48.709160000000054]],[[-58.342223999999987,49.066101000000117],[-58.349166999999966,49.064437999999996],[-58.356109999999944,49.065826000000129],[-58.351943999999889,49.071938000000102],[-58.341385000000002,49.07638500000013],[-58.333611000000019,49.077773999999977],[-58.330558999999994,49.073326000000009],[-58.335830999999928,49.068885999999964],[-58.342223999999987,49.066101000000117]],[[-123.32277699999997,48.861107000000004],[-123.3705369999999,48.856384000000048],[-123.37888299999997,48.85694100000012],[-123.38474299999996,48.859993000000031],[-123.54055799999998,48.944992000000127],[-123.66251399999999,49.03527100000008],[-123.70388800000001,49.095268000000033],[-123.70527599999997,49.100273000000072],[-123.70249899999999,49.105552999999986],[-123.695831,49.108047000000113],[-123.68639400000001,49.106659000000036],[-123.68055700000002,49.103607000000068],[-123.674713,49.093048000000067],[-123.65943900000002,49.073608000000036],[-123.60444599999994,49.014717000000132],[-123.58640300000002,49.000549000000092],[-123.52166699999998,48.96027400000014],[-123.49916099999996,48.947211999999979],[-123.487503,48.94110100000006],[-123.45973200000003,48.930549999999982],[-123.43639399999995,48.924438000000009],[-123.42027299999995,48.920547000000113],[-123.38194299999992,48.910819999999944],[-123.32833900000003,48.895827999999938],[-123.32250999999991,48.892768999999987],[-123.31777999999997,48.88888500000013],[-123.31276700000001,48.872765000000072],[-123.3125,48.868050000000039],[-123.31639100000001,48.863327000000027],[-123.32277699999997,48.861107000000004]],[[-125.816101,49.125824000000136],[-125.82028200000002,49.124709999999993],[-125.86028299999998,49.134438000000046],[-125.906387,49.160820000000115],[-125.91027800000001,49.165543000000071],[-125.92582699999991,49.190826000000015],[-125.93360899999993,49.211104999999918],[-125.93306000000001,49.218048000000124],[-125.93055700000002,49.219986000000063],[-125.92610200000001,49.223320000000058],[-125.87888299999992,49.235824999999977],[-125.86749299999997,49.233330000000137],[-125.82917800000001,49.226379000000009],[-125.81806899999987,49.220543000000134],[-125.79915599999998,49.208328000000051],[-125.78888699999993,49.172768000000133],[-125.79583699999995,49.151932000000102],[-125.79833999999994,49.146385000000009],[-125.81249999999994,49.129158000000132],[-125.816101,49.125824000000136]],[[-126.13194299999992,49.393325999999945],[-126.126938,49.390274000000034],[-126.12470999999999,49.390274000000034],[-126.12053699999996,49.388602999999989],[-126.11054999999999,49.382210000000043],[-126.10665899999992,49.378601000000003],[-126.09612300000003,49.368599000000074],[-126.08640300000002,49.358604000000128],[-126.07277699999997,49.34304800000001],[-126.0497279999999,49.265548999999965],[-126.0511019999999,49.260550999999964],[-126.05583200000001,49.256104000000107],[-126.06471299999987,49.250832000000003],[-126.07112100000001,49.248329000000012],[-126.07972699999999,49.246658000000139],[-126.08917199999991,49.246101000000067],[-126.09638999999999,49.24721500000004],[-126.18666100000002,49.263328999999999],[-126.19167299999992,49.265548999999965],[-126.22332799999992,49.279716000000121],[-126.22944599999994,49.282493999999929],[-126.23916600000001,49.289718999999991],[-126.23473399999995,49.374161000000015],[-126.22917200000001,49.378601000000003],[-126.22138999999999,49.380547000000092],[-126.14138800000001,49.39415699999995],[-126.13194299999992,49.393325999999945]],[[-123.37943999999999,49.326941999999974],[-123.39222699999999,49.326103000000046],[-123.41027799999995,49.334159999999997],[-123.42194399999994,49.339714000000015],[-123.42666600000001,49.344154000000003],[-123.42804699999999,49.348877000000016],[-123.42027299999995,49.381660000000011],[-123.41332999999997,49.386107999999979],[-123.3600009999999,49.411658999999986],[-123.35472099999998,49.413322000000107],[-123.327789,49.416664000000083],[-123.31696299999999,49.417496000000142],[-123.31220999999999,49.414992999999981],[-123.30943300000001,49.41137700000013],[-123.31027199999994,49.40526600000004],[-123.31194299999993,49.401932000000045],[-123.327789,49.363052000000096],[-123.33112299999999,49.354996000000028],[-123.34472699999998,49.341934000000037],[-123.36833199999995,49.330275999999969],[-123.37943999999999,49.326941999999974]],[[-54.705276000000026,49.400543000000084],[-54.712776000000019,49.398330999999985],[-54.730277999999998,49.403046000000018],[-54.735557999999969,49.407211000000018],[-54.759726999999941,49.432495000000017],[-54.759170999999981,49.437766999999951],[-54.754723000000013,49.443878000000041],[-54.749442999999928,49.449158000000125],[-54.73833499999995,49.457771000000093],[-54.680556999999908,49.49193600000001],[-54.673057999999912,49.492493000000081],[-54.665001000000018,49.489159000000086],[-54.644164999999987,49.473320000000001],[-54.640281999999956,49.46915400000006],[-54.640838999999971,49.463881999999955],[-54.654716000000008,49.460823000000005],[-54.684440999999993,49.420546999999999],[-54.699164999999994,49.40387700000008],[-54.705276000000026,49.400543000000084]],[[-124.179169,49.441101000000117],[-124.18554699999999,49.439986999999974],[-124.31360599999999,49.456099999999992],[-124.32668299999995,49.460823000000005],[-124.36000099999995,49.474433999999974],[-124.36609599999997,49.477486000000056],[-124.37082699999996,49.481102000000135],[-124.37165799999997,49.483047000000113],[-124.38054699999998,49.506943000000035],[-124.38110399999994,49.511940000000095],[-124.37832599999996,49.515830999999991],[-124.37165799999997,49.518326000000002],[-124.361107,49.519157000000064],[-124.35500299999995,49.517494000000113],[-124.34889199999998,49.514442000000031],[-124.30471799999992,49.512214999999969],[-124.24471999999997,49.501389000000017],[-124.23750299999995,49.498329000000126],[-124.22138999999993,49.491379000000109],[-124.1875,49.474433999999974],[-124.18167099999999,49.471375000000023],[-124.17388900000003,49.45638299999996],[-124.17194399999994,49.446655000000135],[-124.17223399999989,49.444153000000085],[-124.179169,49.441101000000117]],[[-123.33277899999996,49.441101000000117],[-123.36028299999987,49.433051999999918],[-123.37499999999994,49.433327000000133],[-123.442207,49.438599000000067],[-123.448036,49.441658000000018],[-123.45944199999997,49.467209000000082],[-123.45973200000003,49.470543000000077],[-123.45305599999995,49.495544000000109],[-123.44526699999994,49.51527400000009],[-123.43666100000002,49.522217000000069],[-123.38082899999995,49.536110000000122],[-123.37000299999994,49.536110000000122],[-123.360817,49.534995999999978],[-123.3550029999999,49.531936999999971],[-123.33833300000003,49.50610400000005],[-123.33167999999995,49.500832000000116],[-123.32805599999995,49.496383999999978],[-123.32389799999993,49.488602000000014],[-123.319458,49.474708999999962],[-123.31777999999997,49.464157],[-123.319458,49.451934999999992],[-123.32224300000001,49.448043999999925],[-123.32695000000001,49.444153000000085],[-123.33277899999996,49.441101000000117]],[[-55.695548999999971,49.506943000000035],[-55.725829999999974,49.505554000000018],[-55.732497999999964,49.509163000000001],[-55.735001000000011,49.513610999999969],[-55.736114999999984,49.518599999999935],[-55.735832000000016,49.52388000000002],[-55.730277999999942,49.545547000000056],[-55.722771000000023,49.557770000000119],[-55.716110000000015,49.560271999999998],[-55.684998000000007,49.561104000000114],[-55.676948999999979,49.561104000000114],[-55.658332999999971,49.559158000000025],[-55.653052999999886,49.555267000000129],[-55.652221999999938,49.550270000000069],[-55.653885000000002,49.544716000000051],[-55.661384999999939,49.529716000000064],[-55.664444000000003,49.52388000000002],[-55.68111399999998,49.510826000000122],[-55.687499999999943,49.508049000000028],[-55.695548999999971,49.506943000000035]],[[-124.68943799999994,49.480270000000019],[-124.69611399999997,49.477767999999969],[-124.70221700000002,49.478042999999957],[-124.74137899999994,49.488045000000113],[-124.75361599999991,49.491379000000109],[-124.82362399999994,49.539435999999966],[-124.83666999999997,49.554993000000024],[-124.84111000000001,49.562767000000008],[-124.84249899999992,49.578605999999979],[-124.84194899999989,49.58415999999994],[-124.83416699999992,49.607773000000066],[-124.83168000000001,49.610549999999989],[-124.82749899999993,49.608887000000038],[-124.81054699999993,49.589714000000129],[-124.80888400000003,49.586655000000007],[-124.80583200000001,49.585823000000062],[-124.77887699999997,49.568886000000077],[-124.68804899999986,49.483604000000014],[-124.68943799999994,49.480270000000019]],[[-55.693053999999961,49.56749700000006],[-55.709166999999979,49.566383000000087],[-55.716659999999933,49.567214999999976],[-55.720832999999971,49.571381000000088],[-55.723052999999993,49.576102999999989],[-55.722771000000023,49.581383000000073],[-55.705832999999927,49.613883999999985],[-55.684998000000007,49.624992000000134],[-55.673888999999974,49.630547000000035],[-55.659720999999934,49.635551000000021],[-55.653052999999886,49.63638300000008],[-55.572776999999974,49.603881999999999],[-55.567504999999926,49.599998000000141],[-55.573058999999944,49.595543000000134],[-55.586387999999943,49.59137700000008],[-55.608054999999979,49.586104999999975],[-55.671669000000009,49.571381000000088],[-55.693053999999961,49.56749700000006]],[[-54.576667999999984,49.558601000000124],[-54.77305599999994,49.493880999999988],[-54.809440999999993,49.488045000000113],[-54.83916499999998,49.48443600000013],[-54.855835000000013,49.48443600000013],[-54.863060000000019,49.485268000000019],[-54.871940999999936,49.487495000000081],[-54.873055000000022,49.492218000000094],[-54.893616000000009,49.580551000000128],[-54.894447000000014,49.58526599999999],[-54.891945000000021,49.590546000000074],[-54.885276999999974,49.593048000000124],[-54.805556999999965,49.595825000000048],[-54.792228999999963,49.572768999999994],[-54.793335000000013,49.566939999999988],[-54.791671999999892,49.56249200000002],[-54.78833800000001,49.557770000000119],[-54.784172000000012,49.554161000000136],[-54.768607999999972,49.546661000000029],[-54.760001999999986,49.545547000000056],[-54.743889000000024,49.544998000000135],[-54.729720999999984,49.548050000000046],[-54.708611000000019,49.554436000000123],[-54.614722999999969,49.606102000000021],[-54.574722000000008,49.635269000000108],[-54.561942999999928,49.653603000000089],[-54.548889000000031,49.659988000000055],[-54.536117999999931,49.664153999999996],[-54.529723999999987,49.633881000000031],[-54.531669999999963,49.62221500000004],[-54.538054999999986,49.587494000000106],[-54.543334999999956,49.582497000000046],[-54.570557000000008,49.562209999999936],[-54.576667999999984,49.558601000000124]],[[-54.004448000000025,49.647491000000116],[-54.257781999999963,49.566666000000055],[-54.265839000000028,49.566939999999988],[-54.274719000000005,49.569160000000011],[-54.289444000000003,49.576102999999989],[-54.293335000000013,49.580551000000128],[-54.298888999999917,49.609993000000088],[-54.297782999999981,49.651100000000099],[-54.288054999999929,49.71138000000002],[-54.282775999999956,49.716660000000104],[-54.269996999999989,49.722487999999998],[-54.141945000000021,49.75],[-54.102225999999973,49.750274999999988],[-54.093886999999938,49.748878000000047],[-54.085830999999985,49.745544000000052],[-54.081115999999952,49.736381999999935],[-54.040000999999961,49.689987000000087],[-54.003058999999951,49.659988000000055],[-54.004448000000025,49.647491000000116]],[[-124.129707,49.650825999999995],[-124.139183,49.650543000000027],[-124.15361000000001,49.655548000000067],[-124.18694299999993,49.668883999999991],[-124.196663,49.676940999999999],[-124.20195000000001,49.701934999999992],[-124.19943199999989,49.706099999999992],[-124.14750699999996,49.746658000000025],[-124.14277600000003,49.75],[-124.13722199999995,49.752219999999966],[-124.09166699999997,49.767769000000101],[-124.03611799999999,49.777214000000129],[-124.029449,49.778328000000101],[-124.021118,49.77777100000003],[-124.01611299999996,49.775551000000007],[-124.01862299999999,49.77165999999994],[-124.02555799999993,49.767769000000101],[-124.04611199999999,49.756386000000077],[-124.06054699999999,49.744995000000131],[-124.07472200000001,49.733330000000024],[-124.09084300000001,49.715546000000131],[-124.10109699999992,49.700272000000041],[-124.10555999999991,49.689430000000016],[-124.10722399999992,49.677215999999987],[-124.11081699999994,49.664992999999924],[-124.11361699999998,49.659713999999951],[-124.12304699999993,49.651931999999988],[-124.129707,49.650825999999995]],[[-56.80361199999993,49.763329000000056],[-56.827498999999989,49.761107999999979],[-56.83555599999994,49.762771999999984],[-56.83805099999995,49.767494000000056],[-56.832779000000016,49.771934999999985],[-56.826667999999984,49.77526899999998],[-56.792503000000011,49.785552999999993],[-56.782218999999998,49.78694200000001],[-56.78194400000001,49.780822999999941],[-56.790840000000003,49.768326000000002],[-56.796669000000009,49.764999000000046],[-56.80361199999993,49.763329000000056]],[[-124.44611399999991,49.723320000000115],[-124.43749999999994,49.723045000000127],[-124.42887899999994,49.723877000000016],[-124.41000400000001,49.723045000000127],[-124.38137799999998,49.713326000000109],[-124.35138699999999,49.698044000000095],[-124.33277900000002,49.683327000000077],[-124.13474300000001,49.525269000000037],[-124.13221699999991,49.520271000000037],[-124.12416100000002,49.499161000000072],[-124.122772,49.493607000000054],[-124.12748699999997,49.489715999999987],[-124.13417099999992,49.487495000000081],[-124.14167799999996,49.485825000000091],[-124.14916999999997,49.486107000000004],[-124.15527299999985,49.488602000000014],[-124.281387,49.546661000000029],[-124.40583800000002,49.605826999999977],[-124.43804899999998,49.628875999999991],[-124.44220699999994,49.638046000000031],[-124.47666900000002,49.67193600000013],[-124.5396649999999,49.692768000000001],[-124.55249799999996,49.697105000000022],[-124.56167599999998,49.699935999999923],[-124.61416600000001,49.713607999999965],[-124.62721299999993,49.71915400000006],[-124.65416699999997,49.736107000000118],[-124.66082799999992,49.742767000000129],[-124.65666199999993,49.796943999999939],[-124.65110800000002,49.799995000000138],[-124.61945300000002,49.797218000000044],[-124.604446,49.789436000000137],[-124.59944199999995,49.78443900000002],[-124.59028599999999,49.77165999999994],[-124.56234000000001,49.753326000000015],[-124.55933399999998,49.751495000000034],[-124.49472000000003,49.733330000000024],[-124.44611399999991,49.723320000000115]],[[-126.67610199999996,49.583603000000039],[-126.68138099999993,49.583054000000118],[-126.68888899999996,49.583878000000084],[-126.69722000000002,49.585548000000074],[-126.78971899999999,49.612213000000111],[-126.80803699999996,49.61971299999999],[-126.81416299999995,49.622765000000072],[-126.90556300000003,49.685547000000099],[-126.96528599999999,49.726935999999966],[-126.96945199999999,49.731102000000078],[-126.97416699999991,49.740273000000002],[-126.97556299999997,49.75],[-126.94055200000003,49.831383000000017],[-126.890556,49.84777100000008],[-126.79915599999993,49.876099000000011],[-126.77749599999993,49.87971500000009],[-126.76872299999997,49.878616000000079],[-126.74944299999999,49.85694100000012],[-126.73416099999997,49.848045000000013],[-126.67804699999994,49.825272000000098],[-126.64472999999992,49.774162000000047],[-126.636124,49.759437999999989],[-126.63445300000001,49.753883000000087],[-126.61332699999997,49.648330999999985],[-126.61609599999997,49.624435000000062],[-126.62053699999996,49.606102000000021],[-126.62416099999996,49.601386999999988],[-126.63305700000001,49.596100000000035],[-126.66861,49.585548000000074],[-126.67610199999996,49.583603000000039]],[[-62.089721999999881,49.386383000000137],[-62.081389999999999,49.385551000000078],[-62.051665999999955,49.390274000000034],[-62.043616999999927,49.390549000000078],[-62.025276000000019,49.38749700000011],[-61.892226999999934,49.351387000000045],[-61.875557000000015,49.344994000000042],[-61.825835999999924,49.312209999999993],[-61.821114000000023,49.308883999999978],[-61.663329999999917,49.149162000000047],[-61.661666999999966,49.144439999999975],[-61.670837000000006,49.134163000000001],[-61.702224999999942,49.111107000000004],[-61.735557999999969,49.096099999999979],[-61.796111999999937,49.078048999999965],[-62.019996999999989,49.069443000000035],[-62.029167000000029,49.069443000000035],[-62.195549000000028,49.074997000000053],[-62.368057000000022,49.0991590000001],[-62.726105000000018,49.154709000000025],[-62.782218999999884,49.165824999999984],[-62.946662999999944,49.198874999999987],[-63.089995999999985,49.228043000000014],[-63.097778000000005,49.23054500000012],[-63.209442000000024,49.270827999999995],[-63.23082699999992,49.280273000000022],[-63.242774999999938,49.287498000000085],[-63.253059000000007,49.294997999999964],[-63.269996999999989,49.311104],[-63.275832999999977,49.314712999999983],[-63.283332999999914,49.317771999999934],[-63.387221999999952,49.34388000000007],[-63.416945999999882,49.350829999999974],[-63.501296999999965,49.370384000000115],[-63.537223999999867,49.379714999999976],[-63.573058999999944,49.396660000000111],[-63.61611199999993,49.446938000000102],[-63.621940999999879,49.455551000000071],[-63.620833999999945,49.461105000000089],[-63.616660999999908,49.46665999999999],[-63.61333499999995,49.473044999999956],[-63.612502999999947,49.478873999999962],[-63.61611199999993,49.488327000000027],[-63.619720000000029,49.492767000000015],[-63.662772999999959,49.533051],[-63.67888599999992,49.544716000000051],[-63.714446999999893,49.566383000000087],[-63.84194199999996,49.639160000000004],[-63.881942999999978,49.65915700000005],[-63.918334999999956,49.674438000000009],[-64.01556399999987,49.702492000000063],[-64.306945999999925,49.777489000000003],[-64.382216999999969,49.789436000000137],[-64.389998999999932,49.789719000000105],[-64.418335000000013,49.801658999999972],[-64.511123999999995,49.858604000000014],[-64.513901000000033,49.863609000000054],[-64.510283999999956,49.868599000000131],[-64.50111400000003,49.878043999999989],[-64.496108999999876,49.883049000000085],[-64.490828999999906,49.886939999999925],[-64.472778000000005,49.895828000000108],[-64.458618000000001,49.900826000000109],[-64.445540999999992,49.904434000000037],[-64.226943999999946,49.948326000000066],[-64.203613000000018,49.950271999999984],[-64.142775999999969,49.948044000000039],[-64.133057000000008,49.947212000000093],[-64.12388599999997,49.945267000000115],[-64.029175000000009,49.924438000000123],[-63.958892999999932,49.898048000000131],[-63.615836999999942,49.849158999999986],[-63.545006000000001,49.843323000000112],[-63.49222599999996,49.840828000000045],[-63.475272999999959,49.840546000000018],[-63.346946999999943,49.820274000000097],[-63.309722999999963,49.813880999999981],[-63.136115999999959,49.780822999999941],[-63.074447999999961,49.764160000000061],[-62.99610899999999,49.736656000000096],[-62.786667000000023,49.676384000000098],[-62.71055599999994,49.660820000000001],[-62.545554999999979,49.599998000000141],[-62.443610999999919,49.5472180000001],[-62.340553,49.486938000000009],[-62.212218999999948,49.41443600000008],[-62.205832999999984,49.41137700000013],[-62.188889000000017,49.405823000000112],[-62.169166999999959,49.401099999999985],[-62.099167000000023,49.387771999999984],[-62.089721999999881,49.386383000000137]],[[-124.92415599999998,50.05860100000001],[-124.96861299999995,50.035827999999981],[-125.00055699999996,50.056656000000032],[-125.06304899999998,50.103324999999984],[-125.06696299999999,50.107498000000135],[-125.066101,50.113884000000041],[-125.0625,50.118324000000086],[-125.03971899999999,50.130546999999922],[-124.991669,50.168327000000033],[-124.98222399999992,50.176102000000128],[-124.98055999999991,50.18221299999999],[-124.98332199999999,50.225548000000003],[-124.93138099999993,50.171104000000128],[-124.92859599999997,50.166100000000142],[-124.91528299999999,50.141380000000083],[-124.89778100000001,50.077492000000063],[-124.92415599999998,50.05860100000001]],[[-63.859443999999996,50.197768999999937],[-63.873610999999983,50.194434999999999],[-63.890282000000013,50.194709999999986],[-63.899993999999936,50.196098000000063],[-63.908607000000018,50.198601000000053],[-63.916107000000011,50.201660000000004],[-63.920837000000006,50.205551000000071],[-63.930557000000022,50.218597000000045],[-63.931389000000024,50.223877000000073],[-63.930557000000022,50.229431000000091],[-63.926948999999922,50.236107000000004],[-63.922774999999888,50.241661000000022],[-63.916663999999969,50.244713000000104],[-63.909995999999921,50.246658000000139],[-63.90193899999997,50.24721500000004],[-63.889724999999999,50.242218000000094],[-63.865554999999915,50.228325000000041],[-63.859443999999996,50.224709000000018],[-63.854720999999927,50.220824999999991],[-63.852782999999988,50.216103000000089],[-63.853614999999991,50.210548000000017],[-63.855835000000013,50.204437000000098],[-63.859443999999996,50.197768999999937]],[[-125.16777000000002,49.980819999999937],[-125.16999800000002,49.980819999999937],[-125.17111199999994,49.981659000000093],[-125.18582199999997,50.004165999999998],[-125.20722999999998,50.044998000000021],[-125.21417199999996,50.069992000000013],[-125.28167699999989,50.11332700000014],[-125.31777999999986,50.136107999999979],[-125.32362399999994,50.143326000000002],[-125.33999599999993,50.203049000000021],[-125.34916699999997,50.242493000000138],[-125.34973100000002,50.25777400000004],[-125.348343,50.261665000000107],[-125.34554299999996,50.263901000000033],[-125.33999599999993,50.26888300000013],[-125.31082200000003,50.281380000000127],[-125.26334400000002,50.293883999999991],[-125.25472999999988,50.293610000000058],[-125.24638399999998,50.290549999999996],[-125.24333199999995,50.288329999999974],[-125.16722099999987,50.213608000000079],[-125.16111799999999,50.200272000000098],[-125.16000400000001,50.190544000000102],[-125.18666100000002,50.141663000000051],[-125.1536099999999,50.006103999999937],[-125.15416699999997,50.000832000000003],[-125.16416900000002,49.985268000000133],[-125.16777000000002,49.980819999999937]],[[-124.8125,50.111381999999992],[-124.82112100000001,50.111107000000118],[-124.82749899999993,50.111937999999952],[-124.83361799999989,50.114441000000113],[-124.86110699999989,50.136383000000023],[-124.93916299999995,50.207771000000093],[-124.96305799999999,50.236382000000049],[-124.96610999999996,50.246941000000106],[-124.96556099999992,50.251663000000008],[-124.92304999999993,50.296386999999982],[-124.91832699999986,50.29972099999992],[-124.91082799999998,50.299995000000081],[-124.90249599999999,50.29833200000013],[-124.89862099999999,50.293883999999991],[-124.87581599999993,50.28472099999999],[-124.82167099999992,50.239716000000044],[-124.75666799999999,50.178328999999962],[-124.75250199999999,50.167770000000132],[-124.752228,50.161376999999959],[-124.75499699999995,50.156097000000102],[-124.80695300000002,50.113884000000041],[-124.8125,50.111381999999992]],[[-124.73082699999992,50.302215999999987],[-124.72693599999997,50.299164000000019],[-124.72471599999994,50.299164000000019],[-124.69554099999999,50.289436000000023],[-124.68331899999993,50.283333000000084],[-124.67250100000001,50.276100000000042],[-124.66860999999994,50.272491000000059],[-124.66111799999993,50.263054000000125],[-124.65943900000002,50.258330999999941],[-124.65750099999997,50.247772000000111],[-124.65611299999989,50.231377000000009],[-124.65834000000001,50.212212000000022],[-124.66000399999996,50.207496999999989],[-124.66251399999999,50.203323000000125],[-124.695831,50.157494000000042],[-124.70195000000001,50.158600000000092],[-124.70805399999995,50.161376999999959],[-124.79222099999993,50.22526600000009],[-124.79499800000002,50.228874000000019],[-124.78083800000002,50.269440000000031],[-124.77778599999999,50.27748900000006],[-124.74500299999994,50.299437999999952],[-124.74054699999994,50.30193300000002],[-124.73082699999992,50.302215999999987]],[[-125.54387700000001,50.393883000000017],[-125.63583399999999,50.379714999999976],[-125.69360399999999,50.383330999999998],[-125.70333899999991,50.384163000000115],[-125.75527999999997,50.391662999999994],[-125.762787,50.394157000000121],[-125.76363400000002,50.397491000000116],[-125.75527999999997,50.405548000000067],[-125.74416399999996,50.40776800000009],[-125.59528399999999,50.433052000000089],[-125.58640300000002,50.434158000000139],[-125.52390300000002,50.434433000000126],[-125.51889,50.431381000000044],[-125.51806599999998,50.428604000000121],[-125.51777600000003,50.409431000000041],[-125.520554,50.403320000000122],[-125.52500899999995,50.400825999999995],[-125.53639199999998,50.395827999999995],[-125.54387700000001,50.393883000000017]],[[-125.16555800000003,50.374435000000062],[-125.06139400000001,50.240547000000049],[-125.05194099999989,50.226653999999996],[-125.05027799999993,50.221657000000107],[-125.048607,50.207771000000093],[-125.04915599999993,50.193320999999969],[-125.05166599999995,50.190826000000129],[-125.11638599999998,50.136658000000011],[-125.12917299999998,50.126098999999954],[-125.13390400000003,50.122764999999958],[-125.14028899999994,50.121658000000025],[-125.14472999999987,50.12193300000007],[-125.15083299999998,50.12499200000002],[-125.15416699999997,50.133331000000055],[-125.13971699999996,50.159431000000097],[-125.15611299999995,50.239158999999972],[-125.21083099999993,50.313048999999921],[-125.21362299999993,50.316666000000055],[-125.22000099999991,50.318329000000006],[-125.26363400000002,50.323607999999979],[-125.27194199999997,50.323883000000023],[-125.31555199999997,50.318054000000018],[-125.32112099999989,50.316939999999988],[-125.32695000000001,50.313881000000038],[-125.33306900000002,50.304435999999953],[-125.33473200000003,50.29972099999992],[-125.33944699999989,50.29583000000008],[-125.35610999999994,50.290276000000063],[-125.37222300000002,50.289436000000023],[-125.38527699999997,50.289993000000095],[-125.390289,50.29222100000004],[-125.39306599999998,50.29583000000008],[-125.39917000000003,50.311104000000114],[-125.400284,50.320831000000055],[-125.39943699999998,50.331108000000086],[-125.39806399999998,50.333878000000084],[-125.391953,50.340546000000074],[-125.291946,50.433876000000055],[-125.28443899999996,50.435822000000144],[-125.27500900000001,50.433327000000133],[-125.27306399999992,50.431107000000111],[-125.23665599999993,50.415825000000098],[-125.21640000000002,50.404709000000139],[-125.16555800000003,50.374435000000062]],[[-125.42610200000001,50.3555530000001],[-125.45777899999996,50.349434000000088],[-125.46749899999998,50.350273000000016],[-125.52610800000002,50.378875999999991],[-125.52806099999998,50.381660000000124],[-125.51862299999993,50.390274000000034],[-125.47749299999998,50.424164000000133],[-125.47165699999999,50.427489999999977],[-125.465012,50.429993000000138],[-125.37998999999996,50.460823000000005],[-125.37165799999997,50.457771000000037],[-125.37082699999996,50.455826000000059],[-125.36665299999993,50.454162999999937],[-125.34306300000003,50.441658000000018],[-125.33194700000001,50.435547000000099],[-125.33000199999998,50.430824000000143],[-125.33056599999986,50.425270000000125],[-125.33693700000003,50.416664000000026],[-125.38583399999999,50.36971299999999],[-125.39835399999998,50.364159000000029],[-125.42610200000001,50.3555530000001]],[[-125.80721999999997,50.413605000000075],[-125.90695199999993,50.409714000000008],[-125.92194399999988,50.41027100000008],[-125.92804699999999,50.411658999999986],[-125.93110699999988,50.413879000000009],[-125.95111099999997,50.433876000000055],[-125.93943799999988,50.443047000000035],[-125.90583799999996,50.45638300000013],[-125.81416299999995,50.46804800000001],[-125.80777,50.467765999999983],[-125.80359599999997,50.465546000000131],[-125.79055799999998,50.456940000000031],[-125.74109599999997,50.431664000000012],[-125.73805199999998,50.428047000000049],[-125.73805199999998,50.426658999999972],[-125.74276700000001,50.424164000000133],[-125.75834700000001,50.419990999999982],[-125.79110700000001,50.414992999999981],[-125.80721999999997,50.413605000000075]],[[-126.22582999999997,50.555267000000129],[-126.30888399999998,50.528327999999988],[-126.33640299999996,50.521659999999997],[-126.35056299999997,50.52027099999998],[-126.486107,50.515549000000078],[-126.58805799999999,50.521378000000084],[-126.60417199999995,50.52526899999998],[-126.62389400000001,50.533881999999949],[-126.60417199999995,50.539719000000105],[-126.57444800000002,50.546387000000095],[-126.55695300000002,50.548607000000118],[-126.54194599999994,50.549438000000123],[-126.52667200000002,50.548882000000106],[-126.48860200000001,50.553321999999923],[-126.38110399999999,50.574715000000026],[-126.28611799999999,50.598327999999981],[-126.28278399999999,50.597488000000112],[-126.22609699999998,50.564156000000025],[-126.22305299999999,50.560546999999985],[-126.224716,50.556655999999919],[-126.22582999999997,50.555267000000129]],[[-126.46639999999996,50.575829000000056],[-126.47501399999993,50.575554000000011],[-126.47917199999995,50.576385000000016],[-126.53555299999999,50.590546000000018],[-126.54915599999998,50.596382000000062],[-126.55222300000003,50.598602000000085],[-126.554169,50.602776000000119],[-126.55248999999998,50.607498000000021],[-126.55027799999999,50.608604000000071],[-126.54360999999994,50.611382000000049],[-126.52916699999997,50.614998000000128],[-126.45361299999996,50.626937999999996],[-126.40499899999992,50.626099000000067],[-126.385559,50.625549000000035],[-126.37721299999993,50.623877999999934],[-126.364441,50.619438000000116],[-126.36138900000003,50.615829000000133],[-126.36165599999998,50.613052000000039],[-126.36971999999992,50.605826999999977],[-126.38027999999997,50.598602000000085],[-126.38474300000001,50.596100000000035],[-126.39138799999995,50.59276600000004],[-126.39806399999998,50.591103000000089],[-126.46639999999996,50.575829000000056]],[[-59.345832999999971,50.533881999999949],[-59.353888999999924,50.533881999999949],[-59.358337000000006,50.537773000000016],[-59.384170999999924,50.633049000000085],[-59.384170999999924,50.638328999999999],[-59.382773999999984,50.64388300000013],[-59.378051999999911,50.649161999999933],[-59.371940999999993,50.652771000000143],[-59.364448999999979,50.653876999999966],[-59.355003000000011,50.652214000000072],[-59.337775999999906,50.640831000000048],[-59.333610999999905,50.636108000000036],[-59.321670999999981,50.618881000000044],[-59.305556999999965,50.59165999999999],[-59.300277999999992,50.581940000000088],[-59.298339999999939,50.57249500000006],[-59.298339999999939,50.561935000000119],[-59.308891000000017,50.553047000000106],[-59.320557000000008,50.545830000000024],[-59.333060999999873,50.539436000000137],[-59.345832999999971,50.533881999999949]],[[-126.87332200000003,50.663322000000051],[-126.83416699999998,50.634163000000058],[-126.83112299999999,50.629158000000018],[-126.83583099999998,50.625267000000122],[-126.90249599999993,50.613883999999928],[-126.91251399999999,50.61360900000011],[-127.01666299999999,50.638328999999999],[-127.025284,50.639992000000063],[-127.04276999999996,50.637497000000053],[-127.05832700000002,50.632492000000013],[-127.10193600000002,50.627486999999974],[-127.12249800000001,50.62721300000004],[-127.13221699999991,50.628326000000129],[-127.14055599999995,50.62971500000009],[-127.14472999999998,50.633881000000031],[-127.14334100000002,50.63888500000013],[-127.13166799999999,50.652214000000072],[-127.12721299999998,50.656096999999988],[-127.10916099999997,50.665267999999969],[-127.093887,50.669159000000036],[-127.08640300000002,50.669716000000108],[-126.89028899999994,50.667213000000118],[-126.87970699999994,50.666100000000029],[-126.87332200000003,50.663322000000051]],[[-126.64388999999994,50.691933000000006],[-126.65249599999999,50.691376000000105],[-126.65888999999993,50.694435000000055],[-126.662781,50.69860099999994],[-126.66583300000002,50.703323000000012],[-126.69027699999998,50.75499700000006],[-126.68554699999993,50.758888000000127],[-126.66832699999998,50.759163000000115],[-126.60221899999999,50.770828000000051],[-126.58277900000002,50.769714000000022],[-126.54387700000001,50.765831000000105],[-126.53639199999992,50.763611000000083],[-126.53582799999998,50.758606000000043],[-126.63806199999993,50.694992000000127],[-126.64388999999994,50.691933000000006]],[[-55.564720000000023,50.699714999999912],[-55.580001999999922,50.698326000000122],[-55.588889999999992,50.699431999999945],[-55.64527899999996,50.71888000000007],[-55.65166499999998,50.72304500000007],[-55.653052999999886,50.727211000000011],[-55.629439999999931,50.780823000000112],[-55.62471800000003,50.787216000000058],[-55.619163999999955,50.791381999999999],[-55.462775999999963,50.805824000000143],[-55.454444999999964,50.802489999999977],[-55.450554000000011,50.798332000000016],[-55.449722000000008,50.792770000000075],[-55.454720000000009,50.788048000000003],[-55.46694199999996,50.784163999999976],[-55.512504999999976,50.722763000000043],[-55.525001999999972,50.715827999999988],[-55.551392000000021,50.703323000000012],[-55.557502999999997,50.701385000000073],[-55.564720000000023,50.699714999999912]],[[-126.27306399999998,50.652771000000143],[-126.46333300000003,50.641662999999937],[-126.56806899999998,50.648331000000098],[-126.58416699999992,50.650269000000037],[-126.59889199999998,50.654159999999933],[-126.60637699999995,50.657211000000132],[-126.612503,50.659988000000055],[-126.61749299999997,50.664993000000095],[-126.61749299999997,50.667770000000019],[-126.54583700000001,50.726096999999982],[-126.43720999999999,50.783882000000119],[-126.38971699999996,50.806381000000044],[-126.38221699999997,50.808043999999995],[-126.28056299999997,50.828331000000048],[-126.26640299999997,50.827773999999977],[-126.25805699999995,50.824715000000026],[-126.2538909999999,50.821938000000102],[-126.25171699999987,50.818932000000075],[-126.23832699999997,50.811104000000057],[-126.22944599999994,50.803322000000094],[-126.17832900000002,50.750832000000059],[-126.17722299999997,50.748604000000114],[-126.17666600000001,50.743881000000101],[-126.25305200000003,50.699646000000087],[-126.25611900000001,50.661377000000073],[-126.26083399999999,50.657211000000132],[-126.26640299999997,50.654709000000082],[-126.27306399999998,50.652771000000143]],[[-126.73137700000001,50.771934999999985],[-126.79778299999992,50.768883000000017],[-126.807503,50.769989000000066],[-126.85333300000002,50.782767999999919],[-126.86472299999997,50.78943600000008],[-126.90583799999996,50.822769000000108],[-126.90139799999992,50.825272000000098],[-126.88806199999999,50.829162999999994],[-126.88137799999993,50.830276000000026],[-126.64862099999999,50.847214000000122],[-126.64334100000002,50.846939000000134],[-126.63583399999999,50.845268000000033],[-126.62943999999993,50.842490999999995],[-126.58860800000002,50.821381000000031],[-126.56806899999998,50.807770000000062],[-126.56304899999992,50.799995000000138],[-126.56861900000001,50.797493000000088],[-126.73137700000001,50.771934999999985]],[[-127.22693599999991,50.636108000000036],[-126.975281,50.576942000000088],[-126.85472099999993,50.554436000000123],[-126.77639799999997,50.546104000000128],[-126.76806599999998,50.544441000000006],[-126.72138999999999,50.531936999999971],[-126.70527600000003,50.527489000000003],[-126.63999899999999,50.507773999999984],[-126.62332199999992,50.498329000000126],[-126.56388899999996,50.483604000000014],[-126.49388099999993,50.481934000000024],[-126.39472999999998,50.481658999999979],[-126.38694800000002,50.482765000000029],[-126.35582699999998,50.48333000000008],[-126.327789,50.480820000000051],[-126.22112299999998,50.468596999999988],[-126.20500199999992,50.466660000000104],[-126.15471600000001,50.459435000000042],[-126.06916799999999,50.438599000000067],[-126.04611199999994,50.432495000000017],[-126.031387,50.427773000000116],[-126.01889,50.42193600000013],[-125.97609699999992,50.394996999999989],[-125.96250900000001,50.388885000000016],[-125.94776899999994,50.38499500000006],[-125.92859599999997,50.382209999999986],[-125.81696299999999,50.378044000000102],[-125.58000199999987,50.365828999999962],[-125.56416300000001,50.363883999999985],[-125.54860699999989,50.359161000000029],[-125.46305799999993,50.329719999999952],[-125.44972200000001,50.323607999999979],[-125.44055200000003,50.318329000000006],[-125.43554699999999,50.314712999999983],[-125.43167099999999,50.310547000000042],[-125.42887899999994,50.305549999999982],[-125.42722300000003,50.299995000000081],[-125.42666599999995,50.293883999999991],[-125.42722300000003,50.287498000000085],[-125.41500899999994,50.261665000000107],[-125.39362299999999,50.215546000000018],[-125.37777699999998,50.17971799999998],[-125.36277799999993,50.138046000000088],[-125.33084099999996,50.113884000000041],[-125.28694199999995,50.08138300000013],[-125.229446,50.026657],[-125.22165699999999,50.018051000000071],[-125.21611000000001,50.001389000000074],[-125.21417199999996,49.976379000000065],[-125.212784,49.970825000000048],[-125.20722999999998,49.961662000000047],[-125.16860999999994,49.912766000000033],[-125.11221299999994,49.868324000000086],[-124.99305699999991,49.788330000000087],[-124.89806399999998,49.731658999999979],[-124.89138799999989,49.664711000000068],[-124.91639700000002,49.631660000000124],[-124.86028299999992,49.541663999999969],[-124.85305800000003,49.532494000000099],[-124.83306900000002,49.510826000000122],[-124.78943599999991,49.464157],[-124.579453,49.38749700000011],[-124.55110200000001,49.378044000000102],[-124.53555299999999,49.373878000000047],[-124.51917300000002,49.370270000000119],[-124.26083399999993,49.315269000000001],[-124.12193299999996,49.270271000000093],[-123.94304699999992,49.211104999999918],[-123.85637699999995,49.149162000000047],[-123.86028299999992,49.153046000000074],[-123.86638599999998,49.160820000000115],[-123.86805700000002,49.164436000000137],[-123.87110899999988,49.173607000000118],[-123.87138399999998,49.181106999999997],[-123.86638599999998,49.186378000000047],[-123.86165599999993,49.188880999999981],[-123.84999099999999,49.191658000000075],[-123.82444800000002,49.192764000000125],[-123.82055699999995,49.190544000000102],[-123.80722000000003,49.180275000000051],[-123.79444899999993,49.173325000000034],[-123.78859699999998,49.170273000000122],[-123.76944700000001,49.16304800000006],[-123.73805199999993,49.154433999999981],[-123.71112099999999,49.149993999999992],[-123.70417800000001,49.147491000000002],[-123.699432,49.143883000000073],[-123.696663,49.14027400000009],[-123.69638099999997,49.135551000000078],[-123.69915799999995,49.130272000000105],[-123.70388800000001,49.126381000000038],[-123.73137700000001,49.117493000000081],[-123.74166899999989,49.118049999999982],[-123.83750899999995,49.14138000000014],[-123.85056299999997,49.145546000000024],[-123.81027199999994,49.115829000000076],[-123.75195300000001,49.040833000000021],[-123.74944299999999,49.03527100000008],[-123.75028999999989,49.02915999999999],[-123.75695799999994,48.986938000000123],[-123.75862099999989,48.980819999999994],[-123.76334399999996,48.976936000000137],[-123.69193999999993,48.908325000000104],[-123.68222000000003,48.902214000000072],[-123.5911099999999,48.839989000000116],[-123.58277900000002,48.831940000000088],[-123.56555199999997,48.789719000000105],[-123.56304899999998,48.778327999999988],[-123.56471299999993,48.749718000000087],[-123.50945300000001,48.587493999999992],[-123.47666899999996,48.631660000000124],[-123.47083999999995,48.673324999999977],[-123.46916199999993,48.67943600000001],[-123.46444700000001,48.683327000000077],[-123.45973200000003,48.685822000000144],[-123.45140100000003,48.686652999999978],[-123.44193999999999,48.686652999999978],[-123.41639699999996,48.684433000000126],[-123.40110800000002,48.681381000000044],[-123.39639299999999,48.677773000000116],[-123.34973099999996,48.547775000000058],[-123.34834299999994,48.535828000000095],[-123.29527300000001,48.484718000000044],[-123.29167200000001,48.480820000000108],[-123.27861000000001,48.456100000000049],[-123.27610800000002,48.451103000000103],[-123.27694700000001,48.445540999999992],[-123.28694200000001,48.418602000000021],[-123.28971899999999,48.413321999999937],[-123.29444899999993,48.409714000000065],[-123.30082699999997,48.406654000000003],[-123.32055699999989,48.399437000000034],[-123.33640299999996,48.396942000000024],[-123.36028299999987,48.397217000000069],[-123.41665599999999,48.423882000000106],[-123.42138699999992,48.427490000000034],[-123.425003,48.431938000000002],[-123.45973200000003,48.411934000000031],[-123.51334400000002,48.374709999999993],[-123.53694200000001,48.338326000000109],[-123.54250300000001,48.312492000000077],[-123.54611199999999,48.307770000000005],[-123.55166600000001,48.304710000000114],[-123.55915800000002,48.303047000000049],[-123.58332799999994,48.301102000000014],[-123.598343,48.311661000000072],[-123.71444699999995,48.348045000000127],[-123.76251199999996,48.361664000000019],[-123.77166699999998,48.361664000000019],[-123.77999899999998,48.360550000000046],[-123.79499799999996,48.357498000000135],[-123.80888400000003,48.353324999999984],[-123.817497,48.352493000000095],[-123.823624,48.352776000000063],[-123.91610699999995,48.364159000000029],[-123.92415599999998,48.366104000000064],[-123.97609699999998,48.381934999999999],[-124.26363399999997,48.468880000000013],[-124.423607,48.516937000000041],[-124.609444,48.560547000000042],[-124.6885989999999,48.578330999999991],[-124.72083999999995,48.586655000000007],[-124.75917099999998,48.6055530000001],[-124.77111799999994,48.611663999999962],[-124.79499800000002,48.629989999999964],[-124.81777999999997,48.648880000000133],[-124.82277699999997,48.652489000000116],[-124.9225009999999,48.679993000000138],[-125.02887699999997,48.708885000000009],[-125.0625,48.714996000000099],[-125.09500100000002,48.721930999999984],[-125.10221899999993,48.724433999999917],[-125.11389199999996,48.731102000000078],[-125.18443299999996,48.796104000000128],[-125.18499800000001,48.800827000000083],[-125.01722699999999,48.920547000000113],[-124.90862300000003,48.969154000000003],[-124.90306099999998,48.97137500000008],[-124.84750399999996,49.011664999999994],[-124.84277299999985,49.015549000000021],[-124.83556399999998,49.02416199999999],[-124.78083800000002,49.131377999999984],[-124.77944899999994,49.144439999999975],[-124.78083800000002,49.150542999999914],[-124.79695099999998,49.215828000000101],[-124.79972799999996,49.22693600000008],[-124.80499299999997,49.236938000000066],[-124.80776999999995,49.240547000000049],[-124.81555199999997,49.238045],[-124.818893,49.234718000000044],[-124.82444800000002,49.224158999999986],[-124.82501199999996,49.217209000000139],[-124.82333399999993,49.205551000000128],[-124.81723,49.18332700000002],[-124.81610099999995,49.164711000000011],[-124.81806899999998,49.146103000000096],[-124.82611099999997,49.122489999999971],[-124.83139,49.112495000000081],[-124.87832599999996,49.025268999999923],[-124.88194299999998,49.020546000000138],[-124.89472999999998,49.008888000000127],[-124.90055799999993,49.00499700000006],[-124.906113,49.001938000000052],[-124.93694299999999,48.988045000000056],[-124.94999699999994,48.983330000000024],[-124.96278399999994,48.981102000000021],[-125.06916799999999,48.984436000000017],[-125.126938,48.991104000000007],[-125.19888300000002,48.96276899999998],[-125.21000699999996,48.955826000000002],[-125.21665999999988,48.953323000000012],[-125.22416699999991,48.951660000000118],[-125.23137699999995,48.951103000000046],[-125.24194299999988,48.951660000000118],[-125.318893,48.96443899999997],[-125.32721699999996,48.966102999999976],[-125.45722999999992,48.918052999999986],[-125.46472199999988,48.916382000000112],[-125.48361199999999,48.915825000000041],[-125.502228,48.917770000000019],[-125.50723299999999,48.920273000000009],[-125.75110599999994,49.055267000000072],[-125.76806599999998,49.098602000000028],[-125.73805199999998,49.105552999999986],[-125.69304699999992,49.12860100000006],[-125.64167800000001,49.16304800000006],[-125.63722200000001,49.166939000000127],[-125.60888699999998,49.198043999999982],[-125.60582699999992,49.210274000000084],[-125.60749800000002,49.215828000000101],[-125.611107,49.220267999999919],[-125.61638599999998,49.219711000000018],[-125.66443599999991,49.189987000000031],[-125.72083999999995,49.157767999999976],[-125.74694799999997,49.148604999999975],[-125.75334199999998,49.147491000000002],[-125.75611899999996,49.151657000000114],[-125.779449,49.241661000000022],[-125.79666099999992,49.310272000000055],[-125.86609599999991,49.274436999999978],[-125.952789,49.230270000000075],[-125.96501199999989,49.22526599999992],[-125.97028399999999,49.224709000000018],[-125.97444199999995,49.224991000000102],[-125.98137700000001,49.227211000000125],[-125.98750299999989,49.230270000000075],[-126.020554,49.263054000000125],[-126.02333099999993,49.268051000000071],[-126.02223200000003,49.280823000000055],[-126.01862299999993,49.285553000000107],[-126.01306199999999,49.288887000000102],[-126.00666799999993,49.290549999999996],[-125.98029300000002,49.292496000000085],[-125.97361799999999,49.294997999999964],[-125.96916199999998,49.297493000000031],[-125.950287,49.311935000000005],[-125.94554099999999,49.316666000000112],[-125.89750699999996,49.41027100000008],[-125.89584399999995,49.416381999999999],[-125.89695699999993,49.428047000000049],[-125.89972699999998,49.433601000000067],[-125.90471599999995,49.435822000000144],[-125.90915699999988,49.431938000000116],[-125.94722000000002,49.395546000000138],[-125.96250900000001,49.377487000000031],[-125.96501199999989,49.373604000000114],[-125.96528599999999,49.367493000000024],[-125.962219,49.3555530000001],[-125.962784,49.350273000000072],[-125.96610999999996,49.345543000000021],[-125.99527,49.324440000000095],[-126.00195300000001,49.321938000000046],[-126.00945299999989,49.321663000000001],[-126.03916900000002,49.330275999999969],[-126.04638699999987,49.333328000000108],[-126.06111099999998,49.344154000000003],[-126.06500199999999,49.348328000000038],[-126.07556199999999,49.386383000000137],[-126.07389799999999,49.392494000000056],[-126.120003,49.423049999999989],[-126.22556299999991,49.41027100000008],[-126.26390099999998,49.389435000000049],[-126.36527999999998,49.401657000000057],[-126.45916699999998,49.401932000000045],[-126.46167000000003,49.382767000000115],[-126.46611000000001,49.380272000000048],[-126.52667200000002,49.371933000000013],[-126.54222099999993,49.374435000000119],[-126.54723399999995,49.378044000000102],[-126.57778899999988,49.407767999999919],[-126.579453,49.413322000000107],[-126.57917799999996,49.419440999999949],[-126.56973299999999,49.576385000000073],[-126.56610099999995,49.584434999999985],[-126.47028399999999,49.635551000000021],[-126.46167000000003,49.636658000000125],[-126.40416699999997,49.637772000000098],[-126.38417099999992,49.63638300000008],[-126.36749299999997,49.633049000000085],[-126.36028299999998,49.630820999999969],[-126.34137699999997,49.628875999999991],[-126.28472899999997,49.634438000000102],[-126.22389199999998,49.640549000000021],[-126.13417099999998,49.649994000000049],[-126.09445199999988,49.655548000000067],[-126.08693699999998,49.657211000000018],[-126.08750899999995,49.662209000000018],[-126.09028599999999,49.666382000000112],[-126.09416199999993,49.671104000000014],[-126.10305799999998,49.679161000000022],[-126.11028299999992,49.681380999999988],[-126.11972000000003,49.681107000000054],[-126.20944199999991,49.673881999999992],[-126.23444399999994,49.669159000000036],[-126.24638400000003,49.664711000000068],[-126.283073,49.654990999999995],[-126.29833999999994,49.652214000000072],[-126.34084300000001,49.648605000000089],[-126.43110699999994,49.662491000000045],[-126.43831599999993,49.664153999999996],[-126.58500699999996,49.701103000000046],[-126.59028599999994,49.704437000000041],[-126.63027999999997,49.794998000000078],[-126.67971799999998,49.878876000000105],[-126.80444299999988,49.909156999999993],[-126.83917200000002,49.884720000000129],[-126.84555099999989,49.8822100000001],[-126.85221899999993,49.87971500000009],[-126.87609899999995,49.873322000000087],[-126.93943799999994,49.862770000000125],[-126.99416399999996,49.855270000000019],[-127.12111699999997,49.85228699999999],[-127.13249200000001,49.85694100000012],[-127.17749000000003,49.88888500000013],[-127.18554699999999,49.897491000000059],[-127.22444199999995,49.940269000000114],[-127.24137899999999,49.961937000000034],[-127.23889199999996,49.967208999999968],[-127.234444,49.97137500000008],[-127.17999299999991,50.021378000000027],[-127.18277,50.03166200000004],[-127.18360899999999,50.051102000000014],[-127.17666599999995,50.061104],[-127.172234,50.064995000000067],[-127.13027999999997,50.084717000000126],[-127.15833999999995,50.096382000000006],[-127.27055399999995,50.0991590000001],[-127.27500899999995,50.059990000000028],[-127.27749599999993,50.055267000000015],[-127.28388999999999,50.052216000000044],[-127.33000199999998,50.033882000000062],[-127.34500100000002,50.030273000000079],[-127.38054699999998,50.026100000000099],[-127.38999899999993,50.028603000000089],[-127.42331699999994,50.042221000000097],[-127.45195000000001,50.069716999999969],[-127.46916199999993,50.088042999999971],[-127.47193900000002,50.092765999999983],[-127.54804999999993,50.130272000000105],[-127.63276699999994,50.129990000000021],[-127.78028899999993,50.084160000000054],[-127.781387,50.084160000000054],[-127.78362299999998,50.084160000000054],[-127.890556,50.106941000000063],[-127.89584400000001,50.108886999999925],[-127.90083299999998,50.112495000000024],[-127.90695199999999,50.12082700000002],[-127.90666199999998,50.127769000000114],[-127.90334300000001,50.132492000000127],[-127.89222699999988,50.139160000000061],[-127.87917299999998,50.144440000000145],[-127.86805700000002,50.151099999999985],[-127.83721899999995,50.172493000000088],[-127.82833900000003,50.180550000000096],[-127.78888699999999,50.222214000000008],[-127.79915599999993,50.317772000000105],[-127.80444299999994,50.321380999999917],[-127.86389200000002,50.336937000000091],[-127.87138399999998,50.33776899999998],[-127.88110399999999,50.337212000000079],[-127.895554,50.326385000000073],[-127.90778399999999,50.319717000000082],[-127.92166099999997,50.316666000000055],[-127.93138099999993,50.31610100000006],[-127.94833399999993,50.321937999999989],[-127.95249899999993,50.324715000000083],[-127.97860700000001,50.342491000000052],[-127.97944599999994,50.347214000000065],[-127.92610199999996,50.459991000000059],[-127.92388900000003,50.462769000000037],[-127.91722099999993,50.464156999999943],[-127.75666799999993,50.486381999999992],[-127.708054,50.491661000000136],[-127.70028699999995,50.492218000000037],[-127.58416699999998,50.486938000000009],[-127.576683,50.484717999999987],[-127.57140400000003,50.481934000000024],[-127.56331599999999,50.4741590000001],[-127.53278399999999,50.439986999999974],[-127.50750700000003,50.409157000000107],[-127.49527,50.395827999999995],[-127.47444200000001,50.381660000000124],[-127.46193699999998,50.37582400000008],[-127.454453,50.373604000000057],[-127.44695300000001,50.372765000000129],[-127.446663,50.379714999999976],[-127.45249899999988,50.388885000000016],[-127.48665599999993,50.437492000000134],[-127.50583599999999,50.458602999999982],[-127.52027899999996,50.469711000000132],[-127.53083800000002,50.476936000000023],[-127.54750100000001,50.486938000000009],[-127.56388899999996,50.502220000000023],[-127.57000699999998,50.512214999999912],[-127.56749699999995,50.516105999999979],[-127.55027799999999,50.538329999999917],[-127.54472399999997,50.541664000000083],[-127.50361599999997,50.562210000000107],[-127.49694799999992,50.565269000000058],[-127.49027999999993,50.568054000000132],[-127.47501399999999,50.571663000000115],[-127.44360399999999,50.571663000000115],[-127.41972399999992,50.573883000000137],[-127.41416900000002,50.575829000000056],[-127.41166699999997,50.581383000000017],[-127.41139199999992,50.587494000000106],[-127.41944899999999,50.596657000000107],[-127.58168000000001,50.593880000000013],[-127.69138299999997,50.606659000000093],[-127.87332200000003,50.623877999999934],[-127.87666299999995,50.621658000000139],[-127.87361099999993,50.616936000000067],[-127.854446,50.608330000000137],[-127.80055199999998,50.587494000000106],[-127.78666699999997,50.582214000000022],[-127.76834099999996,50.579994000000056],[-127.75110599999999,50.581108000000029],[-127.72501399999993,50.584434999999928],[-127.708618,50.584991000000116],[-127.66251399999999,50.581383000000017],[-127.63445300000001,50.578049000000021],[-127.61028299999998,50.565825999999959],[-127.595551,50.55582400000003],[-127.59166699999997,50.551659000000029],[-127.58972199999999,50.546104000000128],[-127.595551,50.536659000000043],[-127.60109699999998,50.533333000000027],[-127.60888699999987,50.53138000000007],[-128.05142199999995,50.446693000000039],[-128.13363599999997,50.474709000000132],[-128.224152,50.531105000000082],[-128.319458,50.608604000000071],[-128.37527499999993,50.678604000000064],[-128.40695199999999,50.738883999999985],[-128.41473399999995,50.762771999999984],[-128.41665599999999,50.76915699999995],[-128.41305499999993,50.773880000000133],[-128.40863000000002,50.77777100000003],[-128.35583499999996,50.799721000000034],[-128.349152,50.801658999999972],[-128.10693400000002,50.860550000000103],[-128.05306999999999,50.87193300000007],[-127.91832699999998,50.872214999999983],[-127.90972899999991,50.871375999999998],[-127.882767,50.865546999999992],[-127.83332799999999,50.854163999999969],[-127.67749000000003,50.817497000000003],[-127.51471700000002,50.774437000000034],[-127.50723299999993,50.772217000000012],[-127.49582699999996,50.765831000000105],[-127.48750299999995,50.757217000000082],[-127.45916699999992,50.718322999999998],[-127.354446,50.676102000000014],[-127.22693599999991,50.636108000000036]],[[-127.65471599999995,50.837769000000094],[-127.66139199999998,50.834991000000059],[-127.67027300000001,50.835266000000104],[-127.75306699999999,50.852776000000063],[-127.83332799999999,50.879715000000033],[-127.83860799999997,50.881660000000068],[-127.83306899999997,50.884995000000117],[-127.73500100000001,50.909987999999998],[-127.72638699999993,50.908600000000092],[-127.71665999999999,50.90554800000001],[-127.71028099999995,50.901932000000102],[-127.69138299999997,50.887214999999969],[-127.67083699999995,50.86693600000001],[-127.65833999999995,50.854163999999969],[-127.65527299999997,50.849433999999974],[-127.65334299999995,50.843880000000127],[-127.65471599999995,50.837769000000094]],[[-55.555557000000022,50.886383000000023],[-55.563888999999961,50.884995000000117],[-55.571670999999924,50.885826000000122],[-55.581116000000009,50.888046000000145],[-55.604720999999984,50.898048000000074],[-55.615554999999972,50.906097000000102],[-55.619720000000029,50.910271000000137],[-55.636115999999959,50.950829000000056],[-55.635276999999917,50.961380000000133],[-55.629439999999931,50.965546000000018],[-55.565552000000025,50.983046999999999],[-55.558334000000002,50.984436000000017],[-55.550551999999925,50.985268000000076],[-55.54222900000002,50.984993000000088],[-55.535277999999948,50.981377000000009],[-55.531386999999995,50.977211000000125],[-55.529723999999987,50.968323000000112],[-55.549995000000024,50.890830999999991],[-55.555557000000022,50.886383000000023]],[[-55.993889000000024,51.200272000000098],[-55.999999999999943,51.196655000000135],[-56.00111400000003,51.201660000000004],[-55.998055000000022,51.207496999999989],[-55.992774999999995,51.212769000000094],[-55.981383999999935,51.22165700000005],[-55.975554999999986,51.225822000000051],[-55.967772999999966,51.226653999999996],[-55.968329999999867,51.221375000000023],[-55.970550999999944,51.218323000000055],[-55.982498000000021,51.208885000000066],[-55.993889000000024,51.200272000000098]],[[-58.413329999999917,51.238884000000098],[-58.462219000000005,51.216103000000089],[-58.563613999999973,51.228325000000041],[-58.565001999999993,51.23333000000008],[-58.561942999999928,51.239159000000086],[-58.555831999999953,51.242767000000015],[-58.513335999999924,51.264999000000103],[-58.506392999999946,51.268326000000059],[-58.419448999999986,51.274712000000136],[-58.412773000000016,51.267212000000029],[-58.409163999999919,51.256943000000035],[-58.413329999999917,51.238884000000098]],[[-53.756366999999955,48.50326200000012],[-53.997498000000007,48.425552000000039],[-54.011116000000015,48.421660999999972],[-54.025001999999915,48.418602000000021],[-54.048889000000031,48.420546999999999],[-54.057220000000029,48.421936000000017],[-54.072776999999917,48.428604000000007],[-54.081115999999952,48.429992999999968],[-54.094443999999953,48.425827000000083],[-54.100554999999929,48.422493000000088],[-54.147223999999994,48.391380000000083],[-54.138054000000011,48.359161000000029],[-54.134726999999998,48.354438999999957],[-54.12749500000001,48.353324999999984],[-54.118606999999997,48.364998000000014],[-54.088607999999965,48.395545999999968],[-54.075561999999934,48.401932000000102],[-54.069449999999961,48.40387700000008],[-54.054442999999935,48.404160000000047],[-54.045554999999979,48.401932000000102],[-54.029167000000029,48.399437000000034],[-54.021111000000019,48.399162000000047],[-53.998885999999914,48.400826000000052],[-53.99222599999996,48.402489000000003],[-53.97972099999987,48.408042999999964],[-53.913054999999929,48.444153000000085],[-53.756366999999955,48.50326200000012],[-53.674445999999932,48.534164000000089],[-53.647223999999994,48.541107000000068],[-53.631942999999978,48.541382000000056],[-53.623054999999965,48.53916200000009],[-53.586387999999999,48.525269000000037],[-53.574722000000008,48.507216999999969],[-53.558051999999975,48.474709000000018],[-53.588051000000007,48.428047000000106],[-53.562217999999973,48.439155999999969],[-53.533889999999985,48.451935000000049],[-53.48860899999994,48.507216999999969],[-53.461945000000014,48.555266999999958],[-53.46527900000001,48.568603999999993],[-53.465835999999967,48.57416500000005],[-53.465003999999965,48.579436999999984],[-53.437217999999973,48.619987000000094],[-53.424445999999989,48.625549000000035],[-53.345832999999914,48.615828999999962],[-53.33805099999995,48.612494999999967],[-53.313056999999958,48.595267999999976],[-53.305832000000009,48.586655000000007],[-53.303329000000019,48.581940000000145],[-53.226386999999932,48.555549999999926],[-53.216392999999925,48.566939999999988],[-53.153884999999946,48.628601000000003],[-53.079726999999991,48.6988750000001],[-53.072776999999917,48.700272000000041],[-53.067779999999914,48.696380999999974],[-53.02305599999994,48.660820000000001],[-53.018889999999942,48.656380000000013],[-52.978049999999996,48.604439000000127],[-52.976386999999988,48.599159000000043],[-52.976944000000003,48.59388000000007],[-52.987220999999977,48.548050000000046],[-53.053885999999977,48.442764000000068],[-53.075561999999991,48.422493000000088],[-53.097495999999978,48.405266000000097],[-53.1875,48.350829999999974],[-53.194159999999954,48.348602000000028],[-53.201941999999974,48.347488000000055],[-53.209723999999937,48.347771000000023],[-53.218055999999933,48.3491590000001],[-53.24888599999997,48.362770000000069],[-53.261391000000003,48.37082700000002],[-53.266395999999986,48.37499200000002],[-53.345001000000025,48.360275000000058],[-53.388892999999882,48.303879000000109],[-53.615279999999984,48.178046999999935],[-53.621383999999921,48.174712999999997],[-53.634170999999924,48.169991000000095],[-53.662216000000001,48.163321999999994],[-53.668609999999944,48.162490999999989],[-53.676948999999979,48.163879000000065],[-53.694716999999912,48.169158999999979],[-53.71055599999994,48.17582700000014],[-53.892501999999979,48.226936000000137],[-53.901389999999935,48.229156000000103],[-53.934165999999948,48.233330000000137],[-53.940551999999968,48.230819999999937],[-53.945273999999984,48.178879000000052],[-53.944159999999897,48.163879000000065],[-53.917777999999998,48.088043000000027],[-53.912498000000028,48.084160000000054],[-53.904167000000029,48.081940000000088],[-53.823616000000015,48.074439999999981],[-53.793335000000013,48.073608000000092],[-53.77027899999996,48.073326000000009],[-53.733611999999994,48.076103000000103],[-53.718604999999968,48.078049000000021],[-53.696944999999971,48.079162999999994],[-53.689163000000008,48.078880000000026],[-53.692885999999874,48.067993000000001],[-53.688389000000029,48.065989999999999],[-53.685219000000018,48.063660000000141],[-53.683887000000027,48.060822000000144],[-53.684222999999918,48.057822999999985],[-53.687888999999927,48.054825000000108],[-53.691055000000006,48.052658000000065],[-53.698883000000023,48.049328000000003],[-53.736945999999989,48.032767999999976],[-53.763335999999981,48.026382000000012],[-53.799445999999989,48.02165999999994],[-53.836661999999933,48.022217000000012],[-53.852225999999973,48.023048000000074],[-53.876389000000017,48.025826000000052],[-53.893889999999942,48.029991000000052],[-53.90166499999998,48.033607000000075],[-53.909438999999963,48.033882000000119],[-53.916663999999912,48.033332999999971],[-53.923614999999984,48.031662000000097],[-53.924170999999944,48.026657000000057],[-53.919167000000016,48.022490999999945],[-53.911384999999939,48.019157000000007],[-53.893058999999937,48.014442000000145],[-53.794448999999986,47.996384000000091],[-53.779166999999973,47.996658000000025],[-53.695388999999921,48.018218999999988],[-53.69138700000002,48.019215000000145],[-53.668723999999997,48.029880999999989],[-53.650218999999993,48.037884000000133],[-53.607779999999991,48.051102000000071],[-53.605835000000013,48.046387000000038],[-53.619164000000012,47.998878000000047],[-53.622498000000007,47.993050000000096],[-53.723610000000008,47.843880000000013],[-53.737777999999992,47.826660000000061],[-53.787506000000008,47.773048000000074],[-53.793335000000013,47.768599999999935],[-53.801391999999964,47.769989000000123],[-53.807502999999997,47.773604999999975],[-53.825561999999991,47.794998000000078],[-53.852500999999961,47.785271000000137],[-53.850554999999986,47.760551000000135],[-53.837501999999915,47.699432000000058],[-53.760283999999956,47.609993000000145],[-53.631110999999976,47.54332700000009],[-53.550551999999982,47.529159999999933],[-53.545279999999991,47.534439000000134],[-53.542502999999954,47.550270000000069],[-53.541114999999991,47.585266000000047],[-53.497779999999977,47.734717999999987],[-53.495834000000002,47.740273000000059],[-53.461113000000012,47.806655999999975],[-53.434998000000007,47.83776899999998],[-53.30610699999994,47.984161000000029],[-53.290840000000003,47.999435000000119],[-53.274445000000014,48.013329000000056],[-53.170554999999979,48.05360399999995],[-53.110001000000011,48.03943600000008],[-53.101943999999946,48.038048000000003],[-53.095001000000025,48.03943600000008],[-53.053329000000019,48.049721000000034],[-53.041945999999996,48.055824000000143],[-52.996947999999975,48.086380000000077],[-52.974716000000001,48.116385999999977],[-52.959723999999994,48.143051000000014],[-52.956389999999999,48.148605000000032],[-52.926948999999979,48.169991000000095],[-52.919998000000021,48.171379000000002],[-52.902221999999995,48.16304800000006],[-52.886115999999959,48.151100000000042],[-52.881942999999922,48.147491000000059],[-52.83555599999994,48.106383999999991],[-52.831389999999942,48.101661999999919],[-52.832779000000016,48.096939000000134],[-52.838889999999935,48.093605000000139],[-52.871940999999993,48.082214000000022],[-52.880279999999914,48.083327999999995],[-52.898055999999997,48.090546000000018],[-52.904167000000029,48.089714000000072],[-52.911384999999996,48.088043000000027],[-52.917503000000011,48.084716999999955],[-52.928336999999999,48.075553999999954],[-53.058051999999975,47.922493000000031],[-53.05999799999995,47.916939000000013],[-53.059440999999993,47.886658000000125],[-53.075835999999981,47.850830000000087],[-53.158607000000018,47.683052000000089],[-53.178336999999999,47.651382000000012],[-53.183608999999933,47.646385000000123],[-53.201667999999984,47.636383000000137],[-53.221106999999961,47.628601000000003],[-53.240836999999942,47.622489999999914],[-53.259726999999998,47.615829000000019],[-53.265006999999969,47.611664000000019],[-53.267220000000009,47.606102000000078],[-53.261672999999973,47.546386999999982],[-53.175560000000019,47.431381000000101],[-53.128333999999995,47.411102000000142],[-53.121940999999993,47.413321999999994],[-53.111945999999989,47.423607000000118],[-53.083060999999987,47.458327999999995],[-53.065833999999938,47.469986000000063],[-53.013061999999934,47.501389000000074],[-52.995002999999997,47.51138300000008],[-52.951667999999927,47.530823000000055],[-52.919167000000016,47.541663999999969],[-52.907218999999998,47.54833200000013],[-52.896949999999947,47.55860100000001],[-52.849167000000023,47.621101000000124],[-52.842498999999918,47.632767000000115],[-52.840552999999943,47.638329000000056],[-52.837501999999915,47.65415999999999],[-52.838889999999935,47.663879000000009],[-52.841110000000015,47.668602000000021],[-52.841667000000029,47.673324999999977],[-52.840552999999943,47.683876000000055],[-52.798889000000031,47.784164000000033],[-52.791388999999981,47.795547000000056],[-52.78556100000003,47.79972100000009],[-52.779442000000017,47.803047000000106],[-52.770554000000004,47.79972100000009],[-52.704169999999976,47.753882999999973],[-52.700554000000011,47.749435000000005],[-52.657776000000013,47.657493999999986],[-52.614448999999979,47.516662999999937],[-52.620276999999987,47.500275000000101],[-52.625832000000003,47.489158999999972],[-52.653327999999988,47.437767000000008],[-52.718055999999933,47.364998000000014],[-52.787506000000008,47.308043999999938],[-52.818610999999976,47.224159000000043],[-52.849723999999981,47.1616590000001],[-52.845276000000013,47.142493999999942],[-52.843613000000005,47.063880999999981],[-52.844161999999983,47.058601000000067],[-52.852782999999988,47.022491000000002],[-52.884170999999981,46.9741590000001],[-52.909995999999978,46.911658999999986],[-52.92972599999996,46.851662000000033],[-52.932776999999987,46.825554000000068],[-52.934998000000007,46.804993000000024],[-52.938332000000003,46.78916200000009],[-53.090836000000024,46.643326000000002],[-53.102501000000018,46.636658000000011],[-53.161110000000008,46.619986999999981],[-53.169166999999959,46.619713000000047],[-53.192497000000003,46.62332200000003],[-53.207221999999888,46.630272000000105],[-53.213332999999977,46.633881000000088],[-53.315552000000025,46.694709999999986],[-53.354171999999949,46.736938000000009],[-53.361945999999932,46.737495000000081],[-53.384170999999981,46.721375000000023],[-53.410552999999936,46.700828999999999],[-53.426391999999964,46.687210000000107],[-53.451392999999996,46.66137700000013],[-53.463614999999947,46.654160000000047],[-53.521111000000019,46.62082700000002],[-53.532776000000013,46.614159000000029],[-53.561667999999941,46.612770000000069],[-53.569449999999961,46.614159000000029],[-53.577224999999999,46.617493000000024],[-53.607779999999991,46.636107999999979],[-53.613891999999964,46.640274000000034],[-53.617774999999995,46.644157000000007],[-53.635001999999929,46.680823999999973],[-53.643058999999994,46.704437000000098],[-53.64416499999993,46.709160000000111],[-53.648055999999997,46.796661000000029],[-53.647781000000009,46.801932999999963],[-53.645279000000016,46.81249200000002],[-53.639724999999999,46.829163000000051],[-53.636391000000003,46.834717000000069],[-53.594718999999998,46.9447100000001],[-53.64166999999992,46.983879000000002],[-53.633614000000023,47.001105999999993],[-53.577781999999956,47.085265999999933],[-53.55083499999995,47.106659000000036],[-53.539444000000003,47.114158999999972],[-53.591385000000002,47.156096999999988],[-53.646392999999989,47.105270000000075],[-53.703612999999962,47.053047000000106],[-53.823059000000001,46.956657000000064],[-53.894164999999987,46.899994000000106],[-53.945830999999941,46.858887000000038],[-54.053328999999962,46.794998000000135],[-54.097220999999934,46.799438000000123],[-54.17888599999992,46.81610100000006],[-54.187774999999988,46.819160000000011],[-54.18999500000001,46.823607999999979],[-54.190833999999995,46.828605999999979],[-54.196387999999956,46.862494999999967],[-54.196663000000001,46.883330999999998],[-54.193329000000006,46.893607999999972],[-54.160827999999981,46.981934000000024],[-54.131942999999978,47.012496999999996],[-54.11500499999994,47.039719000000105],[-54.092498999999975,47.079437000000098],[-54.066665999999998,47.131104000000107],[-53.993889000000024,47.265274000000034],[-53.964721999999995,47.299721000000034],[-53.928611999999987,47.302773000000116],[-53.921943999999996,47.304161000000022],[-53.879997000000003,47.348045000000127],[-53.875557000000015,47.354163999999969],[-53.867500000000007,47.402771000000087],[-53.879439999999931,47.43082400000003],[-53.900275999999963,47.486107000000061],[-53.891669999999976,47.524711999999965],[-53.885558999999944,47.576941999999974],[-53.894721999999945,47.6055530000001],[-53.896950000000004,47.609993000000145],[-53.983886999999925,47.75777400000004],[-54.003333999999995,47.778877000000136],[-54.033332999999914,47.796661000000029],[-54.195273999999984,47.857498000000021],[-54.194999999999993,47.843048000000124],[-54.197219999999902,47.832214000000079],[-54.212776000000019,47.777771000000087],[-54.219161999999926,47.766106000000036],[-54.223884999999939,47.759995000000117],[-54.259170999999981,47.715271000000143],[-54.337776000000019,47.621658000000025],[-54.435271999999998,47.505554000000075],[-54.468605000000025,47.441658000000075],[-54.477492999999981,47.404991000000052],[-54.472495999999978,47.401099999999985],[-54.477492999999981,47.395828000000051],[-54.482772999999952,47.391663000000051],[-54.511116000000015,47.372765000000015],[-54.517219999999952,47.369438000000059],[-54.601394999999968,47.345268000000033],[-54.611388999999974,47.353049999999996],[-54.613060000000019,47.35833000000008],[-54.61333499999995,47.362770000000069],[-54.606948999999986,47.374434999999949],[-54.601944000000003,47.379715000000033],[-54.596663999999862,47.383880999999917],[-54.559998000000007,47.413879000000065],[-54.529166999999973,47.442214999999976],[-54.489998000000014,47.486382000000049],[-54.417220999999984,47.583603000000096],[-54.410827999999867,47.594994000000042],[-54.413329999999917,47.599715999999944],[-54.418334999999956,47.603607000000011],[-54.430557000000022,47.597771000000137],[-54.440833999999938,47.586937000000091],[-54.508614000000023,47.513328999999999],[-54.53194400000001,47.479987999999992],[-54.539444000000003,47.468048000000124],[-54.563613999999973,47.439987000000031],[-54.578887999999893,47.423882000000106],[-54.604720999999984,47.401932000000102],[-54.621383999999978,47.389992000000007],[-54.700279000000023,47.357773000000009],[-54.719993999999929,47.352218999999991],[-54.727218999999991,47.351387000000045],[-54.818610999999862,47.363609000000054],[-54.819450000000018,47.368599000000074],[-54.803054999999972,47.380546999999979],[-54.793616999999983,47.391936999999984],[-54.786667000000023,47.413879000000065],[-54.787506000000008,47.418884000000105],[-54.796111999999994,47.420830000000024],[-54.856392000000028,47.390549000000078],[-54.980552999999929,47.285552999999936],[-55.039169000000015,47.225821999999994],[-55.043892000000028,47.220825000000048],[-55.045554999999979,47.215271000000087],[-55.043335000000013,47.210548000000074],[-55.05361199999993,47.150826000000109],[-55.065833999999995,47.093323000000112],[-55.069450000000018,47.082214000000022],[-55.100280999999995,47.05471],[-55.149444999999957,47.012215000000083],[-55.154716000000008,47.008049000000028],[-55.193329000000006,46.984993000000145],[-55.225829999999974,46.934433000000126],[-55.230277999999942,46.928329000000076],[-55.236945999999932,46.923607000000004],[-55.246947999999975,46.916939000000013],[-55.258613999999966,46.91027100000008],[-55.358337000000006,46.874161000000129],[-55.384170999999924,46.865829000000133],[-55.399993999999936,46.865829000000133],[-55.456664999999987,46.874710000000107],[-55.463615000000004,46.877486999999974],[-55.468604999999968,46.881660000000124],[-55.471938999999963,46.886383000000137],[-55.626944999999921,46.868881000000101],[-55.634170999999981,46.866661000000079],[-55.689719999999966,46.858329999999967],[-55.803328999999962,46.860549999999989],[-55.845832999999971,46.86971299999999],[-55.915000999999961,46.88749700000011],[-55.923614999999927,46.889717000000076],[-55.931389000000024,46.892769000000044],[-55.946663000000001,46.899436999999978],[-55.966110000000015,46.909988000000112],[-55.98082699999992,46.932213000000104],[-55.982773000000009,46.936652999999978],[-55.984168999999952,46.941658000000018],[-55.983054999999979,46.952492000000063],[-55.980552999999986,46.957771000000037],[-55.96665999999999,46.981377000000123],[-55.952498999999989,46.996383999999921],[-55.886948000000018,47.056099000000017],[-55.87110899999999,47.069160000000124],[-55.865554999999972,47.072768999999937],[-55.775276000000019,47.10193600000008],[-55.768607999999972,47.103325000000041],[-55.745551999999918,47.10443900000007],[-55.738892000000021,47.10443900000007],[-55.723609999999951,47.104164000000026],[-55.715553,47.103050000000053],[-55.698050999999964,47.098045000000013],[-55.68250299999994,47.091377000000023],[-55.674445999999989,47.090270999999973],[-55.586945000000014,47.110275000000115],[-55.573616000000015,47.11360900000011],[-55.493331999999896,47.133880999999974],[-55.487777999999992,47.137214999999969],[-55.329445000000021,47.242493000000024],[-55.298339999999939,47.267211999999972],[-55.290557999999976,47.278328000000101],[-55.285278000000005,47.294998000000021],[-55.28583500000002,47.310272000000111],[-55.286948999999993,47.314995000000067],[-55.286117999999988,47.325554000000125],[-55.269721999999945,47.390830999999991],[-55.266662999999994,47.396659999999997],[-55.262221999999895,47.402771000000087],[-55.256949999999961,47.407211000000075],[-55.202224999999999,47.44609800000012],[-55.179169000000002,47.460548000000017],[-55.172501000000011,47.463882000000012],[-55.107779999999991,47.483604000000071],[-55.100554999999986,47.484160999999972],[-55.083611000000019,47.481101999999964],[-55.075835999999867,47.480820000000108],[-55.040282999999931,47.484993000000031],[-54.951392999999882,47.504997000000003],[-54.868057000000022,47.543883999999991],[-54.845832999999971,47.556938000000059],[-54.841666999999973,47.563324000000136],[-54.841385000000002,47.583603000000096],[-54.845551,47.633881000000088],[-54.949439999999925,47.599715999999944],[-54.956389999999999,47.59804500000007],[-54.970832999999971,47.596656999999993],[-55.019278999999926,47.621101000000124],[-55.028277999999887,47.620766000000117],[-55.033278999999936,47.621601000000112],[-55.036109999999894,47.623936000000015],[-55.037612999999908,47.626601999999991],[-55.037440999999887,47.62977200000006],[-55.03561000000002,47.633269999999982],[-55.029612999999927,47.639598999999976],[-55.013779,47.65310299999993],[-55.00777800000003,47.65943500000003],[-54.956389999999999,47.741379000000109],[-54.947494999999947,47.75360900000004],[-54.938048999999978,47.771103000000096],[-54.936110999999926,47.781661999999983],[-54.943054000000018,47.781105000000082],[-54.948607999999922,47.776657000000114],[-55.011391000000003,47.721374999999966],[-55.021942000000024,47.711661999999933],[-55.025276000000019,47.705268999999987],[-55.027221999999995,47.695267000000058],[-55.03055599999999,47.684158000000139],[-55.033614999999941,47.678329000000133],[-55.119114000000025,47.616936000000123],[-55.122443999999916,47.614269000000093],[-55.126281999999946,47.612774000000002],[-55.130774999999915,47.611938000000123],[-55.135777000000019,47.613605000000007],[-55.262778999999966,47.650543000000084],[-55.349167000000023,47.704437000000098],[-55.34833500000002,47.710274000000027],[-55.357506000000001,47.726097000000095],[-55.365004999999996,47.726379000000122],[-55.379722999999956,47.724991000000045],[-55.427497999999957,47.711661999999933],[-55.432502999999997,47.70638299999996],[-55.461944999999957,47.646103000000039],[-55.464721999999938,47.640274000000034],[-55.467498999999975,47.619155999999919],[-55.46665999999999,47.614159000000029],[-55.461387999999943,47.610275000000001],[-55.454444999999964,47.611107000000118],[-55.446663000000001,47.623046999999985],[-55.436110999999926,47.631659999999954],[-55.430000000000007,47.634163000000115],[-55.423057999999969,47.635826000000066],[-55.415276000000006,47.63249200000007],[-55.407776000000013,47.624161000000015],[-55.400276000000019,47.615547000000106],[-55.398337999999967,47.610275000000001],[-55.389724999999999,47.58638000000002],[-55.400276000000019,47.514717000000076],[-55.406661999999926,47.493050000000039],[-55.40972099999999,47.487213000000054],[-55.414161999999919,47.481101999999964],[-55.429726000000016,47.467209000000139],[-55.43638599999997,47.465546000000018],[-55.498610999999983,47.453880000000026],[-55.505835999999931,47.453322999999955],[-55.526108000000022,47.454436999999928],[-55.555274999999938,47.440269000000058],[-55.560555000000022,47.436104000000057],[-55.565001999999993,47.429993000000024],[-55.587776000000019,47.398604999999975],[-55.625,47.463608000000079],[-55.654167000000029,47.495270000000062],[-55.795279999999991,47.492767000000072],[-55.914443999999946,47.437767000000008],[-55.920279999999934,47.435265000000129],[-55.925560000000019,47.439156000000025],[-55.923889000000031,47.444709999999986],[-55.91972399999986,47.450829000000056],[-55.831673000000023,47.517212000000086],[-55.788895000000025,47.551102000000014],[-55.745834000000002,47.585266000000047],[-55.77305599999994,47.579720000000009],[-55.824172999999973,47.566382999999973],[-55.892226999999991,47.5366590000001],[-55.987777999999992,47.500549000000035],[-56.104172000000005,47.463608000000079],[-56.110557999999855,47.462494000000106],[-56.11860699999994,47.463608000000079],[-56.158889999999928,47.484718000000044],[-56.169167000000016,47.492493000000138],[-56.172500999999897,47.49721500000004],[-56.172500999999897,47.501663000000008],[-56.168059999999969,47.507216999999969],[-56.162498000000028,47.51138300000008],[-56.12027699999993,47.519157000000064],[-56.044448999999986,47.535271000000023],[-55.941939999999931,47.561661000000072],[-55.889998999999932,47.578330999999991],[-55.639998999999989,47.668053000000043],[-55.633330999999998,47.671104000000071],[-55.628333999999995,47.674713000000054],[-55.635001999999986,47.678329000000133],[-55.642501999999979,47.678604000000121],[-55.649993999999992,47.677773000000116],[-55.663886999999932,47.675552000000039],[-55.704169999999976,47.664992999999981],[-55.75,47.649437000000034],[-55.756110999999976,47.646942000000024],[-55.774718999999948,47.638329000000056],[-55.80471799999998,47.624435000000119],[-55.824447999999961,47.618599000000017],[-55.838889999999935,47.617210000000057],[-55.855835000000013,47.620270000000119],[-55.903327999999931,47.645270999999923],[-55.913611999999944,47.653046000000018],[-55.917503000000011,47.657493999999986],[-55.919448999999929,47.667213000000004],[-55.918609999999944,47.673049999999989],[-55.916388999999981,47.678329000000133],[-55.91194200000001,47.684432999999956],[-55.901389999999992,47.693047000000035],[-55.895554000000004,47.696655000000135],[-55.866393999999957,47.713882000000126],[-55.83277899999996,47.742493000000081],[-55.815001999999993,47.772491000000002],[-55.799445999999875,47.799164000000019],[-55.742226000000016,47.923325000000091],[-55.746947999999975,47.93249499999996],[-55.754447999999968,47.94110100000006],[-55.767219999999952,47.953323000000069],[-55.773613000000012,47.956940000000031],[-55.78055599999999,47.95526899999993],[-55.817504999999983,47.886939999999981],[-55.835273999999913,47.850830000000087],[-55.835555999999997,47.845543000000134],[-55.847220999999934,47.806938000000002],[-55.849998000000028,47.801102000000128],[-55.854445999999996,47.794716000000051],[-55.865279999999984,47.786110000000122],[-55.877219999999966,47.778602999999976],[-55.888892999999996,47.773048000000074],[-56.049727999999959,47.699432000000058],[-56.087501999999972,47.736938000000009],[-56.081116000000009,47.739715999999987],[-56.053611999999987,47.77388000000002],[-56.057502999999997,47.778327999999988],[-56.064163000000008,47.776657000000114],[-56.111671000000001,47.763610999999969],[-56.125,47.757216999999969],[-56.185271999999998,47.680274999999995],[-56.160278000000005,47.642220000000123],[-56.154998999999862,47.638329000000056],[-56.161384999999939,47.634163000000115],[-56.173332000000016,47.629714999999976],[-56.187499999999943,47.627213000000097],[-56.358336999999892,47.603324999999984],[-56.394722000000002,47.601105000000132],[-56.410277999999948,47.601387000000045],[-56.418892000000028,47.601936000000137],[-56.443053999999904,47.605827000000033],[-56.546950999999979,47.613883999999985],[-56.615554999999915,47.613327000000083],[-56.644164999999987,47.596100000000092],[-56.641113000000018,47.592216000000064],[-56.639998999999989,47.587212000000079],[-56.644164999999987,47.581108000000086],[-56.65055099999995,47.578330999999991],[-56.774719000000005,47.531937000000028],[-56.840836000000024,47.52137799999997],[-56.902221999999995,47.552490000000091],[-56.924445999999989,47.562209999999993],[-56.956107999999972,47.574996999999996],[-56.96527900000001,47.57777400000009],[-56.992500000000007,47.583878000000141],[-56.999725000000012,47.584717000000069],[-57.014724999999942,47.583878000000141],[-57.096663999999976,47.56610100000006],[-57.118332000000009,47.563881000000038],[-57.126105999999993,47.563881000000038],[-57.134445000000028,47.566382999999973],[-57.150276000000019,47.572769000000051],[-57.163329999999917,47.579720000000009],[-57.204720000000009,47.59304800000001],[-57.530829999999867,47.630821000000026],[-57.657776000000013,47.60305000000011],[-57.779441999999904,47.627487000000031],[-57.882499999999993,47.651382000000012],[-58.027495999999928,47.694153000000028],[-58.036391999999978,47.696098000000063],[-58.359443999999939,47.647217000000012],[-58.690552000000025,47.598877000000016],[-58.771110999999962,47.59137700000008],[-58.861945999999932,47.589157000000114],[-58.885001999999872,47.592766000000097],[-58.894164999999873,47.59388000000007],[-58.937499999999943,47.589989000000003],[-59.076667999999984,47.571663000000001],[-59.102130999999929,47.564251000000127],[-59.11361699999992,47.558327000000077],[-59.118889000000024,47.554710000000114],[-59.135559000000001,47.556380999999988],[-59.161941999999954,47.561661000000072],[-59.297782999999868,47.606658999999979],[-59.304442999999992,47.609993000000145],[-59.305831999999953,47.614998000000014],[-59.309440999999993,47.661102000000085],[-59.309440999999993,47.671379000000059],[-59.30499999999995,47.724991000000045],[-59.3024979999999,47.736107000000004],[-59.325561999999991,47.807213000000047],[-59.329726999999991,47.816383000000087],[-59.369164000000012,47.852775999999949],[-59.40193899999997,47.880271999999991],[-59.40694400000001,47.889717000000076],[-59.404715999999951,47.900269000000094],[-59.400832999999921,47.90665400000006],[-59.39166999999992,47.916664000000026],[-59.378051999999911,47.922493000000031],[-59.365554999999915,47.924995000000081],[-59.328612999999905,47.928879000000109],[-59.321945000000028,47.930549999999982],[-59.31639100000001,47.934158000000082],[-59.31138599999997,47.938881000000094],[-59.267775999999969,47.982208000000071],[-59.265006999999912,47.988045000000056],[-59.262778999999966,47.999435000000119],[-59.246947999999975,48.011940000000038],[-59.230277999999942,48.02276599999999],[-59.218605000000025,48.029160000000047],[-59.091384999999946,48.090271000000143],[-59.053885999999864,48.105552999999986],[-59.041114999999934,48.110275000000058],[-59.020554000000004,48.116385999999977],[-58.958054000000004,48.149993999999992],[-58.75,48.287498000000085],[-58.701392999999996,48.319716999999969],[-58.691108999999983,48.32888000000014],[-58.686385999999914,48.334160000000054],[-58.682502999999997,48.340546000000131],[-58.678336999999999,48.351936000000023],[-58.675835000000006,48.363051999999925],[-58.670279999999991,48.37499200000002],[-58.598884999999939,48.423325000000034],[-58.587775999999963,48.430550000000039],[-58.568892999999889,48.438599000000067],[-58.555831999999953,48.443047000000035],[-58.514724999999999,48.452773999999977],[-58.500556999999958,48.455551000000071],[-58.492774999999995,48.455551000000071],[-58.492774999999995,48.450272000000098],[-58.497779999999977,48.44582400000013],[-58.518889999999999,48.441375999999991],[-58.526108000000022,48.440544000000102],[-58.546394000000021,48.434990000000084],[-58.558891000000017,48.42971799999998],[-58.588889999999935,48.412765999999976],[-58.599998000000028,48.405822999999998],[-58.601112000000001,48.400826000000052],[-58.59194199999996,48.398879999999963],[-58.483611999999994,48.427773000000002],[-58.470832999999971,48.43221299999999],[-58.464721999999995,48.436377999999991],[-58.449439999999925,48.449158000000125],[-58.4183349999999,48.486655999999982],[-58.420279999999991,48.508049000000085],[-58.569449999999961,48.538605000000018],[-58.673614999999984,48.554710000000057],[-58.682502999999997,48.554993000000024],[-58.697219999999959,48.553046999999992],[-58.732215999999994,48.545830000000024],[-58.765556000000004,48.535828000000095],[-58.778052999999886,48.531937000000028],[-58.812499999999943,48.52388000000002],[-58.857506000000001,48.518599999999992],[-58.931389000000024,48.511939999999981],[-58.954720000000009,48.510825999999952],[-58.979163999999969,48.512497000000053],[-58.988335000000006,48.514442000000031],[-59.004722999999956,48.520271000000037],[-59.013335999999924,48.522217000000126],[-59.091667000000029,48.508331000000112],[-59.105559999999969,48.50471500000009],[-59.118889000000024,48.50110600000005],[-59.146392999999875,48.493049999999982],[-59.192771999999991,48.477767999999969],[-59.232497999999964,48.468597000000045],[-59.246947999999975,48.46665999999999],[-59.255279999999971,48.467490999999995],[-59.260558999999944,48.471931000000041],[-59.261115999999959,48.476653999999996],[-59.232773000000009,48.523048000000131],[-59.228881999999999,48.529160000000104],[-59.215003999999965,48.545547000000056],[-59.209998999999925,48.549995000000024],[-59.137504999999976,48.598876999999959],[-59.084166999999866,48.626380999999981],[-59.077782000000013,48.629158000000075],[-59.050277999999935,48.635551000000021],[-59.03055599999999,48.641937000000098],[-59.02416999999997,48.644714000000022],[-58.908889999999985,48.701934999999992],[-58.828888000000006,48.750832000000116],[-58.811667999999941,48.76166500000005],[-58.799727999999959,48.768050999999957],[-58.774719000000005,48.77887700000008],[-58.767775999999969,48.775551000000064],[-58.772498999999982,48.769989000000123],[-58.815001999999936,48.735825000000091],[-58.849723999999867,48.714996000000099],[-58.873885999999914,48.701659999999947],[-58.891113000000018,48.690826000000072],[-58.912773000000016,48.674713000000054],[-58.938605999999879,48.653603000000089],[-58.947776999999917,48.642769000000044],[-58.955832999999984,48.630272000000048],[-58.958610999999962,48.624161000000129],[-58.958610999999962,48.613883999999985],[-58.955832999999984,48.609436000000017],[-58.947494999999947,48.601105000000132],[-58.896950000000004,48.55193300000002],[-58.888335999999924,48.551101999999958],[-58.743057000000022,48.560822000000087],[-58.728332999999964,48.56249200000002],[-58.721381999999949,48.564438000000109],[-58.715003999999965,48.567215000000033],[-58.709442000000024,48.570831000000055],[-58.704445000000021,48.575271999999984],[-58.695549000000028,48.586937000000091],[-58.68332700000002,48.605827000000033],[-58.676666000000012,48.618050000000096],[-58.672501000000011,48.629433000000063],[-58.669998000000021,48.640831000000105],[-58.671386999999925,48.650825999999995],[-58.674171000000001,48.65526600000004],[-58.679442999999992,48.66944100000012],[-58.680832000000009,48.68471500000004],[-58.658051,48.743049999999982],[-58.618331999999896,48.779716000000064],[-58.543892000000028,48.860824999999977],[-58.535834999999963,48.878601000000117],[-58.506667999999934,48.949431999999945],[-58.506667999999934,48.98054499999995],[-58.503333999999995,48.997490000000084],[-58.500838999999928,49.003608999999926],[-58.400832999999864,49.127487000000087],[-58.396110999999962,49.131377999999984],[-58.351943999999889,49.15026899999998],[-58.348884999999996,49.145828000000108],[-58.342967999999985,49.100201000000027],[-58.365634999999997,49.079922000000067],[-58.368019000000004,49.061428000000035],[-58.353702999999939,49.056656000000032],[-58.31075299999992,49.068584000000044],[-58.292857999999967,49.072762000000068],[-58.240554999999972,49.070274000000097],[-58.17832199999998,49.063217000000066],[-58.143726000000015,49.041740000000118],[-58.09833500000002,48.99221799999998],[-58.084723999999937,48.985268000000133],[-58.077781999999956,48.981934000000138],[-58.060279999999921,48.976096999999982],[-58.050551999999982,48.973320000000115],[-57.99610899999999,48.96138000000002],[-57.961387999999999,48.956657000000007],[-57.938605999999993,48.958328000000051],[-57.90166499999998,48.96276899999998],[-57.888054000000011,48.966102999999976],[-57.881667999999991,48.96888000000007],[-57.892226999999934,48.981658999999922],[-57.900551000000007,48.9847180000001],[-57.929442999999992,48.978874000000076],[-57.958611000000019,48.976096999999982],[-57.974716000000001,48.976096999999982],[-58.009223999999961,48.98041500000005],[-58.02777900000001,48.985549999999989],[-58.035834999999963,48.988602000000128],[-58.050551999999982,48.99582700000002],[-58.09332999999998,49.025825999999995],[-58.103888999999924,49.033607000000075],[-58.108054999999922,49.037772999999959],[-58.135276999999974,49.082771000000037],[-58.144447000000014,49.12193300000007],[-58.122612000000004,49.124931000000004],[-58.119281999999998,49.127102000000036],[-58.115608000000009,49.129105000000038],[-58.111110999999994,49.129771999999946],[-58.094775999999968,49.124603000000036],[-58.078776999999945,49.121769000000029],[-58.049445999999932,49.120270000000005],[-57.925559999999962,49.123047000000042],[-57.918610000000001,49.124709999999993],[-57.913329999999974,49.129158000000132],[-57.882773999999927,49.157767999999976],[-57.878882999999973,49.170273000000122],[-57.89805599999994,49.158600000000092],[-57.912215999999944,49.152771000000087],[-57.925834999999893,49.148331000000042],[-57.939437999999996,49.144997000000046],[-57.947494999999947,49.144997000000046],[-58.057220000000029,49.144997000000046],[-58.075558000000001,49.153271000000075],[-58.081054999999992,49.154438000000141],[-58.086055999999928,49.156269000000123],[-58.092555999999945,49.160934000000111],[-58.09589399999993,49.166271000000108],[-58.064055999999994,49.183350000000132],[-58.063057000000015,49.185451999999941],[-58.065455999999983,49.190414000000033],[-58.060622999999964,49.188583000000051],[-58.05495499999995,49.187583999999958],[-58.034957999999904,49.185749000000044],[-58.025459000000012,49.185749000000044],[-58.011292000000026,49.186252999999965],[-58.002456999999993,49.188251000000093],[-57.995621000000028,49.192078000000038],[-57.988785000000007,49.197247000000118],[-57.932219999999973,49.234160999999972],[-57.928054999999972,49.240273000000116],[-57.93638599999997,49.239716000000044],[-57.995162999999991,49.236885000000086],[-58.003330000000005,49.234215000000006],[-58.011662000000001,49.23071299999998],[-58.031001999999944,49.224548000000027],[-58.03566399999994,49.223713000000032],[-58.049331999999936,49.222717000000046],[-58.058829999999944,49.223049000000003],[-58.191939999999931,49.236382000000049],[-58.200835999999867,49.239716000000044],[-58.211945000000014,49.24721500000004],[-58.233886999999982,49.27304799999996],[-58.236663999999905,49.27748900000006],[-58.240836999999942,49.286942000000067],[-58.241942999999992,49.291663999999969],[-58.241942999999992,49.302215999999987],[-58.223327999999924,49.390274000000034],[-58.216392999999982,49.402488999999946],[-58.192497000000003,49.429436000000067],[-58.157776000000013,49.464439000000027],[-58.152221999999995,49.468879999999956],[-58.043892000000028,49.541382000000056],[-58.032218999999941,49.548332000000073],[-58.019164999999873,49.553879000000052],[-57.998336999999992,49.559158000000025],[-57.971107000000018,49.554993000000024],[-57.915112000000022,49.532047000000034],[-57.910609999999963,49.530216000000053],[-57.903445999999974,49.525551000000064],[-57.861445999999944,49.505885999999975],[-57.746947999999918,49.453606000000093],[-57.715004000000022,49.454712000000086],[-57.707503999999915,49.455551000000071],[-57.701110999999969,49.458327999999995],[-57.696388000000013,49.463608000000022],[-57.698883000000023,49.468323000000055],[-57.705832999999984,49.47165700000005],[-57.788895000000025,49.500832000000116],[-57.864222999999981,49.534939000000065],[-57.869389000000012,49.535439000000054],[-57.872719000000018,49.537773000000072],[-57.942223000000013,49.60305000000011],[-57.944716999999969,49.607498000000078],[-57.951110999999912,49.652771000000143],[-57.951110999999912,49.65776800000009],[-57.948333999999932,49.674164000000076],[-57.935271999999998,49.708602999999925],[-57.926391999999964,49.726379000000065],[-57.899993999999992,49.762215000000083],[-57.82916999999992,49.845543000000077],[-57.671111999999937,50.084160000000054],[-57.631667999999934,50.144714000000079],[-57.543334999999956,50.29833200000013],[-57.524445000000014,50.334159999999997],[-57.521384999999952,50.345267999999976],[-57.521111000000019,50.35054800000006],[-57.515555999999947,50.373604000000057],[-57.507224999999949,50.390831000000105],[-57.498336999999992,50.408600000000035],[-57.490836999999999,50.420830000000137],[-57.448607999999979,50.486106999999947],[-57.377220000000023,50.584434999999928],[-57.37249799999995,50.590828000000101],[-57.361114999999927,50.598602000000085],[-57.341667000000029,50.607498000000021],[-57.310059000000024,50.608940000000132],[-57.300220000000024,50.609776000000068],[-57.295559000000026,50.60927200000009],[-57.291224999999997,50.607105000000047],[-57.276222000000018,50.601440000000082],[-57.245276999999987,50.596382000000062],[-57.228049999999939,50.594437000000084],[-57.204444999999964,50.596100000000035],[-57.173614999999927,50.60083000000003],[-57.166945999999996,50.603325000000098],[-57.161384999999996,50.606384000000048],[-57.150832999999921,50.616104000000121],[-57.148055999999997,50.621933000000126],[-57.154715999999951,50.625549000000035],[-57.171943999999996,50.624992000000134],[-57.276442999999915,50.640717000000052],[-57.378608999999926,50.687767000000065],[-57.334166999999923,50.711937000000091],[-57.325004999999919,50.711662000000047],[-57.236945999999989,50.727211000000011],[-57.162498000000028,50.751105999999993],[-57.14833799999991,50.756103999999993],[-57.089438999999913,50.780548000000124],[-57.072501999999986,50.793884000000048],[-56.983054999999979,50.868324000000086],[-56.927498000000014,50.915824999999984],[-56.898055999999997,51.019440000000088],[-56.899170000000026,51.024436999999978],[-56.903327999999988,51.028603000000089],[-56.909995999999978,51.03276800000009],[-56.927223000000026,51.038605000000018],[-56.964721999999995,51.04332700000009],[-56.921669000000009,51.051384000000098],[-56.892226999999991,51.060272000000055],[-56.879996999999946,51.065543999999989],[-56.784446999999943,51.137771999999984],[-56.781386999999995,51.143608000000029],[-56.78194400000001,51.149162000000047],[-56.785278000000005,51.153046000000074],[-56.793334999999956,51.16137700000013],[-56.80972300000002,51.183601000000067],[-56.793892000000028,51.239989999999921],[-56.744164000000012,51.293052999999929],[-56.738608999999997,51.298881999999935],[-56.733330000000024,51.302773000000002],[-56.68250299999994,51.339432000000102],[-56.623885999999914,51.366386000000034],[-56.616942999999935,51.368881000000044],[-56.512504999999976,51.402214000000072],[-56.476661999999919,51.411658999999986],[-56.461945000000014,51.414992999999981],[-56.45416999999992,51.415543000000014],[-56.271384999999952,51.471656999999993],[-56.110557999999855,51.523879999999963],[-56.011391000000003,51.56638300000003],[-55.998336999999992,51.572220000000016],[-55.960281000000009,51.593880000000013],[-55.943329000000006,51.606384000000048],[-55.918609999999944,51.62110100000001],[-55.90555599999999,51.626937999999996],[-55.898055999999997,51.628601000000117],[-55.890282000000013,51.629433000000006],[-55.837775999999963,51.621376000000055],[-55.846389999999928,51.60193600000008],[-55.857779999999991,51.593323000000112],[-55.885001999999929,51.562492000000134],[-55.886664999999937,51.556938000000002],[-55.886948000000018,51.551933000000133],[-55.887222000000008,51.500274999999988],[-55.886116000000015,51.495270000000119],[-55.87777699999998,51.492218000000037],[-55.694442999999978,51.481102000000078],[-55.639998999999989,51.481934000000024],[-55.648612999999955,51.485267999999962],[-55.68360899999999,51.5],[-55.729720999999984,51.543327000000033],[-55.737503000000004,51.552490000000034],[-55.739166000000012,51.556656000000089],[-55.73860899999994,51.567214999999976],[-55.735274999999945,51.573051000000021],[-55.724716000000001,51.583603000000039],[-55.718605000000025,51.587212000000022],[-55.653327999999988,51.590546000000018],[-55.631667999999991,51.569717000000026],[-55.625,51.565544000000102],[-55.598610000000008,51.561377999999991],[-55.589721999999995,51.560271999999941],[-55.581389999999942,51.560271999999941],[-55.574448000000018,51.562767000000008],[-55.547501000000011,51.584991000000116],[-55.515838999999971,51.602219000000048],[-55.458610999999962,51.592216000000008],[-55.411110000000008,51.580826000000116],[-55.40555599999999,51.576942000000088],[-55.404442000000017,51.571938000000102],[-55.405273000000022,51.561661000000129],[-55.40694400000001,51.556099000000017],[-55.454444999999964,51.455268999999987],[-55.492226000000016,51.377769000000058],[-55.508057000000008,51.363327000000083],[-55.597778000000005,51.303604000000064],[-55.612777999999935,51.301102000000128],[-55.62222300000002,51.30332199999998],[-55.702782000000013,51.328049000000078],[-55.820557000000008,51.350830000000087],[-56.030555999999876,51.378600999999946],[-56.078338999999971,51.36971299999999],[-56.085555999999997,51.368323999999973],[-56.096389999999985,51.318329000000006],[-56.025557999999876,51.238327000000027],[-56.012252999999987,51.212337000000048],[-55.992561000000023,51.176575000000128],[-55.959441999999967,51.197487000000081],[-55.851394999999968,51.226936000000023],[-55.837775999999963,51.230545000000063],[-55.769164999999987,51.216934000000094],[-55.760833999999988,51.213881999999955],[-55.726105000000018,51.190544000000045],[-55.712776000000019,51.178047000000049],[-55.709998999999982,51.173607000000061],[-55.719161999999983,51.123047000000042],[-55.732497999999964,51.079994000000113],[-55.735557999999912,51.074165000000107],[-55.751113999999973,51.058327000000077],[-55.756950000000018,51.053879000000109],[-55.796111999999994,51.03916200000009],[-55.805557000000022,51.009163000000058],[-55.859169000000009,50.942490000000021],[-55.999442999999872,50.788605000000075],[-56.068893000000003,50.724434000000088],[-56.092278000000022,50.725716000000091],[-56.097279000000015,50.725880000000018],[-56.101279999999917,50.728045999999949],[-56.125832000000003,50.754166000000055],[-56.130829000000006,50.763329000000056],[-56.133330999999998,50.773048000000017],[-56.128052000000025,50.846382000000062],[-56.12222300000002,50.863884000000098],[-56.119720000000029,50.869156000000032],[-56.116394000000014,50.874992000000077],[-56.107223999999974,50.887214999999969],[-56.103888999999981,50.893326000000002],[-56.103888999999981,50.898331000000042],[-56.107779999999934,50.902771000000087],[-56.12222300000002,50.899437000000091],[-56.143058999999937,50.892494000000113],[-56.155272999999966,50.885551000000135],[-56.172500999999897,50.85582700000009],[-56.157218999999941,50.690826000000072],[-56.141272999999956,50.671047000000101],[-56.135776999999962,50.669884000000138],[-56.163329999999917,50.617767000000072],[-56.258614000000023,50.502777000000094],[-56.323615999999959,50.446380999999974],[-56.423057999999912,50.352776000000006],[-56.421943999999939,50.347771000000137],[-56.422226000000023,50.342491000000052],[-56.423614999999984,50.336937000000091],[-56.426666000000012,50.331108000000086],[-56.462501999999915,50.272217000000126],[-56.501944999999921,50.214439000000084],[-56.511947999999961,50.203606000000093],[-56.555832000000009,50.167496000000028],[-56.635276999999974,50.106383999999991],[-56.743056999999965,50.022766000000104],[-56.767501999999922,49.962212000000079],[-56.778610000000015,49.933875999999998],[-56.78194400000001,49.917496000000028],[-56.775001999999972,49.919158999999979],[-56.726661999999976,49.916100000000029],[-56.759845999999982,49.837275999999974],[-56.82790399999999,49.785000000000082],[-56.866863000000023,49.777602999999999],[-56.90533099999999,49.747520000000122],[-56.820999000000029,49.74209600000006],[-56.784007999999972,49.731243000000006],[-56.782776000000013,49.690826000000072],[-56.815552000000025,49.594994000000042],[-56.818610999999976,49.588882000000012],[-56.848884999999939,49.544441000000006],[-56.843055999999933,49.548050000000046],[-56.826667999999984,49.562767000000008],[-56.782776000000013,49.609993000000088],[-56.763061999999991,49.631378000000041],[-56.749167999999884,49.64916199999999],[-56.735557999999969,49.666939000000013],[-56.712501999999972,49.696380999999974],[-56.677779999999927,49.733604000000128],[-56.598609999999894,49.811935000000062],[-56.56138599999997,49.842215999999951],[-56.477776000000006,49.892220000000009],[-56.464164999999923,49.896385000000009],[-56.431945999999982,49.890549000000135],[-56.412216000000001,49.909714000000122],[-56.388054000000011,49.943047000000092],[-56.385001999999929,49.949158000000011],[-56.330284000000006,50.024994000000106],[-56.324172999999973,50.029990999999995],[-56.237777999999992,50.100273000000072],[-56.220832999999971,50.112495000000024],[-56.208892999999989,50.120270000000119],[-56.160278000000005,50.148048000000074],[-56.153884999999946,50.150543000000084],[-56.132499999999993,50.155548000000124],[-56.12471800000003,50.15638000000007],[-56.116660999999965,50.153046000000074],[-56.067222999999956,50.096382000000006],[-56.065001999999936,50.091377000000136],[-56.005004999999983,50.031380000000013],[-55.938605999999936,50.036385000000053],[-55.905273000000022,50.033882000000062],[-55.896111000000019,50.031937000000084],[-55.881110999999976,50.024994000000106],[-55.853888999999924,50.005554000000075],[-55.846106999999961,49.996940999999936],[-55.845275999999956,49.99221799999998],[-55.845551,49.986938000000066],[-55.844161999999983,49.981934000000138],[-55.840836000000024,49.977211000000125],[-55.830001999999979,49.969154000000003],[-55.755004999999869,49.924164000000019],[-55.746108999999933,49.923050000000046],[-55.587218999999948,49.964157000000057],[-55.55610699999994,49.980270000000132],[-55.543892000000028,49.987213000000111],[-55.527221999999995,50.000275000000101],[-55.491698999999983,50.007309000000021],[-55.463332999999977,49.966933999999981],[-55.460830999999985,49.962212000000079],[-55.459723999999937,49.957497000000046],[-55.460281000000009,49.952216999999962],[-55.465004000000022,49.940826000000015],[-55.475272999999959,49.930275000000108],[-55.492226000000016,49.917213000000061],[-55.511391000000003,49.908882000000006],[-55.659163999999976,49.84777100000008],[-55.843055999999933,49.788330000000087],[-55.98611499999987,49.746940999999993],[-56.115279999999927,49.63999200000012],[-56.124167999999997,49.613327000000083],[-56.050551999999925,49.666382000000112],[-56.044448999999986,49.669990999999925],[-55.963889999999935,49.698600999999996],[-55.957779000000016,49.700272000000041],[-55.893889999999999,49.714157000000114],[-55.833327999999995,49.686652999999922],[-55.880279999999971,49.584990999999945],[-55.935443999999961,49.543991000000119],[-55.945441999999957,49.536159999999995],[-55.953444999999988,49.533660999999995],[-55.971607000000006,49.531826000000024],[-55.980277999999998,49.53049500000003],[-56.035277999999948,49.506660000000068],[-56.080001999999922,49.486938000000009],[-56.12749500000001,49.431107000000111],[-56.129165999999998,49.425552000000039],[-56.122771999999941,49.421379000000115],[-56.073891000000003,49.434432999999956],[-56.06221800000003,49.440544000000045],[-56.025275999999963,49.461105000000089],[-56.02027899999996,49.464995999999928],[-56.005279999999914,49.480820000000051],[-55.999725000000012,49.485268000000019],[-55.96305499999994,49.496155000000044],[-55.91705300000001,49.507496000000117],[-55.874717999999973,49.517212000000029],[-55.827781999999956,49.524162000000103],[-55.783332999999914,49.511940000000095],[-55.775001999999915,49.508605999999929],[-55.724997999999971,49.479431000000091],[-55.720832999999971,49.475822000000051],[-55.725554999999986,49.470543000000077],[-55.722771000000023,49.453880000000026],[-55.678336999999942,49.386940000000038],[-55.673057999999969,49.383049000000142],[-55.664444000000003,49.381934999999999],[-55.656386999999938,49.382210000000043],[-55.650275999999963,49.384162999999944],[-55.639167999999984,49.392769000000044],[-55.636115999999959,49.398604999999918],[-55.637778999999966,49.409157000000107],[-55.637778999999966,49.413605000000075],[-55.636115999999959,49.419159000000093],[-55.589164999999923,49.462494000000049],[-55.560279999999977,49.482490999999925],[-55.55388599999992,49.484993000000031],[-55.546950999999979,49.486381999999992],[-55.53167000000002,49.487770000000125],[-55.523055999999997,49.486655999999925],[-55.522223999999994,49.481934000000024],[-55.566390999999953,49.409157000000107],[-55.572776999999974,49.376656000000025],[-55.573058999999944,49.371658000000025],[-55.570556999999951,49.366936000000123],[-55.566665999999998,49.362770000000012],[-55.559998000000007,49.365273000000002],[-55.554717999999923,49.369713000000047],[-55.539443999999946,49.385551000000078],[-55.529723999999987,49.396942000000024],[-55.528053,49.402488999999946],[-55.528885000000002,49.408043000000134],[-55.529166999999973,49.423324999999977],[-55.526389999999992,49.42860399999995],[-55.49610899999999,49.453880000000026],[-55.441665999999998,49.491104000000064],[-55.430282999999974,49.498878000000104],[-55.37749500000001,49.50360900000004],[-55.369445999999982,49.503326000000072],[-55.349276999999972,49.468159000000014],[-55.332946999999933,49.416489000000126],[-55.33577699999995,49.388161000000025],[-55.333610999999905,49.359161000000029],[-55.338608000000022,49.355270000000132],[-55.336112999999955,49.350829999999974],[-55.315276999999924,49.314437999999939],[-55.310996999999929,49.355937999999981],[-55.306830999999931,49.356772999999976],[-55.274833999999998,49.385605000000055],[-55.267501999999979,49.396603000000027],[-55.264499999999998,49.403435000000059],[-55.264336000000014,49.406441000000086],[-55.266669999999863,49.409103000000073],[-55.269833000000006,49.411438000000032],[-55.280838000000017,49.41443600000008],[-55.28317299999992,49.41693500000008],[-55.310000999999943,49.484772000000021],[-55.310832999999946,49.487770000000125],[-55.305557000000022,49.534439000000077],[-55.261390999999946,49.541107000000068],[-55.149726999999928,49.546387000000095],[-55.141112999999962,49.545273000000122],[-55.137222000000008,49.540833000000134],[-55.123328999999956,49.496941000000049],[-55.124717999999973,49.465271000000143],[-55.221107000000018,49.261939999999981],[-55.231109999999944,49.251389000000074],[-55.237220999999977,49.248046999999929],[-55.296394000000021,49.226379000000009],[-55.315001999999936,49.216933999999924],[-55.365836999999999,49.165268000000083],[-55.369164000000012,49.159431000000097],[-55.369445999999982,49.154160000000047],[-55.360001000000011,49.151382000000069],[-55.347495999999978,49.157211000000075],[-55.339721999999995,49.158600000000092],[-55.331673000000023,49.156654000000003],[-55.323615999999959,49.153602999999976],[-55.319449999999904,49.149162000000047],[-55.307219999999973,49.104996000000085],[-55.307776999999987,49.0991590000001],[-55.317504999999983,49.087769000000037],[-55.323059000000001,49.083327999999938],[-55.383330999999998,49.040833000000021],[-55.345551,49.057770000000062],[-55.272223999999937,49.099998000000085],[-55.277495999999985,49.103882000000112],[-55.282501000000025,49.113051999999982],[-55.283332999999914,49.118049999999982],[-55.288054999999986,49.182495000000074],[-55.288054999999986,49.187210000000107],[-55.285004000000015,49.193047000000092],[-55.280555999999933,49.199157999999954],[-55.275275999999963,49.204436999999984],[-55.148055999999997,49.259995000000004],[-55.081116000000009,49.283882000000062],[-55.081673000000023,49.345825000000104],[-55.081389999999942,49.351105000000132],[-55.078055999999947,49.356941000000006],[-55.069450000000018,49.3555530000001],[-55.010284000000013,49.323883000000023],[-54.989998000000014,49.286942000000067],[-54.990554999999972,49.28166200000004],[-54.824448000000018,49.269157000000064],[-54.817779999999914,49.271660000000054],[-54.787506000000008,49.288605000000018],[-54.78194400000001,49.292770000000019],[-54.67972599999996,49.379990000000021],[-54.658332999999971,49.399162000000047],[-54.648055999999997,49.409431000000041],[-54.641388000000006,49.421104000000071],[-54.643889999999999,49.425827000000083],[-54.579726999999934,49.494713000000104],[-54.541114999999934,49.526657000000114],[-54.528885000000002,49.533333000000027],[-54.521111000000019,49.533882000000006],[-54.474716000000001,49.534995999999978],[-54.431945999999925,49.470824999999991],[-54.430831999999953,49.465828000000045],[-54.450554000000011,49.427773000000116],[-54.483330000000024,49.361938000000123],[-54.49361399999998,49.268051000000071],[-54.492500000000007,49.263611000000026],[-54.486945999999989,49.259719999999959],[-54.480552999999929,49.262215000000026],[-54.474716000000001,49.266662999999994],[-54.406386999999938,49.320831000000112],[-54.400832999999921,49.325272000000041],[-54.399170000000026,49.330551000000014],[-54.410278000000005,49.343605000000082],[-54.412773000000016,49.34804500000007],[-54.413612000000001,49.353049999999939],[-54.407501000000025,49.374710000000107],[-54.404167000000029,49.380547000000092],[-54.395003999999915,49.392769000000044],[-54.380279999999971,49.408882000000119],[-54.36999499999996,49.419159000000093],[-54.364166000000012,49.423607000000061],[-54.358054999999979,49.426941000000056],[-54.325279000000023,49.423882000000049],[-54.24888599999997,49.397490999999945],[-54.186661000000015,49.371101000000124],[-54.17888599999992,49.37082700000002],[-54.166106999999897,49.378044000000102],[-54.161941999999897,49.383606000000043],[-54.15582999999998,49.40526600000004],[-54.153327999999931,49.416100000000085],[-54.151938999999913,49.427216000000044],[-54.148337999999967,49.437492000000134],[-54.145279000000016,49.443320999999969],[-54.139998999999932,49.448601000000053],[-54.133888000000013,49.451934999999992],[-54.048889000000031,49.479431000000091],[-54.041671999999949,49.480820000000051],[-53.919998000000021,49.447769000000108],[-53.775001999999972,49.396103000000039],[-53.673331999999959,49.34304800000001],[-53.511116000000015,49.277214000000072],[-53.48860899999994,49.220543000000134],[-53.588332999999977,49.040833000000021],[-53.593886999999995,49.035552999999993],[-53.66194200000001,49.032211000000018],[-53.714721999999938,49.02915999999999],[-53.804442999999992,49.022217000000012],[-53.785277999999948,49.011107999999922],[-53.731667000000016,49.013329000000056],[-53.725273000000016,49.009720000000016],[-53.736664000000019,49.001105999999993],[-53.742774999999995,48.997771999999998],[-53.749167999999941,48.995270000000119],[-53.77027899999996,48.989433000000133],[-53.803611999999987,48.978043000000071],[-53.813056999999958,48.938881000000038],[-53.974441999999954,48.84777100000008],[-54.021384999999952,48.833327999999995],[-54.096106999999961,48.812210000000107],[-53.920279999999991,48.834991000000116],[-53.899170000000026,48.838043000000027],[-53.875557000000015,48.836937000000034],[-53.829445000000021,48.831383000000017],[-53.820556999999951,48.829436999999928],[-53.800835000000006,48.812767000000008],[-53.802223000000026,48.807770000000062],[-53.845276000000013,48.766936999999984],[-53.867774999999938,48.75],[-53.89055599999989,48.733604000000014],[-53.897223999999937,48.731377000000123],[-53.932219999999973,48.71393599999999],[-53.950554000000011,48.670830000000137],[-53.93250299999994,48.624710000000107],[-53.924445999999989,48.624435000000062],[-53.917220999999927,48.624991999999963],[-53.888610999999969,48.631660000000124],[-53.882773999999927,48.633606000000043],[-53.869163999999955,48.638885000000016],[-53.857223999999974,48.644157000000121],[-53.795554999999922,48.675827000000027],[-53.790001000000018,48.679993000000138],[-53.798889000000031,48.682213000000104],[-53.817779999999971,48.673882000000049],[-53.831389999999999,48.669990999999982],[-53.852782999999931,48.666381999999942],[-53.896950000000004,48.662209000000018],[-53.913054999999929,48.663605000000075],[-53.920836999999949,48.667213000000004],[-53.924445999999989,48.671379000000059],[-53.892058999999904,48.682938000000092],[-53.887225999999941,48.690102000000024],[-53.884051999999997,48.693100000000129],[-53.880554000000018,48.695099000000141],[-53.857558999999981,48.704937000000029],[-53.759170999999981,48.714156999999943],[-53.618056999999965,48.694435000000112],[-53.610001000000011,48.693046999999979],[-53.601943999999946,48.68971300000004],[-53.599723999999924,48.684990000000028],[-53.603888999999924,48.674164000000076],[-53.610001000000011,48.668602000000135],[-53.645835999999974,48.648330999999985],[-53.658607000000018,48.641937000000098],[-53.671943999999939,48.638602999999932],[-53.728881999999942,48.629433000000063],[-53.779998999999975,48.623604000000057],[-53.787780999999995,48.622490000000084],[-53.928336999999942,48.575829000000056],[-53.93332700000002,48.572220000000073],[-53.951392999999996,48.549995000000024],[-53.956107999999915,48.543883999999991],[-53.952498999999932,48.539436000000023],[-53.944159999999897,48.539718999999991],[-53.932219999999973,48.544998000000135],[-53.919998000000021,48.551659000000086],[-53.914444000000003,48.555824000000086],[-53.908332999999914,48.559158000000025],[-53.901389999999935,48.562209999999993],[-53.895003999999858,48.563048999999921],[-53.804169000000002,48.568053999999961],[-53.788054999999929,48.566383000000087],[-53.746391000000017,48.558600999999953],[-53.746947999999918,48.523322999999948],[-53.74888599999997,48.513329000000113],[-53.750838999999985,48.50777400000004],[-53.756366999999955,48.50326200000012]],[[-127.91443599999991,51.410820000000001],[-127.92443799999995,51.41027100000008],[-128.06527700000004,51.464157000000114],[-128.07583599999998,51.470543000000021],[-128.08111599999995,51.474709000000132],[-128.15307599999988,51.601661999999976],[-128.15417499999995,51.605826999999977],[-128.15280199999995,51.638046000000145],[-128.15249600000004,51.641937000000041],[-128.15029899999996,51.647491000000059],[-128.14556900000002,51.653603000000032],[-128.136414,51.6616590000001],[-128.01306199999993,51.72137500000008],[-128.00527999999997,51.723320000000058],[-128,51.720542999999964],[-127.99694799999997,51.714157000000057],[-127.99804699999999,51.711662000000047],[-127.995003,51.705269000000101],[-127.98388699999998,51.682495000000131],[-127.96749899999992,51.651931999999988],[-127.951683,51.633880999999974],[-127.93776699999995,51.621933000000126],[-127.92639199999996,51.608886999999982],[-127.91999800000002,51.600547999999947],[-127.90556300000003,51.55971500000004],[-127.87361099999993,51.464439000000027],[-127.87193300000001,51.451934999999992],[-127.87332200000003,51.447769000000051],[-127.87666299999995,51.443046999999979],[-127.90444899999994,51.414711000000068],[-127.91443599999991,51.410820000000001]],[[-55.367500000000007,51.874161000000015],[-55.37471800000003,51.873878000000047],[-55.382216999999912,51.875267000000065],[-55.428885999999977,51.884163000000001],[-55.430000000000007,51.885826000000122],[-55.431113999999923,51.887771999999984],[-55.430557000000022,51.896659999999997],[-55.42610899999994,51.905822999999998],[-55.423331999999959,51.909431000000097],[-55.387779000000023,51.942764000000125],[-55.353614999999991,51.963608000000079],[-55.301392000000021,51.993050000000039],[-55.283889999999985,52.001389000000074],[-55.277221999999938,52.002495000000067],[-55.269996999999989,52.000549000000035],[-55.268889999999942,51.998604],[-55.267501999999979,51.993881000000044],[-55.274170000000026,51.97693600000008],[-55.274170000000026,51.975548000000003],[-55.28194400000001,51.961937000000034],[-55.295005999999944,51.943321000000026],[-55.302222999999969,51.933326999999963],[-55.332503999999972,51.896384999999952],[-55.342223999999874,51.886383000000023],[-55.354720999999927,51.878043999999989],[-55.360001000000011,51.875824000000136],[-55.367500000000007,51.874161000000015]],[[-128.05389400000001,51.753609000000097],[-128.11972000000003,51.741661000000079],[-128.13192699999996,51.743881000000101],[-128.13613899999996,51.746657999999968],[-128.25445599999995,51.865829000000019],[-128.25308199999995,51.872214999999983],[-128.22222899999997,51.953323000000125],[-128.21749899999998,51.962769000000094],[-128.177795,52.008330999999941],[-128.150848,52.035271000000023],[-128.14529400000004,52.038605000000018],[-128.10775799999999,52.051659000000086],[-128.06082200000003,52.056380999999988],[-127.99582699999996,52.062767000000065],[-127.98332199999993,52.061934999999949],[-127.96028100000001,52.055549999999982],[-127.95472699999999,52.05332199999998],[-127.95121799999998,52.046913000000131],[-127.95140100000003,52.03054800000001],[-127.95472699999999,51.981101999999964],[-128.00723299999993,51.782493999999986],[-128.00945999999999,51.778328000000101],[-128.01306199999993,51.773605000000089],[-128.01861600000001,51.770271000000093],[-128.03582800000004,51.760826000000066],[-128.05389400000001,51.753609000000097]],[[-79.252791999999999,52.071380999999917],[-79.319732999999985,51.969986000000063],[-79.364440999999943,51.942214999999976],[-79.370543999999995,51.938599000000124],[-79.376663000000008,51.936104000000057],[-79.385833999999988,51.935546999999985],[-79.42361499999987,51.936935000000062],[-79.433318999999869,51.93832400000008],[-79.450561999999877,51.942214999999976],[-79.50111400000003,51.942489999999964],[-79.568344000000025,51.935546999999985],[-79.576675000000023,51.934158000000025],[-79.591949,51.922768000000133],[-79.604445999999996,51.916664000000083],[-79.611664000000019,51.914436000000137],[-79.617767000000015,51.917770000000132],[-79.621383999999978,51.9222180000001],[-79.652785999999992,51.981101999999964],[-79.654175000000009,51.986655999999982],[-79.650832999999977,51.991936000000067],[-79.633895999999993,52.017493999999942],[-79.629439999999988,52.022217000000126],[-79.62332200000003,52.025269000000037],[-79.61471599999993,52.023048000000131],[-79.608611999999994,52.01998900000001],[-79.603881999999942,52.016106000000036],[-79.596114999999998,52.013611000000026],[-79.585281000000009,52.012772000000041],[-79.567779999999971,52.014999000000103],[-79.538329999999974,52.023323000000005],[-79.408889999999985,52.071938000000046],[-79.396666999999866,52.077217000000019],[-79.383895999999936,52.090827999999988],[-79.345551,52.108604000000128],[-79.338332999999977,52.110275000000001],[-79.297225999999966,52.091933999999981],[-79.277221999999881,52.090546000000074],[-79.269729999999925,52.08776899999998],[-79.263625999999988,52.083878000000084],[-79.252791999999999,52.071380999999917]],[[-131.01889,51.946098000000063],[-131.02166699999998,51.940825999999959],[-131.02917500000001,51.941375999999991],[-131.03695700000003,51.944434999999999],[-131.04861499999998,51.951385000000016],[-131.07415800000001,51.970543000000134],[-131.09500099999997,51.989989999999977],[-131.10165399999994,52.00277699999998],[-131.120544,52.055549999999982],[-131.12719699999997,52.095543000000021],[-131.126373,52.106941000000006],[-131.12249800000001,52.124710000000107],[-131.11639400000001,52.148048000000017],[-131.11026000000004,52.151099999999929],[-131.10192899999998,52.151932000000045],[-131.08361799999989,52.151382000000012],[-131.07720900000004,52.150268999999923],[-131.00945999999999,52.102776000000006],[-130.99249299999991,52.060822000000087],[-131.00473,52.005829000000062],[-131.01889,51.946098000000063]],[[-127.96278399999989,52.074714999999912],[-128.05111699999992,52.07416500000005],[-128.06222500000001,52.074996999999996],[-128.07638499999996,52.079994000000113],[-128.09387199999998,52.090546000000074],[-128.10583500000001,52.100273000000016],[-128.10888699999992,52.105270000000132],[-128.12081899999998,52.141936999999928],[-128.11471599999987,52.14916199999999],[-128.10693400000002,52.152489000000116],[-128.03167699999995,52.163292000000126],[-128.01583900000003,52.164711000000125],[-127.89111299999996,52.171660999999972],[-127.88110399999999,52.172218000000044],[-127.87917299999998,52.166664000000026],[-127.88971700000002,52.131103999999993],[-127.89334100000002,52.126938000000052],[-127.94360399999999,52.079163000000051],[-127.94721999999996,52.075829000000113],[-127.96278399999989,52.074714999999912]],[[-128.21194499999996,52.015549000000135],[-128.22082499999999,52.014442000000031],[-128.23858599999994,52.014717000000076],[-128.2463679999999,52.016662999999937],[-128.25308199999995,52.019714000000135],[-128.29110699999995,52.101936000000137],[-128.29415899999998,52.113608999999997],[-128.29168700000002,52.118881000000101],[-128.25280799999996,52.171379000000059],[-128.24444600000004,52.179993000000138],[-128.23971599999993,52.184158000000139],[-128.23193399999997,52.187492000000134],[-128.18804899999998,52.193604000000107],[-128.16223100000002,52.196655000000135],[-128.15307599999988,52.195267000000001],[-128.14779699999997,52.191658000000018],[-128.14584399999995,52.186104],[-128.1480709999999,52.183327000000133],[-128.15472399999999,52.159431000000041],[-128.15612799999997,52.153320000000122],[-128.15862999999996,52.11971299999999],[-128.154449,52.108604000000128],[-128.15139799999997,52.103882000000056],[-128.14752199999998,52.092766000000097],[-128.15112299999993,52.081108000000086],[-128.20611600000001,52.01888300000013],[-128.21194499999996,52.015549000000135]],[[-128.42834499999992,52.13749700000011],[-128.44415300000003,52.134163000000115],[-128.44638099999997,52.13499500000006],[-128.50472999999994,52.16027100000008],[-128.50918599999994,52.16443600000008],[-128.51113899999996,52.169990999999982],[-128.50863600000002,52.175552000000039],[-128.50527999999997,52.180274999999995],[-128.50058000000001,52.184158000000139],[-128.45138499999996,52.217209000000082],[-128.448059,52.21915400000006],[-128.43331899999998,52.223320000000001],[-128.41641200000004,52.226379000000122],[-128.40972899999997,52.224991000000045],[-128.40640299999995,52.2227630000001],[-128.40527299999997,52.218596999999988],[-128.4100039999999,52.214714000000072],[-128.40777599999996,52.15277100000003],[-128.408905,52.149437000000034],[-128.41363499999994,52.145270999999923],[-128.42834499999992,52.13749700000011]],[[-128.29998799999998,52.133606000000043],[-128.308044,52.128875999999991],[-128.31362899999999,52.129714999999976],[-128.36499000000003,52.162491000000102],[-128.37304699999999,52.185265000000072],[-128.378601,52.213608000000022],[-128.37832599999996,52.220268000000033],[-128.37719699999991,52.223877000000073],[-128.37027,52.228600000000029],[-128.35665900000004,52.235825000000091],[-128.34527600000001,52.238602000000014],[-128.29724099999999,52.237212999999997],[-128.23721299999994,52.222488000000055],[-128.22943099999998,52.220268000000033],[-128.22720300000003,52.218880000000127],[-128.22610499999996,52.216934000000037],[-128.22747799999996,52.212769000000037],[-128.22997999999995,52.209435000000099],[-128.29998799999998,52.133606000000043]],[[-81.476944000000003,52.249161000000072],[-81.48582499999992,52.248329000000126],[-81.646118000000001,52.251389000000017],[-81.687499999999943,52.254997000000117],[-81.706115999999952,52.258049000000028],[-81.710007000000019,52.262496999999996],[-81.695830999999941,52.267212000000029],[-81.578063999999983,52.294716000000051],[-81.551666000000012,52.298050000000046],[-81.541672000000005,52.296661000000029],[-81.493057000000022,52.283881999999949],[-81.480559999999969,52.277489000000003],[-81.475280999999995,52.27388000000002],[-81.471664000000033,52.268051000000014],[-81.468063000000029,52.263054000000068],[-81.467772999999966,52.256942999999978],[-81.470839999999953,52.252220000000023],[-81.476944000000003,52.249161000000072]],[[-127.924713,52.174164000000133],[-127.93360899999999,52.173049999999932],[-128.036407,52.177489999999977],[-128.05416899999994,52.180550000000039],[-128.07971199999997,52.186377999999934],[-128.08639500000004,52.188599000000067],[-128.09277299999991,52.19221500000009],[-128.16696199999996,52.244713000000104],[-128.17001299999998,52.249718000000144],[-128.15862999999996,52.256386000000077],[-128.06945799999994,52.294716000000051],[-128.0477909999999,52.300545000000056],[-128.04000899999994,52.301659000000029],[-127.97944599999994,52.296661000000029],[-127.97277800000001,52.295273000000122],[-127.96193700000003,52.289436000000137],[-127.95861799999989,52.287498000000028],[-127.95111099999997,52.279716000000064],[-127.90943899999996,52.210274000000027],[-127.90750100000002,52.204712000000086],[-127.90666199999998,52.198600999999996],[-127.91055299999988,52.186377999999934],[-127.91776999999996,52.176940999999999],[-127.924713,52.174164000000133]],[[-128.18444799999992,52.278602999999976],[-128.20361299999996,52.277489000000003],[-128.21026599999993,52.278327999999988],[-128.21362299999998,52.279716000000064],[-128.18917799999986,52.330826000000116],[-128.18307499999997,52.339714000000129],[-128.11471599999987,52.41832700000009],[-128.11111499999998,52.421661000000086],[-128.10443099999992,52.421379000000002],[-128.09997599999991,52.418602000000135],[-128.09359699999999,52.411658999999929],[-128.09249899999998,52.408324999999934],[-128.08526599999999,52.396385000000066],[-128.05917399999998,52.352219000000048],[-128.05694600000004,52.346100000000035],[-128.05526699999996,52.334991000000116],[-128.05667099999994,52.328880000000083],[-128.06140099999999,52.324715000000083],[-128.15194700000001,52.282211000000075],[-128.18444799999992,52.278602999999976]],[[-127.72444199999995,51.97693600000008],[-127.87082699999991,51.944709999999986],[-127.87970699999994,51.94499200000007],[-127.886124,51.947768999999994],[-127.89167800000001,51.951385000000016],[-127.89472999999992,51.956100000000049],[-127.89943700000003,51.973320000000001],[-127.90110799999991,51.985824999999977],[-127.90055799999988,51.999435000000005],[-127.88110399999999,52.078880000000083],[-127.87361099999993,52.094994000000042],[-127.85138699999999,52.141380000000026],[-127.82833900000003,52.175827000000027],[-127.817497,52.191375999999934],[-127.79750100000001,52.213882000000126],[-127.78916899999996,52.221930999999984],[-127.75334199999998,52.245827000000077],[-127.74527,52.247772000000055],[-127.699997,52.257216999999912],[-127.68083199999995,52.258888000000013],[-127.65943900000002,52.259163000000001],[-127.65055799999999,52.260276999999974],[-127.58640300000002,52.281105000000082],[-127.51666299999999,52.304436000000123],[-127.51000999999985,52.306938000000002],[-127.46056399999998,52.345824999999991],[-127.45694700000001,52.350548000000003],[-127.45612299999988,52.362213000000054],[-127.45694700000001,52.368324000000143],[-127.45333900000003,52.373046999999929],[-127.4177699999999,52.385269000000108],[-127.36277799999999,52.403876999999966],[-127.26390100000003,52.436653000000092],[-127.25945300000001,52.435265000000015],[-127.23473399999995,52.416939000000013],[-127.20777899999996,52.344711000000018],[-127.21056399999992,52.33526599999999],[-127.218887,52.325829000000056],[-127.23222399999992,52.313049000000092],[-127.24749800000001,52.301933000000133],[-127.27084399999995,52.288605000000132],[-127.28916899999996,52.279433999999981],[-127.30304699999999,52.274162000000047],[-127.30999800000001,52.271659999999997],[-127.32584400000002,52.268051000000014],[-127.36193800000001,52.264717000000019],[-127.42582699999997,52.24610100000001],[-127.43971299999993,52.240829000000076],[-127.44526699999994,52.23832699999997],[-127.57972699999999,52.177216000000044],[-127.58444199999991,52.173324999999977],[-127.58805799999999,52.167770000000075],[-127.59631300000001,52.151793999999995],[-127.65416700000003,52.123877999999991],[-127.68694299999993,52.074440000000095],[-127.69193999999993,52.06360600000005],[-127.70111099999991,52.041107000000068],[-127.70388800000001,52.028877000000136],[-127.699997,52.017768999999987],[-127.69915799999995,52.01138300000008],[-127.699432,52.00471500000009],[-127.70194999999995,51.998604],[-127.708054,51.988327000000027],[-127.71749899999998,51.980270000000075],[-127.72444199999995,51.97693600000008]],[[-128.66860999999994,52.266388000000063],[-128.67556799999994,52.266388000000063],[-128.72055099999994,52.306938000000002],[-128.724152,52.311378000000047],[-128.72637899999995,52.316101000000003],[-128.74832200000003,52.369156000000089],[-128.76196299999998,52.41832700000009],[-128.76251200000002,52.423325000000091],[-128.76196299999998,52.429160999999965],[-128.759186,52.449432000000002],[-128.75280799999996,52.467766000000097],[-128.74722299999996,52.471656999999993],[-128.68139599999989,52.482208000000071],[-128.67443800000001,52.482208000000071],[-128.65029899999996,52.474434000000088],[-128.63696299999992,52.468597000000102],[-128.624146,52.461662000000103],[-128.61914099999996,52.457771000000037],[-128.615814,52.453606000000036],[-128.61608899999993,52.44860099999994],[-128.61331199999995,52.364441000000056],[-128.61471599999993,52.353325000000098],[-128.61776699999996,52.329994000000056],[-128.61999500000002,52.323883000000137],[-128.62554899999992,52.311378000000047],[-128.62997399999995,52.305550000000096],[-128.66860999999994,52.266388000000063]],[[-128.471924,52.492767000000129],[-128.46777299999991,52.483047000000056],[-128.46499599999993,52.47304500000007],[-128.46417199999996,52.46804800000001],[-128.46499599999993,52.462212000000136],[-128.46722399999999,52.456099999999935],[-128.47082499999993,52.449714999999969],[-128.48055999999991,52.440269000000001],[-128.4869379999999,52.437209999999993],[-128.49414100000001,52.434989999999971],[-128.50945999999999,52.432213000000104],[-128.51806599999998,52.431938000000059],[-128.59553499999998,52.460140000000081],[-128.66314699999987,52.491927999999973],[-128.75500499999998,52.487770000000012],[-128.77557399999995,52.49332400000003],[-128.78472899999991,52.496101000000124],[-128.80944799999997,52.515549000000078],[-128.81304899999992,52.519989000000066],[-128.81390399999998,52.524994000000106],[-128.811127,52.536941999999954],[-128.808899,52.543053000000043],[-128.73889199999996,52.587494000000049],[-128.732483,52.590545999999961],[-128.72470099999998,52.59165999999999],[-128.5781859999999,52.5936430000001],[-128.56750499999998,52.622490000000028],[-128.53527800000001,52.647217000000069],[-128.53167699999995,52.62110100000001],[-128.52890000000002,52.611107000000004],[-128.52194199999997,52.591377000000023],[-128.50085399999995,52.543610000000115],[-128.48889199999991,52.52027099999998],[-128.48526000000004,52.515831000000105],[-128.47970599999996,52.506660000000011],[-128.471924,52.492767000000129]],[[-131.46444700000001,52.627487000000087],[-131.58554099999998,52.585266000000104],[-131.59359699999999,52.585823000000005],[-131.60137900000001,52.588600000000099],[-131.6119379999999,52.596099999999979],[-131.62359600000002,52.608886999999982],[-131.70971700000001,52.705269000000044],[-131.691101,52.724991000000102],[-131.68499799999995,52.728043000000014],[-131.65945399999993,52.730270000000075],[-131.48471099999995,52.736938000000066],[-131.475281,52.736655999999982],[-131.46859699999999,52.733330000000137],[-131.46887200000003,52.73054500000012],[-131.44943199999994,52.714996000000042],[-131.44027699999998,52.706940000000145],[-131.43917799999991,52.701660000000061],[-131.44137599999999,52.684158000000025],[-131.45443699999998,52.636383000000023],[-131.45834399999995,52.630821000000083],[-131.46444700000001,52.627487000000087]],[[-128.43029799999994,52.368050000000039],[-128.44168099999996,52.368050000000039],[-128.45611599999989,52.373046999999929],[-128.46026599999999,52.37721300000004],[-128.46664399999986,52.386939999999981],[-128.46777299999991,52.393051000000071],[-128.43777499999999,52.543610000000115],[-128.44973800000002,52.620827000000077],[-128.45056199999999,52.626937999999996],[-128.44168099999996,52.746941000000106],[-128.43917799999997,52.752220000000079],[-128.43582200000003,52.756943000000092],[-128.39001500000001,52.797493000000031],[-128.383331,52.797493000000031],[-128.37332200000003,52.791107000000125],[-128.36276199999998,52.740272999999945],[-128.35861199999988,52.729156000000103],[-128.32138099999992,52.634720000000129],[-128.275848,52.496101000000124],[-128.27502400000003,52.489990000000034],[-128.28640699999994,52.457771000000037],[-128.31140099999999,52.423881999999992],[-128.365814,52.38220999999993],[-128.37164300000001,52.378875999999991],[-128.386414,52.374992000000134],[-128.40335099999993,52.371658000000139],[-128.43029799999994,52.368050000000039]],[[-128.97442599999999,52.453323000000069],[-128.98275799999999,52.453049000000135],[-129.11471599999993,52.556656000000089],[-129.21081499999997,52.64888000000002],[-129.26333599999998,52.710548000000074],[-129.27056899999997,52.719153999999946],[-129.29196200000001,52.761664999999994],[-129.29278599999998,52.766937000000098],[-129.28140299999995,52.81721500000009],[-129.27722199999988,52.823051000000135],[-129.27084400000001,52.826103000000046],[-129.26223799999997,52.826660000000118],[-129.252228,52.825272000000041],[-129.23111,52.81610100000006],[-129.218323,52.809158000000082],[-129.10415599999999,52.74110399999995],[-129.066101,52.714714000000129],[-128.94695999999993,52.626381000000094],[-128.926941,52.610825000000091],[-128.92333999999994,52.606659000000036],[-128.91973899999999,52.602218999999991],[-128.91861,52.527488999999946],[-128.92251599999997,52.515274000000034],[-128.93640099999999,52.480545000000006],[-128.94360399999999,52.469711000000075],[-128.9491579999999,52.465546000000074],[-128.96166999999997,52.459435000000042],[-128.97442599999999,52.453323000000069]],[[-128.26974499999994,52.596939000000134],[-128.27416999999997,52.595543000000077],[-128.27890000000002,52.595824999999991],[-128.28445399999998,52.598602000000028],[-128.28750600000001,52.602776000000063],[-128.28973399999995,52.60833000000008],[-128.29269399999993,52.661549000000036],[-128.32305899999994,52.74110399999995],[-128.32638499999996,52.771378000000027],[-128.32501199999996,52.776100000000099],[-128.26322900000002,52.784645000000125],[-128.21063200000003,52.798515000000009],[-128.18582199999992,52.826942000000031],[-128.177795,52.826103000000046],[-128.17334,52.823326000000122],[-128.17028799999997,52.817771999999991],[-128.17584199999999,52.787773000000129],[-128.17861899999997,52.776100000000099],[-128.20776399999994,52.704436999999984],[-128.21026599999993,52.698875000000044],[-128.24722299999996,52.620544000000109],[-128.24972500000001,52.616660999999965],[-128.26141399999995,52.604439000000013],[-128.26974499999994,52.596939000000134]],[[-131.63973999999996,52.828049000000135],[-131.64666699999992,52.825829000000113],[-131.64889499999998,52.826103000000046],[-131.66973899999999,52.819160000000068],[-131.70834400000001,52.811378000000104],[-131.72387700000002,52.808327000000077],[-131.73306299999996,52.80860100000001],[-131.81332399999997,52.82027400000004],[-131.82388300000002,52.82777400000009],[-131.83138999999994,52.841934000000037],[-131.83029199999999,52.846656999999993],[-131.82250999999991,52.848045000000127],[-131.74859599999996,52.853324999999984],[-131.72860699999995,52.851387000000045],[-131.644745,52.835548000000131],[-131.636414,52.832497000000103],[-131.63973999999996,52.828049000000135]],[[-128.50527999999997,52.641106000000036],[-128.5125119999999,52.641106000000036],[-128.51611300000002,52.645271000000037],[-128.52029400000004,52.654991000000109],[-128.54000899999994,52.703323000000012],[-128.53500399999996,52.758049000000085],[-128.53362999999996,52.769157000000121],[-128.51391599999999,52.860825000000034],[-128.51028400000001,52.867493000000024],[-128.50613399999992,52.873047000000042],[-128.49887100000001,52.87082700000002],[-128.49194299999994,52.868599000000074],[-128.48553499999997,52.865273000000002],[-128.471924,52.853049999999996],[-128.46832299999994,52.848602000000028],[-128.45083599999992,52.805267000000015],[-128.45361300000002,52.782493999999986],[-128.45443699999998,52.776939000000084],[-128.50167799999991,52.647491000000002],[-128.50527999999997,52.641106000000036]],[[-129.61053500000003,52.954993999999999],[-129.61831699999999,52.953606000000093],[-129.62222299999996,52.958046000000081],[-129.65139799999992,53.013329000000113],[-129.650848,53.01888300000013],[-129.62441999999993,53.02388000000002],[-129.615814,53.024436999999921],[-129.60720800000001,53.022766000000047],[-129.57055699999989,53.013611000000026],[-129.5625,53.010551000000135],[-129.55749499999996,53.006660000000068],[-129.55667099999999,53.001389000000017],[-129.55862400000001,52.997490000000028],[-129.55334500000004,52.984993000000031],[-129.561127,52.970543000000077],[-129.59637499999991,52.959435000000099],[-129.61053500000003,52.954993999999999]],[[-129.531677,53.010551000000135],[-129.53890999999993,53.008049000000085],[-129.546967,53.008888000000013],[-129.58859299999995,53.024162000000103],[-129.64001500000001,53.044158999999979],[-129.63391099999996,53.056099000000074],[-129.56277499999993,53.053046999999992],[-129.52444500000001,53.033606999999961],[-129.51779199999993,53.029991000000109],[-129.51724200000001,53.024993999999992],[-129.52056900000002,53.018326000000059],[-129.531677,53.010551000000135]],[[-55.763061999999991,53.029434000000037],[-55.853333000000021,53.01527399999992],[-55.861945999999989,53.015549000000135],[-55.870834000000002,53.018599999999992],[-55.876388999999961,53.02748900000006],[-55.876105999999993,53.032768000000033],[-55.872771999999998,53.043883999999991],[-55.869719999999973,53.04972100000009],[-55.857779999999991,53.06749700000006],[-55.854445999999996,53.071663000000001],[-55.848609999999951,53.076102999999989],[-55.808333999999945,53.09137700000008],[-55.800551999999982,53.093605000000025],[-55.79222900000002,53.093048000000124],[-55.788612000000001,53.089714000000129],[-55.788337999999953,53.086655000000007],[-55.749167999999997,53.069160000000011],[-55.748885999999914,53.064712999999927],[-55.755004999999869,53.038604999999961],[-55.756667999999991,53.033051],[-55.763061999999991,53.029434000000037]],[[-129.60247799999996,53.057213000000047],[-129.61080899999996,53.056655999999975],[-129.69250499999993,53.075829000000056],[-129.70193499999999,53.078330999999935],[-129.70834399999995,53.08166499999993],[-129.72305299999999,53.099159000000043],[-129.73611500000004,53.12221500000004],[-129.73831200000001,53.12721300000004],[-129.73275799999999,53.131103999999937],[-129.716949,53.133881000000031],[-129.69973800000002,53.134995000000004],[-129.66805999999991,53.136108000000092],[-129.66250600000001,53.135551000000021],[-129.65444899999994,53.132767000000058],[-129.650848,53.130547000000035],[-129.64416499999999,53.12721300000004],[-129.62081899999998,53.112494999999967],[-129.615814,53.108604000000071],[-129.58804299999991,53.084717000000069],[-129.58416699999998,53.08027600000014],[-129.58193999999997,53.075554000000068],[-129.58612099999999,53.069992000000127],[-129.59664900000001,53.061104000000114],[-129.60247799999996,53.057213000000047]],[[-79.909164000000033,53.081940000000145],[-79.919723999999974,53.081940000000145],[-79.926102000000014,53.084991000000002],[-79.92971799999998,53.089432000000102],[-79.932220000000029,53.094436999999971],[-79.938599000000011,53.122490000000084],[-79.938599000000011,53.134995000000004],[-79.93499799999995,53.147774000000084],[-79.930557000000022,53.152489000000116],[-79.906386999999995,53.172768000000076],[-79.897781000000009,53.174438000000009],[-79.887511999999958,53.174438000000009],[-79.877486999999974,53.173050000000103],[-79.866393999999957,53.16944100000012],[-79.858886999999868,53.166939000000013],[-79.846114999999941,53.160545000000013],[-79.795836999999892,53.116386000000034],[-79.789444000000003,53.106941000000006],[-79.787215999999944,53.101936000000137],[-79.789444000000003,53.095825000000048],[-79.796951000000035,53.093605000000025],[-79.835555999999997,53.083878000000084],[-79.843886999999995,53.082214000000079],[-79.909164000000033,53.081940000000145]],[[-129.4324949999999,53.151382000000012],[-129.35278299999993,53.072220000000073],[-129.29000899999988,52.993607000000054],[-129.28750600000001,52.978043000000014],[-129.28945899999985,52.971930999999984],[-129.29583700000001,52.968880000000013],[-129.31222499999996,52.966934000000094],[-129.341095,52.973320000000001],[-129.41418499999997,53.010551000000135],[-129.41915900000004,53.014442000000031],[-129.42138699999998,53.019157000000064],[-129.42471299999994,53.040276000000063],[-129.42916899999994,53.04972100000009],[-129.475281,53.101936000000137],[-129.50527999999997,53.126380999999981],[-129.51196300000004,53.129714999999976],[-129.52194199999985,53.131103999999937],[-129.53750600000001,53.128326000000129],[-129.54473899999994,53.128326000000129],[-129.54724099999993,53.133049000000142],[-129.54806500000001,53.14916199999999],[-129.546967,53.16027100000008],[-129.5386049999999,53.171660999999915],[-129.52166699999992,53.18360100000001],[-129.51446499999997,53.185822000000144],[-129.49859599999996,53.188599000000011],[-129.49026499999997,53.188881000000094],[-129.47997999999995,53.187767000000122],[-129.470551,53.185265000000015],[-129.46276899999992,53.179993000000081],[-129.4324949999999,53.151382000000012]],[[-81.106109999999887,53.199714999999969],[-81.087783999999886,53.17943600000001],[-81.045272999999952,53.148605000000089],[-80.978881999999942,53.113052000000039],[-80.973617999999988,53.109436000000017],[-80.809433000000013,52.97693600000008],[-80.775008999999955,52.944434999999942],[-80.763335999999924,52.931381000000044],[-80.669158999999979,52.776939000000084],[-80.667769999999962,52.771935000000099],[-80.667496000000028,52.759438000000102],[-80.670836999999892,52.745827000000133],[-80.673049999999932,52.740547000000049],[-80.699722000000008,52.69609800000012],[-80.705001999999979,52.692214999999976],[-80.712509000000011,52.689156000000025],[-80.720551,52.688324000000136],[-80.731673999999998,52.688881000000038],[-80.739166000000012,52.691376000000048],[-80.749161000000015,52.698875000000044],[-80.753066999999987,52.703323000000012],[-80.765839000000028,52.709717000000012],[-80.797500999999954,52.719153999999946],[-80.815001999999993,52.723045000000013],[-80.861388999999917,52.731102000000021],[-80.898894999999982,52.737495000000138],[-80.918883999999991,52.740272999999945],[-80.995543999999938,52.746101000000067],[-81.015563999999927,52.748604000000057],[-81.024444999999957,52.750549000000035],[-81.138061999999934,52.788048000000117],[-81.15306099999998,52.793052999999986],[-81.198882999999967,52.814156000000082],[-81.212783999999942,52.819991999999957],[-81.251953000000015,52.832497000000103],[-81.287216000000001,52.83998900000006],[-81.369155999999862,52.856102000000078],[-81.41722099999987,52.863052000000096],[-81.58444199999991,52.889160000000061],[-81.649170000000026,52.907211000000075],[-81.763625999999931,52.937767000000008],[-81.781386999999995,52.941658000000075],[-81.811660999999958,52.945267000000058],[-81.834166999999866,52.946381000000031],[-81.881377999999984,52.954162999999994],[-81.916655999999989,52.96166199999999],[-81.933318999999983,52.965828000000045],[-81.949721999999952,52.971375000000023],[-81.962783999999886,52.97693600000008],[-82.049987999999985,53.014442000000031],[-82.056655999999862,53.017494000000113],[-82.061661000000015,53.021102999999925],[-82.063323999999909,53.026657000000114],[-82.060271999999998,53.031937000000028],[-82.053329000000019,53.041938999999957],[-82.049164000000019,53.046661000000029],[-81.974716000000001,53.113883999999985],[-81.965285999999935,53.12221500000004],[-81.954177999999956,53.129990000000134],[-81.910827999999981,53.158882000000062],[-81.892226999999991,53.168326999999977],[-81.864440999999999,53.178604000000121],[-81.848052999999936,53.181664000000012],[-81.826110999999969,53.181381000000044],[-81.714721999999881,53.188599000000011],[-81.543059999999969,53.209160000000054],[-81.385283999999899,53.224990999999989],[-81.374999999999943,53.224990999999989],[-81.295546999999999,53.217765999999983],[-81.116394000000014,53.200829000000113],[-81.106109999999887,53.199714999999969]],[[-131.76223800000002,53.196655000000078],[-131.6305539999999,53.084159999999997],[-131.595551,53.046103999999957],[-131.59304800000001,53.041382000000056],[-131.59472700000003,53.035271000000023],[-131.60165399999994,53.033051],[-131.61026000000004,53.032211000000132],[-131.62887599999999,53.032494000000099],[-131.63973999999996,53.034439000000077],[-131.73666400000002,53.053879000000052],[-131.75558499999994,53.058601000000124],[-131.77444500000001,53.068886000000077],[-131.78390499999989,53.071381000000088],[-131.79473899999994,53.073051000000078],[-131.81362899999999,53.073607999999979],[-131.82971199999992,53.071381000000088],[-131.94332900000001,53.054993000000024],[-131.96472199999999,53.046386999999925],[-131.91195700000003,53.005271999999991],[-131.90835599999991,53.011108000000036],[-131.89944499999996,53.019714000000135],[-131.88806199999999,53.026939000000027],[-131.87027,53.037498000000028],[-131.85611,53.04222100000004],[-131.84777800000001,53.043052999999929],[-131.83111600000001,53.043052999999929],[-131.81167600000003,53.039718999999991],[-131.662781,53.00777400000004],[-131.644745,53.003882999999973],[-131.62860099999995,52.998328999999956],[-131.61498999999998,52.991661000000022],[-131.609711,52.988045000000113],[-131.59805299999999,52.97526600000009],[-131.59582499999993,52.964714000000072],[-131.59750399999996,52.958602999999982],[-131.61554000000001,52.920273000000066],[-131.662781,52.882210000000043],[-131.66805999999997,52.878043999999932],[-131.68057299999992,52.871658000000025],[-131.68749999999994,52.869155999999975],[-131.70443699999993,52.867767000000129],[-131.80221599999999,52.86471599999993],[-131.80862400000001,52.865829000000019],[-131.833618,52.88499500000006],[-131.849152,52.901932000000102],[-131.87027,52.922768000000076],[-131.88473499999992,52.934433000000013],[-131.89001500000001,52.93832400000008],[-131.898346,52.941100999999946],[-131.906677,52.940269000000058],[-131.93859899999995,52.934990000000084],[-131.94473299999999,52.931664000000012],[-131.982483,52.879715000000033],[-131.97860700000001,52.875549000000092],[-131.96859699999999,52.874435000000119],[-131.95278899999988,52.875267000000065],[-131.94528200000002,52.876938000000109],[-131.93139599999995,52.881660000000011],[-131.85638399999993,52.856102000000078],[-131.77557399999989,52.716660000000047],[-131.767517,52.713882000000012],[-131.73361199999999,52.69860100000011],[-131.72692900000004,52.695541000000048],[-131.72305299999988,52.691101000000003],[-131.683899,52.642220000000009],[-131.68139600000001,52.637496999999996],[-131.65945399999993,52.581665000000044],[-131.57278400000001,52.529991000000052],[-131.56527700000004,52.531662000000097],[-131.55667099999994,52.532211000000018],[-131.54583700000001,52.530273000000079],[-131.48193400000002,52.507773999999984],[-131.46749899999992,52.501389000000131],[-131.42361499999998,52.460823000000119],[-131.42748999999998,52.414993000000095],[-131.39849899999996,52.377827000000025],[-131.39533999999998,52.375492000000122],[-131.39016699999996,52.374660000000006],[-131.36749299999991,52.381827999999985],[-131.36549400000001,52.384491000000025],[-131.36599699999988,52.390986999999996],[-131.36715700000002,52.397160000000042],[-131.357483,52.403320000000065],[-131.35833699999989,52.414153999999996],[-131.35305799999998,52.41832700000009],[-131.32833900000003,52.431107000000054],[-131.31304899999998,52.434158000000082],[-131.27252199999998,52.438881000000038],[-131.25558499999988,52.440269000000001],[-131.23638900000003,52.439156000000082],[-131.23248299999995,52.434714999999983],[-131.24749800000001,52.365829000000133],[-131.25085399999995,52.359160999999972],[-131.25836200000003,52.34777100000008],[-131.26306199999999,52.34276600000004],[-131.30311599999993,52.332100000000025],[-131.31977799999993,52.335106000000053],[-131.33059700000001,52.332770999999923],[-131.33248899999995,52.293610000000001],[-131.32833900000003,52.284995999999978],[-131.32443199999989,52.280822999999998],[-131.27139299999999,52.277771000000087],[-131.259186,52.284164000000033],[-131.25613399999992,52.290833000000077],[-131.24832199999997,52.302216000000101],[-131.17971799999998,52.317772000000048],[-131.17193599999996,52.319442999999922],[-131.136414,52.311378000000047],[-131.09500099999997,52.286110000000122],[-131.01501500000001,52.225548000000117],[-131.00750699999998,52.217209000000082],[-131.00527999999991,52.206657000000064],[-131.01168799999988,52.193604000000107],[-131.01556400000004,52.187767000000122],[-131.024719,52.178047000000049],[-131.030304,52.173882000000049],[-131.036407,52.170830000000137],[-131.04305999999991,52.168326999999977],[-131.11512799999997,52.168289000000016],[-131.16610700000001,52.125549000000092],[-131.18057299999987,52.121658000000025],[-131.26473999999985,52.11971299999999],[-131.29888900000003,52.150268999999923],[-131.36025999999993,52.189156000000139],[-131.36694299999999,52.192490000000134],[-131.38946499999997,52.205826000000059],[-131.41168200000004,52.220543000000077],[-131.55111699999998,52.333878000000084],[-131.57333399999993,52.360824999999977],[-131.58194000000003,52.379990000000134],[-131.582764,52.385269000000108],[-131.58056599999986,52.390548999999965],[-131.57778899999994,52.393607999999972],[-131.57083099999994,52.396102999999982],[-131.54806500000001,52.400543000000027],[-131.53973399999995,52.401100000000099],[-131.52972399999993,52.400269000000094],[-131.52029400000004,52.397774000000027],[-131.56140099999999,52.431664000000126],[-131.66168199999998,52.478324999999984],[-131.67916899999994,52.483604000000128],[-131.70944199999991,52.491104000000007],[-131.76223800000002,52.50499700000006],[-131.77529899999996,52.51166500000005],[-131.89279199999999,52.582771000000093],[-132.01751699999994,52.677490000000034],[-132.08194000000003,52.727485999999942],[-132.08471700000001,52.732208000000014],[-132.060272,52.755272000000048],[-132.01028399999996,52.775269000000094],[-132.00250199999999,52.776939000000084],[-131.993042,52.774436999999978],[-131.97305299999999,52.764717000000076],[-131.96389799999997,52.756660000000124],[-131.94445799999988,52.735549999999989],[-131.93362400000001,52.728043000000014],[-131.92694099999994,52.724709000000075],[-131.91751099999988,52.722487999999942],[-131.91723599999995,52.725822000000107],[-131.93722499999996,52.763611000000083],[-131.93972799999995,52.768326000000116],[-131.95166,52.781105000000139],[-131.96221899999995,52.788605000000018],[-131.96887200000003,52.791939000000013],[-132.03417999999994,52.812767000000122],[-132.06167599999998,52.813881000000094],[-132.05804399999994,52.804161000000022],[-132.05557299999987,52.793610000000058],[-132.10247800000002,52.749435000000062],[-132.11026000000004,52.748046999999985],[-132.12026999999995,52.748877999999991],[-132.12747199999995,52.750832000000003],[-132.21417199999991,52.804710000000114],[-132.21945199999999,52.808327000000077],[-132.22888199999994,52.816382999999973],[-132.31640599999997,52.902214000000129],[-132.34414700000002,52.931664000000012],[-132.34695399999993,52.936377999999991],[-132.34304799999995,52.942214999999976],[-132.32971199999992,52.94582400000013],[-132.31362899999999,52.948043999999982],[-132.25558499999994,52.954711999999915],[-132.24527,52.953880000000026],[-132.23803699999991,52.951935000000049],[-132.16778599999992,52.928047000000106],[-132.15640300000001,52.958885000000066],[-132.11248799999998,52.987770000000125],[-132.11026000000004,52.993049999999982],[-132.11276199999992,52.997772000000055],[-132.11944599999998,53.00110600000005],[-132.25613399999997,53.028877000000136],[-132.26696799999996,53.030823000000055],[-132.29501300000004,53.031105000000082],[-132.41195700000003,53.031937000000028],[-132.47970599999996,53.027214000000015],[-132.49609399999991,53.032768000000033],[-132.50778199999996,53.040549999999996],[-132.51196300000004,53.044716000000051],[-132.55279499999995,53.089714000000129],[-132.55557299999992,53.094436999999971],[-132.56362899999999,53.139160000000004],[-132.56222500000001,53.145271000000093],[-132.55667099999994,53.149436999999978],[-132.54916399999991,53.151100000000099],[-132.53945899999991,53.148880000000077],[-132.52584799999994,53.142220000000066],[-132.50140399999998,53.133881000000031],[-132.48165899999998,53.130820999999969],[-132.45111099999986,53.128044000000102],[-132.41363499999989,53.127486999999974],[-132.378601,53.129433000000063],[-132.21081499999997,53.141662999999994],[-132.07083099999994,53.153877000000023],[-132.06390399999987,53.156380000000013],[-132.05777,53.159714000000008],[-132.03057899999999,53.179993000000081],[-132.00750700000003,53.1947100000001],[-131.92834500000004,53.230545000000006],[-131.92138699999992,53.233047000000056],[-131.811127,53.253608999999983],[-131.80194099999994,53.253326000000015],[-131.794464,53.251388999999961],[-131.79055800000003,53.247214999999926],[-131.76223800000002,53.196655000000078]],[[-55.778052999999943,53.289719000000105],[-55.786667000000023,53.288330000000087],[-55.794448999999929,53.291107000000011],[-55.797226000000023,53.295546999999999],[-55.793334999999956,53.300545],[-55.785003999999958,53.303604000000007],[-55.776108000000022,53.300270000000012],[-55.776389999999992,53.295273000000066],[-55.778052999999943,53.289719000000105]],[[-128.68945299999996,53.16443600000008],[-128.67944299999994,53.163047999999947],[-128.67083700000001,53.163605000000075],[-128.65222199999999,53.16276600000009],[-128.64196799999996,53.161377000000073],[-128.62469499999997,53.155548000000067],[-128.60555999999997,53.145271000000093],[-128.57611099999991,53.105270000000132],[-128.53167699999995,53.021102999999925],[-128.52890000000002,53.011108000000036],[-128.52056900000002,52.959435000000099],[-128.51834099999991,52.943604000000107],[-128.51779199999987,52.927489999999977],[-128.51834099999991,52.911102000000142],[-128.52001999999999,52.899719000000118],[-128.52279699999991,52.888046000000088],[-128.57028199999996,52.691376000000048],[-128.57223499999992,52.685265000000129],[-128.57528699999995,52.679993000000024],[-128.59359699999993,52.659156999999993],[-128.58526599999988,52.659431000000097],[-128.57748400000003,52.65638000000007],[-128.58581499999991,52.6322100000001],[-128.59222399999993,52.613884000000098],[-128.59722899999991,52.609161000000086],[-128.60497999999995,52.607773000000009],[-128.74887099999995,52.597214000000122],[-128.75167799999997,52.60083000000003],[-128.74859600000002,52.748604000000057],[-128.74804699999999,52.754165999999998],[-128.74444600000004,52.760826000000009],[-128.69250499999998,52.856102000000078],[-128.65335099999999,52.892769000000101],[-128.648346,52.89777400000014],[-128.64474499999994,52.904160000000047],[-128.64334099999996,52.915543000000071],[-128.64196799999996,52.948601000000053],[-128.64334099999996,52.958885000000066],[-128.646973,52.963325999999995],[-128.65335099999999,52.96665999999999],[-128.663635,52.968048000000067],[-128.67138699999998,52.96665999999999],[-128.67694099999994,52.962769000000094],[-128.67999299999997,52.957771000000093],[-128.75112899999999,52.835823000000119],[-128.75390600000003,52.830826000000059],[-128.76223800000002,52.810822000000087],[-128.76446499999997,52.804710000000114],[-128.78057899999999,52.739989999999977],[-128.78140299999995,52.734160999999972],[-128.77999899999998,52.72387700000013],[-128.77780200000001,52.718880000000013],[-128.77111799999994,52.704711999999972],[-128.76556400000004,52.695541000000048],[-128.77889999999991,52.66415400000011],[-128.84637499999997,52.653320000000065],[-128.88445999999999,52.648048000000131],[-128.89251699999994,52.64888000000002],[-129,52.697212000000093],[-129.03277600000001,52.719711000000075],[-129.04779099999996,52.731377000000009],[-129.08029199999999,52.772491000000116],[-129.10861199999999,52.812767000000122],[-129.11080899999996,52.817497000000117],[-129.114441,52.821938000000046],[-129.11886600000003,52.83138300000013],[-129.12191799999994,52.852218999999934],[-129.12191799999994,52.863052000000096],[-129.11999500000002,52.869155999999975],[-129.11080899999996,52.877487000000031],[-129.10360699999995,52.879715000000033],[-129.09500100000002,52.880272000000105],[-129.08444199999997,52.878043999999932],[-129.0763849999999,52.87499200000002],[-129.02224699999988,52.905548000000124],[-128.95178199999992,52.973660000000052],[-128.86999499999996,53.021935000000042],[-128.85498000000001,53.025269000000037],[-128.84082000000001,53.029716000000121],[-128.83639499999998,53.03555300000005],[-128.84359699999999,53.044158999999979],[-128.89556899999997,53.08277099999998],[-128.96389799999992,53.121657999999968],[-128.970551,53.124992000000134],[-129.00222799999995,53.136940000000038],[-129.01168799999999,53.139717000000076],[-129.01583900000003,53.133881000000031],[-129.01501499999995,53.128875999999991],[-129.00473,53.109993000000088],[-128.99386599999997,53.097214000000065],[-128.98748799999998,53.095825000000048],[-128.98110999999994,53.09887700000013],[-128.97387700000002,53.101105000000132],[-128.96444699999995,53.100548000000003],[-128.95666499999999,53.097771000000137],[-128.912781,53.073051000000078],[-128.86444099999989,53.038887000000045],[-128.862213,53.034164000000089],[-129.05584699999997,52.909156999999936],[-129.06915299999991,52.90387700000008],[-129.09500100000002,52.902489000000003],[-129.10583500000001,52.904708999999968],[-129.15945399999998,52.919715999999994],[-129.16583299999996,52.923049999999989],[-129.169464,52.927489999999977],[-129.17529300000001,52.936377999999991],[-129.18554700000004,52.955269000000044],[-129.18722499999996,52.965546000000018],[-129.191956,53.00777400000004],[-129.19137599999999,53.013329000000113],[-129.18804899999992,53.024162000000103],[-129.16665599999993,53.06610100000006],[-129.16168200000004,53.0711060000001],[-129.15472399999999,53.073326000000066],[-129.13165300000003,53.078049000000078],[-129.11804199999989,53.079163000000051],[-129.11749299999991,53.073882999999967],[-129.11804199999989,53.068329000000006],[-129.11499000000003,53.064712999999927],[-129.10861199999999,53.067772000000105],[-129.08248899999995,53.089989000000003],[-129.075287,53.10305000000011],[-129.07333399999999,53.109160999999972],[-129.07055700000001,53.131660000000124],[-129.05889899999988,53.231377000000123],[-129.06027199999988,53.241661000000136],[-129.064728,53.251105999999993],[-129.07193000000001,53.25999500000006],[-129.08221400000002,53.267769000000101],[-129.08972199999994,53.287216000000114],[-129.08612099999999,53.293610000000001],[-129.07971199999997,53.296661000000029],[-129.06664999999992,53.300827000000083],[-129.04305999999997,53.30471],[-129.025848,53.305550000000096],[-129.01861600000001,53.305550000000096],[-128.90084799999994,53.290276000000006],[-128.89138799999989,53.287773000000016],[-128.88137800000004,53.279991000000052],[-128.87777699999992,53.275826000000052],[-128.86389199999991,53.263610999999969],[-128.84359699999999,53.248047000000042],[-128.83221399999996,53.240546999999992],[-128.77529900000002,53.208885000000009],[-128.71167000000003,53.173882000000049],[-128.70526099999989,53.170546999999942],[-128.68945299999996,53.16443600000008]],[[-129.15307599999994,53.098328000000038],[-129.16168200000004,53.097771000000137],[-129.25945999999999,53.09804500000007],[-129.28945899999985,53.101936000000137],[-129.31140099999999,53.116936000000067],[-129.32665999999989,53.128601000000003],[-129.33248900000001,53.13749700000011],[-129.33471699999996,53.142493999999999],[-129.33639500000004,53.152770999999973],[-129.33889799999986,53.179161000000022],[-129.3383179999999,53.184990000000028],[-129.33639500000004,53.191101000000117],[-129.32528699999989,53.216103000000032],[-129.27389500000004,53.328049000000021],[-129.26806599999992,53.331940000000088],[-129.26028399999996,53.333327999999995],[-129.250854,53.333054000000061],[-129.22915599999988,53.328880000000026],[-129.22692899999998,53.326102999999932],[-129.20889299999999,53.321937999999932],[-129.19415299999997,53.315544000000102],[-129.18112199999996,53.308601000000067],[-129.17611699999998,53.30471],[-129.16860999999994,53.296104000000128],[-129.14529399999998,53.22165700000005],[-129.13247699999999,53.118599000000017],[-129.13192699999996,53.11360899999994],[-129.1339109999999,53.107498000000078],[-129.13891599999994,53.102493000000038],[-129.15307599999994,53.098328000000038]],[[-79.942764000000011,53.266936999999984],[-80.009170999999924,53.263885000000073],[-80.018065999999862,53.265830999999991],[-80.024445000000014,53.268883000000073],[-80.081679999999949,53.316101000000003],[-80.083892999999989,53.321106000000043],[-80.085281000000009,53.326942000000088],[-80.073333999999988,53.348877000000073],[-80.068892999999946,53.353325000000041],[-80.061385999999914,53.355553000000043],[-79.999724999999955,53.364716000000044],[-79.944716999999969,53.368050000000039],[-79.950561999999934,53.349716000000058],[-79.951949999999954,53.348327999999981],[-79.913054999999986,53.296104000000128],[-79.91194200000001,53.29055000000011],[-79.913329999999917,53.283051000000114],[-79.920836999999949,53.273048000000074],[-79.927215999999987,53.27027099999998],[-79.942764000000011,53.266936999999984]],[[-129.35833700000001,53.304161000000079],[-129.37441999999999,53.301383999999985],[-129.38363600000002,53.301933000000133],[-129.3875119999999,53.306099000000017],[-129.43499799999995,53.378876000000105],[-129.43307500000003,53.384720000000129],[-129.39501999999999,53.410819999999944],[-129.386414,53.40915700000005],[-129.37970000000001,53.40554800000001],[-129.37387100000001,53.400826000000109],[-129.36663799999991,53.398880000000077],[-129.32861300000002,53.377769000000001],[-129.30557299999998,53.335823000000005],[-129.30334499999992,53.331107999999972],[-129.30749500000002,53.31888600000002],[-129.31249999999989,53.313880999999981],[-129.32693499999999,53.309715000000097],[-129.35833700000001,53.304161000000079]],[[-55.787505999999951,53.394157000000064],[-55.793059999999969,53.391663000000108],[-55.801392000000021,53.392493999999942],[-55.949439999999981,53.430275000000108],[-55.958053999999947,53.434158000000082],[-55.971663999999919,53.445824000000016],[-55.978881999999942,53.454712000000029],[-55.979163999999912,53.459159999999997],[-55.976386999999988,53.463051000000064],[-55.958892999999932,53.472487999999998],[-55.945549000000028,53.478600000000142],[-55.931670999999994,53.483879000000115],[-55.923889000000031,53.485549999999989],[-55.916388999999981,53.485825000000034],[-55.883057000000008,53.486382000000106],[-55.878051999999968,53.486656000000039],[-55.811942999999928,53.483879000000115],[-55.757224999999949,53.468322999999998],[-55.740554999999915,53.462212000000079],[-55.729163999999969,53.455269000000101],[-55.729439000000013,53.450271999999984],[-55.787505999999951,53.394157000000064]],[[-128.94250499999998,53.317497000000003],[-129.11138899999997,53.315826000000129],[-129.12222299999996,53.318054000000132],[-129.12582399999991,53.322495000000004],[-129.13891599999994,53.339989000000116],[-129.14334099999996,53.349716000000058],[-129.14416499999993,53.354996000000142],[-129.14306599999986,53.366104000000121],[-129.14083899999997,53.37221500000004],[-129.13445999999993,53.383880999999974],[-129.08270299999998,53.429259999999999],[-129.05406199999999,53.453601999999989],[-129.05883799999998,53.487965000000145],[-129.051941,53.50499700000006],[-129.04779099999996,53.510551000000021],[-129.03778099999988,53.520271000000093],[-129.02194199999997,53.533882000000062],[-129.015289,53.536658999999986],[-128.99941999999987,53.53943600000008],[-128.988586,53.537216000000058],[-128.984711,53.533051000000057],[-128.98416099999997,53.52777100000003],[-128.98553499999997,53.523048000000017],[-128.98611499999998,53.513054000000011],[-128.98611499999998,53.502220000000136],[-128.9844359999999,53.491661000000079],[-128.97555499999987,53.472762999999986],[-128.95361300000002,53.446655000000021],[-128.94137599999993,53.434158000000082],[-128.93612699999994,53.430275000000108],[-128.90335099999993,53.39138000000014],[-128.90112299999998,53.386658000000068],[-128.90029900000002,53.381378000000041],[-128.91805999999997,53.331383000000017],[-128.92251599999997,53.325828999999999],[-128.92806999999999,53.321663000000115],[-128.94250499999998,53.317497000000003]],[[-79.709732000000031,53.508049000000142],[-79.720276000000013,53.507499999999993],[-79.730559999999969,53.508888000000127],[-79.746947999999918,53.513328999999999],[-79.764724999999942,53.523605000000089],[-79.769729999999925,53.527214000000129],[-79.773620999999991,53.531662000000097],[-79.77027899999996,53.536942000000124],[-79.761397999999929,53.546104000000071],[-79.755004999999983,53.543053000000043],[-79.70695499999988,53.515549000000021],[-79.703338999999914,53.511108000000092],[-79.709732000000031,53.508049000000142]],[[-129.93472299999985,53.484161000000029],[-129.94277999999991,53.482764999999972],[-129.95220899999998,53.483047000000056],[-130.01446499999997,53.501938000000052],[-130.02111799999994,53.505272000000048],[-129.98858599999988,53.528603000000089],[-129.94195599999995,53.551102000000071],[-129.93417399999998,53.552489999999977],[-129.92611699999992,53.551658999999972],[-129.89334099999991,53.545546999999999],[-129.88668799999999,53.542221000000097],[-129.88418599999994,53.537216000000058],[-129.88696300000004,53.534163999999976],[-129.894745,53.521934999999928],[-129.89889499999998,53.516388000000006],[-129.913635,53.501938000000052],[-129.92916899999994,53.488327000000083],[-129.93472299999985,53.484161000000029]],[[-129.87942499999991,53.392768999999987],[-129.72915599999993,53.215271000000087],[-129.73028599999992,53.204163000000108],[-129.73220799999996,53.198044000000095],[-129.74249299999997,53.178329000000076],[-129.75085399999989,53.166939000000013],[-129.75585899999993,53.162209000000018],[-129.76223799999997,53.158882000000062],[-129.86416600000001,53.153046000000018],[-129.91223100000002,53.156380000000013],[-129.93167099999999,53.158043000000077],[-129.93695099999997,53.161933999999974],[-130.08804299999991,53.289436000000137],[-130.11111500000004,53.328049000000021],[-130.16500899999988,53.358330000000137],[-130.20333899999997,53.378876000000105],[-130.24249299999997,53.384163000000058],[-130.261414,53.384720000000129],[-130.28695700000003,53.381378000000041],[-130.29638699999998,53.381660000000068],[-130.30584699999997,53.384163000000058],[-130.31640600000003,53.391937000000041],[-130.40194700000001,53.479988000000048],[-130.52722199999999,53.552216000000044],[-130.52999899999998,53.567771999999991],[-130.52944899999994,53.573326000000009],[-130.52224699999994,53.618599000000074],[-130.52029399999998,53.624709999999993],[-130.50836200000003,53.631935000000055],[-130.459991,53.637496999999996],[-130.450287,53.634995000000117],[-130.39584399999995,53.619438000000059],[-130.39111300000002,53.61693600000001],[-130.37554899999992,53.612212999999997],[-130.27529900000002,53.580276000000026],[-130.20220900000004,53.553878999999938],[-130.14083900000003,53.528877000000023],[-129.97720300000003,53.455550999999957],[-129.94415299999991,53.438598999999954],[-129.93222000000003,53.431380999999988],[-129.92056300000002,53.424164000000019],[-129.88418599999994,53.397217000000126],[-129.87942499999991,53.392768999999987]],[[-129.08639500000004,53.446097999999949],[-129.15750099999997,53.392768999999987],[-129.16778599999998,53.593880000000127],[-129.16583299999996,53.610825000000091],[-129.16305499999999,53.622489999999971],[-129.16082799999998,53.62860100000006],[-129.15307599999994,53.638603000000046],[-129.14724699999994,53.642494000000113],[-129.14083899999997,53.645546000000024],[-129.05249000000003,53.681106999999997],[-129.03860499999985,53.686377999999991],[-129.00805699999995,53.693321000000026],[-128.98330699999991,53.696655000000021],[-128.87554899999998,53.709434999999928],[-128.832764,53.712494000000106],[-128.82388299999997,53.713051000000007],[-128.81887800000004,53.709160000000111],[-128.82110599999999,53.703049000000021],[-128.82360799999998,53.700546000000088],[-128.87222299999991,53.661102000000142],[-128.97970599999996,53.58387799999997],[-128.98638900000003,53.580826000000059],[-128.99221799999992,53.576942000000031],[-129.07556199999993,53.514717000000132],[-129.08554100000003,53.50499700000006],[-129.08999599999999,53.499435000000062],[-129.09359699999993,53.492767000000129],[-129.09414699999996,53.487213000000111],[-129.093323,53.481934000000138],[-129.08889799999997,53.472487999999998],[-129.08526599999993,53.468047999999953],[-129.08306899999997,53.463326000000052],[-129.08221400000002,53.458328000000051],[-129.08276399999988,53.452492000000007],[-129.08639500000004,53.446097999999949]],[[-130.09109499999994,53.569443000000035],[-130.09832800000004,53.566940000000102],[-130.10775799999999,53.567497000000003],[-130.14862099999999,53.571938000000102],[-130.21887199999992,53.587212000000136],[-130.22833299999996,53.589431999999988],[-130.32916299999994,53.618049999999982],[-130.34249899999998,53.624709999999993],[-130.39028899999988,53.669991000000039],[-130.40335099999999,53.682495000000074],[-130.39111300000002,53.699432000000058],[-130.29888899999997,53.796944000000053],[-130.2836299999999,53.79833200000013],[-130.27194199999997,53.797775000000058],[-130.26168799999994,53.796386999999982],[-130.24664299999989,53.790276000000063],[-130.23330699999985,53.783607000000018],[-130.11944600000004,53.686653000000035],[-130.11721799999998,53.681938000000002],[-130.09109499999994,53.569443000000035]],[[-56.86721799999998,53.764998999999932],[-56.948607999999979,53.750000000000057],[-56.982773000000009,53.755271999999991],[-57.01139099999989,53.781105000000139],[-57.014450000000011,53.785553000000107],[-57.012222000000008,53.790276000000063],[-57.006667999999991,53.794716000000108],[-57,53.79833200000013],[-56.984726000000023,53.803879000000109],[-56.966942000000017,53.803879000000109],[-56.863060000000019,53.798050000000103],[-56.84444400000001,53.792496000000085],[-56.847518999999977,53.786644000000138],[-56.86721799999998,53.764998999999932]],[[-129.82611099999991,53.724158999999986],[-129.59722899999997,53.550270000000125],[-129.51611300000002,53.488045000000056],[-129.42471299999994,53.411377000000016],[-129.43472299999996,53.401656999999943],[-129.45165999999995,53.379158000000018],[-129.45498699999996,53.372490000000028],[-129.47415199999995,53.289162000000033],[-129.47387700000002,53.239990000000091],[-129.50668299999995,53.216660000000104],[-129.56390399999998,53.207497000000103],[-129.72582999999992,53.340546000000018],[-129.800568,53.380546999999979],[-129.80721999999997,53.384163000000058],[-129.82223499999986,53.401382000000126],[-129.85833700000001,53.456383000000073],[-129.87719699999997,53.50499700000006],[-129.87026999999995,53.518051000000128],[-129.86999500000002,53.534721000000047],[-129.87026999999995,53.545546999999999],[-129.88391100000001,53.579720000000009],[-129.91607699999992,53.601715000000013],[-129.9192349999999,53.604050000000143],[-129.92489599999999,53.605545000000006],[-129.93022199999996,53.605213000000106],[-129.939728,53.603549999999984],[-129.94305399999985,53.601215000000025],[-129.94605999999987,53.598216999999977],[-129.94555700000001,53.59521500000011],[-129.96139500000004,53.594711000000132],[-129.96554600000002,53.589156999999943],[-129.99941999999993,53.574714999999969],[-130.00750699999998,53.573326000000009],[-130.01611300000002,53.572769000000108],[-130.02694699999989,53.574714999999969],[-130.04028299999993,53.58138300000013],[-130.05166600000001,53.594437000000028],[-130.05639599999995,53.603882000000112],[-130.05584699999991,53.609436000000073],[-130.05166600000001,53.615273000000059],[-130.03085299999987,53.622765000000015],[-129.98288000000002,53.641605000000084],[-129.97805799999992,53.642436999999973],[-129.96240199999994,53.643436000000065],[-129.95622300000002,53.642769000000101],[-129.94955400000003,53.641434000000118],[-129.93505900000002,53.636272000000076],[-129.92938199999998,53.634765999999956],[-129.926895,53.636772000000065],[-129.92820699999993,53.639602999999966],[-129.93440199999992,53.644268000000125],[-129.94956999999994,53.646805000000086],[-129.95996100000002,53.649501999999927],[-129.96726999999993,53.650299000000018],[-129.98693799999995,53.658600000000092],[-130.01889,53.653046000000074],[-130.091949,53.677216000000101],[-130.15695199999999,53.721375000000023],[-130.283905,53.83277099999998],[-130.286407,53.837493999999992],[-130.27917499999995,53.856384000000105],[-130.27029400000004,53.875549000000092],[-130.26641799999999,53.881378000000097],[-130.25472999999994,53.889160000000061],[-130.20166,53.912491000000102],[-130.19445799999994,53.914711000000125],[-130.18640099999999,53.916100000000085],[-130.10916099999992,53.885551000000021],[-129.96444699999995,53.805824000000086],[-129.83139,53.728043000000014],[-129.82611099999991,53.724158999999986]],[[-79.864166000000012,53.906380000000013],[-79.873885999999914,53.90415999999999],[-79.906113000000005,53.913879000000009],[-79.918883999999991,53.920273000000066],[-79.922775000000001,53.924713000000054],[-79.925277999999878,53.929717999999923],[-79.926392000000021,53.935265000000072],[-79.915008999999998,53.933876000000055],[-79.867492999999968,53.919715999999994],[-79.862212999999997,53.915825000000098],[-79.860001000000011,53.910820000000058],[-79.864166000000012,53.906380000000013]],[[-130.14974999999998,53.989159000000086],[-130.16805999999997,53.988884000000098],[-130.179169,53.990829000000076],[-130.19415300000003,53.997214999999983],[-130.20306400000004,54.005271999999934],[-130.21499600000004,54.029160000000104],[-130.21694899999994,54.039436000000137],[-130.21640000000002,54.044998000000078],[-130.21304299999997,54.051659000000029],[-130.20278899999994,54.069160000000011],[-130.19360399999999,54.079720000000123],[-130.18640099999999,54.081940000000145],[-130.17834500000004,54.083328000000051],[-130.16861,54.083054000000118],[-130.15917999999994,54.080551000000128],[-130.15557899999999,54.075554000000011],[-130.14889500000004,54.072220000000016],[-130.14361599999995,54.068328999999949],[-130.13973999999996,54.064156000000025],[-130.13247699999999,54.049995000000024],[-130.12249799999995,54.024993999999992],[-130.1213679999999,54.019989000000123],[-130.12249799999995,54.0086060000001],[-130.12441999999999,54.002495000000067],[-130.13528399999996,53.993607000000054],[-130.14974999999998,53.989159000000086]],[[-130.25918599999994,54.004715000000033],[-130.237213,53.984161000000086],[-130.23330699999985,53.979987999999935],[-130.23083499999996,53.975266000000033],[-130.228882,53.964714000000072],[-130.22998000000001,53.953606000000093],[-130.23330699999985,53.946938000000102],[-130.24249299999997,53.936377999999991],[-130.338593,53.839157000000114],[-130.34445199999999,53.835266000000047],[-130.35220299999997,53.833878000000141],[-130.37860099999995,53.831939999999975],[-130.38723800000002,53.831383000000073],[-130.45016499999997,53.864326000000005],[-130.45433000000003,53.866325000000018],[-130.45849599999997,53.882159999999942],[-130.41278099999994,53.958602999999982],[-130.40777600000001,53.963325999999995],[-130.400848,53.965828000000045],[-130.38165300000003,53.965271000000143],[-130.35055499999993,53.961661999999933],[-130.341095,53.961380000000077],[-130.33306899999991,53.962769000000094],[-130.32748400000003,53.966934000000094],[-130.34359699999987,53.984993000000031],[-130.35497999999995,53.993324000000086],[-130.42944299999994,53.983047000000113],[-130.4375,53.981659000000036],[-130.44387800000004,53.978600000000029],[-130.452789,53.968048000000067],[-130.47517400000004,53.944213999999931],[-130.47550999999993,53.940712000000076],[-130.47917199999995,53.926379999999995],[-130.48266599999988,53.915379000000144],[-130.48516799999993,53.912048000000027],[-130.4895019999999,53.910549000000003],[-130.49465900000001,53.910217000000046],[-130.500854,53.910881000000131],[-130.524338,53.914711000000125],[-130.54724099999999,53.903877000000023],[-130.55248999999998,53.907767999999919],[-130.55639599999995,53.911934000000031],[-130.56527699999998,53.925827000000027],[-130.57748400000003,53.93721000000005],[-130.591949,53.949158000000125],[-130.59722899999997,53.953048999999965],[-130.60278299999993,53.956657000000064],[-130.61080900000002,53.959717000000126],[-130.62191799999999,53.961661999999933],[-130.65805099999989,53.964439000000027],[-130.66696200000001,53.963882000000126],[-130.67251599999997,53.959991000000059],[-130.67666600000001,53.954162999999994],[-130.69528200000002,53.91944100000012],[-130.698059,53.914154000000053],[-130.69555700000001,53.909431000000041],[-130.68499799999989,53.901932000000045],[-130.66305499999993,53.892220000000123],[-130.64666699999998,53.886657999999954],[-130.633331,53.879990000000021],[-130.62777700000004,53.876099000000124],[-130.62249799999995,53.872215000000097],[-130.6177669999999,53.862770000000012],[-130.61804199999995,53.857216000000051],[-130.62136799999996,53.85054800000006],[-130.62554899999998,53.844711000000075],[-130.6305539999999,53.839989000000003],[-130.64251699999994,53.83277099999998],[-130.65139799999997,53.834435000000042],[-130.69583099999994,53.844436999999971],[-130.70639,53.851936000000137],[-130.71026599999999,53.856384000000105],[-130.71276899999998,53.861107000000118],[-130.72305299999999,53.917213000000004],[-130.72277799999995,53.922768000000076],[-130.7202759999999,53.93471500000004],[-130.71777299999991,53.939986999999974],[-130.667236,53.986938000000009],[-130.66168200000004,53.990829000000076],[-130.59527600000001,54.026382000000069],[-130.523346,54.059989999999914],[-130.41113300000001,54.100830000000087],[-130.40249600000004,54.101386999999988],[-130.37081899999998,54.087212000000079],[-130.33612099999999,54.06749700000006],[-130.30499299999991,54.045273000000122],[-130.25918599999994,54.004715000000033]],[[-58.518332999999927,54.051659000000029],[-58.526664999999923,54.050545000000056],[-58.536666999999966,54.05082700000014],[-58.545554999999979,54.052216000000101],[-58.556389000000024,54.054710000000057],[-58.56138599999997,54.058044000000052],[-58.56138599999997,54.063880999999981],[-58.55777699999993,54.069160000000011],[-58.552779999999927,54.074440000000038],[-58.53556100000003,54.086654999999951],[-58.503058999999951,54.103050000000053],[-58.468605000000025,54.114716000000044],[-58.450554000000011,54.11721],[-58.437774999999988,54.115547000000049],[-58.378608999999926,54.106659000000093],[-58.373885999999914,54.104164000000083],[-58.378052000000025,54.099998000000141],[-58.407172999999943,54.090561000000037],[-58.426108999999997,54.070831000000055],[-58.43250299999994,54.067214999999976],[-58.440551999999968,54.064713000000097],[-58.456389999999999,54.061661000000015],[-58.518332999999927,54.051659000000029]],[[-132.808044,54.120270000000062],[-132.78890999999999,54.119987000000094],[-132.77999899999998,54.120827000000133],[-132.75723300000004,54.126380999999924],[-132.73580899999996,54.133881000000031],[-132.70306399999993,54.139160000000004],[-132.65835600000003,54.142220000000066],[-132.6480709999999,54.141380000000026],[-132.63946499999997,54.138603000000103],[-132.57528699999995,54.115547000000049],[-132.56973300000004,54.111938000000066],[-132.55777,54.088043000000084],[-132.558899,54.048332000000073],[-132.56054699999999,54.04222100000004],[-132.56664999999992,54.029160000000104],[-132.57583599999998,54.019157000000007],[-132.58139,54.014999000000103],[-132.59387199999998,54.0086060000001],[-132.62554899999992,54.002220000000023],[-132.63275099999993,53.999718000000144],[-132.66418499999997,53.98333000000008],[-132.67999299999997,53.958885000000066],[-132.68167099999999,53.952773999999977],[-132.68029799999999,53.947769000000108],[-132.65890499999989,53.939430000000073],[-132.57223499999992,53.976653999999996],[-132.55584699999997,53.989159000000086],[-132.55029299999995,53.993880999999988],[-132.5477909999999,53.999161000000072],[-132.54888899999997,54.004166000000112],[-132.55306999999999,54.008331000000112],[-132.54833999999994,54.02693899999997],[-132.54528800000003,54.033607000000131],[-132.54055799999998,54.038329999999974],[-132.41665599999999,54.096100000000035],[-132.40972899999997,54.098602000000085],[-132.40167199999985,54.099998000000141],[-132.30111699999998,54.111664000000133],[-132.29055800000003,54.110549999999989],[-132.28582799999998,54.107773000000066],[-132.25280799999996,54.08526599999999],[-132.22833300000002,54.065826000000015],[-132.15029899999996,53.992767000000015],[-132.142517,53.978600000000029],[-132.11111499999998,53.878326000000015],[-132.11721799999992,53.864998000000014],[-132.125,53.853324999999984],[-132.13445999999988,53.843605000000082],[-132.22500600000001,53.780273000000022],[-132.23111,53.776939000000027],[-132.24527,53.772217000000126],[-132.47442599999999,53.707496999999989],[-132.50500499999998,53.700271999999927],[-132.52084399999995,53.697212000000093],[-132.53805499999999,53.695823999999959],[-132.55721999999997,53.695823999999959],[-132.56832899999995,53.697768999999994],[-132.58889799999992,53.699715000000026],[-132.60693399999991,53.698874999999987],[-132.62441999999993,53.697487000000081],[-132.64724699999994,53.69193300000012],[-132.65890499999989,53.684433000000013],[-132.66332999999997,53.679436000000123],[-132.665009,53.673325000000034],[-132.46362299999993,53.612770000000069],[-132.41805999999997,53.606102000000078],[-132.32138099999992,53.663605000000132],[-132.31527699999998,53.666939000000127],[-132.308044,53.669158999999922],[-132.29943799999995,53.669991000000039],[-132.290009,53.669716000000051],[-132.27890000000002,53.6680530000001],[-132.24554399999994,53.662490999999989],[-132.15640300000001,53.716385000000002],[-132.15249600000004,53.812492000000077],[-132.08450299999998,53.872738000000027],[-132.106201,53.917881000000023],[-132.126373,53.979431000000034],[-132.07250999999997,54.022766000000047],[-132.01501499999989,54.021935000000042],[-131.98803699999996,54.023048000000074],[-131.97109999999998,54.025269000000037],[-131.87499999999994,54.052773000000002],[-131.86053500000003,54.057495000000074],[-131.81777999999997,54.071937999999989],[-131.75473,54.094993999999986],[-131.72778299999999,54.106102000000021],[-131.71499599999999,54.112495000000138],[-131.70361299999996,54.120543999999995],[-131.67193599999996,54.146660000000054],[-131.66305499999999,54.152214000000072],[-131.66000399999996,54.131104000000107],[-131.66665599999999,54.079436999999984],[-131.67279099999996,54.044158999999979],[-131.67971799999998,54.019714000000135],[-131.70498699999996,53.966934000000094],[-131.72082499999999,53.943878000000041],[-131.73889199999996,53.923324999999977],[-131.78640699999994,53.874435000000119],[-131.79666099999997,53.865273000000002],[-131.82971199999992,53.841102999999976],[-131.85333300000002,53.816382999999973],[-131.86886600000003,53.79332700000009],[-131.87222299999996,53.786942000000067],[-131.93331899999998,53.615273000000059],[-131.93499800000001,53.609161000000086],[-131.94000199999988,53.519714000000022],[-131.93917799999991,53.508888000000127],[-131.91778599999998,53.399162000000103],[-131.90863000000002,53.357498000000021],[-131.95916699999992,53.276382000000069],[-131.96832299999988,53.266388000000063],[-131.98220799999996,53.251663000000121],[-131.988586,53.248604000000114],[-132.00585899999993,53.247214999999926],[-132.036407,53.25],[-132.0561219999999,53.253326000000015],[-132.08331299999992,53.253052000000082],[-132.17138699999998,53.23832700000014],[-132.19500700000003,53.233879000000002],[-132.21054100000003,53.230545000000006],[-132.21749899999998,53.228324999999984],[-132.27279699999997,53.210274000000027],[-132.27029399999998,53.205551000000014],[-132.26611300000002,53.20138500000013],[-132.25558499999994,53.193877999999984],[-132.23776199999998,53.188881000000094],[-132.22997999999995,53.190544000000045],[-132.21581999999995,53.195267000000001],[-132.20361299999996,53.201659999999947],[-132.19415299999991,53.201659999999947],[-132.14501999999999,53.198325999999952],[-132.13391100000001,53.196655000000078],[-132.12441999999987,53.194153000000028],[-132.12191799999999,53.189430000000016],[-132.158905,53.169990999999982],[-132.18695099999997,53.160545000000013],[-132.19473300000004,53.158882000000062],[-132.390289,53.142769000000044],[-132.40835599999997,53.142220000000066],[-132.44665499999991,53.143607999999972],[-132.45748900000001,53.145271000000093],[-132.506958,53.161102000000085],[-132.53668199999998,53.178879000000109],[-132.56527700000004,53.212769000000037],[-132.57638499999996,53.232208000000128],[-132.58581500000003,53.240273000000059],[-132.59664899999996,53.247489999999971],[-132.61471599999993,53.252777000000094],[-132.64529399999992,53.255553999999961],[-132.66473400000001,53.256386000000077],[-132.68362400000001,53.256660000000011],[-132.67584199999999,53.281661999999926],[-132.61944599999998,53.300270000000012],[-132.55221599999999,53.308043999999995],[-132.54446399999995,53.309433000000013],[-132.53973400000001,53.314438000000052],[-132.53695700000003,53.321106000000043],[-132.53918499999997,53.326385000000016],[-132.54333499999996,53.330551000000071],[-132.54998799999987,53.333878000000027],[-132.55835000000002,53.336655000000121],[-132.56860399999999,53.337494000000106],[-132.67001300000004,53.326942000000088],[-132.72000100000002,53.320830999999998],[-132.73388699999998,53.337212000000022],[-132.709991,53.370270000000005],[-132.70443699999993,53.374435000000005],[-132.69750999999991,53.376937999999996],[-132.52076699999998,53.340160000000026],[-132.51744099999996,53.337990000000104],[-132.41641200000004,53.2972180000001],[-132.41055299999994,53.294715999999994],[-132.406677,53.300545],[-132.40362500000003,53.30721299999999],[-132.40057399999995,53.319443000000092],[-132.40029900000002,53.330826000000116],[-132.40280200000001,53.335548000000017],[-132.406677,53.339714000000072],[-132.41223099999996,53.343604999999968],[-132.52084399999995,53.412209000000132],[-132.54138199999994,53.416382000000112],[-132.73580899999996,53.453323000000012],[-132.85775799999999,53.461104999999975],[-132.86749299999997,53.463608000000136],[-132.87277199999988,53.467209000000025],[-132.97250399999996,53.555824000000143],[-132.991669,53.583054000000004],[-132.9941409999999,53.587769000000037],[-132.98889199999991,53.591934000000037],[-132.96139500000004,53.600273000000072],[-132.95361300000002,53.601936000000023],[-132.94415300000003,53.601936000000023],[-132.93444799999986,53.599716000000001],[-132.91805999999997,53.588600000000042],[-132.90972899999997,53.585823000000005],[-132.89862099999999,53.584160000000054],[-132.89083900000003,53.585548000000131],[-132.88445999999999,53.588882000000126],[-132.88082900000001,53.594711000000132],[-132.8805539999999,53.600273000000072],[-132.88192700000002,53.605552999999986],[-132.8861389999999,53.609717999999987],[-132.92028800000003,53.637214999999912],[-132.935272,53.648604999999975],[-132.95056199999999,53.654709000000025],[-133.00778200000002,53.676383999999985],[-132.95361300000002,53.682770000000119],[-132.95443699999998,53.702774000000034],[-132.9844359999999,53.742767000000072],[-133.02471899999995,53.751389000000074],[-133.03362999999996,53.75277699999998],[-133.09387200000003,53.775551000000121],[-133.10082999999997,53.778603000000032],[-133.10638399999993,53.782494000000099],[-133.10916099999997,53.786942000000067],[-133.13751199999996,53.87499200000002],[-133.13891599999994,53.880272000000048],[-133.14001500000001,53.908043000000134],[-133.13833599999992,53.914154000000053],[-133.13391100000001,53.919159000000093],[-133.11639399999996,53.934158000000139],[-133.09527599999996,53.949432000000058],[-133.09081999999995,53.954162999999994],[-133.04110700000001,54.031661999999983],[-133.03973400000001,54.037773000000072],[-133.04083299999996,54.0430530000001],[-133.05862399999995,54.076102999999989],[-133.07916299999999,54.09777100000008],[-133.08193999999992,54.102492999999981],[-133.07165499999996,54.168883999999991],[-133.06722999999988,54.173881999999992],[-133.04083299999996,54.176102000000014],[-133.03112799999991,54.176102000000014],[-132.94027700000004,54.161377000000073],[-132.93029799999994,54.15915700000005],[-132.92001299999993,54.15248900000006],[-132.90335099999993,54.135826000000009],[-132.82748400000003,54.122490000000084],[-132.808044,54.120270000000062]],[[-130.19555699999995,54.118050000000039],[-130.21166999999997,54.115273000000116],[-130.22109999999998,54.115547000000049],[-130.23220799999996,54.117493000000138],[-130.24581899999993,54.124161000000129],[-130.25112899999999,54.128044000000045],[-130.25500499999998,54.132209999999986],[-130.261414,54.141380000000026],[-130.26364099999995,54.146102999999982],[-130.26473999999996,54.151381999999955],[-130.26306199999993,54.16832700000009],[-130.2611389999999,54.174164000000076],[-130.25778199999996,54.180824000000086],[-130.2528079999999,54.185547000000099],[-130.23971599999999,54.189712999999983],[-130.23083499999996,54.190269000000001],[-130.20944199999985,54.187209999999993],[-130.20999099999989,54.18360100000001],[-130.20166,54.183052000000032],[-130.19223,54.180549999999982],[-130.17861900000003,54.173607000000004],[-130.16113300000001,54.16276600000009],[-130.15585299999992,54.158882000000062],[-130.15194699999995,54.154434000000094],[-130.15112299999998,54.149436999999978],[-130.153076,54.143326000000059],[-130.158051,54.138328999999999],[-130.169464,54.130547000000035],[-130.19555699999995,54.118050000000039]],[[-79.469727000000034,54.167496000000085],[-79.477218999999877,54.165825000000041],[-79.483611999999994,54.169159000000036],[-79.485001000000011,54.174712999999997],[-79.481109999999944,54.187492000000077],[-79.475554999999929,54.191376000000105],[-79.43472300000002,54.200272000000041],[-79.413054999999986,54.191657999999961],[-79.418610000000001,54.187209999999993],[-79.426392000000021,54.183052000000032],[-79.469727000000034,54.167496000000085]],[[-130.64862099999999,54.114441000000056],[-130.67138699999992,54.107773000000066],[-130.69055199999997,54.108330000000137],[-130.69888299999997,54.111107000000061],[-130.77417000000003,54.142220000000066],[-130.78500399999996,54.149994000000049],[-130.79806500000001,54.162208999999962],[-130.800568,54.166939000000013],[-130.79861500000004,54.173050000000103],[-130.78167699999995,54.211662000000103],[-130.77444500000001,54.213882000000069],[-130.76391599999999,54.212769000000037],[-130.75613399999992,54.209159999999997],[-130.74636799999996,54.206657000000064],[-130.72582999999997,54.196655000000078],[-130.64889500000004,54.149719000000061],[-130.64501999999993,54.145271000000093],[-130.64001500000001,54.135826000000009],[-130.63919099999993,54.130820999999969],[-130.63946499999997,54.124992000000134],[-130.64279199999999,54.118599000000017],[-130.64862099999999,54.114441000000056]],[[-130.35555999999991,54.257773999999984],[-130.36663799999991,54.241104000000007],[-130.375,54.244155999999975],[-130.38861099999997,54.250832000000059],[-130.40057400000001,54.258048999999971],[-130.45556599999998,54.295830000000137],[-130.46639999999996,54.303322000000094],[-130.46722399999993,54.308601000000067],[-130.44750999999991,54.325828999999999],[-130.44000199999999,54.328049000000021],[-130.43112199999996,54.328606000000093],[-130.41778599999992,54.326385000000016],[-130.39196799999996,54.312492000000134],[-130.38528400000001,54.308884000000035],[-130.37997399999995,54.305267000000072],[-130.37582399999997,54.300827000000083],[-130.35470599999996,54.269157000000007],[-130.35220299999997,54.264442000000145],[-130.35555999999991,54.257773999999984]],[[-130.26641799999999,54.260551000000078],[-130.32528699999995,54.243050000000096],[-130.33416699999998,54.244713000000047],[-130.33804299999997,54.248878000000047],[-130.355255,54.282211000000075],[-130.35415599999999,54.293326999999977],[-130.350281,54.305550000000039],[-130.34445199999999,54.30971500000004],[-130.29000899999994,54.332214000000022],[-130.27279699999991,54.329720000000066],[-130.26751699999994,54.325828999999999],[-130.25973499999998,54.317497000000003],[-130.25250199999999,54.303047000000049],[-130.25058000000001,54.292770000000075],[-130.25167799999991,54.281380000000013],[-130.255585,54.269440000000145],[-130.25973499999998,54.263610999999912],[-130.26641799999999,54.260551000000078]],[[-130.70416299999994,54.356659000000036],[-130.745544,54.354713000000118],[-130.754456,54.356102000000135],[-130.76391599999999,54.364159000000086],[-130.76724200000001,54.374161000000072],[-130.76834099999991,54.379433000000006],[-130.76779199999987,54.384995000000117],[-130.76446499999992,54.389434999999992],[-130.75805699999995,54.392494000000113],[-130.72943099999986,54.402771000000087],[-130.72222899999991,54.404991000000109],[-130.71417199999996,54.406380000000127],[-130.699432,54.40665400000006],[-130.68890399999998,54.393326000000059],[-130.68331899999998,54.373047000000099],[-130.685272,54.36693600000001],[-130.6894529999999,54.361381999999992],[-130.69610599999999,54.358047000000113],[-130.70416299999994,54.356659000000036]],[[-57.324721999999952,54.498877999999991],[-57.342498999999918,54.498604000000057],[-57.351668999999958,54.500275000000101],[-57.356666999999959,54.502220000000079],[-57.362777999999992,54.506104000000107],[-57.365004999999996,54.511664999999994],[-57.365554999999972,54.516387999999949],[-57.362502999999947,54.527489000000116],[-57.359443999999996,54.533332999999914],[-57.333327999999995,54.565543999999989],[-57.327782000000013,54.570831000000112],[-57.321114000000023,54.574997000000053],[-57.267220000000009,54.585548000000131],[-57.265556000000004,54.580551000000014],[-57.269722000000002,54.574997000000053],[-57.272728000000029,54.572495000000117],[-57.239440999999999,54.522217000000012],[-57.240279999999984,54.517769000000044],[-57.255004999999926,54.513328999999999],[-57.293059999999912,54.503609000000097],[-57.307776999999987,54.500549000000035],[-57.324721999999952,54.498877999999991]],[[-130.95166,54.454711999999972],[-130.95944199999997,54.453323000000012],[-130.96499600000004,54.456940000000145],[-130.96749899999992,54.461662000000047],[-130.96609499999994,54.510826000000009],[-130.96472199999994,54.527771000000143],[-130.96112099999999,54.539992999999981],[-130.93057299999998,54.61471599999993],[-130.92556799999994,54.619438000000059],[-130.88891599999994,54.628876000000048],[-130.88137800000004,54.629158000000132],[-130.754456,54.62943300000012],[-130.74777199999994,54.626099000000124],[-130.74664299999995,54.62082700000002],[-130.74694799999997,54.615273000000059],[-130.7441409999999,54.60166200000009],[-130.745544,54.584717000000126],[-130.74914599999994,54.572769000000051],[-130.75250199999999,54.566101000000117],[-130.75613399999992,54.559433000000126],[-130.76083399999999,54.554710000000114],[-130.76666299999999,54.550545000000113],[-130.84915199999995,54.496941000000106],[-130.85583500000001,54.493881000000044],[-130.93695099999997,54.459434999999985],[-130.95166,54.454711999999972]],[[-79.667220999999927,54.76388500000013],[-79.726944000000003,54.752495000000067],[-79.710281000000009,54.76388500000013],[-79.703613000000018,54.766937000000041],[-79.611114999999984,54.79332700000009],[-79.587218999999948,54.799164000000019],[-79.624435000000005,54.779716000000121],[-79.631103999999993,54.776657000000114],[-79.637786999999946,54.773605000000032],[-79.659728999999913,54.766106000000036],[-79.667220999999927,54.76388500000013]],[[-130.26834099999991,54.714995999999985],[-130.370544,54.692214999999976],[-130.37887599999988,54.695267000000058],[-130.37609899999995,54.700546000000031],[-130.37109399999991,54.705269000000044],[-130.32693499999999,54.739716000000044],[-130.32110599999987,54.743881000000044],[-130.22415199999989,54.803046999999992],[-130.21749899999998,54.806380999999988],[-130.20944199999985,54.807770000000119],[-130.20694000000003,54.803046999999992],[-130.19860800000004,54.783607000000018],[-130.20056199999999,54.77748900000006],[-130.20971699999996,54.760551000000135],[-130.21362299999993,54.748329000000012],[-130.21722399999999,54.741661000000022],[-130.22222899999986,54.736938000000009],[-130.23388699999998,54.728874000000019],[-130.2611389999999,54.717209000000139],[-130.26834099999991,54.714995999999985]],[[-130.51834099999996,54.70249200000012],[-130.52722199999999,54.701935000000049],[-130.5386049999999,54.703880000000026],[-130.56750499999993,54.716934000000094],[-130.57443199999994,54.72026800000009],[-130.58526599999999,54.727767999999969],[-130.60803199999992,54.748329000000012],[-130.61053499999991,54.753052000000139],[-130.61166399999996,54.758049000000085],[-130.60665900000004,54.763054000000125],[-130.48803699999991,54.807495000000131],[-130.47998000000001,54.808883999999921],[-130.46945199999999,54.807770000000119],[-130.458618,54.800270000000069],[-130.44665499999996,54.787216000000001],[-130.44027699999992,54.778327999999988],[-130.43777499999993,54.773605000000032],[-130.43582199999997,54.763329000000113],[-130.43972799999989,54.75110600000005],[-130.45388799999989,54.719154000000117],[-130.45748900000001,54.712769000000094],[-130.46331799999996,54.708603000000039],[-130.51834099999996,54.70249200000012]],[[-57.940833999999938,54.911933999999974],[-57.985832000000016,54.870826999999963],[-57.98860899999994,54.86721],[-57.991942999999935,54.833878000000084],[-57.983886999999868,54.802215999999987],[-57.980277999999942,54.798607000000118],[-57.971663999999976,54.798050000000046],[-57.965553,54.799437999999952],[-57.958892999999989,54.803046999999992],[-57.955558999999994,54.805824000000086],[-57.923888999999974,54.823326000000122],[-57.871666000000005,54.83166499999993],[-57.864723000000026,54.832214000000079],[-57.859726000000023,54.83027600000014],[-57.843613000000005,54.820549000000028],[-57.841110000000015,54.816939999999988],[-57.841667000000029,54.81249200000002],[-57.848334999999963,54.806938000000059],[-57.875,54.79332700000009],[-57.881942999999922,54.790549999999996],[-58.022774000000027,54.755554000000018],[-58.031386999999995,54.753882999999973],[-58.040000999999961,54.75277699999998],[-58.04999499999991,54.753052000000139],[-58.119995000000017,54.755554000000018],[-58.139167999999927,54.757216999999969],[-58.15943900000002,54.76138300000008],[-58.174171000000001,54.767768999999987],[-58.176948999999979,54.770828000000108],[-58.172378999999978,54.797314000000085],[-58.184173999999985,54.808471999999938],[-58.219718999999941,54.825829000000056],[-58.222771000000023,54.83027600000014],[-58.224715999999944,54.83526599999999],[-58.225554999999986,54.850273000000016],[-58.225554999999986,54.862770000000012],[-58.224998000000028,54.866936000000067],[-58.218886999999938,54.875267000000008],[-58.215836000000024,54.878044000000102],[-58.209723999999937,54.877487000000031],[-58.049445999999932,54.893326000000116],[-57.967773000000022,54.919159000000036],[-57.942771999999991,54.924995000000138],[-57.94027699999998,54.923607000000004],[-57.938605999999993,54.918602000000135],[-57.940833999999938,54.911933999999974]],[[-79.125823999999909,54.897217000000012],[-79.134445000000028,54.895827999999995],[-79.235000999999954,54.896660000000111],[-79.515288999999939,54.840546000000074],[-79.660277999999948,54.805549999999926],[-79.763625999999988,54.771660000000054],[-79.774170000000026,54.773048000000131],[-79.776947000000007,54.778046000000131],[-79.773330999999985,54.783333000000084],[-79.768889999999942,54.787773000000072],[-79.725554999999986,54.818886000000077],[-79.714721999999995,54.826385000000073],[-79.686934999999949,54.838326000000052],[-79.656661999999983,54.846656999999993],[-79.467223999999931,54.888328999999999],[-79.458617999999944,54.88999200000012],[-79.430557000000022,54.892769000000044],[-79.419448999999872,54.892769000000044],[-79.339446999999893,54.896941999999967],[-79.164169000000015,54.925552000000039],[-79.053878999999995,54.946655000000078],[-79.041945999999882,54.945824000000073],[-79.015014999999948,54.938324000000023],[-79.015014999999948,54.932213000000104],[-79.027221999999995,54.925270000000125],[-79.05749499999996,54.917770000000075],[-79.102782999999988,54.903877000000023],[-79.125823999999909,54.897217000000012]],[[-58.675277999999992,54.914153999999996],[-58.68360899999999,54.913048000000003],[-58.752501999999993,54.915825000000041],[-58.757225000000005,54.916100000000085],[-58.760558999999887,54.920546999999942],[-58.759170999999981,54.926102000000071],[-58.754723000000013,54.932495000000017],[-58.701667999999927,54.999161000000015],[-58.697495000000004,55.003326000000015],[-58.691108999999983,55.006942999999978],[-58.684722999999906,55.008331000000055],[-58.676391999999908,55.009437999999989],[-58.660277999999948,55.0086060000001],[-58.653609999999901,55.005554000000018],[-58.652778999999953,55.00110600000005],[-58.657500999999968,54.996100999999953],[-58.662772999999902,54.992218000000037],[-58.658332999999971,54.962494000000049],[-58.656661999999983,54.94221500000009],[-58.658607000000018,54.932495000000017],[-58.663054999999986,54.922493000000031],[-58.668892000000028,54.917770000000075],[-58.675277999999992,54.914153999999996]],[[-130.38528400000001,54.769988999999953],[-130.39916999999997,54.764717000000019],[-130.40917999999999,54.767212000000086],[-130.41445899999997,54.770828000000108],[-130.45556599999998,54.813324000000136],[-130.45944199999997,54.81749700000006],[-130.46194499999996,54.822220000000073],[-130.459991,54.828330999999991],[-130.41833499999996,54.853324999999927],[-130.38528400000001,54.868881000000101],[-130.34304800000001,54.894996999999989],[-130.27029400000004,54.950272000000041],[-130.25,54.969711000000132],[-130.22778299999993,54.997214999999983],[-130.2133179999999,55.012496999999996],[-130.20083599999992,55.019714000000079],[-130.18499800000001,55.023323000000119],[-130.17529300000001,55.023048000000074],[-130.16833500000001,55.019714000000079],[-130.16500899999988,55.014160000000118],[-130.16027799999995,55.004439999999988],[-130.146973,54.975822000000051],[-130.14529399999998,54.965271000000143],[-130.14556899999997,54.959717000000126],[-130.14611799999994,54.954163000000108],[-130.14974999999998,54.947487000000024],[-130.16332999999997,54.931381000000044],[-130.27029400000004,54.830826000000002],[-130.38528400000001,54.769988999999953]],[[-82.964721999999995,55.263611000000083],[-82.970000999999968,55.259720000000016],[-83.014450000000011,55.269714000000022],[-83.031951999999876,55.273880000000133],[-83.035278000000005,55.278877000000023],[-83.027495999999928,55.281380000000013],[-83.016953000000001,55.281662000000097],[-82.990279999999984,55.280548000000124],[-82.980835000000013,55.278877000000023],[-82.963332999999977,55.273880000000133],[-82.96166999999997,55.269157000000121],[-82.964721999999995,55.263611000000083]],[[-77.592772999999909,55.435265000000129],[-77.633330999999998,55.424438000000123],[-77.644164999999873,55.425827000000083],[-77.449431999999945,55.533882000000062],[-77.336120999999991,55.604439000000127],[-77.323058999999944,55.610550000000046],[-77.221389999999928,55.653602999999919],[-77.213897999999915,55.65526600000004],[-77.205276000000026,55.65387700000008],[-77.199996999999939,55.65026899999998],[-77.201110999999912,55.64415699999995],[-77.210555999999997,55.639717000000132],[-77.252227999999945,55.618050000000096],[-77.389174999999966,55.546386999999982],[-77.452224999999942,55.512772000000098],[-77.474166999999966,55.498046999999929],[-77.484160999999915,55.489158999999972],[-77.49499499999996,55.481377000000009],[-77.500564999999938,55.478325000000098],[-77.55221599999993,55.453049000000021],[-77.592772999999909,55.435265000000129]],[[-60.970832999999914,55.869437999999946],[-60.98833499999995,55.86721],[-60.998336999999992,55.867767000000072],[-61.008895999999936,55.869156000000089],[-61.016944999999964,55.873046999999985],[-61.051666000000012,55.901100000000099],[-61.056664000000012,55.905823000000055],[-61.059165999999948,55.909988000000055],[-61.070557000000008,55.938599000000011],[-61.065551999999968,55.944153000000028],[-61.047782999999981,55.945541000000105],[-61.036948999999993,55.9447100000001],[-60.96805599999999,55.936652999999922],[-60.948607999999979,55.930549999999982],[-60.908332999999971,55.898330999999985],[-60.906386999999995,55.893326000000116],[-60.911109999999951,55.887772000000098],[-60.917503000000011,55.884163000000115],[-60.970832999999914,55.869437999999946]],[[-60.858611999999994,55.864716000000044],[-60.876105999999993,55.863883999999985],[-60.892501999999979,55.864441000000056],[-60.898612999999955,55.86721],[-60.902221999999995,55.871376000000112],[-60.900551000000007,55.876380999999981],[-60.873610999999869,55.94360400000005],[-60.869995000000017,55.949432000000002],[-60.86500499999994,55.95277400000009],[-60.851944000000003,55.95526899999993],[-60.748336999999935,55.944153000000028],[-60.74138599999992,55.942764000000011],[-60.742500000000007,55.939156000000082],[-60.747498000000007,55.931663999999955],[-60.691939999999875,55.925270000000125],[-60.68638599999997,55.92193600000013],[-60.688048999999978,55.917213000000118],[-60.692771999999991,55.911658999999986],[-60.705001999999979,55.903046000000018],[-60.718604999999911,55.896385000000066],[-60.756393000000003,55.880272000000048],[-60.778610000000015,55.876099000000067],[-60.840836000000024,55.86610399999995],[-60.858611999999994,55.864716000000044]],[[-79.123046999999929,55.789993000000038],[-79.130553999999961,55.788887000000045],[-79.135559000000001,55.789162000000033],[-79.137786999999946,55.790549999999939],[-79.136123999999938,55.794158999999979],[-79.131667999999934,55.799995000000024],[-79.126099000000011,55.803879000000052],[-79.121932999999956,55.808601000000124],[-79.108886999999925,55.823883000000137],[-79.102782999999988,55.833054000000118],[-79.039168999999958,55.952492000000063],[-79.03083799999996,55.968596999999932],[-79.027221999999995,55.976935999999966],[-79.022232000000031,55.996384000000091],[-79.009353999999973,56.063614000000086],[-78.960007000000019,56.083054000000061],[-78.957503999999972,56.083602999999982],[-78.952788999999939,56.080826000000116],[-78.949157999999898,56.071663000000115],[-78.939712999999983,56.02526899999998],[-79.054442999999935,55.865547000000049],[-79.089995999999985,55.816939999999988],[-79.104445999999996,55.80082700000014],[-79.116652999999985,55.792496000000028],[-79.123046999999929,55.789993000000038]],[[-60.943329000000006,56.006660000000011],[-61.040557999999976,56.005272000000105],[-61.0819469999999,56.011382999999967],[-61.141387999999949,56.020545999999968],[-61.17111199999988,56.028602999999976],[-61.18721800000003,56.033882000000119],[-61.215836000000024,56.046387000000038],[-61.220832999999971,56.050827000000083],[-61.228333000000021,56.06332400000008],[-61.232772999999952,56.072769000000108],[-61.233611999999994,56.085548000000017],[-61.232772999999952,56.091103000000089],[-61.226944000000003,56.098045000000013],[-61.217498999999975,56.100547999999947],[-61.211670000000026,56.101387000000102],[-61.08916499999998,56.169991000000095],[-61.059165999999948,56.159714000000122],[-61.045836999999892,56.153877000000136],[-60.944442999999978,56.094993999999986],[-60.943610999999976,56.090271000000143],[-60.934440999999993,56.015830999999935],[-60.934722999999963,56.011382999999967],[-60.943329000000006,56.006660000000011]],[[-61.623610999999983,56.399993999999992],[-61.546668999999952,56.390830999999991],[-61.493057000000022,56.404991000000052],[-61.482773000000009,56.406654000000003],[-61.474716000000001,56.406654000000003],[-61.468329999999924,56.404433999999981],[-61.415275999999949,56.376656000000025],[-61.411667000000023,56.372214999999926],[-61.411109999999951,56.367210000000057],[-61.412216000000001,56.326659999999947],[-61.416106999999954,56.322220000000129],[-61.424171000000001,56.32027400000004],[-61.482773000000009,56.309990000000028],[-61.569449999999904,56.320549000000085],[-61.579726999999991,56.322494999999947],[-61.599723999999924,56.32777399999992],[-61.686385999999857,56.352776000000063],[-61.719993999999986,56.365829000000019],[-61.788895000000025,56.405822999999998],[-61.793335000000013,56.408882000000119],[-61.796111999999937,56.41304800000006],[-61.790557999999919,56.415824999999927],[-61.783889999999872,56.415824999999927],[-61.677779999999927,56.405548000000124],[-61.623610999999983,56.399993999999992]],[[-78.839995999999928,56.129990000000078],[-78.927490000000034,56.113884000000098],[-78.933318999999983,56.115547000000049],[-78.930556999999965,56.128601000000117],[-78.916945999999996,56.172493000000145],[-78.908339999999896,56.182495000000131],[-78.903884999999946,56.187209999999993],[-78.883330999999998,56.201935000000105],[-78.846389999999985,56.2347180000001],[-78.830291999999929,56.253326000000129],[-78.825287000000003,56.262772000000098],[-78.813323999999966,56.304709999999943],[-78.809432999999956,56.338882000000126],[-78.813888999999961,56.343323000000055],[-78.834732000000031,56.345543000000021],[-78.832503999999915,56.350829999999974],[-78.762512000000015,56.424713000000111],[-78.751403999999923,56.432495000000074],[-78.731673999999941,56.440544000000102],[-78.694992000000013,56.443878000000097],[-78.686385999999914,56.443320999999969],[-78.667220999999984,56.439713000000097],[-78.661666999999966,56.436104000000057],[-78.660003999999958,56.430550000000096],[-78.650832999999921,56.289161999999976],[-78.652785999999935,56.241936000000067],[-78.655563000000029,56.223602000000142],[-78.676392000000021,56.181106999999997],[-78.688599000000011,56.172767999999962],[-78.839995999999928,56.129990000000078]],[[-79.626937999999996,56.265273999999977],[-79.635833999999988,56.264998999999989],[-79.636672999999973,56.266388000000006],[-79.636397999999872,56.269157000000121],[-79.609436000000017,56.319716999999969],[-79.538605000000018,56.433051999999975],[-79.53443900000002,56.437491999999963],[-79.523894999999982,56.442764000000068],[-79.511123999999938,56.446381000000031],[-79.496947999999975,56.448601000000053],[-79.492217999999923,56.446937999999932],[-79.490554999999915,56.440826000000129],[-79.510833999999932,56.397491000000002],[-79.557769999999891,56.305267000000015],[-79.561110999999926,56.299164000000076],[-79.565552000000025,56.293884000000048],[-79.569457999999997,56.289992999999981],[-79.619445999999868,56.267211999999972],[-79.626937999999996,56.265273999999977]],[[-79.619995000000017,56.385268999999994],[-79.638061999999991,56.360550000000046],[-79.649444999999957,56.346382000000006],[-79.663329999999974,56.333878000000141],[-79.682495000000017,56.317496999999946],[-79.701110999999969,56.306381000000044],[-79.714447000000007,56.299995000000081],[-79.906661999999926,56.227211000000125],[-79.928328999999962,56.219711000000075],[-79.986114999999984,56.199715000000083],[-80.01916499999993,56.191376000000048],[-80.060546999999985,56.18443300000007],[-80.082503999999915,56.186653000000092],[-80.092223999999987,56.188324000000136],[-80.100554999999986,56.191376000000048],[-80.107497999999907,56.194992000000127],[-80.109726000000023,56.197768999999994],[-80.110275000000001,56.203323000000012],[-80.100280999999995,56.239158999999972],[-80.098617999999874,56.244156000000089],[-80.055267000000015,56.303604000000121],[-80.044448999999929,56.310822000000144],[-80.040558000000033,56.312767000000122],[-80.022506999999962,56.319716999999969],[-79.867492999999968,56.357498000000135],[-79.795546999999942,56.366661000000136],[-79.756667999999991,56.361937999999952],[-79.72444200000001,56.362770000000069],[-79.69888299999991,56.368880999999988],[-79.679169000000002,56.378326000000015],[-79.656386999999995,56.392769000000101],[-79.642501999999979,56.404433999999981],[-79.618880999999931,56.426941000000056],[-79.614440999999999,56.431664000000069],[-79.604171999999949,56.444153000000085],[-79.598052999999936,56.454437000000098],[-79.591384999999946,56.469154000000117],[-79.588333000000034,56.493881000000044],[-79.585281000000009,56.499161000000072],[-79.582503999999915,56.501663000000008],[-79.549728000000016,56.525269000000037],[-79.543334999999956,56.527771000000143],[-79.542770000000019,56.522217000000126],[-79.549438000000009,56.508049000000085],[-79.613891999999964,56.39527099999998],[-79.619995000000017,56.385268999999994]],[[-61.435829000000012,56.541382000000112],[-61.168059999999969,56.474709000000018],[-61.149993999999992,56.445540999999992],[-61.148887999999943,56.441101000000003],[-61.154442000000017,56.438599000000067],[-61.163612000000001,56.436653000000035],[-61.181945999999925,56.435265000000129],[-61.200278999999966,56.435265000000129],[-61.220832999999971,56.435546999999985],[-61.517501999999865,56.446937999999932],[-61.609169000000009,56.46166199999999],[-61.630553999999961,56.465270999999973],[-61.642226999999991,56.486382000000049],[-61.637221999999952,56.489716000000044],[-61.629997000000003,56.490547000000049],[-61.546394000000021,56.488044999999943],[-61.538612000000001,56.485824999999977],[-61.525832999999864,56.478874000000019],[-61.512778999999966,56.474991000000102],[-61.438048999999921,56.476379000000009],[-61.423057999999969,56.479156000000103],[-61.417777999999998,56.483330000000137],[-61.418335000000013,56.488327000000027],[-61.422501000000011,56.490547000000049],[-61.455276000000026,56.496383999999978],[-61.496666000000005,56.500000000000057],[-61.527221999999938,56.501663000000008],[-61.624167999999997,56.503882999999973],[-61.633330999999998,56.506386000000134],[-61.634445000000028,56.512497000000053],[-61.631942999999978,56.51638800000012],[-61.602225999999916,56.552773000000059],[-61.595832999999971,56.556380999999988],[-61.588332999999977,56.558044000000052],[-61.576667999999984,56.557769999999948],[-61.561667999999941,56.554161000000136],[-61.558051999999975,56.55193300000002],[-61.525947999999971,56.550212999999985],[-61.459166999999923,56.54583000000008],[-61.435829000000012,56.541382000000112]],[[-79.021666999999923,56.426941000000056],[-79.009445000000028,56.426383999999985],[-78.98832699999997,56.426941000000056],[-78.949157999999898,56.43082400000003],[-78.943054000000018,56.430550000000096],[-78.93582200000003,56.428878999999995],[-78.928878999999938,56.425827000000083],[-78.92471299999994,56.419441000000006],[-78.922775000000001,56.415268000000026],[-78.921111999999994,56.409714000000065],[-78.920546999999942,56.403320000000008],[-78.923049999999932,56.386940000000095],[-78.93638599999997,56.317496999999946],[-78.943328999999949,56.284996000000035],[-78.949996999999939,56.282493999999986],[-78.955276000000026,56.27915999999999],[-78.961394999999868,56.271378000000027],[-79.029174999999952,56.172493000000145],[-79.06138599999997,56.124435000000005],[-79.071670999999981,56.104996000000085],[-79.085007000000019,56.07749200000012],[-79.094161999999983,56.054993000000138],[-79.129990000000021,55.989432999999963],[-79.175277999999935,55.92332499999992],[-79.195266999999944,55.891937000000098],[-79.203613000000018,55.894157000000121],[-79.166267000000005,55.973881000000006],[-79.122116000000005,56.046715000000006],[-79.061935000000005,56.148605000000032],[-79.022781000000009,56.202492000000007],[-79.008895999999993,56.221656999999936],[-78.990829000000019,56.261664999999994],[-78.985824999999977,56.273605000000089],[-78.972777999999948,56.306656000000032],[-78.970275999999956,56.314156000000082],[-78.967772999999909,56.323608000000036],[-78.966109999999901,56.336105000000032],[-78.970275999999956,56.378043999999989],[-78.97084000000001,56.3836060000001],[-78.977218999999991,56.388602999999989],[-78.983321999999987,56.389716999999962],[-78.998885999999914,56.384163000000001],[-79.043334999999956,56.360550000000046],[-79.055267000000015,56.344437000000028],[-79.062209999999993,56.329720000000009],[-79.089172000000019,56.267769000000044],[-79.091109999999958,56.263054000000011],[-79.093062999999972,56.256943000000092],[-79.092948999999976,56.231716000000006],[-79.095443999999986,56.2190480000001],[-79.093948000000012,56.213717999999972],[-79.092781000000002,56.211551999999983],[-79.089110999999946,56.211884000000111],[-79.083327999999995,56.174164000000019],[-79.212783999999999,55.954163000000108],[-79.236114999999927,55.917496000000085],[-79.259444999999914,55.886108000000092],[-79.275283999999999,55.870270000000062],[-79.283324999999991,55.864441000000056],[-79.286666999999852,55.866661000000079],[-79.286117999999988,55.869987000000094],[-79.278060999999923,55.885551000000021],[-79.267226999999934,55.903046000000018],[-79.226668999999958,55.962493999999992],[-79.183608999999933,56.037497999999971],[-79.139998999999932,56.115273000000116],[-79.133895999999993,56.126656000000082],[-79.132721000000004,56.175770000000057],[-79.138564999999858,56.205269000000101],[-79.139724999999999,56.20776699999999],[-79.143561999999974,56.211266000000137],[-79.15055799999999,56.233046999999999],[-79.160552999999993,56.231377000000066],[-79.170272999999952,56.225548000000003],[-79.205565999999976,56.190826000000015],[-79.243880999999988,56.151100000000042],[-79.256393000000003,56.13110400000005],[-79.270844000000011,56.104712999999947],[-79.277495999999985,56.090828000000045],[-79.284164000000033,56.078049000000021],[-79.299727999999959,56.051658999999972],[-79.309158000000025,56.036385000000109],[-79.323623999999938,56.016936999999984],[-79.358611999999937,55.974434000000088],[-79.452498999999989,55.879990000000134],[-79.479996000000028,55.863883999999985],[-79.493056999999965,55.858887000000038],[-79.500564999999995,55.856659000000093],[-79.510559000000001,55.855553000000043],[-79.520279000000016,55.854713000000004],[-79.532500999999968,55.854996000000142],[-79.567779999999971,55.864716000000044],[-79.593886999999938,55.874435000000062],[-79.604996000000028,55.881660000000124],[-79.78195199999999,55.78804800000006],[-79.763061999999934,55.814156000000025],[-79.598052999999936,55.981658999999979],[-79.486937999999952,56.087212000000022],[-79.474716000000001,56.098327999999981],[-79.470275999999956,56.104439000000013],[-79.470551,56.112770000000125],[-79.472504000000015,56.11693600000001],[-79.478881999999999,56.123322000000087],[-79.497222999999963,56.133605999999986],[-79.513061999999991,56.134995000000117],[-79.523055999999997,56.133880999999974],[-79.537216000000001,56.12971500000009],[-79.550277999999935,56.123322000000087],[-79.567504999999983,56.112770000000125],[-79.59722899999997,56.091377000000023],[-79.645003999999972,56.050545],[-79.819457999999941,55.901100000000099],[-79.831680000000006,55.88999200000012],[-79.846663999999976,55.874161000000129],[-79.858046999999999,55.859993000000088],[-79.863892000000021,55.850830000000087],[-79.865829000000019,55.847214000000008],[-79.909164000000033,55.840546000000074],[-79.985824999999977,55.898048000000017],[-79.961944999999957,55.960274000000027],[-79.774444999999957,56.112213000000054],[-79.668059999999912,56.189987000000031],[-79.648620999999991,56.198326000000066],[-79.642226999999991,56.201385000000073],[-79.587783999999999,56.230270000000132],[-79.536330999999961,56.295052000000055],[-79.526839999999993,56.304214000000115],[-79.516173999999978,56.319881000000066],[-79.494666999999993,56.367214000000047],[-79.48733500000003,56.402714000000117],[-79.458892999999875,56.464157],[-79.458617999999944,56.468323000000112],[-79.458617999999944,56.478600000000085],[-79.466109999999958,56.498878000000104],[-79.474441999999954,56.521102999999982],[-79.471389999999928,56.544441000000063],[-79.466109999999958,56.54833200000013],[-79.456664999999987,56.55332199999998],[-79.448883000000023,56.554435999999953],[-79.445267000000001,56.553604000000064],[-79.441939999999875,56.551384000000041],[-79.438599000000011,56.547775000000058],[-79.418334999999956,56.490829000000076],[-79.419448999999872,56.443603999999937],[-79.443000999999981,56.393436000000008],[-79.474998000000028,56.320438000000138],[-79.531386999999995,56.206940000000145],[-79.514450000000011,56.186378000000047],[-79.461670000000026,56.193321000000026],[-79.438889000000017,56.197212000000093],[-79.427215999999987,56.203049000000078],[-79.416397000000018,56.212212000000079],[-79.413054999999986,56.216660000000047],[-79.309998000000007,56.424163999999962],[-79.301101999999958,56.447212000000036],[-79.298049999999932,56.459435000000099],[-79.293335000000013,56.488044999999943],[-79.291672000000005,56.498878000000104],[-79.286391999999921,56.570273999999984],[-79.139998999999932,56.546386999999982],[-79.133057000000008,56.542770000000019],[-79.129990000000021,56.537773000000072],[-79.125548999999978,56.514159999999947],[-79.121932999999956,56.495543999999938],[-79.119995000000017,56.489989999999977],[-79.111938000000009,56.47526600000009],[-79.099990999999989,56.463051000000007],[-79.091384999999889,56.454437000000098],[-79.075561999999934,56.444153000000085],[-79.055557000000022,56.433876000000112],[-79.038895000000025,56.428878999999995],[-79.021666999999923,56.426941000000056]],[[-79.141952999999944,56.616661000000079],[-79.15194699999995,56.616386000000091],[-79.260009999999966,56.628044000000102],[-79.268889999999999,56.629158000000075],[-79.274719000000005,56.632209999999986],[-79.277495999999985,56.637215000000026],[-79.279998999999975,56.648880000000133],[-79.280288999999982,56.654990999999995],[-79.275009000000011,56.667213000000004],[-79.271941999999967,56.67193600000013],[-79.254729999999881,56.679993000000138],[-79.244155999999919,56.682495000000017],[-79.218886999999938,56.684990000000028],[-79.208892999999989,56.683876000000055],[-79.193603999999937,56.678329000000133],[-79.160004000000015,56.65776800000009],[-79.151108000000022,56.649994000000106],[-79.141678000000013,56.635826000000066],[-79.138061999999991,56.626099000000124],[-79.138901000000033,56.619986999999924],[-79.141952999999944,56.616661000000079]],[[-61.1875,56.586104999999975],[-61.211670000000026,56.581664999999987],[-61.217498999999975,56.58277099999998],[-61.222770999999966,56.588882000000069],[-61.231667000000016,56.611663999999962],[-61.231941000000006,56.61971299999999],[-61.226104999999961,56.626656000000025],[-61.165832999999964,56.684433000000126],[-61.159163999999919,56.688324000000023],[-61.150276000000019,56.689430000000073],[-61.131942999999978,56.68721000000005],[-61.0819469999999,56.678878999999938],[-61.0777819999999,56.674995000000138],[-61.057776999999987,56.628875999999991],[-61.059440999999993,56.626380999999981],[-61.06361400000003,56.624160999999958],[-61.103888999999867,56.606658999999922],[-61.1875,56.586104999999975]],[[-79.560821999999973,56.617767000000129],[-79.567504999999983,56.615273000000002],[-79.573333999999988,56.618881000000101],[-79.583618000000001,56.648048000000017],[-79.583892999999932,56.65277100000003],[-79.589995999999985,56.768326000000002],[-79.587508999999898,56.788886999999988],[-79.581679999999949,56.80721299999999],[-79.578339000000028,56.81249200000002],[-79.57417299999986,56.815825999999959],[-79.567504999999983,56.817772000000048],[-79.516662999999937,56.78555300000005],[-79.496384000000035,56.766936999999984],[-79.476943999999946,56.72165700000005],[-79.474716000000001,56.689156000000139],[-79.486114999999984,56.658043000000134],[-79.488891999999964,56.655548000000067],[-79.560821999999973,56.617767000000129]],[[-79.881942999999978,56.743607000000054],[-79.888610999999969,56.741104000000064],[-79.904723999999987,56.741661000000136],[-79.923889000000031,56.751389000000017],[-79.930831999999953,56.754997000000117],[-79.941101000000003,56.763610999999969],[-79.944442999999922,56.767769000000101],[-79.947494999999947,56.773323000000119],[-79.957229999999925,56.799164000000019],[-79.958892999999932,56.805267000000129],[-79.958618000000001,56.811377999999991],[-79.954726999999934,56.823607999999922],[-79.945830999999998,56.833603000000039],[-79.919158999999922,56.858330000000137],[-79.915008999999998,56.861382000000049],[-79.865829000000019,56.866104000000121],[-79.858046999999999,56.865829000000133],[-79.843886999999995,56.858330000000137],[-79.83444199999991,56.852492999999981],[-79.819457999999941,56.84027100000003],[-79.81639100000001,56.835548000000017],[-79.814712999999927,56.829162999999994],[-79.81361400000003,56.816939999999988],[-79.833892999999989,56.793610000000001],[-79.83805799999999,56.788886999999988],[-79.872222999999906,56.752220000000023],[-79.876663000000008,56.747772000000055],[-79.881942999999978,56.743607000000054]],[[-79.750564999999938,56.905823000000055],[-79.717498999999918,56.813605999999993],[-79.71833799999996,56.80721299999999],[-79.721114999999884,56.802773000000002],[-79.725554999999986,56.798049999999989],[-79.730834999999956,56.794158999999922],[-79.749725000000012,56.783607000000131],[-79.757507000000032,56.781936999999971],[-79.781113000000005,56.784721000000104],[-79.78832999999986,56.785828000000038],[-79.793555999999967,56.795792000000063],[-79.794373000000007,56.832947000000104],[-79.793143999999984,56.859890000000064],[-79.82376899999997,56.895003999999972],[-79.852753000000007,56.885204000000044],[-79.894164999999873,56.881935000000112],[-79.897506999999962,56.884995000000004],[-79.89805599999994,56.891106000000036],[-79.896118000000001,56.897217000000126],[-79.892776000000026,56.90248900000006],[-79.858611999999937,56.938599000000011],[-79.851943999999946,56.940268999999944],[-79.808333999999945,56.948326000000122],[-79.799438000000009,56.949431999999945],[-79.790833000000021,56.947769000000051],[-79.784164000000033,56.940826000000072],[-79.753615999999965,56.910820000000001],[-79.750564999999938,56.905823000000055]],[[-61.429211000000009,56.929707000000008],[-61.397204999999985,56.927715000000035],[-61.37261199999989,56.930972999999994],[-61.354888999999957,56.93639799999994],[-61.343319000000008,56.934227000000078],[-61.340785999999866,56.930248000000006],[-61.355277999999998,56.910820000000001],[-61.400275999999963,56.884720000000129],[-61.404716000000008,56.87971500000009],[-61.399444999999957,56.875824000000023],[-61.378052000000025,56.871658000000139],[-61.360282999999924,56.866104000000121],[-61.352225999999973,56.857773000000066],[-61.355834999999956,56.852776000000119],[-61.361670999999944,56.848045000000013],[-61.375831999999946,56.840546000000018],[-61.443168999999898,56.817719000000125],[-61.48966999999999,56.807549000000108],[-61.563331999999946,56.784721000000104],[-61.570281999999906,56.781661999999983],[-61.576949999999954,56.778046000000074],[-61.585555999999997,56.766388000000063],[-61.584998999999982,56.761383000000023],[-61.58277899999996,56.756660000000011],[-61.575561999999991,56.753052000000082],[-61.564720000000023,56.751663000000121],[-61.555831999999953,56.752777000000094],[-61.540839999999946,56.757773999999984],[-61.526664999999866,56.76527400000009],[-61.515282000000013,56.774712000000079],[-61.497653999999955,56.78694200000001],[-61.488975999999923,56.789295000000038],[-61.476315,56.79019900000003],[-61.434002000000021,56.783688000000097],[-61.393313999999918,56.778988000000027],[-61.386626999999976,56.775913000000003],[-61.382107000000019,56.771393000000103],[-61.373965999999996,56.74390800000009],[-61.368724999999984,56.695988],[-61.368632999999988,56.6857720000001],[-61.370804000000021,56.675282000000038],[-61.378399000000002,56.632607000000007],[-61.379119999999944,56.626820000000066],[-61.39358900000002,56.617779000000041],[-61.409137999999928,56.615608000000009],[-61.444217999999978,56.619587000000081],[-61.484000999999978,56.641647000000091],[-61.521975999999938,56.669857000000093],[-61.561034999999947,56.682513999999969],[-61.588157999999964,56.703853999999978],[-61.605334999999968,56.713798999999995],[-61.635353000000009,56.731518000000051],[-61.644393999999977,56.734775999999954],[-61.644031999999868,56.73802900000004],[-61.634991000000014,56.770938999999998],[-61.624865999999997,56.82591200000013],[-61.632098999999982,56.859547000000077],[-61.588698999999963,56.893539000000089],[-61.534812999999986,56.901859000000002],[-61.522517999999934,56.914879000000099],[-61.5261339999999,56.933323000000087],[-61.523963999999921,56.940193000000079],[-61.499370999999996,56.952849999999955],[-61.473694000000023,56.95900000000006],[-61.460673999999983,56.955021000000045],[-61.446571000000006,56.935131000000126],[-61.429211000000009,56.929707000000008]],[[-76.621108999999933,57.075554000000125],[-76.646956999999986,57.073050999999964],[-76.660278000000005,57.075828999999999],[-76.671386999999925,57.083327999999995],[-76.675551999999925,57.087769000000094],[-76.681106999999997,57.097771000000023],[-76.709732000000031,57.182213000000047],[-76.708617999999944,57.18832400000008],[-76.678329000000019,57.205269000000044],[-76.669998000000021,57.20249199999995],[-76.667496000000028,57.195541000000048],[-76.626099000000011,57.142769000000101],[-76.618880999999988,57.080276000000026],[-76.621108999999933,57.075554000000125]],[[-61.621666000000005,57.335548000000131],[-61.611114999999984,57.334991000000002],[-61.605559999999912,57.335548000000131],[-61.594443999999953,57.334159999999997],[-61.589995999999985,57.330275999999969],[-61.589438999999913,57.325272000000041],[-61.59194199999996,57.321380999999974],[-61.608337000000006,57.308327000000077],[-61.652221999999995,57.290549999999996],[-61.658051,57.290276000000063],[-61.734725999999966,57.290276000000063],[-61.739998000000014,57.291939000000013],[-61.753333999999938,57.302490000000091],[-61.763617999999951,57.311661000000072],[-61.766662999999937,57.315269000000001],[-61.767776000000026,57.319716999999969],[-61.768607999999915,57.324996999999996],[-61.767501999999979,57.328330999999991],[-61.752228000000002,57.360275000000001],[-61.74888599999997,57.365546999999935],[-61.74500299999994,57.369155999999975],[-61.726944000000003,57.374435000000119],[-61.702498999999989,57.372765000000129],[-61.693329000000006,57.368050000000096],[-61.677497999999957,57.357216000000051],[-61.632216999999912,57.337769000000037],[-61.621666000000005,57.335548000000131]],[[-76.715012000000002,57.292770000000019],[-76.72972099999987,57.289718999999991],[-76.734726000000023,57.291382000000112],[-76.740279999999984,57.294441000000063],[-76.744445999999982,57.299438000000009],[-76.793059999999969,57.374709999999936],[-76.821944999999914,57.419715999999994],[-76.823623999999995,57.424713000000111],[-76.821670999999981,57.429436000000067],[-76.812774999999931,57.428329000000133],[-76.78443900000002,57.41693900000007],[-76.761397999999986,57.40387700000008],[-76.735549999999989,57.386383000000137],[-76.731109999999944,57.381934999999999],[-76.725554999999986,57.372765000000129],[-76.721114999999941,57.356658999999979],[-76.708054000000004,57.29583000000008],[-76.715012000000002,57.292770000000019]],[[-61.655273000000022,57.391380000000083],[-61.675003000000004,57.389992000000007],[-61.839721999999995,57.408043000000134],[-61.860000999999954,57.412491000000102],[-61.877494999999954,57.418602000000021],[-61.889998999999989,57.426102000000071],[-61.894446999999957,57.42971799999998],[-61.897780999999952,57.433327000000133],[-61.900275999999963,57.437492000000134],[-61.897498999999982,57.444153000000085],[-61.813003999999921,57.473709000000042],[-61.772738999999945,57.495097999999984],[-61.742774999999995,57.534995999999978],[-61.737220999999977,57.536942000000067],[-61.719993999999986,57.536384999999996],[-61.648055999999997,57.530272999999966],[-61.643889999999999,57.522766000000047],[-61.634726999999998,57.509438000000046],[-61.613616999999977,57.416100000000142],[-61.615279999999984,57.409157000000107],[-61.634170999999924,57.398880000000133],[-61.648337999999967,57.393608000000029],[-61.655273000000022,57.391380000000083]],[[-61.878333999999995,57.46305099999995],[-61.926948999999979,57.45249200000012],[-61.937499999999943,57.453049000000021],[-61.946945000000028,57.454993999999999],[-61.955832999999927,57.458046000000081],[-61.962776000000019,57.462212000000022],[-62.012504999999919,57.508331000000112],[-62.021942000000024,57.521102999999925],[-62.02305599999994,57.534164000000033],[-62.020279000000016,57.540276000000063],[-62.014450000000011,57.549438000000123],[-61.992500000000007,57.569160000000011],[-61.974997999999971,57.581383000000073],[-61.968886999999995,57.584434999999985],[-61.953056000000004,57.59027100000003],[-61.944442999999978,57.590828000000101],[-61.878052000000025,57.584991000000002],[-61.855002999999954,57.580551000000128],[-61.833327999999995,57.574440000000038],[-61.817504999999926,57.567215000000033],[-61.783614999999941,57.550545000000056],[-61.781386999999995,57.548050000000046],[-61.778885000000002,57.543883999999935],[-61.77694699999995,57.52388000000002],[-61.777778999999953,57.518326000000059],[-61.779441999999904,57.513611000000026],[-61.783057999999869,57.508331000000112],[-61.864165999999955,57.466385000000116],[-61.878333999999995,57.46305099999995]],[[-79.797501000000011,57.418884000000048],[-79.801666000000012,57.415825000000098],[-79.805556999999965,57.418053000000043],[-79.835830999999985,57.460274000000084],[-79.826949999999897,57.53804800000006],[-79.808883999999978,57.561661000000015],[-79.792769999999962,57.578880000000083],[-79.749160999999958,57.609718000000044],[-79.740828999999962,57.615547000000106],[-79.734160999999915,57.618881000000044],[-79.727782999999931,57.61721],[-79.723052999999993,57.612770000000012],[-79.706116000000009,57.585548000000074],[-79.70666499999993,57.580826000000002],[-79.704726999999991,57.576660000000061],[-79.698607999999979,57.563324000000136],[-79.695830999999998,57.531661999999983],[-79.698607999999979,57.519989000000123],[-79.705001999999922,57.508605999999929],[-79.712508999999955,57.500548999999978],[-79.797501000000011,57.418884000000048]],[[-61.688605999999936,57.713051000000121],[-61.696105999999929,57.712212000000136],[-61.757506999999976,57.715546000000131],[-61.768889999999999,57.716934000000037],[-61.894164999999987,57.754166000000055],[-61.896950000000004,57.758331000000055],[-61.896110999999962,57.769714000000079],[-61.891669999999976,57.779160000000047],[-61.865836999999999,57.799721000000034],[-61.853614999999934,57.808327000000133],[-61.80889099999996,57.836936999999978],[-61.800551999999925,57.841377000000023],[-61.778885000000002,57.84526800000009],[-61.773055999999997,57.845543000000077],[-61.711113000000012,57.834160000000111],[-61.698607999999922,57.830276000000083],[-61.653610000000015,57.784721000000104],[-61.652221999999995,57.782494000000042],[-61.651664999999923,57.779433999999981],[-61.652495999999928,57.775826000000052],[-61.654166999999916,57.771103000000096],[-61.668609999999887,57.738884000000041],[-61.674171000000001,57.726936000000023],[-61.684440999999936,57.714996000000099],[-61.688605999999936,57.713051000000121]],[[-61.947494999999947,57.787216000000114],[-61.957222000000002,57.78694200000001],[-62.08916499999998,57.808043999999995],[-62.100280999999995,57.816101000000003],[-62.108337000000006,57.824715000000026],[-62.109443999999996,57.829437000000098],[-62.108054999999922,57.837769000000094],[-62.099723999999924,57.846382000000062],[-62.094443999999953,57.850547999999947],[-62.065276999999924,57.870544000000109],[-62.028884999999946,57.892768999999987],[-62.009170999999924,57.904434000000037],[-61.995002999999997,57.90915700000005],[-61.986114999999984,57.910271000000023],[-61.971663999999976,57.911377000000016],[-61.941108999999983,57.909988000000055],[-61.928336999999942,57.908599999999922],[-61.923332000000016,57.906096999999988],[-61.918891999999971,57.90248900000006],[-61.884444999999971,57.86693600000001],[-61.867774999999881,57.84276600000004],[-61.867774999999881,57.838600000000099],[-61.879439999999931,57.816665999999998],[-61.881942999999922,57.812767000000008],[-61.885558999999887,57.809157999999968],[-61.889998999999989,57.806381000000101],[-61.940833999999938,57.788886999999988],[-61.947494999999947,57.787216000000114]],[[-77.678328999999962,58.235549999999932],[-77.687774999999931,58.235268000000076],[-77.702788999999996,58.238884000000098],[-77.761123999999938,58.257499999999936],[-77.946380999999917,58.3211060000001],[-77.950835999999924,58.32416500000005],[-77.947495000000004,58.328605999999979],[-77.940551999999968,58.330551000000014],[-77.932495000000017,58.331383000000073],[-77.917312999999922,58.329369000000042],[-77.829726999999934,58.311378000000047],[-77.80749499999996,58.305267000000015],[-77.801392000000021,58.303046999999992],[-77.702788999999996,58.260277000000031],[-77.689437999999996,58.253882999999973],[-77.670273000000009,58.244156000000032],[-77.668334999999956,58.241936000000067],[-77.668334999999956,58.240547000000049],[-77.678328999999962,58.235549999999932]],[[-67.596114999999998,58.284164000000089],[-67.616394000000014,58.284164000000089],[-67.637786999999946,58.28472099999999],[-67.666106999999954,58.292770000000019],[-67.673888999999917,58.296104000000014],[-67.676666000000012,58.301384000000041],[-67.675827000000027,58.306099000000074],[-67.672775000000001,58.312209999999993],[-67.624435000000005,58.368050000000096],[-67.61999499999996,58.372215000000097],[-67.61082499999992,58.373877999999991],[-67.599166999999909,58.373046999999985],[-67.580565999999976,58.369986999999924],[-67.527221999999995,58.343605000000082],[-67.520844000000011,58.339989000000003],[-67.517501999999979,58.335266000000047],[-67.51916499999993,58.329719999999952],[-67.524445000000014,58.32416500000005],[-67.551102000000014,58.302215999999987],[-67.557220000000029,58.298050000000046],[-67.571670999999867,58.290833000000134],[-67.596114999999998,58.284164000000089]],[[-78.453888000000006,58.539993000000038],[-78.455565999999862,58.537215999999944],[-78.463332999999977,58.537498000000028],[-78.474716000000001,58.541382000000056],[-78.649993999999936,58.601386999999988],[-78.672501000000011,58.610549999999989],[-78.683884000000035,58.620827000000133],[-78.697495000000004,58.678329000000076],[-78.698607999999979,58.688599000000011],[-78.696944999999971,58.690543999999989],[-78.692764000000011,58.691933000000006],[-78.665008999999998,58.674995000000081],[-78.659163999999976,58.669991000000095],[-78.635284000000013,58.618598999999961],[-78.631942999999978,58.616386000000034],[-78.628051999999968,58.614158999999972],[-78.56639100000001,58.586104999999918],[-78.513061999999934,58.563880999999981],[-78.457229999999981,58.542770000000132],[-78.453888000000006,58.539993000000038]],[[-69.194442999999922,59.064712999999983],[-69.18638599999997,59.064437999999996],[-69.180831999999953,59.06721500000009],[-69.178328999999906,59.029715999999951],[-69.227218999999934,58.971931000000041],[-69.320281999999963,58.946381000000088],[-69.327498999999989,58.94499200000007],[-69.338897999999972,58.944434999999999],[-69.350280999999995,58.946381000000088],[-69.355559999999969,58.949715000000083],[-69.360000999999954,58.958603000000039],[-69.357223999999974,58.964714000000129],[-69.318344000000025,59.02555099999995],[-69.319457999999997,59.098045000000127],[-69.353057999999976,59.127213000000097],[-69.357773000000009,59.13499500000006],[-69.357223999999974,59.139717000000132],[-69.345550999999944,59.144714000000079],[-69.339447000000007,59.146103000000039],[-69.282227000000034,59.154433999999981],[-69.275283999999942,59.154991000000052],[-69.198607999999922,59.14527099999998],[-69.18638599999997,59.138329000000056],[-69.18249499999996,59.128601000000003],[-69.194991999999957,59.09415400000006],[-69.199996999999996,59.077217000000019],[-69.200561999999877,59.072495000000117],[-69.198607999999922,59.06721500000009],[-69.194442999999922,59.064712999999983]],[[-80.53443900000002,59.369438000000002],[-80.544158999999979,59.365547000000106],[-80.552215999999873,59.365829000000133],[-80.555832000000009,59.369438000000002],[-80.549437999999952,59.446938000000046],[-80.537506000000008,59.455268999999987],[-80.488051999999982,59.477486000000056],[-80.475554999999929,59.481102000000078],[-80.465011999999945,59.463882000000126],[-80.471389999999928,59.454994000000113],[-80.477218999999934,59.451103000000046],[-80.520844000000011,59.382767000000058],[-80.525283999999942,59.377486999999974],[-80.53443900000002,59.369438000000002]],[[-80.277495999999985,59.618599000000131],[-80.319167999999991,59.612213000000054],[-80.329726999999991,59.612495000000138],[-80.340560999999923,59.614158999999972],[-80.343886999999995,59.619156000000032],[-80.340835999999967,59.625267000000122],[-80.295273000000009,59.678329000000019],[-80.232773000000009,59.725265999999976],[-80.222228999999857,59.723602000000142],[-80.171386999999925,59.715271000000087],[-80.154175000000009,59.709991000000002],[-80.14527899999996,59.705550999999957],[-80.154723999999931,59.682495000000131],[-80.156661999999983,59.678329000000019],[-80.170546999999999,59.673881999999992],[-80.205840999999964,59.665267999999912],[-80.222777999999892,59.660271000000023],[-80.229720999999984,59.656380000000127],[-80.233063000000016,59.651100000000042],[-80.237212999999997,59.639434999999992],[-80.240554999999858,59.634163000000058],[-80.246384000000035,59.629990000000078],[-80.260833999999988,59.623604],[-80.277495999999985,59.618599000000131]],[[-64.019729999999925,59.714713999999958],[-64.124160999999958,59.695267000000115],[-64.134170999999981,59.695541000000048],[-64.146118000000001,59.696655000000021],[-64.157226999999978,59.699715000000083],[-64.16332999999986,59.703605999999979],[-64.204452999999944,59.734436000000017],[-64.192490000000021,59.765549000000021],[-64.121933000000013,59.849433999999974],[-64.115828999999962,59.852776000000063],[-64.107223999999974,59.854996000000085],[-64.067504999999926,59.863884000000041],[-64.061385999999914,59.864440999999943],[-64.052779999999984,59.859992999999974],[-64.049727999999959,59.855270000000019],[-64.047774999999945,59.849433999999974],[-64.055266999999958,59.835266000000104],[-64.054442999999992,59.829437000000041],[-64.042769999999905,59.783882000000062],[-64.020278999999903,59.781104999999968],[-64.002791999999943,59.774712000000022],[-63.959723999999937,59.75638600000002],[-63.959441999999967,59.752220000000136],[-63.99722300000002,59.723602000000142],[-64.011397999999872,59.716385000000059],[-64.019729999999925,59.714713999999958]],[[-80.089721999999938,59.751938000000052],[-80.166945999999996,59.742493000000024],[-80.177779999999984,59.744156000000089],[-80.184158000000025,59.747771999999998],[-80.184722999999963,59.752777000000037],[-80.128875999999991,59.82388300000008],[-80.11500499999994,59.837769000000037],[-80.103057999999976,59.844994000000099],[-80.015015000000005,59.884995000000117],[-80.00778200000002,59.886107999999979],[-79.946944999999914,59.880272000000105],[-79.937774999999931,59.877768999999944],[-79.929992999999911,59.873603999999943],[-79.884170999999924,59.85833000000008],[-79.878875999999991,59.854713000000118],[-79.883621000000005,59.849998000000085],[-79.906661999999926,59.828049000000135],[-79.922226000000023,59.815544000000045],[-79.928054999999972,59.811661000000072],[-80.025283999999942,59.764442000000088],[-80.089721999999938,59.751938000000052]],[[-64.427673000000027,60.372932000000048],[-64.452788999999996,60.357215999999994],[-64.442763999999897,60.309715000000097],[-64.438323999999966,60.305550000000096],[-64.423614999999984,60.282494000000042],[-64.429442999999935,60.281936999999971],[-64.438048999999864,60.282494000000042],[-64.448607999999979,60.284164000000033],[-64.50111400000003,60.301933000000133],[-64.521712999999977,60.310730000000035],[-64.541106999999954,60.324440000000038],[-64.557219999999916,60.331383000000017],[-64.601943999999889,60.350273000000016],[-64.610001000000011,60.353606999999954],[-64.632216999999912,60.357498000000021],[-64.643889999999942,60.357773000000066],[-64.655562999999972,60.357498000000021],[-64.666107000000011,60.356940999999949],[-64.675551999999982,60.355270000000075],[-64.710007000000019,60.358330000000137],[-64.728881999999999,60.363327000000083],[-64.790282999999931,60.391106000000093],[-64.815552000000025,60.406096999999988],[-64.831116000000009,60.419159000000036],[-64.867492999999911,60.450272000000041],[-64.868606999999997,60.453323000000069],[-64.868056999999965,60.458885000000009],[-64.856110000000001,60.473877000000016],[-64.84722899999997,60.478874000000133],[-64.837783999999999,60.482491000000039],[-64.823058999999944,60.485268000000133],[-64.639998999999989,60.4847180000001],[-64.61860699999994,60.477211000000011],[-64.426940999999943,60.401381999999955],[-64.423889000000031,60.397216999999955],[-64.422501000000011,60.391937000000098],[-64.423889000000031,60.383049000000085],[-64.427673000000027,60.372932000000048]],[[-68.25140399999998,60.230820000000051],[-68.310546999999985,60.223045000000127],[-68.340285999999992,60.223320000000001],[-68.361937999999952,60.225822000000051],[-68.376937999999996,60.232491000000095],[-68.387222000000008,60.240829000000076],[-68.393065999999976,60.249161000000072],[-68.394729999999981,60.254440000000045],[-68.395003999999972,60.259995000000117],[-68.393065999999976,60.276100000000042],[-68.384170999999924,60.29972100000009],[-68.37777699999998,60.310271999999998],[-68.314437999999996,60.390273999999977],[-68.175277999999992,60.53443900000002],[-68.129439999999931,60.570549000000085],[-68.119155999999919,60.577217000000076],[-68.092223999999987,60.581665000000044],[-68.081679999999949,60.582496999999989],[-68.035277999999948,60.581107999999972],[-67.999435000000005,60.57749200000012],[-67.956664999999987,60.566100999999946],[-67.948607999999922,60.561377999999991],[-67.887221999999952,60.503883000000087],[-67.862212999999997,60.488045000000056],[-67.839721999999995,60.478043000000071],[-67.831389999999999,60.474990999999989],[-67.821395999999993,60.472487999999998],[-67.808043999999938,60.467209000000025],[-67.803054999999972,60.463051000000064],[-67.79861499999987,60.457497000000103],[-67.794998000000021,60.447769000000051],[-67.795546999999942,60.443877999999984],[-67.79861499999987,60.432213000000104],[-67.806106999999997,60.417496000000085],[-67.815276999999924,60.408043000000077],[-67.836394999999925,60.388603000000103],[-67.841385000000002,60.384438000000102],[-67.853333000000021,60.375266999999951],[-67.885559000000001,60.353606999999954],[-67.898055999999997,60.345267999999919],[-67.934433000000013,60.321662999999944],[-67.965285999999992,60.30832700000002],[-67.97222899999997,60.30582400000003],[-68.167496000000028,60.245544000000109],[-68.17721599999993,60.243049999999982],[-68.205276000000026,60.238045000000113],[-68.25140399999998,60.230820000000051]],[[-64.689986999999917,60.584435000000099],[-64.697220000000016,60.582214000000022],[-64.704452999999944,60.582496999999989],[-64.712783999999942,60.590271000000143],[-64.713897999999915,60.59526800000009],[-64.713057999999876,60.598877000000073],[-64.710830999999985,60.602776000000119],[-64.615554999999858,60.681664000000069],[-64.610274999999945,60.685265000000129],[-64.599166999999966,60.689430000000129],[-64.592772999999909,60.685547000000042],[-64.590835999999967,60.676659000000029],[-64.592498999999975,60.666939000000127],[-64.593886999999995,60.648331000000098],[-64.59584000000001,60.645271000000037],[-64.620543999999995,60.616661000000022],[-64.631667999999991,60.60833000000008],[-64.638061999999934,60.604996000000085],[-64.689986999999917,60.584435000000099]],[[-78.656386999999995,60.702774000000034],[-78.664718999999991,60.702217000000132],[-78.674163999999962,60.704711999999972],[-78.689986999999974,60.712212000000079],[-78.694716999999912,60.716660000000047],[-78.698333999999988,60.721656999999936],[-78.697768999999937,60.724159000000043],[-78.616393999999957,60.771935000000099],[-78.573623999999995,60.784163999999919],[-78.399993999999992,60.809990000000028],[-78.223891999999978,60.830826000000059],[-78.21945199999999,60.823883000000023],[-78.219161999999983,60.817497000000117],[-78.221114999999998,60.814156000000082],[-78.226669000000015,60.808883999999978],[-78.277221999999995,60.769157000000121],[-78.285004000000015,60.766106000000093],[-78.397231999999917,60.743881000000044],[-78.62332200000003,60.705551000000128],[-78.656386999999995,60.702774000000034]],[[-69.977218999999991,60.933051999999975],[-69.983886999999982,60.93110699999994],[-69.995269999999948,60.931381000000101],[-70.003615999999965,60.935265000000072],[-70.007781999999963,60.939155999999969],[-70.026107999999965,60.995827000000077],[-70.025008999999955,61.001937999999996],[-70.021666999999866,61.008605999999986],[-70.016662999999994,61.013611000000026],[-70.009170999999867,61.017768999999987],[-70.003341999999918,61.020828000000108],[-69.982772999999895,61.028327999999988],[-69.964721999999995,61.032768000000033],[-69.954177999999956,61.033882000000006],[-69.943603999999993,61.031380000000127],[-69.931380999999931,61.020271000000037],[-69.929992999999854,61.016663000000108],[-69.929717999999923,61.010825999999952],[-69.930832000000009,61.00471500000009],[-69.933883999999921,60.998047000000099],[-69.977218999999991,60.933051999999975]],[[-64.723891999999921,61.53833000000003],[-64.71665999999999,61.535827999999981],[-64.706954999999994,61.536658999999986],[-64.688323999999909,61.535552999999993],[-64.683318999999869,61.531105000000025],[-64.675277999999992,61.508606000000043],[-64.674164000000019,61.503325999999959],[-64.686935000000005,61.465827999999988],[-64.705276000000026,61.444153000000142],[-64.715012000000002,61.433327000000077],[-64.820557000000008,61.355270000000075],[-64.866942999999992,61.324164999999994],[-64.870833999999945,61.32249500000006],[-64.875274999999988,61.32249500000006],[-64.887222000000008,61.324715000000026],[-64.972503999999958,61.344154000000117],[-64.977492999999924,61.34777100000008],[-64.985000999999954,61.367493000000138],[-65.179168999999945,61.466933999999981],[-65.18582200000003,61.47554800000006],[-65.187499999999943,61.480270000000132],[-65.190552000000025,61.494995000000074],[-65.195267000000001,61.499160999999958],[-65.295272999999895,61.528877000000023],[-65.329453000000001,61.531937000000084],[-65.353333000000021,61.534721000000047],[-65.37249799999995,61.537216000000058],[-65.381103999999993,61.540550000000053],[-65.47444200000001,61.586936999999978],[-65.481109999999887,61.590828000000045],[-65.487777999999935,61.599433999999974],[-65.486938000000009,61.610825000000091],[-65.485000999999954,61.62193300000007],[-65.482223999999974,61.62860100000006],[-65.472228999999857,61.64027400000009],[-65.466400000000021,61.644997000000046],[-65.459441999999854,61.649162000000047],[-65.453063999999983,61.651932000000102],[-65.449158000000011,61.653602999999976],[-65.441375999999934,61.656654000000003],[-65.43582200000003,61.658043000000021],[-65.339721999999938,61.670547000000056],[-65.247498000000007,61.68082400000003],[-65.174438000000009,61.686935000000119],[-65.068343999999968,61.693047000000092],[-65.036391999999921,61.693603999999993],[-65.018889999999885,61.692490000000021],[-65.016112999999962,61.692214999999976],[-64.99499499999996,61.689987000000031],[-64.733062999999959,61.659987999999998],[-64.719161999999983,61.658043000000021],[-64.646392999999932,61.603882000000112],[-64.646118000000001,61.599716000000001],[-64.650833000000034,61.594437000000028],[-64.65972899999997,61.588042999999971],[-64.662780999999995,61.587769000000037],[-64.714172000000019,61.556381000000044],[-64.720275999999956,61.551383999999928],[-64.726104999999961,61.542220999999927],[-64.723891999999921,61.53833000000003]],[[-65.695266999999888,61.776657],[-65.71945199999999,61.754165999999998],[-65.803054999999915,61.755554000000075],[-65.827224999999942,61.758049000000085],[-65.891388000000006,61.76638800000012],[-65.903885000000002,61.768326000000059],[-65.931106999999997,61.778328000000045],[-65.939163000000008,61.782210999999961],[-65.944442999999978,61.785828000000095],[-65.948043999999925,61.790276000000063],[-65.94749499999989,61.796104000000014],[-65.943877999999927,61.799720999999977],[-65.818344000000025,61.860825000000034],[-65.809432999999956,61.86332700000014],[-65.789992999999981,61.865547000000106],[-65.778060999999866,61.865547000000106],[-65.767501999999979,61.862770000000012],[-65.718613000000005,61.841102999999976],[-65.714721999999938,61.836937000000091],[-65.713622999999984,61.824165000000107],[-65.695266999999888,61.776657]],[[-92.963897999999972,61.879158000000075],[-92.995270000000005,61.851105000000132],[-93.00167799999997,61.847214000000065],[-93.051940999999943,61.829437000000041],[-93.07028200000002,61.825272000000041],[-93.079726999999991,61.826941999999974],[-93.086669999999913,61.829437000000041],[-93.115828999999962,61.860275000000001],[-93.120270000000005,61.864441000000113],[-93.126937999999882,61.868599000000074],[-93.135833999999988,61.872489999999914],[-93.14805599999994,61.87582400000008],[-93.179717999999923,61.875549000000092],[-93.189437999999996,61.874161000000015],[-93.211120999999935,61.875267000000008],[-93.218886999999995,61.87943300000012],[-93.223327999999981,61.888329000000056],[-93.226105000000018,61.908325000000048],[-93.223617999999931,61.913048000000003],[-93.218886999999995,61.918884000000048],[-93.20944199999991,61.921104000000071],[-93.072509999999909,61.929993000000138],[-93.062209999999993,61.930550000000039],[-92.96945199999999,61.888329000000056],[-92.962783999999999,61.884162999999944],[-92.963897999999972,61.879158000000075]],[[-64.916106999999954,61.719437000000084],[-64.926940999999943,61.718880000000013],[-64.951950000000011,61.722488000000112],[-65.14805599999994,61.780548000000067],[-65.156661999999926,61.783882000000062],[-65.210555999999883,61.816940000000045],[-65.214721999999881,61.821938000000046],[-65.251953000000015,61.869713000000047],[-65.255843999999968,61.885551000000078],[-65.255004999999926,61.901657000000057],[-65.249435000000005,61.91027100000008],[-65.245270000000005,61.914711000000125],[-65.189712999999983,61.945540999999992],[-65.170273000000009,61.947769000000108],[-65.156951999999876,61.946938000000102],[-65.080291999999929,61.931107000000111],[-65.074448000000018,61.928329000000133],[-65.06806899999998,61.923882000000049],[-65.039169000000015,61.899719000000118],[-64.980834999999956,61.885826000000066],[-64.893341000000021,61.829994000000113],[-64.886948000000018,61.825554000000068],[-64.828887999999893,61.766662999999994],[-64.825835999999981,61.761939999999981],[-64.825287000000003,61.758330999999998],[-64.828887999999893,61.752220000000079],[-64.83555599999994,61.748877999999991],[-64.858046999999942,61.739158999999972],[-64.889449999999954,61.725822000000107],[-64.906112999999948,61.721100000000035],[-64.916106999999954,61.719437000000084]],[[-65.852492999999924,62.084717000000012],[-65.869155999999919,62.079720000000123],[-65.889998999999989,62.080551000000128],[-65.913329999999974,62.084990999999945],[-66.009734999999978,62.116661000000079],[-66.016662999999994,62.120543999999995],[-66.020279000000016,62.124435000000062],[-66.021118000000001,62.128326000000129],[-66.020843999999954,62.131660000000124],[-66.014724999999942,62.136658000000125],[-65.991942999999935,62.141380000000026],[-65.928054999999972,62.151657],[-65.904449,62.152771000000143],[-65.853607000000011,62.131104000000107],[-65.845000999999911,62.124992000000134],[-65.83555599999994,62.115272999999945],[-65.835830999999928,62.099716000000114],[-65.843886999999995,62.088599999999985],[-65.852492999999924,62.084717000000012]],[[-92.223617999999931,62.355552999999986],[-92.306106999999997,62.351661999999919],[-92.339721999999995,62.354712999999947],[-92.34973100000002,62.356659000000036],[-92.371932999999956,62.386939999999925],[-92.372498000000007,62.391937000000041],[-92.354445999999939,62.410820000000115],[-92.347777999999948,62.414436000000023],[-92.319457999999941,62.415268000000083],[-92.308333999999945,62.414436000000023],[-92.162216000000001,62.402214000000015],[-92.139724999999999,62.399719000000005],[-92.141112999999905,62.394714000000135],[-92.15834000000001,62.390549000000135],[-92.223617999999931,62.355552999999986]],[[-79.540558000000033,62.411102000000028],[-79.449996999999939,62.382767000000001],[-79.442764000000011,62.379990000000078],[-79.433883999999978,62.371376000000055],[-79.429168999999945,62.361664000000076],[-79.427215999999987,62.356102000000135],[-79.424438000000009,62.344154000000117],[-79.420546999999942,62.339989000000116],[-79.359160999999972,62.296104000000071],[-79.347228999999913,62.288886999999988],[-79.328613000000018,62.283332999999971],[-79.272780999999952,62.262215000000083],[-79.266112999999962,62.258048999999971],[-79.260833999999988,62.253608999999983],[-79.256393000000003,62.244438000000002],[-79.255568999999923,62.23971599999993],[-79.261397999999929,62.163605000000018],[-79.262222000000008,62.158882000000062],[-79.329726999999991,62.01527400000009],[-79.353881999999999,61.999718000000144],[-79.396392999999932,61.968879999999956],[-79.457229999999925,61.893883000000017],[-79.461944999999957,61.881660000000011],[-79.465560999999923,61.876099000000124],[-79.524445000000014,61.811378000000104],[-79.541320999999925,61.799789000000089],[-79.552779999999927,61.796386999999982],[-79.568344000000025,61.790276000000063],[-79.583618000000001,61.783051],[-79.596664000000033,61.774436999999978],[-79.605269999999962,61.765273999999977],[-79.611114999999984,61.754440000000102],[-79.612777999999992,61.742767000000072],[-79.611938000000009,61.738045],[-79.608336999999949,61.732208000000014],[-79.606110000000001,61.726654000000053],[-79.605559999999969,61.721100000000035],[-79.607498000000021,61.708885000000123],[-79.628875999999934,61.669158999999979],[-79.632216999999969,61.664993000000038],[-79.642226999999991,61.655822999999998],[-79.65695199999999,61.642494000000113],[-79.740828999999962,61.588600000000099],[-79.75389100000001,61.580276000000026],[-79.761397999999929,61.576942000000031],[-79.779449,61.571938000000102],[-79.805831999999896,61.568054000000075],[-79.827788999999939,61.566665999999998],[-79.846114999999941,61.569992000000013],[-79.87110899999999,61.609717999999987],[-79.954178000000013,61.683601000000124],[-80.06806899999998,61.745270000000062],[-80.079453000000001,61.747772000000111],[-80.092223999999987,61.748046999999929],[-80.138610999999912,61.748604000000057],[-80.161941999999954,61.748604000000057],[-80.173324999999977,61.750275000000101],[-80.191665999999884,61.755554000000075],[-80.205276000000026,61.762772000000098],[-80.275283999999999,61.806656000000032],[-80.27806099999998,61.810272000000055],[-80.278884999999946,61.816382999999973],[-80.291381999999942,61.929993000000138],[-80.295273000000009,61.983604000000014],[-80.268616000000009,62.107215999999994],[-80.266662999999994,62.111382000000049],[-80.198607999999979,62.1988750000001],[-80.180283000000031,62.217491000000109],[-80.017501999999979,62.358604000000014],[-80.009445000000028,62.362495000000081],[-79.981383999999935,62.374161000000072],[-79.947220000000016,62.386108000000036],[-79.938048999999978,62.388603000000046],[-79.919723999999974,62.393051000000014],[-79.900283999999999,62.395828000000108],[-79.842772999999909,62.403603000000032],[-79.833617999999944,62.404160000000104],[-79.730834999999956,62.399162000000103],[-79.605559999999969,62.41304800000006],[-79.584166999999979,62.417213000000061],[-79.561934999999892,62.417213000000061],[-79.540558000000033,62.411102000000028]],[[-92.411117999999931,62.39388300000013],[-92.420546999999942,62.391663000000108],[-92.431380999999988,62.391663000000108],[-92.440825999999959,62.393608000000086],[-92.529175000000009,62.378326000000072],[-92.539443999999946,62.377212999999983],[-92.561385999999914,62.377486999999917],[-92.583892999999989,62.379990000000078],[-92.595839999999953,62.382491999999957],[-92.600554999999986,62.386939999999925],[-92.600280999999995,62.392494000000113],[-92.596953999999926,62.397774000000027],[-92.592772999999966,62.40248900000006],[-92.539992999999981,62.428329000000019],[-92.531112999999948,62.431380999999931],[-92.410278000000005,62.408882000000006],[-92.403884999999946,62.404709000000025],[-92.405563000000029,62.399436999999921],[-92.411117999999931,62.39388300000013]],[[-64.653884999999946,62.540833000000021],[-64.580840999999964,62.538605000000075],[-64.559722999999963,62.554161000000022],[-64.559998000000007,62.55860100000001],[-64.555556999999965,62.560822000000144],[-64.549727999999959,62.56221000000005],[-64.397506999999962,62.536385000000053],[-64.389724999999999,62.533882000000062],[-64.385284000000013,62.531105000000139],[-64.382767000000001,62.525825999999995],[-64.382767000000001,62.511383000000137],[-64.39416499999993,62.461379999999963],[-64.477218999999991,62.408043000000021],[-64.528609999999958,62.386658000000068],[-64.59056099999998,62.367210000000114],[-64.598891999999978,62.366385999999977],[-64.653610000000015,62.372490000000028],[-64.772781000000009,62.386383000000023],[-64.87110899999999,62.406380000000127],[-64.926666000000012,62.41832700000009],[-64.937209999999993,62.421103999999957],[-64.945830999999998,62.424438000000123],[-64.952498999999875,62.428329000000019],[-64.953887999999949,62.431380999999931],[-64.965835999999911,62.465827999999931],[-64.846114999999998,62.555267000000015],[-64.815552000000025,62.559714999999983],[-64.797500999999954,62.561378000000104],[-64.766953000000001,62.562767000000122],[-64.753066999999987,62.562492000000077],[-64.741669000000002,62.560822000000144],[-64.653884999999946,62.540833000000021]],[[-78.008347000000015,62.593605000000082],[-77.86721799999998,62.589157000000114],[-77.850554999999986,62.582771000000037],[-77.841674999999952,62.568054000000018],[-77.837783999999999,62.556938000000116],[-77.840835999999911,62.549995000000081],[-77.844726999999978,62.544716000000108],[-77.852782999999988,62.541664000000026],[-77.86221299999994,62.53943600000008],[-77.873046999999985,62.537773000000129],[-77.885009999999966,62.537498000000141],[-77.913054999999929,62.53943600000008],[-78.103333000000021,62.559158000000082],[-78.113051999999925,62.56221000000005],[-78.114440999999943,62.570549000000085],[-78.111664000000019,62.578049000000135],[-78.107772999999952,62.582771000000037],[-78.105835000000013,62.583328000000108],[-78.047500999999897,62.591934000000037],[-78.030838000000017,62.593323000000055],[-78.019164999999987,62.591934000000037],[-78.008347000000015,62.593605000000082]],[[-77.805267000000015,62.592491000000109],[-77.727218999999934,62.585822999999948],[-77.665832999999907,62.586655000000064],[-77.628052000000025,62.588326000000109],[-77.621384000000035,62.584435000000042],[-77.637787000000003,62.570831000000112],[-77.651108000000022,62.563881000000094],[-77.659164000000033,62.560822000000144],[-77.734725999999966,62.535827999999981],[-77.745270000000005,62.534163999999976],[-77.758620999999891,62.535553000000107],[-77.780288999999925,62.539161999999976],[-77.808608999999933,62.546660999999915],[-77.813613999999973,62.551102000000014],[-77.831116000000009,62.590271000000087],[-77.831679999999949,62.595825000000104],[-77.821121000000005,62.596099999999922],[-77.809433000000013,62.59415400000006],[-77.805267000000015,62.592491000000109]],[[-64.983063000000016,62.528046000000018],[-65.007232999999928,62.526382000000012],[-65.096389999999985,62.534996000000035],[-65.119720000000029,62.537498000000141],[-65.131942999999978,62.539719000000048],[-65.138061999999991,62.542770000000075],[-65.141677999999956,62.54694400000011],[-65.137787000000003,62.550544999999943],[-65.022507000000019,62.594994000000099],[-65.00306699999993,62.598877000000016],[-64.972503999999958,62.602493000000095],[-64.909163999999976,62.604438999999957],[-64.892501999999979,62.598877000000016],[-64.884734999999921,62.59415400000006],[-64.843886999999938,62.582771000000037],[-64.839447000000007,62.57777399999992],[-64.860824999999863,62.561378000000104],[-64.866104000000007,62.558044000000109],[-64.874435000000005,62.554709999999943],[-64.965285999999878,62.531380000000013],[-64.972778000000005,62.529716000000008],[-64.983063000000016,62.528046000000018]],[[-91.572783999999956,62.627487000000087],[-91.578612999999962,62.62193300000007],[-91.668059999999912,62.649162000000047],[-91.683059999999955,62.662209000000075],[-91.685546999999985,62.666939000000127],[-91.67582699999997,62.669159000000093],[-91.663329999999974,62.665543000000071],[-91.655272999999909,62.662209000000075],[-91.581954999999994,62.641380000000083],[-91.575561999999934,62.637215000000083],[-91.571121000000005,62.632767000000115],[-91.572783999999956,62.627487000000087]],[[-90.979995999999971,62.657767999999976],[-90.990279999999984,62.656654000000003],[-91.003341999999918,62.657211000000075],[-91.098891999999921,62.654433999999981],[-91.244719999999973,62.669991000000039],[-91.256393000000003,62.671936000000017],[-91.266952999999944,62.675552000000096],[-91.271117999999944,62.679992999999968],[-91.267226999999991,62.685546999999985],[-91.226944000000003,62.691658000000075],[-91.173049999999989,62.691375999999991],[-91.080291999999986,62.686935000000062],[-91.056106999999997,62.681664000000069],[-90.981673999999998,62.661376999999959],[-90.979995999999971,62.657767999999976]],[[-74.347778000000005,62.679436000000067],[-74.309998000000007,62.679161000000079],[-74.285552999999993,62.679992999999968],[-74.25028999999995,62.682495000000074],[-74.216109999999958,62.684990000000084],[-74.181670999999994,62.688880999999981],[-74.158889999999985,62.688880999999981],[-74.145843999999954,62.687767000000008],[-74.015839000000028,62.664993000000038],[-74.009170999999981,62.662490999999932],[-73.959732000000031,62.62082700000002],[-73.958054000000004,62.616661000000136],[-73.958054000000004,62.612495000000024],[-73.962508999999955,62.607772999999952],[-73.969727000000034,62.604163999999969],[-73.988602000000014,62.602218999999991],[-74.128875999999877,62.600829999999974],[-74.154448999999886,62.601105000000018],[-74.169158999999922,62.602218999999991],[-74.183608999999933,62.603882000000056],[-74.333618000000001,62.62943300000012],[-74.541381999999942,62.668327000000033],[-74.551102000000014,62.670829999999967],[-74.586394999999925,62.683051999999975],[-74.617217999999923,62.696098000000063],[-74.639724999999999,62.706383000000017],[-74.64973399999991,62.712769000000094],[-74.651397999999858,62.716934000000094],[-74.645844000000011,62.720824999999991],[-74.537215999999944,62.748878000000104],[-74.526671999999905,62.748878000000104],[-74.519164999999873,62.747772000000111],[-74.482772999999952,62.739716000000044],[-74.392226999999934,62.687210000000107],[-74.379989999999964,62.682495000000074],[-74.374160999999958,62.681381000000101],[-74.347778000000005,62.679436000000067]],[[-70.711670000000026,62.81499500000001],[-70.659728999999913,62.79833200000013],[-70.587783999999999,62.774162000000103],[-70.547500999999954,62.765273999999977],[-70.415557999999976,62.729156000000103],[-70.396956999999986,62.723045000000013],[-70.226104999999961,62.603049999999996],[-70.217772999999966,62.594437000000028],[-70.212218999999948,62.584160000000054],[-70.211120999999991,62.579163000000108],[-70.211945000000014,62.57777399999992],[-70.264724999999999,62.559158000000082],[-70.283324999999991,62.55443600000001],[-70.373610999999926,62.533332999999914],[-70.393065999999976,62.530273000000079],[-70.414444000000003,62.529434000000094],[-70.466659999999933,62.53166200000004],[-70.501113999999973,62.533607000000075],[-70.686385999999914,62.546104000000014],[-70.723891999999978,62.550270000000125],[-70.746383999999978,62.554709999999943],[-70.765015000000005,62.560547000000099],[-70.770844000000011,62.564712999999983],[-70.819732999999985,62.604713000000118],[-70.825011999999958,62.614441000000113],[-70.854445999999939,62.713608000000079],[-70.846663999999976,62.766106000000036],[-70.945540999999935,62.798050000000046],[-71.01916499999993,62.811934999999949],[-71.032500999999968,62.81249200000002],[-71.043334999999956,62.811934999999949],[-71.051665999999955,62.810547000000042],[-71.106383999999935,62.80082700000014],[-71.141113000000018,62.794998000000135],[-71.148620999999935,62.794998000000135],[-71.15834000000001,62.797217999999987],[-71.176101999999958,62.809158000000082],[-71.240554999999972,62.876380999999981],[-71.241378999999995,62.881378000000097],[-71.236389000000031,62.886658000000125],[-71.229445999999882,62.888046000000031],[-71.191100999999946,62.884720000000016],[-71.073897999999929,62.871933000000013],[-70.788054999999929,62.836104999999975],[-70.760283999999956,62.829994000000056],[-70.711670000000026,62.81499500000001]],[[-66.368331999999953,62.83526599999999],[-66.373885999999857,62.833603000000096],[-66.386123999999995,62.834434999999985],[-66.490279999999984,62.855270000000132],[-66.505279999999971,62.861382000000106],[-66.601669000000015,62.906654000000117],[-66.593886999999938,62.911934000000031],[-66.574172999999973,62.913048000000003],[-66.547775000000001,62.910545000000013],[-66.540282999999931,62.907493999999986],[-66.441939999999988,62.871101000000124],[-66.377776999999924,62.843322999999998],[-66.370270000000005,62.839713999999958],[-66.368331999999953,62.83526599999999]],[[-81.87110899999999,62.928329000000133],[-81.865554999999972,62.923324999999977],[-81.864165999999955,62.919990999999982],[-81.90695199999999,62.866386000000091],[-81.926101999999958,62.744156000000032],[-81.924712999999997,62.739158999999972],[-81.923889000000031,62.733046999999942],[-81.924164000000019,62.728325000000041],[-81.926101999999958,62.723602000000085],[-81.929169000000002,62.719437000000084],[-81.938598999999954,62.709991000000116],[-81.958892999999989,62.697768999999937],[-81.973052999999993,62.689713000000097],[-82.102218999999991,62.629158000000132],[-82.1875,62.599433999999917],[-82.277785999999935,62.584160000000054],[-82.286941999999897,62.581664999999987],[-82.315552000000025,62.571663000000058],[-82.369155999999919,62.547493000000031],[-82.381667999999991,62.53943600000008],[-82.387786999999946,62.534721000000047],[-82.40194699999995,62.520546000000138],[-82.40834000000001,62.509720000000016],[-82.408889999999928,62.496657999999968],[-82.414444000000003,62.478043000000071],[-82.425811999999951,62.469986000000063],[-82.442214999999919,62.458603000000096],[-82.449722000000008,62.455269000000101],[-82.499434999999949,62.438599000000124],[-82.533889999999985,62.428604000000064],[-82.551940999999999,62.423881999999992],[-82.583617999999944,62.412766000000033],[-82.621384000000035,62.395271000000037],[-82.641113000000018,62.385269000000051],[-82.647232000000031,62.38110400000005],[-82.670273000000009,62.35943600000013],[-82.688599000000011,62.341103000000089],[-82.713057999999933,62.321381000000031],[-82.731383999999935,62.309990000000084],[-82.743606999999997,62.302489999999977],[-82.769164999999987,62.290276000000006],[-82.985549999999989,62.209717000000126],[-83.001953000000015,62.204437000000041],[-83.087783999999999,62.178879000000109],[-83.121932999999956,62.173050000000103],[-83.136397999999986,62.173050000000103],[-83.143889999999999,62.176659000000086],[-83.150832999999977,62.182770000000005],[-83.15943900000002,62.198600999999996],[-83.168059999999912,62.207497000000103],[-83.176392000000021,62.213051000000064],[-83.198607999999979,62.222214000000065],[-83.249435000000005,62.240829000000019],[-83.275832999999977,62.248604000000114],[-83.308043999999882,62.252777000000037],[-83.322784000000013,62.253052000000082],[-83.337783999999942,62.252219999999966],[-83.359726000000023,62.249718000000087],[-83.405562999999972,62.238884000000041],[-83.471938999999907,62.222763000000043],[-83.480835000000013,62.219986000000119],[-83.498885999999914,62.213326000000109],[-83.513335999999924,62.20638300000013],[-83.539992999999924,62.191933000000006],[-83.57417299999986,62.176384000000098],[-83.639174999999966,62.151100000000099],[-83.653885000000002,62.145827999999995],[-83.672774999999945,62.141106000000093],[-83.683318999999983,62.139717000000076],[-83.703887999999949,62.141662999999994],[-83.709441999999967,62.144440000000088],[-83.713897999999972,62.147216999999955],[-83.71833799999996,62.152214000000072],[-83.722778000000005,62.160271000000023],[-83.722778000000005,62.167213000000118],[-83.718063000000029,62.17943600000001],[-83.711945000000014,62.217209000000025],[-83.711669999999913,62.235825000000034],[-83.721389999999985,62.281662000000097],[-83.722778000000005,62.286385000000109],[-83.725829999999917,62.295273000000066],[-83.731673999999998,62.303604000000007],[-83.738892000000021,62.306937999999946],[-83.756667999999991,62.312492000000134],[-83.783324999999991,62.31888600000002],[-83.806655999999975,62.326385000000016],[-83.824448000000018,62.337212000000022],[-83.902495999999871,62.387497000000053],[-83.918610000000001,62.399162000000103],[-83.933608999999876,62.412209000000132],[-83.942489999999964,62.421661000000029],[-83.945267000000001,62.42721599999993],[-83.946654999999964,62.434158000000025],[-83.946654999999964,62.440269000000114],[-83.945267000000001,62.447212000000093],[-83.939162999999951,62.457497000000046],[-83.914168999999958,62.478600000000142],[-83.908339999999953,62.482764999999972],[-83.869445999999982,62.501105999999936],[-83.853058000000033,62.508049000000142],[-83.814437999999996,62.523880000000077],[-83.741378999999995,62.551658999999916],[-83.704177999999956,62.569443000000035],[-83.698043999999925,62.573051000000135],[-83.570007000000032,62.675270000000012],[-83.559433000000013,62.684157999999968],[-83.550277999999935,62.69999700000011],[-83.545546999999999,62.712212000000022],[-83.545546999999999,62.71776600000004],[-83.551392000000021,62.726653999999996],[-83.555831999999953,62.731659000000036],[-83.558884000000035,62.743881000000044],[-83.533614999999884,62.810272000000055],[-83.527495999999928,62.8211060000001],[-83.523055999999997,62.825271999999984],[-83.516953000000001,62.829994000000056],[-83.400283999999999,62.897491000000116],[-83.374160999999958,62.906937000000084],[-83.31082200000003,62.924438000000066],[-83.298614999999984,62.925827000000027],[-83.211670000000026,62.913605000000075],[-83.204177999999956,62.91027100000008],[-83.198333999999988,62.906654000000117],[-83.193877999999984,62.901932000000045],[-83.182495000000017,62.881378000000097],[-83.178054999999915,62.876380999999981],[-83.156112999999948,62.860549999999989],[-83.142501999999979,62.854439000000127],[-83.124709999999936,62.84804500000007],[-83.108337000000006,62.843322999999998],[-83.087509000000011,62.840271000000087],[-83.061935000000005,62.837493999999992],[-83.041107000000011,62.837212000000079],[-83.021392999999989,62.838599999999985],[-83.001677999999913,62.842491000000052],[-82.982223999999917,62.847771000000137],[-82.857497999999964,62.88999200000012],[-82.825561999999991,62.90277100000003],[-82.793335000000013,62.915543000000014],[-82.759734999999921,62.926940999999999],[-82.751952999999901,62.928878999999938],[-82.694442999999978,62.939430000000073],[-82.652221999999995,62.943878000000041],[-82.62470999999988,62.945540999999935],[-82.606658999999979,62.945540999999935],[-82.573623999999995,62.943878000000041],[-82.540833000000021,62.939430000000073],[-82.507781999999963,62.933601000000067],[-82.461394999999982,62.927489999999977],[-82.436110999999983,62.925270000000125],[-82.420837000000006,62.924995000000138],[-82.398055999999883,62.927489999999977],[-82.381377999999984,62.932770000000005],[-82.378052000000025,62.936377999999934],[-82.376389000000017,62.941101000000117],[-82.379165999999998,62.946655000000135],[-82.383620999999948,62.95138500000013],[-82.379989999999964,62.957497000000103],[-82.37222300000002,62.960274000000027],[-82.292770000000019,62.98333000000008],[-82.266662999999937,62.989159000000086],[-82.239440999999999,62.990273000000059],[-82.185821999999916,62.979988000000105],[-82.121932999999956,62.966660000000104],[-82.008057000000008,62.954993999999942],[-81.94027699999998,62.95387999999997],[-81.911666999999966,62.952217000000076],[-81.905838000000017,62.949997000000053],[-81.87110899999999,62.928329000000133]],[[-66.825561999999991,62.984161000000086],[-66.831389999999999,62.982765000000029],[-66.871384000000035,62.988884000000041],[-66.881942999999978,62.991661000000136],[-66.889450000000011,62.995269999999948],[-67.069457999999997,63.107498000000021],[-67.032776000000013,63.103881999999999],[-66.965285999999992,63.082496999999989],[-66.952224999999999,63.078049000000021],[-66.946105999999872,63.07499700000011],[-66.944442999999922,63.072768999999994],[-66.930557000000022,63.066939999999988],[-66.917496000000028,63.059715000000097],[-66.907501000000025,63.052773000000002],[-66.830001999999922,62.992493000000081],[-66.826950000000011,62.989990000000091],[-66.825011999999958,62.985550000000046],[-66.825561999999991,62.984161000000086]],[[-67.764450000000011,63.162491000000045],[-67.775833000000034,63.1616590000001],[-67.787505999999951,63.163048000000117],[-67.79861499999987,63.165543000000127],[-67.806380999999988,63.168602000000135],[-67.851943999999946,63.191376000000105],[-67.863327000000027,63.199158000000011],[-67.876388999999961,63.211937000000091],[-67.876937999999996,63.216933999999981],[-67.875,63.22304500000007],[-67.866393999999957,63.232491000000039],[-67.852218999999877,63.244438000000002],[-67.84445199999999,63.247215000000097],[-67.839721999999995,63.247215000000097],[-67.831954999999994,63.244155999999919],[-67.821945000000028,63.236656000000039],[-67.822234999999921,63.233330000000024],[-67.816101000000003,63.23054499999995],[-67.791671999999949,63.214996000000042],[-67.769454999999994,63.198326000000122],[-67.746108999999933,63.178879000000109],[-67.744720000000029,63.173050000000103],[-67.746384000000035,63.166939000000013],[-67.764450000000011,63.162491000000045]],[[-67.925003000000004,63.183327000000077],[-67.956116000000009,63.181107000000054],[-67.966949,63.183875999999998],[-68.000838999999985,63.208046000000024],[-68.017226999999991,63.220543000000021],[-68.061385999999914,63.257773999999984],[-68.105834999999956,63.299438000000066],[-68.111663999999962,63.309158000000139],[-68.112212999999997,63.313606000000107],[-68.106383999999991,63.318604000000107],[-68.096953999999926,63.318885999999964],[-68.085555999999997,63.316101000000117],[-68.069167999999877,63.309432999999956],[-68.048889000000031,63.297493000000088],[-68.032227000000034,63.284996000000092],[-68.00028999999995,63.260276999999917],[-67.92582699999997,63.196098000000006],[-67.920546999999999,63.191376000000105],[-67.916945999999939,63.186653000000092],[-67.925003000000004,63.183327000000077]],[[-78.079726999999991,63.469436999999914],[-77.946105999999986,63.468048000000124],[-77.937774999999988,63.471100000000035],[-77.930556999999965,63.474991000000102],[-77.924164000000019,63.47693600000008],[-77.911941999999954,63.476379000000009],[-77.845001000000025,63.472214000000008],[-77.680557000000022,63.434433000000013],[-77.636672999999917,63.402771000000087],[-77.495834000000002,63.274994000000106],[-77.493880999999988,63.269989000000066],[-77.49499499999996,63.265831000000105],[-77.50389100000001,63.252494999999954],[-77.573333999999932,63.200546000000145],[-77.641953000000001,63.171936000000073],[-77.785277999999892,63.121658000000139],[-77.898894999999925,63.09276600000004],[-77.906661999999983,63.09165999999999],[-77.931380999999931,63.090546000000018],[-77.946655000000021,63.091103000000089],[-77.958343999999954,63.093048000000124],[-78.025008999999898,63.11721],[-78.124709999999993,63.165825000000041],[-78.226944000000003,63.221656999999993],[-78.295546999999999,63.25999500000006],[-78.311385999999914,63.272217000000012],[-78.322234999999978,63.281105000000025],[-78.343613000000005,63.29694400000011],[-78.354445999999996,63.303604000000121],[-78.446655000000021,63.350273000000129],[-78.486937999999896,63.364998000000071],[-78.519729999999981,63.370270000000005],[-78.523894999999982,63.372489999999971],[-78.562499999999943,63.395828000000108],[-78.572234999999921,63.434715000000097],[-78.572783999999956,63.440269000000114],[-78.551665999999955,63.44499200000007],[-78.379989999999964,63.476379000000009],[-78.278885000000002,63.489716000000044],[-78.214111000000003,63.496535999999992],[-78.212783999999999,63.496101000000067],[-78.158614999999884,63.482208000000014],[-78.091675000000009,63.470543000000134],[-78.079726999999991,63.469436999999914]],[[-90.653884999999946,63.441101000000003],[-90.697495000000004,63.439713000000097],[-90.708892999999932,63.440544000000102],[-90.719161999999983,63.443603999999993],[-90.72582999999986,63.448043999999982],[-90.755004999999983,63.489716000000044],[-90.757232999999985,63.494438000000116],[-90.748046999999929,63.498329000000012],[-90.737502999999947,63.499161000000129],[-90.645553999999947,63.483330000000137],[-90.620269999999948,63.47693600000008],[-90.602782999999988,63.463882000000012],[-90.598052999999993,63.454436999999984],[-90.602218999999991,63.449158000000011],[-90.611937999999952,63.44609800000012],[-90.621932999999956,63.444153000000142],[-90.653884999999946,63.441101000000003]],[[-78.55749499999996,63.457497000000046],[-78.600554999999929,63.456383000000017],[-78.603333000000021,63.45777099999998],[-78.56138599999997,63.502495000000124],[-78.543334999999956,63.516106000000093],[-78.515839000000028,63.53166200000004],[-78.505004999999869,63.532493999999929],[-78.496108999999933,63.529434000000094],[-78.473327999999981,63.519157000000121],[-78.468063000000029,63.515549000000021],[-78.46166999999997,63.507499999999993],[-78.459166999999979,63.479988000000048],[-78.461945000000014,63.47387700000013],[-78.467223999999987,63.469436999999914],[-78.475554999999986,63.466933999999981],[-78.531113000000005,63.458603000000039],[-78.55749499999996,63.457497000000046]],[[-90.793609999999944,63.494156000000089],[-90.804442999999935,63.493324000000143],[-90.816956000000005,63.495827000000133],[-90.877212999999983,63.514717000000076],[-90.933318999999983,63.534164000000089],[-90.965835999999967,63.54583000000008],[-90.96833799999996,63.550270000000125],[-90.957503999999972,63.551384000000098],[-90.771117999999944,63.55193300000002],[-90.748046999999929,63.550270000000125],[-90.720001000000025,63.543052999999986],[-90.709731999999974,63.539992999999924],[-90.700835999999981,63.536110000000008],[-90.681380999999988,63.52304799999996],[-90.676940999999886,63.518599999999992],[-90.674712999999997,63.513884999999959],[-90.678604000000007,63.508330999999998],[-90.688889000000017,63.50638600000002],[-90.793609999999944,63.494156000000089]],[[-64.851944000000003,63.385826000000122],[-64.856948999999986,63.385826000000122],[-64.882216999999969,63.395546000000024],[-64.904175000000009,63.40638000000007],[-64.918335000000013,63.413879000000065],[-64.942215000000033,63.43082400000003],[-64.950835999999924,63.439156000000025],[-65.026672000000019,63.515549000000021],[-65.035278000000005,63.524436999999978],[-65.053054999999972,63.548331999999959],[-65.051940999999999,63.552215999999987],[-64.977218999999991,63.568329000000062],[-64.967498999999918,63.568329000000062],[-64.954726999999991,63.558883999999978],[-64.954726999999991,63.553879000000109],[-64.93360899999999,63.544716000000108],[-64.912216000000001,63.533333000000084],[-64.909163999999976,63.528603000000089],[-64.867492999999911,63.461662000000047],[-64.860824999999863,63.447212000000093],[-64.847504000000015,63.407494000000042],[-64.844726999999978,63.396942000000081],[-64.847778000000005,63.387496999999996],[-64.851944000000003,63.385826000000122]],[[-72.182495000000017,63.51998900000001],[-72.207503999999972,63.51998900000001],[-72.218886999999995,63.522491000000059],[-72.226943999999946,63.525825999999995],[-72.232772999999895,63.530273000000022],[-72.286666999999909,63.583328000000108],[-72.279174999999952,63.585548000000131],[-72.232223999999917,63.586655000000064],[-72.230285999999978,63.587212000000136],[-72.205276000000026,63.583054000000004],[-72.184432999999956,63.577217000000019],[-72.135559000000001,63.562767000000065],[-72.129165999999998,63.558883999999978],[-72.128052000000025,63.553879000000109],[-72.145003999999972,63.539436000000023],[-72.165833000000021,63.526381999999955],[-72.173614999999984,63.522766000000104],[-72.182495000000017,63.51998900000001]],[[-91.329177999999956,63.559714999999983],[-91.401947000000007,63.549438000000009],[-91.424438000000009,63.550270000000125],[-91.43638599999997,63.55193300000002],[-91.461944999999901,63.558327000000077],[-91.540282999999931,63.601662000000033],[-91.540558000000033,63.606658999999979],[-91.534164000000033,63.611381999999935],[-91.501113999999973,63.611938000000123],[-91.463897999999915,63.6097180000001],[-91.440826000000015,63.608047000000056],[-91.428604000000007,63.606383999999935],[-91.416396999999961,63.603607000000068],[-91.362503000000004,63.590271000000087],[-91.34944200000001,63.586655000000064],[-91.299727999999959,63.567771999999934],[-91.308884000000035,63.563881000000094],[-91.329177999999956,63.559714999999983]],[[-64.092498999999918,63.481659000000093],[-64.101944000000003,63.47943099999992],[-64.109160999999915,63.483046999999999],[-64.169448999999986,63.523605000000089],[-64.180556999999965,63.533051000000057],[-64.184158000000025,63.537216000000058],[-64.209166999999979,63.574996999999996],[-64.216109999999901,63.595268000000033],[-64.216948999999943,63.601105000000132],[-64.215285999999935,63.617493000000024],[-64.212783999999942,63.623604000000114],[-64.199722000000008,63.633331000000055],[-64.191939999999988,63.637215000000083],[-64.182495000000017,63.639435000000105],[-64.17193599999996,63.633606000000043],[-64.09333799999996,63.568329000000062],[-64.078338999999914,63.550545000000113],[-64.077224999999999,63.545273000000009],[-64.077788999999882,63.539718999999991],[-64.086120999999935,63.493050000000039],[-64.087508999999955,63.486655999999982],[-64.092498999999918,63.481659000000093]],[[-68.656386999999938,63.626381000000038],[-68.717772999999909,63.624161000000015],[-68.731109999999944,63.625549000000092],[-68.815552000000025,63.649162000000047],[-68.821670999999981,63.652488999999946],[-68.820007000000032,63.65526600000004],[-68.793059999999969,63.661659000000043],[-68.71444699999995,63.672493000000088],[-68.691665999999941,63.673607000000061],[-68.676940999999999,63.671379000000115],[-68.668883999999935,63.668326999999977],[-68.666397000000018,63.663879000000009],[-68.666259999999966,63.662581999999986],[-68.655272999999966,63.634437999999989],[-68.654449,63.630272000000105],[-68.656386999999938,63.626381000000038]],[[-64.061110999999983,63.270546000000138],[-64.070556999999951,63.268326000000116],[-64.078338999999914,63.268883000000017],[-64.181945999999982,63.29694400000011],[-64.25140399999998,63.320830999999998],[-64.266953000000001,63.326384999999959],[-64.349730999999963,63.392220000000009],[-64.353881999999885,63.395828000000108],[-64.421936000000017,63.471657000000107],[-64.496108999999876,63.6097180000001],[-64.490554999999972,63.620544000000052],[-64.479171999999949,63.636940000000038],[-64.473617999999874,63.640549000000078],[-64.386672999999973,63.675270000000012],[-64.377212999999927,63.677489999999977],[-64.367217999999923,63.675270000000012],[-64.363051999999925,63.671936000000017],[-64.328888000000006,63.644440000000145],[-64.325561999999934,63.637496999999939],[-64.325561999999934,63.59804500000007],[-64.324447999999961,63.588042999999971],[-64.321670999999981,63.577492000000063],[-64.316101000000003,63.562492000000077],[-64.262511999999958,63.421104000000128],[-64.232498000000021,63.388329000000113],[-64.225280999999939,63.384438000000046],[-64.20666499999993,63.384163000000001],[-64.166945999999996,63.369438000000059],[-64.144729999999925,63.355552999999986],[-64.099990999999932,63.322769000000108],[-64.057495000000017,63.278046000000018],[-64.057495000000017,63.273880000000133],[-64.061110999999983,63.270546000000138]],[[-71.799164000000019,63.615546999999935],[-71.806945999999868,63.611938000000123],[-71.845275999999956,63.613608999999997],[-71.855269999999905,63.615829000000019],[-71.863327000000027,63.619438000000002],[-71.865829000000019,63.624435000000119],[-71.865829000000019,63.636383000000137],[-71.864166000000012,63.669440999999949],[-71.830565999999919,63.693878000000041],[-71.821945000000028,63.695267000000058],[-71.789444000000003,63.691375999999991],[-71.779449,63.68832400000008],[-71.775283999999999,63.683051999999918],[-71.777221999999938,63.670830000000137],[-71.791107000000011,63.627213000000097],[-71.799164000000019,63.615546999999935]],[[-76.810546999999985,63.601105000000132],[-76.710555999999997,63.565826000000072],[-76.672225999999966,63.528877000000023],[-76.675551999999925,63.496658000000139],[-76.681609999999978,63.481354000000067],[-76.61332699999997,63.473602000000085],[-76.565551999999911,63.46776600000004],[-76.546111999999994,63.464714000000129],[-76.541945999999939,63.462494000000106],[-76.543883999999991,63.461104999999918],[-76.675002999999947,63.374709999999993],[-76.682219999999973,63.370827000000077],[-76.692214999999976,63.367767000000015],[-76.703338999999971,63.365829000000076],[-76.712783999999942,63.365546999999992],[-76.726105000000018,63.36693600000001],[-76.847778000000005,63.385269000000051],[-76.984160999999915,63.40638000000007],[-77.035277999999948,63.423882000000106],[-77.039443999999946,63.426102000000128],[-77.046111999999994,63.42971799999998],[-77.051391999999964,63.434158000000025],[-77.05360399999995,63.436935000000119],[-77.055556999999965,63.442764000000125],[-77.06138599999997,63.450546000000088],[-77.105834999999956,63.476654000000053],[-77.111663999999962,63.479713000000004],[-77.327788999999996,63.572220000000129],[-77.36721799999998,63.583054000000004],[-77.391388000000006,63.585548000000131],[-77.411666999999966,63.584991000000002],[-77.422226000000023,63.586655000000064],[-77.427779999999984,63.589157000000114],[-77.431945999999982,63.591934000000037],[-77.442215000000033,63.608330000000024],[-77.457229999999981,63.643325999999945],[-77.453887999999949,63.652214000000129],[-77.44027699999998,63.665268000000026],[-77.410277999999948,63.686652999999978],[-77.40055799999999,63.688880999999981],[-77.378051999999968,63.692214999999919],[-77.343338000000017,63.696098000000063],[-77.116942999999935,63.681107000000111],[-77.103332999999964,63.67971799999998],[-77.06138599999997,63.672768000000076],[-77.021392999999932,63.664154000000053],[-76.810546999999985,63.601105000000132]],[[-72.594727000000034,63.642494000000056],[-72.604445999999939,63.641663000000051],[-72.780563000000029,63.659987999999942],[-72.783324999999877,63.66443600000008],[-72.770553999999947,63.669715999999994],[-72.756667999999877,63.672768000000076],[-72.723052999999993,63.67860399999995],[-72.506667999999991,63.707214000000022],[-72.483886999999982,63.708885000000066],[-72.474166999999909,63.705826000000116],[-72.470839999999953,63.702217000000076],[-72.471389999999985,63.700828999999999],[-72.468886999999938,63.699158000000125],[-72.463333000000034,63.689156000000139],[-72.459731999999974,63.679161000000079],[-72.46055599999994,63.672768000000076],[-72.463897999999972,63.668326999999977],[-72.584441999999967,63.644440000000145],[-72.594727000000034,63.642494000000056]],[[-64.032501000000025,63.68971300000004],[-64.161117999999988,63.674438000000066],[-64.181106999999997,63.675827000000083],[-64.200286999999946,63.685546999999985],[-64.208344000000011,63.697487000000081],[-64.21166999999997,63.706383000000017],[-64.212509000000011,63.712212000000022],[-64.208892999999989,63.721930999999984],[-64.180283000000031,63.742218000000094],[-64.17471299999994,63.745270000000005],[-64.166655999999989,63.747772000000055],[-64.083069000000023,63.758331000000112],[-64.078063999999983,63.758331000000112],[-64.075287000000003,63.758049000000028],[-64.073333999999932,63.756386000000134],[-64.054840000000013,63.736595000000079],[-64.043335000000013,63.734161000000086],[-64.030288999999982,63.729713000000118],[-64.025283999999942,63.70249200000012],[-64.025283999999942,63.697487000000081],[-64.026397999999915,63.693878000000041],[-64.032501000000025,63.68971300000004]],[[-72.667769999999962,63.69582400000013],[-72.6949919999999,63.690269000000058],[-72.703613000000018,63.692490000000134],[-72.734160999999972,63.710823000000005],[-72.738891999999908,63.714439000000084],[-72.741669000000002,63.719711000000018],[-72.743880999999874,63.730270000000019],[-72.739989999999977,63.736107000000004],[-72.719727000000034,63.76388500000013],[-72.715560999999923,63.766106000000036],[-72.705841000000021,63.767494000000113],[-72.693877999999984,63.765830999999991],[-72.682495000000017,63.762214999999969],[-72.664718999999934,63.755554000000018],[-72.642226999999934,63.745270000000005],[-72.635833999999988,63.741379000000109],[-72.626663000000008,63.732207999999957],[-72.625823999999966,63.727486000000056],[-72.626389000000017,63.721099999999979],[-72.634170999999981,63.709160000000054],[-72.649993999999992,63.701385000000016],[-72.667769999999962,63.69582400000013]],[[-64.28443900000002,63.708602999999982],[-64.286391999999978,63.708046000000081],[-64.311110999999926,63.709991000000116],[-64.329178000000013,63.71665999999999],[-64.336394999999925,63.719986000000006],[-64.348617999999988,63.728042999999957],[-64.356948999999986,63.736938000000009],[-64.363616999999977,63.746383999999978],[-64.381103999999993,63.807495000000131],[-64.35943599999996,63.803879000000052],[-64.339721999999938,63.796943999999996],[-64.331954999999994,63.791663999999969],[-64.302779999999927,63.78054800000001],[-64.278610000000015,63.770828000000108],[-64.275008999999955,63.766663000000108],[-64.255279999999971,63.729713000000118],[-64.255004999999926,63.72526600000009],[-64.260833999999875,63.719711000000018],[-64.28443900000002,63.708602999999982]],[[-64.170273000000009,63.856384000000105],[-64.180831999999896,63.785270999999966],[-64.195267000000001,63.778603000000032],[-64.203338999999971,63.776382000000126],[-64.234435999999903,63.771378000000141],[-64.245834000000002,63.771378000000141],[-64.256957999999997,63.774162000000103],[-64.325561999999934,63.80582400000003],[-64.398346000000004,63.845543000000134],[-64.39916999999997,63.849434000000031],[-64.397780999999895,63.851386999999988],[-64.396117999999944,63.851936000000137],[-64.353881999999885,63.861107000000061],[-64.334091000000001,63.852081000000055],[-64.325561999999934,63.850273000000016],[-64.31082200000003,63.848328000000038],[-64.268340999999907,63.846100000000035],[-64.215012000000002,63.850273000000016],[-64.208344000000011,63.852776000000006],[-64.200286999999946,63.859718000000044],[-64.186661000000015,63.86721],[-64.179992999999911,63.865547000000106],[-64.175827000000027,63.861938000000066],[-64.170273000000009,63.856384000000105]],[[-92.954178000000013,63.871101000000067],[-92.96055599999994,63.866386000000034],[-92.972778000000005,63.867767000000072],[-92.998610999999983,63.873046999999985],[-93.068619000000012,63.888046000000031],[-93.093886999999995,63.899994000000049],[-93.094451999999933,63.904990999999995],[-93.087783999999999,63.908882000000062],[-93.070007000000032,63.909713999999951],[-93.002791999999943,63.911377000000073],[-92.990829000000019,63.910820000000001],[-92.978333000000021,63.908324999999991],[-92.97444200000001,63.901657],[-92.955275999999969,63.880820999999969],[-92.952498999999989,63.876099000000067],[-92.954178000000013,63.871101000000067]],[[-64.576110999999855,63.780822999999998],[-64.525832999999977,63.771378000000141],[-64.467772999999966,63.771378000000141],[-64.461945000000014,63.774712000000136],[-64.452498999999989,63.777214000000015],[-64.432769999999948,63.779434000000037],[-64.426102000000014,63.777771000000087],[-64.394729999999981,63.745827000000077],[-64.387511999999958,63.737495000000081],[-64.386123999999938,63.73443600000013],[-64.386123999999938,63.701660000000004],[-64.389998999999932,63.696381000000031],[-64.404175000000009,63.687492000000134],[-64.419158999999979,63.67971799999998],[-64.436385999999914,63.673324999999977],[-64.450561999999934,63.671660999999972],[-64.459441999999967,63.672768000000076],[-64.47444200000001,63.679161000000079],[-64.496947999999918,63.690826000000129],[-64.661666999999909,63.754997000000117],[-64.802215999999987,63.764442000000031],[-64.813323999999966,63.767212000000029],[-64.890288999999939,63.789435999999966],[-64.90055799999999,63.793883999999935],[-64.906386999999995,63.797493000000145],[-64.916396999999904,63.806380999999931],[-64.918335000000013,63.815269000000114],[-64.920272999999952,63.824715000000083],[-64.917769999999905,63.831108000000029],[-64.910277999999948,63.837212000000079],[-64.896392999999989,63.845267999999976],[-64.811660999999958,63.87721300000004],[-64.710555999999997,63.908882000000062],[-64.682494999999903,63.91443600000008],[-64.660278000000005,63.916382000000112],[-64.647231999999974,63.916100000000085],[-64.557219999999916,63.909988000000112],[-64.553054999999915,63.906380000000013],[-64.549437999999952,63.895271000000093],[-64.571121000000005,63.870827000000133],[-64.585555999999997,63.844994000000042],[-64.576110999999855,63.780822999999998]],[[-77.743880999999931,63.926658999999916],[-77.753341999999975,63.925551999999982],[-77.948607999999979,63.950829000000113],[-77.956954999999937,63.95388000000014],[-77.966948999999886,63.959160000000054],[-77.978881999999999,63.96915400000006],[-77.982497999999964,63.97554800000006],[-77.982497999999964,63.983047000000056],[-77.976105000000018,63.990273000000059],[-77.957503999999972,64.004715000000033],[-77.950287000000003,64.009155000000021],[-77.943603999999993,64.011107999999979],[-77.923889000000031,64.014999000000046],[-77.889998999999989,64.019989000000066],[-77.774445000000014,64.031662000000097],[-77.753890999999953,64.032761000000107],[-77.648620999999991,64.032486000000063],[-77.591110000000015,64.030272999999966],[-77.557219999999973,64.028046000000074],[-77.549727999999959,64.025543000000084],[-77.544448999999986,64.021927000000062],[-77.545273000000009,64.018600000000106],[-77.623610999999983,63.997214999999926],[-77.623885999999914,63.99582700000002],[-77.628052000000025,63.991104000000064],[-77.639450000000011,63.981934000000024],[-77.68638599999997,63.954437000000041],[-77.728606999999954,63.932213000000104],[-77.737212999999883,63.928329000000076],[-77.743880999999931,63.926658999999916]],[[-89.808884000000035,64.056366000000082],[-89.817229999999938,64.054703000000131],[-89.828887999999893,64.055816999999934],[-89.839447000000007,64.058868000000132],[-89.847778000000005,64.063034000000073],[-89.861114999999984,64.071655000000135],[-89.869995000000017,64.080826000000116],[-89.871933000000013,64.085541000000148],[-89.867767000000015,64.095824999999991],[-89.857498000000021,64.0977630000001],[-89.831679999999892,64.091094999999939],[-89.828063999999927,64.088318000000072],[-89.819732999999928,64.080276000000083],[-89.80471799999998,64.0619200000001],[-89.808884000000035,64.056366000000082]],[[-64.962783999999999,64.110809000000074],[-64.948607999999979,64.109710999999947],[-64.903609999999901,64.111099000000081],[-64.87110899999999,64.099152000000117],[-64.869445999999982,64.096649000000127],[-64.869995000000017,64.093323000000112],[-64.87332200000003,64.090820000000122],[-64.884445000000028,64.086655000000121],[-64.905563000000029,64.082214000000022],[-64.946655000000021,64.078872999999987],[-64.988892000000021,64.081375000000037],[-65.002228000000002,64.083878000000027],[-65.02305599999994,64.089432000000045],[-65.045546999999942,64.099426000000051],[-65.055556999999965,64.108596999999975],[-65.057495000000017,64.11303700000002],[-65.056380999999931,64.117203000000075],[-65.05221599999993,64.121093999999971],[-65.039718999999934,64.124985000000038],[-65.025009000000011,64.127472000000125],[-65.015563999999927,64.126922999999977],[-64.995270000000005,64.12303199999991],[-64.989990000000034,64.118590999999981],[-64.980834999999956,64.115265000000136],[-64.962783999999999,64.110809000000074]],[[-64.491104000000007,64.109146000000123],[-64.499999999999943,64.10803199999998],[-64.511397999999929,64.108321999999987],[-64.587508999999955,64.147491000000059],[-64.592498999999975,64.151931999999988],[-64.595276000000013,64.15498400000007],[-64.59584000000001,64.156647000000021],[-64.567779999999971,64.163605000000018],[-64.554169000000002,64.166931000000034],[-64.524444999999957,64.167206000000022],[-64.518111999999917,64.166214000000025],[-64.50111400000003,64.163314999999955],[-64.453339000000028,64.146942000000081],[-64.450287000000003,64.130264000000011],[-64.491104000000007,64.109146000000123]],[[-73.176940999999999,64.200271999999984],[-73.282776000000013,64.143326000000059],[-73.291945999999939,64.14387499999998],[-73.386397999999872,64.158874999999966],[-73.396956999999986,64.161102000000028],[-73.401672000000019,64.165543000000127],[-73.394729999999925,64.187759000000085],[-73.393065999999919,64.192474000000118],[-73.385559000000001,64.196365000000014],[-73.309433000000013,64.194977000000108],[-73.206664999999987,64.213882000000069],[-73.189986999999917,64.212203999999929],[-73.178054999999972,64.209991000000002],[-73.17332499999992,64.205261000000121],[-73.176940999999999,64.200271999999984]],[[-81.471389999999985,64.188873000000058],[-81.493606999999997,64.188309000000118],[-81.516112999999962,64.190536000000009],[-81.527785999999992,64.194137999999953],[-81.536666999999852,64.208603000000096],[-81.538054999999929,64.218048000000124],[-81.532226999999921,64.223038000000031],[-81.470000999999911,64.239426000000094],[-81.458618000000001,64.238876000000062],[-81.413329999999974,64.233322000000044],[-81.390288999999939,64.229155999999932],[-81.378601000000003,64.22554000000008],[-81.375823999999909,64.220825000000048],[-81.374999999999943,64.215820000000008],[-81.378875999999934,64.211929000000112],[-81.388901000000033,64.204987000000017],[-81.405272999999909,64.19470200000012],[-81.471389999999985,64.188873000000058]],[[-64.52027899999996,64.220261000000107],[-64.576401000000033,64.210541000000035],[-64.601668999999958,64.212493999999992],[-64.611938000000009,64.215820000000008],[-64.619445999999925,64.219711000000075],[-64.646956999999986,64.244141000000127],[-64.647781000000009,64.250000000000114],[-64.643616000000009,64.255829000000119],[-64.637512000000015,64.259995000000004],[-64.629715000000033,64.261658000000125],[-64.571670999999924,64.264998999999989],[-64.557525999999996,64.264862000000051],[-64.553054999999915,64.263321000000076],[-64.55221599999993,64.261658000000125],[-64.552490000000034,64.256653000000085],[-64.468062999999972,64.243316999999934],[-64.464721999999938,64.240814],[-64.462218999999948,64.237487999999928],[-64.464447000000007,64.234420999999998],[-64.471114999999998,64.231659000000093],[-64.52027899999996,64.220261000000107]],[[-75.551392000000021,64.303863999999976],[-75.691939999999988,64.302475000000129],[-75.702224999999999,64.305817000000104],[-75.708892999999989,64.315262000000132],[-75.705840999999964,64.341934000000037],[-75.696655000000021,64.351089000000115],[-75.686385999999914,64.353317000000061],[-75.665008999999998,64.350815000000011],[-75.578887999999949,64.346099999999979],[-75.572784000000013,64.344985999999949],[-75.502501999999936,64.319716999999969],[-75.493606999999997,64.316376000000105],[-75.50111400000003,64.313309000000004],[-75.511123999999938,64.311096000000077],[-75.551392000000021,64.303863999999976]],[[-64.938598999999954,64.235535000000027],[-64.989165999999955,64.209152000000017],[-65.00306699999993,64.21026599999999],[-65.048614999999984,64.218322999999998],[-65.052779999999984,64.219436999999971],[-65.059997999999894,64.223312000000135],[-65.065551999999968,64.227478000000019],[-65.073059000000001,64.240540000000067],[-65.102492999999981,64.296371000000136],[-65.109160999999972,64.310806000000071],[-65.113892000000021,64.323608000000036],[-65.114715999999987,64.329437000000041],[-65.114166000000012,64.334991000000059],[-65.112503000000004,64.339706000000092],[-65.110001000000011,64.343596999999988],[-65.101669000000015,64.346374999999966],[-65.08944699999995,64.349716000000001],[-65.028884999999889,64.361099000000024],[-65.021392999999932,64.362487999999985],[-65.010283999999956,64.361649000000057],[-65.006393000000003,64.360535000000084],[-65.001952999999958,64.356934000000024],[-64.99888599999997,64.354431000000034],[-64.982223999999974,64.333054000000004],[-64.884734999999921,64.28776600000009],[-64.886123999999938,64.283051000000057],[-64.890838999999971,64.276382000000012],[-64.926940999999943,64.242477000000065],[-64.938598999999954,64.235535000000027]],[[-73.876389000000017,64.301376000000005],[-73.883620999999948,64.298874000000069],[-73.951674999999966,64.304977000000008],[-73.96556099999998,64.30664100000007],[-73.972503999999958,64.309707999999944],[-73.97444200000001,64.313309000000004],[-73.960281000000009,64.362197999999978],[-73.95666499999993,64.368317000000047],[-73.952498999999932,64.370819000000097],[-73.942214999999919,64.372757000000036],[-73.932219999999916,64.37359600000002],[-73.918335000000013,64.371918000000051],[-73.909438999999963,64.369980000000112],[-73.889175000000023,64.359711000000118],[-73.879165999999941,64.351928999999984],[-73.874160999999958,64.343323000000055],[-73.87332200000003,64.305252000000053],[-73.876389000000017,64.301376000000005]],[[-73.69776899999988,64.269989000000066],[-73.704726999999934,64.268875000000037],[-73.72084000000001,64.272765999999933],[-73.75389100000001,64.28276100000005],[-73.776671999999962,64.294708000000014],[-73.823333999999988,64.324707000000046],[-73.833618000000001,64.331665000000044],[-73.781386999999995,64.405547999999953],[-73.776108000000022,64.407486000000119],[-73.765563999999983,64.409424000000058],[-73.749161000000015,64.410262999999986],[-73.744445999999982,64.405822999999998],[-73.730835000000013,64.386383000000023],[-73.729172000000005,64.386107999999979],[-73.726944000000003,64.383331000000055],[-73.724441999999954,64.377472000000068],[-73.702498999999989,64.322769000000108],[-73.699157999999954,64.314147999999989],[-73.690552000000025,64.276932000000045],[-73.691665999999998,64.273605000000089],[-73.694442999999922,64.271103000000039],[-73.69776899999988,64.269989000000066]],[[-64.849730999999963,64.307479999999998],[-64.861388999999974,64.307479999999998],[-64.877212999999983,64.313309000000004],[-64.888061999999991,64.321105999999986],[-64.937774999999988,64.361649000000057],[-64.944992000000013,64.37052900000009],[-64.955565999999976,64.383880999999917],[-64.959732000000031,64.397217000000069],[-64.958618000000001,64.405822999999998],[-64.951674999999909,64.411376999999959],[-64.946655000000021,64.413605000000132],[-64.932495000000017,64.417480000000126],[-64.925277999999992,64.418594000000098],[-64.910004000000015,64.416655999999989],[-64.902495999999985,64.412766000000147],[-64.897507000000019,64.408600000000092],[-64.820007000000032,64.379425000000026],[-64.771941999999967,64.348877000000016],[-64.770553999999947,64.345825000000104],[-64.773055999999997,64.34248400000007],[-64.849730999999963,64.307479999999998]],[[-74.27194199999991,64.413605000000132],[-74.285004000000015,64.41304000000008],[-74.357497999999964,64.421097000000088],[-74.377212999999983,64.424423000000104],[-74.423324999999977,64.443863000000079],[-74.437209999999936,64.450271999999927],[-74.439437999999996,64.453323000000125],[-74.338608000000022,64.49470500000001],[-74.331679999999949,64.496933000000126],[-74.31040999999999,64.49884000000003],[-74.285277999999948,64.481659000000036],[-74.228607000000011,64.451096000000064],[-74.205841000000021,64.44747899999993],[-74.183060000000012,64.443039000000113],[-74.17332499999992,64.439148000000046],[-74.174712999999997,64.434981999999991],[-74.178328999999962,64.433867999999961],[-74.27194199999991,64.413605000000132]],[[-73.744995000000017,64.426086000000055],[-73.758346999999958,64.425537000000077],[-73.77806099999998,64.428314],[-73.781386999999995,64.431931000000134],[-73.782776000000013,64.437484999999924],[-73.782500999999968,64.442474000000061],[-73.776108000000022,64.495818999999983],[-73.773894999999982,64.501937999999996],[-73.773330999999928,64.503326000000072],[-73.746917999999937,64.508513999999991],[-73.736664000000019,64.507216999999969],[-73.729172000000005,64.505264000000068],[-73.724166999999852,64.50221300000004],[-73.673049999999989,64.469711000000018],[-73.668610000000001,64.464432000000045],[-73.668334999999956,64.460265999999933],[-73.671936000000017,64.455826000000116],[-73.67971799999998,64.452208999999982],[-73.727218999999934,64.431091000000094],[-73.735001000000011,64.428040000000067],[-73.744995000000017,64.426086000000055]],[[-74.212783999999999,64.483046999999999],[-74.223327999999981,64.480270000000075],[-74.229171999999949,64.481369000000029],[-74.307495000000017,64.516098000000113],[-74.331116000000009,64.526656999999943],[-74.337508999999955,64.531096999999988],[-74.357773000000009,64.546936000000073],[-74.357773000000009,64.551086000000112],[-74.353881999999999,64.553589000000045],[-74.345550999999944,64.555251999999996],[-74.253066999999987,64.548035000000084],[-74.240554999999972,64.546371000000079],[-74.236114999999984,64.545532000000094],[-74.169723999999974,64.523880000000077],[-74.169448999999929,64.519714000000135],[-74.206664999999987,64.486374000000069],[-74.212783999999999,64.483046999999999]],[[-73.557495000000017,64.312758999999971],[-73.577788999999939,64.309982000000105],[-73.601669000000015,64.310257000000092],[-73.626388999999904,64.312758999999971],[-73.650283999999999,64.31721500000009],[-73.655563000000029,64.320267000000001],[-73.658339999999953,64.334991000000059],[-73.669532999999888,64.426849000000118],[-73.610442999999975,64.470489999999984],[-73.68249499999996,64.509720000000129],[-73.679992999999911,64.526093000000003],[-73.677779999999927,64.532211000000132],[-73.666655999999875,64.535538000000088],[-73.577224999999999,64.559982000000048],[-73.537215999999944,64.567764000000011],[-73.527785999999992,64.566940000000045],[-73.521118000000001,64.56303400000013],[-73.509170999999981,64.552475000000072],[-73.504729999999938,64.542480000000012],[-73.50306699999993,64.53414900000007],[-73.489165999999955,64.463318000000072],[-73.488051999999982,64.453598],[-73.48832699999997,64.443863000000079],[-73.490279999999927,64.439148000000046],[-73.555266999999958,64.314697000000137],[-73.557495000000017,64.312758999999971]],[[-65.492767000000015,64.517761000000007],[-65.658339999999953,64.509720000000129],[-65.669448999999929,64.510269000000108],[-65.67971799999998,64.512207000000046],[-65.686110999999926,64.515273999999977],[-65.689712999999983,64.51998900000001],[-65.690276999999924,64.524155000000064],[-65.689712999999983,64.52998400000007],[-65.686935000000005,64.538879000000122],[-65.672500999999954,64.56053200000008],[-65.660278000000005,64.573883000000023],[-65.651108000000022,64.580551000000014],[-65.615829000000019,64.599152000000004],[-65.563323999999909,64.615540000000067],[-65.554442999999992,64.618591000000094],[-65.546951000000035,64.622481999999991],[-65.449158000000011,64.678863999999976],[-65.443877999999927,64.684708000000001],[-65.43582200000003,64.696365000000128],[-65.381942999999922,64.716934000000037],[-65.292495999999971,64.735535000000084],[-65.256957999999941,64.709991000000059],[-65.252501999999936,64.706375000000037],[-65.258057000000008,64.700821000000019],[-65.266402999999912,64.6933140000001],[-65.249999999999886,64.663605000000075],[-65.208054000000004,64.639708999999982],[-65.208618000000001,64.631363000000079],[-65.213897999999915,64.626083000000051],[-65.228057999999919,64.6202550000001],[-65.309433000000013,64.60054000000008],[-65.420272999999952,64.55442800000003],[-65.452788999999939,64.532760999999994],[-65.450835999999924,64.528320000000065],[-65.453613000000018,64.524428999999998],[-65.460555999999997,64.521102999999982],[-65.468886999999995,64.519150000000025],[-65.492767000000015,64.517761000000007]],[[-63.353333000000021,64.994980000000112],[-63.349167000000023,64.991652999999985],[-63.34722099999999,64.991927999999973],[-63.330558999999994,64.986923000000104],[-63.257506999999976,64.92942800000003],[-63.256392999999889,64.926376000000118],[-63.258895999999936,64.921097000000145],[-63.27305599999994,64.918045000000063],[-63.281386999999938,64.918320000000051],[-63.37777699999998,64.940811000000053],[-63.385276999999974,64.944138000000009],[-63.393889999999942,64.951096000000007],[-63.417220999999984,64.97137499999991],[-63.420279999999934,64.976089000000059],[-63.420279999999934,64.978317000000004],[-63.418892000000028,64.982483000000116],[-63.415549999999996,64.986923000000104],[-63.395279000000016,64.995529000000033],[-63.376105999999993,64.998871000000008],[-63.363616999999977,64.997208000000057],[-63.353333000000021,64.994980000000112]],[[-63.243613999999923,65.254990000000134],[-63.251395999999943,65.253875999999991],[-63.256667999999991,65.256104000000107],[-63.310554999999965,65.290542999999957],[-63.313331999999946,65.293869000000029],[-63.311667999999941,65.298035000000084],[-63.306663999999898,65.302475000000129],[-63.257781999999963,65.320831000000112],[-63.244445999999925,65.322769000000051],[-63.236663999999962,65.321655000000078],[-63.227218999999991,65.313873000000115],[-63.166388999999924,65.286102000000085],[-63.165833000000021,65.282486000000006],[-63.166663999999969,65.27915999999999],[-63.235274999999888,65.256943000000092],[-63.243613999999923,65.254990000000134]],[[-66.92471299999994,65.284424000000115],[-66.933883999999978,65.283324999999991],[-66.962509000000011,65.283599999999979],[-66.976943999999946,65.284424000000115],[-66.989166000000012,65.286377000000073],[-66.99110399999995,65.288878999999952],[-67.011123999999938,65.319153000000028],[-67.011948000000018,65.323044000000095],[-67.010559000000001,65.333328000000108],[-67.005004999999926,65.339706000000092],[-66.992217999999923,65.346100000000092],[-66.974441999999954,65.350540000000137],[-66.932494999999903,65.358032000000094],[-66.920273000000009,65.358597000000088],[-66.910827999999867,65.356933999999967],[-66.908614999999998,65.355255],[-66.908050999999944,65.351089000000059],[-66.90943900000002,65.346100000000092],[-66.91194200000001,65.342209000000025],[-66.920273000000009,65.294434000000024],[-66.921386999999982,65.289703000000088],[-66.92471299999994,65.284424000000115]],[[-89.005568999999923,65.385544000000039],[-89.017501999999979,65.385544000000039],[-89.030288999999982,65.387496999999939],[-89.076110999999969,65.394714000000079],[-89.100280999999882,65.400818000000072],[-89.099990999999932,65.405822999999941],[-89.091674999999952,65.408325000000048],[-89.06806899999998,65.408325000000048],[-89.03195199999999,65.407211000000075],[-89.018615999999952,65.403320000000008],[-89.009445000000028,65.399155000000007],[-89.005279999999914,65.395538000000045],[-89.003066999999987,65.390549000000078],[-89.005568999999923,65.385544000000039]],[[-88.430282999999918,65.455261000000064],[-88.465011999999888,65.453597999999943],[-88.489990000000034,65.456650000000081],[-88.503615999999909,65.460541000000148],[-88.510284000000013,65.464995999999985],[-88.512222000000008,65.469711000000018],[-88.507506999999976,65.474991000000045],[-88.496383999999978,65.476928999999984],[-88.485001000000011,65.477767999999969],[-88.461120999999991,65.477478000000133],[-88.424163999999962,65.474426000000051],[-88.398620999999878,65.47026100000005],[-88.39416499999993,65.465820000000122],[-88.399733999999967,65.461380000000077],[-88.421386999999982,65.456940000000088],[-88.430282999999918,65.455261000000064]],[[-62.795005999999887,65.519988999999953],[-62.804442999999992,65.519150000000025],[-62.819450000000018,65.524155000000064],[-62.826950000000011,65.528046000000131],[-62.893889999999942,65.581100000000106],[-62.895553999999947,65.585541000000035],[-62.895553999999947,65.589981000000023],[-62.889724999999942,65.599152000000004],[-62.884444999999971,65.60554500000012],[-62.87471800000003,65.613602000000071],[-62.8663939999999,65.617477000000065],[-62.856392000000028,65.61914100000007],[-62.849723999999981,65.618866000000082],[-62.842773000000022,65.616378999999995],[-62.838051000000007,65.613602000000071],[-62.834998999999925,65.606644000000131],[-62.834998999999925,65.604705999999965],[-62.830001999999979,65.593048000000124],[-62.824448000000018,65.58526599999999],[-62.817504999999926,65.578598],[-62.810279999999977,65.574706999999933],[-62.785560999999973,65.564148000000102],[-62.765006999999969,65.557480000000112],[-62.750838999999985,65.551376000000062],[-62.788894999999968,65.523315000000025],[-62.795005999999887,65.519988999999953]],[[-83.882766999999944,65.666931000000091],[-83.893889999999942,65.664703000000145],[-83.906386999999938,65.666931000000091],[-83.937499999999943,65.677199999999914],[-83.943054000000018,65.681931000000077],[-83.942214999999976,65.686920000000043],[-83.93638599999997,65.691925000000083],[-83.928328999999962,65.69720500000011],[-83.896118000000001,65.710266000000047],[-83.884734999999978,65.712769000000037],[-83.872771999999941,65.712203999999986],[-83.864440999999943,65.707763999999997],[-83.868880999999988,65.696930000000123],[-83.871384000000035,65.686920000000043],[-83.876937999999939,65.672210999999947],[-83.882766999999944,65.666931000000091]],[[-67.472504000000015,65.705261000000007],[-67.55972300000002,65.702209000000096],[-67.584731999999974,65.703598000000113],[-67.640563999999927,65.696091000000138],[-67.691375999999934,65.685806000000014],[-67.701401000000033,65.686096000000077],[-67.706954999999937,65.688034000000016],[-67.713897999999858,65.696640000000116],[-67.715835999999967,65.701659999999947],[-67.713332999999921,65.705551000000014],[-67.695830999999885,65.720825000000104],[-67.658614999999998,65.725266000000033],[-67.577498999999989,65.731658999999979],[-67.529175000000009,65.734985000000052],[-67.499999999999943,65.734985000000052],[-67.48971599999993,65.734985000000052],[-67.424438000000009,65.735260000000039],[-67.446944999999914,65.718596999999988],[-67.472504000000015,65.705261000000007]],[[-62.268332999999984,65.701659999999947],[-62.259445000000028,65.699707000000046],[-62.238051999999982,65.702484000000084],[-62.221107000000018,65.708038000000101],[-62.20416999999992,65.711655000000064],[-62.186385999999914,65.711928999999998],[-62.167777999999942,65.70277399999992],[-62.131667999999934,65.678863999999976],[-62.128333999999938,65.674149000000114],[-62.131942999999978,65.657211000000018],[-62.135276999999974,65.651382000000012],[-62.142226999999991,65.64498900000001],[-62.194999999999993,65.612762000000032],[-62.202498999999989,65.610259999999982],[-62.215004000000022,65.609984999999938],[-62.22444200000001,65.611098999999967],[-62.296950999999979,65.624985000000095],[-62.455001999999979,65.659988000000112],[-62.466109999999958,65.663879000000009],[-62.483886999999925,65.721099999999922],[-62.484443999999939,65.726928999999984],[-62.483611999999994,65.731658999999979],[-62.480552999999873,65.737761999999918],[-62.473609999999951,65.74192800000003],[-62.46832999999998,65.744140999999956],[-62.461944999999957,65.745254999999986],[-62.283889999999928,65.74443100000002],[-62.27194199999991,65.744140999999956],[-62.260283999999956,65.74331699999999],[-62.252501999999993,65.74192800000003],[-62.251396,65.739151000000106],[-62.258613999999909,65.728592000000049],[-62.27027899999996,65.723038000000088],[-62.297501000000011,65.708602999999982],[-62.268332999999984,65.701659999999947]],[[-83.283889999999928,65.834152000000131],[-83.292220999999927,65.828872999999987],[-83.30360399999995,65.826385000000016],[-83.315551999999968,65.826096000000064],[-83.327498999999932,65.82748399999997],[-83.347777999999892,65.832489000000066],[-83.395279000000016,65.8316650000001],[-83.406661999999983,65.830276000000083],[-83.418059999999969,65.827774000000034],[-83.429168999999945,65.824432000000058],[-83.439986999999917,65.819153000000085],[-83.456389999999999,65.808867999999961],[-83.473327999999981,65.800262000000032],[-83.485274999999945,65.800812000000064],[-83.498046999999929,65.804152999999928],[-83.529723999999987,65.817489999999964],[-83.559157999999968,65.831100000000049],[-83.575561999999934,65.839980999999966],[-83.581679999999892,65.844711000000018],[-83.585007000000019,65.849426000000051],[-83.586120999999991,65.854156000000103],[-83.580291999999986,65.859420999999941],[-83.571670999999981,65.862488000000042],[-83.560271999999941,65.864990000000148],[-83.525283999999886,65.868317000000104],[-83.478058000000033,65.870255000000043],[-83.442490000000021,65.870818999999983],[-83.36999499999996,65.866653000000042],[-83.345551,65.863876000000005],[-83.333069000000023,65.860260000000096],[-83.291106999999954,65.843597000000045],[-83.285277999999948,65.838882000000012],[-83.283889999999928,65.834152000000131]],[[-65.645843999999954,65.813034000000073],[-65.656386999999995,65.812759000000028],[-65.660278000000005,65.819717000000026],[-65.654998999999918,65.869431000000077],[-65.651671999999962,65.876647999999989],[-65.647781000000009,65.879974000000004],[-65.636123999999882,65.88638300000008],[-65.623885999999914,65.891373000000101],[-65.583069000000023,65.902771000000143],[-65.542769999999962,65.908035000000098],[-65.531676999999945,65.908874999999966],[-65.516112999999962,65.906371999999976],[-65.511397999999929,65.903046000000131],[-65.512221999999895,65.894440000000031],[-65.513335999999981,65.890548999999965],[-65.52806099999998,65.859420999999941],[-65.559433000000013,65.834717000000012],[-65.645843999999954,65.813034000000073]],[[-85.480559999999969,65.791930999999977],[-85.468062999999972,65.790817000000004],[-85.456389999999942,65.791367000000037],[-85.445266999999944,65.793869000000086],[-85.424164000000019,65.801926000000094],[-85.413895000000025,65.807480000000055],[-85.40834000000001,65.812485000000095],[-85.404998999999975,65.817489999999964],[-85.404175000000009,65.822495000000004],[-85.393065999999862,65.832764000000054],[-85.381942999999978,65.835265999999933],[-85.369995000000017,65.834991000000116],[-85.333327999999995,65.832214000000022],[-85.313613999999916,65.830276000000083],[-85.288605000000018,65.826660000000004],[-85.263061999999991,65.821106000000043],[-85.213622999999984,65.808029000000033],[-85.202788999999939,65.803588999999988],[-85.18582200000003,65.794708000000071],[-85.162505999999894,65.78137200000009],[-85.156386999999938,65.776657000000057],[-85.049164000000019,65.621643000000006],[-85.047774999999945,65.616928000000144],[-85.048614999999984,65.611923000000104],[-85.051666000000012,65.606934000000138],[-85.067504999999926,65.59637500000008],[-85.08805799999999,65.585541000000035],[-85.120270000000005,65.574996999999996],[-85.142226999999934,65.569992000000127],[-85.175827000000027,65.563309000000118],[-85.232223999999917,65.554703000000018],[-85.24360699999994,65.55386400000009],[-85.267776000000026,65.555542000000003],[-85.280563000000029,65.55802900000009],[-85.291945999999882,65.557205000000124],[-85.302490000000034,65.552765000000079],[-85.307770000000005,65.547760000000039],[-85.311110999999926,65.542479999999955],[-85.311935000000005,65.537766000000033],[-85.308043999999995,65.533051],[-85.295836999999949,65.52388000000002],[-85.271118000000001,65.511658000000068],[-85.240829000000019,65.498322000000087],[-85.204178000000013,65.485809000000017],[-85.165557999999976,65.474991000000045],[-85.127776999999924,65.466095000000109],[-85.088608000000022,65.453597999999943],[-85.043609999999944,65.436371000000122],[-85.02694699999995,65.427475000000015],[-85.015015000000005,65.418319999999937],[-85.011123999999938,65.413605000000075],[-85.002791999999943,65.401382000000069],[-85.001403999999923,65.396652000000017],[-85.005004999999983,65.37692300000009],[-85.011672999999973,65.352203000000031],[-84.930557000000022,65.214157000000057],[-84.924712999999997,65.209717000000012],[-84.912216000000001,65.206375000000094],[-84.900283999999942,65.206100000000106],[-84.832503999999972,65.212494000000106],[-84.821395999999879,65.213882000000012],[-84.810271999999998,65.216385000000002],[-84.800277999999992,65.221649000000014],[-84.792496000000028,65.226929000000041],[-84.748046999999985,65.292755000000056],[-84.746947999999975,65.297485000000052],[-84.749724999999899,65.307204999999954],[-84.755004999999869,65.316666000000112],[-84.762221999999952,65.326096000000007],[-84.761123999999995,65.331099999999992],[-84.758056999999951,65.336105000000032],[-84.754729999999938,65.341095000000053],[-84.745834000000002,65.351379000000065],[-84.740279999999984,65.356368999999972],[-84.595839999999953,65.475540000000024],[-84.58555599999994,65.481093999999985],[-84.573623999999995,65.481659000000036],[-84.561934999999949,65.481093999999985],[-84.549437999999952,65.47886699999998],[-84.440276999999924,65.456650000000081],[-84.432220000000029,65.453323000000125],[-84.426392000000021,65.448593000000074],[-84.424712999999997,65.443863000000079],[-84.42582699999997,65.438873000000001],[-84.314437999999996,65.381653000000142],[-84.291945999999996,65.37692300000009],[-84.161391999999921,65.341934000000037],[-84.151107999999908,65.338593000000003],[-84.147507000000019,65.333878000000141],[-84.153060999999923,65.328598000000056],[-84.194153000000028,65.297485000000052],[-84.201950000000011,65.292206000000078],[-84.220839999999953,65.284713999999951],[-84.228881999999999,65.279434000000094],[-84.230834999999956,65.269440000000088],[-84.229720999999984,65.264708999999982],[-84.141388000000006,65.219986000000063],[-84.088333000000034,65.203873000000044],[-83.899993999999992,65.165543000000071],[-83.876098999999954,65.162766000000033],[-83.852782999999931,65.161652000000004],[-83.666945999999939,65.160811999999964],[-83.620543999999938,65.160811999999964],[-83.540282999999931,65.16415400000011],[-83.52806099999998,65.161925999999937],[-83.408614999999998,65.135544000000095],[-83.388061999999934,65.126647999999932],[-83.378875999999991,65.117203000000075],[-83.33805799999999,65.074707000000046],[-83.334732000000031,65.069992000000013],[-83.335830999999928,65.064986999999974],[-83.339447000000007,65.059982000000105],[-83.343063000000029,65.045258000000047],[-83.340835999999967,65.035537999999974],[-83.330840999999964,65.021378000000084],[-83.319457999999941,65.012207000000103],[-83.208053999999947,64.945526000000086],[-83.198043999999868,64.941086000000098],[-83.190552000000025,64.939423000000147],[-83.156386999999995,64.939972000000068],[-83.005004999999926,64.913039999999967],[-82.992766999999901,64.909714000000122],[-82.865828999999962,64.873596000000077],[-82.855834999999956,64.86914100000007],[-82.848052999999993,64.864426000000037],[-82.842498999999918,64.859985000000108],[-82.829726999999991,64.840819999999951],[-82.828613000000018,64.836104999999918],[-82.825287000000003,64.831375000000094],[-82.816390999999953,64.821930000000009],[-82.800277999999992,64.808868000000018],[-82.770003999999972,64.795532000000037],[-82.75778200000002,64.791092000000049],[-82.709166999999979,64.776382000000069],[-82.697220000000016,64.77388000000002],[-82.569732999999928,64.763885000000073],[-82.361388999999974,64.763610999999969],[-82.34944200000001,64.760269000000051],[-82.211944999999957,64.718323000000055],[-82.202224999999885,64.713608000000022],[-82.203339000000028,64.708602999999982],[-82.209166999999979,64.703598000000113],[-82.217498999999975,64.698593000000074],[-82.203612999999962,64.684417999999994],[-82.064437999999996,64.648605000000089],[-81.932495000000017,64.584427000000062],[-81.763061999999991,64.501099000000067],[-81.753890999999953,64.486923000000047],[-81.75140399999998,64.472488000000112],[-81.753066999999987,64.355820000000051],[-81.764174999999966,64.341095000000109],[-81.770003999999972,64.336105000000032],[-81.777221999999995,64.326096000000007],[-81.778885000000002,64.321105999999986],[-81.777221999999995,64.31164600000011],[-81.77416999999997,64.30664100000007],[-81.74888599999997,64.273605000000089],[-81.727218999999934,64.258330999999998],[-81.712783999999999,64.250000000000114],[-81.702788999999996,64.2452550000001],[-81.669723999999974,64.232758000000103],[-81.646118000000001,64.22554000000008],[-81.622498000000007,64.216660000000047],[-81.613051999999982,64.212203999999929],[-81.600280999999939,64.20277400000009],[-81.594451999999933,64.193313999999987],[-81.590835999999967,64.183594000000085],[-81.589995999999928,64.17886400000009],[-81.602492999999981,64.129974000000004],[-81.610824999999977,64.125809000000004],[-81.717772999999966,64.099426000000051],[-81.758621000000005,64.089432000000045],[-81.76916499999993,64.088043000000027],[-81.824447999999961,64.086380000000077],[-81.879165999999941,64.080826000000116],[-81.955840999999964,64.0619200000001],[-81.964171999999962,64.0577550000001],[-81.970000999999968,64.052765000000022],[-81.973617999999931,64.047759999999982],[-81.999160999999958,64.003326000000015],[-81.996384000000035,63.998604000000114],[-81.986938000000009,63.994155999999975],[-81.975005999999951,63.990546999999992],[-81.963897999999972,63.988884000000041],[-81.952498999999932,63.98832700000014],[-81.930556999999965,63.988045000000056],[-81.897507000000019,63.989990000000091],[-81.875823999999909,63.991661000000136],[-81.56082200000003,64.029433999999981],[-81.44027699999998,64.067764000000068],[-81.383620999999948,64.090546000000018],[-81.287780999999882,64.080276000000083],[-81.276397999999972,64.07748399999997],[-81.270003999999915,64.072495000000004],[-81.264174999999966,64.062759000000028],[-81.256957999999997,64.059143000000006],[-81.245543999999995,64.055542000000116],[-80.964721999999938,63.991936000000123],[-80.942489999999964,63.990546999999992],[-80.931670999999994,63.991936000000123],[-80.920837000000006,63.994995000000131],[-80.910277999999892,63.999161000000015],[-80.906661999999926,64.004166000000055],[-80.903335999999967,64.013885000000073],[-80.909163999999976,64.023315000000139],[-80.914168999999958,64.028046000000074],[-80.92582699999997,64.032761000000107],[-80.948607999999979,64.038879000000065],[-80.967498999999918,64.04803499999997],[-80.972778000000005,64.052765000000022],[-80.975554999999986,64.0577550000001],[-80.973891999999978,64.062485000000095],[-80.935821999999973,64.111923000000047],[-80.890838999999971,64.11554000000001],[-80.812209999999993,64.091094999999939],[-80.777495999999871,64.079437000000098],[-80.734726000000023,64.054153000000099],[-80.566100999999946,63.994155999999975],[-80.543335000000013,63.987770000000069],[-80.531677000000002,63.983330000000024],[-80.522507000000019,63.978600000000029],[-80.517501999999979,63.973877000000016],[-80.488327000000027,63.910545000000013],[-80.49221799999998,63.905548000000067],[-80.503066999999987,63.902489000000116],[-80.567504999999926,63.889435000000049],[-80.453063999999927,63.859436000000017],[-80.363051999999925,63.841102999999976],[-80.217223999999987,63.809989999999971],[-80.194480999999996,63.804474000000084],[-80.189986999999974,63.799995000000024],[-80.174712999999883,63.780822999999998],[-80.172225999999966,63.776100000000042],[-80.171660999999972,63.771102999999925],[-80.178878999999881,63.756660000000068],[-80.184998000000007,63.751663000000121],[-80.195830999999885,63.748604],[-80.346953999999982,63.728042999999957],[-80.357772999999952,63.728600000000085],[-80.369155999999975,63.73333000000008],[-80.380279999999971,63.734993000000031],[-80.391387999999949,63.734993000000031],[-80.402221999999995,63.734717999999987],[-80.434433000000013,63.731102000000135],[-80.454178000000013,63.727767999999969],[-80.485275000000001,63.715546000000018],[-80.493606999999997,63.710274000000084],[-80.504729999999995,63.690826000000129],[-80.506393000000003,63.685822000000144],[-80.510009999999966,63.681107000000111],[-80.52194199999991,63.671104000000071],[-80.587783999999999,63.635826000000066],[-80.608886999999982,63.628326000000015],[-80.774445000000014,63.573326000000122],[-80.912216000000001,63.526381999999955],[-80.922501000000011,63.521378000000027],[-80.930557000000022,63.516106000000093],[-80.936385999999914,63.511108000000092],[-80.938048999999864,63.50638600000002],[-80.9375,63.501389000000074],[-80.934433000000013,63.496658000000139],[-80.930557000000022,63.482208000000014],[-80.930282999999974,63.477486000000113],[-80.9375,63.467491000000052],[-80.958053999999947,63.458328000000051],[-80.968613000000005,63.455269000000044],[-80.989440999999999,63.450829000000056],[-81.011123999999995,63.449158000000011],[-81.032775999999956,63.44860100000011],[-81.054442999999992,63.449158000000011],[-81.076401000000033,63.451385000000016],[-81.110000999999954,63.458328000000051],[-81.386123999999938,63.526381999999955],[-81.694153000000028,63.607498000000135],[-81.734160999999972,63.625549000000092],[-81.757232999999985,63.634720000000073],[-81.768889999999999,63.638046000000088],[-81.779998999999975,63.639717000000132],[-81.801940999999943,63.641105999999979],[-81.823623999999995,63.639435000000105],[-81.855270000000019,63.63249200000007],[-81.876662999999951,63.629990000000021],[-81.887512000000015,63.62943300000012],[-81.909728999999913,63.631934999999999],[-81.995270000000005,63.661102000000142],[-82.01167299999986,63.667213000000004],[-82.026397999999972,63.676383999999985],[-82.031386999999938,63.681107000000111],[-82.041107000000011,63.685822000000144],[-82.052490000000034,63.689156000000139],[-82.06361400000003,63.690826000000129],[-82.107772999999952,63.692214999999919],[-82.129439999999988,63.691658000000018],[-82.214172000000019,63.687766999999951],[-82.224715999999887,63.686377999999991],[-82.285552999999993,63.678047000000049],[-82.296111999999937,63.674713000000111],[-82.299437999999952,63.669715999999994],[-82.298889000000031,63.664992999999981],[-82.302215999999987,63.659987999999942],[-82.307769999999948,63.654991000000052],[-82.318344000000025,63.651657000000057],[-82.328887999999949,63.65026899999998],[-82.339995999999871,63.650826000000052],[-82.351395000000025,63.653320000000008],[-82.472228999999913,63.680275000000051],[-82.483886999999982,63.68471500000004],[-82.491103999999893,63.689156000000139],[-82.535278000000005,63.726378999999952],[-82.545836999999949,63.735550000000103],[-82.549728000000016,63.745270000000005],[-82.550827000000027,63.750000000000057],[-82.546951000000035,63.764717000000019],[-82.543334999999956,63.769714000000135],[-82.532226999999978,63.779991000000109],[-82.514450000000011,63.790276000000063],[-82.504456000000005,63.795547000000056],[-82.484160999999972,63.804993000000024],[-82.473617999999931,63.80832700000002],[-82.431945999999982,63.820273999999984],[-82.420837000000006,63.820831000000055],[-82.40972899999997,63.819160000000011],[-82.398055999999883,63.815826000000015],[-82.386672999999973,63.814156000000025],[-82.376389000000017,63.81749700000006],[-82.372771999999998,63.82249500000006],[-82.353881999999942,63.852219000000105],[-82.351395000000025,63.861938000000066],[-82.358336999999949,63.900543000000027],[-82.361388999999974,63.905265999999983],[-82.368880999999988,63.909988000000112],[-82.378325999999959,63.91443600000008],[-82.413894999999968,63.926940999999999],[-82.525833000000034,63.966103000000032],[-82.548888999999974,63.96915400000006],[-82.828613000000018,63.979431000000034],[-82.967223999999987,63.965546000000131],[-82.978058000000033,63.963051000000121],[-83.064162999999951,63.951934999999992],[-83.086944999999957,63.954994000000113],[-83.098891999999921,63.959160000000054],[-83.12388599999997,63.972763000000043],[-83.129165999999941,63.977486000000056],[-83.145279000000016,64.001099000000124],[-83.139724999999999,64.006103999999993],[-83.095550999999887,64.028320000000008],[-83.029449,64.074707000000103],[-83.016113000000018,64.084991000000116],[-82.996947999999975,64.10026600000009],[-82.980285999999978,64.11554000000001],[-82.97084000000001,64.125534000000016],[-82.961944999999901,64.135818000000029],[-82.960555999999997,64.140548999999965],[-82.96166999999997,64.145538000000101],[-82.964721999999995,64.150269000000037],[-83.008346999999958,64.187484999999981],[-83.019729999999981,64.188873000000058],[-83.072783999999956,64.186646000000053],[-83.105269999999962,64.181655999999975],[-83.126388999999961,64.175811999999951],[-83.157227000000034,64.163040000000137],[-83.339447000000007,64.134720000000129],[-83.488327000000027,64.122482000000048],[-83.519729999999981,64.11442599999998],[-83.530288999999925,64.111099000000081],[-83.548339999999996,64.102478000000133],[-83.673324999999977,64.017212000000029],[-83.682220000000029,64.007217000000082],[-83.683318999999983,64.002212999999927],[-83.676666000000012,63.992766999999958],[-83.665833000000021,63.983603999999957],[-83.642501999999979,63.969986000000119],[-83.626099000000011,63.956099999999992],[-83.608611999999994,63.937492000000077],[-83.605559999999969,63.932770000000005],[-83.604171999999949,63.928047000000049],[-83.595839999999896,63.825829000000056],[-83.596664000000033,63.820831000000055],[-83.623046999999929,63.781661999999983],[-83.631942999999865,63.771659999999997],[-83.637222000000008,63.766388000000063],[-83.647507000000019,63.763054000000125],[-83.658614999999941,63.763611000000026],[-83.670272999999952,63.766937000000041],[-83.694442999999978,63.775826000000109],[-83.718613000000005,63.779991000000109],[-83.740554999999972,63.779991000000109],[-83.750838999999985,63.776657000000114],[-83.824172999999973,63.747490000000028],[-84.007232999999985,63.668053000000043],[-84.012786999999889,63.662765999999976],[-84.021117999999944,63.65277100000003],[-84.027495999999928,63.642769000000044],[-84.050277999999935,63.626938000000109],[-84.069457999999997,63.616386000000091],[-84.079453000000001,63.611938000000123],[-84.089447000000007,63.607773000000122],[-84.09973100000002,63.605270000000132],[-84.110000999999954,63.603607000000068],[-84.121383999999978,63.604163999999969],[-84.132767000000001,63.606658999999979],[-84.144729999999925,63.610825000000034],[-84.162216000000001,63.619713000000047],[-84.174164000000019,63.623047000000042],[-84.196380999999917,63.62499200000002],[-84.261123999999995,63.62082700000002],[-84.286117999999988,63.615546999999935],[-84.388061999999991,63.559158000000082],[-84.395279000000016,63.553879000000109],[-84.40055799999999,63.548607000000004],[-84.446380999999974,63.488045],[-84.449431999999888,63.483046999999999],[-84.452224999999942,63.472488000000112],[-84.447220000000016,63.453323000000012],[-84.449157999999954,63.443603999999993],[-84.477492999999981,63.3836060000001],[-84.563323999999966,63.337494000000049],[-84.754456000000005,63.264160000000061],[-84.774170000000026,63.257217000000082],[-84.793883999999991,63.250274999999988],[-84.823059000000001,63.237213000000111],[-84.841949,63.227211000000011],[-84.870834000000002,63.214157000000114],[-84.890563999999983,63.207214000000079],[-85.143341000000021,63.139992000000063],[-85.224166999999966,63.120827000000133],[-85.244995000000017,63.118598999999961],[-85.266402999999968,63.117493000000138],[-85.288054999999986,63.118324000000143],[-85.343338000000017,63.122765000000072],[-85.375823999999909,63.123877999999934],[-85.396956999999929,63.122765000000072],[-85.449158000000011,63.116661000000022],[-85.482223999999974,63.118598999999961],[-85.493331999999953,63.119987000000094],[-85.505004999999983,63.123046999999929],[-85.536391999999921,63.134995000000004],[-85.543883999999935,63.138328999999999],[-85.577788999999939,63.165543000000127],[-85.589171999999962,63.174712999999997],[-85.592498999999975,63.17943600000001],[-85.638061999999934,63.244995000000074],[-85.639175000000023,63.249718000000087],[-85.648345999999947,63.33554799999996],[-85.653884999999946,63.408882000000006],[-85.650833000000034,63.428604000000007],[-85.644454999999994,63.443603999999993],[-85.635833999999988,63.458603000000039],[-85.626098999999897,63.468880000000013],[-85.618057000000022,63.479156000000103],[-85.60722399999986,63.494438000000116],[-85.604995999999971,63.509163000000058],[-85.591110000000015,63.617493000000024],[-85.59333799999996,63.631934999999999],[-85.596114999999941,63.641380000000083],[-85.607497999999964,63.665268000000026],[-85.61332699999997,63.669715999999994],[-85.717498999999975,63.716103000000089],[-85.879439999999988,63.704711999999915],[-85.98582499999992,63.693320999999969],[-86.017226999999934,63.68832400000008],[-86.183608999999933,63.653046000000074],[-86.224441999999954,63.642769000000044],[-86.244995000000017,63.639435000000105],[-86.266952999999944,63.638046000000088],[-86.300277999999935,63.639717000000132],[-86.346114999999998,63.645546000000138],[-86.381377999999984,63.652214000000129],[-86.450286999999889,63.660545000000013],[-86.552779999999871,63.670273000000066],[-86.56361400000003,63.670546999999999],[-86.596114999999941,63.668602000000021],[-86.626937999999996,63.661659000000043],[-86.666397000000018,63.648331000000042],[-86.694442999999922,63.633606000000043],[-86.733886999999982,63.606658999999979],[-86.759170999999981,63.590271000000087],[-86.778060999999923,63.581108000000086],[-86.807495000000017,63.571380999999974],[-86.837783999999999,63.563323999999966],[-86.847778000000005,63.560822000000087],[-86.879165999999998,63.555549999999982],[-86.922225999999966,63.552773000000059],[-87.050551999999982,63.549720999999977],[-87.083618000000001,63.550270000000125],[-87.095275999999956,63.551384000000098],[-87.118606999999997,63.555824000000086],[-87.141388000000006,63.563881000000094],[-87.14973399999991,63.568329000000062],[-87.188048999999864,63.589989000000003],[-87.217223999999987,63.622215000000097],[-87.222778000000005,63.631660000000011],[-87.226394999999968,63.641105999999979],[-87.225280999999995,63.651099999999985],[-87.22193900000002,63.665825000000098],[-87.218886999999938,63.675827000000083],[-87.210830999999985,63.691100999999946],[-87.200835999999867,63.706657000000121],[-87.186661000000015,63.722213999999951],[-87.161117999999931,63.743607000000054],[-86.943877999999927,63.900543000000027],[-86.934432999999956,63.906097000000045],[-86.915282999999988,63.91443600000008],[-86.875823999999966,63.928604000000121],[-86.784163999999976,63.956940000000031],[-86.763625999999988,63.962212000000136],[-86.700287000000003,63.972214000000122],[-86.668609999999887,63.978324999999984],[-86.503890999999896,64.018326000000002],[-86.41361999999998,64.048598999999967],[-86.255004999999926,64.076096000000064],[-86.233611999999994,64.079437000000098],[-86.223327999999981,64.081940000000088],[-86.213333000000034,64.085541000000148],[-86.203888000000006,64.091094999999939],[-86.189437999999882,64.101653999999996],[-86.178328999999962,64.121918000000107],[-86.178878999999995,64.131653000000028],[-86.182220000000029,64.141373000000101],[-86.212219000000005,64.178589000000045],[-86.253066999999987,64.200546000000088],[-86.273894999999982,64.208878000000084],[-86.300551999999982,64.221924000000058],[-86.308884000000035,64.226379000000065],[-86.3125,64.230819999999994],[-86.354720999999984,64.289978000000133],[-86.384170999999981,64.36442599999998],[-86.401672000000019,64.436645999999996],[-86.401107999999965,64.441649999999925],[-86.383620999999948,64.564987000000087],[-86.368880999999988,64.629424999999969],[-86.315552000000025,64.701096000000064],[-86.272506999999962,64.768051000000014],[-86.24888599999997,64.793868999999916],[-86.238891999999964,64.804152999999985],[-86.231383999999935,64.809418000000051],[-86.221114999999998,64.813034000000073],[-86.210280999999952,64.814697000000024],[-86.198607999999922,64.81442300000009],[-86.187209999999993,64.815262000000018],[-86.176665999999955,64.817764000000125],[-86.171660999999915,64.823043999999982],[-86.152495999999928,64.918045000000063],[-86.151947000000007,64.923035000000084],[-86.153335999999911,64.927765000000136],[-86.157226999999978,64.932479999999998],[-86.181106999999997,64.955551000000014],[-86.187209999999993,64.959991000000002],[-86.212509000000011,64.966385000000059],[-86.22084000000001,64.970535000000041],[-86.226394999999968,64.979980000000126],[-86.227782999999988,64.983871000000022],[-86.225829999999974,64.998596000000134],[-86.225006000000008,65.003601000000003],[-86.212219000000005,65.03387500000008],[-86.206389999999885,65.043869000000086],[-86.198333999999988,65.054153000000099],[-86.189986999999917,65.064423000000033],[-86.18472300000002,65.069717000000026],[-86.165282999999931,65.080551000000071],[-86.144729999999981,65.08859300000006],[-86.138335999999924,65.094437000000028],[-86.138061999999991,65.099425999999994],[-86.135558999999944,65.1827550000001],[-86.137221999999952,65.197753999999975],[-86.141953000000001,65.212204000000099],[-86.146118000000001,65.216660000000047],[-86.151397999999972,65.226379000000009],[-86.164168999999958,65.250000000000114],[-86.170546999999942,65.269150000000081],[-86.171660999999915,65.278869999999984],[-86.153335999999911,65.384720000000073],[-86.149733999999967,65.394714000000079],[-86.111937999999952,65.494141000000013],[-86.097777999999948,65.529160000000104],[-86.013900999999976,65.709152000000074],[-86.010009999999909,65.714996000000099],[-85.993880999999988,65.730545000000006],[-85.982773000000009,65.740814000000057],[-85.975280999999882,65.746094000000085],[-85.888335999999981,65.799987999999928],[-85.832503999999915,65.832489000000066],[-85.791381999999999,65.853317000000118],[-85.770554000000004,65.862198000000035],[-85.728333000000021,65.879425000000083],[-85.696654999999907,65.891937000000041],[-85.621108999999933,65.917480000000012],[-85.56527699999998,65.930267000000015],[-85.542496000000028,65.933319000000097],[-85.506667999999991,65.934418000000051],[-85.493880999999988,65.932205000000124],[-85.491013000000009,65.931060999999943],[-85.482773000000009,65.927765000000079],[-85.476944000000003,65.923309000000017],[-85.468886999999938,65.913879000000122],[-85.469726999999978,65.908874999999966],[-85.473891999999978,65.898880000000077],[-85.488892000000021,65.878586000000098],[-85.511123999999995,65.857758000000047],[-85.520554000000004,65.84275800000006],[-85.523620999999991,65.823043999999982],[-85.520554000000004,65.813309000000061],[-85.516662999999994,65.808594000000028],[-85.510559000000001,65.804152999999928],[-85.493331999999953,65.795258000000103],[-85.480559999999969,65.791930999999977]],[[-62.136664999999937,65.851379000000009],[-62.141669999999976,65.849716000000058],[-62.154442000000017,65.850815000000068],[-62.162216000000001,65.854156000000103],[-62.210830999999985,65.880539000000056],[-62.296950999999979,65.927765000000079],[-62.296669000000009,65.938583000000051],[-62.281386999999995,65.946365000000014],[-62.265006999999969,65.946930000000066],[-62.230552999999986,65.943862999999965],[-62.167220999999984,65.932754999999986],[-62.137779000000023,65.925811999999951],[-62.139724999999999,65.913040000000137],[-62.118606999999997,65.881087999999977],[-62.129996999999889,65.859146000000123],[-62.136664999999937,65.851379000000009]],[[-67.138335999999981,65.92692599999998],[-67.145844000000011,65.926376000000118],[-67.154448999999943,65.92886400000009],[-67.161117999999988,65.932205000000124],[-67.185271999999941,65.948317999999972],[-67.209166999999923,65.978867000000037],[-67.211945000000014,65.982758000000103],[-67.208892999999989,65.984421000000054],[-67.199158000000011,65.986373999999955],[-67.181380999999874,65.987198000000092],[-67.166945999999939,65.984984999999995],[-67.153885000000002,65.978591999999992],[-67.152785999999992,65.974990999999989],[-67.152602999999885,65.970733999999993],[-67.134445000000028,65.933044000000052],[-67.134734999999921,65.930267000000015],[-67.138335999999981,65.92692599999998]],[[-83.576950000000011,65.983047000000056],[-83.588607999999965,65.981658999999922],[-83.60082999999986,65.983322000000044],[-83.604445999999996,65.987762000000089],[-83.60082999999986,65.993042000000116],[-83.588897999999972,66.003052000000025],[-83.570007000000032,66.013611000000083],[-83.547500999999954,66.019440000000088],[-83.511397999999986,66.019989000000066],[-83.498885999999914,66.01748699999996],[-83.493056999999965,66.012771999999927],[-83.50140399999998,66.00749200000007],[-83.510009999999966,66.003325999999959],[-83.554442999999935,65.988876000000062],[-83.576950000000011,65.983047000000056]],[[-84.722777999999948,65.546097000000088],[-84.733886999999982,65.544708000000128],[-84.746108999999933,65.545822000000101],[-84.78472899999997,65.556640999999956],[-84.803604000000007,65.565536000000009],[-84.828612999999962,65.578873000000044],[-84.840835999999967,65.588043000000084],[-84.848052999999879,65.597487999999998],[-84.853333000000021,65.606934000000138],[-84.852218999999934,65.611923000000104],[-84.857772999999952,65.645827999999995],[-84.858886999999925,65.650818000000072],[-84.866393999999957,65.659988000000112],[-84.878601000000003,65.669144000000074],[-84.900283999999942,65.67804000000001],[-85.028609999999958,65.711655000000064],[-85.063048999999921,65.723312000000021],[-85.073897999999986,65.727768000000083],[-85.082229999999981,65.732208000000128],[-85.106948999999929,65.750548999999921],[-85.118057000000022,65.764709000000039],[-85.181945999999982,65.945526000000086],[-85.173049999999932,65.994705000000067],[-85.143889999999942,66.021103000000039],[-85.137222000000008,66.023315000000082],[-85.081679999999949,66.026657],[-85.057495000000017,66.02609300000006],[-84.9375,66.010543999999982],[-84.924712999999997,66.008040999999992],[-84.910277999999892,66.000000000000114],[-84.887221999999952,65.945526000000086],[-84.883330999999885,65.940811000000053],[-84.807770000000005,65.895828000000108],[-84.755004999999869,65.853317000000118],[-84.716110000000015,65.817215000000147],[-84.714171999999962,65.807205000000067],[-84.712783999999942,65.802200000000028],[-84.707779000000016,65.792755000000113],[-84.637222000000008,65.712203999999986],[-84.597503999999958,65.696640000000116],[-84.586670000000026,65.692200000000071],[-84.574172999999917,65.639160000000004],[-84.576110999999969,65.629150000000095],[-84.585006999999962,65.61914100000007],[-84.598617999999931,65.608597000000032],[-84.667769999999962,65.560532000000023],[-84.722777999999948,65.546097000000088]],[[-83.608611999999994,66.044144000000074],[-83.642226999999991,66.034988000000112],[-83.652221999999995,66.036652000000117],[-83.653609999999901,66.04136699999998],[-83.647507000000019,66.046646000000123],[-83.644164999999987,66.051650999999993],[-83.626099000000011,66.066940000000102],[-83.618056999999965,66.072220000000129],[-83.607223999999974,66.07748400000014],[-83.597778000000005,66.078873000000101],[-83.583618000000001,66.070540999999935],[-83.577788999999996,66.06581100000011],[-83.570847000000015,66.056366000000025],[-83.574447999999961,66.051376000000005],[-83.58555599999994,66.048035000000141],[-83.59722899999997,66.046646000000123],[-83.608611999999994,66.044144000000074]],[[-85.019164999999987,66.05720500000001],[-85.135558999999944,66.044434000000081],[-85.147781000000009,66.045821999999987],[-85.149170000000026,66.05053700000002],[-85.107773000000009,66.084427000000119],[-85.09973100000002,66.089706000000092],[-85.063323999999966,66.087769000000037],[-85.038604999999961,66.086105000000032],[-85.016112999999905,66.079712000000086],[-85.008620999999948,66.070540999999935],[-85.006957999999941,66.065536000000066],[-85.010283999999956,66.060531999999967],[-85.019164999999987,66.05720500000001]],[[-83.649444999999901,66.083602999999982],[-83.661117999999988,66.081940000000031],[-83.673614999999984,66.083327999999938],[-83.692490000000021,66.091370000000097],[-83.696105999999986,66.096099999999979],[-83.689986999999974,66.111099000000024],[-83.685271999999941,66.121093999999914],[-83.678878999999995,66.125259000000142],[-83.606658999999979,66.124146000000053],[-83.593886999999938,66.121643000000063],[-83.587783999999999,66.117203000000075],[-83.591674999999896,66.112197999999978],[-83.604445999999996,66.105820000000051],[-83.610549999999932,66.10165399999994],[-83.638061999999991,66.086928999999998],[-83.649444999999901,66.083602999999982]],[[-83.921386999999982,66.009720000000016],[-83.730834999999956,65.947754000000032],[-83.705840999999964,65.934143000000063],[-83.694152999999972,65.924697999999978],[-83.683318999999983,65.910538000000088],[-83.680832000000009,65.901093000000003],[-83.689163000000008,65.866653000000042],[-83.699721999999952,65.851379000000009],[-83.713897999999972,65.841094999999939],[-83.724715999999944,65.836929000000055],[-83.73582499999992,65.833603000000039],[-83.727492999999924,65.799713000000111],[-83.525008999999955,65.737761999999918],[-83.360001000000011,65.727478000000076],[-83.348052999999993,65.726928999999984],[-83.25111400000003,65.716934000000037],[-83.226944000000003,65.714157000000114],[-83.214447000000007,65.710541000000092],[-83.210830999999871,65.705826000000059],[-83.25111400000003,65.654709000000139],[-83.259445000000028,65.649429000000055],[-83.288894999999968,65.632750999999985],[-83.299727999999959,65.629424999999969],[-83.311110999999983,65.627196999999967],[-83.345000999999968,65.62081900000004],[-83.379165999999998,65.615540000000067],[-83.391387999999949,65.617203000000131],[-83.399170000000026,65.62081900000004],[-83.406113000000005,65.630264000000068],[-83.41194200000001,65.634720000000016],[-83.419998000000021,65.639435000000049],[-83.430557000000022,65.643875000000037],[-83.443328999999949,65.648041000000148],[-83.468612999999948,65.654984000000127],[-83.493056999999965,65.65776100000005],[-83.505004999999926,65.658324999999991],[-83.528610000000015,65.658324999999991],[-83.598891999999978,65.656372000000033],[-83.660277999999948,65.647217000000012],[-83.829726999999991,65.64498900000001],[-83.842772999999909,65.649155000000121],[-83.846114999999941,65.653869999999984],[-83.84973100000002,65.668320000000108],[-83.846389999999985,65.673309000000074],[-83.840560999999866,65.678589000000102],[-83.794158999999979,65.719437000000028],[-83.785827999999981,65.724700999999982],[-83.775009000000011,65.728043000000127],[-83.740828999999962,65.733322000000101],[-83.695266999999944,65.741089000000045],[-83.684158000000025,65.74443100000002],[-83.682769999999948,65.749419999999986],[-83.688888999999961,65.754166000000055],[-83.785278000000005,65.788879000000065],[-83.797501000000011,65.789429000000098],[-83.808883999999978,65.78804000000008],[-83.84973100000002,65.780548000000124],[-83.90583799999996,65.767487000000017],[-83.927490000000034,65.759720000000073],[-83.938048999999978,65.74443100000002],[-83.948607999999922,65.740265000000079],[-83.960007000000019,65.737761999999918],[-83.971664000000033,65.737198000000149],[-83.983886999999925,65.738586000000055],[-84.071121000000005,65.75],[-84.120543999999938,65.758331000000055],[-84.133330999999941,65.760817999999972],[-84.143615999999952,65.764160000000061],[-84.145003999999972,65.769149999999968],[-84.141388000000006,65.774155000000007],[-84.11721799999998,65.789703000000031],[-84.111388999999974,65.794983000000059],[-84.103333000000021,65.809981999999934],[-84.101105000000018,65.819717000000026],[-84.123610999999926,65.900269000000037],[-84.189437999999996,65.968322999999998],[-84.198043999999925,65.973038000000031],[-84.208617999999888,65.977203000000031],[-84.286391999999978,65.999145999999996],[-84.299438000000009,66.002487000000031],[-84.31138599999997,66.003052000000025],[-84.323333999999988,66.002487000000031],[-84.358046999999999,65.997756999999979],[-84.369995000000017,65.997208000000057],[-84.382766999999944,66.000549000000092],[-84.424163999999962,66.028046000000018],[-84.436110999999926,66.037201000000096],[-84.464447000000007,66.060257000000092],[-84.468062999999972,66.064986999999974],[-84.469161999999983,66.069992000000013],[-84.470001000000025,66.089431999999988],[-84.471114999999998,66.128311000000053],[-84.470275999999956,66.133331000000112],[-84.464447000000007,66.138321000000133],[-84.455841000000021,66.141663000000051],[-84.433060000000012,66.138885000000073],[-84.381103999999993,66.129149999999981],[-84.368056999999908,66.125808999999947],[-84.240279999999927,66.098328000000095],[-84.146392999999875,66.081099999999992],[-84.039443999999946,66.076934999999992],[-84.00167799999997,66.033600000000035],[-83.921386999999982,66.009720000000016]],[[-84.579726999999991,66.141373000000044],[-84.627486999999917,66.139160000000118],[-84.639998999999989,66.140549000000078],[-84.648346000000004,66.144989000000123],[-84.654449,66.149429000000112],[-84.675827000000027,66.173035000000027],[-84.678604000000007,66.182480000000055],[-84.667220999999927,66.184981999999991],[-84.618880999999988,66.176651000000049],[-84.59333799999996,66.171097000000088],[-84.589447000000007,66.166382000000056],[-84.574448000000018,66.147491000000002],[-84.579726999999991,66.141373000000044]],[[-84.265288999999996,66.177765000000022],[-84.276947000000007,66.175262000000089],[-84.289169000000015,66.175537000000077],[-84.301391999999964,66.176926000000094],[-84.313889000000017,66.179428000000144],[-84.353333000000021,66.190262000000018],[-84.361937999999952,66.194702000000063],[-84.364440999999943,66.204436999999928],[-84.363616999999977,66.209427000000005],[-84.360001000000011,66.214432000000045],[-84.348343,66.215820000000122],[-84.335830999999985,66.214432000000045],[-84.30972300000002,66.207764000000054],[-84.299164000000019,66.203322999999955],[-84.27305599999994,66.196640000000002],[-84.264450000000011,66.192199999999957],[-84.258347000000015,66.187759000000085],[-84.256957999999997,66.1827550000001],[-84.265288999999996,66.177765000000022]],[[-62.183883999999864,66.237198000000092],[-62.199164999999994,66.216933999999924],[-62.404998999999862,66.218597000000045],[-62.415276000000006,66.219147000000078],[-62.421668999999952,66.222214000000008],[-62.42999999999995,66.229156000000103],[-62.426665999999898,66.233046999999999],[-62.419167000000016,66.237762000000032],[-62.319450000000018,66.269440000000031],[-62.301940999999999,66.274994000000049],[-62.287223999999924,66.278046000000131],[-62.278336000000024,66.279709000000082],[-62.261672999999973,66.280273000000022],[-62.24888599999997,66.278595000000109],[-62.243057000000022,66.276931999999988],[-62.231383999999935,66.269440000000031],[-62.183883999999864,66.237198000000092]],[[-83.067229999999881,66.255554000000075],[-83.054992999999911,66.254990000000134],[-83.043059999999969,66.255264000000068],[-83.031113000000005,66.256653000000028],[-83.019454999999994,66.259155000000135],[-82.996947999999975,66.265823000000069],[-82.960830999999985,66.272491000000059],[-82.937209999999936,66.275269000000037],[-82.91332999999986,66.276093000000003],[-82.902495999999985,66.271652000000131],[-82.904175000000009,66.266662999999937],[-82.910278000000005,66.261658000000068],[-82.918610000000001,66.257492000000013],[-82.92971799999998,66.25221300000004],[-82.935546999999929,66.251389000000074],[-82.990279999999984,66.203598],[-82.996384000000035,66.19859300000013],[-83.00778200000002,66.195250999999985],[-83.019729999999981,66.194977000000051],[-83.080291999999986,66.196640000000002],[-83.093062999999972,66.198868000000118],[-83.263335999999981,66.247208000000001],[-83.287216000000001,66.256104000000107],[-83.293335000000013,66.260544000000095],[-83.296660999999972,66.265273999999977],[-83.297775000000001,66.270263999999997],[-83.298339999999882,66.313873000000115],[-83.285004000000015,66.329163000000108],[-83.273055999999997,66.339432000000102],[-83.264175000000023,66.343597000000102],[-83.252228000000002,66.344986000000119],[-83.226944000000003,66.33998100000008],[-83.216110000000015,66.335541000000035],[-83.204726999999934,66.316666000000112],[-83.173889000000031,66.288589000000115],[-83.168059999999912,66.283874999999966],[-83.067229999999881,66.255554000000075]],[[-66.62332200000003,66.280823000000055],[-66.641952999999944,66.279434000000037],[-66.656951999999933,66.280273000000022],[-66.667495999999971,66.282760999999994],[-66.678878999999995,66.286925999999994],[-66.701400999999976,66.297760000000039],[-66.741942999999878,66.316376000000105],[-66.843063000000029,66.362487999999985],[-66.905837999999903,66.376648000000046],[-66.916107000000011,66.379974000000118],[-66.944716999999969,66.394989000000066],[-66.956115999999952,66.401932000000045],[-66.958617999999944,66.40637200000009],[-66.958344000000011,66.411926000000051],[-66.955276000000026,66.413605000000075],[-66.944442999999922,66.413879000000009],[-66.851943999999946,66.402205999999978],[-66.829726999999991,66.398330999999985],[-66.823059000000001,66.392761000000121],[-66.820846999999958,66.388046000000088],[-66.801101999999958,66.375534000000073],[-66.782227000000034,66.369141000000127],[-66.726944000000003,66.354980000000126],[-66.705565999999976,66.349715999999944],[-66.678329000000019,66.345535000000041],[-66.662216000000001,66.343597000000102],[-66.650283999999942,66.34304800000001],[-66.639724999999999,66.340546000000074],[-66.62388599999997,66.335266000000047],[-66.584441999999967,66.320541000000105],[-66.575012000000015,66.313873000000115],[-66.573623999999995,66.310806000000014],[-66.591675000000009,66.293593999999985],[-66.605269999999962,66.286652000000061],[-66.62332200000003,66.280823000000055]],[[-66.998336999999935,66.493042000000003],[-66.990279999999984,66.489150999999936],[-66.976104999999961,66.489150999999936],[-66.963332999999977,66.487198000000035],[-66.873321999999973,66.468596999999988],[-66.868880999999988,66.464431999999988],[-66.871384000000035,66.460541000000092],[-66.878052000000025,66.458327999999995],[-66.936110999999926,66.445525999999973],[-66.948883000000023,66.444702000000007],[-66.987212999999997,66.445250999999928],[-67.030288999999925,66.45248400000014],[-67.036666999999966,66.456099999999992],[-67.038329999999974,66.472488000000055],[-67.038054999999986,66.478043000000127],[-67.035278000000005,66.484711000000118],[-67.025008999999955,66.489975000000129],[-67.006957999999884,66.493042000000003],[-66.998336999999935,66.493042000000003]],[[-107.92304999999993,66.850540000000024],[-107.93499799999989,66.849152000000117],[-107.94611399999991,66.851089000000115],[-107.94554099999993,66.856934000000024],[-107.837784,67.003875999999991],[-107.83029199999993,67.008606000000043],[-107.81696299999993,67.009155000000135],[-107.80666400000001,67.005829000000119],[-107.79499800000002,66.997208000000001],[-107.79110699999995,66.988312000000064],[-107.78971899999999,66.985259999999982],[-107.79055800000003,66.979705999999965],[-107.82389799999999,66.901093000000003],[-107.83000199999992,66.895538000000101],[-107.89499699999999,66.860809000000017],[-107.90360999999996,66.856934000000024],[-107.92304999999993,66.850540000000024]],[[-108.01445000000001,66.897766000000047],[-108.025284,66.895538000000101],[-108.03859699999998,66.897217000000126],[-108.04444899999993,66.901382000000126],[-108.09638999999993,66.967484000000013],[-108.09777800000001,66.972762999999986],[-108.10659799999996,67.026001000000065],[-108.06360599999988,67.001099000000067],[-107.93831599999999,66.946930000000066],[-107.95944199999991,66.931655999999975],[-107.96665999999993,66.926651000000106],[-108.00583599999987,66.901931999999931],[-108.01445000000001,66.897766000000047]],[[-63.059166000000005,66.957764000000111],[-63.083327999999995,66.954987000000017],[-63.095550999999944,66.955826000000002],[-63.116942999999992,66.963043000000084],[-63.136391000000003,66.974701000000096],[-63.163054999999929,66.995255000000043],[-63.165549999999996,66.999145999999939],[-63.166106999999954,67.004990000000134],[-63.159163999999976,67.015549000000021],[-63.154166999999973,67.021378000000027],[-63.144446999999957,67.028869999999984],[-63.127494999999954,67.033599999999979],[-63.123055000000022,67.034713999999951],[-63.110831999999903,67.033875000000023],[-63.101668999999902,67.029709000000082],[-63.098052999999936,67.027205999999978],[-63.097778000000005,67.023315000000082],[-63.021111000000019,66.996643000000006],[-63.011672999999973,66.992477000000065],[-63.003890999999953,66.988585999999998],[-62.999999999999886,66.984420999999998],[-62.999442999999985,66.978591999999992],[-63.002228000000002,66.97554000000008],[-63.020835999999974,66.966385000000002],[-63.040000999999961,66.960815000000139],[-63.059166000000005,66.957764000000111]],[[-62.918334999999956,67.009720000000016],[-62.938048999999978,67.005829000000119],[-62.977775999999949,67.006653000000085],[-63.009726999999998,67.009995000000004],[-63.037780999999939,67.015823000000125],[-63.068335999999988,67.025543000000027],[-63.092772999999966,67.035812000000078],[-63.12388599999997,67.049149000000114],[-63.135559000000001,67.054703000000075],[-63.138892999999996,67.059418000000107],[-63.138054000000011,67.065262000000132],[-63.135833999999988,67.069716999999969],[-63.130279999999914,67.074158000000068],[-63.11721799999998,67.078873000000101],[-63.110557999999969,67.080276000000026],[-63.100081999999929,67.079712000000086],[-63.002228000000002,67.069443000000035],[-62.978333000000021,67.062759000000142],[-62.961112999999955,67.054703000000075],[-62.941108999999926,67.043593999999985],[-62.922500999999954,67.031097000000045],[-62.914444000000003,67.023041000000148],[-62.912215999999944,67.014708999999982],[-62.918334999999956,67.009720000000016]],[[-62.64416499999993,67.057479999999998],[-62.646949999999947,67.049988000000042],[-62.65166499999998,67.04693600000013],[-62.752501999999993,67.010543999999982],[-62.764449999999954,67.009155000000135],[-62.782775999999956,67.009430000000009],[-62.813056999999958,67.016937000000098],[-62.832222000000002,67.024429000000055],[-62.899445000000014,67.058318999999983],[-62.894599999999969,67.059113000000082],[-62.865004999999996,67.057479999999998],[-62.82028200000002,67.055817000000047],[-62.810279999999977,67.05693100000002],[-62.806664000000012,67.05914300000012],[-62.702869000000021,67.128685000000075],[-62.652221999999995,67.166091999999992],[-62.641945000000021,67.174149],[-62.631942999999865,67.176926000000037],[-62.547782999999924,67.186096000000134],[-62.533889999999985,67.187195000000088],[-62.425277999999992,67.191085999999984],[-62.418059999999969,67.19081099999994],[-62.37888299999986,67.169708000000071],[-62.375274999999931,67.165817000000004],[-62.376105999999936,67.164429000000098],[-62.388054000000011,67.157486000000063],[-62.443610999999919,67.135817999999972],[-62.451942000000031,67.132751000000042],[-62.472495999999978,67.126083000000051],[-62.504172999999923,67.119430999999963],[-62.538612000000001,67.113876000000062],[-62.569449999999961,67.105819999999994],[-62.580001999999979,67.102203000000088],[-62.596106999999961,67.092209000000025],[-62.631667999999934,67.069991999999957],[-62.638610999999912,67.063873000000115],[-62.64416499999993,67.057479999999998]],[[-107.40778399999999,67.083054000000004],[-107.49054699999999,67.071380999999974],[-107.50639299999995,67.072495000000117],[-107.51750199999987,67.074706999999989],[-107.52778599999999,67.078048999999965],[-107.54972800000002,67.08998100000008],[-107.56500199999999,67.103317000000061],[-107.57444799999996,67.112198000000149],[-107.58389299999988,67.121368000000018],[-107.59110999999996,67.130813999999987],[-107.62917299999992,67.18331900000004],[-107.63054699999992,67.188582999999994],[-107.62970699999988,67.194138000000066],[-107.62666300000001,67.200272000000098],[-107.62053700000001,67.206100000000049],[-107.60833700000001,67.20748900000001],[-107.59777799999995,67.204162999999994],[-107.58168000000001,67.196365000000128],[-107.57584400000002,67.192200000000128],[-107.56194299999987,67.183868000000132],[-107.51000999999991,67.15637200000009],[-107.47778299999993,67.140823000000012],[-107.46193700000003,67.133331000000055],[-107.44360399999999,67.126083000000051],[-107.412781,67.115814000000057],[-107.40055799999993,67.113037000000134],[-107.40778399999999,67.083054000000004]],[[-95.361663999999962,67.197754000000145],[-95.373610999999926,67.196365000000128],[-95.400557999999933,67.197204999999997],[-95.415282999999988,67.199707000000103],[-95.430831999999896,67.202773999999977],[-95.527495999999928,67.223037999999974],[-95.543334999999956,67.226379000000009],[-95.551392000000021,67.230270000000075],[-95.552779999999927,67.235260000000096],[-95.542220999999984,67.238585999999941],[-95.391112999999962,67.263046000000145],[-95.377776999999924,67.262772000000041],[-95.317229999999995,67.255554000000018],[-95.307220000000029,67.252486999999917],[-95.305832000000009,67.247757000000092],[-95.309432999999956,67.242203000000075],[-95.314712999999927,67.238585999999941],[-95.336669999999913,67.212769000000094],[-95.342772999999966,67.206940000000088],[-95.361663999999962,67.197754000000145]],[[-107.66278099999994,67.22026100000005],[-107.675003,67.218872000000033],[-107.73029300000002,67.289978000000076],[-107.73306300000002,67.300261999999918],[-107.73029300000002,67.306366000000139],[-107.72501399999993,67.31303400000013],[-107.71083099999998,67.319153000000142],[-107.67777999999993,67.311919999999986],[-107.66944899999993,67.30802900000009],[-107.66000399999996,67.298874000000012],[-107.64472999999998,67.269150000000025],[-107.64028899999994,67.253601000000117],[-107.63945000000001,67.242752000000053],[-107.64250199999992,67.236649000000114],[-107.64778100000001,67.229980000000012],[-107.65416699999997,67.224426000000051],[-107.66278099999994,67.22026100000005]],[[-63.366393999999957,67.287766000000033],[-63.396111000000019,67.269988999999953],[-63.417777999999998,67.26638800000012],[-63.456107999999972,67.264434999999992],[-63.507506999999976,67.269440000000031],[-63.541945999999939,67.272491000000059],[-63.55972300000002,67.273041000000092],[-63.578339000000028,67.273315000000025],[-63.62027699999993,67.269150000000025],[-63.763618000000008,67.272491000000059],[-63.81361400000003,67.279160000000104],[-63.829726999999878,67.28414900000007],[-63.819449999999961,67.289978000000076],[-63.796668999999952,67.299987999999985],[-63.688331999999889,67.341660000000047],[-63.666663999999969,67.345535000000041],[-63.646110999999962,67.348038000000031],[-63.605559999999969,67.352203000000031],[-63.585830999999871,67.353317000000004],[-63.485001000000011,67.341094999999996],[-63.369164000000012,67.302475000000072],[-63.357779999999991,67.293868999999972],[-63.366393999999957,67.287766000000033]],[[-107.91082799999998,67.310532000000023],[-107.93443300000001,67.306640999999956],[-107.94803599999995,67.308319000000097],[-108.08444199999997,67.381363000000079],[-108.076683,67.424698000000035],[-108.07389799999993,67.430817000000104],[-108.06861899999996,67.437485000000038],[-108.06111099999993,67.442200000000071],[-107.94748700000002,67.479980000000012],[-107.91776999999996,67.48942599999998],[-107.90306099999992,67.489151000000106],[-107.89472999999992,67.485535000000084],[-107.88722200000001,67.476089000000115],[-107.88276699999989,67.462494000000049],[-107.89806399999998,67.319717000000082],[-107.90110799999997,67.313598999999954],[-107.91082799999998,67.310532000000023]],[[-108.36833200000001,67.467209000000082],[-108.38194299999998,67.466660000000104],[-108.39806399999998,67.467758000000003],[-108.43388399999998,67.47665400000011],[-108.44444299999992,67.479980000000012],[-108.45278899999994,67.483871000000079],[-108.45889299999988,67.488037000000134],[-108.49249299999997,67.519714000000079],[-108.49638400000003,67.524429000000112],[-108.49582700000002,67.529984000000013],[-108.49137899999999,67.563034000000073],[-108.48137700000001,67.566375999999991],[-108.45777899999996,67.568054000000132],[-108.33583099999993,67.565810999999997],[-108.29750100000001,67.557205000000067],[-108.28582799999998,67.54304500000012],[-108.28443899999996,67.537766000000147],[-108.29527299999995,67.49693300000007],[-108.30166600000001,67.491089000000045],[-108.35722399999986,67.469437000000028],[-108.36833200000001,67.467209000000082]],[[-108.14111300000002,67.449997000000053],[-108.16944899999993,67.449707000000046],[-108.23665599999993,67.456650000000025],[-108.25167799999997,67.458878000000141],[-108.26222200000001,67.462204000000042],[-108.26806599999992,67.466660000000104],[-108.27194199999991,67.471374999999966],[-108.275284,67.481658999999979],[-108.22556299999997,67.565536000000122],[-108.21916199999987,67.571106000000043],[-108.20638999999994,67.570540999999992],[-108.19833399999999,67.566665999999998],[-108.17360699999995,67.552475000000015],[-108.1661069999999,67.54304500000012],[-108.13137799999993,67.481934000000024],[-108.12970699999994,67.47665400000011],[-108.12888299999997,67.465820000000065],[-108.12943999999999,67.460266000000047],[-108.13249200000001,67.454163000000108],[-108.14111300000002,67.449997000000053]],[[-108.32277699999997,67.589980999999966],[-108.32362399999994,67.586655000000121],[-108.33944700000001,67.587769000000094],[-108.42027300000001,67.599426000000051],[-108.48222399999992,67.631363000000022],[-108.48388699999992,67.636658000000068],[-108.475281,67.640548999999965],[-108.46389799999992,67.643051000000071],[-108.44803599999995,67.641937000000041],[-108.41832699999992,67.63638300000008],[-108.40334299999995,67.634155000000135],[-108.390289,67.631088000000034],[-108.379707,67.627762000000132],[-108.37138400000003,67.62414600000011],[-108.33416699999992,67.604156000000103],[-108.32277699999997,67.589980999999966]],[[-63.881942999999978,67.503326000000015],[-63.935555000000022,67.501938000000109],[-63.979163999999912,67.503052000000082],[-63.99500299999994,67.504166000000055],[-64.005279999999914,67.505263999999954],[-64.025283999999942,67.510544000000039],[-64.029723999999874,67.513885000000073],[-64.031677000000002,67.518600000000106],[-64.034728999999913,67.52887000000004],[-64.038054999999872,67.542755000000113],[-64.034438999999907,67.558594000000028],[-63.981110000000001,67.644150000000025],[-63.976944000000003,67.649428999999998],[-63.969993999999986,67.653595000000109],[-63.962775999999963,67.65554800000001],[-63.952498999999989,67.654434000000037],[-63.945549000000028,67.651382000000126],[-63.93721800000003,67.645263999999997],[-63.926392000000021,67.633330999999941],[-63.922226000000023,67.624985000000038],[-63.915549999999996,67.617203000000131],[-63.904442000000017,67.60803199999998],[-63.875556999999958,67.593048000000067],[-63.853888999999924,67.585541000000148],[-63.815276999999924,67.566665999999998],[-63.787223999999981,67.550537000000077],[-63.769996999999989,67.537766000000147],[-63.763618000000008,67.529709000000025],[-63.758056999999951,67.520538000000045],[-63.760833999999988,67.51527400000009],[-63.769447000000014,67.513321000000133],[-63.818335999999988,67.5086060000001],[-63.842223999999931,67.506377999999984],[-63.881942999999978,67.503326000000015]],[[-108.05999799999995,67.475266000000033],[-108.08972199999994,67.465546000000131],[-108.10333300000002,67.467209000000082],[-108.109444,67.471374999999966],[-108.11332700000003,67.476089000000115],[-108.14389,67.530547999999953],[-108.14277600000003,67.541655999999989],[-108.13362099999989,67.628036000000066],[-108.13221699999997,67.639434999999992],[-108.11776699999996,67.669982999999945],[-108.11361699999998,67.675261999999975],[-108.10109699999992,67.676651000000106],[-108.087219,67.674988000000042],[-108.01418299999995,67.662491000000045],[-108.00361599999997,67.65914900000007],[-107.99553700000001,67.655258000000003],[-107.98944099999994,67.651093000000003],[-107.98332199999999,67.644714000000135],[-107.92832900000002,67.561645999999996],[-107.92304999999993,67.551651000000049],[-107.92138699999992,67.54664600000001],[-107.922234,67.540817000000004],[-107.92749000000003,67.534424000000058],[-108.05999799999995,67.475266000000033]],[[-97.502791999999943,67.624420000000043],[-97.515563999999927,67.623871000000065],[-97.530288999999982,67.624985000000038],[-97.541381999999999,67.628860000000032],[-97.549437999999952,67.638045999999974],[-97.551391999999964,67.642761000000007],[-97.553054999999915,67.647766000000104],[-97.560546999999929,67.692748999999992],[-97.40055799999999,67.731658999999922],[-97.387786999999889,67.732208000000071],[-97.360001000000011,67.731658999999922],[-97.346389999999928,67.728317000000004],[-97.337783999999999,67.724152000000004],[-97.337783999999999,67.721100000000092],[-97.33277899999996,67.70637499999998],[-97.327224999999999,67.681655999999975],[-97.33277899999996,67.675812000000008],[-97.341675000000009,67.670532000000094],[-97.370543999999882,67.657760999999994],[-97.433608999999933,67.637497000000053],[-97.478881999999942,67.627472000000125],[-97.502791999999943,67.624420000000043]],[[-109.11221299999994,67.763321000000076],[-109.12581599999987,67.76249700000011],[-109.14111299999996,67.764998999999989],[-109.195267,67.775543000000027],[-109.20612299999993,67.778869999999984],[-109.20777900000002,67.783875000000023],[-109.16944899999999,67.797759999999926],[-109.15943899999996,67.801085999999998],[-109.135559,67.802764999999965],[-109.0933379999999,67.803863999999976],[-109.07584400000002,67.802199999999971],[-109.06054699999999,67.799713000000054],[-109.03916899999996,67.793320000000108],[-109.04083299999996,67.788315000000068],[-109.05277999999993,67.782486000000063],[-109.08000199999987,67.771103000000039],[-109.08972199999994,67.768051000000128],[-109.11221299999994,67.763321000000076]],[[-96.170546999999999,67.773041000000148],[-96.182769999999948,67.77165199999996],[-96.192490000000021,67.773605000000089],[-96.196380999999917,67.778046000000018],[-96.185821999999973,67.794708000000014],[-96.179992999999968,67.800262000000032],[-96.171386999999925,67.806366000000025],[-96.098617999999988,67.832213999999965],[-96.077224999999942,67.838882000000126],[-96.065552000000025,67.841095000000109],[-96.053328999999962,67.842758000000003],[-96.040282999999931,67.843323000000055],[-96.02806099999998,67.841659999999933],[-95.997498000000007,67.820830999999998],[-95.996384000000035,67.81581100000011],[-96.004729999999995,67.809708000000001],[-96.016113000000018,67.807479999999998],[-96.040832999999964,67.804428000000087],[-96.170546999999999,67.773041000000148]],[[-114.11501299999998,67.883880999999974],[-114.08222999999998,67.883041000000105],[-114.02223200000003,67.884155000000078],[-114.00583599999999,67.8836060000001],[-113.95500199999998,67.881362999999965],[-113.92138699999998,67.878036000000009],[-113.925003,67.874694999999974],[-113.94138299999986,67.875259000000142],[-113.98638899999997,67.874419999999986],[-113.99999999999994,67.873306000000014],[-114.01027699999992,67.871368000000075],[-114.05166600000001,67.870254999999986],[-114.08306900000002,67.87052900000009],[-114.195267,67.872482000000048],[-114.22972099999987,67.874146000000053],[-114.25250199999999,67.879974000000004],[-114.29638699999998,67.892212000000029],[-114.29695100000004,67.895263999999941],[-114.27555799999999,67.900542999999914],[-114.25110599999994,67.904433999999981],[-114.21972700000003,67.904160000000047],[-114.20612299999993,67.901932000000102],[-114.17388899999997,67.892487000000074],[-114.14862099999999,67.887206999999989],[-114.13305700000001,67.885269000000051],[-114.11501299999998,67.883880999999974]],[[-97.856383999999935,67.850539999999967],[-97.866942999999992,67.846939000000134],[-97.924164000000019,67.849991000000045],[-97.954453000000001,67.856368999999972],[-97.963333000000034,67.860260000000039],[-97.970001000000025,67.86442599999998],[-97.974166999999909,67.869141000000013],[-97.973327999999924,67.874146000000053],[-97.976944000000003,67.884155000000078],[-97.97444200000001,67.904984000000013],[-97.961120999999991,67.90554800000001],[-97.933318999999983,67.89888000000002],[-97.920272999999952,67.893600000000106],[-97.91361999999998,67.889160000000118],[-97.895554000000004,67.881362999999965],[-97.86221299999994,67.859985000000052],[-97.858046999999942,67.855255],[-97.856383999999935,67.850539999999967]],[[-108.64695699999999,67.86943100000002],[-108.66082799999998,67.868865999999969],[-108.66915899999998,67.872482000000048],[-108.64666699999998,67.887206999999989],[-108.58500700000002,67.915543000000071],[-108.56610099999989,67.922759999999982],[-108.54472399999997,67.928314],[-108.531113,67.928864000000033],[-108.38027999999997,67.922484999999995],[-108.37082699999996,67.919708000000071],[-108.36444099999994,67.915543000000071],[-108.36110699999989,67.905257999999947],[-108.35944399999994,67.899993999999992],[-108.41221599999994,67.885817999999972],[-108.64695699999999,67.86943100000002]],[[-113.390289,67.897766000000047],[-113.46389799999997,67.895828000000108],[-113.52694699999995,67.896378000000141],[-113.55972300000002,67.897491000000002],[-113.59416199999993,67.899428999999941],[-113.60333299999991,67.903046000000074],[-113.59750399999996,67.906647000000135],[-113.58528100000001,67.908600000000092],[-113.41972399999997,67.925262000000089],[-113.39111300000002,67.926651000000049],[-113.34750400000001,67.928040000000067],[-113.27390299999996,67.929977000000122],[-113.25723299999993,67.929428000000144],[-113.25029000000001,67.925262000000089],[-113.24694799999997,67.914429000000098],[-113.25361599999997,67.909424000000058],[-113.27778599999999,67.905822999999998],[-113.297234,67.904433999999981],[-113.33444199999991,67.901092999999946],[-113.390289,67.897766000000047]],[[-112.93055700000002,67.916655999999989],[-112.98361199999999,67.915268000000083],[-112.99999999999989,67.916092000000049],[-113.06027199999994,67.915268000000083],[-113.13110399999999,67.911652000000004],[-113.14750700000002,67.912200999999982],[-113.14750700000002,67.915817000000004],[-113.13806199999999,67.919144000000131],[-112.94304699999998,67.931091000000094],[-112.89639299999999,67.93081699999999],[-112.88722199999995,67.927200000000028],[-112.890289,67.921921000000054],[-112.90110800000002,67.919144000000131],[-112.93055700000002,67.916655999999989]],[[-111.07167099999998,67.847488000000055],[-111.08666999999997,67.847488000000055],[-111.0911099999999,67.852203000000088],[-111.08693700000003,67.858871000000079],[-111.07028200000002,67.867203000000075],[-110.84889199999998,67.954711999999972],[-110.83917200000002,67.958037999999988],[-110.82668299999995,67.959717000000012],[-110.81388900000002,67.959152000000017],[-110.80722000000003,67.954987000000017],[-110.80943300000001,67.948867999999948],[-110.81696299999999,67.940262000000018],[-110.86221299999994,67.894989000000123],[-110.86945300000002,67.889984000000084],[-110.88027999999991,67.887496999999996],[-111.05943300000001,67.849152000000061],[-111.07167099999998,67.847488000000055]],[[-114.21916199999998,67.945250999999985],[-114.29583699999995,67.944702000000063],[-114.30999799999995,67.945816000000036],[-114.31722999999988,67.949707000000103],[-114.31082200000003,67.954711999999972],[-114.30027799999988,67.957489000000066],[-114.25446299999987,67.963318000000072],[-114.17138699999992,67.969147000000078],[-114.13999899999999,67.96887200000009],[-114.12416099999996,67.967209000000139],[-114.12110899999993,67.961929000000055],[-114.12332199999992,67.958037999999988],[-114.16332999999986,67.949142000000052],[-114.20388800000001,67.945816000000036],[-114.21916199999998,67.945250999999985]],[[-108.13806199999999,67.872482000000048],[-108.15167199999996,67.871918000000107],[-108.24553699999996,67.878036000000009],[-108.25418100000002,67.881927000000076],[-108.25556899999992,67.887206999999989],[-108.23916599999995,67.920258000000103],[-108.236107,67.926376000000062],[-108.23111,67.933044000000052],[-108.22471599999994,67.938873000000058],[-108.198036,67.950821000000076],[-108.14723200000003,67.96665999999999],[-108.12581599999999,67.972214000000008],[-108.114441,67.974426000000051],[-108.10056299999997,67.974991000000102],[-108.08416699999998,67.97387700000013],[-108.07140399999992,67.971100000000035],[-108.06054699999999,67.967758000000117],[-108.05444299999988,67.963318000000072],[-108.05055199999998,67.958603000000039],[-108.048607,67.949142000000052],[-108.05139200000002,67.926651000000049],[-108.06331599999993,67.902206000000035],[-108.06833599999999,67.895538000000045],[-108.07501200000002,67.889709000000039],[-108.08249699999999,67.884995000000117],[-108.09137699999985,67.880814000000044],[-108.11277799999999,67.87553400000013],[-108.13806199999999,67.872482000000048]],[[-113.72000099999997,67.973312000000078],[-113.72778299999993,67.969147000000078],[-113.73998999999998,67.967209000000139],[-113.75361599999997,67.966094999999996],[-113.79750099999995,67.964705999999978],[-113.99305699999996,67.961104999999918],[-113.99109599999997,67.964995999999985],[-113.98249800000002,67.967209000000139],[-113.97250400000001,67.968597000000045],[-113.91639700000002,67.972214000000008],[-113.88639799999999,67.972762999999986],[-113.83833299999998,67.971924000000001],[-113.81111099999993,67.97387700000013],[-113.78527800000001,67.976929000000041],[-113.77223199999997,67.980270000000075],[-113.74082899999996,67.979980000000069],[-113.72501399999999,67.978043000000014],[-113.72000099999997,67.973312000000078]],[[-109.195267,67.989974999999959],[-109.04998799999993,67.958328000000051],[-109.03028899999993,67.966933999999924],[-108.99082900000002,67.976379000000009],[-108.97693599999997,67.976929000000041],[-108.95111099999991,67.973312000000078],[-108.89723199999997,67.956940000000088],[-108.88445300000001,67.94859300000013],[-108.86554699999999,67.905822999999998],[-108.86609599999991,67.90026899999998],[-108.87943999999999,67.875259000000142],[-108.88806199999999,67.871093999999971],[-108.90055799999999,67.869705000000124],[-108.916946,67.87052900000009],[-109.04888900000003,67.90387000000004],[-109.10305799999998,67.920258000000103],[-109.135559,67.930267000000129],[-109.16972399999992,67.945250999999985],[-109.18888899999996,67.957764000000054],[-109.195267,67.962204000000099],[-109.19888299999997,67.972488000000112],[-109.198036,67.983871000000136],[-109.195267,67.989974999999959]],[[-110.33444199999997,68.011658000000125],[-110.39362299999993,68.011108000000092],[-110.41000400000001,68.011932000000058],[-110.42111199999994,68.014998999999932],[-110.42083700000001,68.020827999999995],[-110.41055299999999,68.024704000000042],[-110.32640099999992,68.047760000000096],[-110.317497,68.049712999999997],[-110.31082199999992,68.045532000000094],[-110.30888400000003,68.037491000000045],[-110.316101,68.019150000000025],[-110.32333399999999,68.014160000000004],[-110.33444199999997,68.011658000000125]],[[-98.951401000000033,67.979980000000069],[-98.963622999999927,67.978317000000118],[-98.979445999999939,67.980270000000075],[-99.005004999999983,67.987198000000092],[-99.014450000000011,67.991088999999988],[-99.028335999999911,67.999420000000043],[-99.078612999999905,68.045592999999997],[-99.051392000000021,68.055817000000047],[-98.990554999999858,68.078323000000069],[-98.975554999999986,68.077209000000039],[-98.968886999999995,68.073044000000039],[-98.964721999999995,68.064987000000087],[-98.934432999999956,67.99664300000012],[-98.934998000000007,67.991363999999976],[-98.942763999999954,67.985259999999926],[-98.951401000000033,67.979980000000069]],[[-65.397232000000031,68.039978000000133],[-65.409163999999976,68.039428999999984],[-65.500290000000007,68.046097000000145],[-65.510833999999988,68.04942299999999],[-65.516662999999994,68.05442800000003],[-65.519729999999981,68.067490000000078],[-65.518065999999976,68.072220000000073],[-65.505279999999971,68.076385000000073],[-65.43582200000003,68.088042999999971],[-65.394454999999994,68.08998100000008],[-65.386397999999929,68.088318000000129],[-65.390288999999996,68.078323000000069],[-65.383057000000008,68.053314000000057],[-65.383330999999941,68.048599000000024],[-65.387222000000008,68.043320000000051],[-65.397232000000031,68.039978000000133]],[[-108.50611900000001,68.034714000000122],[-108.51862299999993,68.033324999999934],[-108.53388999999999,68.035538000000088],[-108.54028299999993,68.039978000000133],[-108.53751399999999,68.046097000000145],[-108.45472699999999,68.090546000000074],[-108.44748700000002,68.087769000000037],[-108.44583099999994,68.082489000000123],[-108.44611399999991,68.074706999999989],[-108.45140100000003,68.068054000000018],[-108.46665999999999,68.058319000000097],[-108.49722299999996,68.038879000000122],[-108.50611900000001,68.034714000000122]],[[-109.32167099999998,67.981094000000041],[-109.33556399999992,67.980270000000075],[-109.35193600000002,67.981369000000086],[-109.37805199999991,67.986923000000047],[-109.432503,68.003052000000025],[-109.49804699999993,68.022766000000104],[-109.50666799999993,68.026382000000126],[-109.53888699999999,68.047485000000052],[-109.54305999999991,68.052200000000084],[-109.50473,68.088882000000069],[-109.49749799999989,68.093597000000102],[-109.484734,68.095260999999937],[-109.44722000000002,68.092209000000025],[-109.41055299999999,68.071930000000066],[-109.32167099999998,68.039978000000133],[-109.31527699999987,68.035812000000021],[-109.3116609999999,68.025543000000027],[-109.31111099999987,67.997756999999922],[-109.3116609999999,67.991928000000087],[-109.31416299999995,67.985809000000074],[-109.32167099999998,67.981094000000041]],[[-108.36054999999999,68.049712999999997],[-108.37444299999993,68.048874000000069],[-108.38751200000002,68.05192599999998],[-108.40638699999994,68.064697000000081],[-108.40805099999994,68.069716999999969],[-108.40167200000002,68.075546000000145],[-108.38221699999991,68.092758000000003],[-108.37444299999993,68.095535000000041],[-108.36193800000001,68.096939000000077],[-108.32000699999992,68.098877000000016],[-108.306107,68.099425999999937],[-108.29444899999999,68.097214000000065],[-108.297234,68.091095000000053],[-108.29778299999998,68.085541000000035],[-108.30082700000003,68.079437000000041],[-108.30860899999999,68.074706999999989],[-108.34916699999997,68.05192599999998],[-108.36054999999999,68.049712999999997]],[[-110.21362299999998,68.038039999999967],[-110.23998999999998,68.035812000000021],[-110.25639299999995,68.036652000000061],[-110.25862100000001,68.041931000000034],[-110.25,68.046097000000145],[-110.22165699999994,68.056641000000013],[-110.18195300000002,68.069716999999969],[-109.93276999999989,68.131927000000076],[-109.92166099999997,68.134155000000021],[-109.89639299999999,68.13749700000011],[-109.88583399999993,68.136383000000137],[-109.87721299999993,68.12692300000009],[-109.87748699999997,68.121368000000018],[-109.882767,68.114151000000106],[-109.88527699999997,68.108032000000037],[-109.88999899999993,68.101379000000065],[-109.89584399999995,68.095535000000041],[-109.90334300000001,68.090546000000074],[-109.92111199999994,68.081664999999987],[-109.93222000000003,68.079163000000108],[-110.08721899999995,68.053314000000057],[-110.21362299999998,68.038039999999967]],[[-112.78056299999997,68.131088000000091],[-112.79276999999996,68.129424999999969],[-112.88999899999999,68.137207000000103],[-112.9058379999999,68.139160000000061],[-112.91722099999998,68.142211999999972],[-112.922234,68.146652000000017],[-112.91832699999992,68.153594999999996],[-112.91306299999997,68.159424000000001],[-112.90638699999994,68.164429000000041],[-112.89835399999998,68.168869000000086],[-112.88861099999997,68.172211000000004],[-112.87638900000002,68.173874000000126],[-112.86110699999995,68.174149000000114],[-112.76722699999993,68.166656000000103],[-112.75167799999997,68.164703000000145],[-112.74973299999994,68.158034999999984],[-112.74472000000003,68.153594999999996],[-112.74638399999998,68.147490999999945],[-112.75334199999998,68.142211999999972],[-112.76139799999993,68.138046000000088],[-112.78056299999997,68.131088000000091]],[[-74.21556099999998,68.117751999999939],[-74.164718999999991,68.065536000000066],[-73.974716000000001,68.041092000000106],[-73.736388999999974,68.013611000000026],[-73.655471999999975,68.007705999999985],[-73.643340999999907,68.012207000000046],[-73.619995000000017,68.014998999999932],[-73.608886999999868,68.015548999999965],[-73.578063999999983,68.014434999999992],[-73.567504999999983,68.013046000000031],[-73.543883999999935,68.008330999999998],[-73.439986999999974,67.985535000000141],[-73.428329000000019,67.982208000000014],[-73.418883999999991,67.97886699999998],[-73.411666999999966,67.974991000000102],[-73.409728999999913,67.970534999999984],[-73.348617999999988,67.828048999999965],[-73.361664000000019,67.810257000000092],[-73.377776999999867,67.793869000000029],[-73.383330999999941,67.789429000000041],[-73.404175000000009,67.774994000000106],[-73.411391999999921,67.770537999999988],[-73.418609999999944,67.766388000000006],[-73.429442999999992,67.762771999999927],[-73.449431999999945,67.76249700000011],[-73.664168999999958,67.774704000000099],[-73.932219999999916,67.78637700000013],[-73.993057000000022,67.788040000000024],[-74.038329999999917,67.788589000000002],[-74.083892999999875,67.788315000000068],[-74.113327000000027,67.787201000000096],[-74.168059999999855,67.78276100000005],[-74.228881999999942,67.775268999999923],[-74.251952999999901,67.772491000000116],[-74.263061999999991,67.77165199999996],[-74.305832000000009,67.768600000000049],[-74.32028200000002,67.768875000000094],[-74.388610999999969,67.775268999999923],[-74.400833000000034,67.776657000000057],[-74.481109999999944,67.789429000000041],[-74.535278000000005,67.804703000000131],[-74.564162999999951,67.814423000000033],[-74.581680000000006,67.821381000000031],[-74.59722899999997,67.828598000000113],[-74.640838999999971,67.852203000000088],[-74.659728999999913,67.864700000000084],[-74.684433000000013,67.881927000000076],[-74.758895999999993,67.950271999999984],[-74.772232000000031,67.963318000000072],[-74.775557999999876,67.969147000000078],[-74.777221999999995,67.97387700000013],[-74.778060999999923,68.006104000000107],[-74.777495999999985,68.017761000000064],[-74.773055999999997,68.029984000000127],[-74.760009999999966,68.05442800000003],[-74.754181000000017,68.06053200000008],[-74.748610999999926,68.065536000000066],[-74.731948999999872,68.070831000000112],[-74.718613000000005,68.072220000000073],[-74.629990000000021,68.078598000000056],[-74.615279999999984,68.078323000000069],[-74.436661000000015,68.097487999999998],[-74.363892000000021,68.166381999999999],[-74.355834999999956,68.172759999999982],[-74.346953999999926,68.176376000000005],[-74.339447000000007,68.177199999999971],[-74.322509999999909,68.173035000000141],[-74.268889999999999,68.154984000000013],[-74.239440999999999,68.144989000000066],[-74.231673999999941,68.141936999999984],[-74.216399999999965,68.134155000000021],[-74.212509000000011,68.130538999999942],[-74.210830999999985,68.124984999999981],[-74.21556099999998,68.117751999999939]],[[-65.642226999999991,68.159424000000001],[-65.56639100000001,68.152205999999978],[-65.512787000000003,68.15277100000003],[-65.502791999999999,68.151093000000117],[-65.497771999999941,68.14776599999999],[-65.494445999999925,68.142487000000017],[-65.495543999999995,68.128310999999997],[-65.500838999999985,68.121918000000051],[-65.516953000000001,68.113037000000077],[-65.525283999999999,68.109711000000061],[-65.675551999999982,68.096100000000092],[-65.686935000000005,68.095825000000104],[-65.696105999999929,68.098877000000016],[-65.709731999999974,68.106094000000098],[-65.713897999999972,68.112762000000089],[-65.721938999999963,68.164429000000041],[-65.716949,68.175812000000064],[-65.711670000000026,68.180267000000072],[-65.701400999999976,68.181366000000082],[-65.67582699999997,68.179977000000065],[-65.656661999999926,68.175262000000032],[-65.648345999999947,68.168594000000041],[-65.646666999999923,68.163605000000075],[-65.642226999999991,68.159424000000001]],[[-107.47361799999993,68.144714000000079],[-107.48500100000001,68.142487000000017],[-107.50140399999998,68.143600000000049],[-107.55499299999991,68.160537999999974],[-107.55416899999994,68.166091999999992],[-107.54499800000002,68.169983000000059],[-107.5038909999999,68.182480000000055],[-107.49472000000003,68.18664600000011],[-107.48444399999994,68.189697000000137],[-107.46806300000003,68.188582999999994],[-107.46193700000003,68.184142999999949],[-107.46028100000001,68.179153000000099],[-107.45935800000001,68.175629000000015],[-107.45667299999997,68.174423000000047],[-107.45527600000003,68.169144000000074],[-107.45584099999996,68.163605000000075],[-107.46694899999994,68.15026899999998],[-107.47361799999993,68.144714000000079]],[[-104.453056,68.102203000000031],[-104.48277299999995,68.079712000000029],[-104.497772,68.080275999999969],[-104.50334199999992,68.084717000000069],[-104.55304699999999,68.140274000000034],[-104.55610699999994,68.145264000000111],[-104.55695299999996,68.15026899999998],[-104.55387899999999,68.161651999999947],[-104.54666099999997,68.164992999999981],[-104.42639200000002,68.199997000000053],[-104.41555799999998,68.202773999999977],[-104.391953,68.206940000000088],[-104.37721299999998,68.199707000000046],[-104.36860699999994,68.190536000000122],[-104.370003,68.184982000000105],[-104.37416100000002,68.178863999999976],[-104.40499899999992,68.139435000000049],[-104.453056,68.102203000000031]],[[-107.38890100000003,68.172211000000004],[-107.40278599999999,68.171645999999953],[-107.41111799999999,68.17553700000002],[-107.44167299999992,68.196929999999952],[-107.445267,68.201660000000004],[-107.43998699999997,68.208327999999995],[-107.42944299999999,68.211380000000077],[-107.41443599999997,68.211105000000089],[-107.30972300000002,68.209152000000131],[-107.295547,68.20748900000001],[-107.29167200000001,68.202773999999977],[-107.31054699999999,68.196091000000024],[-107.38890100000003,68.172211000000004]],[[-111.83332799999999,68.181931000000077],[-111.84722899999997,68.180817000000104],[-111.860817,68.183594000000028],[-111.86554699999999,68.188034000000016],[-111.83222999999998,68.204987000000131],[-111.81416300000001,68.212494000000049],[-111.79194599999994,68.21775800000006],[-111.77944899999994,68.219437000000028],[-111.764183,68.219437000000028],[-111.75499699999995,68.215820000000122],[-111.75945299999995,68.209152000000131],[-111.76666299999994,68.206375000000037],[-111.79194599999994,68.193588000000034],[-111.81111099999998,68.186920000000043],[-111.83332799999999,68.181931000000077]],[[-98.650283999999999,68.180267000000072],[-98.674438000000009,68.173874000000126],[-98.704453000000001,68.176085999999998],[-98.702788999999996,68.191650000000095],[-98.693328999999949,68.213608000000022],[-98.684433000000013,68.218872000000033],[-98.672226000000023,68.220534999999927],[-98.657226999999978,68.219437000000028],[-98.643065999999976,68.216095000000109],[-98.638610999999969,68.211655000000121],[-98.636672999999917,68.206650000000025],[-98.643065999999976,68.201660000000004],[-98.650283999999999,68.180267000000072]],[[-74.062774999999988,68.151657000000057],[-74.073623999999938,68.150818000000072],[-74.138335999999924,68.170258000000047],[-74.169723999999974,68.195525999999973],[-74.176392000000021,68.204162999999994],[-74.171386999999982,68.208602999999982],[-74.15583799999996,68.217484000000127],[-74.138061999999991,68.225815000000011],[-74.117217999999923,68.232207999999957],[-74.105835000000013,68.235260000000096],[-74.097228999999913,68.236649000000057],[-74.086944999999957,68.235260000000096],[-74.079726999999991,68.232483000000002],[-74.075286999999946,68.227767999999969],[-74.073059000000001,68.223877000000073],[-74.063323999999909,68.203049000000021],[-74.055557000000022,68.172485000000108],[-74.054442999999992,68.159988000000112],[-74.057219999999973,68.154984000000013],[-74.062774999999988,68.151657000000057]],[[-108.59028599999999,68.214431999999988],[-108.63944999999995,68.151382000000012],[-108.6499859999999,68.152481000000023],[-108.65862299999998,68.156097000000045],[-108.67748999999998,68.168869000000086],[-108.67360699999995,68.186371000000122],[-108.67194399999994,68.191085999999984],[-108.63500999999997,68.228592000000106],[-108.62748699999992,68.233597000000145],[-108.60555999999997,68.23692299999999],[-108.56610099999989,68.240540000000124],[-108.55972300000002,68.236099000000024],[-108.59028599999999,68.214431999999988]],[[-109.78388999999999,68.13749700000011],[-109.81166099999996,68.136107999999979],[-109.828056,68.136932000000115],[-109.84137699999997,68.139708999999982],[-109.84999099999999,68.143325999999945],[-109.85665899999998,68.14776599999999],[-109.85417200000001,68.153869999999984],[-109.845551,68.158034999999984],[-109.77194199999997,68.188309000000061],[-109.676941,68.224152000000061],[-109.64417300000002,68.232207999999957],[-109.58889799999997,68.245254999999986],[-109.57749899999988,68.247482000000048],[-109.56806899999998,68.247208000000114],[-109.57055699999995,68.241089000000102],[-109.57695000000001,68.232483000000002],[-109.58194700000001,68.225815000000011],[-109.59416199999993,68.214431999999988],[-109.67388899999997,68.173309000000074],[-109.7625119999999,68.143325999999945],[-109.77250699999991,68.139984000000027],[-109.78388999999999,68.13749700000011]],[[-66.31361400000003,68.14776599999999],[-66.326950000000011,68.147490999999945],[-66.354995999999971,68.153319999999951],[-66.381103999999937,68.158600000000035],[-66.396392999999932,68.161102000000085],[-66.468612999999948,68.171097000000032],[-66.527785999999878,68.177765000000022],[-66.570847000000015,68.181366000000082],[-66.601944000000003,68.182480000000055],[-66.607223999999974,68.217209000000082],[-66.5,68.239700000000084],[-66.299437999999952,68.254440000000045],[-66.221938999999963,68.241089000000102],[-66.256667999999991,68.163605000000075],[-66.269729999999925,68.158600000000035],[-66.301391999999964,68.149154999999951],[-66.31361400000003,68.14776599999999]],[[-96.384170999999924,68.200821000000019],[-96.422775000000001,68.198318000000086],[-96.436935000000005,68.198593000000074],[-96.448607999999922,68.20248400000014],[-96.454726999999934,68.206650000000025],[-96.462783999999999,68.216095000000109],[-96.456664999999987,68.221649000000127],[-96.375,68.254715000000033],[-96.364166000000012,68.258041000000105],[-96.350829999999974,68.258605999999929],[-96.344451999999933,68.254166000000112],[-96.317504999999926,68.231934000000024],[-96.324448000000018,68.221099999999979],[-96.338897999999915,68.212204000000042],[-96.348891999999864,68.208037999999988],[-96.360001000000011,68.204712000000086],[-96.384170999999924,68.200821000000019]],[[-78.571670999999981,68.200272000000098],[-78.655563000000029,68.187759000000028],[-78.662216000000001,68.189147999999989],[-78.660277999999892,68.196365000000128],[-78.643065999999976,68.218323000000055],[-78.607223999999917,68.248322000000087],[-78.593886999999881,68.255554000000018],[-78.581115999999952,68.258880999999974],[-78.550277999999992,68.263610999999969],[-78.548049999999989,68.263046000000145],[-78.545273000000009,68.25],[-78.525283999999999,68.233597000000145],[-78.517226999999934,68.223312000000021],[-78.522506999999905,68.21775800000006],[-78.532226999999978,68.213043000000027],[-78.558883999999978,68.203049000000021],[-78.571670999999981,68.200272000000098]],[[-86.426391999999964,68.069152999999972],[-86.397507000000019,68.021652000000131],[-86.378325999999959,67.993317000000104],[-86.376662999999951,67.988585999999998],[-86.368606999999997,67.954711999999972],[-86.370833999999945,67.939972000000012],[-86.396117999999944,67.859711000000118],[-86.403609999999958,67.848877000000073],[-86.465012000000002,67.786652000000117],[-86.47084000000001,67.78137200000009],[-86.489989999999977,67.770537999999988],[-86.571945000000028,67.728867000000037],[-86.583617999999944,67.725266000000147],[-86.596663999999976,67.72554000000008],[-86.676665999999955,67.731658999999922],[-86.690552000000025,67.733871000000022],[-86.858336999999949,67.79693599999996],[-86.879439999999931,67.810257000000092],[-86.883895999999936,67.814986999999974],[-86.910278000000005,67.8477630000001],[-86.918610000000001,67.86192299999999],[-86.926940999999999,67.876373000000115],[-86.945830999999941,67.909424000000058],[-86.951949999999897,67.923874000000012],[-86.948607999999979,67.928864000000033],[-86.940551999999968,67.934418000000051],[-86.926101999999958,67.931366000000082],[-86.913329999999974,67.931931000000134],[-86.854445999999882,67.954163000000051],[-86.84333799999996,67.958603000000039],[-86.838897999999972,67.986374000000126],[-86.836945000000014,68.001099000000067],[-86.840835999999911,68.010818000000029],[-86.847503999999958,68.020263999999997],[-86.851944000000003,68.024994000000049],[-86.863892000000021,68.029159999999933],[-86.878325999999959,68.032210999999961],[-86.904175000000009,68.030548000000067],[-86.932495000000017,68.035812000000021],[-86.942214999999976,68.040267999999969],[-86.986664000000019,68.061646000000053],[-86.992766999999901,68.066666000000112],[-86.991942999999935,68.071655000000078],[-86.98832699999997,68.081664999999987],[-86.978881999999999,68.096939000000077],[-86.906386999999938,68.180267000000072],[-86.89805599999994,68.185531999999967],[-86.742492999999911,68.282760999999937],[-86.711944999999957,68.299149],[-86.700561999999934,68.303589000000045],[-86.675003000000004,68.306091000000094],[-86.646666999999923,68.301651000000106],[-86.602782999999988,68.291367000000037],[-86.538605000000018,68.270538000000101],[-86.487503000000004,68.24859600000002],[-86.458617999999888,68.235535000000084],[-86.411117999999988,68.208878000000027],[-86.406661999999983,68.204162999999994],[-86.402785999999992,68.194427000000019],[-86.434998000000007,68.162491000000102],[-86.433884000000035,68.098601999999971],[-86.432495000000017,68.088882000000069],[-86.426391999999964,68.069152999999972]],[[-111.71028100000001,68.220534999999927],[-111.72556299999997,68.220260999999994],[-111.74221799999998,68.221099999999979],[-111.75583599999993,68.223602000000028],[-111.76500699999997,68.227203000000088],[-111.77194199999991,68.231369000000029],[-111.77639799999992,68.236099000000024],[-111.77887699999997,68.241089000000102],[-111.77916699999997,68.246933000000126],[-111.77722199999999,68.253052000000139],[-111.77166699999998,68.258880999999974],[-111.71501199999994,68.296936000000073],[-111.70388799999989,68.299422999999933],[-111.52887699999991,68.310806000000127],[-111.51363400000002,68.311096000000134],[-111.49944299999993,68.296936000000073],[-111.50446299999999,68.292480000000126],[-111.52861000000001,68.290543000000071],[-111.55777,68.289429000000098],[-111.58277899999996,68.286101999999971],[-111.60526999999996,68.281096999999932],[-111.61361699999998,68.276657000000114],[-111.62777699999998,68.266663000000108],[-111.633331,68.260818000000029],[-111.63305699999995,68.249709999999993],[-111.63054699999992,68.24443100000002],[-111.63249200000001,68.238312000000008],[-111.63945000000001,68.23332199999993],[-111.64943700000003,68.229980000000012],[-111.67166099999997,68.224701000000039],[-111.696663,68.221375000000023],[-111.71028100000001,68.220534999999927]],[[-75.582779000000016,68.300262000000089],[-75.5625,68.294433999999967],[-75.453888000000006,68.266663000000108],[-75.42971799999998,68.262206999999989],[-75.386672999999917,68.258041000000105],[-75.263061999999934,68.247208000000114],[-75.228881999999942,68.24552900000009],[-75.199158000000011,68.24552900000009],[-75.183059999999955,68.243866000000025],[-75.158614999999941,68.239975000000129],[-75.134734999999864,68.234711000000118],[-75.121933000000013,68.229156000000046],[-75.030563000000029,68.167205999999965],[-75.011948000000018,68.14776599999999],[-75.003066999999987,68.132202000000063],[-75,68.119690000000105],[-75.002227999999945,68.114426000000094],[-75.049163999999962,68.041367000000093],[-75.052490000000034,68.036652000000061],[-75.063323999999966,68.027206000000092],[-75.091675000000009,68.009995000000004],[-75.148055999999997,67.974426000000051],[-75.153609999999901,67.969437000000084],[-75.164443999999946,67.954163000000051],[-75.164443999999946,67.949417000000096],[-75.162780999999939,67.943863000000079],[-75.113891999999964,67.86192299999999],[-75.104445999999996,67.847488000000055],[-75.064162999999951,67.782486000000063],[-75.025008999999955,67.625534000000016],[-75.025283999999999,67.619431000000077],[-75.068892999999889,67.542755000000113],[-75.071944999999971,67.538879000000065],[-75.133620999999948,67.481658999999979],[-75.161117999999988,67.463882000000126],[-75.198607999999979,67.443314000000044],[-75.388061999999934,67.354705999999965],[-75.395843999999954,67.353043000000071],[-75.553603999999893,67.333603000000096],[-75.662506000000008,67.305251999999996],[-75.84445199999999,67.264159999999947],[-75.946105999999929,67.251937999999996],[-76.116652999999928,67.255554000000018],[-76.226943999999946,67.260818000000029],[-76.30860899999999,67.253601000000117],[-76.490829000000019,67.236374000000069],[-76.66361999999998,67.219986000000006],[-76.693053999999961,67.221099999999979],[-76.978057999999976,67.245529000000147],[-77.026672000000019,67.254990000000078],[-77.044723999999917,67.260544000000095],[-77.057219999999916,67.267212000000086],[-77.074448000000018,67.280823000000055],[-77.101395000000025,67.30581699999999],[-77.246947999999975,67.451934999999992],[-77.247222999999963,67.457214000000135],[-77.236937999999952,67.495254999999986],[-77.224441999999954,67.535538000000031],[-77.225829999999974,67.543869000000086],[-77.230285999999978,67.554428000000144],[-77.242217999999923,67.569153000000085],[-77.275008999999955,67.614699999999971],[-77.312209999999993,67.676376000000118],[-77.320847000000015,67.691649999999981],[-77.322509999999909,67.698029000000076],[-77.319167999999991,67.71138000000002],[-77.258346999999958,67.816375999999934],[-77.251953000000015,67.82638500000013],[-77.243332000000009,67.837494000000049],[-77.233062999999959,67.848877000000073],[-77.228333000000021,67.853867000000093],[-77.220551,67.86192299999999],[-77.203888000000006,67.876373000000115],[-76.865554999999972,68.15776100000005],[-76.858886999999925,68.161651999999947],[-76.726105000000018,68.238876000000118],[-76.702498999999932,68.24859600000002],[-76.673888999999974,68.259155000000078],[-76.635009999999909,68.271927000000062],[-76.606948999999929,68.279434000000037],[-76.28195199999999,68.332764000000111],[-76.267226999999934,68.332764000000111],[-76.258346999999901,68.3316650000001],[-76.251953000000015,68.328598],[-76.25,68.323044000000039],[-76.25306699999993,68.313599000000124],[-76.249161000000015,68.307480000000112],[-76.235824999999977,68.303314],[-76.221663999999976,68.301376000000062],[-76.116104000000007,68.296646000000067],[-76.083327999999995,68.295257999999933],[-76.060546999999985,68.296936000000073],[-76.052779999999984,68.298598999999967],[-76.032227000000034,68.304703000000018],[-76.000564999999995,68.316939999999988],[-75.985001000000011,68.324432000000115],[-75.966399999999965,68.331100000000106],[-75.954178000000013,68.333878000000084],[-75.930831999999953,68.336929000000112],[-75.917495999999915,68.338318000000072],[-75.887511999999958,68.339705999999978],[-75.818068999999866,68.336655000000007],[-75.756667999999991,68.332489000000066],[-75.726105000000018,68.33027600000014],[-75.695540999999878,68.326935000000105],[-75.667496000000028,68.322768999999994],[-75.62249799999995,68.313034000000073],[-75.602492999999868,68.307480000000112],[-75.582779000000016,68.300262000000089]],[[-79.020553999999947,68.169144000000074],[-79.032500999999911,68.165268000000026],[-79.075012000000015,68.168320000000108],[-79.089721999999938,68.170258000000047],[-79.101669000000015,68.175262000000032],[-79.171386999999868,68.205261000000064],[-79.176940999999943,68.209427000000119],[-79.179992999999968,68.215545999999961],[-79.188323999999966,68.247208000000114],[-79.191100999999946,68.319442999999978],[-79.151671999999962,68.346649000000014],[-79.141952999999944,68.34887700000013],[-79.125548999999978,68.350266000000147],[-79.099441999999954,68.348602000000142],[-79.044997999999964,68.343322999999941],[-78.929992999999911,68.338882000000012],[-78.826110999999969,68.295532000000037],[-78.809998000000007,68.287490999999989],[-78.804717999999923,68.283051],[-78.801666000000012,68.279160000000104],[-78.80221599999993,68.272491000000002],[-78.805266999999958,68.266663000000108],[-78.815551999999911,68.255554000000018],[-78.823333999999932,68.250548999999978],[-78.841948999999886,68.240540000000124],[-79.020553999999947,68.169144000000074]],[[-100.07472200000001,68.349716000000114],[-100.08640299999996,68.296097000000088],[-100.09166700000003,68.284987999999998],[-100.09944200000001,68.278595000000053],[-100.11221299999994,68.276382000000069],[-100.12832600000002,68.278320000000065],[-100.14028899999994,68.281661999999983],[-100.16443600000002,68.288589000000059],[-100.20056199999999,68.299149],[-100.22693600000002,68.316086000000041],[-100.23082699999992,68.319717000000082],[-100.21556099999998,68.318603999999993],[-100.20249899999988,68.319717000000082],[-100.19110099999995,68.322220000000073],[-100.1183319999999,68.347214000000008],[-100.11000100000001,68.352478000000019],[-100.08583099999998,68.368866000000082],[-100.07668299999989,68.359711000000004],[-100.07444799999996,68.354980000000069],[-100.07472200000001,68.349716000000114]],[[-82.05999799999995,68.306091000000094],[-82.072509999999966,68.303040000000067],[-82.271117999999944,68.338593000000117],[-82.312774999999988,68.349151999999947],[-82.326675000000023,68.353591999999992],[-82.33805799999999,68.358322000000044],[-82.344451999999876,68.362762000000032],[-82.345550999999944,68.36775200000011],[-82.333327999999995,68.371917999999994],[-82.230559999999969,68.385543999999982],[-82.216949,68.384155000000135],[-82.135558999999944,68.372756999999979],[-82.012512000000015,68.350815000000068],[-82.001113999999973,68.34637500000008],[-81.99722300000002,68.34137000000004],[-82.010009999999909,68.332764000000111],[-82.05999799999995,68.306091000000094]],[[-111.11444099999994,68.405823000000055],[-111.12832600000002,68.404984000000127],[-111.13751199999996,68.408599999999979],[-111.141953,68.413315000000011],[-111.14890300000002,68.428863999999919],[-111.14917000000003,68.439972000000125],[-111.141953,68.444976999999994],[-111.13054699999992,68.447479000000044],[-111.11527999999998,68.447754000000089],[-111.09861799999999,68.446930000000123],[-111.08249699999993,68.44470200000012],[-111.07611099999991,68.436919999999986],[-111.08416699999998,68.424988000000042],[-111.10582699999998,68.409988000000055],[-111.11444099999994,68.405823000000055]],[[-99.045273000000009,68.423874000000069],[-99.054992999999911,68.408324999999991],[-99.147781000000009,68.442200000000071],[-99.154723999999987,68.446365000000071],[-99.159163999999919,68.451096000000007],[-99.149733999999853,68.455261000000007],[-99.12110899999999,68.454987000000074],[-99.105269999999962,68.453048999999965],[-99.087219000000005,68.449416999999983],[-99.045273000000009,68.423874000000069]],[[-74.162216000000001,68.246093999999971],[-74.190552000000025,68.242477000000008],[-74.20777899999996,68.243317000000047],[-74.221114999999998,68.247208000000114],[-74.228881999999942,68.250823999999966],[-74.244155999999862,68.261383000000023],[-74.260559000000001,68.273314999999968],[-74.388610999999969,68.398330999999985],[-74.399733999999967,68.42025799999999],[-74.402221999999938,68.427765000000136],[-74.400283999999999,68.43414300000012],[-74.393065999999919,68.445251000000098],[-74.376937999999882,68.459717000000126],[-74.360275000000001,68.463882000000126],[-74.340835999999911,68.462493999999992],[-74.307769999999948,68.461655000000064],[-74.293883999999991,68.460541000000092],[-74.279448999999943,68.458328000000108],[-74.269729999999868,68.454712000000029],[-74.217498999999862,68.426086000000112],[-74.198043999999982,68.414992999999924],[-74.079452999999944,68.338593000000117],[-74.074722000000008,68.330825999999945],[-74.077498999999989,68.325546000000088],[-74.144454999999937,68.254440000000045],[-74.149733999999853,68.25],[-74.162216000000001,68.246093999999971]],[[-100.71056399999998,68.402480999999966],[-100.72416699999997,68.401657],[-100.78943599999997,68.409988000000055],[-100.88971699999996,68.45277400000009],[-100.88027999999997,68.457214000000135],[-100.84889199999992,68.464996000000099],[-100.83029199999999,68.468596999999932],[-100.79332699999986,68.468872000000147],[-100.78611799999999,68.464706000000092],[-100.71806300000003,68.411926000000051],[-100.71305799999999,68.407486000000006],[-100.71056399999998,68.402480999999966]],[[-110.86250299999995,68.474152000000061],[-110.92610199999996,68.465820000000065],[-111.05444299999999,68.469711000000132],[-111.08833299999998,68.473311999999964],[-111.09750400000001,68.477203000000031],[-111.09750400000001,68.482757999999933],[-111.09249899999998,68.487198000000149],[-111.08528099999995,68.492203000000018],[-111.07528699999995,68.495529000000033],[-110.984734,68.515549000000078],[-110.82167099999998,68.54803499999997],[-110.80332899999996,68.546371000000136],[-110.79222099999998,68.543319999999937],[-110.76390100000003,68.533600000000035],[-110.74582700000002,68.526382000000069],[-110.69833399999999,68.491364000000033],[-110.69611399999991,68.486374000000012],[-110.70889299999988,68.484711000000061],[-110.72833300000002,68.484421000000054],[-110.79499799999996,68.479980000000126],[-110.86250299999995,68.474152000000061]],[[-110.58693700000003,68.524155000000007],[-110.625,68.519440000000145],[-110.6600039999999,68.521927000000005],[-110.72112299999998,68.531097000000102],[-110.73249800000002,68.534149000000014],[-110.74610899999999,68.542480000000069],[-110.75974300000001,68.55664100000007],[-110.76194800000002,68.561645999999939],[-110.75473,68.566665999999998],[-110.63861099999997,68.569443000000092],[-110.62832600000002,68.559143000000006],[-110.52971600000001,68.54803499999997],[-110.520554,68.544144000000074],[-110.51834100000002,68.539154000000053],[-110.52722199999988,68.534987999999942],[-110.53859699999992,68.532486000000063],[-110.58693700000003,68.524155000000007]],[[-104.54527300000001,68.396102999999982],[-104.58667000000003,68.394440000000088],[-104.64666699999998,68.395827999999995],[-104.69332900000001,68.402480999999966],[-104.708618,68.40525800000006],[-104.75974299999996,68.418045000000063],[-104.88305699999995,68.449996999999996],[-104.91915899999992,68.459991000000059],[-104.9375,68.46748400000007],[-105.08167999999995,68.546371000000136],[-105.04415899999998,68.562759000000028],[-105.024719,68.570540999999992],[-105.01390100000003,68.573318000000086],[-104.98999000000003,68.57748400000014],[-104.93859900000001,68.583327999999995],[-104.91000399999996,68.583878000000027],[-104.76167299999997,68.582764000000054],[-104.74610899999993,68.582214000000022],[-104.71193699999998,68.578597999999943],[-104.682503,68.57388300000008],[-104.55332899999996,68.537201000000096],[-104.52999899999992,68.530548000000124],[-104.50917099999992,68.523315000000139],[-104.48277299999995,68.511658000000011],[-104.46916199999998,68.503326000000015],[-104.46362299999998,68.498871000000008],[-104.44915799999995,68.485260000000039],[-104.44055200000003,68.476089000000059],[-104.42777999999987,68.456940000000031],[-104.42527799999999,68.441360000000032],[-104.426941,68.435806000000014],[-104.43083199999995,68.429703000000075],[-104.43499799999995,68.423599000000024],[-104.44138299999997,68.417206000000078],[-104.45111099999991,68.413315000000011],[-104.48332199999999,68.404709000000082],[-104.51917299999997,68.398330999999985],[-104.54527300000001,68.396102999999982]],[[-105.139183,68.53637700000013],[-105.12609900000001,68.533325000000048],[-105.11305199999998,68.534424000000001],[-105.10109699999998,68.536652000000004],[-105.08693699999998,68.536926000000108],[-105.07861300000002,68.533051000000114],[-105.06639099999995,68.519149999999968],[-105.05972300000002,68.509430000000066],[-105.05888400000003,68.504166000000055],[-105.06833599999999,68.500274999999988],[-105.08612099999999,68.502777000000037],[-105.11193800000001,68.508881000000088],[-105.23361199999994,68.541091999999992],[-105.24416400000001,68.544708000000071],[-105.29110700000001,68.576935000000049],[-105.29222099999998,68.582214000000022],[-105.28138699999994,68.584991000000116],[-105.25611900000001,68.588318000000015],[-105.24305700000002,68.589705999999978],[-105.228882,68.589980999999966],[-105.21112099999993,68.587769000000094],[-105.18582200000003,68.580826000000116],[-105.18611099999998,68.576660000000004],[-105.18167099999994,68.566665999999998],[-105.17832900000002,68.561645999999939],[-105.139183,68.53637700000013]],[[-113.78611799999999,68.582764000000054],[-113.80166599999995,68.58248900000001],[-113.85249299999998,68.584152000000131],[-113.88945000000001,68.586929000000055],[-113.93138099999999,68.593872000000033],[-113.95259099999987,68.597389000000078],[-113.95966299999998,68.603195000000142],[-113.96611000000001,68.611099000000081],[-113.95667300000002,68.614699999999914],[-113.94248999999996,68.615814000000114],[-113.91388699999999,68.615814000000114],[-113.89972699999998,68.616928000000087],[-113.83693700000003,68.608871000000079],[-113.80027799999999,68.606093999999985],[-113.78611799999999,68.60386699999998],[-113.77667200000002,68.60026600000009],[-113.76194800000002,68.592209000000082],[-113.761124,68.586655000000121],[-113.77223199999997,68.583878000000027],[-113.78611799999999,68.582764000000054]],[[-100.74054699999999,68.596375000000023],[-100.78388999999993,68.594437000000084],[-100.86805699999991,68.603043000000014],[-100.88249200000001,68.611374000000069],[-100.87666300000001,68.616379000000109],[-100.86527999999998,68.619141000000013],[-100.85305800000003,68.620818999999983],[-100.83972199999999,68.62164300000012],[-100.81388900000002,68.619141000000013],[-100.75556899999992,68.607758000000047],[-100.74082899999996,68.604706000000078],[-100.73361199999994,68.600540000000024],[-100.74054699999999,68.596375000000023]],[[-78.468886999999995,68.563873000000001],[-78.474441999999897,68.55831900000004],[-78.482223999999917,68.553313999999943],[-78.503066999999987,68.545532000000037],[-78.530837999999903,68.541091999999992],[-78.545836999999949,68.540817000000004],[-78.562209999999993,68.541930999999977],[-78.599227999999925,68.550644000000034],[-78.614554999999939,68.553650000000061],[-78.638901000000033,68.558028999999976],[-78.654723999999987,68.558594000000028],[-78.668883999999991,68.554153000000099],[-78.724715999999944,68.521927000000005],[-78.715835999999911,68.515823000000012],[-78.691375999999991,68.509155000000021],[-78.674438000000009,68.509720000000073],[-78.653335999999967,68.512496999999939],[-78.636123999999938,68.513046000000088],[-78.621947999999975,68.509720000000073],[-78.617615000000001,68.507217000000082],[-78.610275000000001,68.502213000000097],[-78.610824999999977,68.498032000000023],[-78.618056999999965,68.492203000000018],[-78.705565999999976,68.451660000000118],[-78.716110000000015,68.447754000000089],[-78.743057000000022,68.442748999999992],[-78.776672000000019,68.439147999999989],[-78.795272999999952,68.438583000000108],[-78.813048999999921,68.438873000000115],[-78.828063999999983,68.440811000000053],[-78.861663999999962,68.446365000000071],[-78.876389000000017,68.450546000000145],[-78.959732000000031,68.474700999999982],[-78.946105999999986,68.508041000000048],[-78.943328999999949,68.511932000000115],[-78.936935000000005,68.516388000000006],[-78.822784000000013,68.547759999999982],[-78.809432999999956,68.550537000000077],[-78.791672000000005,68.550262000000032],[-78.759170999999981,68.54803499999997],[-78.743880999999988,68.546097000000032],[-78.723891999999978,68.547484999999938],[-78.704177999999899,68.554703000000131],[-78.698883000000023,68.558028999999976],[-78.688889000000017,68.564697000000137],[-78.670837000000006,68.578872999999987],[-78.668609999999944,68.583327999999995],[-78.672774999999945,68.58859300000006],[-78.680557000000022,68.593323000000112],[-78.693054000000018,68.596939000000134],[-78.705841000000021,68.600540000000024],[-78.784163999999976,68.618590999999981],[-78.851395000000025,68.634155000000078],[-78.894454999999994,68.646378000000141],[-78.89805599999994,68.64888000000002],[-78.889724999999942,68.652771000000087],[-78.863892000000021,68.659714000000122],[-78.837783999999886,68.661102000000028],[-78.720001000000025,68.657211000000132],[-78.689437999999939,68.653320000000065],[-78.495834000000002,68.627762000000132],[-78.481948999999929,68.624985000000038],[-78.469451999999933,68.621093999999971],[-78.460555999999997,68.617203000000075],[-78.467223999999987,68.569153000000085],[-78.468886999999995,68.563873000000001]],[[-74.768889999999999,68.673874000000012],[-74.756667999999991,68.672760000000039],[-74.65583799999996,68.65498400000007],[-74.648346000000004,68.652206000000092],[-74.522231999999974,68.565262000000018],[-74.518340999999907,68.558594000000028],[-74.531951999999876,68.552765000000022],[-74.551392000000021,68.550537000000077],[-74.586944999999957,68.548874000000126],[-74.726668999999902,68.556091000000038],[-74.742767000000015,68.557480000000055],[-74.807219999999916,68.563599000000067],[-74.821945000000028,68.56581099999994],[-74.833892999999989,68.569717000000026],[-74.84333799999996,68.575821000000076],[-74.870543999999995,68.598877000000073],[-74.883056999999894,68.61303700000002],[-74.890288999999996,68.624985000000038],[-74.805832000000009,68.668868999999972],[-74.796111999999994,68.671646000000067],[-74.787216000000001,68.673035000000027],[-74.779998999999975,68.673874000000012],[-74.77194199999991,68.673035000000027],[-74.768889999999999,68.673874000000012]],[[-114.04723399999995,68.613602000000014],[-114.06139399999995,68.612488000000042],[-114.075287,68.614699999999914],[-114.10193600000002,68.625809000000004],[-114.12666299999995,68.637206999999989],[-114.14890299999996,68.649428999999998],[-114.16166699999991,68.658035000000098],[-114.18998699999986,68.680266999999958],[-114.18639400000001,68.683594000000085],[-114.15387699999991,68.679703000000018],[-114.141953,68.676925999999924],[-114.14111299999996,68.671097000000088],[-114.05638099999987,68.635818000000029],[-114.04888900000003,68.631927000000132],[-114.04167200000001,68.627762000000132],[-114.03778099999994,68.616928000000087],[-114.04723399999995,68.613602000000014]],[[-74.811385999999914,68.320541000000048],[-74.817504999999926,68.318603999999993],[-75,68.333344000000125],[-75.002227999999945,68.333603000000039],[-75.008346999999958,68.337204000000099],[-75.010284000000013,68.346649000000014],[-75.005004999999926,68.353591999999992],[-75.002791999999999,68.35914600000001],[-75.00140399999998,68.366378999999995],[-75.015014999999948,68.379700000000128],[-75.029174999999952,68.390549000000021],[-75.037505999999951,68.394714000000022],[-75.081679999999892,68.404984000000127],[-75.10943599999996,68.406937000000084],[-75.138061999999991,68.409988000000055],[-75.153060999999866,68.413040000000024],[-75.241378999999995,68.436371000000065],[-75.263900999999919,68.444976999999994],[-75.294723999999974,68.457763999999997],[-75.369995000000017,68.489700000000028],[-75.396118000000001,68.503601000000003],[-75.416397000000018,68.518051000000128],[-75.416397000000018,68.524429000000112],[-75.396956999999873,68.611099000000081],[-75.389175000000023,68.62303200000008],[-75.307770000000005,68.694702000000063],[-75.299727999999959,68.700546000000088],[-75.280562999999972,68.709717000000069],[-75.254729999999881,68.717484000000013],[-75.239440999999999,68.718048000000124],[-75.014450000000011,68.677200000000028],[-75,68.672241000000099],[-74.942764000000011,68.576096000000064],[-74.938323999999909,68.571655000000135],[-74.931380999999931,68.566665999999998],[-74.836945000000014,68.511658000000011],[-74.801940999999999,68.501099000000124],[-74.785004000000015,68.494705000000067],[-74.780288999999982,68.490265000000079],[-74.772232000000031,68.479980000000126],[-74.768341000000021,68.473311999999964],[-74.776397999999915,68.410537999999917],[-74.811385999999914,68.320541000000048]],[[-84.808043999999938,68.763885000000016],[-84.821395999999879,68.763611000000083],[-84.835830999999985,68.766662999999994],[-84.939163000000008,68.793594000000041],[-84.907776000000013,68.803589000000102],[-84.895279000000016,68.80720500000001],[-84.882492000000013,68.809707999999944],[-84.855835000000013,68.810806000000014],[-84.841385000000002,68.807479999999998],[-84.837219000000005,68.802765000000136],[-84.837783999999999,68.79693600000013],[-84.801665999999955,68.769150000000081],[-84.808043999999938,68.763885000000016]],[[-68.110275000000001,68.78276100000005],[-67.807494999999903,68.733597000000032],[-67.781676999999945,68.729155999999932],[-67.679169000000002,68.711379999999963],[-67.668335000000013,68.707214000000079],[-67.661391999999921,68.701935000000105],[-67.662216000000001,68.698317999999972],[-67.676666000000012,68.695816000000093],[-67.850554999999929,68.697754000000032],[-67.869720000000029,68.69859299999996],[-67.897781000000009,68.704987000000017],[-67.918609999999887,68.712493999999936],[-67.951400999999976,68.721649000000014],[-68.039169000000015,68.738037000000077],[-68.188323999999909,68.763885000000016],[-68.306106999999997,68.779434000000094],[-68.323623999999995,68.779984000000127],[-68.339995999999985,68.778594999999939],[-68.352492999999981,68.775543000000027],[-68.367492999999854,68.774994000000106],[-68.433608999999933,68.781097000000045],[-68.451400999999976,68.783875000000023],[-68.457779000000016,68.785812000000078],[-68.459441999999967,68.791092000000106],[-68.455275999999969,68.802199999999914],[-68.450835999999867,68.80720500000001],[-68.439163000000008,68.812485000000038],[-68.428328999999962,68.813034000000016],[-68.418899999999894,68.810257000000092],[-68.375548999999921,68.808029000000147],[-68.241942999999935,68.798874000000069],[-68.224716000000001,68.797485000000108],[-68.110275000000001,68.78276100000005]],[[-101.83112299999999,68.566940000000102],[-101.84555099999989,68.566665999999998],[-101.86028299999998,68.569717000000026],[-101.88527699999986,68.576385000000016],[-101.90527299999991,68.583878000000027],[-102.00583599999999,68.613875999999948],[-102.112213,68.62359600000002],[-102.23000300000001,68.64027399999992],[-102.254997,68.646942000000081],[-102.31639100000001,68.672211000000061],[-102.3125,68.688583000000051],[-102.21665999999999,68.718322999999998],[-102.14862099999999,68.734984999999938],[-102.13639799999993,68.736923000000104],[-102.11389200000002,68.742477000000065],[-102.09249899999998,68.748871000000122],[-102.073059,68.756943000000092],[-102.05638099999993,68.768051000000071],[-102.05166600000001,68.773880000000077],[-102.04943799999995,68.779434000000094],[-102.04972799999996,68.784714000000008],[-102.05555699999996,68.794434000000081],[-102.05555699999996,68.799713000000054],[-102.05082700000003,68.805542000000059],[-102.04276999999996,68.811096000000077],[-102.02306399999992,68.819443000000035],[-101.99833699999999,68.823044000000095],[-101.98500099999995,68.824158000000068],[-101.95612299999999,68.824158000000068],[-101.93943799999994,68.822494999999947],[-101.9119419999999,68.816086000000098],[-101.77861000000001,68.783875000000023],[-101.69387799999993,68.768051000000071],[-101.69999699999994,68.737762000000032],[-101.68055699999996,68.672484999999995],[-101.68250299999994,68.661652000000061],[-101.701683,68.637772000000041],[-101.83112299999999,68.566940000000102]],[[-102.60082999999997,68.813309000000004],[-102.60749799999996,68.80914300000012],[-102.69695299999995,68.813034000000016],[-102.70722999999992,68.816666000000112],[-102.68888900000002,68.833328000000108],[-102.67859599999997,68.836928999999998],[-102.64055599999995,68.841934000000037],[-102.61277799999993,68.84304800000001],[-102.59889199999986,68.841095000000053],[-102.60221899999999,68.834152000000074],[-102.60082999999997,68.813309000000004]],[[-89.944442999999978,68.662200999999982],[-89.956389999999942,68.661652000000061],[-89.974166999999966,68.705826000000002],[-89.999160999999958,68.730819999999937],[-90.017226999999934,68.740540000000067],[-90.022507000000019,68.74581900000004],[-90.027495999999985,68.752486999999974],[-90.027785999999992,68.758606000000043],[-90.025557999999933,68.771927000000005],[-90.00306699999993,68.806641000000013],[-89.958618000000001,68.838042999999971],[-89.944442999999978,68.847488000000055],[-89.931945999999982,68.852203000000088],[-89.921935999999903,68.853867000000093],[-89.914443999999946,68.853043000000127],[-89.781677000000002,68.766662999999994],[-89.784163999999919,68.760818000000086],[-89.791381999999999,68.752486999999974],[-89.808884000000035,68.733322000000044],[-89.857498000000021,68.700546000000088],[-89.877486999999917,68.690810999999997],[-89.944442999999978,68.662200999999982]],[[-114.35082999999997,68.871643000000063],[-114.37917299999992,68.86943100000002],[-114.39639299999999,68.869705000000124],[-114.429169,68.87359600000002],[-114.45333900000003,68.879425000000026],[-114.46305799999999,68.882751000000042],[-114.468613,68.887206999999989],[-114.47165699999999,68.892487000000017],[-114.46056399999998,68.895264000000111],[-114.44444299999998,68.896103000000096],[-114.424713,68.896942000000024],[-114.37609899999995,68.893600000000106],[-114.34084300000001,68.890549000000078],[-114.32888800000001,68.887496999999996],[-114.32333399999999,68.883041000000048],[-114.32861299999996,68.87692300000009],[-114.33805799999993,68.87359600000002],[-114.35082999999997,68.871643000000063]],[[-67.847777999999948,68.851928999999984],[-67.863891999999964,68.849425999999994],[-67.883056999999951,68.849990999999989],[-67.897232000000031,68.853043000000127],[-67.908051,68.857208000000128],[-67.956389999999942,68.915268000000026],[-67.96055599999994,68.922484999999995],[-67.96055599999994,68.929977000000065],[-67.954726999999934,68.935806000000127],[-67.946654999999964,68.940810999999997],[-67.938048999999978,68.944427000000019],[-67.923889000000031,68.94859300000013],[-67.892226999999991,68.951660000000004],[-67.876388999999961,68.949417000000096],[-67.869445999999982,68.944138000000066],[-67.83944699999995,68.911926000000108],[-67.831389999999999,68.875809000000118],[-67.833068999999909,68.861374000000012],[-67.837509000000011,68.856368999999972],[-67.847777999999948,68.851928999999984]],[[-85.341675000000009,68.983596999999975],[-85.351669000000015,68.981094000000041],[-85.379165999999941,68.981934000000081],[-85.407227000000034,68.984420999999941],[-85.437209999999993,68.991928000000087],[-85.446944999999971,68.996368000000075],[-85.451400999999976,69.001099000000011],[-85.453063999999983,69.005829000000062],[-85.44387799999987,69.010269000000108],[-85.418883999999991,69.009430000000123],[-85.369995000000017,69.001937999999996],[-85.354720999999927,68.997757000000092],[-85.342223999999931,68.993317000000104],[-85.337783999999999,68.988585999999941],[-85.341675000000009,68.983596999999975]],[[-89.90834000000001,68.917755000000113],[-89.915008999999998,68.913315000000125],[-89.952498999999875,68.926376000000062],[-89.978332999999964,68.933867999999961],[-90,68.937575999999979],[-90.03195199999999,68.943039000000113],[-90.075561999999991,68.948028999999963],[-90.070557000000008,68.981934000000081],[-89.946380999999917,69.010269000000108],[-89.93360899999999,69.011658000000068],[-89.920837000000006,69.010269000000108],[-89.914169000000015,69.006943000000035],[-89.910277999999948,69.003052000000139],[-89.906661999999983,68.922484999999995],[-89.90834000000001,68.917755000000113]],[[-100.17555199999987,68.794708000000014],[-100.22083999999995,68.764435000000049],[-100.25446299999999,68.769150000000081],[-100.26917300000002,68.772217000000012],[-100.28555299999994,68.774155000000121],[-100.29915599999998,68.773315000000082],[-100.30860899999999,68.768875000000037],[-100.31639100000001,68.76249700000011],[-100.35749799999996,68.71527100000003],[-100.36694299999994,68.710541000000035],[-100.40722699999998,68.708038000000045],[-100.423607,68.709991000000002],[-100.61332700000003,68.758040999999992],[-100.62304699999999,68.761932000000058],[-100.62805199999997,68.766388000000006],[-100.632767,68.77609300000006],[-100.62581599999999,68.912490999999932],[-100.59999099999999,69.000548999999978],[-100.56111099999993,69.025818000000015],[-100.54360999999994,69.036652000000061],[-100.52916699999997,69.036652000000061],[-100.497772,69.034714000000122],[-100.41610700000001,69.026382000000126],[-100.38110399999994,69.020828000000108],[-100.35082999999997,69.014709000000096],[-100.34111000000001,69.010818000000029],[-100.33361799999994,69.006653000000028],[-100.32861300000002,69.00221300000004],[-100.32362399999994,68.996093999999971],[-100.32888800000001,68.989975000000129],[-100.33168000000001,68.984420999999941],[-100.33168000000001,68.979431000000091],[-100.326683,68.974701000000039],[-100.31276700000001,68.965820000000122],[-100.23889200000002,68.924149],[-100.22888199999994,68.920258000000103],[-100.21665999999988,68.916930999999977],[-100.20361300000002,68.915543000000071],[-100.16027799999995,68.915268000000026],[-100.14362299999993,68.913315000000125],[-100.13110399999999,68.909987999999998],[-100.12638899999996,68.905548000000124],[-100.17194399999994,68.799423000000047],[-100.17555199999987,68.794708000000014]],[[-85.119445999999925,69.014709000000096],[-85.132216999999855,69.013045999999974],[-85.166107000000011,69.031096999999988],[-85.170273000000009,69.035812000000021],[-85.155562999999972,69.056090999999981],[-85.14555399999989,69.058319000000097],[-85.095551,69.048035000000084],[-85.068343999999968,69.041367000000093],[-85.061385999999914,69.036652000000061],[-85.075835999999924,69.031096999999988],[-85.119445999999925,69.014709000000096]],[[-85.265288999999996,69.072495000000117],[-85.343886999999938,69.06303400000013],[-85.357773000000009,69.063598999999954],[-85.373046999999929,69.067763999999954],[-85.392776000000026,69.076660000000118],[-85.397232000000031,69.081374999999923],[-85.398894999999982,69.086104999999975],[-85.392501999999979,69.09137000000004],[-85.380279999999914,69.095825000000048],[-85.301392000000021,69.104155999999989],[-85.287780999999882,69.104706000000022],[-85.258895999999993,69.100266000000147],[-85.248885999999914,69.095825000000048],[-85.241942999999992,69.09137000000004],[-85.245543999999995,69.086104999999975],[-85.246658000000025,69.081374999999923],[-85.253066999999987,69.07609599999995],[-85.265288999999996,69.072495000000117]],[[-99.999434999999949,68.943588000000034],[-100.006958,68.939423000000033],[-100.021118,68.939696999999967],[-100.03778099999988,68.941360000000088],[-100.12000299999994,68.950821000000076],[-100.16166699999997,68.961380000000133],[-100.18138099999999,68.968872000000033],[-100.19860799999998,68.976929000000041],[-100.20612299999988,68.981094000000041],[-100.23693800000001,69.008605999999986],[-100.25666799999999,69.026656999999943],[-100.25890399999992,69.031661999999983],[-100.25862099999995,69.041931000000034],[-100.23693800000001,69.081374999999923],[-100.23194899999993,69.087203999999986],[-100.21333300000003,69.097214000000065],[-100.12970699999994,69.130264000000125],[-100.09555099999994,69.117477000000122],[-100.05304699999999,69.102478000000019],[-100.03333299999991,69.094711000000075],[-100.02834299999995,69.090271000000087],[-99.978881999999999,69.01388500000013],[-99.976943999999946,69.003876000000105],[-99.999434999999949,68.943588000000034]],[[-90.124709999999993,69.04942299999999],[-90.12721299999987,69.044982999999945],[-90.138061999999991,69.04525799999999],[-90.231948999999986,69.065536000000009],[-90.247498000000007,69.070267000000115],[-90.279175000000009,69.098328000000038],[-90.276397999999858,69.125809000000061],[-90.263335999999924,69.141936999999928],[-90.262511999999958,69.142761000000064],[-90.253890999999953,69.142761000000064],[-90.147231999999974,69.103591999999992],[-90.125,69.055542000000003],[-90.124709999999993,69.04942299999999]],[[-101.66416900000002,69.083603000000096],[-101.67749000000003,69.082764000000111],[-101.69027699999998,69.086104999999975],[-101.69554099999993,69.090546000000074],[-101.69833399999993,69.095261000000107],[-101.71806300000003,69.178588999999931],[-101.71584300000001,69.189147999999989],[-101.71112099999993,69.195251000000098],[-101.70361300000002,69.201660000000004],[-101.695267,69.206940000000031],[-101.68443300000001,69.210815000000025],[-101.65834000000001,69.213608000000022],[-101.60166899999996,69.215546000000131],[-101.55860899999999,69.216660000000104],[-101.53527799999995,69.209427000000119],[-101.5202789999999,69.197479000000101],[-101.497772,69.170258000000047],[-101.49500299999994,69.165543000000014],[-101.49500299999994,69.160262999999929],[-101.49999999999994,69.154434000000094],[-101.55555699999991,69.105255000000113],[-101.56360599999999,69.099990999999989],[-101.65139799999997,69.085541000000035],[-101.66416900000002,69.083603000000096]],[[-90.512512000000015,69.20248400000014],[-90.575561999999991,69.198593000000074],[-90.613327000000027,69.207763999999997],[-90.777221999999995,69.272491000000002],[-90.778609999999901,69.317215000000147],[-90.775832999999977,69.32998699999996],[-90.762512000000015,69.345534999999984],[-90.757232999999985,69.349426000000051],[-90.740829000000019,69.357483000000059],[-90.692215000000033,69.37164300000012],[-90.67332499999992,69.373871000000065],[-90.655272999999966,69.374695000000031],[-90.638610999999969,69.373871000000065],[-90.608046999999999,69.36970500000001],[-90.595001000000025,69.365264999999965],[-90.582503999999972,69.359711000000004],[-90.559433000000013,69.347214000000008],[-90.548614999999984,69.339981000000023],[-90.47193900000002,69.281097000000102],[-90.460830999999928,69.267487000000017],[-90.455565999999976,69.234711000000118],[-90.454452999999887,69.226379000000122],[-90.457503999999972,69.222763000000043],[-90.512512000000015,69.20248400000014]],[[-78.412215999999887,69.379700000000128],[-78.396392999999932,69.377761999999962],[-78.338608000000022,69.3808140000001],[-78.305832000000009,69.377761999999962],[-78.291381999999999,69.374985000000095],[-78.279723999999987,69.370255000000043],[-78.270844000000011,69.364150999999993],[-78.211394999999925,69.299987999999985],[-78.210830999999985,69.294434000000138],[-78.214447000000007,69.288315000000125],[-78.318344000000025,69.238312000000008],[-78.396118000000001,69.210541000000092],[-78.472504000000015,69.191360000000032],[-78.551392000000021,69.089157000000057],[-78.556655999999919,69.083603000000096],[-78.572234999999921,69.073317999999972],[-78.601943999999946,69.066086000000041],[-78.62777699999998,69.058593999999914],[-78.707229999999981,69.014709000000096],[-78.715011999999945,69.009720000000129],[-78.718062999999972,69.003601000000117],[-78.71665999999999,68.99664300000012],[-78.712783999999999,68.984985000000108],[-78.716110000000015,68.979156000000103],[-78.725280999999995,68.968872000000033],[-78.735000999999954,68.963608000000079],[-78.830291999999929,68.91304000000008],[-78.840285999999935,68.908600000000092],[-78.867492999999968,68.900543000000084],[-78.934433000000013,68.888596000000121],[-78.978881999999999,68.882477000000108],[-79.033614999999998,68.877197000000024],[-79.095275999999956,68.872757000000036],[-79.185271999999941,68.853317000000061],[-79.194152999999972,68.849425999999994],[-79.197219999999902,68.839157000000114],[-79.204726999999991,68.833878000000141],[-79.216949,68.829987000000074],[-79.238892000000021,68.827484000000084],[-79.287216000000001,68.83137499999998],[-79.353332999999964,68.844147000000021],[-79.366103999999893,68.847763000000043],[-79.386948000000018,68.856093999999985],[-79.392501999999865,68.860535000000084],[-79.396392999999932,68.864990000000091],[-79.400283999999999,68.871918000000051],[-79.402221999999938,68.923598999999967],[-79.379439999999931,68.931656000000089],[-79.353881999999999,68.943863000000079],[-79.330565999999976,68.958327999999995],[-79.309432999999956,68.973602000000085],[-79.303878999999938,68.978317000000118],[-79.292769999999962,68.995818999999983],[-79.283065999999963,69.012772000000041],[-79.238892000000021,69.066376000000048],[-79.227218999999991,69.076385000000073],[-79.216949,69.081100000000106],[-79.146117999999944,69.093597000000102],[-79.049438000000009,69.102203000000031],[-78.985824999999977,69.099990999999989],[-78.974441999999954,69.100266000000147],[-78.960280999999952,69.102478000000019],[-78.864165999999955,69.141098],[-78.855834999999956,69.145537999999988],[-78.749160999999901,69.261107999999979],[-78.721938999999963,69.310532000000023],[-78.726668999999902,69.318603999999993],[-78.724715999999944,69.331100000000049],[-78.722778000000005,69.336105000000089],[-78.716110000000015,69.34027100000003],[-78.606948999999986,69.371368000000132],[-78.577498999999989,69.377197000000137],[-78.568618999999956,69.378860000000032],[-78.489989999999977,69.391098000000113],[-78.47084000000001,69.392212000000086],[-78.458617999999944,69.38998400000014],[-78.412215999999887,69.379700000000128]],[[-135.28890999999993,69.309418000000051],[-135.29751599999997,69.304977000000122],[-135.33138999999989,69.322768999999994],[-135.34805299999994,69.330551000000128],[-135.38613899999996,69.344986000000063],[-135.39779699999997,69.348037999999974],[-135.44000199999999,69.355820000000108],[-135.48693800000001,69.362198000000092],[-135.51501500000001,69.367477000000065],[-135.52694699999995,69.370529000000147],[-135.55999800000001,69.380264000000068],[-135.56527700000004,69.384995000000004],[-135.56555199999997,69.390548999999965],[-135.55999800000001,69.396652000000131],[-135.54998799999998,69.399994000000049],[-135.52444499999996,69.403595000000109],[-135.50723300000004,69.403046000000131],[-135.42028799999997,69.397491000000059],[-135.365814,69.393599999999992],[-135.33776899999992,69.388596000000064],[-135.32806400000004,69.384995000000004],[-135.27224699999988,69.358321999999987],[-135.27139299999999,69.346938999999963],[-135.27722199999999,69.328322999999955],[-135.28332499999988,69.315262000000018],[-135.28890999999993,69.309418000000051]],[[-76.950835999999867,69.395263999999997],[-76.923614999999984,69.393599999999992],[-76.902221999999995,69.394713999999965],[-76.804168999999945,69.400269000000037],[-76.787780999999995,69.402480999999966],[-76.779174999999952,69.403870000000097],[-76.760833999999875,69.40914900000007],[-76.75140399999998,69.412766000000033],[-76.744445999999982,69.416931000000034],[-76.732772999999952,69.422760000000039],[-76.723327999999981,69.423599000000024],[-76.716400000000021,69.422211000000118],[-76.705840999999964,69.418868999999972],[-76.652221999999938,69.38638300000008],[-76.644729999999925,69.381363000000022],[-76.643889999999942,69.374420000000043],[-76.646666999999979,69.336929000000055],[-76.648894999999925,69.331940000000088],[-76.676391999999964,69.306091000000094],[-76.706389999999999,69.303588999999988],[-76.718886999999995,69.301651000000049],[-76.736937999999952,69.296371000000022],[-76.799438000000009,69.272491000000002],[-76.926392000000021,69.21748400000007],[-76.933608999999933,69.213882000000126],[-76.939986999999974,69.209152000000074],[-76.945830999999998,69.203598000000113],[-76.949431999999945,69.197479000000101],[-76.950561999999934,69.1933140000001],[-76.958892999999989,69.14248699999996],[-77.118057000000022,69.119431000000134],[-77.137787000000003,69.116652999999928],[-77.171660999999915,69.117202999999961],[-77.213622999999984,69.125809000000061],[-77.238601999999958,69.132750999999985],[-77.25778200000002,69.139984000000027],[-77.285827999999924,69.153594999999996],[-77.301392000000021,69.164153999999996],[-77.320281999999963,69.181366000000025],[-77.381942999999865,69.247482000000048],[-77.384170999999981,69.263610999999969],[-77.383330999999941,69.270538000000045],[-77.359725999999966,69.392761000000064],[-77.356383999999935,69.396652000000131],[-77.348342999999943,69.401657],[-77.288329999999917,69.417755],[-77.259170999999924,69.424698000000035],[-77.189162999999951,69.438309000000004],[-77.153610000000015,69.444427000000076],[-77.129989999999964,69.445251000000042],[-77.113616999999977,69.441650000000038],[-77.075561999999991,69.428314000000057],[-77.043335000000013,69.417206000000078],[-77.006957999999997,69.406372000000033],[-76.978332999999907,69.399994000000049],[-76.950835999999867,69.395263999999997]],[[-90.329453000000001,69.235809000000017],[-90.34722899999997,69.234711000000118],[-90.361388999999974,69.238312000000008],[-90.506392999999946,69.329162999999994],[-90.510009999999909,69.334717000000012],[-90.514450000000011,69.363876000000005],[-90.501113999999973,69.372482000000105],[-90.491669000000002,69.376647999999989],[-90.301940999999943,69.434418000000107],[-90.205275999999913,69.445816000000093],[-90.200835999999981,69.444427000000076],[-90.199722000000008,69.439148000000102],[-90.195267000000001,69.416931000000034],[-90.178604000000007,69.409988000000055],[-90.149733999999967,69.375534000000016],[-90.148345999999947,69.370255000000043],[-90.154723999999987,69.350815000000068],[-90.15972899999997,69.34526100000005],[-90.271666999999923,69.255554000000018],[-90.288605000000018,69.249419999999986],[-90.329453000000001,69.235809000000017]],[[-135.59222399999999,69.482208000000071],[-135.574432,69.446640000000059],[-135.61999499999996,69.468597000000102],[-135.62942499999991,69.472214000000065],[-135.66528299999999,69.481368999999916],[-135.69360399999999,69.486649],[-135.74081399999994,69.493041999999946],[-135.77835099999999,69.496094000000085],[-135.81054700000004,69.497756999999979],[-135.81555200000003,69.502487000000031],[-135.8125,69.508041000000048],[-135.79528799999997,69.516663000000051],[-135.78555299999999,69.519989000000066],[-135.77389500000004,69.52276599999999],[-135.76113899999996,69.524429000000055],[-135.74526999999995,69.524704000000099],[-135.66610700000001,69.505828999999949],[-135.59942599999999,69.486098999999967],[-135.59222399999999,69.482208000000071]],[[-101.05304699999999,69.504439999999988],[-101.00611900000001,69.486923000000104],[-101.00862099999995,69.450272000000041],[-101.12526700000001,69.401382000000126],[-101.21861299999989,69.371368000000132],[-101.23029299999996,69.368591000000038],[-101.24305700000002,69.371917999999994],[-101.26888999999994,69.378860000000032],[-101.27916700000003,69.382476999999994],[-101.271118,69.385818000000029],[-101.256958,69.386658000000068],[-101.24526999999995,69.389434999999992],[-101.2369379999999,69.394713999999965],[-101.23166699999996,69.400818000000015],[-101.18888899999996,69.469711000000075],[-101.18639400000001,69.475265999999976],[-101.22749299999992,69.495529000000033],[-101.23805199999998,69.499145999999996],[-101.2538909999999,69.500274999999988],[-101.266953,69.49832200000003],[-101.31749699999995,69.511107999999922],[-101.38445300000001,69.53276100000005],[-101.38722199999995,69.53776600000009],[-101.35833700000001,69.566940000000102],[-101.34973099999996,69.572495000000004],[-101.34056099999992,69.574707000000046],[-101.27555799999993,69.580826000000059],[-101.26167299999992,69.581665000000044],[-101.07305899999994,69.534988000000112],[-101.06276699999995,69.53137200000009],[-101.05999800000001,69.526382000000012],[-101.05304699999999,69.504439999999988]],[[-96.663054999999929,69.569717000000026],[-96.563323999999966,69.564147999999989],[-96.461120999999991,69.564147999999989],[-96.401671999999905,69.562759000000028],[-96.373610999999983,69.560806000000071],[-96.358886999999868,69.55720500000001],[-96.351943999999946,69.55304000000001],[-96.345275999999899,69.548599000000081],[-96.343886999999995,69.543594000000041],[-96.335555999999997,69.534424000000001],[-96.328613000000018,69.529983999999956],[-96.31639100000001,69.526382000000012],[-96.291671999999892,69.531097000000045],[-96.218063000000029,69.546371000000136],[-96.207229999999981,69.55053700000002],[-96.198333999999875,69.55664100000007],[-96.194442999999978,69.561920000000043],[-96.184432999999956,69.56721500000009],[-96.169723999999917,69.566940000000102],[-96.152221999999995,69.563599000000067],[-96.139998999999932,69.559982000000105],[-96.133330999999941,69.555542000000059],[-96.134445000000028,69.550262000000032],[-96.136397999999986,69.546097000000032],[-96.104171999999949,69.49832200000003],[-96.101104999999961,69.493041999999946],[-96.097778000000005,69.483322000000044],[-96.096114999999998,69.46804800000001],[-96.098617999999988,69.457763999999941],[-96.143065999999919,69.351379000000009],[-96.146666999999979,69.345824999999991],[-96.163329999999974,69.348037999999974],[-96.233886999999982,69.359711000000004],[-96.248610999999926,69.36303700000002],[-96.270003999999972,69.370818999999983],[-96.288604999999961,69.378860000000032],[-96.304992999999911,69.387497000000053],[-96.325286999999946,69.400269000000037],[-96.333617999999944,69.409714000000122],[-96.348343,69.423035000000084],[-96.382216999999912,69.44470200000012],[-96.401108000000022,69.453048999999908],[-96.430557000000022,69.459717000000069],[-96.461944999999957,69.462493999999992],[-96.507232999999985,69.464432000000102],[-96.524719000000005,69.467484000000013],[-96.548889000000031,69.474990999999989],[-96.630828999999949,69.512207000000103],[-96.654175000000009,69.524994000000106],[-96.736663999999962,69.576660000000004],[-96.735549999999989,69.581940000000031],[-96.721663999999919,69.58248900000001],[-96.691665999999884,69.581940000000031],[-96.676940999999999,69.578323000000125],[-96.663054999999929,69.569717000000026]],[[-67.310546999999929,69.549149000000114],[-67.324172999999973,69.533875000000023],[-67.331680000000006,69.53137200000009],[-67.351105000000018,69.530823000000112],[-67.388610999999969,69.533051000000057],[-67.473052999999936,69.533875000000023],[-67.492766999999958,69.533051000000057],[-67.53083799999996,69.52915999999999],[-67.545272999999895,69.525818000000072],[-67.552489999999977,69.523041000000148],[-67.549437999999896,69.519714000000022],[-67.507232999999985,69.514998999999989],[-67.499999999999943,69.512833000000057],[-67.49888599999997,69.51249700000011],[-67.489990000000034,69.508606000000043],[-67.481673999999941,69.500000000000114],[-67.492492999999854,69.495529000000033],[-67.50778200000002,69.494980000000112],[-67.573623999999995,69.506653000000085],[-67.58555599999994,69.50749200000007],[-67.598891999999978,69.506378000000097],[-67.626662999999951,69.500549000000092],[-67.642226999999878,69.500274999999988],[-67.731948999999929,69.513611000000083],[-67.744445999999925,69.515822999999955],[-67.749725000000012,69.521103000000039],[-67.739440999999943,69.540817000000118],[-67.730834999999956,69.544434000000081],[-67.723052999999993,69.545258000000047],[-67.707229999999981,69.544434000000081],[-67.686661000000015,69.541091999999992],[-67.674712999999883,69.540268000000026],[-67.663329999999974,69.54193099999992],[-67.578063999999983,69.559708000000001],[-67.550277999999935,69.565536000000122],[-67.541381999999999,69.569153000000028],[-67.531386999999995,69.576384999999959],[-67.527221999999995,69.581940000000031],[-67.48443599999996,69.590271000000143],[-67.425002999999947,69.588882000000126],[-67.394454999999994,69.584991000000059],[-67.367217999999923,69.578323000000125],[-67.321395999999993,69.560531999999967],[-67.314437999999996,69.55664100000007],[-67.309433000000013,69.552765000000022],[-67.310546999999929,69.549149000000114]],[[-96.760558999999944,69.54553199999998],[-96.770003999999915,69.543594000000041],[-96.786666999999909,69.54553199999998],[-96.868880999999874,69.555817000000104],[-96.883895999999993,69.55914300000012],[-96.888061999999991,69.563873000000001],[-96.902221999999995,69.5977630000001],[-96.900283999999999,69.602203000000088],[-96.870543999999995,69.601379000000122],[-96.851395000000025,69.599425999999994],[-96.840835999999967,69.597488000000055],[-96.81639100000001,69.590271000000143],[-96.809433000000013,69.585815000000025],[-96.766402999999968,69.554977000000065],[-96.761947999999961,69.55053700000002],[-96.760558999999944,69.54553199999998]],[[-91.110001000000011,69.549423000000047],[-91.119155999999975,69.548324999999977],[-91.140288999999939,69.560806000000071],[-91.142501999999922,69.564986999999974],[-91.136397999999986,69.575546000000031],[-91.121384000000035,69.593048000000067],[-91.108886999999925,69.602203000000088],[-91.037215999999944,69.614990000000091],[-90.969161999999926,69.618317000000047],[-90.959732000000031,69.61943100000002],[-90.937499999999943,69.616379000000109],[-90.923049999999932,69.611374000000069],[-90.920272999999952,69.608032000000094],[-90.919158999999979,69.606093999999985],[-90.930832000000009,69.599152000000061],[-91.110001000000011,69.549423000000047]],[[-133.93222000000003,69.560256999999922],[-133.948059,69.560256999999922],[-133.96304299999997,69.561371000000122],[-133.98611499999998,69.565536000000122],[-134.01196299999992,69.571381000000031],[-134.01666299999994,69.576096000000064],[-134.01419099999998,69.58248900000001],[-134.01028400000001,69.585541000000092],[-133.94528199999996,69.613312000000008],[-133.93362399999995,69.616089000000102],[-133.89446999999996,69.621093999999971],[-133.87997399999995,69.621918000000107],[-133.86581399999994,69.619141000000013],[-133.84472700000003,69.600815000000011],[-133.84695399999998,69.588882000000126],[-133.868042,69.56721500000009],[-133.87719699999997,69.565261999999962],[-133.93222000000003,69.560256999999922]],[[-95.488892000000021,69.565536000000122],[-95.452498999999932,69.550262000000032],[-95.375548999999978,69.517761000000121],[-95.366104000000007,69.513611000000083],[-95.359726000000023,69.509155000000021],[-95.362212999999997,69.498870999999951],[-95.402495999999985,69.383330999999998],[-95.515839000000028,69.330826000000116],[-95.527221999999995,69.327484000000027],[-95.539718999999991,69.325271999999927],[-95.606383999999935,69.319153000000085],[-95.620270000000005,69.318603999999993],[-95.634170999999924,69.318329000000119],[-95.692489999999964,69.319153000000085],[-95.706954999999994,69.319442999999922],[-95.722778000000005,69.320831000000055],[-95.736938000000009,69.324432000000058],[-95.741104000000007,69.329162999999994],[-95.741668999999945,69.334717000000012],[-95.731673999999941,69.373031999999967],[-95.727782999999874,69.378585999999927],[-95.716949,69.382750999999928],[-95.693877999999984,69.389434999999992],[-95.669158999999979,69.394150000000025],[-95.657776000000013,69.397217000000126],[-95.648346000000004,69.403320000000065],[-95.666397000000018,69.497756999999979],[-95.669158999999979,69.50749200000007],[-95.694442999999978,69.540268000000026],[-95.708053999999947,69.548874000000126],[-95.720001000000025,69.552765000000022],[-95.736663999999905,69.554977000000065],[-95.815826000000015,69.562759000000028],[-95.827498999999932,69.559708000000001],[-95.831680000000006,69.554153000000099],[-95.822784000000013,69.514435000000049],[-95.817504999999926,69.504990000000021],[-95.809432999999956,69.495529000000033],[-95.797225999999966,69.481658999999979],[-95.862212999999997,69.348037999999974],[-95.87222300000002,69.34275800000006],[-95.899445000000014,69.340820000000122],[-95.961670000000026,69.346375000000023],[-95.978881999999999,69.349426000000051],[-95.990829000000019,69.353317000000118],[-96.011123999999882,69.478043000000071],[-96.009734999999978,69.483047000000056],[-95.919998000000021,69.595260999999994],[-95.909164000000033,69.599425999999994],[-95.789443999999946,69.634155000000078],[-95.773894999999925,69.632751000000098],[-95.625548999999921,69.616089000000102],[-95.61221299999994,69.61442599999998],[-95.488892000000021,69.565536000000122]],[[-138.86721799999992,69.588318000000015],[-138.87332200000003,69.583054000000061],[-138.88305699999995,69.579437000000098],[-138.91000399999996,69.576096000000064],[-138.945831,69.57887299999993],[-138.97720300000003,69.583054000000061],[-138.99609399999997,69.584152000000131],[-139.02307099999996,69.580826000000059],[-139.03417999999999,69.578048999999965],[-139.05306999999999,69.570540999999992],[-139.12109399999997,69.52915999999999],[-139.137787,69.530823000000112],[-139.33248899999995,69.566085999999927],[-139.32998699999996,69.571655000000135],[-139.32223499999992,69.576096000000064],[-139.26779199999993,69.605820000000051],[-139.24221799999992,69.618317000000047],[-139.23275799999999,69.621918000000107],[-139.19973800000002,69.630538999999999],[-139.14416499999999,69.644989000000123],[-139.13305700000001,69.647766000000047],[-139.12027,69.649993999999992],[-139.10333299999996,69.648041000000035],[-139.02029399999998,69.633331000000112],[-138.95611600000001,69.619705000000124],[-138.92111199999994,69.610535000000084],[-138.88055399999996,69.596939000000134],[-138.872772,69.59275800000006],[-138.86721799999992,69.588318000000015]],[[-135.51724199999995,69.569153000000028],[-135.54305999999997,69.565536000000122],[-135.55721999999997,69.568054000000075],[-135.57138099999997,69.576934999999992],[-135.58111600000001,69.580551000000071],[-135.5883179999999,69.584717000000126],[-135.591095,69.589980999999966],[-135.58944699999989,69.596099999999979],[-135.58612099999993,69.601653999999996],[-135.57888800000001,69.606644000000017],[-135.55471799999992,69.620254999999986],[-135.51196299999998,69.641663000000108],[-135.50030500000003,69.644439999999975],[-135.43972799999995,69.65248100000008],[-135.42388900000003,69.65248100000008],[-135.40972899999991,69.649993999999992],[-135.39779699999997,69.646942000000081],[-135.40917999999999,69.634995000000117],[-135.4655459999999,69.585541000000092],[-135.474152,69.581375000000037],[-135.505585,69.571655000000135],[-135.51724199999995,69.569153000000028]],[[-67.920273000000009,69.521927000000005],[-67.935271999999941,69.518875000000094],[-68.002228000000002,69.526657000000057],[-68.049437999999952,69.533875000000023],[-68.238892000000021,69.570267000000058],[-68.248885999999914,69.596649000000127],[-68.078339000000028,69.665268000000083],[-67.970839999999896,69.701935000000049],[-67.959731999999974,69.704987000000017],[-67.946380999999974,69.706375000000094],[-67.895553999999947,69.708603000000039],[-67.889724999999999,69.708328000000051],[-67.869720000000029,69.700821000000076],[-67.821120999999948,69.676376000000062],[-67.831680000000006,69.601928999999984],[-67.910278000000005,69.526657000000057],[-67.920273000000009,69.521927000000005]],[[-134.26058999999987,68.733535999999958],[-134.23248299999989,68.706100000000106],[-134.22778299999993,68.701385000000073],[-134.22726399999999,68.696426000000088],[-134.23580900000002,68.694977000000108],[-134.26779199999999,68.695816000000093],[-134.35693400000002,68.703049000000078],[-134.38861099999997,68.707214000000079],[-134.436127,68.713608000000136],[-134.45748899999995,68.719147000000135],[-134.46194499999996,68.72387700000013],[-134.49554399999994,68.75221300000004],[-134.53640699999994,68.786926000000051],[-134.66946399999989,68.894440000000145],[-134.741669,68.935531999999967],[-134.75500499999987,68.944427000000019],[-134.76696799999991,68.953323000000125],[-134.78306599999996,68.965355000000045],[-134.82583599999998,68.97886699999998],[-134.85278299999999,68.976379000000009],[-134.89224200000001,68.971924000000001],[-134.90472399999999,68.969986000000006],[-134.91473400000001,68.96665999999999],[-134.92028799999997,68.960815000000082],[-134.91973899999994,68.949417000000096],[-134.91723599999995,68.944138000000066],[-134.91641199999998,68.926926000000094],[-134.92028799999997,68.914703000000031],[-134.92584199999999,68.908600000000092],[-134.93307499999997,68.903594999999996],[-134.94137599999999,68.899429000000112],[-134.96112099999999,68.892487000000017],[-134.97500599999995,68.891663000000051],[-134.99999999999994,68.892082000000073],[-135.00750699999998,68.892212000000029],[-135.12609900000001,68.899429000000112],[-135.14196800000002,68.901382000000069],[-135.167236,68.907211000000075],[-135.17083699999995,68.911102000000142],[-135.17806999999999,68.920822000000044],[-135.18084699999997,68.926085999999998],[-135.20165999999995,68.9327550000001],[-135.23330699999991,68.934708000000001],[-135.262787,68.933594000000028],[-135.36111500000004,68.926651000000049],[-135.39196799999996,68.926651000000049],[-135.42138699999987,68.928864000000033],[-135.444458,68.934981999999934],[-135.45388799999995,68.938582999999994],[-135.46081499999997,68.942749000000106],[-135.76916499999993,68.896378000000084],[-135.808044,68.895264000000111],[-135.843323,68.897217000000069],[-135.88247699999999,68.905258000000117],[-135.90585299999992,68.911376999999959],[-135.94805899999994,68.924698000000092],[-135.99527,68.942474000000061],[-136.00250199999999,68.946640000000002],[-136.00527999999997,68.951935000000049],[-135.98916599999995,69.029160000000104],[-135.98525999999998,69.035812000000021],[-135.97833299999996,69.040817000000061],[-135.96859699999999,69.044434000000024],[-135.95443699999998,69.045532000000094],[-135.88861099999991,69.026093000000003],[-135.85012800000004,69.007401000000129],[-135.83389299999993,68.998322000000144],[-135.82888799999989,68.993591000000038],[-135.80248999999992,68.989426000000037],[-135.77001999999999,68.989150999999993],[-135.64889499999998,68.991928000000087],[-135.63473499999998,68.993042000000059],[-135.57861300000002,69.006104000000107],[-135.52557399999995,69.021102999999982],[-135.51779199999999,69.023880000000077],[-135.529449,69.026931999999988],[-135.72082499999999,69.046097000000145],[-135.91583300000002,69.088318000000129],[-135.92748999999998,69.09137000000004],[-135.93472299999996,69.095535000000041],[-135.95138499999996,69.142761000000064],[-135.96582000000001,69.197754000000089],[-135.96722399999999,69.214706000000092],[-135.95944199999997,69.228317000000061],[-135.94695999999993,69.23942599999998],[-135.92611699999998,69.254715000000033],[-135.915009,69.257492000000127],[-135.89862099999999,69.255554000000018],[-135.89138800000001,69.251389000000017],[-135.82138099999986,69.215271000000143],[-135.75140399999998,69.179428000000087],[-135.74194299999999,69.175812000000064],[-135.66610700000001,69.146941999999967],[-135.65667699999995,69.143600000000049],[-135.56750499999993,69.11775200000011],[-135.55279499999989,69.116652999999928],[-135.48693800000001,69.113312000000121],[-135.49581899999993,69.124145999999996],[-135.60720799999996,69.145264000000054],[-135.6305539999999,69.151382000000012],[-135.64001499999995,69.154984000000127],[-135.81082199999997,69.242751999999996],[-135.83999600000004,69.259430000000066],[-135.85220300000003,69.268051000000014],[-135.85498000000001,69.273315000000139],[-135.8558349999999,69.284714000000065],[-135.85415599999999,69.290817000000004],[-135.84860199999997,69.296936000000017],[-135.8416749999999,69.301926000000094],[-135.83331299999998,69.306366000000082],[-135.80389400000001,69.316666000000055],[-135.79251099999999,69.319442999999922],[-135.57192999999995,69.33859300000006],[-135.5561219999999,69.338882000000012],[-135.48580900000002,69.33526599999999],[-135.44860799999998,69.332214000000022],[-135.41332999999997,69.323043999999982],[-135.39196799999996,69.309981999999991],[-135.38723800000002,69.30525200000011],[-135.379974,69.301086000000055],[-135.37027,69.297484999999995],[-135.32333399999999,69.285262999999986],[-135.25778200000002,69.271378000000084],[-135.24386599999997,69.268600000000106],[-135.22970599999996,69.266098000000056],[-135.18554699999993,69.258880999999917],[-135.17056300000002,69.257766999999944],[-135.16223099999996,69.261931999999945],[-135.15805099999994,69.268600000000106],[-135.15835599999997,69.274429000000112],[-135.16500899999994,69.279160000000047],[-135.17443800000001,69.283051000000114],[-135.23971599999987,69.3316650000001],[-135.28695699999992,69.413605000000018],[-135.28723100000002,69.419144000000017],[-135.28527800000001,69.425537000000134],[-135.278076,69.430542000000003],[-135.26834099999996,69.434143000000063],[-135.16082800000004,69.473602000000142],[-135.15084799999994,69.476929000000098],[-135.137787,69.478592000000049],[-134.99664300000001,69.48414600000001],[-134.91528299999993,69.485259999999982],[-134.69473300000004,69.481658999999979],[-134.67749000000003,69.480819999999994],[-134.64251699999988,69.477203000000031],[-134.62832599999996,69.474426000000108],[-134.60861199999988,69.468597000000102],[-134.570831,69.453873000000044],[-134.55917399999987,69.450821000000133],[-134.53112799999997,69.445526000000086],[-134.49609399999997,69.441925000000026],[-134.48165900000004,69.442748999999992],[-134.46859699999993,69.444427000000076],[-134.43832399999997,69.454712000000029],[-134.42083699999995,69.463042999999914],[-134.413635,69.468322999999998],[-134.40777600000001,69.474152000000004],[-134.40557899999993,69.480270000000132],[-134.40835600000003,69.491364000000033],[-134.41778599999992,69.500549000000092],[-134.43667600000003,69.508041000000048],[-134.44833399999999,69.511107999999922],[-134.46887200000003,69.542755000000056],[-134.40167199999996,69.638321000000133],[-134.40249600000004,69.649719000000005],[-134.406677,69.654434000000037],[-134.44277999999997,69.68081699999999],[-134.48580899999996,69.706100000000049],[-134.49054000000001,69.710815000000082],[-134.49304199999995,69.715819999999951],[-134.49108899999993,69.722214000000008],[-134.47637900000001,69.723037999999974],[-134.30972299999996,69.715819999999951],[-134.20388799999995,69.668868999999972],[-134.17748999999998,69.64027400000009],[-134.19638099999992,69.621093999999971],[-134.20388799999995,69.616089000000102],[-134.24026500000002,69.585815000000025],[-134.24472000000003,69.579162999999994],[-134.24472000000003,69.573318000000029],[-134.24221799999998,69.568054000000075],[-134.11331200000001,69.538879000000009],[-134.09860199999997,69.539978000000019],[-134.08111600000001,69.548324999999977],[-134.06195099999997,69.555817000000104],[-134.03750600000001,69.560256999999922],[-134.02001999999999,69.559417999999994],[-134.00836200000003,69.556091000000038],[-134.00140399999998,69.551926000000037],[-133.97778299999999,69.528594999999996],[-133.96112099999999,69.509155000000021],[-133.94723499999992,69.506378000000097],[-133.91833499999996,69.508331000000055],[-133.87914999999998,69.513321000000076],[-133.86749299999997,69.515822999999955],[-133.86026000000004,69.520828000000051],[-133.82250999999997,69.555252000000053],[-133.823151,69.5600740000001],[-133.81973300000004,69.564986999999974],[-133.801941,69.573608000000092],[-133.79168699999997,69.576934999999992],[-133.77835099999993,69.576384999999959],[-133.75057999999996,69.547485000000108],[-133.74832199999992,69.542205999999965],[-133.79861500000004,69.481094000000098],[-133.81805399999996,69.464157000000114],[-133.85055499999999,69.445816000000093],[-133.87692300000003,69.433044000000109],[-133.92083699999995,69.412201000000039],[-133.94137599999999,69.405258000000003],[-133.96444699999995,69.400269000000037],[-134.08554100000003,69.340546000000018],[-134.21112099999993,69.276092999999946],[-134.21832299999988,69.271103000000096],[-134.27557400000001,69.226089000000115],[-134.27999899999986,69.219437000000028],[-134.28222699999998,69.213318000000015],[-134.28195199999999,69.20748900000001],[-134.27722199999994,69.202773999999977],[-134.27471899999995,69.197754000000089],[-134.27444500000001,69.186096000000077],[-134.28030399999994,69.180267000000072],[-134.287781,69.175262000000032],[-134.38363599999997,69.11831699999999],[-134.39779699999997,69.117477000000122],[-134.44888300000002,69.119705000000067],[-134.47720300000003,69.118042000000116],[-134.53112799999997,69.112762000000089],[-134.5680539999999,69.106644000000131],[-134.58526599999999,69.098038000000031],[-134.67361500000004,69.017761000000007],[-134.67584199999993,69.01138300000008],[-134.675568,69.005829000000062],[-134.66973899999999,68.9727630000001],[-134.67166099999997,68.966385000000002],[-134.66665599999999,68.956100000000049],[-134.65280200000001,68.947754000000145],[-134.60665900000004,68.935256999999979],[-134.58831799999996,68.928040000000067],[-134.51419099999987,68.887496999999996],[-134.50723300000004,68.883041000000048],[-134.48858599999994,68.870254999999986],[-134.47470099999998,68.856093999999985],[-134.46417199999991,68.84248400000007],[-134.45693999999997,68.826934999999992],[-134.44750999999991,68.811920000000043],[-134.44027700000004,68.80192599999998],[-134.43112199999996,68.792755000000056],[-134.417236,68.784423999999944],[-134.39889499999998,68.777205999999978],[-134.37609899999995,68.770827999999995],[-134.3511049999999,68.764998999999989],[-134.29666099999992,68.754440000000102],[-134.28750599999995,68.75082400000008],[-134.28057899999999,68.746643000000006],[-134.26058999999987,68.733535999999958]],[[-102.14527900000002,69.648604999999975],[-102.16027800000001,69.648331000000042],[-102.17832900000002,69.651093000000003],[-102.21028099999995,69.662200999999982],[-102.22609699999992,69.670258000000103],[-102.23166700000002,69.674698000000149],[-102.24305699999996,69.694138000000123],[-102.243607,69.704436999999984],[-102.24137899999999,69.71026599999999],[-102.23416099999997,69.716660000000047],[-102.22556299999991,69.721924000000001],[-102.21584300000001,69.726654000000053],[-102.15778399999999,69.736099000000081],[-102.13474300000001,69.724701000000096],[-102.12943999999993,69.72026100000005],[-102.12332199999997,69.71276899999998],[-102.12026999999989,69.708038000000045],[-102.11721799999998,69.697753999999975],[-102.11554699999999,69.666655999999989],[-102.11805700000002,69.660812000000135],[-102.12277199999994,69.65498400000007],[-102.13221699999991,69.650542999999971],[-102.14527900000002,69.648604999999975]],[[-77.946655000000021,69.646652000000074],[-77.944992000000013,69.639709000000039],[-77.946105999999986,69.633331000000112],[-77.965835999999967,69.624985000000038],[-78.07028200000002,69.59275800000006],[-78.169997999999964,69.570540999999992],[-78.311934999999949,69.54304500000012],[-78.397780999999952,69.520828000000051],[-78.505004999999869,69.488876000000062],[-78.576401000000033,69.501663000000065],[-78.588057999999933,69.506103999999993],[-78.611388999999917,69.509430000000009],[-78.626098999999954,69.50999500000006],[-78.646117999999888,69.50999500000006],[-78.664443999999889,69.50749200000007],[-78.685271999999941,69.49832200000003],[-78.698043999999982,69.489151000000049],[-78.718886999999938,69.479980000000126],[-78.756957999999941,69.467484000000013],[-78.801940999999943,69.455826000000002],[-78.817504999999926,69.45277400000009],[-78.838608000000022,69.451385000000073],[-78.853058000000033,69.454163000000108],[-78.861938000000009,69.457489000000123],[-78.868331999999953,69.460541000000035],[-78.873885999999857,69.464706000000035],[-78.880279999999971,69.476929000000098],[-78.87860099999989,69.479980000000126],[-78.874160999999958,69.486923000000104],[-78.865004999999996,69.494980000000112],[-78.841385000000002,69.508041000000048],[-78.826110999999969,69.511657999999954],[-78.809722999999963,69.514160000000061],[-78.783324999999991,69.521103000000039],[-78.764175000000023,69.527205999999978],[-78.717772999999966,69.544708000000014],[-78.695266999999944,69.556931000000077],[-78.674438000000009,69.568329000000062],[-78.652785999999935,69.581940000000031],[-78.628051999999968,69.608597000000145],[-78.615554999999915,69.617477000000008],[-78.586394999999925,69.631927000000132],[-78.575835999999981,69.636383000000023],[-78.522506999999905,69.648331000000042],[-78.499724999999899,69.650542999999971],[-78.482772999999895,69.649428999999941],[-78.400283999999999,69.643326000000002],[-78.260833999999932,69.659987999999998],[-78.245270000000005,69.663605000000132],[-78.229445999999996,69.67164600000001],[-78.228057999999976,69.677475000000072],[-78.236938000000009,69.688583000000051],[-78.244995000000017,69.693313999999987],[-78.256957999999941,69.705825999999945],[-78.263625999999931,69.713608000000079],[-78.26916499999993,69.728043000000014],[-78.268615999999952,69.732208000000014],[-78.265838999999971,69.733871000000136],[-78.180557000000022,69.75221300000004],[-78.164168999999958,69.752486999999974],[-78.154174999999952,69.750549000000035],[-78.141953000000001,69.742477000000065],[-78.080001999999979,69.72943099999992],[-78.018341000000021,69.708328000000051],[-77.992767000000015,69.699417000000096],[-77.982773000000009,69.694702000000063],[-77.973891999999978,69.688583000000051],[-77.966110000000015,69.681655999999975],[-77.955565999999976,69.668319999999994],[-77.946655000000021,69.646652000000074]],[[-82.507781999999963,69.704987000000017],[-82.542770000000019,69.704163000000051],[-82.678878999999995,69.726379000000009],[-82.720001000000025,69.733321999999987],[-82.865004999999996,69.770827999999995],[-82.877776999999924,69.774994000000049],[-82.879439999999931,69.778595000000109],[-82.856383999999991,69.800261999999975],[-82.846664000000033,69.803040000000124],[-82.839171999999962,69.80386400000009],[-82.811661000000015,69.806090999999981],[-82.803054999999915,69.805817000000047],[-82.796111999999994,69.805251999999996],[-82.776108000000022,69.804153000000042],[-82.677779999999927,69.794707999999957],[-82.629990000000021,69.789153999999996],[-82.563889000000017,69.778595000000109],[-82.460281000000009,69.761658000000125],[-82.453063999999983,69.720534999999984],[-82.455001999999922,69.714432000000045],[-82.467223999999987,69.709990999999945],[-82.507781999999963,69.704987000000017]],[[-79.423049999999989,69.784988000000055],[-79.331680000000006,69.713318000000072],[-79.328338999999971,69.707214000000079],[-79.329452999999944,69.701385000000016],[-79.333892999999989,69.697478999999987],[-79.354720999999984,69.688034000000073],[-79.482223999999917,69.646103000000096],[-79.544997999999964,69.626647999999932],[-79.571670999999981,69.61943100000002],[-79.600280999999995,69.612761999999975],[-79.631667999999934,69.608871000000079],[-79.957503999999972,69.619979999999998],[-79.963333000000034,69.626373000000115],[-79.974166999999852,69.631652999999972],[-79.994995000000017,69.638596000000007],[-80.02194199999991,69.643599999999935],[-80.038054999999986,69.645263999999941],[-80.059432999999899,69.64387499999998],[-80.065552000000025,69.641663000000108],[-80.081954999999994,69.630538999999999],[-80.082779000000016,69.626923000000147],[-80.078887999999949,69.622208000000114],[-80.032776000000013,69.587204000000042],[-79.991378999999938,69.568878000000041],[-79.937774999999931,69.531937000000084],[-79.935546999999985,69.527205999999978],[-79.93638599999997,69.523604999999918],[-79.940276999999924,69.518875000000094],[-79.974441999999954,69.502213000000097],[-79.993880999999931,69.494431000000134],[-80.011948000000018,69.491652999999985],[-80.021117999999944,69.49275200000011],[-80.046111999999937,69.497756999999979],[-80.200561999999991,69.530823000000112],[-80.214721999999995,69.586655000000064],[-80.353606999999954,69.614700000000084],[-80.461944999999957,69.656372000000147],[-80.492767000000015,69.664993000000038],[-80.577788999999996,69.667480000000126],[-80.74360699999994,69.666092000000049],[-80.761123999999995,69.666930999999977],[-80.793334999999956,69.670258000000103],[-80.804442999999878,69.675537000000077],[-80.809433000000013,69.683044000000052],[-80.809433000000013,69.68942300000009],[-80.801392000000021,69.701096000000121],[-80.730835000000013,69.746368000000132],[-80.725006000000008,69.74914600000011],[-80.720275999999899,69.750549000000035],[-80.649733999999967,69.748596000000077],[-80.520003999999972,69.720825000000048],[-80.498610999999983,69.759719999999959],[-80.50111400000003,69.762497000000053],[-80.502791999999943,69.76638800000012],[-80.504455999999948,69.774994000000049],[-80.503066999999987,69.779984000000127],[-80.499999999999943,69.783324999999991],[-80.490554999999972,69.788589000000115],[-80.46665999999999,69.791931000000091],[-80.388901000000033,69.799988000000042],[-80.371384000000035,69.799149000000057],[-80.340285999999992,69.794707999999957],[-80.338607999999908,69.790542999999957],[-80.343063000000029,69.784149000000127],[-80.34445199999999,69.776931999999988],[-80.329726999999991,69.774155000000121],[-80.314712999999983,69.778045999999961],[-80.289444000000003,69.786652000000061],[-80.264175000000023,69.79525799999999],[-80.246657999999968,69.798599000000024],[-80.232773000000009,69.79942299999999],[-80.20666499999993,69.798035000000084],[-80.191665999999884,69.79525799999999],[-80.182769999999948,69.792755000000056],[-80.129165999999941,69.765549000000021],[-80.073058999999944,69.74971000000005],[-79.972778000000005,69.723312000000078],[-79.862777999999935,69.741088999999988],[-79.768065999999976,69.75277699999998],[-79.756392999999889,69.778869999999927],[-79.752501999999993,69.783599999999979],[-79.744720000000029,69.788589000000115],[-79.687209999999993,69.814697000000081],[-79.678329000000019,69.814423000000147],[-79.512787000000003,69.80693100000002],[-79.476943999999946,69.803589000000102],[-79.453888000000006,69.798874000000069],[-79.442489999999907,69.794983000000002],[-79.431670999999938,69.789703000000088],[-79.423049999999989,69.784988000000055]],[[-83.674437999999952,69.719986000000063],[-83.688598999999954,69.719436999999914],[-83.717772999999966,69.723312000000078],[-83.776947000000007,69.732758000000047],[-83.806945999999982,69.739426000000037],[-83.898894999999982,69.764434999999992],[-83.908614999999998,69.769150000000025],[-83.917220999999984,69.778595000000109],[-83.913054999999986,69.793320000000051],[-83.900833000000034,69.808318999999926],[-83.886948000000018,69.81860400000005],[-83.873885999999914,69.823044000000095],[-83.860274999999945,69.824432000000002],[-83.832503999999972,69.825272000000041],[-83.577498999999989,69.797760000000096],[-83.533324999999934,69.791366999999923],[-83.529174999999952,69.786652000000061],[-83.542220999999984,69.783324999999991],[-83.576675000000023,69.780823000000055],[-83.601944000000003,69.779984000000127],[-83.695830999999998,69.763884999999959],[-83.708618000000001,69.759429999999952],[-83.712783999999999,69.754440000000102],[-83.705840999999964,69.750000000000057],[-83.693329000000006,69.745529000000147],[-83.662506000000008,69.736923000000047],[-83.655838000000017,69.732208000000014],[-83.654175000000009,69.727203000000145],[-83.661117999999988,69.722214000000008],[-83.674437999999952,69.719986000000063]],[[-82.429442999999992,69.782210999999961],[-82.444153000000028,69.778320000000122],[-82.470551,69.781372000000033],[-82.513335999999867,69.788315000000011],[-82.526107999999965,69.790542999999957],[-82.551392000000021,69.796646000000123],[-82.564437999999996,69.800812000000008],[-82.688599000000011,69.850815000000125],[-82.674438000000009,69.874984999999981],[-82.673049999999989,69.875809000000118],[-82.660552999999993,69.876083000000051],[-82.636397999999986,69.871094000000085],[-82.555831999999953,69.860809000000131],[-82.517226999999934,69.854155999999989],[-82.446105999999986,69.822220000000129],[-82.436661000000015,69.817490000000078],[-82.428878999999938,69.812195000000031],[-82.426666000000012,69.799988000000042],[-82.425827000000027,69.793045000000063],[-82.426101999999958,69.786925999999994],[-82.429442999999992,69.782210999999961]],[[-91.520003999999915,69.731369000000086],[-91.535278000000005,69.726929000000041],[-91.549438000000009,69.727203000000145],[-91.560271999999884,69.728316999999947],[-91.725280999999995,69.784149000000127],[-91.735549999999989,69.789153999999996],[-91.733321999999873,69.791931000000091],[-91.475829999999974,69.875534000000073],[-91.449432000000002,69.879149999999981],[-91.433883999999978,69.880538999999942],[-91.419448999999986,69.879974000000118],[-91.409164000000033,69.874984999999981],[-91.456664999999987,69.774994000000049],[-91.463332999999977,69.763611000000026],[-91.470551,69.755554000000075],[-91.520003999999915,69.731369000000086]],[[-91.819167999999934,69.821655000000078],[-91.833892999999989,69.821105999999929],[-91.844727000000034,69.822220000000129],[-91.860001000000011,69.838593000000003],[-91.864166000000012,69.844146999999964],[-91.860549999999989,69.848877000000016],[-91.84944200000001,69.858871000000022],[-91.821120999999891,69.868042000000003],[-91.782501000000025,69.877762000000075],[-91.763901000000033,69.880264000000125],[-91.745543999999995,69.881653000000142],[-91.728607000000011,69.880813999999987],[-91.71305799999999,69.878310999999997],[-91.701110999999969,69.875259000000085],[-91.644454999999937,69.859421000000054],[-91.639724999999999,69.854980000000126],[-91.651671999999962,69.851089000000059],[-91.666397000000018,69.847487999999998],[-91.819167999999934,69.821655000000078]],[[-97.397781000000009,69.685532000000023],[-97.41194200000001,69.684708000000057],[-97.441939999999931,69.685532000000023],[-97.455841000000021,69.684708000000057],[-97.468338000000017,69.682480000000112],[-97.479720999999984,69.678864000000033],[-97.489440999999999,69.673874000000012],[-97.490279999999871,69.668594000000098],[-97.476944000000003,69.654709000000025],[-97.398346000000004,69.597488000000055],[-97.391388000000006,69.593323000000055],[-97.378875999999934,69.592484000000127],[-97.372771999999998,69.598328000000095],[-97.351943999999946,69.631362999999965],[-97.350829999999974,69.636658000000068],[-97.347504000000015,69.642212000000029],[-97.329726999999878,69.669708000000071],[-97.31639100000001,69.686645999999996],[-97.303878999999938,69.698317999999915],[-97.289168999999958,69.69802900000002],[-97.273894999999982,69.694702000000063],[-97.226395000000025,69.675537000000077],[-97.206954999999937,69.667480000000126],[-97.113892000000021,69.622208000000114],[-97.106948999999929,69.617751999999996],[-97.103607000000011,69.614150999999936],[-97.101944000000003,69.609146000000067],[-97.102782999999931,69.603867000000093],[-97.09944200000001,69.594147000000021],[-97.09056099999998,69.584991000000059],[-97.064437999999939,69.572769000000108],[-96.955565999999976,69.523315000000082],[-96.879165999999998,69.491364000000033],[-96.866942999999992,69.487762000000089],[-96.637786999999946,69.437194999999974],[-96.502501999999936,69.409714000000122],[-96.32028200000002,69.354705999999965],[-96.301391999999964,69.346648999999957],[-96.208892999999989,69.306931000000134],[-96.202224999999942,69.302765000000022],[-96.189986999999974,69.288879000000065],[-96.172226000000023,69.26527400000009],[-96.170546999999999,69.260544000000039],[-96.171935999999903,69.255264000000011],[-96.175551999999925,69.249709999999993],[-96.193329000000006,69.237488000000042],[-96.203339000000028,69.232482999999945],[-96.209732000000031,69.22665399999994],[-96.21305799999999,69.211105000000032],[-96.223617999999931,69.141936999999928],[-96.235000999999954,69.064148000000102],[-96.23361199999988,69.059418000000051],[-96.229720999999984,69.054703000000018],[-96.225554999999986,69.049987999999985],[-96.218886999999995,69.045822000000101],[-96.195266999999944,69.038315000000011],[-96.166396999999904,69.031371999999976],[-96.1324919999999,69.024994000000049],[-96.118880999999931,69.025542999999971],[-96.115279999999984,69.030823000000055],[-96.113891999999964,69.036102000000028],[-96.129990000000021,69.054703000000018],[-96.152221999999995,69.103043000000071],[-96.15695199999999,69.163315000000068],[-96.155838000000017,69.168594000000041],[-96.149444999999901,69.174423000000047],[-96.073623999999995,69.231658999999979],[-96.05972300000002,69.232208000000128],[-96.047774999999888,69.228317000000061],[-96.041107000000011,69.223877000000073],[-95.955565999999919,69.141936999999928],[-95.951675000000023,69.13749700000011],[-95.924438000000009,69.089432000000102],[-95.925827000000027,69.084427000000062],[-95.93472300000002,69.078323000000012],[-95.953612999999905,69.067215000000033],[-95.971389999999928,69.054976999999951],[-95.977782999999988,69.049149000000057],[-95.978881999999999,69.043868999999972],[-95.97084000000001,69.034714000000122],[-95.938599000000011,69.003876000000105],[-95.925551999999982,68.995255000000043],[-95.843886999999995,68.923035000000027],[-95.82028200000002,68.870254999999986],[-95.770554000000004,68.891098000000056],[-95.756957999999997,68.891373000000044],[-95.745833999999945,68.888596000000121],[-95.674163999999962,68.869980000000112],[-95.670272999999895,68.865540000000124],[-95.668609999999944,68.860535000000084],[-95.667495999999971,68.855545000000006],[-95.671386999999982,68.850266000000033],[-95.667220999999984,68.835266000000047],[-95.663329999999974,68.830826000000059],[-95.654175000000009,68.826659999999947],[-95.626098999999954,68.826659999999947],[-95.575835999999981,68.830276000000026],[-95.550277999999878,68.833054000000004],[-95.528335999999911,68.840271000000087],[-95.510284000000013,68.852478000000076],[-95.489989999999977,68.861649000000057],[-95.446655000000021,68.879149999999981],[-95.42471299999994,68.886658000000011],[-95.389998999999989,68.895264000000111],[-95.378052000000025,68.89776599999999],[-95.365004999999996,68.899155000000007],[-95.351395000000025,68.899429000000112],[-95.335555999999997,68.897217000000069],[-95.321395999999993,68.893600000000106],[-95.240279999999984,68.86692800000003],[-95.228881999999942,68.863037000000134],[-95.21055599999994,68.854706000000022],[-95.206954999999994,68.850266000000033],[-95.210830999999985,68.844711000000132],[-95.263061999999991,68.802765000000136],[-95.273055999999997,68.797485000000108],[-95.476395000000025,68.711929000000112],[-95.543610000000001,68.702484000000027],[-95.539992999999924,68.708038000000045],[-95.538895000000025,68.713318000000129],[-95.538895000000025,68.723312000000135],[-95.546386999999982,68.732483000000059],[-95.559433000000013,68.741364000000033],[-95.568344000000025,68.745529000000033],[-95.593886999999938,68.752777000000037],[-95.608046999999885,68.753326000000129],[-95.621932999999956,68.752777000000037],[-95.790558000000033,68.737198000000092],[-95.801666000000012,68.733870999999965],[-95.848343,68.669983000000116],[-95.859726000000023,68.653320000000065],[-95.988891999999964,68.62164300000012],[-96.000838999999928,68.61943100000002],[-96.14973399999991,68.55720500000001],[-96.256393000000003,68.503326000000015],[-96.262512000000015,68.497481999999991],[-96.264724999999885,68.487198000000149],[-96.270844000000011,68.481368999999972],[-96.291381999999942,68.473038000000031],[-96.30221599999993,68.469711000000132],[-96.313888999999961,68.467209000000025],[-96.503615999999909,68.446091000000138],[-96.530563000000029,68.444976999999994],[-96.717498999999918,68.474990999999989],[-96.768341000000021,68.485260000000039],[-96.913895000000025,68.518051000000128],[-96.928328999999962,68.521378000000084],[-97.094451999999876,68.539154000000053],[-97.095550999999944,68.534149000000014],[-97.098891999999978,68.528594999999996],[-97.11999499999996,68.520828000000051],[-97.130828999999949,68.517487000000017],[-97.142501999999979,68.514999000000046],[-97.154175000000009,68.512771999999984],[-97.181106999999997,68.511382999999967],[-97.460007000000019,68.534149000000014],[-97.475005999999951,68.535537999999974],[-97.506118999999956,68.541930999999977],[-97.553329000000019,68.55664100000007],[-97.574172999999917,68.564148000000046],[-97.583618000000001,68.568054000000075],[-97.667220999999927,68.60386699999998],[-97.727218999999991,68.63220199999995],[-97.918609999999944,68.675537000000134],[-98.020554000000004,68.693588000000091],[-98.035552999999936,68.694702000000063],[-98.049987999999985,68.694977000000108],[-98.062774999999988,68.693588000000091],[-98.078338999999971,68.683319000000097],[-98.083892999999989,68.677475000000072],[-98.09333799999996,68.672211000000061],[-98.104995999999971,68.669708000000128],[-98.11999499999996,68.670822000000101],[-98.129715000000033,68.674698000000149],[-98.240279999999984,68.720825000000048],[-98.261123999999938,68.733597000000032],[-98.281677000000002,68.746368000000132],[-98.290558000000033,68.755554000000075],[-98.292495999999971,68.760543999999982],[-98.291945999999939,68.765823000000125],[-98.286117999999931,68.771652000000131],[-98.269729999999981,68.783875000000023],[-98.260833999999932,68.789153999999996],[-98.249161000000015,68.800812000000008],[-98.243056999999965,68.811920000000043],[-98.244155999999975,68.822220000000129],[-98.263061999999991,68.829987000000074],[-98.275283999999886,68.833602999999982],[-98.369719999999973,68.857483000000116],[-98.383330999999941,68.859985000000052],[-98.408051,68.855820000000051],[-98.418609999999944,68.852478000000076],[-98.425003000000004,68.841370000000097],[-98.415282999999988,68.815262000000132],[-98.40194699999995,68.801650999999993],[-98.393615999999952,68.787201000000039],[-98.394729999999925,68.776932000000045],[-98.400283999999942,68.770827999999995],[-98.408614999999941,68.764708999999982],[-98.418609999999944,68.760543999999982],[-98.451110999999969,68.750000000000114],[-98.476395000000025,68.746933000000013],[-98.489990000000034,68.746094000000028],[-98.519454999999994,68.747481999999934],[-98.724715999999887,68.791092000000106],[-98.84722899999997,68.825546000000145],[-98.859436000000017,68.829163000000108],[-98.866394000000014,68.833328000000108],[-98.875548999999978,68.84248400000007],[-98.879714999999976,68.852203000000088],[-98.879165999999941,68.857483000000116],[-98.86999499999996,68.874146000000053],[-98.864440999999999,68.879974000000118],[-98.856383999999991,68.886383000000023],[-98.847503999999958,68.891663000000051],[-98.826675000000023,68.899429000000112],[-98.817504999999869,68.904709000000025],[-98.811934999999949,68.910538000000031],[-98.811385999999914,68.915817000000004],[-98.820556999999951,68.924987999999928],[-98.827498999999989,68.929152999999928],[-98.84944200000001,68.933594000000028],[-98.965835999999967,68.949417000000096],[-98.981109999999944,68.950546000000031],[-98.993057000000022,68.947754000000145],[-99.077498999999989,68.918319999999994],[-99.09584000000001,68.899429000000112],[-99.076401000000033,68.891663000000051],[-99.062209999999936,68.883041000000048],[-99.043883999999935,68.864990000000091],[-99.044158999999866,68.859711000000118],[-99.176102000000014,68.825821000000019],[-99.188599000000011,68.824158000000068],[-99.21055599999994,68.831664999999987],[-99.236664000000019,68.848877000000016],[-99.24610899999999,68.852768000000083],[-99.267226999999991,68.859146000000067],[-99.311385999999914,68.868866000000139],[-99.413329999999974,68.884155000000021],[-99.428054999999972,68.887206999999989],[-99.437774999999988,68.891098000000056],[-99.444992000000013,68.895538000000045],[-99.449722000000008,68.899993999999992],[-99.454178000000013,68.909714000000065],[-99.451110999999912,68.915268000000026],[-99.447768999999994,68.926085999999998],[-99.448882999999967,68.936645999999996],[-99.450835999999981,68.941650000000095],[-99.460555999999997,68.950821000000076],[-99.489166000000012,68.967484000000127],[-99.523330999999871,68.983596999999975],[-99.562499999999943,68.99914600000011],[-99.589721999999881,69.011108000000036],[-99.594161999999983,69.015823000000069],[-99.596389999999928,69.020538000000101],[-99.596114999999998,69.025818000000015],[-99.593338000000017,69.031371999999976],[-99.579880000000003,69.043930000000046],[-99.513625999999874,69.101929000000098],[-99.492217999999866,69.1202550000001],[-99.485824999999977,69.125259000000028],[-99.476943999999946,69.13081399999993],[-99.466659999999933,69.13499500000006],[-99.311385999999914,69.158875000000023],[-99.296660999999972,69.158600000000035],[-99.238051999999982,69.149719000000061],[-99.168334999999956,69.138321000000076],[-99.035278000000005,69.135818000000086],[-99.006957999999997,69.136383000000137],[-98.798049999999989,69.17053199999998],[-98.774445000000014,69.17553700000002],[-98.730559999999969,69.189423000000033],[-98.720275999999956,69.193863000000022],[-98.711120999999991,69.199141999999995],[-98.702788999999996,69.205261000000007],[-98.699722000000008,69.210815000000025],[-98.701110999999969,69.220825000000104],[-98.705275999999969,69.230820000000051],[-98.615554999999915,69.294708000000071],[-98.533889999999928,69.291367000000037],[-98.441375999999877,69.298035000000027],[-98.415558000000033,69.301086000000055],[-98.403335999999967,69.303588999999988],[-98.393341000000021,69.308029000000033],[-98.387512000000015,69.313873000000058],[-98.384170999999981,69.319442999999922],[-98.388061999999991,69.329162999999994],[-98.397232000000031,69.338318000000072],[-98.44027699999998,69.363876000000005],[-98.457229999999981,69.371917999999994],[-98.476944000000003,69.379974000000061],[-98.488892000000021,69.383605999999986],[-98.523330999999985,69.388321000000019],[-98.535552999999936,69.391937000000098],[-98.555556999999965,69.399994000000049],[-98.562499999999943,69.404159999999933],[-98.598052999999993,69.430542000000003],[-98.611937999999952,69.444138000000009],[-98.608886999999868,69.449706999999989],[-98.591675000000009,69.467484000000013],[-98.585555999999997,69.473312000000135],[-98.577224999999999,69.479430999999977],[-98.563323999999909,69.477203000000031],[-98.553329000000019,69.473312000000135],[-98.540833000000021,69.469711000000075],[-98.508347000000015,69.463318000000129],[-98.477492999999924,69.461928999999941],[-98.447768999999994,69.461655000000007],[-98.422501000000011,69.465820000000008],[-98.419448999999986,69.47137499999991],[-98.424164000000019,69.475815000000125],[-98.44888299999991,69.483047000000056],[-98.463897999999972,69.486374000000012],[-98.549438000000009,69.501389000000131],[-98.564712999999927,69.504715000000147],[-98.577224999999999,69.508331000000055],[-98.586944999999901,69.512207000000103],[-98.601669000000015,69.520828000000051],[-98.605559999999912,69.530548000000124],[-98.604995999999971,69.535812000000078],[-98.601943999999946,69.541091999999992],[-98.592772999999909,69.552765000000022],[-98.575561999999991,69.570267000000058],[-98.566955999999948,69.576384999999959],[-98.556655999999862,69.580826000000059],[-98.531386999999938,69.584991000000059],[-98.501403999999923,69.584427000000119],[-98.485549999999989,69.583327999999995],[-98.433318999999983,69.575546000000031],[-98.385559000000001,69.566085999999927],[-98.357773000000009,69.55914300000012],[-98.350554999999929,69.554703000000131],[-98.338897999999972,69.546097000000032],[-98.334166999999979,69.54136699999998],[-98.322509999999909,69.532486000000063],[-98.310821999999973,69.523880000000133],[-98.28443900000002,69.506378000000097],[-98.248610999999983,69.484984999999995],[-98.092498999999975,69.424988000000042],[-98.078613000000018,69.422760000000039],[-98.049727999999959,69.423035000000084],[-98.036666999999852,69.424698000000035],[-98.024719000000005,69.427200000000084],[-98.00389100000001,69.435806000000014],[-97.997771999999998,69.441650000000038],[-97.99722300000002,69.446930000000066],[-98.006957999999997,69.450821000000133],[-98.071395999999993,69.468872000000147],[-98.157226999999978,69.4994200000001],[-98.166945999999996,69.503326000000015],[-98.188599000000011,69.516098],[-98.211394999999925,69.538879000000009],[-98.255843999999968,69.574707000000046],[-98.263061999999991,69.57887299999993],[-98.295837000000006,69.585266000000104],[-98.330291999999986,69.590271000000143],[-98.360549999999932,69.596649000000127],[-98.367767000000015,69.601089000000115],[-98.321670999999981,69.713608000000079],[-98.314163000000008,69.722214000000008],[-98.281951999999933,69.751663000000008],[-98.230285999999978,69.788879000000122],[-98.211120999999991,69.79942299999999],[-98.199722000000008,69.802765000000136],[-98.187209999999936,69.805251999999996],[-98.143889999999942,69.806366000000025],[-98.118057000000022,69.81053200000008],[-98.107772999999895,69.814697000000081],[-98.088608000000022,69.825272000000041],[-98.079726999999991,69.83137499999998],[-98.061661000000015,69.848877000000016],[-98.058333999999888,69.854431000000034],[-98.049164000000019,69.865814],[-98.043059999999969,69.871643000000006],[-98.034164000000033,69.878036000000009],[-98.012222000000008,69.885817999999972],[-97.999725000000012,69.888046000000088],[-97.974166999999909,69.892211999999972],[-97.945540999999992,69.893600000000106],[-97.930557000000022,69.893325999999945],[-97.913329999999974,69.891098],[-97.880279999999914,69.88499500000006],[-97.755004999999926,69.851379000000065],[-97.691101000000003,69.819992000000127],[-97.689162999999951,69.815262000000132],[-97.682219999999973,69.810806000000014],[-97.660004000000015,69.803314000000057],[-97.610000999999954,69.788589000000115],[-97.579726999999991,69.781937000000028],[-97.449158000000011,69.760269000000108],[-97.341109999999958,69.706375000000094],[-97.33944699999995,69.701385000000016],[-97.348052999999879,69.695251000000042],[-97.358611999999994,69.690810999999997],[-97.37110899999999,69.688583000000051],[-97.397781000000009,69.685532000000023]],[[-97.325012000000015,69.889160000000061],[-97.315276999999924,69.888046000000088],[-97.301665999999955,69.889709000000039],[-97.289992999999924,69.893051000000128],[-97.276947000000007,69.894440000000145],[-97.267775999999969,69.894440000000145],[-97.25,69.891373000000044],[-97.237503000000004,69.887771999999984],[-97.230559999999912,69.883331000000055],[-97.226943999999946,69.873596000000134],[-97.230559999999912,69.868042000000003],[-97.236937999999896,69.862198000000149],[-97.243880999999988,69.857483000000116],[-97.269164999999987,69.852478000000076],[-97.283889999999985,69.852768000000083],[-97.299163999999905,69.856094000000098],[-97.308883999999978,69.860260000000039],[-97.317779999999914,69.869431000000134],[-97.418334999999956,69.893600000000106],[-97.448883000000023,69.894149999999911],[-97.465835999999911,69.896378000000084],[-97.480285999999921,69.898880000000133],[-97.488892000000021,69.908035000000041],[-97.492767000000015,69.917755000000113],[-97.488602000000014,69.943863000000079],[-97.485000999999954,69.949417000000039],[-97.476105000000018,69.955551000000071],[-97.466399999999965,69.960815000000082],[-97.453612999999962,69.963043000000027],[-97.4375,69.961929000000055],[-97.350829999999974,69.949417000000039],[-97.335555999999997,69.946091000000024],[-97.328339000000028,69.941650000000095],[-97.327498999999989,69.931656000000089],[-97.346114999999998,69.917205999999965],[-97.349730999999963,69.911651999999947],[-97.351669000000015,69.901382000000012],[-97.347228999999913,69.896652000000017],[-97.337509000000011,69.892761000000121],[-97.325012000000015,69.889160000000061]],[[-100.84973099999991,69.925537000000077],[-100.86389199999991,69.924698000000092],[-100.87444299999999,69.928588999999988],[-100.87999000000002,69.933043999999995],[-100.87999000000002,69.938309000000061],[-100.85861199999994,69.977767999999969],[-100.85333300000002,69.983597000000145],[-100.84333800000002,69.98803700000002],[-100.83112299999993,69.990814000000057],[-100.81500199999994,69.989700000000084],[-100.80695300000002,69.985809000000017],[-100.80526700000001,69.980270000000019],[-100.80721999999997,69.97526600000009],[-100.80721999999997,69.969986000000006],[-100.81249999999994,69.958878000000027],[-100.83112299999993,69.935531999999967],[-100.83999599999999,69.929977000000065],[-100.84973099999991,69.925537000000077]],[[-87.091385000000002,70.150269000000094],[-87.06361400000003,70.147766000000104],[-87.051665999999955,70.141937000000098],[-87.02555799999999,70.135543999999982],[-87.020843999999954,70.131927000000019],[-87.023894999999982,70.127762000000018],[-87.021941999999967,70.121094000000028],[-87.009170999999924,70.116378999999995],[-86.994155999999975,70.113602000000071],[-86.922501000000011,70.104156000000103],[-86.905562999999972,70.103043000000071],[-86.87388599999997,70.09887700000013],[-86.856658999999922,70.097762999999986],[-86.825835999999924,70.092758000000117],[-86.798889000000031,70.087204000000099],[-86.778060999999923,70.089706000000035],[-86.761123999999938,70.093597000000102],[-86.688599000000011,70.115265000000022],[-86.670273000000009,70.118042000000116],[-86.639724999999999,70.116653000000099],[-86.611664000000019,70.111923000000104],[-86.598617999999988,70.108597000000032],[-86.586670000000026,70.104430999999977],[-86.545546999999942,70.081375000000094],[-86.549728000000016,70.07249500000006],[-86.550551999999982,70.066376000000048],[-86.536666999999909,70.062484999999981],[-86.511123999999995,70.053040000000067],[-86.505004999999983,70.048035000000027],[-86.503615999999965,70.036925999999994],[-86.505844000000025,70.028595000000053],[-86.50556899999998,70.023315000000025],[-86.502501999999993,70.020828000000108],[-86.487503000000004,70.017761000000007],[-86.47193900000002,70.015823000000069],[-86.460555999999997,70.012206999999989],[-86.45666499999993,70.007491999999957],[-86.460006999999962,70.00471500000009],[-86.468886999999995,69.999709999999993],[-86.489715999999987,69.983871000000079],[-86.502791999999999,69.980545000000063],[-86.523620999999991,69.978042999999957],[-86.542496000000028,69.977478000000133],[-86.662216000000001,69.967484000000127],[-86.714447000000007,69.966934000000094],[-86.747771999999998,69.969437000000084],[-86.76556399999987,69.969711000000018],[-86.833069000000023,69.974426000000051],[-86.864440999999999,69.978592000000106],[-86.881377999999984,69.979706000000078],[-86.89805599999994,69.982207999999957],[-86.926391999999964,69.989150999999993],[-86.938599000000011,69.993317000000047],[-86.962219000000005,70.00471500000009],[-86.985274999999945,70.01388500000013],[-87.002227999999945,70.014999000000103],[-87.016113000000018,70.010544000000095],[-87.021941999999967,70.005264000000011],[-87.029449,70.000824000000023],[-87.037215999999944,69.99664300000012],[-87.050277999999878,69.991653000000042],[-87.066665999999998,69.989150999999993],[-87.086394999999925,69.987761999999975],[-87.104172000000005,69.987761999999975],[-87.135009999999966,69.992752000000053],[-87.148055999999997,69.997482000000048],[-87.168883999999991,70.008605999999929],[-87.182769999999948,70.01388500000013],[-87.195830999999998,70.017212000000029],[-87.21362299999987,70.017487000000074],[-87.229445999999996,70.019440000000031],[-87.240828999999906,70.021378000000141],[-87.255004999999983,70.025269000000037],[-87.274444999999957,70.034987999999998],[-87.277495999999985,70.038879000000065],[-87.27694699999995,70.044983000000116],[-87.273620999999991,70.050812000000121],[-87.272507000000019,70.054703000000018],[-87.272780999999952,70.059981999999991],[-87.278335999999967,70.067490000000021],[-87.288329999999974,70.073317999999972],[-87.295837000000006,70.077484000000027],[-87.307495000000017,70.080826000000002],[-87.319457999999884,70.083328000000051],[-87.335555999999997,70.085541000000035],[-87.34973100000002,70.086104999999975],[-87.363892000000021,70.088593000000117],[-87.376937999999939,70.093322999999941],[-87.378325999999959,70.096100000000035],[-87.376099000000011,70.099426000000108],[-87.371384000000035,70.103867000000037],[-87.355834999999956,70.107208000000071],[-87.341948999999886,70.108597000000032],[-87.307495000000017,70.107208000000071],[-87.277785999999992,70.114699999999971],[-87.267226999999878,70.113312000000064],[-87.265609999999924,70.113556000000017],[-87.254729999999995,70.112198000000092],[-87.222503999999901,70.111374000000126],[-87.187774999999931,70.108322000000044],[-87.180557000000022,70.109420999999998],[-87.173049999999989,70.112198000000092],[-87.164443999999946,70.117203000000131],[-87.156112999999891,70.11914100000007],[-87.130829000000006,70.120255000000043],[-87.118332000000009,70.11914100000007],[-87.102782999999988,70.12081900000004],[-87.099730999999963,70.123596000000077],[-87.100554999999929,70.125534000000073],[-87.143065999999976,70.139435000000049],[-87.145279000000016,70.142761000000064],[-87.141388000000006,70.146378000000027],[-87.128326000000015,70.149719000000061],[-87.113891999999964,70.148880000000077],[-87.091385000000002,70.150269000000094]],[[-125.05695299999996,70.118317000000104],[-125.08500700000002,70.116333000000111],[-125.10221899999993,70.118072999999981],[-125.11971999999997,70.124954000000002],[-125.122772,70.130066000000056],[-125.12332200000003,70.13546800000006],[-125.12110899999999,70.141372999999987],[-125.11277799999999,70.14697300000006],[-125.10333300000002,70.151688000000092],[-125.08332799999999,70.159973000000093],[-125.07055700000001,70.16187999999994],[-125,70.162933000000066],[-124.97693600000002,70.167206000000078],[-124.96305799999999,70.168320000000051],[-124.95500199999998,70.164153999999996],[-124.98832700000003,70.134430000000009],[-124.99777199999994,70.129974000000061],[-125.04415899999992,70.120315999999946],[-125.05695299999996,70.118317000000104]],[[-124.67944299999994,70.161652000000117],[-124.69444299999998,70.161377000000073],[-124.73750299999995,70.174149000000114],[-124.75361599999991,70.182479999999998],[-124.75917099999998,70.186919999999986],[-124.76194799999996,70.191925000000083],[-124.75890400000003,70.196640000000116],[-124.74471999999997,70.197754000000089],[-124.55110200000001,70.208602999999925],[-124.53611799999987,70.208602999999925],[-124.51888999999994,70.206940000000031],[-124.51055899999994,70.20277399999992],[-124.50527999999997,70.198318000000029],[-124.50750700000003,70.192749000000049],[-124.53694200000001,70.18193100000002],[-124.67944299999994,70.161652000000117]],[[-112.65527299999991,70.266098],[-112.67223399999995,70.266098],[-112.69193999999999,70.267487000000017],[-112.72193900000002,70.272491000000002],[-112.74722300000002,70.278594999999996],[-112.75499699999995,70.282761000000107],[-112.76027699999992,70.287201000000096],[-112.76306199999993,70.292480000000069],[-112.76139799999993,70.298598999999967],[-112.75389100000001,70.303588999999988],[-112.73111,70.309708000000001],[-112.71611000000001,70.310531999999967],[-112.699997,70.309417999999994],[-112.6875,70.306366000000082],[-112.67971799999992,70.302475000000015],[-112.67859599999991,70.300812000000064],[-112.64334099999996,70.28137200000009],[-112.64277600000003,70.275818000000129],[-112.64472999999987,70.269714000000079],[-112.65527299999991,70.266098]],[[-112.96972700000003,70.28137200000009],[-113.00306699999999,70.281097000000102],[-113.104446,70.281936999999971],[-113.14083899999997,70.283325000000048],[-113.15834000000001,70.285262999999986],[-113.20361300000002,70.292480000000069],[-113.16972399999992,70.306931000000134],[-113.15750100000002,70.309708000000001],[-113.12888299999997,70.312485000000095],[-113.11054999999993,70.3119200000001],[-112.993607,70.299423000000104],[-112.97609699999992,70.297484999999938],[-112.96362299999998,70.294434000000138],[-112.95333900000003,70.290817000000004],[-112.94554099999999,70.286652000000004],[-112.95612299999999,70.283325000000048],[-112.96972700000003,70.28137200000009]],[[-100.765289,70.25],[-100.78083800000002,70.25],[-100.7938769999999,70.253326000000015],[-100.84166699999997,70.278320000000008],[-100.86305199999993,70.291091999999992],[-100.86833200000001,70.295532000000037],[-100.85193600000002,70.323883000000137],[-100.83889799999992,70.325546000000031],[-100.80943300000001,70.324158000000125],[-100.77639799999997,70.322495000000004],[-100.75890399999997,70.320540999999992],[-100.74804699999999,70.316940000000102],[-100.74082899999996,70.310531999999967],[-100.75890399999997,70.254990000000021],[-100.765289,70.25]],[[-116.80526699999996,70.509430000000009],[-116.78971899999993,70.507217000000026],[-116.75418100000002,70.50749200000007],[-116.63390400000003,70.493591000000094],[-116.60722399999997,70.488037000000077],[-116.59638999999993,70.484984999999995],[-116.56833599999999,70.473876999999959],[-116.57305899999989,70.467758000000117],[-116.70111099999997,70.468597000000102],[-116.71916199999993,70.470261000000107],[-116.787781,70.483597000000032],[-116.814438,70.488876000000062],[-116.82055700000001,70.493591000000094],[-116.82861300000002,70.503601000000003],[-116.82224300000001,70.508881000000031],[-116.80526699999996,70.509430000000009]],[[-116.287781,70.553314000000114],[-116.26027699999992,70.549988000000042],[-116.24333199999995,70.550261999999975],[-116.18943799999994,70.54553199999998],[-116.140556,70.538589000000002],[-116.12748699999997,70.535812000000078],[-116.13110399999999,70.532486000000006],[-116.29110699999995,70.515549000000021],[-116.32333399999993,70.513611000000083],[-116.44611399999991,70.508881000000031],[-116.46472199999999,70.509154999999964],[-116.47778299999999,70.511932000000058],[-116.495003,70.519989000000066],[-116.49582700000002,70.522765999999933],[-116.47000099999997,70.538040000000024],[-116.30304699999988,70.552199999999971],[-116.287781,70.553314000000114]],[[-116.56304899999998,70.534424000000001],[-116.57833900000003,70.533051000000057],[-116.596947,70.533324999999991],[-116.75028999999995,70.539153999999996],[-116.76363400000002,70.541931000000091],[-116.77443700000003,70.545258000000047],[-116.766953,70.548324999999977],[-116.75527999999991,70.551085999999941],[-116.72361799999987,70.556366000000025],[-116.71193699999998,70.559417999999937],[-116.68167099999999,70.561920000000043],[-116.66471899999999,70.562485000000038],[-116.64611799999994,70.562195000000031],[-116.54305999999997,70.559707999999944],[-116.52278100000001,70.558593999999971],[-116.50945300000001,70.556091000000038],[-116.50778200000002,70.550261999999975],[-116.51806599999998,70.546646000000123],[-116.56304899999998,70.534424000000001]],[[-115.92054699999989,70.54136699999998],[-115.95445299999994,70.540267999999969],[-115.99333200000001,70.541656000000103],[-116.051941,70.54553199999998],[-116.06111099999993,70.548324999999977],[-116.04250299999995,70.552199999999971],[-115.98388699999998,70.560806000000071],[-115.97222899999991,70.563599000000011],[-115.91972399999997,70.572494999999947],[-115.87917299999998,70.578598000000113],[-115.86389200000002,70.579987000000074],[-115.82501199999996,70.578323000000069],[-115.81416300000001,70.574997000000053],[-115.80803700000001,70.570541000000105],[-115.81082199999997,70.564986999999974],[-115.81916799999999,70.560806000000071],[-115.84111000000001,70.554153000000042],[-115.86638599999998,70.549423000000047],[-115.92054699999989,70.54136699999998]],[[-116.87943999999993,70.547485000000108],[-116.88945000000001,70.543869000000029],[-116.923317,70.542755000000056],[-117.03611799999993,70.546371000000136],[-117.18331899999998,70.537491000000102],[-117.20195000000001,70.53776600000009],[-117.22000099999997,70.539153999999996],[-117.27555799999993,70.550261999999975],[-117.28888699999993,70.55304000000001],[-117.29778299999998,70.556931000000077],[-117.30166600000001,70.561920000000043],[-117.29778299999998,70.571380999999974],[-117.26083399999999,70.584717000000126],[-117.25140399999992,70.587204000000042],[-117.23805199999998,70.589156999999943],[-117.21640000000002,70.591095000000109],[-117.19943199999994,70.591660000000104],[-117.16332999999997,70.588593000000003],[-116.89444700000001,70.556091000000038],[-116.88362100000001,70.552765000000136],[-116.87943999999993,70.547485000000108]],[[-128.08612099999999,70.605545000000006],[-128.10415599999999,70.595825000000104],[-128.1201779999999,70.597214000000122],[-128.11444099999994,70.591934000000037],[-128.11721799999992,70.580551000000014],[-128.12387100000001,70.57388300000008],[-128.13275099999993,70.569153000000028],[-128.34054599999996,70.539153999999996],[-128.34167499999995,70.542205999999908],[-128.252228,70.646378000000084],[-128.24581899999998,70.653046000000074],[-128.23416099999986,70.656097000000102],[-128.21639999999996,70.654709000000025],[-128.18832399999997,70.648604999999975],[-128.11498999999998,70.628036000000009],[-128.10360699999995,70.624419999999986],[-128.09472700000003,70.62052900000009],[-128.0883179999999,70.616089000000045],[-128.08499099999995,70.611099000000024],[-128.08612099999999,70.605545000000006]],[[-100.23082699999992,70.451660000000061],[-100.24333199999995,70.449142000000109],[-100.26000999999985,70.449996999999996],[-100.27610799999997,70.453049000000078],[-100.47250400000001,70.496367999999961],[-100.49916100000002,70.503326000000129],[-100.63054699999998,70.543320000000108],[-100.662781,70.554703000000075],[-100.67083700000001,70.558868000000075],[-100.67639199999996,70.563309000000004],[-100.68138099999993,70.573044000000095],[-100.68138099999993,70.583602999999982],[-100.67832900000002,70.594147000000021],[-100.66443599999991,70.637771999999984],[-100.65194699999995,70.669708000000071],[-100.51194800000002,70.676376000000062],[-100.49500299999988,70.675262000000089],[-100.48000300000001,70.673309000000131],[-100.46916199999998,70.669434000000138],[-100.46112099999999,70.659987999999998],[-100.451683,70.651932000000102],[-100.44360399999999,70.64776599999999],[-100.34722899999991,70.608032000000094],[-100.33640300000002,70.604431000000034],[-100.31945799999994,70.603317000000061],[-100.21833799999996,70.564422999999977],[-100.22444200000001,70.456649999999968],[-100.23082699999992,70.451660000000061]],[[-103.17777999999993,70.622482000000048],[-103.19360399999994,70.622208000000114],[-103.24833699999994,70.622757000000036],[-103.26640299999991,70.624146000000053],[-103.27500900000001,70.628311000000053],[-103.28111299999995,70.632751000000042],[-103.281387,70.638046000000088],[-103.26834099999996,70.666382000000056],[-103.22582999999986,70.676376000000062],[-103.21000700000002,70.676651000000049],[-103.19415299999997,70.673035000000027],[-103.173607,70.6336060000001],[-103.17304999999999,70.628586000000041],[-103.17777999999993,70.622482000000048]],[[-103.35082999999992,70.687195000000088],[-103.36416599999995,70.685256999999979],[-103.38110399999988,70.685806000000127],[-103.39499699999999,70.689148000000046],[-103.42887899999994,70.69999700000011],[-103.43776700000001,70.703872999999987],[-103.44638099999997,70.708037999999988],[-103.45249899999993,70.712494000000106],[-103.45889299999999,70.722214000000008],[-103.46278399999994,70.732208000000014],[-103.45694700000001,70.737198000000035],[-103.44360399999999,70.739150999999993],[-103.42777999999998,70.739426000000037],[-103.39917000000003,70.737198000000035],[-103.36361699999992,70.727767999999969],[-103.34111000000001,70.72026100000005],[-103.33500699999996,70.716094999999996],[-103.33444199999997,70.710815000000082],[-103.33860800000002,70.699417000000096],[-103.34333799999996,70.693588000000091],[-103.35082999999992,70.687195000000088]],[[-71.471664000000033,71.012772000000041],[-71.428878999999995,71.012206999999989],[-71.389175000000023,71.013885000000073],[-71.371108999999933,71.011931999999945],[-71.357497999999964,71.009720000000073],[-71.344727000000034,71.005554000000018],[-71.339171999999962,70.998322000000087],[-71.339721999999995,70.99136400000009],[-71.343063000000029,70.984985000000052],[-71.386672999999917,70.922485000000108],[-71.392226999999991,70.916656000000103],[-71.402495999999871,70.911926000000051],[-71.415557999999976,70.90776100000005],[-71.433060000000012,70.904709000000139],[-71.451110999999912,70.903046000000018],[-71.474441999999954,70.902481000000023],[-71.495543999999938,70.90277100000003],[-71.654448999999943,70.890822999999955],[-71.733063000000016,70.874984999999924],[-71.933884000000035,70.833328000000051],[-71.937774999999931,70.824706999999989],[-71.946380999999974,70.820831000000112],[-71.955565999999976,70.818329000000006],[-71.991668999999945,70.814697000000081],[-72.038605000000018,70.811371000000008],[-72.081954999999994,70.809708000000114],[-72.096664000000033,70.809708000000114],[-72.112212999999997,70.811371000000008],[-72.198607999999979,70.882750999999985],[-72.223327999999981,70.916931000000091],[-72.225280999999939,70.924423000000047],[-72.226395000000025,70.930542000000059],[-72.213897999999915,70.934708000000001],[-72.202224999999999,70.93664600000011],[-72.166655999999989,70.938034000000016],[-72.148894999999925,70.936371000000065],[-72.136672999999973,70.933594000000028],[-72.133620999999948,70.931656000000032],[-72.145554000000004,70.926085999999998],[-72.149170000000026,70.921097000000032],[-72.136123999999995,70.916931000000091],[-72.117492999999911,70.917205999999965],[-72.097778000000005,70.919708000000014],[-72.078339000000028,70.923599000000081],[-72.057769999999948,70.933043999999995],[-72.044723999999917,70.944426999999962],[-72.039443999999946,70.950272000000098],[-72.033324999999934,70.963042999999971],[-72.026672000000019,70.98275799999999],[-72.019729999999868,71.034424000000058],[-72.021392999999989,71.041930999999977],[-72.008620999999948,71.049713000000111],[-71.916107000000011,71.06442300000009],[-71.884170999999924,71.068878000000097],[-71.851669000000015,71.072220000000016],[-71.831680000000006,71.071106000000043],[-71.794723999999974,71.053040000000067],[-71.730834999999956,71.045532000000037],[-71.644454999999994,71.034987999999998],[-71.546950999999979,71.018600000000106],[-71.471664000000033,71.012772000000041]],[[-96.563323999999966,71.292205999999965],[-96.546950999999979,71.289154000000053],[-96.535552999999993,71.28276100000005],[-96.472504000000015,71.232208000000071],[-96.470275999999956,71.226089000000059],[-96.480835000000013,71.208878000000141],[-96.487503000000004,71.203598000000056],[-96.561110999999983,71.208328000000108],[-96.578063999999983,71.210541000000035],[-96.628601000000003,71.220260999999937],[-96.638610999999912,71.226089000000059],[-96.641678000000013,71.231368999999972],[-96.642776000000026,71.234421000000054],[-96.652495999999985,71.287201000000096],[-96.649170000000026,71.29304500000012],[-96.610549999999989,71.290543000000014],[-96.581116000000009,71.293594000000041],[-96.563323999999966,71.292205999999965]],[[-98.895554000000004,71.27777100000003],[-98.90834000000001,71.273040999999978],[-98.97444200000001,71.284714000000008],[-98.989715999999987,71.290543000000014],[-99.000290000000007,71.297211000000004],[-99.00556899999998,71.301926000000037],[-99.008621000000005,71.308029000000147],[-99.008895999999936,71.313873000000001],[-99.00306699999993,71.319443000000092],[-98.963622999999927,71.352203000000088],[-98.955840999999964,71.352203000000088],[-98.930283000000031,71.342209000000082],[-98.923324999999977,71.337769000000094],[-98.914443999999946,71.331665000000044],[-98.895554000000004,71.27777100000003]],[[-73.120543999999995,71.479705999999965],[-73.129439999999931,71.450821000000076],[-73.077498999999932,71.466385000000002],[-73.043335000000013,71.47886699999998],[-73.035552999999936,71.48414600000001],[-73.016402999999968,71.500000000000114],[-73.005844000000025,71.511658000000125],[-72.998046999999985,71.517211999999915],[-72.985275000000001,71.521378000000027],[-72.97222899999997,71.521378000000027],[-72.962508999999955,71.51998900000001],[-72.934157999999968,71.509155000000135],[-72.827498999999989,71.454987000000017],[-72.820281999999963,71.449707000000103],[-72.817504999999983,71.444977000000108],[-72.823333999999988,71.439697000000024],[-72.831954999999994,71.435806000000127],[-72.849730999999963,71.4327550000001],[-72.872497999999894,71.43081699999999],[-72.921660999999972,71.428314],[-72.992767000000015,71.419433999999967],[-73.010009999999966,71.415543000000071],[-73.022780999999952,71.411101999999971],[-73.031112999999948,71.406646999999964],[-73.028885000000002,71.399155000000064],[-73.007507000000032,71.352203000000088],[-72.978881999999942,71.329712000000086],[-72.974166999999909,71.324997000000053],[-72.97193900000002,71.317490000000134],[-72.973617999999874,71.313309000000061],[-72.983886999999982,71.308594000000028],[-72.996657999999911,71.304153000000099],[-73.025283999999999,71.297485000000108],[-73.060546999999929,71.294708000000014],[-73.089446999999893,71.313873000000001],[-73.163329999999917,71.33248900000001],[-73.198607999999922,71.336380000000077],[-73.244995000000017,71.348877000000073],[-73.265288999999939,71.357483000000002],[-73.272506999999962,71.36192299999999],[-73.275008999999955,71.365814000000057],[-73.276397999999972,71.379150000000038],[-73.265015000000005,71.396378000000141],[-73.255004999999926,71.408874999999966],[-73.254729999999995,71.415268000000083],[-73.293609999999887,71.454711999999972],[-73.301392000000021,71.459717000000012],[-73.320556999999894,71.469711000000075],[-73.347504000000015,71.477768000000026],[-73.362502999999947,71.481094000000041],[-73.374160999999901,71.485809000000074],[-73.379990000000021,71.519714000000022],[-73.377212999999983,71.522766000000104],[-73.366942999999992,71.527480999999966],[-73.189986999999917,71.565536000000066],[-73.176940999999999,71.566376000000105],[-73.147507000000019,71.564423000000147],[-73.132216999999912,71.561371000000065],[-73.090285999999935,71.546371000000079],[-73.081116000000009,71.542206000000078],[-73.073623999999938,71.536926000000051],[-73.074722000000008,71.531372000000033],[-73.11332699999997,71.485809000000074],[-73.120543999999995,71.479705999999965]],[[-72.760833999999875,71.531937000000084],[-72.786391999999978,71.530273000000022],[-72.830841000000021,71.531096999999988],[-72.848891999999921,71.532211000000018],[-72.867492999999911,71.533875000000023],[-72.949996999999996,71.547211000000118],[-72.982497999999907,71.553589000000102],[-73.008895999999879,71.56109600000002],[-73.020554000000004,71.565811000000053],[-73.030562999999916,71.571655000000078],[-73.035277999999948,71.575546000000145],[-73.039992999999981,71.579987000000074],[-73.037506000000008,71.587203999999986],[-73.034164000000033,71.592209000000025],[-72.968062999999972,71.636658000000011],[-72.948607999999979,71.644714000000079],[-72.924712999999997,71.649429000000112],[-72.806655999999919,71.659149000000014],[-72.781113000000005,71.660812000000135],[-72.745269999999948,71.659987999999942],[-72.726669000000015,71.658325000000048],[-72.709166999999979,71.655258000000117],[-72.695830999999941,71.651093000000117],[-72.684433000000013,71.642761000000121],[-72.662215999999944,71.604431000000034],[-72.660552999999936,71.598038000000031],[-72.671111999999994,71.585815000000025],[-72.682495000000017,71.574706999999989],[-72.701110999999912,71.557479999999998],[-72.712783999999942,71.547211000000118],[-72.718886999999995,71.542755000000056],[-72.727492999999981,71.538589000000115],[-72.742492999999968,71.534149000000127],[-72.760833999999875,71.531937000000084]],[[-73.370270000000005,71.554428000000087],[-73.394454999999937,71.554428000000087],[-73.406661999999983,71.556366000000025],[-73.418335000000013,71.56109600000002],[-73.42860399999995,71.566940000000045],[-73.436934999999949,71.573318000000029],[-73.450561999999991,71.584152000000074],[-73.449721999999952,71.58998100000008],[-73.448043999999925,71.594146999999964],[-73.441939999999988,71.598877000000016],[-73.388610999999912,71.634155000000021],[-73.348342999999943,71.658325000000048],[-73.276108000000022,71.691924999999912],[-73.243332000000009,71.696639999999945],[-73.213332999999977,71.698593000000074],[-73.209166999999979,71.698868000000118],[-73.190552000000025,71.697204999999997],[-73.167496000000028,71.692200000000128],[-73.155562999999972,71.687195000000088],[-73.148894999999982,71.679977000000065],[-73.149993999999992,71.674423000000104],[-73.170546999999942,71.668319999999937],[-73.221114999999998,71.660262999999986],[-73.249434999999949,71.652481000000023],[-73.262511999999958,71.648041000000035],[-73.282776000000013,71.637771999999984],[-73.303604000000007,71.621918000000051],[-73.320281999999963,71.605545000000006],[-73.325012000000015,71.599152000000061],[-73.331679999999949,71.588042999999971],[-73.338607999999965,71.571105999999929],[-73.339721999999938,71.565262000000132],[-73.352492999999981,71.557479999999998],[-73.370270000000005,71.554428000000087]],[[-96.958892999999932,71.704437000000098],[-96.99888599999997,71.701096000000064],[-97.036391999999921,71.701385000000016],[-97.050277999999935,71.704162999999994],[-97.049727999999902,71.709991000000116],[-97.040282999999988,71.72026100000005],[-97.02416999999997,71.731093999999985],[-96.99888599999997,71.741363999999919],[-96.991668999999945,71.743042000000059],[-96.990829000000019,71.743866000000025],[-96.96945199999999,71.74859600000002],[-96.963897999999972,71.752212999999983],[-96.924163999999962,71.755554000000018],[-96.886397999999986,71.755264000000011],[-96.866942999999992,71.753601000000117],[-96.850554999999872,71.749419999999986],[-96.84445199999999,71.744141000000013],[-96.851104999999905,71.738875999999948],[-96.86860699999994,71.728592000000106],[-96.881377999999927,71.723312000000078],[-96.896956999999929,71.718323000000112],[-96.915832999999964,71.713608000000079],[-96.958892999999932,71.704437000000098]],[[-95.339995999999928,71.731369000000029],[-95.39805599999994,71.729431000000091],[-95.43582200000003,71.729980000000012],[-95.471114999999941,71.733597000000145],[-95.483062999999902,71.736923000000047],[-95.48832699999997,71.740814000000114],[-95.488051999999868,71.745529000000147],[-95.450286999999946,71.818877999999927],[-95.44027699999998,71.824158000000011],[-95.420836999999892,71.828873000000044],[-95.384170999999981,71.836104999999975],[-95.348891999999978,71.840546000000074],[-95.328613000000018,71.842208999999968],[-95.301666000000012,71.844147000000135],[-95.286666999999966,71.843048000000124],[-95.275832999999977,71.84027100000003],[-95.265838999999971,71.836655000000007],[-95.261672999999973,71.833328000000051],[-95.259734999999921,71.827484000000027],[-95.310546999999929,71.737198000000035],[-95.324721999999952,71.732758000000047],[-95.339995999999928,71.731369000000029]],[[-134.49554399999994,68.75221300000004],[-134.48803699999991,68.736649],[-134.48803699999991,68.731094000000098],[-134.48306299999996,68.720535000000041],[-134.47387700000002,68.711379999999963],[-134.46472199999994,68.707489000000066],[-134.44638099999997,68.700271999999984],[-134.40112299999993,68.687759000000085],[-134.37387100000001,68.682480000000112],[-134.33999599999999,68.67886400000009],[-134.30804399999994,68.678040000000124],[-134.28277600000001,68.681366000000139],[-134.24636799999996,68.687484999999981],[-134.23071299999998,68.692841000000101],[-134.22692899999998,68.694138000000123],[-134.22332800000004,68.699706999999933],[-134.26058999999987,68.733535999999958],[-134.26251200000002,68.736374000000126],[-134.28750599999995,68.753601000000003],[-134.30835000000002,68.766097999999943],[-134.32638499999996,68.773605000000089],[-134.42306500000001,68.831664999999987],[-134.54168700000002,68.919708000000071],[-134.558044,68.933043999999995],[-134.614441,68.983321999999987],[-134.62387099999995,68.992752000000053],[-134.62887599999999,69.003052000000139],[-134.62914999999992,69.008880999999974],[-134.62469499999992,69.015548999999965],[-134.56222499999996,69.082764000000111],[-134.55499299999997,69.08776899999998],[-134.53750600000001,69.09387200000009],[-134.49194299999999,69.104155999999989],[-134.46362299999998,69.106094000000098],[-134.44805899999989,69.106094000000098],[-134.36303699999996,69.102203000000031],[-134.34887700000002,69.103043000000071],[-134.33889799999992,69.106369000000086],[-134.22747800000002,69.174988000000099],[-134.22305299999999,69.181656000000032],[-134.22082499999993,69.188034000000016],[-134.22137499999997,69.216385000000116],[-134.21694899999989,69.223038000000088],[-134.162781,69.254715000000033],[-134.15389999999996,69.258880999999917],[-134.142517,69.261383000000023],[-134.12832599999996,69.262206999999989],[-134.06915299999997,69.262771999999984],[-134.05471799999998,69.263610999999969],[-134.02917500000001,69.266936999999984],[-133.92861899999991,69.282211000000075],[-133.90557899999988,69.287490999999989],[-133.89529400000004,69.290817000000004],[-133.88668799999999,69.294983000000116],[-133.87914999999998,69.299987999999985],[-133.87332199999997,69.30581699999999],[-133.86859100000004,69.312484999999924],[-133.86886599999997,69.318329000000119],[-133.87332199999997,69.323043999999982],[-133.87582399999997,69.328322999999955],[-133.86972000000003,69.33415199999996],[-133.67028799999997,69.386658000000068],[-133.65863000000002,69.389160000000004],[-133.55056799999994,69.405823000000055],[-133.40777600000001,69.414703000000088],[-133.37222299999991,69.412201000000039],[-133.35583499999996,69.409988000000055],[-133.32806400000004,69.404709000000082],[-133.30972299999996,69.402771000000143],[-133.23443599999996,69.397217000000126],[-133.21749899999992,69.39637799999997],[-133.20584099999991,69.398880000000077],[-133.073059,69.434982000000048],[-132.99941999999999,69.481934000000138],[-132.966095,69.511657999999954],[-132.95220899999998,69.563309000000061],[-132.95193499999999,69.569153000000028],[-132.95666499999993,69.57388300000008],[-132.96581999999995,69.57748400000014],[-132.98638900000003,69.590271000000143],[-132.988586,69.595260999999994],[-132.98361199999994,69.602203000000088],[-132.97747800000002,69.608032000000094],[-132.92251599999997,69.642212000000029],[-132.904449,69.650542999999971],[-132.89388999999994,69.65387000000004],[-132.86471599999999,69.658325000000104],[-132.82110599999999,69.660538000000031],[-132.78778099999994,69.659714000000065],[-132.66229199999998,69.651206999999999],[-132.628784,69.648048000000074],[-132.62028499999997,69.646378000000141],[-132.61479199999991,69.644043000000011],[-132.606628,69.639046000000121],[-132.55279499999995,69.631362999999965],[-132.53527800000001,69.630264000000011],[-132.41751099999993,69.635544000000039],[-132.39389,69.64027400000009],[-132.372772,69.646942000000081],[-132.34527600000001,69.659424000000058],[-132.33248900000001,69.671097000000088],[-132.32748399999997,69.677765000000079],[-132.333618,69.682480000000112],[-132.441101,69.702484000000027],[-132.45748900000001,69.704711999999972],[-132.46777299999991,69.701385000000016],[-132.51779199999999,69.68331900000004],[-132.54823299999998,69.685310000000129],[-132.55523700000003,69.683823000000018],[-132.57455400000003,69.683983000000126],[-132.582718,69.685654],[-132.586884,69.688148000000126],[-132.58673099999993,69.691649999999981],[-132.54833999999994,69.735809000000074],[-132.54055799999998,69.740814000000114],[-132.52749600000004,69.742477000000065],[-132.47305299999999,69.747756999999922],[-132.39974999999998,69.751663000000008],[-132.28918499999992,69.724991000000102],[-132.21304299999997,69.690810999999997],[-132.19888300000002,69.688034000000073],[-132.16305499999999,69.685256999999979],[-132.14697299999995,69.685256999999979],[-132.12304700000004,69.713608000000079],[-132.11663799999991,69.719436999999914],[-132.10720800000001,69.723602000000085],[-132.08331299999992,69.728591999999992],[-131.95443699999998,69.75471500000009],[-131.87469499999992,69.763884999999959],[-131.85861199999999,69.763611000000026],[-131.84527600000001,69.765273999999977],[-131.8347169999999,69.768599999999992],[-131.76556400000004,69.794707999999957],[-131.75891100000001,69.800536999999963],[-131.75836200000003,69.806366000000025],[-131.76028400000001,69.811646000000053],[-131.7647399999999,69.816376000000105],[-131.76666299999994,69.821655000000078],[-131.76000999999997,69.827484000000084],[-131.75058000000001,69.83137499999998],[-131.64501999999999,69.864990000000034],[-131.62359600000002,69.871368000000018],[-131.44778400000001,69.918594000000041],[-131.42639199999991,69.947479000000101],[-131.42111199999994,69.954162999999994],[-131.41027799999995,69.957214000000022],[-131.34887700000002,69.95248400000014],[-131.26916499999993,69.937759000000028],[-131.24609399999991,69.931091000000038],[-131.237213,69.927199999999971],[-131.23055999999991,69.923035000000141],[-131.20916699999998,69.899155000000007],[-131.20333899999997,69.889160000000061],[-131.20138499999996,69.883881000000088],[-131.20193499999999,69.878036000000009],[-131.2049869999999,69.871918000000051],[-131.21054099999998,69.865265000000079],[-131.21722399999987,69.859421000000054],[-131.22164899999996,69.854155999999989],[-131.22222899999991,69.848328000000038],[-131.220551,69.84304800000001],[-131.21194499999996,69.833603000000096],[-131.20526100000001,69.829437000000041],[-131.19638099999997,69.825546000000145],[-131.18499799999995,69.824158000000068],[-131.08056599999998,69.88499500000006],[-131.07501199999996,69.891663000000051],[-131.03140299999995,69.949417000000039],[-131.01028399999996,69.98692299999999],[-131.01278699999995,70.023315000000025],[-131.01947000000001,70.027771000000087],[-130.93029799999999,70.083054000000118],[-130.89224200000001,70.099152000000004],[-130.74832199999997,70.081940000000145],[-130.65612799999991,70.108597000000032],[-130.554169,70.165267999999969],[-130.54305999999991,70.168320000000051],[-130.48721299999994,70.173309000000017],[-130.47222899999997,70.173874000000069],[-130.46771200000001,70.170089999999959],[-130.47271699999993,70.167099000000121],[-130.48388699999998,70.164992999999981],[-130.51141399999995,70.162201000000039],[-130.52224699999994,70.158875000000023],[-130.54724099999999,70.127472000000012],[-130.54806499999995,70.121643000000006],[-130.54638699999992,70.116378999999995],[-130.54223599999995,70.111648999999943],[-130.53555299999999,70.107483000000059],[-130.52416999999997,70.103867000000037],[-130.5102839999999,70.101089000000002],[-130.49527,70.101654000000053],[-130.48416099999992,70.104705999999965],[-130.43237299999998,70.125870000000134],[-130.40722700000003,70.140533000000119],[-130.35360699999995,70.132202000000007],[-130.33084099999996,70.110809000000074],[-130.32250999999997,70.101379000000009],[-130.18472299999996,70.053589000000045],[-130.16861,70.053314],[-129.97555499999993,70.069442999999978],[-129.96304299999997,70.071655000000021],[-129.92611699999992,70.078598],[-129.89083900000003,70.092758000000117],[-129.86444099999994,70.126923000000033],[-129.84609999999986,70.154984000000127],[-129.8324889999999,70.195525999999916],[-129.79000899999994,70.219986000000119],[-129.73138399999999,70.253052000000082],[-129.69778400000001,70.262496999999996],[-129.68667600000003,70.265549000000078],[-129.67306499999995,70.266936999999984],[-129.64724699999999,70.251663000000065],[-129.60916099999992,70.213042999999971],[-129.45916699999998,70.147491000000116],[-129.40472399999999,70.123031999999967],[-129.40335099999999,70.11775200000011],[-129.40527299999997,70.106369000000086],[-129.40640300000001,70.10054000000008],[-129.4100039999999,70.094436999999971],[-129.433899,70.068054000000132],[-129.49749800000001,70.020538000000101],[-129.57360799999998,69.997757000000092],[-129.59555099999994,69.991363999999919],[-129.88946499999992,69.917205999999965],[-129.99304199999989,69.892487000000017],[-130.22805800000003,69.840546000000131],[-130.49581899999998,69.78166200000004],[-130.55999800000001,69.737198000000092],[-130.56140099999999,69.725815000000068],[-130.56472799999995,69.719711000000018],[-130.57028200000002,69.713043000000084],[-130.57833900000003,69.708038000000045],[-130.62136799999996,69.695251000000042],[-130.64697299999989,69.691360000000145],[-130.70416299999994,69.688309000000118],[-130.75750700000003,69.682480000000112],[-130.78030399999994,69.676926000000094],[-130.78973400000001,69.672760000000039],[-130.83639500000004,69.6336060000001],[-130.83944699999995,69.627472000000068],[-130.84081999999995,69.616089000000102],[-130.83667000000003,69.611099000000024],[-130.83749399999999,69.605545000000063],[-130.84414699999996,69.599716000000001],[-130.91915899999998,69.56721500000009],[-130.92861899999997,69.563309000000061],[-130.94473299999999,69.565536000000122],[-131.02667199999996,69.593048000000067],[-131.03973399999995,69.601653999999996],[-131.04168699999997,69.606934000000024],[-131.04083300000002,69.612761999999975],[-131.05306999999999,69.637206999999989],[-131.16332999999992,69.627762000000132],[-131.18859900000001,69.623871000000065],[-131.32861299999996,69.579987000000131],[-131.40750099999997,69.586655000000064],[-131.58694500000001,69.567490000000134],[-131.69168100000002,69.551650999999993],[-131.70498699999996,69.560256999999922],[-131.71389799999992,69.563873000000001],[-131.72778299999999,69.566940000000102],[-131.74108899999993,69.567490000000134],[-131.75585899999999,69.566940000000102],[-131.99722299999991,69.53137200000009],[-132.00640899999996,69.527205999999978],[-132.03890999999999,69.508331000000055],[-132.04666099999992,69.503326000000015],[-132.0799869999999,69.480819999999994],[-132.14169300000003,69.412766000000033],[-132.13305699999995,69.403320000000065],[-132.12164299999995,69.399994000000049],[-132.09750399999996,69.396057000000098],[-132.08526599999999,69.390823000000069],[-132.08084099999996,69.386108000000036],[-132.07888800000001,69.3808140000001],[-132.08166499999999,69.374695000000031],[-132.09472700000003,69.362762000000032],[-132.11663799999991,69.357208000000014],[-132.32916299999999,69.31442300000009],[-132.52417000000003,69.277771000000087],[-132.53195199999999,69.280547999999953],[-132.54556300000002,69.283325000000048],[-132.56167599999998,69.285812000000135],[-132.57998699999996,69.287490999999989],[-132.59222399999993,69.287200999999982],[-132.70611600000001,69.26887499999998],[-132.71777299999997,69.266388000000063],[-132.739441,69.260817999999972],[-132.76028399999996,69.254166000000112],[-132.76779199999999,69.249146000000053],[-132.90722699999998,69.1244200000001],[-132.90722699999998,69.118866000000082],[-132.90527299999997,69.042755],[-132.94610599999999,69.037491000000045],[-133.05084199999999,69.054703000000018],[-133.10638399999993,69.050537000000134],[-133.1719359999999,69.043320000000051],[-133.18331899999998,69.040817000000061],[-133.19332900000001,69.037491000000045],[-133.20083599999987,69.032485999999949],[-133.20556599999998,69.025818000000015],[-133.21499600000004,69.006653000000028],[-133.21664399999997,69.001937999999996],[-133.21444700000001,68.99664300000012],[-133.209991,68.991928000000087],[-133.20333900000003,68.987761999999975],[-133.19860799999998,68.983046999999942],[-133.19888300000002,68.977203000000145],[-133.21304299999991,68.938034000000073],[-133.22610499999996,68.913605000000132],[-133.23361199999999,68.908600000000092],[-133.31332399999985,68.871918000000051],[-133.32333399999993,68.868590999999924],[-133.33471699999996,68.866089000000045],[-133.34887699999996,68.865265000000079],[-133.36331200000001,68.866652999999985],[-133.37692300000003,68.869140999999956],[-133.38583399999999,68.873032000000023],[-133.39944500000001,68.881362999999965],[-133.40167199999991,68.886658000000011],[-133.39529400000004,68.89027400000009],[-133.37969999999996,68.89027400000009],[-133.36694299999994,68.891936999999984],[-133.359711,68.896942000000024],[-133.35360700000001,68.90277100000003],[-133.35803199999992,68.907486000000063],[-133.36944599999993,68.910538000000031],[-133.38275099999998,68.911102000000142],[-133.39556899999997,68.909424000000058],[-133.46112099999999,68.892761000000121],[-133.466095,68.888321000000133],[-133.484711,68.850266000000033],[-133.493042,68.826659999999947],[-133.49081399999994,68.821655000000078],[-133.48416099999997,68.81164600000011],[-133.47082499999999,68.797485000000108],[-133.46389799999992,68.793320000000108],[-133.4549869999999,68.789703000000145],[-133.40557899999999,68.772217000000012],[-133.32138099999992,68.746368000000132],[-133.16418499999992,68.707214000000079],[-133.08999599999999,68.694977000000108],[-133.05416899999994,68.691360000000145],[-133.03750599999995,68.690536000000009],[-133.02334599999995,68.691360000000145],[-133.01083399999987,68.693038999999999],[-132.98803699999996,68.697754000000032],[-132.95861799999994,68.69859299999996],[-132.94305399999996,68.696365000000014],[-132.91833500000001,68.690262000000075],[-132.92056299999996,68.695526000000029],[-132.9336239999999,68.709717000000069],[-132.94250499999998,68.713318000000129],[-132.95471199999997,68.71527100000003],[-133.00723299999999,68.719711000000075],[-133.02252199999998,68.719711000000075],[-133.03527800000001,68.718048000000124],[-133.04583699999995,68.711379999999963],[-133.11248799999998,68.714996000000042],[-133.142517,68.718597000000102],[-133.15249599999993,68.720825000000048],[-133.25500499999998,68.758606000000043],[-133.25945999999999,68.763321000000076],[-133.26611299999996,68.778869999999984],[-133.26141399999995,68.785537999999974],[-133.24999999999994,68.788040000000024],[-133.23416099999992,68.785812000000078],[-133.225281,68.782211000000018],[-133.22082499999999,68.777480999999966],[-133.22082499999999,68.771652000000131],[-133.21664399999997,68.766937000000098],[-133.20306399999998,68.764160000000004],[-133.16168200000004,68.75749200000007],[-133.14752199999998,68.758330999999998],[-133.13891599999994,68.76249700000011],[-133.1397399999999,68.766937000000098],[-133.21139499999998,68.790817000000118],[-133.23498499999999,68.795821999999987],[-133.250854,68.798035000000141],[-133.28178399999996,68.794426000000101],[-133.28863499999989,68.793097999999986],[-133.30145300000004,68.789429000000041],[-133.32556199999999,68.787491000000045],[-133.33554099999992,68.789703000000145],[-133.34445199999993,68.793594000000041],[-133.35665899999992,68.801085999999941],[-133.35888699999998,68.806366000000025],[-133.35415599999993,68.832214000000135],[-133.332764,68.843872000000147],[-133.27722199999988,68.856934000000024],[-133.26583900000003,68.859421000000054],[-133.23776199999998,68.861099000000024],[-133.22192399999994,68.858871000000022],[-133.18804899999986,68.849152000000061],[-133.16778599999998,68.836655000000064],[-133.15917999999999,68.827209000000096],[-133.15222199999999,68.823044000000095],[-133.12191799999994,68.805817000000047],[-133.10833700000001,68.80304000000001],[-133.09167500000001,68.802199999999914],[-133.06222500000001,68.802765000000136],[-133.00527999999997,68.815262000000132],[-132.95803799999993,68.835541000000092],[-132.962219,68.846099999999922],[-132.9619449999999,68.85165400000011],[-132.95193499999999,68.854979999999955],[-132.93667599999998,68.854979999999955],[-132.86749299999997,68.846099999999922],[-132.85611,68.842758000000003],[-132.78594999999996,68.818428000000097],[-132.75363199999998,68.802765000000136],[-132.49194299999994,68.801085999999941],[-132.48055999999991,68.803589000000102],[-132.47027600000001,68.806931000000077],[-132.40557899999999,68.842758000000003],[-132.40029900000002,68.847214000000122],[-132.39529400000004,68.853867000000093],[-132.39279199999999,68.859985000000052],[-132.396973,68.864700000000084],[-132.49249299999997,68.90637200000009],[-132.50363200000004,68.909714000000065],[-132.55334499999998,68.916091999999992],[-132.56750499999998,68.915268000000026],[-132.57638499999996,68.911102000000142],[-132.574432,68.906097000000102],[-132.56777999999991,68.901657000000057],[-132.54055799999998,68.896103000000096],[-132.55557299999992,68.878311000000053],[-132.66528299999993,68.841934000000037],[-132.67806999999993,68.840271000000087],[-132.69360399999994,68.840546000000131],[-132.76229899999998,68.857491000000095],[-132.77094999999997,68.858147000000031],[-132.77778599999999,68.860153000000082],[-132.78027299999991,68.862983999999983],[-132.833618,68.917755000000113],[-132.85998499999988,68.989150999999993],[-132.868042,69.021378000000141],[-132.87191799999999,69.056641000000013],[-132.86944600000004,69.062759000000085],[-132.86553999999995,69.068329000000006],[-132.81527699999998,69.08638000000002],[-132.80526699999996,69.089432000000102],[-132.77111799999994,69.085541000000035],[-132.75418100000002,69.084717000000069],[-132.68917799999991,69.082489000000123],[-132.67501800000002,69.083328000000051],[-132.66332999999997,69.085815000000139],[-132.54083300000002,69.135268999999994],[-132.46081500000003,69.124695000000088],[-132.46472199999999,69.119141000000127],[-132.46749899999998,69.107208000000071],[-132.45916699999992,69.108032000000037],[-132.42861900000003,69.11775200000011],[-132.40777599999996,69.1244200000001],[-132.38500999999997,69.139160000000061],[-132.37887599999999,69.145264000000054],[-132.36886600000003,69.158600000000035],[-132.36138899999997,69.171371000000136],[-132.343323,69.203323000000069],[-132.34249899999992,69.220260999999994],[-132.33972199999994,69.22665399999994],[-132.33056599999998,69.230820000000051],[-132.32055699999995,69.233871000000079],[-132.30612199999996,69.234711000000118],[-132.22360199999997,69.213608000000022],[-132.2225039999999,69.141662999999994],[-132.16805999999997,69.213882000000126],[-132.11694299999999,69.242203000000075],[-132.05804399999994,69.242203000000075],[-131.99600199999998,69.251632999999913],[-131.96389799999997,69.256942999999978],[-131.87527499999999,69.279709000000025],[-131.86499000000003,69.283051000000114],[-131.8052669999999,69.316375999999991],[-131.79751599999986,69.321381000000088],[-131.79110700000001,69.327208999999982],[-131.71444699999995,69.397766000000104],[-131.72555499999993,69.401093000000003],[-131.73416099999997,69.400542999999971],[-131.80667099999999,69.39137299999993],[-131.950287,69.395827999999938],[-131.96499600000004,69.397217000000126],[-131.97277800000001,69.400269000000037],[-131.97000099999997,69.406372000000033],[-131.65222199999994,69.471924000000058],[-131.63919099999998,69.473602000000142],[-131.60748299999995,69.473312000000135],[-131.59136999999993,69.470825000000048],[-131.45889299999999,69.449141999999938],[-131.44528200000002,69.446365000000071],[-131.432953,69.437194999999974],[-131.42910799999993,69.434700000000134],[-131.43160999999998,69.431365999999969],[-131.43710299999992,69.429031000000066],[-131.45193499999999,69.420532000000094],[-131.46221899999995,69.417206000000078],[-131.47164900000001,69.413039999999967],[-131.47943099999998,69.408035000000098],[-131.48611500000004,69.402206000000092],[-131.53472899999997,69.333327999999995],[-131.52584799999994,69.329436999999928],[-131.49941999999999,69.332489000000066],[-131.42083700000001,69.361649000000114],[-131.41278099999994,69.366653000000099],[-131.40750099999997,69.373306000000071],[-131.38989300000003,69.404159999999933],[-131.377228,69.427483000000052],[-131.32193000000001,69.49331699999999],[-131.27166699999992,69.501099000000124],[-131.25723299999999,69.501663000000065],[-131.24581899999998,69.49832200000003],[-131.23330699999991,69.48414600000001],[-131.22387700000002,69.463608000000136],[-131.22027599999996,69.453323000000012],[-131.21664399999992,69.442748999999992],[-131.21276899999992,69.422202999999968],[-131.21093799999989,69.4125370000001],[-131.21026599999999,69.406044000000065],[-131.21304299999997,69.387497000000053],[-131.22360200000003,69.384430000000123],[-131.23330699999991,69.384720000000129],[-131.24526999999995,69.382202000000007],[-131.26641799999993,69.375809000000061],[-131.31777999999997,69.358871000000136],[-131.39529399999998,69.318603999999993],[-131.40307599999994,69.313873000000058],[-131.415009,69.301376000000062],[-131.41445899999997,69.296936000000017],[-131.33526599999993,69.316666000000055],[-131.32470699999999,69.31999200000007],[-131.19332899999995,69.365264999999965],[-131.18859900000001,69.368317000000104],[-131.16650400000003,69.404930000000093],[-131.16223099999996,69.490540000000067],[-131.16418499999997,69.495529000000033],[-131.23123199999992,69.543892000000028],[-131.25385999999997,69.571846000000107],[-131.22546399999999,69.580719000000101],[-131.20681799999994,69.55720500000001],[-131.15046699999994,69.518600000000049],[-131.13006599999994,69.516388000000006],[-131.11053499999997,69.485329000000036],[-131.130157,69.429375000000107],[-131.14851399999992,69.403534000000036],[-131.1458439999999,69.374695000000031],[-131.13583399999999,69.359985000000108],[-131.12832599999996,69.361923000000047],[-131.10122699999999,69.393921000000091],[-131.08525099999991,69.440514000000007],[-131.06085199999995,69.470688000000109],[-131.06617699999993,69.491096000000084],[-131.06394999999998,69.512389999999982],[-131.08924899999994,69.531914000000143],[-131.10920699999997,69.543449000000123],[-131.127838,69.554543000000024],[-131.14781199999993,69.561195000000112],[-131.16599999999988,69.567856000000006],[-131.18832399999991,69.574707000000046],[-131.19473300000004,69.57887299999993],[-131.19665499999991,69.584152000000131],[-131.19610599999999,69.589980999999966],[-131.19055199999997,69.596649000000127],[-131.183899,69.602478000000133],[-131.17471299999994,69.606369000000029],[-131.13833599999998,69.614150999999936],[-131.12359600000002,69.614700000000084],[-131.10748299999989,69.612488000000042],[-131.09359699999999,69.609421000000111],[-131.087219,69.605255],[-131.08306900000002,69.600539999999967],[-131.04577599999999,69.524429000000055],[-131.02999899999998,69.485809000000131],[-131.02780200000001,69.463882000000069],[-131.03390499999995,69.429153000000042],[-131.03695700000003,69.423035000000084],[-131.07028200000002,69.367477000000065],[-131.10803199999992,69.33526599999999],[-131.11331200000001,69.328598],[-131.11639400000001,69.32249500000006],[-131.10888699999998,69.321655000000021],[-131.09973100000002,69.325821000000076],[-131.05084199999993,69.354431000000091],[-131.02667199999996,69.383865000000128],[-130.98999000000003,69.449141999999938],[-130.99121099999996,69.50104500000009],[-130.9922029999999,69.504203999999959],[-130.99026500000002,69.539429000000041],[-130.98083499999996,69.543594000000041],[-130.96887200000003,69.545821999999987],[-130.952789,69.543320000000108],[-130.94638099999992,69.539154000000053],[-130.94222999999994,69.534148999999957],[-130.94055200000003,69.52915999999999],[-130.9244379999999,69.448593000000017],[-130.93971299999998,69.421486000000016],[-130.94154400000002,69.417816000000073],[-130.94555699999995,69.414314000000047],[-130.95039399999996,69.411324000000093],[-130.98580900000002,69.383040999999935],[-131.02583299999998,69.347878000000037],[-131.02984600000002,69.344368000000088],[-131.03317300000003,69.340377999999987],[-131.03199799999999,69.337212000000022],[-131.03668200000004,69.310532000000023],[-131.02780200000001,69.306641000000127],[-131.01696800000002,69.307480000000055],[-131.01419099999993,69.313873000000058],[-131.01333599999998,69.319442999999922],[-131.010559,69.325546000000088],[-131.00500499999998,69.332214000000022],[-130.99832200000003,69.338043000000027],[-130.95693999999997,69.371917999999994],[-130.93194599999998,69.38348400000001],[-130.92710899999992,69.386490000000038],[-130.91844200000003,69.386818000000005],[-130.91177400000004,69.384818999999993],[-130.90928599999995,69.381980999999996],[-130.89611799999994,69.380539000000056],[-130.89889500000004,69.352768000000026],[-130.90249600000004,69.340820000000122],[-130.90640300000001,69.328872999999987],[-130.91427599999992,69.318313999999987],[-130.93194599999998,69.304977000000122],[-130.93972799999995,69.299987999999985],[-130.96362299999987,69.285262999999986],[-131.00057999999996,69.256653000000142],[-131.024719,69.209717000000126],[-131.01806599999992,69.141936999999928],[-131.01419099999993,69.136932000000058],[-130.99832200000003,69.134720000000016],[-130.9372249999999,69.134430000000009],[-130.92861899999997,69.145264000000054],[-130.93112199999996,69.222488000000055],[-130.93276999999995,69.227767999999912],[-130.93917799999991,69.232208000000128],[-130.9513849999999,69.246368000000075],[-130.950287,69.257766999999944],[-130.94723499999998,69.264160000000118],[-130.94168100000002,69.270538000000045],[-130.93499800000001,69.276382000000069],[-130.82110599999993,69.374695000000031],[-130.81304899999998,69.379700000000128],[-130.77139299999999,69.398880000000077],[-130.76055899999994,69.402206000000092],[-130.73165899999998,69.403320000000065],[-130.71472199999999,69.402206000000092],[-130.70028699999995,69.402771000000143],[-130.689728,69.406096999999988],[-130.66027800000001,69.42942800000003],[-130.65472399999993,69.43609600000002],[-130.64529400000004,69.454712000000029],[-130.65280200000001,69.457763999999941],[-130.667236,69.457214000000079],[-130.74777199999994,69.449141999999938],[-130.71499599999993,69.462203999999986],[-130.52502400000003,69.543594000000041],[-130.50723300000004,69.552474999999959],[-130.47860700000001,69.574707000000046],[-130.392517,69.645828000000108],[-130.385559,69.651657000000114],[-130.36248799999998,69.673874000000012],[-130.36608899999987,69.686371000000008],[-130.28112799999991,69.700271999999984],[-130.03308099999998,69.731934000000081],[-129.691956,69.784424000000115],[-129.67251599999992,69.792480000000012],[-129.65307599999994,69.800536999999963],[-129.624146,69.812485000000038],[-129.60220300000003,69.818877999999984],[-129.41332999999992,69.838042999999971],[-129.31555199999997,69.84664900000007],[-129.24276699999984,69.849990999999989],[-129.17999299999997,69.849152000000004],[-129.14862099999993,69.849990999999989],[-129.09942599999994,69.858871000000022],[-129.05889899999988,69.873871000000008],[-129.04196199999996,69.883606000000043],[-129.02722199999999,69.895264000000111],[-129.01501499999995,69.908325000000048],[-129.00058000000001,69.933043999999995],[-128.98831199999995,69.946091000000024],[-128.97360200000003,69.95748900000001],[-128.96527100000003,69.962494000000049],[-128.95526100000001,69.966385000000116],[-128.94415300000003,69.969437000000084],[-128.93194600000004,69.971649000000127],[-128.90084799999994,69.971924000000115],[-128.88723799999997,69.968872000000033],[-128.86471599999999,69.961655000000121],[-128.85610999999989,69.957764000000054],[-128.85470599999996,69.954711999999915],[-128.93444799999992,69.844146999999964],[-128.94665499999991,69.841934000000037],[-128.96417199999996,69.843322999999998],[-129.03805499999999,69.851929000000098],[-129.08248899999995,69.850540000000137],[-129.10971099999989,69.847763000000043],[-129.134186,69.843322999999998],[-129.14529399999998,69.840271000000087],[-129.15612799999997,69.836928999999998],[-129.163635,69.83137499999998],[-129.169464,69.824706999999989],[-129.16027799999995,69.715819999999951],[-129.15390000000002,69.700271999999984],[-129.14999399999994,69.695526000000029],[-129.14138800000001,69.691649999999981],[-129.13027999999991,69.688034000000073],[-128.97747800000002,69.674698000000149],[-128.96304299999997,69.675262000000089],[-128.92501799999997,69.68081699999999],[-128.78613300000001,69.760818000000086],[-128.64001500000001,69.84304800000001],[-128.54473899999999,69.885268999999994],[-128.44195599999989,69.921920999999998],[-128.32415800000001,69.948318000000086],[-128.31054700000004,69.958327999999995],[-128.30862400000001,70.008041000000105],[-128.31222499999996,70.012772000000041],[-128.349152,70.03915400000011],[-128.35638399999999,70.048874000000012],[-128.36138900000003,70.058868000000018],[-128.36972000000003,70.095825000000048],[-128.36831699999988,70.101654000000053],[-128.36193800000001,70.108322000000044],[-128.35333299999996,70.113037000000077],[-128.34304799999995,70.116928000000144],[-128.31054700000004,70.126923000000033],[-128.24414099999996,70.146378000000027],[-128.10916099999997,70.182204999999954],[-128.09414700000002,70.182479999999998],[-128.05667099999994,70.178039999999953],[-128.01055899999994,70.178314000000114],[-127.99472000000003,70.179428000000087],[-127.96833799999996,70.182754999999986],[-127.84861799999999,70.208878000000141],[-127.61501299999992,70.228867000000093],[-127.58500699999996,70.229431000000034],[-127.54998799999998,70.22665400000011],[-127.51500699999985,70.22164900000007],[-127.51750199999998,70.225540000000137],[-127.55082700000003,70.236374000000012],[-127.578056,70.242751999999996],[-127.61305199999987,70.247757000000036],[-127.71665999999999,70.259720000000073],[-127.73166700000002,70.261382999999967],[-127.79194599999994,70.25999500000006],[-127.85833699999995,70.263046000000088],[-127.87581599999987,70.264435000000105],[-128.02835099999993,70.28637700000013],[-128.03695700000003,70.290543000000071],[-128.06664999999987,70.307205000000067],[-128.07611099999991,70.343597000000045],[-128.07843000000003,70.346436000000097],[-128.07144199999988,70.348267000000078],[-128.0616149999999,70.347923000000037],[-128.05343599999998,70.346092000000056],[-128.04661599999986,70.343933000000106],[-128.02711499999998,70.340766999999971],[-127.98889200000002,70.345824999999991],[-127.97250399999996,70.34526100000005],[-127.96000699999996,70.347488000000112],[-127.94860799999998,70.350540000000024],[-127.94082600000002,70.356094000000041],[-127.90194699999995,70.393326000000059],[-127.91555800000003,70.396652000000074],[-127.93195300000002,70.396942000000081],[-127.95417799999996,70.39387499999998],[-127.97693600000002,70.387772000000041],[-127.987213,70.383880999999974],[-128.02166699999998,70.374695000000031],[-128.06500199999994,70.377312000000018],[-128.13833599999992,70.37598400000013],[-128.15183999999994,70.380310000000122],[-128.15933199999995,70.385483000000022],[-128.19665499999996,70.391937000000041],[-128.19888300000002,70.40248100000008],[-128.19055200000003,70.436646000000053],[-128.17749000000003,70.460815000000139],[-128.16055299999999,70.491364000000033],[-128.15249600000004,70.503601000000003],[-128.13583399999993,70.523041000000148],[-128.006958,70.588593000000003],[-127.99665799999997,70.590546000000131],[-127.97138999999999,70.583878000000141],[-127.90360999999996,70.562485000000038],[-127.83556399999998,70.540817000000118],[-127.68028300000003,70.486098999999967],[-127.51583900000003,70.426086000000055],[-127.42859599999991,70.393326000000059],[-127.27471899999995,70.326096000000064],[-127.24889399999995,70.314148000000046],[-127.18831599999999,70.280548000000124],[-127.173607,70.272217000000069],[-127.125,70.237198000000149],[-127.07640100000003,70.196365000000071],[-127.05499299999997,70.178039999999953],[-127.03443899999996,70.148880000000077],[-126.89334099999996,70.008880999999974],[-126.87888299999997,70.000548999999978],[-126.81276700000001,69.910537999999974],[-126.81194299999993,69.905258000000117],[-126.80526700000001,69.895538000000045],[-126.74388099999999,69.813873000000115],[-126.71472199999999,69.775269000000094],[-126.70584099999996,69.766098000000113],[-126.69999699999994,69.76138300000008],[-126.6808319999999,69.748031999999967],[-126.67250100000001,69.743866000000082],[-126.62053699999996,69.719986000000063],[-126.60166899999996,69.712479000000144],[-126.45944199999997,69.644149999999968],[-126.29055799999998,69.558594000000028],[-126.26777599999997,69.540817000000118],[-126.26722699999993,69.535537999999974],[-126.25583599999999,69.526657000000057],[-126.11221299999994,69.469436999999971],[-126.08860800000002,69.462493999999992],[-126.0497279999999,69.45277400000009],[-126.03666699999997,69.449706999999989],[-125.98889199999996,69.430542000000003],[-125.96806299999997,69.423035000000084],[-125.95749699999999,69.419434000000024],[-125.91055299999999,69.405548000000067],[-125.88474300000001,69.399155000000064],[-125.83972199999999,69.389160000000004],[-125.55110200000001,69.33718900000008],[-125.42639200000002,69.312180000000126],[-125.41528299999987,69.313019000000054],[-125.37249800000001,69.33580000000012],[-125.36554699999999,69.342468000000054],[-125.39083900000003,69.370513999999957],[-125.40110800000002,69.374130000000036],[-125.37748699999997,69.396087999999963],[-125.21000699999996,69.381912],[-125.16528299999999,69.381638000000066],[-125.14167800000001,69.38638300000008],[-125.13249200000001,69.391098000000113],[-125.12554899999998,69.397491000000059],[-125.11193800000001,69.415817000000061],[-125.08944700000001,69.449706999999989],[-125.11277799999999,69.464157000000114],[-125.12304699999993,69.468032999999991],[-125.462784,69.452469000000065],[-125.53056300000003,69.435242000000073],[-125.609444,69.415253000000121],[-125.62249799999995,69.418593999999985],[-125.61805700000002,69.42442299999999],[-125.57805599999995,69.471649000000014],[-125.48832700000003,69.50749200000007],[-125.47721899999993,69.510268999999994],[-125.46472199999988,69.512207000000103],[-125.449997,69.51249700000011],[-125.30695300000002,69.499984999999981],[-125.14723200000003,69.485519000000124],[-125.13166799999993,69.484694999999988],[-125.11805699999996,69.485793999999942],[-125.12082700000002,69.490798999999981],[-125.13137799999993,69.49441500000006],[-125.18554699999987,69.507202000000063],[-125.21640000000002,69.513031000000069],[-125.25499699999995,69.523026000000016],[-125.265556,69.526917000000083],[-125.41000399999996,69.628036000000066],[-125.41306299999997,69.633041000000105],[-125.41361999999992,69.638321000000133],[-125.41166699999991,69.64387499999998],[-125.37805200000003,69.678589000000045],[-125.36554699999999,69.690262000000075],[-125.35527000000002,69.694138000000123],[-125.079453,69.742752000000053],[-125.06555200000003,69.743591000000038],[-125.04972800000002,69.743042000000116],[-125.016953,69.740524000000107],[-125,69.738190000000088],[-124.98581699999994,69.734711000000004],[-124.97528099999994,69.730820000000108],[-124.96749899999998,69.726929000000041],[-124.93554699999999,69.678314],[-124.92500299999995,69.644714000000135],[-124.90638699999994,69.65387000000004],[-124.88166799999999,69.670532000000037],[-124.82195300000001,69.714995999999985],[-124.82972699999999,69.719147000000078],[-124.86165599999993,69.735809000000074],[-124.88555899999994,69.748031999999967],[-124.89750700000002,69.750549000000035],[-125.01418299999995,69.750534000000016],[-125.22805799999998,69.759140000000116],[-125.24137899999999,69.760254000000089],[-125.25890399999992,69.784103000000016],[-125.27639799999997,69.808243000000061],[-125.225281,69.839676000000054],[-125.20638999999994,69.849120999999968],[-125.19611399999997,69.853026999999997],[-125.18443299999996,69.855804000000091],[-125.16750300000001,69.85414099999997],[-125.16194199999995,69.849700999999982],[-125.15722700000003,69.823563000000036],[-125.15666199999998,69.818283000000122],[-125.17083700000001,69.805496000000119],[-125.170547,69.800216999999975],[-125.165009,69.795502000000113],[-125.15055799999999,69.793564000000003],[-125.05666399999996,69.795242000000087],[-125.03222700000003,69.817200000000071],[-125.00945300000001,69.845520000000079],[-124.94748700000002,69.910537999999974],[-124.94027699999987,69.916930999999977],[-124.89334100000002,69.940262000000018],[-124.76444999999995,69.970824999999991],[-124.79527299999995,70.008880999999974],[-124.82695000000001,70.012496999999996],[-124.88694799999996,70.011932000000002],[-124.99027999999998,70.00610400000005],[-125.025284,69.998000999999988],[-125.04695100000004,69.989990000000091],[-125.08640299999996,69.968535999999915],[-125.10722399999997,69.953522000000078],[-125.10759699999994,69.947975000000099],[-125.11138899999997,69.941940000000102],[-125.12389400000001,69.939956999999993],[-125.19082600000002,69.932433999999944],[-125.20667299999991,69.933228000000099],[-125.21721599999995,69.936905000000081],[-125.21777299999997,69.942337000000066],[-125.20221699999991,69.998581000000058],[-125.19748700000002,70.004501000000118],[-125.18831599999999,70.009033000000102],[-125.016953,70.076218000000097],[-125,70.079987000000017],[-124.98972300000003,70.078598],[-124.98166700000002,70.074432000000115],[-124.97556299999991,70.064697000000024],[-124.97528099999994,70.059418000000051],[-124.98194899999999,70.047760000000039],[-124.98665599999998,70.041655999999989],[-124.99610899999999,70.036925999999994],[-124.99768799999998,70.036925999999994],[-125,70.036925999999994],[-125.03999299999992,70.029068000000109],[-125.04804999999999,70.023041000000092],[-125.04527300000001,70.017990000000111],[-125.03443900000002,70.013931000000014],[-125.01999699999993,70.011993000000075],[-124.90139799999997,70.021378000000141],[-124.86332699999997,70.027206000000092],[-124.85527000000002,70.03054800000001],[-124.86972000000003,70.032760999999994],[-124.93916299999995,70.02748100000008],[-124.95500199999998,70.028320000000065],[-124.95694699999996,70.032211000000132],[-124.93916299999995,70.042480000000126],[-124.92859599999997,70.046097000000088],[-124.81416300000001,70.061645999999996],[-124.71444700000001,70.069153000000142],[-124.67527799999993,70.071930000000066],[-124.64527900000002,70.071930000000066],[-124.63474300000001,70.068329000000006],[-124.63417099999992,70.057754999999929],[-124.60333300000002,70.019714000000135],[-124.59777799999995,70.01527400000009],[-124.58473199999992,70.011932000000002],[-124.56861899999996,70.011108000000036],[-124.55583199999995,70.013046000000145],[-124.45754999999997,70.035706000000118],[-124.45172100000002,70.038376000000028],[-124.44672400000002,70.0417020000001],[-124.423607,70.056366000000139],[-124.44138299999997,70.076096000000121],[-124.449432,70.08027600000014],[-124.506958,70.100266000000147],[-124.51999699999999,70.103867000000037],[-124.54888899999997,70.109984999999938],[-124.58556399999992,70.115265000000022],[-124.59944199999995,70.114151000000049],[-124.62053700000001,70.106644000000074],[-124.63221699999997,70.103867000000037],[-124.68138099999999,70.094436999999971],[-124.71972699999998,70.088593000000117],[-124.735817,70.089432000000102],[-124.73889200000002,70.094436999999971],[-124.75195299999996,70.116378999999995],[-124.75250199999999,70.121643000000006],[-124.74388099999999,70.127197000000137],[-124.734444,70.131927000000019],[-124.70472699999993,70.14498900000001],[-124.69415299999997,70.148605000000089],[-124.68028299999997,70.149719000000061],[-124.43611099999998,70.15109300000006],[-124.39138800000001,70.134155000000135],[-124.35861199999988,70.068603999999993],[-124.36945299999996,70.034987999999998],[-124.37193300000001,70.029434000000037],[-124.38394199999993,70.017761000000007],[-124.41776999999996,69.98942599999998],[-124.42610199999996,69.983871000000079],[-124.45944199999991,69.956375000000037],[-124.42971799999992,69.849425999999937],[-124.44249000000002,69.832763999999997],[-124.45722999999998,69.819716999999969],[-124.47972099999998,69.803589000000102],[-124.50167799999991,69.784424000000115],[-124.50361599999997,69.730820000000108],[-124.5005569999999,69.725815000000068],[-124.49526999999995,69.72137500000008],[-124.487503,69.717209000000139],[-124.45916699999998,69.710815000000082],[-124.36138900000003,69.701096000000121],[-124.29499800000002,69.695251000000042],[-124.28111299999995,69.696091000000081],[-124.26862299999993,69.69802900000002],[-124.2433319999999,69.714705999999978],[-124.23388699999998,69.719147000000078],[-124.21305799999993,69.726654000000053],[-124.20140099999998,69.72943099999992],[-124.1875,69.73054500000012],[-124.06973299999987,69.723602000000085],[-124.04083300000002,69.701385000000016],[-124.05526700000001,69.670532000000037],[-124.21193699999998,69.586380000000077],[-124.24054699999994,69.550262000000032],[-124.24999999999994,69.54553199999998],[-124.28028899999998,69.533600000000035],[-124.33444199999997,69.516936999999984],[-124.37777699999992,69.496933000000013],[-124.39527899999996,69.486923000000104],[-124.51888999999994,69.404159999999933],[-124.51390099999998,69.399428999999998],[-124.48000300000001,69.378036000000066],[-124.47222899999991,69.37414600000011],[-124.44666299999994,69.367203000000131],[-124.32584399999996,69.351929000000041],[-124.26363399999997,69.348602000000085],[-124.21888699999994,69.347762999999929],[-124.16194200000001,69.349152000000117],[-124.12026999999995,69.351379000000009],[-124.09528399999999,69.354980000000069],[-124.01640299999997,69.379150000000095],[-123.962219,69.383040999999935],[-123.83138999999994,69.38888500000013],[-123.81696299999999,69.38888500000013],[-123.73055999999997,69.377472000000125],[-123.702789,69.371094000000028],[-123.69776899999988,69.366378999999995],[-123.69748699999997,69.361099000000081],[-123.69248999999996,69.356644000000074],[-123.67999299999991,69.353317000000118],[-123.66639700000002,69.354156000000103],[-123.502792,69.377197000000137],[-123.47778299999993,69.381088000000034],[-123.46611000000001,69.383881000000031],[-123.41915899999998,69.404434000000037],[-123.40750100000002,69.416092000000106],[-123.43276999999995,69.423035000000084],[-123.44027699999998,69.427200000000084],[-123.45084399999996,69.446930000000066],[-123.45084399999996,69.452209000000039],[-123.44833399999993,69.457763999999941],[-123.44332900000001,69.463882000000069],[-123.43611099999998,69.470261000000107],[-123.42859599999991,69.476379000000065],[-123.39998599999996,69.490265000000079],[-123.36527999999998,69.49832200000003],[-123.33999599999999,69.502213000000097],[-123.30110200000001,69.506653000000085],[-123.27306399999998,69.507767000000115],[-123.26139799999999,69.504990000000021],[-123.26287799999994,69.500267000000008],[-123.25723299999999,69.496094000000085],[-123.19275699999997,69.490814],[-123.17999299999991,69.492477000000122],[-123.16861,69.4952550000001],[-123.16332999999992,69.501389000000131],[-123.13166799999999,69.559708000000001],[-123.12666300000001,69.571105999999986],[-123.09638999999999,69.670532000000037],[-123.09612299999998,69.686371000000008],[-123.10637700000001,69.743042000000116],[-123.10888699999998,69.747756999999922],[-123.11665299999993,69.75221300000004],[-123.10527000000002,69.77915999999999],[-123.01583900000003,69.818329000000062],[-122.97083999999995,69.830826000000002],[-122.95916699999992,69.833603000000096],[-122.94332900000001,69.832763999999997],[-122.90499899999998,69.822220000000129],[-122.876938,69.810257000000092],[-122.85388199999994,69.803040000000124],[-122.82584400000002,69.796371000000079],[-122.80803699999996,69.793593999999985],[-122.79332699999992,69.793593999999985],[-122.779449,69.794707999999957],[-122.76666299999999,69.796371000000079],[-122.754997,69.799149000000057],[-122.74610899999999,69.80442800000003],[-122.66443599999997,69.818054000000018],[-122.61554699999999,69.812195000000031],[-122.58833300000003,69.807479999999998],[-122.47778299999999,69.802765000000136],[-122.45805399999995,69.802475000000129],[-122.24333200000001,69.802200000000084],[-122.12777699999992,69.802475000000129],[-122.06220999999999,69.813309000000004],[-122.04415899999998,69.813599000000011],[-121.89639299999999,69.805542000000059],[-121.71916199999993,69.79582199999993],[-121.68388400000003,69.793593999999985],[-121.44304699999998,69.765549000000021],[-121.41639700000002,69.760818000000086],[-121.38054699999992,69.75221300000004],[-121.33332799999994,69.740814000000114],[-121.28611799999999,69.729156000000103],[-121.18305999999995,69.702484000000027],[-121.12027,69.6827550000001],[-121.08667000000003,69.673598999999967],[-121.03555299999999,69.663315000000125],[-121.00890400000003,69.658325000000104],[-120.93415800000002,69.648604999999975],[-120.88110399999994,69.638885000000073],[-120.82556199999999,69.62359600000002],[-120.79638699999992,69.613036999999963],[-120.760559,69.598328000000095],[-120.73999000000003,69.585266000000104],[-120.73528299999992,69.580276000000026],[-120.72860700000001,69.575821000000019],[-120.70111099999997,69.558594000000028],[-120.67859599999991,69.546097000000032],[-120.61609599999997,69.520264000000054],[-120.39334100000002,69.439697000000081],[-120.27528399999994,69.404159999999933],[-120.23166700000002,69.391662999999937],[-119.98222399999986,69.344711000000018],[-119.93499800000001,69.339705999999978],[-119.91776999999996,69.338318000000072],[-119.63527699999997,69.315810999999997],[-119.46140300000002,69.303314],[-119.33500700000002,69.301926000000094],[-119.31582599999996,69.301086000000055],[-119.23000300000001,69.294434000000138],[-118.94082600000002,69.259430000000066],[-118.85555999999997,69.252487000000087],[-118.84056099999992,69.250548999999978],[-118.79998799999993,69.243317000000047],[-118.69360399999999,69.223602000000028],[-118.65527299999997,69.215820000000065],[-118.64472999999998,69.212494000000049],[-118.63639799999993,69.20887799999997],[-118.58168000000001,69.180267000000072],[-118.55248999999998,69.163605000000075],[-118.53999299999998,69.154984000000127],[-118.502228,69.134720000000016],[-118.48554999999999,69.12692300000009],[-118.45777900000002,69.117477000000122],[-118.432503,69.112198000000092],[-118.18611099999998,69.063873000000115],[-118.08167999999995,69.031371999999976],[-118.03555299999999,69.019714000000135],[-118.010559,69.014434999999992],[-117.87053700000001,68.985535000000141],[-117.83693700000003,68.982483000000002],[-117.74221799999998,68.978043000000014],[-117.63390400000003,68.973602000000085],[-117.59612300000003,68.971649000000127],[-117.5625,68.968597000000045],[-117.41583299999996,68.953598],[-117.26917300000002,68.915268000000026],[-117.19110099999995,68.893874999999923],[-117.15387699999997,68.885544000000039],[-117.13667299999997,68.885544000000039],[-116.978882,68.899993999999992],[-116.96639999999996,68.902206000000035],[-116.96056399999992,68.907211000000075],[-116.93907899999994,68.911003000000107],[-116.88667299999992,68.90887500000008],[-116.74445299999996,68.880538999999999],[-116.515289,68.858032000000094],[-116.50029000000001,68.857208000000128],[-116.43611099999998,68.858597000000088],[-116.42054699999994,68.859146000000067],[-116.41111799999999,68.862761999999918],[-116.40666199999998,68.868590999999924],[-116.40943899999996,68.879974000000118],[-116.39862099999999,68.882751000000042],[-116.38137799999998,68.882477000000108],[-116.36472300000003,68.880813999999987],[-116.34028599999994,68.875259000000085],[-116.28555299999999,68.859711000000118],[-116.22721899999993,68.839157000000114],[-116.22138999999999,68.834427000000119],[-116.21362299999998,68.830551000000014],[-116.12304699999993,68.818329000000062],[-116.10637700000001,68.816666000000112],[-115.99388099999999,68.806641000000013],[-115.96000699999996,68.804703000000075],[-115.94915800000001,68.807479999999998],[-115.94138299999997,68.811920000000043],[-115.94471699999997,68.816940000000045],[-115.95249899999993,68.820831000000112],[-116.12193299999996,68.872481999999991],[-116.31639099999995,68.94747899999993],[-116.32417299999992,68.951660000000004],[-116.33000199999992,68.956100000000049],[-116.325287,68.961929000000055],[-116.31610099999995,68.965546000000018],[-116.30526699999996,68.968597000000045],[-116.26139799999987,68.979980000000069],[-116.239441,68.985535000000141],[-116.20500199999987,68.984985000000108],[-116.19027699999998,68.982758000000047],[-116.068893,68.960541000000148],[-116.00750700000003,68.946365000000128],[-115.96833799999996,68.938582999999994],[-115.88417099999998,68.924698000000092],[-115.86749299999991,68.922759999999982],[-115.77806099999987,68.936371000000122],[-115.76695299999994,68.939148000000046],[-115.77500900000001,68.943039000000113],[-115.80943299999996,68.952208999999982],[-115.83332799999999,68.992477000000008],[-115.59306300000003,68.971649000000127],[-115.44638099999992,68.937759000000028],[-115.06471299999993,68.867476999999951],[-115.05055199999993,68.868866000000139],[-115.03500400000001,68.869140999999956],[-115.01640299999997,68.868042000000003],[-114.98999000000003,68.862761999999918],[-114.97805800000003,68.859146000000067],[-114.82167099999998,68.809707999999944],[-114.79194599999994,68.799423000000047],[-114.77916699999992,68.77915999999999],[-114.77055399999995,68.769440000000088],[-114.74916100000002,68.751389000000074],[-114.729446,68.744431000000134],[-114.71528599999999,68.742203000000131],[-114.69666299999994,68.740814],[-114.66555799999998,68.741653000000099],[-114.57833899999997,68.728043000000071],[-114.54250300000001,68.719436999999971],[-114.44833399999999,68.689697000000024],[-114.44055200000003,68.685805999999957],[-114.46028100000001,68.670532000000094],[-114.46528599999999,68.664428999999927],[-114.46221899999995,68.659424000000058],[-114.45667300000002,68.654709000000025],[-114.40471600000001,68.614990000000148],[-114.39499699999993,68.611374000000069],[-114.30444299999988,68.586929000000055],[-114.23361199999994,68.569443000000092],[-114.12165799999997,68.517487000000017],[-114.10665899999992,68.509430000000066],[-114.08889799999997,68.496368000000018],[-114.07055699999995,68.477478000000076],[-114.064438,68.467209000000025],[-114.06054699999993,68.456650000000025],[-114.01112399999994,68.250275000000045],[-114.01390100000003,68.244979999999998],[-114.02333099999998,68.24136400000009],[-114.03582799999998,68.23942599999998],[-114.28806299999997,68.228866999999923],[-114.32000700000003,68.229156000000046],[-114.33805799999993,68.230545000000063],[-114.35166900000002,68.233597000000145],[-114.37053700000001,68.240540000000124],[-114.37805199999997,68.24443100000002],[-114.38305700000001,68.248871000000065],[-114.390556,68.253052000000139],[-114.41166699999997,68.259430000000066],[-114.42555199999998,68.261932000000002],[-114.44167299999987,68.263610999999969],[-114.47361799999987,68.26388500000013],[-114.70249899999999,68.250275000000045],[-114.75527999999997,68.189697000000137],[-114.76471699999996,68.186096000000077],[-114.861107,68.153594999999996],[-114.87193300000001,68.151093000000117],[-114.89639299999999,68.146942000000024],[-114.92971799999992,68.14776599999999],[-114.97749299999992,68.153319999999951],[-115.00750700000003,68.157211000000018],[-115.076683,68.168869000000086],[-115.17054699999994,68.180542000000116],[-115.22501399999993,68.184142999999949],[-115.23721299999988,68.18220500000001],[-115.24194299999999,68.176376000000005],[-115.24388099999993,68.041367000000093],[-115.24054699999994,68.036377000000073],[-115.23528299999998,68.03166200000004],[-115.220551,68.023880000000077],[-115.204453,68.021927000000119],[-115.17138699999998,68.021102999999982],[-115.15638699999994,68.021652000000131],[-115.12526699999995,68.020263999999997],[-115.11389200000002,68.017487000000131],[-115.11054999999999,68.012207000000046],[-115.11665299999999,68.007217000000026],[-115.12581599999999,68.003601000000117],[-115.20472699999993,67.978043000000014],[-115.216949,67.976089000000002],[-115.34221599999995,67.958037999999988],[-115.50334199999986,67.934418000000051],[-115.52749599999999,67.930267000000129],[-115.53639199999998,67.926651000000049],[-115.5425029999999,67.92164600000001],[-115.53694200000001,67.905257999999947],[-115.53388999999993,67.899993999999992],[-115.52834299999995,67.895538000000045],[-115.521118,67.891663000000108],[-115.50723299999993,67.889435000000105],[-115.281387,67.866379000000109],[-115.27610800000002,67.861649000000057],[-115.20028699999995,67.821930000000123],[-115.19082599999996,67.818329000000062],[-115.11361699999998,67.798599000000081],[-115.1036069999999,67.796646000000123],[-115.02887699999985,67.786652000000117],[-115.01251200000002,67.78637700000013],[-114.99916099999996,67.787491000000102],[-114.93611099999998,67.79553199999998],[-114.88667299999997,67.802764999999965],[-114.84916699999991,67.807755000000043],[-114.80999800000001,67.812195000000031],[-114.78307299999989,67.814423000000033],[-114.75334199999992,67.814986999999974],[-114.73693799999995,67.814697000000137],[-114.718887,67.813309000000061],[-114.70749699999999,67.810531999999967],[-114.6866609999999,67.804153000000099],[-114.67722299999997,67.800812000000064],[-114.65527299999997,67.788879000000009],[-114.64499699999999,67.779709000000139],[-114.637787,67.775543000000027],[-114.29778299999992,67.718597000000102],[-114.28362300000003,67.717484000000013],[-114.27139299999999,67.719436999999971],[-114.25029000000001,67.724700999999982],[-114.24109599999991,67.728317000000004],[-114.22000099999997,67.733871000000022],[-114.19583099999994,67.737762000000089],[-114.1808319999999,67.738037000000077],[-114.14835399999993,67.736923000000104],[-114.11472300000003,67.733871000000022],[-113.99694799999992,67.723038000000031],[-113.98332199999999,67.720535000000041],[-113.94943199999994,67.711655000000007],[-113.89250199999992,67.696930000000066],[-113.84584000000001,67.691359999999975],[-113.76862299999999,67.691086000000041],[-113.70889299999999,67.691925000000026],[-113.55082699999997,67.698029000000076],[-113.25583599999999,67.704436999999984],[-113.24082899999996,67.704436999999984],[-113.20694700000001,67.702484000000084],[-113.17804699999988,67.698029000000076],[-113.15556300000003,67.692200000000014],[-113.11916399999996,67.678040000000124],[-113.10777300000001,67.674988000000042],[-113.06777999999997,67.667480000000012],[-113.04998799999993,67.666092000000106],[-112.965012,67.669708000000128],[-112.73972300000003,67.669434000000024],[-112.3958439999999,67.679153000000042],[-112.370003,67.68193100000002],[-112.348343,67.687194999999974],[-112.34056099999998,67.691359999999975],[-112.33361799999989,67.696365000000014],[-112.18331899999993,67.727768000000083],[-111.912781,67.754166000000055],[-111.88305700000001,67.754439999999988],[-111.79972799999996,67.75082400000008],[-111.66000399999996,67.733322000000044],[-111.57277699999992,67.744431000000134],[-111.45861799999989,67.763046000000088],[-111.37082699999991,67.781097000000045],[-111.32250999999991,67.806931000000077],[-111.31276699999995,67.810531999999967],[-111.29083299999996,67.815536000000066],[-111.200287,67.834152000000131],[-111.17582699999991,67.837494000000049],[-111.15943900000002,67.836655000000064],[-111.14835399999998,67.833602999999982],[-111.14388999999994,67.82887299999993],[-111.146118,67.822769000000108],[-111.12082700000002,67.780823000000112],[-111.03443899999996,67.764160000000061],[-111.01834100000002,67.763321000000076],[-111.00583599999999,67.764998999999989],[-110.84056099999998,67.800262000000032],[-110.83222999999998,67.804428000000087],[-110.80972300000002,67.818604000000107],[-110.78859699999998,67.833602999999982],[-110.78278399999994,67.839431999999988],[-110.75890400000003,67.852767999999969],[-110.74221799999992,67.861099000000024],[-110.73249800000002,67.86442599999998],[-110.41443600000002,67.947754000000145],[-110.33999599999999,67.965546000000018],[-110.1991579999999,67.972214000000008],[-110.17999299999991,67.994431000000077],[-110.1725009999999,67.999420000000043],[-110.162781,68.00277699999998],[-110.15167200000002,68.005264000000068],[-110.13054699999998,68.008040999999992],[-110.11694299999994,68.008881000000031],[-110.08389299999999,68.006943000000092],[-110.07084699999996,68.004165999999998],[-110.04888900000003,67.997756999999922],[-110.00110599999999,67.979705999999965],[-109.979446,67.967483999999956],[-109.97083999999995,67.958037999999988],[-109.96888699999994,67.953049000000021],[-109.96749899999992,67.941360000000145],[-109.97028399999999,67.929703000000018],[-109.97749299999987,67.911377000000016],[-109.99166899999994,67.891373000000044],[-110.00110599999999,67.872482000000048],[-110.00361599999991,67.866379000000109],[-110.00361599999991,67.860535000000084],[-109.99749799999995,67.850815000000011],[-109.98889200000002,67.841370000000097],[-109.98249800000002,67.837204000000042],[-109.97389199999998,67.833602999999982],[-109.96305799999993,67.830276000000026],[-109.948036,67.830276000000026],[-109.93554699999999,67.831940000000031],[-109.92582699999997,67.835266000000104],[-109.91722099999998,67.839157],[-109.91251399999999,67.845824999999934],[-109.912216,67.85165399999994],[-109.91639700000002,67.856093999999985],[-109.94888300000002,67.877197000000081],[-109.95305599999995,67.881927000000076],[-109.94193999999993,67.884430000000066],[-109.89028899999994,67.879974000000004],[-109.86193799999995,67.874985000000038],[-109.823059,67.866089000000102],[-109.81416299999995,67.862198000000035],[-109.80777,67.858032000000094],[-109.76722699999993,67.827773999999977],[-109.73082699999998,67.791931000000091],[-109.72917200000001,67.767761000000121],[-109.73581699999994,67.74275200000011],[-109.74553700000001,67.739426000000094],[-109.75167799999991,67.733597000000088],[-109.74973299999994,67.728592000000049],[-109.7369379999999,67.720261000000107],[-109.72609699999998,67.716933999999981],[-109.55222300000003,67.687759000000142],[-109.53472899999991,67.685806000000014],[-109.52250700000002,67.687484999999981],[-109.51139799999999,67.689697000000081],[-109.50279199999994,67.693862999999965],[-109.48805199999993,67.703873000000044],[-109.37026999999995,67.729155999999989],[-109.25361599999997,67.731934000000138],[-109.21028100000001,67.732208000000071],[-109.15915699999999,67.727478000000019],[-109.06582600000002,67.714157000000114],[-109.05972300000002,67.709991000000002],[-109.01471699999996,67.676651000000106],[-109.00279199999994,67.662491000000045],[-108.91915899999992,67.535812000000135],[-108.921944,67.529709000000025],[-108.95388800000001,67.511932000000115],[-108.96362299999998,67.5086060000001],[-108.99665800000002,67.501389000000017],[-109.00119000000001,67.5],[-109.00666799999993,67.498322000000087],[-109.01528899999994,67.494141000000013],[-109.02139299999999,67.488311999999951],[-109.02528399999994,67.483322000000101],[-109.01806599999998,67.462494000000049],[-109.002228,67.443587999999977],[-108.98554999999993,67.436096000000077],[-108.84999099999993,67.388596000000064],[-108.83112299999993,67.353591999999992],[-108.82501200000002,67.349426000000108],[-108.81276700000001,67.348876999999959],[-108.80416899999994,67.352768000000026],[-108.79666099999986,67.357758000000103],[-108.79055799999998,67.363602000000128],[-108.76611299999996,67.396378000000027],[-108.75834700000001,67.409149000000127],[-108.75583599999999,67.415267999999969],[-108.74445299999996,67.445525999999973],[-108.74109599999997,67.457214000000135],[-108.73638900000003,67.481093999999985],[-108.735817,67.486649000000057],[-108.734734,67.547759999999982],[-108.735817,67.558594000000028],[-108.73777799999993,67.563873000000058],[-108.73889200000002,67.574707000000103],[-108.73916599999995,67.596938999999963],[-108.73638900000003,67.603043000000014],[-108.73000299999995,67.608597000000032],[-108.71472199999999,67.61914100000007],[-108.70612299999988,67.623306000000071],[-108.69611399999997,67.626373000000001],[-108.67027299999995,67.628586000000098],[-108.65527299999991,67.62831100000011],[-108.62053700000001,67.624695000000031],[-108.6100009999999,67.621093999999971],[-108.58500700000002,67.609985000000108],[-108.57888799999989,67.605545000000063],[-108.516953,67.497482000000048],[-108.51139799999999,67.487487999999985],[-108.510559,67.47665400000011],[-108.51334399999996,67.470535000000098],[-108.52333099999993,67.45748900000001],[-108.52390300000002,67.451659999999947],[-108.52278100000001,67.44081100000011],[-108.49804699999993,67.363037000000077],[-108.49027999999998,67.353591999999992],[-108.48416099999997,67.349426000000108],[-108.47138999999993,67.346649000000014],[-108.458054,67.347214000000065],[-108.43720999999994,67.352768000000026],[-108.42971799999998,67.357483000000059],[-108.42471299999994,67.364151000000049],[-108.421944,67.3702550000001],[-108.42944299999999,67.379700000000128],[-108.43554699999999,67.383881000000031],[-108.439438,67.388596000000064],[-108.44275699999997,67.399155000000121],[-108.43998699999992,67.427475000000129],[-108.43472300000002,67.431656000000032],[-108.39388999999994,67.443587999999977],[-108.38166799999999,67.445251000000098],[-108.36694299999994,67.444976999999994],[-108.34361299999989,67.438582999999937],[-108.33556399999998,67.434982000000105],[-108.32112100000001,67.426926000000037],[-108.30750299999988,67.413040000000024],[-108.301941,67.403320000000122],[-108.30027799999999,67.398041000000148],[-108.29666099999997,67.393326000000116],[-108.28832999999997,67.389435000000049],[-108.13417099999992,67.329163000000051],[-108.06360599999988,67.305251999999996],[-108.02583300000003,67.296371000000022],[-108.015289,67.293045000000006],[-107.98554999999999,67.271927000000119],[-107.94471699999997,67.236374000000069],[-107.94082600000002,67.231659000000036],[-107.875,67.140823000000012],[-107.87526700000001,67.052765000000136],[-107.88054699999998,67.04832499999992],[-107.89362299999999,67.047760000000096],[-107.90499899999998,67.049713000000054],[-107.95028699999995,67.062195000000031],[-108.00834699999996,67.077484000000084],[-108.02084399999995,67.080551000000014],[-108.03666699999991,67.081664999999987],[-108.14862099999993,67.076660000000118],[-108.15722700000003,67.072769000000051],[-108.18916300000001,67.054977000000008],[-108.19304699999986,67.049713000000054],[-108.192207,67.038878999999952],[-108.19082600000002,67.033599999999979],[-108.19138299999992,67.028046000000018],[-108.19526699999994,67.022766000000104],[-108.20388799999995,67.018875000000037],[-108.21611000000001,67.017211999999915],[-108.23277300000001,67.019150000000081],[-108.24527,67.022217000000012],[-108.45028699999995,67.083328000000108],[-108.46056399999992,67.086928999999998],[-108.495003,67.102203000000088],[-108.51722699999999,67.113876000000062],[-108.541382,67.130813999999987],[-108.55555700000002,67.138885000000073],[-108.58029199999999,67.15026899999998],[-108.59056099999998,67.153594999999996],[-108.6063769999999,67.154708999999968],[-108.61971999999997,67.15387000000004],[-108.622772,67.149993999999936],[-108.53028899999993,67.042480000000012],[-108.52416999999997,67.038315000000011],[-108.51611300000002,67.034423999999944],[-108.50140399999998,67.032211000000018],[-108.491669,67.0352630000001],[-108.48554999999988,67.041092000000106],[-108.48500100000001,67.046646000000123],[-108.48665599999998,67.05192599999998],[-108.49054699999988,67.056641000000013],[-108.48944099999994,67.067764000000011],[-108.48194899999999,67.072769000000051],[-108.468887,67.073318000000029],[-108.45612299999999,67.070541000000105],[-108.44193999999999,67.062485000000038],[-108.39222699999993,67.028869999999984],[-108.35637700000001,67.003326000000129],[-108.34665699999994,66.994431000000077],[-108.33056599999998,66.986923000000104],[-108.31806899999998,66.983871000000136],[-108.28971899999993,66.979980000000069],[-108.25862099999995,66.977768000000026],[-108.22860700000001,66.976654000000053],[-108.19695300000001,66.972214000000008],[-108.16639700000002,66.962204000000099],[-108.14998600000001,66.954436999999984],[-108.11472299999997,66.928864000000033],[-107.98528299999998,66.828598000000113],[-107.94138299999997,66.788315000000068],[-107.93831599999999,66.778046000000074],[-107.93971299999993,66.766663000000051],[-107.94193999999999,66.749709999999936],[-107.94471699999997,66.743591000000094],[-107.94803599999995,66.731933999999967],[-107.949432,66.720535000000098],[-107.94583099999994,66.715820000000065],[-107.89444699999996,66.671646000000123],[-107.88276699999989,66.663315000000011],[-107.87082699999996,66.662491000000045],[-107.86444099999989,66.668320000000051],[-107.86389200000002,66.673874000000069],[-107.86776700000001,66.71138000000002],[-107.88474299999996,66.750823999999909],[-107.88834400000002,66.755554000000132],[-107.88194299999992,66.759155000000021],[-107.86776700000001,66.758881000000088],[-107.85333299999996,66.756378000000097],[-107.829453,66.744980000000112],[-107.81777999999997,66.736374000000012],[-107.76500699999997,66.686919999999986],[-107.72416699999991,66.629700000000128],[-107.64750699999996,66.574707000000103],[-107.62805199999997,66.562194999999974],[-107.60082999999997,66.546097000000088],[-107.56945799999994,66.53054800000001],[-107.55721999999997,66.527771000000087],[-107.43305999999995,66.453598000000113],[-107.2911069999999,66.36831699999999],[-107.26027699999986,66.353043000000071],[-107.24804699999993,66.349990999999989],[-107.23500100000001,66.348602000000142],[-107.22222899999997,66.349152000000004],[-107.21140299999996,66.351379000000065],[-107.203056,66.355254999999943],[-107.196663,66.360809000000131],[-107.195831,66.366379000000052],[-107.19722000000002,66.371643000000006],[-107.20056199999993,66.376373000000058],[-107.23554999999993,66.407486000000063],[-107.34221599999995,66.461655000000064],[-107.43888899999996,66.513046000000145],[-107.56220999999994,66.591369999999984],[-107.56582599999996,66.596100000000035],[-107.56861899999996,66.606644000000074],[-107.56777999999991,66.612198000000092],[-107.56916799999999,66.617477000000065],[-107.57055700000001,66.622482000000105],[-107.57417299999997,66.627471999999955],[-107.62416100000002,66.660812000000021],[-107.64943700000003,66.693862999999965],[-107.69387799999998,66.755829000000006],[-107.74665800000002,66.922760000000039],[-107.68861399999997,66.977097000000128],[-107.63806199999999,67.024429000000055],[-107.66665599999993,67.063034000000016],[-107.66805999999985,67.068329000000062],[-107.66166699999997,67.073883000000023],[-107.65083299999992,67.076096000000007],[-107.63612399999994,67.073883000000023],[-107.60777299999995,67.063309000000004],[-107.58361799999994,67.051650999999993],[-107.52390300000002,67.020264000000054],[-107.51666299999999,67.010543999999982],[-107.48388699999998,66.924149],[-107.48473399999995,66.918593999999928],[-107.49694799999997,66.917206000000022],[-107.57972699999988,66.916382000000056],[-107.59445199999999,66.918868999999972],[-107.60221899999988,66.922760000000039],[-107.608047,66.926926000000094],[-107.62332200000003,66.940262000000075],[-107.626938,66.944977000000108],[-107.632767,66.949417000000096],[-107.64083899999997,66.953049000000078],[-107.647064,66.942711000000031],[-107.65521999999999,66.943710000000067],[-107.66238399999997,66.942879000000062],[-107.66754900000001,66.940376000000072],[-107.67138699999998,66.937035000000037],[-107.67038700000001,66.933868000000018],[-107.63527699999997,66.892212000000029],[-107.57028199999991,66.837769000000094],[-107.564438,66.833602999999982],[-107.51306199999993,66.822220000000016],[-107.42832900000002,66.804703000000131],[-107.41610699999995,66.806091000000038],[-107.40888999999993,66.811096000000077],[-107.39111299999996,66.891373000000101],[-107.39584400000001,66.901382000000126],[-107.422234,66.939697000000024],[-107.42944299999999,66.949142000000109],[-107.43888899999996,66.958328000000051],[-107.44471699999997,66.962493999999936],[-107.44387799999993,66.968048000000124],[-107.435272,66.972214000000008],[-107.421944,66.972762999999986],[-107.40611299999995,66.97137500000008],[-107.37943999999993,66.966094999999996],[-107.35916099999992,66.959427000000005],[-107.23388699999992,66.902206000000092],[-107.21806299999997,66.894714000000135],[-107.21028099999995,66.890823000000069],[-107.1875,66.87359600000002],[-107.15750099999991,66.846939000000134],[-107.15055799999999,66.837494000000049],[-107.14916999999991,66.832214000000022],[-107.137787,66.823608000000092],[-107.12554899999992,66.820540999999992],[-107.09472700000003,66.818329000000119],[-107.08361799999994,66.820540999999992],[-107.15527299999997,66.899719000000005],[-107.20388800000001,66.944702000000063],[-107.22666900000002,66.961655000000007],[-107.24027999999998,66.969986000000063],[-107.29750100000001,67.001938000000052],[-107.3052669999999,67.005829000000119],[-107.31139399999995,67.127197000000024],[-107.38806199999993,67.144440000000145],[-107.43083200000001,67.158325000000048],[-107.44915800000001,67.165543000000071],[-107.47332799999992,67.176926000000037],[-107.48137700000001,67.180816999999934],[-107.50306699999993,67.192749000000106],[-107.53250100000002,67.214157],[-107.64862099999993,67.359984999999995],[-107.57694999999995,67.475540000000137],[-107.57389799999993,67.481658999999979],[-107.57528699999995,67.48692299999999],[-107.57888800000001,67.491652999999985],[-107.58277899999996,67.496368000000018],[-107.58860799999991,67.500823999999966],[-107.71833800000002,67.573318000000086],[-107.74054699999994,67.585265999999933],[-107.77362099999999,67.600540000000024],[-107.81331599999999,67.614426000000037],[-107.84472700000003,67.624420000000043],[-107.89055599999989,67.642487000000074],[-107.96916199999998,67.676651000000106],[-107.98972300000003,67.688873000000115],[-107.99944299999999,67.698029000000076],[-108.006958,67.707489000000123],[-108.01334399999996,67.728317000000004],[-108.01445000000001,67.73414600000001],[-108.015289,67.744980000000055],[-108.01390099999998,67.756103999999993],[-108.00805699999995,67.768326000000116],[-107.99249299999997,67.788040000000024],[-107.94833399999993,67.841095000000109],[-107.94193999999999,67.846939000000134],[-107.93415800000002,67.85165399999994],[-107.92278299999998,67.853867000000093],[-107.890289,67.85165399999994],[-107.87777699999992,67.853317000000061],[-107.85527000000002,67.85775799999999],[-107.75666799999993,67.880814000000044],[-107.71472199999994,67.892487000000074],[-107.70472699999993,67.895828000000108],[-107.674713,67.916092000000049],[-107.66166699999997,67.927475000000015],[-107.65110800000002,67.940535999999952],[-107.65499899999992,67.945250999999985],[-107.66555800000003,67.94859300000013],[-107.77050800000001,67.96526300000005],[-107.81133999999992,67.971596000000034],[-107.91027800000001,67.988585999999998],[-107.91639699999996,67.993042000000059],[-107.91999800000002,67.997756999999922],[-107.89055599999989,68.081664999999987],[-107.88527699999997,68.088318000000129],[-107.87888299999997,68.093872000000147],[-107.86332699999997,68.103592000000049],[-107.85166899999996,68.106094000000098],[-107.837784,68.104430999999977],[-107.72112300000003,68.082763999999941],[-107.69943199999994,68.075821000000133],[-107.69360399999994,68.071655000000078],[-107.69776899999994,68.066376000000105],[-107.70667300000002,68.062485000000038],[-107.72721899999993,68.056090999999981],[-107.73860200000001,68.05386400000009],[-107.77250700000002,68.05693100000002],[-107.78778099999994,68.057205000000124],[-107.80027799999999,68.055817000000047],[-107.80943299999996,68.051650999999936],[-107.83332799999988,68.013046000000031],[-107.83389299999999,68.007217000000026],[-107.82778899999988,68.003052000000025],[-107.8038479999999,68.004264999999975],[-107.78733799999998,67.997597000000042],[-107.77900699999998,67.996765000000096],[-107.763847,67.998428000000047],[-107.75699599999996,67.999771000000123],[-107.75426500000003,68.006812999999966],[-107.73306300000002,68.020827999999995],[-107.72501399999993,68.025818000000015],[-107.69027699999992,68.042480000000012],[-107.67999299999997,68.04582199999993],[-107.61028299999998,68.058593999999971],[-107.58583099999998,68.059982000000048],[-107.57084700000001,68.059708000000114],[-107.53806299999997,68.057479999999998],[-107.45028699999989,68.047211000000118],[-107.38890100000003,68.04525799999999],[-107.36221299999994,68.04693600000013],[-107.34944200000001,68.048599000000024],[-107.32640099999998,68.053040000000124],[-107.28778099999994,68.064987000000087],[-107.25140399999998,68.080826000000002],[-107.22638699999993,68.094436999999971],[-107.154449,68.12692300000009],[-107.141953,68.128310999999997],[-107.11028299999998,68.12692300000009],[-107.10665899999998,68.122208000000057],[-107.11888099999987,68.084717000000069],[-106.96556099999998,68.113312000000121],[-106.95278899999988,68.114700000000028],[-106.85611,68.116927999999973],[-106.84111000000001,68.116379000000052],[-106.80194099999994,68.197479000000101],[-106.80943300000001,68.207214000000022],[-106.80610699999994,68.213043000000027],[-106.80027799999993,68.217484000000127],[-106.79110700000001,68.221375000000023],[-106.62748699999997,68.246643000000063],[-106.61444099999994,68.24803200000008],[-106.5994419999999,68.247482000000048],[-106.58860800000002,68.244141000000013],[-106.468613,68.190536000000122],[-106.45777900000002,68.176376000000005],[-106.45417799999996,68.160812000000078],[-106.45056199999999,68.155823000000112],[-106.44471699999991,68.151657000000057],[-106.43195300000002,68.153046000000018],[-106.42138699999987,68.156097000000045],[-106.35056299999997,68.179153000000099],[-106.34472699999998,68.183318999999983],[-106.35056299999997,68.187759000000028],[-106.35888699999992,68.191650000000095],[-106.39277600000003,68.201660000000004],[-106.42083700000001,68.207214000000022],[-106.468887,68.214431999999988],[-106.48194899999993,68.217484000000127],[-106.48999000000003,68.221375000000023],[-106.49582699999996,68.225540000000024],[-106.49722300000002,68.230820000000051],[-106.46833799999996,68.329711999999972],[-106.46501199999994,68.335815000000139],[-106.45667299999991,68.340820000000008],[-106.44748700000002,68.344711000000075],[-106.42639200000002,68.350815000000068],[-106.25611900000001,68.387772000000098],[-106.24416400000001,68.38998400000014],[-106.21833800000002,68.392487000000131],[-106.203056,68.392211999999915],[-106.185272,68.38998400000014],[-106.17471299999994,68.386658000000125],[-106.16665599999999,68.382750999999985],[-106.15471599999989,68.373871000000122],[-105.79638699999998,68.422211000000118],[-105.79055799999998,68.418045000000063],[-105.78222699999998,68.413878999999952],[-105.76583900000003,68.41276600000009],[-105.75167799999991,68.413040000000024],[-105.73972300000003,68.415267999999969],[-105.73029300000002,68.419144000000017],[-105.72305299999999,68.424698000000035],[-105.70111099999991,68.469711000000132],[-105.69721999999996,68.486649],[-105.69833399999993,68.49192800000003],[-105.70278899999994,68.501938000000109],[-105.71444699999995,68.510544000000039],[-105.74305700000002,68.564697000000137],[-105.724716,68.574158000000125],[-105.64499699999999,68.633880999999974],[-105.65083300000003,68.638046000000145],[-105.66639699999996,68.638596000000007],[-105.90222199999999,68.635269000000051],[-105.92832899999996,68.632476999999994],[-106.02944899999994,68.619704999999954],[-106.041382,68.617477000000008],[-106.04972799999996,68.612761999999975],[-106.04750100000001,68.602203000000145],[-106.05332900000002,68.595824999999991],[-106.06416300000001,68.59275800000006],[-106.2077789999999,68.567764000000068],[-106.23638900000003,68.566665999999998],[-106.37027,68.545258000000103],[-106.51083399999999,68.518326000000002],[-106.54387700000001,68.511932000000115],[-106.62470999999999,68.46748400000007],[-106.63166799999999,68.461928999999998],[-106.62888299999992,68.45138500000013],[-106.62165799999997,68.441925000000026],[-106.61582899999996,68.437759000000142],[-106.59528399999994,68.425261999999975],[-106.58473200000003,68.421646000000123],[-106.57167099999992,68.418593999999985],[-106.55387899999994,68.416656000000046],[-106.52194199999997,68.414992999999924],[-106.50446299999999,68.41276600000009],[-106.493607,68.409424000000115],[-106.48777799999988,68.404984000000127],[-106.48055999999997,68.395537999999988],[-106.52722199999994,68.300812000000121],[-106.53415699999999,68.295257999999933],[-106.54332699999998,68.291367000000037],[-106.556107,68.289978000000076],[-106.57277699999986,68.291092000000049],[-106.58444199999991,68.293319999999994],[-106.59500099999997,68.296646000000067],[-106.60109699999998,68.301086000000055],[-106.6119379999999,68.315262000000075],[-106.6383439999999,68.343048000000124],[-106.64444700000001,68.347487999999942],[-106.77887699999997,68.408034999999984],[-106.78971899999999,68.411652000000117],[-106.80277999999993,68.414428999999984],[-107.01363400000002,68.369431000000077],[-107.02166699999998,68.364699999999971],[-107.02027899999996,68.359420999999998],[-107.01666299999999,68.354705999999965],[-107.01750199999998,68.349151999999947],[-107.03138699999994,68.33776899999998],[-107.13221699999991,68.283325000000104],[-107.24610899999999,68.261383000000023],[-107.25890400000003,68.259995000000117],[-107.26500699999997,68.264160000000118],[-107.274719,68.273314999999968],[-107.28611799999993,68.287490999999989],[-107.29611199999994,68.296646000000067],[-107.30194099999994,68.300812000000121],[-107.32721699999991,68.312484999999981],[-107.33805799999999,68.315810999999997],[-107.54666099999992,68.347487999999942],[-107.56082200000003,68.349151999999947],[-107.81331599999999,68.342484000000013],[-107.82611099999997,68.341094999999996],[-107.83640300000002,68.338043000000084],[-107.84973100000002,68.326385000000073],[-107.85500299999995,68.31999200000007],[-107.88527699999997,68.26887499999998],[-107.88362100000001,68.263610999999969],[-107.879707,68.258880999999974],[-107.85417199999995,68.247482000000048],[-107.83029199999993,68.241089000000102],[-107.74194299999999,68.216934000000094],[-107.61332700000003,68.178588999999988],[-107.60249299999998,68.175262000000032],[-107.59861799999999,68.17053199999998],[-107.60305800000003,68.165268000000026],[-107.61582900000002,68.163879000000009],[-107.63221699999997,68.164992999999981],[-107.68998699999997,68.174423000000047],[-107.78639199999992,68.183868000000132],[-107.80027799999999,68.183318999999983],[-107.82584399999996,68.180542000000116],[-107.87193300000001,68.171371000000136],[-108.03388999999999,68.168594000000041],[-108.16139199999986,68.172759999999982],[-108.18694299999999,68.169983000000059],[-108.19695300000001,68.166656000000103],[-108.22028399999999,68.152205999999978],[-108.24944299999993,68.141663000000051],[-108.30055199999993,68.125809000000118],[-108.33222999999998,68.117203000000018],[-108.37026999999989,68.112762000000089],[-108.38555899999994,68.113037000000077],[-108.40306099999998,68.114990000000034],[-108.41388699999993,68.11831699999999],[-108.42250099999995,68.122208000000057],[-108.43277,68.131088000000091],[-108.43611099999987,68.141373000000044],[-108.43306000000001,68.147490999999945],[-108.42804699999994,68.154160000000047],[-108.40888999999999,68.16137700000013],[-108.39750700000002,68.163605000000075],[-108.36694299999994,68.161102000000085],[-108.36277799999993,68.15637200000009],[-108.36582899999996,68.15026899999998],[-108.37361099999993,68.145264000000111],[-108.37998999999996,68.139708999999982],[-108.37832599999996,68.134430000000009],[-108.36527999999993,68.133606000000043],[-108.34612299999998,68.140823000000012],[-108.33860800000002,68.145828000000051],[-108.33332799999994,68.152205999999978],[-108.33056599999998,68.158600000000035],[-108.32695000000001,68.170258000000047],[-108.32444800000002,68.192749000000049],[-108.32945299999989,68.208327999999995],[-108.3958439999999,68.289978000000076],[-108.40222199999994,68.294144000000131],[-108.44360399999999,68.308029000000033],[-108.46000700000002,68.309143000000006],[-108.484444,68.305251999999939],[-108.504997,68.298874000000012],[-108.55999800000001,68.275542999999971],[-108.56500199999999,68.26887499999998],[-108.56806899999992,68.262772000000041],[-108.57444799999996,68.257216999999969],[-108.58444199999997,68.253876000000105],[-108.71556099999998,68.231369000000029],[-108.72944599999988,68.230820000000051],[-108.74610899999993,68.231934000000024],[-108.756958,68.235260000000096],[-108.765556,68.238876000000118],[-108.81527699999998,68.262206999999989],[-108.81916799999993,68.266663000000108],[-108.81416299999989,68.273314999999968],[-108.74889400000001,68.33776899999998],[-108.74109599999997,68.342758000000117],[-108.71417199999996,68.354705999999965],[-108.70417799999996,68.35803199999998],[-108.69387799999993,68.361098999999911],[-108.67083700000001,68.365813999999943],[-108.63999899999993,68.375534000000016],[-108.62082700000002,68.382750999999985],[-108.61193800000001,68.386658000000125],[-108.58112299999999,68.406372000000033],[-108.56667299999998,68.416931000000091],[-108.53443900000002,68.445526000000086],[-108.52916699999992,68.452209000000096],[-108.52278100000001,68.458038000000101],[-108.43167099999994,68.538315000000068],[-108.40416700000003,68.560256999999979],[-108.383331,68.576660000000004],[-108.36888099999999,68.587204000000042],[-108.34528399999994,68.601928999999984],[-108.31416300000001,68.611374000000069],[-108.27916700000003,68.618317000000047],[-108.25195299999996,68.620529000000147],[-108.1702729999999,68.626647999999989],[-107.93331899999998,68.64027399999992],[-107.80499299999997,68.645538000000101],[-107.63834399999996,68.665543000000127],[-107.43167099999994,68.690536000000009],[-107.23137700000001,68.71887200000009],[-107.10833700000001,68.748596000000134],[-106.96140300000002,68.783051000000057],[-106.93859899999995,68.788315000000011],[-106.82084700000001,68.811371000000065],[-106.79444899999993,68.813872999999944],[-106.765556,68.814986999999917],[-106.63500999999991,68.818329000000062],[-106.31555200000003,68.892761000000121],[-106.27250699999996,68.904709000000025],[-106.262787,68.90887500000008],[-106.25446299999993,68.913605000000132],[-106.24833699999988,68.919983000000059],[-106.24472000000003,68.926085999999998],[-106.24360699999994,68.931656000000089],[-106.23998999999998,68.937759000000028],[-106.22917200000001,68.940810999999997],[-106.21472199999999,68.941360000000088],[-106.20140100000003,68.940536000000122],[-106.14943699999998,68.933594000000028],[-106.08084099999996,68.918869000000086],[-105.81360599999988,68.881927000000076],[-105.79804999999999,68.879425000000026],[-105.77639799999997,68.872481999999991],[-105.71806300000003,68.844985999999949],[-105.48693800000001,68.729430999999977],[-105.475281,68.720535000000041],[-105.47165699999999,68.715820000000008],[-105.47833300000002,68.69859299999996],[-105.48194899999999,68.692474000000118],[-105.4891659999999,68.68691999999993],[-105.49889400000001,68.683044000000052],[-105.49944299999999,68.621368000000075],[-105.41443600000002,68.528594999999996],[-105.38082900000001,68.486649],[-105.40888999999999,68.492477000000122],[-105.42304999999999,68.49192800000003],[-105.43388400000003,68.489151000000106],[-105.44360399999994,68.485260000000039],[-105.52944899999994,68.450272000000041],[-105.53806299999991,68.445526000000086],[-105.54387700000001,68.439147999999989],[-105.54778299999998,68.433044000000109],[-105.54888900000003,68.427475000000129],[-105.54804999999999,68.422211000000118],[-105.54110699999995,68.41276600000009],[-105.53307299999994,68.408599999999979],[-105.51777600000003,68.406096999999988],[-105.41639700000002,68.406937000000084],[-105.39028899999988,68.409424000000115],[-105.34528399999999,68.384155000000135],[-105.34889199999992,68.378036000000122],[-105.350281,68.372482000000105],[-105.34472700000003,68.368042000000116],[-105.29499800000002,68.339157000000057],[-105.28694200000001,68.33526599999999],[-105.10082999999992,68.266098000000056],[-105.07305899999994,68.260269000000051],[-105.05555700000002,68.258041000000105],[-105.02639799999992,68.257767000000001],[-105.00894900000003,68.264938000000029],[-105.00661500000001,68.268599999999935],[-105.00578300000001,68.272094999999922],[-105.00666799999993,68.278595000000053],[-105.01695299999994,68.282211000000132],[-105.02610800000002,68.309418000000051],[-104.88474300000001,68.339705999999978],[-104.86416600000001,68.332489000000066],[-104.84805299999999,68.324707000000103],[-104.83917200000002,68.315536000000009],[-104.83583099999998,68.310806000000127],[-104.83416699999998,68.300262000000089],[-104.83944699999995,68.288589000000059],[-104.84584000000001,68.282211000000132],[-104.85305800000003,68.276657000000114],[-104.86277799999993,68.272766000000047],[-104.87332199999997,68.269714000000135],[-104.94554099999999,68.258041000000105],[-104.952789,68.252487000000087],[-104.95194999999995,68.247482000000048],[-104.94055200000003,68.238586000000112],[-104.924713,68.230545000000063],[-104.91443600000002,68.227203000000088],[-104.900284,68.22526600000009],[-104.88639799999999,68.225540000000024],[-104.87332199999997,68.226928999999984],[-104.79750100000001,68.24443100000002],[-104.73111,68.250275000000045],[-104.68776699999995,68.250275000000045],[-104.63999899999999,68.246933000000126],[-104.609734,68.24136400000009],[-104.59889199999998,68.232483000000002],[-104.59722899999997,68.222214000000122],[-104.61277799999999,68.198029000000133],[-104.61888099999993,68.191650000000095],[-104.6324919999999,68.179428000000087],[-104.65471600000001,68.162766000000147],[-104.66722099999993,68.149994000000106],[-104.67027299999995,68.138596000000121],[-104.59221599999989,68.083603000000096],[-104.50778200000002,68.035812000000021],[-104.5,68.031937000000028],[-104.48638900000003,68.029984000000127],[-104.45722999999992,68.029709000000082],[-104.36694299999994,68.034149000000127],[-104.21472199999994,68.024155000000064],[-104.199997,68.021378000000027],[-104.16665599999993,68.017487000000131],[-104.12470999999994,68.018326000000059],[-104.11193800000001,68.019440000000031],[-104.06471299999998,68.027480999999966],[-104.01139799999999,68.042206000000078],[-103.99944299999999,68.044144000000017],[-103.98554999999999,68.044434000000024],[-103.97084000000001,68.043869000000029],[-103.94082600000002,68.038315000000011],[-103.92832900000002,68.034988000000055],[-103.89806399999998,68.024155000000064],[-103.88362100000001,68.021378000000027],[-103.87082699999996,68.020263999999997],[-103.84306300000003,68.020827999999995],[-103.791382,68.025269000000094],[-103.76695299999994,68.028320000000065],[-103.55526700000001,68.057205000000124],[-103.54444899999987,68.059982000000048],[-103.53694200000001,68.065536000000066],[-103.53278399999999,68.071655000000078],[-103.53333299999991,68.076660000000118],[-103.53639199999998,68.081664999999987],[-103.54472399999997,68.090820000000008],[-103.55526700000001,68.099715999999944],[-103.55803699999996,68.104430999999977],[-103.55304699999999,68.109711000000061],[-103.52139299999999,68.130813999999987],[-103.50389099999995,68.140274000000034],[-103.49526999999995,68.144714000000079],[-103.46694899999994,68.156936999999914],[-103.45722999999998,68.160537999999974],[-103.42166099999997,68.166656000000103],[-103.40416700000003,68.164154000000053],[-103.38971700000002,68.16137700000013],[-103.38194299999992,68.157211000000018],[-103.36888099999999,68.148880000000133],[-103.34416199999993,68.121094000000085],[-103.34137699999991,68.116089000000045],[-103.34028599999988,68.105819999999994],[-103.341949,68.100265999999976],[-103.37249799999995,68.06860400000005],[-103.36916399999996,68.010818000000029],[-103.36609599999997,68.005829000000062],[-103.25418100000002,67.966385000000002],[-103.22084000000001,67.962204000000099],[-103.20612299999999,67.961380000000133],[-103.17832899999996,67.961929000000055],[-103.14943699999998,67.961380000000133],[-103.13694800000002,67.958037999999988],[-103.12943999999999,67.953872999999987],[-103.12416100000002,67.949707000000103],[-103.11277799999999,67.930267000000129],[-103.1052699999999,67.926086000000055],[-103.09306300000003,67.923035000000027],[-103.01471700000002,67.913605000000132],[-103.00083899999998,67.913879000000065],[-102.99082899999996,67.917480000000126],[-102.98222399999997,67.922211000000061],[-102.97250399999996,67.925812000000121],[-102.95944199999985,67.926926000000094],[-102.94972199999995,67.923309000000131],[-102.94444299999998,67.918868999999916],[-102.939438,67.914429000000098],[-102.92111199999999,67.896378000000141],[-102.82972699999993,67.831940000000031],[-102.80027799999993,67.820830999999998],[-102.68639400000001,67.804703000000131],[-102.67054699999994,67.80304000000001],[-102.53611799999999,67.795258000000047],[-102.50446299999999,67.791931000000091],[-102.47083999999995,67.786926000000051],[-102.446663,67.780273000000079],[-102.39306599999992,67.76249700000011],[-102.33972199999994,67.744705000000067],[-102.25110599999999,67.725266000000147],[-102.22444199999995,67.733871000000022],[-102.21556099999992,67.738312000000121],[-102.15139799999997,67.765549000000021],[-102.1416779999999,67.769150000000081],[-101.92610200000001,67.760268999999994],[-101.76471699999991,67.723312000000135],[-101.671944,67.691649999999981],[-101.54250300000001,67.67942800000003],[-101.51500699999997,67.67942800000003],[-101.446663,67.732483000000116],[-101.43388400000003,67.733322000000044],[-101.10582699999992,67.741928000000144],[-101.09889199999998,67.737762000000089],[-101.01278699999995,67.742477000000122],[-100.99973299999999,67.74331699999999],[-100.92749000000003,67.753325999999959],[-100.90387699999991,67.756942999999922],[-100.89277600000003,67.759720000000016],[-100.81139400000001,67.794708000000014],[-100.72028399999994,67.834427000000119],[-100.58167999999995,67.834152000000131],[-100.39555399999995,67.847488000000055],[-100.18415799999997,67.843048000000067],[-100.16832699999998,67.841095000000109],[-100.156387,67.837769000000037],[-100.14723200000003,67.828598000000113],[-100.135559,67.825272000000098],[-100.083618,67.814986999999974],[-99.820006999999919,67.795821999999987],[-99.618606999999997,67.789153999999996],[-99.607772999999952,67.791931000000091],[-99.589172000000019,67.800812000000064],[-99.577788999999996,67.803314000000114],[-99.500564999999938,67.799713000000054],[-99.412215999999887,67.788315000000068],[-99.403060999999923,67.784424000000001],[-99.398620999999991,67.779983999999956],[-99.396666999999979,67.774994000000106],[-99.387787000000003,67.765822999999955],[-99.378325999999959,67.761932000000058],[-99.236114999999984,67.713608000000136],[-99.21055599999994,67.706940000000145],[-98.986938000000009,67.718322999999998],[-98.813613999999973,67.741928000000144],[-98.528884999999889,67.777481000000023],[-98.385833999999988,67.785812000000078],[-98.363327000000027,67.790817000000118],[-98.354445999999996,67.796097000000032],[-98.358046999999942,67.805817000000104],[-98.442490000000021,67.861374000000069],[-98.449431999999945,67.865814000000057],[-98.463333000000034,67.868865999999969],[-98.475554999999986,67.867203000000075],[-98.486114999999927,67.863876000000118],[-98.49888599999997,67.863312000000008],[-98.514724999999942,67.865265000000136],[-98.540282999999988,67.872208000000114],[-98.65583799999996,67.916382000000056],[-98.665008999999998,67.920258000000103],[-98.696944999999914,67.936645999999996],[-98.719726999999921,67.948867999999948],[-98.724166999999852,67.953598],[-98.746947999999975,68.047760000000096],[-98.732772999999952,68.070267000000001],[-98.615554999999915,68.074706999999989],[-98.544998000000021,68.061371000000065],[-98.336945000000014,67.96026599999999],[-98.321121000000005,67.952208999999982],[-98.266952999999887,67.923309000000131],[-98.233321999999987,67.901932000000102],[-98.171111999999994,67.843323000000055],[-98.169158999999922,67.838593000000003],[-98.122771999999941,67.788040000000024],[-98.094451999999933,67.766098],[-97.956664999999873,67.727768000000083],[-97.799438000000009,67.68553200000008],[-97.66194200000001,67.643051000000071],[-97.650283999999999,67.639434999999992],[-97.637512000000015,67.6308140000001],[-97.626099000000011,67.618042000000059],[-97.613051999999982,67.609420999999998],[-97.603881999999999,67.605255000000056],[-97.592772999999852,67.601653999999996],[-97.576674999999966,67.598602000000085],[-97.561385999999914,67.596649000000127],[-97.547501000000011,67.596375000000023],[-97.509734999999921,67.599152000000117],[-97.48582499999992,67.602203000000145],[-97.415008999999998,67.613312000000064],[-97.392226999999991,67.618042000000059],[-97.381942999999978,67.621368000000132],[-97.353058000000033,67.634430000000123],[-97.33444199999991,67.643875000000037],[-97.316665999999941,67.654434000000037],[-97.295546999999942,67.661102000000028],[-97.283324999999991,67.662491000000045],[-97.167220999999927,67.675537000000134],[-97.138900999999919,67.674149000000057],[-97.116942999999878,67.777481000000023],[-97.115828999999962,67.78276100000005],[-97.119155999999919,67.792480000000069],[-97.127212999999983,67.801650999999993],[-97.240279999999984,67.926086000000055],[-97.254180999999903,67.929428000000144],[-97.263061999999934,67.924149],[-97.268889999999942,67.918319999999994],[-97.27305599999994,67.907761000000107],[-97.273620999999991,67.90248100000008],[-97.277221999999938,67.896942000000081],[-97.282776000000013,67.891098000000056],[-97.291107000000011,67.884995000000117],[-97.301392000000021,67.881652999999972],[-97.324447999999961,67.876648000000102],[-97.336670000000026,67.875259000000142],[-97.362503000000004,67.873871000000008],[-97.376388999999961,67.874146000000053],[-97.392226999999991,67.876373000000115],[-97.403335999999967,67.879974000000004],[-97.412216000000001,67.884155000000078],[-97.416397000000018,67.888596000000007],[-97.41972399999986,67.898331000000042],[-97.428054999999858,67.907761000000107],[-97.434433000000013,67.911926000000108],[-97.449996999999996,67.920258000000103],[-97.643616000000009,68.008330999999998],[-97.652495999999985,68.012207000000046],[-97.683060000000012,68.018599999999992],[-97.695267000000001,68.017212000000086],[-97.705001999999979,68.012772000000098],[-97.708344000000011,68.007217000000026],[-97.710555999999997,67.991653000000099],[-97.87777699999998,67.963608000000079],[-97.996657999999911,67.950271999999984],[-98.009734999999921,67.949707000000103],[-98.029998999999975,67.941924999999969],[-98.045837000000006,67.929428000000144],[-98.051391999999964,67.923598999999967],[-98.057495000000017,67.912490999999989],[-98.060271999999998,67.891663000000108],[-98.063888999999961,67.829162999999937],[-98.078613000000018,67.830276000000026],[-98.095276000000013,67.833327999999938],[-98.106658999999979,67.836928999999998],[-98.115828999999962,67.840820000000065],[-98.176392000000021,67.873871000000008],[-98.189437999999996,67.882476999999938],[-98.194716999999969,67.897217000000069],[-98.200835999999981,67.906647000000135],[-98.213622999999984,67.920532000000037],[-98.224716000000001,67.929428000000144],[-98.25140399999998,67.946365000000014],[-98.283324999999934,67.962768999999923],[-98.319732999999928,67.978591999999992],[-98.34056099999998,67.986099000000081],[-98.378051999999968,67.996368000000132],[-98.398620999999991,68.004165999999998],[-98.412216000000001,68.012497000000053],[-98.581115999999952,68.139984000000027],[-98.587509000000011,68.149429000000112],[-98.58444199999991,68.154984000000013],[-98.485275000000001,68.184417999999994],[-98.473891999999978,68.186920000000043],[-98.459732000000031,68.183594000000028],[-98.450561999999991,68.179703000000131],[-98.432495000000017,68.166656000000103],[-98.428054999999915,68.162201000000096],[-98.424437999999952,68.152205999999978],[-98.425551999999925,68.141936999999984],[-98.428329000000019,68.136383000000137],[-98.434158000000025,68.130538999999942],[-98.44027699999998,68.119431000000134],[-98.441100999999946,68.10914600000001],[-98.439437999999996,68.104155999999989],[-98.430556999999908,68.094986000000119],[-98.417220999999927,68.08638000000002],[-98.408051,68.082489000000123],[-98.393889999999999,68.079163000000108],[-98.379990000000021,68.079163000000108],[-98.367767000000015,68.080551000000014],[-98.358886999999982,68.085814999999968],[-98.350829999999917,68.092209000000025],[-98.339721999999938,68.103867000000037],[-98.321670999999981,68.136932000000115],[-98.317779999999971,68.14776599999999],[-98.317229999999938,68.153046000000018],[-98.317504999999983,68.162201000000096],[-98.326110999999969,68.171371000000136],[-98.333068999999966,68.17553700000002],[-98.342223999999931,68.179428000000087],[-98.377486999999917,68.190262000000018],[-98.40834000000001,68.196640000000116],[-98.439712999999927,68.200821000000019],[-98.469727000000034,68.203049000000021],[-98.485275000000001,68.204987000000131],[-98.501113999999973,68.208602999999982],[-98.531113000000005,68.22526600000009],[-98.537780999999995,68.229431000000091],[-98.542220999999927,68.234146000000123],[-98.561110999999983,68.27388000000002],[-98.607772999999952,68.293319999999994],[-98.704178000000013,68.352768000000026],[-98.710830999999985,68.356934000000081],[-98.715285999999992,68.361648999999943],[-98.717223999999931,68.366378999999995],[-98.71444699999995,68.372208000000001],[-98.704726999999934,68.376373000000001],[-98.680557000000022,68.380539000000113],[-98.667496000000028,68.381363000000079],[-98.637221999999952,68.379150000000095],[-98.606383999999991,68.372756999999979],[-98.594161999999983,68.36914100000007],[-98.580565999999919,68.360809000000074],[-98.571670999999981,68.351654000000053],[-98.548614999999984,68.339157000000057],[-98.532501000000025,68.331100000000106],[-98.521392999999932,68.328323000000012],[-98.511397999999929,68.329711999999972],[-98.470839999999953,68.348327999999981],[-98.462218999999948,68.353591999999992],[-98.461394999999982,68.358871000000136],[-98.471389999999985,68.373596000000077],[-98.491942999999935,68.38638300000008],[-98.503615999999965,68.38998400000014],[-98.49499499999996,68.409424000000115],[-98.319457999999997,68.358871000000136],[-98.30972300000002,68.354980000000069],[-98.298889000000031,68.346100000000035],[-98.294448999999929,68.34137000000004],[-98.292495999999971,68.336655000000007],[-98.288329999999974,68.331940000000145],[-98.281386999999995,68.327774000000034],[-98.225554999999929,68.304152999999985],[-98.213897999999915,68.300537000000134],[-98.199722000000008,68.300262000000089],[-98.187499999999943,68.301926000000094],[-98.096663999999976,68.317764000000125],[-98.073897999999986,68.334990999999945],[-97.905838000000017,68.384155000000135],[-97.894118999999932,68.386459000000002],[-97.86471599999993,68.384995000000004],[-97.849166999999909,68.383040999999992],[-97.777785999999878,68.366378999999995],[-97.761123999999995,68.363312000000064],[-97.748885999999914,68.364699999999971],[-97.743056999999908,68.370528999999976],[-97.75140399999998,68.379700000000128],[-97.764174999999909,68.393600000000049],[-97.768616000000009,68.398041000000148],[-97.781951999999933,68.406647000000021],[-97.79611199999988,68.409988000000055],[-97.81138599999997,68.411377000000073],[-97.869719999999973,68.414153999999996],[-97.885559000000001,68.416382000000112],[-97.899993999999936,68.419707999999957],[-97.906386999999995,68.423874000000069],[-98.009734999999921,68.498032000000023],[-98.011397999999929,68.503052000000082],[-98.010833999999988,68.508041000000048],[-97.999725000000012,68.535262999999986],[-97.994155999999919,68.541091999999992],[-97.852492999999981,68.542480000000069],[-97.836394999999925,68.540268000000026],[-97.723891999999921,68.523041000000035],[-97.692764000000011,68.516663000000051],[-97.665008999999941,68.504715000000033],[-97.658339999999896,68.500549000000092],[-97.654174999999896,68.496094000000085],[-97.650557999999933,68.486098999999967],[-97.653884999999946,68.480545000000006],[-97.655272999999966,68.470260999999994],[-97.650283999999999,68.455551000000014],[-97.646118000000001,68.450820999999962],[-97.639175000000023,68.446640000000059],[-97.611663999999962,68.434708000000114],[-97.537780999999995,68.418320000000051],[-97.523055999999997,68.416931000000091],[-97.511123999999938,68.419434000000024],[-97.502228000000002,68.424698000000035],[-97.49888599999997,68.430267000000015],[-97.500564999999995,68.434982000000048],[-97.509170999999981,68.444427000000132],[-97.520554000000004,68.448029000000076],[-97.535552999999993,68.449141999999995],[-97.547501000000011,68.446640000000059],[-97.573333999999932,68.444427000000132],[-97.589171999999962,68.446640000000059],[-97.603332999999964,68.449996999999996],[-97.615004999999996,68.453598000000056],[-97.619155999999919,68.458328000000108],[-97.617767000000015,68.462493999999992],[-97.597778000000005,68.483597000000088],[-97.578613000000018,68.493042000000003],[-97.567779999999971,68.496368000000018],[-97.544448999999986,68.501389000000131],[-97.531112999999948,68.501938000000109],[-97.516952999999944,68.501663000000065],[-97.385559000000001,68.495254999999929],[-97.353606999999954,68.491089000000045],[-97.282776000000013,68.474152000000061],[-97.259170999999867,68.466660000000104],[-97.160278000000005,68.389435000000049],[-97.053329000000019,68.353316999999947],[-97.058334000000002,68.302765000000079],[-97.070007000000032,68.300262000000089],[-97.075835999999924,68.294433999999967],[-97.091110000000015,68.268051000000014],[-97.089447000000007,68.263320999999962],[-97.080291999999929,68.259155000000078],[-96.939162999999951,68.239700000000084],[-96.925003000000004,68.239150999999993],[-96.912505999999951,68.240814000000057],[-96.817779999999914,68.258331000000112],[-96.806380999999931,68.260818000000029],[-96.799438000000009,68.265548999999965],[-96.767775999999969,68.270263999999997],[-96.693877999999927,68.280272999999966],[-96.680556999999965,68.280822999999998],[-96.669158999999979,68.276931999999931],[-96.625274999999874,68.251663000000121],[-96.553328999999962,68.273605000000032],[-96.533066000000019,68.281936999999971],[-96.47084000000001,68.305542000000003],[-96.448883000000023,68.312194999999974],[-96.437209999999993,68.314697000000024],[-96.42471299999994,68.316086000000041],[-96.410552999999993,68.315536000000009],[-96.404174999999952,68.311371000000008],[-96.496947999999975,68.207764000000054],[-96.508895999999993,68.196365000000128],[-96.525832999999977,68.184142999999949],[-96.623046999999985,68.115540000000067],[-96.690551999999968,68.079987000000074],[-96.702224999999999,68.077484000000084],[-96.730285999999921,68.078323000000069],[-96.743057000000022,68.07777400000009],[-96.75556899999998,68.076096000000007],[-96.778884999999946,68.071380999999974],[-96.797225999999966,68.06109600000002],[-96.808883999999978,68.04942299999999],[-96.812209999999936,68.043869000000029],[-96.813323999999909,68.038589000000115],[-96.811660999999901,68.033599999999979],[-96.801940999999999,68.025818000000015],[-96.789169000000015,68.017212000000086],[-96.77305599999994,68.013884999999959],[-96.722778000000005,68.009719999999959],[-96.708343999999954,68.008605999999986],[-96.676101999999958,68.018599999999992],[-96.556655999999975,68.033324999999934],[-96.540282999999931,68.030273000000022],[-96.52806099999998,68.03166200000004],[-96.466399999999965,68.038879000000122],[-96.450835999999981,68.053040000000124],[-96.479996000000028,68.090271000000087],[-96.49110399999995,68.094147000000135],[-96.505004999999926,68.094436999999971],[-96.516113000000018,68.091095000000053],[-96.53443900000002,68.080826000000002],[-96.546950999999979,68.079437000000041],[-96.548339999999996,68.084152000000074],[-96.547501000000011,68.089432000000102],[-96.535277999999892,68.101089000000059],[-96.510009999999966,68.119431000000134],[-96.482498000000021,68.134720000000016],[-96.463057999999933,68.144149999999911],[-96.432220000000029,68.156097000000045],[-96.31082200000003,68.192200000000128],[-96.288329999999974,68.197754000000089],[-96.171386999999925,68.221649000000127],[-96.136123999999938,68.228592000000106],[-95.980285999999978,68.254715000000033],[-95.968338000000017,68.230820000000051],[-96.043334999999956,68.179428000000087],[-96.069167999999991,68.16137700000013],[-96.075012000000015,68.155548000000124],[-96.078612999999962,68.149994000000106],[-96.077498999999989,68.144989000000066],[-96.073623999999995,68.140274000000034],[-96.045837000000006,68.133331000000055],[-96.03443900000002,68.129700000000014],[-96.02806099999998,68.125259000000085],[-96.020553999999947,68.116089000000045],[-96.01916499999993,68.111098999999967],[-96.020279000000016,68.106094000000098],[-96.083618000000001,68.00221300000004],[-96.144164999999987,67.923598999999967],[-96.211669999999913,67.829162999999937],[-96.215285999999878,67.823608000000036],[-96.217223999999987,67.813309000000061],[-96.221389999999985,67.697754000000032],[-96.220000999999911,67.693038999999999],[-96.212508999999955,67.683868000000075],[-96.206116000000009,67.67942800000003],[-96.195540999999992,67.682754999999986],[-96.186934999999949,67.688873000000115],[-96.179717999999923,67.692748999999992],[-96.168335000000013,67.694977000000108],[-96.166655999999989,67.690262000000075],[-96.174712999999997,67.643051000000071],[-96.185271999999941,67.626373000000001],[-96.191939999999988,67.62164300000012],[-96.203339000000028,67.61914100000007],[-96.216400000000021,67.618591000000038],[-96.230834999999956,67.619979999999998],[-96.246657999999968,67.623306000000071],[-96.257781999999963,67.626923000000033],[-96.266402999999968,67.631088000000034],[-96.329726999999991,67.610260000000096],[-96.437774999999931,67.541367000000037],[-96.461394999999925,67.508880999999917],[-96.464721999999881,67.503326000000015],[-96.469161999999983,67.492751999999996],[-96.464721999999881,67.478043000000127],[-96.461120999999991,67.473312000000021],[-96.451675000000023,67.471374999999966],[-96.441939999999931,67.475540000000137],[-96.363892000000021,67.478043000000127],[-96.294158999999979,67.444702000000007],[-96.222778000000005,67.421920999999941],[-96.210006999999962,67.419144000000074],[-96.196380999999917,67.418869000000029],[-96.185821999999973,67.422211000000004],[-96.158051,67.43664600000011],[-96.141388000000006,67.448868000000061],[-96.135559000000001,67.454712000000086],[-96.118880999999931,67.466660000000104],[-96.107498000000021,67.469147000000021],[-96.09722899999997,67.464706000000092],[-96.069457999999997,67.433593999999971],[-96.070281999999963,67.428314000000114],[-96.124161000000015,67.377196999999967],[-96.166655999999989,67.341660000000047],[-96.177215999999873,67.336929000000112],[-96.208618000000001,67.326935000000105],[-96.218613000000005,67.322768999999994],[-96.226944000000003,67.316666000000055],[-96.251113999999916,67.25277699999998],[-96.252228000000002,67.247482000000048],[-96.243606999999884,67.243317000000047],[-96.129990000000021,67.21665999999999],[-96.114440999999999,67.213318000000072],[-96.102492999999981,67.214705999999978],[-96.091384999999946,67.217209000000139],[-95.921111999999994,67.278595000000053],[-95.817504999999926,67.331940000000145],[-95.756393000000003,67.367477000000065],[-95.739990000000034,67.376648000000046],[-95.603057999999919,67.383330999999998],[-95.58944699999995,67.383040999999992],[-95.576949999999954,67.380264000000068],[-95.565825999999959,67.376648000000046],[-95.549163999999962,67.368316999999934],[-95.53472899999997,67.359984999999995],[-95.528610000000015,67.35554500000012],[-95.525008999999955,67.351089000000059],[-95.553328999999962,67.313309000000118],[-95.561660999999958,67.307205000000124],[-95.618056999999965,67.278320000000065],[-95.638061999999991,67.270828000000108],[-95.677489999999977,67.254166000000112],[-95.696654999999964,67.244979999999998],[-95.763061999999877,67.212769000000094],[-95.807495000000017,67.186096000000134],[-95.823897999999986,67.174149],[-95.829726999999991,67.168319999999937],[-95.833327999999938,67.162766000000147],[-95.821670999999924,67.161102000000142],[-95.796951000000035,67.16304000000008],[-95.774719000000005,67.167755000000113],[-95.74221799999998,67.176651000000049],[-95.712218999999948,67.188309000000061],[-95.651397999999915,67.198868000000118],[-95.568893000000003,67.210541000000148],[-95.544158999999922,67.212494000000106],[-95.515839000000028,67.209717000000012],[-95.501113999999973,67.20748900000001],[-95.435546999999929,67.193863000000079],[-95.379439999999931,67.154708999999968],[-95.326110999999969,67.027205999999978],[-95.328613000000018,67.016937000000098],[-95.337218999999948,66.99054000000001],[-95.34333799999996,66.974701000000096],[-95.350280999999882,66.963882000000069],[-95.357773000000009,66.959991000000002],[-95.416396999999961,66.951935000000105],[-95.53472899999997,66.941086000000041],[-95.597778000000005,66.948868000000004],[-95.614166000000012,66.970261000000107],[-95.721114999999998,66.964706000000035],[-95.743331999999953,66.959991000000002],[-95.839171999999962,66.94802900000002],[-95.876099000000011,66.945816000000036],[-95.902495999999985,66.946640000000002],[-95.928054999999972,66.952484000000027],[-95.93638599999997,66.956649999999968],[-95.990279999999984,67.004990000000134],[-95.993880999999931,67.009720000000016],[-95.990554999999915,67.014998999999989],[-95.978881999999999,67.026657],[-95.961120999999991,67.043869000000029],[-95.93638599999997,67.065262000000132],[-95.932219999999973,67.069716999999969],[-95.946945000000028,67.072220000000129],[-95.958344000000011,67.069716999999969],[-95.967772999999909,67.065536000000066],[-96.004456000000005,67.045821999999987],[-96.046111999999937,67.016387999999949],[-96.051665999999955,67.010818000000086],[-96.053878999999995,67.000275000000101],[-96.046660999999972,66.991088999999988],[-96.040558000000033,66.986648999999943],[-96.023620999999935,66.978591999999992],[-96.025008999999955,66.973312000000135],[-96.033066000000019,66.967484000000013],[-96.042770000000019,66.963043000000084],[-96.110549999999932,66.950821000000133],[-96.12332200000003,66.950271999999984],[-96.138610999999912,66.953598],[-96.240828999999962,66.983597000000032],[-96.262512000000015,66.991088999999988],[-96.279175000000009,66.999145999999939],[-96.285278000000005,67.003600999999946],[-96.286941999999954,67.008606000000043],[-96.285827999999981,67.013611000000083],[-96.274170000000026,67.025269000000094],[-96.265288999999996,67.030548000000067],[-96.261947999999961,67.035812000000078],[-96.261123999999995,67.041092000000106],[-96.263625999999988,67.051086000000112],[-96.268889999999885,67.06053200000008],[-96.288054999999929,67.068329000000062],[-96.37721299999987,67.084717000000126],[-96.392226999999991,67.086928999999998],[-96.403884999999946,67.085541000000092],[-96.452498999999989,67.068329000000062],[-96.460555999999883,67.062195000000031],[-96.456664999999987,67.057754999999986],[-96.403884999999946,67.008330999999998],[-96.273620999999991,66.950271999999984],[-96.146392999999989,66.894714000000135],[-96.128051999999968,66.881653000000028],[-96.11721799999998,66.867752000000053],[-96.115829000000019,66.862761999999975],[-96.11721799999998,66.857483000000002],[-96.116652999999985,66.847488000000055],[-96.115554999999972,66.842484000000127],[-96.114165999999898,66.837494000000049],[-96.108886999999982,66.832764000000054],[-96.100554999999929,66.828598000000113],[-96.006667999999934,66.794434000000081],[-95.980559999999912,66.787491000000102],[-95.956115999999952,66.782211000000075],[-95.912215999999944,66.775543000000084],[-95.883621000000005,66.768875000000094],[-95.862212999999997,66.761107999999979],[-95.848052999999993,66.752777000000037],[-95.841948999999943,66.74832200000003],[-95.784728999999913,66.674149000000057],[-95.777495999999985,66.654984000000127],[-95.777221999999881,66.644714000000022],[-95.780838000000017,66.629150000000095],[-95.741378999999938,66.638046000000031],[-95.656386999999995,66.6602630000001],[-95.646666999999979,66.664428999999984],[-95.629714999999976,66.675536999999963],[-95.627486999999974,66.68609600000002],[-95.648894999999982,66.724152000000004],[-95.652221999999995,66.728592000000049],[-95.660552999999993,66.732757999999933],[-95.674437999999896,66.734146000000067],[-95.784728999999913,66.737198000000149],[-95.993056999999965,66.84275800000006],[-96.087783999999999,66.907486000000119],[-96.091674999999896,66.911925999999994],[-96.092772999999966,66.916931000000034],[-96.091674999999896,66.922211000000061],[-96.08555599999994,66.926926000000094],[-96.066956000000005,66.936371000000008],[-96.047500999999954,66.944702000000063],[-96.037216000000001,66.94802900000002],[-96.026108000000022,66.950271999999984],[-96.000290000000007,66.950546000000088],[-95.902495999999985,66.946640000000002],[-95.814437999999996,66.941360000000145],[-95.785004000000015,66.93691999999993],[-95.772780999999952,66.932754999999929],[-95.766662999999994,66.928314],[-95.763061999999877,66.923874000000012],[-95.760559000000001,66.913879000000065],[-95.756957999999997,66.90914900000007],[-95.75111400000003,66.90498400000007],[-95.738051999999982,66.901382000000126],[-95.724715999999944,66.900817999999958],[-95.516662999999994,66.902206000000092],[-95.493057000000022,66.90498400000007],[-95.472228999999913,66.911652000000061],[-95.389175000000023,66.911102000000028],[-95.336669999999913,66.893051000000014],[-95.323623999999882,66.889434999999992],[-95.311385999999914,66.889984000000084],[-95.300827000000027,66.893326000000059],[-95.291672000000005,66.898331000000098],[-95.267501999999979,66.91415400000011],[-95.259170999999981,66.920257999999933],[-95.220839999999896,66.968322999999941],[-95.21945199999999,66.973602000000142],[-95.226394999999968,66.982758000000103],[-95.232223999999974,66.987198000000092],[-95.289443999999946,67.024994000000049],[-95.345000999999968,67.084427000000119],[-95.352218999999991,67.148331000000042],[-95.346389999999985,67.15387000000004],[-95.266112999999905,67.212769000000094],[-95.166107000000011,67.276931999999988],[-95.162216000000001,67.282211000000132],[-95.163329999999974,67.287200999999982],[-95.171936000000017,67.291367000000093],[-95.18249499999996,67.29525799999999],[-95.217223999999931,67.306366000000139],[-95.279723999999874,67.319442999999978],[-95.306380999999874,67.326660000000061],[-95.314712999999927,67.330550999999957],[-95.332779000000016,67.34387200000009],[-95.336394999999982,67.348328000000038],[-95.384170999999981,67.444138000000009],[-95.339995999999928,67.499709999999993],[-95.331679999999949,67.505829000000006],[-95.324172999999917,67.516663000000051],[-95.321670999999924,67.527206000000035],[-95.323058999999944,67.531936999999971],[-95.330001999999922,67.541367000000037],[-95.343613000000005,67.554977000000122],[-95.34973100000002,67.559417999999994],[-95.466400000000021,67.637207000000046],[-95.492492999999968,67.643326000000059],[-95.535003999999958,67.646652000000074],[-95.548339999999996,67.649994000000049],[-95.693054000000018,67.704436999999984],[-95.707779000000016,67.723038000000031],[-95.709166999999923,67.727768000000083],[-95.708053999999947,67.733047000000056],[-95.704453000000001,67.738586000000055],[-95.698333999999988,67.744431000000134],[-95.68110699999994,67.756378000000097],[-95.671936000000017,67.761657999999954],[-95.64973399999991,67.767211999999972],[-95.637511999999958,67.768600000000049],[-95.626388999999961,67.771927000000005],[-95.577498999999989,67.787491000000102],[-95.558883999999978,67.797759999999926],[-95.550277999999878,67.803863999999976],[-95.544158999999922,67.809708000000001],[-95.53443900000002,67.820830999999998],[-95.525833000000034,67.836928999999998],[-95.522231999999974,67.852767999999969],[-95.527221999999995,67.872208000000114],[-95.452224999999999,67.981094000000041],[-95.416945999999996,68.027771000000143],[-95.42721599999993,68.032486000000006],[-95.47193900000002,68.054977000000008],[-95.475280999999939,68.058319000000097],[-95.472777999999948,68.06053200000008],[-95.461394999999868,68.063873000000115],[-95.404175000000009,68.069443000000035],[-95.34973100000002,68.074432000000002],[-95.343063000000029,68.074432000000002],[-95.075561999999877,68.068877999999984],[-95.071120999999948,68.063599000000011],[-95.065276999999924,68.060257000000036],[-95.054992999999911,68.055251999999996],[-95.043883999999935,68.051376000000118],[-95.023620999999991,68.04582199999993],[-95.008895999999936,68.044434000000024],[-94.86721799999998,68.034149000000127],[-94.839721999999938,68.034149000000127],[-94.788054999999986,68.040543000000127],[-94.72222899999997,68.054977000000008],[-94.714172000000019,68.059418000000107],[-94.707503999999972,68.065811000000053],[-94.696654999999964,68.078598000000056],[-94.693877999999984,68.083328000000108],[-94.604995999999971,68.139708999999982],[-94.37249799999995,68.221375000000023],[-94.210555999999997,68.262772000000041],[-94.199157999999954,68.267761000000007],[-94.193603999999993,68.272217000000069],[-94.192214999999976,68.276382000000069],[-94.191665999999941,68.281372000000147],[-94.192489999999907,68.292206000000022],[-94.193603999999993,68.298325000000034],[-94.205275999999913,68.313309000000118],[-94.209166999999979,68.323607999999979],[-94.210280999999952,68.328049000000078],[-94.210830999999985,68.361374000000126],[-94.208054000000004,68.366088999999988],[-94.203888000000006,68.370255000000043],[-94.123046999999985,68.416931000000091],[-94.104720999999984,68.424149000000057],[-94.00028999999995,68.460815000000025],[-93.968063000000029,68.468596999999932],[-93.953613000000018,68.471924000000058],[-93.936661000000015,68.474700999999982],[-93.922774999999945,68.475540000000137],[-93.893615999999952,68.474700999999982],[-93.875823999999909,68.477203000000031],[-93.81138599999997,68.488037000000134],[-93.661391999999978,68.520828000000051],[-93.656661999999983,68.523315000000139],[-93.619155999999975,68.544144000000074],[-93.553329000000019,68.586380000000077],[-93.559722999999963,68.611649000000114],[-93.621933000000013,68.624419999999986],[-93.647507000000019,68.626923000000147],[-93.65306099999998,68.626373000000115],[-93.705276000000026,68.657211000000132],[-93.697220000000016,68.749145999999939],[-93.695267000000001,68.751938000000052],[-93.639450000000011,68.780548000000067],[-93.571670999999924,68.834152000000074],[-93.567504999999926,68.839706000000092],[-93.566100999999946,68.849425999999994],[-93.634444999999971,68.959152000000131],[-93.642226999999934,68.963882000000012],[-93.666945999999996,68.972214000000008],[-93.731383999999991,68.974991000000102],[-93.925551999999868,68.974701000000039],[-94.030838000000017,68.918594000000098],[-94.039169000000015,68.914154000000053],[-94.055832000000009,68.901932000000102],[-94.068893000000003,68.891098000000056],[-94.079726999999991,68.847488000000055],[-94.071120999999891,68.843596999999988],[-94.034164000000033,68.833328000000108],[-94.021118000000001,68.836105000000032],[-93.933884000000035,68.855255],[-93.852492999999981,68.879149999999981],[-93.838607999999965,68.885268999999994],[-93.837783999999999,68.886383000000023],[-93.824722000000008,68.891373000000044],[-93.813889000000017,68.893050999999957],[-93.80999799999995,68.890549000000078],[-93.813889000000017,68.88499500000006],[-93.829726999999934,68.876083000000051],[-93.934157999999968,68.824997000000053],[-94.085006999999962,68.761108000000092],[-94.095276000000013,68.758040999999992],[-94.108046999999999,68.755264000000068],[-94.15972899999997,68.747756999999979],[-94.385559000000001,68.729155999999932],[-94.490828999999962,68.728867000000037],[-94.625,68.761383000000137],[-94.608886999999925,68.819443000000035],[-94.588897999999915,68.841370000000097],[-94.583327999999938,68.845825000000104],[-94.570847000000015,68.850266000000033],[-94.561661000000015,68.855255],[-94.556106999999997,68.859985000000052],[-94.553054999999972,68.864425999999924],[-94.545273000000009,68.884720000000073],[-94.548049999999932,68.888885000000073],[-94.557495000000017,68.893050999999957],[-94.569457999999941,68.893600000000106],[-94.577224999999999,68.896652000000017],[-94.585555999999997,68.903046000000074],[-94.589995999999985,68.908325000000048],[-94.605835000000013,68.951096000000064],[-94.604172000000005,68.961929000000055],[-94.599166999999966,68.965546000000018],[-94.587219000000005,68.968872000000033],[-94.553329000000019,68.973877000000073],[-94.37388599999997,69.003052000000139],[-94.224166999999966,69.027771000000143],[-94.163054999999986,69.052200000000084],[-94.151397999999972,69.057205000000124],[-94.072784000000013,69.126648000000046],[-94.072509999999966,69.144989000000066],[-94.137511999999901,69.131927000000019],[-94.22084000000001,69.1202550000001],[-94.235001000000011,69.119431000000134],[-94.248336999999935,69.120529000000033],[-94.312209999999993,69.144989000000066],[-94.323058999999944,69.149994000000106],[-94.327498999999989,69.15525800000006],[-94.329177999999899,69.16137700000013],[-94.309433000000013,69.294144000000131],[-94.306655999999975,69.300262000000089],[-94.303328999999962,69.304977000000122],[-94.291672000000005,69.313873000000058],[-94.284163999999976,69.318878000000097],[-94.259170999999924,69.326660000000061],[-94.166655999999989,69.342483999999956],[-94.043335000000013,69.357483000000059],[-94.025009000000011,69.359711000000004],[-93.955276000000026,69.362762000000032],[-93.736664000000019,69.399994000000049],[-93.626937999999939,69.432479999999941],[-93.574721999999952,69.441650000000038],[-93.562774999999988,69.442748999999992],[-93.526397999999915,69.438309000000004],[-93.532501000000025,69.429977000000008],[-93.547774999999945,69.420532000000094],[-93.67971799999998,69.347762999999929],[-93.691665999999941,69.34275800000006],[-93.741378999999995,69.324432000000058],[-93.753066999999987,69.320540999999992],[-93.764174999999966,69.320540999999992],[-93.828612999999962,69.265549000000078],[-93.856110000000001,69.176926000000037],[-93.856658999999979,69.172211000000004],[-93.845001000000025,69.164992999999981],[-93.837218999999891,69.164429000000041],[-93.634734999999978,69.251663000000121],[-93.467498999999918,69.317490000000021],[-93.456664999999987,69.323043999999982],[-93.362777999999992,69.37164300000012],[-93.365279999999984,69.376082999999994],[-93.379439999999988,69.376373000000001],[-93.459166999999866,69.359711000000004],[-93.470001000000025,69.356644000000074],[-93.478057999999976,69.353317000000118],[-93.498046999999985,69.349152000000117],[-93.511947999999961,69.349426000000051],[-93.565001999999936,69.367752000000053],[-93.560546999999929,69.383881000000031],[-93.538054999999929,69.410538000000088],[-93.527221999999995,69.421646000000067],[-93.515839000000028,69.425537000000134],[-93.503066999999874,69.427475000000072],[-93.488892000000021,69.434982000000048],[-93.439437999999939,69.475265999999976],[-93.441375999999991,69.48054499999995],[-93.487777999999992,69.502777000000037],[-93.509734999999921,69.513046000000088],[-93.532501000000025,69.521103000000039],[-93.540833000000021,69.523315000000082],[-93.587219000000005,69.528046000000018],[-93.621933000000013,69.527205999999978],[-93.683883999999978,69.522217000000012],[-93.709732000000031,69.516098],[-93.808884000000035,69.488876000000062],[-93.869719999999973,69.451660000000118],[-94.045272999999952,69.439148000000102],[-94.279175000000009,69.440262000000075],[-94.299728000000016,69.443038999999999],[-94.313048999999978,69.446640000000059],[-94.343886999999938,69.459152000000074],[-94.451674999999966,69.518600000000049],[-94.502501999999993,69.556366000000025],[-94.591948999999943,69.637206999999989],[-94.629439999999988,69.683044000000052],[-94.670273000000009,69.677475000000072],[-94.712783999999999,69.67164600000001],[-94.749435000000005,69.663605000000132],[-94.755004999999926,69.661652000000004],[-94.764174999999966,69.65498400000007],[-94.766662999999937,69.651093000000003],[-94.762222000000008,69.644714000000135],[-94.742217999999923,69.628311000000053],[-94.724441999999954,69.61442599999998],[-94.725554999999929,69.608597000000145],[-94.730835000000013,69.602767999999969],[-94.740279999999984,69.597488000000055],[-94.769729999999981,69.583054000000061],[-94.801101999999901,69.572219999999959],[-94.820007000000032,69.56721500000009],[-94.831116000000009,69.56581100000011],[-94.846664000000033,69.565536000000122],[-94.862777999999878,69.566940000000102],[-94.951950000000011,69.584427000000119],[-95.010558999999944,69.603043000000127],[-95,69.618865999999969],[-95.009444999999971,69.621643000000063],[-95.021118000000001,69.621643000000063],[-95.078612999999962,69.616379000000109],[-95.168609999999887,69.630538999999999],[-95.396118000000001,69.678864000000033],[-95.40834000000001,69.681931000000134],[-95.423049999999932,69.686096000000134],[-95.544997999999964,69.726929000000041],[-95.648055999999997,69.780273000000022],[-95.71556099999998,69.791366999999923],[-95.724715999999944,69.789978000000133],[-95.728332999999907,69.789153999999996],[-95.738892000000021,69.786102000000028],[-95.757232999999928,69.777205999999921],[-95.758620999999948,69.772766000000104],[-95.86332699999997,69.772216999999955],[-95.960830999999985,69.778045999999961],[-95.975554999999929,69.781937000000028],[-96.020279000000016,69.80442800000003],[-96.035827999999924,69.813873000000115],[-96.074447999999961,69.841934000000037],[-96.087783999999999,69.869141000000127],[-96.082229999999925,69.873596000000134],[-96.085007000000019,69.91137700000013],[-96.097778000000005,69.946639999999945],[-96.116104000000007,69.953872999999987],[-96.177215999999873,69.964705999999921],[-96.195540999999992,69.965546000000018],[-96.198607999999979,69.964995999999985],[-96.209441999999967,69.961655000000121],[-96.217223999999987,69.958327999999995],[-96.220550999999944,69.95748900000001],[-96.235000999999954,69.95748900000001],[-96.246947999999918,69.958878000000027],[-96.257232999999928,69.963043000000027],[-96.272780999999952,69.971099999999979],[-96.38137799999987,70.02748100000008],[-96.402495999999871,70.039978000000076],[-96.459441999999967,70.075546000000088],[-96.500290000000007,70.101379000000009],[-96.509170999999924,70.108597000000032],[-96.525283999999942,70.122756999999979],[-96.531677000000002,70.131088000000034],[-96.55610699999994,70.191925000000083],[-96.568892999999946,70.224425999999994],[-96.571670999999867,70.234421000000054],[-96.570281999999963,70.251099000000124],[-96.568619000000012,70.268600000000106],[-96.562774999999931,70.300262000000032],[-96.558608999999933,70.3119200000001],[-96.555557000000022,70.317490000000134],[-96.548339999999996,70.328872999999987],[-96.535003999999958,70.344147000000078],[-96.294723999999974,70.522491000000116],[-96.232773000000009,70.562195000000031],[-96.078887999999893,70.587494000000049],[-96.069732999999928,70.587769000000037],[-96.045273000000009,70.584152000000074],[-96.041107000000011,70.576934999999992],[-96.033324999999934,70.572769000000108],[-95.995269999999948,70.559707999999944],[-95.93499799999995,70.547485000000108],[-95.92332499999992,70.545258000000047],[-95.806106999999997,70.528869999999984],[-95.797225999999966,70.529434000000094],[-95.789443999999946,70.536652000000117],[-95.791381999999999,70.542755000000056],[-95.799164000000019,70.549149000000114],[-95.855834999999956,70.553314000000114],[-95.914168999999902,70.559417999999937],[-95.931670999999938,70.562195000000031],[-95.96444699999995,70.568878000000041],[-96.000564999999995,70.579987000000074],[-96.049987999999928,70.600266000000033],[-96.058334000000002,70.605820000000051],[-96.061385999999857,70.617203000000018],[-96.055557000000022,70.643050999999957],[-96.048339999999996,70.646942000000024],[-95.952498999999989,70.679702999999961],[-95.848343,70.706940000000088],[-95.815551999999968,70.70915199999996],[-95.817779999999971,70.710265999999933],[-95.901947000000007,70.707764000000054],[-95.932770000000005,70.701096000000064],[-96.115554999999972,70.656097000000102],[-96.138061999999991,70.646378000000084],[-96.149993999999936,70.637206999999989],[-96.152785999999935,70.632477000000108],[-96.154723999999987,70.624694999999974],[-96.153885000000002,70.621643000000063],[-96.158051,70.617476999999951],[-96.160277999999948,70.616379000000052],[-96.16361999999998,70.615540000000124],[-96.202788999999996,70.621643000000063],[-96.376098999999954,70.673035000000027],[-96.385284000000013,70.677765000000022],[-96.394729999999981,70.683594000000028],[-96.401108000000022,70.690536000000122],[-96.410003999999958,70.702484000000027],[-96.415557999999976,70.71527100000003],[-96.422500999999954,70.726089000000002],[-96.43472300000002,70.737198000000035],[-96.446654999999964,70.741928000000087],[-96.53694200000001,70.763321000000019],[-96.580565999999976,70.777480999999909],[-96.603881999999942,70.788040000000137],[-96.611938000000009,70.794434000000024],[-96.61500499999994,70.80442800000003],[-96.61361699999992,70.8211060000001],[-96.601944000000003,70.849990999999989],[-96.591674999999952,70.866928000000144],[-96.578613000000018,70.878035999999952],[-96.571121000000005,70.883040999999992],[-96.545272999999895,70.904983999999956],[-96.53083799999996,70.921371000000136],[-96.52416999999997,70.931656000000032],[-96.513061999999991,70.949707000000046],[-96.510833999999932,70.955826000000059],[-96.503066999999987,70.99693300000007],[-96.495833999999888,71.040268000000083],[-96.481673999999884,71.043319999999994],[-96.450286999999946,71.044983000000116],[-96.414444000000003,71.053589000000045],[-96.406661999999926,71.058594000000085],[-96.369995000000017,71.089981000000023],[-96.371108999999933,71.093048000000124],[-96.375823999999966,71.098037999999974],[-96.40943900000002,71.119431000000077],[-96.417770000000019,71.113602000000071],[-96.420273000000009,71.107208000000014],[-96.412215999999944,71.095824999999991],[-96.410003999999958,71.089705999999978],[-96.413619999999923,71.084152000000017],[-96.421111999999994,71.0816650000001],[-96.440825999999959,71.079163000000051],[-96.461394999999925,71.080551000000128],[-96.476669000000015,71.08526599999999],[-96.50556899999998,71.097214000000008],[-96.538329999999974,71.11303700000002],[-96.552215999999987,71.119980000000055],[-96.560546999999985,71.126373000000001],[-96.559433000000013,71.1308140000001],[-96.553878999999995,71.136932000000058],[-96.548614999999927,71.140548999999965],[-96.467223999999931,71.165267999999969],[-96.457992999999988,71.195564000000047],[-96.462203999999986,71.255501000000038],[-96.504455999999891,71.276093000000117],[-96.503890999999953,71.277205999999978],[-96.488891999999964,71.286102000000085],[-96.278060999999923,71.326384999999959],[-96.24499499999996,71.353866999999923],[-96.21833799999996,71.375809000000004],[-96.193329000000006,71.389984000000084],[-96.168335000000013,71.399993999999992],[-96.134170999999981,71.409714000000065],[-96.046386999999982,71.418045000000006],[-96.027785999999935,71.417755],[-95.926392000000021,71.400542999999971],[-95.893889999999942,71.390823000000069],[-95.882766999999944,71.384155000000078],[-95.878875999999991,71.378586000000098],[-95.878052000000025,71.37303200000008],[-95.878875999999991,71.367203000000075],[-95.859160999999972,71.354980000000012],[-95.830001999999922,71.343048000000067],[-95.792220999999927,71.328049000000021],[-95.673049999999989,71.287491000000102],[-95.658889999999985,71.285537999999974],[-95.551102000000014,71.289978000000019],[-95.535278000000005,71.290816999999947],[-95.455276000000026,71.367751999999996],[-95.451401000000033,71.375809000000004],[-95.547775000000001,71.487762000000032],[-95.779998999999975,71.503875999999991],[-95.832779000000016,71.515823000000125],[-95.936660999999901,71.546646000000123],[-95.943054000000018,71.553589000000102],[-95.908339999999953,71.600540000000137],[-95.895003999999915,71.610535000000027],[-95.889998999999989,71.613312000000121],[-95.877212999999983,71.61831699999999],[-95.863892000000021,71.619430999999963],[-95.812209999999936,71.621918000000051],[-95.744719999999973,71.624145999999996],[-95.678878999999995,71.646378000000084],[-95.539718999999991,71.703597999999943],[-95.399733999999967,71.718597000000045],[-95.301620000000014,71.721099999999979],[-95.289443999999946,71.753601000000117],[-95.289443999999946,71.757491999999957],[-95.288054999999872,71.761932000000002],[-95.285827999999981,71.767212000000086],[-95.239440999999999,71.82249500000006],[-95.226944000000003,71.826660000000061],[-95.073059000000001,71.84137000000004],[-94.890288999999996,71.844711000000075],[-94.856383999999991,71.843322999999998],[-94.838897999999972,71.841094999999996],[-94.795272999999952,71.833328000000051],[-94.744155999999975,71.823044000000039],[-94.73443599999996,71.823317999999972],[-94.716399999999965,71.826096000000121],[-94.653884999999946,71.845261000000107],[-94.612503000000004,71.859711000000004],[-94.606658999999979,71.863312000000064],[-94.607772999999952,71.866378999999995],[-94.615279999999984,71.868866000000082],[-94.629715000000033,71.866928000000144],[-94.65583799999996,71.861923000000104],[-94.706115999999952,71.848038000000031],[-94.743056999999965,71.839432000000102],[-94.756957999999941,71.837493999999936],[-94.775283999999942,71.838882000000069],[-94.783066000000019,71.84137000000004],[-94.826110999999969,71.847487999999998],[-94.853607000000011,71.849426000000108],[-94.903885000000002,71.850266000000147],[-95.102492999999981,71.851089000000002],[-95.119155999999975,71.850266000000147],[-95.157227000000034,71.845825000000048],[-95.179992999999968,71.843048000000124],[-95.180557000000022,71.842208999999968],[-95.192489999999964,71.84137000000004],[-95.213333000000034,71.843048000000124],[-95.231110000000001,71.849152000000004],[-95.240829000000019,71.853867000000037],[-95.25167799999997,71.86053499999997],[-95.256667999999934,71.866928000000144],[-95.255004999999983,71.895537999999988],[-95.222778000000005,71.942200000000071],[-95.217498999999862,71.944976999999994],[-95.201400999999976,71.94720500000011],[-94.97193900000002,71.975814999999955],[-94.741104000000007,71.99192800000003],[-94.698043999999982,71.993590999999924],[-94.661666999999966,71.994980000000112],[-94.579726999999991,71.99693300000007],[-94.56361400000003,71.99693300000007],[-94.530288999999982,71.99443100000002],[-94.499435000000005,71.988037000000134],[-94.487212999999997,71.983322000000101],[-94.393615999999952,71.938309000000004],[-94.387222000000008,71.933868000000075],[-94.388610999999912,71.924149000000114],[-94.460555999999997,71.849426000000108],[-94.47222899999997,71.847214000000065],[-94.506667999999991,71.847762999999986],[-94.521118000000001,71.849990999999932],[-94.539444000000003,71.851379000000065],[-94.562499999999943,71.849990999999932],[-94.574448000000018,71.84693900000002],[-94.64416499999993,71.818329000000006],[-94.61860699999994,71.753326000000072],[-94.611937999999952,71.74971000000005],[-94.599730999999906,71.744704999999954],[-94.594161999999983,71.743317000000047],[-94.569457999999941,71.744979999999998],[-94.555831999999896,71.750000000000057],[-94.538604999999961,71.758331000000112],[-94.536391999999978,71.761108000000036],[-94.528609999999958,71.771378000000141],[-94.519729999999925,71.78915400000011],[-94.497498000000007,71.818329000000006],[-94.48832699999997,71.824158000000011],[-94.484726000000023,71.824706999999933],[-94.392226999999991,71.81442300000009],[-94.366104000000007,71.802475000000072],[-94.356658999999866,71.796371000000022],[-94.354720999999984,71.792479999999955],[-94.389998999999989,71.71775800000006],[-94.419448999999986,71.667205999999965],[-94.423889000000031,71.66137700000013],[-94.418335000000013,71.659987999999942],[-94.40695199999999,71.660812000000135],[-94.368880999999988,71.675262000000032],[-94.267226999999991,71.730820000000051],[-94.258895999999993,71.741928000000087],[-94.255843999999968,71.753876000000105],[-94.242766999999958,71.770828000000108],[-94.228058000000033,71.781661999999983],[-94.207229999999925,71.789428999999927],[-94.194442999999922,71.791931000000034],[-94.181670999999994,71.791931000000034],[-94.036941999999954,71.787200999999982],[-94.023620999999991,71.785812000000021],[-94.014724999999885,71.781096999999988],[-94.008347000000015,71.774993999999992],[-94.006393000000003,71.763321000000019],[-93.993880999999988,71.753052000000139],[-93.972503999999958,71.745818999999983],[-93.942490000000021,71.743590999999981],[-93.909728999999913,71.744979999999998],[-93.888061999999991,71.748322000000087],[-93.871383999999978,71.753052000000139],[-93.850280999999995,71.763321000000019],[-93.830841000000021,71.771652000000074],[-93.818892999999889,71.774703999999986],[-93.802215999999987,71.775542999999971],[-93.784164000000033,71.774155000000064],[-93.741942999999992,71.769150000000025],[-93.726669000000015,71.76638800000012],[-93.71166999999997,71.761383000000023],[-93.707229999999925,71.754990000000078],[-93.694153000000028,71.716095000000109],[-93.696655000000021,71.710815000000082],[-93.704452999999944,71.705261000000064],[-93.737777999999992,71.689423000000033],[-93.764724999999999,71.679703000000131],[-93.811110999999926,71.657486000000063],[-93.818618999999956,71.651932000000102],[-93.81138599999997,71.645538000000045],[-93.797226000000023,71.639435000000105],[-93.658339999999896,71.581940000000031],[-93.618057000000022,71.56860400000005],[-93.589447000000007,71.561371000000065],[-93.513061999999877,71.544707999999957],[-93.494994999999903,71.541656000000046],[-93.476944000000003,71.540267999999969],[-93.428328999999962,71.534149000000127],[-93.412216000000001,71.530823000000055],[-93.230835000000013,71.473602000000142],[-93.214171999999962,71.467209000000139],[-93.201401000000033,71.461380000000133],[-93.18638599999997,71.435806000000127],[-93.18638599999997,71.430267000000129],[-93.18998699999986,71.423874000000012],[-93.193877999999927,71.419433999999967],[-93.195540999999935,71.413605000000132],[-93.190551999999968,71.408035000000098],[-93.180556999999965,71.401093000000003],[-93.142501999999979,71.374985000000038],[-93.128875999999991,71.368866000000025],[-93.101944000000003,71.367477000000008],[-93.062774999999988,71.36943100000002],[-93.045272999999952,71.367751999999996],[-93.029175000000009,71.36442599999998],[-92.997222999999963,71.353866999999923],[-92.985824999999863,71.348877000000073],[-92.977218999999934,71.343872000000033],[-92.973891999999978,71.340820000000122],[-92.941939999999931,71.288879000000009],[-92.938599000000011,71.270538000000045],[-92.936110999999926,71.247481999999991],[-92.931945999999925,71.220535000000041],[-92.930831999999953,71.214432000000102],[-92.923889000000031,71.207763999999941],[-92.854445999999996,71.151382000000126],[-92.862777999999992,71.139434999999992],[-92.869155999999975,71.128036000000122],[-92.888610999999969,71.074707000000103],[-92.889998999999932,71.065810999999997],[-92.906951999999933,70.912491000000102],[-93.030838000000017,70.878860000000088],[-93.040833000000021,70.877762000000018],[-93.048339999999996,70.873870999999951],[-93.046111999999937,70.867203000000018],[-93.042769999999905,70.863876000000062],[-93.027495999999985,70.852768000000083],[-92.982498000000021,70.825546000000145],[-92.958618000000001,70.817490000000078],[-92.928328999999962,70.811371000000008],[-92.911391999999978,70.809982000000048],[-92.813048999999978,70.805817000000047],[-92.688598999999954,70.775542999999971],[-92.676666000000012,70.771652000000074],[-92.641112999999962,70.71527100000003],[-92.639449999999954,70.709991000000116],[-92.642501999999979,70.706375000000094],[-92.621933000000013,70.683594000000028],[-92.592772999999966,70.685806000000127],[-92.430557000000022,70.666091999999992],[-92.418059999999969,70.66304000000008],[-92.208053999999947,70.610260000000039],[-92.199158000000011,70.606644000000017],[-92.169158999999979,70.590271000000143],[-92.159163999999976,70.584152000000074],[-92.157501000000025,70.579163000000108],[-92.156661999999983,70.573044000000095],[-92.168335000000013,70.569992000000013],[-92.196105999999986,70.571105999999986],[-92.228607000000011,70.573608000000036],[-92.245543999999995,70.571380999999974],[-92.25,70.569716999999969],[-92.265014999999892,70.551926000000037],[-92.265014999999892,70.548035000000141],[-92.25,70.501389000000131],[-92.238051999999982,70.487198000000092],[-92.116652999999985,70.470825000000048],[-92.110000999999897,70.468322999999998],[-91.996947999999975,70.390823000000069],[-91.987777999999992,70.355820000000108],[-91.992492999999968,70.320540999999992],[-91.995269999999948,70.316665999999998],[-91.985549999999932,70.289703000000031],[-91.959732000000031,70.2586060000001],[-91.952224999999999,70.255264000000125],[-91.946945000000028,70.258041000000048],[-91.942214999999976,70.263610999999969],[-91.920273000000009,70.296370999999965],[-91.900283999999999,70.330826000000116],[-91.903610000000015,70.337204000000042],[-91.904449,70.343323000000112],[-91.89805599999994,70.349152000000117],[-91.890288999999996,70.354431000000091],[-91.878052000000025,70.358321999999987],[-91.867492999999968,70.360260000000096],[-91.853058000000033,70.361374000000069],[-91.73721299999994,70.358596999999975],[-91.729720999999984,70.356934000000081],[-91.703887999999949,70.34526100000005],[-91.698883000000023,70.342484000000127],[-91.69387799999987,70.336380000000077],[-91.636123999999938,70.231658999999979],[-91.565276999999924,70.200546000000145],[-91.524169999999913,70.179153000000042],[-91.513625999999931,70.167206000000078],[-91.511948000000018,70.158875000000023],[-91.511397999999986,70.152771000000143],[-91.516953000000001,70.146378000000027],[-91.529174999999952,70.142487000000131],[-91.542495999999915,70.140823000000125],[-91.578063999999927,70.13749700000011],[-91.916655999999989,70.119980000000055],[-91.953339000000028,70.118317000000104],[-91.972228999999913,70.118591000000038],[-92.003890999999953,70.121368000000132],[-92.021392999999989,70.123596000000077],[-92.036117999999931,70.126923000000033],[-92.049438000000009,70.132202000000007],[-92.05749499999996,70.136932000000058],[-92.234436000000017,70.212203999999986],[-92.268341000000021,70.208878000000141],[-92.393065999999976,70.150543000000027],[-92.450287000000003,70.0711060000001],[-92.432220000000029,70.075546000000088],[-92.285278000000005,70.089706000000035],[-92.268341000000021,70.090546000000074],[-92.177489999999977,70.088318000000072],[-92.129990000000021,70.084991000000002],[-92.087508999999898,70.079711999999972],[-92.026397999999972,70.066376000000048],[-91.993056999999965,70.058594000000085],[-91.985274999999945,70.053864000000033],[-91.939712999999983,70.020263999999997],[-91.946654999999907,70.015823000000069],[-92.114440999999999,69.956375000000037],[-92.148894999999925,69.946639999999945],[-92.203887999999949,69.92053199999998],[-92.369445999999982,69.847763000000043],[-92.543335000000013,69.780548000000067],[-92.658614999999998,69.761108000000092],[-92.778610000000015,69.722214000000008],[-92.775283999999999,69.706375000000094],[-92.565552000000025,69.71276899999998],[-92.551392000000021,69.712494000000106],[-92.535004000000015,69.709427000000005],[-92.535277999999948,69.705261000000121],[-92.709732000000031,69.673874000000012],[-92.728881999999999,69.67164600000001],[-92.743805000000009,69.671951000000035],[-92.777221999999938,69.676086000000055],[-92.858046999999999,69.6827550000001],[-92.871384000000035,69.682480000000112],[-92.908889999999985,69.680541999999946],[-92.922774999999888,69.679427999999973],[-92.923614999999927,69.678314],[-92.920273000000009,69.669708000000071],[-92.897506999999962,69.665543000000071],[-92.836120999999991,69.655822999999998],[-92.827498999999989,69.655822999999998],[-92.694442999999978,69.656372000000147],[-92.634726999999998,69.671088999999938],[-92.629378999999972,69.673592000000099],[-92.619056999999998,69.675758000000087],[-92.5625,69.687484999999981],[-92.523620999999935,69.692749000000106],[-92.506957999999941,69.693588000000091],[-92.340835999999967,69.694138000000123],[-92.305831999999896,69.665817000000004],[-92.205276000000026,69.645538000000101],[-92.091110000000015,69.624695000000031],[-92.088333000000034,69.62303200000008],[-92.088607999999965,69.618865999999969],[-92.090835999999911,69.616089000000102],[-92.110549999999932,69.613036999999963],[-92.122771999999998,69.612198000000035],[-92.134170999999981,69.612488000000042],[-92.243606999999884,69.630264000000011],[-92.28195199999999,69.639984000000084],[-92.291107000000011,69.641373000000101],[-92.300551999999925,69.641663000000108],[-92.297501000000011,69.636932000000002],[-92.124709999999936,69.554977000000065],[-92.084166999999979,69.544708000000014],[-91.938323999999909,69.517761000000121],[-91.803329000000019,69.498870999999951],[-91.804168999999888,69.504990000000021],[-91.798339999999939,69.513885000000016],[-91.497498000000007,69.658600000000092],[-91.485001000000011,69.663315000000125],[-91.475280999999939,69.664429000000098],[-91.450835999999981,69.65887499999991],[-91.418883999999935,69.65554800000001],[-91.314163000000008,69.652771000000087],[-91.221114999999998,69.653320000000008],[-91.202224999999942,69.655258000000003],[-91.188599000000011,69.65387000000004],[-91.097777999999948,69.638321000000133],[-91.094161999999983,69.636108000000036],[-91.091949,69.631652999999972],[-91.095275999999956,69.626647999999932],[-91.101943999999946,69.620819000000097],[-91.105835000000013,69.619141000000013],[-91.334441999999967,69.552765000000022],[-91.36082499999992,69.54553199999998],[-91.380554000000018,69.542480000000069],[-91.396118000000001,69.541091999999992],[-91.460555999999997,69.539703000000145],[-91.494720000000029,69.537201000000096],[-91.514450000000011,69.534148999999957],[-91.562774999999931,69.522491000000116],[-91.570281999999963,69.520264000000054],[-91.56639100000001,69.514708999999982],[-91.557770000000005,69.508041000000048],[-91.553878999999995,69.505554000000132],[-91.402221999999938,69.522217000000012],[-91.333618000000001,69.534988000000112],[-91.321670999999924,69.538879000000009],[-91.192215000000033,69.562759000000028],[-91.17971799999998,69.558868000000132],[-91.160277999999892,69.546097000000032],[-91.15055799999999,69.537201000000096],[-91.146666999999923,69.531662000000097],[-91.143616000000009,69.525268999999923],[-91.138610999999855,69.519150000000081],[-91.128326000000015,69.514160000000061],[-91.114166000000012,69.510817999999915],[-91.102782999999988,69.508881000000088],[-90.969727000000034,69.511383000000137],[-90.830001999999922,69.484984999999995],[-90.758620999999948,69.482758000000103],[-90.751953000000015,69.487198000000149],[-90.751403999999866,69.49275200000011],[-90.758057000000008,69.501389000000131],[-90.755843999999968,69.507217000000082],[-90.754181000000017,69.509155000000021],[-90.716109999999958,69.539429000000041],[-90.698607999999922,69.539429000000041],[-90.651108000000022,69.534424000000001],[-90.536666999999909,69.513885000000016],[-90.493332000000009,69.504166000000055],[-90.436661000000015,69.489700000000028],[-90.318619000000012,69.454437000000041],[-90.307769999999948,69.450272000000041],[-90.307769999999948,69.44720500000011],[-90.319457999999997,69.440536000000009],[-90.34445199999999,69.432205000000124],[-90.358046999999942,69.429703000000075],[-90.396392999999875,69.428589000000102],[-90.411391999999921,69.431365999999969],[-90.427489999999977,69.440811000000053],[-90.43360899999999,69.444976999999938],[-90.438323999999966,69.448029000000076],[-90.450561999999991,69.450272000000041],[-90.463332999999921,69.448593000000017],[-90.493332000000009,69.440811000000053],[-90.555556999999965,69.422485000000052],[-90.613891999999908,69.451096000000007],[-90.621932999999956,69.453323000000012],[-90.703612999999962,69.453598000000056],[-90.704453000000001,69.451385000000073],[-90.698607999999922,69.446091000000138],[-90.636948000000018,69.429703000000075],[-90.585830999999985,69.419144000000017],[-90.582229999999925,69.416931000000034],[-90.584732000000031,69.41415399999994],[-90.600829999999974,69.408599999999979],[-90.694991999999957,69.389709000000096],[-90.705275999999969,69.387772000000098],[-90.718613000000005,69.387772000000098],[-90.741378999999938,69.382750999999928],[-90.790282999999988,69.362762000000032],[-90.809432999999956,69.342209000000139],[-90.813048999999921,69.338318000000072],[-90.815826000000015,69.333327999999995],[-90.818619000000012,69.298598999999967],[-90.815001999999993,69.293319999999994],[-90.80860899999999,69.287490999999989],[-90.805557000000022,69.282761000000107],[-90.803878999999995,69.259720000000073],[-90.804717999999923,69.255829000000006],[-90.809432999999956,69.253326000000015],[-90.822234999999978,69.251663000000121],[-90.903885000000002,69.246368000000075],[-90.920837000000006,69.246368000000075],[-90.931380999999931,69.247482000000048],[-91.081115999999952,69.266936999999984],[-91.214721999999938,69.290268000000083],[-91.296386999999925,69.3119200000001],[-91.345276000000013,69.328049000000021],[-91.355834999999956,69.332214000000022],[-91.426391999999964,69.350540000000024],[-91.438599000000011,69.352768000000026],[-91.447220000000016,69.352768000000026],[-91.446655000000021,69.349716000000058],[-91.431945999999982,69.33859300000006],[-91.335281000000009,69.304428000000144],[-91.130553999999961,69.24192800000003],[-91.031386999999938,69.218323000000055],[-90.918883999999935,69.160812000000078],[-90.895003999999972,69.150818000000072],[-90.815001999999993,69.133606000000043],[-90.664718999999991,69.083328000000051],[-90.654998999999918,69.078049000000078],[-90.654174999999952,69.07609599999995],[-90.654449,69.070541000000048],[-90.660552999999993,69.059982000000048],[-90.669448999999929,69.049987999999985],[-90.583892999999989,68.928864000000033],[-90.544998000000021,68.911102000000142],[-90.528884999999946,68.908600000000092],[-90.47444200000001,68.890549000000078],[-90.436385999999914,68.874419999999986],[-90.419448999999986,68.840820000000065],[-90.446105999999986,68.779709000000139],[-90.449158000000011,68.77609300000006],[-90.454177999999956,68.773605000000089],[-90.464721999999995,68.770827999999995],[-90.478332999999964,68.768326000000116],[-90.492492999999968,68.767761000000064],[-90.497498000000007,68.768326000000116],[-90.501113999999973,68.770827999999995],[-90.513900999999976,68.759155000000135],[-90.526672000000019,68.744431000000134],[-90.527785999999992,68.736649],[-90.522507000000019,68.729980000000069],[-90.506957999999997,68.724990999999932],[-90.480285999999921,68.707764000000111],[-90.479172000000005,68.705826000000002],[-90.47444200000001,68.530822999999941],[-90.509734999999978,68.495254999999929],[-90.519454999999994,68.487487999999985],[-90.528335999999911,68.483322000000101],[-90.557770000000005,68.474700999999982],[-90.584732000000031,68.465546000000131],[-90.603881999999999,68.455826000000059],[-90.607772999999952,68.451096000000007],[-90.606658999999979,68.446091000000138],[-90.603881999999999,68.439697000000081],[-90.601395000000025,68.436371000000065],[-90.55999799999995,68.423599000000024],[-90.523894999999982,68.414428999999984],[-90.466948999999886,68.403869999999984],[-90.361938000000009,68.384155000000135],[-90.332779000000016,68.378036000000122],[-90.317504999999983,68.373306000000071],[-90.315001999999993,68.369980000000055],[-90.319167999999991,68.368317000000104],[-90.343886999999938,68.365265000000022],[-90.367492999999911,68.345261000000107],[-90.271392999999989,68.238876000000118],[-90.255004999999926,68.23275799999999],[-90.232772999999952,68.230270000000019],[-90.207229999999925,68.231093999999985],[-90.178604000000007,68.235809000000017],[-90.144454999999994,68.243866000000025],[-90.132216999999912,68.24859600000002],[-90.122771999999941,68.25360100000006],[-90.119720000000029,68.257216999999969],[-90.118057000000022,68.262206999999989],[-90.038604999999961,68.352202999999975],[-89.985275000000001,68.396102999999982],[-89.912216000000001,68.467209000000025],[-89.893065999999919,68.543319999999937],[-89.911666999999966,68.547484999999938],[-89.919998000000021,68.553588999999988],[-89.927779999999984,68.563599000000067],[-89.948607999999979,68.599426000000051],[-89.950561999999991,68.60386699999998],[-89.949721999999952,68.607758000000047],[-89.894729999999868,68.65248100000008],[-89.80972300000002,68.71026599999999],[-89.802489999999921,68.712203999999929],[-89.789168999999958,68.71026599999999],[-89.780563000000029,68.705826000000002],[-89.763335999999924,68.690536000000009],[-89.757507000000032,68.684708000000057],[-89.746947999999975,68.669708000000128],[-89.729172000000005,68.699142000000109],[-89.693328999999949,68.763885000000016],[-89.68472300000002,68.810257000000092],[-89.687499999999943,68.819716999999969],[-89.689986999999917,68.824707000000046],[-89.714721999999995,68.846939000000077],[-89.733886999999925,68.881653000000142],[-89.739166000000012,68.892761000000121],[-89.756957999999884,68.939972000000012],[-89.75556899999998,68.954162999999994],[-89.753066999999987,68.958327999999995],[-89.71665999999999,69.006104000000107],[-89.707229999999925,69.014709000000096],[-89.700561999999991,69.019150000000025],[-89.684433000000013,69.028870000000097],[-89.666107000000011,69.038315000000011],[-89.644164999999987,69.048325000000091],[-89.582779000000016,69.06860400000005],[-89.56082200000003,69.077209000000039],[-89.529357999999945,69.090606999999977],[-89.489990000000034,69.110535000000027],[-89.482497999999907,69.115540000000067],[-89.458618000000001,69.133606000000043],[-89.402221999999995,69.178863999999976],[-89.398620999999935,69.182479999999998],[-89.394454999999937,69.193039000000056],[-89.394454999999937,69.199141999999995],[-89.396956999999929,69.208602999999982],[-89.394454999999937,69.214431999999988],[-89.389998999999932,69.219147000000021],[-89.322234999999921,69.247208000000114],[-89.306655999999919,69.251389000000017],[-89.258621000000005,69.259995000000117],[-89.220551,69.266663000000051],[-89.174164000000019,69.273315000000139],[-89.134170999999981,69.275542999999914],[-89.114440999999886,69.27526899999998],[-89.09056099999998,69.271927000000062],[-89.049987999999985,69.264435000000105],[-89.038054999999872,69.261931999999945],[-88.999435000000005,69.251389000000017],[-88.968886999999938,69.24136400000009],[-88.942489999999964,69.229980000000012],[-88.938048999999978,69.226928999999984],[-88.935546999999985,69.222214000000122],[-88.93472300000002,69.219986000000006],[-88.9375,69.214156999999943],[-88.936660999999958,69.209152000000074],[-88.929992999999968,69.198029000000133],[-88.870269999999948,69.148605000000089],[-88.85943599999996,69.142211999999972],[-88.782501000000025,69.103043000000071],[-88.772507000000019,69.098876999999959],[-88.62388599999997,69.042755],[-88.480285999999978,68.998871000000065],[-88.457229999999925,68.992752000000053],[-88.406113000000005,68.982758000000047],[-88.270844000000011,68.934981999999934],[-88.208618000000001,68.911652000000004],[-88.197768999999994,68.906647000000135],[-88.115829000000019,68.860535000000084],[-88.082229999999981,68.841370000000097],[-88.052215999999987,68.823044000000095],[-88.038329999999974,68.814147999999989],[-87.971664000000033,68.766097999999943],[-87.96444699999995,68.760543999999982],[-87.947768999999994,68.731659000000093],[-87.921660999999915,68.673035000000027],[-87.916655999999989,68.656372000000147],[-87.917496000000028,68.647491000000059],[-87.925002999999947,68.632476999999994],[-87.93499799999995,68.61943100000002],[-87.942489999999907,68.610809000000017],[-87.947768999999994,68.605255000000056],[-87.933883999999978,68.576935000000049],[-87.924163999999905,68.559708000000001],[-87.883621000000005,68.494430999999963],[-87.881377999999984,68.491089000000045],[-87.841675000000009,68.432479999999998],[-87.835555999999997,68.42442299999999],[-87.817504999999926,68.417206000000078],[-87.798614999999984,68.40525800000006],[-87.791672000000005,68.398330999999985],[-87.789718999999934,68.391937000000098],[-87.789444000000003,68.386658000000125],[-87.792220999999927,68.334427000000005],[-87.800551999999925,68.3119200000001],[-87.845276000000013,68.247757000000092],[-87.848891999999864,68.244141000000013],[-87.929168999999945,68.197204999999997],[-87.93582200000003,68.195815999999979],[-87.946945000000028,68.198593000000074],[-88.106658999999866,68.242751999999996],[-88.22193900000002,68.36554000000001],[-88.384445000000028,68.291092000000049],[-88.392226999999991,68.287490999999989],[-88.395553999999947,68.285263000000043],[-88.401671999999962,68.280272999999966],[-88.403335999999911,68.275542999999971],[-88.402785999999878,68.270263999999997],[-88.398345999999947,68.260544000000095],[-88.380829000000006,68.24552900000009],[-88.361937999999952,68.233871000000079],[-88.342498999999975,68.223602000000028],[-88.334732000000031,68.217484000000127],[-88.330841000000021,68.213043000000027],[-88.279723999999931,68.118041999999946],[-88.277495999999985,68.111649],[-88.277785999999992,68.105545000000006],[-88.283065999999963,68.099990999999989],[-88.315551999999968,68.086104999999975],[-88.331680000000006,68.076385000000073],[-88.338332999999977,68.070541000000105],[-88.341109999999901,68.064987000000087],[-88.347777999999948,68.037201000000039],[-88.366942999999992,68.03166200000004],[-88.381103999999993,68.025269000000094],[-88.372771999999941,67.96887200000009],[-88.370834000000002,67.959152000000017],[-88.36860699999994,67.954436999999984],[-88.285278000000005,67.81721500000009],[-88.276397999999972,67.80304000000001],[-88.269164999999987,67.793594000000041],[-88.160552999999993,67.682479999999941],[-88.151107999999908,67.673309000000017],[-88.139449999999954,67.664428999999984],[-88.124999999999943,67.65554800000001],[-88.095839999999953,67.642487000000074],[-88.066100999999946,67.634720000000129],[-88.009170999999924,67.622757000000092],[-87.979996000000028,67.615814000000114],[-87.965285999999992,67.611649000000114],[-87.955841000000021,67.607483000000002],[-87.881377999999984,67.568054000000132],[-87.841385000000002,67.536102000000142],[-87.827224999999999,67.527206000000035],[-87.789169000000015,67.505263999999954],[-87.623046999999929,67.412491000000102],[-87.606383999999935,67.403869999999984],[-87.585007000000019,67.395264000000054],[-87.53694200000001,67.378860000000088],[-87.460830999999985,67.344147000000135],[-87.357773000000009,67.262207000000046],[-87.359160999999972,67.247482000000048],[-87.361938000000009,67.242203000000075],[-87.429168999999945,67.208603000000039],[-87.440551999999968,67.204987000000131],[-87.486664000000019,67.194138000000066],[-87.497771999999941,67.190536000000122],[-87.50556899999998,67.185256999999979],[-87.511397999999986,67.174988000000099],[-87.511948000000018,67.169983000000059],[-87.516953000000001,67.115540000000124],[-87.510284000000013,67.112198000000149],[-87.497498000000007,67.115265000000079],[-87.322784000000013,67.162766000000147],[-87.240828999999906,67.216094999999939],[-87.117766999999958,67.212769000000094],[-87.069732999999928,67.219437000000084],[-86.968612999999948,67.245255000000043],[-86.96305799999999,67.250548999999978],[-86.967498999999975,67.255264000000011],[-87.008895999999936,67.282211000000132],[-87.075561999999934,67.327209000000039],[-87.086670000000026,67.336379999999963],[-87.090560999999923,67.345825000000048],[-87.089995999999985,67.350815000000125],[-87.081389999999999,67.354430999999977],[-86.874435000000005,67.404984000000127],[-86.804169000000002,67.420821999999987],[-86.79222099999987,67.422485000000108],[-86.779175000000009,67.422211000000004],[-86.765288999999939,67.419144000000074],[-86.709731999999974,67.388046000000031],[-86.689163000000008,67.3744200000001],[-86.68472300000002,67.369980000000055],[-86.675551999999982,67.365540000000067],[-86.647232000000031,67.358322000000044],[-86.592498999999975,67.345261000000107],[-86.579726999999991,67.344986000000063],[-86.543883999999935,67.344986000000063],[-86.53195199999999,67.346649000000014],[-86.523620999999991,67.352203000000031],[-86.518065999999976,67.357208000000071],[-86.509170999999981,67.36775200000011],[-86.50306699999993,67.377762000000018],[-86.473891999999978,67.468596999999988],[-86.472777999999892,67.478592000000049],[-86.47444200000001,67.483322000000101],[-86.49499499999996,67.49693300000007],[-86.485001000000011,67.516936999999984],[-86.452224999999999,67.592484000000127],[-86.451401000000033,67.597488000000112],[-86.455840999999964,67.601929000000041],[-86.465285999999935,67.606369000000029],[-86.479720999999984,67.610535000000141],[-86.488892000000021,67.614699999999971],[-86.521392999999932,67.671921000000111],[-86.525283999999999,67.681366000000139],[-86.508056999999894,67.69720500000011],[-86.359160999999915,67.827773999999977],[-86.350554999999986,67.833327999999938],[-86.286941999999897,67.869979999999941],[-86.098052999999993,67.978043000000014],[-86.041381999999942,68.000549000000035],[-86.029723999999931,68.004990000000134],[-86.005004999999983,68.008330999999998],[-85.99221799999998,68.009155000000135],[-85.979995999999915,68.011658000000125],[-85.898346000000004,68.046097000000145],[-85.892501999999979,68.051376000000118],[-85.890838999999971,68.061371000000065],[-85.912506000000008,68.084717000000069],[-85.916396999999961,68.094147000000135],[-85.914443999999946,68.104155999999989],[-85.888061999999991,68.189697000000137],[-85.842772999999966,68.317214999999976],[-85.839172000000019,68.321381000000088],[-85.712783999999942,68.411652000000117],[-85.726943999999946,68.486374000000012],[-85.733321999999987,68.598602000000085],[-85.675277999999992,68.711104999999975],[-85.663619999999923,68.726929000000098],[-85.645843999999954,68.737488000000099],[-85.633895999999936,68.741928000000144],[-85.620269999999948,68.741653000000099],[-85.606383999999991,68.740265000000022],[-85.591675000000009,68.737198000000092],[-85.569457999999941,68.728317000000004],[-85.558043999999938,68.726089000000002],[-85.494445999999925,68.736923000000104],[-85.481948999999929,68.739426000000037],[-85.466171000000031,68.749992000000134],[-85.464164999999923,68.752991000000122],[-85.464721999999938,68.759720000000016],[-85.507781999999963,68.766662999999994],[-85.550827000000027,68.773315000000082],[-85.562774999999988,68.776657],[-85.55360399999995,68.781097000000045],[-85.540833000000021,68.78276100000005],[-85.514175000000023,68.783875000000023],[-85.458053999999947,68.777770999999973],[-85.415008999999998,68.770827999999995],[-85.371383999999978,68.762207000000103],[-85.361664000000019,68.757767000000058],[-85.368056999999965,68.752486999999974],[-85.379439999999988,68.747208000000001],[-85.388335999999981,68.741928000000144],[-85.384170999999981,68.737198000000092],[-85.328612999999962,68.724990999999932],[-85.314162999999951,68.722762999999986],[-85.228881999999999,68.71026599999999],[-85.215835999999967,68.710815000000139],[-85.209166999999979,68.714996000000042],[-85.210830999999985,68.719711000000075],[-85.21945199999999,68.729155999999932],[-85.226669000000015,68.733597000000032],[-85.148345999999947,68.750000000000114],[-85.067504999999926,68.749710000000107],[-84.912780999999939,68.746933000000013],[-84.898055999999997,68.742477000000065],[-84.883895999999993,68.740265000000022],[-84.801102000000014,68.73414600000001],[-84.787215999999944,68.733597000000032],[-84.775283999999999,68.737198000000092],[-84.767501999999922,68.747208000000001],[-84.760009999999909,68.757217000000026],[-84.752791999999999,68.767487000000131],[-84.754180999999903,68.772217000000012],[-84.761123999999995,68.776932000000045],[-84.834732000000031,68.820541000000105],[-84.846664000000033,68.82388300000008],[-84.860824999999977,68.825272000000041],[-84.899993999999936,68.820541000000105],[-84.912216000000001,68.818054000000018],[-84.976944000000003,68.809418000000107],[-85.003615999999909,68.808318999999983],[-85.031677000000002,68.810806000000014],[-85.131942999999922,68.826934999999992],[-85.143889999999942,68.830276000000026],[-85.163054999999929,68.839157000000114],[-85.17721599999993,68.848328000000095],[-85.184158000000025,68.853043000000127],[-85.192764000000011,68.862198000000149],[-85.194442999999865,68.867203000000018],[-85.190826000000015,68.872208000000057],[-85.177779999999984,68.87359600000002],[-85.15306099999998,68.873032000000023],[-85.125,68.870254999999986],[-85.053329000000019,68.858871000000022],[-85.039992999999981,68.859421000000054],[-85.005568999999923,68.877472000000068],[-85.001952999999958,68.882477000000108],[-84.99749799999995,68.925812000000064],[-85.007232999999871,68.930267000000129],[-85.021117999999944,68.931656000000089],[-85.046660999999972,68.926651000000049],[-85.059998000000007,68.925812000000064],[-85.08805799999999,68.928588999999988],[-85.116942999999935,68.93331900000004],[-85.129439999999931,68.937485000000095],[-85.136123999999995,68.942200000000128],[-85.140563999999927,68.946640000000002],[-85.136947999999961,68.951935000000049],[-85.127776999999924,68.956100000000049],[-85.115004999999996,68.958603000000039],[-85.087508999999955,68.958037999999988],[-84.973785000000021,68.946869000000106],[-84.914718999999991,68.938034000000073],[-84.818893000000003,68.927765000000022],[-84.805831999999953,68.929152999999928],[-84.796386999999982,68.933594000000028],[-84.791381999999942,68.94331399999993],[-84.793334999999956,68.948318000000086],[-84.799987999999871,68.952774000000034],[-84.809433000000013,68.957214000000022],[-84.821945000000028,68.961655000000121],[-84.837219000000005,68.965820000000122],[-84.851394999999968,68.968323000000112],[-84.865554999999915,68.969711000000018],[-84.906951999999933,68.971649000000127],[-84.921386999999982,68.973877000000073],[-84.936110999999926,68.977203000000145],[-84.986922999999933,68.999511999999982],[-84.981673999999941,69.007492000000013],[-84.957779000000016,69.017487000000074],[-84.944442999999978,69.018051000000014],[-84.836394999999925,69.012772000000041],[-84.720000999999968,69.006943000000035],[-84.591674999999952,68.994431000000077],[-84.578063999999983,68.993866000000025],[-84.565552000000025,68.997482000000105],[-84.541381999999999,69.007216999999969],[-84.532227000000034,69.012497000000053],[-84.528335999999967,69.017487000000074],[-84.535277999999948,69.022217000000126],[-84.563613999999973,69.025818000000015],[-84.745543999999995,69.039703000000088],[-84.953887999999949,69.085815000000139],[-85.108337000000006,69.113312000000121],[-85.020554000000004,69.160262999999929],[-85.006957999999941,69.160812000000078],[-84.994155999999919,69.163315000000068],[-84.987502999999947,69.168594000000041],[-84.994719999999973,69.173035000000141],[-85.008895999999993,69.174423000000047],[-85.064712999999927,69.176926000000037],[-85.143775999999946,69.167091000000028],[-85.151778999999976,69.166091999999935],[-85.159110999999996,69.164101000000073],[-85.163276999999994,69.161598000000083],[-85.155272999999966,69.153107000000091],[-85.176665999999898,69.143600000000049],[-85.197494999999947,69.132750999999985],[-85.210555999999997,69.130264000000125],[-85.223617999999988,69.128860000000088],[-85.236937999999952,69.128036000000122],[-85.25140399999998,69.130264000000125],[-85.266662999999994,69.133606000000043],[-85.308334000000002,69.143600000000049],[-85.315552000000025,69.148041000000148],[-85.317504999999983,69.15277100000003],[-85.308043999999995,69.158034999999984],[-85.29611199999988,69.162491000000102],[-85.283324999999877,69.165267999999969],[-85.235001000000011,69.174698000000035],[-85.227501000000018,69.176872000000003],[-85.226836999999989,69.179870999999991],[-85.231162999999981,69.182541000000072],[-85.240829000000019,69.192474000000004],[-85.254729999999995,69.192749000000049],[-85.337783999999999,69.193863000000022],[-85.383057000000008,69.205551000000071],[-85.392776000000026,69.209991000000059],[-85.473327999999924,69.271927000000062],[-85.477782999999874,69.276382000000069],[-85.50306699999993,69.31442300000009],[-85.508057000000008,69.395263999999997],[-85.506957999999997,69.400269000000037],[-85.503341999999975,69.405258000000003],[-85.494155999999919,69.410812000000021],[-85.481948999999929,69.415267999999969],[-85.467498999999918,69.417206000000078],[-85.453339000000028,69.416931000000034],[-85.424437999999952,69.413315000000011],[-85.396117999999944,69.411652000000061],[-85.383330999999941,69.415267999999969],[-85.339172000000019,69.438873000000115],[-85.343613000000005,69.443587999999977],[-85.353606999999954,69.448029000000076],[-85.378875999999934,69.456649999999968],[-85.39416499999993,69.460815000000139],[-85.422774999999945,69.462493999999992],[-85.436385999999914,69.460815000000139],[-85.445830999999998,69.45637499999998],[-85.465011999999945,69.440811000000053],[-85.477218999999991,69.436371000000008],[-85.491378999999995,69.436646000000053],[-85.500838999999985,69.439148000000102],[-85.510833999999988,69.443587999999977],[-85.525283999999999,69.45277400000009],[-85.538894999999968,69.466933999999981],[-85.542496000000028,69.476379000000065],[-85.547775000000001,69.647217000000069],[-85.546951000000035,69.652206000000035],[-85.514724999999999,69.768051000000071],[-85.450287000000003,69.784714000000122],[-85.423324999999977,69.788879000000122],[-85.409163999999976,69.788589000000115],[-85.393889999999999,69.7852630000001],[-85.389174999999966,69.780548000000067],[-85.389998999999932,69.775818000000015],[-85.39416499999993,69.770537999999988],[-85.406951999999933,69.760269000000108],[-85.410827999999981,69.755264000000068],[-85.406386999999995,69.750549000000035],[-85.391952999999944,69.750275000000101],[-85.379165999999941,69.753601000000117],[-85.366652999999985,69.758040999999992],[-85.342498999999975,69.768875000000037],[-85.333068999999966,69.774155000000121],[-85.331954999999994,69.77915999999999],[-85.34445199999999,69.813033999999959],[-85.349166999999909,69.817490000000078],[-85.361938000000009,69.821930000000066],[-85.377212999999927,69.824158000000068],[-85.433608999999933,69.823608000000036],[-85.461394999999982,69.822495000000117],[-85.489990000000034,69.823044000000095],[-85.518615999999952,69.823608000000036],[-85.56138599999997,69.824706999999989],[-85.586394999999982,69.826934999999935],[-85.582229999999981,69.845825000000104],[-85.578613000000018,69.850815000000125],[-85.571945000000028,69.856094000000098],[-85.561935000000005,69.859421000000054],[-85.548049999999932,69.859984999999995],[-85.377212999999927,69.851089000000059],[-85.361938000000009,69.848877000000016],[-85.315552000000025,69.838042999999971],[-85.274169999999913,69.825272000000041],[-85.222504000000015,69.80802900000009],[-85.212509000000011,69.803589000000102],[-85.199432000000002,69.799149000000057],[-85.170836999999949,69.790542999999957],[-85.093886999999995,69.773315000000025],[-85.079177999999956,69.771102999999982],[-85.064437999999996,69.76998900000001],[-84.871658000000025,69.816086000000098],[-84.86471599999993,69.821105999999929],[-84.854172000000005,69.83137499999998],[-84.574172999999917,69.857483000000116],[-84.546386999999868,69.859421000000054],[-84.476669000000015,69.862198000000149],[-84.433608999999933,69.861098999999967],[-84.375823999999966,69.857483000000116],[-84.346663999999976,69.854706000000022],[-84.331680000000006,69.852203000000031],[-84.169448999999986,69.822220000000129],[-84.125823999999909,69.809418000000107],[-84.118606999999997,69.804703000000075],[-84.114165999999955,69.799988000000042],[-84.112220999999977,69.793593999999985],[-84.104171999999949,69.785812000000021],[-84.091674999999952,69.781372000000033],[-83.971938999999963,69.74971000000005],[-83.941665999999998,69.743042000000116],[-83.748610999999926,69.708878000000084],[-83.733886999999982,69.706649999999911],[-83.705001999999922,69.703598],[-83.603881999999942,69.693588000000091],[-83.589447000000007,69.692200000000014],[-83.360549999999989,69.676376000000062],[-83.346389999999985,69.676086000000055],[-83.333069000000023,69.678314],[-83.306380999999931,69.693862999999908],[-83.293610000000001,69.699142000000109],[-83.280562999999916,69.702484000000027],[-83.253341999999975,69.705261000000121],[-83.238892000000021,69.704711999999972],[-83.180557000000022,69.694977000000108],[-83.122771999999998,69.689148000000046],[-83.021941999999967,69.679703000000018],[-83.008056999999951,69.679152999999985],[-82.826950000000011,69.688873000000058],[-82.696654999999964,69.695816000000036],[-82.541007999999977,69.674477000000138],[-82.539672999999937,69.671593000000087],[-82.536162999999874,69.668823000000032],[-82.527328000000011,69.666153000000122],[-82.509505999999874,69.661979999999971],[-82.500671000000011,69.660491999999977],[-82.483329999999967,69.657990000000098],[-82.457503999999972,69.655327],[-82.291672000000005,69.639984000000084],[-82.263335999999981,69.638046000000145],[-82.254729999999995,69.636383000000023],[-82.307495000000017,69.622208000000114],[-82.334731999999974,69.61943100000002],[-82.390288999999996,69.618865999999969],[-82.47066499999994,69.62303200000008],[-82.476333999999952,69.625870000000077],[-82.483664999999974,69.628539999999987],[-82.492500000000007,69.630043000000001],[-82.552337999999963,69.635376000000008],[-82.560836999999992,69.635704000000146],[-82.56899999999996,69.634872000000087],[-82.577002999999991,69.632874000000129],[-82.653885000000002,69.62303200000008],[-82.654723999999987,69.568604000000107],[-82.612503000000004,69.566940000000102],[-82.600280999999995,69.562485000000095],[-82.535278000000005,69.534988000000112],[-82.489989999999977,69.507217000000082],[-82.476668999999958,69.497756999999979],[-82.486937999999896,69.493591000000094],[-82.500564999999938,69.492203000000018],[-82.528884999999946,69.4952550000001],[-82.74221799999998,69.50999500000006],[-82.897507000000019,69.518875000000094],[-82.939712999999927,69.521378000000084],[-82.982223999999917,69.524154999999951],[-83.067779999999914,69.533051000000057],[-83.125548999999921,69.539978000000019],[-83.154175000000009,69.543869000000086],[-83.228057999999976,69.538589000000002],[-83.082503999999972,69.514160000000061],[-83.025283999999999,69.508041000000048],[-82.954726999999991,69.503601000000003],[-82.870270000000005,69.500274999999988],[-82.856658999999922,69.50082400000008],[-82.842498999999918,69.500274999999988],[-82.785277999999948,69.494141000000127],[-82.68472300000002,69.479706000000022],[-82.324172999999917,69.418868999999972],[-82.295272999999952,69.413879000000122],[-82.23721299999994,69.400818000000015],[-82.225280999999995,69.39637799999997],[-82.221389999999928,69.391662999999937],[-82.231673999999941,69.387497000000053],[-82.289718999999991,69.251663000000121],[-82.291381999999999,69.246643000000063],[-82.273055999999997,69.237488000000042],[-82.258620999999948,69.233871000000079],[-82.244995000000017,69.233322000000101],[-82.217223999999931,69.233047000000113],[-82.203612999999962,69.233597000000145],[-82.054442999999992,69.24136400000009],[-82.041107000000011,69.242751999999996],[-82.027785999999992,69.244979999999941],[-81.99129499999998,69.25470700000011],[-81.914718999999877,69.269440000000145],[-81.70777899999996,69.264709000000039],[-81.693877999999984,69.263046000000145],[-81.67971799999998,69.260544000000039],[-81.650283999999999,69.251663000000121],[-81.512222000000008,69.20138500000013],[-81.416396999999904,69.208038000000101],[-81.402221999999995,69.207214000000135],[-81.388335999999981,69.204712000000086],[-81.359725999999966,69.196640000000116],[-81.347778000000005,69.191925000000083],[-81.338897999999972,69.187485000000038],[-81.332503999999858,69.182479999999998],[-81.299438000000009,69.1202550000001],[-81.330841000000021,69.095261000000107],[-81.57028200000002,68.992477000000008],[-81.59584000000001,68.984146000000123],[-81.71665999999999,68.949142000000052],[-81.75556899999998,68.941360000000088],[-81.809433000000013,68.9327550000001],[-81.888061999999991,68.919144000000131],[-81.914169000000015,68.914429000000098],[-81.966110000000015,68.904433999999981],[-82.005004999999983,68.895538000000045],[-82.043059999999969,68.883881000000088],[-82.055556999999965,68.878586000000041],[-82.057219999999973,68.873871000000008],[-82.043335000000013,68.872208000000057],[-82.00306699999993,68.874146000000053],[-81.977218999999991,68.879700000000014],[-81.833068999999966,68.907211000000075],[-81.819457999999997,68.908600000000092],[-81.68638599999997,68.905258000000117],[-81.673049999999989,68.904433999999981],[-81.66194200000001,68.90277100000003],[-81.650283999999999,68.899155000000007],[-81.58805799999999,68.869705000000124],[-81.581954999999937,68.864990000000091],[-81.438323999999966,68.874984999999981],[-81.424712999999997,68.87553400000013],[-81.382767000000001,68.866652999999985],[-81.354171999999892,68.857483000000116],[-81.238051999999925,68.774704000000042],[-81.23443599999996,68.76998900000001],[-81.232772999999952,68.760268999999937],[-81.252227999999945,68.653046000000131],[-81.255843999999911,68.643051000000014],[-81.260558999999944,68.638046000000145],[-81.267501999999922,68.633041000000105],[-81.357773000000009,68.599152000000117],[-81.560271999999998,68.541656000000103],[-81.687209999999993,68.509430000000066],[-81.798889000000031,68.489700000000028],[-81.816390999999896,68.469711000000132],[-81.830291999999986,68.459717000000126],[-81.842498999999918,68.455551000000014],[-81.958053999999947,68.423309000000017],[-81.970839999999953,68.421097000000145],[-81.997771999999941,68.423035000000084],[-82.011947999999961,68.427765000000136],[-82.024444999999957,68.436919999999986],[-82.027785999999992,68.441650000000038],[-82.028884999999946,68.446640000000059],[-82.033324999999991,68.456099999999992],[-82.038054999999929,68.465820000000065],[-82.041671999999949,68.470535000000098],[-82.062209999999936,68.494430999999963],[-82.068618999999899,68.499145999999996],[-82.077498999999932,68.503601000000003],[-82.091675000000009,68.507217000000082],[-82.229445999999996,68.531662000000097],[-82.256393000000003,68.533600000000035],[-82.269454999999937,68.532486000000063],[-82.271117999999944,68.527481000000023],[-82.267226999999991,68.52276599999999],[-82.254729999999995,68.513321000000133],[-82.243056999999965,68.508881000000088],[-82.229171999999892,68.505264000000125],[-82.1875,68.495819000000097],[-82.175826999999913,68.491364000000033],[-82.17332499999992,68.485808999999961],[-82.175002999999947,68.481093999999928],[-82.179169000000002,68.476089000000059],[-82.183608999999933,68.471100000000092],[-82.190552000000025,68.466095000000053],[-82.202498999999989,68.460815000000025],[-82.215011999999888,68.457489000000123],[-82.228057999999976,68.455261000000007],[-82.25418099999996,68.454437000000041],[-82.382767000000001,68.466934000000037],[-82.393889999999999,68.468322999999998],[-82.448882999999967,68.478592000000049],[-82.476943999999946,68.485535000000027],[-82.500290000000007,68.494430999999963],[-82.532501000000025,68.508041000000048],[-82.545273000000009,68.517487000000017],[-82.549163999999905,68.522217000000069],[-82.557770000000005,68.526932000000102],[-82.571395999999993,68.526382000000069],[-82.583892999999875,68.524155000000007],[-82.608886999999925,68.517487000000017],[-82.62110899999999,68.512206999999933],[-82.634734999999978,68.502213000000097],[-82.638901000000033,68.497208000000057],[-82.635284000000013,68.492203000000018],[-82.491103999999893,68.453873000000101],[-82.490554999999915,68.402205999999921],[-82.363051999999982,68.35054000000008],[-82.356658999999922,68.345825000000048],[-82.353057999999976,68.341094999999996],[-82.351105000000018,68.331375000000094],[-82.352492999999924,68.326660000000061],[-82.356658999999922,68.321655000000021],[-82.369445999999925,68.318329000000006],[-82.381942999999922,68.316939999999988],[-82.39527899999996,68.316666000000055],[-82.422225999999966,68.318603999999993],[-82.448607999999979,68.320831000000055],[-82.475006000000008,68.321106000000043],[-82.500838999999985,68.317490000000021],[-82.507781999999963,68.313309000000118],[-82.50140399999998,68.308594000000085],[-82.483611999999937,68.299422999999933],[-82.426101999999958,68.276657000000114],[-82.400557999999933,68.26887499999998],[-82.386947999999961,68.266388000000063],[-82.37388599999997,68.265548999999965],[-82.36082499999992,68.266937000000041],[-82.311661000000015,68.283051],[-82.286941999999897,68.289703000000031],[-82.273330999999928,68.288879000000065],[-82.264724999999999,68.284424000000058],[-82.260009999999966,68.274993999999992],[-82.259170999999981,68.269989000000123],[-82.258620999999948,68.255554000000018],[-82.264449999999897,68.24552900000009],[-82.270279000000016,68.235535000000084],[-82.278610000000015,68.225540000000024],[-82.289443999999946,68.215545999999961],[-82.300551999999868,68.205551000000071],[-82.321121000000005,68.190262000000018],[-82.330291999999872,68.185256999999922],[-82.337218999999948,68.180267000000072],[-82.345550999999944,68.170258000000047],[-82.34722899999997,68.165268000000026],[-82.345839999999953,68.160537999999974],[-82.337218999999948,68.155823000000112],[-82.314437999999939,68.146652000000017],[-82.272506999999962,68.133331000000055],[-82.230835000000013,68.121918000000051],[-82.206115999999952,68.115814],[-82.192489999999964,68.112487999999985],[-82.179169000000002,68.111649],[-82.166397000000018,68.114151000000106],[-82.145781999999997,68.125488000000018],[-82.099166999999966,68.154984000000013],[-82.080565999999919,68.179703000000131],[-82.06361400000003,68.199707000000046],[-82.056945999999982,68.204712000000086],[-82.047500999999897,68.209716999999955],[-82.037505999999894,68.213881999999955],[-82.025009000000011,68.216095000000109],[-82.01167299999986,68.214705999999921],[-81.997771999999941,68.211105000000089],[-81.988892000000021,68.206650000000025],[-81.985549999999989,68.201660000000004],[-81.984726000000023,68.196929999999952],[-81.993057000000022,68.172485000000108],[-82.008895999999936,68.14776599999999],[-82.019164999999987,68.132751000000042],[-82.027221999999938,68.122756999999979],[-82.034164000000033,68.117751999999939],[-82.043610000000001,68.112762000000089],[-82.056106999999997,68.109421000000054],[-82.114502000000016,68.082870000000014],[-82.173889000000031,68.002486999999974],[-82.175551999999982,67.997482000000105],[-82.102782999999988,67.907211000000075],[-82.096663999999976,67.90248100000008],[-82.079452999999944,67.893326000000002],[-82.070557000000008,67.888596000000007],[-81.837783999999999,67.783875000000023],[-81.727218999999934,67.740814],[-81.707503999999972,67.731658999999922],[-81.690552000000025,67.722487999999998],[-81.678328999999906,67.713042999999914],[-81.666397000000018,67.703598000000056],[-81.65972899999997,67.694138000000009],[-81.653884999999946,67.689423000000147],[-81.636672999999917,67.679977000000008],[-81.592498999999975,67.661652000000061],[-81.538329999999974,67.643599999999992],[-81.498046999999985,67.631927000000132],[-81.457779000000016,67.620529000000147],[-81.433059999999955,67.611374000000069],[-81.416396999999904,67.601929000000041],[-81.248885999999914,67.479706000000078],[-81.243056999999908,67.474991000000045],[-81.239715999999873,67.470260999999994],[-81.237212999999997,67.455551000000014],[-81.237503000000004,67.441086000000098],[-81.239166000000012,67.436096000000077],[-81.245269999999948,67.426376000000005],[-81.256392999999946,67.416381999999942],[-81.293610000000001,67.396103000000039],[-81.300551999999982,67.391098],[-81.30471799999998,67.386108000000092],[-81.347778000000005,67.292755],[-81.366394000000014,67.238875999999948],[-81.373610999999983,67.204711999999972],[-81.376099000000011,67.189972000000012],[-81.375274999999988,67.185256999999979],[-81.380279999999914,67.170532000000037],[-81.413895000000025,67.091370000000097],[-81.432220000000029,67.066666000000112],[-81.496657999999911,67.004715000000147],[-81.50306699999993,66.999710000000107],[-81.512512000000015,66.99470500000001],[-81.524170000000026,66.99054000000001],[-81.536117999999988,66.988312000000064],[-81.699722000000008,66.970261000000107],[-81.711944999999957,66.969986000000063],[-81.750838999999928,66.978591999999992],[-81.763901000000033,66.983046999999999],[-81.772232000000031,66.987762000000032],[-81.783066000000019,66.992477000000065],[-81.796111999999937,66.996933000000013],[-81.809157999999968,66.998321999999973],[-81.833618000000001,66.997756999999979],[-81.929717999999923,66.978591999999992],[-81.952498999999932,66.968048000000124],[-81.988892000000021,66.949706999999933],[-82.026947000000007,66.926086000000055],[-82.179992999999968,66.768875000000094],[-82.183884000000035,66.764160000000061],[-82.369720000000029,66.725815000000125],[-82.481109999999944,66.669707999999957],[-82.556380999999988,66.623871000000122],[-82.562774999999874,66.618866000000082],[-82.566665999999941,66.613876000000005],[-82.571670999999981,66.60386699999998],[-82.577498999999989,66.584427000000005],[-82.576675000000023,66.579436999999984],[-82.579452999999944,66.569717000000082],[-82.585555999999997,66.564697000000024],[-82.596953999999982,66.560256999999979],[-82.694442999999978,66.558029000000033],[-82.78195199999999,66.566666000000055],[-82.86999499999996,66.567490000000021],[-83.018065999999976,66.539978000000076],[-83.012787000000003,66.515823000000069],[-83.015288999999996,66.50610400000005],[-83.019164999999873,66.501099000000011],[-83.025283999999999,66.495819000000097],[-83.049987999999928,66.475539999999967],[-83.058608999999933,66.470260999999994],[-83.357497999999964,66.353043000000071],[-83.368332000000009,66.348877000000016],[-83.402221999999938,66.347487999999998],[-83.450561999999991,66.346649000000014],[-83.515288999999882,66.353867000000037],[-83.567504999999983,66.367477000000122],[-83.652785999999935,66.40776100000005],[-83.654175000000009,66.412491000000102],[-83.639449999999954,66.437195000000088],[-83.630828999999949,66.442200000000128],[-83.618331999999896,66.44081100000011],[-83.607773000000009,66.436371000000122],[-83.597778000000005,66.426926000000037],[-83.601669000000015,66.412201000000096],[-83.597778000000005,66.407486000000063],[-83.545273000000009,66.381363000000079],[-83.53472899999997,66.378035999999952],[-83.579726999999934,66.431656000000089],[-83.672501000000011,66.520538000000101],[-83.68110699999994,66.524993999999992],[-83.70695499999988,66.530822999999998],[-83.732497999999964,66.534714000000065],[-83.795273000000009,66.541930999999977],[-83.82028200000002,66.542754999999943],[-83.832229999999981,66.542206000000022],[-83.857497999999964,66.544144000000131],[-83.968886999999881,66.577484000000027],[-83.977492999999981,66.582214000000079],[-83.985001000000011,66.591660000000047],[-84.011397999999986,66.663605000000018],[-84.014174999999966,66.673309000000017],[-84.015563999999983,66.687759000000142],[-84.014450000000011,66.692748999999992],[-84.006119000000012,66.698029000000076],[-83.994719999999973,66.70138500000013],[-83.982772999999952,66.70277400000009],[-83.945540999999992,66.702484000000084],[-83.891113000000018,66.804153000000099],[-83.886123999999995,66.813873000000001],[-83.883895999999936,66.82388300000008],[-83.884170999999924,66.833602999999982],[-83.890288999999996,66.85775799999999],[-83.901671999999905,66.871918000000107],[-83.907776000000013,66.876647999999989],[-83.916397000000018,66.881087999999977],[-83.928878999999995,66.86303700000002],[-83.938323999999909,66.823608000000092],[-83.945540999999992,66.813599000000067],[-84.104996000000028,66.708328000000108],[-84.116394000000014,66.704987000000074],[-84.140288999999996,66.701934999999935],[-84.152785999999992,66.702484000000084],[-84.165558000000033,66.703873000000101],[-84.260284000000013,66.716385000000059],[-84.27305599999994,66.718596999999932],[-84.286666999999909,66.723038000000031],[-84.295273000000009,66.727478000000076],[-84.43638599999997,66.818329000000119],[-84.427779999999927,66.961104999999975],[-84.415008999999998,66.960815000000139],[-84.390288999999882,66.961929000000112],[-84.378600999999946,66.964157000000057],[-84.367492999999968,66.968597000000102],[-84.370834000000002,66.97137500000008],[-84.436110999999926,66.981369000000086],[-84.488051999999925,66.988876000000005],[-84.618057000000022,67.006378000000041],[-84.694153000000028,67.009720000000016],[-84.733063000000016,67.014708999999982],[-84.837783999999999,67.029434000000094],[-84.850829999999974,67.03166200000004],[-84.87332200000003,67.039428999999984],[-84.881942999999978,67.043869000000029],[-84.886123999999938,67.048599000000081],[-84.892501999999922,67.053314000000114],[-84.901397999999858,67.057754999999986],[-84.915008999999998,67.060806000000014],[-84.926940999999943,67.059418000000107],[-84.936110999999926,67.056090999999981],[-84.880279999999971,66.989426000000037],[-84.871658000000025,66.984984999999938],[-84.857772999999952,66.981659000000093],[-84.84584000000001,66.982208000000071],[-84.833892999999932,66.984711000000004],[-84.811110999999926,66.991653000000099],[-84.789444000000003,67.002486999999974],[-84.778335999999911,67.006653000000085],[-84.765563999999983,67.006378000000041],[-84.699996999999939,66.99581900000004],[-84.645844000000011,66.981659000000093],[-84.639724999999885,66.978043000000071],[-84.651397999999972,66.97554000000008],[-84.712783999999942,66.972762999999986],[-84.885833999999932,66.966660000000047],[-84.960007000000019,66.964157000000057],[-85.010009999999966,66.964706000000035],[-85.048339999999996,66.963318000000072],[-85.059722999999963,66.959717000000069],[-85.142775999999969,66.930267000000129],[-85.228333000000021,66.878311000000053],[-85.228881999999999,66.873306000000014],[-85.222777999999948,66.868866000000025],[-85.196105999999986,66.855255000000056],[-85.184433000000013,66.851089000000115],[-85.146118000000001,66.839431999999988],[-85.133057000000008,66.836929000000055],[-85.11999499999996,66.835541000000148],[-84.948607999999979,66.858597000000145],[-84.94027699999998,66.863876000000118],[-84.904556000000014,66.897202000000107],[-84.901053999999988,66.900375000000111],[-84.904892000000018,66.903037999999981],[-84.912888000000009,66.905044999999973],[-84.920546999999999,66.905373000000111],[-84.935225999999886,66.904540999999995],[-84.943061999999941,66.905373000000111],[-84.951050000000009,66.907378999999992],[-84.95788600000003,66.909874000000002],[-84.961730999999986,66.912704000000019],[-84.956389999999942,66.915367000000117],[-84.86233500000003,66.939835000000073],[-84.855164000000002,66.940666000000078],[-84.767775999999969,66.952209000000039],[-84.755279999999971,66.951660000000061],[-84.602218999999991,66.935806000000127],[-84.562209999999993,66.901382000000126],[-84.573897999999986,66.89888000000002],[-84.61082499999992,66.89387499999998],[-84.62332200000003,66.893326000000059],[-84.650283999999999,66.900817999999958],[-84.675827000000027,66.902771000000087],[-84.688323999999909,66.903046000000131],[-84.746384000000035,66.897491000000059],[-84.706389999999999,66.888596000000007],[-84.58555599999994,66.858871000000079],[-84.558334000000002,66.850540000000024],[-84.523330999999985,66.836929000000055],[-84.505843999999968,66.827773999999977],[-84.504729999999995,66.823043999999982],[-84.516113000000018,66.820540999999992],[-84.541381999999999,66.821381000000031],[-84.580565999999976,66.828323000000125],[-84.634170999999981,66.84165999999999],[-84.660278000000005,66.846375000000023],[-84.672501000000011,66.845824999999991],[-84.684432999999956,66.844147000000021],[-84.690551999999968,66.839980999999966],[-84.684432999999956,66.835266000000104],[-84.675551999999925,66.830826000000116],[-84.664444000000003,66.82748400000014],[-84.651107999999965,66.824158000000125],[-84.466949,66.787766000000147],[-84.434433000000013,66.725540000000137],[-84.445266999999888,66.720260999999937],[-84.448607999999922,66.715271000000087],[-84.442489999999964,66.710814999999968],[-84.429442999999935,66.708328000000108],[-84.404174999999952,66.705551000000014],[-84.343063000000029,66.699416999999983],[-84.203887999999949,66.691360000000032],[-84.153060999999923,66.685806000000014],[-84.144454999999994,66.681366000000025],[-84.136672999999973,66.662201000000039],[-84.138061999999877,66.657210999999961],[-84.142501999999979,66.647216999999955],[-84.146117999999944,66.642212000000086],[-84.180556999999965,66.606644000000074],[-84.186385999999914,66.601379000000009],[-84.128325999999959,66.554703000000018],[-83.967223999999931,66.473877000000073],[-83.916397000000018,66.446640000000116],[-83.89805599999994,66.432755000000043],[-83.888061999999991,66.423599000000081],[-83.871108999999933,66.394989000000066],[-83.867492999999968,66.380539000000113],[-83.804717999999923,66.307205000000124],[-83.773620999999991,66.289703000000088],[-83.774719000000005,66.275269000000037],[-83.772231999999974,66.265548999999965],[-83.768615999999952,66.260818000000029],[-83.762787000000003,66.256104000000107],[-83.728881999999999,66.23803700000002],[-83.71833799999996,66.233597000000032],[-83.684722999999906,66.215546000000018],[-83.68110699999994,66.210815000000082],[-83.67860399999995,66.201096000000121],[-83.684432999999956,66.196091000000024],[-83.693053999999961,66.190810999999997],[-83.767898999999943,66.168639999999982],[-83.789718999999934,66.163315000000125],[-83.835830999999928,66.154709000000025],[-83.847777999999948,66.153320000000008],[-83.855559999999912,66.155822999999998],[-83.977782999999988,66.199417000000096],[-84.118057000000022,66.25471500000009],[-84.135283999999956,66.26388500000013],[-84.141112999999962,66.268326000000059],[-84.148620999999991,66.277771000000143],[-84.149993999999992,66.282760999999994],[-84.150283999999942,66.292480000000012],[-84.148894999999925,66.297485000000052],[-84.152495999999985,66.302200000000084],[-84.158614999999998,66.306641000000013],[-84.167220999999927,66.31109600000002],[-84.178329000000019,66.315536000000009],[-84.190826000000015,66.318054000000018],[-84.216400000000021,66.321655000000078],[-84.228332999999964,66.3211060000001],[-84.317229999999995,66.299712999999997],[-84.426940999999886,66.363037000000077],[-84.441939999999931,66.372208000000057],[-84.506393000000003,66.402205999999978],[-84.516952999999944,66.404709000000139],[-84.528885000000002,66.40415999999999],[-84.550551999999868,66.394440000000088],[-84.558884000000035,66.389160000000061],[-84.619155999999919,66.349715999999944],[-84.626937999999882,66.343597000000102],[-84.635559000000001,66.334991000000002],[-84.636123999999995,66.328873000000044],[-84.625,66.319152999999972],[-84.527221999999995,66.278595000000109],[-84.424438000000009,66.224701000000096],[-84.407500999999968,66.215546000000018],[-84.401397999999972,66.211105000000089],[-84.389998999999932,66.196930000000009],[-84.386397999999986,66.192199999999957],[-84.37777699999998,66.178040000000067],[-84.372498000000007,66.168319999999994],[-84.374709999999993,66.158600000000092],[-84.448607999999922,66.158600000000092],[-84.46055599999994,66.159149000000014],[-84.473327999999981,66.161377000000016],[-84.483886999999925,66.164703000000031],[-84.509445000000028,66.178314],[-84.641112999999962,66.216094999999996],[-84.869155999999975,66.266662999999937],[-84.881942999999978,66.268051000000071],[-84.90583799999996,66.266937000000098],[-84.927489999999977,66.258881000000031],[-84.943877999999984,66.248322000000144],[-84.954726999999934,66.243866000000025],[-84.96665999999999,66.244431000000077],[-84.979720999999984,66.24664300000012],[-85.00167799999997,66.255264000000068],[-85.131942999999922,66.291931000000034],[-85.178329000000019,66.262207000000046],[-85.190276999999867,66.260544000000095],[-85.202498999999932,66.260818000000029],[-85.214721999999995,66.262207000000046],[-85.227782999999988,66.264434999999992],[-85.252227999999945,66.273041000000092],[-85.269729999999981,66.281937000000028],[-85.301392000000021,66.304703000000075],[-85.306655999999919,66.314148000000102],[-85.339721999999938,66.399154999999951],[-85.345550999999887,66.447754000000089],[-85.346114999999998,66.45748900000001],[-85.341675000000009,66.482208000000128],[-85.343338000000017,66.48692299999999],[-85.351394999999968,66.496093999999971],[-85.457503999999915,66.573883000000137],[-85.466400000000021,66.578323000000012],[-85.479720999999984,66.581375000000094],[-85.491942999999878,66.581940000000145],[-85.55221599999993,66.577774000000034],[-85.575561999999991,66.574707000000103],[-85.598617999999931,66.569442999999978],[-85.710555999999997,66.536101999999971],[-85.845276000000013,66.499419999999986],[-85.857773000000009,66.499709999999993],[-85.868880999999931,66.504166000000112],[-85.875548999999978,66.5086060000001],[-85.888901000000033,66.511932000000002],[-85.995543999999995,66.508041000000105],[-86.007507000000032,66.507216999999969],[-86.078888000000006,66.49693300000007],[-86.103333000000021,66.496643000000063],[-86.128326000000015,66.49803200000008],[-86.141113000000018,66.499419999999986],[-86.256667999999934,66.513321000000133],[-86.283324999999934,66.518599999999935],[-86.578888000000006,66.530272999999966],[-86.580001999999979,66.520538000000101],[-86.587783999999942,66.51527400000009],[-86.599730999999963,66.511108000000036],[-86.611389000000031,66.508331000000112],[-86.622771999999998,66.506652999999972],[-86.635009999999966,66.50610400000005],[-86.65972899999997,66.506377999999984],[-86.672500999999954,66.507767000000001],[-86.685546999999985,66.509720000000073],[-86.698883000000023,66.513046000000145],[-86.726944000000003,66.521103000000096],[-86.738051999999982,66.525269000000037],[-86.75167799999997,66.528320000000008],[-86.764174999999966,66.528595000000053],[-86.775283999999942,66.526093000000003],[-86.780838000000017,66.520828000000108],[-86.781386999999995,66.515823000000069],[-86.777221999999995,66.511108000000036],[-86.743880999999931,66.488586000000112],[-86.701110999999969,66.466659999999933],[-86.662780999999939,66.449417000000039],[-86.639998999999932,66.441085999999927],[-86.633621000000005,66.436371000000122],[-86.641677999999956,66.431931000000077],[-86.678604000000007,66.432755000000043],[-86.730559999999969,66.436920000000043],[-86.756957999999941,66.441360000000088],[-86.783614999999941,66.447479000000101],[-86.796386999999925,66.448593000000074],[-86.807495000000017,66.446091000000024],[-86.811110999999983,66.441925000000083],[-86.809158000000025,66.437195000000088],[-86.804992999999968,66.432480000000055],[-86.651671999999962,66.324158000000011],[-86.638335999999924,66.315262000000075],[-86.612777999999992,66.311646000000053],[-86.49722300000002,66.29942299999999],[-86.396117999999944,66.289703000000088],[-86.30610699999994,66.276382000000126],[-86.142226999999991,66.239699999999971],[-86.076110999999912,66.22387700000013],[-85.927489999999977,66.186370999999951],[-85.913895000000025,66.182205000000067],[-85.901108000000022,66.173035000000027],[-85.897232000000031,66.168319999999994],[-85.977492999999924,66.077773999999977],[-85.975829999999917,66.073044000000095],[-85.973891999999978,66.038879000000009],[-85.974716000000001,66.033875000000023],[-85.979995999999915,66.028594999999996],[-85.990554999999972,66.024155000000121],[-86.077224999999999,65.99581900000004],[-86.121384000000035,65.984421000000054],[-86.217498999999975,65.957489000000123],[-86.22084000000001,65.952209000000039],[-86.231383999999935,65.941925000000026],[-86.239166000000012,65.936646000000053],[-86.249435000000005,65.93193100000002],[-86.326400999999976,65.90498400000007],[-86.348617999999874,65.899719000000005],[-86.360275000000001,65.899155000000064],[-86.420272999999952,65.892487000000074],[-86.472228999999857,65.839980999999966],[-86.496947999999975,65.808029000000033],[-86.49499499999996,65.803314],[-86.486389000000031,65.799149],[-86.464171999999962,65.790543000000071],[-86.455276000000026,65.786102000000142],[-86.453888000000006,65.78137200000009],[-86.451110999999855,65.747208000000057],[-86.454177999999956,65.742203000000018],[-86.530288999999868,65.695525999999916],[-86.716109999999958,65.617477000000065],[-86.819457999999997,65.560532000000023],[-86.829726999999991,65.55581699999999],[-86.84056099999998,65.553314000000057],[-86.852782999999931,65.55442800000003],[-86.865828999999962,65.557480000000112],[-86.878052000000025,65.557754999999929],[-86.888610999999969,65.555251999999996],[-86.953888000000006,65.53915400000011],[-86.972777999999948,65.520263999999997],[-87.017226999999991,65.486923000000047],[-87.024445000000014,65.481659000000036],[-87.035278000000005,65.479156000000046],[-87.05471799999998,65.486649000000114],[-87.067504999999983,65.488875999999948],[-87.077788999999996,65.484985000000052],[-87.087783999999999,65.479431000000091],[-87.095001000000025,65.474152000000117],[-87.110275000000001,65.458602999999982],[-87.118606999999997,65.4433140000001],[-87.119155999999975,65.438309000000061],[-87.11500499999994,65.433594000000028],[-87.101944000000003,65.429703000000131],[-87.111664000000019,65.390274000000034],[-87.351105000000018,65.327209000000096],[-87.361938000000009,65.324432000000002],[-87.372771999999941,65.322769000000051],[-87.395843999999897,65.321380999999974],[-87.430831999999953,65.320831000000112],[-87.833327999999938,65.323883000000023],[-87.869155999999975,65.325272000000041],[-87.893065999999976,65.326660000000118],[-87.941939999999875,65.330826000000059],[-87.96665999999999,65.333054000000004],[-88.004456000000005,65.339157000000114],[-88.030288999999925,65.345260999999994],[-88.070281999999963,65.356093999999928],[-88.09445199999999,65.363312000000121],[-88.212783999999886,65.40277100000003],[-88.221389999999985,65.407211000000075],[-88.234726000000023,65.416091999999992],[-88.243331999999953,65.425262000000032],[-88.245270000000005,65.429977000000065],[-88.25389100000001,65.439148000000046],[-88.31361400000003,65.479156000000046],[-88.333617999999944,65.492477000000008],[-88.548614999999984,65.582764000000111],[-88.55972300000002,65.586929000000112],[-88.573058999999944,65.589706000000035],[-88.58555599999994,65.590820000000008],[-88.633330999999998,65.591094999999996],[-88.645554000000004,65.592208999999968],[-88.658889999999928,65.594986000000063],[-88.68582200000003,65.601929000000098],[-88.829726999999878,65.641372999999987],[-88.828888000000006,65.644150000000081],[-88.756667999999991,65.642761000000064],[-88.62249799999995,65.637207000000103],[-88.49888599999997,65.626923000000033],[-88.513335999999981,65.644440000000088],[-88.779723999999987,65.676085999999941],[-88.949721999999895,65.68664600000011],[-88.962783999999999,65.688583000000108],[-89.000838999999985,65.698593000000017],[-89.09944200000001,65.725266000000033],[-89.124435000000005,65.733322000000101],[-89.133895999999936,65.737487999999985],[-89.140563999999927,65.74192800000003],[-89.14527899999996,65.746368000000018],[-89.147507000000019,65.751388999999961],[-89.147231999999974,65.761107999999979],[-89.149444999999957,65.765823000000012],[-89.156386999999938,65.770264000000111],[-89.174438000000009,65.778594999999996],[-89.379990000000021,65.846375000000023],[-89.525283999999999,65.886932000000002],[-89.597228999999857,65.910812000000021],[-89.664718999999934,65.934982000000048],[-89.671660999999915,65.939423000000147],[-89.70944199999991,65.942200000000014],[-89.967223999999987,65.948593000000017],[-89.991104000000007,65.947478999999987],[-90,65.944359000000134],[-89.964171999999962,65.936919999999986],[-89.939163000000008,65.93609600000002],[-89.926391999999908,65.934143000000063],[-89.89916999999997,65.928589000000045],[-89.87110899999999,65.921097000000145],[-89.834166999999979,65.910263000000043],[-89.799438000000009,65.898331000000098],[-89.740829000000019,65.873306000000071],[-89.731673999999998,65.86914100000007],[-89.726943999999946,65.839980999999966],[-89.729172000000005,65.834717000000012],[-89.736389000000031,65.829162999999994],[-89.746947999999975,65.826385000000016],[-89.76916499999993,65.822495000000004],[-89.793334999999956,65.822495000000004],[-89.818892999999889,65.825546000000031],[-89.832229999999925,65.828323000000125],[-89.843886999999938,65.832214000000022],[-89.89056399999987,65.853043000000014],[-89.902221999999995,65.857208000000014],[-90.048614999999984,65.888321000000019],[-90.073623999999938,65.890273999999977],[-90.085555999999997,65.889159999999947],[-90.119995000000017,65.883880999999974],[-90.162780999999995,65.872207999999944],[-90.207229999999925,65.864426000000037],[-90.241942999999992,65.861374000000069],[-90.265838999999971,65.860535000000141],[-90.315001999999993,65.862198000000035],[-90.404448999999943,65.871093999999971],[-90.418335000000013,65.87414600000011],[-90.427489999999977,65.878036000000066],[-90.432495000000017,65.882751000000098],[-90.425551999999925,65.888321000000019],[-90.393065999999919,65.896102999999982],[-90.357773000000009,65.898041000000092],[-90.333327999999995,65.897217000000126],[-90.272781000000009,65.897491000000059],[-90.225554999999929,65.900542999999971],[-90.215560999999923,65.904434000000037],[-90.213333000000034,65.909424000000115],[-90.213333000000034,65.914428999999984],[-90.220551,65.918868999999972],[-90.234725999999966,65.922485000000052],[-90.258895999999993,65.922485000000052],[-90.293335000000013,65.918593999999985],[-90.360275000000001,65.907760999999994],[-90.418883999999878,65.901093000000003],[-90.574172999999973,65.896652000000074],[-90.596114999999941,65.896652000000074],[-90.708618000000001,65.902480999999909],[-90.733886999999925,65.904160000000104],[-90.850280999999995,65.915267999999912],[-91.068344000000025,65.940262000000075],[-91.316390999999953,65.969986000000119],[-91.328613000000018,65.969986000000119],[-91.340285999999935,65.96887200000009],[-91.429168999999945,65.95109599999995],[-91.444442999999865,65.930817000000047],[-91.362777999999935,65.893599999999992],[-91.353332999999964,65.889434999999992],[-91.341385000000002,65.885818000000029],[-91.328063999999983,65.883880999999974],[-91.189437999999939,65.853043000000014],[-91.06082200000003,65.813309000000061],[-91.046660999999915,65.809417999999994],[-91.020553999999947,65.806091000000094],[-91.008621000000005,65.806091000000094],[-91.004180999999903,65.811371000000122],[-91.013900999999976,65.820540999999992],[-91.05471799999998,65.846649000000127],[-91.108337000000006,65.891373000000101],[-91.123046999999929,65.904709000000082],[-91.125823999999852,65.909714000000122],[-91.121384000000035,65.914993000000095],[-91.099730999999963,65.919982999999945],[-91.088057999999933,65.921097000000145],[-91.063889000000017,65.921097000000145],[-90.990279999999984,65.919982999999945],[-90.976943999999946,65.918045000000006],[-90.948607999999979,65.910812000000021],[-90.921386999999925,65.905258000000003],[-90.90834000000001,65.903595000000109],[-90.741942999999992,65.887772000000041],[-90.692489999999964,65.886108000000036],[-90.531676999999945,65.880539000000056],[-90.078063999999983,65.812485000000095],[-90.013900999999919,65.800262000000032],[-90,65.797400999999923],[-89.986938000000009,65.794708000000071],[-89.960006999999962,65.788879000000065],[-89.932220000000029,65.78137200000009],[-89.744995000000017,65.724700999999982],[-89.720275999999956,65.713042999999971],[-89.660278000000005,65.683318999999983],[-89.653335999999911,65.678863999999976],[-89.428328999999962,65.529434000000037],[-89.308883999999978,65.469437000000084],[-89.146118000000001,65.400543000000084],[-89.065551999999911,65.333054000000004],[-89.054442999999992,65.328873000000101],[-89.044448999999986,65.32777400000009],[-88.771118000000001,65.307754999999986],[-88.733886999999982,65.306090999999981],[-88.710281000000009,65.306090999999981],[-88.698607999999979,65.30693100000002],[-88.676940999999999,65.31053200000008],[-88.606948999999929,65.30693100000002],[-88.490279999999984,65.293320000000051],[-88.389174999999909,65.277205999999921],[-88.364715999999873,65.274994000000049],[-88.215012000000002,65.277205999999921],[-88.133330999999941,65.278320000000122],[-88.109725999999966,65.278046000000018],[-88.096664000000033,65.274994000000049],[-88.061660999999958,65.258881000000031],[-88.021117999999888,65.274704000000042],[-88.011123999999938,65.278320000000122],[-87.978058000000033,65.283599999999979],[-87.943603999999993,65.286102000000085],[-87.731383999999991,65.290267999999969],[-87.673049999999989,65.291366999999923],[-87.602218999999934,65.290542999999957],[-87.357773000000009,65.270827999999995],[-87.21055599999994,65.254165999999998],[-87.075012000000015,65.236648999999943],[-86.957779000000016,65.165817000000004],[-86.944992000000013,65.156936999999971],[-86.936935000000005,65.147766000000047],[-86.933318999999983,65.138046000000145],[-86.967498999999975,65.059417999999994],[-86.970275999999899,65.054428000000087],[-86.977492999999981,65.048874000000126],[-86.997771999999941,65.040816999999947],[-87.040557999999976,65.031097000000045],[-87.110001000000011,64.999145999999996],[-87.430283000000031,64.711928999999998],[-87.521666999999923,64.621094000000085],[-87.571944999999971,64.573607999999979],[-87.579178000000013,64.568054000000018],[-87.586120999999991,64.562759000000142],[-87.595550999999944,64.557205000000124],[-87.698043999999925,64.527206000000092],[-87.764419999999973,64.520904999999914],[-87.786391999999921,64.51998900000001],[-87.797225999999966,64.518051000000071],[-87.807219999999973,64.514434999999992],[-87.855270000000019,64.43942300000009],[-87.855835000000013,64.429428000000144],[-87.863616999999977,64.379700000000014],[-87.8663939999999,64.369705000000124],[-87.983886999999925,64.191086000000041],[-87.990829000000019,64.185805999999957],[-88.113327000000027,64.136108000000036],[-88.12332200000003,64.133605999999986],[-88.285552999999936,64.106369000000029],[-88.551666000000012,64.025543000000084],[-88.553878999999995,64.020538000000045],[-88.674437999999952,63.980269999999962],[-88.684432999999956,63.977486000000056],[-88.736663999999962,63.968323000000055],[-88.759444999999971,63.969437000000028],[-88.993880999999931,63.998604000000114],[-89.077788999999882,64.026093000000117],[-89.110000999999954,64.03804000000008],[-89.127212999999983,64.04664600000001],[-89.150833000000034,64.059417999999994],[-89.182770000000005,64.081375000000037],[-89.198043999999982,64.094711000000018],[-89.202224999999999,64.099426000000051],[-89.208617999999944,64.108871000000079],[-89.210555999999997,64.118317000000047],[-89.210555999999997,64.123306000000014],[-89.212783999999942,64.128036000000066],[-89.22084000000001,64.137207000000046],[-89.244720000000029,64.15498400000007],[-89.251113999999973,64.159424000000115],[-89.260833999999875,64.160538000000088],[-89.284164000000033,64.141937000000041],[-89.286391999999978,64.136658000000068],[-89.182495000000017,64.036652000000004],[-89.096664000000033,63.973877000000016],[-89.061661000000015,63.960823000000119],[-89.051101999999958,63.961936999999921],[-89.040833000000021,63.958602999999925],[-89.023620999999991,63.950272000000041],[-89.028609999999958,63.946098000000006],[-89.039443999999946,63.944991999999957],[-89.050551999999925,63.944991999999957],[-89.246657999999968,63.959717000000126],[-89.254729999999938,63.963051000000121],[-89.321395999999936,63.996658000000025],[-89.396117999999944,64.038589000000002],[-89.507232999999928,64.070540999999992],[-89.551101999999958,64.07748399999997],[-89.55860899999999,64.073883000000137],[-89.56082200000003,64.068878000000041],[-89.56527699999998,64.019149999999968],[-89.563323999999852,64.009430000000066],[-89.554442999999992,64.000274999999988],[-89.548049999999932,63.996101000000124],[-89.530838000000017,63.987770000000069],[-89.517775999999913,63.978874000000133],[-89.489990000000034,63.956657000000064],[-89.485549999999989,63.951934999999992],[-89.483321999999873,63.947211999999979],[-89.485549999999989,63.94221500000009],[-89.49722300000002,63.943046999999979],[-89.521117999999944,63.955826000000059],[-89.527495999999985,63.960274000000027],[-89.577224999999999,63.995544000000052],[-89.585555999999997,64.004439999999988],[-89.589995999999928,64.014160000000061],[-89.594161999999926,64.018600000000106],[-89.637787000000003,64.049423000000104],[-89.644164999999987,64.053864000000033],[-89.699722000000008,64.076385000000016],[-89.712219000000005,64.079437000000098],[-89.719161999999983,64.074707000000103],[-89.726943999999946,64.047484999999938],[-89.785552999999993,64.076935000000049],[-89.818068999999923,64.098602000000085],[-89.822509999999909,64.103317000000118],[-89.822783999999956,64.10803199999998],[-89.820557000000008,64.113312000000008],[-89.80972300000002,64.128860000000032],[-89.802215999999987,64.132476999999994],[-89.780563000000029,64.134430000000123],[-89.757507000000032,64.133605999999986],[-89.746947999999975,64.135544000000095],[-89.738051999999925,64.14027399999992],[-89.735824999999977,64.145263999999997],[-89.75111400000003,64.218048000000124],[-89.75556899999998,64.227478000000019],[-89.760009999999966,64.232208000000071],[-89.773055999999997,64.240814],[-89.784163999999919,64.244705000000067],[-89.794158999999922,64.241928000000144],[-89.801102000000014,64.237487999999928],[-89.805557000000022,64.227203000000031],[-89.803328999999962,64.222487999999998],[-89.803054999999972,64.20277400000009],[-89.81639100000001,64.148041000000092],[-89.823623999999995,64.144440000000031],[-89.845550999999944,64.142761000000007],[-89.879439999999988,64.142487000000074],[-89.892226999999991,64.145538000000101],[-89.909728999999913,64.158599999999922],[-89.922501000000011,64.161377000000016],[-89.967498999999918,64.161377000000016],[-89.986938000000009,64.159714000000122],[-90.124161000000015,64.128586000000098],[-90.118057000000022,64.125259000000142],[-90.104995999999971,64.121368000000075],[-90.05860899999999,64.109710999999947],[-89.950561999999991,64.086929000000055],[-89.946105999999986,64.057480000000055],[-89.904175000000009,64.015823000000012],[-89.866942999999992,63.98971599999993],[-89.841674999999896,63.983879000000002],[-89.831116000000009,63.979988000000105],[-89.824447999999961,63.97554800000006],[-89.820281999999963,63.971099999999922],[-89.813613999999973,63.946938000000046],[-89.813613999999973,63.93721000000005],[-89.815552000000025,63.931938000000116],[-89.821944999999971,63.926384000000098],[-89.828612999999962,63.921104000000014],[-89.838057999999933,63.917212999999947],[-89.938888999999961,63.909713999999951],[-89.951400999999976,63.912491000000045],[-89.989440999999999,63.92193600000013],[-89.998336999999992,63.926102000000014],[-89.995270000000005,63.929161000000022],[-89.974715999999944,63.933052000000089],[-89.964721999999995,63.935822000000087],[-89.955276000000026,63.939712999999983],[-89.948607999999979,63.945267000000001],[-89.946655000000021,63.950546000000145],[-89.946655000000021,63.960274000000027],[-89.946655000000021,63.965271000000087],[-89.94888299999991,63.969986000000119],[-89.955565999999976,63.9741590000001],[-89.968613000000005,63.978043000000127],[-90,63.984043000000042],[-90.18249499999996,64.0086060000001],[-90.194153000000028,64.009430000000066],[-90.249435000000005,64.007492000000127],[-90.271392999999989,64.006377999999927],[-90.279175000000009,64.00360100000006],[-90.275009000000011,63.999161000000015],[-90.262786999999889,63.997214999999926],[-90.227492999999981,63.994438000000059],[-90.214721999999881,63.990829000000019],[-90.196944999999914,63.982491000000095],[-90.113892000000021,63.930824000000086],[-89.975005999999951,63.825829000000056],[-89.966400000000021,63.816939999999988],[-89.964171999999962,63.811935000000119],[-89.964171999999962,63.80221599999993],[-89.966110000000015,63.79222100000004],[-89.96833799999996,63.782211000000132],[-89.972503999999958,63.776657000000114],[-89.981673999999998,63.773048000000131],[-90.057770000000005,63.744438000000059],[-90.089995999999928,63.698874999999987],[-90.148894999999982,63.629158000000075],[-90.156386999999938,63.626656000000025],[-90.205275999999913,63.61221299999994],[-90.236388999999917,63.607216000000051],[-90.258620999999891,63.607216000000051],[-90.429442999999992,63.615829000000019],[-90.461394999999982,63.640549000000078],[-90.468613000000005,63.652309000000002],[-90.488051999999982,63.672493000000088],[-90.501113999999973,63.676383999999985],[-90.611937999999952,63.70249200000012],[-90.623885999999914,63.704162999999994],[-90.634445000000028,63.703049000000021],[-90.64416499999993,63.700272000000098],[-90.701400999999976,63.662209000000075],[-90.699157999999954,63.657494000000042],[-90.686660999999958,63.654709000000139],[-90.677779999999927,63.654433999999981],[-90.655563000000029,63.654709000000139],[-90.623610999999983,63.657767999999976],[-90.613891999999908,63.660545000000013],[-90.60972599999991,63.665825000000098],[-90.610001000000011,63.675827000000083],[-90.602782999999988,63.679436000000067],[-90.590285999999992,63.676658999999972],[-90.55972300000002,63.659714000000008],[-90.555556999999965,63.65526600000004],[-90.553329000000019,63.650543000000084],[-90.541381999999942,63.617210000000057],[-90.541381999999942,63.61221299999994],[-90.545273000000009,63.606941000000006],[-90.551391999999964,63.601387000000045],[-90.56082200000003,63.597487999999998],[-90.571120999999948,63.595543000000021],[-90.733886999999925,63.573883000000023],[-90.828063999999983,63.561661000000072],[-90.84944200000001,63.559714999999983],[-90.930556999999965,63.564156000000082],[-90.942763999999954,63.566666000000112],[-90.978881999999999,63.576103000000046],[-90.989440999999943,63.579994000000113],[-91.035003999999958,63.5991590000001],[-91.137786999999889,63.630821000000026],[-91.158051,63.635551000000078],[-91.188599000000011,63.62943300000012],[-91.198883000000023,63.628601000000003],[-91.210281000000009,63.628326000000015],[-91.233321999999987,63.629990000000021],[-91.375823999999966,63.659157000000107],[-91.399733999999967,63.666664000000083],[-91.406386999999938,63.671104000000071],[-91.406661999999983,63.676102000000071],[-91.402785999999992,63.681381000000044],[-91.393616000000009,63.685265000000072],[-91.371384000000035,63.685546999999985],[-91.34973100000002,63.677772999999945],[-91.336945000000014,63.675270000000012],[-91.329453000000001,63.677772999999945],[-91.333892999999989,63.682495000000017],[-91.34056099999998,63.686652999999978],[-91.34944200000001,63.690826000000129],[-91.362503000000004,63.694435000000112],[-91.411666999999909,63.707214000000022],[-91.529174999999952,63.729987999999992],[-91.540558000000033,63.730820000000051],[-91.551392000000021,63.729713000000118],[-91.560821999999916,63.726653999999996],[-91.569457999999997,63.721930999999984],[-91.575561999999934,63.716385000000116],[-91.584166999999979,63.711380000000077],[-91.595550999999887,63.711380000000077],[-91.910552999999936,63.740546999999992],[-92.06639100000001,63.74193600000001],[-92.136123999999938,63.745544000000109],[-92.148620999999991,63.748047000000099],[-92.175003000000004,63.755271999999991],[-92.186110999999983,63.758888000000013],[-92.434433000000013,63.804993000000024],[-92.482772999999952,63.811935000000119],[-92.471664000000033,63.80832700000002],[-92.437774999999931,63.79222100000004],[-92.428328999999962,63.783051],[-92.425551999999982,63.778603000000032],[-92.422500999999954,63.748878000000104],[-92.415832999999964,63.744713000000104],[-92.406661999999926,63.740546999999992],[-92.395553999999947,63.736938000000009],[-92.382766999999944,63.734161000000086],[-92.348891999999921,63.733879000000059],[-92.306380999999931,63.738602000000014],[-92.263061999999934,63.741379000000109],[-92.251113999999973,63.740546999999992],[-92.148055999999997,63.716934000000094],[-92.103881999999942,63.701660000000004],[-92.101669000000015,63.696938000000102],[-92.105559999999969,63.691658000000018],[-92.204177999999956,63.638046000000088],[-92.252501999999993,63.623878000000047],[-92.262512000000015,63.62193300000007],[-92.385009999999909,63.592491000000109],[-92.48971599999993,63.567215000000033],[-92.493056999999965,63.540832999999964],[-92.480835000000013,63.527214000000072],[-92.429168999999945,63.546944000000053],[-92.336394999999868,63.556938000000059],[-92.279998999999975,63.556099000000131],[-92.20666499999993,63.606102000000078],[-92.202788999999882,63.611381999999935],[-92.193877999999927,63.615273000000002],[-92.165282999999988,63.624435000000119],[-91.971114999999998,63.679993000000138],[-91.830291999999929,63.712212000000022],[-91.820006999999976,63.714157],[-91.809432999999956,63.715271000000143],[-91.776107999999965,63.715828000000045],[-91.763335999999981,63.713325999999995],[-91.695266999999944,63.690544000000045],[-91.670837000000006,63.678047000000049],[-91.617492999999911,63.648880000000133],[-91.613051999999925,63.644440000000145],[-91.611388999999974,63.639160000000061],[-91.61250299999989,63.629158000000075],[-91.618056999999965,63.613608999999997],[-91.617217999999923,63.603882000000056],[-91.607498000000021,63.584991000000002],[-91.600829999999974,63.580551000000014],[-91.39805599999994,63.524994000000049],[-91.274170000000026,63.502495000000124],[-91.133056999999951,63.478043000000014],[-90.945540999999935,63.440269000000114],[-90.854720999999984,63.408600000000092],[-90.915557999999919,63.41054500000007],[-90.932770000000005,63.418602000000078],[-90.945540999999935,63.422493000000145],[-90.956954999999937,63.423325000000034],[-90.96833799999996,63.423050000000046],[-90.975006000000008,63.419441000000006],[-90.972777999999948,63.414711000000011],[-90.957503999999972,63.401382000000069],[-90.942214999999976,63.393051000000014],[-90.931380999999931,63.389160000000118],[-90.918883999999935,63.386383000000023],[-90.816665999999998,63.369156000000032],[-90.741942999999992,63.360825000000091],[-90.690825999999959,63.228324999999984],[-90.627486999999974,63.059433000000013],[-90.649169999999913,63.036385000000109],[-90.739990000000034,62.962212000000136],[-90.775832999999977,62.941933000000006],[-90.785004000000015,62.938041999999939],[-90.794998000000021,62.936104],[-90.825835999999924,62.933052000000089],[-90.847778000000005,62.932770000000005],[-90.870270000000005,62.934433000000126],[-90.929442999999992,62.944435000000112],[-90.940551999999968,62.945267000000001],[-91.017226999999934,62.946380999999974],[-91.038329999999917,62.944153000000028],[-91.048049999999989,62.94221500000009],[-91.173049999999989,62.908600000000035],[-91.18249499999996,62.905823000000112],[-91.190825999999959,62.900825999999995],[-91.196654999999964,62.895271000000093],[-91.200561999999934,62.88999200000012],[-91.199721999999895,62.870270000000062],[-91.207229999999981,62.8597180000001],[-91.213333000000034,62.854164000000083],[-91.356383999999991,62.788605000000018],[-91.366652999999928,62.787498000000085],[-91.440276999999867,62.782768000000033],[-91.46166999999997,62.782494000000099],[-91.579178000000013,62.799995000000081],[-91.840285999999935,62.826385000000073],[-91.990279999999984,62.84693900000002],[-92.087508999999898,62.818886000000077],[-92.214721999999995,62.824715000000083],[-92.223052999999993,62.828880000000083],[-92.236114999999927,62.832214000000079],[-92.339995999999985,62.843605000000025],[-92.361937999999952,62.844154000000003],[-92.382766999999944,62.841660000000047],[-92.392501999999922,62.839713999999958],[-92.402221999999995,62.837493999999992],[-92.420836999999949,62.831383000000073],[-92.438323999999966,62.823607999999979],[-92.455275999999969,62.814712999999983],[-92.459441999999967,62.810272000000055],[-92.458618000000001,62.800270000000069],[-92.455841000000021,62.79583000000008],[-92.451400999999919,62.791107000000068],[-92.333617999999944,62.709991000000116],[-92.232773000000009,62.673049999999989],[-92.188598999999954,62.659156999999993],[-92.178329000000019,62.65638000000007],[-92.067779999999971,62.651657000000057],[-92.034728999999857,62.65026899999998],[-91.971389999999928,62.653320000000008],[-91.948883000000023,62.651932000000102],[-91.925827000000027,62.644440000000145],[-91.908614999999998,62.636383000000023],[-91.882766999999944,62.624161000000015],[-91.880554000000018,62.619438000000059],[-91.883330999999998,62.604438999999957],[-91.885009999999909,62.5991590000001],[-91.890288999999996,62.588600000000042],[-91.941375999999991,62.534996000000035],[-91.948043999999982,62.531380000000013],[-92.053328999999962,62.526657],[-92.153060999999923,62.598045000000127],[-92.163329999999974,62.600829999999974],[-92.186110999999983,62.603324999999984],[-92.196655000000021,62.603049999999996],[-92.266112999999962,62.595268000000033],[-92.275009000000011,62.591377000000136],[-92.271399999999971,62.578049000000135],[-92.275557999999933,62.560272000000111],[-92.325561999999991,62.540833000000021],[-92.365004999999996,62.533332999999914],[-92.384734999999978,62.529990999999995],[-92.396118000000001,62.530823000000112],[-92.430831999999953,62.535827999999981],[-92.468062999999972,62.54444100000012],[-92.539169000000015,62.532493999999986],[-92.606110000000001,62.464996000000042],[-92.617767000000015,62.466660000000047],[-92.710006999999962,62.465827999999931],[-92.726105000000018,62.444153000000142],[-92.729720999999984,62.438599000000124],[-92.731109999999944,62.433601000000124],[-92.730834999999956,62.428604000000064],[-92.724716000000001,62.358604000000014],[-92.714721999999995,62.343880000000013],[-92.665833000000021,62.332771000000093],[-92.628052000000025,62.322220000000016],[-92.606658999999922,62.31471300000004],[-92.598052999999936,62.310821999999973],[-92.585006999999905,62.302216000000044],[-92.584441999999967,62.297493000000088],[-92.585830999999871,62.292220999999984],[-92.601668999999958,62.265549000000078],[-92.610275000000001,62.261382999999967],[-92.603995999999938,62.236324000000138],[-92.573058999999944,62.196098000000006],[-92.568619000000012,62.191657999999961],[-92.561934999999949,62.187492000000077],[-92.536666999999966,62.175551999999982],[-92.486388999999974,62.161377000000073],[-92.478057999999919,62.157493999999986],[-92.47001599999993,62.146614],[-92.477782999999988,62.143883000000017],[-92.48721299999994,62.144157000000121],[-92.592223999999987,62.154990999999995],[-92.603881999999942,62.156379999999956],[-92.625823999999909,62.191657999999961],[-92.64044199999995,62.209098999999924],[-92.638435000000015,62.212273000000039],[-92.638275000000021,62.215103000000056],[-92.639938000000029,62.217770000000087],[-92.700561999999991,62.265549000000078],[-92.741103999999893,62.28694200000001],[-92.747498000000007,62.289993000000038],[-92.845551,62.309433000000013],[-93.075561999999991,62.332214000000022],[-93.12222300000002,62.334991000000116],[-92.904174999999952,62.262215000000083],[-92.892226999999991,62.259720000000073],[-92.866393999999957,62.263054000000068],[-92.839995999999985,62.260276999999974],[-92.828612999999905,62.257217000000082],[-92.780288999999868,62.236938000000123],[-92.765288999999996,62.224434000000088],[-92.764724999999942,62.219437000000028],[-92.790282999999988,62.177489999999921],[-92.795836999999949,62.172768000000019],[-92.800963999999965,62.172905000000014],[-92.840285999999992,62.174438000000009],[-92.851943999999946,62.175827000000027],[-92.862503000000004,62.17943600000001],[-92.954453000000001,62.192764000000011],[-93.06806899999998,62.174995000000081],[-93.076674999999909,62.17193600000013],[-93.110000999999954,62.156654000000117],[-93.114440999999999,62.15415999999999],[-93.119720000000029,62.148330999999985],[-93.126937999999882,62.132492000000013],[-93.124160999999958,62.128044000000045],[-93.119445999999925,62.123604000000057],[-93.081389999999942,62.10443900000007],[-93.069167999999877,62.103607000000011],[-93.059722999999906,62.105826999999977],[-93.037506000000008,62.121658000000139],[-93.028885000000002,62.12471000000005],[-93.019164999999987,62.126099000000067],[-93.008057000000008,62.125549000000035],[-92.940552000000025,62.115547000000049],[-92.933060000000012,62.11360900000011],[-92.930557000000022,62.109160999999972],[-92.931380999999988,62.104164000000083],[-92.936935000000005,62.099159000000043],[-92.968338000000017,62.077217000000132],[-92.991104000000007,62.067772000000105],[-93.140839000000028,62.009720000000129],[-93.237212999999997,62.02693899999997],[-93.246384000000035,62.033333000000027],[-93.277495999999871,62.042770000000132],[-93.302779999999927,62.049438000000123],[-93.325286999999946,62.051384000000041],[-93.411391999999978,62.03138000000007],[-93.413054999999986,62.025551000000064],[-93.39416499999993,62.013610999999969],[-93.385559000000001,62.009995000000117],[-93.373610999999983,62.007500000000107],[-93.361937999999952,62.00610400000005],[-93.342223999999931,62.004997000000117],[-93.318893000000003,61.998047000000099],[-93.244445999999982,61.969437000000028],[-93.235549999999989,61.965545999999961],[-93.222228999999913,61.957496999999989],[-93.218338000000017,61.95249200000012],[-93.217223999999987,61.947769000000108],[-93.281951999999876,61.891380000000083],[-93.299728000000016,61.885826000000066],[-93.309157999999911,61.883606000000043],[-93.330565999999919,61.886383000000137],[-93.442489999999964,61.915268000000026],[-93.461670000000026,61.922493000000088],[-93.616104000000007,61.939986999999974],[-93.600280999999939,61.879158000000075],[-93.61721799999998,61.861938000000123],[-93.556945999999982,61.847771000000137],[-93.435821999999973,61.808883999999978],[-93.282776000000013,61.788887000000102],[-93.248610999999983,61.78472099999999],[-93.237777999999935,61.777214000000072],[-93.242492999999968,61.767493999999999],[-93.25556899999998,61.742493000000138],[-93.356948999999986,61.707214000000022],[-93.449431999999945,61.682213000000047],[-93.542769999999962,61.663321999999994],[-93.594161999999926,61.648048000000074],[-93.654998999999862,61.629158000000132],[-93.856658999999979,61.549164000000133],[-93.984726000000023,61.456100000000106],[-93.985275000000001,61.454163000000051],[-93.968613000000005,61.396660000000054],[-93.932495000000017,61.387214999999969],[-93.921935999999903,61.385269000000108],[-93.911666999999966,61.385826000000009],[-93.906386999999995,61.387497000000053],[-93.895003999999972,61.389160000000004],[-93.884734999999864,61.389717000000076],[-93.868056999999965,61.389160000000004],[-93.857498000000021,61.385551000000135],[-93.820281999999963,61.355826999999977],[-93.817504999999983,61.351386999999932],[-93.819167999999991,61.347214000000008],[-93.839447000000007,61.319443000000092],[-93.84445199999999,61.316101000000003],[-93.858046999999942,61.312767000000008],[-93.932220000000029,61.296661000000029],[-93.940552000000025,61.294998000000078],[-94.057219999999973,61.178329000000076],[-94.14805599999994,61.043610000000058],[-94.226943999999946,60.942764000000068],[-94.349166999999909,60.858603999999957],[-94.353333000000021,60.853607000000068],[-94.391112999999905,60.798882000000049],[-94.415282999999988,60.762215000000026],[-94.415008999999998,60.756660000000124],[-94.451674999999966,60.671104000000128],[-94.505004999999983,60.549995000000138],[-94.509444999999971,60.544159000000093],[-94.563048999999978,60.522217000000012],[-94.575835999999981,60.52027099999998],[-94.611389000000031,60.52777100000003],[-94.67332499999992,60.522490999999945],[-94.671660999999915,60.466103000000032],[-94.629439999999988,60.41832700000009],[-94.626388999999961,60.413605000000018],[-94.614715999999873,60.38999200000012],[-94.613891999999908,60.380547000000035],[-94.615004999999996,60.375266999999951],[-94.620834000000002,60.363883999999985],[-94.681945999999925,60.224158999999929],[-94.673614999999927,60.191101000000117],[-94.704726999999934,60.091933999999981],[-94.707503999999972,60.083603000000096],[-94.711394999999925,60.078330999999991],[-94.714721999999938,60.075272000000041],[-94.728333000000021,60.071380999999974],[-94.746658000000025,60.069992000000127],[-94.752791999999943,60.06860400000005],[-94.766402999999912,60.061378000000104],[-94.771117999999944,60.055549999999982],[-94.803878999999995,60.008330999999998],[-94.803878999999995,60.003609000000097],[-94.800430000000006,59.999565000000132],[-94.819167999999991,59.964714000000129],[-94.821670999999924,59.959160000000111],[-94.822509999999909,59.954162999999994],[-94.820556999999951,59.944434999999999],[-94.803329000000019,59.877768999999944],[-94.803329000000019,59.711104999999975],[-94.819167999999991,59.63638300000008],[-94.788605000000018,59.51527400000009],[-94.735275000000001,59.426384000000098],[-94.680557000000022,59.357215999999994],[-94.715285999999992,59.323326000000066],[-94.770003999999972,59.29833200000013],[-94.775009000000011,59.29332700000009],[-94.781386999999995,59.263611000000026],[-94.782227000000034,59.258331000000112],[-94.789718999999991,59.092216000000064],[-94.681670999999994,58.975822000000107],[-94.679992999999968,58.97137500000008],[-94.676392000000021,58.93443300000007],[-94.597777999999948,58.878326000000072],[-94.586394999999868,58.874992000000077],[-94.486938000000009,58.815269000000058],[-94.482223999999974,58.811104000000057],[-94.477782999999931,58.806656000000089],[-94.474716000000001,58.802216000000044],[-94.457503999999915,58.774162000000047],[-94.453338999999914,58.765274000000034],[-94.452788999999882,58.759720000000016],[-94.453338999999914,58.750549000000092],[-94.448607999999979,58.736382000000106],[-94.446105999999986,58.731658999999979],[-94.43720999999988,58.72304500000007],[-94.421660999999972,58.716385000000059],[-94.410552999999993,58.714157000000114],[-94.361388999999974,58.712769000000037],[-94.343613000000005,58.715546000000074],[-94.326950000000011,58.721656999999993],[-94.291107000000011,58.743606999999997],[-94.279175000000009,58.771103000000039],[-94.228881999999999,58.784996000000092],[-94.234725999999966,58.714714000000015],[-94.252228000000002,58.649994000000049],[-94.285277999999892,58.512496999999996],[-94.287216000000001,58.438041999999996],[-94.289168999999958,58.427773000000116],[-94.291672000000005,58.422218000000044],[-94.296660999999972,58.415825000000098],[-94.326400999999976,58.349159000000043],[-94.348617999999988,58.2866590000001],[-94.351668999999902,58.276656999999943],[-94.363892000000021,58.22387700000013],[-94.363327000000027,58.218880000000013],[-94.360275000000001,58.220543000000134],[-94.3558349999999,58.226097000000095],[-94.259445000000028,58.351386999999988],[-94.231110000000001,58.390549000000021],[-94.228606999999954,58.396103000000039],[-94.226943999999946,58.406380000000013],[-94.231110000000001,58.430824000000143],[-94.238891999999964,58.494155999999975],[-94.24610899999999,58.576385000000016],[-94.24610899999999,58.586654999999951],[-94.245269999999948,58.59165999999999],[-94.242766999999958,58.597214000000008],[-94.143889999999942,58.763610999999912],[-94.113892000000021,58.762215000000083],[-93.995833999999945,58.760826000000066],[-93.949158000000011,58.76249700000011],[-93.843886999999938,58.767769000000044],[-93.798614999999927,58.773604999999918],[-93.728058000000033,58.783882000000119],[-93.709732000000031,58.785827999999981],[-93.673049999999932,58.780823000000112],[-93.575561999999991,58.763885000000016],[-93.475554999999986,58.732491000000039],[-93.350554999999929,58.74582700000002],[-93.343886999999881,58.750832000000059],[-93.327788999999996,58.757217000000082],[-93.319167999999991,58.758606000000043],[-93.236664000000019,58.766936999999984],[-93.216659999999933,58.764160000000061],[-93.196380999999974,58.758331000000055],[-93.155562999999972,58.740273000000002],[-93.152221999999938,58.737770000000012],[-93.141112999999962,58.691933000000006],[-93.139724999999885,58.653876999999966],[-93.126937999999882,58.532494000000042],[-93.126099000000011,58.527771000000087],[-93.118057000000022,58.508888000000013],[-93.095276000000013,58.467209000000082],[-93.035277999999948,58.37082700000002],[-92.964721999999938,58.261108000000036],[-92.93110699999994,58.21166199999999],[-92.868880999999931,58.143050999999957],[-92.811660999999901,58.071663000000058],[-92.803329000000019,58.057213000000104],[-92.799987999999985,58.042221000000097],[-92.805557000000022,58.011940000000038],[-92.805557000000022,58.00638600000002],[-92.80471799999998,57.997490000000084],[-92.795273000000009,57.96888000000007],[-92.753615999999965,57.85083000000003],[-92.724716000000001,57.801383999999985],[-92.672501000000011,57.733047000000056],[-92.621108999999876,57.670547000000113],[-92.450835999999981,57.442490000000134],[-92.446380999999974,57.433051999999918],[-92.418883999999991,57.337493999999992],[-92.418334999999956,57.332497000000103],[-92.418883999999991,57.323326000000122],[-92.427215999999987,57.263053999999954],[-92.430283000000031,57.252220000000079],[-92.441101000000003,57.23054500000012],[-92.549437999999896,57.08554799999996],[-92.563889000000017,57.068885999999964],[-92.576400999999976,57.056938000000116],[-92.695267000000001,56.961662000000047],[-92.708617999999888,56.951660000000118],[-92.715835999999967,56.947487000000137],[-92.723327999999924,56.944435000000055],[-92.73832699999997,56.94110100000006],[-92.771392999999932,56.93804200000011],[-92.837219000000005,56.924438000000009],[-92.868056999999965,56.91415399999994],[-92.877212999999927,56.90915700000005],[-92.876098999999954,56.907494000000099],[-92.868332000000009,56.90665400000006],[-92.850554999999929,56.907211000000132],[-92.831680000000006,56.908599999999979],[-92.790557999999976,56.913879000000122],[-92.756957999999997,56.918602000000135],[-92.731383999999991,56.922492999999974],[-92.691101000000003,56.93360100000001],[-92.660277999999948,56.945266999999944],[-92.652221999999881,56.949158000000011],[-92.61721799999998,56.96888000000007],[-92.610000999999954,56.974709000000075],[-92.589171999999905,56.986382000000106],[-92.552779999999984,57.004714999999976],[-92.514450000000011,57.023604999999918],[-92.492217999999923,57.032493999999986],[-92.475280999999995,57.037498000000141],[-92.443054000000018,57.044715999999994],[-92.40055799999999,57.052216000000044],[-92.376098999999954,57.056381000000044],[-92.253615999999965,57.065544000000045],[-92.235549999999989,57.066101000000117],[-92.226105000000018,57.065544000000045],[-92.217223999999987,57.063049000000035],[-92.212218999999948,57.058043999999995],[-92.218932999999993,57.052779999999984],[-92.337509000000011,56.981377000000066],[-92.344727000000034,56.977485999999999],[-92.352218999999991,56.974159000000043],[-92.368332000000009,56.969711000000075],[-92.385558999999944,56.967209000000025],[-92.394454999999994,56.966933999999981],[-92.418610000000001,56.961937000000091],[-92.432220000000029,56.955826000000002],[-92.46945199999999,56.934989999999971],[-92.466399999999965,56.932495000000131],[-92.375,56.949714999999912],[-92.303054999999972,56.967491000000109],[-92.287215999999944,56.974434000000088],[-92.281113000000005,56.978874000000076],[-92.268616000000009,56.990829000000019],[-92.261947999999961,56.99582700000002],[-92.235275000000001,57.012771999999984],[-92.220276000000013,57.018883000000017],[-92.204453000000001,57.02416199999999],[-92.180282999999974,57.030823000000112],[-92.155272999999909,57.036658999999986],[-92.146666999999979,57.037772999999959],[-92.129165999999941,57.03943600000008],[-92.093062999999972,57.040833000000021],[-92.057769999999891,57.043884000000048],[-92.031677000000002,57.046660999999972],[-91.987503000000004,57.052489999999977],[-91.952224999999999,57.05721299999999],[-91.828888000000006,57.087211999999965],[-91.779998999999975,57.100273000000129],[-91.241104000000007,57.222214000000008],[-91.15583799999996,57.239989999999977],[-91.08944699999995,57.251106000000107],[-91.05471799999998,57.256104000000107],[-91.036391999999978,57.258049000000085],[-91.001677999999913,57.26138300000008],[-90.992767000000015,57.26138300000008],[-90.834166999999923,57.257217000000026],[-90.81527699999998,57.255829000000119],[-90.795546999999999,57.24971800000003],[-90.779175000000009,57.243324000000143],[-90.758895999999993,57.237769999999955],[-90.738051999999925,57.232490999999982],[-90.71945199999999,57.228043000000014],[-90.709441999999967,57.226379000000009],[-90.563323999999909,57.212212000000079],[-90.451110999999969,57.193878000000097],[-90.408614999999998,57.181664000000069],[-90.391678000000013,57.176102000000128],[-90.387786999999946,57.171378999999945],[-90.310821999999973,57.134995000000117],[-90.225554999999929,57.104439000000013],[-90.025009000000011,57.031380000000013],[-90.005004999999983,57.01915699999995],[-90,57.016369000000054],[-89.990554999999972,57.011107999999922],[-89.970276000000013,57.004166000000055],[-89.833068999999966,56.978324999999984],[-89.715285999999992,56.957214000000079],[-89.521392999999932,56.92943600000001],[-89.439163000000008,56.923881999999992],[-89.132941999999957,56.864852999999982],[-89.06806899999998,56.852219000000048],[-89.015288999999939,56.84777100000008],[-88.950287000000003,56.843048000000124],[-88.94261199999994,56.844269000000054],[-88.815001999999993,56.824440000000038],[-88.742767000000015,56.764442000000145],[-88.67193599999996,56.709435000000042],[-88.654723999999931,56.696380999999974],[-88.639998999999989,56.688599000000067],[-88.631377999999984,56.68471500000004],[-88.584166999999923,56.670546999999999],[-88.440552000000025,56.603607000000011],[-88.415008999999998,56.58638000000002],[-88.365829000000019,56.561661000000015],[-88.324172999999973,56.542770000000019],[-88.218886999999995,56.504440000000045],[-88.149444999999957,56.486938000000009],[-88.103057999999976,56.476097000000095],[-88.069732999999928,56.468880000000013],[-88.048889000000031,56.465546000000018],[-88.028885000000002,56.459991000000116],[-88.018616000000009,56.456100000000049],[-87.982772999999952,56.441658000000075],[-87.975554999999929,56.437491999999963],[-87.841110000000015,56.315269000000001],[-87.723891999999978,56.203880000000083],[-87.719161999999926,56.198875000000044],[-87.715011999999945,56.189987000000031],[-87.71556099999998,56.169716000000051],[-87.713897999999972,56.164993000000095],[-87.708053999999947,56.156096999999988],[-87.702788999999996,56.151931999999988],[-87.548614999999927,56.049995000000138],[-87.478881999999999,56.029160000000047],[-87.368880999999988,56.000832000000059],[-87.351943999999889,55.992767000000129],[-87.345276000000013,55.988602000000128],[-87.343613000000005,55.983879000000002],[-87.348343,55.973320000000115],[-87.355270000000019,55.962769000000037],[-87.198333999999988,55.940269000000001],[-87.110001000000011,55.92943600000001],[-87.091675000000009,55.927489999999921],[-87.057220000000029,55.926940999999999],[-87.031676999999945,55.929718000000094],[-86.996947999999975,55.931663999999955],[-86.979445999999939,55.931663999999955],[-86.970000999999968,55.929718000000094],[-86.881942999999922,55.907211000000018],[-86.837783999999999,55.891380000000026],[-86.616942999999992,55.838882000000012],[-86.572783999999956,55.83027600000014],[-86.544448999999986,55.824440000000038],[-86.486663999999962,55.811378000000047],[-86.477782999999931,55.808884000000091],[-86.448607999999979,55.799995000000024],[-86.398620999999991,55.784164000000033],[-86.372771999999998,55.774993999999992],[-86.346114999999998,55.763054000000068],[-86.332779000000016,55.754715000000033],[-86.321944999999971,55.745544000000109],[-86.31527699999998,55.741104000000064],[-86.277221999999995,55.728873999999962],[-86.267776000000026,55.726936000000023],[-85.86721799999998,55.657493999999986],[-85.740829000000019,55.638046000000088],[-85.731673999999998,55.636940000000038],[-85.71444699999995,55.631660000000011],[-85.569457999999941,55.55860100000001],[-85.556655999999975,55.550270000000069],[-85.532227000000034,55.528045999999961],[-85.525833000000034,55.51888299999996],[-85.516662999999994,55.500000000000057],[-85.515015000000005,55.495270000000062],[-85.515288999999996,55.490273000000116],[-85.509170999999981,55.481102000000021],[-85.499435000000005,55.472214000000008],[-85.474166999999909,55.454711999999972],[-85.393340999999964,55.408881999999949],[-85.383620999999948,55.404991000000109],[-85.272232000000031,55.374709999999993],[-85.234726000000023,55.364715999999987],[-85.224716000000001,55.364159000000086],[-85.208617999999944,55.365273000000059],[-85.182219999999973,55.365273000000059],[-85.164444000000003,55.361664000000076],[-85.146118000000001,55.354996000000085],[-85.128875999999991,55.346382000000006],[-85.123885999999857,55.341934000000037],[-85.121933000000013,55.337769000000037],[-85.116652999999928,55.323050999999964],[-85.116394000000014,55.313606000000107],[-85.118331999999953,55.308601000000067],[-85.121933000000013,55.303322000000094],[-85.129165999999998,55.297775000000115],[-85.144164999999987,55.290276000000119],[-85.215285999999935,55.268600000000049],[-85.275283999999999,55.216660000000047],[-85.398055999999997,55.10083000000003],[-85.399993999999936,55.095824999999991],[-85.397506999999962,55.090546000000018],[-85.383620999999948,55.06749700000006],[-85.398055999999997,55.0472180000001],[-85.419448999999986,55.010826000000122],[-85.425003000000004,55.000274999999988],[-85.425003000000004,54.995544000000052],[-85.423889000000031,54.990546999999992],[-85.414443999999946,54.991104000000064],[-85.407500999999968,54.993324000000086],[-85.400283999999942,54.997772000000055],[-85.386123999999938,55.008049000000028],[-85.370543999999938,55.024437000000091],[-85.366942999999992,55.029716000000064],[-85.36250299999989,55.04055000000011],[-85.347778000000005,55.080826000000116],[-85.33555599999994,55.101661999999976],[-85.318344000000025,55.127486999999974],[-85.313048999999978,55.132767000000001],[-85.220275999999956,55.224434000000088],[-85.194153000000028,55.244155999999919],[-85.17971799999998,55.253608999999926],[-85.156113000000005,55.264160000000061],[-85.139998999999989,55.270270999999923],[-85.116652999999928,55.276657000000057],[-85.06806899999998,55.287498000000141],[-85.043883999999878,55.292770000000075],[-85.001952999999958,55.296660999999972],[-84.974715999999944,55.295830000000137],[-84.869445999999982,55.279716000000008],[-84.75140399999998,55.256103999999993],[-84.723617999999931,55.249718000000087],[-84.712783999999942,55.247771999999998],[-84.688048999999921,55.245270000000119],[-84.635559000000001,55.24221799999998],[-84.599166999999909,55.241661000000079],[-84.566390999999953,55.244155999999919],[-84.541381999999999,55.247490000000084],[-84.444716999999855,55.267769000000044],[-84.428878999999995,55.273048000000017],[-84.388610999999969,55.282493999999986],[-84.322783999999956,55.289992999999981],[-84.206954999999937,55.295546999999999],[-84.198607999999979,55.295273000000066],[-84.189437999999996,55.294159000000093],[-84.170837000000006,55.283051000000057],[-84.159438999999963,55.278328000000101],[-84.149170000000026,55.275551000000007],[-84.12222300000002,55.272217000000012],[-84.113892000000021,55.271934999999928],[-84.092223999999987,55.271660000000111],[-84.076110999999969,55.276099999999929],[-84.049987999999928,55.286110000000065],[-84.006393000000003,55.301383999999928],[-83.968886999999881,55.313881000000094],[-83.951675000000023,55.317497000000003],[-83.93249499999996,55.319443000000035],[-83.920273000000009,55.319160000000068],[-83.897506999999905,55.316940000000102],[-83.658386000000007,55.237324000000058],[-83.65439600000002,55.235493000000076],[-83.651732999999922,55.232985999999983],[-83.570281999999963,55.18804200000011],[-83.567229999999938,55.183052000000032],[-83.570007000000032,55.177773000000059],[-83.58555599999994,55.166100000000029],[-83.591674999999896,55.154434000000037],[-83.589721999999938,55.149719000000005],[-83.574447999999961,55.138045999999974],[-83.561935000000005,55.130820999999969],[-83.556655999999919,55.134163000000058],[-83.556655999999919,55.17943600000001],[-83.558608999999933,55.184989999999971],[-83.579505999999867,55.221157000000005],[-83.588057999999933,55.233330000000024],[-83.593886999999938,55.236938000000123],[-83.60082999999986,55.239990000000034],[-83.620833999999945,55.242767000000129],[-83.643889999999999,55.242767000000129],[-83.654448999999943,55.243881000000101],[-83.670837000000006,55.248604000000057],[-83.684432999999956,55.254439999999988],[-83.696105999999986,55.261664999999994],[-83.706116000000009,55.269714000000022],[-83.708892999999989,55.274437000000034],[-83.706116000000009,55.279990999999995],[-83.698607999999979,55.283051000000057],[-83.688888999999961,55.281937000000084],[-83.57417299999986,55.262215000000026],[-83.533324999999934,55.250549000000092],[-83.519454999999937,55.243881000000101],[-83.498885999999914,55.235549999999989],[-83.489440999999943,55.233879000000115],[-83.179717999999866,55.197211999999979],[-83.168609999999944,55.197487000000137],[-83.150283999999942,55.200271999999984],[-83.128051999999968,55.207497000000046],[-83.120270000000005,55.210823000000119],[-83.089721999999938,55.226654000000053],[-83.074447999999961,55.231658999999922],[-83.037505999999951,55.238327000000083],[-83.029174999999952,55.238883999999985],[-83.006392999999946,55.238602000000128],[-82.985001000000011,55.236382000000106],[-82.964721999999995,55.233604000000128],[-82.948607999999865,55.228874000000076],[-82.941665999999941,55.225821999999994],[-82.930556999999965,55.218322999999998],[-82.91332999999986,55.201385000000073],[-82.906113000000005,55.191932999999949],[-82.896956999999986,55.177215999999987],[-82.874435000000005,55.154434000000037],[-82.838333000000034,55.146660000000054],[-82.809998000000007,55.142220000000009],[-82.786117999999988,55.141106000000036],[-82.775283999999942,55.14137999999997],[-82.76556399999987,55.142493999999942],[-82.73971599999993,55.147491000000059],[-82.708618000000001,55.156380000000127],[-82.700835999999981,55.159714000000122],[-82.669723999999974,55.168052999999986],[-82.661117999999931,55.169716000000108],[-82.650283999999886,55.169716000000108],[-82.508346999999901,55.152771000000143],[-82.449432000000002,55.133049000000085],[-82.412506000000008,55.112770000000125],[-82.40972899999997,55.108046999999999],[-82.400833000000034,55.082771000000093],[-82.33555599999994,55.071014000000048],[-82.307495000000017,55.115829000000133],[-82.308043999999995,55.121933000000126],[-82.309432999999899,55.127486999999974],[-82.3125,55.132492000000013],[-82.323623999999995,55.139992000000063],[-82.337218999999948,55.146102999999982],[-82.345276000000013,55.148331000000098],[-82.355559999999969,55.162491000000045],[-82.349990999999875,55.166382000000112],[-82.34056099999998,55.164711000000011],[-82.333618000000001,55.1616590000001],[-82.307769999999948,55.148880000000077],[-82.25418099999996,55.111382000000049],[-82.245833999999945,55.102776000000119],[-82.244995000000017,55.09027100000003],[-82.246947999999861,55.084160000000111],[-82.253341999999975,55.073608000000092],[-82.25778200000002,55.06888600000002],[-82.273620999999935,55.05721299999999],[-82.282227000000034,55.048049999999989],[-82.285277999999948,55.042770000000132],[-82.287216000000001,55.036659000000043],[-82.287216000000001,55.030273000000136],[-82.270844000000011,54.931381000000044],[-82.267226999999991,54.920273000000009],[-82.255279999999914,54.894157000000121],[-82.246947999999861,54.879433000000063],[-82.241378999999938,54.874991999999963],[-82.231948999999986,54.873877999999991],[-82.221114999999998,54.787498000000085],[-82.320846999999958,54.571380999999974],[-82.403885000000002,54.410820000000115],[-82.419158999999979,54.384163000000058],[-82.431670999999938,54.370270000000005],[-82.436935000000005,54.366385999999977],[-82.441101000000003,54.361664000000076],[-82.441665999999941,54.330826000000116],[-82.434158000000025,54.209435000000042],[-82.421660999999972,54.197211999999979],[-82.389998999999989,54.16832700000009],[-82.362777999999878,54.143607999999972],[-82.301392000000021,54.103050000000053],[-82.283889999999985,54.092491000000052],[-82.253341999999975,54.076102999999989],[-82.248046999999929,54.072220000000016],[-82.243880999999931,54.068054000000132],[-82.238327000000027,54.057495000000074],[-82.160278000000005,53.898880000000133],[-82.131942999999978,53.817772000000105],[-82.130553999999961,53.793052999999986],[-82.129715000000033,53.774436999999978],[-82.130553999999961,53.767493999999999],[-82.136672999999917,53.749161000000129],[-82.148894999999982,53.727768000000026],[-82.189986999999917,53.674164000000019],[-82.194152999999915,53.669441000000006],[-82.203063999999927,53.653320000000008],[-82.208344000000011,53.641936999999984],[-82.212783999999999,53.622765000000015],[-82.21665999999999,53.603882000000112],[-82.211944999999957,53.536110000000065],[-82.208618000000001,53.524994000000106],[-82.198883000000023,53.504714999999976],[-82.190552000000025,53.489716000000101],[-82.172500999999954,53.460548000000074],[-82.165558000000033,53.451385000000073],[-82.158614999999998,53.442215000000033],[-82.147781000000009,53.421661000000086],[-82.138061999999991,53.38888500000013],[-82.125823999999966,53.344154000000117],[-82.119445999999982,53.315826000000129],[-82.115829000000019,53.298332000000073],[-82.113891999999908,53.286659000000043],[-82.113891999999908,53.280273000000136],[-82.114715999999873,53.273604999999975],[-82.117766999999958,53.268050999999957],[-82.121932999999956,53.263610999999969],[-82.141387999999949,53.254715000000033],[-82.21055599999994,53.220268000000033],[-82.248336999999935,53.193877999999984],[-82.269454999999937,53.163879000000009],[-82.27555799999999,53.153320000000122],[-82.279448999999943,53.141106000000093],[-82.300277999999935,53.060271999999998],[-82.301392000000021,53.05332199999998],[-82.301666000000012,53.041663999999969],[-82.296660999999972,53.018599999999992],[-82.273894999999982,52.956383000000017],[-82.261397999999986,52.937210000000107],[-82.257506999999976,52.932770000000062],[-82.235824999999977,52.924164000000133],[-82.196380999999974,52.913321999999937],[-82.136123999999995,52.894714000000079],[-82.120543999999995,52.889717000000132],[-82.101669000000015,52.879990000000021],[-82.050551999999982,52.84304800000001],[-82.025833000000034,52.823883000000023],[-82.001113999999973,52.804710000000114],[-81.977782999999931,52.784996000000035],[-81.973617999999931,52.780548000000067],[-81.951401000000033,52.736938000000066],[-81.733611999999994,52.549995000000138],[-81.719161999999983,52.538330000000087],[-81.714172000000019,52.534721000000047],[-81.697494999999947,52.524162000000047],[-81.639175000000023,52.490547000000106],[-81.621384000000035,52.480819999999994],[-81.607497999999964,52.475265999999976],[-81.577224999999999,52.465271000000087],[-81.569457999999941,52.462212000000136],[-81.558043999999938,52.456099999999935],[-81.554168999999888,52.451660000000118],[-81.551391999999964,52.446655000000078],[-81.549987999999985,52.44110100000006],[-81.542496000000028,52.338882000000012],[-81.56138599999997,52.316383000000087],[-81.663054999999986,52.292220999999984],[-81.822509999999909,52.254440000000045],[-81.850829999999917,52.244995000000131],[-81.863051999999982,52.238884000000041],[-81.865829000000019,52.23333000000008],[-81.883620999999948,52.187492000000134],[-81.874160999999901,52.188324000000023],[-81.841949,52.194992000000013],[-81.826950000000011,52.19887499999993],[-81.805557000000022,52.206099999999992],[-81.795546999999999,52.213882000000126],[-81.792495999999971,52.21915400000006],[-81.788605000000018,52.223877000000073],[-81.779448999999943,52.232208000000128],[-81.765015000000005,52.237770000000069],[-81.758346999999958,52.23943300000002],[-81.74888599999997,52.240273000000059],[-81.718886999999881,52.240829000000076],[-81.554992999999854,52.237495000000081],[-81.521392999999932,52.235825000000091],[-81.50167799999997,52.23333000000008],[-81.478881999999942,52.225822000000051],[-81.472778000000005,52.221930999999984],[-81.460006999999962,52.210274000000027],[-81.443603999999937,52.192764000000068],[-81.440552000000025,52.188599000000067],[-81.434432999999956,52.179161000000022],[-81.431670999999994,52.174164000000133],[-81.430557000000022,52.168053000000043],[-81.418335000000013,52.149437000000034],[-81.414443999999946,52.144996999999989],[-81.405838000000017,52.136940000000038],[-81.365279999999984,52.107216000000051],[-81.352782999999988,52.101105000000132],[-81.337783999999999,52.096100000000092],[-81.310546999999985,52.091102999999976],[-81.290832999999964,52.088599999999985],[-81.264724999999999,52.08277099999998],[-81.212509000000011,52.065543999999989],[-81.186110999999869,52.053604000000064],[-81.167496000000028,52.044158999999979],[-81.118057000000022,52.045547000000113],[-80.994445999999925,52.01138300000008],[-80.988327000000027,52.008049000000085],[-80.978333000000021,52.000832000000003],[-80.97444200000001,51.996384000000035],[-80.973052999999936,51.990829000000133],[-80.972778000000005,51.978325000000098],[-80.929992999999968,51.924163999999962],[-80.918609999999944,51.910271000000137],[-80.899993999999936,51.89527099999998],[-80.894729999999981,51.891663000000051],[-80.80972300000002,51.857498000000135],[-80.698607999999979,51.794715999999937],[-80.615279999999927,51.730270000000132],[-80.610275000000001,51.726379000000065],[-80.589171999999962,51.699715000000083],[-80.589171999999962,51.693321000000026],[-80.590285999999878,51.686653000000092],[-80.589995999999928,51.674164000000019],[-80.586120999999878,51.663605000000018],[-80.578887999999949,51.648605000000032],[-80.571395999999993,51.633605999999986],[-80.515015000000005,51.524437000000034],[-80.507506999999976,51.515830999999935],[-80.497771999999998,51.508331000000055],[-80.462218999999891,51.488601999999958],[-80.457229999999925,51.484993000000145],[-80.442489999999964,51.473602000000028],[-80.438889000000017,51.46915400000006],[-80.436385999999857,51.464157000000114],[-80.434998000000007,51.458602999999925],[-80.424438000000009,51.36360899999994],[-80.426392000000021,51.358887000000038],[-80.430557000000022,51.354164000000083],[-80.442489999999964,51.34804500000007],[-80.471664000000033,51.339714000000129],[-80.502791999999943,51.331940000000145],[-80.540558000000033,51.323326000000066],[-80.568619000000012,51.314156000000025],[-80.652495999999985,51.278327999999988],[-80.691939999999988,51.247490000000028],[-80.706954999999937,51.235550000000103],[-80.831680000000006,51.155822999999941],[-80.952498999999989,51.079720000000009],[-80.959441999999967,51.077492000000063],[-80.965285999999992,51.074440000000095],[-80.981110000000001,51.06360600000005],[-80.994994999999903,51.051384000000098],[-81.004181000000017,51.043052999999986],[-81.012222000000008,51.033882000000062],[-81.015015000000005,51.028328000000045],[-81.005279999999914,51.028603000000089],[-80.928054999999915,51.04583000000008],[-80.888335999999924,51.082771000000037],[-80.875274999999988,51.103324999999984],[-80.862212999999883,51.116104000000007],[-80.850280999999995,51.122489999999971],[-80.835280999999952,51.126938000000109],[-80.820557000000008,51.130272000000105],[-80.793610000000001,51.132767000000115],[-80.765014999999948,51.133606000000043],[-80.748046999999985,51.136658000000011],[-80.740829000000019,51.138885000000073],[-80.694442999999978,51.156097000000045],[-80.688599000000011,51.159157000000107],[-80.610000999999954,51.214157],[-80.567779999999971,51.258331000000112],[-80.562774999999988,51.262214999999969],[-80.541381999999999,51.276657000000114],[-80.530563000000029,51.283606999999961],[-80.512512000000015,51.292769999999962],[-80.480285999999865,51.307213000000047],[-80.414444000000003,51.332497000000046],[-80.400283999999886,51.337212000000079],[-80.392226999999991,51.338599999999985],[-80.371658000000025,51.336655000000007],[-80.330291999999986,51.326385000000073],[-80.219727000000034,51.301659000000029],[-80.190551999999968,51.297493000000145],[-80.129989999999907,51.297775000000001],[-80.120270000000005,51.296387000000095],[-80.016952999999944,51.263054000000125],[-79.996383999999921,51.25471500000009],[-79.800277999999992,51.156097000000045],[-79.788054999999929,51.149719000000118],[-79.741104000000007,51.123604000000114],[-79.736389000000031,51.119713000000047],[-79.729171999999949,51.110825000000034],[-79.716515000000015,51.081715000000031],[-79.685103999999967,51.045361000000014],[-79.612777999999992,51.008049000000085],[-79.537612999999908,50.958397000000048],[-79.519729999999981,50.929993000000024],[-79.516113000000018,50.926384000000041],[-79.466109999999958,50.889434999999935],[-79.450561999999877,50.87860100000006],[-79.438599000000011,50.872214999999983],[-79.415008999999941,50.846939000000134],[-79.411391999999978,50.842490999999995],[-79.352782999999931,50.748329000000069],[-79.350280999999939,50.736938000000123],[-79.348052999999993,50.731934000000138],[-79.343612999999891,50.728324999999984],[-79.337509000000011,50.724990999999989],[-79.332229999999981,50.723877000000016],[-79.330001999999922,50.758331000000055],[-79.330001999999922,50.764442000000088],[-79.332229999999981,50.775826000000052],[-79.420836999999949,50.879715000000033],[-79.439986999999917,50.894997000000103],[-79.464721999999995,50.913321999999994],[-79.515015000000005,50.95665699999995],[-79.537353999999993,50.983765000000062],[-79.571121000000005,51.00277699999998],[-79.660004000000015,51.045273000000009],[-79.673049999999876,51.050827000000027],[-79.678054999999915,51.054710000000114],[-79.698333999999932,51.075554000000068],[-79.705276000000026,51.084435000000042],[-79.749435000000005,51.168326999999977],[-79.751952999999958,51.178878999999995],[-79.752227999999889,51.184433000000013],[-79.751113999999973,51.197487000000081],[-79.745543999999995,51.208885000000066],[-79.742492999999968,51.214157],[-79.720551,51.243607000000054],[-79.703887999999949,51.261665000000107],[-79.699431999999945,51.266937000000041],[-79.688888999999961,51.281937000000028],[-79.682495000000017,51.292496000000028],[-79.680556999999908,51.298050000000046],[-79.679442999999992,51.304710000000057],[-79.668609999999944,51.398605000000089],[-79.593886999999938,51.449158000000068],[-79.581679999999949,51.455268999999987],[-79.574721999999895,51.457497000000103],[-79.547103999999877,51.460129000000109],[-79.533614999999941,51.50499700000006],[-79.474166999999966,51.579162999999994],[-79.376389000000017,51.642494000000113],[-79.353881999999999,51.656096999999988],[-79.331680000000006,51.661933999999917],[-79.322234999999978,51.662766000000033],[-79.239715999999987,51.634994999999947],[-79.236114999999927,51.630820999999912],[-79.235000999999954,51.624992000000077],[-79.23721299999994,51.619156000000032],[-79.251952999999958,51.60694100000012],[-79.275283999999999,51.577773999999977],[-79.285277999999948,51.562492000000134],[-79.285277999999948,51.556381000000101],[-79.274719000000005,51.530548000000124],[-79.271118000000001,51.525551000000064],[-79.267226999999934,51.521659999999997],[-79.202498999999989,51.518883000000073],[-79.183318999999983,51.519714000000079],[-79.175277999999935,51.521103000000096],[-79.161117999999931,51.525551000000064],[-79.154998999999975,51.528602999999976],[-79.144454999999937,51.536110000000065],[-79.137512000000015,51.538330000000087],[-79.12748699999986,51.538048000000003],[-79.120270000000005,51.535552999999993],[-79.024445000000014,51.476379000000122],[-79.020553999999947,51.473320000000115],[-79.012221999999952,51.464996000000099],[-79.005004999999926,51.449997000000053],[-78.963332999999977,51.353325000000098],[-78.950286999999946,51.29222100000004],[-78.955276000000026,51.256660000000068],[-78.95944199999991,51.252220000000023],[-78.962783999999942,51.246941000000049],[-78.962783999999942,51.240546999999992],[-78.958344000000011,51.230545000000063],[-78.951401000000033,51.215546000000018],[-78.937209999999936,51.197769000000108],[-78.928878999999938,51.18971300000004],[-78.924164000000019,51.185822000000144],[-78.912215999999944,51.179436000000067],[-78.906113000000005,51.176658999999972],[-78.853332999999964,51.165543000000014],[-78.914718999999934,51.22165700000005],[-78.918335000000013,51.226097000000095],[-78.920546999999942,51.231102000000135],[-78.921660999999915,51.237495000000081],[-78.920273000000009,51.249718000000144],[-78.890563999999927,51.390549000000021],[-78.888335999999981,51.396660000000111],[-78.883057000000008,51.401100000000099],[-78.832229999999981,51.438599000000011],[-78.779175000000009,51.474990999999989],[-78.82028200000002,51.513054000000068],[-78.823897999999986,51.517494000000056],[-78.826110999999969,51.522491000000002],[-78.824448000000018,51.541664000000083],[-78.820846999999958,51.554436000000067],[-78.80860899999999,51.576385000000016],[-78.791672000000005,51.603881999999942],[-78.796386999999925,51.608604000000014],[-78.859160999999972,51.634163000000058],[-78.944153000000028,51.670547000000056],[-79.03472899999997,51.764717000000132],[-79.035552999999993,51.770271000000093],[-79.033324999999877,51.776382000000012],[-79.029174999999952,51.781380000000013],[-79.008346999999958,51.795830000000137],[-78.995834000000002,51.801658999999972],[-78.985824999999977,51.801658999999972],[-78.976104999999905,51.799720999999977],[-78.961394999999868,51.794998000000021],[-78.944442999999865,51.790833000000021],[-78.918059999999969,51.79444100000012],[-78.910827999999981,51.796660999999972],[-78.903609999999958,51.799438000000009],[-78.879989999999964,51.811378000000104],[-78.851944000000003,51.828606000000036],[-78.846389999999985,51.832497000000103],[-78.836945000000014,51.841377000000136],[-78.833618000000001,51.845825000000104],[-78.832229999999981,51.852776000000063],[-78.834441999999967,51.857772999999952],[-78.841674999999952,51.866661000000136],[-78.846389999999985,51.870269999999948],[-78.858611999999937,51.876938000000109],[-78.86361699999992,51.880821000000083],[-78.89555399999989,51.926659000000029],[-78.896392999999932,51.932495000000074],[-78.894164999999987,51.93832400000008],[-78.881942999999922,51.944434999999999],[-78.860274999999888,51.951102999999932],[-78.851944000000003,51.95249200000012],[-78.810546999999929,51.958885000000066],[-78.769454999999994,51.966103000000089],[-78.747771999999998,51.973320000000001],[-78.736664000000019,51.979431000000091],[-78.695830999999998,52.008049000000085],[-78.579452999999944,52.111382000000106],[-78.537505999999951,52.180824000000143],[-78.501113999999973,52.255829000000006],[-78.524445000000014,52.311104000000114],[-78.516953000000001,52.367767000000072],[-78.507232999999985,52.454437000000041],[-78.506957999999997,52.460548000000074],[-78.545273000000009,52.514717000000132],[-78.564712999999983,52.530273000000079],[-78.577224999999999,52.536658999999986],[-78.585555999999997,52.538605000000075],[-78.59584000000001,52.538886999999988],[-78.654448999999943,52.54694400000011],[-78.684433000000013,52.551383999999985],[-78.763335999999981,52.564438000000052],[-78.761123999999938,52.570549000000085],[-78.755568999999923,52.574164999999994],[-78.721114999999998,52.586655000000121],[-78.691939999999931,52.596099999999979],[-78.713333000000034,52.628876000000105],[-78.753066999999874,52.683875999999941],[-78.790833000000021,52.737495000000138],[-78.796950999999979,52.773880000000077],[-78.765015000000005,52.777489000000116],[-78.731948999999986,52.783333000000084],[-78.724715999999944,52.785553000000107],[-78.722503999999901,52.791664000000026],[-78.725554999999986,52.819443000000035],[-78.738327000000027,52.872215000000097],[-78.794448999999986,52.861381999999935],[-78.856109999999887,52.877769000000114],[-78.880829000000006,52.896942000000024],[-78.881942999999922,52.90277100000003],[-78.87860099999989,52.908043000000134],[-78.864715999999987,52.963608000000079],[-78.915833000000021,53.000000000000057],[-78.923049999999932,53.068886000000077],[-78.888061999999934,53.224709000000132],[-78.894454999999994,53.259720000000073],[-78.895844000000011,53.26527400000009],[-78.942490000000021,53.384994999999947],[-78.949722000000008,53.399994000000049],[-78.991721999999925,53.434048000000018],[-78.994720000000029,53.436378000000047],[-79.004554999999925,53.439216999999928],[-79.009551999999928,53.438213000000019],[-79.044723999999974,53.439430000000016],[-79.053054999999972,53.438042000000053],[-79.063323999999966,53.439430000000016],[-79.068068999999923,53.443321000000083],[-79.090285999999992,53.470543000000021],[-79.093062999999972,53.474709000000075],[-79.107773000000009,53.497215000000097],[-79.110275000000001,53.502495000000124],[-79.103606999999954,53.513054000000011],[-79.084166999999979,53.522491000000116],[-79.054442999999935,53.531380000000013],[-79.035552999999993,53.53276800000009],[-79.012787000000003,53.531104999999968],[-79.031386999999995,53.529716000000008],[-79.038054999999986,53.526657],[-79.043334999999956,53.523048000000017],[-79.042495999999915,53.511108000000092],[-79.041381999999999,53.505554000000132],[-79.036391999999978,53.501663000000065],[-79.014838999999938,53.498940000000005],[-79.011002000000019,53.496937000000003],[-79.005675999999937,53.49577000000005],[-79.000678999999934,53.496609000000035],[-78.962783999999942,53.508888000000127],[-78.919158999999979,53.555267000000072],[-78.915833000000021,53.560547000000099],[-78.918335000000013,53.565544000000045],[-78.92193599999996,53.569992000000013],[-78.950561999999991,53.599716000000001],[-79.003341999999918,53.641663000000051],[-79.089721999999938,53.691658000000075],[-79.145003999999972,53.701660000000061],[-79.151397999999915,53.704994000000056],[-79.152221999999995,53.710548000000017],[-79.052490000000034,53.831939999999975],[-79.046951000000035,53.835548000000074],[-79.039444000000003,53.83776899999998],[-79.029723999999987,53.839157000000114],[-79.011123999999995,53.839989000000003],[-78.988891999999908,53.838882000000069],[-78.979995999999971,53.836104999999975],[-78.966109999999901,53.83027600000014],[-78.948333999999932,53.820831000000112],[-78.932770000000005,53.815543999999989],[-78.910827999999981,53.814437999999939],[-78.901397999999972,53.815268999999944],[-78.902221999999938,53.821380999999974],[-78.906386999999938,53.825272000000041],[-78.917769999999962,53.832214000000079],[-78.924164000000019,53.835548000000074],[-78.969727000000034,53.851387000000045],[-78.988891999999908,53.854713000000061],[-79.011948000000018,53.856658999999979],[-79.056655999999919,53.873046999999985],[-79.101104999999961,53.901657000000057],[-79.106110000000001,53.905548000000124],[-79.072509999999852,53.999161000000072],[-79.066956000000005,54.002777000000094],[-79.051102000000014,54.006660000000068],[-79.041381999999999,54.00777400000004],[-79.031676999999945,54.00777400000004],[-79.021392999999989,54.006386000000134],[-79.001098999999954,53.999992000000077],[-78.964950999999928,53.99716200000006],[-78.961623999999972,53.999992000000077],[-78.960280999999952,54.001389000000017],[-78.962783999999942,54.006386000000134],[-78.966659999999933,54.010826000000122],[-78.976669000000015,54.018326000000002],[-78.984160999999972,54.021659999999997],[-79.119445999999982,54.078605999999979],[-79.116393999999957,54.103050000000053],[-79.106383999999935,54.111382000000049],[-79.046386999999982,54.178329000000076],[-79.048889000000031,54.183327000000077],[-79.060546999999985,54.184158000000082],[-79.173324999999977,54.174995000000081],[-79.191665999999998,54.172768000000019],[-79.198043999999868,54.169716000000108],[-79.196944999999971,54.163605000000018],[-79.198333999999988,54.157210999999961],[-79.205840999999907,54.154990999999995],[-79.238051999999982,54.158882000000062],[-79.276397999999915,54.166939000000013],[-79.345276000000013,54.199432000000002],[-79.419998000000021,54.274437000000034],[-79.430557000000022,54.290275999999949],[-79.476669000000015,54.368599000000131],[-79.505004999999926,54.42582700000014],[-79.488051999999925,54.452217000000132],[-79.488051999999925,54.458603000000039],[-79.521392999999989,54.587212000000136],[-79.525283999999886,54.591377000000136],[-79.531677000000002,54.594711000000132],[-79.565552000000025,54.609993000000145],[-79.618880999999931,54.623878000000047],[-79.675551999999925,54.625824000000136],[-79.686110999999983,54.627212999999927],[-79.760833999999988,54.648048000000074],[-79.764449999999954,54.652214000000129],[-79.761123999999995,54.658325000000048],[-79.631667999999934,54.702773999999977],[-79.494155999999975,54.744713000000104],[-79.463622999999984,54.75360900000004],[-79.457229999999925,54.750275000000045],[-79.447494999999947,54.75110600000005],[-79.337783999999942,54.772491000000059],[-79.315826000000015,54.779991000000109],[-79.101104999999961,54.827216999999962],[-78.976669000000015,54.843048000000124],[-78.968886999999995,54.845267999999976],[-78.956664999999987,54.851936000000137],[-78.945540999999935,54.859436000000017],[-78.912505999999894,54.884163000000115],[-78.838608000000022,54.91443600000008],[-78.732773000000009,54.931107000000111],[-78.561110999999926,54.977767999999912],[-78.37388599999997,55.030273000000136],[-78.256118999999899,55.082214000000022],[-78.207672000000002,55.111655999999982],[-78.182220000000029,55.125267000000122],[-78.119445999999982,55.149994000000049],[-77.972778000000005,55.204994000000113],[-77.87249799999995,55.243606999999997],[-77.748610999999983,55.300827000000027],[-77.62222300000002,55.382766999999944],[-77.416655999999989,55.486107000000061],[-77.225829999999974,55.588326000000109],[-77.214721999999995,55.595267999999976],[-77.137221999999895,55.654160000000047],[-77.115279999999927,55.674164000000133],[-77.104720999999984,55.683876000000055],[-77.088332999999921,55.699432000000058],[-77.086120999999935,55.705551000000071],[-77.085555999999997,55.708046000000081],[-77.087783999999942,55.709716999999955],[-77.068343999999968,55.754715000000033],[-77.013061999999877,55.803046999999935],[-76.81138599999997,55.971100000000092],[-76.751953000000015,55.997771999999998],[-76.737503000000004,56.001663000000065],[-76.718886999999995,56.008048999999971],[-76.702498999999932,56.017494000000056],[-76.689162999999894,56.027489000000003],[-76.681945999999982,56.033882000000119],[-76.67721599999993,56.038605000000075],[-76.670836999999892,56.045830000000137],[-76.658050999999944,56.060821999999973],[-76.650833000000034,56.071938000000102],[-76.626662999999951,56.118049999999982],[-76.538329999999974,56.297775000000115],[-76.532227000000034,56.315269000000001],[-76.531112999999948,56.322220000000129],[-76.518889999999999,56.406097000000102],[-76.517501999999979,56.423325000000034],[-76.517501999999979,56.43582200000003],[-76.519164999999987,56.464714000000072],[-76.525832999999977,56.492767000000072],[-76.527221999999995,56.503052000000139],[-76.526397999999915,56.605827000000033],[-76.506957999999941,56.710823000000005],[-76.505004999999983,56.733879000000002],[-76.504455999999948,56.771934999999985],[-76.505568999999923,56.784995999999921],[-76.505279999999914,56.791382000000056],[-76.505568999999923,56.803047000000106],[-76.509445000000028,56.819717000000026],[-76.530838000000017,56.90665400000006],[-76.554442999999992,57.005828999999949],[-76.554717999999923,57.010826000000066],[-76.555832000000009,57.034996000000092],[-76.553329000000019,57.053322000000094],[-76.549164000000019,57.06221000000005],[-76.545272999999952,57.068885999999964],[-76.535552999999993,57.077773999999977],[-76.531112999999948,57.087211999999965],[-76.529175000000009,57.09665700000005],[-76.529723999999874,57.10582700000009],[-76.564437999999996,57.207214000000079],[-76.591384999999946,57.274436999999978],[-76.599990999999932,57.293610000000058],[-76.604445999999882,57.302773000000059],[-76.653060999999923,57.401382000000012],[-76.65834000000001,57.406653999999946],[-76.688048999999978,57.430550000000039],[-76.732223999999917,57.490273000000059],[-76.740829000000019,57.503326000000072],[-76.81138599999997,57.624710000000107],[-76.809433000000013,57.634720000000016],[-76.807770000000005,57.641662999999994],[-76.805557000000022,57.647774000000084],[-76.861937999999952,57.71915400000006],[-76.923049999999989,57.786110000000065],[-77.147231999999974,58.022765999999933],[-77.246658000000025,58.07388300000008],[-77.279723999999987,58.084435000000042],[-77.317504999999983,58.091934000000037],[-77.34944200000001,58.101936000000023],[-77.444442999999978,58.152489000000003],[-77.451110999999969,58.171379000000115],[-77.446655000000021,58.173882000000106],[-77.441100999999946,58.182770000000062],[-77.444152999999972,58.187767000000008],[-77.454453000000001,58.196381000000031],[-77.467223999999987,58.203323000000125],[-77.487777999999935,58.212769000000094],[-77.571670999999981,58.248047000000099],[-77.645843999999954,58.278603000000032],[-77.81527699999998,58.327217000000019],[-77.851944000000003,58.334991000000002],[-77.883895999999993,58.339989000000003],[-77.914443999999946,58.345543000000021],[-77.939163000000008,58.35305000000011],[-77.955276000000026,58.358604000000128],[-78.012512000000015,58.378601000000003],[-78.024445000000014,58.384163000000115],[-78.02806099999998,58.386940000000038],[-78.031386999999938,58.391380000000026],[-78.062682999999993,58.417309000000103],[-78.130553999999961,58.462769000000037],[-78.355559999999969,58.601661999999976],[-78.397231999999917,58.620827000000133],[-78.419998000000021,58.62721300000004],[-78.425277999999992,58.626099000000067],[-78.428329000000019,58.623604000000057],[-78.427779999999984,58.611107000000061],[-78.426101999999958,58.606102000000021],[-78.347778000000005,58.536659000000043],[-78.389724999999885,58.544716000000051],[-78.549163999999905,58.603881999999999],[-78.563889000000017,58.609993000000088],[-78.568618999999956,58.614441000000056],[-78.573897999999929,58.630547000000035],[-78.574722000000008,58.635269000000108],[-78.570006999999976,58.673050000000103],[-78.563889000000017,58.676940999999999],[-78.555831999999953,58.677773000000059],[-78.543883999999991,58.678046999999992],[-78.514724999999942,58.67943600000001],[-78.469727000000034,58.695541000000105],[-78.467223999999987,58.701660000000118],[-78.48832699999997,58.786385000000053],[-78.50556899999998,58.835266000000104],[-78.511672999999917,58.839157],[-78.516402999999968,58.843323000000055],[-78.538605000000018,58.886940000000095],[-78.571395999999879,58.957214000000079],[-78.570557000000008,58.961380000000133],[-78.561935000000005,58.965828000000101],[-78.552215999999987,58.968048000000124],[-78.396392999999932,58.964714000000129],[-78.361663999999962,58.958603000000039],[-78.352492999999924,58.956657000000007],[-78.346389999999985,58.953605999999979],[-78.344451999999876,58.949432000000115],[-78.344726999999978,58.946655000000021],[-78.345276000000013,58.944710000000043],[-78.348342999999943,58.942214999999976],[-78.366394000000014,58.920273000000122],[-78.363892000000021,58.912490999999989],[-78.357773000000009,58.910270999999966],[-78.345839999999953,58.909714000000065],[-78.338333000000034,58.912766000000033],[-78.310821999999973,58.927216000000101],[-78.304717999999923,58.931106999999997],[-78.205565999999976,59.050545000000113],[-78.127486999999974,59.108330000000024],[-78.08666999999997,59.156654000000003],[-78.093886999999995,59.193047000000035],[-78.098617999999988,59.196655000000135],[-78.101943999999946,59.200828999999999],[-78.103881999999999,59.205826000000116],[-78.092772999999909,59.214995999999985],[-77.961120999999935,59.258331000000112],[-77.949721999999952,59.261939999999925],[-77.930283000000031,59.26527399999992],[-77.884445000000028,59.271935000000042],[-77.860000999999954,59.272217000000126],[-77.843613000000005,59.275551000000121],[-77.828887999999949,59.281105000000082],[-77.824448000000018,59.283606999999961],[-77.68499799999995,59.393326000000116],[-77.677215999999987,59.399994000000106],[-77.678328999999962,59.401932000000045],[-77.779175000000009,59.426102000000014],[-77.787216000000001,59.426658999999916],[-77.798049999999989,59.426384000000098],[-77.831389999999942,59.414711000000068],[-77.880279999999914,59.39916199999999],[-77.887512000000015,59.397491000000116],[-77.896956999999986,59.397217000000012],[-77.902221999999995,59.398880000000077],[-77.905838000000017,59.401100000000099],[-77.910277999999948,59.405548000000067],[-77.912506000000008,59.415267999999969],[-77.910552999999879,59.425551999999982],[-77.872771999999998,59.491935999999953],[-77.867492999999911,59.5],[-77.86111499999987,59.503883000000087],[-77.84056099999998,59.513054000000068],[-77.798889000000031,59.524993999999992],[-77.779175000000009,59.52887700000008],[-77.769454999999937,59.529160000000047],[-77.749999999999886,59.532211000000075],[-77.721389999999928,59.539719000000105],[-77.724716000000001,59.593880000000013],[-77.755004999999926,59.628326000000072],[-77.762786999999889,59.631378000000041],[-77.767501999999922,59.634994999999947],[-77.797774999999945,59.670272999999952],[-77.801102000000014,59.675270000000069],[-77.798614999999927,59.679993000000081],[-77.773894999999982,59.709717000000069],[-77.761672999999973,59.709991000000002],[-77.731948999999986,59.70777099999998],[-77.710555999999883,59.704712000000029],[-77.585228000000029,59.66921200000013],[-77.53988599999991,59.653381000000138],[-77.535392999999942,59.651379000000077],[-77.524390999999923,59.644714000000135],[-77.518889999999885,59.639381000000128],[-77.513229000000024,59.630546999999979],[-77.513725000000022,59.620215999999971],[-77.514893000000029,59.614044000000035],[-77.464721999999995,59.587212000000022],[-77.460006999999962,59.582771000000093],[-77.454177999999956,59.579162999999994],[-77.444992000000013,59.576385000000016],[-77.426940999999943,59.571381000000031],[-77.353607000000011,59.563605999999936],[-77.322509999999909,59.562767000000008],[-77.313889000000017,59.564995000000124],[-77.311935000000005,59.566939999999931],[-77.316956000000005,59.56999200000007],[-77.344161999999983,59.576942000000088],[-77.427994000000012,59.619049000000075],[-77.433334000000002,59.620543999999938],[-77.441665999999998,59.624717999999973],[-77.502335000000016,59.678215000000023],[-77.542496000000028,59.747490000000084],[-77.541945999999996,59.750274999999931],[-77.533065999999963,59.754714999999976],[-77.432769999999948,59.784163999999976],[-77.412780999999939,59.787773000000129],[-77.389449999999954,59.788886999999932],[-77.333618000000001,59.78527100000008],[-77.311660999999958,59.785552999999936],[-77.30471799999998,59.787216000000058],[-77.298889000000031,59.789719000000048],[-77.293609999999887,59.793610000000115],[-77.296111999999937,59.801933000000076],[-77.301392000000021,59.811104],[-77.363616999999863,59.890830999999991],[-77.368056999999965,59.894714000000079],[-77.378051999999968,59.901382000000069],[-77.385559000000001,59.904433999999981],[-77.427489999999977,59.914710999999954],[-77.206954999999994,60.042770000000019],[-77.070006999999919,60.064156000000082],[-76.848052999999936,60.099159000000043],[-76.775833000000034,60.131659999999954],[-76.770843999999954,60.136383000000137],[-76.758895999999993,60.159157000000107],[-76.808608999999933,60.159714000000008],[-76.828339000000028,60.157493999999986],[-76.846114999999998,60.152214000000129],[-76.852492999999981,60.148330999999985],[-76.857772999999952,60.143883000000017],[-76.860549999999932,60.137771999999984],[-76.857498000000021,60.132767000000115],[-76.854172000000005,60.121658000000025],[-76.85943599999996,60.116936000000123],[-76.866942999999992,60.113883999999985],[-76.889724999999999,60.112495000000024],[-76.924437999999896,60.111664000000019],[-76.950561999999934,60.112213000000111],[-76.962783999999999,60.113608999999997],[-77.00389100000001,60.121933000000013],[-77.031386999999881,60.129714999999976],[-77.055556999999965,60.138602999999989],[-77.074172999999973,60.142769000000044],[-77.111938000000009,60.146942000000024],[-77.173888999999974,60.150268999999923],[-77.187499999999943,60.150826000000052],[-77.199996999999939,60.150826000000052],[-77.199722000000008,60.145270999999923],[-77.194716999999969,60.129158000000075],[-77.232498000000021,60.053879000000109],[-77.272781000000009,60.039993000000095],[-77.315825999999959,60.030548000000067],[-77.519164999999987,60.044159000000036],[-77.540282999999988,60.048050000000103],[-77.557219999999973,60.052773000000059],[-77.592223999999987,60.064156000000082],[-77.600280999999939,60.108604000000128],[-77.595275999999899,60.112495000000024],[-77.581680000000006,60.118881000000101],[-77.558043999999938,60.126656000000025],[-77.549164000000019,60.129158000000075],[-77.496947999999918,60.156097000000045],[-77.470276000000013,60.213325999999995],[-77.473617999999931,60.216934000000094],[-77.602782999999931,60.329994000000056],[-77.639724999999942,60.362213000000054],[-77.647506999999905,60.365273000000116],[-77.658339999999953,60.368050000000039],[-77.683060000000012,60.367767000000072],[-77.692489999999964,60.369438000000116],[-77.708344000000011,60.375824000000023],[-77.743606999999997,60.393326000000059],[-77.747222999999963,60.396942000000138],[-77.747756999999922,60.408134000000132],[-77.740829000000019,60.423607000000004],[-77.736937999999952,60.428879000000109],[-77.71945199999999,60.447211999999979],[-77.691939999999931,60.466660000000104],[-77.567504999999926,60.529716000000008],[-77.479995999999915,60.54055000000011],[-77.430832000000009,60.540275999999949],[-77.419723999999917,60.541107000000011],[-77.413329999999974,60.544159000000093],[-77.436385999999914,60.554436000000067],[-77.464447000000007,60.561935000000062],[-77.486114999999927,60.56638300000003],[-77.521666999999979,60.570274000000097],[-77.549438000000009,60.571381000000031],[-77.573623999999938,60.570549000000085],[-77.598617999999931,60.563606000000107],[-77.631942999999978,60.551933000000076],[-77.640563999999983,60.550270000000012],[-77.65055799999999,60.548882000000049],[-77.670273000000009,60.549721000000034],[-77.680831999999953,60.552216000000044],[-77.704453000000001,60.561661000000129],[-77.787216000000001,60.59665700000005],[-77.829453000000001,60.633605999999929],[-77.833892999999932,60.639434999999992],[-77.831679999999949,60.644714000000135],[-77.821670999999867,60.651931999999931],[-77.775832999999977,60.671104000000128],[-77.722504000000015,60.69193300000012],[-77.716399999999965,60.694434999999999],[-77.610001000000011,60.755554000000075],[-77.515839000000028,60.830551000000014],[-77.512512000000015,60.833602999999925],[-77.511672999999973,60.83638000000002],[-77.53195199999999,60.835266000000047],[-77.571670999999981,60.828330999999991],[-77.708054000000004,60.795547000000113],[-77.856383999999935,60.764442000000088],[-77.920546999999999,60.791382000000112],[-77.903885000000002,60.812492000000077],[-77.889998999999989,60.818886000000134],[-77.883330999999941,60.823325999999952],[-77.887222000000008,60.825829000000113],[-77.896392999999875,60.828049000000135],[-77.909163999999976,60.82888000000014],[-77.975280999999939,60.822769000000051],[-78.078612999999905,60.806099000000131],[-78.116942999999992,60.798050000000103],[-78.125823999999966,60.795547000000113],[-78.172500999999954,60.787216000000058],[-78.17971799999998,60.786942000000124],[-78.18638599999997,60.788047999999947],[-78.190552000000025,60.788887000000102],[-78.192764000000011,60.790833000000021],[-78.171660999999915,60.854713000000061],[-78.15943900000002,60.867210000000057],[-77.954726999999991,61.000831999999946],[-77.925551999999925,61.01888300000013],[-77.889175000000023,61.038048000000117],[-77.873610999999926,61.045547000000056],[-77.858046999999942,61.051101999999958],[-77.853881999999942,61.052215999999987],[-77.846664000000033,61.052490000000091],[-77.701675000000023,61.217491000000109],[-77.724441999999954,61.254439999999988],[-77.739990000000034,61.298607000000061],[-77.746658000000025,61.337494000000106],[-77.761123999999938,61.410271000000023],[-77.678878999999995,61.461104999999975],[-77.620834000000002,61.462493999999992],[-77.56361400000003,61.466660000000047],[-77.560546999999929,61.468047999999953],[-77.542496000000028,61.479430999999977],[-77.543335000000013,61.483047000000056],[-77.548339999999939,61.486107000000118],[-77.613892000000021,61.504166000000055],[-77.596114999999941,61.555824000000143],[-77.572784000000013,61.549995000000138],[-77.517226999999934,61.539719000000048],[-77.478607000000011,61.536385000000053],[-77.475005999999951,61.539161999999976],[-77.474715999999944,61.541664000000026],[-77.480285999999921,61.548882000000049],[-77.581389999999999,61.600548000000117],[-77.589171999999962,61.604439000000013],[-77.616500999999971,61.606327000000078],[-77.627997999999991,61.605995000000121],[-77.667496000000028,61.603049999999996],[-77.690825999999959,61.602218999999991],[-77.702498999999989,61.602776000000063],[-77.710555999999883,61.60582700000009],[-77.744155999999975,61.64027400000009],[-77.816665999999998,61.684989999999914],[-77.884445000000028,61.68582200000003],[-77.898894999999925,61.686378000000047],[-77.931380999999931,61.69193300000012],[-77.975829999999974,61.702774000000034],[-77.982223999999974,61.70665699999995],[-77.992492999999968,61.714714000000129],[-78.00306699999993,61.728325000000098],[-78.006119000000012,61.733046999999999],[-78.011947999999961,61.748604000000057],[-78.074447999999904,61.917213000000004],[-78.077498999999989,61.940544000000045],[-78.081389999999999,61.951103000000103],[-78.091675000000009,61.965271000000143],[-78.110001000000011,61.984161000000086],[-78.120269999999948,61.99193600000001],[-78.137787000000003,62.009163000000001],[-78.141387999999949,62.020546000000024],[-78.143616000000009,62.03138000000007],[-78.15943900000002,62.149994000000049],[-78.161666999999966,62.169159000000036],[-78.157776000000013,62.267494000000056],[-78.15583799999996,62.278328000000101],[-78.149733999999967,62.287216000000114],[-78.103058000000033,62.337494000000049],[-78.085007000000019,62.353325000000041],[-78.023894999999982,62.393326000000059],[-78.016402999999968,62.39388300000013],[-78.008056999999894,62.390549000000135],[-77.996657999999968,62.388046000000145],[-77.983063000000016,62.388329000000113],[-77.96305799999999,62.392768999999987],[-77.711394999999925,62.468048000000124],[-77.687209999999993,62.476654000000053],[-77.555556999999965,62.536110000000008],[-77.535278000000005,62.54694400000011],[-77.508347000000015,62.561661000000072],[-77.354996000000028,62.558044000000109],[-77.073623999999938,62.534163999999976],[-76.92582699999997,62.526382000000012],[-76.756957999999997,62.506943000000092],[-76.746947999999975,62.504997000000003],[-76.655562999999972,62.469986000000063],[-76.498610999999869,62.44110100000006],[-76.401947000000007,62.427490000000091],[-76.317779999999914,62.412209000000132],[-76.143065999999919,62.379158000000018],[-75.709732000000031,62.296387000000038],[-75.719214999999963,62.242493000000024],[-75.739562999999919,62.236160000000041],[-75.819884999999999,62.205657999999971],[-75.878875999999991,62.168602000000135],[-75.891113000000018,62.161933999999974],[-75.895003999999915,62.158599999999979],[-75.890839000000028,62.156937000000084],[-75.835830999999985,62.158043000000077],[-75.826949999999954,62.158882000000062],[-75.772399999999948,62.177215999999987],[-75.770720999999924,62.180049999999994],[-75.765052999999909,62.184718999999973],[-75.760887000000025,62.187050000000113],[-75.756057999999882,62.188713000000007],[-75.705062999999996,62.203216999999995],[-75.656882999999993,62.216544999999996],[-75.579177999999899,62.242218000000037],[-75.573897999999929,62.244155999999975],[-75.556945999999925,62.252777000000037],[-75.552779999999927,62.256660000000011],[-75.550277999999935,62.260826000000066],[-75.539443999999889,62.268326000000002],[-75.493606999999997,62.293326999999977],[-75.486937999999952,62.296387000000038],[-75.478881999999999,62.298607000000061],[-75.472777999999948,62.299438000000066],[-75.402221999999938,62.306381000000044],[-75.356383999999991,62.310546999999985],[-75.321945000000028,62.311104000000057],[-75.307495000000017,62.310271999999941],[-75.184432999999956,62.292220999999984],[-75.015563999999983,62.264999000000046],[-75,62.262245000000064],[-74.938323999999909,62.250274999999988],[-74.918610000000001,62.245544000000052],[-74.89805599999994,62.240273000000002],[-74.889998999999989,62.237495000000024],[-74.882216999999912,62.233604000000128],[-74.873885999999857,62.226097000000038],[-74.767226999999878,62.161102000000085],[-74.700835999999867,62.131104000000107],[-74.693054000000018,62.127769000000058],[-74.668883999999991,62.119156000000089],[-74.620833999999888,62.107215999999994],[-74.598052999999936,62.104164000000083],[-74.571670999999981,62.10305000000011],[-74.556380999999988,62.104713000000004],[-74.553054999999972,62.106102000000021],[-74.553878999999995,62.108046999999999],[-74.558608999999876,62.111938000000066],[-74.618880999999931,62.132492000000013],[-74.662216000000001,62.146660000000054],[-74.686110999999983,62.155823000000055],[-74.700287000000003,62.16276600000009],[-74.75111400000003,62.19110100000006],[-74.758895999999993,62.199158000000068],[-74.759734999999921,62.20138500000013],[-74.759734999999921,62.20638300000013],[-74.756393000000003,62.212212000000136],[-74.725829999999917,62.244995000000131],[-74.717498999999918,62.247771999999998],[-74.700287000000003,62.250832000000059],[-74.678328999999962,62.253608999999983],[-74.645844000000011,62.253608999999983],[-74.579453000000001,62.251938000000109],[-74.525833000000034,62.246940999999993],[-74.473617999999931,62.24332400000003],[-74.461394999999982,62.243880999999931],[-74.428878999999938,62.247771999999998],[-74.410004000000015,62.251389000000131],[-74.383895999999936,62.2586060000001],[-74.141677999999956,62.326660000000004],[-73.981383999999991,62.377769000000001],[-73.97444200000001,62.386108000000036],[-73.969727000000034,62.390830999999991],[-73.94027699999998,62.412209000000132],[-73.888901000000033,62.440543999999932],[-73.83805799999999,62.457497000000046],[-73.688048999999978,62.479988000000048],[-73.678878999999995,62.479988000000048],[-73.65972899999997,62.475265999999976],[-73.648345999999947,62.468322999999998],[-73.642501999999922,62.463608000000136],[-73.502791999999999,62.386658000000068],[-73.369995000000017,62.363609000000054],[-73.227218999999877,62.318054000000075],[-73.211394999999925,62.312767000000008],[-73.206664999999987,62.308884000000035],[-73.204178000000013,62.303878999999995],[-73.202788999999996,62.298882000000106],[-73.207229999999925,62.285828000000038],[-73.210280999999952,62.281936999999971],[-73.210830999999985,62.275826000000052],[-73.209732000000031,62.270828000000051],[-73.204178000000013,62.261382999999967],[-73.191939999999875,62.253608999999983],[-73.178054999999972,62.246101000000124],[-73.131942999999978,62.225266000000033],[-73.070006999999976,62.197487000000024],[-72.899445000000014,62.138328999999999],[-72.723891999999921,62.142220000000066],[-72.626663000000008,62.115547000000049],[-72.61721799999998,62.108604000000071],[-72.596114999999884,62.049164000000019],[-72.618713000000014,61.974212999999963],[-72.619888000000003,61.970878999999968],[-72.665717999999913,61.928382999999997],[-72.689986999999917,61.891936999999984],[-72.748610999999983,61.856384000000105],[-72.724716000000001,61.845267999999976],[-72.612503000000004,61.804993000000081],[-72.602782999999931,61.804160999999965],[-72.596114999999884,61.805549999999982],[-72.591674999999952,61.809989999999971],[-72.587783999999886,61.82027400000004],[-72.622771999999941,61.861382000000106],[-72.628875999999991,61.873047000000042],[-72.609557999999993,61.88771400000013],[-72.610893000000033,61.893714999999986],[-72.611397000000011,61.900047000000086],[-72.610222000000022,61.905380000000093],[-72.607551999999998,61.910049000000015],[-72.597548999999958,61.920211999999992],[-72.593886999999995,61.92321400000003],[-72.587226999999984,61.924376999999993],[-72.581222999999966,61.923378000000127],[-72.519729999999925,61.920546999999999],[-72.448607999999979,61.901382000000012],[-72.396666999999923,61.889435000000049],[-72.386948000000018,61.887771999999984],[-72.345551,61.884437999999989],[-72.321945000000028,61.883881000000088],[-72.256957999999997,61.876938000000109],[-72.235001000000011,61.872215000000097],[-72.205840999999964,61.86332700000014],[-72.200835999999924,61.860275000000001],[-72.041381999999999,61.722488000000112],[-72.01005600000002,61.675270000000012],[-72.038054999999986,61.624709999999993],[-72.080565999999976,61.601936000000023],[-72.087783999999999,61.598877000000073],[-72.095839999999953,61.596099999999979],[-72.113892000000021,61.595543000000077],[-72.12388599999997,61.596382000000006],[-72.160004000000015,61.605270000000019],[-72.194153000000028,61.615829000000076],[-72.227492999999981,61.619987000000037],[-72.236663999999962,61.619438000000059],[-72.254456000000005,61.615546999999992],[-72.271118000000001,61.609161000000086],[-72.303328999999906,61.570830999999998],[-72.303878999999938,61.568885999999964],[-72.303328999999906,61.56721500000009],[-72.083618000000001,61.582496999999933],[-72.057220000000029,61.586655000000064],[-71.980285999999978,61.599998000000085],[-71.978333000000021,61.601387000000102],[-71.967772999999966,61.609436000000073],[-71.940825999999959,61.648331000000042],[-71.936660999999958,61.65554800000001],[-71.933608999999933,61.663605000000132],[-71.933060000000012,61.668602000000078],[-71.933884000000035,61.674164000000019],[-71.936660999999958,61.677773000000002],[-71.941375999999991,61.681106999999997],[-71.946884000000011,61.688380999999993],[-71.950385999999867,61.688713000000121],[-71.953888000000006,61.690716000000123],[-71.956557999999916,61.693047000000092],[-71.956885999999884,61.694213999999988],[-71.956054999999935,61.698883000000137],[-71.950546000000031,61.701218000000097],[-71.948883000000023,61.701549999999997],[-71.945221000000004,61.701714000000095],[-71.928878999999995,61.705826000000116],[-71.819457999999941,61.688599000000124],[-71.795273000000009,61.682213000000047],[-71.644729999999925,61.639435000000105],[-71.575011999999901,61.608604000000014],[-71.571670999999867,61.605552999999986],[-71.545546999999999,61.571938000000102],[-71.546111999999937,61.566940000000102],[-71.549437999999896,61.558884000000035],[-71.560271999999941,61.557212999999933],[-71.629714999999976,61.548607000000061],[-71.635009999999966,61.545830000000137],[-71.652221999999995,61.543053000000043],[-71.663054999999929,61.54193900000007],[-71.751113999999973,61.538048000000003],[-71.789444000000003,61.521934999999928],[-71.746384000000035,61.47137500000008],[-71.746947999999975,61.465827999999988],[-71.802779999999984,61.446938000000046],[-71.817504999999983,61.442764000000011],[-71.875548999999921,61.436103999999943],[-71.885558999999944,61.432769999999948],[-71.887787000000003,61.430824000000086],[-71.887511999999958,61.428046999999992],[-71.879439999999988,61.422492999999974],[-71.873046999999929,61.419716000000108],[-71.853333000000021,61.414436000000023],[-71.700561999999991,61.405823000000055],[-71.684722999999963,61.404990999999939],[-71.676101999999958,61.37221500000004],[-71.67193599999996,61.330551000000128],[-71.598891999999978,61.254166000000055],[-71.53083799999996,61.213608000000022],[-71.389998999999989,61.137772000000098],[-71.295836999999892,61.148605000000089],[-71.286666999999909,61.149719000000061],[-71.279175000000009,61.151100000000099],[-71.174712999999997,61.13999200000012],[-71.011397999999986,61.121657999999968],[-70.966948999999943,61.113883999999985],[-70.945830999999941,61.108887000000095],[-70.928329000000019,61.102493000000038],[-70.921936000000017,61.09693900000002],[-70.921386999999982,61.09137700000008],[-70.773330999999985,61.08166499999993],[-70.656386999999995,61.050545000000056],[-70.553054999999972,61.024994000000049],[-70.539718999999991,61.055824000000086],[-70.535278000000005,61.05943300000007],[-70.419998000000021,61.08526599999999],[-70.41361999999998,61.086655000000007],[-70.315551999999911,61.094994000000042],[-70.165008999999998,61.088043000000084],[-70.146117999999888,61.084717000000069],[-70.141387999999949,61.08277099999998],[-70.107223999999917,61.064438000000109],[-70.085830999999985,60.954993999999999],[-70.088057999999876,60.89777400000014],[-69.927490000000034,60.807770000000005],[-69.914444000000003,60.80860100000001],[-69.901107999999965,60.81221000000005],[-69.888061999999934,60.819160000000068],[-69.856383999999991,60.838326000000109],[-69.850554999999986,60.841934000000037],[-69.84973100000002,60.846656999999993],[-69.851395000000025,60.849716000000001],[-69.858886999999982,60.851936000000023],[-69.869445999999925,60.850829999999974],[-69.883620999999948,60.845268000000033],[-69.894729999999925,60.855552999999929],[-69.833327999999995,60.889992000000007],[-69.826110999999969,60.893326000000002],[-69.778885000000002,60.91137700000013],[-69.756957999999941,60.918884000000105],[-69.750838999999928,60.919715999999994],[-69.741104000000007,60.9180530000001],[-69.738051999999925,60.915543000000071],[-69.743332000000009,60.906936999999971],[-69.75140399999998,60.898879999999963],[-69.750564999999995,60.894440000000145],[-69.74610899999999,60.884720000000073],[-69.740554999999972,60.881377999999927],[-69.71055599999994,60.873878000000047],[-69.688599000000011,60.871658000000025],[-69.677215999999987,60.871101000000124],[-69.658614999999998,60.876938000000109],[-69.649993999999879,60.8836060000001],[-69.645843999999954,60.893051000000128],[-69.643889999999942,60.903320000000008],[-69.649169999999913,60.913879000000065],[-69.655563000000029,60.9222180000001],[-69.671660999999915,60.934433000000013],[-69.680831999999953,60.943047000000035],[-69.688599000000011,60.951660000000004],[-69.689437999999882,60.956100000000049],[-69.689712999999983,60.96166199999999],[-69.680557000000022,61.014159999999947],[-69.679442999999935,61.019440000000031],[-69.676665999999955,61.025551000000121],[-69.656661999999926,61.053604000000064],[-69.653884999999946,61.056938000000059],[-69.613051999999925,61.079163000000051],[-69.599990999999989,61.081940000000145],[-69.554168999999945,61.080550999999957],[-69.528609999999958,61.076385000000073],[-69.519729999999925,61.073326000000122],[-69.514450000000011,61.069442999999978],[-69.511397999999929,61.06610100000006],[-69.508347000000015,61.060822000000087],[-69.492767000000015,61.031937000000028],[-69.468886999999995,60.994995000000017],[-69.465285999999935,60.990273000000116],[-69.453613000000018,60.974991000000045],[-69.368057000000022,60.903046000000074],[-69.368606999999997,60.811104],[-69.371933000000013,60.80443600000001],[-69.380554000000018,60.794716000000108],[-69.386672999999973,60.790550000000053],[-69.404448999999943,60.783332999999914],[-69.421386999999925,60.778046000000018],[-69.438598999999954,60.774994000000049],[-69.496657999999968,60.764442000000088],[-69.533065999999963,60.757217000000026],[-69.591675000000009,60.739158999999972],[-69.615829000000019,60.730270000000075],[-69.708618000000001,60.686935000000119],[-69.716109999999958,60.682770000000119],[-69.71055599999994,60.675270000000069],[-69.705001999999979,60.671936000000073],[-69.695830999999998,60.663879000000065],[-69.656386999999995,60.595543000000077],[-69.654174999999952,60.584991000000116],[-69.654174999999952,60.581383000000017],[-69.656951999999933,60.574715000000026],[-69.6875,60.551383999999985],[-69.693603999999937,60.54694400000011],[-69.702224999999885,60.544440999999949],[-69.748610999999983,60.539719000000048],[-69.797774999999945,60.53443900000002],[-69.813888999999904,60.530548000000124],[-69.822234999999978,60.52777100000003],[-69.826110999999969,60.525551000000007],[-69.824448000000018,60.522490999999945],[-69.787506000000008,60.480545000000006],[-69.78443900000002,60.478043000000071],[-69.778335999999967,60.475266000000033],[-69.762222000000008,60.470268000000033],[-69.74888599999997,60.461662000000103],[-69.721664000000033,60.368881000000044],[-69.722504000000015,60.364158999999972],[-69.727782999999988,60.35193600000008],[-69.744445999999982,60.340546000000018],[-69.751953000000015,60.336380000000133],[-69.756667999999934,60.331940000000145],[-69.764724999999999,60.323607999999979],[-69.766952999999944,60.318328999999949],[-69.768065999999862,60.312210000000107],[-69.764724999999999,60.307495000000074],[-69.758895999999993,60.304710000000057],[-69.696380999999974,60.278877000000136],[-69.606383999999991,60.232765000000029],[-69.605269999999905,60.2227630000001],[-69.605835000000013,60.218596999999988],[-69.610001000000011,60.208327999999995],[-69.614166000000012,60.202492000000063],[-69.636977999999999,60.179047000000025],[-69.601943999999946,60.183052000000089],[-69.594161999999983,60.180824000000143],[-69.593886999999995,60.175827000000027],[-69.603606999999954,60.10305000000011],[-69.624709999999993,60.067497000000117],[-69.636948000000018,60.065268999999944],[-69.706664999999987,60.057495000000131],[-69.837218999999948,60.019713999999965],[-69.892226999999934,59.99971800000003],[-70.217223999999931,60.007216999999969],[-70.296393999999907,60.011196000000041],[-70.336120999999935,60.004440000000102],[-70.488051999999868,59.993607000000111],[-70.505004999999926,59.992493000000138],[-70.53472899999997,59.991936000000067],[-70.556945999999925,59.992767000000072],[-70.579726999999934,59.994712999999933],[-70.593062999999972,59.996658000000139],[-70.770844000000011,60.028046000000131],[-70.945830999999941,60.063048999999978],[-70.900283999999999,60.040276000000063],[-70.631103999999993,59.985824999999977],[-70.610549999999932,59.980820000000108],[-70.585007000000019,59.971931000000041],[-70.566955999999948,59.968597000000045],[-70.507232999999985,59.96665999999999],[-70.475829999999974,59.968323000000112],[-70.33805799999999,59.976379000000009],[-70.236938000000009,59.986938000000066],[-70.227218999999934,59.986655999999982],[-70.218613000000005,59.984160999999972],[-70.197495000000004,59.974158999999986],[-70.164718999999991,59.962494000000106],[-70.112503000000004,59.949715000000026],[-70.086120999999991,59.946381000000088],[-70.06138599999997,59.94499200000007],[-70.049987999999871,59.945267000000058],[-70.030837999999903,59.948043999999982],[-69.947768999999994,59.958885000000123],[-69.758895999999993,59.96776600000004],[-69.726944000000003,59.963608000000079],[-69.718886999999938,59.959717000000012],[-69.600554999999872,59.833054000000004],[-69.605559999999912,59.777214000000129],[-69.610001000000011,59.728600000000142],[-69.540833000000021,59.671104000000014],[-69.604995999999971,59.588325999999995],[-69.61332699999997,59.588325999999995],[-69.62777699999998,59.583878000000027],[-69.658889999999985,59.572495000000004],[-69.679442999999935,59.563605999999936],[-69.698043999999982,59.553047000000106],[-69.718613000000005,59.537773000000016],[-69.729720999999927,59.52777100000003],[-69.748336999999935,59.50999500000006],[-69.759445000000028,59.493880999999988],[-69.761123999999938,59.484161000000086],[-69.759445000000028,59.481102000000078],[-69.756393000000003,59.478600000000029],[-69.728333000000021,59.479713000000118],[-69.703888000000006,59.481934000000024],[-69.698607999999922,59.481377000000123],[-69.697495000000004,59.480545000000006],[-69.669448999999929,59.455551000000014],[-69.665832999999964,59.451659999999947],[-69.649445000000014,59.428879000000109],[-69.645279000000016,59.419159000000036],[-69.631667999999877,59.377769000000058],[-69.631377999999927,59.374992000000134],[-69.639998999999875,59.361107000000061],[-69.646392999999989,59.358887000000038],[-69.677779999999927,59.356941000000006],[-69.736664000000019,59.345267999999976],[-69.744155999999975,59.343322999999998],[-69.75778200000002,59.330826000000002],[-69.758347000000015,59.320273999999984],[-69.75111400000003,59.311104000000114],[-69.746947999999861,59.307770000000119],[-69.738601999999958,59.305266999999958],[-69.645003999999915,59.29833200000013],[-69.631103999999993,59.298881999999992],[-69.626663000000008,59.29972100000009],[-69.616393999999957,59.304436000000123],[-69.550277999999992,59.329720000000123],[-69.445830999999998,59.35443900000007],[-69.43582200000003,59.3555530000001],[-69.412506000000008,59.354995999999971],[-69.259445000000028,59.326660000000061],[-69.249724999999955,59.323607999999979],[-69.238327000000027,59.259720000000129],[-69.235001000000011,59.23943300000002],[-69.234725999999966,59.233879000000059],[-69.238051999999925,59.229431000000091],[-69.244445999999982,59.224433999999974],[-69.285827999999924,59.208327999999995],[-69.366394000000014,59.190826000000129],[-69.37388599999997,59.189430000000073],[-69.404998999999975,59.190269000000058],[-69.419158999999979,59.192490000000134],[-69.420272999999952,59.196098000000063],[-69.417496000000028,59.202217000000076],[-69.414443999999946,59.212494000000049],[-69.416655999999989,59.219711000000018],[-69.420837000000006,59.223045000000013],[-69.429717999999923,59.224709000000018],[-69.439437999999996,59.224433999999974],[-69.448607999999979,59.2227630000001],[-69.470276000000013,59.213882000000012],[-69.512222000000008,59.192764000000068],[-69.530562999999972,59.18221299999999],[-69.537505999999894,59.172493000000088],[-69.540282999999988,59.166381999999999],[-69.541107000000011,59.161659000000043],[-69.537215999999944,59.123047000000042],[-69.533065999999963,59.110825000000034],[-69.527785999999992,59.106658999999979],[-69.52055399999989,59.104439000000127],[-69.511397999999929,59.103324999999984],[-69.505568999999923,59.104163999999969],[-69.49499499999996,59.109993000000145],[-69.484436000000017,59.121375999999998],[-69.474716000000001,59.128043999999932],[-69.46305799999999,59.12943300000012],[-69.453887999999949,59.128326000000015],[-69.384170999999981,59.118880999999931],[-69.367492999999911,59.116386000000091],[-69.359725999999966,59.112770000000069],[-69.349166999999909,59.104996000000028],[-69.345276000000013,59.095543000000021],[-69.344161999999983,59.091103000000032],[-69.352782999999988,59.080826000000059],[-69.431945999999982,59.025269000000094],[-69.466110000000015,59.044159000000036],[-69.493331999999953,59.037498000000085],[-69.475280999999939,58.971931000000041],[-69.457503999999915,58.915824999999984],[-69.454726999999991,58.90638000000007],[-69.453887999999949,58.895828000000108],[-69.454177999999956,58.892220000000009],[-69.456389999999999,58.884163000000001],[-69.460006999999962,58.878876000000105],[-69.547500999999897,58.808043999999995],[-69.557495000000017,58.80360399999995],[-69.587783999999942,58.796660999999972],[-69.611114999999984,58.792220999999984],[-69.656386999999995,58.787773000000016],[-69.670836999999949,58.792220999999984],[-69.680831999999953,58.800269999999955],[-69.711944999999957,58.848877000000073],[-69.714721999999938,58.85833000000008],[-69.716109999999958,58.864715999999987],[-69.702788999999996,58.876381000000094],[-69.672226000000023,58.89138000000014],[-69.668610000000001,58.899437000000091],[-69.668334999999956,58.902771000000087],[-69.668334999999956,58.92582700000014],[-69.671660999999915,58.930550000000096],[-69.709441999999967,58.972762999999986],[-69.848342999999943,59.047217999999987],[-69.865279999999927,59.052773000000059],[-69.869155999999919,59.053046999999992],[-69.872771999999998,59.050827000000027],[-69.87388599999997,59.041107000000125],[-69.874160999999958,59.034163999999919],[-69.87388599999997,59.02915999999999],[-69.865554999999972,58.977768000000026],[-69.832779000000016,58.951660000000061],[-69.815826000000015,58.82388300000008],[-69.972777999999892,58.808601000000067],[-70.153610000000015,58.777488999999946],[-70.158889999999985,58.761107999999979],[-70.049728000000016,58.743606999999997],[-69.974716000000001,58.755554000000132],[-69.931106999999997,58.733047000000056],[-69.910552999999936,58.68804200000011],[-69.864440999999999,58.617493000000138],[-69.861663999999962,58.614998000000128],[-69.818892999999946,58.588599999999985],[-69.813048999999921,58.589157000000057],[-69.799437999999952,58.59887700000013],[-69.793335000000013,58.603881999999999],[-69.724441999999954,58.668883999999991],[-69.625,58.743881000000101],[-69.608046999999999,58.754714999999976],[-69.581680000000006,58.765831000000105],[-69.570847000000015,58.769440000000145],[-69.544723999999974,58.773323000000062],[-69.507507000000032,58.774712000000079],[-69.498885999999857,58.778602999999919],[-69.445540999999878,58.808327000000133],[-69.418883999999878,58.825553999999954],[-69.411666999999966,58.830276000000026],[-69.410277999999948,58.83998900000006],[-69.405838000000017,58.850273000000129],[-69.394729999999925,58.856659000000036],[-69.381942999999922,58.861381999999992],[-69.348891999999978,58.871658000000082],[-69.279175000000009,58.888046000000145],[-69.153884999999946,58.899993999999992],[-69.129989999999964,58.901657000000114],[-69.098343,58.899162000000103],[-69.031676999999888,58.893326000000002],[-68.99221799999998,58.883880999999974],[-68.841675000000009,58.891106000000036],[-68.756957999999997,58.912490999999989],[-68.656386999999938,58.900269000000037],[-68.637512000000015,58.896659999999997],[-68.601668999999958,58.885826000000122],[-68.396392999999989,58.816101000000117],[-68.390686000000017,58.811707000000013],[-68.360549999999932,58.781936999999914],[-68.355835000000013,58.774437000000034],[-68.357772999999952,58.764717000000132],[-68.360275000000001,58.759437999999989],[-68.366393999999957,58.687492000000077],[-68.34584000000001,58.626937999999996],[-68.323059000000001,58.58526599999999],[-68.290832999999907,58.541107000000011],[-68.216659999999933,58.490829000000076],[-68.209732000000031,58.462494000000049],[-68.204726999999991,58.453323000000069],[-68.203063999999983,58.441658000000018],[-68.204178000000013,58.436935000000062],[-68.226943999999946,58.376380999999981],[-68.244720000000029,58.33776899999998],[-68.256667999999991,58.323607999999979],[-68.285827999999924,58.294998000000135],[-68.289992999999924,58.28916200000009],[-68.309157999999911,58.253326000000072],[-68.322509999999966,58.22693600000008],[-68.34584000000001,58.169991000000039],[-68.348052999999936,58.159714000000065],[-68.347777999999948,58.15387700000008],[-68.344161999999983,58.141663000000051],[-68.341385000000002,58.133331000000055],[-68.344161999999983,58.127487000000087],[-68.350554999999929,58.12193300000007],[-68.46665999999999,58.045546999999942],[-68.477218999999934,58.039992999999981],[-68.503615999999909,58.031380000000013],[-68.528609999999958,58.029434000000094],[-68.729889000000014,57.99971800000003],[-68.874161000000015,57.969154000000003],[-69.127212999999983,57.899436999999921],[-69.135009999999909,57.896942000000081],[-69.181380999999988,57.878044000000045],[-69.202498999999989,57.868599000000131],[-69.221389999999928,57.858886999999982],[-69.262511999999958,57.833603000000039],[-69.357773000000009,57.774162000000047],[-69.369048999999961,57.765251000000092],[-69.363892000000021,57.765830999999935],[-69.339721999999938,57.773323000000062],[-69.304992999999968,57.786659000000043],[-69.298339999999996,57.789436000000137],[-69.210280999999952,57.829437000000098],[-69.190825999999959,57.840546000000018],[-69.172775000000001,57.851661999999976],[-69.111937999999896,57.885825999999952],[-68.965285999999878,57.933875999999998],[-68.904175000000009,57.949715000000083],[-68.695723999999984,57.987713000000099],[-68.678894000000014,57.989716000000101],[-68.667388999999957,57.990383000000008],[-68.634720000000016,57.988879999999995],[-68.62239099999988,57.989379999999983],[-68.545272999999952,58.000549000000035],[-68.495833999999945,58.013328999999999],[-68.416945999999939,58.034439000000134],[-68.404175000000009,58.039719000000048],[-68.31361400000003,58.103049999999996],[-68.308883999999978,58.108047000000113],[-68.304992999999911,58.113884000000041],[-68.302490000000034,58.119155999999975],[-68.299987999999928,58.127487000000087],[-68.300277999999878,58.132492000000127],[-68.30471799999998,58.146384999999952],[-68.305557000000022,58.149993999999992],[-68.307220000000029,58.164436000000137],[-68.306106999999997,58.181106999999997],[-68.305267000000015,58.186104000000057],[-68.301102000000014,58.198043999999982],[-68.295273000000009,58.209991000000116],[-68.284164000000033,58.219986000000063],[-68.230835000000013,58.26888300000013],[-68.18582200000003,58.360549999999989],[-68.168335000000013,58.414711000000125],[-68.166655999999989,58.424438000000066],[-68.166945999999996,58.435822000000144],[-68.169998000000021,58.446655000000135],[-68.172775000000001,58.454993999999999],[-68.178054999999972,58.469711000000132],[-68.178329000000019,58.480270000000019],[-68.171386999999925,58.489990000000091],[-68.139175000000023,58.521103000000096],[-68.135009999999852,58.524162000000047],[-68.013061999999991,58.573607999999922],[-68.003341999999975,58.576385000000016],[-67.983321999999987,58.573051000000021],[-67.969161999999983,58.565826000000015],[-67.959166999999979,58.558044000000052],[-67.896118000000001,58.500548999999978],[-67.893889999999999,58.496658000000082],[-67.892226999999991,58.491379000000109],[-67.891953000000001,58.483604000000014],[-67.895003999999915,58.476936000000023],[-67.901108000000022,58.467209000000082],[-67.908051,58.458046000000081],[-67.914444000000003,58.453323000000069],[-67.919448999999929,58.445540999999935],[-67.920837000000006,58.439430000000073],[-67.924163999999962,58.41276600000009],[-67.92332499999992,58.403046000000018],[-67.908339999999953,58.360825000000034],[-67.906113000000005,58.356941000000006],[-67.903610000000015,58.353607000000011],[-67.893340999999964,58.346656999999993],[-67.868056999999965,58.332214000000079],[-67.864166000000012,58.328880000000083],[-67.857498000000021,58.320273999999984],[-67.894500999999934,58.287163000000078],[-67.896659999999883,58.281158000000062],[-67.90449499999994,58.26766200000003],[-67.913329999999917,58.25616100000002],[-67.919341999999972,58.250159999999994],[-67.926330999999948,58.245491000000015],[-67.934829999999977,58.241161000000034],[-67.946999000000005,58.235992000000124],[-67.974990999999989,58.220993000000021],[-68.047501000000011,58.170547000000056],[-68.065826000000015,58.159431000000097],[-68.095839999999953,58.138602999999989],[-68.101105000000018,58.133049000000028],[-68.127486999999917,58.084717000000126],[-68.129989999999964,58.07888000000014],[-68.128325999999959,58.073608000000036],[-68.125548999999978,58.071105999999986],[-68.115828999999962,58.071938000000046],[-68.101105000000018,58.077773999999977],[-68.006667999999934,58.131935000000055],[-67.991668999999945,58.146103000000096],[-67.978333000000021,58.163605000000132],[-67.876944999999978,58.243050000000039],[-67.801392000000021,58.296661000000086],[-67.815551999999968,58.308883999999978],[-67.823897999999872,58.317215000000033],[-67.829178000000013,58.326385000000073],[-67.830565999999919,58.331383000000073],[-67.828888000000006,58.349716000000114],[-67.819732999999871,58.393608000000029],[-67.817229999999995,58.40526600000004],[-67.813323999999909,58.416100000000085],[-67.787505999999951,58.464439000000027],[-67.783066000000019,58.468048000000067],[-67.775008999999898,58.471099999999979],[-67.764450000000011,58.470543000000077],[-67.723891999999978,58.458885000000066],[-67.669448999999986,58.431938000000116],[-67.667496000000028,58.427489999999977],[-67.669998000000021,58.42193599999996],[-67.679992999999968,58.41276600000009],[-67.691939999999988,58.404433999999924],[-67.696945000000028,58.399437000000034],[-67.704726999999991,58.389160000000061],[-67.737212999999997,58.326942000000145],[-67.738892000000021,58.320831000000112],[-67.737212999999997,58.315543999999989],[-67.732497999999964,58.311661000000015],[-67.698043999999925,58.284995999999978],[-67.660827999999981,58.264442000000031],[-67.646117999999944,58.253326000000072],[-67.642775999999913,58.248604],[-67.652495999999985,58.214714000000129],[-67.654175000000009,58.210548000000017],[-67.728607000000011,57.976654000000053],[-67.713897999999858,57.923050000000046],[-67.710281000000009,57.97554800000006],[-67.708343999999954,57.982491000000039],[-67.659438999999963,58.110275000000058],[-67.653609999999958,58.122765000000015],[-67.64527899999996,58.134437999999989],[-67.591949,58.200828999999999],[-67.578339000000028,58.21527100000003],[-67.566100999999946,58.223602000000085],[-67.481383999999935,58.273880000000077],[-67.46665999999999,58.279716000000121],[-67.332779000000016,58.31610100000006],[-67.17222599999991,58.376380999999981],[-67.168609999999944,58.378044000000102],[-67.15194699999995,58.376656000000025],[-67.137512000000015,58.373046999999985],[-67.116652999999985,58.363327000000083],[-67.106948999999986,58.3555530000001],[-67.095550999999944,58.348877000000016],[-67.09056099999998,58.35054800000006],[-66.995834000000002,58.439430000000073],[-66.991669000000002,58.445267000000001],[-66.989989999999977,58.45138500000013],[-66.986664000000019,58.458046000000081],[-66.978881999999999,58.468323000000055],[-66.951401000000033,58.498603999999943],[-66.944153000000028,58.501937999999939],[-66.928054999999972,58.501663000000121],[-66.887221999999952,58.485550000000103],[-66.876937999999939,58.479156000000046],[-66.875548999999864,58.473877000000073],[-66.878052000000025,58.468596999999988],[-66.801101999999958,58.473602000000028],[-66.629714999999976,58.50360900000004],[-66.651671999999962,58.542770000000132],[-66.551940999999999,58.71138000000002],[-66.469727000000034,58.81638300000003],[-66.465012000000002,58.819992000000013],[-66.388610999999969,58.850548000000117],[-66.366652999999928,58.848044999999956],[-66.357773000000009,58.846099999999979],[-66.349990999999932,58.843048000000067],[-66.350280999999939,58.837212000000022],[-66.348891999999978,58.831940000000088],[-66.344161999999926,58.827773999999977],[-66.11471599999993,58.699714999999969],[-66.106110000000001,58.684989999999971],[-66.077224999999999,58.654434000000094],[-66.072234999999921,58.650825999999995],[-66.067779999999914,58.648880000000077],[-66.054168999999945,58.646102999999982],[-65.945540999999935,58.616936000000067],[-65.938888999999961,58.613883999999928],[-65.93582200000003,58.609718000000044],[-65.93582200000003,58.604713000000004],[-65.938598999999954,58.594437000000084],[-65.941939999999988,58.582770999999923],[-66.021941999999967,58.486938000000009],[-66.08944699999995,58.365273000000002],[-66.091385000000002,58.358887000000095],[-66.091385000000002,58.354164000000083],[-66.073059000000001,58.327217000000019],[-66.065552000000025,58.320273999999984],[-66.058883999999978,58.320273999999984],[-66.052779999999927,58.34693900000002],[-66.051392000000021,58.352493000000038],[-66.045546999999942,58.363052000000096],[-66.041671999999949,58.368050000000096],[-66.030562999999972,58.376380999999981],[-66.02305599999994,58.379714999999976],[-66.015014999999948,58.381934999999999],[-65.988051999999982,58.384437999999989],[-65.979172000000005,58.386107999999922],[-65.972777999999948,58.388046000000088],[-65.965012000000002,58.391936999999928],[-65.960280999999895,58.396103000000039],[-65.920272999999952,58.44582400000013],[-65.920837000000006,58.449432000000002],[-65.926666000000012,58.456099999999992],[-65.932219999999973,58.458885000000066],[-65.94027699999998,58.461661999999933],[-65.96166999999997,58.464714000000072],[-65.980559999999912,58.470268000000033],[-65.982497999999964,58.4741590000001],[-65.981948999999929,58.480545000000006],[-65.980559999999912,58.483047000000113],[-65.887512000000015,58.577774000000034],[-65.884170999999981,58.580826000000116],[-65.876937999999882,58.581940000000088],[-65.879989999999964,58.62721300000004],[-65.945540999999935,58.665267999999969],[-66.032226999999978,58.710548000000074],[-66.101394999999968,58.771103000000039],[-66.103881999999999,58.773604999999918],[-66.081954999999994,58.80971500000004],[-66.037215999999944,58.85166200000009],[-65.990111999999954,58.852661000000012],[-65.984954999999957,58.851494000000059],[-65.952277999999865,58.836822999999981],[-65.845839999999953,58.826660000000004],[-65.839721999999995,58.827217000000076],[-65.797501000000011,58.847488000000055],[-65.792770000000019,58.853325000000041],[-65.790282999999988,58.857773000000009],[-65.789443999999946,58.861938000000009],[-65.791381999999999,58.865829000000076],[-65.794998000000021,58.86693600000001],[-65.80610699999994,58.866660999999965],[-65.833327999999995,58.864715999999987],[-65.861938000000009,58.863327000000027],[-65.880279999999914,58.864440999999999],[-65.940445000000011,58.879105000000038],[-65.952606000000003,58.88126799999992],[-65.958115000000021,58.882935000000032],[-65.964775000000031,58.887440000000083],[-65.968276999999887,58.893440000000055],[-65.988602000000014,58.903603000000032],[-65.885559000000001,59.001938000000052],[-65.777495999999985,59.029990999999995],[-65.695266999999888,59.043610000000058],[-65.673049999999989,59.046104000000014],[-65.660278000000005,59.044159000000036],[-65.654174999999952,59.042496000000085],[-65.634673999999904,59.033217999999977],[-65.632492000000013,59.031216000000086],[-65.614166000000012,59.019440000000088],[-65.565001999999936,58.993607000000111],[-65.514450000000011,58.984718000000044],[-65.5,58.983330000000137],[-65.49499499999996,58.984718000000044],[-65.493332000000009,58.987495000000138],[-65.49499499999996,58.991936000000067],[-65.509444999999971,59.008330999999998],[-65.516402999999968,59.010826000000009],[-65.533614999999998,59.014717000000076],[-65.543059999999969,59.015549000000021],[-65.553054999999972,59.017493999999999],[-65.56082200000003,59.020827999999995],[-65.571388000000013,59.039108000000112],[-65.572891000000027,59.044106000000113],[-65.570221000000004,59.045772999999997],[-65.568054000000018,59.046776000000023],[-65.532776000000013,59.063881000000094],[-65.518616000000009,59.066666000000112],[-65.510284000000013,59.066940000000045],[-65.506392999999946,59.066382999999973],[-65.492492999999968,59.061378000000104],[-65.454726999999991,59.042221000000097],[-65.340285999999992,59.03833000000003],[-65.330565999999976,59.038048000000117],[-65.324721999999952,59.038887000000102],[-65.317504999999983,59.041382000000112],[-65.319732999999985,59.047217999999987],[-65.333618000000001,59.059990000000028],[-65.344726999999978,59.064712999999983],[-65.354171999999949,59.067497000000117],[-65.533553999999924,59.077663000000143],[-65.53687999999994,59.074665000000095],[-65.546721999999988,59.071831000000088],[-65.564383999999961,59.070163999999977],[-65.577056999999968,59.069996000000117],[-65.58406100000002,59.070999000000143],[-65.586563000000012,59.072159000000056],[-65.651947000000007,59.079163000000108],[-65.715011999999945,59.148331000000042],[-65.718062999999972,59.153046000000074],[-65.740829000000019,59.214714000000072],[-65.742492999999911,59.219437000000084],[-65.743056999999965,59.228043000000014],[-65.744995000000017,59.259720000000129],[-65.744719999999973,59.263054000000125],[-65.743056999999965,59.265830999999991],[-65.731948999999986,59.269066000000009],[-65.706664999999987,59.268326000000059],[-65.685271999999884,59.264442000000031],[-65.676102000000014,59.261108000000036],[-65.646118000000001,59.244713000000104],[-65.587509000000011,59.20249200000012],[-65.612503000000004,59.237495000000081],[-65.614715999999873,59.243607000000054],[-65.614166000000012,59.246941000000049],[-65.581680000000006,59.37721300000004],[-65.572509999999966,59.378601000000003],[-65.570006999999976,59.378326000000129],[-65.551940999999999,59.372765000000072],[-65.499160999999958,59.352219000000105],[-65.48332199999993,59.345542999999964],[-65.476105000000018,59.338882000000069],[-65.471114999999941,59.327492000000007],[-65.453338999999971,59.316939999999988],[-65.383895999999993,59.281661999999983],[-65.372771999999998,59.276657000000114],[-65.366652999999872,59.274993999999992],[-65.36111499999987,59.274712000000136],[-65.357223999999974,59.277214000000015],[-65.356658999999922,59.282768000000033],[-65.437774999999988,59.393883000000017],[-65.495269999999891,59.433876000000055],[-65.559433000000013,59.481658999999979],[-65.56138599999997,59.486107000000118],[-65.557495000000017,59.487770000000069],[-65.549438000000009,59.48943300000002],[-65.542220999999984,59.489990000000091],[-65.360000999999954,59.481658999999979],[-65.347778000000005,59.480820000000051],[-65.260559000000001,59.466385000000116],[-65.19766199999998,59.450493000000051],[-65.195830999999998,59.447659000000044],[-65.176940999999999,59.440269000000001],[-65.170273000000009,59.434433000000126],[-65.141953000000001,59.415825000000041],[-65.126663000000008,59.40776800000009],[-65.119995000000017,59.40526600000004],[-65.060271999999998,59.384438000000102],[-65.041381999999942,59.378601000000003],[-65.017775999999969,59.373046999999985],[-65.005844000000025,59.371933000000013],[-64.995543999999995,59.372490000000084],[-64.98332199999993,59.376380999999981],[-65.031386999999938,59.392769000000044],[-65.075835999999981,59.408043000000077],[-65.111114999999984,59.420546999999942],[-65.118880999999988,59.423882000000049],[-65.141113000000018,59.434433000000126],[-65.147231999999974,59.43804200000011],[-65.151397999999972,59.443046999999979],[-65.156386999999938,59.451659999999947],[-65.158996999999886,59.460827000000108],[-65.16194200000001,59.466660000000104],[-65.168059999999969,59.470543000000021],[-65.22084000000001,59.48832700000014],[-65.290832999999964,59.506660000000011],[-65.308608999999933,59.50999500000006],[-65.330001999999865,59.509437999999989],[-65.388901000000033,59.50750000000005],[-65.411666999999966,59.509437999999989],[-65.419998000000021,59.516936999999984],[-65.462783999999886,59.578049000000021],[-65.494155999999975,59.626937999999996],[-65.501677999999913,59.63888500000013],[-65.527785999999992,59.716933999999981],[-65.501952999999958,59.747215000000097],[-65.433318999999983,59.798049999999932],[-65.374999999999943,59.828049000000135],[-65.33555599999994,59.84665700000005],[-65.333892999999932,59.847214000000122],[-65.323623999999995,59.845543000000077],[-65.236114999999984,59.819381999999962],[-65.21945199999999,59.814377000000093],[-65.205947999999978,59.808548000000087],[-65.203444999999931,59.806881000000033],[-65.198775999999953,59.802879000000019],[-65.195281999999963,59.797218000000044],[-65.158614999999998,59.782211000000018],[-65.152785999999992,59.779990999999995],[-65.136123999999995,59.776657],[-65.053054999999972,59.763611000000083],[-65.033065999999963,59.761383000000137],[-65.006667999999991,59.760277000000087],[-64.988602000000014,59.761940000000038],[-64.983886999999982,59.762771999999927],[-64.983063000000016,59.764160000000061],[-64.989165999999955,59.765831000000105],[-65.055556999999965,59.778328000000101],[-65.132766999999944,59.79694400000011],[-65.161391999999978,59.817490000000134],[-65.199393999999927,59.835659000000078],[-65.202713000000017,59.837326000000019],[-65.206054999999992,59.840492000000097],[-65.230835000000013,59.880546999999979],[-65.231948999999986,59.885826000000122],[-65.226104999999961,59.888603000000046],[-65.206389999999999,59.888603000000046],[-65.143340999999907,59.94999700000011],[-65.126098999999954,60.011108000000036],[-65.110001000000011,60.043052999999986],[-65.029723999999931,60.077217000000019],[-64.921111999999937,60.194992000000013],[-64.834166999999979,60.323051000000078],[-64.832229999999925,60.328605999999979],[-64.834441999999967,60.334434999999985],[-64.846389999999928,60.345543000000134],[-64.858336999999949,60.352492999999981],[-64.857223999999974,60.359436000000017],[-64.854445999999996,60.361107000000061],[-64.846114999999998,60.362769999999955],[-64.83555599999994,60.363327000000083],[-64.65306099999998,60.34693900000002],[-64.641677999999899,60.344711000000018],[-64.610274999999945,60.336380000000133],[-64.576674999999966,60.322768999999994],[-64.533249000000012,60.302498000000014],[-64.475600999999983,60.281609000000003],[-64.466919000000019,60.278602999999976],[-64.431090999999981,60.258105999999941],[-64.432593999999995,60.255608000000052],[-64.43460099999993,60.255108000000064],[-64.446091000000024,60.254771999999946],[-64.453093999999908,60.256271000000027],[-64.462424999999939,60.259273999999948],[-64.477591999999959,60.265609999999981],[-64.477218999999991,60.260551000000135],[-64.557495000000017,60.281105000000082],[-64.580291999999929,60.286110000000122],[-64.613051999999982,60.289436000000137],[-64.643065999999976,60.287498000000028],[-64.721114999999941,60.261108000000036],[-64.725829999999974,60.258331000000112],[-64.758056999999951,60.235825000000091],[-64.759445000000028,60.231102000000135],[-64.752501999999879,60.228600000000029],[-64.745269999999948,60.228325000000041],[-64.736937999999952,60.230545000000063],[-64.685546999999985,60.250832000000116],[-64.646118000000001,60.265830999999991],[-64.634170999999981,60.268883000000073],[-64.596389999999985,60.266937000000041],[-64.574448000000018,60.264999000000103],[-64.554169000000002,60.262772000000041],[-64.536391999999921,60.2586060000001],[-64.421676999999988,60.215656000000024],[-64.419501999999966,60.213661000000002],[-64.376937999999996,60.160545000000013],[-64.465011999999945,60.084991000000002],[-64.469161999999869,60.08277099999998],[-64.476944000000003,60.079720000000009],[-64.491378999999938,60.074714999999912],[-64.504455999999948,60.072495000000117],[-64.515015000000005,60.071938000000046],[-64.654998999999918,60.053604000000064],[-64.80471799999998,60.007216999999969],[-64.8125,60.004165999999998],[-64.823333999999988,59.997772000000111],[-64.826675000000023,59.994712999999933],[-64.827498999999989,59.986382000000049],[-64.820007000000032,59.979431000000091],[-64.811935000000005,59.978325000000098],[-64.796660999999972,59.980270000000075],[-64.735274999999945,60.001106000000107],[-64.490828999999906,60.05943300000007],[-64.410277999999948,60.111107000000118],[-64.396392999999989,60.121933000000013],[-64.392226999999991,60.124161000000015],[-64.385833999999932,60.125267000000008],[-64.379990000000021,60.125267000000008],[-64.37388599999997,60.123604000000114],[-64.367766999999958,60.119713000000047],[-64.366104000000007,60.117493000000024],[-64.36500499999994,60.109993000000145],[-64.374611000000016,60.033829000000082],[-64.375281999999856,60.028324000000055],[-64.394729999999981,59.941658000000075],[-64.396956999999929,59.937767000000008],[-64.408889999999985,59.932495000000074],[-64.450561999999934,59.925270000000012],[-64.462218999999948,59.922493000000088],[-64.491942999999992,59.913605000000132],[-64.506957999999997,59.907211000000075],[-64.514724999999999,59.901932000000102],[-64.513901000000033,59.896103000000096],[-64.506393000000003,59.891936999999984],[-64.499435000000005,59.891663000000051],[-64.481948999999872,59.894714000000079],[-64.376098999999954,59.9180530000001],[-64.367766999999958,59.920273000000122],[-64.363327000000027,59.922493000000088],[-64.360549999999932,59.924995000000024],[-64.320281999999963,60.004107999999974],[-64.322112999999945,60.006439000000114],[-64.324119999999994,60.011604000000091],[-64.32428699999997,60.014107000000024],[-64.322112999999945,60.024605000000008],[-64.320449999999937,60.027270999999985],[-64.317443999999909,60.028103000000044],[-64.265014999999948,60.048050000000103],[-64.216659999999933,60.039993000000095],[-64.173614999999984,60.028328000000045],[-64.166945999999996,60.024994000000049],[-64.160827999999981,60.01638800000012],[-64.150283999999999,59.985268000000076],[-64.150283999999999,59.982208000000014],[-64.165833000000021,59.850548000000117],[-64.17721599999993,59.785552999999936],[-64.180831999999896,59.781662000000097],[-64.193053999999961,59.775825999999995],[-64.202498999999932,59.77416199999999],[-64.220000999999968,59.77416199999999],[-64.236664000000019,59.779716000000008],[-64.244720000000029,59.784996000000035],[-64.25140399999998,59.787498000000141],[-64.257507000000032,59.78943600000008],[-64.261948000000018,59.789161999999976],[-64.264450000000011,59.787498000000141],[-64.266662999999994,59.77915999999999],[-64.261123999999995,59.764717000000132],[-64.255004999999926,59.756660000000124],[-64.21305799999999,59.717766000000097],[-64.197768999999994,59.705269000000101],[-64.173888999999974,59.688598999999954],[-64.163894999999968,59.684158000000082],[-64.151672000000019,59.680824000000086],[-64.129989999999964,59.676659000000086],[-64.057769999999948,59.625267000000122],[-64.116942999999935,59.517494000000056],[-64.047501000000011,59.549721000000034],[-64.040833000000021,59.553604000000007],[-64.033324999999991,59.563880999999981],[-64.034438999999907,59.573608000000092],[-64.034438999999907,59.582771000000093],[-64.029723999999874,59.599433999999974],[-64.024719000000005,59.609993000000031],[-64.019454999999937,59.618599000000131],[-64.011123999999938,59.624992000000077],[-64.004729999999995,59.626381000000094],[-63.99722300000002,59.626656000000139],[-63.90055099999995,59.619987000000037],[-63.885559000000001,59.618881000000044],[-63.876105999999993,59.615829000000076],[-63.865554999999915,59.609993000000031],[-63.731666999999959,59.526099999999985],[-63.724166999999966,59.517769000000101],[-63.722495999999978,59.513885000000073],[-63.723884999999996,59.506660000000011],[-63.785278000000005,59.426102000000014],[-63.807837999999947,59.420437000000106],[-63.810172999999963,59.41944100000012],[-63.814502999999945,59.418101999999976],[-63.866393999999957,59.421104000000014],[-63.90694400000001,59.421660999999915],[-63.947776999999974,59.419716000000108],[-64.000564999999995,59.41443600000008],[-64.018341000000021,59.410545000000013],[-64.033324999999991,59.406654000000117],[-64.050277999999992,59.399994000000106],[-64.061110999999983,59.393883000000017],[-64.065826000000015,59.388046000000031],[-64.062209999999993,59.38249200000007],[-64.052779999999984,59.379433000000063],[-63.805167999999924,59.368164000000093],[-63.790145999999993,59.370293000000004],[-63.786652000000004,59.371792000000084],[-63.78264999999999,59.374126000000103],[-63.751395999999943,59.37582400000008],[-63.748111999999935,59.333878000000084],[-63.75644699999998,59.30838],[-63.768280000000004,59.28788000000003],[-63.77044699999999,59.284381999999994],[-63.773444999999981,59.282215000000122],[-63.780944999999974,59.278213999999991],[-63.814162999999951,59.249435000000005],[-63.824722000000008,59.24610100000001],[-63.825499999999977,59.244377000000043],[-63.82527899999991,59.243324000000086],[-63.813889000000017,59.240829000000076],[-63.777942999999993,59.263938999999993],[-63.76677699999999,59.264275000000055],[-63.760940999999946,59.265434000000027],[-63.755942999999945,59.266773000000001],[-63.739112999999975,59.273605000000032],[-63.730441999999925,59.280769000000021],[-63.723777999999925,59.287436999999954],[-63.718776999999932,59.293941000000075],[-63.716113999999891,59.300934000000098],[-63.71527900000001,59.303768000000105],[-63.71527900000001,59.306438000000071],[-63.71594199999987,59.309437000000059],[-63.713775999999996,59.315605000000005],[-63.710608999999863,59.318107999999995],[-63.658332999999971,59.358046999999999],[-63.649993999999992,59.362494999999967],[-63.543059999999912,59.34804500000007],[-63.535277999999948,59.344436999999971],[-63.393332999999927,59.264999000000103],[-63.357506000000001,59.208046000000081],[-63.356392000000028,59.204993999999999],[-63.358054999999922,59.198043999999982],[-63.366661000000022,59.186377999999991],[-63.412773000000016,59.135826000000066],[-63.425560000000019,59.126381000000038],[-63.441108999999926,59.119438000000002],[-63.476944000000003,59.104439000000127],[-63.563613999999973,59.073326000000122],[-63.580001999999922,59.067497000000117],[-63.589721999999938,59.065543999999989],[-63.731392000000028,59.056270999999981],[-63.741055000000017,59.055770999999993],[-63.74872199999993,59.056934000000126],[-63.753890999999896,59.058266000000003],[-63.760222999999939,59.062767000000122],[-63.812217999999973,59.065826000000072],[-63.934440999999936,59.081108000000086],[-63.948333999999988,59.07888000000014],[-63.966110000000015,59.074714999999969],[-63.98833499999995,59.068329000000062],[-64.045546999999999,59.02416199999999],[-64.04722599999991,59.019440000000088],[-64.043883999999991,59.015273999999977],[-64.039443999999946,59.013885000000016],[-63.912216000000001,59.000549000000035],[-63.801719999999989,59.013992000000144],[-63.798388999999986,59.011329999999987],[-63.766395999999986,59.012772000000098],[-63.759444999999971,59.012497000000053],[-63.734443999999939,59.014998999999989],[-63.508057000000008,59.052773000000059],[-63.381667999999877,59.098045000000127],[-63.372771999999941,59.101104999999961],[-63.365554999999915,59.101104999999961],[-63.309440999999993,59.09415400000006],[-63.293335000000013,59.091377000000136],[-63.134170999999981,59.058327000000077],[-63.124999999999943,59.055267000000015],[-63.121940999999993,59.051384000000098],[-63.122771999999998,59.045547000000113],[-63.126944999999921,59.041382000000112],[-63.133330999999941,59.038048000000117],[-63.159438999999907,59.029990999999995],[-63.175277999999992,59.026939000000084],[-63.185271999999998,59.026381999999955],[-63.216942000000017,59.027489000000116],[-63.238892000000021,59.030548000000067],[-63.323333999999932,59.027771000000143],[-63.336112999999955,59.024994000000049],[-63.335555999999997,59.021935000000099],[-63.264450000000011,58.985549999999989],[-63.213889999999992,58.977211000000125],[-63.195273999999984,58.979713000000004],[-63.185271999999998,58.980270000000075],[-63.173057999999912,58.979713000000004],[-63.167503000000011,58.970825000000048],[-63.160552999999993,58.926384000000041],[-63.163054999999929,58.920273000000122],[-63.236389000000031,58.876937999999996],[-63.313331999999946,58.861107000000004],[-63.325004999999976,58.85582700000009],[-63.312774999999988,58.853049999999996],[-63.294723999999974,58.85083000000003],[-63.19027699999998,58.854996000000085],[-63.112777999999992,58.878043999999989],[-63.033332999999971,58.873878000000104],[-62.924170999999944,58.821381000000031],[-62.918334999999956,58.817497000000003],[-62.90694400000001,58.80471],[-62.904167000000029,58.799995000000138],[-62.847495999999978,58.690543999999989],[-62.845276000000013,58.684989999999971],[-62.842223999999987,58.669991000000095],[-62.843612999999948,58.659430999999984],[-62.847777999999948,58.653045999999961],[-62.915832999999907,58.600272999999959],[-62.974998000000028,58.576660000000061],[-63.169167000000016,58.503052000000139],[-63.334109999999896,58.455768999999975],[-63.334609999999941,58.45227100000011],[-63.337108999999941,58.448437000000126],[-63.373444000000006,58.417435000000069],[-63.38528100000002,58.41027100000008],[-63.39910900000001,58.405273000000079],[-63.486388999999974,58.37082700000002],[-63.522498999999982,58.361107000000118],[-63.537506000000008,58.354164000000083],[-63.583060999999987,58.311378000000047],[-63.587776000000019,58.305549999999982],[-63.58943899999997,58.30082700000014],[-63.584998999999925,58.298881999999992],[-63.579726999999991,58.298606999999947],[-63.571670999999924,58.299995000000081],[-63.555274999999938,58.305267000000015],[-63.533057999999983,58.314438000000109],[-63.428223000000003,58.369049000000132],[-63.392386999999928,58.388381999999979],[-63.378558999999939,58.399044000000004],[-63.364219999999932,58.410049000000015],[-63.351555000000019,58.418716000000018],[-63.286391999999978,58.456657000000064],[-63.28082999999998,58.459160000000054],[-63.264724999999942,58.463051000000121],[-63.241669000000002,58.466385000000116],[-63.213615000000004,58.469437000000028],[-63.148612999999955,58.476379000000122],[-63.13277399999987,58.477211000000068],[-63.124442999999872,58.475266000000033],[-63.096947,58.461936999999978],[-63.089721999999938,58.458327999999938],[-63.086113000000012,58.454993999999999],[-63.037506000000008,58.453048999999965],[-62.763335999999981,58.480820000000051],[-62.636664999999937,58.501389000000017],[-62.620551999999975,58.504997000000117],[-62.610001000000011,58.503882999999973],[-62.58943899999997,58.499718000000144],[-62.573615999999959,58.493880999999988],[-62.566108999999926,58.490546999999992],[-62.56138599999997,58.487495000000081],[-62.557502999999997,58.482491000000095],[-62.556389000000024,58.478043000000127],[-62.619719999999973,58.376938000000052],[-62.619445999999982,58.310272000000055],[-62.623054999999965,58.30443600000001],[-62.634170999999981,58.297775000000058],[-62.708611000000019,58.276100000000042],[-62.77666499999998,58.268599999999992],[-62.828056000000004,58.252220000000079],[-62.661666999999966,58.26998900000001],[-62.658607000000018,58.270271000000037],[-62.654442000000017,58.270271000000037],[-62.609725999999966,58.256660000000068],[-62.597778000000005,58.251663000000008],[-62.592772999999966,58.248604],[-62.582503999999858,58.23443600000013],[-62.581116000000009,58.221931000000041],[-62.58277899999996,58.216934000000094],[-62.584441999999967,58.214439000000084],[-62.631942999999865,58.185265000000129],[-62.638054000000011,58.181938000000002],[-62.653053,58.175270000000012],[-62.661384999999996,58.173049999999989],[-62.689163000000008,58.169991000000039],[-62.719718999999941,58.169715999999994],[-62.740279999999927,58.171936000000017],[-62.773887999999886,58.176941000000056],[-62.783889999999928,58.176659000000029],[-62.822226999999998,58.174713000000111],[-62.841666999999973,58.1722180000001],[-62.965004000000022,58.15387700000008],[-63.012221999999952,58.135551000000078],[-63.016662999999937,58.126098999999954],[-63.023887999999999,58.118880999999988],[-63.045279999999934,58.108886999999982],[-63.126944999999921,58.086936999999978],[-63.205558999999994,58.065826000000072],[-63.21166999999997,58.062492000000077],[-63.211387999999999,58.060272000000111],[-63.208892999999989,58.057770000000005],[-63.19027699999998,58.053047000000049],[-63.140838999999971,58.048882000000049],[-63.146998999999994,58.036831000000006],[-63.15582999999998,58.026939000000084],[-63.167777999999942,58.021103000000039],[-63.193329000000006,58.014717000000132],[-63.267220000000009,58.007217000000026],[-63.275275999999963,58.005554000000132],[-63.30471799999998,57.996940999999936],[-63.341666999999973,57.981102000000021],[-63.340835999999967,57.979988000000048],[-63.329726999999991,57.980270000000132],[-63.15166499999998,57.993606999999997],[-63.128882999999973,57.997771999999998],[-63.107779999999991,58.007774000000097],[-63.101944000000003,58.01249700000011],[-63.098884999999939,58.017769000000044],[-63.097778000000005,58.019714000000022],[-63.09833500000002,58.026939000000084],[-63.099998000000028,58.033051000000057],[-63.101944000000003,58.036942000000124],[-63.101668999999902,58.044159000000036],[-63.097778000000005,58.052216000000044],[-63.094718999999941,58.057495000000017],[-63.089164999999866,58.06221000000005],[-62.946662999999944,58.124161000000015],[-62.940276999999924,58.125824000000136],[-62.886390999999946,58.137496999999996],[-62.838051000000007,58.144997000000046],[-62.832222000000002,58.14527099999998],[-62.829445000000021,58.143326000000002],[-62.77277399999997,58.129158000000132],[-62.652221999999995,58.118599000000074],[-62.646111000000019,58.119155999999975],[-62.643058999999994,58.119986999999981],[-62.612502999999947,58.137771999999984],[-62.59944200000001,58.145546000000024],[-62.560828999999956,58.156654000000003],[-62.515838999999914,58.169158999999922],[-62.491942999999992,58.174163999999962],[-62.46665999999999,58.175552000000096],[-62.452781999999956,58.175270000000012],[-62.448051000000021,58.1722180000001],[-62.446388000000013,58.168327000000033],[-62.447776999999917,58.164154000000053],[-62.463000999999963,58.151047000000062],[-62.469666000000018,58.145718000000045],[-62.478333000000021,58.141212000000053],[-62.486168000000021,58.136547000000064],[-62.503890999999953,58.123604000000114],[-62.519447000000014,58.111937999999952],[-62.529166999999916,58.102776000000063],[-62.531386999999995,58.095268000000033],[-62.514450000000011,58.057495000000017],[-62.506392999999946,58.055267000000072],[-62.498054999999908,58.057213000000104],[-62.49138599999992,58.061378000000104],[-62.486664000000019,58.066940000000045],[-62.484443999999939,58.072220000000129],[-62.485557999999912,58.081107999999915],[-62.488051999999925,58.086105000000032],[-62.488891999999908,58.091103000000032],[-62.488051999999925,58.09665700000005],[-62.482772999999952,58.100273000000072],[-62.444827999999916,58.106720000000053],[-62.413054999999929,58.110825000000091],[-62.375,58.112770000000069],[-62.368889000000024,58.111664000000019],[-62.363892000000021,58.108604000000014],[-62.317779999999971,58.052489999999977],[-62.307502999999883,58.039161999999976],[-62.306945999999982,58.031104999999968],[-62.309722999999963,58.028603000000089],[-62.38144699999998,58.008327000000065],[-62.394112000000007,58.003658000000087],[-62.406280999999979,58.002827000000082],[-62.41311300000001,58.003658000000087],[-62.437613999999883,58.010159000000101],[-62.450443000000007,58.011993000000132],[-62.500838999999928,58.008049000000142],[-62.51916499999993,58.006943000000092],[-62.528335999999967,58.005554000000132],[-62.545279999999934,58.000549000000035],[-62.648055999999997,57.958328000000051],[-62.655273000000022,57.953605999999979],[-62.65972099999999,57.94860100000011],[-62.672774999999945,57.929993000000024],[-62.664443999999946,57.928604000000064],[-62.655273000000022,57.929993000000024],[-62.640838999999971,57.935264999999958],[-62.636116000000015,57.938598999999954],[-62.620833999999945,57.947487000000137],[-62.611670999999944,57.951660000000061],[-62.577498999999989,57.962212000000079],[-62.537780999999882,57.971100000000092],[-62.512504999999919,57.972487999999998],[-62.455165999999963,57.968212000000051],[-62.448001999999974,57.967708999999957],[-62.325004999999919,57.956100000000106],[-62.268332999999984,57.948875000000044],[-62.200278999999966,57.935822000000087],[-62.148887999999999,57.974990999999932],[-62.145279000000016,57.974159000000043],[-62.12749500000001,57.968048000000124],[-62.116111999999987,57.962493999999992],[-62.083610999999962,57.944992000000127],[-62.079726999999934,57.942763999999954],[-62.072226999999998,57.931107000000054],[-62.05972300000002,57.897774000000027],[-62.060828999999956,57.889992000000063],[-62.062774999999931,57.886658000000068],[-62.115279999999984,57.854164000000026],[-62.131942999999978,57.84276600000004],[-62.138053999999954,57.835823000000005],[-62.139167999999927,57.831940000000088],[-62.125274999999988,57.806938000000002],[-62.120833999999888,57.800827000000083],[-62.119995000000017,57.799994999999967],[-62.107779999999991,57.789719000000105],[-62.08916499999998,57.780548000000124],[-62.085830999999985,57.779433999999981],[-62.079169999999976,57.779433999999981],[-62.061110999999926,57.781936999999971],[-62.046394000000021,57.785828000000038],[-62.033332999999914,57.787216000000114],[-62.018058999999937,57.783607000000131],[-61.996666000000005,57.772217000000069],[-61.99138599999992,57.767769000000101],[-61.889998999999989,57.666382000000112],[-61.883330999999998,57.645546000000081],[-61.883057000000008,57.63749700000011],[-61.884444999999971,57.626938000000052],[-61.888610999999969,57.622490000000084],[-61.89805599999994,57.616386000000034],[-62.071670999999981,57.563605999999993],[-62.192222999999899,57.535828000000095],[-62.30860899999999,57.490546999999992],[-62.421386999999982,57.482207999999957],[-62.431945999999868,57.484717999999987],[-62.531113000000005,57.506943000000035],[-62.541388999999981,57.507500000000107],[-62.544723999999974,57.504440000000045],[-62.545279999999934,57.50110600000005],[-62.533332999999914,57.492218000000094],[-62.520553999999947,57.484993000000031],[-62.46444699999995,57.454437000000098],[-62.457222000000002,57.451103000000103],[-62.377220000000023,57.421936000000017],[-62.365279999999927,57.419715999999994],[-62.353888999999981,57.418326999999977],[-62.335830999999928,57.419440999999949],[-62.230552999999986,57.443604000000107],[-62.173331999999959,57.463608000000022],[-62.167220999999984,57.464439000000084],[-62.060828999999956,57.456383000000017],[-62.039725999999973,57.453323000000125],[-61.891388000000006,57.411934000000031],[-61.816948000000025,57.376938000000109],[-61.803054999999915,57.369155999999975],[-61.801391999999908,57.363052000000096],[-61.803054999999915,57.358887000000095],[-61.863892000000021,57.285553000000107],[-61.894164999999987,57.269440000000088],[-61.937499999999943,57.252220000000079],[-61.944999999999936,57.250832000000003],[-61.953888000000006,57.249435000000062],[-61.997779999999977,57.25638600000002],[-62.017219999999952,57.256943000000092],[-62.026389999999992,57.255829000000119],[-62.023613000000012,57.251663000000008],[-62.015839000000028,57.243050000000039],[-62.005004999999869,57.236655999999982],[-61.858894000000021,57.167770000000132],[-61.852500999999961,57.165268000000083],[-61.664444000000003,57.143883000000073],[-61.65555599999999,57.143051000000014],[-61.565551999999968,57.149719000000005],[-61.515555999999947,57.15638000000007],[-61.490836999999999,57.159431000000097],[-61.478881999999999,57.159431000000097],[-61.458892999999989,57.154709000000025],[-61.441665999999884,57.148604999999975],[-61.39305899999988,57.124709999999993],[-61.380279999999914,57.117210000000114],[-61.363892000000021,57.097214000000122],[-61.358336999999949,57.087494000000049],[-61.355559999999969,57.016388000000006],[-61.370833999999945,56.978600000000142],[-61.378052000000025,56.982208000000071],[-61.393332999999984,56.983047000000056],[-61.479720999999984,56.983604000000128],[-61.487777999999935,56.981658999999979],[-61.495551999999861,56.979430999999977],[-61.516395999999929,56.970267999999976],[-61.535560999999973,56.961104999999975],[-61.546668999999952,56.954437000000041],[-61.639998999999932,56.883881000000031],[-61.645003999999915,56.878326000000129],[-61.648337999999967,56.873046999999929],[-61.650832999999921,56.866936000000067],[-61.65277900000001,56.855826999999977],[-61.65277900000001,56.845543000000134],[-61.65055099999995,56.840828000000101],[-61.646111000000019,56.826942000000088],[-61.646111000000019,56.821106000000043],[-61.650276000000019,56.816666000000055],[-61.661384999999996,56.809433000000013],[-61.676392000000021,56.802773000000002],[-61.782391000000018,56.794441000000006],[-61.799224999999922,56.792937999999992],[-61.816886999999952,56.793610000000001],[-61.823558999999989,56.794441000000006],[-61.834556999999961,56.796108000000117],[-61.844559000000004,56.798943000000008],[-61.892226999999934,56.798607000000118],[-61.906386999999938,56.795273000000122],[-61.908606999999961,56.789162000000033],[-61.902221999999938,56.714156999999943],[-61.899993999999992,56.707214000000135],[-61.897223999999937,56.703049000000135],[-61.889998999999989,56.698044000000095],[-61.886115999999959,56.698044000000095],[-61.877776999999924,56.713051000000121],[-61.87027699999993,56.726936000000023],[-61.833667999999932,56.741993000000093],[-61.830832999999927,56.745327000000088],[-61.824996999999996,56.746826000000112],[-61.811504000000014,56.746826000000112],[-61.793335000000013,56.746826000000112],[-61.780498999999963,56.745658999999989],[-61.772834999999986,56.744160000000136],[-61.76266899999996,56.741325000000074],[-61.716392999999925,56.738045000000113],[-61.702498999999989,56.730820000000051],[-61.696944999999971,56.724709000000132],[-61.701667999999984,56.713325999999938],[-61.71055599999994,56.705551000000071],[-61.721106999999961,56.701103000000103],[-61.734443999999996,56.697212000000036],[-61.75417299999998,56.697487000000024],[-61.765006999999969,56.6988750000001],[-61.773055999999997,56.701103000000103],[-61.798339999999996,56.710823000000005],[-61.808334000000002,56.712212000000136],[-61.821670999999924,56.709717000000126],[-61.825004999999919,56.706657000000064],[-61.821670999999924,56.701660000000004],[-61.799171000000001,56.682770000000005],[-61.792503000000011,56.680824000000143],[-61.732215999999937,56.663322000000107],[-61.681670999999994,56.653603000000089],[-61.674445999999932,56.653046000000018],[-61.658889999999985,56.647774000000084],[-61.649726999999984,56.641662999999994],[-61.649993999999936,56.635268999999994],[-61.658607000000018,56.627487000000031],[-61.672500999999954,56.619986999999924],[-61.680557000000022,56.618050000000096],[-61.688889000000017,56.617210000000057],[-61.699164999999994,56.617767000000129],[-61.835555999999997,56.631660000000124],[-61.911667000000023,56.642769000000044],[-61.992774999999938,56.66027100000008],[-62.010001999999872,56.664153999999996],[-62.066947999999911,56.678604000000121],[-62.311110999999983,56.735550000000046],[-62.479995999999971,56.77388000000002],[-62.498885999999914,56.779716000000064],[-62.504448000000025,56.783607000000131],[-62.505004999999926,56.788886999999988],[-62.501944999999978,56.791939000000127],[-62.486114999999984,56.796104000000128],[-62.468886999999995,56.798607000000118],[-62.326392999999996,56.812767000000008],[-62.227492999999868,56.816666000000055],[-62.18999500000001,56.81332400000008],[-62.138335999999924,56.81082200000003],[-62.068335999999988,56.817214999999976],[-62.059440999999879,56.818603999999993],[-62.051665999999955,56.820549000000142],[-62.042502999999954,56.826942000000088],[-62.043334999999956,56.829994000000056],[-62.049445999999875,56.832496999999989],[-62.066947999999911,56.834434999999928],[-62.234726000000023,56.836937000000034],[-62.381667999999991,56.830276000000083],[-62.478606999999954,56.846657000000107],[-62.488891999999908,56.849434000000031],[-62.498885999999914,56.850548000000003],[-62.508338999999921,56.849998000000141],[-62.517219999999952,56.848045000000013],[-62.53194400000001,56.843605000000025],[-62.543892000000028,56.837212000000022],[-62.546950999999922,56.834717000000012],[-62.570281999999963,56.798607000000118],[-62.57389099999989,56.792770000000132],[-62.538337999999953,56.775551000000064],[-62.503058999999951,56.762214999999912],[-62.356109999999887,56.722214000000122],[-62.162773000000016,56.672768000000076],[-62.02277399999997,56.627487000000031],[-62.005279999999971,56.616936000000123],[-62.117500000000007,56.623046999999985],[-62.175003000000004,56.623877999999991],[-62.235557999999969,56.623604000000057],[-62.241111999999873,56.62332200000003],[-62.239722999999969,56.617210000000057],[-62.224715999999944,56.609161000000029],[-62.192222999999899,56.602493000000038],[-62.105003000000011,56.59693900000002],[-62.046394000000021,56.595825000000048],[-62.036117999999874,56.595267999999976],[-61.901389999999935,56.58776899999998],[-61.729439000000013,56.574440000000095],[-61.715004000000022,56.572220000000073],[-61.70805399999989,56.568886000000077],[-61.701110999999969,56.560822000000087],[-61.690833999999995,56.548050000000046],[-61.666663999999969,56.540549999999996],[-61.658332999999971,56.537498000000085],[-61.655273000000022,56.533882000000006],[-61.653327999999931,56.53054800000001],[-61.652221999999995,56.526100000000042],[-61.653327999999931,56.520546000000081],[-61.656661999999926,56.510826000000009],[-61.662216000000001,56.506104000000107],[-61.680282999999974,56.496658000000139],[-61.689163000000008,56.494713000000104],[-61.754723000000013,56.484993000000031],[-61.773055999999997,56.484718000000044],[-61.80388599999992,56.487770000000125],[-61.878052000000025,56.497772000000111],[-61.951942000000031,56.505554000000075],[-62.038612000000001,56.505271999999991],[-62.046950999999922,56.50471500000009],[-62.05471799999998,56.502495000000067],[-62.061667999999997,56.499435000000005],[-62.075561999999934,56.49193600000001],[-62.08306099999993,56.486938000000009],[-62.085273999999913,56.483046999999942],[-62.082222000000002,56.481659000000036],[-62.076667999999984,56.479987999999992],[-62.070838999999978,56.481102000000135],[-62.024170000000026,56.48443600000013],[-61.976386999999988,56.483330000000137],[-61.965278999999896,56.481934000000081],[-61.952224999999999,56.475822000000107],[-61.946945000000028,56.471100000000035],[-61.956164999999942,56.464050000000043],[-61.958831999999973,56.461048000000005],[-61.961333999999965,56.459717000000012],[-61.966003000000001,56.458549000000005],[-61.979835999999978,56.455551000000071],[-61.999724999999955,56.44999700000011],[-62.010284000000013,56.44999700000011],[-62.019996999999989,56.451102999999932],[-62.048888999999974,56.457214000000022],[-62.05972300000002,56.458603000000039],[-62.069999999999993,56.459160000000111],[-62.124999999999886,56.457214000000022],[-62.139998999999932,56.452217000000132],[-62.143058999999994,56.449158000000125],[-62.139167999999927,56.444709999999986],[-62.124999999999886,56.43832400000008],[-62.117500000000007,56.435546999999985],[-62.083327999999995,56.423325000000034],[-62.073059000000001,56.420546999999999],[-61.984726000000023,56.415268000000026],[-61.963717999999972,56.415657000000067],[-61.956889999999987,56.417823999999939],[-61.909720999999934,56.413879000000065],[-61.798057999999912,56.39527099999998],[-61.790840000000003,56.392494000000056],[-61.661384999999996,56.270271000000093],[-61.678332999999952,56.269161000000111],[-61.679169000000002,56.267993999999987],[-61.686835999999971,56.266994000000011],[-61.702834999999993,56.265327000000127],[-61.749999999999943,56.261329999999987],[-61.760665999999958,56.261662000000115],[-61.772166999999968,56.263493000000096],[-61.777167999999961,56.265327000000127],[-61.779671000000008,56.267493999999999],[-61.778335999999967,56.268661000000122],[-61.775001999999972,56.268826000000104],[-61.765166999999963,56.268162000000018],[-61.756667999999934,56.266994000000011],[-61.746001999999919,56.267493999999999],[-61.741000999999926,56.269161000000111],[-61.753616000000022,56.273048000000017],[-61.753059000000007,56.277770999999973],[-61.769996999999933,56.284163999999976],[-61.800835000000006,56.28943600000008],[-61.878608999999926,56.298607000000004],[-61.888610999999969,56.299164000000076],[-62.029723999999987,56.305267000000015],[-62.074447999999961,56.296386999999982],[-62.080001999999979,56.293610000000115],[-62.080832999999984,56.292496000000142],[-62.076110999999912,56.284996000000035],[-62.016395999999986,56.238883999999985],[-62.011672999999917,56.235825000000034],[-62.003890999999953,56.233604000000071],[-61.956947000000014,56.220825000000048],[-61.938331999999946,56.215827999999931],[-61.919448999999986,56.212212000000079],[-61.910278000000005,56.212493999999936],[-61.802054999999939,56.216381000000069],[-61.769889999999975,56.218048000000124],[-61.575004999999976,56.216933999999981],[-61.575561999999991,56.211937000000034],[-61.578612999999905,56.206940000000145],[-61.579726999999991,56.199158000000011],[-61.575279000000023,56.19609800000012],[-61.560279999999921,56.194434999999999],[-61.53583500000002,56.196381000000088],[-61.450553999999954,56.204994000000056],[-61.411941999999954,56.214714000000129],[-61.40444199999996,56.217491000000052],[-61.380279999999914,56.22304500000007],[-61.361670999999944,56.223602000000142],[-61.350837999999953,56.222214000000065],[-61.345550999999944,56.218322999999998],[-61.33083299999987,56.181938000000059],[-61.330284000000006,56.176659000000029],[-61.33555599999994,56.172767999999962],[-61.343329999999924,56.170547000000056],[-61.377220000000023,56.168602000000078],[-61.383613999999909,56.164711000000011],[-61.397223999999881,56.155823000000055],[-61.406104999999911,56.146102999999925],[-61.452498999999932,56.062767000000008],[-61.452224999999999,56.056937999999946],[-61.448607999999979,56.052772999999945],[-61.413886999999932,56.037773000000016],[-61.411384999999882,56.037497999999971],[-61.397498999999982,56.041107000000011],[-61.382773999999927,56.047493000000088],[-61.356391999999971,56.058327000000133],[-61.346663999999919,56.061377999999991],[-61.34027900000001,56.063049000000035],[-61.324721999999952,56.065269000000058],[-61.315552000000025,56.065544000000045],[-61.24361399999998,56.047493000000088],[-61.239722999999969,56.045273000000066],[-61.23750299999989,56.042770000000075],[-61.240554999999972,56.040276000000006],[-61.265838999999971,56.02276599999999],[-61.273613000000012,56.020828000000051],[-61.282500999999968,56.019714000000079],[-61.310279999999977,56.018600000000106],[-61.357223999999974,56.018600000000106],[-61.388610999999912,56.021934999999985],[-61.419167000000016,56.027214000000129],[-61.438605999999993,56.027489000000003],[-61.489997999999957,56.02027099999998],[-61.501395999999943,56.014442000000145],[-61.503890999999896,56.010551000000078],[-61.503615999999965,56.006942999999978],[-61.421943999999996,55.963882000000126],[-61.415001000000018,55.960274000000027],[-61.399170000000026,55.958602999999925],[-61.389998999999989,55.958885000000009],[-61.38138600000002,55.960274000000027],[-61.328055999999947,55.964157000000114],[-61.254722999999956,55.967491000000109],[-61.154442000000017,55.971375000000137],[-61.143616000000009,55.970543000000021],[-61.125556999999958,55.968596999999932],[-61.117774999999938,55.966103000000032],[-61.113616999999977,55.962493999999992],[-61.074448000000018,55.928329000000076],[-61.073891000000003,55.923050000000103],[-61.076667999999984,55.906937000000084],[-61.094111999999939,55.895606999999984],[-61.156386999999995,55.891937000000098],[-61.165276000000006,55.892220000000066],[-61.181670999999994,55.89916199999999],[-61.194999999999993,55.892220000000066],[-61.201667999999984,55.884163000000115],[-61.198607999999922,55.876380999999981],[-61.192771999999934,55.869437999999946],[-61.104445999999939,55.845543000000134],[-61.095275999999899,55.843880000000013],[-61.085274000000027,55.843322999999941],[-61.077224999999999,55.843880000000013],[-61.068061999999998,55.845543000000134],[-61.039665000000014,55.850937000000044],[-61.035999000000004,55.853271000000063],[-61.027168000000017,55.857273000000077],[-60.946105999999986,55.865829000000133],[-60.917220999999927,55.864441000000056],[-60.782500999999968,55.854164000000083],[-60.762221999999952,55.851386999999988],[-60.755561999999998,55.849434000000031],[-60.741669000000002,55.843048000000124],[-60.729720999999927,55.829436999999984],[-60.729163999999969,55.824440000000038],[-60.730826999999977,55.808044000000052],[-60.734443999999996,55.801212000000021],[-60.736941999999999,55.797382000000027],[-60.74222599999996,55.790549999999939],[-60.774719000000005,55.772491000000002],[-60.80777699999993,55.755271999999934],[-60.880554000000018,55.749161000000072],[-60.879439999999988,55.732765000000029],[-60.765006999999969,55.728042999999957],[-60.756393000000003,55.729431000000091],[-60.746947999999975,55.731659000000036],[-60.740279999999984,55.734161000000086],[-60.727218999999877,55.739990000000091],[-60.721663999999976,55.744713000000104],[-60.7016109999999,55.763443000000109],[-60.668891999999971,55.795830000000024],[-60.656386999999938,55.812767000000008],[-60.647223999999937,55.822768999999994],[-60.639998999999989,55.825554000000011],[-60.631667999999991,55.826660000000061],[-60.623885999999914,55.824996999999939],[-60.615279999999927,55.821937999999989],[-60.601943999999946,55.814713000000097],[-60.597777999999892,55.80943300000007],[-60.598052999999993,55.804436000000123],[-60.605835000000013,55.733879000000059],[-60.615836999999999,55.686935000000062],[-60.629722999999899,55.638329000000056],[-60.668059999999969,55.589432000000102],[-60.655555999999933,55.584435000000042],[-60.606109999999944,55.622489999999914],[-60.60222599999986,55.626656000000025],[-60.59027900000001,55.644714000000079],[-60.544167000000016,55.726936000000023],[-60.527221999999881,55.760551000000135],[-60.527495999999985,55.765830999999991],[-60.525557999999933,55.77693899999997],[-60.519446999999957,55.78804800000006],[-60.514449999999954,55.793610000000001],[-60.503059000000007,55.803046999999935],[-60.487777999999878,55.808601000000124],[-60.483611999999994,55.809158000000025],[-60.339995999999985,55.786384999999939],[-60.334998999999982,55.784439000000077],[-60.328888000000006,55.781661999999983],[-60.327224999999885,55.772766000000047],[-60.329444999999964,55.761383000000023],[-60.337775999999963,55.748604],[-60.380553999999961,55.691933000000063],[-60.406386999999995,55.674713000000054],[-60.463218999999924,55.666046000000108],[-60.472720999999979,55.663212000000101],[-60.493889000000024,55.658043000000134],[-60.499999999999943,55.654160000000047],[-60.50389100000001,55.648330999999985],[-60.525001999999972,55.610550000000046],[-60.531112999999948,55.597214000000065],[-60.532218999999884,55.591660000000104],[-60.531859999999938,55.588195999999982],[-60.515006999999969,55.599715999999944],[-60.506110999999919,55.611664000000019],[-60.495002999999997,55.621101000000124],[-60.481383999999991,55.627769000000114],[-60.440334000000007,55.620216000000084],[-60.426167000000021,55.618217000000072],[-60.420334000000025,55.616379000000052],[-60.415501000000006,55.61454800000007],[-60.322776999999917,55.578330999999991],[-60.31639100000001,55.573883000000023],[-60.31639100000001,55.57027400000004],[-60.319449999999961,55.530823000000055],[-60.321670999999981,55.509995000000004],[-60.426318999999978,55.448204000000089],[-60.442210999999986,55.427696000000026],[-60.437774999999988,55.399437000000091],[-60.478332999999907,55.347488000000055],[-60.472771000000023,55.347771000000023],[-60.451392999999939,55.357216000000108],[-60.42610899999994,55.376656000000082],[-60.420837000000006,55.382210000000043],[-60.418335000000013,55.386107999999979],[-60.415275999999949,55.394714000000079],[-60.417777999999942,55.402771000000087],[-60.422501000000011,55.407211000000075],[-60.425003000000004,55.411377000000016],[-60.423614999999984,55.421378999999945],[-60.418335000000013,55.427490000000034],[-60.413054999999986,55.431664000000069],[-60.349167000000023,55.475822000000107],[-60.331673000000023,55.486655999999982],[-60.319449999999961,55.491378999999995],[-60.268607999999972,55.502495000000124],[-60.253890999999953,55.503052000000025],[-60.213889999999992,55.489433000000076],[-60.203613000000018,55.483604000000071],[-60.201667999999984,55.478600000000085],[-60.195548999999971,55.431381000000101],[-60.265839000000028,55.409156999999993],[-60.274169999999913,55.408043000000021],[-60.284171999999955,55.408600000000092],[-60.295279999999934,55.411102000000142],[-60.305274999999881,55.411659000000043],[-60.313332000000003,55.411102000000142],[-60.354720999999927,55.394997000000046],[-60.468886999999938,55.285827999999981],[-60.49888599999997,55.253325999999959],[-60.538054999999929,55.200546000000145],[-60.499999999999943,55.218047999999953],[-60.488892000000021,55.227210999999954],[-60.482215999999994,55.231658999999922],[-60.476386999999988,55.2347180000001],[-60.468329999999924,55.237495000000024],[-60.37388599999997,55.260551000000021],[-60.365836999999942,55.260826000000066],[-60.355277999999998,55.259437999999989],[-60.348610000000008,55.255829000000119],[-60.348052999999936,55.250549000000092],[-60.353057999999976,55.244995000000074],[-60.512222000000008,55.120543999999938],[-60.587776000000019,55.088599999999929],[-60.616660999999965,55.077217000000132],[-60.636116000000015,55.066665999999998],[-60.670554999999979,55.044715999999994],[-60.681113999999923,55.004715000000033],[-60.683326999999906,54.994995000000131],[-60.592773000000022,55.058884000000091],[-60.475273000000016,55.124435000000005],[-60.266395999999986,55.240547000000106],[-60.259170999999924,55.244155999999919],[-60.252501999999993,55.246384000000091],[-60.176108999999997,55.270827999999995],[-60.079781000000025,55.249602999999979],[-60.073776000000009,55.247940000000028],[-60.072776999999974,55.245106000000021],[-60.110778999999923,55.199268000000075],[-60.123610999999926,55.156380000000127],[-60.146392999999932,55.137214999999969],[-60.157218999999941,55.128601000000117],[-60.187217999999973,55.108046999999999],[-60.204445000000021,55.107498000000021],[-60.212776000000019,55.108604000000071],[-60.220551,55.106384000000048],[-60.282776000000013,55.057770000000062],[-60.288337999999953,55.053321999999923],[-60.295006000000001,55.041382000000056],[-60.296950999999922,55.03443900000002],[-60.296668999999952,55.024993999999992],[-60.293892000000028,55.019440000000145],[-60.284171999999955,55.024437000000091],[-60.152495999999985,55.102776000000119],[-60.124442999999928,55.120270000000005],[-60.09944200000001,55.136658000000068],[-60.088332999999921,55.145827999999938],[-60.083884999999952,55.152214000000072],[-60.051223999999934,55.182381000000134],[-60.04571900000002,55.193046999999979],[-60.044723999999917,55.196711999999991],[-60.042721000000029,55.199883],[-60.039718999999877,55.203213000000005],[-60.036057000000028,55.206383000000073],[-60.021888999999987,55.218547999999942],[-60.015223999999989,55.221546000000046],[-60.009224000000017,55.221214000000089],[-59.964721999999938,55.235549999999989],[-59.939437999999939,55.233047000000056],[-59.922774999999945,55.233047000000056],[-59.916945999999939,55.233879000000115],[-59.912497999999971,55.238883999999985],[-59.890838999999971,55.265549000000021],[-59.868332000000009,55.291381999999999],[-59.863891999999964,55.296104000000071],[-59.851394999999968,55.303047000000049],[-59.80750299999994,55.324164999999937],[-59.795279999999991,55.327492000000063],[-59.779167000000029,55.329720000000066],[-59.776108000000022,55.329162999999937],[-59.715003999999965,55.276099999999929],[-59.711945000000014,55.269714000000022],[-59.713332999999977,55.256103999999993],[-59.729439000000013,55.205269000000101],[-59.732497999999964,55.197211999999979],[-59.735832000000016,55.194153000000142],[-59.742774999999938,55.191376000000048],[-59.831389999999999,55.162491000000045],[-59.847495999999978,55.158043000000077],[-59.863891999999964,55.154160000000104],[-59.897781000000009,55.151382000000126],[-59.918334999999956,55.155265999999983],[-59.94027699999998,55.162766000000033],[-59.950553999999897,55.164436000000023],[-59.962775999999963,55.161102000000028],[-59.967215999999951,55.158599999999979],[-59.970832999999914,55.15554800000001],[-59.973327999999867,55.147491000000059],[-59.968055999999933,55.119156000000032],[-59.963615000000004,55.110275000000115],[-59.80083499999995,55.108887000000038],[-59.795279999999991,55.109160999999972],[-59.615836999999999,55.13638300000008],[-59.57028200000002,55.159988000000055],[-59.531386999999995,55.181380999999988],[-59.487777999999992,55.181380999999988],[-59.430557000000022,55.151931999999988],[-59.428336999999999,55.149719000000005],[-59.427223000000026,55.139992000000063],[-59.427779999999927,55.135826000000009],[-59.431945999999925,55.129433000000006],[-59.438605999999936,55.123604],[-59.49610899999999,55.078331000000105],[-59.539169000000015,55.049163999999962],[-59.593886999999995,55.020828000000051],[-59.610831999999959,55.012771999999984],[-59.716659999999933,54.955826000000059],[-59.802165999999943,54.887268000000006],[-59.823996999999963,54.851105000000132],[-59.939163000000008,54.758888000000013],[-59.944160000000011,54.755554000000018],[-59.945549000000028,54.753052000000139],[-59.944160000000011,54.749718000000144],[-59.938605999999936,54.746383999999978],[-59.919166999999959,54.741379000000109],[-59.90943900000002,54.740829000000076],[-59.888610999999855,54.743324000000143],[-59.882499999999936,54.744995000000017],[-59.797500999999954,54.781661999999983],[-59.791114999999991,54.78555300000005],[-59.788612000000001,54.789436000000023],[-59.790282999999874,54.794158999999979],[-59.79099999999994,54.822658999999987],[-59.794166999999959,54.828159000000142],[-59.79466599999995,54.830994000000032],[-59.793830999999898,54.839992999999993],[-59.79099999999994,54.846825000000024],[-59.784339999999929,54.857658000000015],[-59.772002999999927,54.869492000000037],[-59.754722999999899,54.897491000000116],[-59.729995999999971,54.907493999999986],[-59.703888000000006,54.910545000000013],[-59.688888999999961,54.913605000000075],[-59.674445999999989,54.919990999999982],[-59.618331999999953,54.948600999999996],[-59.411110000000008,55.056381000000101],[-59.293891999999971,55.169716000000108],[-59.165275999999949,55.234993000000088],[-59.161384999999996,55.236938000000123],[-59.154716000000008,55.235549999999989],[-59.144164999999987,55.228043000000071],[-59.139442000000031,55.223877000000016],[-59.131110999999919,55.215546000000074],[-59.127494999999954,55.205826000000002],[-59.124999999999943,55.196380999999917],[-59.124442999999872,55.186103999999943],[-59.149440999999911,55.16182699999996],[-59.15060799999992,55.158992999999953],[-59.155276999999955,55.152156999999931],[-59.161277999999982,55.146823999999924],[-59.168609999999944,55.141827000000035],[-59.176608999999985,55.137989000000061],[-59.205276000000026,55.13116100000002],[-59.20911000000001,55.129822000000047],[-59.240279999999927,55.111382000000049],[-59.25278499999996,55.102492999999981],[-59.363335000000006,55.015830999999991],[-59.37471800000003,55.006386000000077],[-59.383056999999951,54.998047000000042],[-59.386390999999946,54.993049999999982],[-59.391113000000018,54.982208000000128],[-59.391387999999949,54.980270000000019],[-59.388610999999969,54.97665400000011],[-59.384170999999924,54.973319999999944],[-59.37471800000003,54.972763000000043],[-59.369164000000012,54.975266000000033],[-59.275001999999915,55.021659999999997],[-59.262504999999862,55.028327999999988],[-59.250838999999985,55.035828000000038],[-59.237220999999977,55.048332000000073],[-59.242500000000007,55.061104000000057],[-59.243057000000022,55.06638300000003],[-59.240836999999999,55.071106000000043],[-59.236663999999962,55.07749200000012],[-59.133330999999941,55.120491000000015],[-59.051666000000012,55.153320000000065],[-59.035277999999892,55.156937000000028],[-59.023613000000012,55.15665400000006],[-58.960555999999883,55.134995000000004],[-58.956107999999915,55.130271999999991],[-58.955832999999984,55.126381000000094],[-58.955832999999984,55.10083000000003],[-58.958336000000031,55.09165999999999],[-58.961670000000026,55.085265999999933],[-58.971106999999961,55.071106000000043],[-58.980277999999998,55.059990000000084],[-59.005561999999998,55.032767999999976],[-59.001944999999978,55.017769000000101],[-58.972495999999978,54.995544000000052],[-58.947220000000016,54.985550000000046],[-58.907218999999941,54.963882000000126],[-58.896950000000004,54.95638300000013],[-58.894164999999873,54.952773999999977],[-58.895279000000016,54.947769000000108],[-58.90055099999995,54.943878000000041],[-58.90694400000001,54.940269000000001],[-58.964721999999881,54.917496000000142],[-59.013061999999991,54.896103000000039],[-59.015556000000004,54.892220000000066],[-59.013618000000008,54.889717000000132],[-58.904167000000029,54.844711000000075],[-58.838332999999977,54.832497000000046],[-58.832503999999972,54.831940000000145],[-58.824172999999973,54.834434999999985],[-58.694442999999978,54.820549000000028],[-58.685271999999941,54.815543999999989],[-58.560828999999956,54.776100000000042],[-58.443610999999919,54.77388000000002],[-58.398887999999943,54.78472099999999],[-58.391944999999964,54.787498000000085],[-58.379997000000003,54.789993000000095],[-58.328056000000004,54.792496000000085],[-58.243331999999953,54.794716000000051],[-58.196663000000001,54.795272999999952],[-58.191108999999983,54.794158999999979],[-58.188332000000003,54.792496000000085],[-58.18721800000003,54.788605000000018],[-58.188605999999936,54.783051],[-58.19388600000002,54.777771000000087],[-58.196944999999971,54.773322999999948],[-58.198607999999979,54.767768999999987],[-58.184166000000005,54.751662999999951],[-58.173332000000016,54.745544000000109],[-58.145554000000004,54.739716000000044],[-58.110001000000011,54.737213000000054],[-58.001395999999943,54.73333000000008],[-57.945548999999971,54.739989999999977],[-57.935554999999965,54.741104000000121],[-57.910552999999936,54.74193600000001],[-57.855002999999954,54.737495000000081],[-57.847495999999921,54.735550000000103],[-57.842498999999918,54.731377000000009],[-57.831947000000014,54.71776600000004],[-57.789725999999916,54.68221299999999],[-57.78556100000003,54.679161000000079],[-57.713057999999933,54.643051000000128],[-57.700835999999981,54.637215000000083],[-57.693610999999976,54.634720000000073],[-57.676392000000021,54.630272000000105],[-57.660278000000005,54.628043999999932],[-57.642226999999991,54.628043999999932],[-57.626388999999961,54.629990000000021],[-57.577781999999956,54.638885000000073],[-57.574172999999973,54.640274000000034],[-57.569725000000005,54.644440000000145],[-57.567223000000013,54.648331000000042],[-57.559165999999948,54.655822999999998],[-57.545836999999949,54.661659000000043],[-57.539168999999902,54.662209000000075],[-57.456389999999999,54.650826000000052],[-57.450553999999954,54.649993999999936],[-57.444716999999969,54.647217000000069],[-57.355834999999956,54.590271000000087],[-57.352782999999874,54.587493999999992],[-57.347495999999921,54.579437000000041],[-57.346947,54.574714999999969],[-57.348610000000008,54.566940000000045],[-57.380828999999949,54.507499999999993],[-57.385276999999917,54.503326000000129],[-57.396949999999947,54.495827000000133],[-57.427222999999969,54.487770000000012],[-57.484726000000023,54.482491000000039],[-57.493057000000022,54.483330000000137],[-57.519447000000014,54.483879000000115],[-57.590836000000024,54.484160999999972],[-57.618056999999965,54.483604000000071],[-57.672774999999888,54.479988000000048],[-57.694999999999993,54.475548000000003],[-57.702224999999942,54.47304500000007],[-57.704169999999976,54.470543000000134],[-57.705275999999969,54.466933999999981],[-57.700554000000011,54.45915999999994],[-57.686942999999928,54.458885000000123],[-57.658332999999971,54.463051000000007],[-57.587775999999963,54.467208999999968],[-57.487777999999935,54.47304500000007],[-57.47222099999999,54.473602000000142],[-57.449996999999939,54.467491000000052],[-57.442497000000003,54.464996000000042],[-57.425277999999992,54.45915999999994],[-57.421111999999994,54.455826000000002],[-57.421669000000009,54.453605999999979],[-57.523330999999985,54.417213000000061],[-57.621666000000005,54.383605999999929],[-57.629439999999988,54.381660000000068],[-57.660827999999924,54.376937999999996],[-57.678336999999999,54.375267000000122],[-57.695273999999927,54.374992000000077],[-57.715552999999943,54.376937999999996],[-57.743056999999965,54.380821000000083],[-57.783332999999971,54.388329000000113],[-57.797226000000023,54.38888500000013],[-57.876105999999936,54.386658000000068],[-57.910278000000005,54.385269000000051],[-58.050277999999878,54.377487000000087],[-58.146392999999989,54.365273000000059],[-58.154166999999973,54.363327000000027],[-58.172501000000011,54.357498000000021],[-58.185271999999941,54.351661999999919],[-58.248055000000022,54.320274000000097],[-58.259726999999998,54.312766999999951],[-58.261947999999961,54.311104000000057],[-58.259170999999981,54.30971500000004],[-58.253333999999995,54.308884000000035],[-58.221107000000018,54.311661000000129],[-58.197495000000004,54.31638300000003],[-58.108337000000006,54.328049000000021],[-58.098609999999951,54.327217000000076],[-58.095832999999971,54.325828999999999],[-58.233886999999982,54.254166000000055],[-58.24722300000002,54.252777000000037],[-58.344161999999926,54.244438000000002],[-58.383056999999894,54.241104000000007],[-58.410278000000005,54.241661000000136],[-58.417220999999984,54.242493000000024],[-58.431388999999967,54.242218000000037],[-58.453888000000006,54.23721299999994],[-58.566108999999926,54.204163000000108],[-58.579169999999976,54.199996999999996],[-58.601394999999968,54.186104],[-58.611945999999989,54.178329000000076],[-58.628882999999973,54.169716000000108],[-58.6444469999999,54.165267999999969],[-58.692771999999991,54.151657],[-58.724715999999944,54.145271000000093],[-58.756949999999961,54.141106000000093],[-58.771110999999962,54.13999200000012],[-58.797782999999981,54.139717000000076],[-58.833611000000019,54.145827999999995],[-58.842773000000022,54.145827999999995],[-58.860001000000011,54.144714000000022],[-58.915276000000006,54.138603000000103],[-58.928336999999942,54.13638300000008],[-59.114165999999955,54.103881999999999],[-59.190551999999968,54.087212000000079],[-59.248336999999992,54.071937999999989],[-59.27944199999996,54.064438000000109],[-59.376105999999993,54.046943999999996],[-59.434440999999936,54.0472180000001],[-59.470275999999956,54.051659000000029],[-59.510001999999929,54.059433000000013],[-59.534446999999943,54.05832700000002],[-59.561385999999914,54.05332199999998],[-59.575561999999991,54.049438000000123],[-59.582221999999945,54.046387000000095],[-59.586945000000014,54.0430530000001],[-59.588608000000022,54.040549999999939],[-59.584723999999994,54.035271000000137],[-59.517220000000009,53.997214999999983],[-59.509726999999998,53.995544000000109],[-59.494445999999982,53.996383999999978],[-59.265839000000028,54.023048000000074],[-59.049445999999932,54.057495000000074],[-58.877220000000023,54.094993999999986],[-58.703055999999947,54.124161000000129],[-58.431113999999923,54.217209000000025],[-58.426392000000021,54.221931000000097],[-58.417502999999954,54.228043000000071],[-58.406386999999938,54.229713000000061],[-58.379439999999931,54.229988000000105],[-58.371940999999936,54.228043000000071],[-58.374442999999928,54.224434000000088],[-58.449722000000008,54.154434000000094],[-58.605003000000011,54.044158999999979],[-58.610282999999981,54.041663999999912],[-58.632499999999936,54.035271000000137],[-58.654998999999975,54.031661999999983],[-58.678054999999915,54.029160000000104],[-58.704445000000021,54.027214000000015],[-58.721663999999919,54.027489000000003],[-58.749167999999997,54.031105000000082],[-58.759170999999981,54.032767999999976],[-58.768058999999937,54.034995999999978],[-58.779723999999931,54.037773000000072],[-58.80750299999994,54.043327000000033],[-58.835830999999928,54.0472180000001],[-58.879997000000003,54.044998000000078],[-58.937499999999943,54.041663999999912],[-59.002501999999936,54.032494000000042],[-59.038611999999944,54.02693899999997],[-59.041388999999981,54.026100000000042],[-59.042777999999942,54.022766000000047],[-59.040557999999862,54.021751000000052],[-59.006950000000018,54.018051000000014],[-58.951942000000031,54.014717000000019],[-58.944159999999954,54.01527400000009],[-58.92583499999995,54.014717000000019],[-58.922500999999954,54.013885000000073],[-58.919448999999929,54.010826000000122],[-58.923057999999969,54.007216999999969],[-58.954169999999976,53.983879000000002],[-58.963057999999933,53.977767999999969],[-58.980826999999977,53.966385000000116],[-59.008338999999921,53.955268999999987],[-59.015838999999971,53.953323000000125],[-59.047782999999981,53.948326000000009],[-59.072226999999941,53.947487000000024],[-59.115279999999871,53.946381000000031],[-59.12222300000002,53.945267000000058],[-59.172774999999945,53.934990000000028],[-59.201392999999996,53.927489999999977],[-59.331946999999957,53.888329000000056],[-59.345551,53.883049000000142],[-59.363891999999908,53.872215000000097],[-59.369445999999982,53.867493000000024],[-59.393616000000009,53.8555530000001],[-59.43638599999997,53.837493999999992],[-59.463332999999977,53.830551000000014],[-59.480277999999998,53.82777400000009],[-59.527221999999995,53.822495000000117],[-59.543892000000028,53.8211060000001],[-59.596107000000018,53.819160000000011],[-59.62388599999997,53.82027400000004],[-59.635833999999988,53.820831000000112],[-59.698607999999979,53.829437000000041],[-59.716659999999933,53.831939999999975],[-59.728049999999996,53.835266000000047],[-59.755561999999941,53.838600000000042],[-59.798339999999939,53.843322999999998],[-59.807776999999874,53.84388000000007],[-59.825835999999981,53.842766000000097],[-59.852782999999988,53.839432000000102],[-59.872498000000007,53.833603000000096],[-59.877219999999966,53.83027600000014],[-59.880553999999961,53.825272000000041],[-59.989165999999955,53.779716000000121],[-60.082779000000016,53.762497000000053],[-60.121108999999933,53.625267000000065],[-60.11999499999996,53.611381999999992],[-60.11361699999992,53.602493000000095],[-60.110000999999954,53.598877000000073],[-60.105002999999954,53.594711000000132],[-60.087501999999915,53.583602999999982],[-60.068061999999998,53.573326000000009],[-60.064444999999978,53.569716999999969],[-60.063332000000003,53.565826000000072],[-60.064444999999978,53.560272000000111],[-60.069724999999949,53.555550000000039],[-60.075004999999919,53.553047000000049],[-60.133888000000013,53.528328000000101],[-60.138335999999981,53.528603000000089],[-60.347495999999978,53.626938000000109],[-60.358611999999994,53.634438000000046],[-60.361670999999944,53.639717000000019],[-60.364448999999979,53.648331000000042],[-60.368056999999965,53.652771000000087],[-60.382499999999936,53.662490999999989],[-60.390556000000004,53.665543000000071],[-60.503059000000007,53.705826000000116],[-60.511115999999959,53.708327999999995],[-60.560279999999977,53.718323000000112],[-60.648613000000012,53.737376999999981],[-60.670612000000006,53.740047000000061],[-60.705115999999975,53.744881000000021],[-60.75894900000003,53.761718999999971],[-60.769943000000012,53.765381000000104],[-60.856948999999986,53.792770000000019],[-60.887222000000008,53.751389000000074],[-60.880279999999914,53.713051000000007],[-60.834723999999937,53.721375000000023],[-60.757724999999994,53.713768000000016],[-60.747222999999963,53.71276499999999],[-60.654891999999961,53.698768999999913],[-60.644225999999946,53.696937999999989],[-60.537223999999924,53.678329000000019],[-60.511947999999961,53.669716000000051],[-60.446563999999967,53.644852000000128],[-60.431670999999994,53.639160000000118],[-60.360282999999981,53.606658999999979],[-60.354445999999996,53.603882000000112],[-60.342223999999931,53.596099999999979],[-60.334166999999979,53.589156999999943],[-60.323333999999988,53.581665000000044],[-60.298614999999927,53.568054000000075],[-60.278884999999946,53.558601000000067],[-60.253616000000022,53.549995000000138],[-60.103614999999934,53.500549000000092],[-60.106392000000028,53.457497000000046],[-60.123328999999956,53.456100000000106],[-60.138054000000011,53.453605999999979],[-60.202224999999999,53.433600999999953],[-60.40582999999998,53.364158999999972],[-60.413329999999974,53.357773000000009],[-60.412216000000001,53.349716000000058],[-60.404998999999975,53.334160000000111],[-60.395835999999974,53.331383000000017],[-60.391113000000018,53.331107999999972],[-60.301392000000021,53.336380000000133],[-60.230826999999977,53.343323000000112],[-60.216109999999901,53.345824999999991],[-60.203888000000006,53.349716000000058],[-60.198607999999865,53.350548000000003],[-60.188605999999993,53.350548000000003],[-60.18332700000002,53.349433999999974],[-60.176665999999898,53.346382000000062],[-60.175002999999947,53.343048000000067],[-60.174720999999977,53.338043000000027],[-60.180831999999896,53.329993999999999],[-60.190833999999938,53.321937999999932],[-60.202224999999999,53.313605999999936],[-60.208892999999989,53.310546999999985],[-60.283332999999914,53.289436000000137],[-60.295836999999949,53.286659000000043],[-60.333885000000009,53.280548000000124],[-60.367217999999923,53.27777100000003],[-60.389724999999999,53.27693899999997],[-60.418335000000013,53.269440000000145],[-60.416663999999969,53.268326000000002],[-60.398055999999997,53.265549000000078],[-60.316108999999926,53.264160000000061],[-60.289444000000003,53.263885000000073],[-60.133613999999966,53.283607000000131],[-60.024719000000005,53.354996000000142],[-59.953887999999949,53.406937000000028],[-59.931945999999925,53.42582700000014],[-59.84194199999996,53.476379000000065],[-59.821670999999981,53.471656999999993],[-59.806106999999997,53.471100000000092],[-59.798057999999969,53.472214000000065],[-59.789168999999958,53.474434000000088],[-59.785003999999958,53.477210999999954],[-59.783614999999998,53.481102000000021],[-59.78472899999997,53.485268000000133],[-59.799170999999944,53.491378999999995],[-59.823615999999959,53.49332400000003],[-59.858611999999994,53.496101000000124],[-59.89916999999997,53.516936999999928],[-59.901108000000022,53.519714000000022],[-59.898337999999967,53.52416199999999],[-59.893058999999994,53.528603000000089],[-59.875556999999958,53.534996000000035],[-59.855835000000013,53.536942000000124],[-59.847495999999978,53.536658999999986],[-59.80999799999995,53.529716000000008],[-59.773613000000012,53.517769000000044],[-59.763061999999934,53.515274000000034],[-59.755561999999941,53.514998999999989],[-59.740279999999984,53.515831000000105],[-59.621108999999933,53.527214000000129],[-59.605834999999956,53.529716000000008],[-59.560829000000012,53.540550000000053],[-59.53082999999998,53.548882000000049],[-59.517501999999979,53.553878999999938],[-59.478333000000021,53.572769000000108],[-59.329726999999991,53.65387700000008],[-59.162216000000001,53.671379000000115],[-59.079726999999934,53.680550000000096],[-59.074172999999917,53.683051999999975],[-59.023887999999999,53.713882000000012],[-59.01916499999993,53.719154000000117],[-59.010833999999932,53.744438000000116],[-59.010559000000001,53.746658000000139],[-59.018889999999999,53.749161000000129],[-59.035003999999958,53.74721500000004],[-59.041388999999981,53.748604],[-59.046111999999937,53.75277699999998],[-59.06527699999998,53.791107000000068],[-59.066390999999896,53.794998000000135],[-59.058334000000002,53.803322000000037],[-59.049445999999932,53.810822000000087],[-59.042777999999942,53.81499500000001],[-58.870276999999987,53.904709000000139],[-58.550277999999935,54.009163000000001],[-58.326110999999969,54.046271999999988],[-58.216942000000017,54.071770000000129],[-58.204612999999995,54.074604000000136],[-58.19377499999996,54.075939000000062],[-58.180446999999958,54.075436000000025],[-58.156780000000026,54.071434000000011],[-58.15060799999992,54.069438999999988],[-58.028610000000015,54.079720000000123],[-57.951942000000031,54.070831000000055],[-57.938605999999993,54.070273999999984],[-57.815552000000025,54.066101000000003],[-57.797501000000011,54.066101000000003],[-57.789443999999946,54.068603999999993],[-57.786391999999921,54.071662999999944],[-57.786117999999988,54.075271999999984],[-57.789443999999946,54.079720000000123],[-57.805556999999908,54.086654999999951],[-57.851668999999958,54.100273000000016],[-57.869720000000029,54.103050000000053],[-58.07650000000001,54.124489000000096],[-58.152495999999928,54.129158000000018],[-58.167163999999957,54.127827000000025],[-58.181503000000021,54.124660000000006],[-58.195830999999998,54.120159000000115],[-58.210834999999918,54.113995000000102],[-58.214668000000017,54.111828000000003],[-58.216994999999997,54.110493000000076],[-58.223000000000013,54.103992000000062],[-58.226832999999942,54.101826000000074],[-58.229831999999931,54.100822000000107],[-58.236834999999928,54.099327000000073],[-58.245166999999981,54.099158999999986],[-58.254332999999974,54.101322000000096],[-58.415276000000006,54.135269000000108],[-58.4183349999999,54.139717000000076],[-58.417220999999984,54.143051000000071],[-58.383613999999966,54.189712999999983],[-58.379439999999931,54.193877999999984],[-58.373885999999914,54.198326000000122],[-58.367500000000007,54.201934999999935],[-58.355559999999912,54.20638300000013],[-58.203613000000018,54.234161000000029],[-58.177779999999984,54.236938000000123],[-58.030829999999924,54.235550000000046],[-58.003058999999951,54.233879000000002],[-57.99361399999998,54.230819999999994],[-57.973609999999951,54.221656999999993],[-57.961112999999898,54.217766000000097],[-57.935271999999998,54.211662000000103],[-57.866660999999965,54.197769000000051],[-57.856392000000028,54.196098000000006],[-57.659163999999919,54.199432000000002],[-57.468329999999924,54.193877999999984],[-57.428336999999885,54.18249499999996],[-57.384170999999981,54.150543000000027],[-57.385559000000001,54.145827999999995],[-57.389998999999989,54.141106000000093],[-57.383613999999966,54.128875999999991],[-57.370833999999945,54.106384000000048],[-57.367774999999995,54.10193600000008],[-57.323333999999988,54.039719000000105],[-57.221106999999961,53.918326999999977],[-57.115279999999984,53.838600000000042],[-57.092773000000022,53.831664999999987],[-57.083611000000019,53.828605999999979],[-57.079726999999991,53.826660000000118],[-57.076392999999996,53.823051000000078],[-57.077498999999932,53.819442999999978],[-57.151389999999992,53.735824999999977],[-57.302498000000014,53.679161000000079],[-57.314720000000023,53.676383999999985],[-57.387504999999976,53.658325000000048],[-57.429169000000002,53.647491000000002],[-57.484169000000009,53.631660000000011],[-57.49111199999993,53.628876000000048],[-57.52305599999994,53.612495000000081],[-57.538894999999968,53.602218999999991],[-57.544448999999986,53.597771000000023],[-57.549995000000024,53.591934000000037],[-57.550551999999982,53.587494000000049],[-57.545279999999991,53.584717000000126],[-57.541114999999991,53.585266000000104],[-57.533332999999914,53.587494000000049],[-57.52777900000001,53.591377000000136],[-57.49361399999998,53.609436000000073],[-57.479720999999984,53.61332700000014],[-57.458054000000004,53.617493000000081],[-57.444716999999969,53.618599000000074],[-57.373610999999926,53.606658999999979],[-57.316665999999998,53.579720000000009],[-57.313613999999973,53.573608000000036],[-57.303054999999915,53.530823000000112],[-57.302498000000014,53.526382000000012],[-57.303329000000019,53.509437999999932],[-57.305557000000022,53.49971800000003],[-57.306664000000012,53.496384000000091],[-57.317779999999971,53.47554800000006],[-57.328887999999949,53.461937000000091],[-57.332503999999915,53.458328000000051],[-57.345832999999914,53.450546000000088],[-57.336945000000014,53.440269000000114],[-57.316390999999953,53.435822000000087],[-57.303329000000019,53.43332700000002],[-57.297501000000011,53.433052000000032],[-57.289169000000015,53.433875999999998],[-57.283332999999971,53.438598999999954],[-57.293616999999983,53.467766000000097],[-57.285277999999948,53.477485999999999],[-57.281386999999995,53.479430999999977],[-57.248610999999983,53.494156000000089],[-57.23750299999989,53.498604000000057],[-57.130279999999971,53.593880000000127],[-57.111389000000031,53.621658000000082],[-57.06138599999997,53.671379000000115],[-57.014724999999942,53.711380000000133],[-56.973610000000008,53.724434000000031],[-56.959442000000024,53.728325000000098],[-56.926391999999964,53.730270000000075],[-56.916663999999969,53.728600000000085],[-56.860832000000016,53.722488000000112],[-56.797226000000023,53.719986000000063],[-56.660827999999924,53.720543000000134],[-56.62222300000002,53.733604000000071],[-56.628608999999983,53.741936000000067],[-56.628333999999995,53.744156000000032],[-56.626105999999936,53.745827000000133],[-56.603332999999964,53.759163000000058],[-56.483611999999994,53.782494000000099],[-56.464691000000016,53.782272000000034],[-56.448333999999988,53.777771000000143],[-56.431670999999994,53.764442000000031],[-56.426948999999979,53.757216999999969],[-56.413886999999988,53.727768000000026],[-56.414443999999946,53.721931000000041],[-56.415275999999949,53.720543000000134],[-56.421669000000009,53.716933999999924],[-56.429169000000002,53.71527100000003],[-56.438048999999921,53.71527100000003],[-56.446944999999971,53.716933999999924],[-56.482773000000009,53.718048000000124],[-56.506393000000003,53.716933999999924],[-56.521666999999979,53.714714000000129],[-56.544448999999986,53.709717000000012],[-56.662215999999944,53.679993000000024],[-56.680283000000031,53.672768000000133],[-56.627220000000023,53.650826000000052],[-56.618057000000022,53.647491000000002],[-56.340552999999943,53.588325999999938],[-56.320281999999963,53.585266000000104],[-56.225554999999872,53.577217000000076],[-56.21665999999999,53.577217000000076],[-56.205832999999984,53.581665000000044],[-56.15582999999998,53.591660000000104],[-56.078613000000018,53.58387799999997],[-56.069167999999934,53.582771000000037],[-56.031386999999995,53.57638500000013],[-56.027221999999995,53.575272000000041],[-55.991385999999977,53.552216000000044],[-55.978881999999942,53.542221000000097],[-55.990836999999942,53.510277000000087],[-55.996947999999918,53.505272000000048],[-56.008780999999942,53.503666000000067],[-56.01294699999994,53.503993999999977],[-56.017444999999952,53.505996999999979],[-56.018611999999962,53.508495000000096],[-56.021110999999962,53.513054000000011],[-56.022498999999982,53.516388000000006],[-56.047501000000011,53.533607000000075],[-56.063332000000003,53.540833000000021],[-56.145836000000031,53.553047000000049],[-56.208892999999989,53.559433000000126],[-56.242500000000007,53.559990000000028],[-56.258338999999921,53.559158000000139],[-56.264724999999999,53.555550000000039],[-56.266113000000018,53.549995000000138],[-56.263335999999924,53.540276000000119],[-56.259170999999924,53.537773000000129],[-56.145553999999947,53.500000000000114],[-56.115279999999927,53.491936000000123],[-56.077498999999932,53.483330000000024],[-56.037780999999995,53.461655000000007],[-56.027442999999948,53.454326999999978],[-55.965552999999943,53.40915700000005],[-55.965836000000024,53.40554800000001],[-55.96944400000001,53.400542999999971],[-56.00417299999998,53.388045999999974],[-56.025275999999963,53.37971500000009],[-56.03167000000002,53.376099000000011],[-56.03833800000001,53.367493000000138],[-56.029998999999975,53.365273000000116],[-56.020835999999974,53.364158999999972],[-56.013061999999991,53.364440999999999],[-56.001396,53.366661000000022],[-55.988051999999982,53.369713000000104],[-55.981383999999935,53.373047000000099],[-55.969497999999874,53.380775000000028],[-55.959723999999937,53.390273999999977],[-55.953132999999923,53.392441000000019],[-55.938605999999936,53.395271000000037],[-55.925116999999943,53.396133000000134],[-55.912216000000001,53.394997000000103],[-55.893616000000009,53.389717000000076],[-55.881385999999964,53.382767000000001],[-55.808051999999975,53.340546000000018],[-55.807456999999943,53.284966000000111],[-55.745834000000002,53.249435000000119],[-55.747498000000007,53.143607999999972],[-55.749442999999985,53.139717000000076],[-55.754172999999923,53.134995000000004],[-55.833312999999919,53.097931000000017],[-55.879856000000018,53.073795000000018],[-55.91194200000001,53.028327999999988],[-55.926666000000012,53.023323000000119],[-55.934440999999936,53.021660000000054],[-55.943329000000006,53.021102999999925],[-55.964447000000007,53.021660000000054],[-55.990836999999942,53.024162000000103],[-56.008338999999978,53.02748900000006],[-56.025001999999972,53.033606999999961],[-56.034172000000012,53.036110000000122],[-56.056106999999997,53.038329999999974],[-56.160278000000005,53.033606999999961],[-56.165833000000021,53.032768000000033],[-56.166945999999996,53.029434000000037],[-56.165276000000006,53.024993999999992],[-56.040840000000003,53.005829000000062],[-55.958611000000019,52.99610100000001],[-55.949439999999981,52.994995000000017],[-55.889442000000031,52.969154000000117],[-55.885276999999974,52.966384999999946],[-55.834166999999979,52.921936000000017],[-55.80471799999998,52.877213000000097],[-55.803328999999962,52.839431999999931],[-55.803885999999977,52.831940000000031],[-55.808051999999975,52.82638500000013],[-55.841109999999958,52.827217000000019],[-55.879165999999941,52.824165000000107],[-55.973610000000008,52.810547000000099],[-55.987777999999992,52.806099000000131],[-56.060829000000012,52.766106000000093],[-55.964721999999938,52.681664000000069],[-55.96055599999994,52.679161000000136],[-55.950553999999897,52.677216000000101],[-55.933608999999933,52.675552000000096],[-55.918335000000013,52.677490000000034],[-55.874717999999973,52.68332700000002],[-55.786948999999993,52.683601000000124],[-55.779167000000029,52.682495000000074],[-55.77305599999994,52.679161000000136],[-55.768889999999942,52.674995000000024],[-55.740836999999999,52.646385000000009],[-55.73860899999994,52.64276899999993],[-55.739998000000014,52.639434999999935],[-55.757506999999919,52.614440999999999],[-55.769447000000014,52.608047000000113],[-55.792777999999998,52.60166200000009],[-55.888892999999996,52.608047000000113],[-55.898613000000012,52.609993000000031],[-55.939940999999976,52.628268999999989],[-55.958777999999995,52.635604999999941],[-56.032775999999956,52.654709000000025],[-56.048889000000031,52.656096999999932],[-56.075004999999919,52.655822999999998],[-56.108611999999937,52.655266000000097],[-56.122771999999941,52.651100000000042],[-56.123885999999857,52.647491000000002],[-56.119720000000029,52.643326000000002],[-56.112007000000006,52.641036999999983],[-56.099060000000009,52.641006000000118],[-56.071945000000028,52.644714000000135],[-56.06361400000003,52.644714000000135],[-56.054442999999992,52.643608000000086],[-55.982773000000009,52.622490000000028],[-55.974998000000028,52.619713000000104],[-55.970832999999914,52.615546999999992],[-55.972770999999966,52.610825000000091],[-55.985275000000001,52.602218999999991],[-56.039169000000015,52.584991000000059],[-56.155777,52.557438000000104],[-56.172611000000018,52.553608000000111],[-56.186110999999983,52.550938000000031],[-56.200779000000011,52.550938000000031],[-56.253058999999951,52.543884000000048],[-56.297500999999954,52.563606000000107],[-56.315552000000025,52.572219999999959],[-56.322501999999986,52.574715000000026],[-56.333327999999995,52.576942000000088],[-56.356391999999971,52.580276000000026],[-56.456389999999942,52.592765999999983],[-56.478607000000011,52.594437000000028],[-56.496871999999939,52.594147000000021],[-56.452782000000013,52.56888600000002],[-56.444160000000011,52.565826000000129],[-56.28055599999999,52.534996000000092],[-56.262221999999952,52.531662000000097],[-56.19755600000002,52.525105000000053],[-56.153556999999921,52.526103999999918],[-55.988892000000021,52.506386000000077],[-55.829726999999934,52.51249700000011],[-55.761390999999946,52.498878000000047],[-55.751395999999943,52.496101000000124],[-55.746947999999975,52.493881000000101],[-55.743057000000022,52.490829000000019],[-55.735001000000011,52.478599999999972],[-55.734169000000009,52.474709000000075],[-55.735832000000016,52.469154000000003],[-55.764450000000011,52.45388000000014],[-55.767501999999922,52.451103000000046],[-55.766395999999986,52.447769000000051],[-55.732772999999952,52.442215000000033],[-55.706107999999915,52.441658000000132],[-55.676666000000012,52.441658000000132],[-55.656661999999983,52.441933000000006],[-55.648612999999955,52.439712999999983],[-55.645554000000004,52.437492000000077],[-55.642775999999969,52.432770000000005],[-55.642775999999969,52.427773000000059],[-55.641669999999976,52.368881000000044],[-55.641944999999964,52.363883999999928],[-55.643332999999984,52.358330000000137],[-55.647780999999952,52.354164000000026],[-55.65444199999996,52.351661999999976],[-55.782501000000025,52.334160000000111],[-55.825004999999976,52.343048000000124],[-55.92861199999993,52.369438000000116],[-56.068335999999931,52.407210999999961],[-56.173614999999984,52.438881000000038],[-56.180556999999965,52.440826000000072],[-56.194442999999922,52.442215000000033],[-56.196945000000028,52.439987000000087],[-56.195273999999984,52.435822000000087],[-56.191382999999973,52.431107000000054],[-56.181388999999967,52.423050000000103],[-56.169448999999986,52.416100000000029],[-55.956664999999987,52.350272999999959],[-55.857779999999991,52.325271999999984],[-55.707222000000002,52.248329000000126],[-55.677222999999969,52.208327999999938],[-55.68638599999997,52.109436000000017],[-55.696945000000028,52.088326000000052],[-55.701667999999927,52.082214000000079],[-55.896666999999923,51.950828999999999],[-56.023330999999985,51.901932000000102],[-56.203330999999935,51.793326999999977],[-56.209723999999994,51.789719000000048],[-56.235832000000016,51.783607000000075],[-56.346663999999976,51.759720000000016],[-56.468886999999995,51.709434999999985],[-56.689720000000023,51.592216000000008],[-56.764450000000011,51.548607000000061],[-56.804169000000002,51.507773999999984],[-56.805832000000009,51.502219999999966],[-56.808891000000017,51.496384000000091],[-56.813613999999973,51.491661000000136],[-56.942771999999991,51.427489999999921],[-56.949721999999952,51.424713000000054],[-56.956947000000014,51.423050000000103],[-57.005561999999941,51.41944100000012],[-57.078056000000004,51.41443600000008],[-57.104239999999947,51.412674000000095],[-57.142226999999991,51.424164000000076],[-57.232215999999937,51.498604000000114],[-57.237777999999992,51.502219999999966],[-57.247222999999963,51.504166000000055],[-57.255561999999998,51.504439999999988],[-57.263617999999894,51.503608999999983],[-57.421386999999925,51.480545000000006],[-57.437774999999988,51.461105000000032],[-57.43638599999997,51.45638300000013],[-57.440833999999938,51.449997000000053],[-57.447495000000004,51.447487000000024],[-57.454720000000009,51.445541000000105],[-57.58666199999999,51.429718000000094],[-57.602225999999916,51.428047000000049],[-57.676665999999955,51.429993000000081],[-57.685828999999956,51.430824000000086],[-57.688605999999936,51.435547000000099],[-57.692497000000003,51.455268999999987],[-57.691939999999931,51.461105000000032],[-57.689437999999939,51.466385000000059],[-57.705275999999969,51.469437000000028],[-57.730826999999863,51.471099999999922],[-57.748054999999965,51.472214000000122],[-57.883888000000013,51.392493999999999],[-57.889998999999989,51.388885000000016],[-57.942771999999991,51.356102000000021],[-57.954720000000009,51.34804500000007],[-57.966110000000015,51.338599999999985],[-57.975554999999986,51.328330999999935],[-57.986664000000019,51.319442999999978],[-58.006950000000018,51.31249200000002],[-58.021384999999952,51.308884000000091],[-58.211387999999943,51.271659999999997],[-58.297225999999966,51.268599999999992],[-58.305556999999965,51.268599999999992],[-58.324448000000018,51.272217000000126],[-58.407776000000013,51.295547000000056],[-58.620551999999975,51.277214000000015],[-58.628051999999968,51.275551000000064],[-58.675003000000004,51.255271999999991],[-58.680000000000007,51.250000000000057],[-58.680556999999908,51.244156000000032],[-58.680000000000007,51.234161000000086],[-58.678336999999999,51.229431000000091],[-58.675559999999905,51.224991000000045],[-58.671111999999937,51.220824999999991],[-58.665549999999996,51.216934000000094],[-58.635833999999932,51.197769000000108],[-58.621383999999978,51.191100999999946],[-58.592223999999931,51.18471500000004],[-58.61333499999995,51.157494000000042],[-58.618606999999997,51.153046000000074],[-58.630554000000018,51.145828000000051],[-58.713615000000004,51.106102000000078],[-58.726944000000003,51.099998000000028],[-58.733329999999967,51.09804500000007],[-58.785278000000005,51.088042999999971],[-58.914718999999991,51.052490000000091],[-58.928054999999972,51.048607000000004],[-58.990836999999885,51.021935000000099],[-59.003333999999938,51.015549000000021],[-59.006110999999976,51.009719999999959],[-59.003616000000022,51.004440000000102],[-58.99888599999997,51.001106000000107],[-58.990279999999984,50.998046999999985],[-58.981383999999935,50.99721500000004],[-58.975272999999959,51.000832000000003],[-58.96832999999998,51.002495000000124],[-58.959441999999967,51.001663000000008],[-58.954720000000009,50.996658000000139],[-58.952498999999989,50.992493000000138],[-58.946662999999944,50.833878000000027],[-58.948051000000021,50.828331000000048],[-59.010559000000001,50.754166000000055],[-59.015282000000013,50.748604000000114],[-59.041672000000005,50.751389000000131],[-59.061385999999914,50.755554000000132],[-59.068335999999988,50.759163000000115],[-59.087218999999948,50.775268999999923],[-59.093055999999933,50.78943600000008],[-59.09444400000001,50.799438000000066],[-59.094718999999941,50.815269000000058],[-59.118889000000024,50.803604000000121],[-59.15582999999998,50.771103000000039],[-59.186385999999914,50.74221799999998],[-59.228881999999999,50.738327000000083],[-59.397223999999994,50.657211000000132],[-59.454444999999964,50.621933000000126],[-59.459723999999937,50.61721],[-59.51916499999993,50.552773000000002],[-59.570556999999951,50.493607000000054],[-59.580001999999922,50.482765000000029],[-59.585274000000027,50.478043000000127],[-59.591667000000029,50.475266000000033],[-59.598610000000008,50.473602000000028],[-59.733611999999937,50.444992000000013],[-59.778336000000024,50.438881000000094],[-59.803885999999977,50.438881000000094],[-59.810555000000022,50.437492000000134],[-59.816108999999926,50.433876000000055],[-59.821670999999981,50.429436000000067],[-59.872222999999963,50.381103999999993],[-59.881667999999934,50.371658000000025],[-59.881667999999934,50.366386000000091],[-59.858893999999964,50.329436999999984],[-59.853888999999924,50.326102999999989],[-59.844718999999998,50.324440000000095],[-59.837775999999963,50.326102999999989],[-59.834723999999881,50.338043000000084],[-59.834998999999982,50.343322999999998],[-59.830832999999984,50.349434000000088],[-59.824722000000008,50.351662000000033],[-59.815001999999993,50.349159000000043],[-59.813331999999946,50.344154000000003],[-59.817223000000013,50.33277099999998],[-59.827498999999989,50.323607999999979],[-59.833885000000009,50.319160000000011],[-59.860282999999981,50.310547000000042],[-59.905273000000022,50.291107000000068],[-60.005004999999983,50.248878000000104],[-60.114448999999922,50.233046999999942],[-60.147781000000009,50.274162000000103],[-60.184440999999993,50.279716000000121],[-60.236945999999989,50.268051000000014],[-60.291671999999949,50.245270000000005],[-60.298614999999927,50.243324000000143],[-60.324447999999961,50.244713000000104],[-60.360001000000011,50.250831999999946],[-60.404442000000017,50.251389000000074],[-60.458892999999989,50.251106000000107],[-60.48332999999991,50.250831999999946],[-60.491668999999945,50.250548999999978],[-60.498610999999926,50.248604],[-60.511672999999973,50.242493000000138],[-60.522223999999881,50.234718000000044],[-60.52694699999995,50.229156000000103],[-60.583611000000019,50.208327999999995],[-60.591666999999973,50.208046000000138],[-60.674445999999989,50.219986000000006],[-60.710555999999997,50.2227630000001],[-60.838607999999965,50.214995999999985],[-61.052222999999969,50.215546000000018],[-61.289443999999946,50.199158000000125],[-61.427779999999984,50.171379000000115],[-61.505561999999941,50.152489000000003],[-61.583610999999905,50.132492000000127],[-61.650832999999921,50.109993000000145],[-61.720832999999914,50.091934000000037],[-61.731612999999982,50.101936000000023],[-61.742106999999976,50.105270000000019],[-61.746277000000021,50.107269000000031],[-61.748280000000022,50.109940000000051],[-61.712104999999951,50.12226899999996],[-61.703780999999992,50.124771000000067],[-61.699443999999971,50.125435000000095],[-61.694442999999922,50.125435000000095],[-61.671386999999982,50.136940000000095],[-61.620551999999918,50.147491000000002],[-61.593055999999876,50.155266000000097],[-61.579726999999991,50.160820000000058],[-61.574447999999904,50.165543000000071],[-61.571945000000028,50.171661000000029],[-61.573891000000003,50.181664000000069],[-61.577224999999999,50.186104000000057],[-61.58916499999998,50.188880999999981],[-61.593612999999948,50.185546999999985],[-61.602225999999916,50.174438000000066],[-61.607779999999991,50.170829999999967],[-61.622222999999963,50.166100000000142],[-61.731833999999935,50.144268000000125],[-61.746997999999905,50.144431999999995],[-61.757503999999983,50.14527099999998],[-61.761832999999967,50.147269999999992],[-61.763663999999949,50.149768999999992],[-61.762999999999977,50.153271000000018],[-61.760665999999958,50.157097000000078],[-61.794448999999986,50.159431000000097],[-61.795279999999991,50.169991000000039],[-61.796950999999979,50.174713000000111],[-61.804442999999992,50.183326999999963],[-61.848884999999996,50.222488000000112],[-61.864723000000026,50.228600000000085],[-61.898338000000024,50.233604000000071],[-61.907218999999941,50.234160999999972],[-61.963332999999977,50.236107000000004],[-61.977218999999991,50.231934000000081],[-61.989723000000026,50.226379000000009],[-61.996666000000005,50.224158999999986],[-62.004172999999923,50.223045000000013],[-62.202498999999989,50.23443600000013],[-62.268889999999999,50.259720000000129],[-62.317779999999971,50.281380000000127],[-62.328056000000004,50.283882000000006],[-62.397498999999982,50.294441000000063],[-62.404167000000029,50.29222100000004],[-62.415549999999939,50.28472099999999],[-62.425560000000019,50.275269000000037],[-62.42999999999995,50.269714000000135],[-62.439994999999954,50.260551000000135],[-62.446105999999986,50.257500000000107],[-62.572226999999941,50.274712000000136],[-62.746947999999918,50.28472099999999],[-63.112502999999947,50.291382000000112],[-63.158332999999971,50.260277000000031],[-63.159163999999976,50.25471500000009],[-63.228607000000011,50.234718000000044],[-63.236663999999962,50.23443600000013],[-63.371940999999993,50.236655999999982],[-63.469443999999953,50.257216999999969],[-63.565552000000025,50.264159999999947],[-63.616660999999908,50.266663000000108],[-63.649726999999928,50.272766000000047],[-63.687499999999886,50.282494000000099],[-63.693885999999964,50.291939000000013],[-63.698607999999979,50.295272999999952],[-63.707503999999972,50.297775000000058],[-63.803328999999906,50.311661000000015],[-63.821388000000013,50.312209999999993],[-63.976104999999961,50.305549999999982],[-64.067229999999995,50.29222100000004],[-64.127776999999924,50.271935000000042],[-64.140563999999927,50.266937000000041],[-64.154175000000009,50.262497000000053],[-64.162215999999944,50.262214999999969],[-64.215285999999935,50.264999000000103],[-64.234726000000023,50.266937000000041],[-64.262787000000003,50.271660000000054],[-64.365279999999984,50.29222100000004],[-64.37388599999997,50.294998000000135],[-64.402221999999995,50.307495000000131],[-64.417770000000019,50.313048999999921],[-64.436661000000015,50.317772000000105],[-64.446105999999986,50.319160000000011],[-64.455001999999922,50.319442999999978],[-64.46305799999999,50.319160000000011],[-64.470839999999953,50.317772000000105],[-64.510009999999966,50.303046999999992],[-64.611938000000009,50.281380000000127],[-64.628052000000025,50.279160000000104],[-64.659438999999963,50.277214000000015],[-64.725006000000008,50.274436999999978],[-64.899993999999936,50.270828000000108],[-65.180557000000022,50.28555300000005],[-65.189986999999917,50.2866590000001],[-65.222777999999948,50.297775000000058],[-65.237503000000004,50.303879000000052],[-65.242492999999854,50.307769999999948],[-65.275009000000011,50.308044000000052],[-65.464447000000007,50.299437999999952],[-65.486663999999962,50.295272999999952],[-65.521666999999979,50.285828000000095],[-65.589995999999985,50.275269000000037],[-65.690552000000025,50.261108000000036],[-65.747771999999998,50.256943000000035],[-65.829453000000001,50.253326000000072],[-65.845839999999953,50.258888000000013],[-65.864440999999999,50.26888300000013],[-65.876389000000017,50.276382000000126],[-65.898055999999883,50.284995999999978],[-65.918059999999969,50.288329999999974],[-65.952498999999932,50.288887000000045],[-65.974166999999966,50.283882000000006],[-65.986937999999896,50.278328000000045],[-65.993057000000022,50.275269000000037],[-66.004180999999903,50.268326000000059],[-66.024718999999948,50.251389000000074],[-66.043334999999956,50.222214000000008],[-66.083327999999995,50.193603999999937],[-66.089721999999881,50.191375999999991],[-66.163329999999974,50.197212000000036],[-66.314163000000008,50.209717000000012],[-66.406386999999938,50.239989999999977],[-66.40695199999999,50.245270000000005],[-66.412215999999944,50.260551000000135],[-66.416945999999996,50.264442000000031],[-66.423049999999932,50.267768999999987],[-66.433318999999983,50.269714000000135],[-66.441665999999941,50.269157000000064],[-66.456389999999999,50.26638800000012],[-66.469727000000034,50.261939999999981],[-66.494720000000029,50.249435000000005],[-66.511948000000018,50.239158999999972],[-66.700835999999924,50.102493000000095],[-66.723327999999924,50.078331000000048],[-66.861937999999896,50.022491000000116],[-66.882492000000013,50.016662999999994],[-66.896118000000001,50.011940000000038],[-66.920273000000009,50.000275000000101],[-66.942489999999907,49.985825000000034],[-66.958617999999944,49.974709000000075],[-66.963622999999984,49.969154000000003],[-66.966399999999965,49.963326000000052],[-66.975280999999995,49.943603999999993],[-66.975829999999974,49.937767000000065],[-66.965560999999923,49.919441000000063],[-66.963332999999977,49.914711000000011],[-67.016402999999855,49.854712999999947],[-67.061385999999857,49.841377000000023],[-67.065276999999924,49.845543000000077],[-67.073897999999929,49.848045000000013],[-67.095839999999896,49.843605000000139],[-67.115829000000019,49.836655000000121],[-67.121658000000025,49.833327999999995],[-67.137222000000008,49.821381000000031],[-67.146666999999979,49.812492000000134],[-67.151397999999915,49.806937999999946],[-67.162216000000001,49.79055000000011],[-67.174164000000019,49.764717000000132],[-67.238892000000021,49.590546000000074],[-67.240828999999962,49.578880000000083],[-67.241378999999995,49.56749700000006],[-67.240828999999962,49.556655999999975],[-67.239990000000034,49.551659000000029],[-67.235000999999954,49.53555300000005],[-67.228881999999999,49.510277000000031],[-67.229171999999949,49.483047000000113],[-67.230834999999956,49.476936000000023],[-67.233886999999982,49.47026800000009],[-67.369155999999975,49.332771000000037],[-67.375,49.327217000000019],[-67.386123999999995,49.322220000000073],[-67.402785999999878,49.3211060000001],[-67.420273000000009,49.321663000000001],[-67.438599000000011,49.324440000000095],[-67.473617999999988,49.326660000000118],[-67.569732999999985,49.329994000000113],[-67.577498999999989,49.329163000000108],[-67.706389999999999,49.312767000000065],[-67.939163000000008,49.287773000000129],[-67.975280999999995,49.284996000000035],[-68.119720000000029,49.271660000000054],[-68.127212999999983,49.269440000000031],[-68.131942999999922,49.266106000000093],[-68.136397999999929,49.260550999999964],[-68.138900999999919,49.25471500000009],[-68.140563999999927,49.248604000000057],[-68.143889999999885,49.23054500000012],[-68.180832000000009,49.12193300000007],[-68.184997999999894,49.116104000000064],[-68.189712999999927,49.112212999999997],[-68.194992000000013,49.10833000000008],[-68.201110999999912,49.105552999999986],[-68.221663999999976,49.100273000000072],[-68.369445999999982,49.069443000000035],[-68.442489999999964,49.095543000000077],[-68.571395999999993,49.061104],[-68.59056099999998,49.054161000000022],[-68.606948999999929,49.042496000000142],[-68.626099000000011,49.023880000000133],[-68.696380999999974,48.939987000000087],[-68.876937999999996,48.85193600000008],[-69.047775000000001,48.773048000000074],[-69.06082200000003,48.767494000000056],[-69.064437999999996,48.762496999999996],[-69.084732000000031,48.72165700000005],[-69.089446999999893,48.709435000000042],[-69.093612999999948,48.691933000000006],[-69.096114999999941,48.674995000000138],[-69.099441999999897,48.663322000000107],[-69.106109999999944,48.644996999999989],[-69.111937999999896,48.63249200000007],[-69.123885999999914,48.614716000000101],[-69.142501999999922,48.594994000000042],[-69.14805599999994,48.591102999999976],[-69.15972899999997,48.58526599999999],[-69.166397000000018,48.583328000000051],[-69.184158000000025,48.584717000000069],[-69.201675000000023,48.588599999999985],[-69.218612999999948,48.589713999999958],[-69.226669000000015,48.588882000000069],[-69.231383999999935,48.585548000000074],[-69.236388999999917,48.581108000000029],[-69.265288999999939,48.541663999999969],[-69.279448999999943,48.515831000000048],[-69.282776000000013,48.504166000000112],[-69.283324999999934,48.493049999999982],[-69.282500999999968,48.482490999999982],[-69.292770000000019,48.457771000000093],[-69.301102000000014,48.446655000000135],[-69.432769999999948,48.307770000000005],[-69.437774999999988,48.303047000000049],[-69.454726999999991,48.291939000000013],[-69.597777999999948,48.207497000000046],[-69.672775000000001,48.14388300000013],[-69.683884000000035,48.137772000000041],[-69.691375999999991,48.137496999999996],[-69.80082699999997,48.153603000000032],[-69.810271999999941,48.155822999999998],[-69.734725999999966,48.113609000000054],[-69.730285999999978,48.10943600000013],[-69.732498000000021,48.103607000000125],[-69.786391999999864,47.994713000000047],[-69.839447000000007,47.907210999999961],[-69.925827000000027,47.773048000000074],[-69.93582200000003,47.764441999999974],[-70.002227999999945,47.711936999999978],[-70.015563999999983,47.702773999999977],[-70.071945000000028,47.674713000000054],[-70.077498999999989,47.672493000000088],[-70.091109999999958,47.669159000000093],[-70.132767000000001,47.644996999999989],[-70.179992999999968,47.608330000000024],[-70.190276999999924,47.599159000000043],[-70.202498999999989,47.583053999999947],[-70.206116000000009,47.576660000000118],[-70.208343999999897,47.570549000000028],[-70.209441999999967,47.553879000000109],[-70.207503999999915,47.533051],[-70.208618000000001,47.527214000000072],[-70.217223999999931,47.508330999999998],[-70.225554999999929,47.496384000000035],[-70.2308349999999,47.492493000000138],[-70.299727999999959,47.466933999999924],[-70.341674999999952,47.460548000000017],[-70.461944999999901,47.429993000000024],[-70.502501999999993,47.390830999999991],[-70.555831999999953,47.322769000000108],[-70.56639100000001,47.304161000000022],[-70.568618999999956,47.298049999999932],[-70.571120999999948,47.281104999999968],[-70.574172999999973,47.274437000000034],[-70.586120999999991,47.257773999999927],[-70.699431999999945,47.126099000000011],[-70.721664000000033,47.101387000000102],[-70.733063000000016,47.095543000000134],[-70.792496000000028,47.068329000000119],[-70.817504999999926,47.058884000000035],[-70.823623999999938,47.056938000000002],[-70.866942999999935,47.051383999999985],[-70.893341000000021,47.045273000000066],[-70.923049999999932,47.032211000000075],[-70.973617999999988,47.003326000000015],[-71.113616999999863,46.912491000000045],[-71.182495000000017,46.864158999999972],[-71.197495000000004,46.852493000000038],[-71.198607999999979,46.846382000000119],[-71.299164000000019,46.742218000000094],[-71.291945999999996,46.744156000000032],[-71.279723999999931,46.749161000000072],[-71.209441999999967,46.782494000000099],[-71.19888299999991,46.788887000000045],[-71.188888999999961,46.796661000000029],[-71.184432999999956,46.802773000000059],[-71.178329000000019,46.815269000000114],[-71.166396999999904,46.831108000000029],[-71.156112999999948,46.838882000000069],[-71.149993999999936,46.842491000000052],[-71.143615999999952,46.844711000000075],[-71.130554000000018,46.847487999999998],[-71.115279999999984,46.84887700000013],[-71.100280999999995,46.84887700000013],[-71.083327999999995,46.847487999999998],[-70.986937999999952,46.854164000000083],[-70.772232000000031,46.915825000000041],[-70.766402999999912,46.918884000000048],[-70.755004999999983,46.936652999999978],[-70.744445999999925,46.943320999999912],[-70.737502999999947,46.946098000000006],[-70.638061999999991,46.981658999999979],[-70.618880999999931,46.988045000000056],[-70.604996000000028,46.990273000000059],[-70.575012000000015,46.993324000000086],[-70.553328999999962,46.998047000000042],[-70.541381999999942,47.00249500000001],[-70.530288999999925,47.007773999999984],[-70.506957999999997,47.02027099999998],[-70.486389000000031,47.033607000000131],[-70.461120999999935,47.053604000000007],[-70.334166999999923,47.15554800000001],[-70.310271999999941,47.176659000000086],[-70.273055999999997,47.213608000000136],[-70.111114999999984,47.340546000000131],[-70.078888000000006,47.361106999999947],[-70.048888999999974,47.386107999999979],[-70.044158999999922,47.390830999999991],[-70.040833000000021,47.397217000000069],[-70.039992999999868,47.402771000000087],[-69.967498999999975,47.505829000000062],[-69.90194699999995,47.537216000000001],[-69.896392999999932,47.541107000000068],[-69.805832000000009,47.613052000000096],[-69.65943900000002,47.744713000000104],[-69.639998999999875,47.762772000000041],[-69.593063000000029,47.808884000000091],[-69.556655999999862,47.856384000000048],[-69.556380999999931,47.866661000000022],[-69.544158999999979,47.883605999999986],[-69.526672000000019,47.90415999999999],[-69.508057000000008,47.924438000000009],[-69.498885999999857,47.933875999999998],[-69.469727000000034,47.961937000000091],[-69.450561999999991,47.979155999999989],[-69.429169000000002,47.995270000000119],[-69.418335000000013,48.001389000000131],[-69.411666999999966,48.003326000000015],[-69.275283999999942,48.067772000000048],[-69.11610399999995,48.178604000000064],[-69.101943999999946,48.192764000000125],[-69.08666999999997,48.204994000000056],[-69.054168999999888,48.228600000000142],[-69.016402999999968,48.254165999999998],[-68.968613000000005,48.279990999999995],[-68.940552000000025,48.294998000000021],[-68.831679999999892,48.344711000000132],[-68.695267000000001,48.396385000000123],[-68.541381999999999,48.451385000000016],[-68.529448999999943,48.457214000000022],[-68.519164999999987,48.464157],[-68.513061999999877,48.469437000000084],[-68.496947999999918,48.490273000000116],[-68.473891999999978,48.515549000000135],[-68.469161999999869,48.520271000000037],[-68.453613000000018,48.532494000000099],[-68.434433000000013,48.541663999999969],[-68.422501000000011,48.545272999999952],[-68.407776000000013,48.548050000000046],[-68.375823999999852,48.546386999999925],[-68.368606999999997,48.547493000000145],[-68.354445999999996,48.551384000000041],[-68.348342999999886,48.554161000000136],[-68.336670000000026,48.561661000000015],[-68.283324999999991,48.600273000000016],[-68.236937999999952,48.625549000000035],[-68.211120999999935,48.636658000000125],[-68.193328999999892,48.643051000000071],[-68.179168999999945,48.646660000000111],[-68.15695199999999,48.64916199999999],[-68.125548999999978,48.648330999999985],[-68.111938000000009,48.651382000000012],[-67.973617999999988,48.695541000000105],[-67.709441999999854,48.793884000000105],[-67.531386999999995,48.859160999999972],[-67.209732000000031,48.935822000000087],[-67.087783999999999,48.960823000000119],[-67.067504999999983,48.966933999999981],[-67.015838999999971,48.986938000000123],[-66.991669000000002,48.999160999999958],[-66.960830999999985,49.011940000000038],[-66.922775000000001,49.026657000000057],[-66.916397000000018,49.028877000000023],[-66.722503999999958,49.08998900000006],[-66.421660999999915,49.162765999999976],[-66.306106999999997,49.186935000000119],[-66.225005999999951,49.200829000000056],[-66.089172000000019,49.218597000000045],[-66.074172999999973,49.219711000000018],[-65.832503999999915,49.231377000000009],[-65.678328999999962,49.245543999999995],[-65.496947999999975,49.261664999999994],[-65.447219999999959,49.262215000000026],[-65.394454999999994,49.259719999999959],[-65.359726000000023,49.256660000000124],[-64.996947999999918,49.220267999999919],[-64.916655999999989,49.20665699999995],[-64.825561999999934,49.187767000000008],[-64.805831999999953,49.18332700000002],[-64.795273000000009,49.176102000000128],[-64.791945999999939,49.171661000000029],[-64.774718999999948,49.159987999999998],[-64.763335999999924,49.154160000000047],[-64.748885999999914,49.148048000000074],[-64.731948999999986,49.142220000000009],[-64.660827999999867,49.123047000000042],[-64.641112999999962,49.118880999999988],[-64.606658999999922,49.117210000000114],[-64.58805799999999,49.112212999999997],[-64.376388999999961,48.997771999999998],[-64.235549999999989,48.910271000000023],[-64.221663999999976,48.898331000000098],[-64.21444699999995,48.889434999999992],[-64.208892999999989,48.880547000000035],[-64.152221999999938,48.764999000000046],[-64.152495999999985,48.759995000000117],[-64.158050999999944,48.75610400000005],[-64.167769999999962,48.758331000000055],[-64.208892999999989,48.782767999999976],[-64.213332999999977,48.786659000000043],[-64.229995999999971,48.797493000000088],[-64.244155999999975,48.803604000000007],[-64.290282999999931,48.821106000000043],[-64.298889000000031,48.823883000000137],[-64.315552000000025,48.828880000000026],[-64.377212999999927,48.846382000000062],[-64.395844000000011,48.851105000000075],[-64.512222000000008,48.87471000000005],[-64.530562999999916,48.87721300000004],[-64.548888999999917,48.878326000000072],[-64.543335000000013,48.873604],[-64.532775999999956,48.866936000000067],[-64.464447000000007,48.824440000000038],[-64.374161000000015,48.787773000000016],[-64.266662999999994,48.713326000000109],[-64.256957999999997,48.706099999999992],[-64.173049999999932,48.639435000000049],[-64.16194200000001,48.627487000000031],[-64.160004000000015,48.622765000000129],[-64.166945999999996,48.621376000000112],[-64.193053999999961,48.623604000000057],[-64.24110399999995,48.622215000000097],[-64.255004999999926,48.618599000000017],[-64.260833999999875,48.615828999999962],[-64.265288999999996,48.610825000000034],[-64.269729999999981,48.604713000000061],[-64.274718999999948,48.592766000000097],[-64.280563000000029,48.575271999999984],[-64.282500999999911,48.569160000000011],[-64.283324999999877,48.563605999999993],[-64.279174999999952,48.554161000000136],[-64.273330999999928,48.550545000000056],[-64.264174999999909,48.549164000000019],[-64.245834000000002,48.546661000000086],[-64.219161999999983,48.528327999999988],[-64.246384000000035,48.488044999999943],[-64.322509999999852,48.437210000000107],[-64.426392000000021,48.404160000000047],[-64.493057000000022,48.394440000000145],[-64.506667999999991,48.391663000000051],[-64.586945000000014,48.36832400000003],[-64.68638599999997,48.338326000000109],[-64.731383999999878,48.274712000000022],[-64.750290000000007,48.245827000000133],[-64.753890999999953,48.239989999999977],[-64.760559000000001,48.227211000000125],[-64.768065999999976,48.202774000000034],[-64.771392999999989,48.196381000000088],[-64.778610000000015,48.19499200000007],[-64.87332200000003,48.180550000000096],[-64.931670999999994,48.171661000000029],[-64.972503999999958,48.135269000000051],[-65.15306099999998,48.052216000000044],[-65.196654999999964,48.033607000000075],[-65.202788999999996,48.031380000000013],[-65.270003999999972,48.012771999999984],[-65.305832000000009,48.005554000000132],[-65.326950000000011,48.002220000000136],[-65.455565999999976,48.000274999999988],[-65.463897999999972,48.002777000000037],[-65.472778000000005,48.011383000000137],[-65.478607000000011,48.019714000000079],[-65.484726000000023,48.033882000000119],[-65.491104000000007,48.042496000000142],[-65.504181000000017,48.048882000000049],[-65.689162999999951,48.093879999999956],[-65.764449999999897,48.109993000000031],[-65.888900999999919,48.199158000000011],[-65.904175000000009,48.205826000000002],[-65.949996999999939,48.191101000000003],[-65.956389999999999,48.188881000000038],[-66.006957999999997,48.159156999999993],[-66.024718999999948,48.139160000000118],[-66.129714999999919,48.107216000000108],[-66.242767000000015,48.109161000000086],[-66.396392999999932,48.114998000000071],[-66.406386999999938,48.116385999999977],[-66.432495000000017,48.118599000000131],[-66.47084000000001,48.119438000000059],[-66.477782999999988,48.118049999999982],[-66.484160999999972,48.115546999999992],[-66.495543999999995,48.10943600000013],[-66.506392999999946,48.102218999999991],[-66.52555799999999,48.085548000000017],[-66.529998999999918,48.080551000000071],[-66.667220999999984,48.028328000000101],[-66.673614999999984,48.026099999999985],[-66.763717999999983,48.00622599999997],[-66.843703999999946,47.996650999999986],[-66.842498999999975,47.992218000000037],[-66.83666999999997,47.988884000000041],[-66.828888000000006,47.98721299999994],[-66.749999999999943,47.979988000000105],[-66.728881999999942,47.984436000000073],[-66.610824999999977,48.011107999999979],[-66.584731999999974,48.019440000000145],[-66.573333999999988,48.025826000000052],[-66.540558000000033,48.036385000000109],[-66.434433000000013,48.067497000000003],[-66.420273000000009,48.070549000000085],[-66.364165999999955,48.073326000000009],[-66.356658999999922,48.073326000000009],[-66.350829999999917,48.069717000000026],[-66.349990999999932,48.06471300000004],[-66.259170999999981,47.999435000000119],[-66.042220999999984,47.935822000000087],[-65.988892000000021,47.923881999999992],[-65.970276000000013,47.92083000000008],[-65.936935000000005,47.92083000000008],[-65.922225999999966,47.922768000000019],[-65.90695199999999,47.923325000000091],[-65.880279999999914,47.920547000000113],[-65.843886999999995,47.911377000000073],[-65.818619000000012,47.903877000000023],[-65.811385999999914,47.900825999999995],[-65.793609999999944,47.890831000000048],[-65.772780999999952,47.876380999999924],[-65.757506999999976,47.865273000000116],[-65.746383999999978,47.852775999999949],[-65.725005999999894,47.82749199999995],[-65.718613000000005,47.818886000000077],[-65.714447000000007,47.809433000000013],[-65.713622999999984,47.804161000000079],[-65.696944999999971,47.733047000000113],[-65.671936000000017,47.645828000000051],[-65.667770000000019,47.641380000000083],[-65.634734999999978,47.62082700000002],[-65.628326000000015,47.623046999999985],[-65.389998999999989,47.736107000000004],[-65.332779000000016,47.766937000000041],[-65.253890999999953,47.801659000000029],[-65.240829000000019,47.806655999999975],[-65.202788999999996,47.818603999999993],[-65.167496000000028,47.825271999999984],[-65.044723999999974,47.844436999999914],[-65.020844000000011,47.844993999999986],[-64.985000999999954,47.84137700000008],[-64.815552000000025,47.811104000000114],[-64.805557000000022,47.808884000000091],[-64.797226000000023,47.806381000000101],[-64.719161999999983,47.764441999999974],[-64.713332999999977,47.761108000000036],[-64.676665999999955,47.735550000000103],[-64.670273000000009,47.726936000000023],[-64.67332499999992,47.720268000000033],[-64.679442999999992,47.716659999999933],[-64.703612999999905,47.706940000000031],[-64.803328999999962,47.630547000000092],[-64.859725999999966,47.576660000000118],[-64.870093999999995,47.536293000000057],[-64.87110899999999,47.515831000000048],[-64.870270000000005,47.510826000000009],[-64.875548999999978,47.460823000000062],[-64.880828999999949,47.432495000000074],[-64.886397999999986,47.414154000000053],[-64.910004000000015,47.353049999999996],[-65.138061999999991,47.192215000000033],[-65.226944000000003,47.140831000000048],[-65.238327000000027,47.134720000000129],[-65.263335999999924,47.124435000000005],[-65.339721999999938,47.099433999999974],[-65.364165999999955,47.089714000000072],[-65.369994999999903,47.086655000000121],[-65.365279999999871,47.082771000000093],[-65.218886999999881,47.053604000000007],[-65.101105000000018,47.076942000000088],[-65.017226999999934,47.091377000000023],[-64.805557000000022,47.083054000000061],[-64.798614999999927,47.079993999999999],[-64.802779999999927,46.993049999999926],[-64.803328999999962,46.987495000000024],[-64.807220000000029,46.981658999999979],[-64.812209999999993,46.977768000000083],[-64.818068999999923,46.9741590000001],[-64.835830999999985,46.965827999999988],[-64.857223999999974,46.95277399999992],[-64.871933000000013,46.939430000000016],[-64.880279999999914,46.930549999999982],[-64.892226999999991,46.91443600000008],[-64.896117999999944,46.908882000000062],[-64.89916999999997,46.902489000000116],[-64.904998999999975,46.883606000000043],[-64.906386999999995,46.872490000000084],[-64.904998999999975,46.851105000000132],[-64.903609999999901,46.840827999999931],[-64.877212999999983,46.791107000000068],[-64.863891999999964,46.774436999999921],[-64.818068999999923,46.72165700000005],[-64.748610999999983,46.702773999999977],[-64.740279999999984,46.70249200000012],[-64.726394999999911,46.696381000000031],[-64.72084000000001,46.693047000000035],[-64.713332999999977,46.684158000000139],[-64.711120999999991,46.679993000000138],[-64.708617999999944,46.669991000000039],[-64.705001999999979,46.638329000000056],[-64.67332499999992,46.500832000000003],[-64.66194200000001,46.468048000000124],[-64.650833000000034,46.460548000000074],[-64.621933000000013,46.427216000000101],[-64.613616999999977,46.414435999999966],[-64.611938000000009,46.409714000000065],[-64.615004999999996,46.392494000000113],[-64.613051999999982,46.366104000000064],[-64.504181000000017,46.240273000000002],[-64.402221999999995,46.233047000000056],[-64.237503000000004,46.229155999999989],[-64.116942999999935,46.181938000000059],[-64.035552999999993,46.182213000000104],[-63.970832999999914,46.180549999999982],[-63.954444999999964,46.178046999999992],[-63.830283999999949,46.146385000000066],[-63.822226999999998,46.14388299999996],[-63.776389999999935,46.121101000000067],[-63.77305599999994,46.117493000000138],[-63.771111000000019,46.112769999999955],[-63.772498999999868,46.108046999999999],[-63.776947000000007,46.103325000000098],[-63.783057999999983,46.099716000000058],[-63.799445999999989,46.091377000000023],[-63.805557000000022,46.089157000000057],[-63.886391000000003,46.06082200000003],[-63.892501999999922,46.058884000000091],[-63.919448999999929,46.053047000000106],[-63.926948999999922,46.052490000000034],[-63.988608999999997,46.051933000000133],[-64.023330999999985,46.057495000000074],[-64.06806899999998,46.059433000000013],[-64.072509999999966,46.054710000000057],[-64.093886999999995,46.021659999999997],[-64.065001999999879,46.004715000000033],[-64.042785999999978,45.991898000000049],[-64.012512000000015,46.005829000000006],[-64.005279999999914,46.005554000000018],[-63.913054999999986,45.979987999999935],[-63.864166000000012,45.961105000000032],[-63.859443999999996,45.951934999999992],[-63.861389000000031,45.94582400000013],[-63.846106999999961,45.930824000000143],[-63.714721999999995,45.840546000000074],[-63.669998000000021,45.818054000000018],[-63.664161999999976,45.815268999999944],[-63.645836000000031,45.833328000000051],[-63.631667999999991,45.859436000000017],[-63.600280999999995,45.869986999999924],[-63.580558999999937,45.874435000000119],[-63.482498000000021,45.877213000000097],[-63.474441999999954,45.876938000000052],[-63.457221999999888,45.874160999999958],[-63.420279999999934,45.864997999999957],[-63.406661999999926,45.858887000000095],[-63.403884999999946,45.854439000000127],[-63.42861199999993,45.823607999999979],[-63.434440999999936,45.820831000000112],[-63.441108999999926,45.819442999999978],[-63.456107999999972,45.818886000000077],[-63.488051999999925,45.820831000000112],[-63.513335999999981,45.82416500000005],[-63.520835999999974,45.823883000000023],[-63.525832999999977,45.819992000000127],[-63.52666499999998,45.814438000000109],[-63.523612999999898,45.809989999999971],[-63.515556000000004,45.807213000000047],[-63.506950000000018,45.805824000000086],[-63.433608999999933,45.799438000000009],[-63.425560000000019,45.799164000000076],[-63.34332999999998,45.797492999999974],[-63.328338999999971,45.79833200000013],[-63.287223999999981,45.805549999999982],[-63.281113000000005,45.807769999999948],[-63.274170000000026,45.808883999999978],[-63.251113999999973,45.809714999999983],[-63.235000999999954,45.80860100000001],[-63.229439000000013,45.804993000000081],[-63.233329999999967,45.799438000000009],[-63.238892000000021,45.796386999999982],[-63.313889000000017,45.769440000000031],[-63.319725000000005,45.768051000000071],[-63.355835000000013,45.764442000000031],[-63.372222999999906,45.76638800000012],[-63.379997000000003,45.766106000000036],[-63.381942999999978,45.759995000000004],[-63.376663000000008,45.755829000000062],[-63.361114999999984,45.745543999999938],[-63.354445999999939,45.742493000000138],[-63.31361400000003,45.736938000000066],[-63.282501000000025,45.733330000000137],[-63.189719999999966,45.73443600000013],[-63.120833999999945,45.759438000000102],[-63.090552999999943,45.790276000000063],[-63.082779000000016,45.80332199999998],[-62.993888999999967,45.796386999999982],[-62.985275000000001,45.794998000000135],[-62.958336000000031,45.788887000000045],[-62.723610000000008,45.764160000000004],[-62.677779999999984,45.764160000000004],[-62.557220000000029,45.674713000000111],[-62.503890999999953,45.627487000000087],[-62.461944999999957,45.612495000000081],[-62.250281999999913,45.708327999999995],[-62.092772999999966,45.781105000000139],[-62.035003999999958,45.820831000000112],[-62.015006999999912,45.836655000000007],[-61.973327999999981,45.867210000000057],[-61.931388999999967,45.884720000000016],[-61.925559999999962,45.886107999999922],[-61.917503000000011,45.885551000000021],[-61.903052999999886,45.87943300000012],[-61.89805599999994,45.875267000000008],[-61.896110999999962,45.871101000000124],[-61.89805599999994,45.865273000000002],[-61.903327999999988,45.861382000000106],[-61.914718999999934,45.8555530000001],[-61.919448999999986,45.851105000000132],[-61.923332000000016,45.845543000000021],[-61.925559999999962,45.839432000000102],[-61.925277999999992,45.834434999999985],[-61.889998999999989,45.701385000000016],[-61.885558999999887,45.690544000000102],[-61.88138600000002,45.686653000000035],[-61.792228999999907,45.639160000000118],[-61.783332999999971,45.636658000000011],[-61.735000999999897,45.623322000000087],[-61.724998000000028,45.62082700000002],[-61.618056999999965,45.610550000000046],[-61.603888999999924,45.635269000000051],[-61.569999999999936,45.669991000000039],[-61.565001999999936,45.673882000000106],[-61.559165999999948,45.676659000000029],[-61.546111999999994,45.681106999999997],[-61.526107999999965,45.685265000000129],[-61.504447999999968,45.686935000000062],[-61.488892000000021,45.686935000000062],[-61.471382000000006,45.682495000000074],[-61.466110000000015,45.678878999999995],[-61.396392999999932,45.626656000000082],[-61.386947999999961,45.618880999999988],[-61.353427999999951,45.56971400000009],[-61.316146999999944,45.533173000000033],[-61.260001999999929,45.510277000000087],[-61.232356999999979,45.46119299999998],[-61.294167000000016,45.434714999999926],[-61.36500499999994,45.404160000000104],[-61.368057000000022,45.413879000000122],[-61.374717999999973,45.416938999999957],[-61.388610999999912,45.41415400000011],[-61.400832999999977,45.410820000000115],[-61.413329999999974,45.406937000000028],[-61.462219000000005,45.384438000000046],[-61.477492999999924,45.373047000000099],[-61.481666999999959,45.367767000000015],[-61.478881999999999,45.363327000000027],[-61.463889999999992,45.346939000000134],[-61.457222000000002,45.343605000000139],[-61.226386999999932,45.344154000000117],[-61.153327999999874,45.348327999999981],[-61.139441999999974,45.348877000000073],[-61.131667999999991,45.348327999999981],[-61.047225999999966,45.335548000000017],[-60.996391000000017,45.32749200000012],[-60.980552999999986,45.324440000000038],[-60.970551,45.321663000000115],[-60.966110000000015,45.318329000000119],[-60.964721999999995,45.313049000000035],[-60.96527900000001,45.295546999999999],[-60.970276000000013,45.269714000000079],[-61.050834999999893,45.231102000000078],[-61.0777819999999,45.219437000000028],[-61.090278999999953,45.215546000000131],[-61.109726000000023,45.210823000000119],[-61.123329000000012,45.208602999999925],[-61.139724999999942,45.210823000000119],[-61.142226999999991,45.215271000000087],[-61.222220999999934,45.23832700000014],[-61.267501999999979,45.246384000000091],[-61.313056999999901,45.242766999999958],[-61.323890999999946,45.236107000000118],[-61.360000999999954,45.209991000000059],[-61.373610999999926,45.196380999999974],[-61.373328999999956,45.191101000000117],[-61.365554999999972,45.188324000000023],[-61.349723999999981,45.186935000000005],[-61.340836000000024,45.184433000000126],[-61.344161999999869,45.178047000000049],[-61.34944200000001,45.174438000000009],[-61.355002999999954,45.171660999999915],[-61.384445000000028,45.15915700000005],[-61.397498999999982,45.156097000000045],[-61.450835999999924,45.145546000000081],[-61.458611000000019,45.144714000000022],[-61.543891999999971,45.141662999999994],[-61.638053999999954,45.120270000000062],[-61.724715999999944,45.091660000000047],[-61.898338000000024,45.024993999999992],[-62.026664999999923,44.984717999999987],[-62.087775999999963,44.97026800000009],[-62.286391999999921,44.928047000000049],[-62.391944999999964,44.908325000000048],[-62.476386999999875,44.895546000000138],[-62.521942000000024,44.850829999999974],[-62.546111999999937,44.821663000000001],[-62.641388000000006,44.809158000000082],[-62.795005999999887,44.780548000000067],[-62.801108999999997,44.778603000000089],[-62.813888999999961,44.750832000000003],[-62.809998000000007,44.734718000000044],[-62.851111999999944,44.718323000000112],[-62.928611999999873,44.733879000000115],[-63.012779000000023,44.773323000000005],[-63.020554000000004,44.773880000000077],[-63.055557000000022,44.772766000000104],[-63.0625,44.771378000000027],[-63.061942999999928,44.76638800000012],[-63.060279999999977,44.761664999999994],[-63.057502999999997,44.757217000000026],[-63.043616999999927,44.739989999999977],[-63.017776000000026,44.722488000000112],[-63.012504999999919,44.713326000000052],[-63.011948000000018,44.708046000000138],[-63.013618000000008,44.702774000000034],[-63.018332999999927,44.697487000000081],[-63.048339999999996,44.676102000000128],[-63.05471799999998,44.673325000000034],[-63.104445999999996,44.746658000000139],[-63.115279999999871,44.731377000000009],[-63.118331999999953,44.724991000000102],[-63.138335999999981,44.693047000000092],[-63.142776000000026,44.688599000000124],[-63.283057999999926,44.627212999999983],[-63.439994999999954,44.590828000000045],[-63.448883000000023,44.593048000000067],[-63.49500299999994,44.614715999999987],[-63.526336999999955,44.63610099999994],[-63.535167999999999,44.642769000000101],[-63.545334000000025,44.652107000000058],[-63.556999000000019,44.66160600000012],[-63.615836999999942,44.70249199999995],[-63.635001999999986,44.711380000000133],[-63.642775999999913,44.714157000000057],[-63.651107999999965,44.715546000000018],[-63.658332999999971,44.714995999999985],[-63.660552999999936,44.708328000000051],[-63.649444999999957,44.686104000000114],[-63.640556000000004,44.673050000000046],[-63.635559000000001,44.668884000000105],[-63.627776999999924,44.666382000000056],[-63.606110000000001,44.668884000000105],[-63.598610000000008,44.667770000000132],[-63.591942000000017,44.664711000000011],[-63.583611000000019,44.656936999999971],[-63.564223999999911,44.620769999999993],[-63.558220000000006,44.613266000000124],[-63.555388999999934,44.607769000000019],[-63.546059000000014,44.588604000000032],[-63.520835999999974,44.512771999999984],[-63.520279000000016,44.507773999999984],[-63.525276000000019,44.495270000000119],[-63.533332999999971,44.484993000000145],[-63.542777999999942,44.476379000000065],[-63.553054999999915,44.469711000000075],[-63.570838999999921,44.461937000000091],[-63.631110999999919,44.435822000000087],[-63.638610999999912,44.436935000000005],[-63.90694400000001,44.495270000000119],[-63.913611999999887,44.498604000000114],[-63.924171000000001,44.506103999999993],[-63.932502999999997,44.513329000000056],[-63.935555000000022,44.517494000000056],[-63.94388600000002,44.536110000000065],[-63.938605999999936,44.616104000000064],[-63.937774999999931,44.621658000000082],[-63.928054999999858,44.642220000000009],[-63.919166999999959,44.651657000000114],[-63.914443999999889,44.65554800000001],[-63.908607000000018,44.678047000000106],[-64.008347000000015,44.647491000000002],[-64.045272999999952,44.635826000000122],[-64.055266999999958,44.619438000000059],[-64.065551999999911,44.595268000000033],[-64.063888999999961,44.590545999999961],[-64.059158000000025,44.581665000000044],[-64.054992999999968,44.577773999999977],[-64.039443999999946,44.572495000000004],[-64.033614999999941,44.563049000000035],[-64.009170999999981,44.513329000000056],[-64.010009999999966,44.507773999999984],[-64.083069000000023,44.466660000000047],[-64.091949,44.46888000000007],[-64.110549999999989,44.478324999999984],[-64.121657999999968,44.485268000000133],[-64.125548999999978,44.510551000000021],[-64.123610999999926,44.527489000000116],[-64.119720000000029,44.53943600000008],[-64.121657999999968,44.544159000000093],[-64.127486999999917,44.552773000000116],[-64.135833999999988,44.560546999999929],[-64.146118000000001,44.568329000000062],[-64.170273000000009,44.586105000000032],[-64.200835999999981,44.576384999999959],[-64.305267000000015,44.533332999999971],[-64.337509000000011,44.411933999999974],[-64.346664000000033,44.362495000000138],[-64.346114999999998,44.357215999999994],[-64.329726999999934,44.328880000000026],[-64.311110999999926,44.319159999999954],[-64.303328999999962,44.316666000000055],[-64.295273000000009,44.316101000000003],[-64.290557999999976,44.31999200000007],[-64.292220999999984,44.324715000000026],[-64.299987999999928,44.32749200000012],[-64.305557000000022,44.330826000000116],[-64.309433000000013,44.335548000000017],[-64.307770000000005,44.340828000000101],[-64.301102000000014,44.341933999999924],[-64.273620999999878,44.330276000000083],[-64.260558999999944,44.324164999999994],[-64.239440999999943,44.294158999999922],[-64.253341999999918,44.27526899999998],[-64.258056999999951,44.269989000000123],[-64.283324999999877,44.253052000000082],[-64.319457999999997,44.264717000000019],[-64.355835000000013,44.273323000000119],[-64.391113000000018,44.253326000000015],[-64.428054999999915,44.228325000000041],[-64.432220000000029,44.223602000000028],[-64.444716999999912,44.190269000000001],[-64.616394000000014,44.133049000000142],[-64.61860699999994,44.071937999999989],[-64.666397000000018,43.990273000000116],[-64.671386999999982,43.986382000000049],[-64.732223999999917,43.951660000000004],[-64.738051999999925,43.949432000000058],[-64.745269999999948,43.948874999999987],[-64.776397999999972,43.950828999999999],[-64.80610699999994,43.950546000000031],[-64.812774999999931,43.949432000000058],[-64.818068999999923,43.946381000000031],[-64.832229999999925,43.926102000000128],[-64.881103999999993,43.838882000000126],[-64.906386999999995,43.800544999999943],[-65.030562999999972,43.704163000000051],[-65.066665999999941,43.696381000000088],[-65.242217999999923,43.679161000000136],[-65.325835999999867,43.674995000000024],[-65.375274999999874,43.575272000000098],[-65.449158000000011,43.55971500000004],[-65.453338999999971,43.554993000000138],[-65.475829999999974,43.505829000000006],[-65.481383999999991,43.464439000000027],[-65.496947999999975,43.490829000000019],[-65.548049999999932,43.556099000000017],[-65.559433000000013,43.568054000000075],[-65.568618999999956,43.570274000000097],[-65.575561999999991,43.569717000000026],[-65.584732000000031,43.560271999999941],[-65.591385000000002,43.549721000000034],[-65.603881999999999,43.534721000000104],[-65.612212999999997,43.526099999999985],[-65.617492999999968,43.523604999999975],[-65.646118000000001,43.511940000000038],[-65.67332499999992,43.506103999999993],[-65.712783999999999,43.498604000000114],[-65.720550999999944,43.499161000000015],[-65.72582999999986,43.50249500000001],[-65.777221999999995,43.562492000000134],[-65.783324999999934,43.571106000000043],[-65.783889999999985,43.576385000000016],[-65.781951999999933,43.587769000000094],[-65.778885000000002,43.599998000000085],[-65.773055999999997,43.612770000000125],[-65.771117999999944,43.624435000000005],[-65.769454999999937,43.64138000000014],[-65.768065999999919,43.658043000000021],[-65.768340999999964,43.668883999999991],[-65.769729999999868,43.679161000000136],[-65.77555799999999,43.688324000000136],[-65.868880999999988,43.786385000000053],[-65.907775999999956,43.821663000000058],[-65.912215999999887,43.825272000000041],[-65.918610000000001,43.828331000000048],[-65.932770000000005,43.827217000000019],[-65.938888999999961,43.824997000000053],[-65.942490000000021,43.819443000000035],[-65.956115999999895,43.776100000000099],[-65.968886999999995,43.719436999999971],[-65.971663999999976,43.71276899999998],[-65.975006000000008,43.707214000000079],[-65.983063000000016,43.697768999999994],[-66.013335999999867,43.691658000000132],[-66.020553999999947,43.69110100000006],[-66.029449,43.731659000000093],[-66.030562999999972,43.736107000000061],[-66.033614999999998,43.740273000000002],[-66.042220999999984,43.748046999999985],[-66.080841000000021,43.768051000000071],[-66.088607999999965,43.768326000000116],[-66.09445199999999,43.766106000000093],[-66.107772999999952,43.753326000000129],[-66.121658000000025,43.762215000000026],[-66.135559000000001,43.78943600000008],[-66.166945999999939,43.858603999999957],[-66.168059999999912,43.863051999999925],[-66.168059999999912,43.895546000000024],[-66.167495999999971,43.901382000000069],[-66.165832999999964,43.907211000000075],[-66.151947000000007,43.919159000000093],[-66.150283999999942,43.925270000000012],[-66.149993999999936,43.93082400000003],[-66.14916999999997,44.001106000000107],[-66.14973399999991,44.011108000000036],[-66.181945999999925,44.067497000000117],[-66.204453000000001,44.086655000000007],[-66.190552000000025,44.150543000000027],[-66.187774999999931,44.161934000000031],[-66.118606999999997,44.338043000000027],[-66.093886999999881,44.367493000000138],[-66.089995999999985,44.371658000000139],[-66.037505999999951,44.423325000000091],[-65.976943999999946,44.477485999999999],[-65.967223999999987,44.486107000000118],[-65.95666499999993,44.491661000000079],[-65.950286999999946,44.493050000000096],[-65.944442999999978,44.489716000000101],[-65.938048999999921,44.491104000000007],[-65.865828999999962,44.538886999999988],[-65.841674999999952,44.568604000000107],[-65.841384999999946,44.574164999999994],[-65.844451999999876,44.578331000000048],[-65.848891999999978,44.582213999999965],[-65.855270000000019,44.585823000000005],[-65.862777999999878,44.586936999999978],[-65.931106999999997,44.582213999999965],[-65.943053999999961,44.577773999999977],[-65.958617999999944,44.567497000000003],[-66.004456000000005,44.535827999999981],[-66.03472899999997,44.514717000000132],[-66.12332200000003,44.448875000000044],[-66.177779999999927,44.396660000000054],[-66.185821999999973,44.387214999999969],[-66.190552000000025,44.383330999999998],[-66.197220000000016,44.386108000000036],[-66.198607999999979,44.412766000000033],[-66.191100999999946,44.423325000000091],[-66.103058000000033,44.500000000000114],[-66.068068999999923,44.524994000000106],[-65.971663999999976,44.591934000000094],[-65.820220999999947,44.654434000000037],[-65.816726999999958,44.655768999999964],[-65.808722999999929,44.651936000000092],[-65.802895000000035,44.644604000000072],[-65.796394000000021,44.624268000000029],[-65.796897999999942,44.617603000000145],[-65.797897000000034,44.613937000000021],[-65.756957999999941,44.615273000000059],[-65.756393000000003,44.609993000000031],[-65.753066999999987,44.60582700000009],[-65.745270000000005,44.605552999999986],[-65.697220000000016,44.612495000000081],[-65.690276999999924,44.614440999999999],[-65.68499799999995,44.61693600000001],[-65.625274999999988,44.658882000000006],[-65.522507000000019,44.737769999999955],[-65.548614999999984,44.733879000000115],[-65.682616999999937,44.693156999999928],[-65.686278999999956,44.691825999999935],[-65.690276999999924,44.691162000000077],[-65.695441999999957,44.691825999999935],[-65.704116999999997,44.69499200000007],[-65.706116000000009,44.697654999999997],[-65.707114999999988,44.700489000000005],[-65.707450999999992,44.703487000000052],[-65.705947999999978,44.707489000000066],[-65.700942999999938,44.713157999999964],[-65.697937000000024,44.71549200000004],[-65.717772999999966,44.721931000000041],[-65.658339999999953,44.758605999999986],[-65.646956999999929,44.765273999999977],[-65.299987999999928,44.928329000000133],[-65.202498999999989,44.973877000000073],[-65.114166000000012,45.011665000000107],[-64.934158000000025,45.100273000000016],[-64.918059999999912,45.111107000000061],[-64.879439999999988,45.130820999999969],[-64.861938000000009,45.139717000000076],[-64.814712999999983,45.158043000000077],[-64.808608999999933,45.16027100000008],[-64.777221999999995,45.169990999999982],[-64.744995000000017,45.178329000000076],[-64.710830999999985,45.183876000000055],[-64.590285999999935,45.208046000000024],[-64.550551999999925,45.216660000000104],[-64.468886999999938,45.242766999999958],[-64.451400999999976,45.249435000000119],[-64.434432999999899,45.25750000000005],[-64.417770000000019,45.266663000000051],[-64.397506999999962,45.281105000000025],[-64.393889999999999,45.28694200000001],[-64.391952999999944,45.292770000000132],[-64.391113000000018,45.298332000000073],[-64.393065999999862,45.303322000000094],[-64.401671999999962,45.311104000000057],[-64.406951999999933,45.314438000000052],[-64.413895000000025,45.317497000000003],[-64.430832000000009,45.322220000000016],[-64.454726999999934,45.323608000000092],[-64.462218999999948,45.323051000000021],[-64.470839999999953,45.324440000000038],[-64.488051999999982,45.329162999999994],[-64.494719999999973,45.332214000000022],[-64.489165999999955,45.335266000000104],[-64.465835999999911,45.334717000000012],[-64.440552000000025,45.331665000000044],[-64.353057999999919,45.316101000000003],[-64.338333000000034,45.310271999999941],[-64.327498999999989,45.303322000000094],[-64.321395999999936,45.294715999999994],[-64.317779999999914,45.285271000000137],[-64.317229999999881,45.280273000000136],[-64.317779999999914,45.274437000000034],[-64.321944999999914,45.269714000000079],[-64.327498999999989,45.266936999999984],[-64.343062999999972,45.256103999999993],[-64.353333000000021,45.239159000000029],[-64.385833999999932,45.145546000000081],[-64.380279999999857,45.131104000000107],[-64.363891999999964,45.101386999999988],[-64.359725999999966,45.097487999999942],[-64.352218999999934,45.09804500000007],[-64.346953999999982,45.101105000000075],[-64.337219000000005,45.108604000000071],[-64.333892999999932,45.115272999999945],[-64.334441999999967,45.120270000000062],[-64.333327999999995,45.131660000000124],[-64.329178000000013,45.13638300000008],[-64.324387000000002,45.139343000000054],[-64.31138599999997,45.141380000000026],[-64.295836999999949,45.141380000000026],[-64.244155999999975,45.123877999999991],[-64.221114999999941,45.110549999999989],[-64.210280999999952,45.103607000000011],[-64.157226999999978,45.056938000000002],[-64.146956999999986,45.044441000000063],[-64.14555399999989,45.034720999999934],[-64.154449,44.98443600000013],[-64.156386999999938,44.978325000000041],[-64.116942999999935,45.009163000000058],[-64.114165999999955,45.046661000000029],[-64.121933000000013,45.058044000000052],[-64.136397999999929,45.074440000000038],[-64.141678000000013,45.078605999999979],[-64.162505999999894,45.092216000000008],[-64.188323999999909,45.104713000000004],[-64.192490000000021,45.108604000000071],[-64.198607999999865,45.11721],[-64.198882999999967,45.122490000000084],[-64.195830999999941,45.150543000000027],[-64.16361999999998,45.185265000000015],[-64.152785999999992,45.192764000000011],[-64.118331999999953,45.208885000000009],[-64.106110000000001,45.213326000000109],[-64.099990999999932,45.215271000000087],[-64.065826000000015,45.222214000000122],[-64.008057000000008,45.236381999999992],[-63.982215999999937,45.243049999999926],[-63.956664999999987,45.251388999999961],[-63.805831999999953,45.301933000000133],[-63.596107000000018,45.315544000000102],[-63.470832999999857,45.321663000000115],[-63.384170999999924,45.35083000000003],[-63.371940999999993,45.354996000000142],[-63.365554999999915,45.357773000000009],[-63.360832000000016,45.360824999999977],[-63.36860699999994,45.36360900000011],[-63.738892000000021,45.396660000000054],[-63.755561999999941,45.398048000000131],[-63.797226000000023,45.392768999999987],[-63.837775999999963,45.385551000000135],[-63.988051999999982,45.384438000000046],[-64.040558000000033,45.401100000000042],[-64.044998000000021,45.404434000000037],[-64.061110999999983,45.409714000000122],[-64.069732999999985,45.410271000000023],[-64.083618000000001,45.409430999999984],[-64.16332999999986,45.403877000000136],[-64.214721999999995,45.399719000000005],[-64.312774999999931,45.39138000000014],[-64.357772999999952,45.38110400000005],[-64.529998999999975,45.408043000000021],[-64.674164000000019,45.383049000000085],[-64.815825999999959,45.348602000000085],[-64.929442999999992,45.324440000000038],[-64.937209999999993,45.326942000000088],[-64.938048999999921,45.332214000000022],[-64.936661000000015,45.343323000000112],[-64.933318999999983,45.355553000000043],[-64.917769999999905,45.408599999999922],[-64.909163999999976,45.418052999999986],[-64.831389999999942,45.479155999999932],[-64.765563999999983,45.505554000000132],[-64.699157999999954,45.531104999999968],[-64.568893000000003,45.604163999999969],[-64.470550999999944,45.670273000000122],[-64.430282999999974,45.715546000000018],[-64.332229999999925,45.76888300000013],[-64.331680000000006,45.763611000000026],[-64.326110999999969,45.749435000000005],[-64.296660999999915,45.763328999999942],[-64.283066000000019,45.776656999999943],[-64.27555799999999,45.799995000000081],[-64.27305599999994,45.811661000000015],[-64.270003999999915,45.828880000000083],[-64.272933999999964,45.835754000000065],[-64.273620999999878,45.838599999999985],[-64.276671999999962,45.842766000000097],[-64.324722000000008,45.879990000000021],[-64.33277899999996,45.882767000000058],[-64.347778000000005,45.881934999999999],[-64.361388999999974,45.879158000000075],[-64.366942999999992,45.876380999999981],[-64.367766999999958,45.870544000000052],[-64.363327000000027,45.866661000000079],[-64.354720999999927,45.865547000000106],[-64.357498000000021,45.851105000000132],[-64.418059999999912,45.796104000000014],[-64.478332999999907,45.750549000000035],[-64.49722300000002,45.783882000000006],[-64.489990000000034,45.794998000000135],[-64.488051999999982,45.801102000000014],[-64.489165999999955,45.811378000000047],[-64.49221799999998,45.815543999999989],[-64.597335999999984,45.922104000000047],[-64.681945999999868,46.021659999999997],[-64.686935000000005,46.041382000000056],[-64.690551999999968,46.050827000000083],[-64.694991999999957,46.054710000000057],[-64.736937999999952,46.083878000000084],[-64.747498000000007,46.090546000000018],[-64.754456000000005,46.089157000000057],[-64.764450000000011,46.083054000000118],[-64.706389999999999,45.994713000000104],[-64.701949999999954,45.990829000000076],[-64.648009999999942,45.933047999999928],[-64.631171999999992,45.922718000000032],[-64.628998000000024,45.920383000000072],[-64.601180999999997,45.881550000000118],[-64.601180999999997,45.877384000000006],[-64.601340999999991,45.873881999999981],[-64.602844000000005,45.86721399999999],[-64.604507000000012,45.863552000000084],[-64.583069000000023,45.826942000000145],[-64.756392999999946,45.622489999999971],[-64.772506999999962,45.609993000000145],[-64.778335999999967,45.607216000000051],[-64.785827999999924,45.610275000000058],[-64.791381999999999,45.613609000000054],[-64.796660999999972,45.622489999999971],[-64.801665999999955,45.626381000000038],[-64.808334000000002,45.629715000000033],[-64.817229999999938,45.632492000000127],[-64.825287000000003,45.633331000000055],[-64.847504000000015,45.633331000000055],[-64.884445000000028,45.631660000000011],[-64.904175000000009,45.627769000000114],[-64.941375999999991,45.602218999999991],[-64.947219999999959,45.598045000000127],[-64.961945000000014,45.586105000000032],[-64.976395000000025,45.572494999999947],[-64.986663999999962,45.564437999999996],[-64.99722300000002,45.557213000000104],[-65.015015000000005,45.548882000000049],[-65.047501000000011,45.539161999999976],[-65.104445999999939,45.524994000000106],[-65.138335999999924,45.517769000000044],[-65.152221999999938,45.516106000000093],[-65.164444000000003,45.513054000000011],[-65.220551,45.493881000000101],[-65.326675000000023,45.457497000000046],[-65.339447000000007,45.452216999999962],[-65.368057000000022,45.437767000000065],[-65.394454999999994,45.419441000000063],[-65.421386999999925,45.402771000000087],[-65.53195199999999,45.342490999999995],[-65.883620999999948,45.209160000000054],[-65.889998999999989,45.207497000000103],[-65.903609999999958,45.205551000000014],[-65.910827999999981,45.205268999999987],[-65.918883999999935,45.206099999999992],[-65.98332199999993,45.219711000000132],[-65.989989999999977,45.223045000000127],[-66.09060699999992,45.295657999999946],[-66.092940999999939,45.297989000000086],[-66.094611999999984,45.300659000000053],[-66.091605999999956,45.303824999999961],[-66.083892999999932,45.34276600000004],[-66.078063999999927,45.345543000000077],[-66.05749499999996,45.348602000000085],[-66.045273000000009,45.353325000000041],[-66.029449,45.364158999999916],[-66.015288999999996,45.377769000000001],[-66.003066999999987,45.394997000000103],[-66.000838999999985,45.401100000000042],[-65.99722300000002,45.417770000000019],[-65.994445999999982,45.455550999999957],[-65.994445999999982,45.460823000000062],[-66.002501999999993,45.461662000000047],[-66.008346999999901,45.458885000000123],[-66.19027699999998,45.339432000000045],[-66.193329000000006,45.333603000000039],[-66.193329000000006,45.328331000000105],[-66.190552000000025,45.323883000000137],[-66.179169000000002,45.305823999999973],[-66.176102000000014,45.301933000000133],[-66.145279000000016,45.279160000000047],[-66.14166999999992,45.259769000000006],[-66.137000999999941,45.259270000000129],[-66.113997999999981,45.25877400000013],[-66.113509999999906,45.237770000000069],[-66.147232000000031,45.19221500000009],[-66.205565999999976,45.163878999999952],[-66.21665999999999,45.15915700000005],[-66.427779999999984,45.084991000000002],[-66.459732000000031,45.106102000000021],[-66.459732000000031,45.111382000000106],[-66.461120999999935,45.116104000000007],[-66.468063000000029,45.129714999999976],[-66.488891999999908,45.149994000000049],[-66.496384000000035,45.149719000000061],[-66.531386999999995,45.147217000000012],[-66.537505999999951,45.145271000000093],[-66.55999799999995,45.133330999999998],[-66.571395999999936,45.126656000000139],[-66.586120999999991,45.116936000000067],[-66.608046999999942,45.104164000000083],[-66.642226999999991,45.086380000000133],[-66.648055999999997,45.083603000000039],[-66.754729999999881,45.055550000000096],[-66.792496000000028,45.055267000000129],[-66.77694699999995,45.086380000000133],[-66.776107999999965,45.09137700000008],[-66.777785999999992,45.096100000000035],[-66.783065999999963,45.099716000000114],[-66.965560999999923,45.17943600000001],[-67.021941999999854,45.170273000000009],[-67.027221999999995,45.168052999999986],[-67.046386999999982,45.126938000000052],[-67.129439999999988,45.172217999999987],[-67.186934999999949,45.19221500000009],[-67.206542999999897,45.18303700000007],[-67.236114999999927,45.193877999999984],[-67.25306699999993,45.199432000000002],[-67.261123999999995,45.201103000000046],[-67.267775999999969,45.200546000000145],[-67.275009000000011,45.1988750000001],[-67.287215999999944,45.194153000000028],[-67.290557999999976,45.182770000000005],[-67.290282999999988,45.177489999999921],[-67.292220999999927,45.166100000000085],[-67.296386999999925,45.160820000000001],[-67.301391999999964,45.156937000000084],[-67.306655999999862,45.153320000000122],[-67.318893000000003,45.148605000000089],[-67.325561999999991,45.147491000000116],[-67.333069000000023,45.147491000000116],[-67.341948999999943,45.149994000000049],[-67.354172000000005,45.156097000000045],[-67.403884999999946,45.194435000000055],[-67.408050999999944,45.198325999999952],[-67.422500999999954,45.214996000000099],[-67.455275999999969,45.263054000000068],[-67.462783999999999,45.276099999999985],[-67.465011999999888,45.281105000000025],[-67.465285999999992,45.286385000000109],[-67.464172000000019,45.29193900000007],[-67.450561999999934,45.333054000000061],[-67.485001000000011,45.489159000000029],[-67.485275000000001,45.494438000000002],[-67.482772999999952,45.500274999999931],[-67.478881999999885,45.504439999999931],[-67.467772999999966,45.510826000000066],[-67.43638599999997,45.521378000000027],[-67.421936000000017,45.523323000000005],[-67.415832999999964,45.525269000000094],[-67.410827999999924,45.529990999999995],[-67.406951999999876,45.578049000000135],[-67.408889999999985,45.582214000000135],[-67.412505999999951,45.586936999999978],[-67.424163999999962,45.594711000000132],[-67.453888000000006,45.612495000000081],[-67.462219000000005,45.614715999999987],[-67.46945199999999,45.613051999999982],[-67.486114999999984,45.603607000000068],[-67.499999999999943,45.60166200000009],[-67.515015000000005,45.601105000000018],[-67.573897999999986,45.611664000000019],[-67.656661999999983,45.630546999999922],[-67.664443999999946,45.6336060000001],[-67.791107000000011,45.693047000000092],[-67.796660999999915,45.696098000000063],[-67.799164000000019,45.701102999999932],[-67.804442999999992,45.731377000000009],[-67.806380999999988,45.78472099999999],[-67.786666999999909,45.888329000000056],[-67.772507000000019,45.957496999999933],[-67.779174999999952,46.283332999999971],[-67.788894999999968,46.787773000000072],[-67.791671999999949,46.921379000000059],[-67.794998000000021,47.06999200000007],[-67.85972599999991,47.097488000000112],[-67.874161000000015,47.103607000000125],[-67.892226999999991,47.114440999999999],[-67.948607999999922,47.166382000000112],[-67.951400999999976,47.17083000000008],[-67.955841000000021,47.179993000000081],[-67.957229999999925,47.184989999999971],[-67.961944999999957,47.194153000000142],[-67.968886999999938,47.20277400000009],[-68.18582200000003,47.332771000000037],[-68.208617999999944,47.341660000000104],[-68.244995000000017,47.351936000000023],[-68.306655999999919,47.364440999999943],[-68.323059000000001,47.365829000000076],[-68.337219000000005,47.363609000000054],[-68.348891999999921,47.359992999999974],[-68.367766999999958,47.351105000000018],[-68.373046999999929,47.347214000000122],[-68.564712999999927,47.289719000000048],[-68.761948000000018,47.232764999999972],[-68.787505999999951,47.224709000000075],[-68.831679999999892,47.208884999999952],[-68.887786999999946,47.188042000000053],[-68.895279000000016,47.189987000000087],[-68.958618000000001,47.217209000000025],[-68.965285999999878,47.220543000000021],[-69.023894999999925,47.250274999999931],[-69.036117999999988,47.257217000000026],[-69.044998000000021,47.264442000000088],[-69.049164000000019,47.274437000000034],[-69.053054999999972,47.28943600000008],[-69.053588999999931,47.293777000000091],[-69.054992999999854,47.299438000000066],[-69.055266999999958,47.30471],[-69.056106999999997,47.336655000000064],[-69.055556999999965,47.347488000000055],[-69.052490000000034,47.380546999999979],[-69.049437999999952,47.392219999999952],[-69.045837000000006,47.398604999999975],[-69.043610000000001,47.404709000000025],[-69.039444000000003,47.416939000000127],[-69.038329999999974,47.422493000000088],[-69.039992999999981,47.427490000000034],[-69.048614999999984,47.435546999999985],[-69.055556999999965,47.438599000000124],[-69.123885999999914,47.458327999999995],[-69.132766999999944,47.459991000000116],[-69.232498000000021,47.471375000000023],[-69.239623999999992,47.464413000000093],[-69.305267000000015,47.40026899999998],[-69.423614999999984,47.283332999999971],[-69.653884999999946,47.055267000000129],[-69.712509000000011,46.996940999999993],[-69.84722899999997,46.862213000000111],[-69.992767000000015,46.715828000000045],[-70.009170999999867,46.698043999999982],[-70.026947000000007,46.587493999999992],[-70.038605000000018,46.509995000000004],[-70.044158999999922,46.474991000000102],[-70.047775000000001,46.453880000000083],[-70.050551999999982,46.438599000000124],[-70.06361400000003,46.424164000000019],[-70.068893000000003,46.419716000000051],[-70.075286999999946,46.417770000000132],[-70.081389999999999,46.417770000000132],[-70.088057999999876,46.414993000000038],[-70.119155999999975,46.393608000000086],[-70.200287000000003,46.336380000000077],[-70.242492999999911,46.279160000000047],[-70.287780999999939,46.203049000000135],[-70.305556999999908,46.078880000000083],[-70.3125,45.985825000000091],[-70.309722999999963,45.980820000000051],[-70.303329000000019,45.977767999999969],[-70.293883999999991,45.975548000000117],[-70.278335999999967,45.975266000000033],[-70.260559000000001,45.971374999999966],[-70.253615999999909,45.968323000000055],[-70.248336999999935,45.964714000000072],[-70.23971599999993,45.956657000000064],[-70.238051999999982,45.951934999999992],[-70.255004999999983,45.913048000000003],[-70.258895999999993,45.907493999999986],[-70.263335999999981,45.90277100000003],[-70.393889999999942,45.778046000000131],[-70.466659999999933,45.711937000000034],[-70.555267000000015,45.672768000000133],[-70.576949999999954,45.660820000000058],[-70.631942999999978,45.627769000000114],[-70.693054000000018,45.571938000000046],[-70.720276000000013,45.528328000000101],[-70.725280999999995,45.49971800000003],[-70.724715999999944,45.49471299999999],[-70.712783999999999,45.477768000000026],[-70.704726999999934,45.469154000000003],[-70.689437999999939,45.458046000000024],[-70.86860699999994,45.246101000000124],[-70.873046999999985,45.241379000000052],[-70.878600999999946,45.238601999999958],[-70.886123999999995,45.238045000000056],[-71.021118000000001,45.326660000000004],[-71.085128999999995,45.307708999999988],[-71.139998999999932,45.253052000000082],[-71.146392999999989,45.25249500000001],[-71.170272999999952,45.253883000000087],[-71.189163000000008,45.257773999999984],[-71.211669999999913,45.266105999999979],[-71.233063000000016,45.274993999999936],[-71.239715999999987,45.278046000000074],[-71.264449999999954,45.290833000000077],[-71.280562999999972,45.301933000000133],[-71.288604999999961,45.304436000000067],[-71.302779999999984,45.303047000000106],[-71.314712999999927,45.299438000000066],[-71.327498999999932,45.294441000000006],[-71.424438000000009,45.25],[-71.408614999999998,45.223045000000127],[-71.402221999999938,45.21915400000006],[-71.398894999999982,45.215546000000131],[-71.396118000000001,45.210548000000131],[-71.395843999999954,45.205268999999987],[-71.398620999999991,45.199432000000002],[-71.43249499999996,45.130272000000048],[-71.436110999999926,45.125267000000008],[-71.459166999999979,45.102776000000006],[-71.482772999999952,45.083878000000084],[-71.493056999999965,45.075271999999984],[-71.496383999999921,45.068886000000077],[-71.49888599999997,45.057213000000047],[-71.497222999999963,45.041663999999969],[-71.494155999999975,45.020546000000024],[-71.55471799999998,45.019989000000123],[-71.892776000000026,45.019157000000064],[-72.049987999999985,45.019440000000031],[-72.271652000000017,45.018775999999946],[-72.459166999999866,45.017494000000113],[-72.510283999999956,45.017212000000029],[-72.778884999999946,45.020828000000108],[-72.956389999999942,45.018326000000059],[-73.337173000000007,45.01186400000006],[-73.346114999999998,45.011383000000023],[-73.352997000000016,45.009421999999972],[-73.359267999999986,45.010063000000059],[-73.376662999999951,45.011108000000036],[-73.622771999999941,45.006660000000068],[-73.91164399999991,45.000000000000057],[-74.249161000000015,44.992218000000094],[-74.682021999999904,45.006714000000102],[-74.75111400000003,45.002220000000023],[-74.769729999999925,45.006386000000134],[-74.785827999999981,45.011383000000023],[-74.81220999999988,45.01776899999993],[-74.828887999999949,45.019157000000064],[-74.850280999999939,45.016663000000108],[-74.990829000000019,44.986655999999925],[-75.00140399999998,44.980545000000063],[-75.170546999999999,44.898604999999975],[-75.278060999999923,44.857216000000051],[-75.301666000000012,44.846656999999993],[-75.317779999999857,44.837212000000136],[-75.395843999999954,44.785827999999924],[-75.537216000000001,44.691376000000048],[-75.5625,44.673882000000106],[-75.618057000000022,44.634995000000117],[-75.628051999999968,44.627769000000001],[-75.682495000000017,44.588043000000027],[-75.736114999999927,44.546387000000038],[-75.801940999999999,44.491104000000007],[-75.81138599999997,44.483047000000056],[-75.820557000000008,44.474990999999989],[-75.824722000000008,44.469986000000119],[-75.828338999999971,44.446655000000078],[-75.834166999999979,44.43443300000007],[-75.841109999999901,44.423050000000103],[-75.849441999999954,44.414711000000068],[-75.864166000000012,44.402771000000143],[-75.879990000000021,44.393326000000059],[-75.904449,44.384995000000004],[-75.966109999999958,44.364158999999972],[-75.982177999999919,44.358864000000096],[-75.997771999999998,44.355270000000075],[-76.019454999999937,44.353325000000098],[-76.034728999999913,44.353050000000053],[-76.046950999999979,44.349716000000058],[-76.057769999999948,44.344993999999986],[-76.064437999999939,44.341377000000023],[-76.363373000000024,44.150992999999971],[-76.410278000000005,44.121101000000124],[-76.43472300000002,44.104713000000061],[-76.439986999999974,44.099434000000088],[-76.531386999999995,43.983046999999942],[-76.569457999999997,43.934157999999968],[-76.583618000000001,43.915824999999927],[-76.697494999999947,43.768600000000049],[-76.801940999999999,43.633605999999986],[-76.816955999999948,43.633049000000085],[-76.974166999999909,43.634438000000046],[-77.288329999999917,43.636658000000068],[-77.582779000000016,43.638603000000046],[-77.729996000000028,43.639160000000118],[-77.857773000000009,43.639434999999992],[-77.887222000000008,43.639434999999992],[-78.388061999999934,43.638329000000113],[-78.663054999999986,43.637497000000053],[-78.724715999999944,43.629433000000006],[-78.938323999999909,43.553878999999995],[-79.02806099999998,43.521934999999985],[-79.095275999999956,43.497771999999998],[-79.18472300000002,43.465546000000131],[-79.132216999999969,43.382492000000013],[-79.066787999999974,43.279400000000066],[-79.054169000000002,43.262496999999996],[-79.053328999999962,43.256660000000068],[-79.044997999999964,43.165543000000014],[-79.044723999999974,43.160545000000013],[-79.045836999999949,43.148880000000133],[-79.049438000000009,43.143883000000017],[-79.05972300000002,43.137215000000083],[-79.063613999999916,43.132210000000043],[-79.081115999999952,43.085548000000074],[-79.043334999999956,43.011664999999994],[-79.040832999999964,43.007774000000097],[-79.021666999999923,42.987213000000054],[-79.005843999999911,42.977211000000125],[-78.978606999999954,42.961380000000133],[-78.97193900000002,42.958046000000138],[-78.962783999999942,42.956383000000017],[-78.946655000000021,42.955551000000128],[-78.938599000000011,42.953322999999955],[-78.932770000000005,42.950829000000056],[-78.927490000000034,42.946937999999989],[-78.920273000000009,42.939156000000025],[-78.918335000000013,42.934715000000097],[-78.915282999999988,42.924164000000019],[-78.917220999999927,42.904991000000109],[-78.918335000000013,42.89888000000002],[-78.926665999999898,42.880546999999979],[-78.932219999999973,42.868324000000086],[-78.935271999999998,42.862495000000081],[-78.942490000000021,42.852493000000095],[-78.965835999999967,42.833602999999982],[-78.986937999999952,42.819992000000013],[-79.12110899999999,42.769157000000121],[-79.154448999999943,42.757217000000026],[-79.299437999999952,42.702492000000007],[-79.56645199999997,42.600708000000054],[-79.763427999999919,42.524703999999986],[-79.776672000000019,42.52027099999998],[-80.086120999999991,42.399994000000106],[-80.096953999999926,42.396385000000066],[-80.510283999999899,42.329163000000051],[-80.528548999999998,42.326617999999996],[-80.869155999999975,42.279160000000104],[-81.249161000000015,42.224991000000045],[-81.424437999999952,42.144997000000046],[-81.623610999999983,42.052773000000116],[-81.822234999999978,41.96027400000014],[-82.218062999999972,41.774437000000034],[-82.238891999999964,41.763885000000073],[-82.425277999999992,41.675551999999982],[-82.462783999999942,41.676102000000014],[-82.649993999999936,41.681938000000059],[-82.696654999999964,41.683875999999998],[-83.071944999999914,41.859717999999987],[-83.080841000000021,41.874992000000077],[-83.117415999999878,41.946194000000048],[-83.130828999999892,41.970543000000134],[-83.150283999999942,42.008330999999998],[-83.168609999999944,42.046104000000014],[-83.168335000000013,42.048050000000103],[-83.137222000000008,42.201385000000016],[-83.132492000000013,42.220824999999991],[-83.12332200000003,42.245827000000077],[-83.118056999999965,42.25777400000004],[-83.107772999999952,42.272766000000047],[-83.086959999999976,42.300545000000056],[-83.062209999999993,42.318603999999993],[-83.051940999999999,42.324715000000083],[-83.027221999999995,42.331940000000145],[-83.002227999999945,42.339157000000057],[-82.975829999999974,42.344711000000075],[-82.940551999999968,42.357498000000078],[-82.841384999999946,42.396941999999967],[-82.808884000000035,42.413322000000107],[-82.793609999999944,42.422768000000076],[-82.775283999999942,42.43721000000005],[-82.763061999999991,42.448600999999996],[-82.729996000000028,42.48333000000008],[-82.704453000000001,42.508331000000055],[-82.670273000000009,42.539993000000038],[-82.665282999999931,42.544158999999922],[-82.659103000000016,42.548195000000078],[-82.650756999999942,42.553642000000139],[-82.644973999999991,42.556411999999966],[-82.630553999999961,42.557495000000074],[-82.622222999999963,42.556656000000089],[-82.614166000000012,42.554710000000057],[-82.605835000000013,42.554161000000079],[-82.586394999999925,42.558601000000124],[-82.571670999999981,42.56888600000002],[-82.535827999999867,42.599434000000031],[-82.521392999999932,42.618881000000044],[-82.513335999999867,42.63638300000008],[-82.484726000000023,42.719154000000003],[-82.474716000000001,42.751663000000065],[-82.471114999999941,42.769989000000066],[-82.470551,42.782493999999986],[-82.47193900000002,42.793053000000043],[-82.473327999999924,42.797493000000031],[-82.480559999999912,42.812492000000134],[-82.481948999999929,42.823326000000009],[-82.481109999999944,42.829437000000098],[-82.464446999999893,42.898048000000074],[-82.462509000000011,42.904709000000025],[-82.418776999999977,43.018639000000064],[-82.404175000000009,43.049164000000076],[-82.322234999999978,43.21054799999996],[-82.252791999999943,43.346382000000119],[-82.228881999999942,43.391380000000026],[-82.146118000000001,43.553047000000106],[-82.130279999999971,43.585266000000104],[-82.214447000000007,43.952217000000132],[-82.331679999999949,44.460823000000119],[-82.430556999999965,44.882767000000115],[-82.543059999999969,45.355826999999977],[-82.629990000000021,45.396102999999982],[-82.665008999999998,45.411933999999917],[-82.954178000000013,45.54193900000007],[-83.050826999999913,45.585266000000047],[-83.11221299999994,45.612770000000069],[-83.270844000000011,45.683326999999963],[-83.500290000000007,45.784995999999978],[-83.597778000000005,45.827217000000019],[-83.523894999999982,45.918053000000043],[-83.487777999999992,45.961661999999933],[-83.447768999999994,46.011940000000095],[-83.474716000000001,46.036385000000109],[-83.483321999999987,46.043884000000105],[-83.566665999999998,46.098602000000085],[-83.577498999999989,46.105270000000075],[-83.596114999999998,46.114158999999972],[-83.610549999999932,46.119156000000089],[-83.627776999999867,46.123046999999929],[-83.663054999999872,46.126099000000067],[-83.830565999999862,46.126099000000067],[-83.846114999999941,46.124992000000134],[-83.883895999999936,46.102776000000119],[-83.888031000000012,46.096161000000109],[-83.892257999999913,46.092346000000134],[-83.898009999999942,46.08718900000008],[-83.917998999999952,46.073303000000124],[-83.923003999999935,46.070250999999985],[-83.936004999999966,46.065383999999995],[-83.942840999999987,46.066101000000003],[-83.952788999999996,46.068603999999993],[-83.958892999999932,46.071663000000115],[-83.962783999999999,46.075554000000011],[-84.076675000000023,46.203049000000135],[-84.089721999999938,46.220267999999976],[-84.099166999999909,46.232764999999972],[-84.105834999999956,46.247771999999998],[-84.15695199999999,46.391663000000108],[-84.15834000000001,46.396659999999997],[-84.160277999999948,46.424995000000024],[-84.154448999999943,46.445267000000115],[-84.149170000000026,46.457214000000079],[-84.139998999999989,46.474159000000043],[-84.121933000000013,46.498877999999991],[-84.118057000000022,46.512497000000053],[-84.118331999999953,46.518051000000071],[-84.119994999999903,46.523323000000005],[-84.12249799999995,46.527771000000143],[-84.126389000000017,46.531937000000084],[-84.132491999999957,46.53472099999999],[-84.192763999999954,46.546661000000086],[-84.408614999999884,46.508605999999986],[-84.428328999999962,46.503052000000025],[-84.434433000000013,46.500275000000101],[-84.454453000000001,46.486938000000066],[-84.459441999999967,46.482764999999915],[-84.463897999999972,46.478325000000098],[-84.474715999999944,46.463608000000079],[-84.479996000000028,46.46027400000014],[-84.486388999999974,46.458885000000123],[-84.494719999999973,46.458046000000138],[-84.512512000000015,46.45915999999994],[-84.529998999999975,46.461380000000133],[-84.565001999999993,46.466385000000002],[-84.775008999999955,46.653046000000074],[-84.787780999999995,46.68971300000004],[-84.806945999999925,46.748328999999956],[-84.825561999999877,46.806938000000059],[-84.83277899999996,46.829163000000051],[-84.856948999999986,46.902214000000072],[-84.872222999999963,46.909431000000041],[-84.917495999999971,46.928604000000121],[-85.354445999999996,47.111664000000076],[-85.464171999999905,47.157211000000132],[-85.738891999999964,47.270827999999995],[-85.839721999999938,47.31221000000005],[-86.014724999999942,47.383880999999917],[-86.051391999999964,47.39888000000002],[-86.466659999999933,47.567215000000033],[-86.568893000000003,47.608330000000024],[-86.884444999999971,47.734717999999987],[-87.201400999999976,47.860275000000115],[-87.341674999999952,47.915542999999957],[-87.444716999999969,47.955826000000002],[-88.188323999999966,48.244156000000089],[-88.368056999999908,48.31221000000005],[-88.645554000000004,48.264160000000004],[-88.691665999999941,48.255554000000075],[-88.974166999999909,48.139160000000118],[-89.323333999999988,47.993050000000096],[-89.356658999999979,47.979713000000061],[-89.447768999999937,48.003326000000015],[-89.493125999999961,48.003166000000078],[-89.556655999999975,48.001389000000131],[-89.573059000000001,48.001663000000065],[-89.57887299999993,48.00262500000008],[-89.583069000000023,48.003326000000015],[-89.598617999999931,48.006660000000011],[-89.603881999999999,48.00999500000006],[-89.608337000000006,48.014160000000061],[-89.614715999999987,48.016663000000051],[-89.750564999999995,48.029160000000047],[-89.760559000000001,48.029991000000052],[-89.838897999999972,48.01166500000005],[-89.862502999999947,48.000832000000059],[-89.888061999999991,47.991936000000123],[-89.895554000000004,47.989990000000034],[-89.903885000000002,47.989159000000029],[-89.911666999999966,47.991379000000052],[-89.982223999999974,48.016105999999979],[-89.993057000000022,48.02276599999999],[-90,48.030204999999967],[-90.000838999999985,48.031105000000025],[-90.032775999999956,48.069717000000026],[-90.056106999999997,48.100548000000117],[-90.059432999999956,48.104996000000085],[-90.065001999999936,48.10833000000008],[-90.081680000000006,48.111938000000009],[-90.12721299999987,48.119156000000032],[-90.146118000000001,48.121658000000082],[-90.156386999999938,48.122490000000028],[-90.279998999999975,48.113051999999982],[-90.740829000000019,48.090828000000045],[-90.758895999999993,48.094711000000018],[-90.769454999999937,48.099998000000085],[-90.778335999999967,48.107498000000021],[-90.838608000000022,48.184158000000025],[-90.841674999999952,48.191658000000132],[-90.843063000000029,48.205826000000002],[-90.83805799999999,48.208603000000039],[-90.833625999999924,48.209099000000094],[-90.829726999999991,48.212493999999936],[-90.829192999999975,48.214638000000093],[-90.828887999999949,48.221656999999936],[-90.830291999999929,48.225548000000003],[-90.832503999999915,48.227211000000125],[-90.849166999999909,48.233879000000115],[-90.868606999999997,48.237495000000138],[-90.898055999999883,48.236656000000039],[-90.928329000000019,48.228600000000142],[-90.969161999999926,48.214714000000129],[-91.126098999999954,48.154991000000109],[-91.14916999999997,48.144157000000064],[-91.192489999999964,48.114998000000071],[-91.232223999999974,48.087769000000094],[-91.24888599999997,48.079437000000098],[-91.269454999999994,48.07388300000008],[-91.283324999999991,48.071381000000031],[-91.311661000000015,48.069160000000124],[-91.325561999999991,48.069717000000026],[-91.34722899999997,48.068054000000075],[-91.381377999999984,48.061661000000129],[-91.392226999999934,48.056099000000017],[-91.418335000000013,48.041107000000011],[-91.462783999999942,48.057770000000062],[-91.573623999999995,48.093048000000067],[-91.645142000000021,48.098343000000114],[-91.6875,48.144714000000135],[-91.729720999999984,48.187209999999936],[-91.734160999999915,48.190543999999932],[-91.739715999999987,48.193321000000026],[-91.756957999999997,48.194434999999999],[-91.776107999999965,48.194153000000142],[-91.791672000000005,48.195267000000115],[-91.850554999999986,48.203880000000083],[-91.940276999999924,48.23054500000012],[-91.956589000000008,48.23663300000004],[-91.97084000000001,48.244437999999946],[-91.985824999999977,48.255829000000119],[-91.997771999999998,48.266662999999994],[-92.007232999999985,48.27915999999999],[-92.008895999999993,48.28276800000009],[-92.011123999999938,48.292496000000085],[-92.011672999999917,48.297493000000031],[-92.013335999999924,48.304993000000081],[-92.020554000000004,48.322769000000051],[-92.02806099999998,48.336105000000032],[-92.035552999999993,48.343605000000082],[-92.041945999999939,48.347771000000023],[-92.051940999999943,48.353882000000056],[-92.141678000000013,48.357216000000051],[-92.162216000000001,48.356658999999979],[-92.257232999999928,48.346939000000077],[-92.265014999999892,48.343605000000082],[-92.276107999999965,48.337493999999992],[-92.280288999999982,48.332771000000037],[-92.285827999999981,48.326103000000046],[-92.300551999999925,48.304993000000081],[-92.300827000000027,48.298050000000103],[-92.297225999999966,48.28943600000008],[-92.288604999999961,48.276100000000099],[-92.283614999999998,48.263885000000016],[-92.283065999999963,48.256660000000124],[-92.285552999999936,48.250549000000035],[-92.290282999999988,48.246658000000139],[-92.306716999999935,48.241592000000026],[-92.331680000000006,48.234160999999972],[-92.351943999999946,48.228325000000098],[-92.356658999999979,48.228600000000142],[-92.361664000000019,48.231102000000021],[-92.369155999999975,48.238883999999985],[-92.426392000000021,48.311661000000072],[-92.455275999999969,48.394157000000007],[-92.582229999999981,48.441375999999991],[-92.697768999999994,48.485268000000076],[-92.715285999999935,48.541382000000056],[-92.943054000000018,48.621101000000067],[-92.953063999999927,48.62332200000003],[-92.966109999999958,48.624991999999963],[-93.244995000000017,48.640549000000021],[-93.308883999999978,48.630272000000048],[-93.322509999999966,48.628044000000102],[-93.40834000000001,48.608604000000128],[-93.449996999999996,48.597214000000065],[-93.456664999999987,48.594994000000042],[-93.458618000000001,48.592491000000052],[-93.458618000000001,48.589432000000102],[-93.456116000000009,48.583054000000118],[-93.452788999999996,48.579436999999984],[-93.449721999999952,48.570549000000028],[-93.449996999999996,48.56749700000006],[-93.454177999999899,48.559714999999926],[-93.46055599999994,48.55332199999998],[-93.465835999999911,48.54972099999992],[-93.476394999999968,48.544158999999979],[-93.489440999999999,48.539718999999991],[-93.503066999999874,48.537498000000085],[-93.65695199999999,48.51527399999992],[-93.664444000000003,48.514999000000103],[-93.724166999999966,48.51388500000013],[-93.778610000000015,48.51638800000012],[-93.793059999999969,48.517768999999987],[-93.800277999999935,48.520271000000037],[-93.803604000000007,48.524712000000136],[-93.805557000000022,48.532211000000132],[-93.80972300000002,48.550270000000069],[-93.817779999999971,48.581940000000145],[-93.820007000000032,48.590546000000074],[-93.830001999999979,48.612770000000012],[-93.833327999999995,48.616386000000034],[-93.842498999999975,48.623604000000057],[-93.851944000000003,48.626938000000052],[-93.865554999999972,48.630272000000048],[-93.880553999999961,48.630272000000048],[-93.885283999999899,48.630272000000048],[-94.063888999999961,48.638046000000031],[-94.111937999999896,48.641106000000093],[-94.134170999999867,48.642769000000044],[-94.235275000000001,48.653046000000018],[-94.250564999999995,48.656097000000045],[-94.252791999999886,48.65776800000009],[-94.25418099999996,48.660545000000013],[-94.252228000000002,48.671379000000059],[-94.252228000000002,48.679993000000138],[-94.256667999999934,48.687767000000122],[-94.263061999999991,48.694153000000028],[-94.271117999999888,48.699158000000068],[-94.278610000000015,48.702492000000063],[-94.291107000000011,48.706099999999992],[-94.305832000000009,48.708328000000108],[-94.390563999999927,48.711105000000032],[-94.406112999999948,48.711105000000032],[-94.414169000000015,48.709991000000059],[-94.433318999999983,48.701934999999992],[-94.453613000000018,48.695824000000073],[-94.460555999999997,48.694435000000112],[-94.476395000000025,48.693878000000041],[-94.500838999999985,48.696938000000046],[-94.523894999999925,48.701934999999992],[-94.605835000000013,48.724433999999917],[-94.637221999999952,48.739159000000086],[-94.643616000000009,48.743049999999982],[-94.689986999999917,48.774712000000079],[-94.699996999999996,48.782767999999976],[-94.706664999999987,48.79055000000011],[-94.709441999999967,48.803047000000106],[-94.711120999999991,48.846382000000062],[-94.710007000000019,48.855270000000075],[-94.709075999999982,48.857948000000135],[-94.705001999999979,48.862770000000125],[-94.700287000000003,48.868881000000044],[-94.699722000000008,48.871101000000067],[-94.700287000000003,48.895271000000037],[-94.701675000000023,48.909714000000122],[-94.704178000000013,48.924438000000009],[-94.707503999999972,48.941932999999949],[-94.71665999999999,48.970543000000021],[-94.720550999999887,48.978874000000076],[-94.727218999999934,48.99221799999998],[-94.732773000000009,49.001663000000065],[-94.745270000000005,49.028603000000089],[-94.766952999999944,49.075554000000125],[-94.797774999999945,49.155822999999998],[-94.798889000000031,49.159156999999993],[-94.804717999999866,49.17971799999998],[-94.806655999999975,49.193603999999993],[-94.81527699999998,49.29332700000009],[-94.815552000000025,49.306099000000131],[-94.818344000000025,49.309989999999971],[-94.821944999999971,49.312767000000065],[-94.922775000000001,49.355827000000033],[-94.935927999999933,49.360297999999943],[-94.946380999999974,49.36221299999994],[-94.958617999999944,49.361664000000019],[-94.96556099999998,49.360275000000001],[-94.998610999999983,49.357498000000078],[-95.025833000000034,49.357498000000078],[-95.078063999999927,49.359161000000029],[-95.085662999999954,49.360023000000126],[-95.120834000000002,49.364998000000014],[-95.142501999999922,49.371658000000025],[-95.152785999999935,49.376656000000025],[-95.154174999999952,49.366386000000091],[-95.154448999999886,49.333328000000108],[-95.153960999999981,49.173332000000073],[-95.154174999999952,48.999435000000119],[-95.26655599999998,48.999977000000001],[-97.219940000000008,48.999718000000087],[-97.502791999999943,48.999435000000119],[-97.635833999999988,48.999435000000119],[-97.801940999999999,49.000000000000114],[-97.969161999999926,49.000274999999988],[-98.26916499999993,49.000274999999988],[-98.502227999999889,48.999435000000119],[-98.868606999999997,49.000000000000114],[-99.335555999999997,48.999435000000119],[-99.835555999999997,49.000000000000114],[-100.00222799999995,49.000000000000114],[-100.50195300000001,48.999718000000087],[-101.06916799999999,49.000000000000114],[-101.30222299999997,49.000274999999988],[-101.367233,48.998787000000107],[-101.46888699999994,48.999435000000119],[-102.16887699999995,49.000000000000114],[-102.33556399999998,48.999435000000119],[-102.53555299999994,49.000274999999988],[-102.76834099999996,48.999435000000119],[-103.03527800000001,48.999435000000119],[-103.16832699999992,48.999435000000119],[-103.26889,49.000000000000114],[-103.43554699999993,49.000274999999988],[-103.53527800000001,48.999435000000119],[-103.73528299999987,48.999435000000119],[-104.033096,49.000251999999989],[-104.13527699999986,48.999718000000087],[-104.33500699999996,48.999435000000119],[-104.83500700000002,48.999435000000119],[-105.00140399999998,48.999435000000119],[-105.26834100000002,49.000000000000114],[-105.70221699999996,48.999435000000119],[-105.93554699999999,48.999435000000119],[-106.03472899999991,48.999435000000119],[-106.13527699999997,48.999435000000119],[-106.26862299999993,48.999435000000119],[-106.46806300000003,48.999435000000119],[-106.73554999999993,48.999435000000119],[-107.33528100000001,49.000000000000114],[-107.43499800000001,49.000000000000114],[-107.63474300000001,48.999435000000119],[-107.73554999999993,48.999435000000119],[-107.80110199999996,48.999435000000119],[-108.16887700000001,48.999435000000119],[-108.33500699999996,48.999435000000119],[-108.53472899999997,48.999435000000119],[-108.6677699999999,48.999435000000119],[-108.83473200000003,48.999435000000119],[-109.33473200000003,48.999435000000119],[-109.63474299999996,48.999435000000119],[-109.801941,48.999435000000119],[-109.96777299999997,48.999718000000087],[-109.99965700000001,49.000603000000126],[-110.10138699999999,48.999435000000119],[-110.20111099999991,48.999435000000119],[-110.30166599999995,49.000000000000114],[-110.36776699999996,49.000000000000114],[-110.50110599999988,49.000000000000114],[-110.66777000000002,49.000000000000114],[-110.76862299999993,48.999435000000119],[-111.36833199999995,48.999435000000119],[-111.80110199999996,48.999435000000119],[-112.03472899999997,48.999435000000119],[-112.16832699999998,48.999435000000119],[-112.234734,49.000000000000114],[-112.33500699999996,49.000000000000114],[-112.43499799999995,49.000000000000114],[-112.53500399999996,49.000000000000114],[-112.60166900000002,49.000000000000114],[-112.93472300000002,49.000000000000114],[-113.03443900000002,49.000000000000114],[-113.23416099999997,48.999435000000119],[-113.36833200000001,48.999435000000119],[-113.567497,48.999435000000119],[-114.03443899999991,48.999435000000119],[-114.05985999999996,49.000603000000126],[-114.33500700000002,48.999435000000119],[-114.46749899999992,48.999435000000119],[-114.53472899999991,49.000000000000114],[-114.63390399999997,49.000000000000114],[-114.90110800000002,48.999435000000119],[-115.03415699999999,48.999435000000119],[-115.16750299999995,48.999435000000119],[-115.36805700000002,49.000000000000114],[-115.46806300000003,49.000000000000114],[-115.56723,49.000000000000114],[-115.60138699999987,48.999435000000119],[-115.734444,48.999435000000119],[-116.04833999999994,48.999718000000087],[-117.00140399999998,48.999718000000087],[-117.03662099999997,49.003128000000117],[-117.06722999999994,48.999718000000087],[-117.20084399999996,48.999435000000119],[-117.234734,49.000000000000114],[-117.30055199999993,49.000000000000114],[-117.567497,49.000000000000114],[-117.83444199999991,49.000000000000114],[-117.86749299999997,48.999435000000119],[-118.00083899999998,48.999435000000119],[-118.13417099999998,48.999435000000119],[-118.36805699999996,48.999435000000119],[-118.76777600000003,48.999435000000119],[-118.96749899999992,48.999435000000119],[-119.13417099999987,48.999435000000119],[-119.26722699999999,48.999435000000119],[-119.46777299999985,48.999435000000119],[-119.86749299999991,48.999435000000119],[-119.93415800000002,48.999435000000119],[-120.03415699999999,48.999435000000119],[-120.53472899999997,48.999435000000119],[-121.08497599999993,48.999718000000087],[-122.10056299999997,49.000000000000114],[-122.33389299999993,49.000000000000114],[-122.43360899999993,49.000000000000114],[-122.56667299999992,49.000000000000114],[-122.69999699999994,49.000000000000114],[-122.76030000000003,48.999435000000119],[-122.81360599999994,49.005272000000048],[-122.83112299999999,49.008606000000043],[-122.86250299999989,49.022217000000012],[-122.87777699999998,49.032211000000018],[-122.87970699999994,49.034438999999963],[-122.88110399999999,49.038605000000075],[-122.87748699999986,49.049438000000066],[-122.87609900000001,49.051383999999928],[-122.87249799999989,49.054436000000067],[-122.86416600000001,49.061661000000129],[-122.85888699999992,49.067497000000003],[-122.85804699999994,49.072769000000108],[-122.859444,49.077217000000076],[-122.86638599999998,49.081107999999972],[-122.87444299999999,49.083602999999982],[-122.89998600000001,49.087211999999965],[-122.91887700000001,49.087211999999965],[-122.94167299999992,49.082496999999933],[-123.02194199999997,49.051658999999972],[-123.03916900000002,49.042496000000142],[-123.04666099999997,49.033332999999971],[-123.048607,49.027214000000129],[-123.04833999999994,49.022491000000116],[-123.04778299999998,49.018326000000116],[-123.03916900000002,49.005272000000048],[-123.03431699999999,48.999435000000119],[-123.09374999999994,48.999435000000119],[-123.11332699999997,49.036658999999986],[-123.13890099999998,49.107216000000108],[-123.14835399999998,49.10833000000008],[-123.20500199999998,49.123603999999943],[-123.20973200000003,49.127212999999983],[-123.247772,49.265273999999977],[-123.24889399999995,49.273605000000032],[-123.24749800000001,49.275551000000121],[-123.09449799999993,49.283938999999975],[-123.00933800000001,49.281944000000067],[-122.94332900000001,49.284164000000089],[-122.92360699999995,49.28833000000003],[-122.91251399999999,49.29332700000009],[-122.87917299999998,49.339157000000114],[-122.87499999999994,49.351387000000045],[-122.85388199999994,49.429993000000138],[-122.85278299999999,49.436104000000057],[-122.85333300000002,49.438880999999924],[-122.86054999999993,49.447487000000024],[-122.87082700000002,49.457214000000022],[-122.87638899999996,49.455551000000071],[-122.87832600000002,49.449432000000058],[-122.876938,49.429993000000138],[-122.87721299999993,49.414992999999981],[-122.88110399999999,49.40277100000003],[-122.88583399999993,49.391936999999984],[-122.90139799999992,49.360550000000046],[-122.91555800000003,49.342216000000064],[-122.93138099999999,49.328049000000135],[-123.00538599999999,49.319549999999992],[-123.03671999999989,49.313217000000009],[-123.04521899999992,49.312550000000044],[-123.06339299999996,49.313217000000009],[-123.08023100000003,49.315547999999978],[-123.23638900000003,49.338882000000069],[-123.25418099999996,49.384720000000016],[-123.25666799999993,49.512772000000041],[-123.25334199999992,49.523048000000131],[-123.24722299999996,49.534995999999978],[-123.20162199999999,49.615715000000137],[-123.1558379999999,49.676102000000014],[-123.15416700000003,49.67943600000001],[-123.15222199999994,49.685547000000099],[-123.15361000000001,49.690269000000001],[-123.15972899999997,49.699158000000068],[-123.16471899999993,49.702217000000019],[-123.16777000000002,49.702217000000019],[-123.17027300000001,49.701103000000046],[-123.24194299999999,49.660544999999956],[-123.24804699999993,49.648605000000089],[-123.24804699999993,49.639717000000076],[-123.26677699999999,49.617378000000031],[-123.26594499999999,49.610382000000129],[-123.265106,49.607880000000023],[-123.26494600000001,49.603713999999968],[-123.26576999999997,49.598381000000131],[-123.26812000000001,49.595551000000114],[-123.27095799999995,49.593215999999984],[-123.27977799999991,49.590050000000019],[-123.34333800000002,49.561378000000047],[-123.38110399999999,49.556655999999975],[-123.39444699999996,49.551933000000133],[-123.43028299999997,49.538329999999974],[-123.48306300000002,49.516663000000108],[-123.49249299999997,49.509720000000129],[-123.495003,49.506943000000035],[-123.49610899999993,49.500275000000045],[-123.49416399999996,49.468596999999988],[-123.491669,49.463608000000022],[-123.48777799999993,49.46054799999996],[-123.47778299999993,49.455268999999987],[-123.47416699999997,49.450828999999999],[-123.47332799999992,49.441101000000117],[-123.47609699999998,49.421936000000017],[-123.47666899999996,49.419159000000093],[-123.48194899999993,49.409988000000112],[-123.48665599999993,49.406097000000045],[-123.506958,49.389435000000049],[-123.512787,49.386383000000137],[-123.51944699999996,49.383881000000088],[-123.52694700000001,49.382210000000043],[-123.53555299999994,49.381378000000097],[-123.54499800000002,49.383331000000055],[-123.60109699999987,49.397490999999945],[-123.60610999999994,49.399994000000106],[-123.67555199999998,49.425269999999955],[-123.77500900000001,49.458327999999995],[-123.85500299999995,49.468879999999956],[-123.86165599999993,49.46665999999999],[-123.88082899999995,49.466385000000116],[-123.88890100000003,49.468048000000067],[-123.89611799999994,49.470543000000077],[-123.95973200000003,49.510551000000135],[-123.96362299999993,49.513329000000113],[-123.98860200000001,49.541663999999969],[-124.06806899999992,49.633881000000031],[-124.07055700000001,49.638046000000031],[-124.07112099999995,49.644440000000088],[-124.07028199999991,49.649719000000061],[-124.05915800000002,49.671104000000014],[-124.03250100000002,49.713882000000126],[-124.02861000000001,49.71915400000006],[-124.021118,49.726379000000065],[-124.00527999999997,49.735825000000034],[-123.99833699999999,49.738884000000041],[-123.987213,49.743050000000096],[-123.97528099999994,49.745270000000119],[-123.95694700000001,49.746101000000124],[-123.94748700000002,49.744995000000131],[-123.94055199999997,49.742493000000024],[-123.93443299999996,49.739432999999963],[-123.92971799999992,49.735825000000034],[-123.876938,49.683327000000077],[-123.83306900000002,49.627486999999974],[-123.82917799999996,49.616936000000067],[-123.82444800000002,49.595825000000048],[-123.82277699999997,49.585548000000074],[-123.82333399999999,49.581383000000073],[-123.82224300000001,49.573051000000078],[-123.79972800000002,49.519440000000031],[-123.79444899999993,49.510277000000031],[-123.78971899999999,49.506660000000068],[-123.78250099999997,49.504166000000112],[-123.77639799999992,49.503882999999973],[-123.76972999999998,49.504715000000033],[-123.76640299999991,49.506660000000068],[-123.76390100000003,49.509438000000046],[-123.76139799999999,49.513329000000113],[-123.75389100000001,49.537773000000072],[-123.76862299999993,49.561935000000119],[-123.77139299999999,49.572220000000073],[-123.77223200000003,49.581940000000145],[-123.77027900000002,49.588043000000084],[-123.74017300000003,49.602599999999995],[-123.73733500000003,49.605270000000075],[-123.73517599999991,49.606937000000016],[-123.69599899999997,49.623604000000057],[-123.68683599999997,49.625603000000069],[-123.67283599999996,49.625271000000112],[-123.63890099999998,49.634995000000004],[-123.61501299999992,49.639160000000004],[-123.56331599999999,49.667213000000118],[-123.54695100000004,49.677215999999987],[-123.53751399999993,49.684990000000028],[-123.53362300000003,49.689712999999983],[-123.53167699999995,49.695541000000105],[-123.53222699999998,49.700546000000145],[-123.53388999999993,49.701934999999992],[-123.54167199999989,49.701103000000046],[-123.54998799999998,49.693877999999984],[-123.56054699999993,49.686935000000005],[-123.57195299999995,49.680824000000086],[-123.58556399999992,49.676102000000014],[-123.67578100000003,49.653046000000018],[-123.69061299999993,49.651051000000109],[-123.73978399999999,49.645882000000029],[-123.75010700000001,49.64521400000001],[-123.79666099999997,49.638328999999999],[-123.80387899999999,49.640831000000048],[-123.8125,49.647491000000116],[-123.93499800000001,49.768326000000002],[-123.93749999999989,49.77276599999999],[-123.93582200000003,49.778046000000074],[-123.93055699999996,49.785271000000137],[-123.91999800000002,49.792495999999971],[-123.88890100000003,49.819717000000026],[-123.88500999999997,49.823608000000092],[-123.88249199999996,49.82749200000012],[-123.87970699999994,49.832771000000093],[-123.87638900000002,49.842215999999951],[-123.87332200000003,49.864158999999916],[-123.87249799999995,49.87110100000001],[-123.872772,49.877212999999983],[-123.88500999999997,49.914993000000095],[-123.889183,49.922767999999962],[-123.89417300000002,49.92721599999993],[-123.90139799999992,49.928879000000052],[-123.91082799999998,49.930275000000108],[-123.920547,49.928604000000064],[-123.92999299999997,49.929718000000037],[-123.93720999999994,49.932213000000047],[-123.94193999999999,49.936104000000114],[-123.94860799999998,49.943877999999927],[-123.95472699999999,49.953049000000078],[-123.95889299999999,49.962212000000079],[-123.929779,49.985321000000056],[-123.929283,49.989493999999979],[-123.92544599999997,49.994156000000089],[-123.92044099999998,49.997325999999987],[-123.88160700000003,50.01499600000011],[-123.87343599999986,50.018326000000116],[-123.860771,50.021660000000111],[-123.85294299999998,50.022995000000037],[-123.84310199999999,50.023659000000123],[-123.80832699999996,50.040276000000119],[-123.79611199999994,50.04444100000012],[-123.75334199999998,50.07638500000013],[-123.74861099999998,50.080276000000026],[-123.74445300000002,50.086936999999921],[-123.74944299999999,50.09665700000005],[-123.82140399999997,50.152213999999958],[-123.83056599999998,50.156936999999971],[-123.846947,50.163321999999994],[-123.97778299999993,50.213882000000012],[-123.98500100000001,50.216103000000089],[-123.99054699999999,50.215828000000101],[-123.99109599999986,50.21166199999999],[-123.98832699999997,50.207496999999989],[-123.96056399999998,50.180550000000096],[-123.94695300000001,50.169441000000006],[-123.93720999999994,50.163321999999994],[-123.92388899999992,50.158600000000092],[-123.90583800000002,50.15638000000007],[-123.88806199999988,50.152489000000003],[-123.882767,50.150826000000052],[-123.87165800000002,50.145546000000024],[-123.80915799999997,50.099998000000085],[-123.8125,50.090546000000131],[-123.81639099999995,50.086105000000032],[-123.85716200000002,50.066883000000132],[-123.86933099999993,50.058048000000099],[-123.87499999999994,50.054214000000115],[-123.87899799999997,50.052380000000085],[-123.916,50.039883000000088],[-123.95465899999988,50.029217000000074],[-123.99526999999989,50.011664999999994],[-123.99916099999996,50.00638600000002],[-124,50.000275000000101],[-123.99916099999996,49.990547000000106],[-123.99526999999989,49.961662000000047],[-123.99249299999997,49.942764000000125],[-123.99109599999986,49.937209999999993],[-123.98860200000001,49.931664000000126],[-123.97972099999998,49.916663999999969],[-123.96721600000001,49.906380000000127],[-123.95140100000003,49.895828000000108],[-123.91972399999992,49.877769000000001],[-123.91471899999993,49.873878000000104],[-123.91111799999999,49.869713000000104],[-123.922234,49.834435000000099],[-123.92639199999996,49.825828999999999],[-123.97277799999989,49.80471],[-123.97833299999996,49.803047000000106],[-123.98581699999994,49.802772999999945],[-123.99194299999994,49.804436000000067],[-124.00418100000002,49.810546999999985],[-124.01012400000002,49.834602000000075],[-124.00862100000001,49.841938000000084],[-124.00728600000002,49.856769999999983],[-124.01806599999998,49.909156999999993],[-124.02166699999987,49.91415400000011],[-124.029449,49.920547000000056],[-124.037781,49.922493000000145],[-124.04222099999998,49.921379000000002],[-124.04472399999997,49.917496000000028],[-124.068893,49.878876000000105],[-124.07195299999995,49.873322000000087],[-124.07028199999991,49.869156000000032],[-124.06261399999988,49.846328999999912],[-124.05877700000002,49.841991000000007],[-124.05860899999999,49.838325999999995],[-124.06028000000003,49.835158999999976],[-124.08444199999991,49.799164000000133],[-124.09028599999999,49.795830000000137],[-124.14555399999995,49.779716000000008],[-124.17694099999989,49.773604999999975],[-124.18582199999997,49.77276599999999],[-124.2702789999999,49.768051000000128],[-124.40416700000003,49.763329000000056],[-124.41361999999998,49.763610999999969],[-124.42916899999994,49.766388000000006],[-124.43639400000001,49.768883000000073],[-124.51194800000002,49.796104000000071],[-124.52166699999992,49.804161000000079],[-124.52443699999998,49.808327000000133],[-124.52583300000003,49.813880999999981],[-124.52583300000003,49.831665000000044],[-124.52749599999987,49.837212000000022],[-124.53278399999999,49.844437000000084],[-124.57195299999995,49.874435000000005],[-124.59137699999997,49.883049000000085],[-124.63221699999997,49.899436999999921],[-124.702789,49.934989999999971],[-124.74194299999999,49.958328000000051],[-124.77306399999992,49.985825000000034],[-124.80332900000002,50.020271000000093],[-124.82556199999999,50.051384000000098],[-124.82972699999999,50.061935000000005],[-124.828056,50.066666000000112],[-124.82140400000003,50.069160000000068],[-124.81304899999992,50.067496999999946],[-124.80695300000002,50.06360600000005],[-124.76722699999988,50.036385000000053],[-124.70333900000003,49.995543999999995],[-124.66805999999991,50.07027400000004],[-124.61694299999999,50.179161000000079],[-124.60193599999997,50.234993000000031],[-124.60138699999993,50.238884000000098],[-124.60417200000001,50.243881000000044],[-124.63110399999999,50.279716000000121],[-124.63890100000003,50.286942000000067],[-124.665009,50.303879000000052],[-124.708618,50.318329000000006],[-124.71362299999987,50.321937999999989],[-124.71501199999994,50.327492000000007],[-124.65778399999994,50.386108000000092],[-124.65194699999989,50.389160000000061],[-124.62609899999995,50.398330999999985],[-124.60193599999997,50.40277100000003],[-124.58055100000001,50.399990000000116],[-124.57555400000001,50.39899400000013],[-124.57122800000002,50.397495000000106],[-124.54998799999993,50.393883000000017],[-124.53362300000003,50.395827999999995],[-124.51999699999999,50.399994000000106],[-124.43415800000002,50.431664000000012],[-124.42054699999994,50.43721000000005],[-124.39862099999999,50.450545999999974],[-124.38305700000001,50.462212000000136],[-124.36138900000003,50.479713000000118],[-124.35193600000002,50.487495000000081],[-124.34805299999999,50.492218000000037],[-124.34528399999988,50.497489999999971],[-124.34777800000001,50.50249500000001],[-124.35527000000002,50.504997000000117],[-124.36389200000002,50.503882999999917],[-124.378601,50.499161000000015],[-124.38445299999995,50.49610100000001],[-124.39388999999989,50.488884000000041],[-124.39778099999995,50.484161000000086],[-124.40055799999993,50.478874000000133],[-124.404449,50.4741590000001],[-124.40915699999999,50.470268000000033],[-124.42749000000003,50.462212000000136],[-124.51834099999991,50.432212999999933],[-124.58383199999997,50.414051000000029],[-124.58833300000003,50.41338300000001],[-124.59999800000003,50.413048000000003],[-124.71167000000003,50.375549000000092],[-124.73916599999995,50.351936000000137],[-124.80332900000002,50.317772000000105],[-124.81582600000002,50.312209999999993],[-124.83000199999992,50.30943300000007],[-124.85056299999991,50.309714999999983],[-124.93916299999995,50.325271999999984],[-125.06388900000002,50.317772000000105],[-125.07224299999996,50.319442999999978],[-125.07833900000003,50.322495000000117],[-125.08416699999998,50.329719999999952],[-125.08889799999997,50.346382000000119],[-125.08750900000001,50.357215999999994],[-125.05666399999996,50.476936000000023],[-125.05194099999989,50.480820000000051],[-125.04499799999996,50.48333000000008],[-125.02667199999996,50.483047000000113],[-125.01806599999998,50.484161000000086],[-124.97112299999998,50.498047000000042],[-124.96528599999999,50.50110600000005],[-124.88082900000001,50.560546999999985],[-124.85973399999989,50.585823000000062],[-124.858047,50.590546000000018],[-124.85444599999994,50.691376000000105],[-124.86888099999999,50.764998999999989],[-124.87805200000003,50.811377999999991],[-124.86749299999997,50.817771999999991],[-124.78943599999991,50.88110400000005],[-124.78694199999995,50.884438000000046],[-124.78751399999993,50.889160000000118],[-124.79998799999998,50.91304800000006],[-124.80277999999998,50.9180530000001],[-124.80583200000001,50.920830000000024],[-124.81916799999993,50.926384000000041],[-124.84999099999993,50.935265000000129],[-124.85417200000001,50.935547000000042],[-124.86138900000003,50.928879000000052],[-124.92443800000001,50.834717000000126],[-124.9449919999999,50.775268999999923],[-124.91221599999994,50.699431999999945],[-124.90139799999997,50.630271999999991],[-124.90194700000001,50.62471000000005],[-124.90361000000001,50.619987000000094],[-124.91111799999999,50.611382000000049],[-124.92887899999994,50.596382000000062],[-125.02694700000001,50.540833000000077],[-125.09944200000001,50.5],[-125.10417199999989,50.496941000000049],[-125.11277799999999,50.487495000000081],[-125.11694299999999,50.478043000000127],[-125.118607,50.471930999999984],[-125.11193800000001,50.452492000000063],[-125.11138899999997,50.447769000000108],[-125.11221299999994,50.44221500000009],[-125.11472299999997,50.436935000000005],[-125.11945300000002,50.432770000000005],[-125.12526700000001,50.429718000000094],[-125.17027299999995,50.412491000000102],[-125.17777999999998,50.41137700000013],[-125.1875,50.412491000000102],[-125.195831,50.414711000000068],[-125.20221699999991,50.417213000000004],[-125.20722999999998,50.420830000000137],[-125.24610899999993,50.462212000000136],[-125.33612099999993,50.479713000000118],[-125.40361000000001,50.473602000000028],[-125.42166099999992,50.465271000000143],[-125.44275699999997,50.459435000000042],[-125.46028099999995,50.457214000000135],[-125.48832700000003,50.45638300000013],[-125.54444899999993,50.490379000000132],[-125.54811099999995,50.492050000000006],[-125.54928599999994,50.494549000000006],[-125.54961399999996,50.497547000000054],[-125.54911799999996,50.501545000000135],[-125.53222700000003,50.62721300000004],[-125.51944700000001,50.647217000000126],[-125.51194800000002,50.657211000000132],[-125.50723299999999,50.661102000000028],[-125.50055699999996,50.663048000000117],[-125.48194899999999,50.664993000000095],[-125.46749899999998,50.668602000000135],[-125.45612299999999,50.674995000000081],[-125.45140100000003,50.678879000000109],[-125.42804699999999,50.705551000000014],[-125.42555199999998,50.710823000000119],[-125.43277,50.713882000000069],[-125.44360399999999,50.714157000000114],[-125.45889299999993,50.713608000000136],[-125.46639999999996,50.713051000000064],[-125.47332799999998,50.709159999999997],[-125.53778099999994,50.669991000000095],[-125.54723399999995,50.661933999999974],[-125.55832699999996,50.648048000000131],[-125.56388900000002,50.637214999999969],[-125.56806899999998,50.62721300000004],[-125.57167099999998,50.611382000000049],[-125.57224300000001,50.605270000000075],[-125.5849,50.571323000000064],[-125.58206899999999,50.56582300000008],[-125.58039099999996,50.563656000000037],[-125.5800549999999,50.559994000000074],[-125.58623499999999,50.536659000000043],[-125.610229,50.489326000000062],[-125.61238900000001,50.486492000000055],[-125.63722200000001,50.445540999999935],[-125.65167200000002,50.441375999999934],[-125.69249000000002,50.429993000000138],[-125.700287,50.428047000000049],[-125.70584099999996,50.427773000000116],[-125.71611000000001,50.432212999999933],[-125.84665699999994,50.502777000000094],[-125.86472300000003,50.495269999999948],[-125.93028299999992,50.473602000000028],[-125.95221700000002,50.468880000000127],[-125.968613,50.468880000000127],[-126.06331599999999,50.470825000000104],[-126.15915699999999,50.484992999999974],[-126.19332900000001,50.490273000000059],[-126.26777599999997,50.504997000000117],[-126.27500899999995,50.50750000000005],[-126.27916700000003,50.51166500000005],[-126.2808379999999,50.515830999999991],[-126.279449,50.520546000000024],[-126.27694700000001,50.524712000000079],[-126.22670699999998,50.536285000000021],[-126.18665299999998,50.548405000000059],[-126.18559999999997,50.566322000000014],[-126.23805199999998,50.591377000000023],[-126.25167799999991,50.609718000000044],[-126.26418299999995,50.615547000000049],[-126.27500899999995,50.627486999999974],[-126.27471899999995,50.631660000000068],[-126.266953,50.634720000000129],[-126.02006499999999,50.66188000000011],[-126.014725,50.662048000000141],[-125.90856200000002,50.664046999999982],[-125.73832699999997,50.682213000000104],[-125.69387799999993,50.704712000000029],[-125.62249799999995,50.750000000000114],[-125.61776700000001,50.754166000000055],[-125.54305999999991,50.863884000000098],[-125.53778099999994,50.87193300000007],[-125.51000999999997,50.921661000000029],[-125.50723299999999,50.926941000000113],[-125.50556899999998,50.93332700000002],[-125.50666799999993,50.945541000000048],[-125.50834699999996,50.951102999999989],[-125.55166600000001,51.042221000000097],[-125.56555200000003,51.056380999999988],[-125.58167999999995,51.072220000000129],[-125.59306299999997,51.07888000000014],[-125.610817,51.087769000000037],[-125.63390400000003,51.096939000000077],[-125.63722200000001,51.096382000000006],[-125.63890100000003,51.090271000000087],[-125.639183,51.077217000000019],[-125.63806199999999,51.06610100000006],[-125.58332799999999,50.974709000000018],[-125.61028299999987,50.89888000000002],[-125.69110099999995,50.771378000000084],[-125.73110999999989,50.735550000000046],[-125.81527699999987,50.707214000000079],[-125.96383700000001,50.688660000000084],[-126.12516799999997,50.678989000000115],[-126.13100400000002,50.678658000000098],[-126.133667,50.678825000000074],[-126.13799999999998,50.681827999999996],[-126.13917500000002,50.683495000000107],[-126.22222899999991,50.69110100000006],[-126.21362299999993,50.70388000000014],[-126.20889299999999,50.70777099999998],[-126.20333899999997,50.711104999999975],[-126.11165599999993,50.753883000000087],[-126.19888299999997,50.85582700000009],[-126.26944700000001,50.858047000000113],[-126.37609899999995,50.855270000000019],[-126.39750699999996,50.848602000000028],[-126.40306099999998,50.845268000000033],[-126.42166099999997,50.829437000000098],[-126.42748999999992,50.826103000000103],[-126.43415799999997,50.823608000000092],[-126.44304699999998,50.821663000000058],[-126.49333199999995,50.81638300000003],[-126.55277999999998,50.834717000000126],[-126.55695300000002,50.838882000000126],[-126.55972299999996,50.843880000000127],[-126.557503,50.876656000000082],[-126.55359599999991,50.881377999999984],[-126.53611799999999,50.898048000000074],[-126.531387,50.901932000000102],[-126.50110599999999,50.916099999999972],[-126.49445300000002,50.9180530000001],[-126.48332199999999,50.919158999999979],[-126.47471599999994,50.917496000000028],[-126.468613,50.914436000000137],[-126.46444700000001,50.910271000000137],[-126.45805399999995,50.907211000000075],[-126.36833200000001,50.901932000000102],[-126.35833700000001,50.901382000000069],[-126.24638400000003,50.898604999999975],[-126.22582999999997,50.898604999999975],[-126.21028100000001,50.902771000000087],[-126.20445299999994,50.90554800000001],[-126.18388399999992,50.918602000000078],[-126.17555199999993,50.92582700000014],[-126.17027299999995,50.936653000000035],[-126.17166099999997,50.946381000000088],[-126.17471299999988,50.950546000000088],[-126.17777999999998,50.951385000000016],[-126.181107,50.950829000000056],[-126.18888899999996,50.948875000000044],[-126.20028699999989,50.942490000000021],[-126.20500199999992,50.93832400000008],[-126.21556099999998,50.931106999999997],[-126.228882,50.926102000000128],[-126.24553700000001,50.923325000000034],[-126.30860899999999,50.925270000000012],[-126.412216,50.936104000000114],[-126.42639200000002,50.938599000000124],[-126.5625,50.907767999999976],[-126.56833599999993,50.903877000000136],[-126.58084099999996,50.898604999999975],[-126.66139199999998,50.868049999999982],[-126.67777999999998,50.866385999999977],[-126.72165699999994,50.876099000000011],[-126.80638099999999,50.909156999999993],[-126.81916799999999,50.915824999999984],[-126.90261799999996,50.905098000000066],[-126.90595199999996,50.90410200000008],[-126.91711399999997,50.903439000000105],[-127.01471700000002,50.903877000000136],[-127.04804999999993,50.910271000000137],[-127.08556399999998,50.921378999999945],[-127.112213,50.931106999999997],[-127.1641689999999,50.932495000000074],[-127.17639200000002,50.929161000000079],[-127.17999299999991,50.92582700000014],[-127.17804699999994,50.920273000000122],[-127.17166099999992,50.917496000000028],[-127.06276699999995,50.885269000000051],[-127.01883700000002,50.868267000000003],[-127.00765999999993,50.867939000000035],[-126.976158,50.870438000000036],[-126.97166400000003,50.869938000000047],[-126.96916999999991,50.869105999999931],[-126.96599600000002,50.86693600000001],[-126.96681999999998,50.864101000000062],[-127.01471700000002,50.819443000000092],[-127.02250700000002,50.817497000000003],[-127.03333299999997,50.817771999999991],[-127.047234,50.821663000000058],[-127.05776999999995,50.828048999999965],[-127.06166100000002,50.832213999999965],[-127.06696299999993,50.835823000000005],[-127.07333399999993,50.838882000000126],[-127.13276699999994,50.862212999999997],[-127.243607,50.896659999999997],[-127.33444199999997,50.906936999999971],[-127.39862099999993,50.926384000000041],[-127.43055699999991,50.940544000000102],[-127.53527800000001,51.000549000000035],[-127.53832999999997,51.005554000000075],[-127.53806299999997,51.008330999999998],[-127.502792,51.097487999999998],[-127.495003,51.0991590000001],[-127.47749299999992,51.097487999999998],[-127.43582199999997,51.082771000000037],[-127.40888999999987,51.071938000000046],[-127.39306599999992,51.064712999999983],[-127.38137799999998,51.059714999999983],[-127.3683319999999,51.055267000000015],[-127.354446,51.051659000000086],[-127.33056599999998,51.048331999999959],[-127.24249299999997,51.041382000000112],[-127.23610699999995,51.041107000000125],[-127.21861299999995,51.040832999999964],[-127.09612299999998,51.043883999999991],[-126.99873400000001,51.058883999999978],[-126.97956099999999,51.062881000000118],[-126.94840199999999,51.067050999999992],[-126.87339800000001,51.072883999999988],[-126.86672999999996,51.072716000000128],[-126.82656899999995,51.067050999999992],[-126.81689499999987,51.064716000000033],[-126.69167299999998,51.110550000000046],[-126.68694299999999,51.114716000000101],[-126.65278599999999,51.149994000000106],[-126.65139799999997,51.153320000000008],[-126.65110799999997,51.157494000000042],[-126.654449,51.185822000000144],[-126.65527299999997,51.187766999999951],[-126.65834000000001,51.192764000000068],[-126.66251399999993,51.194992000000013],[-126.67582700000003,51.193878000000041],[-126.67916899999994,51.192764000000068],[-126.68167099999994,51.188599000000067],[-126.68250299999994,51.176383999999985],[-126.68167099999994,51.172768000000076],[-126.68331899999998,51.165268000000026],[-126.68831599999999,51.157211000000075],[-126.69666299999994,51.14777400000014],[-126.71749899999998,51.132767000000115],[-126.84055299999989,51.094936000000075],[-126.84654999999992,51.093105000000094],[-126.85589599999997,51.092102000000068],[-126.927887,51.084938000000079],[-127.14111299999996,51.060272000000055],[-127.19249000000002,51.057213000000104],[-127.20667300000002,51.056380999999988],[-127.23832700000003,51.056938000000059],[-127.32668299999995,51.059714999999983],[-127.34084299999989,51.060822000000087],[-127.35916099999992,51.063323999999966],[-127.38861099999991,51.068054000000018],[-127.49273700000003,51.114883000000077],[-127.50985000000003,51.117359000000135],[-127.53376000000003,51.108082000000138],[-127.556107,51.099998000000028],[-127.63194299999998,51.091934000000037],[-127.64943699999998,51.092216000000064],[-127.66665599999988,51.095268000000033],[-127.67944299999988,51.101105000000132],[-127.78999299999992,51.165543000000014],[-127.79611199999994,51.197212000000036],[-127.79583700000001,51.202217000000076],[-127.787216,51.226097000000095],[-127.78472899999991,51.231376999999952],[-127.76194800000002,51.249435000000005],[-127.59973100000002,51.289435999999966],[-127.59306300000003,51.290833000000134],[-127.56555199999997,51.293052999999929],[-127.53999299999998,51.294441000000063],[-127.45140099999998,51.291939000000127],[-127.4036099999999,51.282494000000099],[-127.37554899999998,51.274437000000091],[-127.36472299999997,51.274162000000103],[-127.23110999999994,51.286110000000122],[-127.22222899999991,51.287216000000001],[-127.21444699999995,51.290549999999996],[-127.20388800000001,51.298607000000118],[-127.14334100000002,51.318329000000006],[-127.13305699999989,51.325554000000068],[-127.12693799999994,51.334991000000002],[-127.11776700000001,51.357498000000078],[-127.11110699999989,51.37721300000004],[-127.10973399999995,51.383330999999998],[-127.11028299999992,51.389717000000076],[-127.11582899999996,51.391662999999994],[-127.12249800000001,51.389160000000004],[-127.13054699999998,51.381934999999942],[-127.13417099999998,51.37721300000004],[-127.14417300000002,51.358046999999999],[-127.18250299999994,51.326942000000145],[-127.18804899999998,51.323607999999979],[-127.20834400000001,51.315826000000015],[-127.24749800000001,51.306380999999931],[-127.28056300000003,51.301102000000128],[-127.29055800000003,51.300545000000056],[-127.36749299999991,51.298881999999935],[-127.39584400000001,51.30221599999993],[-127.45221699999996,51.315826000000015],[-127.462784,51.341660000000047],[-127.55444299999999,51.332497000000046],[-127.57000699999998,51.328605999999979],[-127.75499699999989,51.319442999999978],[-127.76390100000003,51.319442999999978],[-127.77250699999996,51.3211060000001],[-127.77887699999997,51.324715000000083],[-127.78415699999994,51.333054000000118],[-127.78778099999994,51.34887700000013],[-127.78307299999994,51.356941000000006],[-127.77834300000001,51.361107000000061],[-127.74109599999997,51.380272000000048],[-127.72749299999998,51.385551000000021],[-127.69332899999995,51.390831000000048],[-127.68443300000001,51.390831000000048],[-127.65055799999999,51.408043000000077],[-127.55166600000001,51.468323000000055],[-127.51583900000003,51.519157000000007],[-127.51306199999993,51.529991000000052],[-127.512787,51.535552999999993],[-127.515289,51.5472180000001],[-127.521118,51.563880999999981],[-127.51640299999997,51.587769000000094],[-127.51500699999985,51.593880000000013],[-127.50890399999997,51.604712999999947],[-127.50055700000001,51.61360900000011],[-127.48805199999998,51.619438000000116],[-127.44444299999998,51.629990000000078],[-127.37609900000001,51.644997000000103],[-127.32584400000002,51.651382000000126],[-127.23332199999999,51.662490999999989],[-127.09584000000001,51.668052999999986],[-126.95344499999999,51.658325000000104],[-126.94693799999993,51.657657999999969],[-126.93778199999997,51.655327000000057],[-126.88377400000002,51.649494000000061],[-126.708054,51.641937000000041],[-126.66332999999986,51.64888000000002],[-126.65527299999997,51.651382000000126],[-126.620003,51.679993000000024],[-126.60694899999993,51.706940000000145],[-126.60527000000002,51.713051000000064],[-126.60582699999992,51.719436999999971],[-126.60777300000001,51.724990999999932],[-126.63555899999989,51.769714000000022],[-126.63944999999995,51.773880000000133],[-126.66027800000001,51.792221000000097],[-126.66528299999999,51.772491000000116],[-126.66665599999999,51.766388000000006],[-126.66251399999993,51.747215000000097],[-126.65387699999991,51.732491000000039],[-126.64362299999999,51.719154000000003],[-126.63999899999999,51.709991000000002],[-126.64138800000001,51.705269000000101],[-126.64388999999994,51.701102999999989],[-126.64750700000002,51.697768999999994],[-126.69304699999998,51.664711000000011],[-126.703056,51.664436000000023],[-126.91521499999999,51.682438000000047],[-126.96421799999996,51.686604000000102],[-126.97788199999997,51.690605000000062],[-127.05387899999988,51.697768999999994],[-127.07501199999996,51.697768999999994],[-127.14055599999995,51.694435000000055],[-127.27416999999997,51.68332700000002],[-127.3999859999999,51.669716000000051],[-127.41583300000002,51.665824999999984],[-127.42582699999997,51.666663999999969],[-127.43222000000003,51.66832700000009],[-127.43554699999987,51.671103999999957],[-127.43971299999993,51.674712999999997],[-127.44167299999992,51.680275000000108],[-127.42748999999998,51.731934000000138],[-127.364441,51.768326000000116],[-127.36193800000001,51.771660000000111],[-127.359444,51.777214000000072],[-127.33917200000002,51.839156999999943],[-127.33721899999989,51.851387000000045],[-127.33999599999999,51.861106999999947],[-127.34555099999994,51.864159000000086],[-127.35109699999992,51.863609000000054],[-127.35694899999999,51.860275000000058],[-127.44833399999987,51.777214000000072],[-127.57195299999989,51.706940000000145],[-127.58556399999986,51.677773000000059],[-127.54638699999992,51.627486999999917],[-127.55860899999999,51.543884000000105],[-127.56111099999998,51.538605000000132],[-127.57417299999997,51.518883000000073],[-127.58139,51.509437999999989],[-127.63583399999999,51.460548000000131],[-127.640289,51.458602999999925],[-127.65915699999999,51.457497000000103],[-127.70639,51.45638300000013],[-127.71639999999996,51.457214000000135],[-127.72389199999992,51.459435000000042],[-127.73029300000002,51.463051000000121],[-127.75473,51.479988000000105],[-127.75917099999992,51.484161000000029],[-127.76083399999993,51.48971599999993],[-127.75974300000001,51.494438000000059],[-127.74416400000001,51.498329000000126],[-127.712784,51.504439999999988],[-127.787216,51.560271999999941],[-127.87416099999996,51.663322000000051],[-127.87805200000003,51.673881999999992],[-127.88999899999999,51.798332000000016],[-127.88944999999995,51.807770000000005],[-127.886124,51.852218999999991],[-127.88474299999996,51.858604000000014],[-127.86971999999997,51.89527099999998],[-127.86609599999997,51.899993999999992],[-127.86165599999987,51.904160000000047],[-127.83306899999997,51.919991000000039],[-127.82055699999995,51.926659000000029],[-127.79638699999998,51.938599000000124],[-127.78971899999999,51.941101000000003],[-127.76611300000002,51.946937999999932],[-127.73805199999993,51.949715000000026],[-127.66443600000002,51.953880000000026],[-127.65527299999997,52.040276000000063],[-127.65387699999991,52.046386999999982],[-127.65139799999997,52.051659000000086],[-127.64527900000002,52.061934999999949],[-127.62943999999999,52.088326000000052],[-127.62581599999999,52.093047999999953],[-127.61749299999997,52.101936000000137],[-127.58029199999993,52.129158000000075],[-127.52555799999993,52.147217000000012],[-127.49944299999993,52.151657000000057],[-127.48055999999997,52.151099999999929],[-127.47721899999999,52.150543000000027],[-127.46528599999988,52.143883000000017],[-127.46140300000002,52.133049000000142],[-127.46250899999995,52.112495000000024],[-127.46611000000001,52.107773000000122],[-127.47556299999997,52.099716000000114],[-127.48249799999996,52.09693900000002],[-127.49833699999999,52.093322999999998],[-127.50834700000001,52.093322999999998],[-127.51834100000002,52.094436999999971],[-127.52722199999994,52.095825000000048],[-127.53500400000001,52.098877000000016],[-127.55277999999998,52.101105000000132],[-127.56276700000001,52.100829999999917],[-127.57167099999998,52.098877000000016],[-127.58444199999991,52.093605000000082],[-127.58889799999992,52.089714000000015],[-127.61416600000001,52.035828000000095],[-127.61332699999997,52.032494000000099],[-127.59416199999998,52.035553000000107],[-127.58612099999993,52.038048000000117],[-127.42083700000001,52.120270000000119],[-127.43360899999999,52.131659999999954],[-127.45056199999999,52.169159000000093],[-127.45249899999988,52.173882000000049],[-127.45305599999995,52.179993000000138],[-127.44972199999995,52.182770000000062],[-127.37609900000001,52.216934000000037],[-127.35417199999995,52.224709000000132],[-127.33138999999994,52.230270000000019],[-127.30027799999993,52.228325000000041],[-127.29110700000001,52.229431000000034],[-127.28443900000002,52.231934000000024],[-127.24526999999995,52.248878000000104],[-127.23944099999994,52.252220000000023],[-127.19304699999998,52.290833000000077],[-127.18582200000003,52.300270000000012],[-127.17749000000003,52.309715000000097],[-127.17166099999992,52.31249200000002],[-127.16361999999987,52.314156000000025],[-127.04276999999996,52.309158000000025],[-127.01251200000002,52.306381000000101],[-127.00499699999995,52.303604000000007],[-126.99861099999993,52.298607000000118],[-126.96444700000001,52.271659999999997],[-126.94526699999994,52.25610400000005],[-126.93804899999986,52.246941000000049],[-126.93611099999998,52.241379000000109],[-126.93554699999999,52.235268000000019],[-126.82749899999999,52.128044000000102],[-126.75195300000001,52.078605999999979],[-126.71193700000003,52.044441000000063],[-126.69415300000003,52.028877000000136],[-126.691101,52.023880000000077],[-126.68388399999998,51.999717999999973],[-126.67804699999994,51.990547000000049],[-126.67388899999997,51.986382000000049],[-126.66944899999999,51.983604000000071],[-126.66832699999998,51.985549999999932],[-126.66776999999996,51.991104000000121],[-126.66583300000002,52.031380000000127],[-126.66665599999999,52.036384999999996],[-126.66972399999997,52.041939000000013],[-126.73805199999987,52.113052000000096],[-126.76363399999991,52.13249200000007],[-126.81722999999988,52.166100000000085],[-126.83112299999999,52.17193599999996],[-126.85555999999997,52.178047000000049],[-126.86305199999993,52.181107000000111],[-126.88027999999986,52.190544000000045],[-126.90055799999999,52.205268999999987],[-126.90666199999993,52.215271000000143],[-126.94082600000002,52.303879000000052],[-126.94027699999998,52.31082200000003],[-126.93611099999998,52.32249500000006],[-126.932503,52.327217000000132],[-126.92083700000001,52.333603000000039],[-126.87361099999998,52.350830000000087],[-126.82084700000001,52.363883999999928],[-126.81416299999995,52.365273000000116],[-126.78888699999999,52.369987000000094],[-126.77667199999996,52.370270000000062],[-126.76194800000002,52.370543999999995],[-126.73638900000003,52.366386000000034],[-126.73166700000002,52.367767000000072],[-126.73249800000002,52.373877999999991],[-126.73665599999998,52.378044000000045],[-126.75167799999991,52.388328999999999],[-126.76363399999991,52.393326000000059],[-126.79277000000002,52.395546000000081],[-126.91027799999995,52.373877999999991],[-126.92610200000001,52.370827000000133],[-126.94110099999995,52.366386000000034],[-126.948036,52.363883999999928],[-126.95973199999997,52.357215999999994],[-126.96972699999998,52.34165999999999],[-126.97444200000001,52.337768999999923],[-126.98137699999995,52.33526599999999],[-127.00279199999994,52.334991000000116],[-127.08249699999993,52.334991000000116],[-127.14111299999996,52.348045000000013],[-127.15778399999999,52.352492999999981],[-127.18639400000001,52.380820999999969],[-127.22805800000003,52.453049000000135],[-127.23610699999995,52.505554000000132],[-127.23665599999998,52.51166500000005],[-127.23416099999997,52.517211999999972],[-127.19695299999995,52.549995000000138],[-127.18639400000001,52.557770000000062],[-127.08112299999993,52.613051999999982],[-127.07417299999997,52.616385999999977],[-127.05915800000002,52.620827000000077],[-127.00446299999999,52.626937999999996],[-126.99638399999998,52.62860100000006],[-126.989441,52.631935000000055],[-126.97972099999998,52.639434999999935],[-126.97609699999998,52.64388300000013],[-126.924713,52.714714000000129],[-126.92223399999995,52.718880000000013],[-126.92166099999997,52.725822000000107],[-126.92250100000001,52.731102000000021],[-126.966949,52.828606000000036],[-126.97112300000003,52.832771000000037],[-126.975281,52.835548000000131],[-126.98332199999987,52.837769000000037],[-127.01777599999991,52.845543000000021],[-127.02139299999993,52.82777400000009],[-127.01834100000002,52.823608000000036],[-127.00778199999996,52.808883999999978],[-126.98082699999992,52.724434000000031],[-126.98111,52.717491000000052],[-126.98528299999992,52.707497000000046],[-127.04250300000001,52.64777399999997],[-127.04737899999992,52.643462999999997],[-127.05561799999998,52.641815000000065],[-127.13445300000001,52.60943600000013],[-127.24054699999988,52.557770000000062],[-127.25723299999999,52.545830000000137],[-127.28083799999996,52.509162999999944],[-127.28222700000003,52.503052000000082],[-127.28028899999993,52.497489999999914],[-127.27610800000002,52.49332400000003],[-127.26528899999988,52.485550000000046],[-127.25805699999995,52.477211000000011],[-127.25834699999996,52.47304500000007],[-127.26194800000002,52.467491000000109],[-127.26666299999988,52.464157000000114],[-127.33345800000001,52.433895000000007],[-127.40082599999994,52.424431000000141],[-127.46541599999995,52.395477000000085],[-127.48935699999987,52.362072000000126],[-127.61165599999998,52.294716000000051],[-127.61833200000001,52.291939000000127],[-127.72138999999993,52.274712000000079],[-127.73055999999997,52.273604999999975],[-127.739441,52.27388000000002],[-127.74610899999999,52.276657000000114],[-127.75029000000001,52.281661999999983],[-127.80471799999998,52.248878000000104],[-127.84277299999997,52.2241590000001],[-127.84528399999999,52.219437000000028],[-127.85249299999987,52.209991000000059],[-127.85833699999995,52.206657000000064],[-127.86389200000002,52.207496999999933],[-127.86916399999996,52.211105000000032],[-127.87110899999999,52.216385000000116],[-127.87304699999999,52.223320000000001],[-127.90527299999991,52.27887700000008],[-127.86776700000001,52.494995000000074],[-127.86776700000001,52.500549000000092],[-127.86971999999997,52.506103999999993],[-127.87499999999994,52.510276999999917],[-127.88166799999999,52.51249700000011],[-127.89195299999994,52.513329000000056],[-127.89998599999996,52.50999500000006],[-127.92488899999995,52.443886000000134],[-127.92971799999992,52.427547000000004],[-127.92854299999999,52.424213000000009],[-127.92588000000001,52.421215000000132],[-127.916718,52.414879000000099],[-127.90905800000002,52.407382999999982],[-127.90589099999988,52.401549999999986],[-127.90538800000002,52.39788400000009],[-127.95694700000001,52.324440000000038],[-127.96389799999997,52.321663000000115],[-127.97277800000001,52.323326000000066],[-127.995003,52.330551000000128],[-128.00805699999989,52.336937000000034],[-128.01251200000002,52.341102999999919],[-128.05721999999997,52.394713999999965],[-128.05917399999998,52.400269000000094],[-128.06832899999995,52.447769000000051],[-128.06695599999995,52.45388000000014],[-128.05944799999992,52.470267999999976],[-128.05111699999992,52.478874000000076],[-128.0419619999999,52.487770000000012],[-128.03250100000002,52.495270000000119],[-128.00945999999999,52.508606000000043],[-127.97721899999999,52.519714000000079],[-127.96916199999993,52.521660000000111],[-127.96140300000002,52.519440000000145],[-127.95612299999993,52.515831000000105],[-127.89611799999994,52.542220999999984],[-127.89138800000001,52.546387000000038],[-127.88778699999995,52.551102000000071],[-127.87998999999991,52.574164999999994],[-127.87970699999994,52.579720000000066],[-127.88751200000002,52.577773999999977],[-128.0291749999999,52.541664000000083],[-128.04083300000002,52.535827999999981],[-128.09973099999991,52.503052000000082],[-128.1049349999999,52.492382000000077],[-128.11831699999999,52.465546000000074],[-128.14834599999995,52.422217999999987],[-128.22500599999989,52.330826000000116],[-128.23330699999997,52.321937999999989],[-128.27862499999998,52.280822999999998],[-128.28332499999993,52.276657000000114],[-128.28890999999999,52.273323000000119],[-128.29583700000001,52.270828000000108],[-128.30499299999997,52.269439999999975],[-128.39388999999989,52.291382000000056],[-128.32971199999992,52.380271999999991],[-128.29751599999992,52.400543000000027],[-128.29083300000002,52.401657],[-128.28085299999992,52.400825999999995],[-128.27416999999997,52.39804799999996],[-128.267517,52.396660000000054],[-128.260559,52.399161999999933],[-128.25585899999999,52.403320000000065],[-128.22442599999994,52.459717000000069],[-128.22192399999989,52.465271000000087],[-128.22055099999994,52.471375000000137],[-128.22109999999992,52.484436000000073],[-128.22860700000001,52.523048000000017],[-128.23055999999997,52.528328000000101],[-128.23831200000001,52.536658999999986],[-128.24221799999998,52.547775000000115],[-128.24194299999999,52.55471],[-128.23916600000001,52.566940000000102],[-128.18527199999988,52.671104000000128],[-128.14584399999995,52.719986000000063],[-128.120544,52.757217000000026],[-128.13165300000003,52.876381000000038],[-128.17001299999998,52.856658999999979],[-128.17501800000002,52.851935999999966],[-128.22305299999994,52.812492000000077],[-128.22888199999994,52.80860100000001],[-128.23525999999993,52.805824000000086],[-128.24972500000001,52.801384000000098],[-128.2744449999999,52.799438000000009],[-128.30029300000001,52.800270000000125],[-128.33999600000004,52.805549999999982],[-128.42611699999998,52.817497000000117],[-128.43612699999994,52.818886000000134],[-128.441101,52.822769000000051],[-128.48776199999986,52.873604000000114],[-128.49359100000004,52.882767000000115],[-128.495544,52.887496999999939],[-128.49887100000001,52.903602999999976],[-128.50640899999996,52.96305099999995],[-128.51556399999998,53.019988999999953],[-128.53973400000001,53.131934999999942],[-128.62554899999992,53.202217000000019],[-128.66140699999994,53.202217000000019],[-128.66082799999992,53.196938000000046],[-128.66305499999999,53.190826000000072],[-128.66723599999995,53.187492000000077],[-128.67666600000001,53.187767000000122],[-128.68527199999994,53.189430000000016],[-128.70111099999997,53.195541000000105],[-128.78832999999997,53.239715999999987],[-128.79473899999999,53.243324000000086],[-128.84887699999996,53.275826000000052],[-128.85888699999998,53.283607000000131],[-128.86639400000001,53.292220999999984],[-128.86944600000004,53.2972180000001],[-128.87832599999996,53.31638300000003],[-128.88558999999998,53.374378000000092],[-128.88798499999996,53.424965000000043],[-128.92186000000004,53.453601999999989],[-128.95916699999998,53.502777000000037],[-128.97332799999998,53.547493000000031],[-128.97277799999995,53.553047000000049],[-128.966095,53.556099000000131],[-128.80499299999997,53.569992000000013],[-128.79501300000004,53.568604000000107],[-128.78832999999997,53.564995000000067],[-128.78332499999999,53.561104],[-128.77972399999987,53.556938000000116],[-128.69250499999998,53.485268000000133],[-128.55862399999995,53.413879000000122],[-128.52362099999999,53.396660000000054],[-128.44601399999999,53.413158000000124],[-128.44517499999995,53.415993000000071],[-128.42950399999989,53.429824999999994],[-128.18972799999989,53.459991000000002],[-128.15945399999993,53.455826000000002],[-128.14862099999993,53.453605999999979],[-128.13192699999996,53.448875000000044],[-128.105255,53.440543999999989],[-128.09387199999998,53.433052000000032],[-128.07081600000004,53.394114999999942],[-128.03488200000004,53.369289000000038],[-128.00598099999996,53.34705699999995],[-127.95195000000001,53.326102999999932],[-127.94999699999988,53.321381000000031],[-127.951683,53.309990000000084],[-127.95388799999995,53.304161000000079],[-127.95694700000001,53.28138000000007],[-127.95527600000003,53.265830999999991],[-127.95111099999997,53.256386000000077],[-127.94611399999985,53.252220000000023],[-127.87526700000001,53.224433999999917],[-127.87027,53.222763000000043],[-127.868607,53.233879000000002],[-127.86776700000001,53.239715999999987],[-127.87138399999998,53.244155999999975],[-127.92259999999993,53.273685],[-127.93297599999994,53.293323999999927],[-127.92408,53.318153000000109],[-127.92593399999993,53.330750000000023],[-127.98805199999998,53.353881999999942],[-128.07165499999991,53.431380999999988],[-128.09387199999998,53.451935000000105],[-128.12692300000003,53.481102000000021],[-128.16528299999993,53.483879000000115],[-128.18331899999993,53.484161000000029],[-128.30139199999991,53.478324999999927],[-128.45187399999992,53.50332300000008],[-128.45339999999999,53.499656999999956],[-128.45640600000002,53.496822000000066],[-128.48156700000004,53.487987999999916],[-128.49021900000002,53.485325000000046],[-128.53340100000003,53.478324999999927],[-128.54457100000002,53.478992000000062],[-128.54937699999994,53.480823999999927],[-128.81304899999992,53.619155999999975],[-128.81664999999998,53.623322000000087],[-128.81805399999996,53.644714000000079],[-128.81750499999993,53.65026899999998],[-128.81390399999998,53.656936999999971],[-128.808899,53.661659000000043],[-128.78417999999988,53.675552000000096],[-128.77279699999997,53.733330000000137],[-128.79388399999988,53.764998999999932],[-128.79333500000001,53.770546000000081],[-128.79110699999995,53.776657],[-128.77056899999991,53.79583000000008],[-128.67767300000003,53.839775000000088],[-128.67384300000003,53.84160600000007],[-128.66551200000004,53.844608000000107],[-128.66067499999997,53.845439999999996],[-128.65583799999996,53.843605000000082],[-128.64482099999987,53.837105000000122],[-128.64166299999994,53.834770000000049],[-128.60360699999995,53.842216000000064],[-128.59387199999998,53.839714000000015],[-128.47720299999997,53.828605999999979],[-128.47137499999997,53.832497000000046],[-128.47555499999999,53.842216000000064],[-128.48275799999999,53.850829999999917],[-128.48944099999994,53.854163999999912],[-128.49887100000001,53.856941000000006],[-128.51000999999991,53.859161000000029],[-128.53030399999994,53.861664000000019],[-128.53832999999992,53.860275000000001],[-128.54501299999998,53.857216000000051],[-128.55306999999988,53.856102000000078],[-128.61726399999992,53.868546000000094],[-128.65962199999996,53.882885000000101],[-128.662598,53.885216000000014],[-128.66461200000003,53.888218000000109],[-128.67903099999995,53.907524000000024],[-128.67869599999995,53.910857999999962],[-128.66686999999996,53.92285900000013],[-128.66072099999997,53.928524000000095],[-128.6480709999999,53.949432000000058],[-128.63946499999997,53.96054799999996],[-128.59832799999998,54.02693899999997],[-128.60055499999993,54.031661999999983],[-128.60916099999997,54.03138000000007],[-128.61663799999997,54.029160000000104],[-128.67861899999997,54.00360900000004],[-128.68527199999994,54.000832000000116],[-128.68890399999998,53.994156000000032],[-128.69555699999989,53.976097000000095],[-128.72283899999991,53.944046000000071],[-128.72499099999999,53.940216000000078],[-128.72766100000001,53.936710000000062],[-128.73100299999993,53.933547999999917],[-128.79943799999995,53.87499200000002],[-128.91528299999999,53.787216000000001],[-128.93194600000004,53.774711999999965],[-128.98361199999994,53.762214999999969],[-129.10497999999995,53.72026800000009],[-129.11804199999989,53.714157000000057],[-129.12359599999996,53.710274000000084],[-129.21749899999992,53.64027400000009],[-129.232483,53.625824000000136],[-129.23803699999991,53.61332700000014],[-129.239441,53.601936000000023],[-129.23693800000001,53.537216000000058],[-129.23138399999999,53.500832000000059],[-129.23443599999996,53.461937000000091],[-129.23498499999999,53.456100000000106],[-129.23748799999993,53.433600999999953],[-129.27279699999997,53.379158000000018],[-129.30334499999992,53.384994999999947],[-129.33389299999999,53.397491000000059],[-129.35360700000001,53.407768000000033],[-129.51861600000001,53.514998999999989],[-129.62914999999987,53.587769000000037],[-129.686127,53.630272000000105],[-129.83084099999996,53.74721500000004],[-129.86111499999998,53.765273999999977],[-129.912781,53.79833200000013],[-130.04501300000004,53.883049000000142],[-130.05029300000001,53.886940000000038],[-130.099152,53.941933000000063],[-130.10137899999995,53.946655000000135],[-130.09136999999987,54.066101000000003],[-130.09082000000001,54.071662999999944],[-130.07693499999993,54.114441000000056],[-130.07333399999999,54.120827000000133],[-130.06500199999999,54.132209999999986],[-130.05166600000001,54.148605000000089],[-130.04666099999997,54.153320000000122],[-129.86361699999998,54.213051000000064],[-129.84887700000002,54.217491000000109],[-129.83194000000003,54.219436999999971],[-129.78205899999995,54.210601999999938],[-129.72637899999995,54.200771000000088],[-129.69738799999993,54.194435000000055],[-129.68756099999996,54.19093300000003],[-129.64416499999999,54.181938000000059],[-129.63333099999994,54.179993000000081],[-129.6141659999999,54.178917000000069],[-129.591949,54.185822000000087],[-129.47082499999999,54.235825000000034],[-129.47000100000002,54.23721299999994],[-129.47442599999999,54.239990000000034],[-129.48275799999988,54.243050000000096],[-129.51141399999989,54.244155999999975],[-129.51889,54.241936000000123],[-129.56140099999993,54.226935999999966],[-129.56777999999997,54.223877000000016],[-129.68238799999995,54.221602999999959],[-129.68823199999997,54.223099000000104],[-129.77654999999993,54.234767999999974],[-129.83666999999997,54.23832700000014],[-129.8549799999999,54.238045000000056],[-129.87136799999996,54.235268000000133],[-129.966949,54.206940000000031],[-129.97997999999995,54.200829000000113],[-129.99166899999989,54.192764000000011],[-130.03750600000001,54.173050000000103],[-130.10443099999998,54.154434000000094],[-130.11331200000001,54.153877000000023],[-130.122772,54.154434000000094],[-130.13110399999999,54.157210999999961],[-130.19168099999996,54.193321000000083],[-130.22805800000003,54.258606000000043],[-130.238586,54.294998000000078],[-130.2611389999999,54.342765999999983],[-130.27584799999994,54.349716000000058],[-130.28250100000002,54.346382000000062],[-130.332764,54.329720000000066],[-130.34887700000002,54.326942000000088],[-130.39138799999995,54.330276000000083],[-130.45166,54.336655000000121],[-130.45916699999998,54.338600000000099],[-130.48111,54.364715999999987],[-130.48388699999998,54.401657000000114],[-130.47637899999989,54.430550000000096],[-130.47360199999997,54.43582200000003],[-130.43362400000001,54.496658000000139],[-130.42999299999997,54.562492000000077],[-130.43972799999989,54.612212999999997],[-130.44055200000003,54.617493000000024],[-130.43859900000001,54.623604000000114],[-130.43277,54.627487000000031],[-130.42556799999994,54.629715000000033],[-130.41665599999993,54.630272000000105],[-130.40750099999997,54.62860100000006],[-130.39779699999997,54.626381000000038],[-130.38946499999992,54.62332200000003],[-130.37554899999992,54.616661000000136],[-130.33215299999995,54.578552000000002],[-130.28167699999995,54.528381000000024],[-130.22277799999989,54.471931000000041],[-130.06304899999986,54.339989000000116],[-130.05776999999995,54.336105000000089],[-130.03723100000002,54.326103000000103],[-130.02084400000001,54.319992000000013],[-129.99304199999989,54.31221000000005],[-129.98275799999993,54.311104000000057],[-129.96581999999995,54.313049000000035],[-129.95916699999998,54.316100999999946],[-129.95584099999985,54.322495000000004],[-129.95971700000001,54.326942000000088],[-129.96722399999993,54.328880000000026],[-129.98165900000004,54.324439999999981],[-129.99054000000001,54.32388300000008],[-130.02362099999993,54.335548000000017],[-130.0386049999999,54.341934000000094],[-130.04388399999999,54.345824999999991],[-130.14779699999997,54.44193300000012],[-130.31382799999994,54.586269000000073],[-130.36721799999992,54.635268999999994],[-130.37222299999996,54.644714000000079],[-130.374146,54.654991000000052],[-130.36859100000004,54.667770000000132],[-130.35861199999999,54.677490000000034],[-130.35278299999999,54.681381000000101],[-130.33972199999999,54.687492000000134],[-130.32501200000002,54.692214999999976],[-130.24386599999997,54.707771000000093],[-130.23553499999997,54.709160000000111],[-130.22582999999997,54.708885000000066],[-130.17193599999996,54.703606000000093],[-130.16195700000003,54.701103000000103],[-130.15362500000003,54.698326000000009],[-130.10110499999996,54.671660999999972],[-130.075287,54.657767999999976],[-130.06887800000004,54.648604999999975],[-130.06500199999999,54.644440000000145],[-130.054169,54.636658000000011],[-130.02694699999989,54.623047000000042],[-130.00058000000001,54.61471599999993],[-129.98083500000001,54.609993000000145],[-129.959991,54.607498000000135],[-129.91027800000001,54.605552999999929],[-129.968323,54.62193300000007],[-130.00445599999989,54.632767000000115],[-130.02807599999994,54.641936999999984],[-130.19473299999999,54.723320000000001],[-130.20166,54.72693600000008],[-130.20111099999986,54.732490999999982],[-130.17388899999992,54.846656999999993],[-130.17111199999999,54.851662000000033],[-130.16583300000002,54.856659000000093],[-130.16082799999998,54.861382000000106],[-130.05835000000002,54.952773999999977],[-130.04583700000001,54.959991000000059],[-130.03195199999993,54.965271000000143],[-129.94694499999991,54.970490000000098],[-129.9362789999999,54.971153000000072],[-129.92394999999993,54.970322000000067],[-129.91810599999985,54.968826000000092],[-129.90977499999997,54.964661000000092],[-129.90745500000003,54.962158000000102],[-129.65444899999994,54.980545000000006],[-129.646973,54.982765000000029],[-129.64028899999994,54.985825000000091],[-129.62249799999995,54.997772000000055],[-129.62499999999994,55.00249500000001],[-129.79998799999998,55.006942999999978],[-129.86608899999999,55.006660000000011],[-129.87527499999999,55.00610400000005],[-129.883331,55.004715000000033],[-129.90585299999998,54.997772000000055],[-129.91390999999993,54.996383999999921],[-129.96487400000001,55.003436999999963],[-129.97171000000003,55.004608000000076],[-129.97905000000003,55.008938000000057],[-129.98138399999993,55.011608000000138],[-129.98104899999993,55.014938000000143],[-129.9963679999999,55.024162000000047],[-129.97555499999993,55.066939999999931],[-129.96139500000004,55.093323000000112],[-129.95638999999989,55.098045000000013],[-129.84750399999996,55.210548000000074],[-129.72665399999988,55.338600000000099],[-129.66300999999999,55.412212000000011],[-129.64334099999996,55.434158000000025],[-129.63723800000002,55.438042000000053],[-129.62222299999996,55.442490000000021],[-129.60525499999994,55.445267000000115],[-129.58471700000001,55.443878000000097],[-129.54110700000001,55.438042000000053],[-129.52389500000004,55.439987000000031],[-129.50863599999997,55.444434999999999],[-129.48831199999995,55.453605999999922],[-129.47610499999996,55.461380000000133],[-129.47164899999996,55.467209000000139],[-129.47109999999992,55.472762999999986],[-129.47500600000001,55.47693600000008],[-129.48416099999997,55.478600000000085],[-129.62027,55.459434999999985],[-129.63696299999998,55.45665699999995],[-129.679123,55.473156000000131],[-129.68611099999998,55.467491000000052],[-129.69662500000004,55.45399100000003],[-129.69979899999993,55.450993000000096],[-129.70428500000003,55.449661000000049],[-129.70979299999993,55.450657000000035],[-129.71211199999999,55.453327000000115],[-129.71362299999993,55.456161000000122],[-129.78695700000003,55.566666000000112],[-129.78582800000004,55.50277699999998],[-129.779449,55.493607000000111],[-129.77224699999999,55.47943099999992],[-129.78030399999994,55.359717999999987],[-129.78250100000002,55.353607000000068],[-129.81390399999987,55.289719000000048],[-129.81750499999998,55.283332999999971],[-129.90695199999988,55.168052999999986],[-129.911407,55.162491000000045],[-129.92083699999995,55.151931999999988],[-130.02835099999999,55.036385000000109],[-130.06832900000001,54.996941000000049],[-130.07443199999994,54.992767000000015],[-130.08166499999999,54.990546999999992],[-130.09082000000001,54.989990000000091],[-130.10055499999999,54.990546999999992],[-130.10833699999995,54.992493000000081],[-130.11361699999992,54.996383999999921],[-130.12777700000004,55.013885000000073],[-130.16027799999995,55.069717000000026],[-130.16223099999996,55.079993999999999],[-130.1600039999999,55.086105000000089],[-130.11859099999998,55.142493999999942],[-130.11416599999995,55.148331000000098],[-130.08084099999991,55.184714999999983],[-130.06390399999998,55.195266999999944],[-130.04528799999997,55.204163000000051],[-130.03918499999992,55.208046000000024],[-129.948059,55.276382000000012],[-129.94387799999998,55.282211000000018],[-129.94473300000004,55.287216000000058],[-129.94888300000002,55.295830000000137],[-129.96054100000003,55.308884000000035],[-130.00863599999997,55.370827000000077],[-130.101654,55.556380999999988],[-130.10360700000001,55.566666000000112],[-130.12887599999999,55.722214000000122],[-130.12942499999997,55.732765000000029],[-130.12887599999999,55.738602000000014],[-130.12609900000001,55.750275000000045],[-130.12191799999994,55.762496999999996],[-130.11639400000001,55.774993999999992],[-130.11276199999998,55.781661999999983],[-130.10833699999995,55.787216000000001],[-130.09109499999994,55.799995000000024],[-130.07916299999999,55.808044000000052],[-130.06722999999994,55.815826000000015],[-130.0552669999999,55.823883000000137],[-130.03945899999997,55.838326000000052],[-129.96664399999992,55.912209000000018],[-129.962219,55.917770000000019],[-129.96417199999991,55.928329000000076],[-129.97137499999985,55.931663999999955],[-129.97970599999985,55.932213000000104],[-129.99499500000002,55.927773000000059],[-130.0019529999999,55.924713000000054],[-130.00500499999993,55.921661000000086],[-130.01507600000002,55.909179999999992],[-130.01419099999998,56.023880000000133],[-130.0147399999999,56.025826000000052],[-130.0538939999999,56.075554000000011],[-130.08859299999995,56.118049999999982],[-130.22915599999993,56.090271000000143],[-130.36526499999991,56.123878000000104],[-130.44750999999991,56.206383000000073],[-130.46194499999996,56.235268000000133],[-130.48471099999995,56.239433000000133],[-130.53277599999996,56.246384000000035],[-130.5607149999999,56.250000000000114],[-130.62719699999997,56.258606000000043],[-130.720551,56.325554000000125],[-130.75585899999999,56.353049999999996],[-130.77444500000001,56.366104000000064],[-130.84722899999997,56.374435000000119],[-130.92001300000004,56.382492000000127],[-131.05499299999997,56.398048000000074],[-131.07055699999995,56.403602999999976],[-131.12582399999997,56.424163999999962],[-131.1444699999999,56.434715000000097],[-131.16473400000001,56.445267000000058],[-131.20526100000001,56.465828000000101],[-131.22137499999997,56.472488000000112],[-131.290009,56.500548999999978],[-131.31445299999996,56.509994999999947],[-131.53945899999991,56.596656999999993],[-131.55777,56.602219000000105],[-131.57888800000001,56.603324999999927],[-131.61111499999998,56.602219000000105],[-131.81610099999995,56.594994000000042],[-131.82415800000001,56.59693900000002],[-131.82861299999996,56.600830000000087],[-131.85803199999987,56.718880000000127],[-131.86361699999992,56.786110000000122],[-131.86053500000003,56.797775000000001],[-131.86138899999997,56.79972100000009],[-132.10305800000003,56.866661000000022],[-132.09194899999994,56.893607999999972],[-132.06195100000002,56.959717000000069],[-132.03668199999993,57.013054000000011],[-132.02749600000004,57.036385000000053],[-132.22109999999992,57.068054000000075],[-132.316956,57.083878000000027],[-132.33694500000001,57.088325999999995],[-132.32611099999997,57.100548000000117],[-132.26806599999986,57.16304800000006],[-132.25473,57.17471299999994],[-132.226654,57.204711999999972],[-132.35415599999988,57.354439000000127],[-132.36972000000003,57.37082700000002],[-132.37914999999992,57.37943300000012],[-132.45111099999986,57.435265000000072],[-132.471924,57.451103000000103],[-132.4927669999999,57.46665999999999],[-132.50363200000004,57.474158999999986],[-132.61944599999998,57.583328000000051],[-132.75250199999994,57.709435000000042],[-132.76113899999996,57.717765999999926],[-132.76889,57.72665400000011],[-132.78222700000003,57.745270000000119],[-132.79110699999995,57.7586060000001],[-132.79583700000001,57.768883000000073],[-132.79611199999999,57.773879999999963],[-132.80722000000003,57.787773000000016],[-132.81362899999988,57.795546999999999],[-132.82138099999992,57.804436000000067],[-132.87304699999999,57.855270000000075],[-132.88165299999997,57.86360900000011],[-132.92861900000003,57.90554800000001],[-132.93777499999999,57.913322000000051],[-132.96472199999999,57.93332700000002],[-132.99499500000002,57.951660000000061],[-133.03332499999988,57.978874000000076],[-133.04388399999999,57.986938000000066],[-133.05306999999993,57.99471299999999],[-133.058044,57.999435000000062],[-133.070831,58.012215000000026],[-133.08749399999999,58.033332999999971],[-133.09500100000002,58.047775000000115],[-133.10415599999999,58.073051000000135],[-133.10720800000001,58.083328000000108],[-133.11111500000004,58.093323000000055],[-133.13696299999998,58.135826000000122],[-133.18472299999991,58.176102000000128],[-133.19500700000003,58.184158000000025],[-133.21139499999998,58.196381000000031],[-133.23361199999999,58.211380000000133],[-133.3061219999999,58.257216999999969],[-133.36111499999993,58.28054800000001],[-133.43029799999994,58.359993000000088],[-133.408905,58.400268999999923],[-133.38790899999998,58.4120640000001],[-133.42999299999991,58.459160000000054],[-133.55889899999994,58.528046000000074],[-133.73580900000002,58.644713999999965],[-133.80834999999996,58.709991000000002],[-133.82693499999999,58.726097000000038],[-134.08749399999999,58.808327000000133],[-134.23110999999989,58.851936000000023],[-134.245544,58.856941000000063],[-134.32000699999998,58.916099999999972],[-134.32556199999999,58.920830000000024],[-134.33221400000002,58.929718000000037],[-134.33221400000002,58.935265000000129],[-134.32556199999999,58.971100000000035],[-134.37942499999991,59.049164000000076],[-134.38613899999996,59.058044000000109],[-134.45556599999998,59.122489999999971],[-134.46139499999992,59.126656000000025],[-134.47500599999989,59.1336060000001],[-134.53222700000003,59.132210000000043],[-134.56640599999997,59.130547000000092],[-134.65084799999994,59.185546999999985],[-134.67166099999997,59.200272000000098],[-134.67529300000001,59.214714000000072],[-134.68804899999992,59.243324000000086],[-134.73889199999991,59.250275000000045],[-134.95193499999993,59.279991000000109],[-135.09167499999995,59.426940999999999],[-135.07971199999992,59.4447100000001],[-135.06332399999997,59.458046000000081],[-135.03973399999995,59.466934000000037],[-135.03057899999999,59.46804800000001],[-135.02111799999994,59.471099999999922],[-135.01779199999999,59.498878000000047],[-135.01501500000001,59.54055000000011],[-135.01446499999997,59.567497000000003],[-135.09722899999997,59.621376000000055],[-135.12027,59.621658000000139],[-135.13275099999998,59.622765000000072],[-135.1541749999999,59.62721300000004],[-135.17749000000003,59.636939999999981],[-135.33612099999999,59.726654000000053],[-135.47360199999997,59.801933000000076],[-135.50613399999997,59.793884000000048],[-135.82333399999999,59.705550999999957],[-135.94915800000001,59.669158999999979],[-136.07138099999997,59.657494000000099],[-136.12081899999998,59.651656999999943],[-136.16000399999996,59.646660000000054],[-136.20776399999988,59.639434999999992],[-136.31054700000004,59.612495000000138],[-136.34387200000003,59.602776000000119],[-136.34637499999991,59.600548000000003],[-136.29834,59.583603000000039],[-136.23916600000001,59.561377999999991],[-136.23388699999992,59.525826000000052],[-136.29305999999991,59.476097000000038],[-136.29998799999993,59.471099999999922],[-136.37164300000001,59.452492000000063],[-136.46362299999993,59.469711000000132],[-136.46417199999996,59.414153999999996],[-136.46249399999994,59.37221500000004],[-136.46249399999994,59.302490000000091],[-136.46276899999998,59.289436000000023],[-136.48083499999996,59.261939999999925],[-136.49221799999998,59.249718000000144],[-136.55835000000002,59.186377999999991],[-136.58389299999988,59.163321999999937],[-136.61138900000003,59.164711000000125],[-136.71972699999998,59.165268000000026],[-136.80889899999994,59.165268000000026],[-136.88833599999998,59.131934999999999],[-136.94195599999995,59.109436000000073],[-136.96972700000003,59.098328000000095],[-137.03308100000004,59.077492000000063],[-137.25167799999997,59.006104000000107],[-137.29611199999999,58.989989999999977],[-137.31417799999997,58.981102000000021],[-137.33889799999997,58.965546000000074],[-137.39279199999999,58.928329000000019],[-137.42028800000003,58.91415400000011],[-137.42749000000003,58.911377000000016],[-137.44500699999998,58.907494000000099],[-137.46554600000002,58.906096999999932],[-137.47805800000003,58.907211000000132],[-137.48803699999996,58.909156999999993],[-137.49581899999998,58.911934000000088],[-137.50167799999991,58.916382000000056],[-137.50500499999993,58.920273000000122],[-137.50750700000003,58.925552000000096],[-137.50723299999999,58.937767000000008],[-137.50527999999997,58.944153000000142],[-137.49722299999996,58.964157000000057],[-137.48776199999992,58.982490999999982],[-137.47970599999996,58.998046999999985],[-137.49914599999994,59.041382000000112],[-137.54528799999997,59.143051000000128],[-137.566101,59.186935000000062],[-137.59082000000001,59.238602000000014],[-137.91027800000001,59.408043000000077],[-138.11776699999996,59.516663000000051],[-138.30361900000003,59.613052000000039],[-138.49108899999993,59.708328000000051],[-138.5386049999999,59.732208000000071],[-138.615814,59.77416199999999],[-138.64724699999999,59.805550000000039],[-138.65472399999993,59.81471300000004],[-138.66363499999989,59.829162999999937],[-138.66610699999995,59.834435000000042],[-138.66915900000004,59.844994000000099],[-138.67501799999997,59.86693600000001],[-138.69027700000004,59.906936999999971],[-138.97192399999994,59.978600000000085],[-139.04779099999996,59.997490000000028],[-139.11639400000001,60.041382000000112],[-139.161407,60.07027400000004],[-139.18890399999987,60.088882000000069],[-139.183899,60.102219000000105],[-139.15527299999997,60.154991000000052],[-139.13363600000002,60.194435000000112],[-139.12527499999993,60.207771000000093],[-139.08221399999996,60.287498000000028],[-139.06500199999988,60.330276000000083],[-139.06640600000003,60.344153999999946],[-139.06805399999996,60.352219000000048],[-139.51947000000001,60.344711000000018],[-139.67666599999995,60.340546000000018],[-139.77166699999992,60.292496000000028],[-139.86639400000001,60.244438000000059],[-139.91305499999987,60.220824999999934],[-139.97943099999998,60.187767000000122],[-140.005585,60.193878000000041],[-140.45083599999992,60.309715000000097],[-140.471924,60.283882000000006],[-140.493042,60.25777400000004],[-140.50195299999996,60.244713000000104],[-140.52139299999993,60.222214000000122],[-140.94638099999997,60.297775000000001],[-140.995544,60.307213000000047],[-141.00058000000001,60.366661000000022],[-141.00112899999999,60.399436999999978],[-141.00030500000003,60.933051999999975],[-141.00167799999991,60.966384999999946],[-141.00030500000003,62.733046999999942],[-141.00140399999998,63.099998000000141],[-141.00195299999996,63.83277099999998],[-141.00030500000003,63.966385000000059],[-141.00030500000003,64.199706999999989],[-141.00195299999996,65.132751000000098],[-141.00030500000003,65.166092000000049],[-141.00030500000003,65.232758000000047],[-141.00195299999996,65.699416999999983],[-141.00195299999996,66.099425999999994],[-141.00167799999991,66.499419999999986],[-141.00085399999995,66.666382000000112],[-141.00058000000001,66.866089000000102],[-141.00167799999991,67.066376000000105],[-141.00222799999995,67.299149000000057],[-141.00058000000001,67.532486000000119],[-141,67.732758000000103],[-141.00195299999996,67.865814000000057],[-141.00195299999996,68.065811000000053],[-141.00195299999996,68.23275799999999],[-141.00167799999991,68.532761000000107],[-141.00085399999995,68.965546000000018],[-141.00058000000001,69.432479999999941],[-141.00085399999995,69.532211000000018],[-141.00299100000001,69.642365000000098],[-140.98220800000001,69.642761000000007],[-140.90945399999998,69.639160000000118],[-140.83306900000002,69.635269000000051],[-140.81610099999995,69.6336060000001],[-140.79528799999997,69.627197000000081],[-140.77001999999999,69.621643000000063],[-140.73831200000001,69.617751999999996],[-140.61554000000001,69.60832199999993],[-140.48831200000001,69.599425999999994],[-140.39611799999994,69.596099999999979],[-140.26141399999995,69.596649000000127],[-140.21887200000003,69.600815000000011],[-140.17944299999988,69.606369000000029],[-140.12914999999998,69.614990000000091],[-140.10055499999999,69.617477000000008],[-140.08471700000001,69.618042000000003],[-139.94387800000004,69.618865999999969],[-139.92639199999991,69.618590999999981],[-139.88833599999998,69.616653000000042],[-139.81054699999999,69.606644000000017],[-139.78112799999997,69.602203000000088],[-139.605255,69.575546000000031],[-139.57611099999986,69.570830999999998],[-139.67001299999998,69.579162999999994],[-139.68472299999996,69.581375000000037],[-139.77639799999997,69.599716000000001],[-139.7647399999999,69.590820000000065],[-139.75668299999995,69.586655000000064],[-139.73165899999998,69.581099999999992],[-139.60665899999992,69.559417999999994],[-139.573059,69.556091000000038],[-139.5350039999999,69.553863999999976],[-139.351654,69.53637700000013],[-139.14306599999998,69.510817999999915],[-139.11639400000001,69.505554000000132],[-139.10833699999995,69.501663000000065],[-139.10137899999995,69.491364000000033],[-139.09222399999999,69.481658999999979],[-139.069458,69.463318000000129],[-139.05584699999991,69.454987000000074],[-139.04806499999995,69.450821000000133],[-138.975281,69.414993000000095],[-138.95748900000001,69.407486000000006],[-138.93945299999996,69.399994000000049],[-138.88275099999993,69.384720000000129],[-138.83361799999994,69.373306000000071],[-138.79916399999991,69.364150999999993],[-138.76916499999999,69.35386699999998],[-138.75140399999998,69.346375000000023],[-138.64389,69.291367000000037],[-138.62164300000001,69.273041000000035],[-138.61639400000001,69.268326000000002],[-138.60720799999996,69.2586060000001],[-138.60498000000001,69.247482000000048],[-138.44998199999992,69.229156000000046],[-138.26916499999999,69.196365000000071],[-138.25390599999997,69.188309000000004],[-138.21887200000003,69.173309000000074],[-138.17721599999993,69.159988000000112],[-138.14334099999996,69.150818000000072],[-138.06332399999997,69.129424999999969],[-138.03945899999997,69.123596000000134],[-138.00112899999993,69.115265000000022],[-137.69638099999992,69.049712999999997],[-137.59445199999999,69.027771000000143],[-137.41915900000004,68.988876000000005],[-137.25500499999998,68.948318000000086],[-137.22610499999996,68.944977000000051],[-137.19222999999994,68.943863000000079],[-137.13027999999986,68.944977000000051],[-136.9786069999999,68.931931000000134],[-136.97332799999998,68.927200000000028],[-136.966095,68.923309000000131],[-136.95416299999994,68.920258000000103],[-136.78973399999995,68.881927000000076],[-136.74554399999994,68.875259000000085],[-136.68249499999996,68.871918000000051],[-136.65972899999997,68.874984999999981],[-136.64279199999993,68.878036000000009],[-136.63751199999996,68.884155000000021],[-136.63082900000001,68.889160000000061],[-136.61999500000002,68.891936999999984],[-136.52224699999999,68.909149000000014],[-136.50836199999998,68.910262999999986],[-136.47747800000002,68.910812000000135],[-136.42059299999994,68.9015500000001],[-136.39306599999992,68.897217000000069],[-136.35861199999999,68.893874999999923],[-136.25585899999999,68.889435000000105],[-136.14501999999999,68.885817999999972],[-136.09722899999991,68.88220200000012],[-136.02780199999989,68.873032000000023],[-135.98666399999996,68.864990000000091],[-135.85879499999993,68.838974000000064],[-135.83166499999999,68.831940000000031],[-135.54055799999992,68.752486999999974],[-135.519745,68.74581900000004],[-135.49194299999988,68.735259999999982],[-135.48498499999999,68.731094000000098],[-135.45388799999995,68.709427000000062],[-135.40695199999993,68.679977000000122],[-135.36554000000001,68.675812000000121],[-135.21054099999998,68.661377000000016],[-135.1600039999999,68.657211000000132],[-135.14752199999998,68.658874999999966],[-135.14639299999993,68.663879000000122],[-135.21444699999995,68.693038999999999],[-135.25363200000004,68.706940000000145],[-135.34359699999993,68.737762000000032],[-135.48193400000002,68.809418000000107],[-135.50613399999997,68.832488999999953],[-135.500854,68.838593000000003],[-135.48666399999996,68.839431999999988],[-135.45306399999998,68.838042999999971],[-135.43917799999991,68.835541000000092],[-135.40499899999998,68.831940000000031],[-135.341949,68.831664999999987],[-135.33804299999997,68.834991000000059],[-135.34973099999996,68.838042999999971],[-135.42166099999997,68.848877000000016],[-135.49472000000003,68.854979999999955],[-135.52835099999993,68.856368999999972],[-135.56054700000004,68.860260000000039],[-135.59527600000001,68.86943100000002],[-135.60443099999998,68.873032000000023],[-135.61886599999997,68.881362999999965],[-135.62359600000002,68.886107999999979],[-135.61389199999991,68.889435000000105],[-135.33581499999997,68.917755000000113],[-135.241669,68.926926000000094],[-135.22720299999997,68.925537000000077],[-135.21554600000002,68.922484999999995],[-135.20861799999994,68.918319999999994],[-135.19665499999991,68.909714000000065],[-135.19168100000002,68.904984000000013],[-135.18695100000002,68.90026899999998],[-135.12191799999999,68.893326000000002],[-134.97747799999996,68.878311000000053],[-134.95111099999997,68.88108799999992],[-134.91723599999995,68.898041000000035],[-134.89474499999994,68.912490999999932],[-134.87777700000004,68.920822000000044],[-134.85803199999998,68.927765000000022],[-134.845551,68.929428000000144],[-134.81723,68.925812000000064],[-134.80334499999998,68.923035000000027],[-134.74581899999998,68.907486000000063],[-134.70889299999999,68.892761000000121],[-134.66946399999989,68.873305999999957],[-134.64169299999992,68.856644000000017],[-134.49554399999994,68.75221300000004]],[[-93.519729999999925,63.839432000000102],[-93.339995999999985,63.80832700000002],[-93.329726999999934,63.809715000000097],[-93.217498999999975,63.838599999999985],[-93.216110000000015,63.843605000000025],[-93.225006000000008,63.847771000000137],[-93.236389000000031,63.847487999999942],[-93.267501999999922,63.84276600000004],[-93.278884999999946,63.842491000000052],[-93.291671999999949,63.844994000000042],[-93.333892999999932,63.859160999999972],[-93.343338000000017,63.863052000000039],[-93.357498000000021,63.871376000000112],[-93.441939999999931,63.921660999999915],[-93.448883000000023,63.925827000000027],[-93.449721999999952,63.930824000000086],[-93.452498999999989,63.954437000000041],[-93.451110999999969,63.959717000000126],[-93.443329000000006,63.965546000000131],[-93.433884000000035,63.968596999999988],[-93.423614999999927,63.970825000000104],[-93.413054999999986,63.971930999999927],[-93.389998999999932,63.971656999999993],[-93.36471599999993,63.967491000000109],[-93.27305599999994,63.928047000000049],[-93.12222300000002,63.892493999999999],[-92.960281000000009,63.855826999999977],[-92.841675000000009,63.83526599999999],[-92.65194699999995,63.787498000000028],[-92.549728000000016,63.81082200000003],[-92.540558000000033,63.814713000000097],[-92.530563000000029,63.816939999999988],[-92.507506999999976,63.816383000000087],[-92.583892999999989,63.829436999999984],[-92.606948999999872,63.829720000000123],[-92.619155999999919,63.831383000000073],[-92.669158999999979,63.839989000000003],[-92.706954999999937,63.846656999999936],[-92.935546999999985,63.904990999999995],[-92.942489999999964,63.90915700000005],[-92.956116000000009,63.932770000000005],[-92.965285999999992,63.936652999999922],[-93.218886999999995,63.979431000000034],[-93.266113000000018,63.981934000000024],[-93.276397999999972,63.979713000000061],[-93.288054999999986,63.980545000000006],[-93.301102000000014,63.983047000000056],[-93.436661000000015,64.015274000000034],[-93.612212999999997,64.093048000000067],[-93.627212999999983,64.106369000000029],[-93.635009999999909,64.115265000000136],[-93.635833999999988,64.120255000000043],[-93.689986999999917,64.156096999999988],[-93.751677999999913,64.188873000000058],[-93.761123999999882,64.192748999999992],[-93.773055999999997,64.19358799999992],[-93.779723999999987,64.189697000000024],[-93.776947000000007,64.184981999999991],[-93.665008999999941,64.087204000000042],[-93.660004000000015,64.083054000000061],[-93.604172000000005,64.044434000000138],[-93.654723999999931,63.992493000000024],[-93.731673999999998,63.987212999999997],[-93.759170999999924,63.984161000000029],[-93.770553999999947,63.957771000000037],[-93.654449,63.896660000000111],[-93.59973100000002,63.870270000000062],[-93.55360399999995,63.850548000000003],[-93.533324999999991,63.84276600000004],[-93.519729999999925,63.839432000000102]],[[-70.783065999999963,48.380547000000092],[-70.782501000000025,48.348045000000127],[-70.768065999999919,48.35054800000006],[-70.548049999999989,48.356383999999991],[-70.498885999999914,48.353324999999984],[-70.464172000000019,48.3491590000001],[-70.383057000000008,48.331108000000086],[-70.332229999999981,48.316666000000112],[-70.272780999999952,48.298332000000016],[-70.237777999999992,48.282493999999986],[-70.210007000000019,48.269714000000022],[-70.198607999999979,48.26249700000011],[-70.06138599999997,48.239989999999977],[-70.040833000000021,48.244437999999946],[-70.025833000000034,48.246101000000067],[-70.017501999999865,48.245270000000062],[-69.995543999999995,48.239989999999977],[-69.936935000000005,48.221931000000041],[-69.920546999999885,48.216385000000002],[-69.828339000000028,48.166382000000056],[-69.838333000000034,48.173881999999935],[-69.84722899999997,48.181938000000002],[-69.861938000000009,48.198875000000044],[-69.871933000000013,48.212493999999936],[-69.879439999999931,48.220825000000048],[-69.884170999999981,48.224159000000043],[-69.95944199999991,48.269440000000088],[-69.977218999999991,48.274436999999978],[-69.985549999999989,48.274994000000049],[-69.993332000000009,48.274712000000022],[-70.043610000000001,48.267211999999915],[-70.099990999999989,48.267211999999915],[-70.131942999999978,48.269714000000022],[-70.151108000000022,48.274436999999978],[-70.167770000000019,48.279990999999995],[-70.272507000000019,48.325554000000125],[-70.420273000000009,48.361381999999992],[-70.427779999999984,48.361107000000118],[-70.635009999999966,48.390549000000078],[-70.727782999999874,48.415825000000098],[-70.739165999999955,48.423049999999989],[-70.751952999999958,48.42849300000006],[-70.761397999999929,48.431938000000002],[-70.779998999999975,48.435546999999985],[-70.954726999999991,48.459717000000012],[-70.980559999999912,48.462212000000022],[-71.012221999999952,48.46166199999999],[-71.025283999999886,48.457496999999989],[-71.048614999999927,48.445267000000058],[-71.047774999999888,48.444434999999942],[-71.031386999999995,48.443320999999969],[-70.906386999999938,48.423325000000034],[-70.799987999999985,48.401657000000057],[-70.785552999999879,48.395828000000051],[-70.781386999999881,48.391936999999984],[-70.779449,48.386940000000095],[-70.783065999999963,48.380547000000092]],[[-108.13890100000003,71.981658999999979],[-108.15583799999996,71.980820000000051],[-108.17415599999998,71.983322000000101],[-108.18720999999999,71.986649000000057],[-108.18916300000001,71.99192800000003],[-108.19972199999995,72.050537000000077],[-108.19027699999998,72.055542000000116],[-108.1702729999999,72.064423000000033],[-108.16027799999995,72.062759000000028],[-108.13417099999992,72.056091000000094],[-108.07444799999996,72.034149000000014],[-108.06416299999995,72.030272999999966],[-108.06220999999999,72.02526899999998],[-108.06304899999998,72.019440000000145],[-108.069458,72.013046000000088],[-108.07721700000002,72.007217000000082],[-108.10526999999996,71.992751999999996],[-108.12526700000001,71.983871000000022],[-108.13890100000003,71.981658999999979]],[[-85.84722899999997,72.294144000000074],[-85.837218999999948,72.288879000000009],[-85.837218999999948,72.262771999999927],[-85.851669000000015,72.241364000000033],[-85.877486999999917,72.221649000000014],[-85.889175000000023,72.218047999999953],[-85.90834000000001,72.217758000000117],[-85.981110000000001,72.236373999999955],[-86.005844000000025,72.243591000000094],[-86.061110999999983,72.261658000000125],[-86.096389999999985,72.276382000000012],[-86.107223999999917,72.283875000000023],[-86.110001000000011,72.289703000000145],[-86.101395000000025,72.293594000000041],[-86.093338000000017,72.294708000000014],[-86.067229999999995,72.293869000000029],[-86.005004999999983,72.296646000000123],[-85.863891999999964,72.297211000000004],[-85.84722899999997,72.294144000000074]],[[-78.735000999999954,72.365540000000124],[-78.75389100000001,72.363312000000008],[-78.81220999999988,72.365265000000079],[-78.830840999999964,72.364990000000091],[-78.854172000000005,72.362197999999978],[-78.874435000000005,72.358871000000079],[-78.889450000000011,72.354706000000078],[-78.91332999999986,72.345535000000098],[-78.920836999999949,72.341370000000097],[-78.93499799999995,72.336380000000077],[-78.950286999999946,72.334991000000059],[-79.053054999999972,72.360809000000017],[-79.075561999999934,72.403046000000074],[-79.075012000000015,72.409714000000065],[-79.070847000000015,72.414993000000038],[-79.066665999999998,72.420258000000103],[-79.044448999999929,72.426651000000049],[-79.00140399999998,72.438309000000118],[-78.97084000000001,72.445250999999985],[-78.955565999999919,72.444427000000019],[-78.950561999999991,72.442199999999957],[-78.946655000000021,72.440262000000018],[-78.939986999999917,72.435806000000127],[-78.846953999999926,72.415543000000071],[-78.833892999999989,72.411926000000108],[-78.740829000000019,72.374419999999986],[-78.731673999999941,72.36943100000002],[-78.735000999999954,72.365540000000124]],[[-79.508056999999951,72.348602000000028],[-79.533889999999985,72.346099999999979],[-79.555832000000009,72.346939000000077],[-79.572234999999978,72.349152000000061],[-79.581954999999994,72.35165399999994],[-79.59445199999999,72.356934000000024],[-79.609436000000017,72.36692800000003],[-79.624160999999901,72.379425000000026],[-79.683318999999983,72.430542000000116],[-79.586120999999991,72.453872999999987],[-79.576675000000023,72.456100000000049],[-79.552489999999921,72.451096000000121],[-79.541381999999999,72.444977000000051],[-79.529174999999952,72.439697000000024],[-79.502791999999886,72.429977000000122],[-79.46945199999999,72.423035000000027],[-79.43638599999997,72.418319999999994],[-79.42971799999998,72.411652000000004],[-79.440552000000025,72.37052900000009],[-79.446654999999907,72.364990000000091],[-79.455565999999919,72.359985000000052],[-79.470275999999956,72.355545000000006],[-79.508056999999951,72.348602000000028]],[[-79.993606999999997,72.413315000000125],[-80.009445000000028,72.410538000000031],[-80.022232000000031,72.413605000000132],[-80.124435000000005,72.506653000000028],[-80.130554000000018,72.512497000000053],[-80.133330999999941,72.519440000000031],[-80.129989999999907,72.523041000000092],[-80.11999499999996,72.526931999999988],[-80.112502999999947,72.526931999999988],[-80.063613999999973,72.523880000000077],[-80.036941999999897,72.51638800000012],[-79.921936000000017,72.463318000000072],[-79.916397000000018,72.458037999999988],[-79.926940999999999,72.447754000000145],[-79.939162999999951,72.436645999999996],[-79.956954999999994,72.426086000000055],[-79.978881999999885,72.417755000000113],[-79.993606999999997,72.413315000000125]],[[-110.46916199999993,72.569152999999972],[-110.48137699999995,72.565811000000053],[-110.54415899999998,72.569152999999972],[-110.57195300000001,72.575546000000145],[-110.58833299999998,72.583878000000141],[-110.593887,72.588592999999946],[-110.593887,72.594147000000135],[-110.576683,72.594986000000119],[-110.53888699999993,72.594986000000119],[-110.51666299999999,72.593322999999998],[-110.50446299999999,72.590820000000008],[-110.48249799999991,72.583603000000096],[-110.47444200000001,72.579437000000041],[-110.46888699999994,72.574706999999989],[-110.46916199999993,72.569152999999972]],[[-110.35582699999998,72.601929000000098],[-110.37304699999993,72.601379000000065],[-110.39499699999993,72.603043000000071],[-110.46417199999991,72.613312000000121],[-110.49472000000003,72.619141000000127],[-110.46916199999993,72.621368000000018],[-110.450287,72.621368000000018],[-110.39862099999993,72.618041999999946],[-110.35888699999992,72.614990000000034],[-110.34500100000002,72.611923000000104],[-110.34500100000002,72.606094000000098],[-110.35582699999998,72.601929000000098]],[[-108.510559,72.602768000000083],[-108.51999699999993,72.598038000000031],[-108.53778099999994,72.599426000000108],[-108.593613,72.61775200000011],[-108.604446,72.621643000000006],[-108.61221299999994,72.625809000000118],[-108.6141659999999,72.631088000000091],[-108.61361699999986,72.636657999999954],[-108.60388199999994,72.639435000000049],[-108.51722699999999,72.642487000000017],[-108.49665800000002,72.641372999999987],[-108.49194299999999,72.636657999999954],[-108.49416400000001,72.631927000000019],[-108.510559,72.602768000000083]],[[-110.30722000000003,72.630813999999987],[-110.36389199999996,72.630813999999987],[-110.39695699999993,72.636383000000137],[-110.41082799999998,72.639435000000049],[-110.40028399999994,72.643600000000049],[-110.36000100000001,72.648880000000133],[-110.31500199999999,72.651932000000045],[-110.28083799999996,72.642211999999972],[-110.281113,72.636383000000137],[-110.28999299999992,72.631653000000085],[-110.30722000000003,72.630813999999987]],[[-109.215012,72.790268000000083],[-109.22749299999992,72.787200999999982],[-109.24833699999999,72.788040000000137],[-109.37277199999994,72.806091000000094],[-109.41694599999988,72.815262000000075],[-109.41944899999993,72.820541000000048],[-109.37832600000002,72.828598],[-109.33389299999999,72.834990999999945],[-109.32028200000002,72.8316650000001],[-109.31220999999994,72.827484000000027],[-109.22444200000001,72.811096000000134],[-109.21056399999998,72.8077550000001],[-109.21166999999997,72.796371000000022],[-109.215012,72.790268000000083]],[[-95.735000999999954,72.798874000000012],[-95.753615999999909,72.796097000000088],[-95.771392999999932,72.799149],[-95.835555999999997,72.831100000000049],[-95.854172000000005,72.853591999999992],[-95.850829999999974,72.858321999999987],[-95.810546999999929,72.876647999999989],[-95.791106999999954,72.880264000000068],[-95.774170000000026,72.880264000000068],[-95.769164999999987,72.878036000000122],[-95.763061999999877,72.872482000000105],[-95.735275000000001,72.859985000000108],[-95.720550999999944,72.848037999999974],[-95.716949,72.84387200000009],[-95.714171999999905,72.838593000000117],[-95.71362299999987,72.832214000000079],[-95.718886999999938,72.809418000000051],[-95.725005999999951,72.803314],[-95.735000999999954,72.798874000000012]],[[-96.754181000000017,72.721374999999966],[-96.77027899999996,72.719710999999961],[-96.955275999999969,72.734146000000067],[-96.96945199999999,72.737761999999975],[-96.977782999999988,72.745254999999986],[-97.011123999999938,72.775818000000129],[-97.010283999999899,72.776657000000114],[-96.921386999999982,72.835815000000082],[-96.911117999999931,72.841094999999996],[-96.798614999999984,72.881363000000022],[-96.757232999999928,72.892761000000064],[-96.737212999999997,72.895264000000054],[-96.725554999999986,72.89498900000001],[-96.713332999999921,72.893326000000059],[-96.688323999999966,72.883330999999998],[-96.692215000000033,72.862762000000032],[-96.666945999999996,72.811096000000134],[-96.651672000000019,72.804152999999985],[-96.642501999999979,72.797760000000039],[-96.639998999999989,72.791655999999989],[-96.639998999999989,72.786652000000004],[-96.641388000000006,72.782211000000075],[-96.728058000000033,72.730545000000063],[-96.741378999999995,72.725539999999967],[-96.754181000000017,72.721374999999966]],[[-95.756957999999997,72.892487000000131],[-95.777495999999985,72.891937000000098],[-95.795272999999952,72.89498900000001],[-95.808334000000002,72.907210999999961],[-95.824721999999952,72.965271000000087],[-95.786666999999966,73.012496999999939],[-95.761672999999973,73.004714999999976],[-95.757232999999928,73.001663000000065],[-95.756118999999956,72.998596000000134],[-95.743606999999997,72.987762000000089],[-95.702498999999989,72.933593999999971],[-95.708343999999954,72.917206000000078],[-95.735549999999989,72.900543000000027],[-95.744445999999925,72.895827999999995],[-95.756957999999997,72.892487000000131]],[[-95.733886999999982,73.128860000000032],[-95.718062999999972,73.118042000000059],[-95.715835999999911,73.11192299999999],[-95.71556099999998,73.105545000000063],[-95.717772999999966,73.10026600000009],[-95.726395000000025,73.088881999999955],[-95.729171999999949,73.071105999999986],[-95.724715999999944,73.059142999999949],[-95.728332999999907,73.054428000000144],[-95.745543999999938,73.049423000000047],[-95.775283999999999,73.05525200000011],[-95.787216000000001,73.061920000000043],[-95.799437999999952,73.072769000000108],[-95.822509999999966,73.083054000000061],[-95.859726000000023,73.090820000000122],[-95.893341000000021,73.095824999999991],[-95.893065999999976,73.100815000000011],[-95.891112999999962,73.101089000000115],[-95.885009999999909,73.104706000000078],[-95.881942999999978,73.108597000000145],[-95.874709999999993,73.114150999999993],[-95.865279999999927,73.119979999999998],[-95.863051999999982,73.125259000000142],[-95.865279999999927,73.131363000000022],[-95.868332000000009,73.136383000000023],[-95.868880999999988,73.140548999999965],[-95.854995999999971,73.140548999999965],[-95.840835999999967,73.136658000000068],[-95.828888000000006,73.129974000000004],[-95.822509999999966,73.124695000000031],[-95.818343999999968,73.125533999999959],[-95.814163000000008,73.131087999999977],[-95.807495000000017,73.135544000000095],[-95.790833000000021,73.139434999999992],[-95.776397999999915,73.140548999999965],[-95.763335999999981,73.139709000000096],[-95.74499499999996,73.136658000000068],[-95.738892000000021,73.133880999999974],[-95.733886999999982,73.128860000000032]],[[-96.808333999999945,72.926376000000118],[-96.915282999999931,72.917755000000056],[-96.955275999999969,72.920531999999923],[-96.968338000000017,72.923874000000069],[-96.990554999999972,72.931090999999981],[-97.017776000000026,72.940536000000066],[-97.032227000000034,72.946640000000059],[-97.061385999999914,72.963318000000129],[-97.089721999999995,72.981658999999979],[-97.105834999999956,72.99832200000003],[-97.111938000000009,73.004714999999976],[-97.136947999999961,73.045822000000044],[-97.139724999999885,73.051926000000037],[-97.141953000000001,73.064148000000046],[-97.142775999999969,73.075272000000098],[-97.141112999999962,73.085541000000148],[-97.127776999999924,73.095824999999991],[-97.069732999999985,73.136932000000002],[-97.059432999999956,73.142212000000029],[-97.045546999999999,73.147491000000059],[-97.003341999999975,73.159714000000065],[-96.946944999999971,73.172484999999995],[-96.904449,73.179977000000122],[-96.848052999999993,73.187484999999981],[-96.809433000000013,73.189148000000102],[-96.786391999999978,73.18803400000013],[-96.771941999999967,73.181655999999975],[-96.755279999999971,73.175812000000121],[-96.653060999999923,73.136383000000023],[-96.602218999999934,73.099152000000117],[-96.580841000000021,73.081100000000049],[-96.575011999999901,73.074997000000053],[-96.568619000000012,73.062195000000088],[-96.565826000000015,73.056091000000038],[-96.564712999999983,73.050537000000077],[-96.565552000000025,73.044708000000014],[-96.573623999999995,73.033325000000048],[-96.636672999999973,72.965820000000065],[-96.643341000000021,72.96138000000002],[-96.65834000000001,72.954163000000108],[-96.697219999999959,72.941650000000038],[-96.743057000000022,72.933593999999971],[-96.765014999999948,72.930817000000047],[-96.808333999999945,72.926376000000118]],[[-96.90583799999996,73.220825000000048],[-96.924712999999997,73.218048000000124],[-96.944991999999957,73.218322999999941],[-96.984725999999966,73.220535000000041],[-97.040833000000021,73.228591999999992],[-97.079177999999956,73.235259999999982],[-97.106948999999929,73.242203000000131],[-97.117767000000015,73.249145999999939],[-97.115279999999927,73.253052000000025],[-97.090285999999878,73.261932000000058],[-97.058043999999995,73.269150000000081],[-97.035004000000015,73.272766000000104],[-96.977492999999981,73.273880000000077],[-96.967772999999966,73.273315000000082],[-96.968338000000017,73.267487000000131],[-96.951400999999976,73.239426000000037],[-96.909164000000033,73.238312000000064],[-96.896118000000001,73.237762000000032],[-96.886672999999917,73.231094000000041],[-96.889174999999966,73.224991000000102],[-96.90583799999996,73.220825000000048]],[[-113.99749799999995,72.799423000000104],[-114.01112399999994,72.79664600000001],[-114.06806899999998,72.795822000000044],[-114.15167200000002,72.798035000000027],[-114.20861799999994,72.796936000000073],[-114.22416699999997,72.794983000000116],[-114.23581699999994,72.791655999999989],[-114.35138699999993,72.747482000000048],[-114.35749800000002,72.74136400000009],[-114.35637700000001,72.735809000000017],[-114.33444199999997,72.693588000000034],[-114.327789,72.688873000000001],[-114.36582900000002,72.66276600000009],[-114.45168299999995,72.623032000000023],[-114.46501199999994,72.6202550000001],[-114.49553699999996,72.616379000000052],[-114.53138699999988,72.614990000000034],[-114.576683,72.60914600000001],[-114.58999599999993,72.606368999999916],[-114.60472099999998,72.60165400000011],[-114.55832700000002,72.560806000000014],[-114.42666600000001,72.556090999999981],[-114.38527699999986,72.555251999999996],[-114.35138699999993,72.557479999999941],[-114.33999599999999,72.560806000000014],[-114.33029199999999,72.565262000000075],[-114.32584400000002,72.571930000000066],[-114.12805200000003,72.626083000000051],[-114.10305800000003,72.632202000000063],[-114.06276699999995,72.640274000000034],[-113.99027999999998,72.651382000000012],[-113.91027800000001,72.659148999999957],[-113.89306599999998,72.660262999999986],[-113.88333099999988,72.657486000000063],[-113.89046499999995,72.648048000000017],[-113.89222699999999,72.640822999999955],[-113.88054699999992,72.637207000000103],[-113.858047,72.635817999999915],[-113.80666399999996,72.639160000000061],[-113.76222199999995,72.646103000000039],[-113.70834400000001,72.656937000000084],[-113.67138699999992,72.666656000000103],[-113.61277799999988,72.683868000000132],[-113.58750899999995,72.689971999999955],[-113.54666099999997,72.698029000000133],[-113.51611300000002,72.701934999999992],[-113.50611900000001,72.699141999999995],[-113.52084400000001,72.688034000000016],[-113.55055199999987,72.675262000000032],[-113.57250999999991,72.667480000000069],[-113.61945299999996,72.653594999999996],[-113.64277599999991,72.646652000000017],[-113.68776699999995,72.631927000000019],[-113.70944199999991,72.624145999999996],[-113.72917200000001,72.615540000000067],[-113.73082699999998,72.609421000000054],[-113.72193900000002,72.60554499999995],[-113.69972200000001,72.604155999999989],[-113.68443299999996,72.606094000000098],[-113.65750100000002,72.611374000000012],[-113.46639999999996,72.665268000000026],[-113.44275700000003,72.672211000000004],[-113.43639400000001,72.67804000000001],[-113.43167099999999,72.684708000000001],[-113.41000399999996,72.729431000000034],[-113.41332999999992,72.734711000000118],[-113.41972399999997,72.739150999999936],[-113.43138099999999,72.742751999999996],[-113.44860799999992,72.744979999999998],[-113.53527799999995,72.748871000000065],[-113.58029199999987,72.751663000000121],[-113.59750399999996,72.754166000000112],[-113.60637699999995,72.758331000000112],[-113.60804699999994,72.769439999999975],[-113.59889199999998,72.782760999999937],[-113.58249699999999,72.793045000000006],[-113.38694800000002,72.907486000000006],[-113.33139,72.935257000000092],[-113.30277999999998,72.948868000000061],[-113.26862299999999,72.960266000000047],[-113.14862099999999,72.994705000000067],[-113.06276699999989,73.00749200000007],[-113.02806099999998,73.009430000000009],[-113.00695799999994,73.008881000000088],[-112.823059,72.998871000000008],[-112.81139400000001,72.9952550000001],[-112.79472399999997,72.982208000000071],[-112.78582799999998,72.978317000000004],[-112.77139299999993,72.975266000000033],[-112.75418100000002,72.972763000000043],[-112.708618,72.969711000000132],[-112.64362299999993,72.966934000000037],[-112.60082999999986,72.963607999999965],[-112.56360599999994,72.959152000000074],[-112.51500699999991,72.951096000000007],[-112.5,72.947922000000119],[-112.47165699999994,72.941925000000026],[-112.44583099999994,72.935257000000092],[-112.41388699999993,72.924149000000057],[-112.387787,72.911102000000028],[-112.37638900000002,72.907760999999994],[-112.36193800000001,72.904709000000082],[-112.34472700000003,72.902205999999921],[-112.27944899999994,72.896941999999967],[-112.23777799999999,72.895537999999988],[-112.14195299999994,72.896378000000027],[-112.09834299999989,72.894150000000025],[-112.06166099999996,72.889434999999992],[-111.94776899999999,72.870529000000147],[-111.78333299999997,72.834717000000012],[-111.67582699999997,72.814697000000024],[-111.65888999999999,72.8119200000001],[-111.59416199999998,72.806641000000127],[-111.54055799999998,72.799423000000104],[-111.52639799999997,72.796371000000022],[-111.23693799999995,72.726379000000122],[-111.22582999999997,72.7227630000001],[-111.22000100000002,72.718323000000055],[-111.20249899999999,72.67053199999998],[-111.20527599999997,72.664429000000041],[-111.26278699999995,72.579163000000108],[-111.27694699999989,72.567490000000078],[-111.45221699999996,72.477768000000026],[-111.52778599999999,72.44999700000011],[-111.65110800000002,72.40887500000008],[-111.675003,72.402206000000035],[-111.736107,72.395264000000111],[-111.76999699999993,72.393600000000106],[-111.78527799999995,72.391936999999984],[-111.81220999999999,72.386658000000011],[-111.859734,72.373306000000014],[-111.890289,72.360535000000084],[-111.89890299999996,72.355545000000006],[-111.90556299999997,72.349716000000001],[-111.90167200000002,72.346099999999979],[-111.86250299999995,72.330551000000071],[-111.85138699999999,72.326934999999992],[-111.66388699999999,72.276382000000012],[-111.50446299999999,72.311920000000043],[-111.44499200000001,72.328873000000101],[-111.42443799999995,72.337204000000042],[-111.41915899999998,72.343871999999976],[-111.43305999999995,72.346939000000077],[-111.45140100000003,72.346939000000077],[-111.487213,72.336655000000064],[-111.51944700000001,72.334152000000074],[-111.5616609999999,72.336655000000064],[-111.578056,72.339156999999943],[-111.58917200000002,72.342758000000003],[-111.60582699999998,72.350815000000011],[-111.61165599999998,72.361099000000024],[-111.609444,72.367203000000075],[-111.58833299999998,72.376373000000115],[-111.37444299999993,72.446640000000002],[-111.350281,72.453322999999955],[-111.3094329999999,72.460815000000082],[-111.29387700000001,72.462768999999923],[-111.26583899999997,72.465546000000018],[-111.24889400000001,72.466385000000002],[-111.22860699999995,72.465546000000018],[-111.20249899999999,72.46026599999999],[-111.21333300000003,72.446930000000009],[-111.23277299999995,72.4369200000001],[-111.24500299999994,72.433594000000085],[-111.27223200000003,72.428588999999988],[-111.30139200000002,72.404160000000047],[-111.27749599999993,72.369979999999941],[-111.11277799999993,72.335266000000104],[-111.09528399999994,72.379700000000014],[-111.09137699999997,72.401932000000102],[-111.00446299999999,72.46527100000003],[-110.8691639999999,72.473312000000078],[-110.82444799999996,72.479156000000103],[-110.80304699999999,72.485259999999926],[-110.82501200000002,72.503875999999934],[-110.83332799999999,72.519150000000025],[-110.827789,72.525818000000015],[-110.73805199999993,72.565536000000009],[-110.72749299999998,72.569716999999912],[-110.71528599999999,72.573044000000039],[-110.70140100000003,72.575546000000145],[-110.68083199999995,72.574706999999989],[-110.66610700000001,72.573044000000039],[-110.53527799999995,72.546646000000067],[-110.52639799999992,72.526931999999988],[-110.57501199999996,72.51388500000013],[-110.59445199999993,72.50471500000009],[-110.60166899999996,72.498871000000065],[-110.60193600000002,72.493317000000104],[-110.59361299999989,72.489150999999993],[-110.55249000000003,72.47387700000013],[-110.53083800000002,72.46665999999999],[-110.35056299999997,72.428040000000067],[-110.32861299999996,72.426086000000055],[-110.30999799999995,72.426086000000055],[-110.30387899999999,72.430542000000116],[-110.31194299999993,72.434708000000057],[-110.41027799999995,72.462204000000099],[-110.50334199999998,72.484985000000108],[-110.514183,72.488585999999998],[-110.52250700000002,72.492752000000053],[-110.52778599999999,72.497482000000105],[-110.53056299999992,72.502486999999974],[-110.52333099999998,72.508330999999998],[-110.39639299999999,72.552200000000084],[-110.38417099999998,72.555542000000003],[-110.36527999999998,72.555542000000003],[-110.34333800000002,72.55386400000009],[-110.32389799999993,72.551650999999936],[-110.31304899999998,72.547760000000039],[-110.22028399999994,72.51388500000013],[-110.20140100000003,72.505829000000062],[-110.15527299999997,72.480270000000075],[-110.06139399999995,72.437484999999924],[-110.05055199999993,72.433868000000018],[-110.03999299999998,72.438034000000073],[-110.02194199999991,72.447754000000145],[-109.99889400000001,72.455261000000121],[-109.97112300000003,72.46026599999999],[-109.95249899999999,72.459991000000116],[-109.91972399999986,72.454711999999972],[-109.81388900000002,72.428314],[-109.79666099999992,72.426926000000094],[-109.78278399999999,72.429428000000144],[-109.77806099999998,72.434708000000057],[-109.78582799999992,72.438873000000058],[-109.80583199999995,72.445526000000029],[-109.83029199999999,72.452208999999982],[-110.04250300000001,72.50471500000009],[-110.22305299999999,72.545822000000101],[-110.23665599999998,72.548874000000069],[-110.24777199999994,72.552765000000136],[-110.25583599999987,72.55693100000002],[-110.252792,72.56303400000013],[-110.24221799999992,72.566940000000045],[-110.22165699999994,72.566086000000041],[-110.12082699999996,72.560257000000036],[-110.10417200000001,72.557754999999986],[-110.09056099999998,72.55442800000003],[-110.06889299999995,72.546936000000073],[-110.03888699999987,72.535538000000088],[-110.02278099999995,72.527206000000092],[-110.00361599999991,72.519440000000031],[-109.97112300000003,72.508330999999998],[-109.90499899999998,72.487198000000092],[-109.88861099999986,72.484711000000004],[-109.80943300000001,72.491653000000099],[-109.79527300000001,72.49414100000007],[-109.78472899999997,72.498322000000144],[-109.78278399999999,72.503051999999968],[-109.94275700000003,72.604155999999989],[-109.95889299999993,72.612762000000089],[-110.09306300000003,72.65637200000009],[-110.11332699999997,72.657211000000018],[-110.17111199999999,72.648330999999985],[-110.18666100000002,72.646652000000017],[-110.22112299999998,72.645264000000054],[-110.241669,72.646103000000039],[-110.25556899999998,72.649429000000055],[-110.26666299999999,72.653046000000018],[-110.283073,72.66137700000013],[-110.28832999999992,72.666091999999992],[-110.29110700000001,72.671097000000032],[-110.20973200000003,72.71775800000006],[-110.20056199999999,72.7227630000001],[-110.18831599999999,72.726089000000115],[-110.17083699999995,72.726928999999984],[-110.078079,72.727065999999979],[-110.04167200000001,72.722488000000055],[-110.03056300000003,72.718596999999988],[-109.99804699999999,72.701934999999992],[-109.98693800000001,72.698318000000029],[-109.85221899999993,72.665817000000118],[-109.83277899999996,72.663315000000068],[-109.81723,72.664992999999981],[-109.77084399999995,72.716385000000116],[-109.77027900000002,72.722214000000122],[-109.78138699999994,72.725815000000011],[-109.80082700000003,72.728043000000127],[-109.81973299999993,72.728043000000127],[-110.03111299999995,72.747757000000036],[-110.17887899999994,72.769149999999968],[-110.17138699999998,72.774993999999992],[-110.16832699999986,72.781097000000102],[-110.17083699999995,72.786101999999971],[-110.17639199999996,72.790817000000004],[-110.21166999999997,72.818328999999949],[-110.24526999999995,72.823607999999979],[-110.32640099999992,72.826385000000016],[-110.36638599999998,72.827208999999982],[-110.47666899999996,72.834990999999945],[-110.493607,72.83776899999998],[-110.53555299999994,72.847214000000008],[-110.54666099999997,72.850815000000068],[-110.56331599999999,72.859145999999953],[-110.74276699999996,72.957214000000135],[-110.75389099999995,72.966385000000059],[-110.75666799999993,72.971374999999966],[-110.75389099999995,72.977768000000083],[-110.74804699999993,72.984421000000054],[-110.74082900000002,72.989975000000072],[-110.73166700000002,72.994980000000112],[-110.70834400000001,73.002487000000031],[-110.69415300000003,73.004990000000021],[-110.67832899999991,73.006653000000142],[-110.61860699999994,73.011383000000137],[-110.51139799999993,73.015274000000034],[-110.432503,73.014435000000105],[-110.39083899999997,73.012496999999939],[-110.16610700000001,72.996094000000085],[-110.05110199999996,72.984711000000061],[-109.91887700000001,72.96804800000001],[-109.65943899999996,72.924988000000042],[-109.63445299999995,72.918045000000063],[-109.61805700000002,72.909424000000115],[-109.618607,72.903869999999927],[-109.62943999999993,72.899719000000061],[-109.66111799999999,72.896652000000131],[-109.69471699999997,72.894440000000088],[-109.724716,72.890549000000021],[-109.73889200000002,72.888046000000031],[-109.75,72.883881000000031],[-109.75472999999994,72.878585999999984],[-109.74665799999997,72.874420000000043],[-109.65862300000003,72.844711000000018],[-109.379707,72.770538000000101],[-109.22778299999993,72.761658000000068],[-109.05110200000001,72.680267000000072],[-109.02999899999998,72.647217000000012],[-109.04915599999993,72.604155999999989],[-109.045547,72.572495000000117],[-109.04332699999998,72.567490000000078],[-109.02861000000001,72.565536000000009],[-108.88249200000001,72.564423000000147],[-108.86527999999998,72.564987000000087],[-108.85109699999998,72.567490000000078],[-108.84194899999994,72.572495000000117],[-108.81916799999993,72.591095000000053],[-108.72277800000001,72.582763999999941],[-108.70361300000002,72.58027600000014],[-108.67666600000001,72.573883000000023],[-108.64472999999987,72.562485000000038],[-108.62138399999998,72.549988000000042],[-108.61638599999998,72.54525799999999],[-108.58805799999993,72.505554000000075],[-108.58944700000001,72.494431000000077],[-108.59638999999993,72.482208000000014],[-108.60278299999999,72.475540000000024],[-108.61054999999993,72.469986000000063],[-108.62470999999994,72.457489000000066],[-108.63722200000001,72.444427000000019],[-108.64499699999993,72.426651000000049],[-108.65055799999999,72.403595000000053],[-108.66361999999998,72.362761999999975],[-108.66278099999994,72.346374999999966],[-108.65834000000001,72.336105000000032],[-108.52416999999997,72.199706999999989],[-108.45500199999998,72.157211000000132],[-108.44415300000003,72.161102000000028],[-108.42832900000002,72.158325000000104],[-108.41805999999997,72.154434000000037],[-108.404449,72.14694199999991],[-108.40222199999994,72.141663000000108],[-108.39890300000002,72.113602000000071],[-108.39472999999998,72.042755000000113],[-108.39527900000002,72.036926000000108],[-108.396118,72.03137200000009],[-108.31639099999995,71.984146000000067],[-108.20417799999996,71.963882000000126],[-108.19138299999992,71.960541000000092],[-108.18666100000002,71.955826000000059],[-108.18276999999995,71.945525999999916],[-108.18971299999998,71.933318999999983],[-108.19611399999997,71.92692599999998],[-108.23361199999999,71.899719000000061],[-108.28639199999992,71.860809000000131],[-108.28278399999999,71.792206000000022],[-108.28083800000002,71.786925999999994],[-108.24276700000001,71.718597000000045],[-108.23805199999998,71.713882000000012],[-108.23082699999992,71.709426999999948],[-108.22055099999994,71.705826000000116],[-108.20777900000002,71.70248400000014],[-108.19248999999996,71.699707000000046],[-108.17748999999998,71.701096000000064],[-108.14111300000002,71.710541000000148],[-108.13054699999992,71.714432000000045],[-108.10333300000002,71.719147000000078],[-108.08693700000003,71.719711000000018],[-108.066101,71.71775800000006],[-108.03639199999998,71.705826000000116],[-108.02194199999997,71.697204999999997],[-107.98805199999987,71.675537000000077],[-107.97609699999987,71.666381999999999],[-107.96694899999994,71.656936999999971],[-107.96777299999991,71.651382000000069],[-107.91583300000002,71.624984999999981],[-107.84528399999994,71.603867000000093],[-107.82888799999995,71.604431000000034],[-107.75334199999998,71.610260000000039],[-107.74109599999997,71.613312000000121],[-107.73194899999999,71.618042000000003],[-107.72416699999991,71.623871000000008],[-107.72609699999998,71.629149999999981],[-107.74054699999994,71.637496999999939],[-107.75028999999995,71.641373000000044],[-107.77583299999998,71.648041000000035],[-107.82472199999995,71.672759999999982],[-107.83194700000001,71.676926000000037],[-107.83640300000002,71.681656000000089],[-107.83833300000003,71.686920000000043],[-107.83750899999995,71.692474000000061],[-107.82305899999994,71.716934000000094],[-107.81527699999998,71.7227630000001],[-107.80444299999999,71.726653999999996],[-107.78943600000002,71.728043000000014],[-107.7519529999999,71.726653999999996],[-107.73665599999998,71.723602000000085],[-107.63027999999997,71.732208000000014],[-107.49472000000003,71.786377000000016],[-107.451683,71.857483000000059],[-107.36361699999992,71.871917999999994],[-107.34555099999994,71.871643000000006],[-107.29695099999998,71.874145999999939],[-107.28333299999997,71.876373000000001],[-107.27084400000001,71.879424999999969],[-107.26139799999999,71.884155000000135],[-107.25334199999998,71.889708999999982],[-107.25250199999994,71.895537999999988],[-107.25695799999994,71.900269000000094],[-107.264183,71.904434000000094],[-107.41805999999997,71.953873000000101],[-107.59638999999993,72.004439999999988],[-107.61389199999996,72.012496999999996],[-107.62581599999999,72.021652000000017],[-107.63027999999997,72.026382000000069],[-107.65139799999997,72.061096000000134],[-107.65334300000001,72.066375999999991],[-107.64943700000003,72.072495000000004],[-107.63999899999993,72.077208999999982],[-107.62609899999995,72.079437000000098],[-107.61389199999996,72.082764000000054],[-107.61000100000001,72.08859300000006],[-107.61193799999995,72.093872000000033],[-107.63527699999997,72.121917999999937],[-107.68138099999999,72.136108000000036],[-107.699997,72.138596000000007],[-107.729446,72.137207000000046],[-107.74333199999995,72.134994999999947],[-107.76027699999992,72.134430000000123],[-107.77887699999997,72.136658000000068],[-107.78083800000002,72.141937000000041],[-107.787216,72.184708000000114],[-107.77806099999992,72.208038000000045],[-107.843887,72.354156000000046],[-107.87748699999992,72.424423000000104],[-107.88639799999993,72.519713999999965],[-107.87693799999994,72.524428999999998],[-107.87165799999997,72.529709000000082],[-107.87666299999995,72.567215000000033],[-107.88054699999998,72.577484000000084],[-107.88555899999989,72.586655000000007],[-107.91555799999998,72.597214000000065],[-107.92887899999994,72.60054000000008],[-107.99082900000002,72.612487999999985],[-108.00418099999996,72.615814],[-108.01194800000002,72.619980000000112],[-108.025284,72.666091999999992],[-108.02639799999997,72.676926000000037],[-108.02667199999996,72.719986000000006],[-108.05110200000001,72.781372000000147],[-108.05803699999996,72.791092000000049],[-108.11193799999995,72.890823000000125],[-108.15194699999989,72.971100000000092],[-108.16528299999993,73.010817999999972],[-108.26363400000002,73.091934000000094],[-108.29361,73.120254999999986],[-108.29998799999998,73.135544000000095],[-108.295547,73.147491000000059],[-108.291946,73.153595000000053],[-108.28527799999995,73.159987999999998],[-108.26862299999999,73.171371000000022],[-108.23029299999996,73.187484999999981],[-108.18110699999994,73.201660000000061],[-108.16639700000002,73.203873000000044],[-108.13390400000003,73.206940000000145],[-108.11582900000002,73.207489000000066],[-108.07389799999993,73.205261000000121],[-108.02390300000002,73.201096000000121],[-107.93443300000001,73.187484999999981],[-107.91471899999993,73.184981999999991],[-107.89388999999994,73.183868000000018],[-107.87416099999996,73.183594000000085],[-107.86416599999995,73.188583000000051],[-107.87222300000002,73.192748999999935],[-107.90471600000001,73.204163000000051],[-107.94611399999991,73.214157000000057],[-108.01027699999997,73.226089000000002],[-108.05166599999995,73.236098999999911],[-108.08444199999997,73.247482000000105],[-108.11638599999992,73.264435000000049],[-108.15361000000001,73.302475000000129],[-108.08444199999997,73.349990999999989],[-108.07140399999992,73.353317000000061],[-108.05332899999996,73.353867000000093],[-107.99109599999991,73.351379000000122],[-107.94722000000002,73.348328000000095],[-107.77139299999999,73.323883000000023],[-107.675003,73.323318000000029],[-107.63110399999999,73.319991999999957],[-107.614441,73.31721500000009],[-107.40334300000001,73.270537999999988],[-107.33583099999987,73.248031999999967],[-107.24999999999994,73.217484000000013],[-107.21028099999995,73.201660000000061],[-107.18888900000002,73.194138000000123],[-107.172234,73.191086000000041],[-107.10582699999998,73.17942800000003],[-107.06973299999999,73.173874000000012],[-107.05027799999999,73.173598999999967],[-107.03694200000001,73.176651000000106],[-107.025284,73.180542000000003],[-107.01666299999999,73.186095999999964],[-107.01083399999999,73.191360000000145],[-107.02027899999996,73.200821000000133],[-107.05249000000003,73.212493999999936],[-107.09028599999994,73.223037999999974],[-107.11081699999994,73.231369000000086],[-107.11860699999994,73.23553499999997],[-107.12361099999998,73.240265000000022],[-107.11945300000002,73.246368000000132],[-107.03028899999998,73.29553199999998],[-107.01862299999999,73.299423000000047],[-106.88249199999996,73.312195000000031],[-106.86138899999997,73.310806000000014],[-106.76139799999999,73.293045000000063],[-106.75083899999993,73.289153999999996],[-106.74610899999999,73.284423999999944],[-106.74109599999991,73.268875000000037],[-106.72721899999993,73.254715000000147],[-106.69666299999994,73.237488000000099],[-106.66471899999999,73.226089000000002],[-106.65110800000002,73.222487999999942],[-106.63474300000001,73.219711000000075],[-106.60305800000003,73.216660000000047],[-106.58222999999998,73.21527100000003],[-106.39862099999993,73.149155000000064],[-106.24027999999998,73.085815000000082],[-106.06388899999996,73.047759999999982],[-106.04750100000001,73.044708000000014],[-106.02834300000001,73.044434000000081],[-105.94888300000002,73.053313999999943],[-105.91027799999989,73.058868000000132],[-105.87638899999996,73.058318999999983],[-105.85555999999997,73.056931000000077],[-105.84221600000001,73.053588999999988],[-105.83194699999996,73.049713000000111],[-105.82472200000001,73.045258000000047],[-105.82195299999995,73.034987999999942],[-105.82333399999999,73.029433999999981],[-105.83249699999999,73.017211999999972],[-105.82972699999993,73.006942999999978],[-105.82224299999996,73.002487000000031],[-105.80471799999998,72.994431000000134],[-105.79444899999993,72.990265000000079],[-105.76083399999999,72.976929000000098],[-105.737503,72.969436999999971],[-105.69776899999999,72.959152000000074],[-105.67859599999997,72.95637499999998],[-105.62917299999998,72.939972000000125],[-105.56220999999999,72.913040000000024],[-105.445831,72.838318000000072],[-105.32611099999991,72.746368000000075],[-105.32195299999995,72.741653000000042],[-105.32055700000001,72.736649000000057],[-105.32528699999995,72.730545000000063],[-105.33693700000003,72.726653999999996],[-105.35610999999994,72.727203000000088],[-105.37777699999998,72.729431000000034],[-105.39778100000001,72.737198000000035],[-105.41194200000001,72.745819000000097],[-105.41915899999992,72.750275000000045],[-105.42748999999992,72.759720000000073],[-105.43472300000002,72.764160000000118],[-105.46472199999994,72.775818000000129],[-105.47778299999999,72.779434000000037],[-105.49833699999994,72.780822999999998],[-105.51000999999997,72.776932000000102],[-105.45722999999992,72.702773999999977],[-105.44722000000002,72.698868000000061],[-105.38249200000001,72.681366000000025],[-105.35665899999998,72.674423000000047],[-105.29472399999997,72.631927000000019],[-105.23110999999994,72.543320000000051],[-105.19583099999988,72.482483000000059],[-105.19972199999995,72.460541000000148],[-105.20140100000003,72.454711999999972],[-105.20612299999993,72.448868000000118],[-105.21777299999991,72.444977000000051],[-105.23194899999993,72.447205000000054],[-105.26167299999992,72.458878000000027],[-105.27722199999994,72.462204000000099],[-105.29305999999997,72.460815000000082],[-105.301941,72.455261000000121],[-105.29778299999987,72.450546000000088],[-105.24137899999999,72.399718999999948],[-105.23029299999996,72.390549000000078],[-105.21665999999993,72.381927000000076],[-105.18998699999997,72.369705000000124],[-105.16055299999988,72.35775799999999],[-105.13999899999999,72.344711000000132],[-105.04415899999998,72.248032000000023],[-105.03639199999986,72.238586000000055],[-105.03362299999998,72.234711000000061],[-105.02443700000003,72.219986000000119],[-104.99166899999989,72.203323000000012],[-104.95749699999999,72.181366000000139],[-104.95527599999997,72.171097000000145],[-104.95722999999992,72.165543000000127],[-104.96167000000003,72.159424000000115],[-104.96916199999998,72.153046000000131],[-104.97805799999992,72.147491000000059],[-104.98805199999993,72.142761000000007],[-104.99973299999999,72.13888500000013],[-105.02999899999998,72.124695000000031],[-105.03751399999999,72.118317000000104],[-105.03639199999986,72.11303700000002],[-105.01862299999993,72.066939999999931],[-104.92944299999988,72.034149000000014],[-104.87193299999996,71.989975000000072],[-104.82917800000001,71.937195000000031],[-104.82444800000002,71.927475000000129],[-104.82028200000002,71.906647000000078],[-104.82556199999999,71.889708999999982],[-104.82250999999997,71.874145999999939],[-104.8186189999999,71.86914100000007],[-104.78999299999998,71.84137000000004],[-104.78333299999986,71.836929000000112],[-104.771118,71.833603000000096],[-104.70056199999999,71.829987000000017],[-104.68554699999993,71.826935000000105],[-104.67331699999994,71.823317999999972],[-104.66000400000001,71.81442300000009],[-104.53472899999986,71.719711000000018],[-104.37638900000002,71.598038000000031],[-104.36638600000003,71.588882000000126],[-104.35527000000002,71.574432000000002],[-104.35916099999997,71.563309000000004],[-104.36361699999998,71.557204999999954],[-104.37581599999993,71.544707999999957],[-104.383331,71.538315000000011],[-104.40167200000002,71.514435000000049],[-104.40361000000001,71.508605999999986],[-104.40194700000001,71.498322000000144],[-104.34416199999993,71.410811999999964],[-104.33332799999994,71.396378000000141],[-104.35722399999986,71.357483000000002],[-104.37165799999997,71.360809000000017],[-104.38918299999995,71.363602000000014],[-104.40805099999994,71.364990000000091],[-104.43804899999998,71.362761999999975],[-104.45056199999988,71.359711000000118],[-104.46167000000003,71.355820000000051],[-104.47138999999993,71.351089000000115],[-104.48860199999996,71.339980999999966],[-104.49333200000001,71.334152000000131],[-104.49694799999997,71.322769000000108],[-104.49500299999988,71.312485000000095],[-104.49137899999988,71.307480000000055],[-104.46250900000001,71.281097000000045],[-104.44972200000001,71.272217000000012],[-104.43888900000002,71.257767000000115],[-104.43971299999998,71.246933000000013],[-104.44055200000003,71.236098999999967],[-104.44444299999992,71.224990999999989],[-104.44888300000002,71.218872000000147],[-104.470551,71.199706999999989],[-104.49610899999999,71.183044000000109],[-104.52555799999999,71.168869000000029],[-104.55610699999994,71.155548000000067],[-104.57805599999995,71.148041000000092],[-104.59056099999998,71.145263999999997],[-104.62361099999987,71.133605999999986],[-104.64862099999999,71.11914100000007],[-104.60472099999998,71.079711999999972],[-104.58583099999998,71.066666000000055],[-104.57028199999996,71.05831900000004],[-104.53666699999997,71.044144000000131],[-104.48916600000001,71.024703999999986],[-104.45667300000002,71.013610999999969],[-104.33778399999994,70.979706000000078],[-104.23805199999998,70.964996000000099],[-104.22389199999998,70.961928999999998],[-104.122772,70.914703000000145],[-104.11665299999999,70.910262999999929],[-104.09999099999999,70.891372999999987],[-104.07640099999992,70.863037000000077],[-104.05277999999993,70.834427000000062],[-104.04583699999995,70.824996999999996],[-104.04277000000002,70.804153000000042],[-104.02887699999991,70.784988000000055],[-104.01583900000003,70.770827999999938],[-104.00029000000001,70.757216999999969],[-103.99416400000001,70.75277699999998],[-103.98528299999998,70.748871000000065],[-103.97138999999987,70.745529000000147],[-103.95472699999999,70.742752000000053],[-103.94027699999987,70.741653000000099],[-103.92443800000001,70.741928000000087],[-103.806107,70.723037999999974],[-103.73111,70.691649999999925],[-103.64083899999997,70.646652000000017],[-103.63417099999992,70.637206999999989],[-103.62470999999994,70.628036000000009],[-103.59889199999992,70.615814000000057],[-103.55638099999999,70.600815000000011],[-103.52333099999987,70.59304800000001],[-103.506958,70.590271000000143],[-103.49027999999998,70.587494000000049],[-103.47305299999999,70.586928999999998],[-103.44193999999999,70.587204000000042],[-103.39835399999993,70.590546000000131],[-103.34277299999997,70.59664900000007],[-103.32721699999991,70.59664900000007],[-103.30915799999997,70.595260999999994],[-103.26500699999997,70.581665000000044],[-103.239441,70.569443000000035],[-103.20472699999993,70.548035000000141],[-103.14972699999998,70.513885000000016],[-103.13276699999994,70.505829000000119],[-103.12165800000002,70.501938000000052],[-103.095551,70.498031999999967],[-103.01194799999996,70.492202999999961],[-102.97693600000002,70.489975000000015],[-102.96056399999998,70.489151000000049],[-102.93055699999996,70.490540000000067],[-102.92027299999995,70.494980000000055],[-102.91443599999991,70.500000000000114],[-102.915009,70.505264000000068],[-102.91832699999998,70.510268999999937],[-102.92388900000003,70.514435000000049],[-102.93250299999988,70.518600000000049],[-102.95722999999998,70.525543000000027],[-102.97528099999994,70.527205999999978],[-103.03028899999998,70.534988000000112],[-103.05526700000001,70.541931000000091],[-103.09973099999991,70.55664100000007],[-103.10833700000001,70.56053199999991],[-103.12609899999995,70.57388300000008],[-103.13999899999993,70.609421000000111],[-103.15556300000003,70.654984000000013],[-103.156113,70.659987999999998],[-103.15387699999997,70.665817000000004],[-103.14916999999991,70.67164600000001],[-103.13667299999992,70.674423000000104],[-103.12110899999999,70.674698000000092],[-103.10417200000001,70.673873999999955],[-103.08583099999998,70.672484999999995],[-103.06667299999998,70.669983000000059],[-103.0250089999999,70.660262999999986],[-103.00250199999999,70.652771000000087],[-102.85665899999992,70.597763000000043],[-102.84834299999994,70.593871999999976],[-102.84528399999999,70.588882000000126],[-102.83833300000003,70.574158000000068],[-102.83583099999998,70.548035000000141],[-102.74445300000002,70.494705000000067],[-102.61501299999992,70.460541000000035],[-102.60138699999999,70.457214000000079],[-102.52027899999996,70.438309000000118],[-102.45749699999988,70.426376000000118],[-102.40862299999998,70.417479999999955],[-102.33332799999999,70.397766000000047],[-102.281387,70.384155000000078],[-102.11749299999997,70.339432000000045],[-101.99610899999988,70.287201000000096],[-101.97972099999998,70.279160000000047],[-101.92555199999998,70.260544000000039],[-101.89334099999996,70.254439999999988],[-101.87666300000001,70.25360100000006],[-101.86138899999997,70.253876000000048],[-101.84916699999985,70.256653000000142],[-101.83805799999993,70.260268999999994],[-101.828056,70.264709000000039],[-101.82195299999995,70.269714000000079],[-101.81722999999988,70.281097000000102],[-101.81749699999995,70.286102000000142],[-101.80972300000002,70.297759999999982],[-101.79972800000002,70.302199999999971],[-101.71472199999999,70.308868000000132],[-101.69803599999995,70.308029000000033],[-101.68195300000002,70.304977000000065],[-101.59944200000001,70.275818000000129],[-101.58860800000002,70.271927000000062],[-101.58029199999993,70.267761000000121],[-101.58029199999993,70.262771999999984],[-101.58556399999998,70.256653000000142],[-101.60555999999997,70.247757000000036],[-101.63417099999998,70.233047000000056],[-101.64306599999998,70.227768000000083],[-101.65083300000003,70.221374999999966],[-101.65055799999993,70.210815000000025],[-101.64222699999993,70.196365000000071],[-101.62249799999995,70.162491000000045],[-101.61416599999995,70.153046000000018],[-101.55999800000001,70.113602000000071],[-101.55194099999994,70.109420999999998],[-101.53971899999999,70.106934000000138],[-101.52667200000002,70.108597000000032],[-101.39723200000003,70.139435000000049],[-101.39222699999999,70.150543000000027],[-101.37581599999999,70.177765000000136],[-101.358047,70.176086000000112],[-101.28666699999991,70.152480999999966],[-101.265289,70.14498900000001],[-101.25723299999999,70.140823000000125],[-101.25195300000001,70.13638300000008],[-101.23889200000002,70.133040999999992],[-101.22222899999991,70.131927000000019],[-101.14499699999999,70.15525800000006],[-101.13500999999997,70.159713999999951],[-101.12721299999998,70.166092000000106],[-101.12193300000001,70.171921000000111],[-101.11665299999993,70.183044000000109],[-101.12193300000001,70.192749000000049],[-101.11193800000001,70.19720500000011],[-101.09555099999994,70.196365000000071],[-101.03971899999999,70.183044000000109],[-100.99973299999999,70.172760000000096],[-100.98388699999992,70.164703000000145],[-100.97332799999998,70.155548000000067],[-100.97332799999998,70.145264000000054],[-100.97609699999992,70.134430000000009],[-100.96028099999995,70.053040000000067],[-100.92194399999988,69.965271000000143],[-100.88694800000002,69.884155000000021],[-100.870003,69.814423000000147],[-100.870003,69.788315000000011],[-100.87805200000003,69.771652000000131],[-100.89998600000001,69.753875999999991],[-100.92555199999998,69.721100000000035],[-100.92027300000001,69.711380000000133],[-100.92027300000001,69.701096000000121],[-100.92832899999996,69.684143000000006],[-100.93859900000001,69.672484999999995],[-100.94748699999997,69.666930999999977],[-100.95722999999992,69.662490999999989],[-100.96916199999998,69.659714000000065],[-101.06443799999994,69.648604999999975],[-101.28362300000003,69.663879000000065],[-101.31777999999991,69.667480000000126],[-101.32972699999988,69.669983000000116],[-101.34028599999999,69.678864000000033],[-101.43831599999993,69.769714000000022],[-101.45472699999993,69.798874000000069],[-101.46806299999997,69.823044000000095],[-101.47332799999998,69.832763999999997],[-101.468613,69.838882000000069],[-101.458618,69.843322999999998],[-101.43998699999997,69.853317000000004],[-101.43472300000002,69.859146000000067],[-101.41610700000001,69.886932000000115],[-101.41860999999989,69.891936999999984],[-101.42944299999994,69.906097000000045],[-101.44526699999994,69.909149000000014],[-101.45638999999994,69.905548000000124],[-101.46888699999994,69.893051000000128],[-101.47917199999995,69.881362999999908],[-101.51972999999992,69.828323000000069],[-101.53999299999998,69.79942299999999],[-101.54750100000001,69.78776600000009],[-101.55972299999996,69.764998999999989],[-101.56220999999999,69.754165999999998],[-101.56194299999999,69.74914600000011],[-101.564438,69.743317000000104],[-101.569458,69.737488000000099],[-101.60777300000001,69.705825999999945],[-101.65249599999999,69.6827550000001],[-101.69193999999999,69.680267000000129],[-101.69722000000002,69.684708000000057],[-101.75805699999995,69.717758000000117],[-101.76611300000002,69.721924000000001],[-101.77916700000003,69.725266000000147],[-101.85637700000001,69.743042000000116],[-101.87000299999994,69.74414100000007],[-101.88722200000001,69.733321999999987],[-101.89916999999997,69.73054500000012],[-101.91416900000002,69.73054500000012],[-101.92999299999997,69.733597000000032],[-101.94055200000003,69.737198000000092],[-101.94860799999998,69.741363999999976],[-101.962784,69.753052000000025],[-102.02306399999992,69.817764000000011],[-102.06555199999997,69.850540000000137],[-102.20667300000002,69.91304000000008],[-102.21749899999998,69.916930999999977],[-102.23029300000002,69.917205999999965],[-102.24082900000002,69.913315000000068],[-102.37581599999999,69.809418000000107],[-102.51027699999992,69.758040999999992],[-102.57640100000003,69.737488000000099],[-102.59249899999998,69.738312000000064],[-102.60582699999998,69.741653000000099],[-102.61638600000003,69.745255000000043],[-102.64890300000002,69.761658000000125],[-102.65972899999997,69.765273999999977],[-102.673317,69.76638800000012],[-102.68055700000002,69.759995000000004],[-102.67443800000001,69.750275000000101],[-102.65805099999994,69.736923000000047],[-102.60028099999994,69.69802900000002],[-102.59221600000001,69.693862999999908],[-102.57640100000003,69.691086000000041],[-102.55943299999996,69.68942300000009],[-102.53138699999994,69.691360000000145],[-102.52084400000001,69.695251000000042],[-102.50917099999998,69.69802900000002],[-102.49194299999994,69.696365000000014],[-102.48361199999988,69.692200000000014],[-102.47805800000003,69.682480000000112],[-102.49777199999988,69.595260999999994],[-102.50778199999996,69.564147999999989],[-102.51500699999985,69.559982000000105],[-102.525284,69.556366000000025],[-102.60305800000003,69.538315000000068],[-102.81304899999986,69.529709000000139],[-102.82861300000002,69.53276100000005],[-102.94387799999993,69.559417999999994],[-103.08528099999995,69.597214000000122],[-103.18666099999996,69.629425000000026],[-103.20556599999998,69.636932000000002],[-103.22471599999994,69.644714000000135],[-103.23277300000001,69.648604999999975],[-103.260559,69.665543000000071],[-103.27166699999998,69.674423000000104],[-103.32195300000001,69.692200000000014],[-103.41639699999996,69.706375000000094],[-103.43055699999996,69.705261000000121],[-103.47693600000002,69.693588000000091],[-103.48665599999998,69.684708000000057],[-103.50723299999999,69.617751999999996],[-103.5041809999999,69.613036999999963],[-103.33528100000001,69.574997000000053],[-103.08917200000002,69.521927000000005],[-103.07528699999995,69.523041000000148],[-103.05695300000002,69.520537999999988],[-103.04638699999998,69.516936999999984],[-103.03806299999997,69.512771999999984],[-103.03278399999999,69.508331000000055],[-103.02333099999998,69.493866000000082],[-103.01390099999998,69.474152000000004],[-102.99137899999999,69.424698000000035],[-102.99082899999996,69.419434000000024],[-103.00778199999996,69.326935000000049],[-103.01917300000002,69.282761000000107],[-103.02306399999998,69.271652000000017],[-103.04444899999999,69.252487000000087],[-103.07195299999995,69.238586000000112],[-103.11332700000003,69.223602000000028],[-103.12444299999999,69.220825000000104],[-103.16000399999996,69.213042999999971],[-103.17250099999995,69.211380000000077],[-103.19415299999997,69.204712000000086],[-103.204453,69.200821000000019],[-103.21140299999996,69.194427000000132],[-103.21444700000001,69.189697000000137],[-103.21777299999997,69.137207000000103],[-103.208618,69.122756999999979],[-103.20305599999989,69.11831699999999],[-103.19499199999996,69.114426000000094],[-103.18222000000003,69.111098999999967],[-103.141953,69.15776100000005],[-103.13390400000003,69.163315000000068],[-103.12444299999999,69.167755000000056],[-103.10500300000001,69.176085999999998],[-103.07417299999997,69.187485000000038],[-103.03721599999994,69.205826000000059],[-103.021118,69.216934000000037],[-103.00611900000001,69.228592000000106],[-102.99889399999989,69.234985000000052],[-102.98082699999992,69.259155000000078],[-102.96916199999993,69.271378000000084],[-102.95056199999999,69.290268000000083],[-102.94360399999999,69.29664600000001],[-102.87249799999995,69.360535000000141],[-102.84084299999995,69.383330999999998],[-102.829453,69.386108000000036],[-102.817497,69.383881000000031],[-102.80666400000001,69.379974000000061],[-102.79360999999994,69.376923000000033],[-102.76083399999993,69.374420000000043],[-102.74694799999997,69.375534000000016],[-102.72277799999995,69.380264000000068],[-102.51083399999999,69.439697000000081],[-102.50862100000001,69.445526000000086],[-102.48972300000003,69.469436999999971],[-102.47193900000002,69.479430999999977],[-102.46028100000001,69.482208000000071],[-102.31304899999998,69.49832200000003],[-102.29804999999999,69.498596000000134],[-102.09306300000003,69.487762000000089],[-102.05750299999988,69.483597000000088],[-102.04750100000001,69.479980000000126],[-101.95527599999997,69.43553200000008],[-101.94748699999997,69.431365999999969],[-101.93694299999999,69.422485000000052],[-101.93138099999999,69.412766000000033],[-101.93110699999994,69.407486000000006],[-101.93611099999998,69.401657],[-102.03527799999995,69.287200999999982],[-102.14890300000002,69.270264000000111],[-102.15943899999996,69.27388000000002],[-102.18776700000001,69.280272999999966],[-102.20140100000003,69.279160000000047],[-102.21278399999994,69.276382000000069],[-102.22972099999993,69.265549000000078],[-102.23194899999999,69.259720000000073],[-102.21721600000001,69.225266000000033],[-102.11972000000003,69.183043999999938],[-102.10665899999992,69.179703000000131],[-102.09361299999989,69.178588999999931],[-102.08112299999993,69.180267000000072],[-102.07167099999992,69.184982000000105],[-102.06416300000001,69.191360000000032],[-102.05943299999996,69.19720499999994],[-102.05721999999992,69.202773999999977],[-102.05750299999988,69.208038000000101],[-102.05444299999999,69.214431999999988],[-102.04499800000002,69.226089000000115],[-102.03666699999997,69.231658999999979],[-102.01666299999999,69.239975000000072],[-102.00611899999996,69.243590999999981],[-101.96305799999999,69.257216999999912],[-101.95140099999998,69.259995000000117],[-101.9385989999999,69.261931999999945],[-101.92194399999994,69.260269000000051],[-101.78500399999996,69.196365000000071],[-101.77055399999995,69.189147999999989],[-101.75472999999994,69.175812000000064],[-101.75195300000001,69.165543000000014],[-101.75167799999991,69.160537999999974],[-101.75389099999995,69.149719000000061],[-101.80638099999999,69.003876000000105],[-101.80860899999993,68.99803199999991],[-101.81806899999992,68.993591000000038],[-101.85138699999993,68.984420999999941],[-101.89916999999997,68.97526600000009],[-101.94888300000002,68.96775800000006],[-101.962784,68.96665999999999],[-101.97693600000002,68.96665999999999],[-101.993607,68.968323000000112],[-102.00140399999992,68.972488000000112],[-102.02223200000003,68.990265000000136],[-102.03250100000002,68.99414100000007],[-102.04778299999998,68.996933000000126],[-102.06220999999994,68.996933000000126],[-102.09665699999994,68.988585999999941],[-102.11305199999998,68.977767999999969],[-102.12609900000001,68.966385000000002],[-102.13082900000001,68.960265999999933],[-102.14502699999997,68.94766199999998],[-102.15638699999994,68.944702000000063],[-102.16972399999997,68.946091000000024],[-102.323624,68.937195000000088],[-102.38612399999994,68.925537000000077],[-102.38583399999993,68.920258000000103],[-102.39028899999994,68.914429000000098],[-102.39835399999987,68.90887500000008],[-102.48554999999999,68.871368000000018],[-102.53582799999998,68.864425999999924],[-102.58972199999999,68.860535000000084],[-102.60417200000001,68.860260000000039],[-102.61972000000003,68.861099000000024],[-102.63500999999991,68.863876000000118],[-102.64527900000002,68.867751999999996],[-102.76306199999999,68.877762000000075],[-102.81889299999995,68.834152000000074],[-102.89472999999992,68.799988000000042],[-102.99054699999999,68.794434000000081],[-103.00583599999999,68.795258000000047],[-103.047234,68.809707999999944],[-103.146118,68.840546000000131],[-103.16416899999996,68.84304800000001],[-103.19499199999996,68.844437000000028],[-103.208618,68.843596999999988],[-103.32084699999996,68.829712000000086],[-103.34111000000001,68.822220000000129],[-103.36000099999995,68.813872999999944],[-103.36805700000002,68.808318999999983],[-103.40306099999992,68.777205999999978],[-103.50917099999987,68.801375999999948],[-103.83583099999993,68.83638000000002],[-104.09472699999992,68.856644000000017],[-104.11028299999998,68.859421000000054],[-104.13834399999996,68.865540000000124],[-104.287781,68.901932000000102],[-104.40249599999999,68.931091000000094],[-104.43083199999995,68.9369200000001],[-104.445267,68.938873000000001],[-104.45749699999999,68.936645999999996],[-104.46167000000003,68.930542000000116],[-104.46305799999988,68.924987999999928],[-104.46250900000001,68.919708000000071],[-104.47444199999995,68.901657000000057],[-104.487503,68.888885000000073],[-104.50279199999989,68.877762000000075],[-104.51167299999992,68.873032000000023],[-104.52139299999999,68.869140999999956],[-104.54360999999989,68.863311999999951],[-104.583618,68.859711000000118],[-104.84999099999993,68.870254999999986],[-105.12917299999998,68.896378000000084],[-105.14472999999992,68.899155000000007],[-105.16610699999995,68.906097000000102],[-105.19332900000001,68.917480000000126],[-105.24889399999989,68.945526000000029],[-105.18305999999995,68.988312000000008],[-105.173317,68.991928000000087],[-105.14666699999998,68.992477000000008],[-105.128601,68.989975000000129],[-105.06471299999998,68.986923000000047],[-105.03916900000002,68.990265000000136],[-104.93639400000001,69.03054800000001],[-104.92887899999999,69.036102000000028],[-104.91610700000001,69.048874000000012],[-104.91166699999991,69.065811000000053],[-104.915009,69.070541000000048],[-104.92304999999999,69.074706999999989],[-104.93388399999998,69.078323000000012],[-105.06500199999999,69.104155999999989],[-105.08332799999999,69.106369000000086],[-105.09665699999999,69.105255000000113],[-105.122772,69.091095000000053],[-105.16027799999995,69.071930000000066],[-105.47361799999999,69.106934000000138],[-105.48055999999997,69.116652999999928],[-105.49249299999991,69.125259000000028],[-105.50695799999994,69.133606000000043],[-105.51528899999994,69.13749700000011],[-105.55387899999999,69.152480999999966],[-105.58056599999998,69.156372000000033],[-105.61694299999994,69.160812000000078],[-105.76806599999998,69.171371000000136],[-105.83029199999999,69.172211000000004],[-105.87416100000002,69.171097000000032],[-105.90222199999999,69.169144000000074],[-105.91443600000002,69.167205999999965],[-105.92555199999998,69.164153999999996],[-106.03888699999993,69.153869999999984],[-106.17777999999998,69.144150000000081],[-106.19360399999999,69.144714000000022],[-106.256958,69.154984000000127],[-106.28888699999999,69.160262999999929],[-106.39611799999994,69.17804000000001],[-106.40611299999995,69.180542000000059],[-106.41471899999999,69.184417999999937],[-106.41471899999999,69.195251000000098],[-106.41027799999995,69.217758000000003],[-106.40666199999998,69.223877000000073],[-106.3944469999999,69.23692299999999],[-106.38612399999994,69.241653000000042],[-106.37638899999996,69.24552900000009],[-106.30777,69.262206999999989],[-106.28832999999992,69.269989000000123],[-106.27362099999993,69.281372000000147],[-106.26777600000003,69.292206000000022],[-106.26889,69.297211000000061],[-106.31639100000001,69.386658000000068],[-106.49527,69.474426000000108],[-106.52139299999993,69.486098999999967],[-106.54138199999989,69.49331699999999],[-106.55499299999985,69.496368000000018],[-106.57112099999989,69.498870999999951],[-106.60221899999999,69.498870999999951],[-106.61444099999994,69.496643000000006],[-106.62554899999986,69.493591000000094],[-106.73306299999996,69.441650000000038],[-106.74027999999998,69.435806000000014],[-106.74388099999993,69.429703000000075],[-106.74553700000001,69.407760999999994],[-106.86277799999999,69.36914100000007],[-106.93083200000001,69.361649000000114],[-106.95500199999992,69.357208000000014],[-106.96611000000001,69.354156000000103],[-106.98554999999999,69.346100000000035],[-106.99249299999997,69.340546000000018],[-106.99722300000002,69.33526599999999],[-106.99833699999999,69.329711999999972],[-106.99694799999997,69.324432000000058],[-106.96528599999994,69.303040000000067],[-106.95749699999993,69.293319999999994],[-106.925003,69.23942599999998],[-106.92223399999995,69.228867000000093],[-106.929169,69.216660000000104],[-106.93611099999998,69.211105000000032],[-106.94444299999998,69.206375000000037],[-106.96362299999993,69.198318000000029],[-107.03999299999998,69.181091000000038],[-107.12832600000002,69.154434000000094],[-107.13806199999999,69.150543000000027],[-107.16221599999994,69.134430000000009],[-107.19167299999998,69.112487999999928],[-107.22666900000002,69.084152000000017],[-107.24889400000001,69.068054000000018],[-107.264183,69.057480000000112],[-107.27944899999994,69.046936000000073],[-107.304169,69.032485999999949],[-107.31360599999994,69.028595000000109],[-107.34221599999995,69.01887499999998],[-107.37444299999993,69.009430000000123],[-107.43167099999994,68.996368000000075],[-107.50334199999992,68.982758000000047],[-107.55387899999994,68.975540000000024],[-107.64611799999989,68.965546000000018],[-107.67388900000003,68.963608000000079],[-107.74610899999999,68.960815000000082],[-107.93749999999994,68.934981999999934],[-107.95584099999996,68.931046000000094],[-107.97693600000002,68.930542000000116],[-108.17555199999998,68.931091000000094],[-108.20944199999997,68.93331900000004],[-108.26444999999995,68.939148000000046],[-108.29833999999988,68.941360000000088],[-108.42804699999994,68.945816000000036],[-108.49221799999992,68.94747899999993],[-108.521118,68.946365000000128],[-108.53443900000002,68.944702000000063],[-108.54611199999994,68.942474000000061],[-108.56331599999993,68.933594000000028],[-108.56388900000002,68.927765000000022],[-108.55082699999997,68.919434000000138],[-108.54194599999994,68.915543000000071],[-108.53555299999999,68.911376999999959],[-108.531387,68.906647000000135],[-108.52971599999995,68.901382000000069],[-108.53028899999993,68.895828000000051],[-108.53555299999999,68.889160000000061],[-108.55139200000002,68.879425000000026],[-108.59722899999997,68.859146000000067],[-108.67443799999995,68.829437000000041],[-108.926941,68.744431000000134],[-108.93749999999994,68.741088999999988],[-108.97250400000001,68.733870999999965],[-109.10472099999998,68.710541000000035],[-109.19138299999992,68.697205000000054],[-109.23416099999997,68.694977000000108],[-109.26390099999998,68.694427000000076],[-109.31194299999999,68.695816000000093],[-109.345551,68.697754000000032],[-109.37416100000002,68.696365000000014],[-109.39998600000001,68.693313999999987],[-109.43472300000002,68.686095999999964],[-109.49137899999994,68.673308999999961],[-109.52306399999992,68.664993000000095],[-109.55359599999991,68.655258000000003],[-109.59722899999997,68.64387499999998],[-109.64362299999999,68.634430000000123],[-109.65638699999994,68.632751000000098],[-109.68331899999998,68.630539000000056],[-109.756958,68.628586000000098],[-109.97028399999999,68.627197000000081],[-110.12416099999996,68.627197000000081],[-110.16055299999994,68.630539000000056],[-110.19167299999998,68.630814000000044],[-110.22000099999997,68.629150000000038],[-110.24416400000001,68.625259000000142],[-110.26306199999999,68.617752000000053],[-110.27194199999997,68.613602000000014],[-110.27916700000003,68.608597000000145],[-110.295547,68.599426000000051],[-110.32917800000001,68.582214000000022],[-110.33917200000002,68.578872999999987],[-110.35082999999997,68.576385000000016],[-110.36361699999998,68.574707000000046],[-110.37777699999998,68.574158000000125],[-110.39138800000001,68.576660000000004],[-110.39806399999986,68.580826000000116],[-110.42027299999995,68.604156000000046],[-110.42722300000003,68.608321999999987],[-110.44082600000002,68.611099000000081],[-110.45889299999999,68.612761999999975],[-110.56111099999998,68.616653000000042],[-110.576683,68.616653000000042],[-110.58944699999989,68.614990000000148],[-110.60944399999994,68.608321999999987],[-110.61694299999994,68.603592000000106],[-110.63417099999987,68.59526100000005],[-110.65695199999999,68.590271000000143],[-110.68138099999999,68.586105000000089],[-110.89666699999998,68.55720500000001],[-110.92223399999995,68.553863999999976],[-110.950287,68.551926000000037],[-111.01363400000002,68.552765000000022],[-111.03195199999999,68.554428000000144],[-111.03859699999992,68.558594000000028],[-111.03500400000001,68.563873000000001],[-110.98332199999993,68.577773999999977],[-110.97193900000002,68.580276000000083],[-110.95777900000002,68.581100000000049],[-110.92555199999993,68.580276000000083],[-110.89723200000003,68.581940000000088],[-110.87165800000002,68.585266000000104],[-110.86028299999987,68.587769000000094],[-110.850281,68.591095000000109],[-110.84306299999997,68.596099999999979],[-110.84306299999997,68.601653999999996],[-110.84973099999996,68.605820000000051],[-110.86361699999992,68.608597000000145],[-111.01750199999998,68.598327999999981],[-111.03028899999998,68.596649000000127],[-111.05888399999998,68.585815000000082],[-111.068893,68.58248900000001],[-111.08029199999999,68.579987000000131],[-111.09306300000003,68.578323000000125],[-111.13527699999997,68.575821000000076],[-111.16639700000002,68.575821000000076],[-111.23249800000002,68.578049000000021],[-111.26750199999998,68.580551000000071],[-111.28362299999998,68.582764000000054],[-111.32000700000003,68.585815000000082],[-111.33693699999998,68.586655000000121],[-111.37917299999998,68.584152000000131],[-111.39195299999994,68.58248900000001],[-111.41166699999997,68.575546000000031],[-111.41665599999999,68.571106000000043],[-111.40527299999997,68.568054000000075],[-111.389183,68.56581099999994],[-111.29804999999999,68.557755000000043],[-111.25028999999989,68.55720500000001],[-111.23194899999999,68.555542000000116],[-111.21833800000002,68.552765000000022],[-111.20916699999998,68.549148999999943],[-111.204453,68.544708000000071],[-111.204453,68.538879000000009],[-111.21112099999999,68.526093000000117],[-111.21556099999992,68.519440000000145],[-111.22556299999997,68.516098],[-111.23805199999993,68.514435000000105],[-111.25361599999991,68.514435000000105],[-111.35861199999999,68.521652000000017],[-111.37470999999999,68.523604999999975],[-111.38834400000002,68.526382000000069],[-111.46806300000003,68.536926000000108],[-111.52278100000001,68.541656000000103],[-111.60056299999991,68.543594000000041],[-111.85109699999998,68.534149000000014],[-112.060272,68.523041000000035],[-112.21000700000002,68.513610999999969],[-112.23665599999987,68.510817999999972],[-112.35916099999997,68.501938000000109],[-112.40110799999997,68.499145999999996],[-112.50917099999992,68.498032000000023],[-112.63527699999992,68.483047000000056],[-112.63694800000002,68.476928999999927],[-112.64527900000002,68.472763000000043],[-112.67027299999995,68.469146999999964],[-112.72749299999992,68.465820000000065],[-112.77390299999996,68.465546000000131],[-112.80750299999994,68.466660000000104],[-113.05166600000001,68.464157000000114],[-113.091949,68.460266000000047],[-113.220551,68.45277400000009],[-113.25140399999992,68.452209000000096],[-113.26944699999996,68.453873000000101],[-113.297234,68.458602999999925],[-113.30444299999999,68.462769000000037],[-113.30943300000001,68.467209000000025],[-113.310272,68.473038000000031],[-113.30638099999993,68.479706000000022],[-113.29972800000002,68.484711000000061],[-113.29138199999994,68.489151000000106],[-113.26944699999996,68.494430999999963],[-113.256958,68.496094000000085],[-113.19360399999999,68.496368000000018],[-113.05166600000001,68.487487999999985],[-113.03778099999994,68.488312000000121],[-113.03388999999999,68.494980000000112],[-113.04360999999994,68.504166000000055],[-113.07250999999991,68.520538000000045],[-113.11805700000002,68.544434000000138],[-113.14138800000001,68.550537000000077],[-113.19721999999996,68.560256999999979],[-113.21333300000003,68.562195000000088],[-113.26888999999994,68.572220000000016],[-113.33416699999998,68.585541000000148],[-113.35777299999995,68.591369999999984],[-113.36721799999992,68.594986000000006],[-113.38166799999988,68.603043000000014],[-113.44304699999998,68.640548999999965],[-113.44833399999999,68.645263999999997],[-113.45111099999997,68.650269000000037],[-113.45249899999999,68.661652000000061],[-113.45084400000002,68.667755],[-113.52443700000003,68.724990999999932],[-113.66665599999999,68.802199999999914],[-113.676941,68.811096000000077],[-113.67887899999994,68.894714000000079],[-113.67722299999997,68.900818000000129],[-113.671944,68.906647000000135],[-113.62389400000001,68.93331900000004],[-113.60694899999993,68.942474000000061],[-113.58444199999997,68.948028999999963],[-113.57472199999995,68.951385000000016],[-113.569458,68.957214000000022],[-113.54583700000001,69.043045000000006],[-113.54499799999996,69.048035000000084],[-113.55471799999987,69.051376000000118],[-113.61501299999998,69.066376000000048],[-113.63221699999997,69.073883000000023],[-113.64723199999992,69.081940000000145],[-113.65778399999999,69.091095000000053],[-113.69611399999991,69.154709000000139],[-113.69220699999994,69.189423000000033],[-113.68083200000001,69.191925000000083],[-113.66583300000002,69.191086000000098],[-113.65583800000002,69.187485000000038],[-113.62193300000001,69.17804000000001],[-113.53888699999999,69.168594000000041],[-113.51972999999998,69.167205999999965],[-113.50862099999995,69.169708000000014],[-113.51363399999997,69.174423000000047],[-113.52111799999994,69.178588999999931],[-113.55359599999991,69.187195000000031],[-113.58000199999992,69.192474000000004],[-113.62332200000003,69.199707000000046],[-113.90888999999999,69.24192800000003],[-114.27555799999999,69.281936999999971],[-114.31139400000001,69.284987999999998],[-114.32888800000001,69.285538000000031],[-114.39277600000003,69.284149000000014],[-114.42138699999998,69.281936999999971],[-114.4472199999999,69.278046000000074],[-114.49249299999991,69.267212000000029],[-114.51834100000002,69.263321000000133],[-114.66972399999997,69.255829000000006],[-114.764183,69.252212999999983],[-115.08889799999992,69.244705000000124],[-115.25361599999991,69.245254999999986],[-115.40083299999998,69.256942999999978],[-115.64472999999998,69.273315000000139],[-115.79527299999995,69.282761000000107],[-115.92138699999992,69.290268000000083],[-115.95584099999996,69.292206000000022],[-115.96833799999996,69.294983000000116],[-115.9786069999999,69.298598999999967],[-115.98665599999998,69.302475000000015],[-116.00029000000001,69.310806000000127],[-116.00611900000001,69.315262000000018],[-116.016953,69.322220000000016],[-116.02694700000001,69.325546000000088],[-116.05638099999999,69.32998699999996],[-116.17527799999993,69.34165999999999],[-116.21945199999999,69.348327999999981],[-116.52583300000003,69.407486000000006],[-116.53859699999998,69.4102630000001],[-116.54888900000003,69.413605000000018],[-116.56527699999992,69.421371000000079],[-116.62970699999994,69.458878000000141],[-116.63137799999993,69.464706000000035],[-116.62666299999989,69.470535000000041],[-116.61888099999993,69.474990999999989],[-116.60777300000001,69.478043000000071],[-116.569458,69.48414600000001],[-116.56139400000001,69.488586000000055],[-116.55860899999993,69.4952550000001],[-116.57556199999993,69.555817000000104],[-116.58138999999989,69.560531999999967],[-116.591949,69.563873000000001],[-116.60472099999993,69.566665999999998],[-116.63667299999997,69.570267000000058],[-116.73388699999998,69.575546000000031],[-116.74999999999994,69.574997000000053],[-116.75945299999995,69.571381000000031],[-116.76611299999996,69.565177999999946],[-116.78138699999988,69.55720500000001],[-116.89750700000002,69.587494000000049],[-116.88054699999986,69.608871000000079],[-116.85193600000002,69.619705000000124],[-116.84612299999998,69.643051000000014],[-116.84750399999996,69.648604999999975],[-116.858047,69.651932000000102],[-116.96193700000003,69.679427999999973],[-116.987503,69.684981999999991],[-117.01777600000003,69.68942300000009],[-117.03500399999996,69.690810999999997],[-117.05027799999993,69.693038999999942],[-117.07584400000002,69.69859300000013],[-117.11805699999996,69.711654999999951],[-117.23889200000002,69.753052000000025],[-117.24749799999995,69.756943000000092],[-117.26917300000002,69.78166200000004],[-117.27278100000001,69.792755000000056],[-117.30777,69.844436999999971],[-117.36721799999992,69.919983000000059],[-117.42250099999995,69.972488000000055],[-117.43499799999995,69.981369000000029],[-117.43666099999996,69.98692299999999],[-117.43611099999993,69.993042000000059],[-117.41528299999993,70.009995000000117],[-117.38527699999997,70.028595000000053],[-117.35637700000001,70.039703000000031],[-117.32584400000002,70.049987999999985],[-117.28362300000003,70.063309000000118],[-117.25140399999992,70.072768999999994],[-117.23999000000003,70.075821000000133],[-117.19444299999998,70.087493999999936],[-117.16999800000002,70.092484000000013],[-117.12082700000002,70.102478000000019],[-117.08167999999995,70.108871000000136],[-117.01083399999993,70.116928000000144],[-116.87721299999998,70.129150000000095],[-116.58306899999997,70.156937000000084],[-116.236107,70.191360000000032],[-116.16639700000002,70.199997000000053],[-116.09999099999999,70.210266000000047],[-116.07167099999998,70.213608000000022],[-115.90834000000001,70.228867000000093],[-115.80194099999994,70.236649000000057],[-115.69360399999994,70.243866000000139],[-115.64695699999993,70.246643000000063],[-115.49665799999997,70.250549000000092],[-115.44833399999993,70.252487000000031],[-115.31471299999998,70.264160000000061],[-115.30139200000002,70.266388000000063],[-115.229446,70.273879999999963],[-115.16750299999995,70.27777100000003],[-115.08389299999999,70.279708999999968],[-115.03028899999998,70.279984000000013],[-114.86721799999998,70.28387500000008],[-114.80194099999989,70.286102000000142],[-114.74137899999999,70.290817000000004],[-114.71305799999988,70.293869000000086],[-114.65888999999999,70.301651000000049],[-114.61694299999994,70.30664100000007],[-114.58833299999992,70.309708000000001],[-114.54305999999997,70.313309000000061],[-114.511124,70.314696999999967],[-114.323624,70.316665999999998],[-114.254997,70.317215000000147],[-114.21833800000002,70.316085999999984],[-114.17832900000002,70.313599000000067],[-114.16082799999998,70.311645999999939],[-114.13527699999997,70.305816999999934],[-114.111107,70.293869000000086],[-114.09028599999994,70.286926000000108],[-114.057503,70.282486000000063],[-113.84166700000003,70.269440000000145],[-113.68388399999992,70.263046000000088],[-113.65055799999993,70.263610999999969],[-113.59166700000003,70.268600000000106],[-113.54943799999995,70.273315000000139],[-113.50556899999998,70.277481000000023],[-113.46000700000002,70.280548000000124],[-113.42804699999999,70.281662000000097],[-113.39138799999995,70.280548000000124],[-113.33332799999994,70.277206000000035],[-113.29611199999999,70.273879999999963],[-113.16832699999998,70.259155000000021],[-113.09084299999995,70.247481999999991],[-112.66665599999993,70.203873000000101],[-112.56471299999998,70.198318000000029],[-112.54804999999999,70.198593000000017],[-112.53278399999994,70.199416999999983],[-112.52084399999995,70.202209000000096],[-112.51722699999999,70.207488999999953],[-112.52749599999993,70.211105000000032],[-112.56304899999998,70.213608000000022],[-112.577789,70.216095000000053],[-112.58084100000002,70.221374999999966],[-112.57501200000002,70.227203000000088],[-112.56582599999996,70.231368999999972],[-112.55526700000001,70.234984999999995],[-112.54332699999992,70.237487999999985],[-112.295547,70.266663000000051],[-112.212784,70.265823000000012],[-112.195831,70.265823000000012],[-112.16388699999999,70.266936999999984],[-112.13834399999996,70.271378000000084],[-112.14584400000001,70.275543000000084],[-112.16306299999991,70.277481000000023],[-112.24249299999991,70.283600000000035],[-112.29695099999998,70.289154000000053],[-112.30471799999992,70.293319999999937],[-112.29723399999995,70.298325000000034],[-112.28333299999997,70.299988000000099],[-112.26666299999999,70.300262000000032],[-112.24833699999999,70.299423000000104],[-112.23111,70.297484999999938],[-112.10888699999992,70.277481000000023],[-111.92639199999996,70.252212999999927],[-111.91583300000002,70.255553999999961],[-111.90805099999989,70.260544000000039],[-111.89917000000003,70.264709000000039],[-111.88054699999998,70.270264000000111],[-111.86527999999993,70.271378000000084],[-111.84861799999993,70.271378000000084],[-111.743607,70.269440000000145],[-111.55555700000002,70.269714000000079],[-111.53888699999993,70.269989000000066],[-111.46806300000003,70.278320000000008],[-111.45445299999989,70.279984000000013],[-111.445267,70.284149000000014],[-111.44275699999992,70.290268000000026],[-111.487213,70.336929000000055],[-111.49472000000003,70.341094999999939],[-111.50723299999993,70.344147000000078],[-111.53694200000001,70.349426000000051],[-111.63110399999999,70.358321999999987],[-111.66471899999999,70.35803199999998],[-111.69387799999998,70.355545000000063],[-111.73528299999998,70.35026600000009],[-111.75055700000001,70.349426000000051],[-111.80387899999999,70.350815000000011],[-111.98055999999991,70.370818999999983],[-112.00083899999987,70.378036000000066],[-112.05387899999999,70.401093000000003],[-112.06166099999996,70.405258000000003],[-112.06973299999993,70.414993000000095],[-112.07250999999997,70.42025799999999],[-112.073059,70.431655999999975],[-112.07584400000002,70.436646000000053],[-112.08917200000002,70.451096000000121],[-112.11527999999998,70.474152000000004],[-112.14611799999994,70.490540000000067],[-112.156387,70.494141000000127],[-112.16915899999998,70.497208000000001],[-112.19915800000001,70.502213000000097],[-112.42722299999997,70.526382000000012],[-112.49553700000001,70.515274000000034],[-112.5,70.514740000000074],[-112.50945300000001,70.513611000000083],[-112.52806099999998,70.514160000000004],[-112.58612099999999,70.524994000000106],[-112.62193300000001,70.534424000000001],[-112.65278599999994,70.545258000000047],[-112.67083700000001,70.552765000000136],[-112.67859599999991,70.556931000000077],[-112.70973199999997,70.567490000000078],[-112.72805799999998,70.568329000000062],[-112.81471299999993,70.568054000000075],[-112.84861799999993,70.567764000000011],[-112.85610999999994,70.562758999999971],[-112.93749999999994,70.56721500000009],[-113.00083899999993,70.576659999999947],[-113.01611300000002,70.579163000000108],[-113.14222699999999,70.606093999999985],[-113.30304699999994,70.641936999999984],[-113.49221799999992,70.677200000000028],[-113.51112399999994,70.677765000000022],[-113.51999699999993,70.673598999999967],[-113.51917299999997,70.667755000000113],[-113.5227809999999,70.655547999999953],[-113.52834300000001,70.649719000000118],[-113.54055800000003,70.646942000000024],[-113.55444299999994,70.644989000000123],[-113.57140399999997,70.644714000000079],[-113.59166700000003,70.646103000000096],[-113.60722399999997,70.648604999999975],[-113.63054699999998,70.654984000000013],[-113.64917000000003,70.662766000000147],[-113.66528299999999,70.670822000000044],[-113.68388399999992,70.678314],[-113.72860700000001,70.691649999999925],[-113.76194800000002,70.696091000000024],[-113.88221699999997,70.710265999999933],[-113.93831599999993,70.71527100000003],[-113.97416699999991,70.715546000000018],[-113.98972299999997,70.714432000000045],[-114.015556,70.709991000000116],[-114.06833599999993,70.692474000000061],[-114.08944700000001,70.685256999999979],[-114.12082699999996,70.674698000000092],[-114.14362299999999,70.668594000000098],[-114.17111199999999,70.664703000000031],[-114.20834400000001,70.665817000000004],[-114.26194800000002,70.671371000000022],[-114.323059,70.675262000000089],[-114.37748699999997,70.675812000000121],[-114.40834000000001,70.673598999999967],[-114.4202729999999,70.670822000000044],[-114.43083200000001,70.667206000000022],[-114.44833399999999,70.658600000000092],[-114.45889299999999,70.655258000000117],[-114.49500299999994,70.646942000000024],[-114.54527299999995,70.636107999999979],[-114.57112100000001,70.631362999999965],[-114.64111299999996,70.622482000000048],[-114.98916599999995,70.603867000000093],[-115.13694800000002,70.598038000000088],[-115.25250199999994,70.601379000000122],[-115.38054699999998,70.604706000000078],[-115.39943700000003,70.604980000000012],[-115.88971700000002,70.595260999999994],[-115.921944,70.593596999999988],[-115.97609699999998,70.585266000000047],[-116.05555700000002,70.572220000000129],[-116.08556399999992,70.587769000000037],[-116.16251399999999,70.62303200000008],[-116.17111199999994,70.626923000000147],[-116.26363400000002,70.634720000000073],[-116.36389200000002,70.639160000000118],[-116.38082900000001,70.638885000000073],[-116.52999899999992,70.632477000000108],[-116.63221699999997,70.614990000000091],[-116.65583800000002,70.609146000000067],[-116.66915899999998,70.607208000000128],[-116.71501199999994,70.603043000000127],[-116.90110799999997,70.597214000000122],[-116.91972399999997,70.597488000000055],[-117.05972300000002,70.601379000000122],[-117.10056299999997,70.603317000000061],[-117.34584000000001,70.614990000000091],[-117.34973100000002,70.619980000000112],[-117.35861199999994,70.623871000000008],[-117.37666300000001,70.62553400000013],[-117.50556899999998,70.61692800000003],[-117.51528899999994,70.613311999999951],[-117.51806599999986,70.606368999999972],[-117.51862299999993,70.600266000000033],[-117.52500900000001,70.594985999999949],[-117.54360999999994,70.595260999999994],[-117.5594329999999,70.597214000000122],[-117.61305199999998,70.608597000000145],[-117.67111199999999,70.624419999999986],[-117.70472699999999,70.634155000000021],[-117.724716,70.641373000000044],[-117.73777799999993,70.65026899999998],[-117.74194299999994,70.655258000000117],[-117.741669,70.661376999999959],[-117.73944099999994,70.666930999999977],[-117.73473399999995,70.673035000000027],[-117.72222899999986,70.68331900000004],[-117.71417199999996,70.688034000000073],[-117.70944199999985,70.693863000000079],[-117.71140300000002,70.699707000000103],[-117.71806300000003,70.703872999999987],[-117.73581699999994,70.711655000000121],[-117.74694799999997,70.714995999999985],[-117.89806399999998,70.756104000000107],[-117.94554099999999,70.768599999999992],[-118.00890400000003,70.783051],[-118.04750100000001,70.791656000000046],[-118.09277299999997,70.804703000000075],[-118.13583399999999,70.818054000000018],[-118.16750300000001,70.828598000000056],[-118.18776700000001,70.836104999999975],[-118.20584099999996,70.843872000000147],[-118.26445000000001,70.871918000000051],[-118.28028899999993,70.879974000000118],[-118.30972300000002,70.897217000000012],[-118.31639100000001,70.901657000000057],[-118.32972699999993,70.910537999999974],[-118.40862299999998,70.970260999999994],[-118.41750300000001,70.980270000000019],[-118.41972399999986,70.985809000000017],[-118.41944899999993,70.99192800000003],[-118.415009,70.99803200000008],[-118.40862299999998,71.003326000000072],[-118.40055799999999,71.007766999999944],[-118.37082700000002,71.019149999999968],[-118.33944699999995,71.029433999999981],[-118.27250699999991,71.048874000000012],[-117.98055999999997,71.124420000000043],[-117.84973099999996,71.156937000000028],[-117.79666099999992,71.166382000000112],[-117.728882,71.169708000000128],[-117.69055199999997,71.169434000000024],[-117.640289,71.171921000000111],[-117.54305999999991,71.178589000000102],[-117.49445300000002,71.18193100000002],[-117.41665599999988,71.188873000000115],[-117.38722199999995,71.192474000000004],[-117.28859699999992,71.206649999999968],[-116.98528299999998,71.236098999999967],[-116.83666999999997,71.269149999999911],[-116.83332799999994,71.276093000000117],[-116.82472200000001,71.280548000000124],[-116.80055199999993,71.286102000000085],[-116.71333300000003,71.297211000000004],[-116.66972399999992,71.302765000000022],[-116.60166900000002,71.313873000000001],[-116.51777600000003,71.326384999999959],[-116.40583800000002,71.343048000000067],[-116.20889299999993,71.364150999999993],[-116.17722300000003,71.366653000000042],[-116.14195299999989,71.367751999999996],[-116.08556399999992,71.367477000000008],[-116.077789,71.365814000000057],[-116.05249000000003,71.356093999999985],[-115.81027199999994,71.362761999999975],[-115.77667200000002,71.36442599999998],[-115.76083399999993,71.365814000000057],[-115.74638399999998,71.368317000000047],[-115.73416099999986,71.371368000000075],[-115.72693599999997,71.376373000000115],[-115.72666900000002,71.381362999999965],[-115.73306299999996,71.385818000000029],[-115.74416400000001,71.389160000000118],[-115.75805700000001,71.391937000000041],[-115.79055800000003,71.396378000000141],[-115.84166700000003,71.394440000000031],[-115.85582699999992,71.392212000000029],[-115.885559,71.389160000000118],[-115.91915899999998,71.387206999999989],[-115.93360899999999,71.38888500000013],[-116.01777599999997,71.411101999999971],[-116.06471299999998,71.438583000000051],[-115.82805599999995,71.483046999999999],[-115.76306199999999,71.490265000000022],[-115.62082700000002,71.498596000000077],[-115.60472099999993,71.496094000000028],[-115.58444199999991,71.488876000000005],[-115.58416699999998,71.485259999999982],[-115.53555299999994,71.470261000000107],[-115.41555800000003,71.449707000000103],[-115.37832599999996,71.449707000000103],[-115.20028699999995,71.479430999999977],[-115.17527799999988,71.484985000000108],[-115.06667299999998,71.518600000000049],[-115.05750299999994,71.523041000000148],[-115.06194299999999,71.526657],[-115.08168000000001,71.527205999999921],[-115.11361699999998,71.524704000000042],[-115.15638699999994,71.518875000000037],[-115.17054699999994,71.516662999999994],[-115.24553700000001,71.500000000000114],[-115.26000999999997,71.498031999999967],[-115.32224300000001,71.492477000000065],[-115.44275699999992,71.488037000000077],[-115.45973200000003,71.489151000000049],[-115.53859699999998,71.50082400000008],[-115.54998799999998,71.504440000000102],[-115.55860899999999,71.508330999999998],[-115.55583199999995,71.513611000000083],[-115.54332699999986,71.516662999999994],[-115.53083800000002,71.519440000000088],[-115.51666299999999,71.521378000000027],[-115.51222199999989,71.53776600000009],[-115.61888099999987,71.555252000000053],[-115.65499899999992,71.55802900000009],[-115.70638999999994,71.555817000000047],[-115.79194599999994,71.543593999999985],[-115.87638900000002,71.53276100000005],[-115.965012,71.522216999999955],[-116.16027799999989,71.49971000000005],[-116.20805399999995,71.495818999999983],[-116.28250100000002,71.495528999999976],[-116.33389299999999,71.493317000000104],[-116.41361999999998,71.486648999999943],[-116.44360399999999,71.483322000000044],[-116.806107,71.436096000000134],[-116.98610699999995,71.427200000000028],[-117.17666600000001,71.404709000000025],[-117.20111099999997,71.398331000000098],[-117.21528599999994,71.396378000000141],[-117.328056,71.386108000000036],[-117.35944399999994,71.383331000000112],[-117.37721299999987,71.382751000000098],[-117.39835399999998,71.383880999999974],[-117.41221599999994,71.386383000000023],[-117.41665599999988,71.391373000000101],[-117.41610700000001,71.397766000000047],[-117.41306299999997,71.404434000000037],[-117.39083900000003,71.435257000000036],[-117.38110399999994,71.447205000000054],[-117.37832600000002,71.454163000000051],[-117.44776899999988,71.47387700000013],[-117.49445300000002,71.486923000000047],[-117.51750199999998,71.493317000000104],[-117.54583700000001,71.498871000000122],[-117.56276699999995,71.49971000000005],[-117.628601,71.467758000000117],[-117.63333099999994,71.461929000000112],[-117.63166799999999,71.456375000000094],[-117.62470999999999,71.451935000000105],[-117.61305199999998,71.44859300000013],[-117.59665699999999,71.446365000000014],[-117.55583200000001,71.445251000000042],[-117.5369419999999,71.443862999999908],[-117.506393,71.439148000000102],[-117.48332199999999,71.432480000000112],[-117.47888199999989,71.427475000000072],[-117.48194899999999,71.420532000000037],[-117.51722699999999,71.379425000000026],[-117.52749599999993,71.375809000000004],[-117.53943600000002,71.372757000000092],[-117.59416199999987,71.371643000000063],[-117.68138099999993,71.379700000000071],[-117.75666799999999,71.376083000000108],[-117.79444899999999,71.368042000000059],[-117.82749899999999,71.372208000000114],[-117.94833399999999,71.377762000000132],[-118.01500699999997,71.37303200000008],[-118.03278399999994,71.372482000000048],[-118.09084299999995,71.372757000000092],[-118.112213,71.37359600000002],[-118.18536399999999,71.379791000000125],[-118.24388099999999,71.389984000000084],[-118.25556899999998,71.393326000000002],[-118.28362300000003,71.404709000000025],[-118.29750099999995,71.413605000000132],[-118.31111099999993,71.428589000000045],[-118.31527699999992,71.439697000000024],[-118.31471299999998,71.452209000000039],[-118.30943300000001,71.465820000000008],[-118.28999299999992,71.481659000000093],[-118.28195199999988,71.486098999999911],[-118.2633439999999,71.49414100000007],[-118.21250900000001,71.513046000000031],[-118.20221699999996,71.516662999999994],[-118.19027699999998,71.519714000000022],[-118.17804699999994,71.522766000000104],[-118.12609900000001,71.533051000000057],[-118.08612099999988,71.540267999999969],[-118.05444299999999,71.543045000000063],[-117.83583099999998,71.554703000000075],[-117.70722999999998,71.54942299999999],[-117.68720999999994,71.549988000000042],[-117.675003,71.552765000000136],[-117.658051,71.561646000000053],[-117.65139799999992,71.566940000000045],[-117.65583800000002,71.571930000000123],[-117.66999800000002,71.574706999999989],[-117.87304699999993,71.611649],[-117.88722199999995,71.614151000000106],[-117.90888999999999,71.614990000000034],[-117.86361699999998,71.639435000000105],[-117.718887,71.659714000000008],[-117.70694700000001,71.662491000000102],[-117.69638099999992,71.666091999999992],[-117.70084399999996,71.671371000000136],[-117.715012,71.673874000000126],[-117.73665599999993,71.674988000000099],[-118.01000999999997,71.672484999999938],[-118.02778599999994,71.67164600000001],[-118.11665299999993,71.65277100000003],[-118.12693799999988,71.648880000000133],[-118.17278299999998,71.628036000000009],[-118.17749000000003,71.621918000000051],[-118.16388699999993,71.606933999999967],[-118.16639699999996,71.599990999999989],[-118.17666600000001,71.596374999999966],[-118.19082600000002,71.594146999999964],[-118.29998799999993,71.583328000000108],[-118.31777999999991,71.582763999999997],[-118.33444199999997,71.584717000000126],[-118.36527999999998,71.589431999999931],[-118.38639799999999,71.613602000000128],[-118.38612399999994,71.619705000000067],[-118.45500199999987,71.650818000000072],[-118.485817,71.655548000000124],[-118.56639099999995,71.662766000000147],[-118.60527000000002,71.664154000000053],[-118.84166700000003,71.664702999999975],[-118.85555999999997,71.662491000000102],[-118.86389199999996,71.658035000000041],[-118.90387699999997,71.614700000000028],[-118.90387699999997,71.608322000000101],[-118.88971699999996,71.599716000000001],[-118.88027999999991,71.595825000000104],[-118.86609599999997,71.586928999999998],[-118.8683319999999,71.580276000000026],[-118.88054699999998,71.577209000000096],[-118.89778099999995,71.57777400000009],[-118.90972899999991,71.581099999999992],[-119.05027799999999,71.626648000000102],[-119.07472200000001,71.644149999999968],[-119.08416699999998,71.654160000000047],[-119.10582699999998,71.685806000000071],[-119.12470999999999,71.730545000000063],[-119.13445300000001,71.76527399999992],[-119.13445300000001,71.783874999999966],[-119.10555999999991,71.876648000000046],[-119.10305800000003,71.883330999999998],[-119.09194899999994,71.902205999999978],[-119.08750900000001,71.908324999999991],[-118.945831,71.99136400000009],[-118.929169,72.000548999999921],[-118.86694299999999,72.023879999999963],[-118.84249899999998,72.029709000000025],[-118.80166599999995,72.037200999999925],[-118.76471699999996,72.046370999999965],[-118.73361199999999,72.057480000000055],[-118.72501399999987,72.0619200000001],[-118.71665999999999,72.066665999999998],[-118.71028099999995,72.071930000000009],[-118.70556599999992,72.077774000000034],[-118.703056,72.084717000000012],[-118.70749699999999,72.095824999999991],[-118.715012,72.10026600000009],[-118.71972700000003,72.105255000000056],[-118.71945199999999,72.111374000000069],[-118.71749899999998,72.116928000000087],[-118.69193999999999,72.130539000000056],[-118.58860800000002,72.176086000000112],[-118.57640100000003,72.179152999999985],[-118.56194299999999,72.181366000000139],[-118.545547,72.182754999999986],[-118.44248999999996,72.181655999999975],[-118.40583799999996,72.183044000000052],[-118.38945000000001,72.184708000000114],[-118.15722699999992,72.217758000000117],[-118.12832599999996,72.222214000000065],[-118.11945299999996,72.226654000000053],[-118.11277799999993,72.231934000000138],[-118.108047,72.237762000000089],[-118.10527000000002,72.244705000000067],[-118.10417199999995,72.263321000000076],[-118.12138400000003,72.308029000000147],[-118.13082899999995,72.318054000000075],[-118.14527899999996,72.326934999999992],[-118.16471899999993,72.334427000000119],[-118.176941,72.337769000000037],[-118.19193999999999,72.340546000000131],[-118.20916699999998,72.34248400000007],[-118.25140399999998,72.344711000000132],[-118.27166699999992,72.344711000000132],[-118.28832999999992,72.343323000000055],[-118.32528699999995,72.341934000000037],[-118.36416600000001,72.341370000000097],[-118.40695199999993,72.34248400000007],[-118.446663,72.345260999999994],[-118.49109599999997,72.353043000000127],[-118.52306399999992,72.363876000000118],[-118.55499299999997,72.380814000000044],[-118.56973299999999,72.389709000000039],[-118.58194700000001,72.399155000000007],[-118.58860800000002,72.416655999999989],[-118.58805799999999,72.435256999999979],[-118.58528100000001,72.441924999999969],[-118.573059,72.460815000000082],[-118.56833599999993,72.46665999999999],[-118.55027799999999,72.483321999999987],[-118.53694199999995,72.493866000000025],[-118.51972999999992,72.50277699999998],[-118.20722999999998,72.618591000000094],[-118.12554899999998,72.642487000000017],[-118.08306900000002,72.649719000000118],[-117.90361000000001,72.689697000000137],[-117.89083899999991,72.692749000000049],[-117.86888099999993,72.699997000000053],[-117.63305700000001,72.784987999999998],[-117.60193600000002,72.796936000000073],[-117.51944700000001,72.828873000000044],[-117.48999000000003,72.841369999999984],[-117.48111,72.845825000000048],[-117.46472199999994,72.85554500000012],[-117.43611099999993,72.876373000000001],[-117.42054699999994,72.894440000000088],[-117.40222199999999,72.903320000000122],[-117.37999000000002,72.910538000000088],[-117.35360699999995,72.916382000000112],[-117.32333399999993,72.92082199999993],[-117.30638099999993,72.921921000000111],[-117.24916099999996,72.923874000000069],[-117.12721299999998,72.932479999999998],[-116.95639,72.954163000000108],[-116.94138299999997,72.95637499999998],[-116.89972699999998,72.964157000000114],[-116.862503,72.972214000000065],[-116.83805799999999,72.978592000000049],[-116.775284,72.9952550000001],[-116.70722999999998,73.017211999999972],[-116.65972899999991,73.031097000000045],[-116.58750900000001,73.051376000000005],[-116.57417299999997,73.054153000000099],[-116.54167199999995,73.057480000000055],[-116.52416999999991,73.058868000000132],[-116.31916799999993,73.09165999999999],[-116.24221799999998,73.110260000000096],[-116.20195000000001,73.118590999999981],[-116.15556300000003,73.124695000000031],[-115.90055799999993,73.154160000000104],[-115.60973399999995,73.194138000000123],[-115.44082600000002,73.22387700000013],[-115.34638999999999,73.253326000000129],[-115.32305899999994,73.260269000000108],[-115.30915799999997,73.263046000000031],[-115.14917000000003,73.288315000000011],[-115.10221899999999,73.294144000000017],[-115.01418299999989,73.299988000000042],[-114.95111099999997,73.307754999999986],[-114.89417299999997,73.318054000000018],[-114.86638599999998,73.323608000000036],[-114.83056599999998,73.334152000000074],[-114.81054699999999,73.342758000000003],[-114.70722999999992,73.368042000000003],[-114.67555199999998,73.371918000000051],[-114.65778399999999,73.373032000000023],[-114.56166100000002,73.37553400000013],[-114.54083300000002,73.373595999999964],[-114.50527999999991,73.368866000000139],[-114.337784,73.343323000000055],[-114.30499299999991,73.338042999999971],[-114.27500899999995,73.332214000000135],[-114.22609699999987,73.318329000000062],[-114.19776899999999,73.306366000000025],[-114.16306299999997,73.289703000000145],[-114.11054999999999,73.263885000000016],[-114.05610699999994,73.233597000000032],[-114.01666299999994,73.206375000000094],[-113.96167000000003,73.153046000000131],[-113.95694700000001,73.142487000000074],[-113.95388799999989,73.125533999999959],[-113.95749699999999,73.113312000000008],[-113.99582700000002,73.077773999999977],[-114.00499699999995,73.064423000000033],[-114.03555299999999,73.004990000000021],[-114.04750100000001,72.954987000000074],[-114.05499299999997,72.883605999999986],[-114.05277999999998,72.872208000000001],[-114.04915599999998,72.867203000000131],[-114.0427699999999,72.862762000000032],[-114.02722199999999,72.854156000000103],[-113.98166700000002,72.834152000000017],[-113.96888699999994,72.82499700000011],[-113.96777299999997,72.819442999999978],[-113.96945199999999,72.813034000000073],[-113.97582999999992,72.807205000000067],[-113.985817,72.803040000000067],[-113.99749799999995,72.799423000000104]],[[-95.669723999999917,73.604980000000126],[-95.688598999999897,73.603317000000004],[-95.702498999999989,73.60554500000012],[-95.711670000000026,73.612198000000092],[-95.703887999999949,73.617477000000065],[-95.684157999999968,73.6202550000001],[-95.669997999999964,73.620529000000033],[-95.655563000000029,73.616652999999928],[-95.654998999999975,73.609984999999995],[-95.669723999999917,73.604980000000126]],[[-107.89555399999989,73.541367000000093],[-107.93055699999996,73.539428999999984],[-107.9519499999999,73.540268000000083],[-107.97193900000002,73.542755],[-108.00917099999992,73.548035000000084],[-108.02306399999998,73.551376000000118],[-108.07472200000001,73.576385000000073],[-108.08277899999996,73.580826000000002],[-108.08500700000002,73.585815000000139],[-108.08332799999999,73.597214000000065],[-108.07640099999992,73.603591999999992],[-108.066101,73.608597000000032],[-108.05444299999988,73.612487999999928],[-108.04083299999996,73.615540000000067],[-108.00750700000003,73.618591000000094],[-107.89943699999992,73.622756999999979],[-107.86277799999993,73.624145999999996],[-107.82444800000002,73.6244200000001],[-107.80444299999999,73.624145999999996],[-107.68110699999994,73.621367999999961],[-107.61472299999991,73.614700000000028],[-107.60056299999997,73.611374000000126],[-107.58944699999995,73.607758000000103],[-107.58473200000003,73.603043000000071],[-107.58249699999999,73.597762999999986],[-107.58473200000003,73.586655000000007],[-107.59194899999994,73.579987000000017],[-107.60221899999988,73.575271999999984],[-107.64527900000002,73.570267000000115],[-107.65722700000003,73.568603999999993],[-107.7491609999999,73.55581699999999],[-107.89555399999989,73.541367000000093]],[[-124.307503,73.556366000000139],[-124.33167999999995,73.556366000000139],[-124.343613,73.559981999999991],[-124.35193600000002,73.5711060000001],[-124.35861199999988,73.630264000000068],[-124.34612300000003,73.633606000000043],[-124.33138999999994,73.636383000000137],[-124.307503,73.632202000000063],[-124.30332900000002,73.626648000000046],[-124.29387700000001,73.622481999999934],[-124.28222700000003,73.618866000000082],[-124.26806599999992,73.616088999999988],[-124.21028100000001,73.611374000000126],[-124.19360399999994,73.60914600000001],[-124.17944299999994,73.606369000000086],[-124.16777000000002,73.603043000000071],[-124.14916999999997,73.594711000000075],[-124.12666300000001,73.580826000000002],[-124.11972000000003,73.575821000000133],[-124.11554699999988,73.570541000000048],[-124.11389199999996,73.564148000000102],[-124.12638899999996,73.560805999999957],[-124.307503,73.556366000000139]],[[-124.58473199999992,73.679153000000042],[-124.59944199999995,73.676376000000005],[-124.62361099999998,73.676650999999993],[-124.640556,73.678863999999976],[-124.70056199999993,73.689422999999977],[-124.72917199999995,73.694976999999994],[-124.73361199999999,73.700545999999974],[-124.72582999999992,73.705261000000007],[-124.71584299999995,73.709152000000074],[-124.70111099999997,73.711928999999998],[-124.68167099999999,73.713042999999971],[-124.66471899999999,73.710815000000025],[-124.66278099999994,73.706099999999992],[-124.64835399999998,73.704712000000086],[-124.61694299999999,73.699707000000046],[-124.57140399999992,73.691925000000083],[-124.564438,73.687195000000031],[-124.57224299999996,73.682479999999998],[-124.58473199999992,73.679153000000042]],[[-105.08944700000001,73.735260000000039],[-104.96028099999995,73.688582999999937],[-104.84306300000003,73.650818000000072],[-104.71140300000002,73.63081399999993],[-104.69167299999992,73.628310999999997],[-104.675003,73.624985000000095],[-104.58084100000002,73.600266000000147],[-104.53056300000003,73.581374999999923],[-104.51306199999999,73.573044000000039],[-104.49445300000002,73.559418000000051],[-104.49027999999998,73.554703000000018],[-104.48528299999998,73.544708000000128],[-104.48306299999996,73.534424000000115],[-104.512787,73.493042000000059],[-104.55583200000001,73.403320000000008],[-104.56639100000001,73.334717000000126],[-104.56833599999999,73.329163000000108],[-104.57333399999999,73.323044000000095],[-104.58138999999994,73.316666000000112],[-104.60193599999997,73.306366000000025],[-104.64916999999997,73.280823000000112],[-104.69499200000001,73.25221300000004],[-104.76000999999991,73.203873000000044],[-104.76500699999985,73.197754000000032],[-104.76390099999998,73.192474000000118],[-104.79415899999998,73.168045000000006],[-104.86805700000002,73.136658000000068],[-104.97556299999997,73.085266000000104],[-104.98332199999999,73.078872999999987],[-104.98805199999993,73.073043999999982],[-104.98388699999992,73.068054000000075],[-104.97749299999998,73.05304000000001],[-104.97361799999999,73.031662000000097],[-104.97860699999995,73.025543000000084],[-104.984734,73.020538000000045],[-104.99527,73.015823000000012],[-105.031677,73.004166000000055],[-105.0750119999999,72.997208000000057],[-105.08833300000003,72.994141000000127],[-105.13639799999993,72.978867000000037],[-105.14695699999999,72.974152000000004],[-105.22582999999997,72.933044000000109],[-105.30304699999994,72.951096000000007],[-105.31916799999999,72.954163000000108],[-105.33972199999999,72.955551000000014],[-105.354446,72.953323000000069],[-105.35610999999994,72.947754000000032],[-105.33139,72.910538000000088],[-105.32417299999997,72.906096999999988],[-105.279449,72.885543999999925],[-105.25361599999997,72.878585999999984],[-105.237503,72.875534000000016],[-105.21140300000002,72.868591000000038],[-105.20417799999996,72.864151000000049],[-105.26222199999989,72.848602000000085],[-105.27555799999993,72.845534999999984],[-105.28999299999987,72.847762999999986],[-105.38305699999995,72.866653000000099],[-105.43611099999993,72.896652000000131],[-105.44332900000001,72.90109300000006],[-105.45612299999999,72.915267999999969],[-105.458618,72.925536999999963],[-105.45694699999996,72.931366000000025],[-105.45834400000001,72.936371000000065],[-105.46250900000001,72.941360000000032],[-105.57472199999995,72.984421000000054],[-105.73277299999995,73.047759999999982],[-105.91388699999999,73.145538000000101],[-105.94638099999992,73.160263000000043],[-106.09249899999992,73.199706999999933],[-106.08194700000001,73.241088999999988],[-106.32195300000001,73.338882000000126],[-106.44776899999994,73.393051000000128],[-106.45556599999998,73.397491000000002],[-106.46611000000001,73.401382000000069],[-106.72028399999999,73.44999700000011],[-106.88137799999998,73.463318000000072],[-106.89806399999992,73.461929000000055],[-106.91610699999995,73.461380000000077],[-106.9375,73.462494000000106],[-107,73.469711000000018],[-107.016953,73.4727630000001],[-107.02749599999999,73.476379000000009],[-107.03555299999994,73.480820000000108],[-107.03415699999999,73.486374000000069],[-107.02583300000003,73.498596000000077],[-107.01834100000002,73.504990000000078],[-107.00974299999996,73.510544000000095],[-106.97112299999992,73.531661999999983],[-106.92944299999999,73.550537000000134],[-106.89334100000002,73.562484999999981],[-106.74526999999995,73.648041000000148],[-106.70028699999995,73.676085999999941],[-106.65805099999994,73.695251000000098],[-106.64584399999995,73.699141999999995],[-106.61833200000001,73.705261000000007],[-106.57224300000001,73.711928999999998],[-106.32721700000002,73.72665400000011],[-106.18554699999999,73.733597000000145],[-106.03916900000002,73.731368999999972],[-105.80055199999998,73.726928999999984],[-105.72666900000002,73.728592000000049],[-105.68028300000003,73.734985000000052],[-105.66639699999996,73.737761999999918],[-105.637787,73.74443100000002],[-105.61277799999993,73.752212999999983],[-105.58473200000003,73.758041000000048],[-105.569458,73.760269000000051],[-105.53527799999995,73.762771999999984],[-105.51666299999994,73.763321000000133],[-105.30387899999994,73.762206999999989],[-105.28388999999999,73.761658000000011],[-105.16999800000002,73.755554000000018],[-105.14862099999999,73.754166000000055],[-105.10749799999991,73.743590999999981],[-105.08944700000001,73.735260000000039]],[[-80.142226999999878,73.696640000000116],[-80.108611999999994,73.693863000000022],[-80.074448000000018,73.697479000000044],[-79.901397999999972,73.698318000000029],[-79.625548999999978,73.670821999999987],[-79.586120999999991,73.66276600000009],[-79.523055999999997,73.646652000000131],[-79.493056999999965,73.637772000000098],[-79.476394999999911,73.634154999999964],[-79.451949999999954,73.630539000000113],[-79.373610999999983,73.63081399999993],[-78.96166999999997,73.632750999999985],[-78.946105999999986,73.634720000000016],[-78.934433000000013,73.638596000000064],[-78.931106999999997,73.642487000000131],[-78.928878999999938,73.647491000000116],[-78.924164000000019,73.650269000000094],[-78.912505999999894,73.653869999999984],[-78.887787000000003,73.656647000000078],[-78.861389000000031,73.658324999999991],[-78.64416499999993,73.656647000000078],[-78.40834000000001,73.661652000000117],[-78.206664999999987,73.667755000000056],[-78.166397000000018,73.668045000000063],[-78.12777699999998,73.664703000000145],[-78.113327000000027,73.663040000000024],[-78.064437999999996,73.651932000000045],[-78.009734999999978,73.63749700000011],[-77.965285999999935,73.628310999999997],[-77.823058999999944,73.603867000000037],[-77.738601999999958,73.591933999999981],[-77.608046999999999,73.574158000000011],[-77.535004000000015,73.565536000000009],[-77.453887999999949,73.559708000000057],[-77.424437999999952,73.554703000000018],[-77.395554000000004,73.545822000000101],[-77.373046999999929,73.529709000000082],[-77.363327000000027,73.524703999999986],[-77.351394999999968,73.519988999999953],[-77.338333000000034,73.516663000000108],[-77.294723999999974,73.512772000000041],[-77.237212999999997,73.509994999999947],[-77.203063999999927,73.505554000000018],[-77.191939999999988,73.501389000000017],[-77.148620999999991,73.476379000000009],[-77.153610000000015,73.468048000000067],[-77.157226999999978,73.458603000000039],[-77.055266999999958,73.366379000000052],[-77.048888999999917,73.36192299999999],[-76.999435000000005,73.345825000000104],[-76.969726999999978,73.337203999999986],[-76.91361999999998,73.324432000000002],[-76.893340999999964,73.321105999999986],[-76.884170999999924,73.321655000000078],[-76.878875999999934,73.324158000000068],[-76.858611999999994,73.32638500000013],[-76.837219000000005,73.327209000000096],[-76.736389000000031,73.324706999999989],[-76.72193900000002,73.322495000000117],[-76.708054000000004,73.317764000000011],[-76.579726999999991,73.219711000000075],[-76.577498999999932,73.205551000000128],[-76.585006999999962,73.194427000000076],[-76.601944000000003,73.183319000000097],[-76.619720000000029,73.175812000000121],[-76.605270000000019,73.15914900000007],[-76.586945000000014,73.146378000000141],[-76.582229999999981,73.14387499999998],[-76.510559000000001,73.120254999999986],[-76.495543999999938,73.116928000000087],[-76.487502999999947,73.116089000000102],[-76.381942999999978,73.106093999999985],[-76.31361400000003,73.100540000000024],[-76.312499999999943,73.067490000000134],[-76.318068999999923,73.062759000000028],[-76.319457999999941,73.058318999999983],[-76.333068999999909,72.963607999999965],[-76.323059000000001,72.957214000000135],[-76.309433000000013,72.952484000000084],[-76.291671999999949,72.948868000000061],[-76.275283999999999,72.946640000000059],[-76.211945000000014,72.945526000000086],[-76.162216000000001,72.946365000000071],[-76.118606999999997,72.940262000000132],[-76.103607000000011,72.936371000000065],[-76.077224999999942,72.924988000000042],[-76.071670999999924,72.921097000000145],[-76.062209999999993,72.906937000000028],[-76.059432999999899,72.900818000000015],[-76.086394999999982,72.863602000000071],[-76.093886999999938,72.85803199999998],[-76.103881999999942,72.853043000000014],[-76.115279999999927,72.849426000000051],[-76.13110399999988,72.845534999999984],[-76.149993999999992,72.842209000000139],[-76.25140399999998,72.826385000000016],[-76.315552000000025,72.817214999999976],[-76.339721999999995,72.814987000000031],[-76.5625,72.812484999999981],[-76.581679999999949,72.812484999999981],[-76.601944000000003,72.813873000000058],[-76.618606999999884,72.816939999999988],[-76.634170999999981,72.820541000000048],[-76.662780999999995,72.829163000000051],[-76.681380999999931,72.831375000000094],[-76.72193900000002,72.833878000000084],[-76.740829000000019,72.833878000000084],[-76.767501999999922,72.833878000000084],[-76.891952999999944,72.830825999999945],[-76.937209999999993,72.830825999999945],[-77.084754999999973,72.839684000000148],[-77.101668999999958,72.84027100000003],[-77.143889999999942,72.841933999999981],[-77.226943999999946,72.846100000000035],[-77.265838999999914,72.849426000000051],[-77.314437999999939,72.85554500000012],[-77.365829000000019,72.864426000000037],[-77.40055799999999,72.870818999999983],[-77.416106999999954,72.874695000000088],[-77.447219999999959,72.879974000000061],[-77.522780999999952,72.886108000000092],[-77.704178000000013,72.897216999999955],[-77.723327999999981,72.896941999999967],[-77.860000999999954,72.893051000000071],[-77.904175000000009,72.891662999999994],[-77.997771999999941,72.888321000000019],[-78.107223999999917,72.88638300000008],[-78.236358999999993,72.893005000000016],[-78.273055999999997,72.890549000000021],[-78.297226000000023,72.887772000000098],[-78.486114999999984,72.86554000000001],[-78.62388599999997,72.848037999999974],[-78.865828999999962,72.804427999999973],[-79.047775000000001,72.771378000000141],[-79.161941999999897,72.750548999999978],[-79.209166999999923,72.744979999999998],[-79.296111999999994,72.737761999999975],[-79.359160999999972,72.733597000000145],[-79.382492000000013,72.733047000000113],[-79.400283999999999,72.733597000000145],[-79.429168999999945,72.735809000000017],[-79.543334999999956,72.74859600000002],[-79.62388599999997,72.763321000000133],[-79.927779999999927,72.842484000000013],[-79.972778000000005,72.854705999999965],[-79.998610999999983,72.86303700000002],[-80.009170999999924,72.872756999999922],[-80.120833999999945,72.978867000000037],[-80.151672000000019,73.011932000000115],[-80.181380999999931,73.043869000000086],[-80.181106999999997,73.050262000000032],[-80.164169000000015,73.061920000000043],[-80.147232000000031,73.071381000000031],[-80.134734999999921,73.084716999999955],[-80.131667999999991,73.08859300000006],[-80.128875999999991,73.09526100000005],[-80.122771999999998,73.11442599999998],[-80.110000999999954,73.179703000000018],[-80.114440999999999,73.186371000000008],[-80.134445000000028,73.209152000000017],[-80.143065999999919,73.216933999999981],[-80.15194699999995,73.222487999999942],[-80.216948999999943,73.243317000000104],[-80.238051999999982,73.24414100000007],[-80.415282999999931,73.24414100000007],[-80.61999499999996,73.264160000000004],[-80.760009999999909,73.274704000000042],[-80.797500999999954,73.276932000000045],[-80.876098999999954,73.32777399999992],[-80.876098999999954,73.338593000000003],[-80.872498000000007,73.424988000000099],[-80.820281999999963,73.489150999999993],[-80.80999799999995,73.644440000000088],[-80.857772999999952,73.74192800000003],[-80.771666999999923,73.749709999999993],[-80.683318999999983,73.755829000000006],[-80.560546999999872,73.76776099999995],[-80.434998000000007,73.766098000000056],[-80.37332200000003,73.761658000000011],[-80.353058000000033,73.759720000000073],[-80.320847000000015,73.753876000000048],[-80.30860899999999,73.75],[-80.29861499999987,73.745819000000097],[-80.265288999999996,73.730270000000019],[-80.223327999999924,73.715820000000065],[-80.192763999999954,73.707214000000135],[-80.15834000000001,73.699417000000039],[-80.142226999999878,73.696640000000116]],[[-73.354674999999929,68.329215999999974],[-73.328170999999998,68.328208999999958],[-73.31617,68.328712000000053],[-73.306830999999988,68.330544000000089],[-73.211670000000026,68.376923000000033],[-73.230559999999912,68.384155000000135],[-73.253066999999987,68.390823000000125],[-73.279448999999886,68.39498900000001],[-73.302779999999927,68.396102999999982],[-73.31806899999998,68.393051000000071],[-73.357498000000021,68.371368000000132],[-73.359725999999966,68.364989999999977],[-73.357773000000009,68.357483000000059],[-73.353057999999976,68.352478000000019],[-73.349166999999909,68.344986000000063],[-73.34722899999997,68.337494000000106],[-73.34944200000001,68.331100000000106],[-73.354674999999929,68.329215999999974],[-73.506667999999991,68.291367000000037],[-73.589721999999995,68.254715000000033],[-73.597777999999948,68.251937999999996],[-73.620834000000002,68.246093999999971],[-73.632216999999912,68.246643000000063],[-73.639724999999942,68.249709999999993],[-73.851668999999958,68.342209000000139],[-73.855834999999956,68.346649000000014],[-73.896117999999944,68.392211999999915],[-73.889449999999954,68.44470200000012],[-73.877486999999917,68.481093999999928],[-73.873610999999926,68.487762000000089],[-73.86721799999998,68.493042000000003],[-73.856110000000001,68.497481999999991],[-73.823623999999995,68.503326000000015],[-73.806655999999975,68.503876000000048],[-73.749999999999943,68.510817999999972],[-73.738891999999964,68.514999000000046],[-73.730285999999978,68.519989000000066],[-73.725829999999974,68.525818000000072],[-73.704726999999934,68.656647000000021],[-73.75389100000001,68.683594000000085],[-73.761397999999986,68.686371000000008],[-73.774719000000005,68.689697000000024],[-73.865828999999906,68.705826000000002],[-73.893889999999999,68.707764000000111],[-74.094161999999983,68.719986000000063],[-74.106109999999944,68.690536000000009],[-73.99221799999998,68.624695000000031],[-73.888061999999877,68.561645999999939],[-73.881667999999991,68.55664100000007],[-73.881667999999991,68.549713000000111],[-73.903609999999958,68.52777100000003],[-73.921386999999925,68.511932000000115],[-73.941939999999988,68.504715000000033],[-73.990279999999927,68.492751999999996],[-74.028335999999911,68.513610999999969],[-74.171660999999972,68.521652000000017],[-74.221114999999998,68.52526899999998],[-74.351395000000025,68.536926000000108],[-74.366104000000007,68.539154000000053],[-74.379439999999931,68.542205999999965],[-74.391112999999962,68.546371000000136],[-74.514175000000023,68.599991000000045],[-74.526397999999972,68.610809000000017],[-74.532776000000013,68.62164300000012],[-74.531676999999945,68.626373000000115],[-74.598891999999921,68.681930999999963],[-74.701950000000011,68.71887200000009],[-74.712218999999948,68.723038000000031],[-74.726105000000018,68.730270000000132],[-74.728333000000021,68.737198000000092],[-74.724715999999944,68.766097999999943],[-74.71945199999999,68.770537999999988],[-74.664168999999958,68.774155000000121],[-74.620833999999888,68.782486000000006],[-74.591949,68.788879000000009],[-74.576949999999954,68.793045000000063],[-74.565276999999924,68.802199999999914],[-74.546386999999982,68.822494999999947],[-74.548049999999989,68.828598000000113],[-74.551392000000021,68.830551000000014],[-74.604172000000005,68.841660000000104],[-74.634170999999924,68.846374999999966],[-74.648055999999997,68.847214000000122],[-74.666655999999932,68.845825000000104],[-74.678328999999962,68.842758000000003],[-74.687377999999967,68.835991000000035],[-74.718718999999965,68.824821000000043],[-74.723052999999936,68.822318999999993],[-74.721221999999955,68.821152000000041],[-74.71421799999996,68.82098400000001],[-74.705222999999933,68.821655000000078],[-74.689437999999939,68.819716999999969],[-74.671660999999972,68.818877999999984],[-74.660277999999892,68.81581100000011],[-74.639724999999999,68.807479999999998],[-74.633330999999941,68.79693600000013],[-74.635009999999966,68.793320000000108],[-74.648055999999997,68.789429000000041],[-74.665832999999964,68.786652000000117],[-74.771666999999979,68.774155000000121],[-74.917769999999962,68.801375999999948],[-74.913894999999968,68.81721500000009],[-74.837508999999955,68.840820000000065],[-74.787780999999995,68.854431000000034],[-74.764167999999984,68.872040000000027],[-74.74017299999997,68.872710999999981],[-74.72222899999997,68.934143000000006],[-74.862945999999909,68.954178000000013],[-74.872779999999977,68.955001999999979],[-74.887610999999993,68.954178000000013],[-74.898108999999977,68.952515000000062],[-74.920113000000015,68.946671000000038],[-74.935944000000006,68.942001000000005],[-75,68.937607000000071],[-75.005004999999926,68.929977000000065],[-75.033614999999884,68.926085999999998],[-75.042770000000019,68.928314],[-75.041945999999882,68.930267000000129],[-75.021118000000001,68.953049000000021],[-74.962340999999981,68.972824000000003],[-74.953002999999967,68.978484999999978],[-74.915337000000022,68.992821000000049],[-74.907668999999885,68.993988000000002],[-74.764724999999999,69.019440000000031],[-74.748336999999992,69.021378000000141],[-74.735000999999954,69.021927000000119],[-74.729445999999996,69.019440000000031],[-74.758057000000008,69.008880999999974],[-74.752228000000002,69.002486999999974],[-74.675003000000004,69.006943000000035],[-74.65834000000001,69.008330999999941],[-74.642776000000026,69.011658000000068],[-74.638061999999991,69.016098000000113],[-74.641113000000018,69.021378000000141],[-74.652495999999928,69.040267999999912],[-74.785827999999981,69.076385000000073],[-74.820846999999958,69.082214000000079],[-74.834166999999923,69.081664999999987],[-74.845839999999953,69.078598000000056],[-74.948607999999922,69.048874000000012],[-75.043334999999956,69.013321000000019],[-75.051940999999886,69.008605999999986],[-75.036117999999931,68.992203000000075],[-75.037780999999882,68.985809000000074],[-75.071395999999936,68.921097000000032],[-75.075561999999934,68.915817000000004],[-75.109160999999858,68.894989000000123],[-75.116394000000014,68.890823000000012],[-75.124161000000015,68.888046000000088],[-75.139724999999999,68.884720000000073],[-75.169998000000021,68.886383000000023],[-75.192490000000021,68.891663000000051],[-75.201950000000011,68.894440000000145],[-75.315826000000015,68.942200000000128],[-75.373885999999914,68.968872000000033],[-75.383330999999998,68.974426000000051],[-75.400283999999999,68.985535000000141],[-75.422500999999954,69.001937999999996],[-75.445830999999941,69.016937000000041],[-75.454452999999944,69.021102999999982],[-75.466399999999965,69.021378000000141],[-75.478881999999999,69.019714000000135],[-75.494155999999975,69.01638800000012],[-75.528335999999967,69.005829000000062],[-75.565552000000025,68.993591000000038],[-75.573623999999995,68.988585999999941],[-75.578612999999962,68.984146000000123],[-75.580841000000021,68.975540000000024],[-75.574172999999917,68.968323000000112],[-75.537780999999939,68.951096000000064],[-75.506957999999941,68.939696999999967],[-75.499724999999955,68.934708000000001],[-75.494995000000017,68.930267000000129],[-75.534163999999976,68.90387000000004],[-75.542770000000019,68.898879999999963],[-75.56527699999998,68.891373000000044],[-75.603881999999942,68.879700000000014],[-75.647780999999952,68.869140999999956],[-75.809158000000025,68.836928999999998],[-75.976104999999961,68.791092000000106],[-75.979445999999996,68.787201000000039],[-75.985001000000011,68.783875000000023],[-75.995543999999938,68.779434000000094],[-76.008620999999948,68.775543000000027],[-76.049437999999952,68.764435000000049],[-76.227218999999991,68.721100000000035],[-76.327224999999999,68.697478999999987],[-76.376098999999954,68.687484999999981],[-76.420546999999999,68.679152999999985],[-76.436385999999857,68.677200000000028],[-76.456664999999987,68.675262000000089],[-76.540282999999988,68.673308999999961],[-76.559432999999956,68.673035000000027],[-76.575561999999991,68.674149000000057],[-76.59056099999998,68.676376000000062],[-76.628875999999991,68.68691999999993],[-76.660827999999981,68.699416999999926],[-76.674164000000019,68.71026599999999],[-76.680283000000031,68.716094999999996],[-76.688599000000011,68.733597000000032],[-76.689437999999996,68.740540000000067],[-76.688048999999978,68.746933000000013],[-76.678604000000007,68.758330999999998],[-76.666945999999996,68.769150000000081],[-76.636947999999961,68.78166200000004],[-76.608611999999937,68.794144000000074],[-76.577498999999932,68.808318999999983],[-76.561385999999914,68.818054000000018],[-76.546111999999994,68.833054000000004],[-76.537216000000001,68.842209000000082],[-76.523055999999997,68.863876000000118],[-76.521666999999979,68.870254999999986],[-76.523894999999925,68.876373000000058],[-76.532775999999956,68.880538999999999],[-76.544158999999979,68.883041000000048],[-76.559432999999956,68.88499500000006],[-76.576674999999966,68.88499500000006],[-76.59333799999996,68.883331000000055],[-76.606658999999922,68.883041000000048],[-76.610000999999954,68.884720000000073],[-76.644164999999987,68.911102000000142],[-76.655562999999972,68.924698000000092],[-76.655562999999972,68.930542000000116],[-76.642775999999969,69.003876000000105],[-76.640563999999927,69.009155000000078],[-76.625548999999978,69.018326000000059],[-76.603607000000011,69.025818000000015],[-76.578338999999914,69.032211000000132],[-76.543335000000013,69.038315000000011],[-76.501403999999923,69.042755],[-76.422500999999954,69.050537000000134],[-76.368606999999997,69.055251999999996],[-76.348891999999921,69.054976999999951],[-76.33277899999996,69.05442800000003],[-76.240279999999927,69.048325000000091],[-76.208054000000004,69.044144000000017],[-76.140563999999927,69.034714000000122],[-76.124435000000005,69.031096999999988],[-76.114165999999955,69.027771000000143],[-76.091674999999952,69.011658000000068],[-76.080001999999922,69.006378000000041],[-76.068619000000012,69.003876000000105],[-75.996932999999956,69.003036000000066],[-75.969161999999983,69.010269000000108],[-75.904998999999918,69.036925999999994],[-75.813889000000017,69.067763999999954],[-75.655838000000017,69.080550999999957],[-75.637786999999946,69.079987000000017],[-75.619155999999919,69.081374999999923],[-75.6058349999999,69.08526599999999],[-75.598891999999978,69.089432000000102],[-75.593886999999938,69.099716000000114],[-75.569732999999928,69.15277100000003],[-75.569457999999997,69.158324999999991],[-75.571121000000005,69.163879000000009],[-75.591674999999952,69.22164900000007],[-75.603057999999976,69.238876000000118],[-75.619719999999973,69.249419999999986],[-75.669723999999917,69.271103000000096],[-75.759734999999978,69.304977000000122],[-75.783324999999991,69.313599000000124],[-75.956389999999885,69.366088999999931],[-75.970275999999956,69.36914100000007],[-76.168610000000001,69.411377000000073],[-76.202498999999932,69.413879000000122],[-76.241942999999935,69.413315000000011],[-76.298049999999989,69.407760999999994],[-76.417770000000019,69.44720500000011],[-76.607497999999964,69.529709000000139],[-76.637787000000003,69.546645999999953],[-76.641112999999962,69.554153000000099],[-76.641678000000013,69.557480000000055],[-76.626662999999951,69.581375000000037],[-76.61999499999996,69.586380000000077],[-76.611663999999962,69.591095000000109],[-76.489165999999898,69.648331000000042],[-76.477782999999988,69.652206000000035],[-76.459166999999979,69.654434000000037],[-76.442215000000033,69.653046000000074],[-76.347777999999948,69.64027400000009],[-76.261397999999986,69.626647999999932],[-76.226943999999946,69.637206999999989],[-76.186110999999983,69.659714000000065],[-76.182495000000017,69.663605000000132],[-76.187774999999988,69.665268000000083],[-76.226105000000018,69.664703000000031],[-76.295546999999942,69.660263000000043],[-76.376388999999961,69.671371000000022],[-76.388335999999924,69.673874000000012],[-76.397506999999962,69.678040000000067],[-76.399733999999853,69.684143000000006],[-76.450561999999934,69.690262000000075],[-76.537780999999939,69.696091000000081],[-76.551666000000012,69.695526000000029],[-76.634170999999981,69.683594000000085],[-76.641953000000001,69.679977000000122],[-76.638900999999976,69.673309000000131],[-76.631942999999922,69.669708000000071],[-76.616394000000014,69.667480000000126],[-76.581679999999949,69.666930999999977],[-76.557769999999948,69.673309000000131],[-76.542769999999905,69.674698000000149],[-76.530838000000017,69.672211000000061],[-76.517776000000026,69.662765999999976],[-76.522780999999952,69.65248100000008],[-76.535004000000015,69.638596000000007],[-76.553329000000019,69.625259000000142],[-76.561661000000015,69.620254999999986],[-76.683883999999978,69.56581100000011],[-76.691939999999988,69.563034000000016],[-76.707503999999972,69.559417999999994],[-76.730285999999978,69.560256999999922],[-76.844726999999921,69.576096000000064],[-77.136947999999961,69.626373000000115],[-77.18582200000003,69.637496999999996],[-77.191665999999941,69.639709000000039],[-77.200561999999991,69.646103000000096],[-77.200561999999991,69.64888000000002],[-77.194442999999922,69.657211000000075],[-77.164444000000003,69.676086000000055],[-77.155562999999972,69.680541999999946],[-77.144454999999994,69.682205000000067],[-76.949431999999945,69.695526000000029],[-76.939437999999939,69.679703000000018],[-76.929992999999968,69.677765000000079],[-76.896666999999979,69.679152999999985],[-76.868056999999965,69.684708000000057],[-76.829726999999934,69.695816000000036],[-76.820281999999963,69.699417000000096],[-76.80471799999998,69.708603000000039],[-76.793883999999991,69.718597000000045],[-76.791945999999996,69.721649000000014],[-76.781386999999995,69.743042000000116],[-76.781386999999995,69.748596000000077],[-76.835280999999952,69.815811000000053],[-76.851944000000003,69.813599000000011],[-76.933059999999898,69.809708000000114],[-77.026672000000019,69.811919999999986],[-77.150283999999999,69.816086000000098],[-77.293059999999855,69.828873000000101],[-77.308884000000035,69.830826000000002],[-77.310546999999985,69.835814999999968],[-77.307770000000005,69.840271000000087],[-77.297774999999888,69.851089000000059],[-77.28472899999997,69.860535000000027],[-77.25418099999996,69.87692300000009],[-77.243056999999965,69.881362999999908],[-77.208344000000011,69.886658000000011],[-77.116652999999928,69.901382000000012],[-76.992767000000015,69.927199999999971],[-76.981673999999941,69.931656000000089],[-76.974715999999944,69.935806000000071],[-76.980559999999969,69.938034000000016],[-76.992767000000015,69.940536000000122],[-77.002791999999943,69.940536000000122],[-77.125274999999931,69.925812000000064],[-77.141112999999962,69.922485000000108],[-77.164444000000003,69.915268000000026],[-77.188323999999909,69.906097000000045],[-77.226943999999946,69.894989000000066],[-77.260284000000013,69.887496999999939],[-77.438048999999921,69.857208000000071],[-77.508347000000015,69.826660000000118],[-77.455565999999976,69.798325000000091],[-77.444442999999978,69.789428999999984],[-77.449158000000011,69.784714000000122],[-77.551391999999964,69.747756999999922],[-77.559158000000025,69.744980000000055],[-77.574722000000008,69.741363999999976],[-77.597777999999948,69.739151000000049],[-77.608611999999937,69.740265000000022],[-77.615829000000019,69.741653000000099],[-77.626388999999904,69.744980000000055],[-77.637787000000003,69.753875999999991],[-77.645279000000016,69.760818000000086],[-77.649993999999992,69.769714000000022],[-77.668059999999969,69.836655000000064],[-77.691939999999931,69.963043000000027],[-77.695267000000001,69.98803700000002],[-77.694442999999922,70.000275000000045],[-77.693054000000018,70.00610400000005],[-77.68582200000003,70.023041000000092],[-77.678604000000007,70.034987999999998],[-77.672500999999954,70.045532000000094],[-77.669723999999974,70.052200000000028],[-77.667220999999984,70.062194999999974],[-77.665008999999941,70.088043000000084],[-77.665557999999976,70.106934000000138],[-77.668334999999956,70.113037000000077],[-77.673888999999974,70.11970500000001],[-77.671936000000017,70.177199999999914],[-77.672500999999954,70.180542000000059],[-77.678328999999962,70.187759000000142],[-77.685271999999998,70.191360000000032],[-77.810821999999973,70.24552900000009],[-77.884170999999981,70.2586060000001],[-77.892226999999878,70.258041000000048],[-78.133621000000005,70.215271000000087],[-78.239166000000012,70.203873000000101],[-78.345000999999911,70.19720500000011],[-78.351395000000025,70.197479000000044],[-78.364715999999987,70.201096000000007],[-78.401672000000019,70.212493999999992],[-78.405272999999966,70.214157000000114],[-78.480835000000013,70.288589000000002],[-78.406113000000005,70.326935000000049],[-78.396118000000001,70.328049000000021],[-78.389175000000023,70.332214000000022],[-78.398894999999925,70.336380000000077],[-78.425827000000027,70.3477630000001],[-78.436661000000015,70.351088999999945],[-78.486389000000031,70.356934000000081],[-78.504180999999903,70.35803199999998],[-78.521118000000001,70.357758000000047],[-78.536391999999978,70.356369000000029],[-78.55749499999996,70.351379000000009],[-78.573623999999995,70.345534999999984],[-78.579726999999878,70.343048000000067],[-78.583327999999995,70.336929000000055],[-78.581115999999952,70.334152000000131],[-78.569167999999991,70.325546000000031],[-78.564712999999983,70.320267000000058],[-78.56138599999997,70.314148000000046],[-78.564712999999983,70.310256999999979],[-78.578888000000006,70.309708000000001],[-78.655272999999909,70.346939000000134],[-78.662506000000008,70.350540000000024],[-78.704726999999934,70.374695000000031],[-78.74749799999995,70.438873000000058],[-78.858337000000006,70.453873000000044],[-78.903335999999911,70.449416999999926],[-78.944442999999865,70.450271999999984],[-79.031951999999933,70.454987000000017],[-79.070557000000008,70.469711000000075],[-79.095550999999887,70.493042000000116],[-79.100280999999995,70.49832200000003],[-79.081680000000006,70.529984000000127],[-79.068068999999923,70.536377000000073],[-78.893616000000009,70.590546000000131],[-78.879989999999964,70.594711000000132],[-78.860274999999888,70.59664900000007],[-78.832779000000016,70.594437000000028],[-78.821945000000028,70.589706000000092],[-78.815551999999911,70.57748400000014],[-78.816100999999946,70.573318000000029],[-78.815001999999879,70.571930000000123],[-78.806655999999975,70.564986999999974],[-78.788054999999929,70.556091000000038],[-78.766112999999905,70.550261999999975],[-78.733321999999987,70.547211000000004],[-78.718886999999938,70.547760000000096],[-78.720276000000013,70.549149000000114],[-78.84056099999998,70.634995000000117],[-78.851944000000003,70.638046000000088],[-78.861938000000009,70.637206999999989],[-78.868331999999953,70.63220200000012],[-78.867492999999968,70.628586000000041],[-78.868057000000022,70.624419999999986],[-78.871933000000013,70.621918000000051],[-78.879989999999964,70.621093999999914],[-78.912215999999944,70.621368000000018],[-78.965285999999935,70.632751000000042],[-78.976943999999946,70.635817999999972],[-78.994155999999975,70.643326000000002],[-78.999161000000015,70.651382000000069],[-79.000838999999928,70.662766000000147],[-78.994720000000029,70.672484999999995],[-79.000564999999995,70.676926000000094],[-79.009445000000028,70.679702999999961],[-79.025283999999999,70.680267000000129],[-79.041107000000011,70.678588999999988],[-79.057220000000029,70.672759999999982],[-79.152221999999995,70.627762000000075],[-79.158051,70.622208000000114],[-79.155838000000017,70.617476999999951],[-79.14973399999991,70.613037000000134],[-79.136948000000018,70.610809000000017],[-79.097778000000005,70.610260000000039],[-79.068068999999923,70.615540000000124],[-79.143889999999999,70.453873000000044],[-79.159728999999913,70.43803400000013],[-79.174164000000019,70.428040000000124],[-79.18472300000002,70.423599000000024],[-79.209731999999974,70.418045000000006],[-79.223891999999978,70.419434000000024],[-79.23582499999992,70.423309000000017],[-79.268889999999999,70.436371000000008],[-79.291106999999954,70.446930000000066],[-79.290557999999919,70.453598000000056],[-79.291945999999996,70.459717000000069],[-79.30221599999993,70.473602000000142],[-79.308333999999888,70.480270000000132],[-79.388061999999934,70.49275200000011],[-79.403610000000015,70.493316999999934],[-79.412780999999995,70.491652999999928],[-79.420546999999942,70.488876000000062],[-79.575561999999934,70.42942800000003],[-79.58555599999994,70.421371000000022],[-79.591110000000015,70.413605000000018],[-79.591384999999946,70.40914900000007],[-79.588897999999972,70.399428999999998],[-79.575835999999981,70.389984000000084],[-79.563613999999973,70.385544000000095],[-79.42361499999987,70.355820000000108],[-79.420546999999942,70.359710999999947],[-79.416107000000011,70.363602000000014],[-79.406661999999869,70.367477000000008],[-79.386948000000018,70.37164300000012],[-79.371657999999968,70.371093999999971],[-79.357772999999895,70.36970500000001],[-79.317229999999995,70.360260000000096],[-79.295837000000006,70.353043000000014],[-79.286666999999852,70.349716000000058],[-79.266112999999962,70.341094999999939],[-79.252791999999999,70.333327999999995],[-79.243057000000022,70.324707000000103],[-79.233321999999873,70.318603999999937],[-79.224715999999944,70.316085999999984],[-79.209441999999967,70.313309000000061],[-79.125823999999909,70.304703000000131],[-79.108886999999925,70.304977000000065],[-79.099730999999963,70.308594000000028],[-79.086670000000026,70.317764000000068],[-79.088333000000034,70.324707000000103],[-79.090560999999923,70.329437000000098],[-79.085830999999985,70.33859300000006],[-79.070847000000015,70.340820000000122],[-79.056655999999919,70.341369999999984],[-79.038895000000025,70.340546000000018],[-79.027221999999995,70.339432000000045],[-78.98832699999997,70.331375000000037],[-78.966659999999933,70.323318000000086],[-78.939162999999951,70.311096000000134],[-78.921660999999915,70.300812000000064],[-78.790558000000033,70.205551000000014],[-78.777221999999995,70.194976999999994],[-78.763061999999991,70.183593999999971],[-78.753066999999874,70.169434000000081],[-78.74888599999997,70.162201000000039],[-78.737502999999947,70.114989999999977],[-78.688599000000011,70.054977000000122],[-78.683060000000012,70.046371000000022],[-78.680282999999974,70.040268000000083],[-78.664168999999958,70.004166000000112],[-78.662506000000008,69.983047000000113],[-78.662506000000008,69.973037999999917],[-78.665008999999998,69.961380000000077],[-78.676392000000021,69.945250999999985],[-78.687774999999931,69.934417999999994],[-78.704177999999899,69.924148999999943],[-78.791945999999996,69.891098],[-78.84973100000002,69.886107999999979],[-79.06639100000001,69.878310999999997],[-79.17860399999995,69.883881000000088],[-79.200287000000003,69.884430000000009],[-79.37777699999998,69.886107999999979],[-79.408050999999944,69.88499500000006],[-79.474716000000001,69.878586000000041],[-79.526947000000007,69.871918000000051],[-79.540832999999964,69.868866000000139],[-79.553604000000007,69.864700000000028],[-79.563889000000017,69.859984999999995],[-79.576950000000011,69.855819999999994],[-79.604996000000028,69.849990999999989],[-79.636123999999938,69.848038000000031],[-79.682495000000017,69.848877000000016],[-79.694992000000013,69.851089000000059],[-79.707229999999981,69.855545000000006],[-79.773620999999991,69.885544000000039],[-79.780288999999982,69.890549000000078],[-79.786391999999978,69.897217000000012],[-79.796386999999925,69.908325000000048],[-79.801101999999958,69.915543000000014],[-79.800277999999992,69.917205999999965],[-79.803329000000019,69.927475000000015],[-79.833617999999944,69.949417000000039],[-79.891387999999949,69.973877000000073],[-80.053054999999915,69.997208000000114],[-80.168059999999969,70.006377999999984],[-80.196945000000028,70.008041000000105],[-80.232497999999964,70.007767000000001],[-80.263061999999934,70.002487000000087],[-80.27305599999994,69.999709999999993],[-80.292496000000028,69.98692299999999],[-80.307770000000005,69.981093999999985],[-80.31361400000003,69.980270000000019],[-80.326110999999912,69.980270000000019],[-80.336120999999991,69.982207999999957],[-80.434998000000007,70.004990000000078],[-80.45777899999996,70.013320999999962],[-80.466399999999965,70.018051000000014],[-80.47444200000001,70.024428999999998],[-80.485549999999932,70.029434000000037],[-80.547774999999945,70.04414399999996],[-80.561110999999983,70.046936000000073],[-80.577498999999875,70.048874000000012],[-80.597778000000005,70.048035000000027],[-80.652221999999938,70.038879000000065],[-80.669998000000021,70.039978000000076],[-80.787505999999951,70.050537000000134],[-80.906386999999995,70.070831000000055],[-81.06220999999988,70.085541000000035],[-81.225829999999974,70.09693900000002],[-81.285552999999993,70.095261000000107],[-81.378051999999968,70.092484000000013],[-81.429992999999968,70.093597000000102],[-81.462508999999955,70.09637500000008],[-81.603058000000033,70.113876000000005],[-81.698607999999922,70.128585999999984],[-81.711670000000026,70.130539000000113],[-81.728333000000021,70.132202000000007],[-81.745834000000002,70.1308140000001],[-81.756119000000012,70.12831099999994],[-81.763335999999924,70.123031999999967],[-81.761948000000018,70.117477000000065],[-81.737503000000004,70.093597000000102],[-81.718886999999881,70.079163000000051],[-81.709732000000031,70.074432000000115],[-81.687774999999874,70.067764000000125],[-81.670546999999942,70.065262000000075],[-81.625823999999966,70.062759000000085],[-81.558333999999888,70.056930999999963],[-81.539718999999934,70.053314],[-81.531113000000005,70.050812000000121],[-81.464721999999995,70.024703999999986],[-81.313613999999973,70.032211000000132],[-81.262221999999952,70.016388000000063],[-81.188599000000011,69.991089000000102],[-81.169723999999974,69.982483000000002],[-81.153335999999911,69.969986000000006],[-81.15306099999998,69.963608000000022],[-81.154174999999896,69.958327999999995],[-81.150283999999999,69.945815999999979],[-81.142775999999969,69.938034000000016],[-81.136123999999995,69.933043999999995],[-81.126389000000017,69.927765000000022],[-81.089721999999995,69.913879000000009],[-81.028335999999967,69.893600000000106],[-80.999999999999943,69.886107999999979],[-80.939986999999974,69.862762000000089],[-80.791381999999942,69.790542999999957],[-80.769164999999873,69.778045999999961],[-80.764175000000023,69.770537999999988],[-80.763061999999991,69.767212000000086],[-80.763061999999991,69.760818000000086],[-80.77555799999999,69.75221300000004],[-80.826110999999912,69.733597000000032],[-80.835555999999883,69.730270000000075],[-80.849441999999954,69.727203000000145],[-80.938889000000017,69.714705999999978],[-80.952498999999989,69.713882000000012],[-80.952224999999942,69.732758000000047],[-80.955841000000021,69.734420999999998],[-81.014449999999954,69.745529000000147],[-81.023055999999997,69.746094000000028],[-81.038054999999929,69.748596000000077],[-81.074172999999917,69.758040999999992],[-81.093063000000029,69.764434999999992],[-81.103058000000033,69.768326000000059],[-81.115554999999858,69.776931999999988],[-81.129439999999931,69.797760000000096],[-81.145843999999897,69.812485000000038],[-81.166945999999996,69.821380999999974],[-81.178878999999938,69.824996999999996],[-81.21665999999999,69.833603000000096],[-81.354445999999996,69.880264000000125],[-81.433059999999955,69.91304000000008],[-81.480559999999969,69.926926000000037],[-81.491942999999878,69.929703000000131],[-81.598891999999864,69.95248400000014],[-81.68249499999996,69.964431999999988],[-81.795273000000009,69.988586000000112],[-81.945540999999878,70.039978000000076],[-81.953887999999949,70.043868999999972],[-81.957229999999981,70.047211000000061],[-81.958618000000001,70.052765000000079],[-81.966659999999933,70.060532000000023],[-82.065001999999936,70.095825000000048],[-82.101104999999905,70.108032000000037],[-82.214447000000007,70.134995000000004],[-82.361663999999962,70.161377000000073],[-82.446655000000021,70.174988000000042],[-82.475006000000008,70.179428000000087],[-82.610001000000011,70.207214000000135],[-82.739165999999898,70.237762000000089],[-82.913894999999968,70.282761000000107],[-82.938888999999961,70.292205999999965],[-82.952224999999999,70.296370999999965],[-82.977782999999988,70.301926000000037],[-82.992766999999901,70.303588999999988],[-83.006957999999997,70.304703000000131],[-83.048049999999989,70.306931000000134],[-82.897781000000009,70.248595999999964],[-82.822234999999978,70.220825000000104],[-82.683608999999933,70.189972000000125],[-82.573623999999995,70.171646000000123],[-82.493880999999988,70.158875000000023],[-82.415282999999988,70.143051000000071],[-82.299727999999902,70.118866000000082],[-82.103058000000033,70.065262000000075],[-81.976395000000025,70.012206999999989],[-81.841674999999952,69.963318000000015],[-81.773330999999928,69.954162999999994],[-81.758056999999951,69.951660000000004],[-81.725006000000008,69.944138000000066],[-81.720001000000025,69.941085999999984],[-81.710830999999985,69.934142999999949],[-81.738327000000027,69.876083000000051],[-81.741378999999881,69.872757000000036],[-81.854171999999949,69.855545000000006],[-81.880279999999914,69.852478000000076],[-81.960281000000009,69.844146999999964],[-81.962783999999886,69.844711000000132],[-81.963333000000034,69.847487999999998],[-81.962508999999955,69.852768000000083],[-81.963333000000034,69.857757999999933],[-81.972503999999958,69.862487999999985],[-81.995270000000005,69.872481999999991],[-82.001677999999856,69.874694999999974],[-82.011123999999995,69.875809000000118],[-82.020003999999858,69.873871000000008],[-82.061661000000015,69.859421000000054],[-82.118880999999874,69.814697000000081],[-82.11860699999994,69.81053200000008],[-82.126098999999954,69.784988000000055],[-82.129715000000033,69.782486000000006],[-82.143340999999964,69.781372000000033],[-82.189986999999917,69.790267999999969],[-82.243606999999997,69.801650999999993],[-82.271392999999989,69.82638500000013],[-82.241668999999945,69.828048999999965],[-82.224441999999954,69.823608000000036],[-82.210280999999952,69.826096000000007],[-82.206664999999987,69.828598000000056],[-82.215011999999888,69.832763999999997],[-82.303054999999915,69.856644000000131],[-82.314163000000008,69.857483000000116],[-82.403609999999958,69.860260000000039],[-82.417769999999962,69.857757999999933],[-82.526397999999972,69.860809000000131],[-82.575012000000015,69.87081900000004],[-82.64416499999993,69.892487000000017],[-82.741378999999938,69.910248000000138],[-83.035278000000005,69.98803700000002],[-83.040832999999964,69.993042000000059],[-83.044448999999929,70.004166000000112],[-83.051392000000021,70.008605999999929],[-83.066665999999998,70.010818000000029],[-83.150283999999942,70.009720000000129],[-83.238892000000021,69.998871000000065],[-83.339171999999962,69.979431000000091],[-83.345276000000013,69.977203000000088],[-83.613891999999964,69.948868000000118],[-83.654175000000009,69.946365000000128],[-83.715285999999878,69.947754000000145],[-83.898620999999991,69.960815000000082],[-83.944716999999969,69.965820000000122],[-84.00167799999997,69.974152000000117],[-84.010833999999932,69.976653999999996],[-84.041672000000005,69.981369000000029],[-84.082779000000016,69.985260000000096],[-84.161666999999966,69.984985000000052],[-84.314162999999951,69.979706000000078],[-84.560546999999872,69.993866000000025],[-84.65695199999999,70.002487000000087],[-84.728606999999897,70.010269000000051],[-84.783889999999985,70.01887499999998],[-85.163054999999929,70.09137000000004],[-85.176102000000014,70.093048000000124],[-85.335280999999952,70.102478000000019],[-85.353881999999942,70.103317000000004],[-85.369155999999975,70.103591999999992],[-85.666397000000018,70.104705999999965],[-85.719727000000034,70.103591999999992],[-85.752501999999936,70.101929000000041],[-85.84722899999997,70.088882000000069],[-85.869445999999868,70.085541000000035],[-85.874999999999943,70.083328000000051],[-85.878051999999968,70.076935000000105],[-85.876099000000011,70.071930000000066],[-85.854720999999984,70.040817000000061],[-85.851669000000015,70.038315000000125],[-85.838333000000034,70.041931000000034],[-85.826950000000011,70.046371000000022],[-85.801940999999943,70.05442800000003],[-85.785278000000005,70.058319000000097],[-85.732772999999952,70.066939999999988],[-85.691665999999941,70.070541000000048],[-85.636397999999986,70.071930000000066],[-85.618057000000022,70.070831000000055],[-85.585555999999997,70.067490000000021],[-85.468833999999902,70.049263000000053],[-85.376937999999996,70.032211000000132],[-85.350280999999995,70.026382000000126],[-85.25140399999998,69.998322000000087],[-85.243056999999908,69.994979999999998],[-85.236114999999984,69.989150999999993],[-85.239440999999943,69.986649000000057],[-85.244995000000017,69.984421000000111],[-85.25778200000002,69.983871000000079],[-85.41339099999999,69.997429000000125],[-85.441230999999959,70.00093099999998],[-85.451224999999965,70.001769999999908],[-85.577498999999932,70.009995000000117],[-85.613892000000021,70.009995000000117],[-85.635009999999909,70.007491999999957],[-85.651947000000007,70.00360100000006],[-85.678328999999906,69.995254999999986],[-85.695267000000001,69.991363999999919],[-85.726943999999946,69.990539999999953],[-85.808334000000002,69.99859600000002],[-85.823333999999988,70.000275000000045],[-85.851944000000003,70.005554000000018],[-86.093063000000029,70.062484999999981],[-86.230835000000013,70.098602000000142],[-86.255004999999926,70.10554500000012],[-86.301940999999943,70.121643000000006],[-86.326400999999976,70.132202000000007],[-86.551940999999999,70.234984999999995],[-86.556106999999997,70.244705000000124],[-86.581115999999952,70.356934000000081],[-86.577224999999999,70.36554000000001],[-86.55860899999999,70.386932000000002],[-86.541945999999996,70.401382000000126],[-86.524170000000026,70.411652000000061],[-86.512787000000003,70.416382000000056],[-86.481109999999944,70.424698000000149],[-86.448333999999932,70.431655999999975],[-86.373046999999985,70.445816000000093],[-86.313048999999864,70.46276899999998],[-86.294997999999964,70.472762999999986],[-86.287506000000008,70.484420999999998],[-86.297774999999945,70.494141000000127],[-86.313889000000017,70.502777000000037],[-86.334441999999967,70.511658000000125],[-86.353607000000011,70.519440000000088],[-86.36221299999994,70.522765999999933],[-86.374709999999993,70.525269000000094],[-86.390839000000028,70.522217000000012],[-86.389998999999989,70.519989000000066],[-86.383895999999879,70.513611000000083],[-86.375548999999978,70.508881000000031],[-86.367767000000015,70.504715000000147],[-86.350280999999995,70.49832200000003],[-86.339721999999938,70.491652999999928],[-86.339447000000007,70.486374000000126],[-86.34056099999998,70.483870999999965],[-86.363327000000027,70.474152000000004],[-86.37388599999997,70.470261000000107],[-86.407501000000025,70.459991000000002],[-86.51568599999996,70.433640000000025],[-86.565001999999936,70.425537000000134],[-86.578338999999971,70.422211000000118],[-86.589721999999995,70.417479999999955],[-86.62777699999998,70.395538000000101],[-86.651397999999972,70.374695000000031],[-86.662216000000001,70.361099000000081],[-86.65943900000002,70.357208000000014],[-86.638335999999924,70.324432000000058],[-86.647232000000031,70.319443000000092],[-86.655563000000029,70.318878000000041],[-86.839721999999995,70.320267000000058],[-86.861938000000009,70.322220000000016],[-86.876099000000011,70.326096000000064],[-86.881103999999937,70.329711999999972],[-86.990554999999915,70.431655999999975],[-86.988892000000021,70.435532000000023],[-86.982497999999964,70.438873000000058],[-86.953613000000018,70.442474000000118],[-86.936935000000005,70.443313999999987],[-86.92471299999994,70.446091000000081],[-86.922775000000001,70.447754000000032],[-86.921386999999925,70.451660000000061],[-86.92193599999996,70.455550999999957],[-86.928329000000019,70.460541000000035],[-86.937209999999936,70.463608000000136],[-86.953338999999971,70.467209000000025],[-86.967772999999909,70.468048000000124],[-86.996384000000035,70.467484000000013],[-87.034164000000033,70.464157000000057],[-87.072509999999966,70.457489000000123],[-87.08944699999995,70.453323000000012],[-87.132767000000001,70.439148000000102],[-87.140563999999983,70.434981999999991],[-87.182220000000029,70.399428999999998],[-87.184998000000007,70.388596000000007],[-87.05749499999996,70.381653000000028],[-87.043883999999991,70.379974000000004],[-87.031676999999945,70.377472000000125],[-87.010558999999944,70.37164300000012],[-86.991378999999995,70.364150999999993],[-86.981109999999944,70.35803199999998],[-86.972777999999948,70.351929000000041],[-86.976395000000025,70.284714000000065],[-86.985824999999977,70.281662000000097],[-86.999434999999949,70.280548000000124],[-87.009170999999924,70.281097000000102],[-87.107498000000021,70.28804000000008],[-87.184433000000013,70.295532000000037],[-87.255004999999983,70.30664100000007],[-87.5625,70.322768999999937],[-87.673614999999984,70.319153000000085],[-87.669998000000021,70.298598999999967],[-87.643889999999999,70.295822000000044],[-87.628601000000003,70.29304500000012],[-87.61721799999998,70.289429000000098],[-87.610275000000001,70.284714000000065],[-87.613327000000027,70.281936999999971],[-87.62388599999997,70.278046000000074],[-87.704177999999956,70.257217000000082],[-87.77694699999995,70.24331699999999],[-87.796951000000035,70.240265000000079],[-87.833892999999989,70.238037000000134],[-87.8663939999999,70.238876000000062],[-87.914444000000003,70.24136400000009],[-87.923049999999989,70.242751999999996],[-87.935546999999985,70.24693300000007],[-88.012825000000021,70.277267000000109],[-88.088165000000004,70.285095000000126],[-88.138610999999912,70.296097000000032],[-88.250564999999938,70.321381000000031],[-88.263061999999934,70.325272000000098],[-88.264724999999942,70.328049000000021],[-88.256957999999997,70.333878000000027],[-88.214171999999962,70.351379000000009],[-88.20666499999993,70.352478000000133],[-88.061774999999955,70.329544000000055],[-88.05494699999997,70.327369999999974],[-88.050109999999904,70.325042999999994],[-88.038283999999919,70.315536000000122],[-88.030784999999923,70.314033999999992],[-88.02427699999987,70.313202000000103],[-87.994445999999982,70.31203499999998],[-87.916397000000018,70.301926000000037],[-87.901671999999905,70.304428000000144],[-87.888610999999969,70.308029000000033],[-87.879989999999964,70.311371000000122],[-87.882492000000013,70.316375999999991],[-87.889998999999989,70.321930000000009],[-87.914718999999991,70.331665000000044],[-88.083618000000001,70.378036000000066],[-88.111938000000009,70.384155000000078],[-88.166945999999996,70.394440000000031],[-88.374434999999949,70.432205000000124],[-88.439986999999917,70.438583000000051],[-88.579177999999956,70.450271999999984],[-88.670272999999952,70.453598000000056],[-88.679442999999992,70.453598000000056],[-88.693053999999961,70.455261000000121],[-88.797775000000001,70.489700000000028],[-88.897506999999962,70.53276100000005],[-88.914443999999889,70.546096999999975],[-88.985824999999863,70.608322000000101],[-89.00389100000001,70.624984999999981],[-89.009170999999981,70.636383000000023],[-88.999999999999943,70.645538000000045],[-88.999725000000012,70.651657000000057],[-89.005279999999914,70.656936999999971],[-89.076674999999966,70.696930000000009],[-89.105834999999956,70.707489000000066],[-89.118880999999988,70.711380000000133],[-89.143889999999942,70.717209000000139],[-89.203888000000006,70.737198000000035],[-89.261123999999995,70.759720000000129],[-89.285278000000005,70.769714000000135],[-89.330565999999919,70.791931000000034],[-89.369719999999973,70.814697000000081],[-89.374161000000015,70.819153000000142],[-89.448333999999988,70.902481000000023],[-89.447219999999902,70.906647000000078],[-89.443603999999937,70.910262999999929],[-89.432495000000017,70.915268000000026],[-89.416397000000018,70.918594000000041],[-89.371658000000025,70.925812000000064],[-89.298614999999927,70.933043999999995],[-89.222777999999948,70.935531999999967],[-89.20944199999991,70.939147999999989],[-89.205840999999964,70.942749000000049],[-89.188599000000011,70.960815000000025],[-89.195267000000001,70.968323000000055],[-89.205565999999919,70.973602000000028],[-89.270279000000016,70.983597000000145],[-89.315276999999924,70.991653000000042],[-89.340560999999923,70.997482000000048],[-89.354720999999927,71.001937999999939],[-89.49499499999996,71.0577550000001],[-89.549727999999959,71.088593000000117],[-89.491378999999938,71.092209000000139],[-89.469726999999978,71.091933999999924],[-89.228333000000021,71.072768999999994],[-89.216948999999943,71.06999200000007],[-89.208617999999944,71.063034000000073],[-89.215285999999935,71.056641000000127],[-89.218063000000029,71.050812000000121],[-89.212509000000011,71.045532000000037],[-89.203063999999983,71.03804000000008],[-89.196655000000021,71.035263000000043],[-89.178604000000007,71.031372000000147],[-89.134444999999971,71.026932000000102],[-89.117767000000015,71.026657000000114],[-89.100829999999917,71.027771000000087],[-89.076110999999969,71.030272999999966],[-89.039443999999946,71.035263000000043],[-88.979996000000028,71.041092000000049],[-88.904723999999987,71.045258000000103],[-88.689163000000008,71.046936000000017],[-88.617767000000015,71.044434000000138],[-88.490279999999984,71.031097000000102],[-88.478881999999942,71.029709000000025],[-88.43249499999996,71.021927000000062],[-88.380279999999971,71.011931999999945],[-88.369155999999975,71.007492000000127],[-88.365829000000019,71.001937999999939],[-88.36332699999997,70.99552900000009],[-88.362503000000004,70.990265000000136],[-88.362777999999992,70.984146000000067],[-88.360274999999945,70.977767999999969],[-88.356948999999986,70.972214000000122],[-88.343612999999948,70.961380000000077],[-88.332503999999972,70.957213999999965],[-88.318618999999899,70.95387299999993],[-88.289718999999934,70.950272000000098],[-88.260833999999988,70.947754000000089],[-88.025283999999942,70.930542000000059],[-87.999999999999886,70.929153000000099],[-87.968886999999881,70.928588999999931],[-87.930557000000022,70.929428000000087],[-87.912780999999995,70.931366000000025],[-87.857772999999895,70.941360000000032],[-87.798049999999932,70.949707000000046],[-87.752791999999999,70.953598000000113],[-87.699996999999996,70.955551000000071],[-87.664443999999946,70.954712000000086],[-87.62748699999986,70.95138500000013],[-87.610549999999932,70.949417000000039],[-87.559433000000013,70.947479000000101],[-87.43582200000003,70.944976999999994],[-87.371216000000004,70.944725000000119],[-87.353607000000011,70.945250999999928],[-87.345551,70.949417000000039],[-87.343063000000029,70.954162999999937],[-87.343613000000005,70.959427000000119],[-87.337783999999886,70.969986000000006],[-87.329177999999956,70.980545000000006],[-87.30860899999999,70.99552900000009],[-87.298889000000031,71],[-87.286117999999988,71.004166000000112],[-87.267226999999878,71.006942999999978],[-87.246947999999918,71.009155000000078],[-87.212508999999955,71.007492000000127],[-87.151397999999858,71],[-87.141388000000006,70.997757000000036],[-87.11610399999995,70.994705000000124],[-87.051392000000021,70.987761999999975],[-87.033614999999998,70.986649000000057],[-87.017501999999922,70.986649000000057],[-87.004180999999903,70.990265000000136],[-87.003066999999987,70.991089000000102],[-87.002791999999999,70.994141000000013],[-87.009734999999978,70.996093999999971],[-87.039444000000003,71.000823999999966],[-87.135009999999966,71.011383000000023],[-87.166397000000018,71.014435000000105],[-87.184433000000013,71.01527400000009],[-87.279175000000009,71.026932000000102],[-87.385833999999988,71.041930999999977],[-87.394729999999981,71.043594000000098],[-87.404723999999931,71.047211000000061],[-87.410827999999981,71.053314],[-87.472777999999948,71.074157999999954],[-87.572783999999956,71.09526100000005],[-87.701400999999976,71.123306000000071],[-87.712783999999999,71.126082999999994],[-87.760283999999956,71.143051000000071],[-87.848891999999864,71.184982000000048],[-87.851943999999946,71.191925000000026],[-87.852492999999981,71.19720500000011],[-87.848343,71.202209000000039],[-87.825286999999946,71.217209000000025],[-87.823059000000001,71.223601999999971],[-87.816665999999941,71.254714999999976],[-87.821945000000028,71.258331000000055],[-87.829452999999944,71.261932000000115],[-87.844161999999926,71.264160000000061],[-87.900283999999999,71.268600000000049],[-87.911666999999909,71.266936999999984],[-87.971938999999963,71.250274999999988],[-88.019729999999981,71.236098999999967],[-88.034163999999976,71.231658999999979],[-88.041945999999939,71.228867000000037],[-88.131103999999993,71.219147000000135],[-88.321670999999981,71.228592000000049],[-88.583618000000001,71.234984999999995],[-88.70666499999993,71.247756999999979],[-88.849990999999989,71.259720000000016],[-89.058043999999995,71.276382000000012],[-89.20666499999993,71.283325000000048],[-89.299163999999962,71.287491000000102],[-89.42860399999995,71.294434000000081],[-89.703888000000006,71.31581100000011],[-89.816665999999998,71.324997000000053],[-89.830001999999979,71.328872999999987],[-89.89973399999991,71.351379000000122],[-89.907227000000034,71.354706000000078],[-89.964721999999995,71.411377000000016],[-89.968613000000005,71.416931000000034],[-89.983063000000016,71.446930000000009],[-90.010558999999887,71.57777400000009],[-90.013061999999934,71.600266000000033],[-90.004729999999938,71.630813999999987],[-90.00306699999993,71.635817999999972],[-89.99722300000002,71.641373000000044],[-89.964721999999995,71.655822999999941],[-89.932769999999948,71.667755000000113],[-89.896117999999944,71.679977000000065],[-89.884734999999921,71.684708000000001],[-89.817504999999983,71.724701000000039],[-89.808334000000002,71.747757000000092],[-89.821395999999936,71.760269000000051],[-89.831389999999942,71.760269000000051],[-89.836120999999991,71.761658000000068],[-89.843062999999972,71.764434999999992],[-89.893615999999952,71.789428999999927],[-89.954453000000001,71.820541000000048],[-89.960281000000009,71.824158000000011],[-90.026672000000019,71.892761000000064],[-90.048614999999984,71.953873000000101],[-90.001113999999916,72.063034000000073],[-89.993057000000022,72.070540999999992],[-89.962783999999999,72.07748399999997],[-89.812209999999993,72.111923000000047],[-89.750838999999928,72.12303199999991],[-89.738891999999964,72.124985000000038],[-89.725829999999974,72.124695000000031],[-89.718886999999995,72.121917999999937],[-89.715835999999967,72.118591000000038],[-89.704726999999991,72.113312000000008],[-89.691665999999941,72.109985000000108],[-89.682494999999903,72.110535000000141],[-89.664718999999934,72.113312000000008],[-89.597503999999958,72.148331000000098],[-89.579726999999991,72.158874999999966],[-89.574721999999952,72.163605000000018],[-89.576674999999966,72.169144000000017],[-89.584732000000031,72.175811999999951],[-89.598891999999978,72.178040000000124],[-89.618057000000022,72.17886400000009],[-89.676665999999955,72.17692599999998],[-89.705841000000021,72.174697999999978],[-89.724716000000001,72.172485000000052],[-89.738891999999964,72.168593999999985],[-89.759445000000028,72.159988000000055],[-89.770553999999947,72.157485999999949],[-89.780563000000029,72.157485999999949],[-89.802489999999921,72.161925999999994],[-89.892226999999991,72.186919999999986],[-89.897232000000031,72.188583000000051],[-89.901397999999915,72.194137999999953],[-89.939437999999939,72.261932000000058],[-89.954177999999956,72.304977000000065],[-89.957503999999915,72.316086000000098],[-89.95666499999993,72.321655000000135],[-89.913329999999974,72.422211000000061],[-89.907500999999968,72.432205000000067],[-89.89056399999987,72.444977000000051],[-89.87249799999995,72.449142000000052],[-89.860275000000001,72.451096000000121],[-89.813613999999973,72.456650000000081],[-89.799438000000009,72.46026599999999],[-89.793609999999887,72.462768999999923],[-89.777221999999995,72.493866000000025],[-89.775283999999886,72.498596000000077],[-89.772506999999962,72.51998900000001],[-89.772781000000009,72.526093000000003],[-89.786666999999966,72.559982000000048],[-89.753890999999953,72.60554499999995],[-89.736937999999952,72.616652999999985],[-89.699996999999939,72.625259000000085],[-89.678329000000019,72.629424999999969],[-89.65695199999999,72.630264000000125],[-89.643616000000009,72.62692300000009],[-89.614715999999987,72.616089000000045],[-89.597503999999958,72.614700000000028],[-89.572784000000013,72.616928000000144],[-89.560546999999929,72.621918000000051],[-89.470550999999944,72.666091999999992],[-89.473617999999874,72.672485000000108],[-89.511947999999961,72.688873000000001],[-89.525283999999999,72.693863000000022],[-89.549164000000019,72.691085999999927],[-89.567504999999926,72.693039000000056],[-89.574721999999952,72.698868000000061],[-89.580001999999922,72.711105000000032],[-89.581389999999999,72.71775800000006],[-89.574721999999952,72.785263000000043],[-89.569457999999941,72.786925999999937],[-89.479445999999996,72.779709000000025],[-89.446380999999917,72.775542999999971],[-89.36471599999993,72.762206999999989],[-89.330565999999919,72.755829000000006],[-89.294158999999922,72.797211000000061],[-89.333327999999995,72.950546000000145],[-89.358337000000006,72.965271000000087],[-89.361388999999974,72.991652999999985],[-89.308883999999978,73.048324999999977],[-89.228333000000021,73.125809000000004],[-89.043335000000013,73.252486999999974],[-89.035827999999981,73.257492000000013],[-89.00028999999995,73.278320000000122],[-88.990554999999972,73.283599999999979],[-88.856948999999986,73.336105000000032],[-88.695830999999941,73.411926000000108],[-88.68360899999999,73.417480000000069],[-88.468062999999972,73.491928000000087],[-88.433318999999926,73.514159999999947],[-88.409164000000033,73.523605000000032],[-88.286391999999978,73.566939999999988],[-88.263061999999934,73.573883000000023],[-88.074721999999895,73.627762000000018],[-87.974441999999954,73.654709000000139],[-87.92332499999992,73.667755000000056],[-87.817229999999995,73.694427000000132],[-87.780288999999982,73.703048999999965],[-87.739990000000034,73.711380000000077],[-87.539444000000003,73.746643000000063],[-87.456664999999987,73.760269000000051],[-87.183608999999933,73.792755000000113],[-87.049438000000009,73.80831900000004],[-86.71665999999999,73.840820000000122],[-86.596663999999976,73.84526100000005],[-86.493057000000022,73.844437000000084],[-86.401397999999915,73.845824999999991],[-86.239440999999999,73.849152000000117],[-86.208618000000001,73.849991000000102],[-86.109160999999972,73.849991000000102],[-85.747771999999998,73.836380000000133],[-85.706664999999987,73.832214000000022],[-85.553054999999972,73.820830999999998],[-85.520003999999972,73.81999200000007],[-85.462508999999955,73.820830999999998],[-85.421936000000017,73.824158000000125],[-85.307770000000005,73.821106000000043],[-85.16332999999986,73.813309000000061],[-85.121108999999933,73.809981999999991],[-85.104995999999971,73.808029000000033],[-85.069457999999884,73.801926000000094],[-85.034728999999913,73.794708000000071],[-84.970001000000025,73.777771000000087],[-84.837783999999999,73.741652999999985],[-84.842772999999966,73.735809000000017],[-84.865554999999915,73.713318000000015],[-84.922501000000011,73.680267000000072],[-84.931380999999988,73.67553700000002],[-84.956116000000009,73.665267999999969],[-84.985000999999954,73.655823000000112],[-85.340835999999854,73.556366000000139],[-85.596389999999985,73.486649000000114],[-85.766402999999855,73.425262000000032],[-85.851104999999961,73.391098],[-85.930282999999974,73.355255],[-86.046660999999858,73.287201000000039],[-86.137787000000003,73.228867000000037],[-86.292220999999984,73.103317000000118],[-86.296386999999982,73.097488000000055],[-86.294448999999929,73.091095000000109],[-86.288895000000025,73.087204000000042],[-86.28443900000002,73.08248900000001],[-86.284163999999976,73.077208999999982],[-86.287216000000001,73.072495000000004],[-86.328339000000028,73.036651999999947],[-86.454452999999887,72.963607999999965],[-86.474716000000001,72.953323000000069],[-86.495269999999891,72.943314000000044],[-86.50556899999998,72.938309000000004],[-86.571120999999948,72.908875000000023],[-86.627212999999927,72.883605999999986],[-86.647506999999962,72.873306000000071],[-86.653610000000015,72.868866000000082],[-86.658339999999953,72.863602000000071],[-86.695540999999992,72.819153000000142],[-86.696654999999964,72.816666000000055],[-86.732773000000009,72.716095000000109],[-86.703339000000028,72.659148999999957],[-86.698333999999988,72.652205999999978],[-86.686935000000005,72.644714000000022],[-86.662216000000001,72.631653000000085],[-86.638335999999924,72.620529000000033],[-86.611389000000031,72.60914600000001],[-86.504181000000017,72.56860400000005],[-86.479720999999984,72.56053200000008],[-86.466110000000015,72.556365999999969],[-86.451401000000033,72.553040000000124],[-86.414443999999946,72.541656000000046],[-86.397232000000031,72.534988000000055],[-86.353057999999976,72.511658000000068],[-86.33805799999999,72.503051999999968],[-86.283066000000019,72.468323000000112],[-86.275832999999977,72.463318000000072],[-86.267776000000026,72.456375000000094],[-86.255004999999926,72.443588000000091],[-86.240829000000019,72.420258000000103],[-86.240829000000019,72.406647000000135],[-86.24610899999999,72.394989000000123],[-86.258057000000008,72.384430000000066],[-86.275283999999942,72.373871000000008],[-86.308043999999995,72.359146000000067],[-86.350829999999917,72.339156999999943],[-86.377776999999924,72.323608000000036],[-86.396117999999944,72.30914300000012],[-86.428054999999915,72.281937000000084],[-86.43582200000003,72.270264000000054],[-86.455276000000026,72.207214000000079],[-86.434432999999956,72.049987999999928],[-86.432495000000017,72.043319999999994],[-86.425827000000027,72.024993999999992],[-86.420546999999999,72.012771999999984],[-86.336670000000026,71.951934999999992],[-86.166107000000011,71.824996999999996],[-86.132766999999944,71.795822000000101],[-86.110549999999989,71.783051],[-86.078613000000018,71.775542999999971],[-86.051666000000012,71.771652000000074],[-86.024444999999957,71.765823000000069],[-85.947219999999959,71.726928999999984],[-85.905563000000029,71.699707000000046],[-85.871933000000013,71.676926000000037],[-85.500838999999985,71.511108000000092],[-85.391952999999944,71.481659000000093],[-85.374161000000015,71.47886699999998],[-85.228606999999954,71.465546000000074],[-84.948607999999979,71.421646000000067],[-84.93472300000002,71.418319999999994],[-84.929992999999968,71.414429000000098],[-84.859160999999972,71.321105999999986],[-84.838057999999933,71.29193099999992],[-84.834166999999979,71.285262999999986],[-84.83277899999996,71.278869999999984],[-84.833892999999932,71.274154999999951],[-84.835555999999997,71.271652000000017],[-84.848343,71.269440000000145],[-84.868606999999997,71.268875000000094],[-84.921660999999972,71.270828000000051],[-85.041945999999996,71.278594999999996],[-85.172500999999897,71.272490999999945],[-85.173888999999974,71.269989000000066],[-85.178329000000019,71.266388000000006],[-85.389998999999932,71.196640000000059],[-85.399993999999936,71.193862999999965],[-85.50028999999995,71.177200000000084],[-85.514724999999999,71.176086000000112],[-85.532501000000025,71.177200000000084],[-85.663054999999986,71.194427000000132],[-85.761397999999986,71.192200000000071],[-85.838333000000034,71.187485000000038],[-85.932769999999948,71.17886400000009],[-85.966659999999933,71.171097000000145],[-86.170836999999949,71.106934000000081],[-86.210830999999985,71.09387200000009],[-86.21444699999995,71.089705999999978],[-86.206954999999994,71.083878000000084],[-86.206115999999952,71.078049000000021],[-86.212783999999999,71.072768999999994],[-86.24888599999997,71.058594000000085],[-86.288605000000018,71.052200000000028],[-86.408051,71.035263000000043],[-86.450835999999924,71.031372000000147],[-86.517775999999969,71.031661999999983],[-86.643889999999999,71.019439999999975],[-86.749999999999943,71.007766999999944],[-86.770278999999903,71.004166000000112],[-86.785552999999993,71.000275000000045],[-86.798614999999984,70.996368000000075],[-86.819167999999877,70.98942599999998],[-86.820007000000032,70.988586000000112],[-86.806655999999975,70.983871000000079],[-86.75778200000002,70.97665399999994],[-86.713057999999933,70.974152000000061],[-86.601943999999946,70.97164900000007],[-86.547500999999954,70.978867000000093],[-86.430283000000031,70.988876000000118],[-86.292220999999984,71.000275000000045],[-86.270279000000016,71.002777000000094],[-86.224166999999852,71.014435000000105],[-86.026947000000007,71.071381000000088],[-85.832503999999915,71.127197000000137],[-85.802215999999987,71.135818000000029],[-85.779174999999952,71.139160000000004],[-85.670273000000009,71.148880000000077],[-85.650283999999999,71.149428999999998],[-85.505004999999983,71.158034999999927],[-85.411666999999966,71.17442299999999],[-85.391678000000013,71.174988000000042],[-85.288605000000018,71.159149000000127],[-85.274169999999913,71.15525800000006],[-85.110549999999989,71.161652000000061],[-85.042220999999927,71.181656000000032],[-85.037216000000001,71.183044000000109],[-84.99888599999997,71.187485000000038],[-84.961670000000026,71.188583000000108],[-84.944152999999972,71.187195000000031],[-84.875274999999988,71.172760000000096],[-84.849990999999989,71.154709000000082],[-84.84584000000001,71.147766000000104],[-84.87110899999999,71.073607999999922],[-84.875823999999852,71.06999200000007],[-84.879714999999919,71.069442999999922],[-84.904175000000009,71.078049000000021],[-84.935821999999973,71.092483999999956],[-84.950561999999934,71.09693900000002],[-84.966110000000015,71.10026600000009],[-84.9808349999999,71.101089000000002],[-85.00111400000003,71.100815000000068],[-85.142226999999934,71.086380000000133],[-85.146956999999986,71.082764000000054],[-85.112777999999935,71.079163000000051],[-85.061385999999914,71.076385000000016],[-84.99221799999998,71.077484000000027],[-84.976668999999902,71.075821000000076],[-84.960281000000009,71.072220000000016],[-84.92971799999998,71.004440000000045],[-84.926940999999943,70.988037000000134],[-84.930282999999974,70.981659000000036],[-84.941375999999991,70.970535000000098],[-84.950835999999981,70.965546000000131],[-84.963333000000034,70.955826000000059],[-84.975280999999995,70.945250999999928],[-84.976105000000018,70.933318999999983],[-84.970839999999953,70.927474999999959],[-84.964721999999938,70.922485000000108],[-84.958618000000001,70.919434000000081],[-84.941100999999946,70.918045000000063],[-84.814162999999951,70.919434000000081],[-84.798888999999974,70.921646000000123],[-84.793610000000001,70.926650999999993],[-84.748336999999992,70.975539999999967],[-84.748046999999985,70.988037000000134],[-84.771118000000001,71.037490999999989],[-84.803604000000007,71.047211000000061],[-84.819167999999991,71.057480000000112],[-84.827788999999996,71.068328999999949],[-84.829726999999878,71.073317999999915],[-84.828888000000006,71.079987000000017],[-84.826675000000023,71.085541000000148],[-84.801392000000021,71.148605000000032],[-84.766662999999994,71.197479000000044],[-84.770843999999954,71.254990000000021],[-84.781386999999938,71.261932000000115],[-84.786666999999909,71.267761000000121],[-84.793059999999969,71.278046000000018],[-84.796660999999915,71.297485000000108],[-84.797226000000023,71.303314000000114],[-84.762511999999901,71.406646999999964],[-84.749434999999949,71.416655999999989],[-84.731948999999929,71.424698000000149],[-84.720551,71.428314],[-84.693053999999961,71.434143000000006],[-84.678329000000019,71.435257000000036],[-84.660004000000015,71.431655999999975],[-84.653060999999923,71.431931000000134],[-84.571670999999924,71.440810999999997],[-84.557495000000017,71.444138000000123],[-84.547774999999945,71.447478999999987],[-84.539169000000015,71.451660000000061],[-84.531951999999933,71.456940000000145],[-84.526108000000022,71.46887200000009],[-84.526397999999915,71.478316999999947],[-84.530563000000029,71.492477000000065],[-84.533614999999941,71.502486999999974],[-84.546660999999972,71.527480999999966],[-84.554717999999923,71.541092000000106],[-84.561385999999914,71.549988000000042],[-84.564437999999939,71.552475000000129],[-84.610275000000001,71.562759000000142],[-84.636397999999929,71.570541000000105],[-84.648620999999991,71.57638500000013],[-84.65834000000001,71.583878000000141],[-84.654998999999975,71.608871000000022],[-84.653060999999923,71.612762000000089],[-84.642501999999979,71.622757000000036],[-84.625548999999978,71.633041000000048],[-84.610549999999989,71.641663000000051],[-84.604445999999996,71.646103000000039],[-84.606658999999922,71.649429000000112],[-84.625,71.665817000000004],[-84.628052000000025,71.668319999999937],[-84.635559000000001,71.670258000000103],[-84.649733999999967,71.672211000000004],[-84.710830999999928,71.676085999999998],[-84.77305599999994,71.678588999999988],[-84.782776000000013,71.678863999999976],[-84.827498999999989,71.675262000000032],[-84.867217999999923,71.66804500000012],[-84.886200000000031,71.654251000000102],[-84.926666000000012,71.636107999999979],[-84.975280999999995,71.644440000000145],[-85.097503999999958,71.655258000000117],[-85.176940999999999,71.656647000000135],[-85.196655000000021,71.655822999999941],[-85.230835000000013,71.659987999999942],[-85.263900999999976,71.665543000000071],[-85.279723999999987,71.668594000000041],[-85.291381999999999,71.672211000000004],[-85.570846999999958,71.77998400000007],[-85.579726999999991,71.784988000000055],[-85.573623999999938,71.790817000000061],[-85.557770000000005,71.79525799999999],[-85.543883999999935,71.795532000000094],[-85.458892999999989,71.79414399999996],[-85.449721999999952,71.796097000000088],[-85.436934999999949,71.800812000000121],[-85.432769999999948,71.806366000000139],[-85.431945999999982,71.814697000000024],[-85.434432999999899,71.818053999999961],[-85.551666000000012,71.896378000000027],[-85.559722999999963,71.900543000000027],[-85.744995000000017,71.941360000000032],[-85.845839999999896,71.962494000000049],[-85.900832999999977,71.969147000000021],[-85.939986999999974,71.973038000000088],[-85.963333000000034,71.974425999999994],[-86.002501999999993,71.978043000000127],[-86.022781000000009,71.980545000000006],[-86.026672000000019,71.981658999999979],[-86.039169000000015,71.988876000000118],[-86.043610000000001,71.99552900000009],[-86.050827000000027,72.011107999999979],[-86.047501000000011,72.013885000000073],[-85.981110000000001,72.028594999999996],[-85.778885000000002,72.026932000000102],[-85.538329999999974,72.059143000000006],[-85.509444999999914,72.068054000000132],[-85.495270000000005,72.078872999999987],[-85.440552000000025,72.132751000000098],[-85.449158000000011,72.158325000000104],[-85.481948999999929,72.173309000000017],[-85.50167799999997,72.184143000000063],[-85.502501999999993,72.251663000000065],[-85.49749799999995,72.255264000000125],[-85.48721299999994,72.260268999999994],[-85.291945999999882,72.25999500000006],[-85.271941999999967,72.259720000000016],[-85.029175000000009,72.25082400000008],[-85.013335999999981,72.250000000000114],[-84.936385999999914,72.235809000000131],[-84.919997999999964,72.232758000000103],[-84.867766999999958,72.220825000000048],[-84.861388999999917,72.217758000000117],[-84.847504000000015,72.205550999999957],[-84.839172000000019,72.194137999999953],[-84.815276999999924,72.181366000000139],[-84.803328999999906,72.177765000000079],[-84.710555999999997,72.151656999999943],[-84.612212999999997,72.141098000000113],[-84.595839999999953,72.137772000000041],[-84.512222000000008,72.114150999999993],[-84.286391999999978,72.028594999999996],[-84.275557999999933,72.023879999999963],[-84.269454999999994,72.020828000000051],[-84.261123999999995,72.016098000000056],[-84.258056999999894,72.011932000000115],[-84.25,71.998322000000087],[-84.239989999999921,71.973877000000016],[-84.236389000000031,71.961655000000064],[-84.230559999999855,71.95138500000013],[-84.225006000000008,71.945525999999916],[-84.218886999999995,71.940262000000132],[-84.208617999999888,71.93414300000012],[-84.194442999999978,71.930817000000047],[-84.184722999999963,71.930542000000059],[-84.178329000000019,71.932755000000043],[-84.172774999999945,71.937759000000142],[-84.168883999999878,71.944138000000009],[-84.158614999999998,71.977203000000088],[-84.164718999999877,72.021103000000096],[-84.171111999999994,72.024155000000007],[-84.218063000000029,72.044144000000131],[-84.270003999999915,72.051085999999998],[-84.285827999999981,72.054152999999928],[-84.319732999999871,72.0619200000001],[-84.346663999999976,72.069717000000026],[-84.357772999999952,72.076385000000016],[-84.379990000000021,72.108321999999987],[-84.380553999999961,72.123596000000077],[-84.456116000000009,72.133605999999986],[-84.473327999999981,72.135818000000029],[-84.613326999999913,72.163605000000018],[-84.652221999999938,72.17886400000009],[-84.72193900000002,72.213043000000084],[-84.933318999999926,72.284424000000001],[-84.935271999999941,72.289429000000041],[-84.917495999999971,72.299713000000054],[-84.829452999999944,72.348328000000095],[-84.816101000000003,72.352767999999912],[-84.801392000000021,72.354706000000078],[-84.769729999999981,72.356368999999972],[-84.715012000000002,72.355820000000051],[-84.661941999999954,72.354156000000046],[-84.565001999999993,72.348877000000073],[-84.521117999999944,72.350540000000137],[-84.500838999999928,72.353867000000093],[-84.48443599999996,72.358032000000094],[-84.436110999999926,72.374984999999981],[-84.433060000000012,72.378311000000053],[-84.442215000000033,72.383041000000048],[-84.453339000000028,72.382477000000108],[-84.471389999999928,72.379425000000026],[-84.571670999999924,72.361374000000012],[-84.864166000000012,72.36692800000003],[-84.872771999999998,72.36943100000002],[-84.876098999999954,72.372208000000114],[-84.875548999999921,72.394989000000123],[-84.870834000000002,72.400818000000129],[-84.857772999999952,72.405547999999953],[-84.836670000000026,72.408035000000041],[-84.817504999999983,72.406647000000135],[-84.800277999999992,72.406647000000135],[-84.786666999999909,72.40887500000008],[-84.768341000000021,72.444427000000019],[-84.767226999999934,72.447478999999987],[-84.768341000000021,72.451935000000049],[-84.771118000000001,72.457489000000066],[-84.776947000000007,72.458327999999995],[-84.791945999999996,72.45498699999996],[-84.918609999999944,72.425262000000089],[-85.008347000000015,72.399429000000112],[-85.021666999999979,72.394714000000079],[-85.144729999999925,72.359421000000111],[-85.339019999999948,72.406418000000031],[-85.370270000000005,72.414703000000031],[-85.515288999999996,72.458878000000027],[-85.535277999999948,72.469711000000018],[-85.610001000000011,72.53166200000004],[-85.618057000000022,72.540817000000061],[-85.61721799999998,72.545532000000094],[-85.613892000000021,72.550261999999975],[-85.598617999999931,72.555251999999996],[-85.508347000000015,72.561371000000008],[-85.486114999999927,72.564987000000087],[-85.478057999999976,72.568329000000006],[-85.473052999999993,72.571930000000066],[-85.475554999999986,72.575272000000041],[-85.481110000000001,72.577484000000084],[-85.499999999999943,72.58027600000014],[-85.559998000000007,72.582489000000123],[-85.623885999999914,72.586928999999941],[-85.641953000000001,72.592757999999947],[-85.654174999999952,72.598038000000031],[-85.664718999999934,72.60554499999995],[-85.703063999999927,72.634155000000021],[-85.705276000000026,72.637771999999984],[-85.70777899999996,72.646378000000084],[-85.70944199999991,72.73692299999999],[-85.688048999999978,72.893599999999992],[-85.68472300000002,72.898330999999928],[-85.679442999999992,72.903595000000109],[-85.592223999999987,72.959152000000074],[-85.581680000000006,72.964157000000114],[-85.570557000000008,72.966934000000037],[-85.549164000000019,72.969711000000132],[-85.499725000000012,72.974152000000004],[-85.481948999999929,72.974152000000004],[-85.378875999999934,72.971100000000092],[-85.283066000000019,72.964431999999931],[-85.257507000000032,72.960814999999968],[-85.127486999999974,72.940262000000132],[-85.077498999999932,72.929977000000008],[-85.015015000000005,72.916092000000106],[-84.96665999999999,72.904984000000127],[-84.93249499999996,72.896378000000027],[-84.874434999999949,72.885543999999925],[-84.819457999999997,72.880264000000068],[-84.707503999999972,72.869980000000055],[-84.668610000000001,72.867477000000065],[-84.61082499999992,72.861649000000114],[-84.504455999999948,72.846100000000035],[-84.437209999999993,72.833603000000039],[-84.404998999999918,72.826096000000121],[-84.389450000000011,72.822220000000016],[-84.320847000000015,72.800812000000121],[-84.291107000000011,72.791655999999989],[-84.257507000000032,72.785263000000043],[-84.188323999999966,72.774428999999941],[-83.991378999999938,72.745819000000097],[-83.97222899999997,72.744141000000013],[-83.958054000000004,72.746643000000063],[-83.955275999999913,72.748322000000087],[-83.953063999999927,72.752487000000087],[-83.956389999999999,72.754990000000078],[-83.989440999999999,72.76887499999998],[-84.040832999999964,72.77748100000008],[-84.073623999999995,72.781661999999983],[-84.108046999999942,72.785263000000043],[-84.218613000000005,72.794983000000116],[-84.246947999999975,72.79971299999994],[-84.291381999999942,72.812484999999981],[-84.311935000000005,72.820267000000115],[-84.335280999999952,72.829987000000017],[-84.419158999999922,72.853316999999947],[-84.528885000000002,72.882477000000051],[-84.577224999999942,72.892212000000086],[-84.652495999999985,72.899429000000055],[-84.706389999999999,72.905823000000055],[-84.74360699999994,72.910812000000021],[-84.760558999999944,72.914153999999996],[-84.791107000000011,72.921371000000079],[-84.855835000000013,72.937485000000038],[-84.870269999999948,72.942200000000071],[-85.059998000000007,72.996643000000006],[-85.223609999999951,73.014984000000027],[-85.513901000000033,73.019149999999911],[-85.535277999999948,73.021927000000005],[-85.537216000000001,73.028320000000008],[-85.47193900000002,73.098037999999917],[-85.447768999999937,73.120254999999986],[-85.44027699999998,73.125533999999959],[-85.429442999999935,73.130539000000056],[-85.415832999999964,73.135269000000051],[-85.406951999999933,73.136383000000023],[-85.395554000000004,73.135544000000095],[-85.379990000000021,73.133605999999929],[-85.37332200000003,73.130814000000044],[-85.369995000000017,73.128311000000053],[-85.363891999999964,73.120818999999926],[-85.35943599999996,73.113876000000118],[-85.358046999999942,73.109711000000118],[-85.333618000000001,73.092484000000127],[-85.300277999999935,73.078049000000021],[-85.256888999999944,73.071487000000104],[-85.248061999999948,73.068649000000107],[-85.240891000000033,73.066818000000126],[-85.188057000000015,73.059814000000074],[-85.175887999999986,73.058655000000101],[-85.166388999999981,73.060654000000113],[-85.171393999999964,73.066315000000088],[-85.152495999999985,73.072769000000108],[-85.186935000000005,73.096939000000134],[-85.226943999999946,73.115814000000057],[-85.229172000000005,73.12303200000008],[-85.227782999999988,73.129150000000038],[-85.223052999999993,73.134720000000129],[-85.213622999999984,73.13888500000013],[-85.191939999999988,73.141663000000108],[-85.148345999999947,73.141663000000108],[-85.089171999999962,73.137496999999996],[-85.053329000000019,73.13220200000012],[-85.003066999999874,73.121918000000107],[-84.988602000000014,73.116928000000087],[-84.921386999999982,73.098327999999924],[-84.904175000000009,73.09526100000005],[-84.829726999999878,73.085541000000148],[-84.772781000000009,73.081100000000049],[-84.556655999999975,73.064423000000033],[-84.212508999999955,73.040268000000026],[-84.077224999999942,73.03387500000008],[-83.92332499999992,73.033600000000035],[-83.867766999999901,73.029709000000139],[-83.84973100000002,73.027481000000023],[-83.832503999999972,73.024155000000007],[-83.761397999999929,73.006378000000097],[-83.718886999999995,72.989151000000106],[-83.634445000000028,72.982483000000116],[-83.633330999999941,72.983322000000101],[-83.634445000000028,72.986374000000012],[-83.648346000000004,72.991364000000033],[-83.692490000000021,73.005554000000132],[-83.776672000000019,73.031097000000045],[-83.879715000000033,73.051926000000037],[-83.913619999999923,73.058318999999983],[-83.93472300000002,73.061096000000077],[-83.955841000000021,73.06164600000011],[-83.974716000000001,73.060806000000071],[-84.039718999999991,73.056366000000082],[-84.05972300000002,73.056366000000082],[-84.095001000000025,73.058318999999983],[-84.197495000000004,73.068604000000107],[-84.236938000000009,73.081100000000049],[-84.248046999999985,73.083327999999995],[-84.275283999999999,73.086929000000055],[-84.433884000000035,73.106093999999985],[-84.531112999999948,73.110260000000096],[-84.547501000000011,73.111374000000069],[-84.584441999999967,73.115814000000057],[-84.736389000000031,73.137206999999989],[-84.789444000000003,73.145828000000108],[-84.865004999999883,73.163604999999961],[-84.912780999999939,73.175537000000134],[-84.942215000000033,73.181655999999975],[-84.985275000000001,73.190536000000009],[-85.020003999999972,73.196930000000066],[-85.058334000000002,73.200546000000088],[-85.100554999999986,73.201385000000073],[-85.138061999999934,73.204436999999984],[-85.170546999999942,73.210815000000139],[-85.17721599999993,73.213882000000069],[-85.184433000000013,73.21887200000009],[-85.188599000000011,73.223602000000142],[-85.188599000000011,73.228867000000037],[-85.138900999999976,73.299988000000042],[-85.134170999999981,73.305542000000059],[-85.115828999999962,73.314423000000147],[-85.077788999999882,73.329437000000041],[-85.017226999999991,73.348328000000095],[-84.979996000000028,73.35664399999996],[-84.808043999999938,73.388321000000133],[-84.78694200000001,73.388046000000088],[-84.756392999999946,73.381088000000091],[-84.741669000000002,73.376083000000051],[-84.72193900000002,73.362198000000149],[-84.712783999999942,73.348602000000028],[-84.694992000000013,73.326934999999992],[-84.685271999999998,73.319991999999957],[-84.654998999999975,73.305542000000059],[-84.424712999999997,73.232483000000059],[-84.408889999999985,73.228591999999992],[-84.392501999999922,73.226089000000002],[-84.377212999999927,73.224152000000004],[-84.355269999999905,73.223037999999974],[-84.33944699999995,73.226089000000002],[-84.347777999999948,73.232483000000059],[-84.413054999999986,73.272217000000012],[-84.451110999999969,73.288588999999945],[-84.460830999999985,73.291931000000091],[-84.48971599999993,73.299713000000054],[-84.563613999999973,73.313873000000115],[-84.576674999999909,73.317764000000011],[-84.586945000000014,73.323044000000095],[-84.597778000000005,73.330826000000059],[-84.653609999999958,73.387206999999933],[-84.656113000000005,73.390549000000078],[-84.652221999999938,73.393326000000002],[-84.642226999999934,73.397217000000069],[-84.625,73.401382000000069],[-84.583892999999989,73.409149000000014],[-84.434157999999968,73.435256999999979],[-84.284438999999963,73.461105000000089],[-84.229172000000005,73.47026100000005],[-84.194442999999978,73.474701000000039],[-84.171386999999925,73.47526600000009],[-84.113892000000021,73.469147000000078],[-83.751923000000033,73.427490000000034],[-83.724715999999944,73.41304000000008],[-83.717772999999966,73.405822999999998],[-83.719726999999978,73.399719000000118],[-83.724715999999944,73.393875000000094],[-83.728058000000033,73.381088000000091],[-83.720550999999944,73.365814000000057],[-83.712218999999948,73.351928999999927],[-83.702498999999875,73.339157000000114],[-83.689437999999939,73.323608000000036],[-83.665833000000021,73.307754999999986],[-83.657500999999968,73.303589000000102],[-83.648055999999997,73.300261999999975],[-83.630828999999949,73.297210999999947],[-83.613891999999964,73.296097000000145],[-83.600554999999929,73.297485000000052],[-83.593062999999972,73.301375999999948],[-83.590835999999911,73.307204999999954],[-83.591109999999958,73.313309000000004],[-83.594161999999983,73.325272000000041],[-83.624999999999943,73.415268000000026],[-83.633330999999941,73.428864000000033],[-83.642501999999979,73.439696999999967],[-83.652495999999985,73.445250999999985],[-83.663895000000025,73.449707000000103],[-83.679717999999923,73.453872999999987],[-83.696945000000028,73.457214000000022],[-83.754456000000005,73.463318000000072],[-83.810546999999929,73.470534999999984],[-83.954726999999934,73.492752000000053],[-83.978606999999954,73.49664300000012],[-83.993606999999997,73.500275000000045],[-84.00418099999996,73.504166000000112],[-84.006957999999941,73.509720000000129],[-83.996947999999975,73.51388500000013],[-83.979172000000005,73.518051000000014],[-83.740828999999962,73.567763999999954],[-83.577498999999989,73.59637500000008],[-83.445267000000001,73.615814],[-83.219161999999869,73.656647000000078],[-83.085280999999952,73.65776100000005],[-83.018340999999907,73.666091999999935],[-82.931106999999997,73.690536000000066],[-82.902221999999938,73.700272000000041],[-82.889998999999989,73.705261000000007],[-82.872771999999884,73.715546000000131],[-82.869720000000029,73.721099999999979],[-82.86332699999997,73.726089000000115],[-82.852782999999931,73.730270000000019],[-82.840835999999967,73.73275799999999],[-82.820846999999958,73.733597000000145],[-82.636123999999938,73.727767999999912],[-82.529998999999918,73.722214000000122],[-82.475006000000008,73.719985999999949],[-82.413894999999968,73.718871999999976],[-82.367492999999911,73.719147000000021],[-82.21945199999999,73.725266000000033],[-81.990828999999962,73.731368999999972],[-81.618057000000022,73.721099999999979],[-81.572509999999966,73.719711000000132],[-81.553878999999938,73.717209000000082],[-81.536666999999852,73.713882000000126],[-81.476105000000018,73.698029000000076],[-81.457229999999981,73.691086000000098],[-81.282500999999968,73.58027600000014],[-81.239715999999873,73.546936000000073],[-81.228881999999999,73.535538000000088],[-81.21945199999999,73.521378000000141],[-81.197494999999947,73.477203000000145],[-81.188323999999909,73.389709000000039],[-81.21166999999997,73.326096000000007],[-81.216109999999958,73.314697000000081],[-81.215835999999967,73.303863999999919],[-81.214172000000019,73.291931000000091],[-81.20944199999991,73.272766000000104],[-81.204726999999991,73.266662999999994],[-81.192490000000021,73.260543999999982],[-81.177490000000034,73.256378000000041],[-81.101668999999958,73.238312000000064],[-81.074448000000018,73.232208000000071],[-80.900283999999942,73.209427000000005],[-80.712783999999942,73.180267000000129],[-80.664718999999934,73.171097000000088],[-80.640839000000028,73.165543000000127],[-80.61721799999998,73.157760999999994],[-80.596389999999985,73.148041000000092],[-80.557769999999948,73.111374000000069],[-80.547501000000011,73.098037999999917],[-80.547774999999945,73.091369999999984],[-80.549437999999952,73.081940000000088],[-80.59333799999996,73.025818000000072],[-80.617492999999968,73.005554000000132],[-80.641388000000006,72.996094000000085],[-80.647507000000019,72.990540000000067],[-80.652221999999938,72.974700999999982],[-80.650833000000034,72.969146999999964],[-80.633895999999936,72.940536000000066],[-80.642501999999979,72.93553200000008],[-80.642775999999969,72.92886400000009],[-80.638335999999981,72.922760000000096],[-80.537216000000001,72.851089000000002],[-80.513901000000033,72.838882000000012],[-80.487777999999992,72.828598],[-80.440552000000025,72.818603999999993],[-80.405563000000029,72.813309000000118],[-80.349166999999966,72.806366000000139],[-80.333327999999938,72.803040000000067],[-80.319457999999941,72.799149],[-80.299987999999985,72.788040000000137],[-80.283614999999998,72.77748100000008],[-80.247498000000007,72.730545000000063],[-80.258056999999894,72.724425999999994],[-80.332229999999925,72.712494000000049],[-80.361664000000019,72.706099999999992],[-80.444991999999957,72.673599000000081],[-80.464721999999938,72.665268000000026],[-80.541381999999999,72.628860000000145],[-80.55610699999994,72.6202550000001],[-80.556380999999874,72.607208000000071],[-80.648620999999991,72.554977000000008],[-80.676391999999964,72.547211000000118],[-80.765288999999996,72.516937000000098],[-80.942489999999964,72.455261000000121],[-80.953887999999949,72.450546000000088],[-80.988327000000027,72.429703000000018],[-81.186935000000005,72.299149000000114],[-81.192490000000021,72.293594000000041],[-81.199722000000008,72.289153999999996],[-81.222504000000015,72.281662000000097],[-81.239166000000012,72.27777100000003],[-81.30471799999998,72.268326000000116],[-81.379439999999988,72.241652999999928],[-81.365279999999984,72.241652999999928],[-81.301392000000021,72.246094000000028],[-81.285827999999924,72.247208000000057],[-81.253066999999987,72.251938000000052],[-81.241942999999992,72.254439999999931],[-81.229720999999927,72.258606000000043],[-81.164169000000015,72.287201000000096],[-81.037506000000008,72.351089000000115],[-80.929442999999935,72.40026899999998],[-80.821670999999981,72.439148000000046],[-80.715012000000002,72.473037999999974],[-80.600554999999986,72.506653000000028],[-80.580291999999929,72.509995000000004],[-80.554442999999992,72.512497000000053],[-80.539443999999946,72.511658000000068],[-80.52555799999999,72.508040999999935],[-80.516402999999912,72.503875999999934],[-80.508895999999993,72.49664300000012],[-80.503066999999987,72.484985000000108],[-80.495270000000005,72.464157000000057],[-80.492767000000015,72.453049000000021],[-80.493606999999997,72.447205000000054],[-80.514174999999966,72.379700000000014],[-80.525009000000011,72.374146000000053],[-80.54222099999987,72.37052900000009],[-80.564437999999939,72.366653000000042],[-80.603058000000033,72.363037000000134],[-80.655562999999972,72.351928999999984],[-80.669158999999979,72.347214000000122],[-80.680556999999965,72.342209000000082],[-80.783324999999991,72.290267999999969],[-80.794158999999922,72.284714000000008],[-80.808333999999945,72.274155000000121],[-80.854172000000005,72.235535000000027],[-80.896956999999929,72.194427000000076],[-80.905563000000029,72.180542000000003],[-80.816665999999998,72.150542999999971],[-80.769454999999994,72.141663000000108],[-80.753890999999953,72.140548999999965],[-80.709732000000031,72.131927000000132],[-80.580840999999964,72.094437000000084],[-80.569457999999997,72.088318000000072],[-80.567229999999995,72.077208999999982],[-80.567229999999995,72.072768999999937],[-80.574172999999917,72.068329000000119],[-80.588333000000034,72.064148000000046],[-80.630554000000018,72.062195000000088],[-80.646118000000001,72.063309000000061],[-80.686661000000015,72.073043999999982],[-80.741942999999935,72.094147000000078],[-80.941100999999946,72.087494000000106],[-81.080291999999929,72.051651000000049],[-81.08666999999997,72.04664600000001],[-81.083327999999938,72.045532000000037],[-81.065001999999936,72.041655999999932],[-81.046660999999972,72.039978000000019],[-80.990554999999972,72.037766000000147],[-80.927215999999987,72.037766000000147],[-80.906386999999995,72.039978000000019],[-80.892226999999991,72.044144000000131],[-80.886397999999986,72.049713000000111],[-80.879439999999988,72.054152999999928],[-80.866652999999985,72.0577550000001],[-80.84722899999997,72.056641000000127],[-80.792770000000019,72.02777100000003],[-80.794158999999922,72.022491000000002],[-80.821395999999879,71.95637499999998],[-80.833327999999995,71.945815999999979],[-80.849441999999954,71.934707999999944],[-80.886123999999938,71.920821999999987],[-80.933318999999926,71.908875000000023],[-80.975005999999951,71.895827999999995],[-80.980834999999956,71.890273999999977],[-80.983611999999994,71.886383000000137],[-80.971664000000033,71.881653000000085],[-80.950287000000003,71.881088000000034],[-80.926392000000021,71.882750999999985],[-80.903610000000015,71.885268999999937],[-80.868056999999965,71.893051000000071],[-80.767226999999991,71.929428000000087],[-80.756119000000012,71.93414300000012],[-80.750290000000007,71.939697000000081],[-80.746947999999975,71.945251000000098],[-80.744720000000029,71.951934999999992],[-80.745834000000002,71.957488999999953],[-80.75556899999998,71.971099999999922],[-80.758346999999958,71.977768000000083],[-80.746947999999975,71.982483000000116],[-80.659164000000033,72.003052000000082],[-80.639449999999954,72.006377999999927],[-80.620543999999995,72.006103999999993],[-80.535277999999948,72.016098000000056],[-80.448883000000023,72.029160000000047],[-80.410552999999993,72.039429000000098],[-80.385009999999966,72.048325000000034],[-80.350554999999929,72.069153000000085],[-80.347777999999948,72.075272000000098],[-80.346663999999976,72.081100000000049],[-80.347228999999913,72.088318000000072],[-80.352492999999981,72.095534999999984],[-80.358611999999994,72.101379000000009],[-80.370269999999948,72.10803199999998],[-80.383056999999951,72.113312000000008],[-80.410278000000005,72.121368000000075],[-80.433884000000035,72.132751000000098],[-80.445540999999992,72.139709000000096],[-80.455275999999969,72.146652000000074],[-80.478607000000011,72.168593999999985],[-80.483321999999987,72.175261999999918],[-80.486938000000009,72.183044000000052],[-80.486664000000019,72.189423000000147],[-80.468062999999972,72.191925000000026],[-80.426940999999886,72.191086000000041],[-80.408614999999884,72.189148000000102],[-80.393616000000009,72.177200000000084],[-80.376663000000008,72.17442299999999],[-80.355559999999912,72.17442299999999],[-80.331389999999999,72.176086000000112],[-80.241103999999893,72.197754000000032],[-80.235274999999945,72.203323000000012],[-80.244445999999925,72.209717000000069],[-80.27305599999994,72.219147000000135],[-80.279723999999931,72.22554000000008],[-80.301665999999955,72.248596000000134],[-80.306380999999988,72.255264000000125],[-80.295546999999942,72.274429000000055],[-80.289718999999934,72.279984000000127],[-80.272231999999974,72.290267999999969],[-80.260833999999988,72.294983000000002],[-80.24221799999998,72.297485000000108],[-80.22444200000001,72.296371000000136],[-80.194153000000028,72.28776600000009],[-80.155838000000017,72.273605000000089],[-80.134734999999921,72.262771999999927],[-80.113051999999982,72.244141000000127],[-80.08555599999994,72.226654000000053],[-80.021392999999989,72.189697000000081],[-79.991668999999888,72.176651000000106],[-79.962783999999999,72.168868999999972],[-79.947220000000016,72.165267999999912],[-79.899733999999967,72.15554800000001],[-79.840285999999935,72.145263999999997],[-79.790557999999976,72.137772000000041],[-79.761123999999995,72.134155000000078],[-79.685546999999929,72.126372999999944],[-79.674437999999952,72.126647999999989],[-79.672501000000011,72.129700000000071],[-79.691665999999998,72.141663000000108],[-79.719161999999926,72.148331000000098],[-79.789992999999981,72.155823000000055],[-79.811110999999983,72.160263000000043],[-79.854995999999971,72.171097000000145],[-79.923889000000031,72.190536000000009],[-79.941101000000003,72.195816000000093],[-80.045546999999999,72.242477000000122],[-80.15194699999995,72.310531999999967],[-80.166396999999961,72.322220000000129],[-80.164443999999946,72.32748400000014],[-80.155562999999916,72.336928999999998],[-80.133620999999948,72.349716000000001],[-80.115279999999927,72.359421000000111],[-80.076400999999976,72.378859999999975],[-80.064712999999983,72.3836060000001],[-80.052215999999987,72.387771999999984],[-79.991942999999992,72.402771000000087],[-79.957229999999925,72.408325000000048],[-79.874434999999949,72.470534999999984],[-79.870834000000002,72.483046999999999],[-79.86332699999997,72.489699999999971],[-79.836944999999901,72.498596000000077],[-79.820847000000015,72.501389000000074],[-79.799164000000019,72.501389000000074],[-79.780562999999972,72.499420000000043],[-79.770844000000011,72.49664300000012],[-79.734160999999915,72.484420999999998],[-79.700561999999991,72.472488000000112],[-79.692215000000033,72.466933999999924],[-79.768638999999894,72.411766],[-79.687865999999985,72.384392000000105],[-79.595550999999944,72.334717000000126],[-79.638901000000033,72.289153999999996],[-79.668059999999912,72.280823000000112],[-79.705565999999976,72.273605000000089],[-79.720000999999968,72.269440000000088],[-79.731673999999998,72.264708999999982],[-79.759734999999921,72.250549000000092],[-79.768616000000009,72.2452550000001],[-79.774718999999891,72.239700000000028],[-79.775283999999999,72.233322000000044],[-79.769729999999925,72.225815000000125],[-79.75,72.215546000000074],[-79.732773000000009,72.212203999999986],[-79.712783999999999,72.211104999999975],[-79.701110999999969,72.215820000000008],[-79.565825999999959,72.275269000000094],[-79.485001000000011,72.325545999999974],[-79.355559999999912,72.399155000000007],[-79.342498999999975,72.40026899999998],[-79.329726999999991,72.397217000000069],[-79.243331999999953,72.374419999999986],[-79.182495000000017,72.358322000000101],[-79.146666999999979,72.345825000000104],[-79.113327000000027,72.331099999999992],[-79.082229999999925,72.313873000000001],[-79.012787000000003,72.273880000000133],[-78.945540999999935,72.199996999999996],[-78.943603999999993,72.193038999999999],[-78.946945000000028,72.186919999999986],[-79.036391999999978,72.069443000000092],[-79.136123999999938,72.007492000000127],[-79.145003999999972,72.002487000000087],[-79.156661999999983,71.997757000000036],[-79.206389999999942,71.986649000000057],[-79.229996000000028,71.980270000000019],[-79.233063000000016,71.976379000000122],[-79.203063999999983,71.961928999999998],[-79.19027699999998,71.958328000000108],[-79.176392000000021,71.955826000000059],[-79.161117999999931,71.954437000000041],[-79.138610999999912,71.955261000000007],[-79.123046999999929,71.958038000000101],[-79.099730999999963,71.967209000000082],[-79.090835999999854,71.972488000000055],[-79.072234999999921,71.974990999999989],[-79.061110999999926,71.975266000000033],[-79.026671999999962,71.970535000000098],[-78.81806899999998,71.935257000000092],[-78.768889999999999,71.92692599999998],[-78.722503999999901,71.918869000000029],[-78.683884000000035,71.909714000000008],[-78.65306099999998,71.893875000000037],[-78.639724999999999,71.884430000000009],[-78.625823999999852,71.879150000000095],[-78.585555999999997,71.865814],[-78.571395999999879,71.862762000000032],[-78.551392000000021,71.861098999999967],[-78.529174999999952,71.861649],[-78.511123999999995,71.864699999999971],[-78.503615999999965,71.868866000000082],[-78.508346999999901,71.876373000000001],[-78.595551,71.933318999999983],[-78.607498000000021,71.938583000000108],[-78.622222999999963,71.942200000000071],[-78.691375999999991,71.949707000000046],[-78.740554999999972,71.958038000000101],[-78.855559999999855,71.979706000000022],[-78.914444000000003,72.007767000000115],[-78.923614999999984,72.014999000000046],[-78.924438000000009,72.020538000000045],[-78.877486999999974,72.153320000000065],[-78.869445999999925,72.166656000000046],[-78.866104000000007,72.170532000000094],[-78.854445999999939,72.173035000000084],[-78.843613000000005,72.171097000000145],[-78.554442999999992,72.111374000000069],[-78.512221999999952,72.101089000000002],[-78.487777999999935,72.092484000000127],[-78.476105000000018,72.087204000000099],[-78.460830999999928,72.073318000000086],[-78.432770000000005,72.03804000000008],[-78.39527899999996,71.982483000000116],[-78.389998999999989,71.969437000000028],[-78.392775999999969,71.949997000000053],[-78.391678000000013,71.943587999999977],[-78.386672999999973,71.933318999999983],[-78.381942999999922,71.92804000000001],[-78.365279999999927,71.917480000000012],[-78.317779999999971,71.888321000000076],[-78.226669000000015,71.833054000000118],[-78.210830999999985,71.825821000000133],[-78.18499799999995,71.817490000000021],[-78.157607999999982,71.810577000000023],[-78.123046999999929,71.806366000000139],[-78.090560999999923,71.800812000000121],[-78.05972300000002,71.79414399999996],[-77.924437999999952,71.764709000000096],[-77.907775999999956,71.76638800000012],[-77.904448999999943,71.768051000000014],[-77.90695199999999,71.770538000000101],[-77.914169000000015,71.773605000000032],[-77.966659999999933,71.786652000000061],[-77.997498000000007,71.793319999999994],[-78.029723999999931,71.798874000000012],[-78.085830999999985,71.813309000000118],[-78.107223999999917,71.819153000000142],[-78.139998999999932,71.830551000000128],[-78.178878999999995,71.848602000000142],[-78.308884000000035,71.921096999999975],[-78.316665999999998,71.929428000000087],[-78.321395999999993,71.936920000000043],[-78.315001999999993,71.942474000000004],[-78.305266999999901,71.946930000000123],[-78.279175000000009,71.953598000000113],[-78.258895999999993,71.956650000000025],[-78.178878999999995,71.967209000000082],[-78.156951999999933,71.968323000000055],[-78.141677999999956,71.964157000000114],[-78.018616000000009,71.890823000000125],[-77.974716000000001,71.859984999999938],[-77.785552999999993,71.787490999999989],[-77.807769999999948,71.823044000000039],[-77.960006999999962,71.881653000000085],[-78.096953999999982,71.96804800000001],[-78.107223999999917,71.974152000000061],[-78.116393999999957,71.976928999999984],[-78.149733999999967,71.980545000000006],[-78.156386999999995,71.980545000000006],[-78.196105999999929,71.978592000000049],[-78.262222000000008,71.972763000000043],[-78.281386999999995,71.973877000000016],[-78.298614999999984,71.977478000000076],[-78.322509999999909,71.985809000000017],[-78.334166999999923,71.99136400000009],[-78.341110000000015,71.99859600000002],[-78.342498999999918,72.012771999999984],[-78.341674999999952,72.019149999999968],[-78.341674999999952,72.031936999999971],[-78.356948999999929,72.05831900000004],[-78.375548999999978,72.085815000000082],[-78.386672999999973,72.095534999999984],[-78.402221999999938,72.104980000000069],[-78.424437999999952,72.113602000000071],[-78.436935000000005,72.117477000000008],[-78.468886999999995,72.12414600000011],[-78.515014999999948,72.131363000000022],[-78.599990999999989,72.145263999999997],[-78.696654999999964,72.163605000000018],[-78.809998000000007,72.197205000000054],[-78.842498999999918,72.209152000000017],[-78.854720999999984,72.214432000000102],[-78.870834000000002,72.226654000000053],[-78.869155999999919,72.229706000000022],[-78.734725999999966,72.328598000000113],[-78.615829000000019,72.359146000000067],[-78.604172000000005,72.359421000000111],[-78.580565999999919,72.354156000000046],[-78.515839000000028,72.330551000000071],[-78.512511999999901,72.324432000000002],[-78.519164999999987,72.319153000000028],[-78.528335999999911,72.313873000000001],[-78.533324999999991,72.30914300000012],[-78.53694200000001,72.303314000000114],[-78.537780999999995,72.254715000000147],[-78.531386999999938,72.240265000000022],[-78.529174999999952,72.235535000000027],[-78.520843999999954,72.229155999999989],[-78.42193599999996,72.170822000000101],[-78.40834000000001,72.166382000000112],[-78.399733999999967,72.167206000000078],[-78.390839000000028,72.169982999999945],[-78.386123999999995,72.172485000000052],[-78.384170999999981,72.175537000000134],[-78.411117999999988,72.216660000000047],[-78.414718999999934,72.220535000000041],[-78.422775000000001,72.224152000000004],[-78.459732000000031,72.233871000000022],[-78.472777999999948,72.242477000000122],[-78.46833799999996,72.314986999999974],[-78.462783999999942,72.318878000000041],[-78.451110999999912,72.324158000000068],[-78.439437999999996,72.326660000000004],[-78.40834000000001,72.325821000000019],[-78.305266999999901,72.313309000000004],[-78.012512000000015,72.274994000000106],[-77.893615999999952,72.259430000000009],[-77.827498999999989,72.248596000000134],[-77.793883999999991,72.242202999999961],[-77.665282999999874,72.204712000000029],[-77.655272999999966,72.201385000000073],[-77.648620999999991,72.194137999999953],[-77.644454999999994,72.186646000000053],[-77.540833000000021,72.17692599999998],[-77.381103999999993,72.184982000000048],[-77.32417299999986,72.18609600000002],[-77.289444000000003,72.183319000000097],[-77.239989999999977,72.17442299999999],[-77.115828999999962,72.148331000000098],[-77.039443999999946,72.131653000000028],[-77.023330999999985,72.128860000000032],[-77.006118999999956,72.127472000000125],[-76.99722300000002,72.128036000000066],[-76.995833999999945,72.128860000000032],[-76.994719999999973,72.130539000000056],[-77.005004999999983,72.134430000000123],[-77.068619000000012,72.152206000000092],[-77.251677999999913,72.193313999999987],[-77.27806099999998,72.196930000000066],[-77.306945999999925,72.19802900000002],[-77.397232000000031,72.192748999999992],[-77.455840999999964,72.190811000000053],[-77.476944000000003,72.191360000000145],[-77.514175000000023,72.193862999999965],[-77.549987999999985,72.19802900000002],[-77.578888000000006,72.204163000000051],[-77.604172000000005,72.211929000000112],[-77.623885999999914,72.221100000000092],[-77.658614999999998,72.231658999999922],[-77.760833999999932,72.257217000000026],[-77.823058999999944,72.271927000000005],[-77.866104000000007,72.281097000000045],[-77.949996999999883,72.296097000000032],[-78.072509999999966,72.312485000000038],[-78.121384000000035,72.319716999999969],[-78.154723999999987,72.325545999999974],[-78.220001000000025,72.337769000000037],[-78.326950000000011,72.359146000000067],[-78.37388599999997,72.36943100000002],[-78.389175000000023,72.37303200000008],[-78.473327999999981,72.394989000000123],[-78.499161000000015,72.404709000000025],[-78.520843999999954,72.414993000000038],[-78.559158000000025,72.438034000000073],[-78.561110999999926,72.444977000000051],[-78.556655999999919,72.504440000000102],[-78.443053999999961,72.581939999999975],[-78.430556999999965,72.586655000000007],[-78.170273000000009,72.653594999999996],[-78.156386999999995,72.656937000000084],[-78.001677999999913,72.682480000000055],[-77.869994999999903,72.697479000000101],[-77.845001000000025,72.698868000000061],[-77.78083799999996,72.706940000000031],[-77.768616000000009,72.709427000000119],[-77.701401000000033,72.724701000000039],[-77.670273000000009,72.732208000000128],[-77.656951999999876,72.736099000000024],[-77.639998999999989,72.743865999999969],[-77.627486999999974,72.74859600000002],[-77.613892000000021,72.751663000000121],[-77.576401000000033,72.755554000000018],[-77.532226999999921,72.756943000000035],[-77.513625999999988,72.754715000000033],[-77.413054999999872,72.752212999999983],[-77.259734999999978,72.751663000000121],[-77.05581699999999,72.752861000000109],[-77.002501999999993,72.749419999999986],[-76.947219999999902,72.743865999999969],[-76.799728000000016,72.727478000000133],[-76.753066999999987,72.720534999999927],[-76.693053999999961,72.694702000000007],[-76.684997999999894,72.691085999999927],[-76.662505999999894,72.678588999999988],[-76.653609999999958,72.670821999999987],[-76.655272999999966,72.664429000000041],[-76.65972899999997,72.658324999999991],[-76.646118000000001,72.639708999999982],[-76.584732000000031,72.628585999999984],[-76.428328999999962,72.614151000000049],[-76.328339000000028,72.607483000000116],[-76.288329999999917,72.604980000000126],[-76.215285999999935,72.596100000000092],[-76.182219999999973,72.58998100000008],[-76.166945999999996,72.58638000000002],[-76.155562999999916,72.580826000000002],[-76.150283999999999,72.574158000000011],[-76.154723999999931,72.562485000000038],[-76.160552999999936,72.54942299999999],[-76.165833000000021,72.538315000000011],[-76.162506000000008,72.526093000000003],[-76.156112999999948,72.518051000000071],[-76.121657999999911,72.478317000000118],[-76.107773000000009,72.473037999999974],[-76.087783999999999,72.471648999999957],[-76.069457999999997,72.474991000000102],[-76.046386999999868,72.483597000000032],[-76.036941999999897,72.489426000000037],[-76.037780999999939,72.496368000000132],[-76.052215999999987,72.51138300000008],[-76.068619000000012,72.525818000000015],[-76.077224999999942,72.536377000000073],[-76.074172999999917,72.541656000000046],[-76.06471299999987,72.549988000000042],[-76.018889999999999,72.574431999999945],[-76.005843999999968,72.579163000000108],[-75.988601999999958,72.580826000000002],[-75.931945999999925,72.583603000000096],[-75.885284000000013,72.584152000000074],[-75.841948999999943,72.583053999999947],[-75.798888999999974,72.581939999999975],[-75.759170999999981,72.579163000000108],[-75.56806899999998,72.557479999999941],[-75.553328999999962,72.553589000000102],[-75.547226000000023,72.545532000000094],[-75.537780999999939,72.539703000000088],[-75.521117999999888,72.536102000000028],[-75.472228999999913,72.527480999999966],[-75.435271999999998,72.522491000000059],[-75.379439999999931,72.51638800000012],[-75.360001000000011,72.515548999999965],[-75.301666000000012,72.509720000000129],[-75.231673999999998,72.500549000000035],[-75.215285999999878,72.497482000000105],[-75.192490000000021,72.491928000000087],[-75.186661000000015,72.487488000000099],[-75.189163000000008,72.478317000000118],[-75.199158000000011,72.466933999999924],[-75.200287000000003,72.461929000000055],[-75.160277999999948,72.421097000000088],[-75.132492000000013,72.393600000000106],[-75.054169000000002,72.328873000000101],[-75.034164000000033,72.317490000000134],[-75,72.298369999999977],[-74.980559999999912,72.288315000000068],[-74.950835999999981,72.269989000000066],[-74.943603999999993,72.263321000000076],[-74.942490000000021,72.255829000000119],[-74.947494999999947,72.249710000000107],[-75.044997999999964,72.188308999999947],[-75.068068999999923,72.179152999999985],[-75.225280999999995,72.122482000000105],[-75.238326999999913,72.118317000000104],[-75.25306699999993,72.116378999999938],[-75.271666999999979,72.117203000000075],[-75.291381999999885,72.119431000000077],[-75.323623999999938,72.125534000000016],[-75.387511999999901,72.134430000000123],[-75.440552000000025,72.141098000000113],[-75.477782999999988,72.144714000000135],[-75.520003999999972,72.146102999999982],[-75.607498000000021,72.143326000000059],[-75.710006999999962,72.136658000000068],[-75.73332199999993,72.134155000000078],[-75.813889000000017,72.122482000000105],[-75.866652999999985,72.113876000000005],[-76.015015000000005,72.086655000000121],[-76.033324999999934,72.081100000000049],[-76.054717999999866,72.073043999999982],[-76.078063999999983,72.059417999999994],[-76.084166999999923,72.049713000000111],[-76.09973100000002,72.02887000000004],[-76.111938000000009,72.018050999999957],[-76.128052000000025,72.004166000000055],[-76.142226999999934,71.99331699999999],[-76.156386999999881,71.985260000000039],[-76.173614999999984,71.975540000000137],[-76.192490000000021,71.967758000000003],[-76.234726000000023,71.957488999999953],[-76.262511999999901,71.949707000000046],[-76.274445000000014,71.944427000000132],[-76.301665999999955,71.930542000000059],[-76.318344000000025,71.919983000000002],[-76.348052999999879,71.891662999999994],[-76.31082200000003,71.884720000000016],[-76.089721999999938,71.978867000000093],[-76.073058999999944,71.989425999999924],[-76.063323999999966,72],[-76.049727999999902,72.017761000000121],[-76.047501000000011,72.023604999999975],[-76.043609999999944,72.030272999999966],[-76.029448999999943,72.041091999999992],[-76.019729999999981,72.046097000000032],[-75.998610999999983,72.054152999999928],[-75.956115999999952,72.067215000000147],[-75.89445499999988,72.082214000000022],[-75.828338999999971,72.096939000000134],[-75.796660999999915,72.103591999999935],[-75.710555999999997,72.113312000000008],[-75.630554000000018,72.11970500000001],[-75.586120999999991,72.12164300000012],[-75.528335999999967,72.120818999999983],[-75.488051999999925,72.118866000000025],[-75.433060000000012,72.112761999999975],[-75.23332199999993,72.084152000000131],[-75.226105000000018,72.080276000000083],[-75.219451999999876,72.074432000000058],[-75.218886999999995,72.070267000000058],[-75.221114999999998,72.064696999999967],[-75.228881999999942,72.059143000000006],[-75.255279999999914,72.046097000000032],[-75.281676999999888,72.038589000000059],[-75.317504999999926,72.031661999999926],[-75.338332999999977,72.02887000000004],[-75.404174999999952,72.025543000000084],[-75.449432000000002,72.02526899999998],[-75.494155999999975,72.021378000000084],[-75.515015000000005,72.018326000000002],[-75.548049999999989,72.011107999999979],[-75.574172999999917,72.00360100000006],[-75.586670000000026,71.999146000000053],[-75.606383999999935,71.989425999999924],[-75.613892000000021,71.983871000000022],[-75.618880999999988,71.978592000000049],[-75.686661000000015,71.883040999999992],[-75.697495000000004,71.858322000000044],[-75.691375999999877,71.850266000000147],[-75.688048999999921,71.842758000000117],[-75.6875,71.839157000000057],[-75.692215000000033,71.833328000000051],[-75.802490000000034,71.750548999999978],[-75.830001999999979,71.736649000000114],[-75.872222999999906,71.721375000000023],[-75.898345999999947,71.714432000000045],[-75.934157999999968,71.711105000000089],[-75.953612999999962,71.710266000000104],[-75.997497999999894,71.709152000000131],[-76.040282999999931,71.709426999999948],[-76.067504999999869,71.706650000000081],[-76.079177999999956,71.704437000000098],[-76.090835999999911,71.702208999999982],[-76.096114999999998,71.697479000000101],[-76.095839999999953,71.693863000000079],[-76.085281000000009,71.691924999999912],[-75.901671999999962,71.701096000000064],[-75.880279999999971,71.70248400000014],[-75.846953999999982,71.708602999999982],[-75.819457999999941,71.716934000000094],[-75.794998000000021,71.725815000000011],[-75.787215999999944,71.730545000000063],[-75.675003000000004,71.810532000000023],[-75.654998999999975,71.826096000000121],[-75.580001999999865,71.906097000000045],[-75.570281999999963,71.917480000000012],[-75.565825999999959,71.929703000000075],[-75.567229999999938,71.937485000000038],[-75.570281999999963,71.941360000000032],[-75.574447999999961,71.953048999999965],[-75.571944999999971,71.958878000000141],[-75.569167999999991,71.963882000000126],[-75.558334000000002,71.97665400000011],[-75.538605000000018,71.986374000000012],[-75.513335999999924,71.995254999999986],[-75.498046999999929,71.999146000000053],[-75.476669000000015,72.000823999999966],[-75.414444000000003,71.999709999999993],[-75.371932999999899,71.997757000000036],[-75.349441999999897,71.998032000000023],[-75.327788999999939,71.999419999999986],[-75.24888599999997,72.012771999999984],[-75.197768999999937,72.023315000000139],[-75.174437999999952,72.031936999999971],[-75.158614999999941,72.041655999999932],[-75.150283999999942,72.0577550000001],[-75.135009999999966,72.080551000000071],[-75.129990000000021,72.086380000000133],[-75.119155999999862,72.096375000000023],[-75.109160999999858,72.101089000000002],[-75.093613000000005,72.10803199999998],[-75.081389999999942,72.11303700000002],[-75.051392000000021,72.121917999999937],[-75.035827999999924,72.125809000000004],[-75.012511999999958,72.12831100000011],[-75,72.128525000000025],[-74.98443599999996,72.127472000000125],[-74.951675000000023,72.123306000000071],[-74.835006999999962,72.10386699999998],[-74.801391999999964,72.098327999999981],[-74.764449999999954,72.094711000000018],[-74.65943900000002,72.091094999999939],[-74.625548999999921,72.091369999999984],[-74.535278000000005,72.089705999999978],[-74.316390999999953,72.082214000000022],[-74.297226000000023,72.080826000000116],[-74.260009999999966,72.076096000000064],[-74.244155999999862,72.073043999999982],[-74.233321999999987,72.067489999999964],[-74.218062999999972,72.058029000000033],[-74.177489999999921,72.031936999999971],[-74.122222999999963,71.983597000000088],[-74.117766999999958,71.969985999999949],[-74.119445999999982,71.955826000000059],[-74.166107000000011,71.874695000000088],[-74.171111999999937,71.868591000000038],[-74.184998000000007,71.855819999999937],[-74.229996000000028,71.822768999999994],[-74.243056999999965,71.818603999999993],[-74.263335999999981,71.815810999999997],[-74.403060999999923,71.80386400000009],[-74.43998699999986,71.801925999999924],[-74.460555999999997,71.802765000000079],[-74.477782999999931,71.804977000000122],[-74.50140399999998,71.809708000000057],[-74.513625999999874,71.818053999999961],[-74.570557000000008,71.809418000000051],[-74.604996000000028,71.784714000000122],[-74.678328999999962,71.745254999999986],[-74.696105999999929,71.738586000000112],[-74.71362299999987,71.735260000000096],[-74.885009999999909,71.708602999999982],[-75,71.711914000000036],[-75.046660999999915,71.716095000000109],[-75.090560999999923,71.718048000000067],[-75.136672999999973,71.716934000000094],[-75.158051,71.715271000000143],[-75.342772999999909,71.695815999999979],[-75.363892000000021,71.691360000000088],[-75.378600999999946,71.686920000000043],[-75.389998999999989,71.681091000000038],[-75.393889999999942,71.677475000000015],[-75.391953000000001,71.674698000000092],[-75.385009999999909,71.674423000000104],[-75.241942999999878,71.686096000000077],[-75.178329000000019,71.694138000000066],[-75.085007000000019,71.700821000000076],[-75.043610000000001,71.699707000000046],[-75.025008999999955,71.698029000000133],[-75.009170999999924,71.694977000000051],[-74.941101000000003,71.674698000000092],[-74.934158000000025,71.670822000000044],[-74.93360899999999,71.663879000000009],[-74.93638599999997,71.658035000000041],[-74.945540999999935,71.652481000000023],[-74.956115999999952,71.648331000000042],[-75.008895999999993,71.631927000000076],[-75.055557000000022,71.622481999999991],[-75.114166000000012,71.611098999999967],[-75.194152999999972,71.595535000000098],[-75.206954999999994,71.591934000000037],[-75.398345999999947,71.525269000000094],[-75.40972899999997,71.519714000000022],[-75.408339999999953,71.514708999999982],[-75.406386999999938,71.512207000000046],[-75.402221999999938,71.512497000000053],[-75.205276000000026,71.546371000000079],[-75,71.607238999999993],[-74.861114999999927,71.649429000000112],[-74.851668999999958,71.654984000000013],[-74.799437999999952,71.678863999999976],[-74.784163999999976,71.682755000000043],[-74.718337999999903,71.693588000000034],[-74.697768999999937,71.696365000000128],[-74.686661000000015,71.696365000000128],[-74.672774999999945,71.692474000000061],[-74.631942999999978,71.662491000000102],[-74.629714999999919,71.65277100000003],[-74.631942999999978,71.646378000000084],[-74.646392999999989,71.631927000000076],[-74.674437999999896,71.608322000000101],[-74.689712999999983,71.598038000000031],[-74.704726999999934,71.588042999999971],[-74.713057999999933,71.583878000000141],[-74.733886999999982,71.575546000000145],[-74.811934999999949,71.547760000000096],[-74.869720000000029,71.541656000000046],[-74.922500999999897,71.53776600000009],[-74.940276999999867,71.538040000000024],[-74.97084000000001,71.537201000000039],[-74.990279999999984,71.536652000000117],[-75,71.535583000000088],[-75.027221999999995,71.532486000000006],[-75.036666999999966,71.530548000000067],[-75.081389999999942,71.515273999999977],[-75.107773000000009,71.503052000000025],[-75.124709999999936,71.492477000000065],[-75.15194699999995,71.471649000000014],[-75.152221999999995,71.466094999999996],[-75.146117999999944,71.463608000000079],[-75.12777699999998,71.465820000000008],[-75.115554999999972,71.469986000000063],[-75.106110000000001,71.481934000000081],[-75.093886999999938,71.49275200000011],[-75.084731999999974,71.498322000000144],[-75.06138599999997,71.506378000000041],[-75.05082699999997,71.509720000000016],[-75.033324999999934,71.513046000000031],[-75,71.517899000000114],[-74.993056999999908,71.518875000000037],[-74.944153000000028,71.521652000000131],[-74.877486999999974,71.524155000000121],[-74.857223999999974,71.523605000000089],[-74.838332999999921,71.521926999999948],[-74.828338999999971,71.517211999999915],[-74.71665999999999,71.419144000000131],[-74.699431999999945,71.390823000000069],[-74.700561999999934,71.386658000000068],[-74.705565999999976,71.380814000000044],[-74.715285999999992,71.375809000000004],[-74.888335999999981,71.287201000000096],[-75.075012000000015,71.204437000000041],[-75.081389999999942,71.17942800000003],[-75.065001999999993,71.180817000000047],[-75,71.199341000000061],[-74.987503000000004,71.203873000000101],[-74.874160999999958,71.247756999999979],[-74.864440999999943,71.252487000000031],[-74.671660999999972,71.359985000000052],[-74.654448999999943,71.370254999999986],[-74.637511999999958,71.380538999999999],[-74.632216999999969,71.385818000000029],[-74.628051999999968,71.392487000000074],[-74.625823999999852,71.39888000000002],[-74.626098999999954,71.405822999999998],[-74.631103999999993,71.419433999999967],[-74.638061999999991,71.426651000000106],[-74.646956999999929,71.433044000000052],[-74.657227000000034,71.438583000000051],[-74.719726999999978,71.462494000000106],[-74.726944000000003,71.466094999999996],[-74.735549999999989,71.472487999999942],[-74.736388999999974,71.476654000000053],[-74.743057000000022,71.511932000000058],[-74.73611499999987,71.530548000000067],[-74.723891999999978,71.541931000000091],[-74.714172000000019,71.546646000000123],[-74.701675000000023,71.551086000000112],[-74.686385999999914,71.554977000000008],[-74.663895000000025,71.557204999999954],[-74.628875999999934,71.554703000000075],[-74.619995000000017,71.55802900000009],[-74.583618000000001,71.585815000000025],[-74.576401000000033,71.591370000000097],[-74.543883999999991,71.631362999999965],[-74.381942999999922,71.677199999999971],[-74.345550999999944,71.689423000000033],[-74.335555999999997,71.694138000000066],[-74.317779999999971,71.704437000000098],[-74.309432999999956,71.712204000000042],[-74.306945999999982,71.71775800000006],[-74.299437999999952,71.723877000000073],[-74.288604999999905,71.727478000000133],[-74.268341000000021,71.730270000000019],[-74.146956999999929,71.738875999999948],[-74.12470999999988,71.738875999999948],[-74.109160999999972,71.735809000000017],[-74.103058000000033,71.733321999999987],[-74.097777999999948,71.72886699999998],[-74.123885999999914,71.680817000000104],[-74.128875999999877,71.67164600000001],[-74.142226999999991,71.661652000000004],[-74.15055799999999,71.657486000000063],[-74.173049999999989,71.651093000000117],[-74.202788999999996,71.645828000000051],[-74.220276000000013,71.641663000000051],[-74.232773000000009,71.637496999999939],[-74.239440999999999,71.634155000000021],[-74.24888599999997,71.621643000000063],[-74.253066999999987,71.611649],[-74.254455999999948,71.60664399999996],[-74.254729999999995,71.603867000000093],[-74.252228000000002,71.58998100000008],[-74.249161000000015,71.582489000000123],[-74.243056999999965,71.569716999999969],[-74.218886999999938,71.556641000000013],[-74.180282999999974,71.538315000000011],[-74.168334999999956,71.533324999999991],[-74.156386999999995,71.532211000000018],[-74.150283999999886,71.533324999999991],[-74.148620999999935,71.537491000000045],[-74.151671999999962,71.544983000000002],[-74.165008999999998,71.555252000000053],[-74.146118000000001,71.637496999999939],[-74.039718999999934,71.722213999999951],[-74.019164999999987,71.73803700000002],[-74.014724999999942,71.741089000000102],[-73.996947999999975,71.751389000000017],[-73.977782999999931,71.759720000000129],[-73.964447000000007,71.763321000000019],[-73.928329000000019,71.769150000000025],[-73.748046999999929,71.776931999999988],[-73.718886999999938,71.776931999999988],[-73.61610399999995,71.773315000000025],[-73.604172000000005,71.772217000000126],[-73.593886999999995,71.769988999999953],[-73.589721999999995,71.763321000000019],[-73.589995999999985,71.756943000000035],[-73.591675000000009,71.751937999999996],[-73.598343,71.738312000000008],[-73.612503000000004,71.722213999999951],[-73.619995000000017,71.716095000000109],[-73.638061999999991,71.706375000000037],[-73.663329999999917,71.697204999999997],[-73.694442999999922,71.690262000000018],[-73.732772999999952,71.683868000000132],[-73.771117999999944,71.670822000000044],[-73.791381999999999,71.661102000000142],[-73.890839000000028,71.609421000000054],[-73.985549999999989,71.534149000000127],[-73.990279999999927,71.527480999999966],[-74.010833999999988,71.491363999999976],[-74.095275999999956,71.46276899999998],[-74.169997999999964,71.445816000000036],[-74.303878999999995,71.419433999999967],[-74.315826000000015,71.414429000000098],[-74.319167999999877,71.409424000000058],[-74.312209999999993,71.40554800000001],[-74.297226000000023,71.405822999999998],[-74.191665999999998,71.425537000000134],[-74.159163999999919,71.4327550000001],[-74.121384000000035,71.438583000000051],[-74.083617999999944,71.441086000000041],[-74.045836999999949,71.440810999999997],[-74.028610000000015,71.437759000000085],[-74.063889000000017,71.336929000000055],[-74.091675000000009,71.285537999999974],[-74.106383999999878,71.274704000000099],[-74.137787000000003,71.255828999999949],[-74.152221999999995,71.248032000000023],[-74.187774999999931,71.229430999999977],[-74.207503999999858,71.219711000000075],[-74.217223999999931,71.214996000000042],[-74.226669000000015,71.212203999999986],[-74.238327000000027,71.203873000000101],[-74.240829000000019,71.200821000000133],[-74.235000999999897,71.198317999999972],[-74.228881999999942,71.199416999999983],[-74.217772999999966,71.202209000000039],[-74.190825999999959,71.211104999999975],[-74.158339999999953,71.223877000000016],[-74.148055999999997,71.228592000000049],[-74.118332000000009,71.24331699999999],[-74.039444000000003,71.302199999999971],[-74.009444999999971,71.360809000000017],[-74.006957999999997,71.367203000000075],[-73.973327999999924,71.413605000000132],[-73.968612999999891,71.419433999999967],[-73.867767000000015,71.525818000000015],[-73.86221299999994,71.531096999999988],[-73.761672999999973,71.580826000000059],[-73.746947999999975,71.585266000000047],[-73.732772999999952,71.586928999999998],[-73.689162999999951,71.588042999999971],[-73.653610000000015,71.587493999999992],[-73.639724999999942,71.58638000000002],[-73.621932999999956,71.583328000000108],[-73.595000999999968,71.575272000000041],[-73.588608000000022,71.572220000000129],[-73.565001999999936,71.55192599999998],[-73.566665999999941,71.544144000000017],[-73.598343,71.528320000000122],[-73.615554999999915,71.520264000000054],[-73.619445999999982,71.515823000000125],[-73.630279999999971,71.456649999999911],[-73.635009999999909,71.359421000000111],[-73.622498000000007,71.356644000000017],[-73.61332699999997,71.355820000000051],[-73.594727000000034,71.35775799999999],[-73.540389999999945,71.37286400000005],[-73.518889999999942,71.379150000000038],[-73.517226999999934,71.379974000000004],[-73.516112999999962,71.385818000000029],[-73.515563999999927,71.39888000000002],[-73.513335999999981,71.413040000000137],[-73.50306699999993,71.424698000000149],[-73.496947999999918,71.428589000000045],[-73.477492999999924,71.436371000000008],[-73.446945000000028,71.440262000000075],[-73.428878999999995,71.435806000000127],[-73.384445000000028,71.391937000000041],[-73.380279999999914,71.385269000000051],[-73.385009999999966,71.381927000000132],[-73.500899999999945,71.337212000000022],[-73.590285999999935,71.304977000000065],[-73.615554999999915,71.296371000000136],[-73.623046999999872,71.291091999999992],[-73.635558999999944,71.279709000000139],[-73.663054999999986,71.254166000000055],[-73.678878999999995,71.238037000000077],[-73.712783999999999,71.177765000000136],[-73.717772999999966,71.164993000000095],[-73.718886999999938,71.159424000000115],[-73.716399999999965,71.14498900000001],[-73.713622999999984,71.137497000000053],[-73.713622999999984,71.130539000000056],[-73.71665999999999,71.118317000000104],[-73.728606999999954,71.098602000000085],[-73.735824999999977,71.093323000000112],[-73.745833999999888,71.088593000000117],[-73.760833999999932,71.084717000000012],[-73.77806099999998,71.0816650000001],[-73.797774999999945,71.078872999999987],[-73.842498999999918,71.074432000000115],[-73.87388599999997,71.069717000000082],[-73.890288999999996,71.064987000000031],[-73.898346000000004,71.057480000000112],[-73.895003999999972,71.052200000000028],[-73.886672999999973,71.049149],[-73.879439999999875,71.047759999999982],[-73.872771999999998,71.047484999999995],[-73.850554999999986,71.059981999999991],[-73.842223999999987,71.064148000000046],[-73.753066999999987,71.065810999999997],[-73.732772999999952,71.067764000000125],[-73.715835999999854,71.071655000000021],[-73.692764000000011,71.079436999999984],[-73.674438000000009,71.088318000000072],[-73.667220999999984,71.093597000000045],[-73.660552999999993,71.10386699999998],[-73.658339999999953,71.124985000000095],[-73.662505999999951,71.134995000000004],[-73.666655999999875,71.141662999999994],[-73.673614999999927,71.163039999999967],[-73.668883999999991,71.173035000000084],[-73.623610999999983,71.225540000000137],[-73.615829000000019,71.230270000000132],[-73.549164000000019,71.269989000000066],[-73.454726999999991,71.300262000000032],[-73.433884000000035,71.308594000000028],[-73.42860399999995,71.314423000000033],[-73.427779999999984,71.327208999999925],[-73.435271999999941,71.332214000000022],[-73.437774999999988,71.336380000000077],[-73.436110999999983,71.340545999999961],[-73.430282999999974,71.34165999999999],[-73.382216999999969,71.345260999999994],[-73.363051999999982,71.345824999999991],[-73.349730999999963,71.345260999999994],[-73.320847000000015,71.340820000000122],[-73.083617999999944,71.285812000000078],[-73.061110999999983,71.277481000000023],[-73.049437999999952,71.268325999999945],[-73.053878999999938,71.261658000000011],[-73.065001999999936,71.258331000000055],[-73.155562999999972,71.246643000000006],[-73.214721999999995,71.240814],[-73.230835000000013,71.238312000000121],[-73.249434999999949,71.233871000000022],[-73.266113000000018,71.224990999999989],[-73.271941999999854,71.220535000000041],[-73.263061999999991,71.205826000000002],[-73.252501999999936,71.195251000000098],[-73.244445999999982,71.188873000000115],[-73.235001000000011,71.173309000000017],[-73.235001000000011,71.162201000000039],[-73.238327000000027,71.157210999999961],[-73.247771999999998,71.144150000000025],[-73.256957999999884,71.133881000000031],[-73.294448999999929,71.092483999999956],[-73.311110999999926,71.080826000000116],[-73.327788999999996,71.072768999999994],[-73.379439999999988,71.05831900000004],[-73.426391999999908,71.047759999999982],[-73.446105999999986,71.041092000000049],[-73.450835999999924,71.035263000000043],[-73.451950000000011,71.029433999999981],[-73.446945000000028,71.024993999999992],[-73.377486999999917,70.980545000000006],[-73.369995000000017,70.985809000000017],[-73.17361499999987,71.156937000000028],[-73.168610000000001,71.170532000000094],[-73.177490000000034,71.185257000000036],[-73.183060000000012,71.191360000000032],[-73.188048999999978,71.199141999999938],[-73.185271999999998,71.205826000000002],[-73.180283000000031,71.211655000000007],[-73.172226000000023,71.216385000000059],[-73.142226999999934,71.224425999999937],[-73.115554999999915,71.230270000000132],[-73.101395000000025,71.231658999999979],[-73.079726999999991,71.231658999999979],[-73.067779999999857,71.230270000000132],[-73.045546999999885,71.225540000000137],[-73.027221999999881,71.227203000000031],[-73.011947999999961,71.234421000000054],[-73.004455999999948,71.239700000000028],[-72.99499499999996,71.249999999999943],[-72.981673999999941,71.267487000000017],[-72.952788999999996,71.311096000000077],[-72.951400999999976,71.316085999999984],[-72.959731999999974,71.355820000000051],[-72.963622999999927,71.362488000000042],[-72.970001000000025,71.369979999999998],[-72.978332999999907,71.376373000000115],[-72.989440999999999,71.391663000000108],[-72.993057000000022,71.397766000000047],[-72.993331999999953,71.401931999999931],[-72.988892000000021,71.40554800000001],[-72.975829999999917,71.40914900000007],[-72.897232000000031,71.416655999999989],[-72.858046999999942,71.413315000000125],[-72.836394999999925,71.413315000000125],[-72.765839000000028,71.423874000000012],[-72.759170999999924,71.426926000000094],[-72.757507000000032,71.431931000000134],[-72.758621000000005,71.437484999999981],[-72.764724999999942,71.451660000000061],[-72.76916499999993,71.459152000000017],[-72.679992999999911,71.524704000000042],[-72.649733999999967,71.536926000000051],[-72.61860699999994,71.559418000000107],[-72.61332699999997,71.565536000000066],[-72.610274999999888,71.571930000000123],[-72.608337000000006,71.583878000000141],[-72.61082499999992,71.595535000000098],[-72.608337000000006,71.60664399999996],[-72.593886999999995,71.642487000000017],[-72.583327999999881,71.651382000000069],[-72.580291999999929,71.653594999999996],[-72.573333999999932,71.656647000000135],[-72.557495000000017,71.660262999999986],[-72.538054999999929,71.660812000000135],[-72.523620999999991,71.65887500000008],[-72.503066999999874,71.65026899999998],[-72.474715999999944,71.642761000000121],[-72.444442999999978,71.636107999999979],[-72.301102000000014,71.612198000000149],[-72.152221999999938,71.58998100000008],[-71.847777999999948,71.546646000000123],[-71.689437999999996,71.524429000000055],[-71.670546999999999,71.522216999999955],[-71.635559000000001,71.517761000000064],[-71.58555599999994,71.509995000000004],[-71.554169000000002,71.503875999999991],[-71.455275999999913,71.473037999999974],[-71.444442999999922,71.468597000000045],[-71.435271999999998,71.463608000000079],[-71.295546999999942,71.384720000000129],[-71.241378999999995,71.349425999999994],[-71.12332200000003,71.271652000000017],[-71.119719999999973,71.264160000000061],[-71.122771999999998,71.257217000000082],[-71.128601000000003,71.251389000000131],[-71.147780999999952,71.241927999999973],[-71.169448999999986,71.233322000000044],[-71.206116000000009,71.220535000000041],[-71.221389999999985,71.216934000000037],[-71.234726000000023,71.212769000000037],[-71.324722000000008,71.177765000000136],[-71.340560999999866,71.170532000000094],[-71.342772999999909,71.166382000000112],[-71.346114999999941,71.155823000000055],[-71.349441999999897,71.149428999999998],[-71.415832999999907,71.093323000000112],[-71.452224999999999,71.068054000000132],[-71.46444699999995,71.062484999999981],[-71.470275999999956,71.061370999999951],[-71.48971599999993,71.0619200000001],[-71.551102000000014,71.064697000000024],[-71.608336999999949,71.068603999999993],[-71.640839000000028,71.073883000000137],[-71.714447000000007,71.088043000000084],[-71.812499999999943,71.104156000000103],[-71.848891999999921,71.108321999999987],[-71.868880999999874,71.109420999999998],[-71.890288999999882,71.109420999999998],[-71.910827999999924,71.107758000000047],[-72.069457999999997,71.075271999999984],[-72.08555599999994,71.070267000000115],[-72.09973100000002,71.063873000000058],[-72.110275000000001,71.052200000000028],[-72.113892000000021,71.047211000000061],[-72.114440999999999,71.043594000000098],[-72.113326999999913,71.037490999999989],[-72.107223999999974,71.030272999999966],[-72.09973100000002,71.020263999999941],[-72.101944000000003,71.016098000000056],[-72.165557999999919,70.968048000000067],[-72.179717999999923,70.962204000000042],[-72.200286999999946,70.961105000000032],[-72.235001000000011,70.961928999999998],[-72.261123999999995,70.959152000000131],[-72.27806099999998,70.955261000000064],[-72.290557999999976,70.951096000000064],[-72.297226000000023,70.947204999999997],[-72.317504999999983,70.930267000000072],[-72.319457999999997,70.925812000000064],[-72.317504999999983,70.918320000000108],[-72.31138599999997,70.911102000000085],[-72.313889000000017,70.899719000000061],[-72.320557000000008,70.888321000000076],[-72.325561999999877,70.882477000000051],[-72.334166999999979,70.878585999999984],[-72.514724999999999,70.844436999999971],[-72.534438999999907,70.841933999999981],[-72.653609999999958,70.82777400000009],[-72.654174999999896,70.820831000000112],[-72.511397999999872,70.827209000000039],[-72.476944000000003,70.833328000000051],[-72.401108000000022,70.849716000000114],[-72.356110000000001,70.860535000000027],[-72.302779999999927,70.867203000000018],[-72.264175000000023,70.866652999999985],[-72.25,70.863876000000062],[-72.184722999999963,70.844711000000075],[-72.172225999999966,70.840546000000074],[-72.16361999999998,70.83638000000002],[-72.162215999999887,70.829987000000017],[-72.363327000000027,70.686096000000134],[-72.381942999999978,70.677200000000028],[-72.459441999999967,70.65387000000004],[-72.475829999999917,70.649429000000112],[-72.499435000000005,70.646652000000017],[-72.542496000000028,70.644714000000079],[-72.578063999999983,70.641373000000044],[-72.597778000000005,70.63859599999995],[-72.609160999999972,70.636658000000011],[-72.615828999999962,70.633331000000055],[-72.623321999999973,70.628036000000009],[-72.569457999999884,70.609985000000052],[-72.551666000000012,70.608032000000094],[-72.503066999999874,70.629973999999947],[-72.490554999999972,70.634155000000021],[-72.371932999999956,70.654984000000013],[-72.342223999999931,70.662200999999925],[-72.326110999999912,70.667206000000022],[-72.306380999999988,70.677475000000015],[-72.277495999999871,70.698028999999963],[-72.264724999999942,70.70915199999996],[-72.248610999999983,70.726653999999996],[-72.245834000000002,70.733046999999999],[-72.236937999999896,70.743866000000025],[-72.229172000000005,70.749420000000043],[-72.210555999999997,70.758040999999935],[-72.185546999999929,70.76638800000012],[-72.155838000000017,70.773605000000032],[-72.136123999999995,70.776093000000003],[-72.004729999999995,70.786925999999994],[-71.896956999999929,70.80693100000002],[-71.818893000000003,70.823044000000039],[-71.689163000000008,70.850266000000147],[-71.543883999999991,70.872481999999991],[-71.354445999999939,70.882750999999985],[-71.287506000000008,70.906097000000045],[-71.289169000000015,70.908875000000023],[-71.289444000000003,70.913605000000075],[-71.208343999999954,71.004990000000078],[-71.185546999999872,71.019439999999975],[-71.162216000000001,71.028320000000008],[-70.895553999999947,71.099716000000058],[-70.836120999999935,71.114426000000037],[-70.799727999999959,71.118866000000025],[-70.771666999999979,71.118042000000059],[-70.755568999999923,71.11554000000001],[-70.724715999999944,71.10443099999992],[-70.635559000000001,71.072220000000016],[-70.613891999999964,71.062194999999917],[-70.604720999999927,71.056366000000082],[-70.601669000000015,71.053864000000033],[-70.591949,71.042480000000126],[-70.514724999999942,70.940536000000066],[-70.512511999999958,70.926085999999998],[-70.514450000000011,70.921097000000032],[-70.519729999999981,70.913879000000009],[-70.553604000000007,70.894989000000066],[-70.58944699999995,70.876083000000051],[-70.678878999999995,70.840546000000074],[-70.740828999999906,70.75471500000009],[-70.746947999999918,70.745529000000147],[-70.773330999999985,70.734420999999998],[-70.798888999999917,70.725540000000024],[-70.872498000000007,70.703872999999987],[-70.891112999999962,70.698868000000118],[-70.965835999999967,70.684143000000006],[-71.024445000000014,70.674987999999928],[-71.055267000000015,70.669144000000131],[-71.08277899999996,70.661652000000004],[-71.100554999999929,70.654984000000013],[-71.108611999999994,70.649993999999992],[-71.118056999999965,70.638885000000073],[-71.128051999999968,70.62052900000009],[-71.129439999999988,70.614151000000106],[-71.134445000000028,70.602767999999912],[-71.139998999999932,70.596374999999966],[-71.147780999999952,70.591095000000109],[-71.160277999999948,70.586928999999998],[-71.175277999999992,70.583602999999982],[-71.191665999999998,70.58248900000001],[-71.224715999999944,70.582214000000135],[-71.281676999999888,70.584152000000074],[-71.312499999999943,70.587204000000042],[-71.34584000000001,70.591660000000104],[-71.389724999999942,70.600540000000137],[-71.407501000000025,70.603043000000127],[-71.422775000000001,70.604980000000012],[-71.461944999999957,70.60775799999999],[-71.558608999999933,70.609421000000111],[-71.592772999999966,70.606934000000024],[-71.595550999999944,70.603867000000093],[-71.595839999999953,70.600540000000137],[-71.592498999999918,70.589706000000092],[-71.586670000000026,70.581665000000044],[-71.583892999999932,70.576096000000007],[-71.580291999999986,70.564697000000137],[-71.581954999999994,70.551376000000005],[-71.583618000000001,70.546371000000136],[-71.588057999999933,70.542755000000056],[-71.74360699999994,70.466933999999981],[-71.803054999999972,70.428314000000057],[-71.763061999999934,70.427200000000084],[-71.748046999999985,70.425811999999951],[-71.736389000000031,70.423035000000084],[-71.727218999999991,70.417479999999955],[-71.728058000000033,70.410538000000088],[-71.731673999999998,70.397217000000126],[-71.746384000000035,70.3477630000001],[-71.75556899999998,70.329162999999994],[-71.763061999999934,70.323318000000086],[-71.783065999999963,70.313873000000001],[-71.816665999999941,70.303040000000067],[-71.844161999999983,70.29664600000001],[-71.849730999999906,70.290817000000004],[-71.836944999999957,70.289978000000019],[-71.806945999999868,70.295822000000044],[-71.748046999999985,70.309708000000001],[-71.733611999999937,70.313873000000001],[-71.686385999999914,70.355820000000108],[-71.674712999999997,70.36970500000001],[-71.641678000000013,70.444977000000108],[-71.640288999999996,70.450546000000088],[-71.543335000000013,70.514708999999982],[-71.525283999999942,70.524704000000099],[-71.510009999999966,70.535812000000078],[-71.502501999999936,70.546096999999975],[-71.50167799999997,70.55304000000001],[-71.503341999999975,70.56053199999991],[-71.507506999999976,70.569153000000028],[-71.511672999999973,70.573318000000029],[-71.506957999999941,70.57638500000013],[-71.495543999999938,70.578873000000101],[-71.435271999999998,70.578598000000113],[-71.420273000000009,70.57748400000014],[-71.397781000000009,70.574432000000002],[-71.25306699999993,70.549713000000054],[-71.184998000000007,70.538040000000024],[-71.17582699999997,70.535812000000078],[-71.170272999999952,70.533324999999991],[-71.167769999999905,70.531937000000084],[-71.162506000000008,70.525269000000094],[-71.162216000000001,70.520537999999988],[-71.260558999999887,70.377762000000132],[-71.322509999999966,70.312759000000028],[-71.321670999999981,70.30664100000007],[-71.318343999999968,70.299988000000099],[-71.301101999999958,70.284987999999998],[-71.288894999999968,70.280822999999998],[-71.279998999999975,70.274993999999936],[-71.276947000000007,70.268326000000002],[-71.278335999999854,70.262771999999984],[-71.285278000000005,70.251388999999961],[-71.289169000000015,70.246094000000085],[-71.316955999999948,70.218596999999988],[-71.363051999999868,70.182204999999954],[-71.43472300000002,70.126923000000033],[-71.485275000000001,70.088318000000072],[-71.498046999999929,70.080551000000128],[-71.523055999999997,70.052200000000028],[-71.532776000000013,70.038589000000059],[-71.539168999999958,70.026382000000126],[-71.541107000000011,70.022217000000126],[-71.535827999999924,70.019714000000135],[-71.52806099999998,70.020263999999997],[-71.518065999999976,70.024993999999992],[-71.500290000000007,70.038315000000125],[-71.493606999999997,70.050537000000134],[-71.475829999999974,70.068054000000132],[-71.438048999999978,70.086655000000007],[-71.393616000000009,70.104430999999977],[-71.366652999999985,70.111923000000104],[-71.331680000000006,70.128585999999984],[-71.210555999999997,70.262206999999933],[-71.208892999999989,70.267761000000121],[-71.21305799999999,70.272491000000002],[-71.218886999999995,70.276382000000069],[-71.229720999999984,70.281097000000102],[-71.231948999999929,70.294983000000059],[-71.171660999999972,70.368042000000059],[-71.135833999999932,70.410538000000088],[-71.093062999999972,70.460541000000035],[-71.030563000000029,70.540543000000014],[-71.049987999999928,70.546371000000136],[-71.053054999999972,70.55304000000001],[-71.049438000000009,70.558868000000075],[-71.005843999999968,70.61692800000003],[-70.997222999999963,70.625808999999947],[-70.968886999999995,70.63220200000012],[-70.913054999999986,70.637771999999984],[-70.771117999999944,70.668869000000086],[-70.611937999999952,70.723602000000085],[-70.421660999999858,70.772217000000126],[-70.396956999999986,70.778320000000065],[-70.365279999999927,70.782486000000006],[-70.324721999999952,70.785812000000021],[-70.255004999999983,70.793868999999972],[-70.228881999999942,70.797211000000118],[-70.075012000000015,70.83027600000014],[-69.988051999999982,70.853592000000049],[-69.915833000000021,70.877472000000012],[-69.904723999999931,70.881363000000079],[-69.892775999999913,70.883331000000055],[-69.87388599999997,70.883331000000055],[-69.865279999999927,70.882477000000051],[-69.833618000000001,70.87692300000009],[-69.78443900000002,70.864700000000028],[-69.771117999999944,70.857483000000116],[-69.770554000000004,70.856094000000098],[-69.772506999999962,70.85054000000008],[-69.795837000000006,70.820541000000048],[-69.808884000000035,70.81109600000002],[-69.879439999999931,70.768051000000071],[-69.915557999999919,70.74914600000011],[-69.965285999999935,70.727767999999969],[-70.073897999999929,70.687484999999924],[-70.084732000000031,70.683594000000028],[-70.121658000000025,70.67164600000001],[-70.21055599999994,70.646103000000096],[-70.225554999999929,70.641936999999984],[-70.244995000000017,70.638321000000133],[-70.277221999999995,70.636107999999979],[-70.33805799999999,70.637496999999996],[-70.353332999999964,70.638885000000073],[-70.407775999999956,70.638885000000073],[-70.423324999999977,70.636932000000115],[-70.454726999999991,70.627762000000075],[-70.473052999999993,70.617203000000018],[-70.476943999999946,70.612197999999978],[-70.478881999999999,70.606644000000017],[-70.460555999999997,70.574158000000068],[-70.442764000000011,70.561920000000043],[-70.424164000000019,70.551926000000037],[-70.411391999999978,70.542205999999908],[-70.404723999999931,70.536377000000073],[-70.400283999999999,70.530273000000079],[-70.397507000000019,70.524155000000121],[-70.401672000000019,70.519150000000081],[-70.407775999999956,70.514160000000004],[-70.423324999999977,70.506943000000092],[-70.467223999999987,70.493866000000082],[-70.482223999999917,70.490540000000067],[-70.490829000000019,70.486649],[-70.494445999999982,70.484984999999995],[-70.49610899999999,70.479430999999977],[-70.488892000000021,70.476929000000098],[-70.477782999999988,70.47554000000008],[-70.459166999999979,70.47554000000008],[-70.441375999999934,70.477203000000031],[-70.309722999999963,70.498031999999967],[-70.316665999999998,70.528594999999939],[-70.320007000000032,70.536926000000051],[-70.331679999999949,70.548599000000081],[-70.348617999999931,70.559707999999944],[-70.371108999999933,70.573608000000036],[-70.344451999999933,70.613037000000134],[-70.158339999999953,70.615540000000124],[-70.092498999999975,70.612197999999978],[-70.023330999999985,70.610535000000084],[-69.99221799999998,70.645828000000051],[-69.987777999999935,70.649993999999992],[-69.978607000000011,70.653320000000008],[-69.875823999999909,70.677200000000028],[-69.775832999999977,70.682205000000067],[-69.651397999999972,70.725540000000024],[-69.649169999999913,70.731094000000041],[-69.644729999999981,70.741088999999931],[-69.638610999999969,70.746933000000126],[-69.619995000000017,70.758040999999935],[-69.569167999999934,70.771927000000119],[-69.53832999999986,70.778595000000109],[-69.469727000000034,70.790543000000127],[-69.451401000000033,70.791931000000034],[-69.242766999999958,70.782486000000006],[-69.226943999999946,70.77998400000007],[-69.215012000000002,70.776093000000003],[-69.190552000000025,70.766937000000041],[-69.131942999999978,70.737488000000099],[-68.958053999999947,70.688582999999994],[-68.928329000000019,70.681656000000089],[-68.664444000000003,70.626923000000147],[-68.61860699999994,70.62052900000009],[-68.582503999999972,70.617751999999996],[-68.549727999999959,70.613602000000014],[-68.515288999999996,70.609146000000067],[-68.484726000000023,70.604156000000046],[-68.390563999999983,70.582214000000135],[-68.325561999999934,70.566665999999941],[-68.313889000000017,70.563034000000016],[-68.293610000000001,70.551376000000005],[-68.284164000000033,70.540543000000014],[-68.279174999999952,70.531097000000045],[-68.279449,70.519440000000088],[-68.281386999999938,70.51249700000011],[-68.289718999999991,70.500000000000114],[-68.296111999999994,70.494141000000127],[-68.31361400000003,70.484711000000061],[-68.331680000000006,70.476379000000065],[-68.371932999999956,70.455826000000002],[-68.446654999999964,70.413040000000137],[-68.451400999999976,70.409424000000115],[-68.453613000000018,70.403870000000097],[-68.451950000000011,70.392212000000086],[-68.449158000000011,70.384155000000078],[-68.448607999999979,70.375259000000142],[-68.451675000000023,70.372482000000048],[-68.458618000000001,70.369431000000077],[-68.485000999999954,70.367752000000053],[-68.495270000000005,70.368590999999981],[-68.506393000000003,70.371093999999971],[-68.519454999999994,70.37414600000011],[-68.561385999999914,70.389709000000096],[-68.571121000000005,70.393326000000059],[-68.575835999999924,70.396102999999982],[-68.580840999999964,70.404160000000104],[-68.580565999999976,70.415817000000061],[-68.569732999999985,70.426376000000118],[-68.556106999999997,70.435257000000036],[-68.549987999999985,70.440811000000053],[-68.548049999999932,70.447754000000032],[-68.556945999999982,70.461929000000112],[-68.564712999999927,70.466385000000059],[-68.582503999999972,70.464432000000102],[-68.621657999999968,70.45277400000009],[-68.650833000000034,70.441925000000026],[-68.654174999999896,70.439148000000102],[-68.661666999999909,70.431090999999924],[-68.666655999999989,70.422211000000118],[-68.670273000000009,70.408874999999966],[-68.670836999999949,70.404160000000104],[-68.664444000000003,70.384994999999947],[-68.657226999999978,70.375809000000004],[-68.651947000000007,70.359420999999941],[-68.650557999999933,70.349991000000045],[-68.651107999999965,70.345824999999991],[-68.653884999999946,70.341369999999984],[-68.65695199999999,70.33859300000006],[-68.664169000000015,70.335541000000148],[-68.682495000000017,70.329437000000098],[-68.735549999999876,70.317764000000068],[-68.784164000000033,70.310256999999979],[-68.906951999999933,70.293869000000086],[-68.941375999999991,70.29304500000012],[-69.071945000000028,70.28804000000008],[-69.235001000000011,70.270264000000111],[-69.283889999999985,70.264709000000039],[-69.473891999999978,70.238876000000062],[-69.639998999999875,70.204712000000086],[-69.668059999999969,70.198593000000017],[-69.823897999999986,70.155823000000112],[-69.829453000000001,70.15415999999999],[-69.836120999999991,70.150543000000027],[-69.839721999999938,70.144150000000081],[-69.840835999999911,70.141937000000098],[-69.839721999999938,70.134430000000009],[-69.843062999999972,70.121917999999994],[-69.848891999999978,70.116088999999988],[-69.856948999999929,70.110809000000074],[-69.875823999999909,70.101929000000041],[-69.917769999999962,70.085541000000035],[-69.946655000000021,70.076385000000073],[-69.96833799999996,70.074706999999933],[-69.990279999999927,70.074432000000115],[-70.037780999999995,70.072220000000073],[-70.073059000000001,70.069153000000142],[-70.086120999999991,70.066666000000055],[-70.096953999999982,70.063309000000118],[-70.141387999999949,70.043319999999994],[-70.174438000000009,70.034987999999998],[-70.182769999999891,70.031096999999932],[-70.185546999999985,70.028046000000131],[-70.182769999999891,70.021378000000141],[-70.169997999999964,70.014434999999992],[-70.15449499999994,70.015160000000094],[-70.147506999999962,70.015488000000062],[-70.139502999999934,70.017159000000106],[-70.113327000000027,70.02388000000002],[-70.103058000000033,70.028595000000053],[-70.089995999999985,70.036102000000028],[-70.088897999999915,70.038315000000125],[-70.077498999999989,70.049712999999997],[-70.066955999999948,70.053589000000045],[-70.049987999999871,70.057205000000067],[-70.028610000000015,70.058868000000018],[-70.020279000000016,70.058594000000085],[-69.901107999999965,70.048325000000034],[-69.892226999999934,70.045822000000101],[-69.884734999999921,70.042755],[-69.853607000000011,70.029709000000025],[-69.83555599999994,70.020263999999997],[-69.827498999999989,70.014434999999992],[-69.820846999999958,70.008041000000105],[-69.813048999999921,69.99859600000002],[-69.812209999999993,69.991089000000102],[-69.815552000000025,69.984711000000118],[-69.822509999999909,69.981659000000036],[-69.837508999999955,69.978317000000118],[-69.851395000000025,69.978317000000118],[-69.897507000000019,69.983047000000113],[-69.93638599999997,69.98942599999998],[-69.963332999999977,69.991653000000042],[-69.981383999999991,69.991653000000042],[-70.00306699999993,69.989700000000084],[-70.057494999999903,69.981093999999985],[-70.098891999999921,69.973602000000085],[-70.164443999999889,69.961655000000121],[-70.218886999999938,69.941650000000095],[-70.223327999999981,69.938034000000016],[-70.223891999999978,69.929703000000131],[-70.218062999999972,69.925262000000032],[-70.216110000000015,69.92053199999998],[-70.220276000000013,69.915543000000014],[-70.228607000000011,69.911651999999947],[-70.291381999999999,69.889435000000105],[-70.384170999999981,69.860535000000027],[-70.401397999999972,69.859146000000067],[-70.422225999999966,69.860809000000131],[-70.432495000000017,69.862487999999985],[-70.443877999999927,69.860535000000027],[-70.450561999999991,69.857208000000071],[-70.467223999999987,69.844711000000132],[-70.468612999999948,69.842758000000003],[-70.460280999999952,69.841660000000104],[-70.436935000000005,69.839431999999931],[-70.412215999999944,69.837769000000037],[-70.396118000000001,69.837203999999986],[-70.384170999999981,69.837203999999986],[-70.372771999999884,69.838318000000129],[-70.355834999999956,69.841370000000097],[-70.343613000000005,69.845260999999937],[-70.255279999999914,69.879149999999981],[-70.192764000000011,69.907761000000107],[-70.136948000000018,69.933318999999983],[-70.126098999999954,69.940536000000122],[-70.098617999999988,69.953049000000021],[-70.076675000000023,69.958037999999988],[-70.059433000000013,69.959716999999955],[-69.978607000000011,69.964157],[-69.941939999999988,69.963043000000027],[-69.925003000000004,69.961105000000089],[-69.896956999999986,69.956100000000049],[-69.868057000000022,69.953323000000125],[-69.837508999999955,69.952773999999977],[-69.813109999999995,69.955429000000095],[-69.777221999999995,69.963608000000022],[-69.750838999999928,69.972488000000055],[-69.745543999999938,69.974701000000039],[-69.738051999999925,69.981369000000029],[-69.735549999999932,69.985535000000084],[-69.735275000000001,69.990539999999953],[-69.739440999999999,70.001389000000017],[-69.744155999999975,70.008041000000105],[-69.760009999999966,70.017487000000074],[-69.769454999999937,70.021378000000141],[-69.781112999999948,70.024993999999992],[-69.795546999999999,70.031661999999983],[-69.804717999999866,70.038879000000065],[-69.808884000000035,70.049712999999997],[-69.806945999999982,70.055251999999996],[-69.792770000000019,70.080826000000002],[-69.790282999999931,70.084991000000002],[-69.783889999999985,70.089432000000102],[-69.740829000000019,70.114151000000049],[-69.675826999999913,70.139708999999982],[-69.653335999999911,70.14498900000001],[-69.426101999999958,70.176086000000112],[-69.404175000000009,70.177765000000136],[-69.21945199999999,70.188309000000004],[-69.18249499999996,70.187195000000031],[-69.169997999999907,70.18609600000002],[-69.154723999999987,70.183318999999983],[-69.011123999999995,70.178314000000114],[-68.936934999999949,70.193039000000056],[-68.859160999999858,70.203048999999965],[-68.839172000000019,70.203598000000056],[-68.697220000000016,70.203873000000101],[-68.682770000000005,70.203598000000056],[-68.678329000000019,70.202484000000084],[-68.676391999999964,70.201660000000118],[-68.647507000000019,70.158324999999991],[-68.642501999999979,70.149429000000055],[-68.645003999999915,70.145264000000054],[-68.741378999999995,70.065262000000075],[-68.746658000000025,70.062484999999981],[-68.783066000000019,70.044433999999967],[-68.800551999999982,70.037490999999989],[-68.813323999999966,70.032760999999994],[-68.868056999999965,70.016937000000041],[-68.900283999999942,70.011658000000068],[-68.954453000000001,70.00471500000009],[-69.088608000000022,69.974991000000045],[-69.15306099999998,69.953049000000021],[-69.313109999999938,69.882294000000059],[-69.346114999999998,69.855545000000006],[-69.370543999999938,69.83998100000008],[-69.398055999999997,69.828598000000056],[-69.426940999999943,69.819716999999969],[-69.439712999999927,69.816376000000105],[-69.460555999999997,69.813309000000004],[-69.474716000000001,69.813599000000011],[-69.516953000000001,69.819992000000127],[-69.543335000000013,69.826934999999935],[-69.565826000000015,69.834152000000074],[-69.580841000000021,69.836928999999998],[-69.683884000000035,69.83998100000008],[-69.713897999999972,69.83998100000008],[-69.744995000000017,69.837769000000037],[-69.760009999999966,69.834991000000002],[-69.770844000000011,69.831940000000031],[-69.805832000000009,69.819992000000127],[-69.827788999999996,69.809418000000107],[-69.844161999999926,69.800261999999975],[-69.855834999999956,69.793593999999985],[-69.87249799999995,69.781096999999988],[-69.998046999999985,69.669983000000116],[-70,69.66415400000011],[-70.000838999999985,69.656097000000102],[-70.00140399999998,69.622757000000036],[-69.998885999999914,69.616089000000102],[-69.990554999999915,69.614990000000091],[-69.944442999999978,69.649719000000005],[-69.816956000000005,69.724426000000051],[-69.810821999999973,69.72886699999998],[-69.808334000000002,69.733046999999999],[-69.808334000000002,69.73803700000002],[-69.81471299999987,69.75471500000009],[-69.815001999999993,69.760269000000108],[-69.814163000000008,69.763884999999959],[-69.805557000000022,69.772491000000059],[-69.783066000000019,69.785812000000021],[-69.764724999999999,69.795531999999923],[-69.754455999999948,69.799712999999997],[-69.741942999999992,69.803589000000102],[-69.730835000000013,69.806090999999981],[-69.713333000000034,69.807479999999998],[-69.643065999999976,69.810806000000014],[-69.602782999999988,69.809708000000114],[-69.572783999999899,69.80442800000003],[-69.561110999999983,69.799988000000042],[-69.545273000000009,69.794434000000024],[-69.489989999999921,69.779709000000082],[-69.45666499999993,69.775818000000015],[-69.446655000000021,69.775543000000027],[-69.409163999999976,69.776381999999955],[-69.395844000000011,69.777771000000143],[-69.384734999999921,69.780823000000055],[-69.378051999999968,69.783875000000023],[-69.313889000000017,69.816376000000105],[-69.291381999999999,69.831099999999935],[-69.279448999999943,69.84248400000007],[-69.26916499999993,69.852768000000083],[-69.253066999999987,69.862198000000149],[-69.200561999999877,69.883606000000043],[-69.188048999999978,69.887771999999984],[-69.101943999999946,69.916091999999992],[-69.076674999999966,69.923874000000126],[-68.945540999999992,69.949997000000053],[-68.933884000000035,69.951096000000064],[-68.870270000000005,69.953049000000021],[-68.801940999999886,69.952208999999982],[-68.76666299999988,69.948868000000118],[-68.751953000000015,69.946639999999945],[-68.622817999999938,69.98240699999991],[-68.471664000000033,70.046646000000067],[-68.338333000000034,70.064148000000102],[-68.241378999999995,70.095825000000048],[-68.221389999999985,70.102768000000026],[-68.207229999999981,70.109420999999998],[-68.196380999999974,70.119431000000077],[-68.193603999999993,70.123596000000077],[-68.203338999999971,70.128860000000088],[-68.229445999999939,70.135269000000108],[-68.268616000000009,70.13749700000011],[-68.290832999999907,70.137207000000046],[-68.308333999999945,70.135269000000108],[-68.320557000000008,70.135543999999982],[-68.333618000000001,70.139160000000004],[-68.349166999999852,70.168045000000063],[-68.348617999999988,70.172760000000096],[-68.345275999999956,70.188034000000016],[-68.318618999999956,70.218596999999988],[-68.31361400000003,70.222214000000122],[-68.160004000000015,70.282761000000107],[-68.039443999999946,70.301376000000005],[-67.808043999999938,70.262496999999996],[-67.794723999999974,70.258881000000088],[-67.774170000000026,70.250549000000092],[-67.768065999999976,70.243866000000139],[-67.760009999999909,70.229706000000022],[-67.740554999999858,70.218872000000147],[-67.697219999999959,70.202209000000096],[-67.674437999999952,70.193587999999977],[-67.648055999999997,70.18609600000002],[-67.591674999999952,70.165267999999969],[-67.575561999999934,70.158324999999991],[-67.556945999999982,70.149155000000121],[-67.528335999999967,70.133881000000031],[-67.412215999999944,70.068878000000097],[-67.404723999999987,70.06442300000009],[-67.378052000000025,70.048035000000027],[-67.242492999999968,69.958327999999995],[-67.222778000000005,69.943863000000079],[-67.216949,69.937759000000028],[-67.152495999999985,69.817764000000011],[-67.148620999999991,69.810257000000092],[-67.127776999999867,69.726929000000041],[-67.193603999999993,69.721924000000001],[-67.371384000000035,69.714432000000045],[-67.391113000000018,69.713882000000012],[-67.406951999999876,69.714705999999978],[-67.436110999999926,69.719147000000078],[-67.499999999999943,69.731833999999992],[-67.602492999999924,69.750275000000101],[-67.761123999999995,69.778595000000109],[-67.77305599999994,69.779434000000094],[-67.81082200000003,69.778869999999927],[-67.99610899999999,69.774429000000055],[-68.013061999999991,69.771927000000119],[-68.087783999999999,69.756104000000107],[-68.208054000000004,69.715546000000018],[-68.216659999999933,69.71026599999999],[-68.222777999999948,69.704711999999972],[-68.228606999999897,69.691360000000145],[-68.230285999999978,69.684418000000051],[-68.24110399999995,69.674987999999985],[-68.31138599999997,69.633331000000112],[-68.323623999999995,69.628860000000032],[-68.329453000000001,69.627762000000132],[-68.352782999999988,69.626923000000147],[-68.496383999999978,69.625809000000004],[-68.518065999999919,69.626083000000108],[-68.620269999999891,69.637206999999989],[-68.64527899999996,69.641098000000056],[-68.839995999999985,69.616089000000102],[-68.980834999999956,69.589157],[-69.188599000000011,69.54193099999992],[-69.201110999999912,69.538040000000024],[-69.220001000000025,69.535812000000078],[-69.325012000000015,69.532486000000063],[-69.342772999999966,69.532486000000063],[-69.364165999999955,69.53776600000009],[-69.410277999999948,69.546097000000032],[-69.426940999999943,69.548035000000141],[-69.549438000000009,69.560531999999967],[-69.630829000000006,69.56721500000009],[-69.688889000000017,69.569443000000092],[-69.737777999999992,69.568329000000062],[-69.75111400000003,69.56721500000009],[-69.838608000000022,69.558868000000132],[-70.030837999999903,69.536102000000085],[-70.028610000000015,69.530823000000112],[-70.025283999999999,69.527481000000023],[-70.011123999999995,69.521103000000039],[-69.995543999999995,69.517211999999972],[-69.964721999999995,69.513885000000016],[-69.899444999999957,69.507217000000082],[-69.885833999999988,69.507217000000082],[-69.866942999999878,69.509430000000009],[-69.844161999999926,69.517487000000017],[-69.824448000000018,69.527205999999978],[-69.815826000000015,69.530548000000124],[-69.803878999999995,69.534988000000112],[-69.789443999999946,69.538589000000002],[-69.732773000000009,69.545258000000047],[-69.698607999999922,69.548324999999977],[-69.68499799999995,69.548874000000126],[-69.663329999999917,69.548324999999977],[-69.613891999999908,69.54304500000012],[-69.506957999999997,69.529433999999924],[-69.449996999999883,69.518875000000094],[-69.375823999999909,69.509720000000016],[-69.343062999999972,69.505828999999949],[-69.323333999999988,69.505264000000125],[-69.299987999999928,69.506103999999993],[-69.206664999999987,69.514998999999989],[-69.151671999999905,69.520264000000054],[-69.005844000000025,69.535812000000078],[-68.995270000000005,69.539703000000145],[-68.982223999999974,69.547211000000004],[-68.971389999999985,69.555817000000104],[-68.957229999999981,69.560531999999967],[-68.926101999999901,69.566665999999998],[-68.76945499999988,69.587494000000049],[-68.752501999999879,69.589431999999988],[-68.6683349999999,69.590820000000065],[-68.611938000000009,69.587494000000049],[-68.544723999999917,69.579987000000131],[-68.528060999999923,69.577208999999925],[-68.317229999999881,69.530273000000079],[-68.293334999999956,69.523604999999918],[-68.181945999999982,69.49832200000003],[-68.02555799999999,69.466095000000053],[-67.982223999999974,69.457489000000123],[-67.946105999999929,69.454712000000029],[-67.926392000000021,69.454163000000108],[-67.893340999999964,69.454437000000041],[-67.874161000000015,69.456649999999968],[-67.861937999999952,69.460266000000047],[-67.840835999999967,69.469436999999971],[-67.819457999999941,69.476929000000098],[-67.806945999999868,69.480819999999994],[-67.792220999999984,69.48414600000001],[-67.604996000000028,69.478043000000071],[-67.562209999999993,69.471924000000058],[-67.511672999999973,69.466095000000053],[-67.475829999999974,69.463042999999914],[-67.432770000000005,69.463318000000129],[-67.305266999999958,69.467209000000025],[-67.258347000000015,69.467484000000013],[-67.210006999999962,69.46138000000002],[-67.180832000000009,69.454712000000029],[-66.921111999999994,69.379150000000095],[-66.795546999999885,69.341094999999996],[-66.785277999999948,69.337204000000099],[-66.774444999999957,69.331940000000088],[-66.767226999999934,69.327484000000027],[-66.694992000000013,69.281661999999983],[-66.682769999999948,69.270264000000111],[-66.650283999999942,69.236374000000012],[-66.645844000000011,69.224991000000045],[-66.646666999999979,69.203598000000113],[-66.658614999999941,69.188309000000004],[-66.668335000000013,69.178314000000114],[-66.689437999999939,69.161926000000051],[-66.720001000000025,69.144150000000081],[-66.730559999999969,69.138885000000016],[-66.75306699999993,69.129424999999969],[-66.758620999999948,69.128036000000122],[-66.776107999999965,69.128860000000088],[-66.837219000000005,69.135818000000086],[-66.84944200000001,69.138321000000076],[-66.912780999999995,69.154984000000127],[-66.928328999999906,69.164153999999996],[-66.953339000000028,69.172211000000004],[-66.965285999999992,69.174423000000047],[-66.996947999999975,69.177764999999965],[-67.132767000000001,69.182479999999998],[-67.371932999999956,69.184417999999937],[-67.385558999999944,69.183868000000132],[-67.414718999999991,69.178314000000114],[-67.427215999999987,69.174423000000047],[-67.458892999999932,69.162491000000102],[-67.466109999999958,69.160812000000078],[-67.50556899999998,69.157486000000063],[-67.521117999999944,69.15776100000005],[-67.648620999999991,69.166931000000091],[-67.676391999999964,69.169434000000081],[-67.864166000000012,69.221924000000115],[-68.18447900000001,69.308014000000014],[-68.209732000000031,69.311370999999951],[-68.221663999999976,69.312194999999917],[-68.232772999999952,69.311370999999951],[-68.251953000000015,69.309708000000057],[-68.285278000000005,69.304428000000144],[-68.31082200000003,69.298598999999967],[-68.327498999999989,69.296097000000088],[-68.344161999999983,69.294708000000071],[-68.355835000000013,69.294144000000131],[-68.375548999999921,69.294708000000071],[-68.464721999999938,69.301651000000049],[-68.675277999999992,69.322220000000016],[-68.740279999999984,69.330551000000128],[-68.811935000000005,69.341933999999924],[-68.84445199999999,69.346100000000035],[-68.944716999999912,69.354980000000069],[-68.962783999999999,69.356369000000029],[-68.984436000000017,69.356934000000081],[-69.015015000000005,69.354980000000069],[-69.040282999999988,69.349716000000058],[-69.176665999999955,69.310806000000127],[-69.203063999999927,69.303040000000067],[-69.241378999999881,69.284149000000014],[-69.253890999999953,69.27526899999998],[-69.25778200000002,69.270264000000111],[-69.25167799999997,69.263610999999969],[-69.246947999999975,69.261107999999979],[-69.235001000000011,69.259720000000073],[-69.221938999999963,69.261658000000011],[-69.213057999999933,69.264709000000039],[-69.203339000000028,69.269989000000123],[-69.197768999999994,69.275542999999914],[-69.176392000000021,69.287490999999989],[-69.156386999999938,69.297484999999995],[-69.146118000000001,69.300537000000077],[-69.133330999999998,69.303314],[-69.013335999999981,69.327484000000027],[-68.956664999999873,69.331940000000088],[-68.941100999999946,69.332489000000066],[-68.921386999999868,69.331940000000088],[-68.658339999999896,69.300262000000089],[-68.537216000000001,69.285262999999986],[-68.504729999999995,69.280272999999966],[-68.330565999999919,69.27526899999998],[-68.251953000000015,69.27748100000008],[-68.230835000000013,69.277771000000087],[-68.198607999999979,69.274703999999986],[-68.172225999999966,69.269714000000079],[-68.159438999999963,69.266098000000056],[-68.14834599999989,69.261658000000011],[-68.139724999999885,69.257766999999944],[-68.088608000000022,69.228867000000093],[-68.083618000000001,69.225540000000137],[-68.077498999999875,69.21748400000007],[-68.081679999999949,69.211928999999998],[-68.091384999999946,69.205551000000071],[-68.103881999999999,69.202209000000096],[-68.129715000000033,69.197754000000089],[-68.163054999999929,69.199997000000053],[-68.263061999999991,69.211380000000077],[-68.410827999999924,69.221374999999966],[-68.549987999999985,69.226928999999984],[-68.643616000000009,69.229431000000034],[-68.664444000000003,69.228043000000127],[-68.689986999999917,69.223602000000028],[-68.839721999999938,69.214706000000092],[-68.923049999999989,69.220825000000104],[-68.967772999999966,69.221099999999979],[-68.948333999999875,69.214156999999943],[-68.93971299999987,69.211928999999998],[-68.913054999999986,69.20748900000001],[-68.862777999999992,69.201934999999992],[-68.80749499999996,69.198868000000061],[-68.788054999999986,69.198318000000029],[-68.767226999999991,69.199707000000046],[-68.737777999999992,69.203598000000113],[-68.704726999999991,69.209152000000074],[-68.65695199999999,69.210541000000092],[-68.618057000000022,69.209152000000074],[-68.515015000000005,69.20248400000014],[-68.502501999999993,69.198593000000074],[-68.505279999999914,69.195815999999979],[-68.513901000000033,69.191925000000083],[-68.690551999999968,69.141098],[-68.707229999999925,69.138321000000076],[-68.872771999999998,69.120529000000033],[-68.998046999999985,69.103591999999992],[-68.961670000000026,69.103867000000037],[-68.929717999999923,69.100266000000147],[-68.926940999999943,69.098328000000038],[-68.926666000000012,69.079987000000017],[-68.957779000000016,69.005264000000011],[-68.958892999999989,69.003052000000139],[-68.969161999999926,68.993591000000038],[-68.994155999999919,68.982483000000002],[-69.006118999999956,68.978317000000118],[-69.018889999999885,68.975815000000068],[-69.028885000000002,68.971375000000023],[-69.025833000000034,68.968597000000045],[-69.017501999999979,68.966385000000002],[-69.005568999999923,68.964705999999978],[-68.998046999999985,68.964995999999985],[-68.973052999999993,68.970824999999991],[-68.962783999999999,68.974701000000039],[-68.946380999999917,68.982483000000002],[-68.930557000000022,68.992752000000053],[-68.920272999999952,69.00277699999998],[-68.89416499999993,69.044982999999945],[-68.89416499999993,69.050537000000134],[-68.892226999999991,69.062194999999974],[-68.889724999999999,69.066376000000048],[-68.881942999999865,69.07777400000009],[-68.879165999999941,69.081374999999923],[-68.872497999999894,69.084991000000002],[-68.858336999999892,69.088318000000129],[-68.753615999999965,69.109711000000061],[-68.471114999999998,69.166381999999999],[-68.412780999999939,69.176926000000037],[-68.381377999999927,69.175262000000032],[-68.351394999999968,69.171646000000123],[-68.178329000000019,69.14665199999996],[-68.089447000000007,69.126082999999994],[-67.725280999999939,69.032211000000132],[-67.715012000000002,69.029160000000104],[-67.708054000000004,69.024704000000042],[-67.705840999999964,69.01638800000012],[-67.721114999999941,69.009720000000129],[-67.974715999999944,68.9727630000001],[-68.029448999999943,68.971375000000023],[-68.058884000000035,68.973602000000085],[-68.211120999999935,68.991928000000087],[-68.241378999999995,68.996933000000126],[-68.268065999999976,69.00277699999998],[-68.314162999999951,69.010544000000095],[-68.335007000000019,69.009155000000078],[-68.535552999999879,68.984146000000123],[-68.548614999999984,68.982208000000014],[-68.552779999999984,68.977203000000145],[-68.554717999999923,68.971100000000035],[-68.556106999999997,68.964157],[-68.545272999999952,68.959717000000012],[-68.440552000000025,68.9727630000001],[-68.337509000000011,68.985809000000074],[-68.320281999999963,68.986374000000069],[-68.303054999999972,68.985809000000074],[-68.290557999999976,68.982208000000014],[-68.285278000000005,68.977478000000133],[-68.28443900000002,68.974701000000039],[-68.264175000000023,68.964705999999978],[-68.196945000000028,68.94999700000011],[-68.186661000000015,68.947754000000145],[-68.169448999999986,68.946930000000009],[-68.152221999999938,68.946930000000009],[-68.116104000000007,68.94747899999993],[-68.081679999999949,68.94747899999993],[-68.064163000000008,68.946091000000024],[-68.048339999999996,68.943863000000079],[-68.039992999999981,68.941360000000088],[-67.974715999999944,68.865265000000079],[-67.972778000000005,68.859146000000067],[-67.977492999999981,68.855545000000006],[-67.986938000000009,68.854431000000034],[-68.006118999999899,68.854979999999955],[-68.082229999999981,68.862487999999985],[-68.129165999999998,68.867751999999996],[-68.18360899999999,68.878586000000041],[-68.242217999999866,68.889984000000027],[-68.256119000000012,68.892212000000029],[-68.289444000000003,68.894989000000123],[-68.37388599999997,68.897217000000069],[-68.475280999999995,68.899429000000112],[-68.489990000000034,68.897491000000002],[-68.491668999999945,68.896652000000017],[-68.488892000000021,68.893326000000002],[-68.48582499999992,68.89027400000009],[-68.477218999999934,68.886932000000115],[-68.463333000000034,68.885544000000039],[-68.43249499999996,68.883331000000055],[-68.373046999999929,68.88220200000012],[-68.353606999999954,68.88108799999992],[-68.293059999999969,68.874984999999981],[-68.266662999999994,68.869980000000112],[-68.179717999999923,68.851928999999984],[-68.133895999999936,68.837203999999986],[-68.008347000000015,68.816666000000112],[-67.972778000000005,68.811920000000043],[-67.955565999999976,68.810257000000092],[-67.916945999999939,68.808318999999983],[-67.886672999999917,68.808868000000075],[-67.861389000000031,68.805542000000059],[-67.778335999999911,68.786102000000085],[-67.771941999999967,68.78276100000005],[-67.771392999999932,68.781372000000033],[-67.774718999999948,68.77915999999999],[-67.803329000000019,68.774155000000121],[-67.820006999999976,68.772766000000104],[-67.857772999999952,68.771378000000027],[-67.872771999999998,68.771652000000131],[-67.915008999999998,68.774155000000121],[-67.944442999999922,68.778046000000018],[-68.076110999999969,68.80192599999998],[-68.170836999999892,68.814697000000081],[-68.352218999999934,68.832488999999953],[-68.426392000000021,68.839157000000114],[-68.546660999999972,68.84664900000007],[-68.565551999999968,68.847214000000122],[-68.58805799999999,68.846374999999966],[-68.606109999999887,68.842758000000003],[-68.610549999999989,68.839157000000114],[-68.611663999999962,68.835815000000025],[-68.604445999999939,68.83137499999998],[-68.593886999999995,68.827484000000084],[-68.557769999999948,68.821380999999974],[-68.52694699999995,68.795258000000047],[-68.602492999999924,68.794983000000002],[-68.678878999999938,68.796646000000123],[-68.795273000000009,68.799423000000047],[-68.807220000000029,68.800261999999975],[-68.900283999999942,68.80720500000001],[-68.967498999999918,68.814697000000081],[-68.995270000000005,68.819153000000028],[-69.00389100000001,68.822220000000129],[-69.015015000000005,68.827209000000096],[-69.105835000000013,68.848602000000028],[-69.25111400000003,68.872481999999991],[-69.28083799999996,68.875809000000118],[-69.323058999999944,68.876648000000102],[-69.361938000000009,68.874146000000053],[-69.378051999999968,68.871368000000018],[-69.389998999999989,68.867476999999951],[-69.398055999999997,68.862198000000149],[-69.394454999999994,68.85775799999999],[-69.379990000000021,68.854979999999955],[-69.36082499999992,68.854431000000034],[-69.331679999999949,68.856934000000024],[-69.279448999999943,68.855255],[-69.245543999999882,68.851379000000122],[-69.185546999999985,68.842209000000082],[-69.171111999999994,68.838882000000126],[-69.162215999999944,68.835815000000025],[-69.152221999999938,68.828048999999965],[-69.153884999999946,68.827209000000096],[-69.163054999999986,68.826096000000007],[-69.229996000000028,68.827209000000096],[-69.294158999999922,68.831940000000031],[-69.315001999999993,68.831664999999987],[-69.357773000000009,68.829163000000108],[-69.368606999999997,68.827209000000096],[-69.375548999999978,68.824997000000053],[-69.382767000000001,68.819153000000028],[-69.383895999999993,68.816376000000105],[-69.381377999999984,68.814986999999917],[-69.37110899999999,68.812759000000142],[-69.193603999999993,68.804153000000042],[-68.971114999999998,68.791931000000091],[-68.959166999999923,68.789703000000145],[-68.944992000000013,68.786926000000051],[-68.942490000000021,68.784988000000112],[-68.196380999999974,68.706940000000145],[-68.049437999999952,68.681655999999975],[-68.044998000000021,68.678314000000057],[-68.046111999999937,68.676376000000062],[-68.087508999999955,68.629425000000083],[-68.094451999999933,68.627762000000132],[-68.34445199999999,68.628586000000098],[-68.56220999999988,68.651931999999988],[-68.621933000000013,68.655823000000055],[-68.657776000000013,68.656372000000147],[-68.680283000000031,68.65554800000001],[-68.747771999999941,68.649155000000064],[-68.777785999999935,68.643051000000014],[-68.89416499999993,68.607208000000014],[-68.902495999999985,68.603592000000106],[-68.900283999999942,68.603043000000014],[-68.835830999999985,68.589157],[-68.804169000000002,68.589980999999966],[-68.757674999999949,68.600646999999981],[-68.749343999999951,68.602654000000143],[-68.735001000000011,68.607314999999971],[-68.711165999999992,68.621147000000121],[-68.679992999999911,68.630814000000044],[-68.647507000000019,68.635544000000095],[-68.62860099999989,68.635544000000095],[-68.594161999999926,68.633605999999986],[-68.563048999999921,68.629425000000083],[-68.533324999999991,68.624985000000038],[-68.481383999999935,68.614990000000148],[-68.475280999999995,68.61303700000002],[-68.470276000000013,68.609146000000123],[-68.46945199999999,68.606369000000029],[-68.483321999999987,68.596939000000134],[-68.50389100000001,68.589980999999966],[-68.519454999999994,68.585815000000082],[-68.533889999999928,68.583878000000027],[-68.605834999999956,68.578872999999987],[-68.648345999999947,68.577773999999977],[-68.660004000000015,68.578872999999987],[-68.682883999999945,68.575211000000024],[-68.69506100000001,68.574379000000135],[-68.707053999999971,68.57337200000012],[-68.712387000000035,68.572044000000005],[-68.716064000000017,68.569382000000019],[-68.716727999999932,68.568047000000035],[-68.707053999999971,68.5660400000001],[-68.696724000000017,68.565207999999984],[-68.656113000000005,68.559708000000001],[-68.460007000000019,68.562195000000088],[-68.447220000000016,68.563599000000067],[-68.435271999999941,68.567490000000134],[-68.427215999999987,68.571930000000009],[-68.422774999999945,68.576096000000064],[-68.420272999999895,68.579711999999915],[-68.419997999999964,68.585266000000104],[-68.416397000000018,68.591369999999984],[-68.396117999999944,68.593048000000067],[-68.337783999999999,68.593323000000112],[-68.244445999999982,68.588043000000027],[-68.215560999999866,68.585541000000148],[-68.136672999999973,68.572220000000016],[-68.06534599999992,68.545822000000044],[-67.920273000000009,68.534424000000001],[-67.866942999999992,68.509720000000073],[-67.809158000000025,68.531097000000102],[-67.673049999999932,68.561096000000077],[-67.664169000000015,68.562759000000028],[-67.643615999999952,68.562759000000028],[-67.539443999999946,68.550812000000064],[-67.52555799999999,68.548598999999911],[-67.500838999999928,68.538315000000068],[-67.492217999999923,68.527206000000035],[-67.493056999999965,68.523604999999975],[-67.502228000000002,68.514999000000046],[-67.510559000000001,68.511382999999967],[-67.51916499999993,68.509155000000021],[-67.543059999999912,68.506103999999993],[-67.607773000000009,68.503876000000048],[-67.621658000000025,68.5],[-67.628052000000025,68.496368000000018],[-67.634734999999921,68.486649],[-67.621383999999978,68.384429999999952],[-67.618606999999997,68.381088000000034],[-67.612502999999947,68.379424999999912],[-67.603332999999907,68.378860000000088],[-67.59445199999999,68.381363000000079],[-67.551102000000014,68.414428999999984],[-67.548339999999996,68.440262000000132],[-67.549437999999896,68.443863000000022],[-67.555832000000009,68.455261000000007],[-67.511123999999938,68.483322000000101],[-67.426102000000014,68.494430999999963],[-67.335555999999997,68.49693300000007],[-67.31639100000001,68.496094000000085],[-67.232497999999964,68.480545000000006],[-67.224166999999966,68.47665400000011],[-67.217498999999918,68.471924000000058],[-67.213622999999927,68.440811000000053],[-67.223052999999993,68.426086000000112],[-67.307770000000005,68.423309000000017],[-67.325835999999981,68.421371000000079],[-67.332779000000016,68.418869000000029],[-67.335830999999985,68.416092000000106],[-67.338608000000022,68.411926000000051],[-67.33805799999999,68.409988000000055],[-67.324448000000018,68.40776100000005],[-67.15695199999999,68.406372000000033],[-67.111938000000009,68.411926000000051],[-67.104996000000028,68.414153999999996],[-67.100554999999929,68.418320000000051],[-67.09722899999997,68.45138500000013],[-67.100280999999995,68.457214000000135],[-67.106658999999866,68.460541000000092],[-67.116652999999985,68.463607999999965],[-67.127212999999983,68.46804800000001],[-67.129990000000021,68.472763000000043],[-67.126937999999996,68.475540000000137],[-67.112777999999992,68.478867000000093],[-66.908050999999944,68.453873000000101],[-66.821395999999993,68.465271000000087],[-66.803054999999972,68.467209000000025],[-66.787506000000008,68.464996000000099],[-66.706954999999994,68.44470200000012],[-66.697768999999937,68.428039999999953],[-66.724166999999909,68.429153000000042],[-66.782775999999956,68.426086000000112],[-66.904998999999918,68.416382000000112],[-66.920546999999942,68.411102000000085],[-66.921660999999915,68.408324999999991],[-66.914168999999902,68.398880000000077],[-66.913054999999986,68.39498900000001],[-66.914444000000003,68.391937000000098],[-66.93638599999997,68.374420000000043],[-66.946654999999907,68.369980000000055],[-66.955001999999979,68.367477000000065],[-67.005843999999968,68.354430999999977],[-67.011123999999938,68.353591999999992],[-67.02416999999997,68.35386699999998],[-67.048889000000031,68.355820000000108],[-67.075561999999934,68.360535000000141],[-67.111388999999974,68.370255000000043],[-67.130279999999914,68.379700000000128],[-67.142226999999991,68.382750999999985],[-67.230559999999969,68.39498900000001],[-67.245543999999995,68.395827999999995],[-67.286391999999978,68.395827999999995],[-67.379715000000033,68.390823000000125],[-67.411117999999931,68.382750999999985],[-67.415557999999976,68.378036000000122],[-67.418883999999991,68.376373000000001],[-67.455565999999919,68.36775200000011],[-67.494719999999973,68.360809000000074],[-67.595276000000013,68.347762999999986],[-67.631667999999991,68.345261000000107],[-67.646117999999944,68.344711000000075],[-67.743880999999988,68.343322999999941],[-67.781386999999938,68.337204000000099],[-67.810546999999985,68.328598],[-67.832229999999925,68.320267000000115],[-67.849730999999963,68.309981999999991],[-67.865829000000019,68.29971299999994],[-67.87110899999999,68.292755],[-67.878326000000015,68.26527400000009],[-67.869720000000029,68.259995000000117],[-67.860001000000011,68.258331000000112],[-67.845551,68.258880999999974],[-67.833327999999938,68.261383000000023],[-67.826675000000023,68.264434999999935],[-67.820281999999906,68.268599999999935],[-67.818068999999923,68.274155000000064],[-67.821120999999948,68.284987999999998],[-67.820557000000008,68.289703000000031],[-67.815551999999968,68.292206000000022],[-67.752501999999993,68.318878000000097],[-67.745269999999891,68.320541000000048],[-67.597778000000005,68.323044000000039],[-67.583069000000023,68.308029000000033],[-67.572234999999978,68.273314999999968],[-67.576675000000023,68.268599999999935],[-67.583327999999995,68.265548999999965],[-67.591674999999952,68.263046000000145],[-67.616394000000014,68.258331000000112],[-67.646666999999979,68.25360100000006],[-67.662780999999995,68.252487000000087],[-67.689437999999996,68.24803200000008],[-67.695267000000001,68.242477000000008],[-67.694992000000013,68.241089000000102],[-67.690826000000015,68.239700000000084],[-67.679717999999923,68.238876000000118],[-67.666945999999996,68.239975000000129],[-67.579726999999934,68.251389000000017],[-67.570846999999901,68.253052000000139],[-67.551666000000012,68.258331000000112],[-67.546950999999979,68.260544000000095],[-67.539169000000015,68.265823000000069],[-67.533066000000019,68.271378000000141],[-67.531112999999948,68.278320000000065],[-67.535004000000015,68.285538000000031],[-67.541381999999999,68.288879000000065],[-67.546111999999937,68.294144000000131],[-67.544997999999964,68.296371000000022],[-67.540282999999931,68.29971299999994],[-67.523894999999982,68.308594000000085],[-67.494155999999975,68.321930000000009],[-67.401947000000007,68.352478000000019],[-67.394729999999981,68.354156000000103],[-67.385558999999944,68.354430999999977],[-67.243880999999988,68.358322000000044],[-67.232497999999964,68.357483000000059],[-67.182495000000017,68.349426000000108],[-67.130279999999914,68.340820000000008],[-67.078063999999927,68.331100000000106],[-67.016113000000018,68.318603999999993],[-67.011672999999917,68.316086000000041],[-67.018340999999964,68.311645999999996],[-67.032500999999968,68.309143000000006],[-67.152221999999995,68.299987999999985],[-67.235000999999954,68.291655999999989],[-67.303878999999938,68.258880999999974],[-67.319732999999985,68.249709999999993],[-67.327788999999939,68.243590999999981],[-67.333617999999944,68.237761999999975],[-67.337509000000011,68.232483000000002],[-67.338897999999915,68.227767999999969],[-67.33944699999995,68.221649000000127],[-67.33944699999995,68.205551000000071],[-67.335007000000019,68.200821000000019],[-67.327498999999932,68.18664600000011],[-67.327788999999939,68.181091000000038],[-67.338608000000022,68.171097000000032],[-67.34584000000001,68.166091999999992],[-67.37110899999999,68.153869999999984],[-67.387787000000003,68.146378000000084],[-67.398620999999878,68.143875000000094],[-67.412505999999951,68.143051000000128],[-67.430283000000031,68.144714000000079],[-67.456954999999994,68.149429000000112],[-67.477782999999988,68.154984000000013],[-67.513901000000033,68.162491000000102],[-67.528885000000002,68.165268000000026],[-67.567779999999971,68.169144000000074],[-67.581116000000009,68.168869000000086],[-67.598891999999978,68.164992999999981],[-67.598342999999943,68.162766000000147],[-67.575561999999934,68.154984000000013],[-67.544723999999917,68.14776599999999],[-67.480285999999978,68.134720000000016],[-67.466949,68.132202000000063],[-67.438048999999978,68.128036000000009],[-67.408050999999944,68.124984999999981],[-67.396956999999929,68.124694999999974],[-67.374161000000015,68.127472000000012],[-67.353881999999999,68.135268999999994],[-67.307770000000005,68.155548000000124],[-67.304168999999945,68.158600000000035],[-67.273894999999925,68.19081100000011],[-67.272781000000009,68.195525999999973],[-67.274718999999891,68.200546000000031],[-67.279175000000009,68.205261000000064],[-67.283614999999998,68.211929000000055],[-67.288894999999968,68.226379000000122],[-67.289444000000003,68.230820000000051],[-67.289444000000003,68.236374000000069],[-67.274718999999891,68.244141000000013],[-67.178878999999995,68.269989000000123],[-67.139724999999999,68.27998400000007],[-67.057769999999891,68.291092000000049],[-67.011397999999986,68.294983000000116],[-66.998336999999935,68.292480000000126],[-66.99110399999995,68.288879000000065],[-66.986114999999984,68.285538000000031],[-66.984160999999972,68.28054800000001],[-66.973617999999988,68.27388000000002],[-66.964721999999995,68.270263999999997],[-66.930572999999924,68.262482000000034],[-66.865828999999962,68.25],[-66.835830999999928,68.246368000000075],[-66.791672000000005,68.244705000000124],[-66.777495999999985,68.243317000000047],[-66.769729999999925,68.241089000000102],[-66.765839000000028,68.238586000000112],[-66.780288999999982,68.207764000000054],[-66.852218999999991,68.115265000000079],[-66.888900999999976,68.092758000000003],[-66.896666999999866,68.089432000000102],[-66.913894999999968,68.084152000000074],[-66.945830999999941,68.076096000000007],[-66.954452999999944,68.071930000000066],[-66.965560999999923,68.063873000000115],[-66.971114999999998,68.053314000000057],[-66.972777999999948,68.048599000000024],[-66.973327999999981,68.039428999999984],[-66.969727000000034,68.034149000000127],[-66.961120999999991,68.024994000000049],[-66.953612999999962,68.017212000000086],[-66.946654999999907,68.013611000000026],[-66.928054999999972,68.042755],[-66.921660999999915,68.049149000000057],[-66.836120999999935,68.095535000000041],[-66.748046999999985,68.131653000000142],[-66.709166999999923,68.141098],[-66.694442999999978,68.143051000000128],[-66.682769999999948,68.141373000000044],[-66.678878999999995,68.138885000000016],[-66.670837000000006,68.128860000000145],[-66.670272999999952,68.114151000000106],[-66.678054999999915,68.043320000000051],[-66.680557000000022,68.036925999999994],[-66.693053999999904,68.022217000000126],[-66.706389999999942,68.011658000000125],[-66.720839999999953,68.001663000000008],[-66.735000999999954,67.982208000000014],[-66.732773000000009,67.981934000000081],[-66.714721999999938,67.983597000000032],[-66.697219999999902,67.987488000000099],[-66.647232000000031,68.015548999999965],[-66.634734999999864,68.064147999999932],[-66.631942999999978,68.075821000000133],[-66.625548999999978,68.103317000000004],[-66.620270000000005,68.125809000000118],[-66.615554999999972,68.132477000000108],[-66.610549999999932,68.136932000000115],[-66.594726999999921,68.143051000000128],[-66.56138599999997,68.147490999999945],[-66.541945999999882,68.148330999999985],[-66.513625999999931,68.148330999999985],[-66.328887999999949,68.132202000000063],[-66.31527699999998,68.130264000000125],[-66.309432999999956,68.127472000000012],[-66.310546999999929,68.118591000000094],[-66.315001999999879,68.112487999999985],[-66.321121000000005,68.106934000000138],[-66.350280999999939,68.090271000000087],[-66.366394000000014,68.083328000000108],[-66.371657999999968,68.081664999999987],[-66.388610999999969,68.08137499999998],[-66.41361999999998,68.086104999999975],[-66.427779999999984,68.087493999999992],[-66.450561999999991,68.086928999999941],[-66.468612999999948,68.083054000000004],[-66.476104999999905,68.080551000000014],[-66.478606999999954,68.077209000000039],[-66.472228999999913,68.073044000000039],[-66.460555999999997,68.070541000000105],[-66.438048999999978,68.068054000000018],[-66.389998999999989,68.069443000000035],[-66.369445999999925,68.071655000000078],[-66.326110999999969,68.079163000000108],[-66.303878999999995,68.083878000000141],[-66.296660999999972,68.086104999999975],[-66.272780999999952,68.087769000000037],[-66.259170999999981,68.085814999999968],[-66.250838999999985,68.082214000000135],[-66.240279999999871,68.073317999999972],[-66.184157999999968,68.018875000000037],[-66.184433000000013,68.013321000000019],[-66.186385999999914,68.010818000000029],[-66.192764000000011,68.007217000000026],[-66.204177999999899,68.00471500000009],[-66.253066999999874,68.00221300000004],[-66.264175000000023,67.99971000000005],[-66.294448999999986,67.991653000000099],[-66.309722999999963,67.986099000000081],[-66.320846999999958,67.97886699999998],[-66.344451999999933,67.956650000000081],[-66.405838000000017,67.898041000000035],[-66.401397999999972,67.888596000000007],[-66.522232000000031,67.860809000000017],[-66.535278000000005,67.863602000000014],[-66.594161999999983,67.872482000000048],[-66.628601000000003,67.876648000000102],[-66.672501000000011,67.880264000000011],[-66.729445999999996,67.878859999999975],[-66.739715999999987,67.877762000000075],[-66.746947999999918,67.875259000000142],[-66.74499499999996,67.872757000000036],[-66.732223999999974,67.867203000000075],[-66.703063999999983,67.863602000000014],[-66.686934999999949,67.862761999999975],[-66.653885000000002,67.859421000000111],[-66.56138599999997,67.843048000000067],[-66.401397999999972,67.811096000000077],[-66.356658999999922,67.821381000000031],[-66.346389999999985,67.861099000000024],[-66.332779000000016,67.887772000000041],[-66.319457999999884,67.911102000000142],[-66.295837000000006,67.938309000000118],[-66.276672000000019,67.954436999999984],[-66.268615999999952,67.958037999999988],[-66.251952999999958,67.962494000000106],[-66.240554999999972,67.962768999999923],[-66.227492999999868,67.959991000000116],[-66.213897999999972,67.960815000000082],[-66.136948000000018,67.976089000000002],[-66.119995000000017,67.981369000000086],[-66.003219999999885,68.020492999999988],[-65.988723999999877,68.026145999999983],[-65.981383999999991,68.029984000000127],[-65.943603999999993,68.046097000000145],[-65.948607999999979,68.09248400000007],[-65.958617999999944,68.129424999999969],[-65.961945000000014,68.13749700000011],[-65.960555999999997,68.144440000000145],[-65.94749499999989,68.154160000000047],[-65.941665999999941,68.157211000000018],[-65.928329000000019,68.162201000000096],[-65.920837000000006,68.161926000000051],[-65.911941999999954,68.15887500000008],[-65.867492999999911,68.124694999999974],[-65.863892000000021,68.119431000000134],[-65.857773000000009,68.110260000000039],[-65.853607000000011,68.078048999999908],[-65.853607000000011,68.073317999999972],[-65.857773000000009,68.067215000000033],[-65.933837999999923,68.01226800000012],[-65.96032699999995,67.996429000000035],[-65.980835000000013,67.987267000000088],[-65.994330999999988,67.979767000000038],[-66.032226999999978,67.952484000000027],[-65.985824999999977,67.916655999999989],[-65.967223999999987,67.853317000000061],[-65.980835000000013,67.842758000000003],[-66.005004999999869,67.814986999999974],[-66.009734999999978,67.803314000000114],[-66.028884999999946,67.724426000000108],[-66.028884999999946,67.719436999999971],[-66.021941999999967,67.650269000000037],[-66.020003999999915,67.635269000000108],[-66.013061999999934,67.626923000000033],[-66.008621000000005,67.625534000000016],[-65.999724999999899,67.627472000000125],[-65.986663999999962,67.635269000000108],[-65.961394999999982,67.689697000000081],[-65.950286999999946,67.722487999999998],[-65.936935000000005,67.765549000000021],[-65.938598999999954,67.77609300000006],[-65.942490000000021,67.780823000000112],[-65.953888000000006,67.798324999999977],[-65.95666499999993,67.811920000000043],[-65.955840999999964,67.818329000000062],[-65.953338999999971,67.821381000000031],[-65.946105999999986,67.82638500000013],[-65.926391999999964,67.832763999999997],[-65.869155999999919,67.844147000000021],[-65.831679999999949,67.854431000000034],[-65.804169000000002,67.863602000000014],[-65.795272999999952,67.868042000000003],[-65.763625999999931,67.909987999999998],[-65.762222000000008,67.914703000000031],[-65.763901000000033,67.919708000000071],[-65.767226999999991,67.923035000000027],[-65.798889000000031,67.938309000000118],[-65.819732999999985,67.955551000000128],[-65.823623999999995,67.962768999999923],[-65.817779999999971,67.968048000000124],[-65.807769999999948,67.971100000000035],[-65.684433000000013,67.992477000000065],[-65.46305799999999,67.996368000000132],[-65.448607999999979,67.995529000000147],[-65.443603999999993,67.992203000000131],[-65.441939999999988,67.986923000000047],[-65.442490000000021,67.981369000000086],[-65.457503999999972,67.937194999999917],[-65.464447000000007,67.920822000000044],[-65.52027899999996,67.843048000000067],[-65.525833000000034,67.837769000000037],[-65.545273000000009,67.822220000000129],[-65.55860899999999,67.814423000000033],[-65.573623999999938,67.806931000000077],[-65.603881999999999,67.79693599999996],[-65.610549999999876,67.792755000000056],[-65.615829000000019,67.786102000000085],[-65.613891999999908,67.780823000000112],[-65.610001000000011,67.776382000000012],[-65.591948999999943,67.763046000000088],[-65.572509999999966,67.751663000000065],[-65.556945999999868,67.7452550000001],[-65.517501999999979,67.733047000000056],[-65.473617999999931,67.719711000000075],[-65.454726999999991,67.71276899999998],[-65.439712999999927,67.705551000000014],[-65.426391999999964,67.696365000000014],[-65.41361999999998,67.683593999999914],[-65.40695199999999,67.674988000000042],[-65.403609999999958,67.664703000000088],[-65.400283999999942,67.654434000000037],[-65.396392999999875,67.64498900000001],[-65.384734999999921,67.625809000000004],[-65.363892000000021,67.597488000000112],[-65.356658999999922,67.594711000000018],[-65.346389999999985,67.593323000000112],[-65.335281000000009,67.593597000000045],[-65.322784000000013,67.594986000000063],[-65.318344000000025,67.601089000000002],[-65.369155999999919,67.70277400000009],[-65.379165999999941,67.711655000000007],[-65.40264899999994,67.72322100000008],[-65.462508999999955,67.741928000000144],[-65.492492999999968,67.751663000000065],[-65.510833999999988,67.759155000000021],[-65.544448999999986,67.774155000000121],[-65.550551999999982,67.778320000000122],[-65.554442999999992,67.783051000000057],[-65.554442999999992,67.788040000000024],[-65.423614999999984,67.898041000000035],[-65.292495999999971,67.934143000000006],[-65.235275000000001,67.944702000000063],[-65.201401000000033,67.954436999999984],[-65.171660999999915,67.966094999999996],[-65.156386999999938,67.973602000000085],[-65.144164999999873,67.984145999999953],[-65.141387999999949,67.990265000000022],[-65.145553999999947,67.997208000000001],[-65.175827000000027,68.008881000000031],[-65.180831999999953,68.012207000000046],[-65.181106999999997,68.016662999999994],[-65.176665999999955,68.022491000000059],[-65.169158999999922,68.027206000000092],[-65.047775000000001,68.04942299999999],[-65.001113999999916,68.055542000000003],[-64.973052999999993,68.050261999999975],[-64.734160999999972,67.993866000000025],[-64.723617999999988,67.99054000000001],[-64.717498999999975,67.986374000000126],[-64.713622999999984,67.981659000000093],[-64.718063000000029,67.976654000000053],[-64.725554999999929,67.971648999999957],[-64.743332000000009,67.965819999999951],[-64.84722899999997,67.934981999999991],[-64.942490000000021,67.912490999999989],[-65.015288999999996,67.862488000000042],[-65.017775999999969,67.820830999999998],[-65.008347000000015,67.785262999999929],[-65.014175000000023,67.780273000000079],[-65.051101999999958,67.754439999999988],[-65.060546999999929,67.752213000000097],[-65.085280999999895,67.749145999999996],[-65.112212999999997,67.748032000000023],[-65.124434999999949,67.746368000000018],[-65.136123999999995,67.743591000000094],[-65.145553999999947,67.738876000000062],[-65.158339999999953,67.729706000000022],[-65.179992999999911,67.713608000000136],[-65.192489999999964,67.702209000000039],[-65.196380999999974,67.69720500000011],[-65.198607999999922,67.691649999999981],[-65.205001999999979,67.65914900000007],[-65.205565999999919,67.653595000000109],[-65.204178000000013,67.648331000000098],[-65.200286999999946,67.643875000000037],[-65.178328999999962,67.633605999999986],[-65.172500999999954,67.633605999999986],[-65.167220999999984,67.635818000000029],[-65.162780999999995,67.63888500000013],[-65.150283999999999,67.672211000000118],[-65.149733999999967,67.677765000000079],[-65.150283999999999,67.68193100000002],[-65.154174999999952,67.686646000000053],[-65.153335999999911,67.692200000000014],[-65.148894999999982,67.698317999999972],[-65.129715000000033,67.715820000000008],[-65.124161000000015,67.718047999999953],[-64.929717999999923,67.78776600000009],[-64.919723999999917,67.790817000000118],[-64.907227000000034,67.792205999999965],[-64.827224999999942,67.784714000000008],[-64.81639100000001,67.78137200000009],[-64.810546999999985,67.777205999999978],[-64.808884000000035,67.771927000000005],[-64.80749499999996,67.74275200000011],[-64.81610099999989,67.710541000000035],[-64.825835999999981,67.703049000000078],[-64.837509000000011,67.700271999999984],[-64.862777999999992,67.691649999999981],[-64.862502999999947,67.687484999999981],[-64.84944200000001,67.687194999999974],[-64.820557000000008,67.688308999999947],[-64.799728000000016,67.690811000000053],[-64.779448999999886,67.697754000000032],[-64.773055999999997,67.703598000000056],[-64.768616000000009,67.709427000000062],[-64.762221999999952,67.76249700000011],[-64.755843999999968,67.817764000000068],[-64.75,67.822769000000108],[-64.740829000000019,67.824707000000046],[-64.65306099999998,67.82887299999993],[-64.611938000000009,67.82638500000013],[-64.56806899999998,67.819992000000013],[-64.506957999999997,67.80720500000001],[-64.368880999999931,67.764160000000061],[-64.363327000000027,67.759430000000009],[-64.363891999999964,67.754439999999988],[-64.396117999999944,67.711929000000112],[-64.401397999999915,67.707764000000111],[-64.414718999999991,67.707214000000079],[-64.431380999999988,67.709717000000069],[-64.445266999999944,67.71138000000002],[-64.460006999999905,67.711655000000007],[-64.472503999999958,67.710266000000047],[-64.578338999999971,67.696930000000066],[-64.597228999999857,67.689697000000081],[-64.61721799999998,67.678589000000045],[-64.637221999999895,67.665267999999912],[-64.639175000000023,67.660538000000088],[-64.626389000000017,67.659714000000122],[-64.618332000000009,67.663040000000137],[-64.581389999999999,67.67442299999999],[-64.515839000000028,67.68609600000002],[-64.454177999999956,67.693314000000044],[-64.380828999999892,67.698029000000076],[-64.36250299999989,67.702484000000084],[-64.34722899999997,67.709991000000002],[-64.331389999999885,67.727203000000031],[-64.326400999999919,67.731094000000098],[-64.318068999999923,67.73414600000001],[-64.305557000000022,67.733597000000088],[-64.295273000000009,67.730270000000132],[-64.072784000000013,67.610260000000096],[-64.067779999999971,67.602477999999962],[-64.039718999999991,67.533600000000092],[-64.038604999999905,67.528595000000053],[-64.038895000000025,67.525818000000129],[-64.044998000000021,67.520828000000051],[-64.053054999999915,67.517487000000017],[-64.134734999999921,67.490265000000079],[-64.144729999999925,67.487197999999978],[-64.165282999999988,67.482482999999945],[-64.238601999999901,67.46748400000007],[-64.250838999999871,67.466095000000109],[-64.271941999999967,67.464996000000099],[-64.281113000000005,67.465546000000131],[-64.343886999999938,67.469985999999949],[-64.386948000000018,67.474425999999994],[-64.412216000000001,67.477478000000076],[-64.423049999999989,67.478043000000127],[-64.435546999999985,67.478592000000049],[-64.440552000000025,67.474991000000045],[-64.432220000000029,67.471099999999979],[-64.410004000000015,67.464156999999943],[-64.384734999999978,67.458328000000108],[-64.356948999999986,67.453873000000101],[-64.296660999999915,67.448029000000076],[-64.283614999999998,67.448029000000076],[-64.204452999999944,67.452209000000096],[-64.190551999999968,67.453323000000069],[-64.166945999999996,67.456940000000031],[-64.145003999999858,67.461655000000064],[-64.123321999999916,67.465271000000143],[-64.111114999999927,67.466660000000104],[-64.086394999999982,67.46748400000007],[-64.048049999999876,67.464156999999943],[-64.010833999999988,67.459717000000126],[-64.00111400000003,67.455826000000059],[-63.992653000000018,67.448624000000109],[-63.951110999999969,67.409988000000112],[-63.904166999999973,67.30581699999999],[-63.904166999999973,67.301651000000106],[-63.905829999999924,67.299712999999997],[-63.912773000000016,67.295532000000094],[-63.923889000000031,67.293320000000051],[-63.93721800000003,67.292755],[-64.022780999999952,67.30802900000009],[-64.055266999999958,67.311371000000008],[-64.084732000000031,67.313309000000118],[-64.181670999999938,67.312194999999974],[-64.217498999999975,67.313598999999954],[-64.339995999999985,67.319442999999978],[-64.530562999999916,67.33776899999998],[-64.740279999999984,67.356934000000138],[-64.757507000000032,67.358322000000044],[-64.788329999999917,67.35914600000001],[-64.797500999999954,67.356644000000131],[-64.80082699999997,67.352768000000026],[-64.798889000000031,67.350266000000147],[-64.788605000000018,67.34693900000002],[-64.73443599999996,67.333603000000096],[-64.721389999999928,67.331374999999923],[-64.687774999999988,67.327484000000027],[-64.441665999999998,67.303040000000124],[-64.402221999999995,67.299149000000057],[-64.372498000000007,67.297211000000118],[-64.344726999999921,67.297485000000052],[-64.283614999999998,67.299987999999985],[-64.258621000000005,67.299149000000057],[-64.24610899999999,67.298599000000024],[-64.23832699999997,67.296936000000073],[-64.231948999999986,67.293320000000051],[-64.233886999999868,67.288589000000115],[-64.248336999999992,67.279434000000037],[-64.306380999999988,67.262207000000046],[-64.325012000000015,67.257216999999969],[-64.356110000000001,67.250275000000045],[-64.392226999999991,67.24664300000012],[-64.419448999999929,67.247207999999944],[-64.509170999999981,67.254990000000078],[-64.536941999999954,67.256653000000028],[-64.550277999999992,67.25610400000005],[-64.668610000000001,67.238585999999941],[-64.724166999999966,67.22886699999998],[-64.779174999999952,67.218872000000033],[-64.790282999999931,67.21665999999999],[-64.799987999999928,67.213608000000079],[-64.80972300000002,67.210266000000104],[-64.81610099999989,67.206940000000088],[-64.813048999999978,67.201385000000016],[-64.808043999999995,67.198029000000133],[-64.801392000000021,67.195250999999985],[-64.783324999999934,67.190262000000018],[-64.772781000000009,67.189696999999967],[-64.758895999999993,67.19081099999994],[-64.71665999999999,67.200272000000098],[-64.655838000000017,67.217209000000139],[-64.46665999999999,67.229156000000046],[-64.425277999999935,67.228043000000014],[-64.350783999999976,67.234764000000098],[-64.287444999999991,67.238257999999973],[-64.267112999999995,67.241425000000049],[-64.232772999999952,67.251434000000017],[-64.169448999999986,67.260818000000029],[-64.158889999999928,67.262497000000053],[-64.114715999999987,67.267212000000086],[-64.010559000000001,67.275269000000037],[-63.976944000000003,67.277771000000087],[-63.969993999999986,67.27748100000008],[-63.965836000000024,67.275542999999971],[-63.962775999999963,67.272491000000059],[-63.962775999999963,67.270263999999997],[-63.975829999999917,67.251937999999996],[-63.993056999999965,67.228317000000118],[-63.998336999999935,67.221649000000127],[-64.013335999999981,67.212204000000042],[-64.021392999999989,67.208878000000027],[-64.045272999999952,67.204711999999972],[-64.05610699999994,67.204437000000098],[-64.088608000000022,67.207764000000054],[-64.220222000000035,67.201714000000038],[-64.467498999999918,67.167480000000069],[-64.501403999999923,67.161652000000004],[-64.545272999999952,67.152481000000023],[-64.575011999999958,67.144714000000079],[-64.584166999999923,67.142212000000029],[-64.611938000000009,67.132477000000108],[-64.658050999999944,67.113037000000134],[-64.680831999999953,67.09304800000001],[-64.686935000000005,67.087493999999992],[-64.689986999999917,67.083602999999925],[-64.692490000000021,67.078048999999965],[-64.700561999999991,67.018051000000071],[-64.701110999999912,67.012207000000046],[-64.700561999999991,67.008040999999992],[-64.696945000000028,67.003326000000129],[-64.691939999999988,67.000549000000035],[-64.683060000000012,67.000275000000101],[-64.660278000000005,67.003875999999991],[-64.638610999999969,67.008606000000043],[-64.628325999999959,67.012207000000046],[-64.623885999999914,67.018051000000071],[-64.619720000000029,67.028320000000122],[-64.618057000000022,67.039428999999984],[-64.618057000000022,67.044434000000081],[-64.619720000000029,67.049713000000054],[-64.618880999999988,67.055252000000053],[-64.615279999999927,67.066940000000045],[-64.609160999999972,67.081940000000031],[-64.604172000000005,67.088317999999958],[-64.597777999999892,67.093872000000147],[-64.583617999999888,67.103043000000127],[-64.547501000000011,67.118590999999924],[-64.527221999999881,67.124145999999996],[-64.506393000000003,67.129425000000026],[-64.474715999999944,67.13499500000006],[-64.229995999999971,67.164154000000053],[-64.087218999999948,67.179703000000131],[-64.008895999999993,67.178864000000033],[-63.995551999999975,67.179428000000144],[-63.971381999999949,67.182205000000067],[-63.96055599999994,67.184417999999994],[-63.929726000000016,67.192749000000106],[-63.919166999999959,67.196365000000128],[-63.912216000000001,67.200546000000031],[-63.86222099999992,67.225815000000011],[-63.80750299999994,67.239150999999993],[-63.797500999999954,67.240265000000136],[-63.561942999999985,67.236923000000047],[-63.546394000000021,67.235809000000074],[-63.469443999999953,67.228317000000118],[-63.458336000000031,67.226088999999945],[-63.450554000000011,67.222488000000112],[-63.449164999999994,67.219437000000084],[-63.449164999999994,67.214995999999985],[-63.450835999999981,67.179703000000131],[-63.453888000000006,67.169434000000138],[-63.529442000000017,67.104431000000034],[-63.53833800000001,67.100540000000137],[-63.604720999999984,67.075272000000041],[-63.613892000000021,67.072769000000051],[-63.648055999999883,67.066940000000045],[-63.672775000000001,67.063599000000011],[-63.712776000000019,67.054977000000008],[-63.722771000000023,67.05192599999998],[-63.731383999999991,67.048035000000084],[-63.744445999999982,67.041092000000106],[-63.779723999999987,67.017487000000131],[-63.795836999999949,67.006653000000085],[-63.806389000000024,66.99581900000004],[-63.807219999999973,66.988037000000077],[-63.801392000000021,66.979705999999965],[-63.781386999999938,66.963608000000136],[-63.772498999999868,66.958878000000084],[-63.769447000000014,66.97137500000008],[-63.768889999999942,66.976929000000041],[-63.771111000000019,66.980819999999937],[-63.772498999999868,66.986098999999911],[-63.773613000000012,66.991088999999988],[-63.773330999999985,66.996094000000028],[-63.770836000000031,67.001389000000074],[-63.767219999999952,67.006104000000107],[-63.756950000000018,67.014160000000004],[-63.750557000000015,67.017487000000131],[-63.734443999999939,67.024155000000121],[-63.698607999999979,67.038878999999952],[-63.680000000000007,67.045821999999987],[-63.650832999999977,67.052475000000129],[-63.638335999999981,67.054428000000087],[-63.600837999999953,67.057479999999998],[-63.565552000000025,67.062485000000038],[-63.535277999999948,67.070831000000112],[-63.497222999999963,67.085266000000047],[-63.40277900000001,67.144440000000145],[-63.396392999999989,67.152206000000035],[-63.39416499999993,67.156936999999971],[-63.393889999999942,67.161652000000004],[-63.398055999999997,67.165817000000004],[-63.416945999999882,67.180267000000072],[-63.419997999999964,67.185806000000071],[-63.421943999999883,67.194702000000007],[-63.420836999999949,67.200272000000098],[-63.417777999999998,67.206100000000049],[-63.409163999999919,67.21665999999999],[-63.351669000000015,67.268051000000014],[-63.340553,67.276657000000114],[-63.332503999999972,67.281937000000028],[-63.298888999999974,67.297760000000039],[-63.280555999999933,67.306366000000139],[-63.272498999999982,67.309418000000051],[-63.160277999999948,67.328323000000012],[-63.137222000000008,67.331100000000106],[-63.110282999999868,67.329987000000017],[-63.03972599999986,67.306090999999924],[-63.022498999999925,67.298035000000084],[-63.015006999999969,67.293593999999985],[-62.997779999999977,67.281372000000147],[-62.992774999999995,67.276382000000126],[-62.973884999999882,67.235535000000141],[-62.970832999999971,67.225815000000011],[-62.970832999999971,67.221375000000023],[-63.023055999999997,67.179428000000144],[-63.035834999999963,67.171097000000032],[-63.04472399999986,67.167205999999965],[-63.075561999999934,67.15887500000008],[-63.100554999999986,67.155548000000124],[-63.134170999999981,67.15277100000003],[-63.170279999999991,67.147217000000069],[-63.19027699999998,67.143326000000002],[-63.232497999999964,67.132202000000063],[-63.242500000000007,67.129149999999981],[-63.268889999999942,67.117477000000122],[-63.275832999999977,67.113312000000121],[-63.284447,67.105255],[-63.285278000000005,67.099716000000001],[-63.283614999999998,67.094986000000119],[-63.278052999999943,67.090820000000065],[-63.268607999999972,67.082488999999953],[-63.260833999999988,67.074158000000068],[-63.25389100000001,67.064697000000081],[-63.224716000000001,67.024704000000042],[-63.220276000000013,67.016937000000098],[-63.220276000000013,67.006104000000107],[-63.220832999999971,66.989699999999971],[-63.221381999999949,66.984984999999938],[-63.223884999999996,66.979430999999977],[-63.227776000000006,66.972762999999986],[-63.240836999999999,66.961655000000007],[-63.27777900000001,66.949706999999933],[-63.320557000000008,66.940262000000075],[-63.356109999999944,66.934708000000057],[-63.36860699999994,66.934708000000057],[-63.43638599999997,66.925537000000134],[-63.469993999999986,66.920532000000094],[-63.514724999999999,66.912490999999989],[-63.526138000000003,66.909271000000047],[-63.545554999999865,66.903595000000053],[-63.554442999999935,66.899719000000005],[-63.565552000000025,66.892487000000074],[-63.565552000000025,66.888046000000145],[-63.563613999999973,66.883605999999929],[-63.557502999999997,66.875809000000004],[-63.554717999999866,66.870254999999986],[-63.551392000000021,66.860535000000084],[-63.555557000000022,66.848877000000073],[-63.571944999999971,66.837494000000049],[-63.593329999999924,66.831665000000044],[-63.615004999999996,66.827208999999982],[-63.638892999999882,66.824432000000058],[-63.652221999999881,66.82388300000008],[-63.698607999999979,66.822495000000004],[-63.725273000000016,66.823043999999982],[-63.775832999999921,66.825821000000019],[-63.771384999999952,66.811096000000077],[-63.653053,66.802475000000015],[-63.624442999999928,66.801926000000037],[-63.598334999999906,66.80304000000001],[-63.587776000000019,66.804428000000144],[-63.548889000000031,66.812485000000095],[-63.539443999999946,66.814697000000137],[-63.535277999999948,66.81581100000011],[-63.488891999999964,66.828323000000125],[-63.478881999999942,66.835815000000082],[-63.476386999999932,66.839157],[-63.475272999999959,66.842484000000127],[-63.476944000000003,66.846939000000134],[-63.487220999999977,66.858871000000079],[-63.494719999999973,66.865539999999953],[-63.496947999999861,66.880814000000044],[-63.487220999999977,66.896942000000081],[-63.480826999999977,66.90248100000008],[-63.474441999999954,66.906096999999932],[-63.456107999999972,66.910811999999964],[-63.441665999999998,66.908325000000104],[-63.427223000000026,66.901382000000126],[-63.407218999999998,66.814423000000033],[-63.407776000000013,66.809708000000001],[-63.410278000000005,66.799988000000099],[-63.414718999999991,66.783325000000048],[-63.417777999999998,66.773040999999978],[-63.436110999999926,66.728043000000071],[-63.449439999999925,66.716095000000053],[-63.453056000000004,66.711655000000064],[-63.451941999999917,66.70637499999998],[-63.441939999999931,66.703048999999965],[-63.420279999999934,66.698868000000061],[-63.415276000000006,66.700546000000145],[-63.408332999999914,66.704437000000041],[-63.40277900000001,66.708878000000141],[-63.376663000000008,66.734146000000067],[-63.32028200000002,66.814148000000046],[-63.319450000000018,66.819992000000013],[-63.224716000000001,66.899428999999998],[-62.973884999999882,66.961104999999975],[-62.962501999999972,66.963882000000069],[-62.939994999999954,66.966660000000047],[-62.87222300000002,66.964432000000102],[-62.846946999999943,66.961929000000112],[-62.837776000000019,66.957764000000111],[-62.821114000000023,66.830276000000083],[-62.820557000000008,66.813599000000067],[-62.827498999999932,66.78804000000008],[-62.829726999999991,66.783325000000048],[-62.837501999999972,66.771927000000005],[-62.84332999999998,66.769149999999911],[-62.864448999999979,66.746094000000085],[-62.869995000000017,66.739700000000028],[-62.873055000000022,66.733597000000088],[-62.91194200000001,66.652771000000143],[-62.914444000000003,66.647216999999955],[-62.908050999999944,66.63998400000014],[-62.903052999999943,66.637207000000046],[-62.899726999999984,66.636658000000125],[-62.859169000000009,66.653045999999961],[-62.850280999999939,66.656937000000028],[-62.835274000000027,66.666382000000112],[-62.819999999999936,66.684418000000107],[-62.734168999999952,66.790816999999947],[-62.735831999999959,66.801651000000049],[-62.743331999999953,66.809982000000105],[-62.751113999999916,66.818054000000075],[-62.768058999999937,66.830551000000071],[-62.774170000000026,66.840546000000018],[-62.768332999999984,66.907760999999994],[-62.764449999999954,66.925262000000089],[-62.761115999999959,66.929152999999985],[-62.743057000000022,66.941924999999969],[-62.725273000000016,66.947478999999987],[-62.634170999999981,66.951385000000073],[-62.607779999999991,66.952209000000039],[-62.592223999999931,66.950821000000133],[-62.578612999999962,66.947754000000032],[-62.568892999999889,66.944138000000123],[-62.549994999999967,66.931655999999975],[-62.519996999999933,66.911102000000028],[-62.40277900000001,66.809417999999994],[-62.401389999999935,66.804977000000065],[-62.40193899999997,66.789154000000053],[-62.398613000000012,66.780272999999909],[-62.393332999999984,66.775818000000072],[-62.326950000000011,66.730270000000132],[-62.319450000000018,66.726379000000065],[-62.313332000000003,66.726929000000098],[-62.299171000000001,66.733047000000056],[-62.291388999999924,66.756378000000097],[-62.292777999999998,66.761658000000011],[-62.295837000000006,66.766388000000006],[-62.362220999999977,66.818329000000119],[-62.419448999999986,66.843323000000055],[-62.424720999999977,66.847488000000055],[-62.426948999999865,66.851378999999952],[-62.436942999999985,66.884430000000123],[-62.427222999999969,66.921097000000088],[-62.418891999999971,66.926651000000106],[-62.407501000000025,66.92942800000003],[-62.394721999999945,66.929152999999985],[-62.346946999999886,66.933594000000085],[-62.284728999999913,66.946091000000081],[-62.271666999999979,66.960815000000139],[-62.279723999999931,66.979156000000103],[-62.291388999999924,67.005829000000119],[-62.294448999999986,67.021378000000027],[-62.293616999999983,67.026382000000012],[-62.290282999999988,67.032486000000006],[-62.285277999999948,67.036102000000085],[-62.278609999999958,67.039428999999984],[-62.262504999999976,67.045258000000047],[-62.101394999999968,67.054703000000075],[-62.054442999999878,67.049149000000114],[-62.03194400000001,67.045258000000047],[-62.019721999999945,67.042206000000078],[-62.005561999999941,67.0352630000001],[-62.006950000000018,67.031937000000084],[-62.04999499999991,66.987198000000092],[-62.106110000000001,66.917206000000022],[-62.102225999999916,66.913040000000137],[-62.072226999999998,66.907486000000119],[-62.029723999999987,66.901657000000114],[-62.018889999999942,66.901657000000114],[-62.018607999999972,66.908035000000098],[-62.015006999999912,66.91415400000011],[-61.95666499999993,66.963882000000069],[-61.949722000000008,66.967208999999968],[-61.938605999999993,66.969436999999971],[-61.913329999999974,66.970825000000048],[-61.865554999999972,66.970825000000048],[-61.851395000000025,66.970535000000041],[-61.83805099999995,66.968597000000102],[-61.749725000000012,66.94802900000002],[-61.737220999999977,66.941086000000041],[-61.731941000000006,66.93691999999993],[-61.728881999999942,66.932205000000067],[-61.730826999999863,66.923874000000012],[-61.612777999999992,66.870818999999926],[-61.314163000000008,66.687195000000031],[-61.294723999999917,66.67442299999999],[-61.289443999999946,66.669983000000002],[-61.281386999999995,66.661102000000028],[-61.262504999999976,66.629425000000083],[-61.266662999999937,66.622756999999922],[-61.300277999999935,66.593597000000045],[-61.341667000000029,66.571930000000009],[-61.348052999999936,66.570541000000048],[-61.356666999999959,66.571106000000043],[-61.388335999999981,66.578598],[-61.400275999999963,66.577208999999982],[-61.409720999999934,66.572768999999994],[-61.425003000000004,66.559708000000057],[-61.447776999999974,66.538315000000125],[-61.46166999999997,66.543319999999994],[-61.54861499999987,66.547484999999995],[-61.584723999999994,66.547760000000039],[-61.598609999999951,66.550262000000089],[-61.618056999999965,66.557205000000067],[-61.623885999999914,66.566939999999988],[-61.631942999999978,66.586654999999951],[-61.638610999999969,66.595534999999984],[-61.643889999999999,66.599991000000102],[-61.669166999999959,66.616378999999995],[-61.691382999999973,66.62831100000011],[-61.72582999999986,66.643051000000071],[-61.734443999999996,66.645827999999995],[-61.950554000000011,66.67692599999998],[-62.015555999999947,66.671371000000079],[-62.12388599999997,66.626373000000001],[-62.050551999999982,66.624985000000095],[-62.018607999999972,66.640823000000125],[-61.990836999999999,66.648041000000092],[-61.979995999999971,66.648041000000092],[-61.950554000000011,66.646102999999982],[-61.830284000000006,66.621368000000132],[-61.796950999999979,66.611923000000047],[-61.788895000000025,66.608597000000032],[-61.75389100000001,66.588593000000117],[-61.576667999999984,66.487198000000035],[-61.575279000000023,66.48275799999999],[-61.576392999999996,66.477203000000088],[-61.583327999999938,66.471649000000127],[-61.59194199999996,66.46775800000006],[-61.614166000000012,66.463043000000027],[-61.635001999999929,66.459991000000059],[-61.731383999999935,66.451096000000064],[-61.844161999999926,66.446091000000024],[-61.857779999999934,66.447204999999997],[-61.869720000000029,66.445815999999979],[-61.956947000000014,66.424149000000114],[-61.976943999999946,66.417480000000069],[-61.985832000000016,66.413605000000075],[-61.986945999999932,66.410262999999986],[-61.978049999999996,66.403869999999984],[-61.96416499999998,66.401382000000012],[-61.934165999999891,66.400818000000072],[-61.755004999999983,66.407486000000063],[-61.578612999999905,66.415268000000026],[-61.569449999999904,66.415543000000014],[-61.557266000000027,66.413680999999997],[-61.545279999999991,66.409988000000112],[-61.466942000000017,66.371918000000051],[-61.462501999999972,66.369141000000127],[-61.463614999999891,66.365814],[-61.665276000000006,66.324996999999996],[-61.877494999999954,66.283324999999934],[-61.928885999999977,66.283874999999966],[-62.198883000000023,66.314148000000102],[-62.207503999999915,66.316666000000112],[-62.212218999999948,66.319442999999978],[-62.218055999999933,66.331939999999975],[-62.231941000000006,66.366089000000045],[-62.232215999999937,66.369705000000067],[-62.229439000000013,66.375259000000085],[-62.224998000000028,66.380264000000125],[-62.218604999999968,66.392487000000017],[-62.218329999999867,66.396652000000017],[-62.223610000000008,66.401093000000117],[-62.229996000000028,66.40415999999999],[-62.255279999999914,66.408324999999991],[-62.268889999999999,66.409424000000001],[-62.418610000000001,66.421097000000032],[-62.456107999999915,66.423874000000126],[-62.565833999999995,66.42804000000001],[-62.626662999999894,66.426085999999998],[-62.698883000000023,66.41276600000009],[-62.709723999999994,66.410537999999974],[-62.716110000000015,66.407211000000018],[-62.710281000000009,66.403594999999996],[-62.673614999999984,66.393600000000049],[-62.629996999999946,66.387771999999984],[-62.478049999999996,66.369980000000112],[-62.337501999999972,66.315811000000053],[-62.32028200000002,66.308319000000097],[-62.316108999999983,66.304977000000008],[-62.320556999999951,66.299712999999997],[-62.323616000000015,66.298035000000084],[-62.388892999999939,66.276093000000003],[-62.398338000000024,66.273041000000092],[-62.621940999999993,66.221375000000023],[-62.643615999999952,66.216933999999924],[-62.666945999999939,66.214432000000045],[-62.680832000000009,66.216933999999924],[-62.751944999999921,66.241088999999931],[-62.757225000000005,66.245255000000043],[-62.780555999999933,66.277771000000143],[-62.782218999999884,66.282486000000006],[-62.782218999999884,66.288879000000122],[-62.773330999999985,66.296936000000073],[-62.774170000000026,66.302765000000136],[-62.77944199999996,66.307205000000124],[-62.797225999999966,66.313873000000115],[-62.816665999999941,66.320831000000112],[-62.826110999999912,66.324158000000011],[-62.858894000000021,66.334152000000074],[-62.868057000000022,66.336104999999975],[-62.881110999999976,66.335815000000139],[-62.889998999999989,66.333328000000108],[-62.895003999999915,66.329712000000029],[-62.809440999999993,66.240814000000114],[-62.801391999999964,66.235259999999926],[-62.715003999999908,66.201660000000061],[-62.706107999999972,66.199707000000103],[-62.681389000000024,66.196930000000009],[-62.647223999999994,66.199707000000103],[-62.603614999999991,66.205261000000121],[-62.488051999999925,66.200271999999927],[-62.366660999999965,66.174987999999985],[-62.180557000000022,66.148604999999975],[-62.037505999999951,66.100815000000011],[-61.961112999999898,66.033875000000023],[-61.955001999999979,66.024155000000121],[-61.954445000000021,66.019150000000081],[-61.955832999999927,66.014998999999989],[-61.960280999999895,66.011932000000058],[-61.975554999999986,66.010543999999982],[-62.088889999999935,66.000274999999931],[-62.133614000000023,66.000000000000114],[-62.148055999999997,66.001389000000131],[-62.166388999999981,66.00749200000007],[-62.172501000000011,66.010543999999982],[-62.188889000000017,66.012207000000103],[-62.196663000000001,66.011108000000092],[-62.291672000000005,65.980270000000132],[-62.307776999999987,65.973876999999959],[-62.391669999999863,66.011383000000137],[-62.404715999999894,66.014708999999982],[-62.525276000000019,66.034149000000127],[-62.541388999999981,66.035537999999974],[-62.695549000000028,66.042205999999965],[-62.74111199999993,66.038315000000068],[-62.759726999999884,66.033051000000057],[-62.778885000000002,66.033324999999991],[-62.799995000000024,66.039703000000145],[-62.809165999999891,66.043869000000029],[-62.831672999999967,66.055542000000059],[-62.842223999999987,66.064147999999989],[-62.846946999999943,66.069153000000028],[-62.855003000000011,66.083054000000004],[-62.856667000000016,66.087494000000049],[-62.860001000000011,66.103043000000127],[-62.8663939999999,66.112761999999975],[-62.873329000000012,66.121368000000075],[-62.884170999999867,66.129973999999947],[-62.90555599999999,66.140823000000012],[-62.930557000000022,66.146942000000081],[-62.946945000000028,66.148604999999975],[-62.95944199999991,66.14888000000002],[-62.970551,66.148041000000035],[-63.013618000000008,66.138885000000073],[-63.041672000000005,66.130264000000011],[-63.061942999999928,66.120819000000097],[-63.060279999999977,66.116379000000109],[-63.039443999999889,66.113312000000008],[-63.006393000000003,66.11692800000003],[-62.892226999999934,66.076660000000004],[-62.889998999999989,66.066375999999934],[-62.885833999999988,66.056366000000025],[-62.875,66.047760000000096],[-62.862220999999863,66.039429000000041],[-62.841942000000017,66.027480999999966],[-62.826667999999927,66.020264000000054],[-62.815833999999938,66.016098],[-62.793616999999983,66.010818000000086],[-62.778885000000002,66.009720000000016],[-62.768332999999984,66.009720000000016],[-62.755561999999884,66.00999500000006],[-62.743889000000024,66.011383000000137],[-62.67472099999992,66.015549000000021],[-62.523055999999997,66.002213000000097],[-62.517219999999952,66.000549000000092],[-62.4183349999999,65.970535000000041],[-62.405555999999933,65.963043000000084],[-62.395003999999915,65.949996999999996],[-62.386664999999994,65.936646000000053],[-62.321114000000023,65.831100000000049],[-62.317222999999956,65.808029000000033],[-62.441665999999941,65.793594000000098],[-62.478881999999999,65.790817000000004],[-62.505279999999971,65.790817000000004],[-62.521384999999952,65.792480000000126],[-62.604171999999892,65.801085999999998],[-62.619995000000017,65.803040000000067],[-62.684440999999936,65.816375999999991],[-62.717773000000022,65.825272000000098],[-62.727218999999991,65.828598],[-62.729996000000028,65.831940000000088],[-62.75278499999996,65.853591999999935],[-62.80750299999994,65.88998400000014],[-62.829445000000021,65.899994000000049],[-62.857506000000001,65.911102000000028],[-62.864166000000012,65.911102000000028],[-62.870551999999918,65.90554800000001],[-62.871940999999936,65.901382000000126],[-62.87471800000003,65.887497000000053],[-62.87471800000003,65.883041000000105],[-62.760001999999986,65.816665999999998],[-62.746391000000017,65.809708000000001],[-62.736945999999932,65.80831900000004],[-62.719993999999929,65.809708000000001],[-62.658889999999985,65.791930999999977],[-62.597778000000005,65.771927000000062],[-62.582221999999888,65.765549000000078],[-62.575004999999976,65.761658000000011],[-62.569449999999961,65.757492000000127],[-62.568610999999919,65.752212999999927],[-62.569725000000005,65.746643000000063],[-62.579444999999964,65.728317000000061],[-62.583610999999962,65.723312000000021],[-62.587775999999963,65.720260999999994],[-62.59027900000001,65.719147000000021],[-62.59944200000001,65.718872000000147],[-62.612777999999992,65.72164900000007],[-62.621940999999993,65.725540000000137],[-62.67472099999992,65.735809000000017],[-62.823891000000003,65.761383000000023],[-62.833442999999875,65.752991000000009],[-62.833777999999882,65.74999200000002],[-62.828780999999879,65.744492000000093],[-62.799170999999887,65.711928999999998],[-62.788054999999929,65.708328000000108],[-62.726386999999988,65.71138000000002],[-62.698883000000023,65.710266000000047],[-62.681670999999994,65.708038000000101],[-62.662772999999902,65.701096000000007],[-62.59944200000001,65.675812000000008],[-62.59194199999996,65.671920999999941],[-62.589721999999938,65.668594000000041],[-62.595832999999857,65.652205999999978],[-62.602225999999973,65.640273999999977],[-62.611670999999944,65.624145999999939],[-62.617499999999893,65.614990000000034],[-62.628051999999968,65.601929000000098],[-62.645279000000016,65.587203999999929],[-62.653053,65.586104999999975],[-62.751113999999916,65.58526599999999],[-62.767220000000009,65.587493999999936],[-62.78472899999997,65.59137000000004],[-62.803054999999972,65.59887700000013],[-62.859726000000023,65.634720000000016],[-62.861389000000031,65.639160000000004],[-62.858611999999937,65.65525800000006],[-62.862503000000004,65.685257000000092],[-62.882998999999984,65.724152000000061],[-62.885001999999986,65.726973999999927],[-62.887999999999863,65.729652000000044],[-62.904167000000029,65.746368000000018],[-62.922500999999954,65.752212999999927],[-62.936110999999926,65.754990000000021],[-62.949439999999925,65.755263999999954],[-62.95944199999991,65.753876000000048],[-62.962219000000005,65.748322000000087],[-62.943610999999919,65.743042000000003],[-62.93472300000002,65.738876000000118],[-62.925277999999992,65.731093999999985],[-62.916663999999912,65.722214000000122],[-62.914444000000003,65.718323000000055],[-62.892226999999934,65.641937000000098],[-62.89166999999992,65.638321000000076],[-62.895836000000031,65.633040999999992],[-62.901389999999935,65.628036000000122],[-62.953330999999991,65.586929000000112],[-62.961670000000026,65.583054000000118],[-62.972220999999934,65.580826000000002],[-63.005004999999926,65.624985000000095],[-63.016113000000018,65.632750999999985],[-63.027495999999928,65.635818000000086],[-63.040282999999931,65.63749700000011],[-63.137779000000023,65.644150000000081],[-63.162498000000028,65.632477000000051],[-63.162406999999973,65.628868000000068],[-63.164443999999946,65.625534000000073],[-63.178611999999987,65.627472000000012],[-63.200279000000023,65.633330999999998],[-63.211945000000014,65.640549000000021],[-63.293891999999971,65.708878000000141],[-63.43638599999997,65.84526100000005],[-63.443054000000018,65.854705999999908],[-63.474167000000023,65.833054000000061],[-63.379165999999998,65.720260999999994],[-63.368332000000009,65.693863000000022],[-63.368332000000009,65.669434000000081],[-63.399726999999984,65.676375999999948],[-63.412215999999944,65.67804000000001],[-63.448607999999922,65.680817000000047],[-63.461944999999957,65.681090999999981],[-63.704720000000009,65.68220500000001],[-63.717216000000008,65.681656000000032],[-63.723609999999894,65.680267000000015],[-63.728607000000011,65.675812000000008],[-63.728881999999999,65.673035000000141],[-63.723609999999894,65.668869000000029],[-63.700553999999954,65.655823000000112],[-63.68360899999999,65.650818000000072],[-63.671669000000009,65.648330999999985],[-63.504723000000013,65.6308140000001],[-63.453330999999991,65.629700000000128],[-63.432502999999997,65.631927000000019],[-63.399726999999984,65.634155000000135],[-63.375,65.632202000000007],[-63.36860699999994,65.629150000000095],[-63.351669000000015,65.61775200000011],[-63.326667999999984,65.600815000000068],[-63.319999999999936,65.593322999999998],[-63.336661999999933,65.556930999999963],[-63.34332999999998,65.548325000000091],[-63.355003000000011,65.537766000000033],[-63.359726000000023,65.536102000000028],[-63.373610999999983,65.533874999999966],[-63.463332999999977,65.522766000000047],[-63.474715999999887,65.523605000000032],[-63.482215999999937,65.525269000000037],[-63.488608999999997,65.528320000000065],[-63.501396,65.536377000000016],[-63.523055999999997,65.550812000000121],[-63.532775999999899,65.558594000000085],[-63.541114999999934,65.570267000000115],[-63.541388999999867,65.574158000000011],[-63.546669000000009,65.581100000000106],[-63.561278999999956,65.585372999999947],[-63.567943999999954,65.590042000000096],[-63.572449000000006,65.591209000000049],[-63.581279999999992,65.591873000000078],[-63.589943000000005,65.591209000000049],[-63.595778999999993,65.589035000000081],[-63.608894000000021,65.589981000000023],[-63.618331999999953,65.541931000000034],[-63.616660999999908,65.537490999999989],[-63.612777999999878,65.533325000000104],[-63.601395000000025,65.530273000000022],[-63.530280999999945,65.512206999999989],[-63.43277699999993,65.484421000000111],[-63.391945000000021,65.472488000000112],[-63.362503000000004,65.463318000000015],[-63.309165999999948,65.445525999999973],[-63.301665999999898,65.441650000000095],[-63.295279999999991,65.436371000000122],[-63.290839999999946,65.431656000000089],[-63.292777999999998,65.428863999999976],[-63.393889999999942,65.425262000000032],[-63.409995999999921,65.426651000000049],[-63.468886999999938,65.439697000000137],[-63.495276999999987,65.450272000000098],[-63.502785000000017,65.454162999999994],[-63.521666999999979,65.461105000000089],[-63.532775999999899,65.464705999999978],[-63.553329000000019,65.468872000000033],[-63.568892999999946,65.471649000000127],[-63.583327999999995,65.4727630000001],[-63.64305899999988,65.473602000000085],[-63.65444199999996,65.472213999999951],[-63.655555999999933,65.470824999999991],[-63.654716000000008,65.464995999999985],[-63.627494999999954,65.455826000000116],[-63.563613999999973,65.435806000000071],[-63.483611999999994,65.404984000000013],[-63.335555999999997,65.30053700000002],[-63.335830999999985,65.295531999999923],[-63.424720999999977,65.229430999999977],[-63.472220999999934,65.196365000000014],[-63.418892000000028,65.145263999999997],[-63.376944999999978,65.110809000000017],[-63.424445999999932,65.049149000000114],[-63.464721999999938,65.018051000000128],[-63.527221999999995,64.971924000000058],[-63.528335999999967,64.967758000000003],[-63.546950999999979,64.887207000000046],[-63.653885000000002,64.911652000000061],[-63.659720999999934,64.939697000000081],[-63.747779999999977,64.962203999999986],[-63.824172999999973,64.984711000000061],[-63.828339000000028,65.010817999999915],[-63.825561999999877,65.012771999999984],[-63.720276000000013,65.030823000000112],[-63.669723999999917,65.034988000000112],[-63.659995999999978,65.03637700000013],[-63.655272999999966,65.03804000000008],[-63.658051,65.041091999999992],[-63.664718999999934,65.043594000000041],[-63.685554999999965,65.047759999999982],[-63.697776999999974,65.049423000000047],[-63.732215999999994,65.048874000000126],[-63.751944999999978,65.045258000000047],[-63.782218999999941,65.034149000000014],[-63.801940999999999,65.030273000000079],[-63.824447999999961,65.027481000000023],[-63.849723999999924,65.030273000000079],[-63.861114999999984,65.033325000000048],[-63.870551999999918,65.040816999999947],[-63.873885999999914,65.04553199999998],[-63.875556999999958,65.050262000000032],[-63.885559000000001,65.079987000000131],[-63.886116000000015,65.085815000000025],[-63.881667999999934,65.096939000000134],[-63.948607999999979,65.100540000000024],[-64.121108999999933,65.043869000000086],[-64.132491999999957,65.044434000000081],[-64.140839000000028,65.047211000000004],[-64.267226999999991,65.094147000000021],[-64.275833000000034,65.098877000000073],[-64.271118000000001,65.103317000000061],[-64.22193900000002,65.146942000000081],[-64.208892999999989,65.155258000000003],[-64.18582200000003,65.163879000000065],[-64.167220999999927,65.170532000000037],[-64.131103999999937,65.182480000000112],[-64.129715000000033,65.193588000000091],[-64.203613000000018,65.199707000000103],[-64.211944999999901,65.199996999999939],[-64.231383999999991,65.196930000000009],[-64.301940999999999,65.163040000000137],[-64.30999799999995,65.15914900000007],[-64.314712999999983,65.15248100000008],[-64.339172000000019,65.161377000000016],[-64.37332200000003,65.177200000000028],[-64.380828999999892,65.181091000000094],[-64.395844000000011,65.207214000000079],[-64.407227000000034,65.275818000000015],[-64.405272999999909,65.285537999999917],[-64.402785999999935,65.291092000000106],[-64.398620999999935,65.29693600000013],[-64.389724999999999,65.304428000000087],[-64.355835000000013,65.324996999999996],[-64.333327999999995,65.337203999999986],[-64.30999799999995,65.349990999999989],[-64.300551999999982,65.355819999999994],[-64.25556899999998,65.386382999999967],[-64.250838999999871,65.390823000000012],[-64.236389000000031,65.421920999999998],[-64.234160999999972,65.427199999999971],[-64.237212999999997,65.429977000000065],[-64.248885999999914,65.430542000000116],[-64.272781000000009,65.428588999999988],[-64.291107000000011,65.422484999999938],[-64.431380999999988,65.326934999999992],[-64.461670000000026,65.294983000000002],[-64.471664000000033,65.283324999999991],[-64.474715999999944,65.272491000000116],[-64.468886999999938,65.263885000000016],[-64.463897999999972,65.258881000000031],[-64.456954999999994,65.249420000000043],[-64.452498999999989,65.241653000000099],[-64.455565999999976,65.207214000000079],[-64.462218999999948,65.190810999999997],[-64.468337999999903,65.180267000000129],[-64.509734999999921,65.12052900000009],[-64.521117999999944,65.109146000000123],[-64.535004000000015,65.097214000000122],[-64.549987999999985,65.09275800000006],[-64.555556999999965,65.092209000000082],[-64.561934999999949,65.094986000000006],[-64.567504999999926,65.115814000000057],[-64.567504999999926,65.119979999999998],[-64.569457999999941,65.124419999999986],[-64.580001999999922,65.128860000000032],[-64.611389000000031,65.141937000000041],[-64.641112999999962,65.149993999999992],[-64.655272999999966,65.166092000000049],[-64.718338000000017,65.222487999999942],[-64.760284000000013,65.25221300000004],[-64.765014999999948,65.247756999999979],[-64.778335999999967,65.238585999999998],[-64.788329999999917,65.23414600000001],[-64.801102000000014,65.230820000000108],[-64.814712999999983,65.235259999999982],[-64.864440999999999,65.256653000000085],[-64.883895999999993,65.265273999999977],[-64.891113000000018,65.269150000000081],[-64.896666999999979,65.273315000000082],[-64.898346000000004,65.275818000000015],[-64.910552999999993,65.29942299999999],[-64.910827999999981,65.303589000000102],[-64.910004000000015,65.304977000000008],[-64.855887999999936,65.314545000000123],[-64.834228999999937,65.319046000000014],[-64.823387000000025,65.318214000000125],[-64.796111999999937,65.31860400000005],[-64.793883999999991,65.314697000000081],[-64.786391999999978,65.310806000000014],[-64.777221999999995,65.30914300000012],[-64.757171999999912,65.313095000000033],[-64.752173999999911,65.314255000000117],[-64.696105999999872,65.329712000000029],[-64.691101000000003,65.331940000000031],[-64.687209999999936,65.334991000000059],[-64.685271999999998,65.337493999999992],[-64.684433000000013,65.341095000000053],[-64.689162999999951,65.341660000000104],[-64.799728000000016,65.346939000000077],[-64.813613999999973,65.347214000000065],[-64.868056999999965,65.339706000000092],[-64.897780999999952,65.334152000000074],[-64.909163999999976,65.334717000000126],[-64.912216000000001,65.338042999999971],[-64.910552999999993,65.33998100000008],[-64.904723999999987,65.343596999999932],[-64.609160999999972,65.426376000000005],[-64.591110000000015,65.429703000000131],[-64.583892999999989,65.430267000000072],[-64.508347000000015,65.425812000000064],[-64.477218999999991,65.421097000000032],[-64.466400000000021,65.417480000000069],[-64.458343999999954,65.416656000000103],[-64.448607999999979,65.418319999999937],[-64.441939999999931,65.420258000000103],[-64.433608999999933,65.429153000000099],[-64.429992999999968,65.434417999999994],[-64.40943900000002,65.473877000000073],[-64.412780999999939,65.478592000000106],[-64.418335000000013,65.482758000000047],[-64.434432999999899,65.484146000000123],[-64.551940999999999,65.457764000000054],[-64.695267000000001,65.427765000000022],[-64.795273000000009,65.415268000000026],[-64.806655999999919,65.413879000000009],[-64.82417299999986,65.413315000000068],[-64.833618000000001,65.414429000000041],[-64.843886999999938,65.417205999999965],[-64.845550999999944,65.419434000000138],[-64.854996000000028,65.422759999999982],[-64.863891999999964,65.424698000000092],[-64.869719999999973,65.423874000000126],[-64.974166999999966,65.404708999999968],[-64.981110000000001,65.401932000000102],[-64.987502999999947,65.39776599999999],[-64.990279999999927,65.393875000000094],[-64.988602000000014,65.379424999999969],[-64.98582499999992,65.371368000000018],[-64.989715999999987,65.36831699999999],[-65.001113999999916,65.366652999999985],[-65.016112999999962,65.367203000000018],[-65.058883999999978,65.376648000000102],[-65.075012000000015,65.383041000000048],[-65.136123999999995,65.422484999999938],[-65.144164999999873,65.427765000000022],[-65.149993999999992,65.434143000000006],[-65.168883999999991,65.482758000000047],[-65.168059999999969,65.483871000000079],[-65.160003999999958,65.48803700000002],[-65.149445000000014,65.493042000000059],[-65.142501999999922,65.495818999999983],[-65.129990000000021,65.49859600000002],[-65.110274999999945,65.497482000000048],[-65.082503999999972,65.500548999999978],[-64.929717999999923,65.524703999999986],[-64.854445999999996,65.583603000000096],[-64.836944999999957,65.605819999999937],[-64.767226999999991,65.63998399999997],[-64.741669000000002,65.641662999999994],[-64.723052999999993,65.643600000000049],[-64.711944999999957,65.647217000000012],[-64.70944199999991,65.650543000000027],[-64.710007000000019,65.652205999999978],[-64.71444699999995,65.653320000000122],[-64.768340999999964,65.659988000000112],[-64.794723999999974,65.661926000000051],[-64.818618999999956,65.661926000000051],[-64.828063999999927,65.661102000000085],[-64.843886999999938,65.658034999999984],[-64.853333000000021,65.654709000000139],[-64.872222999999963,65.64498900000001],[-64.888901000000033,65.629150000000095],[-64.899993999999936,65.616378999999995],[-64.952498999999875,65.56442300000009],[-64.974166999999966,65.551376000000062],[-64.993606999999884,65.548035000000027],[-65.110274999999945,65.541092000000049],[-65.15306099999998,65.53915400000011],[-65.311110999999983,65.548874000000012],[-65.318344000000025,65.550537000000134],[-65.326400999999976,65.556366000000139],[-65.333327999999995,65.563599000000124],[-65.338607999999965,65.575546000000088],[-65.308334000000002,65.621094000000028],[-65.303328999999962,65.62831099999994],[-65.299987999999928,65.6308140000001],[-65.295837000000006,65.631653000000085],[-65.275283999999942,65.631363000000079],[-65.252228000000002,65.629974000000061],[-65.217772999999966,65.629974000000061],[-65.188599000000011,65.629974000000061],[-65.153884999999946,65.630264000000068],[-65.125823999999966,65.633330999999998],[-65.112503000000004,65.637207000000103],[-65.105835000000013,65.639435000000049],[-65.103881999999999,65.642487000000131],[-65.103881999999999,65.651932000000045],[-65.109436000000017,65.658875000000023],[-65.106948999999986,65.667205999999908],[-65.105835000000013,65.668594000000041],[-65.09973100000002,65.671920999999941],[-64.994445999999925,65.70138500000013],[-64.981383999999991,65.704712000000086],[-64.969726999999978,65.706650000000025],[-64.942215000000033,65.709152000000074],[-64.922501000000011,65.709427000000119],[-64.902495999999985,65.708602999999982],[-64.814712999999983,65.712769000000037],[-64.803328999999962,65.714157000000114],[-64.798339999999996,65.716385000000116],[-64.793609999999887,65.719985999999949],[-64.791381999999999,65.723312000000021],[-64.794997999999964,65.728043000000127],[-64.801940999999886,65.730270000000019],[-64.815552000000025,65.730545000000006],[-64.90695199999999,65.728867000000093],[-64.973052999999993,65.723602000000028],[-64.996947999999918,65.721374999999966],[-65.024719000000005,65.716934000000037],[-65.057219999999973,65.710266000000047],[-65.076110999999912,65.705551000000014],[-65.103058000000033,65.694427000000132],[-65.11610399999995,65.685257000000092],[-65.138610999999969,65.671096999999975],[-65.144454999999994,65.667480000000012],[-65.164168999999958,65.656937000000084],[-65.168334999999956,65.656097000000045],[-65.369994999999903,65.661102000000085],[-65.431380999999931,65.669144000000074],[-65.441665999999884,65.671646000000123],[-65.449996999999883,65.674988000000042],[-65.454452999999887,65.678314000000114],[-65.456954999999937,65.68220500000001],[-65.456389999999999,65.68553199999991],[-65.452498999999932,65.69081100000011],[-65.447768999999994,65.695251000000098],[-65.460281000000009,65.74136400000009],[-65.490279999999927,65.735809000000017],[-65.497771999999941,65.737487999999985],[-65.50556899999998,65.74331699999999],[-65.505004999999983,65.751663000000121],[-65.498885999999857,65.763046000000088],[-65.455276000000026,65.832489000000066],[-65.449158000000011,65.841094999999939],[-65.439437999999996,65.8477630000001],[-65.357223999999974,65.902480999999909],[-65.152221999999938,65.957764000000111],[-65.137787000000003,65.961104999999975],[-65.050277999999992,65.98054500000012],[-64.963897999999972,65.998596000000134],[-64.946105999999986,66.001389000000131],[-64.934722999999906,66.002213000000097],[-64.923049999999989,66.001389000000131],[-64.898346000000004,65.996933000000013],[-64.880828999999949,65.989975000000015],[-64.851104999999961,65.98054500000012],[-64.842223999999931,65.978043000000071],[-64.801392000000021,65.969436999999971],[-64.772506999999962,65.966095000000053],[-64.755004999999926,65.966095000000053],[-64.743332000000009,65.967484000000013],[-64.735001000000011,65.969436999999971],[-64.733886999999925,65.97554000000008],[-64.738601999999958,65.978867000000037],[-64.765014999999948,65.988037000000077],[-64.821670999999981,66.044708000000014],[-64.750838999999928,66.185532000000023],[-64.721663999999976,66.217483999999956],[-64.712219000000005,66.223602000000085],[-64.605834999999956,66.259155000000135],[-64.480559999999969,66.296371000000079],[-64.451950000000011,66.303589000000102],[-64.405563000000029,66.315811000000053],[-64.388610999999912,66.321655000000078],[-64.375548999999921,66.327209000000039],[-64.365829000000019,66.333053999999947],[-64.356383999999935,66.340546000000074],[-64.354172000000005,66.348038000000031],[-64.356383999999935,66.349715999999944],[-64.366104000000007,66.350815000000125],[-64.377486999999974,66.349990999999989],[-64.443877999999984,66.344711000000075],[-64.464721999999938,66.34304800000001],[-64.71444699999995,66.274994000000049],[-64.718886999999995,66.273315000000025],[-64.789168999999958,66.236374000000126],[-64.796111999999937,66.231659000000093],[-64.839995999999985,66.193313999999987],[-64.858046999999942,66.149993999999992],[-64.856658999999979,66.139984000000084],[-64.851944000000003,66.124984999999981],[-64.849730999999963,66.12052900000009],[-64.854171999999949,66.109711000000118],[-64.858886999999982,66.106093999999985],[-64.933884000000035,66.080276000000026],[-64.948607999999979,66.076934999999992],[-65.126098999999954,66.03776600000009],[-65.381942999999922,65.975815000000125],[-65.398055999999997,65.974700999999925],[-65.827788999999996,65.953049000000078],[-65.876389000000017,65.94802900000002],[-65.916106999999954,65.95109599999995],[-65.928054999999972,65.953873000000044],[-65.935546999999929,65.958328000000051],[-65.939712999999927,65.962493999999992],[-65.96305799999999,66.034424000000001],[-65.963897999999915,66.043869000000029],[-65.918883999999935,66.086105000000032],[-65.911666999999852,66.091660000000104],[-65.904175000000009,66.094437000000028],[-65.786117999999988,66.126373000000115],[-65.674712999999997,66.157486000000119],[-65.65055799999999,66.164429000000098],[-65.640838999999914,66.168319999999994],[-65.634170999999924,66.172484999999995],[-65.564162999999951,66.226929000000041],[-65.545546999999942,66.243317000000104],[-65.471114999999941,66.342484000000013],[-65.471663999999919,66.383606000000043],[-65.473617999999931,66.385817999999915],[-65.475829999999974,66.387771999999984],[-65.479172000000005,66.388046000000088],[-65.482773000000009,66.387771999999984],[-65.489715999999987,66.385817999999915],[-65.501677999999913,66.376373000000058],[-65.553878999999938,66.32777400000009],[-65.555831999999953,66.325272000000041],[-65.559433000000013,66.320541000000105],[-65.561660999999901,66.314423000000147],[-65.564437999999996,66.293593999999985],[-65.562774999999988,66.288315000000011],[-65.562774999999988,66.283324999999934],[-65.571670999999981,66.268326000000059],[-65.598891999999921,66.244979999999998],[-65.610549999999876,66.235809000000074],[-65.696944999999971,66.180542000000116],[-65.702498999999989,66.177475000000015],[-65.844161999999926,66.135817999999972],[-65.926940999999999,66.114700000000084],[-65.951950000000011,66.108871000000079],[-65.96833799999996,66.108032000000094],[-66.073623999999995,66.12052900000009],[-66.139174999999966,66.131362999999965],[-66.145003999999972,66.1336060000001],[-66.147232000000031,66.135269000000051],[-66.200835999999981,66.194977000000051],[-66.191100999999946,66.239974999999959],[-66.25111400000003,66.242203000000131],[-66.371384000000035,66.22526600000009],[-66.401947000000007,66.200821000000076],[-66.478333000000021,66.201660000000061],[-66.489715999999873,66.202774000000034],[-66.496947999999975,66.20498699999996],[-66.505004999999926,66.208878000000027],[-66.524445000000014,66.224152000000117],[-66.529998999999918,66.229156000000103],[-66.534164000000033,66.233046999999999],[-66.540832999999964,66.241653000000099],[-66.542770000000019,66.24664300000012],[-66.577498999999989,66.354430999999977],[-66.576110999999969,66.35914600000001],[-66.570007000000032,66.365540000000067],[-66.564162999999951,66.369141000000127],[-66.53694200000001,66.378035999999952],[-66.500564999999995,66.388046000000088],[-66.454726999999991,66.398041000000148],[-66.445267000000001,66.401382000000012],[-66.438323999999909,66.40415999999999],[-66.434433000000013,66.407211000000018],[-66.437209999999936,66.413315000000068],[-66.441939999999988,66.414429000000041],[-66.466109999999901,66.414992999999981],[-66.473617999999988,66.414429000000041],[-66.481383999999991,66.413040000000024],[-66.597778000000005,66.386932000000115],[-66.604996000000028,66.376373000000058],[-66.610001000000011,66.371368000000018],[-66.617492999999911,66.368591000000094],[-66.629990000000021,66.36775200000011],[-66.713897999999972,66.368866000000082],[-66.724166999999909,66.369431000000134],[-66.730834999999956,66.369980000000112],[-66.743057000000022,66.372756999999979],[-66.767775999999913,66.380539000000113],[-66.821670999999924,66.458037999999931],[-66.821670999999924,66.460815000000025],[-66.806380999999931,66.531936999999971],[-66.851943999999946,66.583328000000051],[-66.972228999999913,66.628860000000088],[-66.999724999999955,66.638321000000019],[-67.023055999999997,66.643326000000059],[-67.036117999999931,66.644714000000022],[-67.048889000000031,66.644714000000022],[-67.058884000000035,66.642761000000064],[-67.060546999999985,66.640273999999977],[-67.05610699999994,66.633605999999986],[-67.043334999999956,66.625809000000061],[-67.016662999999937,66.615265000000022],[-66.950561999999877,66.592209000000139],[-66.908339999999953,66.578049000000078],[-66.887511999999901,66.569442999999978],[-66.884170999999867,66.566086000000041],[-66.889450000000011,66.561096000000134],[-67.105559999999969,66.485809000000017],[-67.118331999999953,66.484985000000052],[-67.133620999999948,66.485809000000017],[-67.176940999999943,66.489700000000084],[-67.189712999999927,66.491653000000042],[-67.198607999999979,66.494141000000013],[-67.202224999999999,66.497208000000114],[-67.203887999999949,66.505264000000011],[-67.192215000000033,66.51527400000009],[-67.186110999999983,66.524428999999941],[-67.19027699999998,66.529160000000104],[-67.327224999999999,66.595825000000048],[-67.338332999999977,66.597762999999986],[-67.34584000000001,66.597214000000008],[-67.398620999999878,66.589157000000057],[-67.410003999999958,66.585540999999978],[-67.463622999999984,66.578873000000044],[-67.515015000000005,66.573607999999979],[-67.581116000000009,66.575271999999984],[-67.639724999999999,66.580551000000128],[-67.726943999999889,66.576660000000061],[-67.737212999999997,66.574158000000011],[-67.740828999999962,66.571106000000043],[-67.742767000000015,66.568328999999949],[-67.741942999999935,66.564148000000046],[-67.735001000000011,66.561371000000008],[-67.722777999999892,66.558029000000033],[-67.701110999999855,66.55581699999999],[-67.499999999999943,66.544838000000027],[-67.426102000000014,66.541367000000037],[-67.407776000000013,66.542206000000022],[-67.395843999999954,66.544708000000071],[-67.380553999999904,66.545822000000044],[-67.373885999999914,66.545822000000044],[-67.365829000000019,66.544434000000138],[-67.296386999999925,66.526093000000003],[-67.281676999999945,66.51887499999998],[-67.148620999999991,66.443863000000022],[-67.143889999999999,66.437759000000028],[-67.143615999999952,66.435531999999967],[-67.138061999999991,66.382202000000063],[-67.139724999999999,66.376648000000046],[-67.160827999999981,66.365540000000067],[-67.172501000000011,66.363876000000062],[-67.185271999999941,66.363602000000128],[-67.197768999999994,66.365814],[-67.291671999999892,66.399429000000055],[-67.337509000000011,66.418869000000086],[-67.338988999999913,66.422852000000091],[-67.343063000000029,66.426650999999993],[-67.350280999999939,66.428863999999976],[-67.365829000000019,66.429703000000131],[-67.389724999999942,66.430817000000104],[-67.406386999999995,66.429703000000131],[-67.410552999999993,66.425262000000032],[-67.410003999999958,66.420821999999987],[-67.383330999999998,66.401932000000045],[-67.378326000000015,66.398604999999918],[-67.36860699999994,66.394714000000022],[-67.31361400000003,66.376373000000058],[-67.288604999999961,66.368866000000082],[-67.240828999999962,66.358871000000022],[-67.195830999999998,66.354980000000126],[-67.188598999999954,66.352203000000031],[-67.133057000000008,66.313873000000115],[-67.125274999999988,66.30693100000002],[-67.126099000000011,66.305542000000003],[-67.129165999999941,66.303589000000102],[-67.139449999999954,66.301376000000118],[-67.162216000000001,66.298874000000069],[-67.183884000000035,66.297485000000052],[-67.194153000000028,66.297760000000039],[-67.208618000000001,66.299988000000042],[-67.226944000000003,66.304153000000042],[-67.240828999999962,66.304153000000042],[-67.254181000000017,66.302765000000136],[-67.261672999999973,66.299149000000057],[-67.282226999999978,66.275269000000037],[-67.297501000000011,66.276093000000003],[-67.399170000000026,66.292480000000012],[-67.413895000000025,66.296646000000067],[-67.450287000000003,66.316666000000112],[-67.453063999999927,66.320541000000105],[-67.453339000000028,66.322495000000117],[-67.494719999999973,66.356934000000138],[-67.526108000000022,66.382202000000063],[-67.5625,66.407486000000063],[-67.566665999999998,66.409424000000001],[-67.603057999999976,66.418594000000041],[-67.634170999999981,66.424698000000092],[-67.690826000000015,66.435256999999922],[-67.71305799999999,66.436096000000077],[-67.730285999999978,66.439971999999955],[-67.812499999999943,66.463043000000027],[-67.825286999999946,66.46775800000006],[-67.828612999999905,66.470824999999934],[-67.834732000000031,66.48332199999993],[-67.838607999999908,66.491653000000042],[-67.923614999999927,66.516098000000056],[-67.952498999999989,66.514709000000039],[-67.985824999999863,66.509720000000073],[-67.992767000000015,66.506943000000035],[-67.992767000000015,66.503876000000105],[-67.944716999999855,66.478867000000093],[-67.929169000000002,66.473038000000088],[-67.906113000000005,66.468048000000067],[-67.886948000000018,66.461928999999998],[-67.870269999999948,66.454712000000086],[-67.760558999999944,66.358032000000037],[-67.756392999999946,66.353317000000004],[-67.711120999999935,66.296936000000073],[-67.701401000000033,66.284714000000122],[-67.701674999999966,66.278320000000065],[-67.705565999999976,66.275269000000037],[-67.724716000000001,66.260818000000029],[-67.672225999999966,66.228317000000118],[-67.570556999999951,66.184143000000006],[-67.454453000000001,66.144714000000079],[-67.399993999999992,66.126373000000115],[-67.281386999999938,66.083054000000004],[-67.165008999999998,66.036926000000051],[-67.162506000000008,66.035262999999929],[-67.243522999999925,65.978301999999985],[-67.173049999999876,65.918593999999985],[-67.185821999999973,65.912200999999982],[-67.194442999999978,65.909714000000122],[-67.201674999999966,65.90914900000007],[-67.429992999999911,65.90554800000001],[-67.740554999999858,65.894150000000025],[-67.795273000000009,65.877197000000137],[-67.824172999999973,65.880814000000044],[-67.86471599999993,65.887772000000041],[-67.914444000000003,65.899155000000064],[-67.938599000000011,65.908035000000098],[-68.02694699999995,65.99275200000011],[-68.030563000000029,65.998032000000023],[-68.031386999999995,66.002213000000097],[-68.027221999999995,66.060806000000071],[-68.025832999999977,66.06581100000011],[-68.130828999999949,66.126648000000102],[-68.244720000000029,66.1827550000001],[-68.340285999999992,66.196930000000009],[-68.538054999999929,66.200821000000076],[-68.712783999999942,66.19859300000013],[-68.808334000000002,66.195816000000036],[-68.842498999999975,66.193313999999987],[-68.851394999999968,66.189972000000012],[-68.846389999999928,66.186645999999996],[-68.835281000000009,66.184981999999991],[-68.668610000000001,66.178864000000033],[-68.568343999999968,66.178588999999988],[-68.414718999999991,66.159424000000058],[-68.403610000000015,66.146378000000084],[-68.391113000000018,66.135269000000051],[-68.383330999999941,66.131087999999977],[-68.300277999999878,66.092758000000003],[-68.27806099999998,66.083602999999982],[-68.244155999999975,66.071105999999986],[-68.237777999999935,66.069992000000013],[-68.225554999999986,66.069992000000013],[-68.220551,66.073044000000095],[-68.218886999999995,66.081375000000037],[-68.22193900000002,66.085266000000104],[-68.229720999999984,66.092209000000082],[-68.244155999999975,66.099991000000045],[-68.246947999999975,66.112761999999975],[-68.220000999999968,66.128586000000041],[-68.202498999999932,66.128859999999975],[-68.194716999999969,66.127472000000068],[-68.157501000000025,66.117477000000008],[-68.134170999999981,66.109985000000052],[-68.118880999999988,66.103592000000106],[-68.047226000000023,66.064986999999974],[-68.048889000000031,66.00749200000007],[-68.051940999999943,65.996643000000006],[-68.05360399999995,65.991088999999988],[-68.064437999999939,65.984421000000054],[-68.12388599999997,65.963043000000084],[-68.134170999999981,65.963318000000129],[-68.173614999999984,65.969436999999971],[-68.196945000000028,65.973876999999959],[-68.210555999999997,65.979430999999977],[-68.27806099999998,66.014160000000061],[-68.304442999999878,66.028046000000018],[-68.323897999999929,66.003875999999991],[-68.333618000000001,65.93193100000002],[-68.332229999999925,65.92886400000009],[-68.325835999999981,65.916382000000112],[-68.321670999999981,65.911925999999994],[-68.304748999999958,65.908661000000052],[-68.287780999999995,65.907760999999994],[-68.260009999999909,65.911377000000016],[-68.194153000000028,65.921097000000145],[-68.156113000000005,65.929703000000018],[-68.150283999999999,65.930542000000003],[-68.142775999999969,65.929152999999985],[-68.139998999999989,65.927475000000072],[-68.136123999999995,65.922760000000039],[-68.134734999999921,65.913605000000018],[-68.13290399999994,65.834885000000043],[-68.139175000000023,65.817215000000147],[-68.147231999999974,65.798325000000034],[-68.033324999999934,65.776382000000069],[-68.023894999999868,65.77526899999998],[-68.003066999999987,65.778320000000008],[-67.923614999999927,65.793869000000086],[-67.886123999999882,65.804977000000065],[-67.821120999999948,65.768050999999957],[-67.870269999999948,65.689422999999977],[-67.942489999999964,65.618042000000116],[-67.989165999999898,65.61914100000007],[-68.058884000000035,65.568053999999961],[-68.027221999999995,65.558319000000097],[-68.012512000000015,65.557754999999929],[-68.011672999999973,65.558868000000018],[-67.998610999999983,65.566939999999988],[-67.98721299999994,65.571381000000088],[-67.971114999999998,65.575271999999984],[-67.956664999999987,65.571655000000021],[-67.951675000000023,65.568329000000006],[-67.953063999999927,65.557205000000124],[-67.955001999999979,65.55386400000009],[-68.020844000000011,65.49803200000008],[-68.027785999999935,65.491653000000042],[-68.030288999999982,65.487761999999975],[-68.030563000000029,65.484421000000111],[-68.025832999999977,65.481093999999985],[-68.022507000000019,65.480545000000063],[-68.00778200000002,65.485535000000084],[-67.941939999999931,65.525269000000037],[-67.922500999999954,65.538040000000137],[-67.860274999999945,65.584427000000062],[-67.730285999999978,65.636383000000137],[-67.712219000000005,65.640823000000125],[-67.652495999999985,65.651382000000012],[-67.466109999999958,65.674149000000114],[-67.428604000000007,65.676650999999993],[-67.402495999999928,65.677475000000129],[-67.396118000000001,65.676650999999993],[-67.382216999999912,65.673874000000069],[-67.328063999999983,65.662491000000045],[-67.319457999999941,65.659423999999944],[-67.280562999999972,65.642487000000131],[-67.275283999999999,65.637772000000098],[-67.256667999999991,65.615265000000022],[-67.25389100000001,65.611649],[-67.251677999999856,65.606934000000138],[-67.253341999999975,65.601654000000053],[-67.256667999999991,65.599152000000004],[-67.272781000000009,65.595261000000107],[-67.320557000000008,65.586929000000112],[-67.333327999999938,65.582489000000066],[-67.336120999999935,65.580826000000002],[-67.456664999999987,65.501937999999996],[-67.458892999999932,65.49803200000008],[-67.451400999999919,65.493590999999981],[-67.347504000000015,65.458602999999982],[-67.221389999999985,65.456375000000037],[-67.189986999999974,65.458037999999988],[-67.180832000000009,65.459152000000131],[-67.169158999999979,65.461380000000077],[-67.155563000000029,65.466934000000094],[-67.142226999999991,65.469147000000078],[-67.081679999999949,65.462494000000049],[-67.065552000000025,65.458602999999982],[-67.058608999999933,65.453597999999943],[-67.058043999999995,65.451385000000016],[-67.058334000000002,65.426651000000049],[-67.062774999999931,65.417480000000069],[-67.078339000000028,65.392211999999972],[-67.111114999999984,65.364700000000028],[-67.118056999999965,65.361922999999933],[-67.12388599999997,65.360535000000027],[-67.134445000000028,65.359711000000061],[-67.218063000000029,65.358597000000088],[-67.255568999999923,65.360535000000027],[-67.316101000000003,65.358597000000088],[-67.400833000000034,65.350266000000033],[-67.408889999999985,65.348328000000095],[-67.413619999999923,65.345825000000104],[-67.417770000000019,65.342209000000025],[-67.416107000000011,65.339157000000114],[-67.40943900000002,65.333328000000108],[-67.399993999999992,65.329712000000029],[-67.391113000000018,65.327209000000096],[-67.33666999999997,65.31721500000009],[-67.326674999999966,65.316940000000045],[-67.319167999999934,65.318054000000018],[-67.315826000000015,65.320541000000105],[-67.306655999999862,65.330276000000026],[-67.306106999999997,65.333602999999925],[-67.306945999999982,65.338042999999971],[-67.303878999999938,65.34248400000007],[-67.297501000000011,65.347487999999998],[-67.291381999999942,65.349716000000001],[-67.283614999999998,65.351089000000059],[-67.269164999999987,65.352203000000031],[-67.125548999999978,65.311919999999986],[-67.119995000000017,65.309982000000048],[-67.077788999999996,65.250275000000101],[-67.063889000000017,65.218322999999941],[-66.93472300000002,65.233871000000136],[-66.933060000000012,65.233597000000032],[-66.928878999999938,65.229705999999965],[-66.948883000000023,65.125259000000142],[-66.950835999999981,65.11692800000003],[-66.953339000000028,65.113036999999963],[-66.959166999999979,65.106644000000017],[-66.967498999999975,65.103866999999923],[-67.025283999999886,65.10832199999993],[-67.044158999999922,65.107483000000002],[-67.055557000000022,65.105255000000056],[-67.066665999999998,65.100815000000011],[-67.072234999999978,65.097214000000122],[-67.106110000000001,65.064147999999989],[-67.108611999999994,65.060256999999922],[-67.107773000000009,65.058868000000132],[-67.096114999999998,65.056091000000038],[-67.085830999999985,65.056366000000082],[-67.075012000000015,65.058029000000147],[-66.890563999999983,65.103317000000061],[-66.835555999999997,65.137206999999989],[-66.756393000000003,65.177200000000028],[-66.74749799999995,65.180542000000003],[-66.730285999999921,65.181366000000139],[-66.726105000000018,65.180267000000129],[-66.725554999999986,65.178040000000067],[-66.753341999999975,65.113312000000008],[-66.801666000000012,65.060806000000071],[-66.767501999999979,65.024429000000112],[-66.743057000000022,64.963042999999971],[-66.726944000000003,64.913879000000122],[-66.727492999999924,64.90525800000006],[-66.728057999999976,64.901657],[-66.733063000000016,64.888321000000019],[-66.739165999999955,64.859985000000108],[-66.735000999999954,64.824707000000103],[-66.734160999999915,64.820541000000048],[-66.698043999999868,64.761931999999945],[-66.694716999999912,64.761383000000023],[-66.687774999999988,64.762206999999989],[-66.654175000000009,64.771103000000096],[-66.641113000000018,64.775818000000129],[-66.632492000000013,64.781372000000147],[-66.638061999999991,64.785538000000031],[-66.676101999999901,64.876082999999994],[-66.696944999999971,65.03276100000005],[-66.694152999999972,65.037201000000096],[-66.688660000000027,65.038772999999935],[-66.673324999999977,65.038589000000002],[-66.660827999999981,65.037201000000096],[-66.618056999999965,65.030273000000079],[-66.535278000000005,65.010817999999915],[-66.530563000000029,65.00749200000007],[-66.49610899999999,64.983047000000056],[-66.488891999999908,64.957489000000123],[-66.496658000000025,64.945526000000086],[-66.495543999999995,64.938873000000115],[-66.491378999999995,64.934982000000048],[-66.486664000000019,64.932205000000124],[-66.478606999999954,64.929153000000042],[-66.388610999999969,64.913315000000011],[-66.379165999999998,64.912201000000039],[-66.368057000000022,64.913605000000018],[-66.363892000000021,64.917480000000012],[-66.361938000000009,64.923599000000024],[-66.36361699999992,64.928589000000102],[-66.334732000000031,64.934708000000114],[-66.177779999999927,64.880264000000068],[-66.148346000000004,64.868866000000025],[-66.177215999999987,64.796371000000022],[-66.18472300000002,64.784424000000058],[-66.191939999999931,64.77887000000004],[-66.199431999999945,64.774993999999992],[-66.203339000000028,64.77388000000002],[-66.213333000000034,64.75610400000005],[-66.219161999999983,64.726089000000115],[-66.218886999999938,64.69081100000011],[-66.212218999999948,64.685531999999967],[-66.18472300000002,64.681656000000032],[-66.166945999999939,64.681091000000038],[-66.161117999999931,64.682479999999998],[-66.15834000000001,64.68414300000012],[-66.151947000000007,64.689147999999989],[-66.147781000000009,64.695815999999979],[-66.147232000000031,64.70138500000013],[-66.147232000000031,64.704162999999937],[-66.150283999999942,64.71748400000007],[-66.14973399999991,64.733597000000145],[-66.145554000000004,64.740265000000136],[-66.136397999999986,64.754166000000112],[-66.116942999999992,64.781372000000147],[-66.091675000000009,64.809708000000057],[-66.080841000000021,64.819153000000085],[-66.058333999999945,64.832764000000054],[-66.037215999999944,64.844986000000063],[-66.020843999999954,64.849716000000058],[-66.011397999999986,64.848327999999981],[-66.011123999999995,64.846375000000023],[-66.008621000000005,64.78915400000011],[-66.009170999999867,64.778046000000074],[-66.012511999999901,64.699417000000039],[-65.899993999999992,64.673309000000074],[-65.846664000000033,64.676085999999998],[-65.852218999999991,64.680267000000072],[-65.861389000000031,64.689147999999989],[-65.889449999999954,64.719711000000132],[-65.899170000000026,64.73275799999999],[-65.958617999999944,64.877761999999962],[-65.95666499999993,64.886108000000092],[-65.953338999999971,64.888321000000019],[-65.941939999999988,64.890548999999965],[-65.931380999999931,64.89137299999993],[-65.92471299999994,64.89137299999993],[-65.838608000000022,64.882476999999994],[-65.727218999999934,64.843597000000045],[-65.717772999999966,64.84027100000003],[-65.674438000000009,64.818054000000132],[-65.664168999999958,64.80831900000004],[-65.661666999999966,64.804428000000144],[-65.660278000000005,64.799149],[-65.665008999999998,64.796936000000017],[-65.683318999999926,64.792206000000022],[-65.698333999999988,64.784714000000065],[-65.720275999999956,64.766663000000108],[-65.736114999999984,64.750275000000045],[-65.742492999999911,64.741089000000102],[-65.742766999999958,64.735260000000039],[-65.736938000000009,64.726089000000115],[-65.726944000000003,64.711380000000077],[-65.710830999999985,64.693039000000056],[-65.704726999999934,64.687485000000095],[-65.703063999999927,64.692200000000128],[-65.709441999999967,64.712769000000037],[-65.71055599999994,64.718596999999988],[-65.710007000000019,64.732208000000128],[-65.708618000000001,64.736099000000024],[-65.684157999999968,64.761107999999979],[-65.676102000000014,64.765548999999908],[-65.665282999999931,64.771378000000141],[-65.648055999999997,64.774993999999992],[-65.642776000000026,64.774993999999992],[-65.627212999999927,64.771103000000096],[-65.598891999999921,64.756377999999984],[-65.56639100000001,64.737488000000042],[-65.561110999999869,64.733047000000113],[-65.557495000000017,64.728317000000061],[-65.555831999999953,64.723312000000021],[-65.556380999999931,64.717758000000003],[-65.572234999999921,64.664153999999996],[-65.576675000000023,64.652481000000023],[-65.583327999999938,64.642761000000121],[-65.586394999999925,64.640274000000034],[-65.654723999999987,64.602478000000019],[-65.662505999999951,64.598328000000038],[-65.714172000000019,64.570541000000048],[-65.730835000000013,64.517761000000007],[-65.732223999999974,64.508040999999935],[-65.725554999999929,64.498031999999967],[-65.721664000000033,64.49414100000007],[-65.708344000000011,64.486649000000114],[-65.695540999999992,64.485809000000074],[-65.665008999999998,64.492203000000131],[-65.643340999999964,64.494979999999998],[-65.573333999999988,64.498596000000077],[-65.524718999999948,64.49971000000005],[-65.518065999999976,64.49971000000005],[-65.506392999999946,64.497482000000105],[-65.504181000000017,64.495818999999983],[-65.50556899999998,64.468872000000033],[-65.396117999999944,64.52137799999997],[-65.384170999999981,64.524155000000064],[-65.365828999999906,64.526931999999988],[-65.210555999999883,64.536102000000028],[-65.203888000000006,64.533874999999966],[-65.144454999999994,64.51138300000008],[-65.085006999999962,64.479705999999965],[-65.077788999999939,64.475815000000068],[-65.075835999999981,64.471375000000023],[-65.074172999999973,64.461929000000055],[-65.071670999999981,64.440810999999997],[-65.071945000000028,64.43081699999999],[-65.073623999999938,64.426086000000055],[-65.194991999999957,64.310257000000092],[-65.202498999999989,64.306366000000025],[-65.210830999999985,64.303863999999976],[-65.284728999999913,64.291656000000103],[-65.295272999999895,64.290267999999969],[-65.309433000000013,64.29136699999998],[-65.343337999999903,64.294983000000002],[-65.377212999999983,64.303314000000114],[-65.386397999999929,64.30664100000007],[-65.408889999999928,64.312485000000038],[-65.451674999999966,64.319992000000013],[-65.498885999999857,64.322769000000108],[-65.525008999999898,64.323318000000029],[-65.554168999999945,64.323318000000029],[-65.563323999999909,64.322494999999947],[-65.65583799999996,64.308868000000075],[-65.661666999999966,64.307479999999998],[-65.658339999999953,64.302765000000136],[-65.654449,64.300812000000008],[-65.61860699999994,64.293045000000063],[-65.601943999999946,64.293594000000041],[-65.591948999999943,64.296096999999975],[-65.572234999999921,64.298599000000081],[-65.505844000000025,64.302475000000129],[-65.465835999999967,64.30304000000001],[-65.434158000000025,64.299149000000114],[-65.422774999999945,64.296371000000136],[-65.250564999999995,64.208328000000051],[-65.24610899999999,64.204987000000017],[-65.242766999999958,64.200271999999984],[-65.265015000000005,64.17886400000009],[-65.16194200000001,64.138046000000145],[-65.049438000000009,64.072220000000016],[-65.053878999999938,64.067764000000068],[-65.060546999999929,64.064986999999974],[-65.093886999999995,64.052199999999971],[-65.103881999999999,64.049149],[-65.136672999999917,64.041367000000037],[-65.158339999999953,64.038315000000068],[-65.196105999999929,64.040268000000026],[-65.206115999999952,64.040268000000026],[-65.21665999999999,64.038589000000002],[-65.221389999999928,64.03637700000013],[-65.225554999999929,64.032761000000107],[-65.221938999999963,64.028594999999996],[-65.214172000000019,64.025543000000084],[-65.189986999999917,64.020264000000111],[-65.096663999999976,64.009155000000021],[-65.08805799999999,64.009430000000066],[-64.949158000000011,64.014999000000046],[-64.800551999999982,64.02777100000003],[-64.68638599999997,64.039154000000053],[-64.676940999999999,64.036652000000004],[-64.668059999999969,64.033051000000114],[-64.661117999999988,64.028594999999996],[-64.630554000000018,63.978324999999984],[-64.631377999999984,63.974709000000132],[-64.632766999999944,63.972763000000043],[-64.638335999999981,63.96915400000006],[-64.64805599999994,63.966934000000037],[-64.658889999999985,63.965546000000131],[-64.669998000000021,63.966385000000059],[-64.689437999999996,63.966103000000032],[-64.700561999999991,63.963882000000126],[-64.817504999999983,63.923607000000004],[-64.875274999999988,63.901100000000099],[-64.888901000000033,63.894996999999989],[-64.974715999999944,63.851936000000137],[-64.985000999999954,63.829163000000051],[-64.987502999999947,63.823051000000078],[-64.984160999999915,63.813881000000038],[-64.954177999999956,63.776382000000126],[-64.94888299999991,63.774437000000091],[-64.77806099999998,63.747772000000055],[-64.68360899999999,63.746383999999978],[-64.584441999999854,63.704711999999915],[-64.559432999999956,63.694153000000085],[-64.540282999999988,63.684433000000013],[-64.527495999999985,63.676941000000056],[-64.522507000000019,63.672768000000076],[-64.508347000000015,63.650826000000052],[-64.506667999999991,63.636940000000038],[-64.507506999999976,63.630821000000026],[-64.515015000000005,63.620270000000119],[-64.52194199999991,63.611938000000123],[-64.536666999999966,63.581108000000086],[-64.529449,63.534996000000035],[-64.522507000000019,63.514717000000076],[-64.50167799999997,63.443878000000097],[-64.49888599999997,63.429161000000079],[-64.495543999999938,63.327773999999977],[-64.510833999999988,63.307770000000062],[-64.588897999999858,63.321938000000102],[-64.608337000000006,63.32388300000008],[-64.61999499999996,63.323326000000009],[-64.62222300000002,63.322219999999959],[-64.624709999999993,63.318054000000075],[-64.61999499999996,63.313324000000023],[-64.614715999999987,63.30971500000004],[-64.587783999999942,63.299721000000034],[-64.577224999999999,63.296660999999972],[-64.566390999999953,63.293884000000048],[-64.525557999999933,63.290550000000053],[-64.500838999999985,63.289992999999981],[-64.488892000000021,63.288330000000087],[-64.482773000000009,63.285827999999981],[-64.481948999999872,63.282211000000018],[-64.531112999999948,63.249718000000087],[-64.538054999999929,63.248329000000069],[-64.658339999999953,63.249161000000015],[-64.767501999999922,63.32388300000008],[-64.826950000000011,63.45249199999995],[-64.850554999999929,63.510826000000009],[-64.942490000000021,63.632210000000043],[-64.955001999999922,63.640274000000034],[-64.973052999999993,63.646942000000024],[-64.99499499999996,63.652488999999946],[-65.046386999999925,63.662209000000075],[-65.06361400000003,63.668053000000043],[-65.070847000000015,63.671936000000017],[-65.166945999999996,63.747772000000055],[-65.166397000000018,63.773323000000119],[-65.153335999999911,63.771102999999925],[-65.150833000000034,63.772217000000126],[-65.154174999999952,63.776939000000027],[-65.15943900000002,63.781105000000082],[-65.204726999999934,63.80332199999998],[-65.293609999999944,63.812767000000065],[-65.298614999999927,63.81249200000002],[-65.301392000000021,63.81082200000003],[-65.303878999999995,63.806938000000002],[-65.300277999999935,63.799995000000024],[-65.281677000000002,63.788887000000045],[-65.215560999999923,63.75471500000009],[-65.15566999999993,63.725326999999993],[-65.135284000000013,63.715271000000143],[-65.053054999999972,63.638046000000088],[-65.039169000000015,63.574165000000107],[-65.069732999999985,63.568886000000134],[-65.085830999999928,63.563881000000094],[-65.091948999999943,63.559714999999983],[-65.099990999999932,63.547217999999987],[-65.102218999999991,63.541664000000026],[-65.102218999999991,63.536658999999929],[-65.099441999999897,63.526381999999955],[-65.026947000000007,63.399162000000103],[-64.965011999999945,63.369438000000059],[-64.952498999999875,63.362212999999997],[-64.942490000000021,63.353049999999996],[-64.909163999999976,63.280548000000124],[-64.901108000000022,63.237495000000024],[-64.908614999999941,63.235550000000046],[-64.921386999999925,63.235825000000034],[-65.046386999999925,63.248329000000069],[-65.068893000000003,63.252494999999954],[-65.082503999999972,63.260826000000066],[-65.103332999999964,63.27777100000003],[-65.114166000000012,63.284996000000092],[-65.123321999999973,63.288330000000087],[-65.136123999999995,63.290833000000021],[-65.141953000000001,63.28943600000008],[-65.148620999999991,63.286110000000065],[-65.146956999999873,63.281380000000013],[-65.083327999999938,63.20388000000014],[-65.057770000000005,63.174712999999997],[-65.054992999999911,63.172217999999987],[-65.046111999999994,63.171104000000014],[-65.016524999999945,63.171515999999997],[-64.998610999999926,63.176102000000014],[-64.944716999999912,63.183327000000077],[-64.920272999999952,63.184158000000082],[-64.911391999999921,63.180824000000086],[-64.811660999999958,63.137497000000053],[-64.797500999999954,63.130547000000035],[-64.783889999999985,63.12221500000004],[-64.755004999999926,63.099158999999986],[-64.753341999999918,63.096657000000107],[-64.762511999999958,63.0472180000001],[-64.771392999999989,62.98333000000008],[-64.703338999999971,62.953323000000069],[-64.696105999999872,62.952217000000076],[-64.676392000000021,62.941658000000018],[-64.645553999999947,62.921660999999972],[-64.634444999999971,62.912491000000102],[-64.627212999999983,62.90415999999999],[-64.626937999999939,62.899994000000106],[-64.629989999999964,62.897491000000116],[-64.638335999999981,62.894440000000088],[-64.733611999999994,62.878875999999991],[-64.769454999999937,62.862213000000111],[-64.855269999999962,62.865273000000002],[-64.881942999999865,62.867493000000024],[-64.903885000000002,62.872490000000084],[-64.923324999999977,62.878875999999991],[-65.005004999999983,62.90776800000009],[-65.162215999999944,62.943047000000035],[-65.225280999999995,62.954993999999942],[-65.236114999999984,62.957771000000037],[-65.243056999999965,62.961662000000103],[-65.248336999999935,62.965828000000045],[-65.25140399999998,62.970543000000077],[-65.255004999999926,62.979713000000118],[-65.254729999999995,62.985268000000019],[-65.26916499999993,62.959991000000059],[-65.194442999999922,62.878875999999991],[-65.190276999999924,62.875267000000008],[-65.175002999999947,62.862495000000024],[-65.153884999999946,62.84693900000002],[-65.14805599999994,62.843322999999998],[-65.129165999999998,62.83638000000002],[-65.115279999999984,62.828880000000083],[-64.984726000000023,62.714157],[-64.978332999999964,62.704711999999972],[-64.94888299999991,62.648604999999975],[-64.964721999999995,62.6336060000001],[-64.980834999999956,62.623604000000114],[-65.062774999999988,62.587494000000049],[-65.071120999999948,62.584435000000042],[-65.087219000000005,62.57888000000014],[-65.114715999999987,62.571663000000058],[-65.145003999999915,62.565826000000072],[-65.187499999999943,62.56221000000005],[-65.19776899999988,62.563048999999978],[-65.205001999999979,62.566101000000117],[-65.212219000000005,62.569992000000013],[-65.22084000000001,62.578331000000048],[-65.288605000000018,62.659987999999998],[-65.294997999999964,62.669441000000006],[-65.296660999999972,62.674163999999962],[-65.290558000000033,62.678878999999995],[-65.273894999999982,62.685265000000129],[-65.267776000000026,62.690269000000058],[-65.266952999999944,62.694434999999999],[-65.279175000000009,62.696654999999964],[-65.321121000000005,62.694434999999999],[-65.327498999999989,62.691658000000075],[-65.329726999999934,62.685546999999985],[-65.328063999999983,62.666100000000142],[-65.337218999999948,62.666664000000083],[-65.346953999999869,62.675827000000083],[-65.353881999999942,62.684433000000013],[-65.356658999999922,62.69499200000007],[-65.339721999999938,62.837493999999992],[-65.391952999999944,62.843605000000025],[-65.436661000000015,62.819442999999978],[-65.566665999999941,62.811661000000015],[-65.579178000000013,62.811934999999949],[-65.601943999999946,62.817772000000105],[-65.60943599999996,62.820831000000055],[-65.61610399999995,62.824715000000083],[-65.746947999999861,62.917770000000075],[-65.909438999999963,62.925827000000027],[-65.933318999999983,62.955826000000059],[-65.910278000000005,62.967765999999983],[-65.839721999999995,63.020828000000051],[-65.834731999999974,63.026382000000069],[-65.833327999999995,63.03138000000007],[-65.838333000000034,63.033333000000027],[-65.84973100000002,63.032767999999976],[-65.866394000000014,63.028602999999976],[-65.926101999999958,63.008331000000112],[-65.949722000000008,62.997772000000055],[-65.955001999999979,62.994155999999975],[-65.955565999999862,62.990829000000076],[-65.946380999999974,62.983047000000113],[-65.945830999999941,62.978874000000133],[-65.950561999999991,62.975822000000051],[-65.960830999999928,62.974433999999974],[-65.973891999999864,62.973877000000073],[-65.987212999999997,62.974709000000132],[-66.014450000000011,62.978874000000133],[-66.031386999999938,62.984717999999987],[-66.039718999999991,62.988602000000014],[-66.052215999999987,62.996658000000082],[-66.14973399999991,63.059990000000084],[-66.155563000000029,63.081383000000017],[-66.162780999999939,63.089989000000116],[-66.174438000000009,63.096382000000062],[-66.266952999999944,63.130820999999969],[-66.275832999999977,63.133881000000031],[-66.282501000000025,63.133330999999998],[-66.287780999999995,63.12971500000009],[-66.291945999999996,63.125267000000122],[-66.293335000000013,63.120543999999995],[-66.291381999999999,63.116104000000121],[-66.206954999999994,63.040833000000077],[-66.196654999999964,63.031661999999983],[-66.182769999999891,63.023604999999975],[-66.121658000000025,63.00110600000005],[-66.105559999999969,62.993880999999988],[-66.098343,62.990273000000059],[-66.091385000000002,62.983604000000014],[-66.089721999999881,62.978600000000029],[-66.097777999999948,62.952492000000063],[-66.103058000000033,62.946655000000135],[-66.107772999999952,62.943878000000041],[-66.11610399999995,62.940544000000045],[-66.135833999999932,62.936652999999978],[-66.147232000000031,62.936104],[-66.159163999999976,62.936652999999978],[-66.168883999999991,62.938881000000094],[-66.192215000000033,62.954437000000041],[-66.220839999999953,62.969437000000028],[-66.284728999999913,62.990273000000059],[-66.293883999999878,62.992767000000015],[-66.345000999999968,62.999161000000015],[-66.351668999999958,62.998603999999943],[-66.366104000000007,62.992493000000081],[-66.37860099999989,62.992493000000081],[-66.392775999999969,62.994995000000131],[-66.408889999999928,63.001938000000109],[-66.444442999999865,63.020546000000024],[-66.46444699999995,63.032211000000075],[-66.518340999999964,63.065269000000058],[-66.525283999999999,63.074715000000026],[-66.551940999999999,63.17943600000001],[-66.626388999999961,63.252220000000136],[-66.646666999999979,63.326384999999959],[-66.638335999999981,63.340271000000143],[-66.637512000000015,63.349998000000085],[-66.636948000000018,63.35833000000008],[-66.637786999999946,63.362770000000069],[-66.642776000000026,63.372489999999971],[-66.650832999999977,63.374992000000077],[-66.657500999999968,63.374435000000005],[-66.664169000000015,63.371658000000082],[-66.735549999999989,63.299438000000066],[-66.738602000000014,63.294159000000093],[-66.740828999999962,63.288048000000003],[-66.740279999999927,63.283607000000075],[-66.731110000000001,63.274712000000022],[-66.720550999999944,63.266388000000006],[-66.685546999999985,63.248046999999985],[-66.671386999999868,63.242767000000129],[-66.646956999999929,63.239159000000029],[-66.639174999999966,63.236107000000118],[-66.607498000000021,63.21027400000014],[-66.602492999999981,63.205269000000101],[-66.600280999999995,63.200829000000113],[-66.558334000000002,63.087212000000022],[-66.537780999999882,62.998047000000042],[-66.540282999999931,62.994155999999975],[-66.546660999999915,62.991379000000109],[-66.557220000000029,62.99193600000001],[-66.673049999999989,63.023048000000074],[-66.682220000000029,63.026382000000069],[-66.763061999999934,63.083054000000061],[-66.768065999999919,63.087768999999923],[-66.773894999999925,63.096382000000062],[-66.774444999999957,63.100548000000003],[-66.778885000000002,63.143607999999972],[-66.789169000000015,63.21138000000002],[-66.806655999999975,63.272491000000116],[-66.807495000000017,63.273323000000062],[-66.811661000000015,63.274437000000034],[-66.82028200000002,63.273323000000062],[-66.829177999999956,63.271660000000111],[-66.837783999999942,63.267769000000044],[-66.846953999999926,63.25750000000005],[-66.849166999999966,63.251389000000131],[-66.849166999999966,63.245544000000052],[-66.846114999999941,63.229713000000061],[-66.844727000000034,63.22665400000011],[-66.837219000000005,63.21804800000001],[-66.828338999999971,63.209159999999997],[-66.819457999999941,63.200272000000041],[-66.813888999999961,63.196098000000006],[-66.803878999999938,63.186378000000104],[-66.801391999999964,63.182495000000131],[-66.799727999999959,63.177490000000091],[-66.799437999999952,63.172492999999974],[-66.801666000000012,63.166382000000112],[-66.806655999999975,63.160545000000127],[-66.818343999999968,63.154159999999933],[-66.835555999999997,63.149161999999933],[-66.844161999999926,63.147217000000126],[-66.855270000000019,63.147217000000126],[-66.868332000000009,63.148880000000077],[-66.87777699999998,63.151931999999988],[-67.018340999999964,63.238883999999985],[-67.023894999999982,63.243050000000096],[-67.025008999999955,63.246658000000025],[-67.024445000000014,63.250274999999988],[-67.023055999999997,63.252777000000037],[-67.006393000000003,63.262215000000083],[-66.971114999999998,63.389717000000019],[-66.972777999999948,63.394997000000103],[-66.977782999999988,63.399719000000005],[-66.988891999999964,63.402489000000003],[-67.011123999999938,63.399993999999992],[-67.017226999999991,63.397217000000069],[-67.040832999999964,63.33554799999996],[-67.039168999999958,63.330551000000071],[-67.035827999999924,63.325272000000098],[-67.025008999999955,63.311104000000057],[-67.016113000000018,63.296660999999972],[-67.014174999999966,63.286385000000053],[-67.017226999999991,63.281105000000025],[-67.033324999999934,63.275268999999923],[-67.051940999999943,63.273323000000062],[-67.171111999999994,63.273880000000133],[-67.179717999999923,63.275551000000007],[-67.203887999999949,63.28527100000008],[-67.431670999999994,63.412765999999976],[-67.499999999999943,63.442764000000125],[-67.621658000000025,63.548881999999992],[-67.683318999999983,63.619438000000002],[-67.838897999999915,63.729713000000118],[-67.897506999999962,63.753052000000139],[-67.914718999999991,63.759438000000046],[-67.92332499999992,63.761108000000036],[-67.926102000000014,63.759163000000058],[-67.925277999999935,63.75471500000009],[-67.921386999999982,63.744438000000059],[-67.918059999999855,63.739159000000086],[-67.820006999999976,63.596382000000006],[-67.710555999999997,63.458603000000039],[-67.683318999999983,63.431664000000069],[-67.675003000000004,63.4180530000001],[-67.67193599999996,63.412490999999989],[-67.667769999999962,63.403046000000074],[-67.666396999999961,63.394439999999975],[-67.666655999999989,63.388046000000145],[-67.678329000000019,63.373047000000099],[-67.685271999999998,63.368880999999988],[-67.694442999999978,63.366385999999977],[-67.716659999999933,63.363884000000098],[-67.724166999999966,63.364159000000086],[-67.737212999999997,63.366385999999977],[-67.746384000000035,63.369438000000059],[-67.820557000000008,63.400269000000037],[-67.827224999999999,63.405266000000097],[-67.837509000000011,63.424164000000019],[-67.854445999999996,63.452774000000034],[-67.858046999999999,63.457497000000046],[-67.871658000000025,63.464714000000129],[-67.950835999999981,63.506660000000124],[-68.025283999999942,63.540832999999964],[-68.033324999999934,63.543883999999991],[-68.041381999999999,63.546104000000014],[-68.053054999999915,63.545273000000009],[-68.061661000000015,63.54332700000009],[-68.075561999999991,63.544159000000036],[-68.365829000000019,63.64527099999998],[-68.388610999999855,63.655548000000124],[-68.400283999999942,63.663879000000009],[-68.405563000000029,63.668602000000021],[-68.428328999999962,63.696381000000031],[-68.542769999999962,63.732490999999925],[-68.645843999999897,63.747490000000028],[-68.713622999999984,63.742493000000081],[-68.709732000000031,63.738045000000113],[-68.711394999999925,63.734717999999987],[-68.716109999999958,63.732207999999957],[-68.723617999999988,63.729713000000118],[-68.795546999999999,63.728600000000085],[-68.804442999999935,63.730270000000019],[-68.876099000000011,63.744713000000104],[-68.915833000000021,63.757216999999969],[-68.924437999999952,63.758888000000013],[-68.962508999999955,63.759163000000058],[-68.994720000000029,63.755554000000018],[-68.996947999999918,63.75360900000004],[-68.998336999999992,63.745270000000005],[-68.995270000000005,63.741379000000109],[-68.989715999999987,63.737495000000081],[-68.977782999999931,63.729713000000118],[-68.933059999999955,63.711936999999978],[-68.919448999999986,63.704993999999999],[-68.824722000000008,63.643883000000073],[-68.813048999999978,63.635551000000078],[-68.809433000000013,63.630821000000026],[-68.807220000000029,63.625824000000136],[-68.809433000000013,63.621658000000025],[-68.793334999999956,63.589157000000114],[-68.766113000000018,63.556656000000032],[-68.754729999999995,63.548607000000004],[-68.717772999999909,63.528603000000089],[-68.557769999999948,63.45249199999995],[-68.495833999999945,63.421378999999945],[-68.35943599999996,63.344710999999961],[-68.288605000000018,63.298332000000016],[-68.270553999999947,63.284996000000092],[-68.206389999999999,63.227211000000011],[-68.202498999999932,63.216933999999981],[-68.206389999999999,63.212493999999992],[-68.18638599999997,63.188324000000136],[-68.156113000000005,63.158324999999934],[-68.146118000000001,63.150269000000037],[-68.139175000000023,63.148605000000032],[-68.128601000000003,63.148048000000131],[-68.115554999999972,63.15248900000006],[-68.082779000000016,63.163605000000018],[-68.063888999999961,63.163605000000018],[-67.952224999999942,63.145546000000081],[-67.926392000000021,63.141106000000036],[-67.917495999999971,63.137214999999969],[-67.916655999999932,63.133049000000085],[-67.92332499999992,63.129433000000063],[-67.912780999999939,63.083327999999995],[-67.646117999999944,63.100272999999959],[-67.632767000000001,63.09887700000013],[-67.610275000000001,63.094154000000117],[-67.604996000000028,63.089989000000116],[-67.599990999999989,63.084434999999928],[-67.599990999999989,63.078880000000026],[-67.601944000000003,63.073326000000066],[-67.61500499999994,63.063605999999993],[-67.624160999999958,63.061104000000057],[-67.636123999999995,63.059715000000097],[-67.682219999999916,63.057770000000119],[-67.689712999999927,63.058044000000052],[-67.709166999999923,63.056655999999919],[-67.719451999999933,63.054993000000024],[-67.727492999999924,63.051659000000029],[-67.77305599999994,63.025826000000052],[-67.772507000000019,62.962212000000136],[-67.769729999999981,62.958327999999938],[-67.763625999999988,62.955551000000071],[-67.748046999999985,62.953049000000135],[-67.738602000000014,62.953323000000069],[-67.728058000000033,62.954993999999942],[-67.721831999999949,62.96265800000009],[-67.718841999999995,62.964493000000061],[-67.718169999999986,62.967327000000068],[-67.719329999999957,62.970490000000098],[-67.72444200000001,62.984161000000086],[-67.729995999999971,62.98832700000014],[-67.736938000000009,62.995544000000109],[-67.733886999999982,63.000832000000116],[-67.698043999999925,63.020828000000051],[-67.686934999999949,63.026657000000114],[-67.659438999999963,63.034164000000033],[-67.56527699999998,63.049438000000123],[-67.553054999999915,63.048607000000118],[-67.529998999999975,63.03694200000001],[-67.510559000000001,63.024712000000079],[-67.499999999999943,63.015549000000078],[-67.499724999999955,63.007773999999984],[-67.509170999999924,63.001938000000109],[-67.531386999999995,62.995269999999948],[-67.550551999999982,62.99193600000001],[-67.573333999999988,62.990273000000059],[-67.593613000000005,62.987495000000081],[-67.630828999999949,62.976379000000122],[-67.651397999999915,62.967490999999939],[-67.670997999999997,62.944323999999995],[-67.671829000000002,62.941322000000127],[-67.672667999999987,62.937996000000055],[-67.672775000000001,62.923324999999977],[-67.665833000000021,62.918884000000048],[-67.659164000000033,62.916664000000026],[-67.654921999999999,62.917282],[-67.648894999999925,62.921104000000071],[-67.646666999999979,62.925270000000125],[-67.638335999999981,62.931938000000116],[-67.572509999999909,62.963882000000126],[-67.566956000000005,62.965546000000131],[-67.470275999999956,62.985268000000019],[-67.462783999999999,62.985268000000019],[-67.39805599999994,62.967209000000082],[-67.194716999999912,62.870270000000062],[-67.048339999999996,62.771378000000141],[-67.012221999999952,62.73443600000013],[-66.95777899999996,62.681106999999997],[-66.913329999999917,62.669991000000039],[-66.824722000000008,62.679161000000079],[-66.813323999999852,62.679992999999968],[-66.741104000000007,62.673882000000106],[-66.733063000000016,62.671661000000029],[-66.726944000000003,62.668602000000021],[-66.728881999999942,62.666100000000142],[-66.735275000000001,62.662490999999932],[-66.744445999999925,62.660271000000137],[-66.752791999999999,62.656936999999971],[-66.760559000000001,62.653602999999976],[-66.768065999999919,62.648879999999963],[-66.773055999999883,62.643050999999957],[-66.775009000000011,62.636940000000095],[-66.773055999999883,62.632492000000127],[-66.606948999999986,62.604996000000085],[-66.425002999999947,62.445267000000115],[-66.359436000000017,62.447487000000137],[-66.351668999999958,62.444992000000127],[-66.349166999999966,62.441376000000048],[-66.327498999999932,62.384438000000046],[-66.330565999999976,62.379158000000018],[-66.337783999999886,62.374992000000077],[-66.426391999999964,62.349433999999974],[-66.435546999999929,62.349158999999986],[-66.458617999999944,62.35193600000008],[-66.469161999999983,62.35193600000008],[-66.475829999999974,62.348602000000085],[-66.478881999999999,62.343323000000112],[-66.478881999999999,62.338325999999995],[-66.476943999999946,62.335823000000005],[-66.470000999999968,62.332214000000022],[-66.374709999999993,62.286110000000065],[-66.329177999999956,62.267494000000056],[-66.318619000000012,62.264717000000132],[-66.355834999999956,62.307770000000062],[-66.359160999999972,62.312492000000134],[-66.363892000000021,62.323051000000021],[-66.361389000000031,62.326942000000088],[-66.355559999999855,62.331940000000088],[-66.351944000000003,62.334991000000116],[-66.332779000000016,62.341934000000094],[-66.3125,62.344993999999986],[-66.294158999999979,62.344711000000018],[-66.285552999999993,62.343605000000139],[-66.208343999999897,62.332214000000022],[-66.165282999999931,62.291381999999999],[-66.160277999999892,62.271378000000084],[-66.167220999999984,62.254439999999988],[-66.201950000000011,62.260551000000078],[-66.256667999999991,62.266105999999979],[-66.261397999999872,62.263054000000068],[-66.257232999999871,62.259720000000073],[-66.241104000000007,62.253326000000015],[-66.212508999999898,62.245270000000119],[-66.166397000000018,62.235267999999962],[-66.081680000000006,62.226379000000065],[-66.058608999999876,62.2241590000001],[-66.051940999999999,62.224709000000132],[-66.045836999999949,62.227485999999999],[-66.043610000000001,62.233604000000128],[-66.038895000000025,62.239432999999963],[-66.033889999999985,62.244995000000131],[-66.028610000000015,62.248604000000114],[-66.025008999999955,62.249718000000087],[-66.015014999999948,62.251389000000131],[-66,62.247771999999998],[-65.993057000000022,62.244155999999975],[-65.939437999999996,62.208602999999925],[-65.933059999999955,62.204163000000108],[-65.929168999999888,62.198044000000095],[-65.930556999999965,62.193321000000083],[-65.934432999999956,62.191657999999961],[-65.952788999999939,62.189156000000082],[-65.963332999999977,62.186935000000005],[-65.969161999999926,62.184714999999983],[-66.043610000000001,62.151657],[-66.050827000000027,62.147774000000084],[-66.132492000000013,62.089432000000045],[-66.110001000000011,62.017494000000113],[-66.041945999999996,61.958046000000081],[-66.035827999999924,61.952773999999977],[-66.033066000000019,61.95249200000012],[-66.019454999999994,61.954993999999999],[-66.003066999999987,61.962212000000022],[-65.999434999999949,61.963051000000121],[-65.992217999999866,61.962769000000094],[-65.988602000000014,61.958885000000066],[-65.949432000000002,61.912491000000102],[-65.946655000000021,61.906936999999914],[-65.946655000000021,61.899162000000047],[-65.948882999999967,61.89527099999998],[-65.955001999999979,61.890274000000034],[-65.961945000000014,61.886383000000137],[-65.97084000000001,61.883881000000088],[-66.057770000000005,61.869713000000047],[-66.066101000000003,61.868599000000074],[-66.275832999999977,61.858330000000024],[-66.287780999999995,61.858330000000024],[-66.395003999999858,61.87082700000002],[-66.404449,61.872765000000129],[-66.521666999999923,61.896942000000024],[-66.543334999999956,61.898880000000133],[-66.555557000000022,61.901382000000012],[-66.626099000000011,61.917213000000004],[-66.632767000000001,61.918884000000048],[-66.659163999999976,61.933601000000067],[-66.665282999999931,61.941375999999991],[-66.662216000000001,61.946655000000135],[-66.746947999999918,62.00777400000004],[-66.755568999999923,62.011108000000036],[-66.781386999999881,62.015549000000135],[-66.803329000000019,62.016937000000041],[-66.812774999999988,62.016663000000108],[-66.825835999999924,62.011940000000095],[-67.091949,62.030822999999998],[-67.104720999999984,62.032211000000132],[-67.254729999999938,62.078049000000078],[-67.345275999999899,62.119437999999946],[-67.463057999999933,62.139435000000049],[-67.499999999999943,62.138657000000137],[-67.731658999999922,62.158356000000026],[-67.757232999999928,62.160544999999956],[-67.798339999999939,62.166100000000085],[-68.003066999999987,62.213882000000126],[-68.113892000000021,62.216103000000032],[-68.233062999999902,62.219711000000132],[-68.256957999999997,62.220825000000104],[-68.269164999999873,62.223045000000127],[-68.299438000000009,62.232208000000128],[-68.325286999999946,62.234993000000145],[-68.401671999999962,62.239432999999963],[-68.46945199999999,62.242767000000129],[-68.519729999999925,62.244713000000047],[-68.548049999999932,62.248604000000114],[-68.564712999999927,62.251938000000109],[-68.615828999999962,62.263885000000073],[-68.722228999999913,62.302216000000044],[-68.725554999999872,62.30471],[-68.726943999999946,62.307770000000062],[-68.759170999999924,62.328049000000021],[-68.882216999999969,62.360550000000103],[-68.922501000000011,62.365547000000049],[-68.995833999999945,62.373322000000087],[-69.039000999999985,62.381355000000042],[-69.121384000000035,62.410820000000115],[-69.160003999999958,62.425270000000069],[-69.193054000000018,62.438042000000053],[-69.231673999999884,62.455269000000101],[-69.270554000000004,62.478325000000098],[-69.36082499999992,62.536385000000053],[-69.40834000000001,62.569992000000013],[-69.430556999999965,62.584160000000054],[-69.426666000000012,62.55443600000001],[-69.428329000000019,62.548332000000016],[-69.442215000000033,62.547493000000031],[-69.449721999999952,62.551102000000014],[-69.519164999999987,62.602493000000095],[-69.583892999999989,62.651932000000102],[-69.597228999999913,62.662490999999932],[-69.597504000000015,62.665268000000026],[-69.565551999999968,62.718048000000067],[-69.557219999999973,62.726379000000009],[-69.543335000000013,62.732765000000086],[-69.525557999999933,62.738044999999943],[-69.50389100000001,62.741378999999938],[-69.482497999999964,62.763611000000026],[-69.727492999999981,62.779991000000109],[-69.906386999999881,62.768599999999992],[-70.121932999999956,62.748878000000104],[-70.217498999999862,62.747772000000111],[-70.229171999999949,62.748878000000104],[-70.240279999999984,62.751389000000074],[-70.354995999999915,62.788329999999974],[-70.360000999999954,62.790276000000063],[-70.367767000000015,62.793883999999991],[-70.477782999999988,62.848328000000038],[-70.499434999999949,62.864441000000056],[-70.508056999999951,62.865828999999962],[-70.665558000000033,62.880547000000092],[-70.830291999999929,62.896660000000111],[-70.853332999999964,62.899994000000106],[-70.885558999999944,62.907211000000018],[-70.896118000000001,62.91443600000008],[-70.893065999999976,62.917770000000075],[-70.885833999999988,62.920546999999999],[-70.871384000000035,62.924713000000054],[-70.863616999999977,62.925552000000039],[-70.848343,62.924713000000054],[-70.847777999999892,62.947212000000036],[-70.974837999999977,62.989437000000009],[-70.977341000000024,62.983768000000055],[-71.013061999999991,62.989990000000091],[-71.060271999999941,62.981102000000078],[-71.071670999999981,62.979431000000034],[-71.120833999999945,62.979431000000034],[-71.135833999999932,62.980820000000051],[-71.152221999999995,62.985268000000019],[-71.156661999999983,62.989159000000086],[-71.156661999999983,62.999434999999949],[-71.136672999999973,63.028602999999976],[-71.118103000000019,63.032219000000055],[-71.091384999999946,63.029991000000052],[-71.020888999999954,63.044270000000097],[-71.013724999999965,63.043602000000021],[-71.007384999999942,63.043437999999981],[-71.003219999999942,63.044768999999974],[-70.863892000000021,63.112213000000054],[-70.856383999999991,63.139434999999992],[-70.908889999999985,63.17083000000008],[-70.920546999999942,63.168883999999991],[-70.952498999999989,63.162766000000033],[-70.971389999999928,63.158882000000006],[-70.976943999999946,63.15665400000006],[-70.990279999999984,63.148048000000131],[-70.997498000000007,63.141662999999937],[-71.001953000000015,63.128044000000045],[-71.002791999999999,63.123322000000144],[-71.00140399999998,63.118881000000044],[-70.993332000000009,63.112770000000125],[-70.990829000000019,63.108330000000137],[-70.989989999999977,63.102492999999981],[-70.993606999999997,63.098045000000013],[-71.029723999999987,63.071937999999989],[-71.041672000000005,63.069442999999922],[-71.127212999999983,63.071663000000115],[-71.138610999999912,63.073326000000066],[-71.195266999999944,63.031661999999983],[-71.195830999999998,63.026657000000114],[-71.198607999999979,63.019989000000123],[-71.208618000000001,63.01166500000005],[-71.232773000000009,63.001938000000109],[-71.243880999999988,63.00110600000005],[-71.255844000000025,63.001938000000109],[-71.262512000000015,63.004166000000112],[-71.40055799999999,63.051659000000029],[-71.408339999999953,63.055267000000129],[-71.413895000000025,63.060546999999985],[-71.421386999999982,63.071663000000115],[-71.454726999999934,63.10193600000008],[-71.465012000000002,63.103325000000098],[-71.605834999999956,63.134995000000004],[-71.624999999999943,63.140831000000048],[-71.70666499999993,63.174995000000081],[-71.713897999999972,63.179161000000136],[-71.770003999999915,63.25638600000002],[-71.794998000000021,63.326660000000004],[-71.795546999999942,63.384720000000073],[-71.805831999999953,63.382767000000001],[-72.009170999999981,63.391106000000036],[-72.063048999999921,63.396385000000009],[-72.076400999999976,63.398048000000074],[-72.083069000000023,63.400542999999971],[-72.141678000000013,63.436104000000114],[-72.146118000000001,63.439987000000031],[-72.145554000000004,63.44609800000012],[-72.126662999999951,63.450271999999984],[-72.023055999999997,63.448043999999982],[-71.933318999999926,63.443321000000026],[-71.825835999999981,63.435265000000129],[-71.785278000000005,63.431938000000002],[-71.748046999999985,63.428047000000106],[-71.711120999999935,63.422768000000133],[-71.683059999999955,63.419716000000051],[-71.634734999999921,63.419716000000051],[-71.61500499999994,63.422493000000145],[-71.59944200000001,63.42582700000014],[-71.411666999999909,63.485824999999977],[-71.316955999999948,63.530823000000055],[-71.227492999999924,63.598877000000016],[-71.229720999999984,63.604713000000061],[-71.234726000000023,63.608047000000056],[-71.245620999999971,63.610939000000087],[-71.261123999999995,63.612495000000024],[-71.295273000000009,63.612495000000024],[-71.306945999999982,63.611381999999935],[-71.323623999999938,63.605270000000132],[-71.328063999999983,63.602218999999934],[-71.331680000000006,63.598328000000038],[-71.333069000000023,63.583603000000096],[-71.332503999999972,63.581664999999987],[-71.328063999999983,63.576942000000031],[-71.325561999999991,63.571938000000046],[-71.326110999999912,63.570549000000028],[-71.331680000000006,63.565543999999989],[-71.335280999999895,63.564437999999996],[-71.379990000000021,63.565543999999989],[-71.407501000000025,63.567771999999934],[-71.414168999999958,63.570549000000028],[-71.416397000000018,63.572769000000051],[-71.378052000000025,63.595268000000033],[-71.367492999999968,63.601935999999966],[-71.363616999999977,63.607216000000051],[-71.362503000000004,63.61332700000014],[-71.377486999999974,63.632767000000115],[-71.396666999999923,63.635826000000066],[-71.407776000000013,63.635551000000078],[-71.411391999999978,63.634437999999989],[-71.418059999999969,63.629990000000021],[-71.452498999999989,63.604439000000127],[-71.441101000000003,63.590827999999988],[-71.439437999999996,63.588042999999971],[-71.446944999999914,63.580826000000002],[-71.455841000000021,63.57888000000014],[-71.470275999999956,63.578049000000135],[-71.561661000000015,63.580275999999969],[-71.576950000000011,63.581664999999987],[-71.580565999999976,63.583878000000141],[-71.581389999999942,63.59304800000001],[-71.583618000000001,63.649719000000118],[-71.569457999999997,63.675552000000039],[-71.562209999999993,63.685546999999985],[-71.581116000000009,63.714995999999985],[-71.585007000000019,63.71665999999999],[-71.615828999999906,63.722213999999951],[-71.629165999999941,63.723877000000073],[-71.638061999999877,63.721099999999979],[-71.660004000000015,63.706940000000088],[-71.664718999999877,63.703049000000021],[-71.667220999999927,63.697212000000036],[-71.700561999999991,63.696381000000031],[-71.823897999999872,63.78054800000001],[-71.830001999999979,63.784439000000077],[-71.891113000000018,63.80832700000002],[-71.904449,63.809989999999971],[-71.915558000000033,63.810271999999998],[-71.938599000000011,63.808044000000052],[-71.958344000000011,63.802490000000034],[-71.970550999999944,63.795830000000024],[-71.985549999999932,63.781937000000028],[-72.000564999999995,63.761383000000023],[-72.004181000000017,63.752776999999924],[-71.999725000000012,63.748328999999956],[-71.991104000000007,63.74610100000001],[-71.972778000000005,63.748047000000099],[-71.966949,63.75110600000005],[-71.954726999999934,63.76527400000009],[-71.946654999999964,63.770271000000037],[-71.939162999999951,63.772491000000059],[-71.934433000000013,63.772766000000047],[-71.853881999999999,63.761383000000023],[-71.848617999999988,63.759438000000046],[-71.843886999999995,63.755554000000018],[-71.879439999999988,63.681937999999946],[-71.882766999999944,63.678047000000049],[-71.920273000000009,63.655548000000124],[-71.933884000000035,63.649437000000034],[-71.963622999999984,63.649162000000047],[-72.051940999999943,63.67860399999995],[-72.154175000000009,63.735550000000103],[-72.169448999999986,63.748604],[-72.21305799999999,63.683876000000112],[-72.212783999999942,63.680550000000039],[-72.213897999999915,63.677772999999945],[-72.218886999999995,63.673882000000049],[-72.223891999999864,63.672218000000044],[-72.234160999999972,63.670273000000066],[-72.245269999999948,63.669715999999994],[-72.28694200000001,63.671660999999972],[-72.317504999999983,63.674164000000133],[-72.324172999999973,63.676658999999972],[-72.327498999999989,63.67971799999998],[-72.363891999999964,63.749435000000005],[-72.363616999999977,63.754440000000045],[-72.357772999999952,63.761383000000023],[-72.352782999999988,63.76527400000009],[-72.342498999999975,63.771378000000141],[-72.324722000000008,63.776939000000027],[-72.317779999999914,63.777771000000087],[-72.302779999999927,63.776657000000114],[-72.291381999999942,63.773605000000032],[-72.270003999999915,63.787216000000001],[-72.215012000000002,63.867767000000072],[-72.209732000000031,63.893051000000071],[-72.223052999999993,63.92943600000001],[-72.232772999999895,63.948325999999952],[-72.238892000000021,63.952492000000063],[-72.246384000000035,63.950272000000041],[-72.250564999999938,63.947769000000051],[-72.36471599999993,63.845543000000134],[-72.383056999999951,63.815543999999932],[-72.376388999999961,63.812209999999936],[-72.371658000000025,63.809158000000025],[-72.366942999999992,63.804710000000057],[-72.365554999999915,63.800270000000069],[-72.363051999999925,63.791107000000068],[-72.368056999999965,63.782494000000099],[-72.372771999999998,63.778603000000032],[-72.436110999999926,63.781661999999983],[-72.515838999999971,63.786384999999996],[-72.526397999999915,63.787773000000072],[-72.531386999999995,63.791107000000068],[-72.532227000000034,63.796661000000029],[-72.531386999999995,63.799438000000123],[-72.519729999999925,63.804710000000057],[-72.496658000000025,63.803604000000064],[-72.474166999999909,63.804710000000057],[-72.463897999999972,63.806655999999975],[-72.459731999999974,63.809158000000025],[-72.456116000000009,63.814438000000109],[-72.456954999999994,63.815826000000015],[-72.465011999999945,63.819160000000011],[-72.521117999999944,63.84027100000003],[-72.537216000000001,63.844154000000003],[-72.585555999999997,63.852776000000006],[-72.634734999999978,63.852493000000038],[-72.637512000000015,63.873604000000057],[-72.641112999999962,63.904434000000094],[-72.611663999999962,63.943046999999979],[-72.592772999999852,64.018051000000128],[-72.592772999999852,64.022217000000069],[-72.658339999999896,64.076660000000004],[-72.664718999999934,64.080551000000071],[-72.67471299999994,64.083327999999995],[-72.682495000000017,64.079711999999972],[-72.685546999999929,64.076385000000016],[-72.688048999999978,64.070540999999992],[-72.704726999999991,64.015549000000078],[-72.705841000000021,64.009155000000021],[-72.702498999999932,64.005553999999961],[-72.696945000000028,64.003052000000082],[-72.668335000000013,63.996101000000124],[-72.660004000000015,63.992493000000024],[-72.658614999999998,63.987770000000069],[-72.666396999999961,63.980545000000006],[-72.678878999999938,63.972488000000055],[-72.692490000000021,63.966660000000104],[-72.699722000000008,63.964439000000027],[-72.720000999999968,63.961105000000032],[-72.753341999999918,64.000274999999988],[-72.758346999999958,64.004166000000055],[-72.779449,64.010544000000039],[-72.836120999999991,64.019714000000079],[-72.931380999999988,64.052475000000015],[-72.94027699999998,64.058594000000028],[-72.941375999999991,64.063599000000067],[-72.93971299999987,64.067764000000068],[-72.933318999999983,64.076385000000016],[-72.925551999999868,64.084152000000131],[-72.919723999999917,64.086929000000055],[-72.911117999999931,64.08859300000006],[-72.888061999999991,64.086105000000089],[-72.878326000000015,64.086655000000121],[-72.874435000000005,64.08859300000006],[-72.870833999999945,64.093872000000033],[-72.868880999999931,64.099152000000117],[-72.868332000000009,64.108321999999987],[-72.897232000000031,64.156937000000028],[-72.905272999999909,64.164993000000095],[-72.911666999999966,64.168868999999972],[-73.223891999999921,64.31164600000011],[-73.271117999999888,64.283875000000023],[-73.267226999999991,64.273880000000133],[-73.270003999999972,64.265823000000125],[-73.273055999999997,64.26249700000011],[-73.279174999999952,64.258606000000043],[-73.339721999999938,64.258040999999992],[-73.365829000000019,64.261932000000058],[-73.380554000000018,64.268600000000049],[-73.384170999999981,64.272491000000116],[-73.386947999999904,64.277480999999966],[-73.417769999999905,64.371093999999914],[-73.415558000000033,64.445816000000036],[-73.326950000000011,64.476089000000002],[-73.167770000000019,64.576660000000118],[-73.164718999999934,64.579712000000029],[-73.164718999999934,64.60554499999995],[-73.165557999999976,64.607483000000116],[-73.169448999999872,64.609984999999995],[-73.296950999999922,64.656937000000084],[-73.302779999999927,64.658875000000023],[-73.309433000000013,64.658600000000035],[-73.342223999999931,64.644150000000081],[-73.346664000000033,64.641098],[-73.347504000000015,64.63499500000006],[-73.341110000000015,64.626083000000051],[-73.326110999999969,64.609984999999995],[-73.314437999999939,64.598038000000031],[-73.308043999999995,64.593322999999998],[-73.302215999999987,64.583878000000084],[-73.298614999999927,64.559418000000107],[-73.299163999999962,64.544982999999945],[-73.303328999999962,64.538315000000011],[-73.30749499999996,64.535812000000021],[-73.315276999999924,64.532211000000132],[-73.32417299999986,64.52998400000007],[-73.424164000000019,64.509995000000004],[-73.463333000000034,64.502486999999974],[-73.47222899999997,64.504440000000102],[-73.475829999999917,64.508040999999935],[-73.477218999999991,64.512207000000046],[-73.473052999999993,64.553589000000045],[-73.448714999999936,64.565422000000012],[-73.467223999999987,64.612762000000089],[-73.595000999999968,64.629699999999957],[-73.655563000000029,64.631653000000085],[-73.655563000000029,64.623596000000134],[-73.667496000000028,64.577209000000039],[-73.750289999999893,64.536377000000073],[-73.75389100000001,64.535263000000043],[-73.764450000000011,64.537491000000045],[-73.787780999999939,64.548035000000084],[-73.803054999999915,64.555251999999996],[-73.821121000000005,64.567490000000078],[-73.837783999999999,64.579712000000029],[-73.84944200000001,64.587493999999992],[-73.861388999999974,64.594436999999971],[-73.876662999999951,64.600815000000125],[-73.886947999999961,64.603592000000049],[-73.910277999999948,64.605819999999994],[-73.920272999999952,64.605255000000113],[-73.929442999999992,64.602203000000031],[-73.932495000000017,64.593597000000102],[-73.931106999999997,64.583878000000084],[-73.844726999999978,64.501937999999996],[-73.925551999999925,64.460265999999933],[-73.972777999999892,64.430267000000129],[-73.999434999999892,64.328048999999965],[-74.062774999999988,64.334427000000119],[-74.102218999999877,64.367476999999951],[-74.128051999999911,64.533051],[-74.127486999999974,64.534424000000115],[-74.105835000000013,64.535812000000021],[-74.082229999999925,64.534988000000055],[-74.065276999999924,64.533051],[-74.055557000000022,64.610535000000027],[-74.050551999999982,64.724991000000045],[-74.053878999999938,64.728592000000106],[-74.060546999999985,64.733322000000101],[-74.089721999999995,64.751099000000011],[-74.096114999999941,64.751389000000017],[-74.114440999999943,64.745819000000097],[-74.120543999999995,64.74192800000003],[-74.195266999999888,64.663040000000024],[-74.208892999999932,64.614151000000049],[-74.212783999999999,64.602768000000083],[-74.224715999999944,64.592484000000013],[-74.240279999999984,64.58027600000014],[-74.381942999999922,64.569992000000127],[-74.390288999999996,64.569716999999912],[-74.397507000000019,64.572220000000073],[-74.535278000000005,64.622208000000057],[-74.657500999999968,64.700272000000098],[-74.701675000000023,64.732483000000002],[-74.704177999999899,64.735535000000084],[-74.700835999999867,64.740265000000136],[-74.683318999999926,64.758331000000112],[-74.567504999999983,64.832764000000054],[-74.501113999999973,64.833603000000039],[-74.487777999999935,64.834152000000017],[-74.478881999999999,64.835815000000082],[-74.476395000000025,64.838882000000012],[-74.476943999999946,64.84165999999999],[-74.540557999999976,64.889160000000004],[-74.545836999999949,64.892212000000086],[-74.561110999999926,64.896102999999982],[-74.621932999999956,64.903869999999927],[-74.639998999999932,64.903595000000109],[-74.648620999999935,64.901382000000126],[-74.660277999999892,64.896378000000027],[-74.732773000000009,64.854705999999965],[-74.741378999999938,64.847488000000112],[-74.743057000000022,64.842209000000139],[-74.741942999999992,64.835815000000082],[-74.738892000000021,64.831375000000094],[-74.72222899999997,64.822220000000016],[-74.714721999999938,64.815535999999952],[-74.710007000000019,64.810532000000023],[-74.706664999999987,64.800537000000077],[-74.706664999999987,64.794983000000116],[-74.710830999999985,64.782761000000107],[-74.718886999999938,64.773604999999975],[-74.726394999999968,64.770828000000108],[-74.837219000000005,64.778595000000053],[-74.868332000000009,64.781936999999971],[-74.893341000000021,64.784714000000065],[-74.902221999999938,64.78804000000008],[-74.909164000000033,64.791367000000037],[-74.915833000000021,64.795822000000044],[-74.924438000000009,64.799149],[-74.944153000000028,64.803589000000045],[-74.955001999999979,64.804428000000144],[-74.975554999999872,64.801376000000062],[-74.985274999999945,64.795822000000044],[-74.985549999999876,64.790268000000083],[-74.982498000000021,64.785263000000043],[-74.978881999999999,64.781372000000147],[-74.963332999999977,64.773604999999975],[-74.834732000000031,64.716385000000116],[-74.733321999999987,64.685531999999967],[-74.694442999999978,64.676376000000005],[-74.675551999999982,64.670258000000047],[-74.660003999999958,64.663879000000009],[-74.613051999999925,64.640274000000034],[-74.545273000000009,64.602203000000031],[-74.512787000000003,64.583603000000096],[-74.475280999999939,64.561371000000008],[-74.470000999999968,64.557479999999941],[-74.47084000000001,64.555542000000003],[-74.513625999999874,64.533325000000104],[-74.520279000000016,64.532211000000132],[-74.585830999999985,64.480270000000075],[-74.685546999999985,64.391936999999984],[-74.685821999999973,64.371093999999914],[-74.797774999999945,64.380813999999987],[-74.974716000000001,64.416091999999992],[-74.985274999999945,64.418869000000086],[-75.010558999999944,64.429977000000122],[-75.056380999999988,64.452208999999982],[-75.142501999999979,64.483321999999987],[-75.174712999999997,64.492752000000053],[-75.182769999999948,64.492477000000065],[-75.188598999999954,64.489426000000037],[-75.188888999999904,64.483321999999987],[-75.187209999999993,64.473602000000085],[-75.182495000000017,64.468323000000112],[-75.177215999999987,64.464705999999978],[-75.151397999999915,64.460265999999933],[-75.146117999999944,64.457214000000022],[-75.14416499999993,64.453049000000021],[-75.15055799999999,64.447204999999997],[-75.154448999999943,64.444702000000063],[-75.199721999999952,64.428040000000067],[-75.207779000000016,64.427765000000022],[-75.21556099999998,64.428864000000033],[-75.224166999999909,64.432205000000067],[-75.295272999999952,64.46665999999999],[-75.323897999999986,64.481934000000081],[-75.332503999999972,64.490814000000114],[-75.344161999999926,64.49914600000011],[-75.34973100000002,64.50221300000004],[-75.381667999999991,64.513611000000026],[-75.409164000000033,64.522766000000104],[-75.479720999999927,64.53915399999994],[-75.490829000000019,64.539703000000088],[-75.566100999999946,64.549988000000042],[-75.666396999999961,64.563873000000115],[-75.693329000000006,64.569992000000127],[-75.703887999999949,64.572769000000051],[-75.721389999999985,64.579163000000051],[-75.736938000000009,64.586104999999975],[-75.74722300000002,64.594436999999971],[-75.763625999999988,64.604980000000126],[-75.773894999999925,64.608322000000044],[-75.796951000000035,64.612198000000149],[-75.824172999999973,64.611649],[-75.843063000000029,64.607758000000103],[-75.847228999999913,64.604430999999977],[-75.837219000000005,64.561371000000008],[-75.823623999999938,64.535812000000021],[-75.818893000000003,64.530823000000055],[-75.807495000000017,64.525269000000037],[-75.729172000000005,64.503051999999968],[-75.644729999999925,64.468872000000033],[-75.639449999999954,64.46527100000003],[-75.630554000000018,64.457214000000022],[-75.631667999999991,64.453598],[-75.636123999999938,64.449142000000052],[-75.641388000000006,64.448028999999963],[-75.696655000000021,64.43942300000009],[-75.708343999999954,64.437759000000028],[-75.727782999999931,64.442474000000061],[-75.746947999999975,64.453049000000021],[-75.765839000000028,64.46527100000003],[-75.77305599999994,64.467484000000127],[-75.874709999999993,64.486923000000047],[-75.895279000000016,64.48803700000002],[-75.908339999999953,64.487198000000035],[-75.920273000000009,64.484420999999998],[-75.922500999999954,64.481094000000041],[-75.910552999999993,64.478317000000118],[-75.875274999999988,64.47387700000013],[-75.857772999999952,64.468048000000067],[-75.720839999999953,64.383331000000055],[-75.717223999999987,64.379700000000014],[-75.718886999999995,64.374419999999986],[-75.723327999999924,64.369705000000124],[-75.726944000000003,64.367203000000018],[-75.83805799999999,64.369141000000013],[-75.861664000000019,64.371093999999914],[-75.950561999999934,64.399155000000007],[-76.043883999999991,64.368317000000047],[-76.253615999999965,64.35775799999999],[-76.264450000000011,64.319153000000028],[-76.214721999999995,64.314986999999974],[-76.205565999999976,64.313309000000004],[-76.196655000000021,64.310806000000071],[-76.188323999999852,64.306931000000077],[-76.189712999999927,64.301376000000005],[-76.197219999999959,64.29693600000013],[-76.205840999999964,64.294708000000014],[-76.300551999999982,64.278869999999984],[-76.484725999999966,64.266662999999994],[-76.493606999999997,64.268600000000049],[-76.503066999999987,64.275269000000094],[-76.506957999999941,64.284424000000001],[-76.505568999999923,64.289153999999996],[-76.503615999999909,64.291091999999935],[-76.502501999999936,64.295258000000047],[-76.506667999999934,64.297485000000108],[-76.541381999999999,64.304703000000075],[-76.591949,64.31053199999991],[-76.705840999999964,64.300812000000008],[-76.719451999999933,64.296646000000123],[-76.733886999999868,64.290543000000014],[-76.736664000000019,64.285812000000078],[-76.738892000000021,64.276382000000012],[-76.721663999999976,64.238312000000064],[-76.714721999999995,64.233870999999965],[-76.706115999999952,64.231369000000086],[-76.684722999999963,64.227768000000026],[-76.674438000000009,64.224990999999932],[-76.667220999999927,64.221924000000058],[-76.660278000000005,64.218322999999998],[-76.654723999999931,64.209152000000017],[-76.654723999999931,64.196640000000059],[-76.65834000000001,64.189972000000068],[-76.662215999999944,64.186646000000053],[-76.670546999999942,64.184143000000063],[-76.84722899999997,64.23054500000012],[-76.968337999999903,64.259720000000016],[-77.138335999999981,64.289429000000041],[-77.276108000000022,64.256378000000097],[-77.296111999999937,64.251938000000052],[-77.327498999999989,64.246367999999961],[-77.351944000000003,64.243866000000082],[-77.366104000000007,64.243866000000082],[-77.379990000000021,64.2452550000001],[-77.381377999999984,64.246643000000006],[-77.382216999999969,64.2494200000001],[-77.381377999999984,64.253601000000003],[-77.378875999999934,64.256943000000092],[-77.434158000000025,64.320267000000001],[-77.588332999999977,64.368317000000047],[-77.652221999999938,64.388046000000088],[-77.660278000000005,64.386383000000023],[-77.664444000000003,64.3836060000001],[-77.665832999999907,64.376923000000147],[-77.664718999999991,64.374146000000053],[-77.658889999999985,64.364990000000091],[-77.67971799999998,64.321105999999986],[-77.747222999999963,64.337769000000037],[-77.831389999999942,64.412490999999989],[-77.970276000000013,64.454436999999928],[-78.178054999999972,64.567490000000078],[-78.183318999999926,64.572495000000117],[-78.168578999999966,64.626197999999931],[-78.160552999999993,64.690536000000066],[-78.184433000000013,64.731093999999985],[-78.073623999999938,64.813599000000124],[-78.064437999999996,64.849426000000051],[-78.065276999999867,64.853591999999992],[-78.06639100000001,64.855820000000108],[-78.073623999999938,64.859420999999998],[-78.102492999999981,64.868866000000025],[-78.117217999999923,64.876082999999994],[-78.120834000000002,64.881088000000034],[-78.129715000000033,64.893875000000037],[-78.146118000000001,64.938309000000004],[-78.148055999999997,64.943862999999965],[-78.149733999999967,64.952209000000039],[-78.145279000000016,64.957489000000123],[-77.973052999999993,65.04136699999998],[-77.67971799999998,65.123306000000014],[-77.543610000000001,65.139709000000096],[-77.50306699999993,65.138596000000007],[-77.488326999999913,65.139434999999935],[-77.479720999999984,65.141098000000056],[-77.344726999999978,65.173309000000131],[-77.328612999999962,65.178864000000033],[-77.322783999999956,65.18331900000004],[-77.315825999999959,65.190536000000009],[-77.313048999999978,65.195816000000036],[-77.315552000000025,65.199417000000096],[-77.3824919999999,65.247482000000105],[-77.397232000000031,65.254990000000134],[-77.422774999999945,65.264435000000049],[-77.444716999999912,65.275543000000027],[-77.498046999999985,65.306641000000013],[-77.513061999999934,65.318877999999984],[-77.515015000000005,65.325820999999962],[-77.512222000000008,65.330551000000014],[-77.471114999999998,65.371368000000018],[-77.466949,65.375259000000085],[-77.461120999999878,65.379149999999981],[-77.452498999999875,65.380813999999987],[-77.438048999999921,65.379700000000014],[-77.41361999999998,65.371643000000063],[-77.402495999999985,65.369141000000127],[-77.345839999999896,65.358597000000088],[-77.337783999999999,65.357483000000116],[-77.323058999999944,65.357757999999933],[-77.30610699999994,65.359711000000061],[-77.295546999999999,65.361922999999933],[-77.291945999999939,65.363876000000062],[-77.287505999999951,65.367751999999996],[-77.287216000000001,65.375259000000085],[-77.289992999999924,65.378860000000145],[-77.295273000000009,65.383331000000055],[-77.319457999999997,65.393326000000002],[-77.326950000000011,65.395538000000045],[-77.341949,65.401657000000057],[-77.367492999999911,65.412491000000102],[-77.398620999999935,65.426651000000049],[-77.420272999999952,65.439972000000012],[-77.428329000000019,65.447754000000145],[-77.434432999999956,65.456940000000088],[-77.430556999999908,65.458878000000027],[-77.421660999999972,65.461380000000077],[-77.385559000000001,65.468048000000067],[-77.336670000000026,65.471375000000023],[-77.265288999999882,65.471923999999944],[-77.238051999999925,65.469437000000084],[-77.154449,65.445815999999979],[-77.134734999999978,65.439423000000033],[-77.124434999999892,65.434143000000006],[-77.115828999999962,65.429703000000131],[-77.111663999999962,65.426085999999998],[-77.111114999999927,65.421371000000136],[-77.106383999999991,65.413605000000075],[-77.09944200000001,65.409149000000014],[-77.08666999999997,65.407211000000075],[-76.962783999999999,65.407211000000075],[-76.956954999999994,65.410537999999974],[-76.952498999999989,65.414993000000038],[-76.956116000000009,65.421371000000136],[-76.955565999999976,65.422759999999982],[-76.951675000000023,65.425262000000032],[-76.944442999999978,65.427765000000022],[-76.920837000000006,65.429428000000144],[-76.849990999999989,65.428313999999943],[-76.824722000000008,65.425262000000032],[-76.626937999999939,65.398880000000133],[-76.361937999999952,65.342209000000025],[-76.235001000000011,65.312759000000142],[-76.164444000000003,65.296097000000145],[-76.072509999999909,65.277205999999921],[-75.96665999999999,65.255829000000119],[-75.953888000000006,65.255264000000068],[-75.925277999999935,65.257217000000026],[-75.920273000000009,65.258330999999998],[-75.912215999999944,65.257217000000026],[-75.898345999999947,65.253875999999991],[-75.805556999999965,65.229705999999965],[-75.785552999999936,65.224426000000108],[-75.769164999999987,65.21887200000009],[-75.765014999999892,65.216660000000047],[-75.760009999999909,65.210815000000139],[-75.741378999999995,65.173874000000012],[-75.739989999999921,65.168319999999994],[-75.570847000000015,65.120818999999926],[-75.528610000000015,65.108871000000079],[-75.475006000000008,65.086105000000089],[-75.46665999999999,65.082214000000022],[-75.457229999999925,65.074707000000046],[-75.446945000000028,65.06581100000011],[-75.428054999999972,65.048324999999977],[-75.424438000000009,65.043869000000086],[-75.410552999999936,65.024704000000099],[-75.415557999999976,64.977478000000076],[-75.420273000000009,64.972214000000065],[-75.428054999999972,64.968322999999998],[-75.496947999999975,64.940536000000066],[-75.507232999999985,64.938309000000004],[-75.51916499999993,64.936919999999986],[-75.533614999999941,64.936919999999986],[-75.557220000000029,64.940262000000132],[-75.634734999999921,64.94720500000011],[-75.654448999999943,64.946365000000071],[-75.663054999999929,64.945251000000098],[-75.667496000000028,64.940811000000053],[-75.601944000000003,64.867752000000053],[-75.594161999999983,64.860259999999926],[-75.587508999999898,64.856644000000074],[-75.56806899999998,64.850540000000024],[-75.555557000000022,64.848602000000085],[-75.461394999999925,64.811645999999996],[-75.389175000000023,64.736099000000024],[-75.373046999999985,64.714996000000099],[-75.316665999999941,64.719437000000028],[-75.308333999999888,64.721099999999979],[-75.298186999999984,64.725769000000128],[-75.294723999999974,64.728043000000127],[-75.291381999999885,64.733871000000079],[-75.289444000000003,64.739975000000072],[-75.291381999999885,64.74443100000002],[-75.30221599999993,64.751099000000011],[-75.310546999999929,64.754990000000078],[-75.329726999999991,64.761107999999979],[-75.333892999999989,64.763321000000133],[-75.344161999999926,64.772217000000069],[-75.373885999999914,64.833054000000118],[-75.357223999999917,64.897766000000104],[-75.422775000000001,64.890273999999977],[-75.451675000000023,64.875259000000028],[-75.460830999999985,64.87164300000012],[-75.469727000000034,64.869431000000077],[-75.55749499999996,64.87414600000011],[-75.563323999999966,64.877197000000137],[-75.565552000000025,64.879425000000083],[-75.567504999999983,64.883605999999986],[-75.56527699999998,64.886932000000058],[-75.473891999999921,64.935806000000014],[-75.390288999999996,64.979430999999977],[-75.384734999999978,64.981934000000138],[-75.376098999999897,64.983322000000044],[-75.363051999999982,64.98414600000001],[-75.353332999999964,64.983597000000088],[-75.344161999999926,64.981094000000098],[-75.335555999999997,64.977768000000083],[-75.264175000000023,64.966095000000053],[-75.196105999999986,65.068604000000107],[-75.189163000000008,65.079712000000086],[-75.185546999999872,65.091369999999927],[-75.186934999999949,65.101653999999996],[-75.192490000000021,65.105545000000063],[-75.196655000000021,65.107207999999957],[-75.212508999999955,65.109421000000111],[-75.225554999999986,65.109421000000111],[-75.240828999999962,65.10832199999993],[-75.259170999999981,65.102203000000088],[-75.263625999999988,65.0977630000001],[-75.265563999999927,65.09165999999999],[-75.262512000000015,65.080551000000071],[-75.260009999999852,65.072769000000108],[-75.261123999999995,65.059142999999949],[-75.263061999999934,65.052199999999971],[-75.279998999999975,65.035262999999986],[-75.299727999999959,65.024704000000099],[-75.348617999999931,65.003876000000048],[-75.360001000000011,65.003876000000048],[-75.367492999999968,65.006378000000097],[-75.373046999999985,65.009430000000009],[-75.378875999999991,65.016663000000051],[-75.379165999999998,65.021378000000084],[-75.381103999999937,65.025818000000072],[-75.402495999999871,65.055817000000104],[-75.410003999999958,65.063873000000001],[-75.425551999999982,65.077208999999925],[-75.441375999999991,65.089157],[-75.448043999999982,65.094147000000021],[-75.516402999999855,65.138596000000007],[-75.728058000000033,65.224151999999947],[-75.761947999999961,65.237762000000032],[-75.781676999999945,65.243042000000116],[-75.835555999999997,65.255264000000068],[-75.864166000000012,65.258330999999998],[-75.890563999999983,65.269150000000081],[-75.939712999999983,65.292480000000012],[-75.943877999999984,65.29525799999999],[-75.950835999999981,65.316376000000105],[-75.950287000000003,65.318329000000062],[-75.941101000000003,65.321380999999974],[-75.931106999999884,65.322220000000129],[-75.904449,65.322220000000129],[-75.873885999999914,65.320541000000105],[-75.857772999999952,65.319153000000028],[-75.603057999999976,65.295531999999923],[-75.592223999999931,65.287201000000039],[-75.575561999999934,65.278046000000018],[-75.566390999999896,65.274994000000049],[-75.555267000000015,65.273605000000089],[-75.495834000000002,65.269150000000081],[-75.48443599999996,65.268326000000116],[-75.211945000000014,65.250549000000035],[-75.186661000000015,65.251938000000052],[-75.153885000000002,65.256943000000092],[-75.114440999999999,65.266387999999949],[-75.101669000000015,65.271378000000027],[-75.093886999999938,65.274994000000049],[-75.083618000000001,65.286102000000085],[-75.081679999999892,65.292206000000078],[-75.070847000000015,65.330276000000026],[-75.090835999999911,65.355545000000006],[-75.109160999999858,65.379974000000118],[-75.110824999999977,65.384720000000073],[-75.111114999999984,65.388885000000073],[-75.110549999999932,65.391098],[-75.108046999999942,65.393051000000128],[-75.097778000000005,65.394989000000066],[-75.08277899999996,65.394989000000066],[-74.823623999999938,65.377472000000068],[-74.660552999999993,65.346374999999966],[-74.645844000000011,65.341370000000097],[-74.635009999999966,65.338593000000003],[-74.624161000000015,65.336655000000064],[-74.58944699999995,65.332489000000123],[-74.546660999999915,65.33137499999998],[-74.524445000000014,65.333328000000108],[-74.508621000000005,65.336655000000064],[-74.496947999999975,65.340820000000065],[-74.357773000000009,65.398604999999975],[-74.347838999999965,65.407181000000037],[-74.323897999999986,65.437759000000028],[-74.318892999999946,65.447204999999997],[-74.31527699999998,65.458037999999988],[-74.311385999999914,65.463882000000012],[-74.182770000000005,65.525269000000037],[-74.105835000000013,65.534988000000055],[-73.845276000000013,65.532211000000132],[-73.791381999999999,65.524428999999998],[-73.767776000000026,65.520828000000108],[-73.747222999999963,65.517487000000074],[-73.736937999999952,65.514709000000096],[-73.732772999999952,65.511932000000002],[-73.731383999999935,65.506943000000035],[-73.730835000000013,65.504166000000112],[-73.735001000000011,65.501662999999951],[-73.740279999999984,65.496933000000126],[-73.740829000000019,65.490814000000114],[-73.736937999999952,65.487761999999975],[-73.711670000000026,65.471099999999979],[-73.703063999999927,65.466934000000094],[-73.694152999999915,65.464432000000045],[-73.663895000000025,65.456940000000088],[-73.651397999999972,65.454711999999915],[-73.641113000000018,65.455261000000064],[-73.559997999999894,65.462494000000049],[-73.500564999999938,65.474426000000051],[-73.56361400000003,65.562194999999974],[-73.618332000000009,65.619705000000067],[-73.662215999999944,65.658599999999979],[-73.684157999999911,65.715271000000087],[-73.68499799999995,65.730545000000006],[-73.704726999999934,65.758041000000048],[-73.709731999999917,65.762496999999996],[-73.720550999999887,65.769440000000145],[-73.810821999999973,65.811096000000134],[-73.841110000000015,65.81999200000007],[-73.884170999999981,65.821930000000009],[-73.886123999999995,65.821381000000031],[-73.923614999999984,65.824432000000058],[-73.931670999999938,65.825546000000031],[-73.942490000000021,65.828323000000125],[-74.011947999999961,65.854705999999908],[-74.029174999999952,65.861923000000047],[-74.058043999999938,65.875534000000016],[-74.129439999999988,65.924697999999978],[-74.258895999999993,66.001663000000065],[-74.296950999999979,66.018326000000116],[-74.337783999999999,66.036652000000117],[-74.37388599999997,66.053863999999976],[-74.388061999999934,66.06164600000011],[-74.425551999999925,66.084717000000126],[-74.444992000000013,66.096939000000077],[-74.455565999999862,66.105820000000051],[-74.471389999999985,66.127197000000081],[-74.472777999999948,66.133041000000048],[-74.472504000000015,66.139160000000118],[-74.470000999999968,66.145828000000051],[-74.466110000000015,66.151932000000102],[-74.446655000000021,66.168594000000098],[-74.434432999999956,66.178314],[-74.406113000000005,66.195816000000036],[-74.366652999999928,66.214157000000057],[-74.342223999999987,66.22526600000009],[-74.316390999999953,66.235259999999926],[-74.306655999999975,66.238876000000005],[-74.187209999999993,66.269713999999965],[-74.077788999999939,66.300812000000008],[-73.86082499999992,66.388321000000076],[-73.744995000000017,66.437759000000028],[-73.666107000000011,66.471924000000115],[-73.606658999999979,66.495254999999986],[-73.529998999999975,66.522766000000047],[-73.460555999999997,66.544434000000138],[-73.444153000000028,66.551086000000055],[-73.430556999999908,66.55831900000004],[-73.420272999999952,66.571655000000021],[-73.418335000000013,66.579711999999972],[-73.418335000000013,66.584717000000012],[-73.416396999999961,66.589981000000023],[-73.400283999999942,66.611649000000114],[-73.396956999999986,66.61554000000001],[-73.379714999999976,66.632477000000051],[-73.351944000000003,66.649994000000049],[-73.328339000000028,66.6602630000001],[-73.296386999999982,66.665817000000061],[-73.267226999999991,66.672760000000096],[-73.108611999999937,66.723311999999964],[-73.00111400000003,66.815536000000122],[-72.87388599999997,66.931930999999963],[-72.852492999999981,66.968597000000102],[-72.837783999999999,66.998031999999967],[-72.831389999999885,67.013321000000076],[-72.831115999999952,67.018326000000116],[-72.828063999999927,67.024994000000049],[-72.824172999999973,67.029434000000094],[-72.806655999999919,67.037201000000039],[-72.791671999999949,67.043320000000051],[-72.738891999999908,67.063034000000016],[-72.716659999999933,67.06860400000005],[-72.68499799999995,67.076096000000007],[-72.626099000000011,67.084717000000126],[-72.550827000000027,67.082763999999997],[-72.525832999999977,67.083328000000108],[-72.464172000000019,67.08998100000008],[-72.43110699999994,67.096099999999922],[-72.399445000000014,67.103592000000049],[-72.368606999999997,67.112487999999985],[-72.351394999999968,67.119705000000124],[-72.337783999999999,67.126373000000058],[-72.315552000000025,67.139435000000105],[-72.282501000000025,67.161102000000142],[-72.276108000000022,67.166930999999977],[-72.258346999999901,67.24803199999991],[-72.28694200000001,67.290817000000061],[-72.363616999999977,67.353317000000004],[-72.436385999999914,67.472214000000122],[-72.481110000000001,67.609711000000004],[-72.48582499999992,67.623031999999967],[-72.490829000000019,67.62831100000011],[-72.49749799999995,67.633040999999935],[-72.508895999999993,67.63638300000008],[-72.597778000000005,67.639709000000096],[-72.666396999999961,67.684143000000063],[-72.676391999999964,67.693862999999965],[-72.677779999999984,67.699416999999983],[-72.675002999999947,67.70526099999995],[-72.668883999999935,67.710541000000035],[-72.661666999999909,67.714706000000035],[-72.613892000000021,67.735259999999982],[-72.596953999999926,67.740814],[-72.591948999999886,67.74331699999999],[-72.583327999999881,67.750274999999988],[-72.608886999999982,67.785812000000078],[-72.612503000000004,67.790268000000026],[-72.619445999999925,67.794708000000014],[-72.735001000000011,67.841659999999933],[-72.820007000000032,67.851089000000115],[-72.833327999999995,67.849991000000045],[-72.843886999999938,67.850815000000011],[-72.848052999999936,67.853592000000106],[-72.942215000000033,67.925262000000089],[-72.944442999999978,67.928040000000067],[-72.944992000000013,67.93081699999999],[-72.94387799999987,67.937759000000085],[-72.942490000000021,67.941085999999984],[-72.929992999999968,67.948867999999948],[-72.922774999999945,67.952774000000034],[-72.904175000000009,67.959717000000012],[-72.902495999999928,67.963882000000012],[-72.896117999999944,68.014160000000004],[-72.910552999999993,68.054153000000042],[-72.913895000000025,68.060806000000014],[-72.941100999999946,68.078323000000069],[-72.956954999999994,68.094986000000119],[-72.981110000000001,68.139160000000061],[-72.992767000000015,68.198593000000074],[-72.993880999999988,68.212204000000042],[-73.161117999999988,68.228866999999923],[-73.190276999999924,68.248871000000065],[-73.189437999999996,68.254715000000033],[-73.189986999999917,68.259430000000066],[-73.194716999999969,68.26527400000009],[-73.200835999999981,68.269714000000135],[-73.215560999999923,68.272766000000047],[-73.271117999999888,68.281936999999971],[-73.303328999999962,68.278434999999945],[-73.314499000000012,68.278434999999945],[-73.336670000000026,68.275604000000044],[-73.355186000000003,68.267830000000004],[-73.395554000000004,68.258605999999929],[-73.496108999999933,68.275542999999971],[-73.410004000000015,68.310806000000127],[-73.39916999999997,68.314987000000031],[-73.354674999999929,68.329215999999974]],[[-124.43055699999996,73.878586000000098],[-124.45028699999995,73.878586000000098],[-124.46721600000001,73.8808140000001],[-124.515289,73.89498900000001],[-124.53666699999991,73.902480999999909],[-124.54611199999999,73.906647000000021],[-124.55055199999998,73.912201000000039],[-124.55277999999993,73.916931000000034],[-124.53056299999997,73.917480000000012],[-124.5133439999999,73.916656000000046],[-124.43250299999994,73.912766000000033],[-124.42027300000001,73.90914900000007],[-124.41583300000002,73.90498400000007],[-124.40888999999993,73.900269000000037],[-124.40943899999996,73.893326000000059],[-124.42027300000001,73.882476999999994],[-124.43055699999996,73.878586000000098]],[[-99.804557999999929,73.889099000000101],[-99.732773000000009,73.849991000000102],[-99.71362299999987,73.846375000000023],[-99.589721999999881,73.837769000000094],[-99.531386999999938,73.831940000000088],[-99.493880999999988,73.825821000000076],[-99.480285999999978,73.821930000000009],[-99.235000999999897,73.737761999999918],[-99.115004999999996,73.74859600000002],[-98.97193900000002,73.750548999999921],[-98.829177999999956,73.751663000000121],[-98.756393000000003,73.75610400000005],[-98.71665999999999,73.766663000000051],[-98.688323999999966,73.772018000000116],[-98.641953000000001,73.777206000000035],[-98.514449999999954,73.787490999999989],[-98.424437999999952,73.793594000000098],[-98.290832999999964,73.801651000000049],[-98.207229999999925,73.80525200000011],[-98.190552000000025,73.803588999999988],[-98.179992999999911,73.804152999999928],[-98.134170999999867,73.809708000000057],[-98.095000999999968,73.815536000000122],[-98.071670999999924,73.819443000000092],[-97.976944000000003,73.84275800000006],[-97.960281000000009,73.846938999999963],[-97.948333999999988,73.851653999999996],[-97.943053999999904,73.856934000000081],[-97.942763999999954,73.862762000000032],[-97.941375999999991,73.868042000000059],[-97.936385999999914,73.87831100000011],[-97.918335000000013,73.890273999999977],[-97.90834000000001,73.894714000000135],[-97.887512000000015,73.899428999999998],[-97.805267000000015,73.911102000000028],[-97.788054999999986,73.912766000000033],[-97.761948000000018,73.911925999999994],[-97.581954999999937,73.893875000000037],[-97.562774999999988,73.890823000000069],[-97.544723999999917,73.886108000000036],[-97.529175000000009,73.879700000000071],[-97.520844000000011,73.873871000000065],[-97.514175000000023,73.867752000000053],[-97.50028999999995,73.861923000000047],[-97.471389999999985,73.857758000000047],[-97.456954999999994,73.857758000000047],[-97.39973399999991,73.858871000000136],[-97.357772999999952,73.862488000000099],[-97.34584000000001,73.864990000000148],[-97.327498999999989,73.865814000000114],[-97.260284000000013,73.860260000000096],[-97.223617999999931,73.856369000000029],[-96.972504000000015,73.744141000000013],[-96.962218999999891,73.738586000000112],[-96.955841000000021,73.732482999999945],[-96.937209999999993,73.703598000000113],[-96.932770000000005,73.692200000000071],[-96.93472300000002,73.686920000000043],[-96.963897999999972,73.63998399999997],[-96.968613000000005,73.633330999999998],[-96.988891999999964,73.624695000000088],[-97.001953000000015,73.6202550000001],[-97.184998000000007,73.562194999999974],[-97.202498999999932,73.557205000000124],[-97.436110999999926,73.525542999999971],[-97.623885999999857,73.538879000000122],[-97.638061999999934,73.538589000000115],[-97.641112999999962,73.533599999999922],[-97.668335000000013,73.483321999999987],[-97.667496000000028,73.479431000000091],[-97.663054999999929,73.4727630000001],[-97.654723999999931,73.466934000000094],[-97.638335999999981,73.460266000000104],[-97.623321999999973,73.456375000000037],[-97.607223999999974,73.454711999999972],[-97.579453000000001,73.454987000000131],[-97.562774999999988,73.459152000000131],[-97.534163999999976,73.473877000000073],[-97.522232000000031,73.478592000000106],[-97.50389100000001,73.483046999999942],[-97.437209999999993,73.491928000000087],[-97.417220999999984,73.493317000000047],[-97.401947000000007,73.493042000000059],[-97.232223999999917,73.474426000000051],[-97.197219999999959,73.469711000000018],[-97.183059999999955,73.464995999999985],[-97.172225999999966,73.460266000000104],[-97.166106999999954,73.454162999999994],[-97.157226999999921,73.395538000000045],[-97.150283999999999,73.389984000000027],[-97.169448999999986,73.35664399999996],[-97.17193599999996,73.352768000000083],[-97.183883999999921,73.350540000000137],[-97.207503999999972,73.348328000000095],[-97.236937999999896,73.348602000000028],[-97.243057000000022,73.354706000000022],[-97.375548999999921,73.347214000000122],[-97.645003999999858,73.318054000000018],[-97.660278000000005,73.316086000000098],[-97.708617999999944,73.304703000000075],[-97.841384999999889,73.273315000000082],[-97.84445199999999,73.268326000000116],[-97.848052999999936,73.254440000000102],[-97.847778000000005,73.249420000000043],[-97.848617999999988,73.244980000000055],[-97.86250299999989,73.233871000000136],[-97.983611999999994,73.181091000000094],[-98.029175000000009,73.165268000000083],[-98.076674999999966,73.151382000000126],[-98.112503000000004,73.142487000000074],[-98.151672000000019,73.131087999999977],[-98.202788999999996,73.110535000000084],[-98.222777999999948,73.099991000000045],[-98.229996000000028,73.090820000000122],[-98.231383999999878,73.085541000000148],[-98.235001000000011,73.079711999999915],[-98.240829000000019,73.075272000000098],[-98.319457999999997,73.050537000000077],[-98.365829000000019,73.037766000000147],[-98.450287000000003,73.020264000000111],[-98.459166999999923,72.99331699999999],[-98.453613000000018,72.898605000000089],[-98.450561999999991,72.874985000000095],[-98.445830999999998,72.865814000000114],[-98.438598999999954,72.860535000000141],[-98.428054999999915,72.856094000000041],[-98.419998000000021,72.858597000000032],[-98.413329999999974,72.864151000000049],[-98.403335999999967,72.881363000000022],[-98.403335999999967,72.887207000000046],[-98.405838000000017,72.891662999999994],[-98.402221999999995,72.897491000000059],[-98.397780999999952,72.902771000000143],[-98.388061999999991,72.908034999999927],[-98.266402999999855,72.972763000000043],[-98.255004999999926,72.977478000000076],[-98.227218999999877,72.987487999999985],[-98.176940999999999,72.998596000000134],[-97.99499499999996,73.037491000000102],[-97.980559999999969,73.039702999999975],[-97.864166000000012,73.047485000000108],[-97.846953999999982,73.048598999999911],[-97.684433000000013,73.033051000000114],[-97.668335000000013,73.03137200000009],[-97.527495999999985,73.011383000000137],[-97.442489999999964,72.999145999999996],[-97.299728000000016,72.969711000000132],[-97.283324999999991,72.963882000000069],[-97.229720999999984,72.943038999999999],[-97.225006000000008,72.939972000000125],[-97.258056999999951,72.883605999999986],[-97.266402999999968,72.878585999999984],[-97.265288999999996,72.84887700000013],[-97.203613000000018,72.825821000000076],[-97.081679999999949,72.77998400000007],[-97.030288999999982,72.74136400000009],[-97.023055999999997,72.732208000000128],[-97.023055999999997,72.727203000000088],[-97.029723999999987,72.716659999999933],[-97.079453000000001,72.701934999999992],[-97.105834999999956,72.696365000000128],[-97.134444999999914,72.688309000000061],[-97.161117999999988,72.67804000000001],[-97.170546999999885,72.673599000000081],[-97.179442999999992,72.667480000000069],[-97.183059999999955,72.661926000000051],[-97.19027699999998,72.640549000000021],[-97.198333999999932,72.609984999999995],[-97.196655000000021,72.604430999999977],[-97.185271999999998,72.601929000000098],[-97.165557999999919,72.60165400000011],[-97.09056099999998,72.605254999999943],[-97.081008999999938,72.605927000000122],[-97.07028200000002,72.608597000000088],[-97.042770000000019,72.623306000000127],[-97.035827999999981,72.628860000000145],[-97.005568999999866,72.644714000000022],[-96.982223999999974,72.655258000000117],[-96.968886999999938,72.660262999999986],[-96.915558000000033,72.678588999999988],[-96.611938000000009,72.74693300000007],[-96.517501999999922,72.714706000000092],[-96.52194199999991,72.674423000000047],[-96.459731999999917,72.607758000000103],[-96.405272999999966,72.559418000000107],[-96.374709999999993,72.534424000000115],[-96.336945000000014,72.500824000000023],[-96.325561999999991,72.488312000000064],[-96.30221599999993,72.433868000000018],[-96.297501000000011,72.42164600000001],[-96.298339999999939,72.415817000000004],[-96.538605000000018,72.343323000000055],[-96.668335000000013,72.309708000000001],[-96.696945000000028,72.310531999999967],[-96.738892000000021,72.321105999999986],[-96.776397999999972,72.323318000000029],[-96.831389999999999,72.323608000000036],[-96.868332000000009,72.321930000000123],[-96.871932999999956,72.321105999999986],[-96.864440999999943,72.317764000000068],[-96.771118000000001,72.298874000000069],[-96.668883999999878,72.27915999999999],[-96.578339000000028,72.278594999999996],[-96.561110999999983,72.275543000000027],[-96.554169000000002,72.263885000000016],[-96.487212999999883,72.136108000000036],[-96.485001000000011,72.129974000000004],[-96.483062999999959,72.11303700000002],[-96.487503000000004,72.101653999999996],[-96.498336999999935,72.090270999999973],[-96.508346999999958,72.084991000000116],[-96.521117999999944,72.079987000000131],[-96.537216000000001,72.07499700000011],[-96.557220000000029,72.071930000000009],[-96.721663999999919,72.052765000000022],[-96.77305599999994,72.053040000000067],[-96.789444000000003,72.052200000000028],[-96.866942999999992,72.041091999999992],[-96.853881999999999,72.036376999999959],[-96.828888000000006,72.030822999999998],[-96.672501000000011,72.012771999999984],[-96.635009999999966,72.013885000000073],[-96.618057000000022,72.018326000000002],[-96.609160999999915,72.024155000000007],[-96.600554999999986,72.02777100000003],[-96.567779999999971,72.033600000000092],[-96.521117999999944,72.038879000000065],[-96.501953000000015,72.038589000000059],[-96.488601999999958,72.034987999999998],[-96.489990000000034,72.018326000000002],[-96.490829000000019,72.012206999999989],[-96.493056999999965,72.001098999999954],[-96.502228000000002,71.975540000000137],[-96.505843999999968,71.969711000000132],[-96.512786999999889,71.964431999999988],[-96.522506999999962,71.959152000000074],[-96.554442999999935,71.949141999999995],[-96.565552000000025,71.946930000000123],[-96.573897999999986,71.948318000000029],[-96.589447000000007,71.954437000000041],[-96.602782999999988,71.958038000000101],[-96.617492999999911,71.959991000000059],[-96.638335999999981,71.957488999999953],[-96.73332199999993,71.928863999999976],[-96.749160999999958,71.923874000000069],[-96.761947999999961,71.918594000000041],[-96.764450000000011,71.914992999999981],[-96.761397999999929,71.909714000000008],[-96.749725000000012,71.903046000000018],[-96.736389000000031,71.899429000000055],[-96.724166999999966,71.898605000000089],[-96.700835999999924,71.899994000000106],[-96.64527899999996,71.917480000000012],[-96.607223999999974,71.92692599999998],[-96.565552000000025,71.93220500000001],[-96.522781000000009,71.934418000000107],[-96.509170999999924,71.933044000000109],[-96.503890999999953,71.931656000000032],[-96.491668999999888,71.926085999999941],[-96.49110399999995,71.919434000000081],[-96.493056999999965,71.914153999999996],[-96.525832999999977,71.868866000000082],[-96.557769999999948,71.829436999999984],[-96.570846999999901,71.819442999999978],[-96.579726999999934,71.814987000000031],[-96.591949,71.810805999999957],[-96.613327000000027,71.807205000000124],[-96.726668999999958,71.793593999999928],[-96.744720000000029,71.792206000000022],[-96.738051999999982,71.824996999999996],[-96.791381999999942,71.827774000000034],[-96.983611999999994,71.775817999999958],[-97.013061999999991,71.749146000000053],[-97.084166999999923,71.700272000000098],[-97.165008999999941,71.675537000000077],[-97.210006999999962,71.663605000000075],[-97.434433000000013,71.617751999999996],[-97.470550999999944,71.612487999999985],[-97.505004999999983,71.611649],[-97.656386999999938,71.614700000000028],[-97.696655000000021,71.619705000000067],[-97.713332999999977,71.623871000000008],[-97.726395000000025,71.628310999999997],[-97.787215999999944,71.644149999999968],[-97.974715999999944,71.660812000000135],[-97.988051999999982,71.661926000000108],[-98.035277999999948,71.653320000000008],[-98.053329000000019,71.648331000000042],[-98.072784000000013,71.641663000000051],[-98.112777999999935,71.636932000000115],[-98.131103999999937,71.638046000000088],[-98.178878999999938,71.641663000000051],[-98.196654999999907,71.643600000000106],[-98.207503999999972,71.646103000000039],[-98.218063000000029,71.649719000000118],[-98.240829000000019,71.659714000000008],[-98.252791999999886,71.666091999999992],[-98.331116000000009,71.708327999999995],[-98.349166999999909,71.718597000000045],[-98.3558349999999,71.7227630000001],[-98.359725999999966,71.728043000000014],[-98.359436000000017,71.733871000000079],[-98.333327999999995,71.787490999999989],[-98.325561999999934,71.798325000000091],[-98.321395999999936,71.803314000000057],[-98.315276999999924,71.809143000000063],[-98.279174999999952,71.834717000000069],[-98.259170999999924,71.844711000000075],[-98.228881999999999,71.862198000000092],[-98.211944999999957,71.878585999999984],[-98.208617999999944,71.884430000000009],[-98.209166999999979,71.889160000000004],[-98.221938999999963,71.89498900000001],[-98.255279999999971,71.902480999999966],[-98.267226999999991,71.90415999999999],[-98.282776000000013,71.899155000000121],[-98.291381999999999,71.894714000000022],[-98.450561999999991,71.79414399999996],[-98.462508999999955,71.783874999999966],[-98.477782999999931,71.767212000000086],[-98.488892000000021,71.749419999999986],[-98.49749799999995,71.733321999999987],[-98.49749799999995,71.721649000000127],[-98.493880999999988,71.713882000000012],[-98.381377999999984,71.653594999999996],[-98.367492999999911,71.647491000000002],[-98.179992999999911,71.571930000000123],[-98.041381999999885,71.530823000000055],[-98.037506000000008,71.526657],[-98.120543999999995,71.460540999999978],[-98.180831999999953,71.423598999999967],[-98.198043999999982,71.414703000000031],[-98.466110000000015,71.313309000000061],[-98.505568999999923,71.299149000000114],[-98.541381999999942,71.289429000000041],[-98.55471799999998,71.287201000000096],[-98.701675000000023,71.271927000000005],[-98.72084000000001,71.269989000000066],[-98.729720999999927,71.270538000000045],[-98.75111400000003,71.274154999999951],[-98.816390999999953,71.289154000000053],[-98.829453000000001,71.293869000000086],[-98.844726999999978,71.305542000000116],[-98.882216999999969,71.333878000000027],[-98.938323999999852,71.369141000000013],[-98.960281000000009,71.379974000000004],[-98.978881999999999,71.382476999999994],[-98.995543999999995,71.382751000000098],[-99.014724999999942,71.381653000000028],[-99.034438999999963,71.378860000000032],[-99.042770000000019,71.374419999999986],[-99.045546999999942,71.368590999999981],[-99.051392000000021,71.363036999999963],[-99.05972300000002,71.358597000000145],[-99.077498999999989,71.353592000000106],[-99.115829000000019,71.350540000000024],[-99.220839999999896,71.342209000000082],[-99.238051999999982,71.344986000000006],[-99.288054999999872,71.402771000000087],[-99.313323999999966,71.43942300000009],[-99.462783999999942,71.59304800000001],[-99.529723999999987,71.605255],[-99.558608999999876,71.613037000000134],[-99.574172999999973,71.619705000000067],[-99.578888000000006,71.622757000000036],[-99.591675000000009,71.635268999999994],[-99.676392000000021,71.72526600000009],[-99.677779999999927,71.729156000000046],[-99.677215999999987,71.736923000000047],[-99.674437999999896,71.742752000000053],[-99.673049999999989,71.749146000000053],[-99.673889000000031,71.753876000000105],[-99.676392000000021,71.758605999999986],[-99.678328999999962,71.760544000000095],[-99.842223999999987,71.834991000000002],[-99.959166999999979,71.854155999999932],[-99.977218999999991,71.855819999999937],[-100.05110200000001,71.865814],[-100.067497,71.870529000000033],[-100.10193599999997,71.884720000000016],[-100.31471299999993,71.979979999999955],[-100.32195299999989,71.984985000000052],[-100.33222999999998,71.997208000000057],[-100.33583099999993,72.006653000000142],[-100.579453,72.154434000000037],[-100.63445299999995,72.18553200000008],[-100.64417300000002,72.188308999999947],[-100.72000099999997,72.201660000000118],[-100.88527699999997,72.207764000000111],[-100.88999899999988,72.207489000000123],[-100.92388900000003,72.199416999999983],[-100.95140099999992,72.171097000000145],[-100.96777299999997,72.174149000000057],[-101.01334399999996,72.191086000000041],[-101.02084400000001,72.196365000000014],[-101.054169,72.231658999999922],[-101.05555700000002,72.236649],[-101.11776700000001,72.284424000000001],[-101.19444299999998,72.324432000000002],[-101.20861799999994,72.329712000000086],[-101.220551,72.332214000000135],[-101.23889200000002,72.33387799999997],[-101.27667200000002,72.328323000000069],[-101.32528699999995,72.314986999999974],[-101.395554,72.286926000000051],[-101.40416699999997,72.281372000000033],[-101.40972899999986,72.275543000000027],[-101.46945199999999,72.265549000000021],[-101.50917099999998,72.283051000000057],[-101.58556399999998,72.301376000000005],[-101.63474299999996,72.306931000000077],[-101.65638699999994,72.305252000000053],[-101.66416900000002,72.301650999999993],[-101.672234,72.292755000000056],[-101.68499799999989,72.28776600000009],[-101.69444299999986,72.288040000000024],[-101.77694700000001,72.299713000000054],[-101.83056599999992,72.319153000000028],[-101.84472699999992,72.324432000000002],[-101.88834399999996,72.358597000000145],[-101.94167299999987,72.451935000000049],[-101.98131599999999,72.478111000000126],[-102.08033799999993,72.516006000000118],[-102.22222899999991,72.542206000000078],[-102.25862100000001,72.549149000000057],[-102.37721299999998,72.577484000000084],[-102.46584299999995,72.604706000000022],[-102.6219329999999,72.664703000000145],[-102.73638899999992,72.719986000000006],[-102.74166899999989,72.724152000000061],[-102.75583599999993,72.761383000000023],[-102.76471699999996,72.784987999999998],[-102.76306199999999,72.790817000000004],[-102.75306699999999,72.811096000000134],[-102.74944299999999,72.817214999999976],[-102.74305699999996,72.82249500000006],[-102.73500100000001,72.826096000000121],[-102.69860799999992,72.836654999999951],[-102.66361999999992,72.853316999999947],[-102.64666699999992,72.864426000000037],[-102.61277799999993,72.896652000000131],[-102.59722899999991,72.913605000000018],[-102.59361299999995,72.919983000000002],[-102.59166699999997,72.925536999999963],[-102.59306300000003,72.931656000000032],[-102.59416199999998,72.942748999999992],[-102.593887,72.949141999999995],[-102.59166699999997,72.954987000000074],[-102.576683,72.979706000000022],[-102.56304899999998,72.991089000000045],[-102.51306199999993,73.026093000000117],[-102.50110599999994,73.030548000000124],[-102.38806199999999,73.062759000000028],[-102.36805699999996,73.067490000000134],[-102.27610800000002,73.08248900000001],[-102.24694799999997,73.083878000000027],[-102.13722199999989,73.086929000000055],[-102.08444199999985,73.084152000000131],[-102.014183,73.079711999999915],[-101.97083999999995,73.070540999999992],[-101.88417099999992,73.024704000000099],[-101.81777999999991,72.966660000000104],[-101.810272,72.960541000000035],[-101.75527999999997,72.930542000000059],[-101.74109599999991,72.924149000000057],[-101.67527799999999,72.909714000000122],[-101.59528399999994,72.902205999999921],[-101.52166699999998,72.87831100000011],[-101.50974299999996,72.871642999999949],[-101.40444899999989,72.782486000000119],[-101.41332999999997,72.748322000000087],[-101.37249800000001,72.727203000000088],[-101.36665299999999,72.725266000000033],[-101.29750099999995,72.709991000000059],[-101.03333299999997,72.689697000000137],[-100.91583299999996,72.688034000000016],[-100.88221699999991,72.689697000000137],[-100.82778899999994,72.705826000000059],[-100.81945799999994,72.710266000000104],[-100.81220999999994,72.715545999999961],[-100.81194299999999,72.719710999999961],[-100.79833999999994,72.743590999999981],[-100.70722999999998,72.755829000000006],[-100.53307299999994,72.751389000000017],[-100.50917099999992,72.749146000000053],[-100.49833699999994,72.74803200000008],[-100.47582999999997,72.742751999999996],[-100.44803599999995,72.735535000000084],[-100.43443300000001,72.73692299999999],[-100.41221599999994,72.74192800000003],[-100.34973100000002,72.770538000000101],[-100.34084300000001,72.774993999999992],[-100.33168000000001,72.78054800000001],[-100.314438,72.796371000000022],[-100.31555199999997,72.801376000000062],[-100.35077699999994,72.851326000000086],[-100.35160799999994,72.853660999999988],[-100.35711699999996,72.859154000000103],[-100.46916199999998,72.950272000000041],[-100.48638899999992,72.949141999999995],[-100.49889399999995,72.950546000000145],[-100.49973299999999,72.95637499999998],[-100.46305799999993,73.014709000000039],[-100.45194999999995,73.020538000000045],[-100.421944,73.034987999999942],[-100.36776700000001,73.046936000000017],[-100.35637700000001,73.049423000000047],[-100.34221600000001,73.044144000000074],[-100.31667299999992,73.034149000000014],[-100.30943299999996,73.028046000000074],[-100.31555199999997,73.022490999999945],[-100.34306300000003,73.013885000000073],[-100.3577729999999,73.010544000000039],[-100.38137799999998,72.949141999999995],[-100.32899499999991,72.891372999999987],[-100.31732899999992,72.888869999999997],[-100.28527800000001,72.873596000000077],[-100.21721599999995,72.876647999999989],[-100.196663,72.877762000000018],[-100.09638999999993,72.88638300000008],[-100.06722999999994,72.902205999999921],[-100.031387,72.934982000000048],[-100.04750099999995,72.957214000000135],[-100.11277799999999,73.025818000000072],[-100.16972399999992,73.078598000000113],[-100.23222399999997,73.134430000000123],[-100.24445299999996,73.136932000000002],[-100.25446299999999,73.137206999999989],[-100.28888699999993,73.135818000000029],[-100.32362399999994,73.133331000000112],[-100.345551,73.130264000000011],[-100.38249200000001,73.122757000000092],[-100.39138799999995,73.118317000000047],[-100.41443600000002,73.104706000000078],[-100.44275699999997,73.087204000000042],[-100.51862299999993,73.0977630000001],[-100.58667000000003,73.132751000000098],[-100.60193599999997,73.140823000000069],[-100.60777300000001,73.146378000000141],[-100.58612099999999,73.167480000000126],[-100.58000199999987,73.173035000000027],[-100.49082900000002,73.230819999999937],[-100.40666199999987,73.280273000000079],[-100.39778100000001,73.284713999999951],[-100.37832600000002,73.289978000000133],[-100.36110699999995,73.290267999999969],[-100.28138699999994,73.27915999999999],[-100.1347429999999,73.221100000000035],[-100.05332899999996,73.186371000000008],[-100.03751399999999,73.183868000000018],[-100.021118,73.183044000000052],[-100.00418099999996,73.183319000000097],[-99.841110000000015,73.191360000000145],[-99.801666000000012,73.195526000000029],[-99.771666999999979,73.201096000000121],[-99.77027899999996,73.203873000000044],[-99.771666999999979,73.208038000000045],[-99.786391999999921,73.212493999999936],[-99.811934999999949,73.215546000000074],[-99.84944200000001,73.21527100000003],[-99.886123999999995,73.213318000000072],[-99.925827000000027,73.214996000000042],[-99.945267000000001,73.216660000000047],[-99.96444699999995,73.219436999999971],[-100.07749899999999,73.251389000000074],[-100.09500100000002,73.257217000000026],[-100.15915699999994,73.289428999999984],[-100.19943199999994,73.31860400000005],[-100.27223199999992,73.358597000000088],[-100.32362399999994,73.3836060000001],[-100.33332799999994,73.388321000000133],[-100.358047,73.393326000000002],[-100.37389399999995,73.395828000000051],[-100.38417099999987,73.396378000000084],[-100.38806199999993,73.395538000000045],[-100.4058379999999,73.361374000000012],[-100.387787,73.338593000000003],[-100.56166099999996,73.286652000000117],[-100.583618,73.283599999999979],[-100.823059,73.260818000000086],[-100.84056099999992,73.259720000000016],[-100.88945000000001,73.264435000000049],[-100.97749299999998,73.280273000000079],[-101.30499299999991,73.361649000000057],[-101.31276700000001,73.371094000000085],[-101.31139400000001,73.382751000000042],[-101.31054699999999,73.392487000000017],[-101.31139400000001,73.398331000000042],[-101.31723,73.401657000000057],[-101.47055099999994,73.436096000000134],[-101.55832700000002,73.446640000000002],[-101.58084099999996,73.450272000000098],[-101.61665299999993,73.485260000000096],[-101.62138400000003,73.490265000000136],[-101.44055200000003,73.549149000000057],[-101.42748999999992,73.552200000000084],[-101.40083299999992,73.553589000000045],[-101.31582599999996,73.550811999999951],[-101.2808379999999,73.552475000000072],[-101.26888999999994,73.556090999999924],[-101.25974300000001,73.561646000000053],[-101.25527999999997,73.567763999999954],[-101.25222799999995,73.578873000000044],[-101.25306699999993,73.584991000000002],[-101.25110599999994,73.589706000000035],[-101.24194299999994,73.595261000000107],[-101.23082699999998,73.600266000000147],[-101.21721600000001,73.604155999999932],[-101.199432,73.60554500000012],[-100.92639200000002,73.600266000000147],[-100.90943900000002,73.599716000000114],[-100.890289,73.596100000000092],[-100.87748699999997,73.59027100000003],[-100.77084400000001,73.539978000000076],[-100.71749899999992,73.509155000000078],[-100.70667299999997,73.499420000000043],[-100.70221699999996,73.494431000000077],[-100.70140100000003,73.488585999999941],[-100.69721999999996,73.482483000000002],[-100.69110099999995,73.476929000000041],[-100.67278299999998,73.464432000000045],[-100.51834099999996,73.416930999999977],[-100.49973299999999,73.412490999999932],[-100.46472199999988,73.407211000000075],[-100.44444299999992,73.40637200000009],[-100.43055700000002,73.406936999999971],[-100.41722099999998,73.413315000000068],[-100.41500899999994,73.41804500000012],[-100.42971799999998,73.430267000000072],[-100.45500199999998,73.441924999999969],[-100.484734,73.451935000000049],[-100.50279199999989,73.45748900000001],[-100.531387,73.466094999999939],[-100.58389299999993,73.482208000000014],[-100.59221599999995,73.486374000000069],[-100.59861799999999,73.491089000000102],[-100.60611,73.497207999999944],[-100.61000099999995,73.503052000000139],[-100.610817,73.509155000000078],[-100.60804699999994,73.514999000000103],[-100.60388199999994,73.521102999999982],[-100.55915799999997,73.546097000000088],[-100.54387700000001,73.556366000000139],[-100.541382,73.562194999999974],[-100.54277000000002,73.573883000000023],[-100.54998799999993,73.594711000000075],[-100.55166600000001,73.598876999999959],[-100.573624,73.596649000000014],[-100.628601,73.593322999999998],[-100.76750199999998,73.603867000000037],[-100.89167799999996,73.619980000000055],[-100.91139199999998,73.622756999999979],[-100.91194200000001,73.625259000000028],[-100.91139199999998,73.630539000000113],[-100.87943999999999,73.635818000000086],[-100.86472300000003,73.641662999999994],[-100.86110699999995,73.645827999999995],[-100.85360699999995,73.662201000000039],[-100.858047,73.667205999999908],[-100.97444199999995,73.679153000000042],[-100.99194299999999,73.678863999999976],[-101.03333299999997,73.671371000000136],[-101.04695099999998,73.673035000000141],[-101.057503,73.676650999999993],[-101.11833199999995,73.723312000000021],[-101.120003,73.727203000000088],[-101.01390100000003,73.797211000000061],[-100.99749799999989,73.802475000000015],[-100.98222399999997,73.80581699999999],[-100.95973199999997,73.809143000000006],[-100.93804899999998,73.810256999999979],[-100.82861300000002,73.815536000000122],[-100.79527300000001,73.812484999999924],[-100.77583300000003,73.812195000000088],[-100.754997,73.812484999999924],[-100.73416099999997,73.815262000000018],[-100.71444700000001,73.820267000000058],[-100.69915800000001,73.826096000000064],[-100.66416900000002,73.844986000000063],[-100.64835399999993,73.848327999999981],[-100.554169,73.854705999999965],[-100.52999899999998,73.853591999999935],[-100.41777000000002,73.845534999999984],[-100.39555399999995,73.840820000000122],[-100.38945000000001,73.83859300000006],[-100.370003,73.828049000000021],[-100.34999099999993,73.818603999999993],[-100.33612099999993,73.814697000000024],[-100.06304899999998,73.764999000000046],[-99.865828999999962,73.837769000000094],[-99.857773000000009,73.84275800000006],[-99.870109999999954,73.861541999999986],[-99.869109999999921,73.867370999999991],[-99.869780999999932,73.870201000000009],[-99.877105999999912,73.876541000000032],[-99.886771999999951,73.8822100000001],[-99.892440999999963,73.883536999999933],[-99.961944999999957,73.873306000000071],[-99.971663999999976,73.868042000000059],[-99.988051999999925,73.856934000000081],[-99.990829000000019,73.851089000000002],[-99.997498000000007,73.845534999999984],[-100.00834699999996,73.841369999999984],[-100.02639799999997,73.836929000000055],[-100.04943800000001,73.832764000000054],[-100.13667299999997,73.827484000000027],[-100.175003,73.828049000000021],[-100.24944299999993,73.833878000000027],[-100.26139799999993,73.838318000000072],[-100.29972799999996,73.860260000000096],[-100.29695100000004,73.865814000000114],[-100.29222099999993,73.872208000000001],[-100.27860999999996,73.888596000000007],[-100.26583900000003,73.899994000000049],[-100.252792,73.905258000000003],[-100.24305700000002,73.907486000000006],[-100.14306599999992,73.929977000000008],[-100.12721299999993,73.933319000000097],[-100.104446,73.936371000000008],[-100.03751399999999,73.942473999999947],[-99.981109999999944,73.945816000000093],[-99.938599000000011,73.946091000000081],[-99.896956999999986,73.944138000000009],[-99.856109999999887,73.940811000000053],[-99.816100999999946,73.93609600000002],[-99.800827000000027,73.931655999999975],[-99.800551999999925,73.925812000000008],[-99.813323999999966,73.921371000000079],[-99.806220999999937,73.902100000000019],[-99.810058999999967,73.898766000000023],[-99.810889999999972,73.894928000000107],[-99.808227999999986,73.891937000000041],[-99.804557999999929,73.889099000000101]],[[-89.988892000000021,73.988312000000121],[-90.007781999999963,73.984984999999995],[-90.058043999999938,73.992477000000122],[-90.158614999999998,74.001389000000131],[-90.217772999999966,74.004439999999988],[-90.250290000000007,74.00999500000006],[-90.265015000000005,74.014708999999982],[-90.281112999999891,74.02165199999996],[-90.284728999999913,74.024994000000106],[-90.285003999999958,74.029709000000139],[-90.276397999999858,74.038589000000002],[-90.271117999999944,74.043320000000108],[-90.240554999999972,74.053863999999976],[-90.206115999999952,74.057755000000043],[-89.991942999999935,74.066665999999998],[-89.97193900000002,74.064697000000137],[-89.941375999999991,74.057479999999998],[-89.914443999999946,74.047485000000108],[-89.90194699999995,74.03776600000009],[-89.903885000000002,74.03137200000009],[-89.918609999999944,74.010543999999982],[-89.928329000000019,74.005554000000132],[-89.988892000000021,73.988312000000121]],[[-98.918610000000001,73.806091000000094],[-98.96166999999997,73.80525200000011],[-99.104172000000005,73.81442300000009],[-99.140838999999914,73.818054000000132],[-99.36361699999992,73.864426000000037],[-99.381942999999922,73.86914100000007],[-99.429717999999923,73.891662999999937],[-99.437499999999943,73.89694199999991],[-99.43638599999997,73.902206000000092],[-99.429717999999923,73.908035000000098],[-99.422501000000011,73.911102000000028],[-99.406113000000005,73.915267999999912],[-99.282500999999968,73.936919999999986],[-99.223891999999978,73.940262000000075],[-99.092772999999909,73.952209000000039],[-99.020279000000016,73.979706000000022],[-98.938048999999921,73.998596000000134],[-98.801666000000012,74.018051000000128],[-98.66194200000001,74.03137200000009],[-98.575835999999981,74.03137200000009],[-98.532501000000025,74.032211000000018],[-98.491942999999935,74.034148999999957],[-98.425277999999992,74.043869000000029],[-98.3558349999999,74.057479999999998],[-98.275832999999921,74.07388300000008],[-98.255004999999926,74.078598000000113],[-98.230285999999978,74.083327999999938],[-98.170836999999949,74.09248400000007],[-98.039992999999981,74.105820000000051],[-97.994445999999925,74.109421000000111],[-97.806106999999884,74.11943100000002],[-97.758346999999958,74.118590999999981],[-97.737212999999997,74.117477000000008],[-97.703613000000018,74.113876000000118],[-97.690826000000015,74.111374000000069],[-97.653609999999958,74.099991000000045],[-97.64805599999994,74.0977630000001],[-97.642226999999934,74.087204000000042],[-97.637787000000003,74.075546000000031],[-97.638335999999981,74.063873000000001],[-97.649444999999957,74.052474999999959],[-97.656661999999983,74.04693599999996],[-97.673324999999863,74.035537999999974],[-97.717223999999987,74.009720000000016],[-97.728058000000033,74.004166000000055],[-97.763625999999931,73.988312000000121],[-97.823058999999887,73.968597000000102],[-98.124161000000015,73.878586000000098],[-98.145003999999915,73.873596000000077],[-98.168334999999956,73.870818999999983],[-98.392776000000026,73.84526100000005],[-98.478881999999999,73.837494000000106],[-98.777221999999995,73.813599000000124],[-98.918610000000001,73.806091000000094]],[[-92.638061999999877,74.103043000000127],[-92.36860699999994,74.041091999999992],[-92.356948999999986,74.038040000000024],[-92.33444199999991,74.03137200000009],[-92.31138599999997,74.02165199999996],[-92.296951000000035,74.014435000000049],[-92.289444000000003,74.009155000000021],[-92.282775999999956,74.003325999999959],[-92.273620999999991,73.990540000000067],[-92.272781000000009,73.984421000000054],[-92.28195199999999,73.974990999999989],[-92.291107000000011,73.969711000000075],[-92.310546999999929,73.961104999999975],[-92.327788999999939,73.951385000000073],[-92.330001999999979,73.945526000000086],[-92.329726999999991,73.942473999999947],[-92.309433000000013,73.940811000000053],[-92.1324919999999,73.946365000000014],[-92.118606999999997,73.949142000000109],[-92.116652999999985,73.95109599999995],[-92.113327000000027,73.95637499999998],[-92.110000999999897,73.964706000000035],[-92.113051999999982,73.974426000000108],[-92.114440999999999,73.976654000000053],[-92.113051999999982,73.981368999999916],[-92.107773000000009,73.984711000000061],[-92.094161999999983,73.989151000000049],[-91.925551999999982,74.012771999999927],[-91.877212999999983,74.016936999999928],[-91.838332999999977,74.018875000000094],[-91.570847000000015,74.025818000000072],[-91.528335999999911,74.024429000000055],[-91.139998999999932,74.00999500000006],[-91.097504000000015,74.008331000000055],[-91.065001999999993,74.006103999999993],[-91.046951000000035,74.004166000000055],[-90.735549999999932,73.968322999999998],[-90.660003999999958,73.953873000000044],[-90.633056999999951,73.948317999999972],[-90.441375999999934,73.919708000000128],[-90.406661999999983,73.914703000000088],[-90.364440999999999,73.911652000000061],[-90.354720999999984,73.912201000000039],[-90.344955000000027,73.914368000000081],[-90.341674999999952,73.917206000000078],[-90.339721999999938,73.920532000000094],[-90.341110000000015,73.924149000000057],[-90.33555599999994,73.925812000000008],[-90.317779999999971,73.925261999999975],[-90.225006000000008,73.908599999999979],[-90.195830999999998,73.901931999999988],[-90.194442999999922,73.899719000000005],[-90.204178000000013,73.888321000000019],[-90.230285999999978,73.862198000000035],[-90.241942999999992,73.851929000000041],[-90.25140399999998,73.846649000000127],[-90.264450000000011,73.84165999999999],[-90.275283999999942,73.83859300000006],[-90.283066000000019,73.838318000000072],[-90.360000999999954,73.800812000000121],[-90.474716000000001,73.72164900000007],[-90.581389999999999,73.65776100000005],[-90.724715999999944,73.583054000000118],[-90.84973100000002,73.540268000000083],[-90.921386999999925,73.495255000000043],[-90.930283000000031,73.483871000000079],[-90.932219999999973,73.481934000000081],[-91.089172000000019,73.384155000000021],[-91.152221999999995,73.361099000000024],[-91.171386999999982,73.351089000000059],[-91.180557000000022,73.345825000000104],[-91.186385999999914,73.340271000000087],[-91.238602000000014,73.279984000000127],[-91.253066999999874,73.269150000000081],[-91.262222000000008,73.263885000000016],[-91.367767000000015,73.200821000000133],[-91.569457999999997,73.063309000000061],[-91.642776000000026,73.021103000000039],[-91.647506999999962,73.016663000000051],[-91.645003999999972,72.998032000000023],[-91.770844000000011,72.913040000000024],[-91.799727999999959,72.897216999999955],[-91.808333999999888,72.891937000000098],[-91.812774999999988,72.885818000000086],[-91.813048999999921,72.880264000000068],[-91.81138599999997,72.868042000000116],[-91.818893000000003,72.862198000000092],[-91.84973100000002,72.846100000000035],[-92.06610099999989,72.752487000000087],[-92.095839999999896,72.743042000000003],[-92.127486999999917,72.734421000000111],[-92.166396999999961,72.725539999999967],[-92.232223999999974,72.713043000000027],[-92.274718999999891,72.70748900000001],[-92.314437999999996,72.704987000000131],[-92.335280999999952,72.704437000000098],[-92.393340999999907,72.707213999999965],[-92.431106999999997,72.710541000000092],[-92.524719000000005,72.720534999999927],[-92.745269999999891,72.739975000000129],[-92.898346000000004,72.750275000000045],[-93.077498999999875,72.769439999999975],[-93.248885999999914,72.789703000000031],[-93.337783999999999,72.8077550000001],[-93.349166999999852,72.802475000000072],[-93.366652999999985,72.797760000000039],[-93.391952999999944,72.794144000000131],[-93.412216000000001,72.792206000000022],[-93.580001999999922,72.778046000000074],[-93.679992999999911,72.779709000000025],[-93.726104999999905,72.781097000000102],[-93.764450000000011,72.781372000000147],[-93.932769999999948,72.774155000000007],[-94.038604999999961,72.766388000000063],[-94.099166999999966,72.764160000000118],[-94.132492000000013,72.764709000000039],[-94.170546999999942,72.767487000000074],[-94.18249499999996,72.769439999999975],[-94.24610899999999,72.77388000000002],[-94.262786999999889,72.774155000000007],[-94.298049999999989,72.770263999999941],[-94.315552000000025,72.763046000000145],[-94.321944999999971,72.759430000000066],[-94.327498999999989,72.754440000000045],[-94.334441999999967,72.738036999999963],[-94.332779000000016,72.731934000000024],[-94.327498999999989,72.721649000000127],[-94.319457999999997,72.717484000000127],[-94.3125,72.715545999999961],[-94.297501000000011,72.713318000000015],[-94.26916499999993,72.719147000000021],[-94.265288999999939,72.723877000000073],[-94.263901000000033,72.729980000000012],[-94.258346999999958,72.732483000000002],[-94.236388999999917,72.734985000000052],[-94.160278000000005,72.729431000000034],[-94.103606999999897,72.718596999999988],[-94.09333799999996,72.714995999999928],[-94.001403999999923,72.704162999999994],[-93.985000999999954,72.70387299999993],[-93.886672999999973,72.704712000000086],[-93.839447000000007,72.717209000000082],[-93.798339999999996,72.702208999999925],[-93.823058999999887,72.653046000000018],[-93.817229999999938,72.642211999999972],[-93.801665999999955,72.634430000000009],[-93.786117999999931,72.629149999999981],[-93.76945499999988,72.624984999999981],[-93.75778200000002,72.623032000000023],[-93.686660999999901,72.622208000000057],[-93.674438000000009,72.618866000000082],[-93.589721999999995,72.58137499999998],[-93.568619000000012,72.570831000000112],[-93.49888599999997,72.521927000000119],[-93.463333000000034,72.462204000000099],[-93.466110000000015,72.451385000000016],[-93.46945199999999,72.439697000000024],[-93.628052000000025,72.341934000000037],[-93.64527899999996,72.337204000000042],[-93.666397000000018,72.333602999999982],[-93.688323999999909,72.331099999999992],[-93.748610999999983,72.329712000000086],[-93.767226999999991,72.327209000000096],[-93.787216000000001,72.322769000000108],[-93.801392000000021,72.317764000000068],[-93.819732999999928,72.30720500000001],[-93.827498999999989,72.301926000000037],[-93.913329999999974,72.241652999999928],[-93.925277999999935,72.233047000000056],[-94.014175000000023,72.163879000000122],[-94.036666999999852,72.142212000000086],[-94.040282999999988,72.137497000000053],[-94.043610000000001,72.131363000000022],[-94.045546999999885,72.126922999999977],[-94.044723999999974,72.115814000000114],[-94.042220999999927,72.106644000000074],[-94.043883999999935,72.096939000000134],[-94.048339999999939,72.091094999999939],[-94.054717999999923,72.085265999999933],[-94.066665999999941,72.076660000000004],[-94.080840999999964,72.066939999999931],[-94.091675000000009,72.061645999999996],[-94.127685999999926,72.056366000000082],[-94.143341000000021,72.057480000000055],[-94.172500999999954,72.0577550000001],[-94.186660999999958,72.055816999999934],[-94.198883000000023,72.052765000000022],[-94.188720999999987,72.045258000000103],[-94.19505300000003,72.042091000000084],[-94.198387000000025,72.03910100000013],[-94.199546999999995,72.036438000000032],[-94.196053000000006,72.032432999999969],[-94.188384999999982,72.030930000000126],[-94.172042999999917,72.029594000000088],[-94.149886999999921,72.029433999999981],[-94.137382999999886,72.031769000000111],[-94.130554000000018,72.033104000000037],[-94.125214000000028,72.035095000000126],[-94.091385000000002,72.037766000000147],[-94.06082200000003,72.035262999999986],[-94.029723999999931,71.999419999999986],[-94.063048999999921,71.978317000000061],[-94.082229999999981,71.976089000000115],[-94.191719000000035,71.994316000000083],[-94.353881999999942,72.018050999999957],[-94.371933000000013,72.019440000000145],[-94.418059999999912,72.02276599999999],[-94.449721999999952,72.023315000000139],[-94.743880999999931,72.011383000000023],[-94.780288999999982,72.006103999999993],[-94.825561999999991,71.997481999999991],[-94.902221999999881,71.989151000000106],[-95.121932999999956,71.966095000000053],[-95.161117999999931,71.964706000000092],[-95.17582699999997,71.966934000000037],[-95.20777899999996,71.988876000000118],[-95.213333000000034,71.99443100000002],[-95.206664999999987,72.097488000000112],[-95.204453000000001,72.102767999999969],[-95.196654999999964,72.106644000000074],[-95.039444000000003,72.131363000000022],[-94.981673999999998,72.139434999999992],[-94.929717999999923,72.143599999999992],[-94.899993999999992,72.144440000000031],[-94.868057000000022,72.145538000000101],[-94.752228000000002,72.153320000000065],[-94.760833999999932,72.15498400000007],[-94.80610699999994,72.15914900000007],[-94.839171999999905,72.158599999999979],[-94.961394999999982,72.155258000000003],[-95.027495999999985,72.14498900000001],[-95.12110899999999,72.136658000000068],[-95.139998999999932,72.135544000000095],[-95.158889999999985,72.135818000000029],[-95.171111999999937,72.139159999999947],[-95.206664999999987,72.180817000000047],[-95.211670000000026,72.187194999999974],[-95.213622999999984,72.193313999999987],[-95.214721999999938,72.200271999999984],[-95.214721999999938,72.20526099999995],[-95.203887999999893,72.221924000000058],[-95.191375999999991,72.2452550000001],[-95.171111999999937,72.283324999999991],[-95.133330999999885,72.46026599999999],[-95.200287000000003,72.524428999999998],[-95.226394999999968,72.53166200000004],[-95.283065999999906,72.535538000000088],[-95.316100999999946,72.539703000000088],[-95.321395999999993,72.546097000000145],[-95.344451999999933,72.58137499999998],[-95.346664000000033,72.587493999999992],[-95.345551,72.593322999999998],[-95.331679999999949,72.598328000000038],[-95.313323999999966,72.601089000000059],[-95.315826000000015,72.606368999999916],[-95.355559999999969,72.637771999999984],[-95.364440999999886,72.643326000000116],[-95.458617999999944,72.68220500000001],[-95.475554999999986,72.686371000000122],[-95.492766999999901,72.688034000000016],[-95.50556899999998,72.686371000000122],[-95.52555799999999,72.681656000000089],[-95.535827999999924,72.681366000000025],[-95.548614999999927,72.68220500000001],[-95.576110999999969,72.689971999999955],[-95.590560999999923,72.695525999999973],[-95.602218999999934,72.702208999999925],[-95.666106999999897,72.801376000000062],[-95.673614999999984,72.813873000000058],[-95.675551999999982,72.82499700000011],[-95.675277999999935,72.841094999999996],[-95.671936000000017,72.852478000000019],[-95.653885000000002,72.876923000000033],[-95.645844000000011,72.91276600000009],[-95.655563000000029,73.019989000000066],[-95.683318999999983,73.075821000000019],[-95.582503999999972,73.127762000000132],[-95.575012000000015,73.164993000000095],[-95.600540000000024,73.283905000000004],[-95.650832999999977,73.325272000000041],[-95.646666999999979,73.330826000000059],[-95.613616999999977,73.342758000000003],[-95.623610999999983,73.361099000000024],[-95.653610000000015,73.412490999999932],[-95.681670999999994,73.444138000000066],[-95.683884000000035,73.450272000000098],[-95.700287000000003,73.55386400000009],[-95.668364999999937,73.581787000000077],[-95.612563999999963,73.610976999999991],[-95.656059000000027,73.631866000000116],[-95.676085999999998,73.665061999999978],[-95.681945999999982,73.711928999999998],[-95.673049999999989,73.723312000000021],[-95.658889999999985,73.732482999999945],[-95.645844000000011,73.735535000000084],[-95.450835999999981,73.771103000000096],[-95.428329000000019,73.77276599999999],[-95.299727999999959,73.771103000000096],[-95.283614999999941,73.769149999999968],[-95.266402999999912,73.764160000000118],[-95.236938000000009,73.752212999999983],[-95.160278000000005,73.713042999999971],[-95.154723999999987,73.706940000000031],[-95.138335999999924,73.700821000000019],[-95.106948999999986,73.691925000000083],[-95.076401000000033,73.683318999999983],[-95.024170000000026,73.671646000000123],[-94.95666499999993,73.659149000000127],[-94.890563999999927,73.649155000000121],[-94.845550999999944,73.644150000000081],[-94.828613000000018,73.643051000000071],[-94.812209999999993,73.643326000000116],[-94.652221999999995,73.648605000000089],[-94.634170999999924,73.649429000000055],[-94.618056999999908,73.651382000000012],[-94.619155999999975,73.654434000000094],[-94.638061999999991,73.665817000000118],[-94.649445000000014,73.670821999999987],[-94.676392000000021,73.676650999999993],[-94.732773000000009,73.681366000000025],[-94.773055999999997,73.679977000000008],[-94.81471299999987,73.680817000000104],[-94.866104000000007,73.687195000000031],[-94.883330999999998,73.692200000000071],[-95.075561999999877,73.773315000000139],[-95.089172000000019,73.783325000000048],[-95.111937999999952,73.801086000000055],[-95.11610399999995,73.806641000000127],[-95.108046999999999,73.812195000000088],[-95.070847000000015,73.822768999999994],[-95.036666999999909,73.829436999999928],[-95.00556899999998,73.832489000000066],[-94.976668999999958,73.831100000000049],[-94.958054000000004,73.831940000000088],[-94.963332999999977,73.838318000000072],[-94.982497999999964,73.845534999999984],[-95.005004999999983,73.852767999999969],[-95.024445000000014,73.855255000000056],[-95.045546999999942,73.855545000000063],[-95.076675000000023,73.852477999999962],[-95.109160999999972,73.843597000000045],[-95.116393999999957,73.839157],[-95.127212999999927,73.825821000000076],[-95.136123999999938,73.823608000000092],[-95.154174999999952,73.823608000000092],[-95.263061999999991,73.862762000000032],[-95.304169000000002,73.8808140000001],[-95.311385999999914,73.885269000000108],[-95.323333999999932,73.89694199999991],[-95.327788999999882,73.90914900000007],[-95.329726999999991,73.919982999999945],[-95.326110999999969,73.944138000000009],[-95.324721999999952,73.952484000000084],[-95.319167999999877,73.964157000000114],[-95.298339999999996,73.980819999999994],[-95.245270000000005,74.010268999999994],[-95.227782999999988,74.014160000000061],[-95.220001000000025,74.014708999999982],[-95.192489999999964,74.008881000000088],[-95.174438000000009,74.008881000000088],[-95.040833000000021,74.026382000000012],[-94.90695199999999,74.047485000000108],[-94.850280999999995,74.058868000000132],[-94.80610699999994,74.068054000000075],[-94.787506000000008,74.072769000000108],[-94.755279999999914,74.087204000000042],[-94.745833999999945,74.092209000000082],[-94.732223999999974,74.095260999999994],[-94.618332000000009,74.090271000000143],[-94.460281000000009,74.094437000000028],[-94.436934999999949,74.095824999999934],[-94.42721599999993,74.100815000000011],[-94.421111999999994,74.105820000000051],[-94.412780999999995,74.115265000000136],[-94.406112999999948,74.118865999999969],[-94.392226999999991,74.121918000000107],[-94.217498999999975,74.131652999999972],[-94.177779999999927,74.1336060000001],[-94.093063000000029,74.136383000000023],[-93.992492999999911,74.138596000000007],[-93.951950000000011,74.138885000000073],[-93.914169000000015,74.136107999999979],[-93.90194699999995,74.133331000000112],[-93.758346999999958,74.096939000000134],[-93.761397999999986,74.129150000000038],[-93.759445000000028,74.139160000000118],[-93.754456000000005,74.144714000000079],[-93.730835000000013,74.154160000000047],[-93.690551999999968,74.162200999999982],[-93.641112999999962,74.167754999999943],[-93.583617999999888,74.170822000000044],[-93.515015000000005,74.173035000000027],[-93.431670999999994,74.172211000000061],[-93.327498999999989,74.169983000000116],[-93.243880999999988,74.164993000000038],[-93.028885000000002,74.149993999999992],[-92.979445999999996,74.145828000000108],[-92.796386999999982,74.124985000000038],[-92.638061999999877,74.103043000000127]],[[-98.657226999999978,74.29942299999999],[-98.746947999999975,74.298035000000084],[-98.810271999999941,74.298325000000091],[-98.831679999999949,74.299149000000057],[-98.859436000000017,74.301376000000118],[-98.86221299999994,74.302475000000129],[-98.864715999999987,74.304703000000075],[-98.863051999999982,74.307479999999998],[-98.857223999999974,74.311371000000065],[-98.752501999999936,74.334152000000074],[-98.718338000000017,74.336655000000007],[-98.630829000000006,74.34248400000007],[-98.616652999999985,74.341934000000037],[-98.585830999999985,74.338593000000003],[-98.573623999999938,74.334991000000002],[-98.535278000000005,74.328873000000101],[-98.521666999999979,74.324706999999989],[-98.511123999999995,74.318329000000006],[-98.515563999999927,74.314147999999932],[-98.525009000000011,74.31053200000008],[-98.568618999999899,74.304703000000075],[-98.657226999999978,74.29942299999999]],[[-120.14998600000001,74.272491000000059],[-119.86472300000003,74.237762000000032],[-119.84528399999999,74.235809000000074],[-119.79527299999995,74.234420999999998],[-119.72501399999993,74.233871000000136],[-119.60916099999997,74.233321999999987],[-119.63971699999996,74.193039000000113],[-119.65139799999997,74.181655999999919],[-119.67250099999995,74.165817000000004],[-119.69082599999996,74.156936999999971],[-119.70249899999999,74.153046000000074],[-119.72305299999994,74.144714000000079],[-119.79415899999998,74.115265000000136],[-119.80332900000002,74.110535000000084],[-119.82417299999992,74.094711000000132],[-119.833618,74.082763999999997],[-119.83612099999999,74.075821000000019],[-119.83277900000002,74.064147999999989],[-119.82721699999991,74.05914300000012],[-119.77916699999997,74.033875000000023],[-119.76806599999986,74.030273000000079],[-119.74481199999997,74.025513000000046],[-119.72860699999995,74.02915999999999],[-119.72609699999992,74.035812000000078],[-119.72638699999993,74.041931000000091],[-119.73777799999999,74.058029000000147],[-119.650284,74.118590999999981],[-119.51000999999991,74.209152000000017],[-119.50083899999998,74.213882000000012],[-119.48916599999995,74.217483999999956],[-119.46528599999994,74.221100000000035],[-119.44972199999995,74.221924000000001],[-119.25723299999999,74.218323000000112],[-119.18472300000002,74.216933999999924],[-119.16528299999987,74.214995999999985],[-119.14862099999999,74.212204000000099],[-119.137787,74.208603000000039],[-119.12110899999993,74.199707000000103],[-119.11554699999999,74.194977000000051],[-119.10193600000002,74.179428000000144],[-119.09638999999999,74.168319999999994],[-119.09084300000001,74.156936999999971],[-119.07055700000001,74.114700000000084],[-119.06527699999998,74.103317000000061],[-119.07084699999996,74.089980999999966],[-119.08084099999996,74.077773999999977],[-119.08805799999999,74.072769000000108],[-119.10166900000002,74.069716999999969],[-119.11972000000003,74.068054000000075],[-119.14723199999997,74.062195000000031],[-119.15222199999994,74.056091000000038],[-119.18720999999999,73.994141000000127],[-119.18720999999999,73.987762000000089],[-119.16750299999995,73.987198000000149],[-118.98889200000002,73.998032000000023],[-118.97305299999999,74.000274999999988],[-118.96362299999993,74.004990000000021],[-118.80777,74.090546000000131],[-118.80055199999998,74.095824999999934],[-118.79028299999993,74.10775799999999],[-118.78751399999999,74.114700000000084],[-118.79277000000002,74.125809000000004],[-118.79804999999999,74.130814000000044],[-118.80695299999996,74.133880999999974],[-118.82333399999999,74.136383000000023],[-118.83693699999992,74.139435000000105],[-118.84805299999994,74.143326000000002],[-118.86721799999998,74.151382000000069],[-118.88333099999994,74.166382000000056],[-118.88612399999994,74.171921000000054],[-118.88110399999999,74.178040000000067],[-118.84388699999994,74.188309000000118],[-118.72000100000002,74.212768999999923],[-118.67388899999997,74.219986000000063],[-118.60722399999997,74.228317000000118],[-118.50583599999999,74.239974999999959],[-118.17999299999991,74.272217000000126],[-118.12249799999995,74.275818000000015],[-118.10193600000002,74.276382000000126],[-118.031387,74.275269000000094],[-117.97361799999999,74.269150000000025],[-117.91860999999989,74.262207000000046],[-117.62832599999996,74.244980000000055],[-117.51251199999996,74.238585999999998],[-117.43859900000001,74.22943099999992],[-117.422234,74.226929000000041],[-117.37609899999995,74.218323000000112],[-117.28943599999997,74.199707000000103],[-117.15722700000003,74.167754999999943],[-116.82833899999997,74.072495000000004],[-116.78500400000001,74.059708000000001],[-116.735817,74.039703000000145],[-116.62249799999989,73.990814],[-116.52806099999998,73.949706999999989],[-116.441101,73.913605000000018],[-116.34805299999999,73.875534000000016],[-116.33805799999999,73.87164300000012],[-116.32778899999988,73.867752000000053],[-116.31471299999993,73.864426000000037],[-116.29888900000003,73.861649000000114],[-116.20805399999995,73.838318000000072],[-116.05583199999995,73.792755000000113],[-116.00556899999998,73.773315000000139],[-115.97638699999999,73.755554000000018],[-115.91443599999997,73.726379000000122],[-115.89444699999996,73.718596999999988],[-115.817497,73.698318000000029],[-115.603882,73.652205999999978],[-115.40222199999999,73.568329000000006],[-115.36694299999999,73.545822000000101],[-115.34889199999998,73.531937000000028],[-115.33194700000001,73.511658000000068],[-115.31500199999999,73.479705999999908],[-115.32305899999994,73.474426000000051],[-115.449432,73.426651000000049],[-115.46140300000002,73.42303499999997],[-115.69943199999989,73.368866000000139],[-115.83473199999997,73.33998100000008],[-115.862213,73.334427000000119],[-116.26750199999998,73.273041000000148],[-116.33556399999998,73.267211999999915],[-116.37249800000001,73.265549000000021],[-116.42500299999995,73.261658000000125],[-116.45612299999993,73.257492000000013],[-116.46945199999999,73.254715000000147],[-116.69304699999992,73.203873000000044],[-116.80943299999996,73.168045000000006],[-116.94803599999995,73.124985000000038],[-117.02639799999997,73.106934000000024],[-117.16915899999998,73.081940000000088],[-117.39388999999994,73.048598999999911],[-117.42639200000002,73.044983000000059],[-117.46610999999996,73.03637700000013],[-117.708054,72.977768000000083],[-117.83667000000003,72.938583000000108],[-117.891953,72.919983000000002],[-117.925003,72.908875000000023],[-117.97501399999993,72.896378000000027],[-118.01611300000002,72.888321000000019],[-118.11527999999993,72.870818999999983],[-118.21806300000003,72.854705999999965],[-118.27362099999999,72.844436999999914],[-118.314438,72.836104999999918],[-118.36609599999997,72.824432000000115],[-118.38999899999993,72.817764000000125],[-118.44444299999998,72.798874000000012],[-118.45333900000003,72.794434000000138],[-118.46000700000002,72.78915400000011],[-118.46472199999994,72.783325000000104],[-118.48528299999992,72.767487000000074],[-118.49610899999999,72.763610999999969],[-118.53472899999991,72.754715000000033],[-118.54943799999995,72.752487000000087],[-118.58528100000001,72.750275000000045],[-118.65805099999994,72.74803200000008],[-118.70861799999994,72.743590999999981],[-118.75306699999999,72.73692299999999],[-118.77861000000001,72.731093999999985],[-119.11444099999994,72.639435000000049],[-119.1375119999999,72.632477000000051],[-119.15888999999999,72.624984999999981],[-119.16750299999995,72.620529000000033],[-119.30943300000001,72.438873000000058],[-119.3163909999999,72.425812000000121],[-119.33000199999987,72.394149999999968],[-119.33249699999999,72.387206999999989],[-119.33000199999987,72.381653000000142],[-119.32501200000002,72.376648000000102],[-119.30999800000001,72.368042000000003],[-119.30277999999993,72.363037000000134],[-119.30248999999998,72.356644000000017],[-119.31111099999993,72.352203000000088],[-119.40444899999994,72.325545999999974],[-119.429169,72.319716999999969],[-119.51555599999989,72.305817000000104],[-119.62666300000001,72.278320000000122],[-119.65750099999991,72.267211999999972],[-119.67804699999999,72.259430000000009],[-119.760559,72.228867000000037],[-119.80139200000002,72.22137500000008],[-119.837784,72.219711000000075],[-119.97250399999996,72.221100000000092],[-120.12372599999998,72.232597000000112],[-120.13405599999999,72.233756999999969],[-120.13871799999998,72.236420000000066],[-120.13621499999994,72.239929000000132],[-120.12888299999992,72.241928000000144],[-120.14362299999993,72.2494200000001],[-120.12943999999999,72.251663000000065],[-120.12721299999993,72.258606000000043],[-120.12999000000002,72.264160000000061],[-120.13999899999993,72.267761000000064],[-120.15750099999997,72.269714000000022],[-120.17582699999997,72.268875000000094],[-120.24109599999997,72.26249700000011],[-120.25110599999999,72.258606000000043],[-120.25945299999995,72.246643000000006],[-120.26139799999987,72.239700000000028],[-120.25862099999995,72.23414600000001],[-120.23144500000001,72.214812999999992],[-120.225281,72.212479000000144],[-120.21028899999999,72.20881700000001],[-120.19810499999994,72.204322999999988],[-120.18894999999998,72.199150000000088],[-120.18578299999996,72.196151999999984],[-120.14527900000002,72.149994000000049],[-120.14499699999993,72.143599999999992],[-120.17582699999997,72.094437000000084],[-120.19415299999997,72.078323000000125],[-120.30526699999996,72.013046000000088],[-120.329453,71.999146000000053],[-120.34750399999996,71.990814000000057],[-120.38362100000001,71.981658999999979],[-120.41332999999986,71.971374999999966],[-120.423317,71.96748400000007],[-120.43916299999989,71.958328000000108],[-120.445267,71.953048999999965],[-120.4491579999999,71.946930000000123],[-120.45278899999994,71.934707999999944],[-120.45249899999993,71.927765000000136],[-120.44972200000001,71.922210999999947],[-120.439438,71.912201000000039],[-120.43167099999994,71.908034999999984],[-120.391953,71.893051000000071],[-120.38445300000001,71.888885000000016],[-120.37917299999998,71.883881000000031],[-120.38082900000001,71.87831099999994],[-120.41500899999994,71.776382000000126],[-120.42278299999998,71.764160000000118],[-120.42471299999994,71.757216999999969],[-120.42639199999996,71.74443100000002],[-120.423607,71.738875999999948],[-120.41332999999986,71.72886699999998],[-120.40805099999994,71.723877000000073],[-120.40055799999993,71.719437000000084],[-120.37998999999996,71.699707000000046],[-120.37748699999992,71.694138000000066],[-120.37693799999994,71.688034000000073],[-120.38082900000001,71.681931000000077],[-120.43611099999998,71.611922999999933],[-120.47305299999999,71.565536000000066],[-120.49665799999997,71.544144000000017],[-120.54332699999992,71.516662999999994],[-120.60166900000002,71.493591000000038],[-120.63639799999999,71.485535000000141],[-120.78028899999998,71.457214000000079],[-120.80750299999988,71.452484000000027],[-120.87721299999998,71.441360000000145],[-120.921944,71.435532000000023],[-121.13333099999994,71.409424000000058],[-121.33249699999993,71.386932000000002],[-121.39444700000001,71.380264000000011],[-121.42916899999994,71.378311000000053],[-121.44833399999999,71.379425000000026],[-121.59056099999998,71.396378000000141],[-121.60305799999998,71.399428999999998],[-121.59137699999991,71.402771000000087],[-121.57611099999997,71.404434000000037],[-121.54915599999993,71.40914900000007],[-121.53751399999999,71.412490999999989],[-121.53195199999993,71.417755],[-121.52861000000001,71.423874000000012],[-121.531677,71.429427999999973],[-121.53694200000001,71.434418000000051],[-121.54998799999993,71.443588000000091],[-121.56973299999999,71.451660000000061],[-121.59638999999999,71.456940000000145],[-121.63027999999991,71.460540999999978],[-121.66860999999994,71.46276899999998],[-121.70361300000002,71.460815000000139],[-121.74388099999999,71.453323000000012],[-121.75556899999998,71.450271999999984],[-121.77639799999997,71.443038999999942],[-121.81220999999994,71.426651000000106],[-121.82917800000001,71.418319999999994],[-121.84612299999998,71.409714000000065],[-121.90194700000001,71.378586000000098],[-121.96528599999999,71.34275800000006],[-122.07501199999996,71.286926000000051],[-122.12165799999991,71.267211999999972],[-122.14417300000002,71.260817999999915],[-122.21056399999986,71.24832200000003],[-122.25446299999999,71.242477000000122],[-122.29833999999994,71.236374000000012],[-122.35526999999996,71.227768000000083],[-122.43028299999997,71.214157000000114],[-122.50556899999992,71.197754000000032],[-122.593887,71.178040000000124],[-122.60500299999995,71.174988000000042],[-122.61638600000003,71.171646000000067],[-122.64584400000001,71.160538000000088],[-122.66221599999994,71.151931999999988],[-122.67832900000002,71.143326000000059],[-122.7069469999999,71.124420000000043],[-122.74249299999997,71.101089000000002],[-122.76999699999988,71.089157000000057],[-122.781113,71.086104999999918],[-122.79611199999988,71.084152000000017],[-122.84944199999995,71.0816650000001],[-123.07611099999986,71.079163000000051],[-123.09500099999997,71.079987000000017],[-123.1260989999999,71.083878000000084],[-123.162781,71.092758000000117],[-123.22332799999998,71.114150999999993],[-123.25945300000001,71.129700000000128],[-123.29305999999985,71.146102999999982],[-123.31696299999999,71.158599999999979],[-123.37027,71.188873000000115],[-123.3952789999999,71.207763999999941],[-123.42999299999997,71.236923000000104],[-123.44860799999998,71.257767000000115],[-123.46640000000002,71.285537999999974],[-123.51390099999998,71.349152000000061],[-123.56696299999993,71.406096999999932],[-123.63417099999992,71.472487999999942],[-123.66583299999996,71.496368000000132],[-123.67971799999998,71.505264000000068],[-123.84388699999994,71.583328000000108],[-123.88722200000001,71.623595999999964],[-123.89917000000003,71.633041000000048],[-123.94888299999997,71.658325000000048],[-123.97582999999997,71.670258000000103],[-124.01334400000002,71.685806000000071],[-124.02390300000002,71.689148000000046],[-124.07055700000001,71.701935000000049],[-124.11138900000003,71.709991000000116],[-124.13694800000002,71.714432000000045],[-124.38474299999996,71.75471500000009],[-124.458054,71.76638800000012],[-124.609734,71.788040000000137],[-124.65278599999994,71.79525799999999],[-124.67887899999999,71.800812000000121],[-124.700287,71.806366000000139],[-124.83194700000001,71.840820000000008],[-124.86665299999993,71.85054000000008],[-125.07694999999995,71.909149000000127],[-125.16000400000001,71.924683000000073],[-125.23638900000003,71.941910000000064],[-125.24722300000002,71.945511000000124],[-125.25361599999997,71.950255999999968],[-125.24472000000003,71.954422000000079],[-125.04804999999999,71.955536000000052],[-124.98029300000002,71.943587999999977],[-124.96945199999999,71.939972000000125],[-124.95388800000001,71.938034000000016],[-124.94275699999997,71.939972000000125],[-124.93804899999998,71.945525999999916],[-124.93554699999999,71.951659999999947],[-124.93971299999998,71.956940000000031],[-124.94833399999999,71.961105000000032],[-124.98777799999999,71.969711000000132],[-125.02278100000001,71.972504000000129],[-125.23277300000001,71.975524999999948],[-125.35221899999999,71.97468600000002],[-125.41639700000002,71.974135999999987],[-125.47833300000002,71.972763000000043],[-125.59111000000001,71.966385000000116],[-125.62666299999995,71.963608000000022],[-125.68639399999995,71.954987000000074],[-125.72165699999994,71.952209000000096],[-125.76139799999993,71.950821000000019],[-125.80139199999996,71.952209000000096],[-125.93582199999992,71.958602999999982],[-125.97361799999999,71.960541000000092],[-125.984444,71.963882000000126],[-125.99333200000001,71.96804800000001],[-125.997772,71.973602000000028],[-125.99333200000001,71.978867000000093],[-125.97778299999999,71.979706000000022],[-125.966949,71.976379000000122],[-125.90055799999999,71.962494000000049],[-125.88054699999992,71.963318000000015],[-125.84973099999991,71.967209000000082],[-125.80999799999995,71.975540000000137],[-125.787781,71.982208000000128],[-125.77887699999991,71.986374000000012],[-125.765289,71.996094000000085],[-125.75418100000002,72.006103999999993],[-125.74082899999996,72.022751000000028],[-125.73388699999998,72.034133999999995],[-125.724716,72.051926000000094],[-125.71777299999985,72.070540999999992],[-125.71528599999994,72.083603000000039],[-125.71528599999994,72.090270999999973],[-125.71749899999992,72.096375000000023],[-125.72165699999994,72.101929000000041],[-125.72833299999996,72.106644000000074],[-125.73944099999989,72.110260000000096],[-125.71444700000001,72.157485999999949],[-125.57389799999993,72.247467000000142],[-125.51445000000001,72.291076999999973],[-125.46777299999997,72.351074000000096],[-125.43221999999997,72.403580000000034],[-125.43666099999996,72.409134000000051],[-125.30055199999993,72.483307000000025],[-125.29110699999995,72.487183000000073],[-125.27971600000001,72.490524000000107],[-125.25787399999996,72.495125000000144],[-125.247772,72.49523899999997],[-125.17194399999994,72.513596000000064],[-125.1394499999999,72.524138999999991],[-125.02806099999998,72.566071000000079],[-125,72.605254999999943],[-124.94055199999997,72.70248400000014],[-124.97193899999991,72.755829000000006],[-125.02610800000002,72.821091000000081],[-124.95916699999998,72.856369000000086],[-124.89334100000002,72.873871000000122],[-124.87917299999998,72.876373000000001],[-124.801941,72.887497000000053],[-124.76695299999994,72.890823000000125],[-124.72749299999987,72.888596000000064],[-124.68804899999986,72.887497000000053],[-124.66944899999993,72.888884999999959],[-124.63667299999997,72.892761000000064],[-124.60611,72.897216999999955],[-124.591949,72.899994000000049],[-124.49722300000002,72.919707999999957],[-124.48554999999999,72.923035000000084],[-124.47582999999997,72.927200000000084],[-124.47305299999999,72.933318999999926],[-124.49305700000002,72.97164900000007],[-124.49722300000002,72.977203000000031],[-124.62138399999992,73.001389000000131],[-124.71250899999995,73.003876000000048],[-124.72609699999998,73.006653000000142],[-124.73777799999999,73.010268999999994],[-124.76972999999992,73.021378000000084],[-124.82417299999992,73.046097000000032],[-124.83332799999994,73.050262000000032],[-124.84916699999997,73.059417999999994],[-124.862503,73.068878000000041],[-124.86694299999994,73.074432000000058],[-124.86888099999999,73.080551000000071],[-124.86389200000002,73.086105000000089],[-124.79472399999992,73.134720000000129],[-124.78500400000001,73.13888500000013],[-124.71362299999987,73.149428999999998],[-124.59916699999985,73.227768000000026],[-124.58640299999996,73.238037000000077],[-124.57389799999993,73.248321999999973],[-124.56360599999988,73.259155000000135],[-124.50805699999995,73.32638500000013],[-124.44583099999994,73.411102000000142],[-124.44055199999997,73.416655999999932],[-124.43306000000001,73.421370999999965],[-124.40556299999997,73.434143000000006],[-124.30555699999991,73.478592000000106],[-124.29332699999998,73.481659000000036],[-124.252228,73.483596999999975],[-124.22833300000002,73.483321999999987],[-124.20916699999998,73.481659000000036],[-124.18998699999997,73.481659000000036],[-124.17304999999999,73.483596999999975],[-124.16055299999999,73.486923000000047],[-124.07000699999998,73.546097000000088],[-124.041946,73.582214000000079],[-124.03888699999993,73.586929000000112],[-124.07167099999998,73.61775200000011],[-124.0786129999999,73.622756999999979],[-124.07611099999991,73.643051000000071],[-124.073059,73.649155000000121],[-124.06777999999991,73.654709000000139],[-124.05526700000001,73.658034999999984],[-123.94554099999993,73.681656000000032],[-123.86138899999997,73.695815999999979],[-123.83389299999999,73.700272000000041],[-123.774719,73.764435000000105],[-123.80471799999987,73.796936000000017],[-123.83833300000003,73.821106000000043],[-123.84777800000001,73.825271999999927],[-123.93639399999995,73.840546000000018],[-123.95834399999995,73.841369999999984],[-123.98055999999991,73.840820000000122],[-124.01999699999999,73.838318000000072],[-124.06639100000001,73.839432000000045],[-124.08583099999998,73.841094999999996],[-124.13417099999992,73.848327999999981],[-124.16306299999985,73.854156000000103],[-124.19860799999992,73.864699999999971],[-124.21749899999986,73.872757000000092],[-124.36860699999988,74.014435000000049],[-124.41166699999991,74.056366000000025],[-124.42666600000001,74.109711000000118],[-124.43415800000002,74.134430000000066],[-124.600281,74.268326000000059],[-124.61805699999996,74.26638800000012],[-124.66082799999992,74.264708999999925],[-124.68083200000001,74.266098000000113],[-124.69304699999986,74.269440000000031],[-124.77500900000001,74.319152999999972],[-124.78415699999999,74.329987000000074],[-124.781387,74.336104999999975],[-124.77084400000001,74.340271000000087],[-124.75556899999992,74.342758000000003],[-124.69722000000002,74.347214000000065],[-124.40471600000001,74.369141000000127],[-124.10861199999999,74.392761000000121],[-123.89527899999996,74.396378000000084],[-123.85694899999987,74.399429000000112],[-123.676941,74.418320000000108],[-123.63834399999996,74.421371000000136],[-123.57444800000002,74.424149000000114],[-123.41887700000001,74.428314000000114],[-123.20584100000002,74.443039000000056],[-123.02250700000002,74.444702000000007],[-122.68998699999992,74.453872999999987],[-122.43804899999998,74.464995999999928],[-122.33750900000001,74.471099999999979],[-122.118607,74.49192800000003],[-122.06610099999995,74.49803200000008],[-121.93859900000001,74.518326000000002],[-121.76666299999999,74.539703000000031],[-121.73000299999995,74.543319999999994],[-121.65194699999995,74.548598999999967],[-121.61028299999992,74.550537000000134],[-121.56416300000001,74.551086000000055],[-121.51862299999993,74.548874000000012],[-121.31082200000003,74.531661999999983],[-121.25361599999997,74.525818000000129],[-121.13612399999994,74.506943000000035],[-121.08389299999993,74.493590999999981],[-121.05777,74.486649000000057],[-121.01112399999988,74.472214000000122],[-121.00222799999995,74.46775800000006],[-120.98998999999998,74.458037999999988],[-120.98055999999991,74.447479000000101],[-120.97693599999991,74.441925000000083],[-120.97556299999991,74.429703000000131],[-120.90638699999994,74.415268000000026],[-120.70584100000002,74.373596000000134],[-120.48166700000002,74.329987000000074],[-120.21721599999989,74.282486000000006],[-120.14998600000001,74.272491000000059]],[[-97.652785999999992,74.455826000000059],[-97.675551999999982,74.454987000000131],[-97.691939999999988,74.455261000000064],[-97.708892999999989,74.457214000000022],[-97.777221999999995,74.476379000000122],[-97.789444000000003,74.479980000000012],[-97.792495999999915,74.485809000000017],[-97.781386999999995,74.497208000000114],[-97.768616000000009,74.508041000000105],[-97.761672999999917,74.512496999999996],[-97.753890999999953,74.515548999999965],[-97.618057000000022,74.552200000000028],[-97.532227000000034,74.606369000000086],[-97.513625999999988,74.611374000000126],[-97.470001000000025,74.621094000000028],[-97.445830999999998,74.626082999999994],[-97.422774999999945,74.629424999999912],[-97.406951999999933,74.62831100000011],[-97.389724999999999,74.626373000000001],[-97.368056999999965,74.622756999999979],[-97.357772999999952,74.621368000000132],[-97.291381999999942,74.605255000000113],[-97.267226999999934,74.597214000000008],[-97.261672999999917,74.594711000000075],[-97.256957999999997,74.590546000000074],[-97.261948000000018,74.583878000000084],[-97.299987999999871,74.551376000000062],[-97.376098999999954,74.511658000000068],[-97.387511999999958,74.506377999999984],[-97.606383999999991,74.461929000000055],[-97.652785999999992,74.455826000000059]],[[-95.311110999999983,74.497757000000092],[-95.331389999999999,74.496093999999971],[-95.353332999999964,74.496368000000075],[-95.458892999999989,74.49859600000002],[-95.480559999999912,74.5],[-95.522781000000009,74.504990000000078],[-95.603057999999919,74.515548999999965],[-95.661666999999966,74.523605000000032],[-95.697768999999937,74.529709000000025],[-95.71665999999999,74.533874999999966],[-95.809432999999956,74.554427999999973],[-95.845000999999968,74.563873000000058],[-95.862212999999997,74.56999200000007],[-95.866394000000014,74.574158000000011],[-95.860549999999989,74.579163000000051],[-95.857497999999964,74.580551000000128],[-95.682495000000017,74.634995000000004],[-95.653885000000002,74.642211999999915],[-95.638061999999991,74.643326000000116],[-95.624161000000015,74.641662999999994],[-95.628601000000003,74.640823000000125],[-95.517501999999922,74.630264000000068],[-95.497498000000007,74.627197000000137],[-95.441101000000003,74.613876000000005],[-95.403609999999958,74.603316999999947],[-95.334441999999967,74.580825999999945],[-95.317779999999971,74.573883000000137],[-95.291945999999939,74.560257000000036],[-95.260283999999956,74.540543000000071],[-95.25111400000003,74.53414900000007],[-95.244995000000017,74.527771000000087],[-95.246383999999978,74.521652000000074],[-95.25111400000003,74.516098000000056],[-95.259170999999981,74.510544000000095],[-95.271117999999944,74.505554000000018],[-95.289443999999946,74.501389000000017],[-95.311110999999983,74.497757000000092]],[[-97.175827000000027,75.24414100000007],[-97.194442999999978,75.242752000000053],[-97.216110000000015,75.24470500000001],[-97.225006000000008,75.24803199999991],[-97.231948999999929,75.254440000000045],[-97.27806099999998,75.343597000000102],[-97.275283999999999,75.347487999999998],[-97.258056999999951,75.349426000000108],[-97.208617999999944,75.342209000000025],[-97.190551999999968,75.33526599999999],[-97.161666999999852,75.322220000000073],[-97.153060999999923,75.315262000000075],[-97.148894999999925,75.297760000000039],[-97.146956999999986,75.27998400000007],[-97.147507000000019,75.273880000000077],[-97.155838000000017,75.255264000000011],[-97.161666999999852,75.250000000000057],[-97.175827000000027,75.24414100000007]],[[-103.9175029999999,75.054977000000008],[-104.22917199999995,75.018051000000071],[-104.261124,75.018326000000116],[-104.45944199999991,75.028869999999984],[-104.662216,75.062485000000038],[-104.84722899999991,75.109146000000067],[-104.85722399999992,75.164703000000031],[-104.82000699999998,75.177765000000022],[-104.79998799999998,75.189423000000033],[-104.79305999999997,75.194702000000063],[-104.74472000000003,75.246093999999971],[-104.76862299999999,75.281937000000028],[-104.71083099999993,75.322220000000073],[-104.68222000000003,75.33776899999998],[-104.67360699999995,75.341660000000047],[-104.49722299999996,75.406372000000033],[-104.42804699999994,75.420821999999987],[-104.37777699999998,75.42804000000001],[-104.33000199999992,75.433043999999938],[-104.18222000000003,75.435531999999967],[-104.15177900000003,75.434555000000103],[-104.11416600000001,75.430267000000072],[-103.97112299999998,75.404434000000094],[-103.953056,75.399994000000106],[-103.935272,75.394989000000066],[-103.84805299999999,75.364990000000034],[-103.81054699999993,75.348602000000142],[-103.74166899999994,75.286102000000028],[-103.587219,75.169983000000059],[-103.58306899999997,75.164703000000031],[-103.59028599999999,75.159424000000058],[-103.60888699999992,75.149155000000007],[-103.7302929999999,75.099990999999989],[-103.76390100000003,75.088882000000126],[-103.79943799999995,75.077484000000084],[-103.81777999999997,75.072494999999947],[-103.88999899999999,75.058318999999983],[-103.9175029999999,75.054977000000008]],[[-100.17223399999995,75.601379000000009],[-100.15722700000003,75.589432000000045],[-100.15778399999994,75.584991000000116],[-100.17639200000002,75.57998699999996],[-100.23332199999993,75.569153000000085],[-100.383331,75.553588999999988],[-100.45417800000001,75.546371000000022],[-100.47972099999993,75.545822000000044],[-100.47556299999997,75.549987999999985],[-100.45749699999999,75.554152999999985],[-100.43195299999991,75.55831900000004],[-100.40666199999987,75.561370999999951],[-100.36110699999995,75.565535999999952],[-100.31777999999986,75.573043999999982],[-100.30332900000002,75.577484000000027],[-100.29361,75.584427000000005],[-100.30332900000002,75.58859300000006],[-100.31973299999999,75.590820000000122],[-100.33917199999996,75.591369999999984],[-100.36332699999997,75.59027100000003],[-100.52778599999994,75.577208999999982],[-100.74973299999994,75.558029000000033],[-100.86527999999998,75.547211000000061],[-100.88555899999994,75.545822000000044],[-100.90862300000003,75.546371000000022],[-100.950287,75.549713000000111],[-100.99445300000002,75.554977000000122],[-101.02333099999993,75.559981999999991],[-101.03333299999997,75.563034000000073],[-101.03943600000002,75.567215000000147],[-101.02583299999998,75.570540999999992],[-100.84277299999991,75.586929000000055],[-100.70249899999993,75.588882000000012],[-100.68055699999996,75.589432000000045],[-100.65583800000002,75.59165999999999],[-100.64167800000001,75.596100000000035],[-100.62027,75.606094000000041],[-100.59861799999999,75.610259999999926],[-100.51112399999994,75.61914100000007],[-100.39444700000001,75.623031999999967],[-100.27639799999997,75.623031999999967],[-100.23500099999995,75.623031999999967],[-100.21777299999997,75.621917999999994],[-100.204453,75.617477000000065],[-100.19499200000001,75.613312000000064],[-100.17223399999995,75.601379000000009]],[[-94.363892000000021,75.590820000000122],[-94.326950000000011,75.579711999999972],[-94.243880999999931,75.549713000000111],[-94.205275999999913,75.529709000000025],[-94.010283999999956,75.442200000000071],[-93.989715999999987,75.434982000000105],[-93.839721999999938,75.388046000000031],[-93.742492999999968,75.364426000000094],[-93.499160999999958,75.264709000000096],[-93.487502999999947,75.256653000000028],[-93.493331999999953,75.247207999999944],[-93.529175000000009,75.176376000000062],[-93.488892000000021,75.072494999999947],[-93.434157999999968,74.966385000000002],[-93.406386999999995,74.883605999999986],[-93.458053999999947,74.714996000000099],[-93.462508999999955,74.708602999999925],[-93.467772999999966,74.703048999999965],[-93.484726000000023,74.687759000000142],[-93.49610899999999,74.68193100000002],[-93.530563000000029,74.667755000000056],[-93.563323999999966,74.659424000000115],[-93.691665999999941,74.63998400000014],[-93.717223999999874,74.636932000000058],[-93.741378999999995,74.635543999999982],[-94.040282999999988,74.640823000000125],[-94.249999999999886,74.646378000000027],[-94.388061999999991,74.635269000000108],[-94.471114999999884,74.626648000000046],[-94.511947999999961,74.623306000000071],[-94.547500999999897,74.621368000000132],[-94.643340999999964,74.623596000000077],[-94.687774999999931,74.62831100000011],[-95.024718999999948,74.673035000000084],[-95.080001999999979,74.680817000000047],[-95.085830999999985,74.687195000000031],[-95.076949999999954,74.697479000000044],[-95.072783999999956,74.702209000000096],[-95.104445999999996,74.744141000000127],[-95.266402999999912,74.793319999999937],[-95.283324999999991,74.79803499999997],[-95.298339999999996,74.800262000000032],[-95.403335999999911,74.803863999999976],[-95.434158000000025,74.801376000000005],[-95.457503999999972,74.798324999999977],[-95.479172000000005,74.78804000000008],[-95.483062999999902,74.783325000000048],[-95.482772999999952,74.779433999999981],[-95.475554999999986,74.769989000000066],[-95.462219000000005,74.756653000000142],[-95.547226000000023,74.761107999999979],[-95.625823999999909,74.807480000000055],[-95.705565999999976,74.829987000000131],[-95.740828999999906,74.82388300000008],[-95.771392999999932,74.823608000000092],[-95.864166000000012,74.826096000000064],[-95.959473000000003,74.856369000000029],[-96.002501999999879,74.872757000000092],[-96.006667999999934,74.876923000000147],[-96.077224999999942,74.902771000000087],[-96.135283999999899,74.951096000000121],[-96.141678000000013,74.957214000000079],[-96.136948000000018,74.963043000000084],[-96.124709999999936,74.975815000000068],[-96.094726999999978,74.991364000000033],[-96.070847000000015,75.001938000000052],[-96.056380999999988,75.010268999999937],[-96.055557000000022,75.016097999999943],[-96.060546999999985,75.019440000000088],[-96.07417299999986,75.023605000000089],[-96.083068999999966,75.024429000000055],[-96.142226999999991,75.017761000000064],[-96.147507000000019,75.013611000000083],[-96.200835999999924,74.954712000000029],[-96.203339000000028,74.951660000000061],[-96.20666499999993,74.943038999999999],[-96.203887999999949,74.93691999999993],[-96.205840999999964,74.92025799999999],[-96.209732000000031,74.915543000000127],[-96.221389999999985,74.910263000000043],[-96.247771999999884,74.90554800000001],[-96.268341000000021,74.903870000000097],[-96.31527699999998,74.90248100000008],[-96.337219000000005,74.903595000000053],[-96.357497999999964,74.906647000000021],[-96.373610999999983,74.910263000000043],[-96.387221999999952,74.914703000000088],[-96.396666999999923,74.919708000000128],[-96.40306099999998,74.925812000000121],[-96.386123999999995,74.97387700000013],[-96.357497999999964,74.97137500000008],[-96.341385000000002,74.972487999999998],[-96.328063999999983,74.974701000000096],[-96.320557000000008,74.979430999999977],[-96.318343999999968,74.982208000000071],[-96.322234999999864,75.001389000000074],[-96.331115999999895,75.004715000000147],[-96.476669000000015,75.004440000000102],[-96.500838999999928,75.002777000000037],[-96.523055999999997,74.999145999999939],[-96.533889999999985,74.994705000000067],[-96.55972300000002,74.986098999999967],[-96.580291999999986,74.98414600000001],[-96.599990999999989,74.983322000000044],[-96.614165999999955,74.984984999999938],[-96.616942999999992,74.991088999999988],[-96.604720999999984,75.063309000000004],[-96.571395999999936,75.101089000000115],[-96.463057999999933,75.19331399999993],[-96.456389999999999,75.196930000000009],[-96.378600999999946,75.21665999999999],[-96.077788999999996,75.272491000000059],[-95.948043999999982,75.283325000000104],[-95.922500999999954,75.286102000000028],[-95.903335999999911,75.289978000000076],[-95.910552999999936,75.29525799999999],[-95.934433000000013,75.297211000000118],[-95.978058000000033,75.298874000000012],[-96.026671999999962,75.299149000000057],[-96.049987999999928,75.296936000000073],[-96.061935000000005,75.315262000000075],[-96.003615999999965,75.343047999999953],[-95.932494999999903,75.353043000000071],[-95.934714999999983,75.350173999999981],[-95.93472300000002,75.347762999999986],[-95.919998000000021,75.34693900000002],[-95.890288999999996,75.349152000000004],[-95.887443999999959,75.360268000000133],[-95.83677699999987,75.369926000000021],[-95.830780000000004,75.371429000000035],[-95.829781000000025,75.372589000000119],[-95.83061199999986,75.374428000000023],[-95.832786999999939,75.375923000000114],[-95.848274000000004,75.378432999999973],[-95.906775999999979,75.387428000000057],[-95.927779999999871,75.398041000000148],[-96.033324999999934,75.40109300000006],[-96.055267000000015,75.400818000000072],[-96.078887999999893,75.396103000000039],[-96.079178000000013,75.391098],[-96.083618000000001,75.385543999999982],[-96.099730999999963,75.380264000000125],[-96.126099000000011,75.37692300000009],[-96.151108000000022,75.374984999999924],[-96.175277999999992,75.379424999999969],[-96.178878999999995,75.384430000000009],[-96.161941999999954,75.395537999999988],[-96.14973399999991,75.400818000000072],[-96.135009999999966,75.406372000000033],[-96.095839999999896,75.417755000000056],[-96.0625,75.424988000000099],[-95.974166999999966,75.436096000000077],[-95.958344000000011,75.436371000000065],[-95.93638599999997,75.43414300000012],[-95.874160999999958,75.423874000000069],[-95.831046999999955,75.41531400000008],[-95.832549999999969,75.413651000000129],[-95.83322099999998,75.409988000000112],[-95.831046999999955,75.406982000000085],[-95.825881999999979,75.403320000000122],[-95.814383999999961,75.400322000000074],[-95.769553999999857,75.400322000000074],[-95.691100999999946,75.40525800000006],[-95.682495000000017,75.408324999999991],[-95.676102000000014,75.415817000000118],[-95.678328999999962,75.421920999999998],[-95.68472300000002,75.428314000000114],[-95.691665999999998,75.429703000000131],[-95.715835999999911,75.429153000000099],[-95.734160999999915,75.426085999999998],[-95.758620999999948,75.42553700000002],[-95.781677000000002,75.42804000000001],[-95.800551999999925,75.431656000000032],[-95.825011999999958,75.439972000000125],[-95.830001999999922,75.4433140000001],[-95.836945000000014,75.453598000000113],[-95.83805799999999,75.459152000000074],[-95.835555999999997,75.464431999999988],[-95.832229999999981,75.470535000000098],[-95.824172999999973,75.477767999999912],[-95.800551999999925,75.49136400000009],[-95.762222000000008,75.508041000000048],[-95.749725000000012,75.513321000000133],[-95.470000999999968,75.566939999999988],[-95.275283999999942,75.599426000000051],[-95.264175000000023,75.59387200000009],[-95.234436000000017,75.584717000000012],[-95.212783999999999,75.582489000000066],[-95.178604000000007,75.584427000000005],[-95.12470999999988,75.59526100000005],[-95.104172000000005,75.60026600000009],[-95.093338000000017,75.603591999999992],[-95.085830999999985,75.607208000000014],[-95.084166999999979,75.609146000000123],[-95.075286999999946,75.614426000000037],[-95.063323999999909,75.618866000000025],[-95.044448999999872,75.62164300000012],[-94.917769999999962,75.637207000000046],[-94.901672000000019,75.637497000000053],[-94.741378999999938,75.62414600000011],[-94.559722999999963,75.612488000000099],[-94.511123999999995,75.611099000000081],[-94.46556099999998,75.608321999999987],[-94.404175000000009,75.599152000000117],[-94.363892000000021,75.590820000000122]],[[-95.910003999999901,75.560256999999979],[-95.911117999999988,75.554152999999985],[-95.93472300000002,75.540543000000071],[-96.170837000000006,75.458038000000101],[-96.220276000000013,75.455551000000071],[-96.238892000000021,75.456650000000025],[-96.255004999999983,75.461380000000077],[-96.399170000000026,75.516388000000063],[-96.417220999999984,75.523315000000139],[-96.42471299999994,75.528595000000053],[-96.450995999999975,75.529991000000052],[-96.441161999999963,75.535987999999975],[-96.415832999999907,75.543648000000132],[-96.412659000000019,75.546150000000011],[-96.411666999999909,75.548819999999978],[-96.417992000000027,75.552658000000065],[-96.431167999999957,75.555489000000023],[-96.441832999999974,75.555664000000093],[-96.450995999999975,75.553154000000063],[-96.503837999999917,75.535156000000029],[-96.507995999999935,75.532982000000118],[-96.518165999999951,75.526320999999996],[-96.525161999999909,75.519325000000038],[-96.553603999999893,75.508880999999917],[-96.552215999999987,75.503326000000015],[-96.549437999999896,75.497208000000114],[-96.545546999999999,75.492203000000075],[-96.541107000000011,75.488037000000134],[-96.533324999999934,75.48275799999999],[-96.517501999999922,75.478043000000127],[-96.503341999999975,75.471374999999966],[-96.500564999999995,75.464996000000099],[-96.50418099999996,75.460266000000104],[-96.511948000000018,75.455826000000059],[-96.65834000000001,75.388596000000064],[-96.833617999999944,75.352478000000019],[-96.851104999999905,75.350266000000147],[-96.862212999999997,75.350815000000125],[-96.876098999999954,75.353591999999992],[-96.93249499999996,75.376082999999994],[-97.030838000000017,75.454437000000041],[-97.053054999999915,75.492203000000075],[-97.053054999999915,75.497208000000114],[-97.006957999999941,75.508331000000112],[-96.940825999999959,75.521652000000017],[-96.913619999999923,75.526382000000069],[-96.891677999999956,75.529160000000047],[-96.666945999999996,75.552765000000022],[-96.469382999999993,75.588425000000029],[-96.466552999999919,75.591933999999924],[-96.467727999999909,75.599091000000044],[-96.470054999999888,75.602264000000048],[-96.422500999999954,75.623596000000077],[-96.424438000000009,75.635544000000095],[-96.415008999999941,75.646941999999967],[-96.396392999999989,75.649994000000049],[-96.379715000000033,75.651093000000003],[-96.347228999999913,75.651382000000126],[-96.335555999999997,75.650818000000015],[-96.314437999999996,75.647766000000104],[-96.241104000000007,75.629974000000061],[-96.133330999999941,75.606644000000074],[-96.115829000000019,75.60386699999998],[-96.101944000000003,75.603591999999992],[-96.025436000000013,75.602844000000061],[-95.95777899999996,75.583603000000039],[-95.938889000000017,75.577484000000027],[-95.923888999999974,75.571655000000021],[-95.916397000000018,75.566375999999991],[-95.910003999999901,75.560256999999979]],[[-96.954453000000001,75.595534999999984],[-96.975005999999894,75.594711000000018],[-96.996658000000025,75.597762999999929],[-97.005004999999983,75.604431000000091],[-97.001953000000015,75.610809000000074],[-96.988601999999958,75.618042000000059],[-96.978607000000011,75.623031999999967],[-96.960830999999985,75.627472000000125],[-96.779449,75.6602630000001],[-96.751952999999958,75.664703000000088],[-96.729720999999984,75.665267999999969],[-96.720551,75.66415399999994],[-96.715835999999967,75.659988000000055],[-96.718886999999995,75.653870000000097],[-96.722305000000006,75.652954000000022],[-96.740279999999927,75.646941999999967],[-96.849166999999966,75.613312000000064],[-96.954453000000001,75.595534999999984]],[[-96.579177999999899,75.736923000000104],[-96.696655000000021,75.730819999999994],[-96.710555999999997,75.733597000000088],[-96.717223999999987,75.739700000000028],[-96.67860399999995,75.777481000000023],[-96.666945999999996,75.786652000000117],[-96.660827999999981,75.789429000000041],[-96.541107000000011,75.822219999999959],[-96.525283999999942,75.826384999999959],[-96.507506999999976,75.828323000000125],[-96.48443599999996,75.827208999999925],[-96.468062999999916,75.822495000000004],[-96.455841000000021,75.817764000000068],[-96.457503999999972,75.801085999999998],[-96.459166999999979,75.789429000000041],[-96.539718999999991,75.74331699999999],[-96.553603999999893,75.738586000000055],[-96.579177999999899,75.736923000000104]],[[-111.79998799999998,75.839157],[-111.823624,75.83859300000006],[-111.86582899999996,75.840545999999961],[-111.900284,75.843596999999988],[-111.91722099999993,75.846939000000134],[-111.92250100000001,75.852767999999969],[-111.91972399999997,75.85775799999999],[-111.90139799999997,75.863876000000118],[-111.85665899999992,75.867751999999996],[-111.79972799999996,75.871093999999971],[-111.61305199999993,75.881927000000132],[-111.59528399999999,75.882751000000098],[-111.58306899999991,75.881927000000132],[-111.5786129999999,75.879974000000004],[-111.58194699999996,75.876083000000108],[-111.59306300000003,75.87303200000008],[-111.62917299999992,75.856934000000024],[-111.64806399999998,75.851928999999984],[-111.75695799999994,75.841659999999933],[-111.79998799999998,75.839157]],[[-122.34084300000001,75.862761999999975],[-122.36277799999999,75.858032000000094],[-122.39862099999993,75.859421000000111],[-122.66471899999993,75.89387499999998],[-122.69167299999998,75.900269000000037],[-122.69360399999999,75.902206000000035],[-122.69554099999993,75.908035000000041],[-122.68277,75.911652000000004],[-122.633331,75.919708000000071],[-122.58222999999998,75.921921000000054],[-122.53751399999993,75.922484999999995],[-122.37917299999992,75.915817000000004],[-122.35305800000003,75.914429000000098],[-122.337784,75.911377000000016],[-122.32833900000003,75.905822999999998],[-122.32417299999997,75.899719000000005],[-122.33473200000003,75.869141000000013],[-122.34084300000001,75.862761999999975]],[[-121.09306299999997,75.726089000000059],[-121.1100009999999,75.724700999999982],[-121.14306599999992,75.725815000000125],[-121.27555799999993,75.747481999999991],[-121.28832999999997,75.752777000000037],[-121.28582799999998,75.758881000000088],[-121.27194199999997,75.770537999999988],[-121.26306199999993,75.774154999999951],[-121.11694299999999,75.795821999999987],[-121.04332699999992,75.808868000000132],[-121.02944899999989,75.811371000000122],[-121.01917299999997,75.818054000000075],[-121.01500699999997,75.824707000000046],[-121.00083899999993,75.856644000000017],[-120.99833699999988,75.867751999999996],[-121.00695799999988,75.879700000000071],[-121.01363399999997,75.884720000000073],[-121.04222099999998,75.894149999999968],[-121.04750099999995,75.899993999999992],[-121.04250299999995,75.90554800000001],[-121.03859699999998,75.908325000000104],[-120.997772,75.926376000000062],[-120.98000300000001,75.929427999999973],[-120.87777699999998,75.936096000000134],[-120.86776700000001,75.924698000000149],[-120.86776700000001,75.913315000000125],[-120.86972000000003,75.881087999999977],[-120.87110899999993,75.87553400000013],[-120.88474300000001,75.844986000000006],[-120.89835399999998,75.825821000000019],[-120.92111199999999,75.803314000000114],[-120.93804899999998,75.790543000000014],[-120.99388099999993,75.757767000000115],[-121.01862299999993,75.744431000000134],[-121.03278399999994,75.737762000000089],[-121.05248999999992,75.732758000000103],[-121.09306299999997,75.726089000000059]],[[-95.792769999999962,75.899719000000005],[-95.809432999999956,75.894714000000135],[-95.818893000000003,75.907211000000075],[-95.825561999999991,75.913315000000125],[-95.847777999999892,75.929427999999973],[-95.862503000000004,75.936096000000134],[-95.882492000000013,75.941086000000041],[-95.896956999999986,75.947753999999975],[-95.899993999999992,75.953873000000044],[-95.890839000000028,75.959427000000005],[-95.860001000000011,75.966660000000047],[-95.796660999999972,75.973312000000078],[-95.770554000000004,75.974991000000102],[-95.746947999999918,75.97387700000013],[-95.73582499999992,75.968323000000112],[-95.736938000000009,75.962494000000106],[-95.751952999999958,75.927475000000072],[-95.761947999999961,75.916092000000049],[-95.779723999999931,75.90498400000007],[-95.792769999999962,75.899719000000005]],[[-94.405563000000029,75.75082400000008],[-94.582778999999903,75.74581900000004],[-94.629165999999998,75.746094000000085],[-94.676102000000014,75.747756999999979],[-94.72084000000001,75.753876000000048],[-94.739440999999999,75.75749200000007],[-94.777495999999928,75.768600000000049],[-94.795272999999952,75.775818000000072],[-94.809157999999968,75.782486000000063],[-94.822234999999978,75.794144000000074],[-94.898894999999925,75.912765999999976],[-94.902785999999992,75.919434000000138],[-94.905272999999966,75.925537000000077],[-94.906112999999948,75.93081699999999],[-94.904449,75.9369200000001],[-94.89527899999996,75.942200000000014],[-94.879989999999964,75.945526000000029],[-94.865554999999972,75.947478999999987],[-94.813613999999973,75.950546000000088],[-94.737777999999992,75.952208999999982],[-94.699722000000008,75.955551000000128],[-94.53832999999986,75.986099000000081],[-94.481948999999929,75.974426000000051],[-94.466948999999886,75.968597000000045],[-94.453338999999914,75.961929000000112],[-94.449721999999952,75.955261000000121],[-94.443603999999993,75.938309000000118],[-94.420272999999952,75.868590999999981],[-94.410277999999948,75.86192299999999],[-94.370833999999945,75.842209000000082],[-94.322234999999978,75.814986999999974],[-94.305557000000022,75.80304000000001],[-94.287780999999939,75.783875000000023],[-94.288054999999986,75.777481000000023],[-94.291381999999999,75.772217000000012],[-94.296950999999979,75.766388000000006],[-94.310271999999941,75.761383000000137],[-94.326400999999976,75.757217000000082],[-94.353881999999942,75.753876000000048],[-94.405563000000029,75.75082400000008]],[[-103.137787,75.74275200000011],[-103.20667300000002,75.74275200000011],[-103.3011019999999,75.744705000000067],[-103.32389799999999,75.747208000000057],[-103.36888099999999,75.753876000000048],[-103.38082899999995,75.759430000000009],[-103.382767,75.765549000000021],[-103.31139399999995,75.805252000000053],[-103.07749899999999,75.890823000000069],[-103.05943300000001,75.896378000000141],[-103.03751399999993,75.901657000000114],[-103.01194799999996,75.906097000000102],[-102.98693800000001,75.909424000000058],[-102.69611399999997,75.946640000000002],[-102.59889199999986,75.953598],[-102.52278099999995,75.958038000000045],[-102.43360899999999,75.964157000000057],[-102.291382,75.977203000000145],[-102.21749899999998,75.985535000000141],[-102.19138299999997,75.989699999999971],[-102.16471899999993,75.99054000000001],[-102.07861300000002,75.97137500000008],[-101.98916599999995,75.950821000000076],[-101.98332199999987,75.945816000000036],[-101.98860200000001,75.934418000000051],[-102.020554,75.925537000000077],[-102.09472700000003,75.911652000000004],[-102.14639299999993,75.903320000000008],[-102.19638099999997,75.899719000000005],[-102.29638699999998,75.894989000000123],[-102.31916799999999,75.893051000000014],[-102.34665699999999,75.889434999999935],[-102.39417299999997,75.880814000000044],[-102.43055699999991,75.869979999999998],[-102.44082600000002,75.86442599999998],[-102.44943199999994,75.85832199999993],[-102.45584099999996,75.852478000000133],[-102.46000699999996,75.847214000000122],[-102.47165699999988,75.818329000000062],[-102.48277300000001,75.806366000000025],[-102.49694799999992,75.79553199999998],[-102.50917099999998,75.789429000000041],[-102.54527300000001,75.779709000000139],[-102.59028599999994,75.770537999999988],[-102.61165599999998,75.767211999999972],[-102.636124,75.764708999999982],[-102.86638599999998,75.753601000000003],[-103.015289,75.747208000000057],[-103.137787,75.74275200000011]],[[-122.81916799999999,76.06053200000008],[-122.78056300000003,76.057205000000124],[-122.68776700000001,76.059982000000048],[-122.66194200000001,76.05693100000002],[-122.64277599999997,76.052475000000129],[-122.63082900000001,76.046646000000123],[-122.72501399999987,76.023605000000089],[-122.88194299999998,76.011108000000092],[-122.89250199999998,76.013611000000026],[-122.89611799999994,76.026931999999988],[-122.89222699999999,76.031096999999988],[-122.85082999999997,76.057205000000124],[-122.81916799999999,76.06053200000008]],[[-102.38999899999993,76.083603000000096],[-102.37554899999998,76.079163000000108],[-102.37138399999998,76.079163000000108],[-102.36805699999996,76.077209000000096],[-102.3563769999999,76.075820999999962],[-102.35333300000002,76.073883000000023],[-102.33889799999997,76.069443000000035],[-102.33249699999999,76.065536000000066],[-102.32167099999998,76.053589000000102],[-102.31639100000001,76.036925999999994],[-102.31889299999989,76.031096999999988],[-102.319458,76.024704000000042],[-102.32972699999993,76.015823000000125],[-102.34388699999994,76.010269000000108],[-102.36582900000002,76.005829000000119],[-102.41665599999999,76.000275000000101],[-102.51722699999993,75.991088999999988],[-102.56777999999991,75.985535000000141],[-102.695267,75.973312000000078],[-102.71472199999988,75.97026100000005],[-102.73972299999997,75.968048000000124],[-102.79055800000003,75.961380000000133],[-102.81139399999995,75.959990999999945],[-102.93611099999998,75.94802900000002],[-103.01027699999997,75.943038999999942],[-103.08528099999995,75.935806000000127],[-103.15695199999993,75.925812000000121],[-103.21888699999994,75.920258000000103],[-103.26500699999997,75.914429000000098],[-103.28943600000002,75.913040000000137],[-103.33944700000001,75.908035000000041],[-103.37998999999996,75.906097000000102],[-103.39639299999993,75.904434000000037],[-103.43305999999995,75.903320000000008],[-103.45333899999997,75.901657000000114],[-103.52443699999998,75.89888000000002],[-103.59277299999997,75.897217000000069],[-103.61332700000003,75.895538000000101],[-103.63474300000001,75.891098000000056],[-103.65556300000003,75.888596000000007],[-103.69972199999989,75.887496999999996],[-103.72332799999987,75.889160000000118],[-103.77111799999994,75.896378000000141],[-103.81166100000002,75.899428999999941],[-103.88806199999993,75.898041000000035],[-103.90194700000001,75.898604999999975],[-103.91471899999993,75.90248100000008],[-103.91500899999994,75.907760999999937],[-103.91722099999993,75.913605000000132],[-103.92555199999998,75.919144000000131],[-103.93611099999998,75.924149],[-103.96472199999999,75.934418000000051],[-103.97165699999994,75.938309000000118],[-103.94220699999994,75.942749000000106],[-103.90194700000001,75.943862999999908],[-103.82556199999999,75.950821000000076],[-103.80248999999998,75.953873000000044],[-103.78527799999995,75.957489000000066],[-103.77139299999988,75.963043000000084],[-103.75834700000001,75.966660000000047],[-103.7083439999999,75.972488000000112],[-103.68776699999989,75.97387700000013],[-103.598343,75.977203000000145],[-103.57444799999996,75.976654000000053],[-103.55471799999998,75.975266000000147],[-103.52250699999991,75.97554000000008],[-103.49694799999997,75.979980000000069],[-103.474716,75.985259999999982],[-103.45694700000001,75.990814000000114],[-103.41306299999997,76.001663000000008],[-103.39138800000001,76.006104000000107],[-103.36582899999996,76.009429999999952],[-103.34028599999988,76.013884999999959],[-103.31500199999999,76.017212000000086],[-103.29028299999999,76.018599999999992],[-103.26363399999997,76.019440000000088],[-103.22138999999993,76.019150000000025],[-103.196663,76.020537999999988],[-103.17887899999999,76.024994000000049],[-103.15666199999993,76.036652000000061],[-103.13667299999992,76.041656000000046],[-103.120003,76.043320000000051],[-103.05110200000001,76.043593999999985],[-103.00639299999995,76.044707999999957],[-102.98110999999989,76.04693600000013],[-102.95556599999998,76.050261999999975],[-102.91555800000003,76.060257000000092],[-102.88971700000002,76.064423000000147],[-102.86833199999995,76.066940000000045],[-102.86028299999992,76.066666000000112],[-102.85582699999992,76.067764000000011],[-102.75666799999993,76.073044000000095],[-102.708618,76.077484000000084],[-102.68138099999999,76.079163000000108],[-102.65805099999994,76.082214000000135],[-102.60777299999995,76.085814999999968],[-102.53138699999994,76.089431999999931],[-102.46806300000003,76.090271000000087],[-102.42804699999999,76.089431999999931],[-102.40416699999997,76.087769000000037],[-102.39639299999999,76.086655000000064],[-102.38999899999993,76.083603000000096]],[[-118.31639100000001,75.57249500000006],[-118.35472099999993,75.558868000000018],[-118.58306900000002,75.499419999999986],[-118.60472099999998,75.496368000000075],[-118.7036129999999,75.503052000000082],[-118.72250400000001,75.504440000000045],[-118.82749899999999,75.532761000000107],[-118.87361099999998,75.547484999999995],[-118.87777699999998,75.553314],[-118.92804699999999,75.562759000000085],[-118.95305599999995,75.564697000000024],[-119.08194700000001,75.567764000000125],[-119.13082900000001,75.566939999999988],[-119.19695299999995,75.562484999999924],[-119.22250400000001,75.565262000000018],[-119.34028599999999,75.579436999999928],[-119.36749299999991,75.58415199999996],[-119.38333099999994,75.589157000000057],[-119.39527899999996,75.594711000000018],[-119.40583800000002,75.600540000000024],[-119.408051,75.605820000000108],[-119.40471600000001,75.611923000000047],[-119.39750700000002,75.618317000000104],[-119.37554899999998,75.631088000000034],[-119.27528399999994,75.674698000000035],[-119.18831599999987,75.702484000000084],[-119.11389200000002,75.720535000000041],[-118.95472699999999,75.778594999999996],[-118.78888699999999,75.843048000000067],[-118.762787,75.856934000000024],[-118.75834699999996,75.862198000000035],[-118.75334199999992,75.866379000000109],[-118.71694899999994,75.882751000000098],[-118.61916399999996,75.915543000000071],[-118.58139,75.924987999999985],[-118.56388899999996,75.928589000000045],[-118.40444899999994,75.960815000000082],[-118.36776699999996,75.966385000000002],[-118.34028599999999,75.967484000000013],[-118.19415300000003,75.967484000000013],[-118.16832699999998,75.968323000000112],[-118.15222199999994,75.97137500000008],[-118.13751200000002,75.979705999999965],[-118.13137799999998,75.985535000000141],[-118.13137799999998,75.991363999999976],[-118.12748699999992,75.997482000000105],[-118.10500299999995,76.023880000000077],[-118.08860800000002,76.029434000000094],[-118.07140400000003,76.034149000000127],[-118.03751399999987,76.038315000000011],[-117.99804699999993,76.039978000000133],[-117.95722999999992,76.043045000000063],[-117.93360899999993,76.047485000000052],[-117.89972699999998,76.057479999999998],[-117.88971699999996,76.060806000000014],[-117.88500999999997,76.066086000000098],[-117.89138799999995,76.072220000000129],[-117.89277600000003,76.077484000000084],[-117.88612399999988,76.079712000000029],[-117.77887699999991,76.108597000000088],[-117.72609699999998,76.115540000000067],[-117.70694700000001,76.117203000000018],[-117.662216,76.117751999999939],[-117.64111299999996,76.116652999999985],[-117.62304699999999,76.114426000000094],[-117.51944700000001,76.099716000000001],[-117.49166899999989,76.094986000000119],[-117.47138999999993,76.088882000000069],[-117.46389799999997,76.083054000000004],[-117.48916600000001,76.04693600000013],[-117.57305899999994,75.981934000000081],[-117.681107,75.921097000000088],[-117.70445299999989,75.916930999999977],[-117.74694799999997,75.910812000000135],[-117.77555799999993,75.89888000000002],[-117.83833299999998,75.859985000000052],[-117.93720999999999,75.785262999999986],[-117.94499199999996,75.77915999999999],[-117.95221700000002,75.771927000000005],[-117.95638999999994,75.765822999999955],[-117.95638999999994,75.75999500000006],[-117.97138999999993,75.728867000000037],[-118.01583899999997,75.699416999999983],[-118.06220999999999,75.685806000000014],[-118.096947,75.678589000000102],[-118.11389200000002,75.673874000000069],[-118.14277599999997,75.663879000000122],[-118.22193900000002,75.633881000000031],[-118.26363400000002,75.616928000000087],[-118.2675089999999,75.61285399999997],[-118.266953,75.609985000000108],[-118.26834099999991,75.59165999999999],[-118.31639100000001,75.57249500000006]],[[-78.926391999999964,75.875809000000004],[-78.914169000000015,75.87303200000008],[-78.904174999999896,75.867203000000075],[-78.881377999999984,75.853317000000061],[-78.876663000000008,75.849152000000061],[-78.879439999999931,75.844147000000021],[-78.897781000000009,75.839706000000092],[-78.921111999999994,75.837494000000049],[-79.048889000000031,75.836928999999998],[-79.067779999999971,75.840271000000143],[-79.072783999999956,75.844437000000028],[-79.068618999999956,75.848328000000095],[-79.05749499999996,75.853317000000061],[-79.042495999999915,75.858032000000094],[-79.021666999999923,75.867477000000008],[-79.031676999999945,75.870819000000097],[-79.05471799999998,75.872757000000036],[-79.268889999999999,75.875259000000142],[-79.319457999999941,75.87359600000002],[-79.343063000000029,75.871093999999971],[-79.361389000000031,75.86692800000003],[-79.408339999999953,75.852767999999969],[-79.420273000000009,75.848038000000088],[-79.428054999999972,75.842484000000127],[-79.458617999999944,75.810806000000071],[-79.598052999999936,75.861374000000069],[-79.620270000000005,75.862761999999975],[-79.705840999999964,75.860535000000084],[-79.726944000000003,75.861099000000024],[-79.739990000000034,75.86442599999998],[-79.752227999999889,75.878586000000098],[-79.580001999999979,75.945251000000042],[-79.567504999999983,75.949142000000109],[-79.396956999999986,76.001938000000052],[-79.375,76.005554000000075],[-79.272780999999952,76.028045999999961],[-79.137786999999946,76.077209000000096],[-79.129714999999976,76.082763999999997],[-79.121932999999956,76.088593000000003],[-79.113051999999925,76.100540000000137],[-79.091384999999889,76.114426000000094],[-79.081954999999994,76.116379000000052],[-78.923888999999974,76.121094000000085],[-78.904174999999896,76.119705000000067],[-78.893065999999976,76.115540000000067],[-78.821670999999924,76.098328000000038],[-78.805832000000009,76.09304800000001],[-78.798049999999876,76.08638000000002],[-78.799164000000019,76.079987000000074],[-78.825835999999924,76.05802900000009],[-78.833892999999989,76.052475000000129],[-78.845551,76.047485000000052],[-78.861389000000031,76.043320000000051],[-78.921660999999915,76.031937000000028],[-78.998610999999983,76.014998999999989],[-79.069732999999928,75.998322000000144],[-79.085007000000019,75.993866000000082],[-79.144729999999981,75.975266000000147],[-79.156112999999948,75.969986000000063],[-79.166655999999932,75.964157000000057],[-79.171936000000017,75.958878000000084],[-79.176392000000021,75.952774000000034],[-79.176940999999943,75.946365000000014],[-79.174437999999952,75.93942300000009],[-79.168335000000013,75.931931000000134],[-79.140288999999939,75.918868999999972],[-79.111938000000009,75.910263000000043],[-79.029449,75.888321000000133],[-79.010284000000013,75.884720000000073],[-78.989440999999943,75.881927000000132],[-78.943603999999993,75.878036000000066],[-78.926391999999964,75.875809000000004]],[[-94.843613000000005,76.122208000000057],[-94.831116000000009,76.09664900000007],[-94.870270000000005,76.068877999999984],[-94.889175000000023,76.05802900000009],[-94.905562999999916,76.05386400000009],[-94.92860399999995,76.051086000000112],[-95.006667999999991,76.047485000000052],[-95.027221999999938,76.047760000000096],[-95.048888999999974,76.050812000000008],[-95.062499999999943,76.056090999999981],[-95.086394999999925,76.068054000000018],[-95.101943999999946,76.07777400000009],[-95.139724999999999,76.107757999999933],[-95.14416499999993,76.111922999999933],[-95.147232000000031,76.116927999999973],[-95.146392999999989,76.118042000000003],[-95.12110899999999,76.118591000000094],[-95.09445199999999,76.113602000000128],[-95.076949999999954,76.108322000000101],[-95.060546999999985,76.105819999999994],[-95.030562999999972,76.104706000000022],[-95.013061999999934,76.105819999999994],[-94.992767000000015,76.109421000000054],[-94.854445999999996,76.136658000000011],[-94.843613000000005,76.122208000000057]],[[-81.327788999999996,76.147217000000012],[-81.338607999999965,76.146378000000084],[-81.452498999999875,76.155822999999941],[-81.462508999999955,76.15887500000008],[-81.456954999999994,76.163605000000075],[-81.415833000000021,76.176926000000037],[-81.378051999999968,76.184417999999994],[-81.348891999999978,76.187485000000095],[-81.294448999999929,76.187759000000028],[-81.267226999999991,76.187759000000028],[-81.221663999999976,76.185531999999967],[-81.203338999999971,76.181091000000038],[-81.201401000000033,76.177765000000022],[-81.208617999999944,76.172211000000004],[-81.306106999999884,76.151093000000117],[-81.327788999999996,76.147217000000012]],[[-102.53083800000002,76.223312000000021],[-102.52722199999994,76.216934000000094],[-102.53138699999994,76.211655000000121],[-102.58056599999986,76.152481000000023],[-102.636124,76.125534000000073],[-102.65055799999999,76.119980000000112],[-102.67138699999998,76.114151000000106],[-102.73665599999998,76.098601999999971],[-102.78056300000003,76.089706000000035],[-102.80638099999999,76.085541000000035],[-102.85777300000001,76.078873000000101],[-102.93360899999999,76.070831000000112],[-103.34221599999995,76.036652000000061],[-103.36472300000003,76.035812000000021],[-103.67999299999997,76.034149000000127],[-103.82000700000003,76.031372000000033],[-103.86638600000003,76.030823000000055],[-103.91443599999997,76.03166200000004],[-103.962219,76.034714000000122],[-103.97277799999995,76.039703000000088],[-103.92388899999997,76.040817000000061],[-103.87832599999996,76.043869000000029],[-103.86945299999996,76.047485000000052],[-103.88861099999997,76.049712999999997],[-103.98332199999999,76.057205000000124],[-104.06054699999999,76.062195000000031],[-104.08677699999998,76.06053200000008],[-104.08743999999996,76.05819699999995],[-104.13082899999989,76.056366000000025],[-104.39111300000002,76.078323000000069],[-104.40833999999995,76.082214000000135],[-104.47833300000002,76.135817999999972],[-104.48277299999995,76.142211999999972],[-104.46389799999992,76.15887500000008],[-104.45417800000001,76.164429000000041],[-104.31582600000002,76.208037999999988],[-104.29804999999993,76.212494000000049],[-104.27250700000002,76.216095000000109],[-104.24722300000002,76.218596999999988],[-104.17223399999995,76.224152000000117],[-104.14806399999986,76.2227630000001],[-104.07472200000001,76.222213999999951],[-103.9569469999999,76.233047000000113],[-103.91805999999997,76.239975000000129],[-103.85138699999999,76.250000000000057],[-103.59445199999999,76.26527400000009],[-103.33693699999998,76.27998400000007],[-103.13137799999993,76.303040000000067],[-103.11000100000001,76.304703000000018],[-103.05999799999995,76.306366000000139],[-102.86472299999997,76.311095999999964],[-102.81696299999999,76.312194999999974],[-102.765556,76.311645999999996],[-102.72693599999997,76.30581699999999],[-102.66915899999992,76.295822000000101],[-102.66555799999998,76.294708000000128],[-102.65222199999994,76.287766000000033],[-102.64277599999997,76.269989000000123],[-102.63362100000001,76.257491999999957],[-102.62554899999992,76.251937999999996],[-102.6036069999999,76.24552900000009],[-102.55832700000002,76.235809000000017],[-102.54055799999998,76.229431000000091],[-102.53083800000002,76.223312000000021]],[[-89.398894999999982,76.43553200000008],[-89.425003000000004,76.43553200000008],[-89.599166999999966,76.440262000000132],[-89.613616999999977,76.440811000000053],[-89.625548999999978,76.444976999999994],[-89.615004999999996,76.449141999999995],[-89.559158000000025,76.470535000000098],[-89.533065999999963,76.47665400000011],[-89.49499499999996,76.472488000000055],[-89.488327000000027,76.46804800000001],[-89.465835999999911,76.462203999999986],[-89.446380999999917,76.457763999999997],[-89.40834000000001,76.450546000000145],[-89.386123999999938,76.447754000000089],[-89.378051999999968,76.444138000000009],[-89.380553999999961,76.439147999999989],[-89.398894999999982,76.43553200000008]],[[-83.962783999999999,76.426375999999948],[-83.986114999999984,76.423309000000017],[-84.009170999999924,76.425812000000008],[-84.109436000000017,76.444427000000132],[-84.12388599999997,76.451096000000007],[-84.139449999999954,76.507217000000082],[-84.128052000000025,76.50999500000006],[-84.097503999999901,76.506653000000142],[-84.013625999999931,76.498032000000023],[-83.992492999999854,76.494980000000112],[-83.976944000000003,76.491089000000045],[-83.918334999999956,76.469437000000028],[-83.908050999999944,76.464996000000099],[-83.962783999999999,76.426375999999948]],[[-104.05387899999999,76.563034000000073],[-104.03388999999999,76.559708000000001],[-103.87888299999997,76.573608000000092],[-103.86860699999994,76.579162999999994],[-103.86665299999993,76.584991000000116],[-103.87138400000003,76.596649000000127],[-103.86721799999998,76.603043000000014],[-103.85944399999994,76.607208000000014],[-103.82640100000003,76.618317000000047],[-103.804169,76.621918000000107],[-103.78751399999993,76.620529000000147],[-103.58194699999996,76.547759999999982],[-103.58805799999993,76.541930999999977],[-103.59249899999998,76.535812000000135],[-103.59166700000003,76.53137200000009],[-103.587784,76.524993999999936],[-103.57028199999996,76.521103000000096],[-103.404449,76.494705000000124],[-103.38445299999995,76.492203000000018],[-103.32112100000001,76.494980000000112],[-103.24500299999994,76.485535000000027],[-103.05777,76.457763999999997],[-103.03666699999991,76.453873000000101],[-103.01418299999995,76.447754000000089],[-103.00805699999989,76.441650000000038],[-103.00446299999999,76.435257000000092],[-103.00446299999999,76.429977000000008],[-103.011124,76.423309000000017],[-103.01917300000002,76.418045000000063],[-103.02971599999989,76.412491000000045],[-103.0425029999999,76.406372000000033],[-103.098343,76.384720000000016],[-103.17250099999995,76.362762000000032],[-103.20472699999993,76.354705999999965],[-103.281387,76.336929000000112],[-103.37805200000003,76.325546000000088],[-103.55444299999999,76.310257000000036],[-103.70056199999993,76.304152999999985],[-103.75195299999996,76.303589000000045],[-103.848343,76.310257000000036],[-104.06194299999993,76.317490000000021],[-104.11165599999998,76.316376000000048],[-104.33500699999996,76.318603999999993],[-104.37888299999992,76.323317999999972],[-104.396118,76.327774000000034],[-104.40471599999995,76.333328000000051],[-104.404449,76.334427000000005],[-104.38971700000002,76.342758000000117],[-104.37581599999993,76.348328000000038],[-104.362213,76.352202999999975],[-104.34333799999996,76.354156000000103],[-104.32972699999999,76.358032000000037],[-104.328056,76.363876000000005],[-104.39111300000002,76.461105000000032],[-104.43388399999998,76.484984999999995],[-104.44888300000002,76.491089000000045],[-104.47332799999998,76.49331699999999],[-104.48249800000002,76.490540000000124],[-104.48361199999999,76.485808999999961],[-104.49749800000001,76.481093999999928],[-104.52278100000001,76.480545000000006],[-104.56388900000002,76.482208000000128],[-104.65888999999987,76.545822000000044],[-104.66583300000002,76.551651000000049],[-104.63722200000001,76.603317000000118],[-104.56304899999998,76.612761999999975],[-104.53666699999997,76.617203000000075],[-104.445267,76.635818000000029],[-104.40666199999987,76.645538000000101],[-104.37416100000002,76.655823000000055],[-104.35193600000002,76.660263000000043],[-104.31500199999994,76.663879000000122],[-104.26750199999998,76.667206000000022],[-104.21665999999999,76.668320000000051],[-104.13417099999998,76.669434000000024],[-104.05332899999996,76.664703000000088],[-104.031113,76.661652000000061],[-103.96333299999998,76.649994000000049],[-103.93971299999998,76.644714000000135],[-103.926941,76.638046000000145],[-103.9225009999999,76.633605999999986],[-103.92610200000001,76.621918000000107],[-103.93831599999999,76.610535000000141],[-103.95861799999994,76.599152000000117],[-104.02778599999988,76.579162999999994],[-104.051941,76.568878000000041],[-104.05387899999999,76.563034000000073]],[[-98.418059999999912,76.668320000000051],[-98.403885000000002,76.661377000000016],[-98.413939999999911,76.647491000000059],[-98.423606999999947,76.641486999999927],[-98.425780999999972,76.63848900000005],[-98.425277999999992,76.63564300000013],[-98.429169000000002,76.626922999999977],[-98.419723999999917,76.622482000000048],[-98.376099000000011,76.611923000000047],[-98.357773000000009,76.608321999999987],[-98.281386999999995,76.602203000000145],[-98.180557000000022,76.586929000000055],[-98.189712999999983,76.580276000000083],[-98.242766999999958,76.571655000000135],[-98.258621000000005,76.573318000000086],[-98.278335999999967,76.581100000000049],[-98.298339999999996,76.585266000000104],[-98.319457999999997,76.58859300000006],[-98.362502999999947,76.593323000000112],[-98.395554000000004,76.594437000000084],[-98.40194699999995,76.591934000000094],[-98.398894999999925,76.581375000000037],[-98.378051999999968,76.572220000000016],[-98.357773000000009,76.565536000000122],[-98.322784000000013,76.561096000000134],[-98.080565999999976,76.531097000000102],[-97.944442999999978,76.518051000000128],[-97.897780999999895,76.515823000000012],[-97.807770000000005,76.514435000000105],[-97.764450000000011,76.510544000000039],[-97.750290000000007,76.506942999999978],[-97.693328999999949,76.487762000000089],[-97.684722999999963,76.47164900000007],[-97.662215999999944,76.425261999999975],[-97.662505999999894,76.419434000000081],[-97.670273000000009,76.414992999999981],[-97.706954999999937,76.405548000000067],[-97.718886999999995,76.40109300000006],[-97.727218999999991,76.395537999999988],[-97.731673999999998,76.38998400000014],[-97.761397999999986,76.334991000000002],[-97.728881999999999,76.282760999999994],[-97.726104999999905,76.278320000000065],[-97.699432000000002,76.266663000000108],[-97.64805599999994,76.250275000000045],[-97.610549999999989,76.242203000000075],[-97.591674999999952,76.23692299999999],[-97.575561999999991,76.231369000000029],[-97.523055999999997,76.205826000000116],[-97.516952999999944,76.199997000000053],[-97.509170999999981,76.188873000000001],[-97.494994999999903,76.148880000000133],[-97.494445999999868,76.138885000000073],[-97.503066999999874,76.127472000000068],[-97.517776000000026,76.119141000000127],[-97.542496000000028,76.108322000000101],[-97.563323999999966,76.097487999999998],[-97.588333000000034,76.080826000000002],[-97.656386999999938,75.972762999999986],[-97.647507000000019,75.944427000000076],[-97.64555399999989,75.938873000000058],[-97.642226999999934,75.9327550000001],[-97.612503000000004,75.901932000000102],[-97.597778000000005,75.889434999999935],[-97.597778000000005,75.846939000000134],[-97.654174999999896,75.798324999999977],[-97.664169000000015,75.793320000000108],[-97.693603999999993,75.785812000000078],[-97.707503999999972,75.783324999999991],[-97.837219000000005,75.765549000000021],[-97.913329999999974,75.751663000000065],[-97.930557000000022,75.746933000000013],[-97.938598999999954,75.741364000000033],[-97.870543999999938,75.73054499999995],[-97.827224999999885,75.726929000000098],[-97.690276999999867,75.720535000000041],[-97.425551999999982,75.692200000000071],[-97.404448999999943,75.68803400000013],[-97.386672999999973,75.682754999999986],[-97.375823999999852,75.676376000000118],[-97.369995000000017,75.670822000000101],[-97.368606999999997,75.659424000000115],[-97.369155999999975,75.653320000000065],[-97.384734999999978,75.643326000000059],[-97.394454999999937,75.638321000000019],[-97.410003999999958,75.620818999999983],[-97.41194200000001,75.61554000000001],[-97.423889000000031,75.528595000000053],[-97.422501000000011,75.506377999999984],[-97.417495999999971,75.494705000000124],[-97.401397999999858,75.458602999999982],[-97.398055999999997,75.45248400000014],[-97.378326000000015,75.43414300000012],[-97.349730999999963,75.419983000000002],[-97.330565999999919,75.414153999999996],[-97.293883999999991,75.405548000000067],[-97.285003999999958,75.402205999999978],[-97.280837999999903,75.396941999999967],[-97.293334999999956,75.390823000000125],[-97.305557000000022,75.390274000000034],[-97.320557000000008,75.391098],[-97.341675000000009,75.393875000000094],[-97.441665999999998,75.414992999999981],[-97.469161999999983,75.422760000000096],[-97.484160999999915,75.429428000000087],[-97.49610899999999,75.442200000000071],[-97.49888599999997,75.469986000000006],[-97.496658000000025,75.478592000000106],[-97.573623999999882,75.513046000000145],[-97.711944999999901,75.566666000000055],[-97.728881999999999,75.570267000000058],[-97.744155999999975,75.571106000000043],[-97.762511999999958,75.568054000000132],[-97.818061999999884,75.54898100000014],[-97.827552999999909,75.545815000000005],[-97.827056999999911,75.539817999999968],[-97.821724000000017,75.537323000000129],[-97.811561999999924,75.535156000000029],[-97.802054999999996,75.53532400000006],[-97.801940999999999,75.524429000000112],[-97.789992999999924,75.51887499999998],[-97.774169999999913,75.508331000000112],[-97.758895999999993,75.496643000000063],[-97.748046999999872,75.484421000000111],[-97.744720000000029,75.478317000000061],[-97.743332000000009,75.471924000000115],[-97.745269999999948,75.466660000000104],[-97.756392999999946,75.462204000000042],[-97.783324999999877,75.45748900000001],[-97.80749499999996,75.456650000000025],[-97.835830999999985,75.460815000000025],[-97.840835999999854,75.464996000000099],[-97.845001000000025,75.469986000000006],[-97.855674999999906,75.484482000000014],[-97.85600299999993,75.487488000000042],[-97.858001999999885,75.494644000000051],[-97.859169000000009,75.497985999999969],[-97.86983499999991,75.501160000000084],[-97.882338999999945,75.503494000000103],[-97.90834000000001,75.513321000000133],[-97.932495000000017,75.512496999999996],[-97.951950000000011,75.507492000000127],[-98.041672000000005,75.483322000000101],[-98.043335000000013,75.481368999999972],[-97.985549999999989,75.457214000000135],[-97.957503999999915,75.44720499999994],[-97.933318999999983,75.448029000000133],[-97.911117999999931,75.446090999999967],[-97.782776000000013,75.428314000000114],[-97.774718999999948,75.423035000000141],[-97.793610000000001,75.413040000000024],[-97.808608999999933,75.408875000000023],[-97.934432999999899,75.407486000000063],[-97.984726000000023,75.408875000000023],[-98.004729999999881,75.413605000000075],[-98.028060999999923,75.413879000000009],[-98.019890000000032,75.407042999999987],[-98.028724999999895,75.404541000000108],[-98.032386999999915,75.400879000000145],[-98.029556000000014,75.398375999999985],[-98.021225000000015,75.39521000000002],[-97.96055599999994,75.384720000000016],[-97.920272999999952,75.38081399999993],[-97.901397999999915,75.379974000000061],[-97.884445000000028,75.376373000000058],[-97.872771999999998,75.37081900000004],[-97.876662999999894,75.364990000000034],[-97.887786999999946,75.360535000000027],[-97.910277999999948,75.356644000000131],[-97.926392000000021,75.35554500000012],[-97.990554999999972,75.355819999999994],[-98.042769999999962,75.35914600000001],[-98.070107000000007,75.364700000000028],[-98.070769999999982,75.367088000000081],[-98.074112000000014,75.369033999999942],[-98.082779000000016,75.370033000000035],[-98.107772999999895,75.371917999999994],[-98.124709999999993,75.367202999999961],[-98.136397999999986,75.361923000000104],[-98.141953000000001,75.356644000000131],[-98.153610000000015,75.345535000000041],[-98.165282999999988,75.334152000000017],[-98.164718999999934,75.329163000000051],[-98.129165999999998,75.30192599999998],[-98.120543999999995,75.297760000000039],[-98.101395000000025,75.291931000000034],[-98.064712999999927,75.285812000000021],[-97.913054999999986,75.264159999999947],[-97.87388599999997,75.270263999999997],[-97.755843999999911,75.229431000000091],[-97.74360699999994,75.224991000000102],[-97.735001000000011,75.207214000000022],[-97.736937999999952,75.204437000000098],[-97.759734999999978,75.188582999999994],[-97.676940999999999,75.164154000000053],[-97.62860099999989,75.151093000000117],[-97.602492999999924,75.147217000000069],[-97.597503999999958,75.149155000000007],[-97.605834999999956,75.158325000000048],[-97.614440999999886,75.162766000000147],[-97.613051999999982,75.164703000000031],[-97.597778000000005,75.164703000000031],[-97.578613000000018,75.15887500000008],[-97.567779999999971,75.152481000000023],[-97.567504999999926,75.147491000000002],[-97.582503999999915,75.137496999999996],[-97.619445999999925,75.118590999999924],[-97.639998999999989,75.116379000000052],[-97.746947999999975,75.111649000000057],[-97.843886999999938,75.110260000000039],[-97.86250299999989,75.111099000000024],[-97.881377999999927,75.11692800000003],[-98.024719000000005,75.162490999999932],[-98.033614999999998,75.17164600000001],[-98.034438999999963,75.181656000000089],[-98.02694699999995,75.187195000000088],[-98.02027899999996,75.196640000000002],[-98.019164999999987,75.201096000000064],[-98.025833000000034,75.210815000000082],[-98.041381999999885,75.216385000000002],[-98.061661000000015,75.22026100000005],[-98.085281000000009,75.2227630000001],[-98.098617999999931,75.2227630000001],[-98.146666999999866,75.180816999999934],[-98.146666999999866,75.163879000000065],[-98.145553999999947,75.159987999999998],[-98.136123999999995,75.154160000000047],[-98.121384000000035,75.147491000000002],[-98.081389999999999,75.130538999999999],[-98.039169000000015,75.116379000000052],[-98.025557999999933,75.113601999999958],[-98.00306699999993,75.112761999999918],[-97.981673999999941,75.110809000000017],[-97.966949,75.104155999999989],[-97.947219999999902,75.079987000000074],[-97.938888999999904,75.069716999999969],[-97.938598999999954,75.064986999999917],[-97.945830999999998,75.026657],[-97.949996999999996,75.021103000000039],[-97.960006999999905,75.017487000000131],[-97.982497999999907,75.015273999999977],[-98.00306699999993,75.015549000000021],[-98.02027899999996,75.018326000000116],[-98.108886999999982,75.022491000000116],[-98.259170999999924,75.022766000000104],[-98.276947000000007,75.022217000000012],[-98.300277999999935,75.021103000000039],[-98.369719999999973,75.014435000000049],[-98.444442999999978,75.004990000000134],[-98.46833799999996,75.003052000000025],[-98.634734999999978,74.992477000000065],[-98.723891999999921,74.989426000000037],[-98.785004000000015,74.994980000000055],[-98.985001000000011,75.000000000000114],[-99.066955999999948,74.996368000000132],[-99.354445999999882,74.984420999999998],[-99.376662999999951,74.98553499999997],[-99.394164999999987,74.988037000000077],[-99.406113000000005,74.993316999999934],[-99.393615999999952,75.027205999999978],[-99.387512000000015,75.03776600000009],[-99.335555999999997,75.070541000000105],[-99.299437999999952,75.092758000000003],[-99.28195199999999,75.102768000000083],[-99.27694699999995,75.108032000000094],[-99.272232000000031,75.115814000000057],[-99.281386999999995,75.122481999999991],[-99.308043999999995,75.122481999999991],[-99.325835999999924,75.11831699999999],[-99.34056099999998,75.113037000000134],[-99.445540999999935,75.058318999999983],[-99.482497999999964,75.03776600000009],[-99.496657999999968,75.026382000000012],[-99.5,75.020537999999988],[-99.496108999999933,75.014708999999982],[-99.480285999999978,75.009155000000135],[-99.445540999999935,75.003875999999991],[-99.432495000000017,75.000275000000101],[-99.42721599999993,74.996368000000132],[-99.426391999999964,74.991364000000033],[-99.538605000000018,74.974152000000004],[-99.562499999999943,74.972214000000065],[-99.602782999999988,74.971100000000035],[-99.619719999999973,74.97137500000008],[-99.701675000000023,74.973602000000142],[-99.990554999999915,74.984420999999998],[-100.05722000000003,74.986923000000104],[-100.14584400000001,74.991088999999988],[-100.21056399999998,74.997208000000001],[-100.25306699999993,75.002777000000037],[-100.34777799999995,75.016937000000098],[-100.36389200000002,75.021378000000027],[-100.38945000000001,75.031097000000045],[-100.39388999999994,75.037201000000039],[-100.396118,75.043594000000041],[-100.39750699999991,75.055542000000059],[-100.39723199999997,75.066666000000112],[-100.39472999999998,75.078323000000069],[-100.38583399999999,75.095535000000098],[-100.38054699999986,75.101928999999984],[-100.37805200000003,75.113311999999951],[-100.39806399999998,75.158600000000092],[-100.41221599999994,75.16804500000012],[-100.43250299999994,75.173598999999967],[-100.45333900000003,75.177200000000028],[-100.47693599999997,75.179428000000144],[-100.51112399999994,75.184143000000006],[-100.52834300000001,75.187759000000028],[-100.54444899999993,75.193039000000113],[-100.54695099999998,75.199417000000096],[-100.53859699999998,75.204711999999972],[-100.46333299999998,75.223602000000085],[-100.43859900000001,75.226653999999996],[-100.41722099999998,75.227478000000133],[-100.32528699999995,75.230545000000063],[-100.30222299999997,75.230820000000108],[-100.27999899999998,75.22886699999998],[-100.24833699999999,75.223877000000073],[-100.22556299999997,75.223037999999974],[-100.031387,75.226929000000041],[-100.00778200000002,75.228043000000014],[-99.990554999999915,75.231369000000029],[-99.987777999999992,75.236099000000081],[-99.995269999999948,75.239975000000129],[-100.00945300000001,75.242203000000075],[-100.11945300000002,75.248596000000077],[-100.20333900000003,75.253326000000072],[-100.22609699999998,75.254165999999941],[-100.314438,75.250824000000023],[-100.35417200000001,75.251663000000008],[-100.37554899999986,75.255264000000011],[-100.39388999999994,75.260269000000108],[-100.406113,75.266663000000108],[-100.40278599999999,75.272491000000059],[-100.33444199999991,75.274428999999998],[-100.31166100000002,75.277206000000092],[-100.29387700000001,75.281371999999976],[-100.279449,75.286652000000061],[-100.25805700000001,75.297760000000039],[-100.24445299999996,75.308868000000018],[-100.25723299999993,75.313308999999947],[-100.28222699999992,75.310257000000036],[-100.33277900000002,75.302200000000084],[-100.35944399999994,75.299712999999997],[-100.49999999999989,75.292480000000012],[-100.52306399999998,75.293045000000006],[-100.60888699999998,75.305817000000047],[-100.62249799999995,75.309143000000063],[-100.76555599999989,75.34637500000008],[-100.77887699999991,75.35054000000008],[-100.76888999999994,75.355255000000113],[-100.67639199999996,75.376648000000046],[-100.65222199999999,75.378585999999984],[-100.63305700000001,75.378036000000122],[-100.61805700000002,75.376648000000046],[-100.60221899999993,75.373596000000134],[-100.61833199999995,75.368866000000082],[-100.64389,75.364700000000028],[-100.67999299999997,75.361923000000104],[-100.69833399999993,75.356644000000131],[-100.68222000000003,75.350266000000147],[-100.63806199999999,75.345825000000048],[-100.61472299999997,75.346100000000092],[-100.59472699999998,75.347487999999998],[-100.44748699999991,75.369980000000055],[-100.43277,75.375259000000028],[-100.42832899999991,75.380539000000113],[-100.44055200000003,75.386658000000125],[-100.56527699999998,75.422211000000004],[-100.58444199999997,75.426376000000005],[-100.60694899999999,75.42804000000001],[-100.67555199999993,75.426926000000037],[-100.71694899999989,75.429153000000099],[-100.72305299999999,75.432479999999998],[-100.69776899999999,75.436371000000065],[-100.67331699999994,75.438582999999937],[-100.43388399999998,75.445815999999979],[-100.33972199999999,75.447479000000101],[-100.27084400000001,75.448593000000074],[-100.17666600000001,75.449141999999995],[-100.11138899999997,75.451096000000007],[-100.06276700000001,75.454437000000041],[-100.01194800000002,75.461380000000077],[-100.00917099999992,75.466095000000109],[-100.01944700000001,75.468596999999988],[-100.10056299999997,75.470535000000098],[-100.19193999999999,75.467758000000003],[-100.21528599999988,75.467758000000003],[-100.30695300000002,75.47164900000007],[-100.30555699999996,75.473602000000028],[-100.12999000000002,75.525818000000129],[-100.03415699999988,75.529433999999981],[-99.966948999999943,75.533325000000048],[-99.845000999999968,75.540817000000004],[-99.831389999999999,75.544144000000131],[-99.832229999999981,75.545532000000037],[-99.845000999999968,75.547484999999995],[-99.856383999999991,75.548035000000027],[-99.899993999999992,75.547484999999995],[-99.946655000000021,75.544708000000071],[-99.990279999999984,75.544434000000138],[-100.03859699999998,75.549149],[-100.03943600000002,75.554152999999985],[-100.02806099999998,75.557205000000067],[-99.823623999999938,75.58415199999996],[-99.800551999999925,75.586655000000121],[-99.756393000000003,75.588043000000027],[-99.736938000000009,75.587204000000099],[-99.712508999999955,75.589157000000057],[-99.672774999999945,75.606094000000041],[-99.667770000000019,75.611099000000081],[-99.685821999999973,75.613876000000005],[-99.790833000000021,75.616653000000099],[-99.84056099999998,75.612488000000099],[-99.863051999999982,75.614426000000037],[-99.862503000000004,75.618866000000025],[-99.823623999999938,75.651657],[-99.817504999999926,75.655258000000003],[-99.788054999999929,75.658324999999934],[-99.458617999999944,75.672485000000052],[-99.226669000000015,75.675537000000134],[-99.202498999999989,75.675537000000134],[-99.083617999999944,75.675812000000008],[-99.033066000000019,75.677200000000084],[-98.982773000000009,75.681090999999981],[-98.929717999999923,75.686371000000008],[-98.905562999999916,75.689972000000068],[-98.889998999999989,75.695251000000042],[-98.891388000000006,75.699141999999938],[-98.907775999999956,75.704712000000029],[-98.925827000000027,75.707489000000123],[-98.950286999999889,75.709991000000002],[-98.97193900000002,75.710266000000047],[-99.329453000000001,75.695251000000042],[-99.55749499999996,75.691925000000026],[-99.619995000000017,75.694138000000009],[-99.643889999999999,75.694138000000009],[-99.740828999999906,75.690811000000053],[-99.84973100000002,75.677475000000072],[-100.031677,75.664428999999984],[-100.256393,75.651657],[-100.37332199999997,75.654709000000082],[-100.39723199999997,75.654434000000037],[-100.54028299999993,75.645537999999931],[-100.62888299999997,75.634720000000129],[-100.65416699999997,75.631653000000028],[-100.80471799999998,75.614990000000148],[-100.82972699999999,75.61303700000002],[-101.22556299999991,75.587494000000106],[-101.24916100000002,75.587204000000099],[-101.30638099999999,75.591094999999996],[-101.37721299999993,75.59887700000013],[-101.38806199999999,75.60026600000009],[-101.47165699999999,75.602203000000145],[-101.4955369999999,75.601929000000041],[-101.74944299999999,75.574432000000058],[-101.89835399999998,75.556091000000094],[-101.97250399999996,75.548325000000034],[-101.99638399999998,75.547211000000061],[-102.06723,75.546097000000088],[-102.13639799999993,75.553314],[-102.15915699999999,75.554977000000122],[-102.20667300000002,75.553314],[-102.35193599999997,75.542206000000022],[-102.39916999999997,75.537200999999982],[-102.44860799999998,75.530547999999953],[-102.49916099999996,75.521103000000096],[-102.53415699999999,75.511383000000023],[-102.67304999999999,75.514709000000039],[-102.86694299999999,75.601089000000002],[-102.87805200000003,75.607758000000047],[-102.88194299999992,75.613312000000064],[-102.88390400000003,75.61914100000007],[-102.87777699999992,75.624695000000031],[-102.86054999999999,75.62831100000011],[-102.8125,75.631088000000034],[-102.79305999999991,75.630539000000056],[-102.70140100000003,75.628860000000032],[-102.68916299999995,75.670532000000094],[-102.58168000000001,75.71276899999998],[-102.56360599999999,75.718322999999998],[-102.53888699999993,75.72137499999991],[-102.37748699999992,75.729155999999989],[-102.35193599999997,75.729155999999989],[-102.31139400000001,75.72665400000011],[-102.26390100000003,75.721924000000058],[-102.16832699999992,75.709152000000074],[-102.15416700000003,75.706100000000106],[-102.07861300000002,75.688309000000004],[-102.05776999999995,75.690811000000053],[-102.03666699999997,75.694138000000009],[-102.01862299999999,75.699416999999983],[-102.00917099999998,75.703048999999908],[-102.00805700000001,75.704987000000074],[-102.09166699999997,75.721924000000058],[-102.120003,75.776382000000012],[-102.10185200000001,75.784247999999991],[-102.09361299999989,75.791091999999992],[-102.112213,75.793594000000041],[-102.23277299999995,75.786652000000117],[-102.28222700000003,75.781937000000084],[-102.32668299999995,75.779983999999956],[-102.34388699999994,75.781937000000084],[-102.36609599999997,75.789978000000019],[-102.37165800000002,75.795821999999987],[-102.37332200000003,75.801650999999993],[-102.37082700000002,75.807480000000055],[-102.36250299999995,75.818054000000075],[-102.33944700000001,75.834991000000059],[-102.31667299999998,75.846649000000127],[-102.29028299999993,75.857208000000128],[-102.26640299999997,75.86192299999999],[-102.16306299999997,75.878860000000032],[-102.13806199999993,75.881087999999977],[-101.864441,75.902206000000035],[-101.82640099999992,75.898331000000042],[-101.80526700000001,75.891937000000041],[-101.79943800000001,75.886658000000068],[-101.77194199999997,75.868590999999981],[-101.74833699999999,75.859146000000067],[-101.74109599999991,75.856934000000024],[-101.55638099999987,75.821105999999986],[-101.47028399999999,75.772217000000012],[-101.46888699999994,75.766388000000006],[-101.45973199999997,75.761107999999922],[-101.43859900000001,75.755554000000132],[-101.41416899999996,75.752487000000031],[-101.301941,75.746094000000085],[-101.254997,75.744705000000067],[-101.24416400000001,75.746933000000013],[-101.23388699999998,75.751389000000131],[-101.20249899999993,75.767211999999972],[-101.18221999999997,75.779709000000139],[-101.23110999999994,75.777205999999978],[-101.328056,75.774429000000055],[-101.34777799999995,75.774994000000106],[-101.35555999999991,75.779433999999924],[-101.35861199999999,75.784988000000112],[-101.35193599999991,75.790543000000014],[-101.34137699999997,75.796097000000032],[-101.326683,75.801650999999993],[-101.323624,75.807480000000055],[-101.32501200000002,75.813309000000061],[-101.33500700000002,75.825272000000098],[-101.34056099999992,75.830276000000026],[-101.35637700000001,75.843048000000067],[-101.36389199999996,75.8477630000001],[-101.37805199999997,75.851928999999984],[-101.39277600000003,75.854431000000034],[-101.40833999999995,75.855820000000051],[-101.42388900000003,75.856369000000029],[-101.48889199999996,75.854156000000046],[-101.52694699999995,75.85832199999993],[-101.537216,75.861374000000069],[-101.54638699999992,75.867477000000008],[-101.57917799999996,75.908600000000092],[-101.56500199999988,75.929703000000018],[-101.49665800000002,75.954987000000017],[-101.47778299999999,75.96026599999999],[-101.45221700000002,75.963608000000079],[-101.39417299999997,75.97554000000008],[-101.30915800000002,76.008330999999998],[-101.30277999999987,76.013046000000031],[-101.31582599999996,76.019150000000025],[-101.33556399999992,76.020827999999995],[-101.36971999999992,76.016937000000098],[-101.38249200000001,76.010818000000086],[-101.39195299999989,76.000549000000035],[-101.40833999999995,75.995529000000147],[-101.61721799999998,75.980820000000108],[-101.641953,75.979705999999965],[-101.67832900000002,75.979705999999965],[-101.68388399999998,75.980270000000075],[-101.728882,75.987488000000099],[-101.80638099999999,76.007492000000013],[-101.83249699999999,76.016662999999994],[-101.84889199999992,76.024704000000042],[-101.89362299999993,76.060257000000092],[-101.90055799999999,76.066666000000112],[-101.90722700000003,76.078598000000056],[-101.90862299999998,76.084427000000062],[-101.90750099999997,76.096100000000092],[-101.90222199999999,76.107757999999933],[-101.88861099999991,76.119141000000127],[-101.761124,76.174148999999943],[-101.71140300000002,76.184708000000001],[-101.685272,76.187759000000028],[-101.60833699999995,76.194427000000019],[-101.53362299999998,76.205261000000064],[-101.48860200000001,76.213608000000022],[-101.46556099999998,76.218872000000033],[-101.39611799999989,76.243317000000047],[-101.38500999999997,76.248871000000065],[-101.387787,76.251937999999996],[-101.44193999999993,76.241653000000042],[-101.49694799999992,76.233871000000079],[-101.69888299999997,76.219437000000084],[-101.74973299999999,76.215820000000122],[-101.77471899999995,76.215546000000018],[-102.051941,76.213608000000022],[-102.11444099999994,76.215546000000018],[-102.13305699999989,76.219986000000006],[-102.14835399999998,76.226653999999996],[-102.16583300000002,76.238312000000008],[-102.15972899999997,76.243042000000059],[-102.13362100000001,76.246368000000075],[-102.08222999999998,76.250824000000023],[-102.06388899999996,76.255264000000011],[-102.05803700000001,76.259155000000078],[-102.00110599999999,76.352768000000026],[-102.029449,76.3808140000001],[-102.051941,76.38638300000008],[-102.05332900000002,76.392211999999915],[-102.05082700000003,76.398041000000148],[-102.03999299999998,76.403595000000109],[-102.01862299999999,76.409423999999944],[-101.88583399999993,76.444976999999994],[-101.86221299999994,76.450272000000041],[-101.80832699999996,76.454163000000108],[-101.78333299999991,76.454437000000041],[-101.67111199999999,76.449141999999995],[-101.45667300000002,76.436371000000065],[-101.43472300000002,76.434418000000107],[-101.41166699999997,76.430817000000047],[-101.31582599999996,76.414428999999984],[-101.30249000000003,76.408324999999991],[-101.29138199999994,76.401657],[-101.28362300000003,76.396102999999982],[-101.27667200000002,76.389435000000049],[-101.24027999999993,76.371643000000006],[-101.22805800000003,76.366928000000144],[-101.20612299999993,76.361374000000126],[-101.13694799999996,76.350815000000068],[-101.06806899999998,76.331940000000145],[-101.05832700000002,76.326935000000105],[-101.09388699999994,76.283051],[-101.00446299999993,76.237761999999975],[-100.98111,76.235260000000096],[-100.92832899999996,76.225815000000011],[-100.91000399999996,76.222213999999951],[-100.86582900000002,76.212204000000042],[-100.783073,76.191085999999984],[-100.75110599999994,76.18220500000001],[-100.71056399999998,76.166381999999999],[-100.63027999999991,76.133331000000055],[-100.43998699999992,76.105255],[-100.31582600000002,76.051376000000118],[-100.30943299999996,76.048035000000084],[-100.13166799999993,75.952484000000027],[-100.047234,75.913879000000065],[-99.982498000000021,75.890548999999908],[-99.888335999999981,75.886383000000023],[-99.753615999999909,75.906372000000147],[-99.730834999999956,75.910538000000031],[-99.71556099999998,75.916092000000049],[-99.678328999999962,75.931366000000139],[-99.587783999999999,75.94999700000011],[-99.508621000000005,75.957489000000066],[-99.483611999999937,75.958603000000039],[-99.457503999999972,75.961380000000133],[-99.442490000000021,75.965819999999951],[-99.439437999999996,75.970534999999984],[-99.45461999999992,75.974808000000053],[-99.494445999999982,75.973602000000085],[-99.657776000000013,75.961380000000133],[-99.785277999999948,75.951385000000016],[-99.811110999999983,75.948317999999915],[-99.859436000000017,75.935256999999979],[-99.86332699999997,75.935532000000023],[-99.898620999999991,75.950271999999984],[-100.07749899999999,76.038879000000122],[-100.08249699999999,76.043869000000029],[-100.09221600000001,76.054977000000008],[-100.14222699999999,76.112198000000149],[-100.15278599999994,76.132477000000108],[-100.12499999999994,76.148880000000133],[-100.10388199999994,76.153320000000008],[-100.07167099999998,76.155822999999941],[-100.031113,76.155548000000124],[-100.01139799999999,76.15387000000004],[-99.868332000000009,76.139984000000027],[-99.730834999999956,76.117477000000122],[-99.680832000000009,76.118591000000094],[-99.650832999999977,76.127472000000068],[-99.609160999999972,76.135817999999972],[-99.556106999999997,76.141663000000051],[-99.502227999999945,76.146103000000039],[-99.483062999999902,76.146942000000024],[-99.429717999999923,76.15387000000004],[-99.414444000000003,76.158325000000048],[-99.421386999999925,76.160262999999986],[-99.445267000000001,76.16137700000013],[-99.498885999999914,76.157761000000107],[-99.548888999999974,76.153320000000008],[-99.668059999999912,76.139709000000039],[-99.693054000000018,76.138596000000121],[-99.716949,76.139709000000039],[-99.874434999999892,76.17053199999998],[-99.915833000000021,76.180267000000072],[-99.948882999999967,76.189697000000137],[-100.15028399999994,76.1933140000001],[-100.17832900000002,76.19081100000011],[-100.20140099999998,76.189972000000012],[-100.22556299999997,76.19081100000011],[-100.43888900000002,76.212494000000049],[-100.47222899999991,76.226378999999952],[-100.49861099999998,76.237761999999975],[-100.51278699999989,76.249146000000053],[-100.514183,76.254166000000112],[-100.51112399999994,76.259720000000129],[-100.49944299999999,76.26527400000009],[-100.465012,76.274993999999992],[-100.43804899999998,76.278870000000097],[-100.41665599999999,76.280272999999966],[-100.36638600000003,76.281661999999983],[-100.26917300000002,76.278595000000053],[-100.18276999999995,76.270828000000108],[-100.111107,76.266388000000063],[-99.895553999999947,76.274703999999986],[-99.86999499999996,76.275817999999958],[-99.844727000000034,76.280272999999966],[-99.848617999999931,76.283874999999966],[-100.03859699999998,76.318878000000097],[-100.27722199999994,76.378585999999984],[-100.30166600000001,76.382750999999985],[-100.32362399999994,76.384155000000135],[-100.35056299999991,76.384430000000009],[-100.37444299999999,76.382750999999985],[-100.48137700000001,76.373871000000122],[-100.55332899999996,76.371094000000028],[-100.67360699999995,76.371917999999994],[-100.69444299999998,76.374985000000095],[-100.95249899999999,76.474700999999982],[-100.97222899999997,76.485260000000039],[-100.98388699999992,76.494430999999963],[-100.98554999999993,76.499145999999996],[-100.98249800000002,76.504990000000021],[-100.962784,76.510268999999994],[-100.93943799999988,76.514435000000105],[-100.89277600000003,76.519440000000145],[-100.82972699999999,76.519714000000079],[-100.80526700000001,76.522217000000069],[-100.737213,76.531097000000102],[-100.72083999999995,76.546097000000032],[-100.72341899999998,76.551094000000148],[-100.72332799999992,76.556091000000038],[-100.71250899999995,76.560531999999967],[-100.65306099999992,76.576385000000016],[-100.45861799999994,76.613602000000014],[-100.383827,76.627502000000106],[-100.36389200000002,76.631087999999977],[-100.318893,76.635544000000095],[-100.21665999999988,76.643051000000014],[-100.19193999999999,76.642212000000086],[-100.05222300000003,76.631363000000022],[-99.981673999999998,76.622207999999944],[-99.911117999999988,76.61303700000002],[-99.885009999999909,76.610535000000141],[-99.837783999999886,76.608596999999975],[-99.811385999999914,76.609710999999947],[-99.796111999999994,76.613875999999948],[-99.795272999999952,76.618317000000047],[-99.770554000000004,76.627762000000132],[-99.741942999999992,76.632751000000098],[-99.725829999999917,76.634720000000129],[-99.684433000000013,76.633331000000112],[-99.588333000000034,76.623871000000065],[-99.569457999999997,76.620529000000147],[-99.366942999999935,76.526382000000069],[-99.256957999999941,76.470535000000098],[-99.260559000000001,76.464706000000092],[-99.255279999999914,76.453598000000056],[-99.184433000000013,76.415817000000118],[-99.163619999999923,76.409149000000127],[-99.12332200000003,76.400818000000015],[-99.099990999999989,76.398041000000148],[-99.079726999999991,76.397217000000012],[-99.066101000000003,76.398605000000089],[-99.06639100000001,76.404434000000094],[-99.083617999999944,76.416092000000106],[-99.110001000000011,76.426650999999993],[-99.118332000000009,76.433044000000109],[-99.137221999999952,76.451934999999992],[-99.133895999999993,76.456650000000025],[-99.122498000000007,76.461105000000032],[-98.994155999999975,76.471099999999922],[-98.980834999999956,76.47164900000007],[-98.955276000000026,76.469147000000021],[-98.946945000000028,76.463042999999971],[-98.948043999999925,76.45277399999992],[-98.950286999999889,76.446365000000071],[-98.943603999999993,76.440811000000053],[-98.925827000000027,76.43609600000002],[-98.906386999999881,76.433318999999983],[-98.882767000000001,76.431366000000025],[-98.857773000000009,76.431366000000025],[-98.846114999999998,76.43609600000002],[-98.856110000000001,76.463882000000126],[-98.865279999999927,76.469147000000021],[-98.898620999999991,76.481093999999928],[-98.953888000000006,76.499145999999996],[-99.038054999999986,76.529708999999968],[-99.050551999999982,76.536102000000142],[-99.051940999999999,76.539978000000019],[-99.027221999999938,76.601088999999945],[-98.999160999999958,76.604980000000012],[-98.971663999999976,76.607758000000047],[-98.86082499999992,76.61442599999998],[-98.714721999999938,76.614150999999993],[-98.611114999999984,76.610260000000096],[-98.589172000000019,76.611374000000069],[-98.56639100000001,76.613602000000014],[-98.538894999999968,76.616379000000109],[-98.518065999999976,76.621368000000075],[-98.511123999999995,76.625259000000142],[-98.489731000000006,76.644707000000096],[-98.48832699999997,76.650818000000015],[-98.546951000000035,76.658035000000098],[-98.591109999999901,76.661652000000061],[-98.595000999999968,76.659424000000115],[-98.592498999999975,76.653870000000097],[-98.598617999999988,76.651093000000003],[-98.623046999999872,76.647217000000126],[-98.674438000000009,76.64387499999998],[-98.744445999999982,76.64387499999998],[-98.814163000000008,76.653595000000053],[-98.851105000000018,76.661652000000061],[-98.857773000000009,76.663879000000122],[-98.855834999999956,76.67025799999999],[-98.852492999999924,76.671646000000067],[-98.821395999999936,76.676925999999924],[-98.733611999999994,76.682754999999986],[-98.712509000000011,76.683044000000052],[-98.504729999999938,76.681090999999924],[-98.480285999999921,76.679152999999985],[-98.439986999999974,76.673035000000084],[-98.418059999999912,76.668320000000051]],[[-99.996947999999975,76.734420999999998],[-99.976395000000025,76.733597000000032],[-99.86999499999996,76.736374000000126],[-99.819457999999884,76.738312000000064],[-99.748336999999992,76.74275200000011],[-99.720839999999953,76.74581900000004],[-99.693877999999984,76.747756999999979],[-99.646392999999989,76.748031999999967],[-99.622498000000007,76.7452550000001],[-99.528884999999946,76.72554000000008],[-99.447768999999994,76.706100000000106],[-99.430556999999965,76.699416999999926],[-99.433883999999978,76.69470200000012],[-99.52806099999998,76.67442299999999],[-99.556106999999997,76.670532000000094],[-99.581680000000006,76.67025799999999],[-99.626937999999996,76.673035000000084],[-99.657776000000013,76.677765000000079],[-99.733321999999987,76.702484000000027],[-99.888389999999902,76.718651000000136],[-99.900222999999926,76.72015399999998],[-99.915557999999976,76.72015399999998],[-100.01112399999988,76.719147000000135],[-100.02999899999992,76.715820000000008],[-100.05139200000002,76.715546000000074],[-100.09750400000001,76.717209000000025],[-100.12138399999998,76.719711000000075],[-100.128601,76.721924000000058],[-100.12805199999997,76.723038000000031],[-100.10193599999997,76.744705000000067],[-100.08277899999996,76.748031999999967],[-100.05526700000001,76.75082400000008],[-100.03778099999988,76.751389000000131],[-99.999434999999949,76.751099000000067],[-99.972228999999913,76.747208000000001],[-99.975006000000008,76.742477000000065],[-99.994155999999975,76.739151000000049],[-100.004997,76.735535000000027],[-99.996947999999975,76.734420999999998]],[[-120.88362100000001,76.739700000000028],[-120.886124,76.728591999999992],[-120.90334299999995,76.723876999999959],[-120.94499199999996,76.717758000000117],[-120.97000100000002,76.716660000000047],[-121.09084299999989,76.71887200000009],[-121.11749299999991,76.719711000000075],[-121.16000400000001,76.723312000000135],[-121.18110699999994,76.727203000000031],[-121.18472299999991,76.731094000000098],[-121.18167099999999,76.732208000000071],[-121.15666199999998,76.733597000000032],[-121.12832600000002,76.730819999999994],[-121.083618,76.729155999999932],[-121.05972300000002,76.731369000000086],[-121.05638099999999,76.732483000000059],[-121.01806599999998,76.751389000000131],[-120.99082900000002,76.754715000000147],[-120.97833300000002,76.755264000000068],[-120.91443599999997,76.754165999999998],[-120.89083900000003,76.749710000000107],[-120.88474300000001,76.745529000000033],[-120.88362100000001,76.739700000000028]],[[-101.38054699999992,76.553588999999988],[-101.40416699999997,76.552765000000022],[-101.45388799999989,76.554153000000099],[-101.54083300000002,76.560806000000071],[-101.56471299999993,76.563599000000067],[-101.62332199999992,76.572768999999937],[-101.68831599999999,76.586380000000077],[-101.57556199999999,76.614150999999993],[-101.52194199999991,76.623871000000065],[-101.38583399999993,76.642487000000074],[-101.31777999999991,76.642761000000007],[-101.21362299999993,76.651931999999988],[-101.05999800000001,76.685805999999957],[-101.04250300000001,76.690536000000009],[-101.03943600000002,76.696365000000014],[-101.04028299999993,76.702209000000039],[-101.03307299999994,76.708038000000045],[-101.00583599999993,76.71887200000009],[-100.98361199999999,76.724700999999925],[-100.95749699999999,76.729155999999932],[-100.90249599999993,76.736374000000126],[-100.74388099999999,76.753326000000129],[-100.69193999999999,76.754715000000147],[-100.53443900000002,76.757217000000026],[-100.50917099999992,76.756378000000097],[-100.484734,76.754715000000147],[-100.26888999999989,76.737198000000092],[-100.24889400000001,76.734711000000061],[-100.25917099999998,76.728591999999992],[-100.26666299999999,76.726379000000065],[-100.29305999999997,76.721924000000058],[-100.297234,76.721924000000058],[-100.31723,76.716660000000047],[-100.48721299999988,76.684418000000051],[-100.761124,76.635818000000029],[-100.92304999999999,76.610260000000096],[-101.19275699999997,76.571381000000031],[-101.27390300000002,76.560806000000071],[-101.326683,76.556366000000082],[-101.38054699999992,76.553588999999988]],[[-89.934432999999956,76.47665400000011],[-89.978881999999999,76.469711000000132],[-89.999725000000012,76.470260999999994],[-90.040833000000021,76.476928999999927],[-90.081680000000006,76.484984999999995],[-90.151108000000022,76.504439999999988],[-90.184433000000013,76.515274000000034],[-90.21444699999995,76.528594999999996],[-90.226669000000015,76.535538000000031],[-90.412216000000001,76.636108000000036],[-90.478058000000033,76.662200999999982],[-90.504456000000005,76.675261999999918],[-90.56361400000003,76.709991000000002],[-90.573333999999988,76.715820000000008],[-90.59445199999999,76.729705999999965],[-90.600280999999939,76.734984999999995],[-90.600829999999974,76.741088999999988],[-90.599990999999989,76.746643000000006],[-90.597777999999948,76.750000000000114],[-90.58666999999997,76.761383000000137],[-90.579178000000013,76.766937000000098],[-90.57028200000002,76.771927000000005],[-90.544448999999986,76.783051000000057],[-90.510284000000013,76.793320000000108],[-90.474716000000001,76.799713000000054],[-90.230559999999969,76.828048999999965],[-90.103058000000033,76.836105000000032],[-90.025283999999999,76.839156999999943],[-89.983063000000016,76.836928999999998],[-89.927779999999984,76.828873000000101],[-89.865279999999984,76.816086000000098],[-89.825835999999981,76.806091000000038],[-89.779448999999886,76.7852630000001],[-89.673888999999974,76.737487999999928],[-89.673888999999974,76.731369000000086],[-89.687774999999988,76.708878000000084],[-89.702224999999999,76.689697000000024],[-89.729445999999996,76.673309000000017],[-89.744155999999975,76.669434000000024],[-89.768065999999976,76.668045000000006],[-89.819732999999928,76.667206000000022],[-89.837218999999891,76.663040000000137],[-89.840835999999911,76.657211000000132],[-89.862777999999992,76.60386699999998],[-89.862502999999947,76.597488000000112],[-89.858336999999949,76.591094999999939],[-89.817504999999983,76.546936000000017],[-89.794448999999929,76.533325000000048],[-89.756119000000012,76.524703999999929],[-89.721663999999976,76.519714000000079],[-89.699157999999954,76.516936999999984],[-89.684433000000013,76.511658000000011],[-89.671386999999982,76.504166000000055],[-89.673888999999974,76.502212999999927],[-89.757507000000032,76.486099000000024],[-89.783614999999884,76.483047000000056],[-89.934432999999956,76.47665400000011]],[[-108.65110800000002,76.813599000000011],[-108.65110800000002,76.808868000000075],[-108.65527299999991,76.803863999999976],[-108.67804699999999,76.784988000000112],[-108.68443299999996,76.780548000000067],[-108.69055200000003,76.774429000000055],[-108.69249000000002,76.769989000000066],[-108.68831599999999,76.766098],[-108.67971799999992,76.763321000000076],[-108.66278099999994,76.761383000000137],[-108.596947,76.760818000000086],[-108.55248999999992,76.761383000000137],[-108.52722199999999,76.760268999999937],[-108.50389099999995,76.756103999999937],[-108.48889199999996,76.751663000000065],[-108.46333299999998,76.739151000000049],[-108.45500199999998,76.733322000000044],[-108.44638099999997,76.723602000000142],[-108.44220699999994,76.717758000000117],[-108.43804899999998,76.708038000000045],[-108.44193999999999,76.696365000000014],[-108.45889299999988,76.684708000000057],[-108.54472399999997,76.646378000000141],[-108.56555200000003,76.641663000000108],[-108.58667000000003,76.641663000000108],[-108.60749800000002,76.642487000000074],[-108.628601,76.645263999999997],[-108.65387699999997,76.647217000000126],[-108.68110699999994,76.647766000000047],[-108.70417799999996,76.646378000000141],[-108.72083999999995,76.642487000000074],[-108.72721899999999,76.638046000000145],[-108.72693600000002,76.634155000000078],[-108.69915800000001,76.605545000000063],[-108.69055200000003,76.600540000000024],[-108.62721299999998,76.575546000000031],[-108.61054999999993,76.569717000000026],[-108.58389299999993,76.477478000000076],[-108.58112299999999,76.439147999999989],[-108.55803699999996,76.408599999999979],[-108.475281,76.406937000000084],[-108.36389200000002,76.399994000000049],[-108.32888800000001,76.396652000000131],[-108.31861900000001,76.394150000000081],[-108.28971899999993,76.384430000000009],[-108.26917300000002,76.374985000000095],[-108.07749899999999,76.28054800000001],[-108.11472299999997,76.261383000000023],[-108.252228,76.196929999999952],[-108.33139,76.181931000000077],[-108.38027999999997,76.165268000000026],[-108.39222699999993,76.159424000000001],[-108.40862300000003,76.14776599999999],[-108.396118,76.046097000000145],[-108.35193600000002,76.048874000000069],[-108.02555799999999,76.062195000000031],[-108.00140399999998,76.063033999999959],[-107.916946,76.063033999999959],[-107.83833300000003,76.061371000000065],[-107.81220999999999,76.056090999999981],[-107.73665599999998,76.039428999999984],[-107.72471599999994,76.035538000000088],[-107.63834399999996,75.996368000000132],[-107.63249200000001,75.991088999999988],[-107.63305699999995,75.981369000000086],[-107.639183,75.976089000000002],[-107.65139799999997,75.97026100000005],[-107.78555299999999,75.919983000000116],[-107.84221599999995,75.899993999999992],[-107.90194700000001,75.896103000000096],[-107.91805999999997,75.891373000000101],[-107.93028300000003,75.885544000000039],[-108.031113,75.822495000000004],[-108.04361,75.802199999999971],[-108.02417000000003,75.783875000000023],[-108.02027900000002,75.780823000000112],[-108.00639299999995,75.779433999999924],[-107.9569469999999,75.784714000000008],[-107.91332999999986,75.789429000000041],[-107.87361099999993,75.798035000000141],[-107.82084699999996,75.829162999999994],[-107.77834300000001,75.854706000000078],[-107.75974299999996,75.869705000000124],[-107.75974299999996,75.874419999999986],[-107.739441,75.879150000000038],[-107.51555599999995,75.899993999999992],[-107.36945299999996,75.911652000000004],[-107.33750899999995,75.911377000000016],[-107.18666099999996,75.90387000000004],[-107.08000199999998,75.892761000000007],[-107.08583099999998,75.872482000000048],[-107.09028599999994,75.867477000000008],[-107.10500300000001,75.834717000000126],[-107.09805299999999,75.823043999999925],[-107.03167699999995,75.771103000000039],[-106.96362299999993,75.738586000000055],[-106.89666699999998,75.720261000000107],[-106.88027999999991,75.765822999999955],[-106.83056599999998,75.785812000000078],[-106.79444899999993,75.791656000000103],[-106.74471999999992,75.79553199999998],[-106.72277799999995,75.795821999999987],[-106.67944299999999,75.793594000000041],[-106.6558379999999,75.793594000000041],[-106.636124,75.794434000000081],[-106.61582899999996,75.797211000000004],[-106.62110899999993,75.803314000000114],[-106.6383439999999,75.806931000000077],[-106.67944299999999,75.812485000000095],[-106.72666900000002,75.813873000000001],[-106.78611799999993,75.813309000000061],[-106.829453,75.816665999999998],[-106.85082999999992,75.819992000000013],[-106.87000299999994,75.824997000000053],[-106.88890100000003,75.834717000000126],[-106.89584400000001,75.844437000000028],[-106.89666699999998,75.935256999999979],[-106.89611799999994,75.941086000000041],[-106.89334100000002,75.947478999999987],[-106.86971999999997,75.964157000000057],[-106.63890099999998,76.053040000000124],[-106.60610999999994,76.057754999999986],[-106.58583099999993,76.058593999999971],[-106.368607,76.055817000000047],[-106.33667000000003,76.054703000000075],[-106.30082699999997,76.051376000000118],[-106.01611299999996,76.019714000000022],[-105.93720999999999,76.010269000000108],[-105.89998600000001,76.005554000000075],[-105.837219,75.996932999999956],[-105.73500100000001,75.974991000000102],[-105.66832699999998,75.955551000000128],[-105.61945299999996,75.93942300000009],[-105.60637699999995,75.934708000000057],[-105.59528399999988,75.929703000000018],[-105.47888199999994,75.863036999999963],[-105.46528599999999,75.851928999999984],[-105.45333900000003,75.841659999999933],[-105.445831,75.830551000000071],[-105.40028399999989,75.694427000000076],[-105.38834399999996,75.656372000000033],[-105.391953,75.63888500000013],[-105.48750299999995,75.560806000000127],[-105.49638399999998,75.55525200000011],[-105.51666299999994,75.550537000000077],[-105.54083300000002,75.546936000000017],[-105.60444599999988,75.539978000000019],[-105.63667299999997,75.533600000000092],[-105.68582200000003,75.519440000000145],[-105.74082900000002,75.494979999999941],[-105.75140399999998,75.489700000000084],[-105.74804699999999,75.485809000000017],[-105.73693799999995,75.48275799999999],[-105.68666100000002,75.483047000000113],[-105.67166099999986,75.481093999999985],[-105.61138900000003,75.47164900000007],[-105.59277299999997,75.46748400000007],[-105.593613,75.462769000000037],[-105.64639299999993,75.365265000000022],[-105.65110799999997,75.359421000000054],[-105.66055299999994,75.349716000000114],[-105.72666900000002,75.31303400000013],[-105.7386019999999,75.309418000000051],[-105.76251199999996,75.304976999999951],[-105.79361,75.302200000000084],[-105.81304899999998,75.29942299999999],[-105.82140399999992,75.295822000000101],[-105.86694299999999,75.275818000000015],[-105.87526699999995,75.271102999999982],[-105.93776699999989,75.214432000000045],[-105.93888900000002,75.208603000000039],[-105.93582199999997,75.202774000000034],[-105.929169,75.197754000000145],[-105.89222699999999,75.190810999999997],[-105.87249800000001,75.171920999999998],[-105.876938,75.145828000000051],[-105.88527699999997,75.14027400000009],[-105.90499899999998,75.136383000000023],[-105.92582699999997,75.135268999999994],[-106.00361599999991,75.135544000000039],[-106.01889,75.133881000000088],[-106.07028200000002,75.106644000000017],[-106.07945299999989,75.096939000000077],[-106.07333399999993,75.087203999999986],[-106.01862299999999,75.074158000000068],[-106.00446299999999,75.068054000000018],[-105.99416399999996,75.062195000000031],[-105.99333199999995,75.055817000000047],[-106.011124,75.050812000000008],[-106.23528299999998,75.021378000000027],[-106.26000999999997,75.019150000000081],[-106.45500199999992,75.005829000000119],[-106.54554699999989,75.001663000000008],[-106.564438,75.00082400000008],[-106.66332999999992,75.004165999999998],[-106.72556299999997,75.00221300000004],[-106.77111799999989,74.996643000000006],[-106.78639199999998,74.991928000000144],[-106.78307299999994,74.989975000000015],[-106.78333299999997,74.986098999999967],[-106.78582799999992,74.98054500000012],[-106.79194599999994,74.975266000000147],[-106.807503,74.969711000000075],[-106.93055699999996,74.933594000000085],[-106.97222899999997,74.926086000000055],[-107.01000999999991,74.922484999999995],[-107.05110200000001,74.921646000000067],[-107.07362399999994,74.919983000000116],[-107.16000399999996,74.910538000000088],[-107.19722000000002,74.910812000000021],[-107.21584300000001,74.911925999999994],[-107.46417199999996,74.934418000000051],[-107.506958,74.939972000000068],[-107.63082900000001,74.961104999999975],[-107.66251399999999,74.966660000000047],[-107.68804899999998,74.976379000000065],[-107.69554099999999,74.982208000000071],[-107.72389199999998,75.016388000000006],[-107.72389199999998,75.020264000000054],[-107.71972699999998,75.02609300000006],[-107.704453,75.030823000000112],[-107.68138099999999,75.042480000000012],[-107.67944299999994,75.048599000000081],[-107.68110699999994,75.05304000000001],[-107.69499199999996,75.075272000000041],[-107.70584100000002,75.086105000000032],[-107.716949,75.090820000000065],[-107.739441,75.095825000000104],[-107.75834700000001,75.096939000000077],[-107.77333099999998,75.096099999999922],[-107.78307299999994,75.093596999999988],[-107.77999899999998,75.072220000000129],[-107.77084400000001,75.06581100000011],[-107.75778200000002,75.06053199999991],[-107.74500299999994,75.054153000000042],[-107.739441,75.048874000000069],[-107.73972299999997,75.043045000000063],[-107.74388099999993,75.037201000000039],[-107.77778599999999,75.029434000000094],[-107.89499699999999,75.003601000000003],[-107.94193999999999,74.93081699999999],[-107.95527600000003,74.928589000000045],[-107.97749299999998,74.927475000000072],[-108.02417000000003,74.929152999999985],[-108.13417099999992,74.927765000000079],[-108.21083099999987,74.923599000000024],[-108.37304699999999,74.910538000000088],[-108.3916779999999,74.911377000000016],[-108.43639400000001,74.915268000000083],[-108.45500199999998,74.918319999999994],[-108.52971599999995,74.936645999999996],[-108.54110700000001,74.940536000000009],[-108.548607,74.946365000000014],[-108.54795799999999,74.951653000000022],[-108.55055199999998,74.956375000000094],[-108.55999800000001,74.960815000000139],[-108.67971799999992,74.970261000000107],[-108.781113,74.979980000000069],[-108.80721999999997,74.983597000000032],[-108.80721999999997,74.984711000000004],[-108.79611199999999,74.985809000000131],[-108.74553699999996,74.984420999999998],[-108.63890100000003,74.981094000000098],[-108.614441,74.979705999999965],[-108.55999800000001,74.976379000000065],[-108.53028899999993,74.973312000000135],[-108.51139799999999,74.97554000000008],[-108.52667199999996,75.001663000000008],[-108.53056300000003,75.005554000000075],[-108.53806299999985,75.009430000000009],[-108.628601,75.046096999999975],[-108.65139799999992,75.053863999999976],[-108.79472399999997,75.069153000000028],[-108.83249699999993,75.069992000000013],[-108.92777999999993,75.05192599999998],[-108.94972200000001,75.040267999999969],[-109.00110599999999,75.004990000000134],[-109.11971999999997,74.979430999999977],[-109.34584000000001,74.944702000000063],[-109.36416600000001,74.939697000000024],[-109.39998600000001,74.918319999999994],[-109.40722700000003,74.912490999999989],[-109.40695199999993,74.908599999999922],[-109.420547,74.893051000000014],[-109.50805700000001,74.866379000000109],[-109.52278099999995,74.863312000000008],[-109.56861900000001,74.857758000000047],[-109.58721899999995,74.856644000000017],[-109.66139199999992,74.856369000000029],[-109.76944700000001,74.859421000000111],[-109.79750099999995,74.863602000000014],[-109.81111099999993,74.868042000000059],[-109.83361799999994,74.869704999999954],[-109.87249800000001,74.869141000000013],[-109.93472300000002,74.860809000000017],[-109.95500199999987,74.857208000000014],[-109.99471999999997,74.848327999999981],[-110.01640299999991,74.842209000000082],[-110.13971700000002,74.833054000000061],[-110.30444299999994,74.846375000000023],[-110.32501200000002,74.847488000000112],[-110.34555099999989,74.846939000000134],[-110.36000100000001,74.843872000000033],[-110.37053700000001,74.839980999999966],[-110.40416699999997,74.826660000000004],[-110.39620999999994,74.813689999999951],[-110.39666699999998,74.799423000000104],[-110.43666100000002,74.793319999999937],[-110.58999599999993,74.778046000000074],[-110.59137699999997,74.724152000000061],[-110.75666799999993,74.685257000000092],[-110.77250699999996,74.680817000000047],[-110.78639199999998,74.674698000000035],[-110.79638699999998,74.668869000000029],[-110.807503,74.657486000000006],[-110.83389299999993,74.651931999999988],[-110.98111,74.621368000000132],[-111.28056300000003,74.567764000000125],[-111.38722200000001,74.563034000000073],[-111.40915699999999,74.562759000000085],[-111.43055699999996,74.560532000000023],[-111.55888399999998,74.52748100000008],[-111.64250199999992,74.501389000000017],[-111.67722300000003,74.493317000000047],[-111.700287,74.49136400000009],[-111.82389799999999,74.48332199999993],[-111.94554099999993,74.474425999999994],[-111.98416099999997,74.468872000000033],[-112.087219,74.452208999999925],[-112.29305999999991,74.427765000000022],[-112.37053699999996,74.418594000000041],[-112.43831599999999,74.414429000000041],[-112.54194599999988,74.409424000000001],[-112.75306699999993,74.401382000000012],[-112.85694899999993,74.398330999999985],[-112.91999799999991,74.397490999999945],[-113.00890400000003,74.398040999999978],[-113.25723299999993,74.405258000000117],[-113.406113,74.413315000000068],[-113.42832899999996,74.414703000000145],[-113.47168699999997,74.41891499999997],[-113.64083900000003,74.437485000000095],[-113.69638099999997,74.446091000000024],[-113.84221600000001,74.479706000000078],[-113.94167299999998,74.50360100000006],[-114.05387899999999,74.530822999999998],[-114.12110899999993,74.549987999999985],[-114.29834,74.602768000000026],[-114.34861799999999,74.618866000000082],[-114.37470999999994,74.629150000000095],[-114.39695699999993,74.639160000000004],[-114.43804899999986,74.659424000000115],[-114.44360399999994,74.664153999999996],[-114.44776899999994,74.674698000000035],[-114.42859599999991,74.691925000000026],[-114.41972399999992,74.698029000000076],[-114.40750099999997,74.704163000000108],[-114.39444700000001,74.708328000000108],[-114.21444699999995,74.755554000000132],[-114.10166899999996,74.776657000000057],[-114.01027699999992,74.790543000000071],[-113.73166699999996,74.827208999999982],[-113.71000699999996,74.829711999999915],[-113.55695300000002,74.839157],[-113.41861,74.84275800000006],[-113.28278399999999,74.848602000000085],[-113.25334199999998,74.87359600000002],[-113.22269399999988,74.896469000000025],[-113.15194699999995,74.924987999999985],[-113.1205369999999,74.932480000000112],[-113.00750699999992,74.954163000000051],[-112.91111799999987,74.970825000000048],[-112.86749299999997,74.97554000000008],[-112.84528399999994,74.976929000000098],[-112.57224299999996,74.99275200000011],[-112.52416999999991,74.995529000000033],[-112.5,74.996010000000012],[-112.453056,74.996933000000013],[-112.37444299999993,74.998321999999973],[-112.01500699999991,75.002486999999974],[-111.962219,75.001389000000074],[-111.935272,74.998871000000122],[-111.89890299999996,74.994980000000055],[-111.86527999999993,74.988312000000064],[-111.84056099999998,74.986374000000126],[-111.76444999999995,74.981659000000093],[-111.75334199999998,74.981659000000093],[-111.718613,74.986649],[-111.62666300000001,75.003875999999991],[-111.58972199999999,75.006378000000041],[-111.55139200000002,75.011383000000137],[-111.53527800000001,75.014998999999989],[-111.28971899999999,75.086105000000032],[-111.02916700000003,75.171097000000032],[-110.920547,75.223602000000085],[-110.91361999999998,75.228591999999935],[-110.91278099999994,75.233871000000136],[-110.91750300000001,75.239699999999971],[-111.05249000000003,75.270263999999997],[-111.06806899999987,75.271927000000119],[-111.23082699999998,75.264159999999947],[-111.24889400000001,75.259155000000078],[-111.25195300000001,75.254165999999941],[-111.25083899999993,75.248596000000077],[-111.25167799999997,75.243042000000059],[-111.25611900000001,75.236649000000114],[-111.26112399999994,75.232208000000014],[-111.27778599999994,75.220534999999984],[-111.33416699999992,75.19747899999993],[-111.39167800000001,75.181091000000094],[-111.47501399999999,75.161652000000004],[-111.56082200000003,75.146103000000096],[-111.57721700000002,75.143600000000106],[-111.59612299999998,75.143326000000002],[-111.69526699999989,75.145828000000051],[-111.70584100000002,75.151093000000117],[-111.787216,75.166655999999932],[-111.958054,75.13499500000006],[-112.22833300000002,75.124694999999974],[-112.39055599999995,75.123032000000023],[-112.40972899999997,75.12359600000002],[-112.42916899999994,75.125259000000085],[-112.439438,75.128586000000041],[-112.44833399999999,75.133041000000048],[-112.47084000000001,75.146378000000084],[-112.46833800000002,75.151382000000069],[-112.46166999999997,75.154433999999981],[-112.45249899999999,75.155822999999998],[-112.41197199999993,75.159012000000075],[-112.36860699999994,75.169144000000131],[-112.35833700000001,75.173035000000027],[-112.29472399999992,75.198028999999963],[-112.29583700000001,75.202774000000034],[-112.33944700000001,75.223602000000085],[-112.39750700000002,75.241089000000102],[-112.40888999999993,75.240814000000114],[-112.4366609999999,75.230545000000063],[-112.46193700000003,75.218872000000033],[-112.46417200000002,75.213043000000027],[-112.46305799999999,75.208327999999995],[-112.45056199999999,75.204711999999972],[-112.43749999999994,75.198868000000118],[-112.43221999999997,75.19331399999993],[-112.43250299999994,75.1869200000001],[-112.44471699999997,75.18331900000004],[-112.46665999999999,75.179977000000065],[-112.56111099999993,75.178314],[-112.59249899999998,75.181656000000089],[-112.60888699999992,75.185256999999979],[-112.62554899999998,75.190810999999997],[-112.6347429999999,75.196365000000128],[-112.63722200000001,75.204987000000131],[-112.63694800000002,75.210541000000148],[-112.632767,75.215820000000122],[-112.61609599999997,75.223877000000073],[-112.59472699999998,75.230270000000075],[-112.58583099999998,75.239150999999993],[-112.59472699999998,75.250000000000057],[-112.61277799999999,75.259430000000123],[-112.65167200000002,75.275269000000037],[-112.66583300000002,75.278595000000109],[-112.679169,75.277771000000143],[-112.71305799999999,75.256104000000107],[-112.718887,75.250275000000045],[-112.735817,75.203323000000125],[-112.73416099999992,75.19747899999993],[-112.72888199999994,75.192749000000106],[-112.71584299999995,75.187195000000088],[-112.698036,75.177765000000022],[-112.68859899999995,75.171920999999998],[-112.699997,75.138321000000133],[-112.80695300000002,75.115814000000057],[-112.89417300000002,75.103317000000061],[-112.95667300000002,75.097214000000122],[-113.25446299999999,75.076096000000007],[-113.29888899999997,75.073044000000095],[-113.343887,75.072220000000129],[-113.610817,75.062759000000142],[-113.68083200000001,75.05192599999998],[-113.699432,75.051375999999948],[-113.89417299999997,75.052199999999914],[-113.91750299999995,75.053589000000102],[-113.94138299999986,75.056931000000077],[-113.950287,75.06053199999991],[-113.96888699999994,75.075272000000041],[-113.97305299999994,75.086655000000064],[-113.97305299999994,75.096374999999966],[-113.93138099999999,75.189148000000046],[-113.82055700000001,75.314423000000147],[-113.80583199999995,75.326660000000118],[-113.78278399999999,75.33776899999998],[-113.72805800000003,75.345825000000048],[-113.66055299999994,75.351379000000065],[-113.64222699999993,75.353591999999992],[-113.573624,75.366928000000144],[-113.34056099999992,75.413315000000068],[-113.38110399999999,75.418320000000108],[-113.47112300000003,75.427764999999965],[-113.577789,75.411652000000117],[-113.66027799999995,75.398605000000089],[-113.74445299999996,75.385818000000086],[-113.83389299999988,75.37692300000009],[-113.87138400000003,75.374145999999996],[-113.90222199999999,75.3744200000001],[-113.91139199999998,75.378036000000122],[-113.92111199999994,75.383881000000031],[-113.958618,75.411102000000085],[-113.98166700000002,75.431091000000038],[-113.98416099999992,75.437758999999971],[-113.99221799999998,75.448318000000029],[-114.02416999999997,75.461105000000032],[-114.04083300000002,75.463882000000126],[-114.06500199999988,75.466095000000109],[-114.08389299999999,75.464706000000092],[-114.08693699999998,75.462494000000049],[-114.08917199999996,75.458602999999982],[-114.093887,75.410812000000078],[-114.09166699999992,75.404984000000127],[-114.08583099999993,75.400269000000094],[-114.07778899999988,75.394150000000081],[-114.06610099999995,75.389160000000061],[-114.05638099999987,75.383330999999998],[-114.04472399999992,75.373032000000023],[-114.04055800000003,75.36775200000011],[-114.04055800000003,75.362198000000092],[-114.04750100000001,75.35054000000008],[-114.13751200000002,75.244979999999998],[-114.15805099999994,75.233321999999987],[-114.17083699999989,75.226929000000041],[-114.18666100000002,75.223312000000078],[-114.203056,75.221375000000023],[-114.22277799999995,75.2227630000001],[-114.26363399999991,75.229705999999908],[-114.28472899999997,75.234985000000108],[-114.319458,75.24470500000001],[-114.34638999999993,75.25471500000009],[-114.35082999999997,75.26638800000012],[-114.34916699999985,75.271378000000141],[-114.35109699999992,75.276093000000003],[-114.35888699999992,75.281371999999976],[-114.49999999999994,75.312194999999974],[-114.51278699999995,75.314697000000081],[-114.52806099999992,75.314423000000147],[-114.54276999999996,75.31303400000013],[-114.60973399999995,75.27998400000007],[-114.61527999999993,75.274994000000049],[-114.61138900000003,75.265273999999977],[-114.598343,75.261658000000068],[-114.57972699999999,75.263321000000019],[-114.57250999999997,75.264434999999992],[-114.54666099999997,75.266937000000041],[-114.49638399999998,75.265548999999965],[-114.46806299999997,75.262207000000046],[-114.44304699999986,75.257216999999969],[-114.41278099999994,75.24803199999991],[-114.39723200000003,75.238876000000005],[-114.30249000000003,75.1827550000001],[-114.297234,75.179152999999928],[-114.29472399999997,75.173309000000131],[-114.29804999999999,75.166655999999932],[-114.30860899999993,75.154709000000025],[-114.32112099999995,75.143326000000002],[-114.33528099999995,75.13108799999992],[-114.34944199999995,75.119140999999956],[-114.36749299999985,75.106934000000024],[-114.39499699999993,75.090546000000131],[-114.42971799999987,75.073044000000095],[-114.46640000000002,75.06053199999991],[-114.48332199999987,75.056090999999981],[-114.51889,75.050261999999975],[-114.60082999999997,75.038315000000011],[-114.72416699999997,75.011932000000058],[-114.76342799999998,75.002472000000012],[-114.825287,74.988037000000077],[-114.88861099999991,74.977478000000019],[-114.94915800000001,74.969986000000063],[-115.03222699999992,74.961655000000007],[-115.05082700000003,74.961104999999975],[-115.066101,74.961655000000007],[-115.16055299999999,74.979430999999977],[-115.18582200000003,74.985259999999982],[-115.195267,74.989975000000015],[-115.22609699999992,75.049713000000054],[-115.22638699999993,75.058318999999983],[-115.225281,75.064147999999989],[-115.21861299999995,75.070831000000112],[-115.21167000000003,75.07638500000013],[-115.199432,75.082763999999997],[-115.18331899999993,75.088882000000126],[-115.17415599999993,75.094147000000021],[-115.17304999999999,75.099990999999989],[-115.17278299999992,75.10775799999999],[-115.17832899999996,75.115814000000057],[-115.216949,75.167480000000126],[-115.23554999999993,75.174698000000092],[-115.24861099999998,75.178314],[-115.25695799999994,75.179977000000065],[-115.26083399999993,75.179977000000065],[-115.25611900000001,75.178040000000067],[-115.252228,75.173874000000126],[-115.25361599999991,75.164429000000098],[-115.256393,75.158035000000041],[-115.26139799999999,75.151932000000102],[-115.27916699999997,75.140823000000012],[-115.291382,75.134430000000066],[-115.33640300000002,75.116652999999985],[-115.35305799999998,75.111099000000024],[-115.37304699999999,75.105820000000051],[-115.38694799999996,75.102203000000088],[-115.40416700000003,75.098877000000016],[-115.42666600000001,75.098038000000088],[-115.451683,75.098877000000016],[-115.48361199999994,75.106093999999985],[-115.51944700000001,75.117751999999996],[-115.62389399999995,75.121368000000018],[-115.60472099999993,75.108597000000088],[-115.54888899999997,75.055817000000047],[-115.53971899999993,75.044434000000081],[-115.53751399999993,75.039429000000041],[-115.53751399999993,75.027205999999978],[-115.54527300000001,75.015823000000125],[-115.5516659999999,75.009155000000135],[-115.57472200000001,74.998321999999973],[-115.60249299999998,74.98553499999997],[-115.61833200000001,74.979155999999932],[-115.658051,74.967208999999968],[-115.67194399999988,74.964706000000035],[-115.69055200000003,74.964157000000057],[-115.73500100000001,74.967208999999968],[-115.75723299999999,74.969986000000063],[-115.84777800000001,74.98553499999997],[-116.16306299999991,75.040267999999969],[-116.27916699999997,75.099425999999994],[-116.28639199999992,75.13108799999992],[-116.27694699999995,75.135268999999994],[-116.26889,75.141373000000044],[-116.2455369999999,75.162766000000147],[-116.24109599999997,75.168869000000086],[-116.23860200000001,75.196930000000009],[-116.23916599999995,75.201385000000016],[-116.24694799999992,75.205261000000064],[-116.26834100000002,75.206100000000049],[-116.287216,75.205551000000071],[-116.52722199999999,75.184708000000001],[-116.56054699999999,75.179152999999928],[-116.58084100000002,75.174423000000104],[-116.59388699999994,75.170258000000103],[-116.60249299999998,75.164993000000038],[-116.618607,75.152481000000023],[-116.66332999999997,75.122481999999991],[-116.679169,75.117203000000018],[-116.69415299999997,75.116652999999985],[-116.71721599999995,75.116652999999985],[-117.16860999999994,75.157486000000063],[-117.38417099999992,75.178588999999988],[-117.41915899999992,75.182480000000055],[-117.45777899999996,75.188873000000001],[-117.47501399999993,75.192200000000128],[-117.66361999999998,75.239150999999993],[-117.67832900000002,75.244431000000077],[-117.68305999999995,75.248596000000077],[-117.68388400000003,75.253052000000139],[-117.67166099999997,75.288879000000122],[-117.666946,75.294144000000017],[-117.66194199999995,75.298035000000084],[-117.53666699999997,75.361649],[-117.45527599999997,75.400269000000094],[-117.42054699999994,75.413315000000068],[-117.35360699999995,75.437485000000038],[-117.32112099999995,75.448593000000074],[-117.26139799999993,75.468871999999976],[-117.24054699999999,75.473602000000028],[-117.218887,75.476379000000122],[-117.14666699999998,75.480270000000019],[-117.10305799999998,75.482208000000128],[-117.041382,75.483597000000145],[-116.89778100000001,75.482482999999945],[-116.87748699999997,75.481368999999972],[-116.75334199999998,75.479431000000034],[-116.13474300000001,75.476379000000122],[-116.11554699999994,75.476928999999984],[-116.02194199999997,75.484985000000052],[-115.97332799999998,75.492751999999996],[-115.92250100000001,75.503876000000048],[-115.81833599999987,75.529709000000025],[-115.68888900000002,75.56442300000009],[-115.64639299999999,75.573607999999922],[-115.61972000000003,75.578872999999987],[-115.56527699999987,75.583878000000027],[-115.53056299999997,75.584991000000116],[-115.50611900000001,75.587204000000099],[-115.46305799999999,75.591933999999924],[-115.36609599999997,75.602768000000026],[-115.28832999999997,75.620529000000147],[-115.28611799999993,75.624420000000043],[-115.27722199999999,75.630539000000056],[-115.26777600000003,75.635818000000029],[-115.20333900000003,75.657211000000132],[-115.18611099999993,75.662766000000033],[-115.09665699999994,75.687194999999974],[-115.08194700000001,75.689423000000147],[-115.07028200000002,75.689972000000068],[-115.04250300000001,75.689697000000081],[-114.99973299999994,75.690811000000053],[-114.99804699999999,75.695816000000093],[-115.00556899999992,75.698868000000004],[-115.02834300000001,75.701660000000118],[-115.05277999999998,75.703048999999908],[-115.07611099999991,75.702484000000084],[-115.10305800000003,75.700821000000133],[-115.14555399999995,75.694138000000009],[-115.21721600000001,75.679321000000073],[-115.27916699999997,75.667755],[-115.32472199999995,75.659988000000055],[-115.38305700000001,75.653870000000097],[-115.40194699999995,75.652480999999966],[-115.47193900000002,75.650269000000037],[-115.51888999999994,75.649994000000049],[-115.60637700000001,75.651093000000003],[-115.66750299999995,75.647217000000126],[-115.71444700000001,75.642487000000131],[-115.889183,75.614426000000037],[-116.09166700000003,75.580551000000128],[-116.108047,75.574157999999954],[-116.11916400000001,75.572768999999994],[-116.34750399999996,75.559143000000006],[-116.38971700000002,75.5577550000001],[-116.46028099999995,75.557480000000055],[-116.48610699999995,75.5577550000001],[-116.84361299999989,75.564987000000031],[-117.19499200000001,75.573607999999922],[-117.21556099999998,75.574707000000103],[-117.23277300000001,75.576935000000049],[-117.24276700000001,75.580551000000128],[-117.25,75.586105000000089],[-117.25110599999994,75.597488000000112],[-117.24833699999999,75.603043000000014],[-117.23999000000003,75.614990000000148],[-117.23361199999994,75.620529000000147],[-117.21362299999993,75.633330999999998],[-117.07805599999995,75.707214000000079],[-117.06443799999994,75.714157000000114],[-117.03971899999999,75.725815000000125],[-117.02362099999993,75.732483000000116],[-117.01666299999994,75.737198000000149],[-116.95556599999992,75.761932000000115],[-116.923317,75.774704000000099],[-116.88667299999992,75.786926000000051],[-116.86888099999999,75.790543000000014],[-116.85056299999991,75.79304500000012],[-116.81639099999995,75.796371000000136],[-116.76278699999995,75.799988000000099],[-116.71972699999998,75.801650999999993],[-116.58860799999997,75.803314000000114],[-116.53056300000003,75.802765000000022],[-116.32417299999992,75.804703000000131],[-116.10582699999998,75.806931000000077],[-116.03721599999994,75.809708000000001],[-115.82305899999994,75.827208999999925],[-115.80444299999994,75.829987000000131],[-115.79444899999999,75.834152000000131],[-115.78415699999994,75.845260999999994],[-115.77971600000001,75.852203000000088],[-115.76500699999997,75.854431000000034],[-115.74944299999999,75.854980000000012],[-115.73693800000001,75.854431000000034],[-115.72638699999993,75.853317000000061],[-115.69193999999993,75.848328000000095],[-115.67388900000003,75.844147000000021],[-115.65943900000002,75.839706000000092],[-115.62277199999994,75.834427000000119],[-115.59445199999999,75.833327999999995],[-115.50723299999993,75.834991000000059],[-115.40499899999998,75.838043000000027],[-115.38194299999992,75.839706000000092],[-115.36416599999995,75.844147000000021],[-115.35193599999997,75.852203000000088],[-115.31360599999994,75.855255],[-115.13945000000001,75.859421000000111],[-115.07277699999986,75.85775799999999],[-115.04998799999998,75.855820000000051],[-115.00083899999998,75.853317000000061],[-114.98082699999992,75.853043000000127],[-114.932503,75.856644000000017],[-114.91194199999995,75.859711000000118],[-114.83860799999997,75.874419999999986],[-114.817497,75.880814000000044],[-114.80444299999994,75.886932000000002],[-114.798607,75.892212000000029],[-114.80999800000001,75.899428999999941],[-114.82417299999986,75.904160000000104],[-114.83667000000003,75.905822999999998],[-114.88166799999993,75.907486000000119],[-114.90722700000003,75.906372000000147],[-115.01806599999992,75.89888000000002],[-115.06416299999989,75.894714000000135],[-115.10527000000002,75.888596000000007],[-115.22165699999999,75.880264000000011],[-115.29277000000002,75.878311000000053],[-115.39472999999992,75.877762000000132],[-115.54055799999998,75.881362999999965],[-115.68222000000003,75.888321000000133],[-115.74694799999986,75.889434999999935],[-115.83029199999993,75.887772000000041],[-115.86888099999999,75.884430000000066],[-116.00472999999994,75.868590999999981],[-116.05332899999991,75.865540000000124],[-116.10665899999998,75.864150999999936],[-116.13474300000001,75.86442599999998],[-116.15083299999992,75.864700000000084],[-116.48277299999995,75.873871000000065],[-116.62389400000001,75.881927000000132],[-116.64972699999998,75.884995000000117],[-116.67666600000001,75.889709000000039],[-116.69972199999995,75.894989000000123],[-116.71501199999994,75.900269000000037],[-116.72444200000001,75.906372000000147],[-116.73416099999992,75.922484999999995],[-116.73361199999999,75.928589000000045],[-116.73137699999995,75.945251000000042],[-116.72666899999996,75.951385000000016],[-116.71389799999997,75.956649999999911],[-116.69972199999995,75.959990999999945],[-116.67748999999998,75.963882000000012],[-116.63221699999997,75.969147000000078],[-116.58528099999995,75.971924000000001],[-116.56139400000001,75.972762999999986],[-116.53721599999994,75.972488000000112],[-116.51611300000002,75.971100000000035],[-116.48528299999998,75.966385000000002],[-116.470551,75.96887200000009],[-116.46193700000003,75.974991000000102],[-116.46833800000002,75.986374000000126],[-116.52834299999995,76.027480999999966],[-116.60221899999993,76.022216999999955],[-116.645554,76.023041000000092],[-116.66944899999999,76.025818000000015],[-116.6875,76.02915999999999],[-116.69888300000002,76.034424000000115],[-116.70556599999998,76.039153999999996],[-116.708618,76.043869000000029],[-116.70777900000002,76.049988000000042],[-116.70612299999999,76.05386400000009],[-116.70168299999995,76.059982000000048],[-116.69638099999992,76.064987000000087],[-116.64138800000001,76.113312000000121],[-116.53388999999999,76.153320000000008],[-116.51611300000002,76.157761000000107],[-116.34221599999995,76.183043999999995],[-116.29611199999999,76.188582999999994],[-116.21362299999998,76.194977000000051],[-116.16361999999992,76.197204999999997],[-116.08416699999998,76.198318000000086],[-116.05943300000001,76.198029000000133],[-115.95889299999999,76.194138000000066],[-115.90862300000003,76.191924999999912],[-115.86554699999999,76.188309000000061],[-115.81582600000002,76.186920000000043],[-115.64334099999996,76.186096000000077],[-115.59500100000002,76.187759000000028],[-115.44721999999996,76.186920000000043],[-115.32749899999999,76.184708000000001],[-115.27306399999998,76.18220500000001],[-115.154449,76.169434000000081],[-115.13027999999997,76.165816999999947],[-115.02166699999998,76.15637200000009],[-114.87554899999998,76.149719000000118],[-114.85109699999992,76.149429000000112],[-114.79077100000001,76.151077000000043],[-114.72833300000002,76.153046000000074],[-114.68499799999995,76.156097000000045],[-114.66972399999997,76.158325000000048],[-114.66251399999999,76.160537999999974],[-114.662781,76.161651999999947],[-114.68083199999995,76.164992999999981],[-114.70639,76.167205999999965],[-114.80082699999997,76.168594000000041],[-114.85056299999997,76.170258000000047],[-114.89862099999993,76.172485000000108],[-114.94499200000001,76.176085999999998],[-114.99305700000002,76.182480000000055],[-115.00974299999996,76.187485000000095],[-115.01444999999995,76.192749000000049],[-115.02250700000002,76.196929999999952],[-115.04527300000001,76.202208999999982],[-115.08944699999995,76.208878000000027],[-115.15972899999997,76.218596999999988],[-115.27223200000003,76.230270000000019],[-115.37304699999999,76.230820000000051],[-115.54943800000001,76.230545000000063],[-115.75666799999993,76.234146000000123],[-115.78195199999993,76.235260000000096],[-115.82721699999991,76.23942599999998],[-115.84777800000001,76.243042000000059],[-115.86665299999993,76.247482000000048],[-115.88194299999992,76.252776999999924],[-115.91471899999993,76.275269000000037],[-115.92166099999997,76.281096999999932],[-115.92500299999989,76.286652000000061],[-115.90943899999996,76.345535000000041],[-115.90139799999997,76.349991000000102],[-115.86054999999999,76.362488000000099],[-115.64835399999998,76.420258000000047],[-115.62638899999996,76.425812000000008],[-115.51471700000002,76.45138500000013],[-115.49973299999994,76.454712000000086],[-115.46665999999993,76.455826000000059],[-115.26944700000001,76.461105000000032],[-115.02139299999993,76.474700999999982],[-115.00167799999997,76.477203000000088],[-114.978882,76.481658999999979],[-114.95638999999994,76.487198000000149],[-114.94638099999992,76.492477000000122],[-114.93360899999999,76.504990000000021],[-114.92999299999997,76.510268999999994],[-114.91944899999999,76.514435000000105],[-114.89972699999987,76.516936999999984],[-114.74054699999988,76.517212000000029],[-114.71112099999999,76.516936999999984],[-114.70194999999995,76.515274000000034],[-114.69611399999991,76.511382999999967],[-114.69833399999999,76.507492000000127],[-114.720551,76.501099000000124],[-114.70694699999996,76.489700000000028],[-114.61028299999992,76.488312000000121],[-114.45140099999998,76.49693300000007],[-114.29361,76.480269999999962],[-114.25167799999991,76.474990999999989],[-114.20722999999987,76.46804800000001],[-114.17471299999994,76.460266000000047],[-114.14806399999998,76.45138500000013],[-114.13555899999989,76.446365000000071],[-114.11833199999995,76.435257000000092],[-114.11193800000001,76.429428000000087],[-114.10333299999996,76.418869000000029],[-114.096947,76.403595000000109],[-114.09111000000001,76.388885000000016],[-114.10611,76.35554500000012],[-114.11749299999997,76.353317000000004],[-114.12943999999993,76.31191999999993],[-114.05972299999996,76.21775800000006],[-113.99665800000002,76.192749000000049],[-113.98332199999999,76.190262000000018],[-113.9583439999999,76.188873000000001],[-113.94833399999999,76.189423000000033],[-113.70889299999999,76.203598000000113],[-113.685272,76.206100000000049],[-113.63890100000003,76.212769000000094],[-113.61609599999997,76.218323000000055],[-113.52443700000003,76.235809000000017],[-113.36501299999992,76.258605999999929],[-113.32333399999993,76.262772000000041],[-113.26055899999994,76.264434999999992],[-112.99916100000002,76.267487000000074],[-112.95667300000002,76.263611000000026],[-112.90972899999997,76.257491999999957],[-112.89222699999993,76.253876000000105],[-112.86860699999994,76.244704999999954],[-112.85888699999998,76.239975000000129],[-112.85305800000003,76.234146000000123],[-112.75055700000001,76.200546000000031],[-112.71721599999995,76.198318000000086],[-112.62138399999998,76.198318000000086],[-112.59028599999999,76.196639999999945],[-112.48194899999999,76.181366000000082],[-112.46278399999994,76.178313999999943],[-112.45388800000001,76.176376000000005],[-112.42500299999995,76.167755000000113],[-112.43138099999993,76.161926000000108],[-112.43859900000001,76.15887500000008],[-112.47721899999999,76.151382000000012],[-112.49416400000001,76.146652000000017],[-112.50389099999995,76.138596000000121],[-112.52610800000002,76.110535000000027],[-112.52806099999998,76.103867000000037],[-112.52278100000001,76.099152000000004],[-112.42278299999987,76.047211000000118],[-112.41332999999992,76.042480000000012],[-112.38555899999994,76.036652000000061],[-112.29888900000003,76.029434000000094],[-112.15416699999997,76.014998999999989],[-112.06861899999996,76.003326000000129],[-112.04332699999992,75.998871000000122],[-111.9786069999999,75.981369000000086],[-111.78443900000002,75.949707000000103],[-111.76390100000003,75.946930000000009],[-111.75279199999994,75.942749000000106],[-111.72778299999999,75.92164600000001],[-111.72666900000002,75.915817000000004],[-111.729446,75.911101999999971],[-111.736107,75.90498400000007],[-111.77749599999999,75.894714000000135],[-111.87138400000003,75.887496999999996],[-111.94444299999998,75.884995000000117],[-112.00945300000001,75.881652999999972],[-112.03472899999997,75.879974000000004],[-112.05222300000003,75.878036000000066],[-112.07501200000002,75.873871000000065],[-112.165009,75.851928999999984],[-112.17971799999998,75.848038000000088],[-112.18694299999993,75.844986000000006],[-112.22556299999997,75.811096000000077],[-112.218613,75.808029000000147],[-112.20834399999995,75.80664100000007],[-112.19248999999996,75.805817000000104],[-112.02834299999995,75.815261999999962],[-111.85861199999988,75.826934999999992],[-111.69082599999996,75.822769000000108],[-111.64499699999993,75.821655000000135],[-111.604446,75.826660000000004],[-111.53971899999993,75.838318000000015],[-111.49638400000003,75.839706000000092],[-111.47638699999999,75.839157],[-111.45195000000001,75.836655000000064],[-111.44499200000001,75.832213999999965],[-111.35527000000002,75.724426000000108],[-111.35388199999994,75.718597000000102],[-111.35500299999995,75.714432000000102],[-111.38971700000002,75.663039999999967],[-111.40834000000001,75.620818999999983],[-111.40722700000003,75.614990000000148],[-111.35360700000001,75.57249500000006],[-111.31861900000001,75.545258000000103],[-111.27139299999999,75.522491000000002],[-111.24722299999996,75.518051000000014],[-111.22165699999999,75.516936999999984],[-110.995003,75.529160000000047],[-110.97222899999997,75.532486000000119],[-110.89943700000003,75.550262000000089],[-110.79499799999996,75.565262000000018],[-110.77166699999992,75.566666000000055],[-110.54222099999993,75.568878000000097],[-110.49553699999996,75.569153000000085],[-110.47582999999992,75.568329000000119],[-110.45612299999999,75.565535999999952],[-110.43110699999994,75.554152999999985],[-110.42443799999995,75.548873999999955],[-110.42223399999995,75.545532000000037],[-110.33389299999993,75.539154000000053],[-110.19583099999994,75.539703000000031],[-110.06777999999997,75.540543000000071],[-109.97416699999991,75.537490999999989],[-109.75,75.529709000000025],[-109.55304699999999,75.521652000000017],[-109.30444299999999,75.514999000000046],[-109.25389100000001,75.514160000000118],[-109.18360899999999,75.5086060000001],[-109.07472199999995,75.498322000000087],[-108.93639400000001,75.47665399999994],[-108.89943699999998,75.476379000000122],[-108.89584399999995,75.477203000000088],[-108.891953,75.480270000000019],[-108.91639700000002,75.513321000000133],[-108.92443800000001,75.52388000000002],[-108.83612099999993,75.612762000000032],[-108.8269499999999,75.686646000000053],[-108.84277299999991,75.691359999999975],[-108.88194299999998,75.692200000000071],[-108.91332999999992,75.691086000000041],[-108.94499199999996,75.694976999999938],[-109.05832699999996,75.728043000000071],[-109.05860899999993,75.733047000000056],[-109.06276699999989,75.737762000000089],[-109.12638900000002,75.7494200000001],[-109.21000699999996,75.762771999999984],[-109.26555599999995,75.770264000000054],[-109.30526700000001,75.771103000000039],[-109.45221700000002,75.783051000000057],[-109.62943999999993,75.799988000000099],[-109.63751200000002,75.822769000000108],[-109.62805200000003,75.829162999999994],[-109.62638900000002,75.83248900000001],[-109.65722699999992,75.866379000000109],[-109.66361999999998,75.870819000000097],[-109.72972099999998,75.876647999999932],[-109.737503,75.876647999999932],[-109.845551,75.863036999999963],[-109.85722399999992,75.860809000000017],[-109.88390400000003,75.849991000000045],[-109.90778399999994,75.849991000000045],[-109.93639399999989,75.856644000000017],[-110.05555699999996,75.890548999999908],[-110.05583200000001,75.894439999999975],[-110.04055800000003,75.898604999999975],[-109.92610200000001,75.927765000000079],[-109.826683,75.930541999999946],[-109.69776899999999,75.940262000000075],[-109.672234,75.943862999999908],[-109.65666199999998,75.94802900000002],[-109.42138699999998,76.035812000000021],[-109.30499299999991,76.100540000000137],[-109.30943300000001,76.106094000000098],[-109.31360599999999,76.109146000000067],[-109.396118,76.133041000000048],[-109.69999699999994,76.218872000000033],[-109.72250400000001,76.222213999999951],[-109.80943300000001,76.234421000000111],[-109.83416699999998,76.236099000000024],[-109.85861199999999,76.235809000000017],[-109.882767,76.233871000000079],[-109.89666699999992,76.230270000000019],[-109.90222199999999,76.226089000000115],[-109.90167199999996,76.221099999999979],[-109.88305699999995,76.198868000000118],[-109.88667299999997,76.194977000000051],[-109.89666699999992,76.193588000000034],[-109.91944899999993,76.196639999999945],[-109.94055200000003,76.20248400000014],[-110.01471700000002,76.229706000000078],[-110.06833599999993,76.250000000000057],[-110.08528100000001,76.255829000000062],[-110.12332199999997,76.266098000000056],[-110.15306099999998,76.27388000000002],[-110.201683,76.285538000000031],[-110.24109599999991,76.290543000000127],[-110.26583900000003,76.291367000000093],[-110.33138999999989,76.290817000000061],[-110.35804699999994,76.292206000000022],[-110.372772,76.294433999999967],[-110.38362099999995,76.297760000000039],[-110.39306599999986,76.391937000000098],[-110.38527699999986,76.423035000000084],[-110.38390400000003,76.427475000000129],[-110.28943600000002,76.433044000000109],[-110.095551,76.454163000000108],[-109.80721999999997,76.490540000000124],[-109.74638400000003,76.505553999999961],[-109.71833799999996,76.515274000000034],[-109.70639,76.521103000000096],[-109.70694700000001,76.526093000000117],[-109.71140300000002,76.529984000000013],[-109.72416699999997,76.531662000000097],[-109.74916100000002,76.531662000000097],[-109.81111099999993,76.527206000000035],[-109.83222999999992,76.529160000000047],[-109.84722899999991,76.532486000000063],[-109.83750900000001,76.538879000000065],[-109.75527999999997,76.572768999999937],[-109.70667299999997,76.587494000000106],[-109.64666699999998,76.593323000000112],[-109.56082199999997,76.640823000000069],[-109.5097429999999,76.708328000000051],[-109.30277999999998,76.79693600000013],[-109.22277800000001,76.808029000000147],[-109.12777699999992,76.819443000000035],[-109.02583299999998,76.822769000000108],[-108.97444199999995,76.816086000000098],[-108.95084400000002,76.81164600000011],[-108.93582200000003,76.809417999999937],[-108.91887699999995,76.809417999999937],[-108.88945000000001,76.814147999999989],[-108.84500099999997,76.823608000000036],[-108.82195299999989,76.829987000000074],[-108.81331599999999,76.833878000000141],[-108.81360599999999,76.837769000000037],[-108.81582600000002,76.84304800000001],[-108.81388899999996,76.847488000000055],[-108.78859699999992,76.857208000000128],[-108.77362099999999,76.85775799999999],[-108.74804699999999,76.855820000000051],[-108.65556300000003,76.817490000000078],[-108.65110800000002,76.813599000000011]],[[-97.045272999999952,76.797760000000096],[-97.075287000000003,76.793320000000108],[-97.093886999999995,76.79693600000013],[-97.188598999999954,76.822769000000108],[-97.200561999999991,76.829437000000041],[-97.200835999999924,76.834152000000074],[-97.200835999999924,76.857482999999945],[-97.187499999999943,76.860260000000039],[-97.149170000000026,76.859711000000118],[-97.128875999999991,76.85775799999999],[-97.086945000000014,76.851089000000115],[-97.005004999999983,76.819716999999969],[-96.997222999999963,76.813309000000004],[-97.009170999999981,76.807479999999998],[-97.026397999999915,76.802475000000129],[-97.045272999999952,76.797760000000096]],[[-113.46610999999996,76.766388000000006],[-113.61361699999992,76.713043000000084],[-113.628601,76.708038000000045],[-113.65249599999999,76.704436999999984],[-113.67999299999985,76.704436999999984],[-113.70417799999996,76.706374999999923],[-113.78472899999997,76.717209000000025],[-113.83667000000003,76.719986000000063],[-113.889183,76.718597000000102],[-114.05471799999992,76.703598000000056],[-114.16194200000001,76.716933999999981],[-114.21444699999995,76.720535000000041],[-114.50110599999999,76.73414600000001],[-114.73416099999997,76.746643000000006],[-114.78694200000001,76.750274999999931],[-114.82501200000002,76.753601000000003],[-114.85888699999998,76.758040999999992],[-114.87304699999993,76.760818000000086],[-114.87526700000001,76.765549000000021],[-114.87581599999999,76.770827999999995],[-114.85526999999996,76.794434000000081],[-114.83721899999989,76.801650999999993],[-114.80444299999994,76.813309000000004],[-114.76666299999988,76.82388300000008],[-114.62416099999996,76.86192299999999],[-114.60637700000001,76.865814000000057],[-114.58583099999993,76.867476999999951],[-114.33693700000003,76.877197000000081],[-114.13834400000002,76.884430000000066],[-113.96221899999995,76.889984000000084],[-113.885559,76.891663000000051],[-113.80750299999994,76.889435000000105],[-113.7625119999999,76.884430000000066],[-113.73444399999994,76.879149999999981],[-113.49804699999993,76.833328000000108],[-113.48750299999989,76.827773999999977],[-113.44915799999995,76.777205999999978],[-113.45388800000001,76.772765999999933],[-113.46610999999996,76.766388000000006]],[[-109.06610099999995,76.900543000000084],[-109.07444800000002,76.894714000000079],[-109.12581599999987,76.898604999999975],[-109.22917200000001,76.906936999999971],[-109.254997,76.910812000000135],[-109.29888899999997,76.922211000000061],[-109.30777,76.928040000000067],[-109.30387899999994,76.933867999999961],[-109.28278399999999,76.937759000000028],[-109.256958,76.938873000000058],[-109.20527600000003,76.935256999999979],[-109.17944299999999,76.932480000000055],[-109.12721299999998,76.923873999999955],[-109.09249899999992,76.912200999999925],[-109.07695000000001,76.906097000000102],[-109.06610099999995,76.900543000000084]],[[-97.256392999999946,76.967484000000127],[-97.284164000000033,76.965820000000122],[-97.335007000000019,76.968048000000067],[-97.40943900000002,76.973037999999974],[-97.458618000000001,76.977203000000145],[-97.473052999999936,76.980545000000063],[-97.423889000000031,77.005829000000062],[-97.374709999999936,77.022491000000059],[-97.286117999999874,77.033325000000104],[-97.243057000000022,77.037491000000045],[-97.199158000000011,77.037766000000033],[-97.154723999999931,77.030273000000022],[-97.136672999999973,77.025542999999971],[-97.092223999999987,77.010818000000029],[-97.093063000000029,77.004990000000134],[-97.231109999999944,76.971375000000023],[-97.256392999999946,76.967484000000127]],[[-95.659728999999913,77.058868000000075],[-95.585555999999883,77.053314000000057],[-95.56082200000003,77.053589000000045],[-95.465285999999935,77.058319000000097],[-95.417769999999962,77.05693100000002],[-95.386672999999973,77.052475000000072],[-95.368331999999953,77.048599000000024],[-95.337218999999948,77.039978000000076],[-95.288054999999872,77.022491000000059],[-95.224715999999944,77.006378000000041],[-95.181945999999925,76.996368000000132],[-95.168334999999956,76.99414100000007],[-95.115829000000019,76.995818999999983],[-95,76.99054000000001],[-94.906386999999881,76.976089000000002],[-94.813888999999904,76.971375000000023],[-94.728606999999954,76.972762999999929],[-94.714172000000019,76.97387700000013],[-94.688599000000011,76.97526600000009],[-94.636123999999995,76.976929000000041],[-94.593063000000029,76.975540000000024],[-94.526397999999972,76.969437000000084],[-94.510009999999909,76.966094999999996],[-94.494155999999919,76.960265999999933],[-94.489715999999987,76.956100000000049],[-94.40194699999995,76.918319999999994],[-94.25778200000002,76.896378000000084],[-94.254729999999995,76.891373000000044],[-94.238891999999964,76.889435000000105],[-94.207229999999925,76.888046000000088],[-94.15972899999997,76.887496999999996],[-94.096389999999985,76.888885000000073],[-94.081680000000006,76.89027400000009],[-94.054992999999854,76.894714000000079],[-94.032226999999921,76.903320000000008],[-94.026107999999965,76.909149000000014],[-94.010559000000001,76.919144000000131],[-94.001113999999916,76.923598999999967],[-93.986663999999962,76.928864000000033],[-93.964721999999995,76.932480000000055],[-93.943603999999937,76.933867999999961],[-93.899993999999936,76.93331900000004],[-93.755004999999926,76.922484999999995],[-93.739166000000012,76.920822000000044],[-93.658339999999896,76.909987999999998],[-93.649445000000014,76.908035000000041],[-93.641953000000001,76.905258000000117],[-93.635833999999988,76.89888000000002],[-93.488602000000014,76.839706000000092],[-93.301392000000021,76.768600000000049],[-93.208054000000004,76.746933000000013],[-93.202788999999939,76.747481999999934],[-93.192214999999976,76.747208000000001],[-93.187499999999943,76.745529000000033],[-93.179717999999923,76.741088999999988],[-93.169723999999974,76.686919999999986],[-93.174438000000009,76.674987999999985],[-93.18638599999997,76.660812000000021],[-93.300277999999878,76.552199999999971],[-93.306655999999919,76.54664600000001],[-93.461394999999982,76.49832200000003],[-93.595276000000013,76.462493999999992],[-93.629989999999964,76.451934999999992],[-93.641953000000001,76.44720500000011],[-93.651947000000007,76.441650000000038],[-93.652221999999938,76.437759000000142],[-93.650283999999999,76.43553200000008],[-93.548339999999882,76.386108000000092],[-93.528609999999958,76.384720000000016],[-93.509445000000028,76.386658000000125],[-93.498336999999992,76.388885000000016],[-93.46362299999987,76.399429000000055],[-93.456954999999994,76.403595000000109],[-93.467399999999998,76.40792799999997],[-93.480559999999969,76.409927000000039],[-93.500838999999985,76.4102630000001],[-93.508895999999993,76.406647000000078],[-93.520554000000004,76.405823000000112],[-93.537780999999995,76.407486000000006],[-93.554992999999968,76.411377000000073],[-93.570846999999958,76.416382000000112],[-93.580565999999976,76.423035000000084],[-93.576401000000033,76.426650999999993],[-93.533065999999963,76.443039000000056],[-93.518889999999999,76.448318000000029],[-93.501403999999923,76.452209000000096],[-93.476562000000001,76.454772999999932],[-93.454223999999954,76.456436000000053],[-93.422226000000023,76.458328000000108],[-93.392776000000026,76.461655000000064],[-93.370270000000005,76.466385000000059],[-93.357223999999917,76.470535000000098],[-93.123610999999926,76.573043999999982],[-93.111114999999927,76.580276000000083],[-93.095276000000013,76.590546000000018],[-93.096953999999926,76.596649000000127],[-93.09973100000002,76.601653999999996],[-93.046386999999925,76.616089000000102],[-92.945830999999998,76.622482000000048],[-92.90306099999998,76.621918000000107],[-92.880279999999971,76.620818999999983],[-92.857223999999917,76.618317000000047],[-92.789718999999934,76.609146000000123],[-92.705276000000026,76.594437000000084],[-92.68360899999999,76.592484000000127],[-92.654998999999975,76.594711000000018],[-92.642501999999979,76.598037999999974],[-92.632767000000001,76.602478000000133],[-92.618057000000022,76.607483000000002],[-92.605834999999956,76.610535000000141],[-92.564437999999939,76.616089000000102],[-92.541106999999897,76.617752000000053],[-92.506393000000003,76.617477000000008],[-92.468338000000017,76.61303700000002],[-92.440825999999959,76.603317000000118],[-92.42111199999988,76.598037999999974],[-92.40055799999999,76.594986000000006],[-92.386948000000018,76.593872000000033],[-92.36860699999994,76.594437000000084],[-92.330840999999964,76.597214000000008],[-92.183318999999983,76.614699999999914],[-92.077498999999989,76.637207000000046],[-92.043609999999887,76.646942000000081],[-92.004332999999917,76.657897999999932],[-91.991942999999992,76.660812000000021],[-91.970001000000025,76.664428999999984],[-91.938599000000011,76.668320000000051],[-91.910003999999901,76.670532000000094],[-91.775557999999933,76.679703000000018],[-91.668609999999944,76.684708000000057],[-91.535827999999924,76.688873000000058],[-91.410552999999936,76.689148000000102],[-91.385283999999956,76.688309000000118],[-91.132767000000001,76.664428999999984],[-91.008895999999936,76.651657000000114],[-90.986114999999984,76.649155000000064],[-90.883895999999936,76.626647999999989],[-90.871383999999978,76.622757000000092],[-90.854720999999984,76.61554000000001],[-90.849990999999875,76.609146000000123],[-90.844161999999926,76.603592000000106],[-90.837218999999948,76.599152000000117],[-90.817779999999971,76.593597000000045],[-90.779998999999975,76.585815000000082],[-90.741104000000007,76.580551000000071],[-90.674438000000009,76.573318000000086],[-90.626388999999961,76.56999200000007],[-90.582503999999972,76.565262000000018],[-90.56361400000003,76.559708000000001],[-90.50306699999993,76.53137200000009],[-90.498610999999926,76.524993999999936],[-90.468613000000005,76.479155999999989],[-90.468063000000029,76.473038000000088],[-90.48332199999993,76.46804800000001],[-90.510833999999988,76.463882000000126],[-90.538054999999929,76.46138000000002],[-90.61610399999995,76.45637499999998],[-90.638335999999924,76.455826000000059],[-90.779175000000009,76.461105000000032],[-90.826400999999976,76.463042999999971],[-91.090560999999923,76.478043000000127],[-91.304169000000002,76.504166000000055],[-91.34973100000002,76.509430000000066],[-91.373885999999857,76.511107999999979],[-91.414718999999934,76.512771999999984],[-91.441101000000003,76.512771999999984],[-91.564162999999951,76.500823999999966],[-91.566665999999998,76.498871000000008],[-91.416396999999961,76.460266000000047],[-91.402495999999985,76.457488999999953],[-91.271117999999944,76.453873000000101],[-91.147506999999962,76.450821000000019],[-91.057219999999973,76.450546000000145],[-90.99110399999995,76.447754000000089],[-90.974166999999966,76.446091000000138],[-90.797774999999945,76.42692599999998],[-90.642226999999991,76.410537999999917],[-90.414443999999946,76.403046000000018],[-90.368331999999953,76.399994000000049],[-90.317229999999938,76.394714000000022],[-90.281386999999995,76.389160000000004],[-90.06361400000003,76.361648999999943],[-89.831389999999942,76.34027100000003],[-89.543883999999935,76.316939999999988],[-89.367766999999958,76.304152999999985],[-89.305557000000022,76.299149],[-89.292496000000028,76.296097000000088],[-89.230559999999912,76.272766000000047],[-89.217772999999909,76.266663000000108],[-89.208617999999944,76.260818000000029],[-89.201110999999912,76.254166000000112],[-89.192214999999976,76.242203000000075],[-89.192490000000021,76.236099000000024],[-89.198607999999865,76.22526600000009],[-89.209166999999979,76.221099999999979],[-89.295546999999942,76.197754000000145],[-89.326400999999919,76.189423000000033],[-89.349730999999963,76.183594000000028],[-89.378051999999968,76.180267000000072],[-89.588332999999921,76.165816999999947],[-89.831954999999994,76.160812000000078],[-89.888610999999912,76.166091999999992],[-89.904175000000009,76.168869000000086],[-89.976105000000018,76.173874000000126],[-90.37332200000003,76.181366000000082],[-90.397780999999952,76.180542000000116],[-90.416945999999996,76.178863999999976],[-90.438598999999954,76.175537000000077],[-90.453613000000018,76.17053199999998],[-90.455840999999964,76.167205999999965],[-90.455565999999976,76.165543000000014],[-90.438598999999954,76.162201000000096],[-90.414443999999946,76.159987999999942],[-90.256957999999941,76.146942000000024],[-90.22222899999997,76.144440000000145],[-90.151671999999905,76.141663000000051],[-90.064162999999894,76.136932000000115],[-90.048614999999984,76.132751000000042],[-90.06361400000003,76.127762000000075],[-90.085280999999895,76.1244200000001],[-90.110824999999977,76.124145999999996],[-90.308884000000035,76.138321000000076],[-90.448607999999979,76.154984000000013],[-90.666397000000018,76.166930999999977],[-90.786117999999988,76.171371000000136],[-90.937209999999936,76.180817000000104],[-91.112212999999883,76.191924999999912],[-91.204726999999934,76.212769000000094],[-91.219726999999978,76.218323000000055],[-91.256957999999941,76.227203000000088],[-91.274444999999957,76.230270000000019],[-91.423614999999984,76.253876000000105],[-91.445830999999941,76.256653000000028],[-91.571395999999936,76.26527400000009],[-91.59722899999997,76.264999000000103],[-91.613616999999977,76.262206999999989],[-91.599730999999963,76.25610400000005],[-91.579453000000001,76.251663000000121],[-91.416655999999989,76.22526600000009],[-91.332779000000016,76.214157],[-91.33666999999997,76.178588999999988],[-91.27194199999991,76.155822999999941],[-91.220276000000013,76.161651999999947],[-91.203339000000028,76.16137700000013],[-91.163329999999974,76.159714000000008],[-91.116652999999985,76.15637200000009],[-90.882491999999957,76.137207000000103],[-90.700287000000003,76.119431000000134],[-90.67971799999998,76.117203000000018],[-90.665008999999998,76.112198000000149],[-90.757506999999976,76.07638500000013],[-90.785277999999948,76.072769000000051],[-90.809432999999956,76.071930000000066],[-90.833618000000001,76.072769000000051],[-90.855270000000019,76.072220000000129],[-90.862502999999947,76.069992000000127],[-90.866104000000007,76.067215000000033],[-90.864715999999987,76.064987000000087],[-90.848891999999978,76.060806000000014],[-90.71578199999999,76.06343099999998],[-90.703605999999922,76.064926000000014],[-90.663940000000025,76.074265000000025],[-90.660941999999864,76.076431000000014],[-90.611664000000019,76.084717000000069],[-90.599166999999966,76.088042999999971],[-90.575012000000015,76.090271000000087],[-90.548339999999939,76.091370000000097],[-90.474166999999966,76.089706000000035],[-90.429442999999992,76.088318000000129],[-90.408614999999998,76.08638000000002],[-90.194442999999922,76.062759000000142],[-90.190552000000025,76.06109600000002],[-90.193877999999984,76.055251999999996],[-90.202498999999989,76.050261999999975],[-90.215012000000002,76.04582199999993],[-90.233886999999925,76.041092000000106],[-90.27416999999997,76.034424000000115],[-90.301666000000012,76.032486000000006],[-90.328613000000018,76.031372000000033],[-90.404723999999931,76.031096999999988],[-90.635947999999985,76.028152000000034],[-90.718452000000013,76.022658999999976],[-90.904175000000009,76.015549000000021],[-90.929168999999888,76.015549000000021],[-91.005279999999971,76.024994000000049],[-91.144729999999981,76.021102999999982],[-91.160827999999924,76.018051000000071],[-91.155272999999909,76.014160000000004],[-91.069732999999928,75.990265000000022],[-90.950286999999946,75.962204000000099],[-90.941939999999988,75.955551000000128],[-90.938598999999954,75.951385000000016],[-90.941939999999988,75.945526000000029],[-90.948882999999967,75.939972000000012],[-90.968063000000029,75.931091000000094],[-91.016953000000001,75.925537000000077],[-91.070557000000008,75.922484999999995],[-91.100280999999995,75.918594000000098],[-91.118880999999931,75.913879000000065],[-91.129439999999988,75.908600000000092],[-91.143340999999964,75.897217000000069],[-91.125823999999852,75.857483000000002],[-91.132492000000013,75.851928999999984],[-91.135833999999932,75.846099999999979],[-91.134170999999924,75.842484000000127],[-91.129990000000021,75.839157],[-91.107498000000021,75.840545999999961],[-91.091675000000009,75.843323000000055],[-91.079452999999944,75.848038000000088],[-91.053328999999906,75.881087999999977],[-90.939986999999974,75.915268000000083],[-90.903060999999923,75.924698000000149],[-90.895844000000011,75.927200000000028],[-90.886123999999995,75.931655999999975],[-90.847778000000005,75.952208999999982],[-90.833618000000001,75.96026599999999],[-90.827788999999996,75.966385000000002],[-90.805557000000022,75.985535000000141],[-90.793883999999991,75.99470500000001],[-90.777495999999985,75.996094000000028],[-90.755843999999968,75.994980000000055],[-90.717223999999931,75.989151000000049],[-90.569457999999941,75.979980000000069],[-90.48332199999993,75.980270000000075],[-90.464447000000007,75.978591999999992],[-90.444716999999969,75.974151999999947],[-90.433318999999983,75.97026100000005],[-90.429442999999992,75.968323000000112],[-90.434158000000025,75.963318000000072],[-90.442490000000021,75.959717000000012],[-90.49221799999998,75.945816000000036],[-90.519164999999987,75.936096000000134],[-90.526107999999965,75.930541999999946],[-90.528335999999911,75.925537000000077],[-90.531386999999938,75.913605000000132],[-90.531676999999945,75.903595000000053],[-90.529998999999862,75.898331000000042],[-90.521118000000001,75.895538000000101],[-90.504729999999938,75.895263999999941],[-90.496947999999975,75.897766000000047],[-90.34722899999997,75.949417000000096],[-90.342223999999987,75.953049000000078],[-90.337783999999999,75.963043000000084],[-90.339447000000007,75.968323000000112],[-90.256957999999941,75.966933999999981],[-90.118057000000022,75.941924999999969],[-90.114440999999943,75.947753999999975],[-90.102492999999981,75.961654999999951],[-90.072509999999966,75.995529000000147],[-90.060271999999998,76.00471500000009],[-90.052779999999984,76.007217000000026],[-90.037506000000008,76.009155000000135],[-90.015015000000005,76.010269000000108],[-89.966659999999877,76.008605999999986],[-89.947495000000004,76.007217000000026],[-89.929717999999923,76.00471500000009],[-89.924437999999952,76.00221300000004],[-89.909163999999976,75.964995999999985],[-89.825012000000015,75.943038999999942],[-89.687499999999943,75.899993999999992],[-89.689986999999917,75.894989000000123],[-89.702224999999999,75.879700000000071],[-89.70944199999991,75.874146000000053],[-89.724441999999954,75.863036999999963],[-89.750290000000007,75.846649000000127],[-89.772781000000009,75.836380000000077],[-89.778885000000002,75.831665000000044],[-89.782227000000034,75.825821000000019],[-89.776397999999972,75.792755000000056],[-89.775008999999955,75.787491000000102],[-89.765014999999948,75.785812000000078],[-89.738891999999964,75.786652000000117],[-89.692490000000021,75.796371000000136],[-89.68638599999997,75.802474999999959],[-89.688048999999978,75.804428000000087],[-89.689162999999951,75.809708000000001],[-89.685546999999985,75.814147999999989],[-89.61999499999996,75.853592000000106],[-89.611114999999927,75.857208000000128],[-89.587508999999955,75.859146000000067],[-89.558334000000002,75.857483000000002],[-89.439163000000008,75.845260999999994],[-89.422774999999945,75.841934000000094],[-89.410277999999948,75.829712000000086],[-89.392501999999979,75.821105999999986],[-89.37777699999998,75.816665999999998],[-89.320007000000032,75.803863999999976],[-89.277495999999928,75.798324999999977],[-89.201401000000033,75.786926000000051],[-89.172775000000001,75.780548000000124],[-89.164169000000015,75.774704000000099],[-89.160278000000005,75.768051000000128],[-89.160552999999936,75.755828999999949],[-89.166945999999996,75.7452550000001],[-89.253890999999953,75.631088000000034],[-89.262787000000003,75.627761999999962],[-89.275008999999955,75.627761999999962],[-89.336670000000026,75.627761999999962],[-89.543059999999969,75.610535000000141],[-89.649170000000026,75.61554000000001],[-89.763061999999991,75.577484000000027],[-89.765288999999882,75.575546000000088],[-89.739440999999943,75.573607999999922],[-89.722504000000015,75.574157999999954],[-89.681945999999868,75.57998699999996],[-89.649993999999992,75.587204000000099],[-89.605559999999912,75.589705999999978],[-89.588332999999921,75.58859300000006],[-89.550995,75.579711999999972],[-89.542496000000028,75.570540999999992],[-89.548614999999984,75.566085999999984],[-89.56806899999998,75.5619200000001],[-89.628325999999959,75.561370999999951],[-89.676392000000021,75.562194999999917],[-89.692490000000021,75.561096000000134],[-89.706954999999994,75.557480000000055],[-89.700835999999981,75.553040000000067],[-89.645553999999947,75.548325000000034],[-89.576674999999966,75.547759999999982],[-89.550827000000027,75.548873999999955],[-89.526397999999915,75.551926000000094],[-89.515015000000005,75.554152999999985],[-89.500564999999995,75.558868000000018],[-89.491942999999992,75.565535999999952],[-89.473617999999874,75.574707000000103],[-89.458618000000001,75.579436999999928],[-89.441665999999998,75.583327999999995],[-89.431670999999994,75.584427000000005],[-89.403335999999967,75.587204000000099],[-89.351669000000015,75.589157000000057],[-89.302215999999987,75.589157000000057],[-89.235824999999977,75.586655000000121],[-89.217223999999987,75.584991000000116],[-89.182770000000005,75.577208999999982],[-89.174438000000009,75.572768999999994],[-89.168335000000013,75.566666000000055],[-89.156386999999938,75.549713000000111],[-89.154998999999975,75.544434000000138],[-89.149170000000026,75.532211000000075],[-89.143065999999976,75.524429000000112],[-89.09973100000002,75.484146000000067],[-88.963897999999972,75.431931000000077],[-88.950561999999934,75.429703000000131],[-88.921386999999982,75.427199999999971],[-88.87110899999999,75.43414300000012],[-88.841675000000009,75.436371000000065],[-88.818618999999956,75.436920000000043],[-88.796951000000035,75.434982000000105],[-88.779723999999987,75.432479999999998],[-88.768889999999942,75.434708000000001],[-88.747771999999941,75.470825000000104],[-88.75,75.474991000000045],[-88.801392000000021,75.531372000000147],[-88.865829000000019,75.586105000000089],[-88.755004999999983,75.676650999999936],[-88.738892000000021,75.67942800000003],[-88.722777999999892,75.679153000000042],[-88.678329000000019,75.675261999999975],[-88.631667999999991,75.667206000000078],[-88.600829999999917,75.659424000000115],[-88.574172999999917,75.648880000000077],[-88.542770000000019,75.635818000000029],[-88.50778200000002,75.619431000000077],[-88.448883000000023,75.59526100000005],[-88.399445000000014,75.579162999999994],[-88.364166000000012,75.568878000000097],[-88.315826000000015,75.556366000000082],[-88.228881999999999,75.539429000000098],[-88.203613000000018,75.531097000000102],[-88.198882999999967,75.528595000000053],[-88.196945000000028,75.522766000000047],[-88.198607999999979,75.517212000000029],[-88.201401000000033,75.512206999999989],[-88.217498999999918,75.509720000000073],[-88.240828999999962,75.509155000000078],[-88.290833000000021,75.49693300000007],[-88.305831999999896,75.492203000000075],[-88.301391999999964,75.488037000000134],[-88.295273000000009,75.484985000000052],[-88.263061999999934,75.476089000000115],[-88.228881999999999,75.471099999999979],[-88.21305799999999,75.470535000000098],[-88.200835999999924,75.471924000000115],[-88.148055999999997,75.488876000000118],[-88.12249799999995,75.501099000000011],[-88.06806899999998,75.521927000000062],[-87.958054000000004,75.544144000000131],[-87.751403999999923,75.576660000000061],[-87.716110000000015,75.575271999999927],[-87.697768999999937,75.573607999999922],[-87.661391999999921,75.567215000000147],[-87.648346000000004,75.5619200000001],[-87.495543999999995,75.485809000000017],[-87.494995000000017,75.483871000000079],[-87.498885999999914,75.478043000000127],[-87.504729999999995,75.474425999999994],[-87.529998999999918,75.465271000000143],[-87.563889000000017,75.459152000000074],[-87.588607999999965,75.456375000000037],[-87.601394999999968,75.453323000000069],[-87.606383999999935,75.449707000000046],[-87.594726999999978,75.446365000000071],[-87.58277899999996,75.444702000000007],[-87.568344000000025,75.443588000000034],[-87.548614999999927,75.444427000000132],[-87.533614999999884,75.446090999999967],[-87.5,75.452209000000096],[-87.459732000000031,75.461380000000077],[-87.445830999999941,75.465271000000143],[-87.434433000000013,75.468871999999976],[-87.4183349999999,75.479706000000078],[-87.416397000000018,75.485260000000039],[-87.430283000000031,75.501099000000011],[-87.437774999999988,75.5086060000001],[-87.444442999999922,75.513885000000073],[-87.46665999999999,75.521103000000096],[-87.462783999999942,75.563034000000073],[-87.393065999999976,75.604156000000103],[-87.381103999999937,75.609420999999998],[-87.354720999999984,75.61303700000002],[-87.285552999999879,75.620255000000043],[-87.263335999999981,75.621094000000028],[-87.25111400000003,75.621094000000028],[-87.234160999999915,75.618317000000104],[-87.088057999999933,75.57998699999996],[-87.079178000000013,75.566666000000055],[-87.072783999999956,75.559981999999991],[-87.055267000000015,75.546936000000017],[-87.011948000000018,75.531372000000147],[-86.967498999999975,75.518326000000002],[-86.931106999999997,75.508041000000048],[-86.914444000000003,75.503876000000048],[-86.862777999999935,75.491653000000042],[-86.807495000000017,75.479156000000046],[-86.771117999999944,75.475540000000137],[-86.72222899999997,75.474991000000045],[-86.643340999999964,75.478043000000127],[-86.631103999999993,75.477767999999912],[-86.601943999999946,75.476379000000122],[-86.583892999999875,75.474701000000039],[-86.567504999999983,75.472214000000122],[-86.48332199999993,75.456650000000025],[-86.464721999999995,75.452773999999977],[-86.375548999999978,75.427475000000129],[-86.365554999999972,75.423309000000074],[-86.368880999999988,75.418320000000108],[-86.389175000000023,75.40776100000005],[-86.400283999999999,75.402205999999978],[-86.415282999999988,75.398880000000133],[-86.506392999999946,75.388046000000031],[-86.553878999999938,75.381363000000079],[-86.576675000000023,75.377197000000024],[-86.611114999999984,75.36831699999999],[-86.615279999999984,75.365540000000067],[-86.596663999999976,75.361649],[-86.544723999999974,75.35914600000001],[-86.520279000000016,75.360259999999982],[-86.491942999999935,75.362762000000089],[-86.376099000000011,75.376373000000058],[-86.358336999999949,75.379699999999957],[-86.245270000000005,75.401932000000045],[-86.198607999999922,75.416091999999935],[-86.169997999999964,75.418594000000041],[-86.082503999999972,75.421371000000136],[-86.031386999999938,75.422485000000108],[-85.833618000000001,75.416091999999935],[-85.680557000000022,75.408034999999984],[-85.674438000000009,75.418320000000108],[-85.908614999999941,75.460266000000104],[-86.006392999999889,75.472214000000122],[-86.109726000000023,75.481934000000024],[-86.124709999999993,75.485535000000084],[-86.138335999999924,75.489975000000072],[-86.149445000000014,75.496368000000075],[-86.154449,75.500823999999966],[-86.143065999999976,75.508041000000048],[-86.11332699999997,75.514999000000046],[-86.096953999999982,75.51776099999995],[-86.00389100000001,75.531372000000147],[-85.908614999999941,75.543868999999916],[-85.865554999999972,75.544708000000071],[-85.763061999999991,75.546097000000088],[-85.44387799999987,75.560256999999979],[-85.329178000000013,75.561096000000134],[-85.303328999999962,75.568878000000097],[-85.189986999999917,75.611923000000047],[-85.074172999999917,75.651931999999988],[-85.054442999999992,75.656096999999988],[-85.039169000000015,75.657760999999994],[-84.926940999999943,75.658874999999966],[-84.879165999999884,75.656937000000028],[-84.797226000000023,75.652771000000143],[-84.763061999999934,75.650269000000037],[-84.71833799999996,75.642761000000064],[-84.683883999999921,75.634430000000123],[-84.62249799999995,75.628036000000066],[-84.59973100000002,75.626647999999989],[-84.572234999999978,75.626373000000001],[-84.524719000000005,75.628036000000066],[-84.497497999999894,75.631653000000028],[-84.503066999999987,75.633330999999998],[-84.519454999999937,75.636108000000036],[-84.539992999999981,75.637772000000098],[-84.557220000000029,75.63888500000013],[-84.607773000000009,75.639160000000004],[-84.63110399999988,75.640548999999965],[-84.651107999999965,75.643599999999992],[-84.657226999999921,75.647491000000059],[-84.66361999999998,75.68609600000002],[-84.644454999999994,75.687194999999974],[-84.482773000000009,75.694427000000076],[-84.350554999999872,75.697754000000032],[-84.322783999999956,75.699141999999938],[-84.299164000000019,75.70277400000009],[-84.070556999999951,75.761932000000115],[-83.929442999999878,75.810806000000071],[-83.878150999999946,75.818962000000056],[-83.767226999999934,75.824158000000125],[-83.740554999999972,75.824432000000058],[-83.722503999999958,75.822495000000004],[-83.703887999999949,75.818329000000062],[-83.698043999999925,75.814423000000033],[-83.706389999999942,75.812195000000088],[-83.72193900000002,75.810806000000071],[-83.74888599999997,75.80664100000007],[-83.752228000000002,75.801376000000005],[-83.736938000000009,75.795258000000047],[-83.698607999999979,75.790268000000026],[-83.672774999999945,75.788879000000009],[-83.619995000000017,75.789429000000041],[-83.56610099999989,75.791656000000103],[-83.515288999999882,75.789703000000145],[-83.495269999999948,75.78637700000013],[-83.479720999999927,75.782211000000018],[-83.464721999999995,75.776093000000117],[-83.458344000000011,75.770264000000054],[-83.447768999999994,75.755828999999949],[-83.43360899999999,75.750274999999988],[-83.419158999999866,75.748870999999951],[-83.292220999999927,75.737762000000089],[-83.123610999999983,75.734421000000054],[-83.065276999999924,75.739151000000049],[-82.960007000000019,75.756103999999993],[-82.82028200000002,75.781937000000084],[-82.799437999999952,75.786102000000085],[-82.664718999999991,75.811371000000122],[-82.466400000000021,75.828048999999965],[-82.327224999999942,75.836928999999998],[-82.279175000000009,75.836655000000064],[-82.139998999999875,75.826934999999992],[-81.95666499999993,75.815261999999962],[-81.885559000000001,75.811096000000077],[-81.660827999999924,75.811371000000122],[-81.536941999999954,75.809417999999994],[-81.450561999999991,75.800812000000064],[-81.212509000000011,75.771378000000084],[-81.22084000000001,75.704712000000029],[-81.276671999999962,75.668320000000051],[-81.281677000000002,75.663605000000018],[-81.285278000000005,75.657486000000006],[-81.271118000000001,75.651382000000126],[-81.256957999999997,75.649719000000005],[-81.010009999999966,75.633330999999998],[-80.983886999999982,75.633330999999998],[-80.857772999999952,75.634995000000004],[-80.779998999999918,75.637772000000098],[-80.547226000000023,75.650818000000015],[-80.502501999999936,75.652206000000092],[-80.480559999999969,75.651093000000003],[-80.46665999999999,75.649428999999998],[-80.316955999999948,75.630539000000056],[-80.275283999999999,75.624985000000095],[-80.256119000000012,75.62164300000012],[-80.199158000000011,75.608871000000136],[-80.101944000000003,75.586929000000055],[-80.068344000000025,75.578872999999987],[-79.953612999999962,75.540268000000083],[-79.948607999999922,75.534149000000014],[-79.956115999999952,75.530822999999998],[-80.085006999999905,75.507766999999944],[-80.191665999999884,75.489975000000072],[-80.252501999999993,75.485809000000017],[-80.355269999999962,75.473877000000073],[-80.371932999999956,75.468871999999976],[-80.373046999999929,75.463042999999971],[-80.358337000000006,75.458602999999982],[-80.338607999999908,75.456375000000037],[-80.306655999999919,75.456099999999992],[-80.108046999999942,75.469147000000021],[-80.000289999999893,75.476928999999984],[-79.929168999999945,75.479706000000078],[-79.73332199999993,75.471924000000115],[-79.714721999999995,75.470535000000098],[-79.644164999999987,75.462494000000049],[-79.586394999999982,75.454712000000086],[-79.574721999999895,75.449997000000053],[-79.581954999999994,75.446365000000071],[-79.635559000000001,75.445815999999979],[-79.656386999999995,75.444138000000066],[-79.675551999999925,75.441360000000032],[-79.683059999999955,75.435806000000071],[-79.682495000000017,75.430817000000104],[-79.62222300000002,75.402480999999966],[-79.605559999999969,75.398041000000148],[-79.561660999999958,75.394989000000066],[-79.520003999999972,75.391098],[-79.503066999999987,75.388596000000064],[-79.488051999999925,75.383330999999998],[-79.486937999999952,75.379974000000061],[-79.488601999999958,75.362487999999928],[-79.510009999999966,75.338043000000084],[-79.527495999999928,75.322220000000073],[-79.539443999999889,75.317763999999954],[-79.563323999999966,75.31860400000005],[-79.596664000000033,75.316086000000041],[-79.610000999999897,75.310806000000014],[-79.61471599999993,75.305542000000003],[-79.611938000000009,75.298325000000091],[-79.587508999999898,75.287491000000045],[-79.570847000000015,75.283051],[-79.548889000000031,75.281096999999988],[-79.443084999999996,75.280190000000061],[-79.506957999999884,75.229980000000069],[-79.571121000000005,75.199142000000052],[-79.629439999999988,75.174987999999928],[-79.651672000000019,75.172484999999995],[-79.731948999999929,75.164703000000031],[-79.774170000000026,75.167205999999965],[-79.835555999999997,75.160262999999986],[-79.929442999999878,75.140549000000078],[-79.944152999999915,75.136383000000023],[-79.954726999999934,75.12692300000009],[-79.955841000000021,75.113876000000118],[-79.955275999999969,75.106644000000017],[-79.955841000000021,75.100266000000033],[-79.960555999999883,75.094711000000132],[-79.974166999999852,75.08998100000008],[-80.128875999999991,75.068054000000018],[-80.150832999999977,75.065536000000066],[-80.215012000000002,75.063309000000004],[-80.296111999999994,75.058868000000075],[-80.440552000000025,75.038040000000024],[-80.427489999999921,75.029984000000127],[-80.402495999999928,75.021103000000039],[-80.327498999999989,74.998596000000134],[-80.310546999999985,74.996368000000132],[-80.297225999999966,74.996643000000006],[-80.238892000000021,74.994431000000134],[-80.194442999999978,74.989975000000015],[-80.182219999999916,74.986649],[-80.173888999999917,74.982483000000059],[-80.184158000000025,74.979430999999977],[-80.216110000000015,74.976089000000002],[-80.243057000000022,74.973038000000031],[-80.258347000000015,74.969711000000075],[-80.271941999999967,74.964996000000042],[-80.278884999999946,74.959427000000062],[-80.278884999999946,74.957214000000079],[-80.274170000000026,74.951096000000121],[-80.266112999999962,74.946640000000059],[-80.240828999999962,74.946640000000059],[-80.033614999999941,74.974426000000108],[-80.026946999999893,74.979980000000069],[-80.013061999999991,74.986923000000104],[-79.975280999999995,74.9994200000001],[-79.942764000000011,75.006943000000092],[-79.919158999999922,75.010543999999982],[-79.795273000000009,75.027480999999966],[-79.776947000000007,75.028320000000122],[-79.716400000000021,75.028869999999984],[-79.692763999999954,75.028046000000018],[-79.613891999999964,75.01998900000001],[-79.59722899999997,75.017487000000131],[-79.582503999999915,75.014435000000049],[-79.505004999999926,74.998321999999973],[-79.501953000000015,74.99581900000004],[-79.507232999999985,74.993042000000116],[-79.535827999999924,74.991653000000099],[-79.555557000000022,74.987198000000092],[-79.551940999999943,74.981659000000093],[-79.464721999999995,74.933319000000097],[-79.442489999999907,74.921646000000067],[-79.426392000000021,74.917206000000022],[-79.391953000000001,74.911102000000028],[-79.35722399999986,74.907486000000119],[-79.338608000000022,74.903320000000065],[-79.334732000000031,74.899993999999992],[-79.333617999999944,74.896378000000141],[-79.333617999999944,74.894440000000031],[-79.335830999999928,74.889160000000118],[-79.370543999999995,74.876373000000115],[-79.390839000000028,74.872482000000048],[-79.501953000000015,74.859421000000111],[-79.530288999999925,74.857758000000047],[-79.580001999999979,74.858321999999987],[-79.732773000000009,74.836655000000121],[-79.851943999999946,74.818878000000041],[-79.860549999999989,74.814697000000137],[-79.880553999999904,74.813034000000073],[-79.930557000000022,74.813309000000061],[-80.06806899999998,74.836380000000077],[-80.25306699999993,74.870818999999983],[-80.274170000000026,74.881087999999977],[-80.28195199999999,74.889984000000084],[-80.293883999999935,74.919983000000116],[-80.293610000000001,74.926376000000062],[-80.296951000000035,74.931090999999924],[-80.306380999999988,74.939148000000102],[-80.321670999999981,74.937759000000085],[-80.335280999999952,74.933044000000052],[-80.362212999999997,74.923599000000024],[-80.386123999999882,74.913604999999961],[-80.396118000000001,74.908599999999922],[-80.413054999999986,74.897766000000047],[-80.416655999999932,74.89387499999998],[-80.416107000000011,74.88888500000013],[-80.361114999999984,74.868866000000025],[-80.347777999999948,74.864990000000148],[-80.329726999999991,74.861374000000069],[-80.296951000000035,74.856934000000081],[-80.261123999999995,74.852767999999969],[-80.224166999999966,74.849426000000051],[-80.18638599999997,74.843323000000112],[-80.153609999999958,74.836655000000121],[-80.108611999999994,74.824432000000058],[-80.097778000000005,74.820267000000058],[-80.101668999999958,74.789154000000053],[-80.159164000000033,74.730269999999962],[-80.191375999999934,74.698029000000076],[-80.156112999999948,74.636932000000058],[-80.148894999999925,74.631088000000034],[-80.146666999999979,74.626923000000033],[-80.149444999999957,74.622482000000105],[-80.161391999999921,74.612198000000092],[-80.231673999999998,74.578049000000078],[-80.248046999999985,74.576096000000121],[-80.253715999999997,74.576050000000066],[-80.339995999999985,74.580551000000128],[-80.385009999999966,74.5816650000001],[-80.454453000000001,74.580825999999945],[-80.468886999999938,74.579436999999984],[-80.488891999999964,74.575546000000088],[-80.591674999999952,74.56442300000009],[-80.753066999999987,74.563309000000118],[-80.844161999999983,74.562759000000085],[-80.951950000000011,74.566086000000041],[-80.974715999999944,74.566939999999988],[-80.994155999999919,74.569717000000082],[-81.029998999999975,74.576660000000061],[-81.049727999999959,74.579163000000051],[-81.069457999999884,74.579711999999972],[-81.219161999999983,74.571381000000088],[-81.269729999999981,74.566086000000041],[-81.287505999999951,74.563034000000073],[-81.510833999999988,74.514434999999935],[-81.670836999999949,74.478592000000106],[-81.759170999999924,74.461105000000089],[-81.785003999999958,74.457764000000054],[-81.810821999999973,74.456940000000088],[-81.854720999999984,74.459427000000119],[-82.060546999999929,74.475540000000024],[-82.081680000000006,74.477203000000088],[-82.101395000000025,74.479706000000078],[-82.327498999999989,74.510544000000095],[-82.511123999999995,74.527206000000035],[-82.557219999999973,74.514709000000096],[-82.574722000000008,74.511658000000068],[-82.592498999999975,74.510544000000095],[-82.615279999999984,74.511108000000036],[-82.74749799999995,74.518051000000014],[-82.783614999999941,74.520263999999997],[-82.871933000000013,74.538589000000059],[-82.914169000000015,74.549149],[-82.953613000000018,74.565810999999997],[-83.018340999999907,74.594436999999914],[-83.056380999999988,74.61554000000001],[-83.079726999999934,74.630264000000068],[-83.088607999999965,74.636658000000125],[-83.092498999999975,74.641372999999987],[-83.102218999999934,74.65415999999999],[-83.12388599999997,74.684982000000048],[-83.128051999999968,74.691925000000026],[-83.131942999999978,74.708328000000108],[-83.128051999999968,74.71748400000007],[-83.107772999999952,74.748032000000023],[-83.090835999999854,74.757767000000115],[-83.075012000000015,74.762206999999933],[-83.041381999999942,74.769989000000066],[-83.028884999999946,74.774993999999936],[-83.02305599999994,74.780548000000124],[-83.024170000000026,74.783325000000048],[-83.081680000000006,74.818054000000075],[-83.09584000000001,74.82388300000008],[-83.105269999999962,74.826660000000004],[-83.116104000000007,74.828597999999943],[-83.15583799999996,74.826935000000049],[-83.203063999999983,74.820830999999998],[-83.227782999999874,74.820540999999992],[-83.24888599999997,74.823608000000092],[-83.299727999999959,74.835541000000148],[-83.33666999999997,74.849426000000051],[-83.380829000000006,74.866379000000109],[-83.402221999999938,74.875259000000142],[-83.475554999999929,74.896652000000074],[-83.511397999999986,74.901657000000114],[-83.52806099999998,74.901657000000114],[-83.547500999999954,74.897491000000059],[-83.55972300000002,74.892487000000074],[-83.560546999999985,74.887206999999989],[-83.559433000000013,74.880814000000044],[-83.556945999999925,74.875259000000142],[-83.527221999999995,74.84526100000005],[-83.518616000000009,74.839432000000045],[-83.472504000000015,74.815262000000018],[-83.458617999999944,74.808028999999976],[-83.429992999999911,74.797484999999938],[-83.394164999999987,74.790268000000026],[-83.375274999999931,74.786926000000108],[-83.354995999999971,74.784424000000001],[-83.327498999999932,74.779160000000047],[-83.318893000000003,74.774993999999936],[-83.324172999999973,74.755264000000125],[-83.327498999999932,74.75],[-83.454726999999991,74.591094999999996],[-83.474441999999954,74.579711999999972],[-83.484160999999972,74.574996999999939],[-83.598891999999978,74.543594000000098],[-83.611664000000019,74.540817000000004],[-83.720839999999953,74.545532000000037],[-83.785552999999936,74.548598999999967],[-83.805556999999965,74.550812000000121],[-83.830840999999964,74.551376000000062],[-83.855270000000019,74.550812000000121],[-83.907501000000025,74.546936000000073],[-84.037780999999939,74.53414900000007],[-84.063323999999966,74.530822999999998],[-84.107498000000021,74.523314999999968],[-84.145844000000011,74.515548999999965],[-84.216400000000021,74.507216999999969],[-84.238892000000021,74.505554000000018],[-84.285552999999936,74.50360100000006],[-84.332778999999903,74.503876000000105],[-84.355835000000013,74.504440000000045],[-84.396118000000001,74.507492000000127],[-84.641678000000013,74.506943000000035],[-84.850280999999995,74.502212999999983],[-84.871384000000035,74.501389000000017],[-84.889450000000011,74.502212999999983],[-84.899445000000014,74.503326000000072],[-84.91194200000001,74.508041000000105],[-84.916655999999932,74.511108000000036],[-84.983063000000016,74.570541000000048],[-84.985275000000001,74.579163000000051],[-84.974715999999944,74.617477000000065],[-84.960281000000009,74.656937000000084],[-84.955001999999865,74.66276600000009],[-84.950835999999981,74.668869000000029],[-84.950835999999981,74.672760000000096],[-84.952498999999989,74.679153000000042],[-84.955565999999976,74.684708000000114],[-84.964172000000019,74.691925000000026],[-84.973327999999867,74.696091000000138],[-84.990554999999972,74.698029000000076],[-85.003341999999975,74.697479000000044],[-85.063888999999961,74.651657],[-85.072509999999966,74.641098000000113],[-85.044723999999917,74.612198000000092],[-85.037506000000008,74.541092000000049],[-85.036941999999954,74.535263000000043],[-85.038604999999961,74.528870000000097],[-85.043609999999944,74.523314999999968],[-85.074172999999917,74.508880999999974],[-85.087783999999886,74.504990000000078],[-85.104720999999984,74.501663000000121],[-85.125274999999931,74.49859600000002],[-85.21444699999995,74.49192800000003],[-85.259445000000028,74.490540000000124],[-85.353057999999976,74.49859600000002],[-85.363616999999977,74.501937999999996],[-85.369995000000017,74.509430000000066],[-85.363891999999964,74.537490999999989],[-85.365554999999972,74.544144000000131],[-85.370270000000005,74.552475000000072],[-85.468613000000005,74.658875000000023],[-85.474166999999909,74.664428999999984],[-85.482773000000009,74.671646000000123],[-85.49499499999996,74.679153000000042],[-85.504455999999948,74.683318999999926],[-85.520554000000004,74.688033999999959],[-85.527221999999881,74.688873000000115],[-85.543335000000013,74.686371000000065],[-85.549987999999985,74.68193100000002],[-85.524170000000026,74.598602000000142],[-85.520844000000011,74.593048000000124],[-85.509170999999981,74.579987000000017],[-85.486938000000009,74.561096000000134],[-85.481948999999929,74.554152999999985],[-85.479996000000028,74.547760000000039],[-85.479171999999949,74.541655999999989],[-85.480285999999921,74.537200999999982],[-85.50389100000001,74.520538000000101],[-85.527221999999881,74.510269000000051],[-85.542220999999927,74.505554000000018],[-85.560546999999929,74.501389000000017],[-85.580840999999964,74.498322000000087],[-85.604172000000005,74.495818999999926],[-86.013335999999981,74.479431000000091],[-86.059433000000013,74.478592000000106],[-86.082503999999972,74.479156000000046],[-86.120834000000002,74.482207999999957],[-86.123046999999872,74.48332199999993],[-86.122771999999941,74.489975000000129],[-86.101105000000018,74.511383000000023],[-86.085555999999997,74.529434000000037],[-86.079178000000013,74.53915400000011],[-86.077788999999939,74.545257999999933],[-86.082779000000016,74.555251999999939],[-86.153610000000015,74.60914600000001],[-86.177779999999927,74.615265000000022],[-86.197494999999947,74.615265000000022],[-86.215835999999854,74.610809000000074],[-86.224441999999954,74.607758000000047],[-86.235001000000011,74.601929000000041],[-86.240554999999972,74.59693900000002],[-86.242766999999958,74.59137000000004],[-86.23443599999996,74.581100000000106],[-86.227492999999981,74.575271999999984],[-86.223052999999936,74.562194999999974],[-86.232223999999974,74.540268000000083],[-86.235275000000001,74.535263000000043],[-86.244719999999973,74.52388000000002],[-86.278885000000002,74.508605999999929],[-86.332779000000016,74.490265000000136],[-86.399170000000026,74.479431000000091],[-86.423324999999977,74.478866999999923],[-86.443603999999993,74.481093999999985],[-86.462508999999955,74.485535000000084],[-86.633330999999998,74.526093000000003],[-86.664168999999958,74.534714000000065],[-86.69110099999989,74.544144000000131],[-86.708618000000001,74.551086000000055],[-86.720839999999896,74.558594000000085],[-86.759170999999981,74.586380000000133],[-86.762786999999946,74.591933999999981],[-86.761672999999973,74.598037999999974],[-86.751403999999866,74.60386699999998],[-86.74610899999999,74.608871000000136],[-86.75111400000003,74.613602000000071],[-86.766952999999944,74.616088999999988],[-86.785277999999948,74.616928000000144],[-86.799437999999952,74.615265000000022],[-86.801101999999958,74.611374000000126],[-86.800551999999925,74.552200000000028],[-86.797226000000023,74.543594000000098],[-86.794448999999986,74.539978000000076],[-86.705565999999976,74.500275000000045],[-86.693603999999937,74.468048000000067],[-86.905838000000017,74.460541000000092],[-87.225829999999917,74.466934000000094],[-87.27027899999996,74.468323000000055],[-87.304169000000002,74.471649000000127],[-87.320846999999958,74.476653999999996],[-87.352782999999931,74.495254999999986],[-87.474441999999954,74.475815000000011],[-87.508621000000005,74.46775800000006],[-87.527221999999995,74.465545999999961],[-87.574722000000008,74.461929000000055],[-87.669998000000021,74.459991000000059],[-87.710830999999928,74.460815000000025],[-87.732223999999974,74.466385000000116],[-87.755004999999983,74.479431000000091],[-87.848052999999993,74.476089000000115],[-87.903610000000015,74.472214000000122],[-88.036117999999931,74.476928999999984],[-88.263625999999988,74.483597000000145],[-88.356109999999944,74.489150999999993],[-88.496947999999861,74.497757000000092],[-88.517226999999991,74.499709999999993],[-88.529723999999987,74.501937999999996],[-88.535277999999948,74.50360100000006],[-88.539992999999981,74.50610400000005],[-88.571121000000005,74.549987999999985],[-88.570846999999958,74.556091000000094],[-88.560821999999973,74.593048000000124],[-88.542220999999984,74.616088999999988],[-88.406386999999995,74.736098999999967],[-88.347504000000015,74.784714000000008],[-88.484725999999966,74.857758000000047],[-88.528060999999866,74.901931999999988],[-88.537216000000001,74.906937000000028],[-88.547774999999945,74.907760999999994],[-88.557220000000029,74.906647000000021],[-88.56806899999998,74.901382000000126],[-88.664718999999934,74.844986000000006],[-88.675827000000027,74.836929000000055],[-88.74360699999994,74.78387500000008],[-88.749724999999899,74.77777100000003],[-88.752501999999993,74.768326000000002],[-88.75306699999993,74.756103999999993],[-88.749724999999899,74.749709999999936],[-88.748885999999914,74.741364000000033],[-88.749434999999949,74.726089000000059],[-88.753341999999918,74.714157000000114],[-88.811935000000005,74.672211000000118],[-88.821395999999993,74.666382000000112],[-88.835555999999997,74.661377000000073],[-88.848343,74.659149000000127],[-88.862212999999997,74.658875000000023],[-88.873885999999914,74.6602630000001],[-88.883056999999951,74.665267999999969],[-88.889724999999999,74.670531999999923],[-88.917220999999984,74.719711000000132],[-88.918059999999855,74.732483000000116],[-88.914168999999958,74.749145999999996],[-88.910278000000005,74.754990000000021],[-88.905563000000029,74.75999500000006],[-88.904174999999952,74.765549000000078],[-88.906386999999995,74.773041000000035],[-88.909728999999857,74.77777100000003],[-88.926940999999943,74.78387500000008],[-89.073623999999882,74.833878000000027],[-89.088608000000022,74.837204000000042],[-89.097778000000005,74.836105000000089],[-89.099166999999966,74.835266000000104],[-89.059998000000007,74.797484999999938],[-89.053329000000019,74.793594000000041],[-89.042769999999905,74.789702999999975],[-89.011123999999938,74.780822999999941],[-89.010283999999956,74.775543000000084],[-89.012786999999946,74.770538000000045],[-89.041381999999999,74.730269999999962],[-89.047501000000011,74.722487999999998],[-89.055832000000009,74.719146999999964],[-89.077788999999882,74.717209000000025],[-89.102218999999991,74.719437000000028],[-89.178878999999938,74.732208000000128],[-89.178878999999938,74.735260000000039],[-89.181106999999997,74.739700000000028],[-89.190551999999968,74.744430999999963],[-89.223052999999993,74.752487000000031],[-89.243057000000022,74.755264000000125],[-89.265014999999948,74.756378000000097],[-89.271118000000001,74.754715000000033],[-89.216400000000021,74.721100000000092],[-89.202498999999932,74.713882000000126],[-89.189712999999927,74.708602999999925],[-89.141112999999962,74.698029000000076],[-89.12249799999995,74.696091000000138],[-89.105270000000019,74.693039000000056],[-89.095839999999953,74.688033999999959],[-89.095839999999953,74.68193100000002],[-89.125,74.616928000000144],[-89.131942999999922,74.611374000000126],[-89.150557999999933,74.599716000000114],[-89.185271999999998,74.587494000000106],[-89.196945000000028,74.584427000000005],[-89.438889000000017,74.550812000000121],[-89.455001999999922,74.548598999999967],[-89.489715999999987,74.545532000000037],[-89.580565999999976,74.540268000000083],[-89.92860399999995,74.530822999999998],[-89.946105999999986,74.532211000000132],[-90.106658999999979,74.549422999999933],[-90.223891999999921,74.563599000000124],[-90.244995000000017,74.566939999999988],[-90.263335999999924,74.570541000000048],[-90.363051999999982,74.594711000000075],[-90.45666499999993,74.600815000000068],[-90.496384000000035,74.601654000000053],[-90.529998999999862,74.605255000000113],[-90.589721999999995,74.613312000000064],[-90.607223999999917,74.616378999999995],[-90.619995000000017,74.619980000000055],[-90.70805399999989,74.648041000000148],[-90.731673999999941,74.664153999999996],[-90.736938000000009,74.669434000000024],[-90.739440999999999,74.673874000000069],[-90.747771999999998,74.703048999999965],[-90.75111400000003,74.716385000000059],[-90.867492999999911,74.702484000000084],[-90.875823999999966,74.691925000000026],[-90.885559000000001,74.683593999999971],[-90.895614999999964,74.681137000000092],[-91.013625999999988,74.698868000000061],[-91.024718999999948,74.70277400000009],[-91.023620999999991,74.706940000000031],[-91.012221999999952,74.717209000000025],[-90.978332999999964,74.739700000000028],[-90.965012000000002,74.747757000000036],[-90.945830999999941,74.751389000000131],[-90.938598999999954,74.750823999999966],[-90.926101999999958,74.751663000000065],[-90.896118000000001,74.75749200000007],[-90.883895999999936,74.761658000000011],[-90.851395000000025,74.776093000000117],[-90.758057000000008,74.831100000000049],[-90.752791999999943,74.835815000000082],[-90.740829000000019,74.847488000000112],[-90.742492999999911,74.852767999999969],[-90.746658000000025,74.860535000000084],[-90.75778200000002,74.880814000000044],[-90.772232000000031,74.884995000000117],[-90.816956000000005,74.883605999999986],[-90.841110000000015,74.879425000000083],[-90.853881999999942,74.875259000000142],[-90.863892000000021,74.869979999999998],[-90.870270000000005,74.86442599999998],[-90.874435000000005,74.859146000000123],[-90.87388599999997,74.853043000000014],[-90.883330999999998,74.84165999999999],[-90.975006000000008,74.799423000000104],[-91,74.789702999999975],[-91.075286999999946,74.761107999999979],[-91.101943999999946,74.751099000000124],[-91.132767000000001,74.744430999999963],[-91.144729999999981,74.747481999999991],[-91.14416499999993,74.751389000000131],[-91.146666999999923,74.755554000000132],[-91.171660999999972,74.75749200000007],[-91.188599000000011,74.752777000000037],[-91.216110000000015,74.738876000000062],[-91.225829999999917,74.733597000000088],[-91.228881999999942,74.727768000000083],[-91.226944000000003,74.722487999999998],[-91.185271999999941,74.684708000000114],[-91.177489999999977,74.678039999999953],[-91.154998999999975,74.665542999999957],[-91.11471599999993,74.645827999999995],[-91.105835000000013,74.63998400000014],[-91.098052999999879,74.633330999999998],[-91.099730999999963,74.62831100000011],[-91.106658999999979,74.625809000000061],[-91.133056999999951,74.624420000000043],[-91.256393000000003,74.628585999999984],[-91.455841000000021,74.639708999999982],[-91.539992999999924,74.646378000000027],[-91.553328999999962,74.648330999999985],[-91.676101999999901,74.671921000000111],[-91.684998000000007,74.677765000000136],[-91.671660999999972,74.689697000000081],[-91.664169000000015,74.693314000000044],[-91.634170999999981,74.696091000000138],[-91.621932999999956,74.700272000000041],[-91.620270000000005,74.704987000000074],[-91.624435000000005,74.709991000000059],[-91.635833999999932,74.715271000000087],[-91.651671999999962,74.719986000000119],[-91.708618000000001,74.727478000000076],[-91.754181000000017,74.727768000000083],[-91.779449,74.725815000000125],[-91.798888999999917,74.722214000000065],[-91.811110999999983,74.71804800000001],[-91.812499999999886,74.713042999999971],[-91.80296299999992,74.706184000000007],[-91.798888999999917,74.699416999999983],[-91.815551999999968,74.69470200000012],[-91.833069000000023,74.696091000000138],[-91.851105000000018,74.698868000000061],[-91.866652999999928,74.702209000000096],[-91.876663000000008,74.706940000000031],[-91.875274999999931,74.711928999999998],[-91.859160999999972,74.721100000000092],[-91.892226999999934,74.750823999999966],[-91.961944999999957,74.764160000000061],[-91.998610999999983,74.773041000000035],[-92.015838999999971,74.778320000000008],[-92.045546999999999,74.789702999999975],[-92.05749499999996,74.79664600000001],[-92.063613999999973,74.803588999999988],[-92.065276999999924,74.80720500000001],[-92.06639100000001,74.813309000000061],[-92.05749499999996,74.82499700000011],[-92.051665999999955,74.830551000000071],[-92.043334999999956,74.836380000000077],[-92.01916499999993,74.846099999999979],[-92.013061999999991,74.851928999999984],[-92.008056999999951,74.863602000000014],[-92.006393000000003,74.888046000000145],[-92.013335999999924,74.908325000000104],[-92.015288999999939,74.913604999999961],[-92.043334999999956,74.951935000000105],[-92.048049999999989,74.958328000000051],[-92.063323999999966,74.963882000000069],[-92.091674999999896,74.971649000000014],[-92.1058349999999,74.976654000000053],[-92.164169000000015,74.998031999999967],[-92.209732000000031,75.038588999999945],[-92.228881999999999,75.071105999999986],[-92.225829999999917,75.07388300000008],[-92.21556099999998,75.07638500000013],[-92.186385999999914,75.08137499999998],[-92.152495999999985,75.083878000000141],[-92.111664000000019,75.081940000000031],[-92.046188000000029,75.084961000000078],[-92.029998999999918,75.08638000000002],[-92.012511999999958,75.095260999999994],[-92.010009999999966,75.101089000000115],[-92.051392000000021,75.146942000000024],[-92.055557000000022,75.15026899999998],[-92.070556999999894,75.153046000000074],[-92.083618000000001,75.153320000000008],[-92.105269999999962,75.151932000000102],[-92.193329000000006,75.143326000000002],[-92.325561999999991,75.151657000000057],[-92.490829000000019,75.213608000000079],[-92.468886999999938,75.284714000000122],[-92.428604000000007,75.394440000000088],[-92.388335999999924,75.441925000000083],[-92.328063999999983,75.489151000000106],[-92.220276000000013,75.546097000000088],[-92.210281000000009,75.551376000000062],[-92.199431999999945,75.553864000000033],[-92.155838000000017,75.556641000000127],[-92.100280999999995,75.562759000000085],[-92.085830999999985,75.564987000000031],[-92.069457999999997,75.568878000000097],[-92.056655999999975,75.573043999999982],[-92.013901000000033,75.589157000000057],[-92.005004999999926,75.594986000000063],[-92.008346999999958,75.661377000000073],[-92.043609999999887,75.68553200000008],[-92.05749499999996,75.691359999999975],[-92.089995999999985,75.700272000000041],[-92.137512000000015,75.721100000000092],[-92.156661999999983,75.731094000000098],[-92.174437999999952,75.744431000000134],[-92.175551999999925,75.750549000000092],[-92.139724999999999,75.778319999999951],[-92.119155999999919,75.789154000000053],[-92.112777999999992,75.794708000000014],[-92.104720999999984,75.805252000000053],[-92.100554999999929,75.823043999999925],[-92.103881999999942,75.841369999999927],[-92.105269999999962,75.847488000000055],[-92.108611999999994,75.858871000000079],[-92.113327000000027,75.863602000000014],[-92.129714999999976,75.876373000000115],[-92.138061999999991,75.879974000000004],[-92.151108000000022,75.883041000000105],[-92.172774999999945,75.885544000000039],[-92.215012000000002,75.888321000000133],[-92.23832699999997,75.891373000000101],[-92.317779999999914,75.90498400000007],[-92.336394999999868,75.908600000000092],[-92.408614999999998,75.928589000000045],[-92.433060000000012,75.936371000000008],[-92.444442999999922,75.941086000000041],[-92.583618000000001,76.008881000000031],[-92.635833999999988,76.104155999999989],[-92.635833999999988,76.109711000000061],[-92.637222000000008,76.115814],[-92.793883999999935,76.20748900000001],[-92.809433000000013,76.212494000000049],[-92.946654999999964,76.245818999999926],[-93.066956000000005,76.299149],[-93.076674999999909,76.316939999999988],[-93.057220000000029,76.326660000000061],[-93.054992999999968,76.332489000000066],[-93.056380999999874,76.338593000000117],[-93.059158000000025,76.34387200000009],[-93.071945000000028,76.353317000000004],[-93.083618000000001,76.358032000000037],[-93.115279999999927,76.363876000000005],[-93.138061999999934,76.366378999999995],[-93.186935000000005,76.368317000000104],[-93.212783999999942,76.368042000000116],[-93.239989999999977,76.366653000000099],[-93.315276999999924,76.360259999999982],[-93.345275999999956,76.356094000000041],[-93.381377999999927,76.34637500000008],[-93.449996999999996,76.326385000000073],[-93.561934999999949,76.297211000000061],[-93.587783999999886,76.292755],[-93.617492999999968,76.291092000000049],[-93.635833999999988,76.291655999999989],[-93.658339999999896,76.293868999999972],[-93.666397000000018,76.298598999999967],[-93.653335999999911,76.302765000000079],[-93.624434999999892,76.30581699999999],[-93.623610999999926,76.310806000000127],[-93.636123999999995,76.326660000000061],[-93.654174999999896,76.325821000000133],[-93.678878999999938,76.322220000000073],[-93.718886999999995,76.312484999999981],[-93.731383999999991,76.306930999999963],[-93.763901000000033,76.286377000000016],[-93.763901000000033,76.282211000000132],[-93.761948000000018,76.280272999999966],[-93.753890999999953,76.275817999999958],[-93.74110399999995,76.271927000000062],[-93.720551,76.267761000000007],[-93.697220000000016,76.26388500000013],[-93.78443900000002,76.253052000000139],[-93.954453000000001,76.257767000000001],[-93.956116000000009,76.257767000000001],[-93.958343999999954,76.257767000000001],[-94.097504000000015,76.259430000000123],[-94.118880999999988,76.261383000000023],[-94.134170999999867,76.264709000000096],[-94.141387999999949,76.269989000000123],[-94.151671999999905,76.274155000000064],[-94.168610000000001,76.278320000000065],[-94.212509000000011,76.280822999999998],[-94.470839999999953,76.281096999999932],[-94.641677999999956,76.293319999999994],[-94.780288999999982,76.288879000000065],[-94.789992999999981,76.283600000000092],[-94.803329000000019,76.278320000000065],[-94.838608000000022,76.268326000000059],[-95.029174999999952,76.236099000000024],[-95.354995999999915,76.234146000000123],[-95.376099000000011,76.234421000000111],[-95.386947999999961,76.235809000000017],[-95.388061999999934,76.283600000000092],[-95.374435000000005,76.297760000000039],[-95.366942999999935,76.301376000000062],[-95.357223999999974,76.302765000000079],[-95.343063000000029,76.300262000000089],[-95.31806899999998,76.290817000000061],[-95.279175000000009,76.281372000000147],[-95.258895999999993,76.282760999999994],[-95.118332000000009,76.298035000000027],[-95.092772999999909,76.302765000000079],[-95.075561999999877,76.307754999999929],[-95.069732999999928,76.313309000000118],[-95.066558999999984,76.319862000000001],[-95.058883999999978,76.324706999999933],[-95.010558999999944,76.331100000000106],[-94.983886999999982,76.332489000000066],[-94.958892999999989,76.332214000000079],[-94.915008999999884,76.329711999999972],[-94.866394000000014,76.325546000000088],[-94.84973100000002,76.323317999999972],[-94.84056099999998,76.319717000000082],[-94.849990999999875,76.31442300000009],[-94.862777999999878,76.309981999999991],[-94.861663999999962,76.306930999999963],[-94.843613000000005,76.303864000000033],[-94.828613000000018,76.306091000000094],[-94.808608999999933,76.311371000000008],[-94.802489999999977,76.315536000000009],[-94.80082699999997,76.321655000000021],[-94.814163000000008,76.329163000000051],[-94.834441999999967,76.334427000000005],[-94.894729999999925,76.341660000000047],[-94.965012000000002,76.347487999999942],[-95.132767000000001,76.361374000000126],[-95.274719000000005,76.372208000000001],[-95.299437999999952,76.372482000000105],[-95.326401000000033,76.37081900000004],[-95.331679999999949,76.365265000000022],[-95.341384999999946,76.359711000000004],[-95.388900999999976,76.351929000000041],[-95.399993999999992,76.353317000000004],[-95.447220000000016,76.365813999999943],[-95.645279000000016,76.384155000000135],[-95.668335000000013,76.386108000000092],[-95.715835999999911,76.392211999999915],[-95.737502999999947,76.393875000000037],[-95.851105000000018,76.40109300000006],[-95.995834000000002,76.436919999999986],[-96.081679999999892,76.478043000000127],[-96.106948999999986,76.494430999999963],[-96.104171999999949,76.5],[-96.099166999999909,76.505553999999961],[-96.09056099999998,76.510268999999994],[-96.065552000000025,76.521378000000084],[-96.052489999999921,76.524155000000007],[-95.997222999999963,76.519440000000145],[-95.944991999999957,76.518326000000002],[-95.806380999999931,76.516388000000063],[-95.778609999999958,76.518875000000094],[-95.694152999999972,76.545258000000103],[-95.680557000000022,76.550537000000077],[-95.657776000000013,76.561371000000122],[-95.593886999999938,76.593048000000067],[-95.584166999999979,76.598327999999981],[-95.587783999999999,76.603592000000106],[-95.599441999999954,76.605255000000056],[-95.619719999999973,76.606094000000041],[-95.638901000000033,76.604156000000046],[-95.660277999999948,76.599426000000051],[-95.696105999999986,76.584152000000131],[-95.695540999999992,76.580276000000083],[-95.696654999999964,76.574432000000058],[-95.712783999999999,76.568603999999937],[-95.759170999999981,76.553588999999988],[-95.780562999999916,76.548874000000126],[-95.992492999999968,76.54803499999997],[-96.016953000000001,76.549149],[-96.158614999999941,76.583327999999995],[-96.17860399999995,76.594147000000078],[-96.225280999999882,76.625809000000004],[-96.27027899999996,76.632751000000098],[-96.33944699999995,76.63220199999995],[-96.355835000000013,76.633041000000105],[-96.38137799999987,76.635818000000029],[-96.403335999999911,76.639709000000096],[-96.421386999999982,76.646102999999982],[-96.445830999999998,76.657211000000132],[-96.454178000000013,76.662490999999989],[-96.461394999999925,76.668593999999985],[-96.461120999999991,76.673599000000024],[-96.46444699999995,76.679703000000018],[-96.470275999999956,76.685532000000023],[-96.527785999999935,76.693038999999999],[-96.611938000000009,76.702484000000027],[-96.636123999999995,76.704436999999984],[-96.661666999999966,76.704712000000029],[-96.736938000000009,76.697205000000054],[-96.764175000000023,76.695526000000086],[-96.789718999999934,76.695816000000093],[-96.81639100000001,76.697478999999987],[-96.857772999999952,76.701935000000105],[-96.879990000000021,76.705826000000002],[-96.915832999999964,76.714432000000102],[-96.946654999999964,76.723602000000142],[-96.959166999999979,76.729155999999932],[-96.964447000000007,76.733322000000044],[-96.900283999999999,76.795258000000047],[-96.887221999999952,76.805542000000059],[-96.873885999999914,76.810806000000071],[-96.854995999999971,76.813034000000016],[-96.839721999999995,76.810257000000092],[-96.724716000000001,76.783324999999991],[-96.679717999999923,76.770264000000054],[-96.592498999999918,76.758881000000031],[-96.426102000000014,76.744705000000067],[-96.330291999999929,76.750274999999931],[-96.311935000000005,76.751389000000131],[-96.305556999999965,76.753875999999991],[-96.315551999999968,76.802475000000129],[-96.320557000000008,76.80664100000007],[-96.366942999999935,76.812758999999971],[-96.453612999999962,76.815262000000132],[-96.50111400000003,76.818054000000075],[-96.547226000000023,76.822769000000108],[-96.797500999999897,76.861374000000012],[-96.81361400000003,76.868042000000003],[-96.848891999999921,76.887496999999996],[-96.865829000000019,76.898041000000035],[-96.869155999999975,76.904160000000047],[-96.869445999999982,76.913879000000065],[-96.864166000000012,76.919708000000071],[-96.857772999999952,76.924987999999928],[-96.833617999999944,76.9327550000001],[-96.796386999999982,76.937484999999924],[-96.771941999999967,76.937759000000028],[-96.761123999999995,76.937759000000028],[-96.723891999999978,76.935256999999979],[-96.708054000000004,76.93331900000004],[-96.698607999999979,76.934143000000006],[-96.660827999999981,76.947204999999997],[-96.659163999999976,76.949142000000052],[-96.667769999999962,76.954436999999928],[-96.677779999999984,76.957764000000054],[-96.696945000000028,76.960541000000148],[-96.718886999999995,76.963043000000027],[-96.765288999999996,76.96527100000003],[-96.808333999999945,76.966094999999996],[-96.824447999999904,76.96775800000006],[-96.827788999999939,76.968872000000033],[-96.825561999999991,76.974426000000051],[-96.810271999999998,76.979156000000103],[-96.772034000000019,76.98101800000012],[-96.742034999999987,76.982208000000014],[-96.673324999999977,76.982208000000014],[-96.622771999999998,76.979980000000069],[-96.483611999999994,76.971100000000035],[-96.353881999999999,76.993042000000059],[-96.391113000000018,77.026931999999988],[-96.387787000000003,77.03054800000001],[-96.373321999999973,77.031937000000028],[-96.28472899999997,77.039428999999984],[-96.27305599999994,77.040267999999912],[-96.24499499999996,77.041931000000034],[-96.226105000000018,77.043045000000006],[-96.103057999999976,77.044708000000128],[-95.96665999999999,77.053040000000124],[-95.888061999999934,77.06109600000002],[-95.752501999999993,77.06860400000005],[-95.734726000000023,77.06860400000005],[-95.707503999999915,77.066940000000045],[-95.659728999999913,77.058868000000075]],[[-113.32888800000001,77.079987000000017],[-113.353882,77.077484000000084],[-113.40888999999999,77.078873000000044],[-113.45140099999992,77.081664999999987],[-113.49194299999999,77.085541000000035],[-113.49749799999989,77.088318000000129],[-113.49027999999998,77.092484000000013],[-113.34472700000003,77.127762000000018],[-113.33528099999995,77.126083000000051],[-113.31471299999998,77.11775200000011],[-113.29332699999986,77.107483000000116],[-113.28694200000001,77.09637500000008],[-113.29110700000001,77.08998100000008],[-113.30471799999998,77.085266000000047],[-113.32888800000001,77.079987000000017]],[[-113.77861000000001,77.104155999999989],[-113.80695299999991,77.104155999999989],[-113.85333300000002,77.10554499999995],[-113.88054699999992,77.108032000000037],[-113.90888999999999,77.113037000000077],[-113.92443800000001,77.118591000000094],[-113.93138099999999,77.1244200000001],[-113.93138099999999,77.129699999999957],[-113.92722300000003,77.135268999999994],[-113.92083700000001,77.141098],[-113.90110800000002,77.146378000000027],[-113.88082900000001,77.149719000000061],[-113.859444,77.151382000000012],[-113.798607,77.152481000000023],[-113.77417000000003,77.151657000000057],[-113.72250399999996,77.148041000000148],[-113.69915800000001,77.144714000000022],[-113.67555199999993,77.140274000000034],[-113.66443599999997,77.134720000000016],[-113.65778399999999,77.129149999999925],[-113.66416900000002,77.123032000000023],[-113.67916899999989,77.116928000000144],[-113.703056,77.111649],[-113.72778299999993,77.108032000000037],[-113.75306699999993,77.10554499999995],[-113.77861000000001,77.104155999999989]],[[-104.25250199999999,77.072769000000051],[-104.30277999999998,77.072220000000073],[-104.35417200000001,77.073883000000023],[-104.37721299999998,77.076660000000118],[-104.40222199999994,77.081100000000106],[-104.421944,77.087203999999986],[-104.43167099999994,77.098877000000016],[-104.42639200000002,77.116379000000052],[-104.42027300000001,77.122208000000057],[-104.40556299999997,77.127762000000018],[-104.31973299999999,77.151657000000057],[-104.30082700000003,77.15525800000006],[-104.27333099999998,77.159714000000008],[-104.18360899999993,77.167205999999965],[-104.11389199999996,77.166091999999992],[-104.07140399999997,77.16137700000013],[-104.06139400000001,77.158875000000023],[-104.031113,77.15109300000006],[-104.01972999999998,77.146103000000039],[-104.00110599999999,77.135818000000086],[-103.99889399999995,77.123870999999951],[-104.00945300000001,77.118042000000116],[-104.02416999999991,77.112487999999985],[-104.04778299999992,77.106934000000138],[-104.15028399999994,77.08638000000002],[-104.196663,77.077484000000084],[-104.25250199999999,77.072769000000051]],[[-95.22444200000001,77.167205999999965],[-95.245270000000005,77.164153999999996],[-95.291381999999999,77.164992999999981],[-95.314437999999996,77.166656000000103],[-95.362777999999935,77.171920999999998],[-95.419998000000021,77.181931000000077],[-95.572509999999852,77.213042999999971],[-95.613051999999925,77.221924000000115],[-95.634170999999924,77.228043000000127],[-95.638901000000033,77.232208000000128],[-95.639998999999932,77.237761999999975],[-95.636672999999973,77.239150999999936],[-95.631377999999927,77.239700000000084],[-95.608046999999885,77.240814000000057],[-95.511123999999995,77.243042000000003],[-95.438048999999978,77.24443100000002],[-95.387512000000015,77.240814000000057],[-95.37222300000002,77.238037000000134],[-95.356110000000001,77.236374000000069],[-95.31361400000003,77.229156000000046],[-95.244155999999919,77.213882000000126],[-95.216399999999965,77.201660000000004],[-95.206664999999987,77.189147999999989],[-95.206954999999994,77.177764999999965],[-95.214447000000007,77.172485000000108],[-95.22444200000001,77.167205999999965]],[[-90.933059999999955,77.254440000000045],[-90.909164000000033,77.251663000000121],[-90.815001999999993,77.240265000000136],[-90.772232000000031,77.231368999999972],[-90.736388999999974,77.220824999999934],[-90.718338000000017,77.207213999999965],[-90.713622999999984,77.200821000000019],[-90.724166999999909,77.183318999999983],[-90.731948999999986,77.177764999999965],[-90.779175000000009,77.156647000000078],[-90.811385999999914,77.14665199999996],[-90.83555599999994,77.142211999999972],[-90.868331999999953,77.138321000000076],[-90.899993999999992,77.136932000000058],[-90.978606999999897,77.137771999999927],[-91.049728000000016,77.145537999999988],[-91.18472300000002,77.163605000000075],[-91.221664000000033,77.170258000000047],[-91.238892000000021,77.174423000000047],[-91.262512000000015,77.18414300000012],[-91.286391999999921,77.196640000000116],[-91.295546999999999,77.203323000000069],[-91.297501000000011,77.207213999999965],[-91.299164000000019,77.217758000000003],[-91.277221999999995,77.227478000000133],[-91.24749799999995,77.235809000000017],[-91.189712999999983,77.24803200000008],[-91.162216000000001,77.251389000000017],[-91.107223999999917,77.254715000000033],[-91.084732000000031,77.254440000000045],[-91.072234999999921,77.253326000000072],[-91.057219999999973,77.254440000000045],[-90.987503000000004,77.254990000000078],[-90.933059999999955,77.254440000000045]],[[-116.35109699999998,77.539154000000053],[-116.20333900000003,77.519989000000066],[-116.09056099999992,77.491089000000045],[-116.073624,77.485535000000027],[-115.88027999999991,77.433319000000097],[-115.52055399999995,77.364426000000037],[-115.49526999999989,77.359420999999998],[-115.458054,77.348602000000085],[-115.44611399999985,77.343048000000124],[-115.389183,77.312194999999917],[-115.390289,77.306366000000082],[-115.54332699999986,77.265548999999908],[-115.59110999999996,77.259995000000117],[-115.61694299999999,77.258331000000112],[-115.66915899999992,77.256942999999978],[-115.69499199999996,77.255264000000011],[-115.77250700000002,77.247757000000036],[-115.81973299999999,77.237488000000042],[-115.83084099999991,77.233322000000101],[-115.85888699999998,77.220824999999934],[-115.87777699999992,77.215271000000143],[-115.94695299999989,77.20887799999997],[-116.112503,77.193863000000022],[-116.13806199999999,77.192200000000128],[-116.19055200000003,77.191650000000095],[-116.21777299999997,77.192749000000049],[-116.26917300000002,77.190261999999962],[-116.28056300000003,77.183594000000028],[-116.31416300000001,77.144440000000088],[-116.31973299999999,77.11775200000011],[-116.28028899999998,77.067215000000033],[-116.26917300000002,77.055817000000047],[-116.24249299999991,77.044144000000017],[-116.17360699999989,77.027206000000092],[-116.06388900000002,77.007492000000013],[-116.00583599999999,76.997482000000105],[-115.95028699999995,76.991363999999976],[-115.860817,76.979156000000103],[-115.75499699999995,76.960815000000082],[-115.73889199999996,76.955261000000064],[-115.73137700000001,76.949707000000103],[-115.72833300000002,76.943863000000079],[-115.729446,76.938034000000073],[-115.73222399999997,76.931656000000089],[-115.74610899999999,76.925262000000089],[-115.80695300000002,76.90637200000009],[-115.829453,76.900818000000129],[-115.85333299999996,76.897217000000069],[-115.90334300000001,76.893874999999923],[-115.92859599999997,76.893050999999957],[-115.98194899999993,76.895538000000045],[-116.06388900000002,76.902771000000087],[-116.11501299999992,76.909149000000014],[-116.25389100000001,76.932480000000055],[-116.306107,76.936096000000134],[-116.32721699999996,76.935532000000023],[-116.35166899999996,76.9327550000001],[-116.36527999999993,76.926376000000062],[-116.36721799999998,76.915543000000071],[-116.36332699999997,76.90887500000008],[-116.35555999999985,76.903320000000008],[-116.34612299999992,76.898331000000042],[-116.32972699999999,76.89276099999995],[-116.18360899999993,76.845825000000104],[-116.16388699999999,76.841660000000104],[-116.10749800000002,76.833602999999982],[-116.031113,76.820267000000001],[-116.00029000000001,76.811371000000065],[-115.89472999999992,76.703323000000012],[-115.89138800000001,76.697478999999987],[-115.89666699999998,76.691649999999981],[-116.07140400000003,76.625809000000004],[-116.09306299999992,76.619141000000013],[-116.11582900000002,76.61442599999998],[-116.16055299999999,76.611099000000081],[-116.23194899999999,76.603043000000014],[-116.25446299999999,76.598602000000085],[-116.32250999999997,76.581100000000049],[-116.37351999999993,76.581802000000039],[-116.73277300000001,76.572495000000004],[-116.75890399999992,76.56999200000007],[-116.97112299999998,76.548598999999967],[-116.99471999999992,76.545822000000044],[-117.01750199999992,76.542205999999965],[-117.03999299999992,76.537490999999932],[-117.05387899999999,76.533051000000114],[-117.06861900000001,76.526093000000117],[-117.07556199999993,76.520538000000045],[-117.07749899999999,76.514160000000061],[-117.07640099999998,76.508881000000088],[-117.07277699999997,76.503052000000082],[-117.05695299999996,76.491652999999985],[-117.04360999999989,76.48692299999999],[-117.01750199999992,76.482483000000116],[-117.00389099999995,76.477478000000076],[-116.98361199999999,76.454987000000074],[-116.94082599999996,76.386932000000058],[-116.93916299999995,76.380539000000113],[-116.93582200000003,76.351929000000041],[-116.93859900000001,76.34637500000008],[-117.09555099999994,76.295257999999933],[-117.13971700000002,76.286925999999994],[-117.31973299999999,76.257767000000001],[-117.345551,76.256377999999984],[-117.36888099999999,76.256943000000035],[-117.52390300000002,76.263611000000026],[-117.5750119999999,76.26887499999998],[-117.60305799999998,76.27388000000002],[-117.62304699999999,76.278870000000097],[-117.639183,76.28414900000007],[-117.65778399999999,76.293319999999994],[-117.64917000000003,76.305542000000003],[-117.64890299999996,76.311371000000008],[-117.65527299999997,76.317490000000021],[-117.67304999999993,76.322220000000073],[-117.69915800000001,76.324158000000011],[-117.72416699999997,76.324432000000115],[-117.87777699999998,76.341933999999981],[-117.889183,76.355819999999937],[-117.90139799999997,76.367203000000131],[-117.90695199999993,76.372208000000001],[-117.99722299999996,76.396941999999967],[-118.02139299999999,76.401932000000045],[-118.04444899999999,76.404984000000127],[-118.05999800000001,76.409149000000127],[-118.04750100000001,76.441650000000038],[-118.02749599999999,76.484711000000061],[-117.97332799999998,76.596375000000023],[-117.92832899999996,76.676651000000106],[-117.91915899999992,76.68803400000013],[-117.90666199999993,76.694137999999953],[-117.883331,76.700546000000088],[-117.86444099999994,76.704163000000051],[-117.84805299999999,76.708328000000051],[-117.81331599999999,76.719436999999971],[-117.79638699999998,76.725815000000125],[-117.78806299999997,76.732208000000071],[-117.73889200000002,76.772217000000012],[-117.73444399999994,76.778320000000122],[-117.73860200000001,76.784149000000127],[-117.79888899999997,76.817764000000011],[-117.81667299999998,76.821380999999974],[-117.84221600000001,76.82388300000008],[-117.86665299999999,76.822220000000129],[-117.88806199999999,76.818878000000041],[-117.90499899999992,76.812195000000031],[-117.91777000000002,76.799988000000042],[-117.92610200000001,76.788040000000024],[-117.96056399999998,76.769989000000066],[-118.00583599999993,76.761383000000137],[-118.02971600000001,76.758606000000043],[-118.08222999999998,76.756943000000092],[-118.10611,76.75749200000007],[-118.15695199999999,76.76249700000011],[-118.21362299999998,76.769150000000081],[-118.29361,76.773041000000148],[-118.319458,76.773041000000148],[-118.33750900000001,76.768326000000116],[-118.49500299999994,76.712203999999929],[-118.47471599999994,76.679703000000018],[-118.45973199999997,76.673874000000012],[-118.42887899999999,76.663879000000122],[-118.40306099999998,76.657760999999994],[-118.35804699999989,76.64888000000002],[-118.34137699999997,76.643599999999992],[-118.33473199999992,76.637497000000053],[-118.316101,76.574707000000103],[-118.50279199999994,76.509720000000073],[-118.52390299999996,76.503876000000048],[-118.54611199999999,76.5],[-118.57084699999996,76.499145999999996],[-118.59694699999989,76.5],[-118.62361099999993,76.501938000000109],[-118.65167200000002,76.505553999999961],[-118.67804699999994,76.50999500000006],[-118.70916699999998,76.519989000000066],[-118.71333299999998,76.525818000000129],[-118.71362299999998,76.531662000000097],[-118.72222899999991,76.537201000000096],[-118.73473399999995,76.542480000000069],[-118.76139799999999,76.546936000000017],[-118.81471299999998,76.553040000000067],[-118.84166700000003,76.554977000000065],[-118.94415299999997,76.518051000000128],[-118.96806300000003,76.505264000000125],[-118.97582999999992,76.498871000000008],[-118.97609699999998,76.496368000000018],[-118.97250399999996,76.491652999999985],[-118.96777299999997,76.488312000000121],[-118.95527600000003,76.483047000000056],[-118.93110699999994,76.479155999999989],[-118.82195300000001,76.471374999999966],[-118.68195300000002,76.445251000000098],[-118.64862099999999,76.428863999999919],[-118.612503,76.400269000000094],[-118.59416199999993,76.383881000000031],[-118.56610099999995,76.343048000000124],[-118.567497,76.336655000000007],[-118.58168000000001,76.324706999999933],[-118.62554899999998,76.294433999999967],[-118.63751200000002,76.288040000000137],[-118.65556299999997,76.28414900000007],[-118.67916899999994,76.282211000000132],[-118.70556599999992,76.281661999999983],[-118.78083799999996,76.282486000000119],[-118.82833900000003,76.281937000000028],[-118.87666299999989,76.27748100000008],[-118.89584400000001,76.272217000000126],[-118.91139199999992,76.265548999999965],[-118.91915899999998,76.259430000000123],[-118.92443799999995,76.252776999999924],[-118.942207,76.210541000000148],[-118.93776699999995,76.204711999999915],[-118.92331699999994,76.194138000000066],[-118.91278099999994,76.188034000000016],[-118.90471600000001,76.169144000000074],[-118.95527600000003,76.132477000000108],[-118.96501199999994,76.126648000000102],[-119.07584399999996,76.083328000000108],[-119.10109699999998,76.084152000000074],[-119.12470999999999,76.088042999999971],[-119.22972099999993,76.107208000000071],[-119.24526999999995,76.111374000000012],[-119.26000999999997,76.117203000000018],[-119.28250099999997,76.127472000000068],[-119.29943800000001,76.138596000000121],[-119.30832699999996,76.149994000000106],[-119.31054699999999,76.155258000000117],[-119.30583200000001,76.167755000000113],[-119.30082699999997,76.174423000000047],[-119.29499799999996,76.180267000000072],[-119.29527300000001,76.186096000000077],[-119.30166600000001,76.191360000000088],[-119.36916399999996,76.229706000000078],[-119.54915599999998,76.324158000000011],[-119.5864029999999,76.318603999999993],[-119.65499899999992,76.303040000000067],[-119.67527799999993,76.264160000000118],[-119.67500299999995,76.245818999999926],[-119.64555399999995,76.230545000000063],[-119.59445199999999,76.203049000000021],[-119.58583099999998,76.197479000000101],[-119.57277699999992,76.186371000000122],[-119.56806899999987,76.180542000000116],[-119.56582600000002,76.175262000000032],[-119.56696299999999,76.168869000000086],[-119.57277699999992,76.16304000000008],[-119.64334099999996,76.112487999999985],[-119.74527,76.116652999999985],[-119.76999699999993,76.116379000000052],[-119.79305999999991,76.114426000000094],[-119.80499299999997,76.108871000000022],[-119.79723399999995,76.104155999999989],[-119.7727809999999,76.099425999999937],[-119.74416400000001,76.097487999999998],[-119.64723200000003,76.081664999999987],[-119.62666300000001,76.076660000000118],[-119.50389100000001,76.040817000000061],[-119.49137899999999,76.035538000000088],[-119.47833299999996,76.024155000000121],[-119.47389199999998,76.018599999999992],[-119.47222899999997,76.000824000000023],[-119.47609699999998,75.982483000000059],[-119.48110999999989,75.970825000000048],[-119.48916599999995,75.965546000000018],[-119.50974299999996,75.960540999999978],[-119.53555299999994,75.962494000000106],[-119.54638699999998,75.968323000000112],[-119.56111099999998,75.97886699999998],[-119.57195299999995,75.984985000000108],[-119.58583099999998,75.989699999999971],[-119.612503,75.992477000000065],[-119.63694800000002,75.992203000000131],[-119.64890300000002,75.986649000000114],[-119.699997,75.94859300000013],[-119.70333900000003,75.942749000000106],[-119.6875,75.938309000000118],[-119.612503,75.910263000000043],[-119.81082199999997,75.86943100000002],[-119.870003,75.857483000000002],[-119.93554699999993,75.848328000000095],[-119.98000300000001,75.843323000000055],[-120.02583300000003,75.839980999999966],[-120.04915599999987,75.838882000000126],[-120.07640100000003,75.867203000000075],[-120.08500700000002,75.872757000000036],[-120.11416600000001,75.888321000000133],[-120.12805199999997,75.893051000000014],[-120.14916999999997,75.896378000000141],[-120.16639700000002,75.892487000000074],[-120.18028299999997,75.879974000000004],[-120.18331899999993,75.873871000000065],[-120.19722000000002,75.861374000000069],[-120.21501199999994,75.848602000000028],[-120.22582999999992,75.842209000000082],[-120.26972999999992,75.821930000000123],[-120.28888699999987,75.816085999999927],[-120.30915800000002,75.811096000000077],[-120.33222999999998,75.807480000000055],[-120.35555999999997,75.806366000000025],[-120.37805200000003,75.80664100000007],[-120.40387699999991,75.808318999999983],[-120.43028300000003,75.811096000000077],[-120.45445299999994,75.81581100000011],[-120.46694899999994,75.821105999999986],[-120.47582999999997,75.826660000000004],[-120.48528299999998,75.837769000000094],[-120.4886019999999,75.844147000000021],[-120.48972300000003,75.849991000000045],[-120.48832699999997,75.855545000000063],[-120.46305799999999,75.916382000000056],[-120.46000700000002,75.922484999999995],[-120.44860799999987,75.935532000000023],[-120.406113,75.954987000000017],[-120.40583800000002,75.97137500000008],[-120.43499799999989,76.003052000000025],[-120.45889299999999,76.011658000000125],[-120.46749899999998,76.012207000000046],[-120.53333299999991,76.003052000000025],[-120.56054699999999,75.991653000000099],[-120.56331599999993,75.985535000000141],[-120.57417299999997,75.979156000000103],[-120.59388699999994,75.978043000000014],[-120.61361699999998,75.981934000000081],[-120.64306599999986,75.992477000000065],[-120.696663,76.013884999999959],[-120.70722999999998,76.018875000000037],[-120.71611000000001,76.024429000000055],[-120.729446,76.039428999999984],[-120.75167799999997,76.099425999999937],[-120.75110599999999,76.105819999999994],[-120.74833699999999,76.111922999999933],[-120.74305700000002,76.117751999999939],[-120.73222399999997,76.124145999999996],[-120.71193699999998,76.129149999999981],[-120.72749299999992,76.158600000000035],[-120.85722399999986,76.196639999999945],[-120.88362100000001,76.198318000000086],[-120.90249599999999,76.196365000000128],[-120.95639,76.177765000000022],[-120.96806300000003,76.172211000000004],[-121.00890400000003,76.144149999999911],[-121.01251199999996,76.139160000000061],[-121.016953,76.121094000000085],[-121.02528399999989,76.073318000000029],[-121.02278100000001,76.059143000000063],[-120.99328600000001,76.026817000000108],[-120.97961399999997,76.019653000000119],[-120.970123,76.013489000000106],[-120.93195300000002,75.959990999999945],[-120.93306000000001,75.956940000000145],[-120.94583099999994,75.94859300000013],[-120.98082699999998,75.941649999999981],[-120.99944299999999,75.939697000000024],[-121.01445000000001,75.942749000000106],[-121.01722699999999,75.94802900000002],[-121.01112399999988,75.970825000000048],[-121.00055699999996,75.977203000000145],[-120.98610699999995,75.984145999999953],[-121.00761399999999,75.988982999999962],[-121.01527399999998,75.992149000000097],[-121.030441,75.992477000000065],[-121.09277299999997,75.993317000000104],[-121.11389199999996,75.991653000000099],[-121.25945299999995,75.964432000000045],[-121.26583900000003,75.958328000000051],[-121.271118,75.946091000000081],[-121.27887699999985,75.927765000000079],[-121.34861799999993,75.928040000000067],[-121.423317,75.933868000000018],[-121.43639400000001,75.939148000000046],[-121.422775,75.946465000000103],[-121.41665599999988,75.953049000000078],[-121.42415599999993,75.956649999999911],[-121.479446,75.976379000000009],[-121.58306899999997,76.003601000000117],[-121.59500100000002,76.005554000000075],[-121.83473200000003,76.034424000000115],[-122.13417099999998,76.036377000000073],[-122.14499699999999,76.030823000000055],[-122.14472999999992,75.996932999999956],[-122.16944899999999,75.978043000000014],[-122.33583099999998,75.942474000000118],[-122.37666300000001,75.933868000000018],[-122.41639700000002,75.928589000000045],[-122.442207,75.927475000000072],[-122.48916599999995,75.927200000000028],[-122.51666299999994,75.928314],[-122.56360599999999,75.931931000000134],[-122.67610200000001,75.951660000000061],[-122.69638099999997,75.955551000000128],[-122.72250400000001,75.96887200000009],[-122.728882,75.973037999999974],[-122.66915899999998,75.976929000000041],[-122.64943699999998,75.982208000000014],[-122.59111000000001,76.001663000000008],[-122.57640100000003,76.007492000000013],[-122.5625,76.014434999999992],[-122.47556299999997,76.104431000000034],[-122.47112300000003,76.110260000000039],[-122.47193899999996,76.114990000000034],[-122.48554999999993,76.1202550000001],[-122.49833699999994,76.120529000000033],[-122.60134900000003,76.115097000000048],[-122.62222300000002,76.111374000000012],[-122.67832900000002,76.111374000000012],[-122.69999699999994,76.112198000000149],[-122.70445299999994,76.114426000000094],[-122.69554099999993,76.117751999999939],[-122.58721899999995,76.134155000000021],[-122.50195299999996,76.136383000000137],[-122.48999000000003,76.141098],[-122.57417299999992,76.166091999999992],[-122.595551,76.170822000000044],[-122.62027,76.174423000000047],[-122.64666699999998,76.175812000000064],[-122.67027300000001,76.174423000000047],[-122.69360399999999,76.17053199999998],[-122.73361199999994,76.162491000000102],[-122.84277299999997,76.131088000000091],[-122.885559,76.104431000000034],[-122.90194699999995,76.098038000000031],[-122.92138699999987,76.092758000000003],[-123.01139799999993,76.083328000000108],[-123.037781,76.084717000000069],[-122.97917199999995,76.125809000000118],[-122.84861799999999,76.208878000000027],[-122.72112299999998,76.231369000000029],[-122.636124,76.264709000000096],[-122.63166799999999,76.270538000000101],[-122.63751200000002,76.288040000000137],[-122.64527899999996,76.299712999999997],[-122.63249199999996,76.329987000000017],[-122.62638900000002,76.336380000000133],[-122.61776700000001,76.342208999999968],[-122.59889199999998,76.348328000000038],[-122.57861300000002,76.353591999999992],[-122.39890300000002,76.396941999999967],[-122.30943300000001,76.408875000000023],[-122.01471699999996,76.432479999999998],[-121.826683,76.422760000000096],[-121.78195199999999,76.420258000000047],[-121.73805199999998,76.421097000000145],[-121.54998799999993,76.434708000000114],[-121.53307299999994,76.437195000000031],[-121.51445000000001,76.444138000000009],[-121.421944,76.493590999999924],[-121.31220999999994,76.572495000000004],[-121.30695300000002,76.578323000000125],[-121.31388899999996,76.589705999999978],[-121.30915800000002,76.593872000000033],[-121.21250899999995,76.649719000000005],[-121.118607,76.673309000000017],[-121.10109699999992,76.668320000000051],[-121.079453,76.668320000000051],[-121.05666399999996,76.671371000000022],[-120.923317,76.689972000000068],[-120.900284,76.693313999999987],[-120.88417099999998,76.698868000000004],[-120.86193800000001,76.711929000000112],[-120.84777799999989,76.724700999999925],[-120.83249699999993,76.731369000000086],[-120.81220999999994,76.737198000000092],[-120.76611299999996,76.743591000000094],[-120.66915899999998,76.751099000000067],[-120.64083899999997,76.748596000000134],[-120.62581599999999,76.746367999999961],[-120.60417200000001,76.746367999999961],[-120.58112299999999,76.7494200000001],[-120.40167200000002,76.797211000000004],[-120.38194299999992,76.804153000000042],[-120.36776700000001,76.810257000000092],[-120.36609599999997,76.813309000000004],[-120.36527999999993,76.836105000000032],[-120.09137699999997,77.003051999999968],[-120.06916799999999,77.008040999999935],[-120.03888699999999,77.013321000000019],[-120.02278100000001,77.015273999999977],[-119.99722300000002,77.01638800000012],[-119.97693600000002,77.013321000000019],[-119.96112099999993,77.009995000000004],[-119.94999699999994,77.012497000000053],[-119.92027299999995,77.023605000000032],[-119.83944700000001,77.05693100000002],[-119.83167999999995,77.06303400000013],[-119.83249699999999,77.069153000000142],[-119.83583099999987,77.075271999999984],[-119.83721899999995,77.079712000000029],[-119.83556399999998,77.085266000000047],[-119.825287,77.091095000000053],[-119.8125,77.096649000000014],[-119.77639799999992,77.106094000000098],[-119.60056299999991,77.145827999999995],[-119.43331899999998,77.173599000000081],[-119.41082799999998,77.178588999999931],[-119.389183,77.184417999999994],[-119.360817,77.203323000000069],[-119.354446,77.209152000000131],[-119.346947,77.221374999999966],[-119.34583999999995,77.227767999999969],[-119.33389299999993,77.239975000000072],[-119.31582599999996,77.258041000000105],[-119.29583700000001,77.276657000000114],[-119.26834099999996,77.28915400000011],[-119.25306699999999,77.295258000000103],[-119.22222899999991,77.306366000000082],[-119.20111099999991,77.313034000000073],[-119.15334299999995,77.325821000000076],[-119.11444099999994,77.327484000000027],[-119.08666999999997,77.326660000000061],[-119.00110599999988,77.321106000000043],[-118.94138299999992,77.319717000000082],[-118.91694599999994,77.32249500000006],[-118.89389,77.327484000000027],[-118.87000299999994,77.333878000000084],[-118.75723299999999,77.352478000000019],[-118.73249800000002,77.35554500000012],[-118.65110799999997,77.360535000000141],[-118.44972199999995,77.358871000000136],[-118.224716,77.356094000000041],[-118.19721999999996,77.354980000000069],[-118.16583300000002,77.355255000000056],[-118.14111299999996,77.35803199999998],[-118.12805200000003,77.364426000000037],[-118.12721299999998,77.369431000000077],[-118.125,77.372482000000105],[-118.10694899999993,77.378036000000122],[-118.08750899999995,77.379150000000095],[-117.91111799999993,77.386932000000058],[-117.86721799999992,77.388596000000064],[-117.85056299999991,77.384430000000123],[-117.781113,77.36303700000002],[-117.76806599999998,77.357758000000047],[-117.756958,77.351654000000053],[-117.75083899999998,77.346648999999957],[-117.73860200000001,77.341933999999924],[-117.72444200000001,77.338043000000084],[-117.61193800000001,77.327774000000034],[-117.45084400000002,77.312194999999917],[-117.27639799999997,77.28915400000011],[-117.02306399999998,77.290817000000004],[-117.01478600000002,77.296700000000044],[-117.01711999999992,77.300208999999938],[-117.02749599999993,77.310256999999979],[-117.06082199999997,77.326660000000061],[-117.10555999999997,77.339981000000023],[-117.11582900000002,77.34165999999999],[-117.11805699999996,77.338593000000117],[-117.1324919999999,77.333328000000051],[-117.15416699999997,77.332489000000066],[-117.16999800000002,77.335815000000082],[-117.18195300000002,77.34027100000003],[-117.18167099999999,77.346375000000023],[-117.17666600000001,77.352203000000145],[-117.15888999999987,77.358871000000136],[-117.14277600000003,77.361374000000126],[-117.11945300000002,77.359985000000108],[-117.06082199999997,77.353317000000118],[-117.00749999999994,77.343039999999974],[-116.94666299999994,77.329436999999984],[-116.87638900000002,77.318054000000132],[-116.848343,77.315810999999997],[-116.79583700000001,77.317490000000021],[-116.77887699999997,77.319153000000085],[-116.65167199999996,77.377761999999962],[-116.64835399999998,77.383330999999998],[-116.65167199999996,77.388046000000031],[-116.66278099999994,77.391662999999994],[-116.74137899999999,77.395263999999997],[-116.87082699999996,77.400818000000015],[-116.89917000000003,77.399428999999998],[-116.97582999999997,77.393326000000059],[-116.99471999999992,77.394440000000031],[-117.01112399999994,77.398880000000077],[-117.15306099999992,77.451660000000118],[-117.14998599999996,77.457214000000135],[-117.13890100000003,77.460541000000035],[-117.08306899999997,77.474425999999937],[-117.06667299999998,77.476929000000098],[-117.06139399999989,77.476089000000059],[-117.03833799999995,77.471001000000058],[-116.991669,77.466660000000104],[-116.91972399999997,77.470535000000041],[-116.89444700000001,77.473312000000135],[-116.78527799999995,77.499145999999996],[-116.75723299999993,77.511658000000011],[-116.76944699999996,77.516388000000006],[-116.85109699999998,77.516663000000051],[-116.87917299999987,77.517761000000121],[-116.9058379999999,77.520264000000111],[-116.926941,77.524704000000099],[-116.92054699999994,77.528594999999996],[-116.900284,77.532211000000018],[-116.875,77.534988000000112],[-116.83306900000002,77.533600000000035],[-116.75418100000002,77.534424000000001],[-116.64750699999996,77.537766000000147],[-116.58583099999998,77.540543000000014],[-116.53611799999993,77.544434000000081],[-116.48777799999999,77.550262000000032],[-116.35109699999998,77.539154000000053]],[[-85.285278000000005,77.587494000000049],[-85.259734999999978,77.586655000000121],[-85.235274999999945,77.586655000000121],[-85.107223999999974,77.581099999999992],[-85.011123999999938,77.57388300000008],[-84.995270000000005,77.569443000000092],[-84.822509999999966,77.505264000000125],[-84.813889000000017,77.497208000000057],[-84.824447999999961,77.491927999999973],[-84.843062999999916,77.487198000000149],[-84.934433000000013,77.470260999999937],[-84.960830999999985,77.466385000000059],[-85.027221999999995,77.459717000000069],[-85.095551,77.454437000000041],[-85.126937999999939,77.453048999999908],[-85.153609999999958,77.454437000000041],[-85.168335000000013,77.456939999999975],[-85.178604000000007,77.464157000000114],[-85.172500999999897,77.473601999999971],[-85.159164000000033,77.48414600000001],[-85.144729999999925,77.489426000000094],[-85.138610999999969,77.494980000000112],[-85.140839000000028,77.501663000000065],[-85.152785999999992,77.507767000000115],[-85.170273000000009,77.511658000000011],[-85.248885999999914,77.527481000000023],[-85.270843999999954,77.529984000000013],[-85.319732999999928,77.532211000000018],[-85.344161999999983,77.532211000000018],[-85.39916999999997,77.53387500000008],[-85.538329999999974,77.539978000000019],[-85.535552999999936,77.543869000000086],[-85.352218999999934,77.582764000000054],[-85.31138599999997,77.586655000000121],[-85.285278000000005,77.587494000000049]],[[-90.603058000000033,77.628311000000053],[-90.521118000000001,77.626083000000108],[-90.492492999999968,77.626083000000108],[-90.438598999999954,77.630538999999999],[-90.414443999999946,77.631087999999977],[-90.388061999999877,77.629425000000026],[-90.339172000000019,77.623871000000065],[-90.242492999999854,77.612488000000042],[-90.219161999999983,77.608871000000079],[-90.208892999999932,77.603042999999957],[-90.210007000000019,77.597488000000055],[-90.206664999999987,77.59165999999999],[-90.196654999999964,77.587204000000042],[-90.177779999999927,77.58248900000001],[-90.059722999999963,77.566375999999991],[-89.937209999999993,77.53276100000005],[-89.91722099999987,77.527205999999978],[-89.841109999999958,77.504166000000055],[-89.806655999999919,77.492477000000122],[-89.753615999999965,77.473038000000031],[-89.719161999999983,77.458328000000108],[-89.636123999999995,77.339157000000057],[-89.640288999999996,77.333328000000051],[-89.67471299999994,77.310256999999979],[-89.70777899999996,77.294144000000131],[-89.849730999999963,77.25],[-89.882767000000001,77.239975000000072],[-89.919998000000021,77.230270000000019],[-90,77.213814000000013],[-90.009170999999981,77.211928999999998],[-90.088897999999915,77.199707000000046],[-90.118057000000022,77.198593000000074],[-90.129165999999998,77.200546000000031],[-90.259170999999924,77.201096000000064],[-90.366942999999992,77.197754000000089],[-90.416655999999989,77.213042999999971],[-90.683318999999926,77.271927000000062],[-90.704726999999934,77.276382000000069],[-90.727218999999934,77.279984000000013],[-90.843063000000029,77.292754999999943],[-90.90972899999997,77.303040000000067],[-90.946655000000021,77.309418000000051],[-91.146666999999923,77.362198000000092],[-91.18249499999996,77.386932000000058],[-91.187209999999993,77.390273999999977],[-91.208892999999932,77.414993000000095],[-91.206954999999994,77.568604000000107],[-91.184433000000013,77.608597000000145],[-91.173614999999927,77.613036999999963],[-91.15834000000001,77.617203000000075],[-91.10943599999996,77.624985000000038],[-90.906386999999938,77.653046000000131],[-90.880828999999949,77.654434000000037],[-90.826400999999976,77.654434000000037],[-90.801666000000012,77.651657000000114],[-90.727492999999981,77.642212000000029],[-90.683608999999933,77.633331000000112],[-90.603058000000033,77.628311000000053]],[[-105.01027699999986,77.408034999999927],[-104.98665599999998,77.404434000000094],[-104.96193700000003,77.404434000000094],[-104.90805099999994,77.406937000000028],[-104.82584400000002,77.413605000000018],[-104.77166699999998,77.416656000000046],[-104.74109599999997,77.414428999999984],[-104.73277300000001,77.411377000000073],[-104.53832999999997,77.338318000000072],[-104.48889199999996,77.318603999999993],[-104.39555399999995,77.276382000000069],[-104.38834400000002,77.271378000000141],[-104.38137799999998,77.264435000000105],[-104.37998999999996,77.261931999999945],[-104.36554699999999,77.230270000000019],[-104.36749299999997,77.224425999999994],[-104.40499899999992,77.172485000000108],[-104.416946,77.161926000000051],[-104.43804899999998,77.150543000000027],[-104.47250400000001,77.13749700000011],[-104.5,77.133040999999992],[-104.52250699999996,77.130539000000113],[-104.74027999999993,77.108597000000088],[-104.79028299999999,77.108871000000022],[-104.83249699999993,77.113312000000121],[-104.85333300000002,77.117477000000122],[-104.86916400000001,77.123596000000134],[-104.883331,77.135543999999982],[-104.89250199999992,77.141936999999928],[-104.906387,77.147491000000116],[-104.92250099999995,77.152481000000023],[-104.945267,77.157211000000018],[-104.993607,77.164992999999981],[-105.04444899999993,77.171371000000136],[-105.09583999999995,77.176085999999998],[-105.11971999999997,77.176650999999993],[-105.13751200000002,77.176085999999998],[-105.15167200000002,77.171371000000136],[-105.24694799999997,77.193863000000022],[-105.40888999999999,77.281661999999983],[-105.41722099999998,77.284714000000065],[-105.45527599999997,77.291930999999977],[-105.48111,77.294983000000116],[-105.50666799999993,77.299149],[-105.531677,77.30525200000011],[-105.55027799999999,77.311645999999996],[-105.57195300000001,77.323317999999915],[-105.67916899999994,77.447479000000044],[-105.691101,77.497208000000057],[-105.83444199999997,77.610260000000096],[-105.85833700000001,77.626923000000147],[-105.878601,77.639709000000096],[-105.88890100000003,77.645263999999997],[-105.93083200000001,77.663040000000137],[-105.94776899999994,77.668868999999972],[-105.98000299999995,77.679427999999973],[-106.01471700000002,77.688583000000051],[-106.08361799999989,77.71026599999999],[-106.09166699999997,77.71527100000003],[-106.09472700000003,77.724151999999947],[-106.08917199999996,77.72886699999998],[-106.07945299999989,77.732758000000047],[-106.04055800000003,77.744980000000055],[-106.01222200000001,77.750549000000035],[-105.94167299999987,77.759720000000016],[-105.91388699999999,77.762497000000053],[-105.70056199999999,77.753600999999946],[-105.64890299999996,77.748596000000077],[-105.55248999999998,77.729430999999977],[-105.50666799999993,77.719711000000075],[-105.47028399999999,77.709152000000017],[-105.38971699999996,77.683868000000018],[-105.17360699999995,77.612198000000035],[-105.15695199999999,77.606093999999985],[-105.03971899999999,77.552199999999971],[-105.02778599999994,77.546371000000136],[-104.968613,77.514435000000049],[-104.95916699999998,77.508041000000048],[-104.94888300000002,77.496094000000085],[-104.94499199999996,77.484984999999995],[-104.946663,77.479155999999989],[-104.95249899999999,77.474425999999937],[-104.96749899999998,77.468872000000147],[-105.01027699999986,77.458603000000096],[-105.01194800000002,77.45277400000009],[-105.01806599999986,77.411925999999994],[-105.01027699999986,77.408034999999927]],[[-95.405838000000017,77.763885000000016],[-95.408889999999928,77.75221300000004],[-95.406113000000005,77.746094000000028],[-95.389724999999942,77.739426000000037],[-95.363892000000021,77.737198000000092],[-95.343886999999995,77.738037000000077],[-95.118606999999997,77.74971000000005],[-95.087783999999942,77.75221300000004],[-95.059433000000013,77.756653000000085],[-95.029174999999952,77.767211999999915],[-95.010833999999988,77.777771000000143],[-94.981673999999998,77.780823000000055],[-94.951674999999966,77.782486000000006],[-94.752228000000002,77.788589000000115],[-94.728881999999942,77.788315000000011],[-94.623321999999973,77.783599999999979],[-94.572783999999899,77.780548000000067],[-94.542220999999927,77.773880000000077],[-94.521118000000001,77.767761000000064],[-94.477492999999924,77.764708999999982],[-94.448607999999979,77.765273999999977],[-94.356658999999866,77.767487000000131],[-94.252501999999936,77.772216999999955],[-94.089995999999928,77.765823000000125],[-94.030288999999982,77.760543999999982],[-93.951110999999969,77.735535000000141],[-93.935821999999973,77.732483000000059],[-93.931380999999988,77.732483000000059],[-93.826675000000023,77.739426000000037],[-93.820007000000032,77.744980000000055],[-93.817779999999971,77.75082400000008],[-93.806655999999919,77.756378000000041],[-93.786666999999966,77.761108000000092],[-93.68638599999997,77.773880000000077],[-93.65695199999999,77.776657],[-93.629439999999931,77.77609300000006],[-93.546111999999994,77.770827999999995],[-93.241669000000002,77.733871000000136],[-93.233886999999868,77.732483000000059],[-93.17471299999994,77.704163000000051],[-93.101944000000003,77.662490999999989],[-93.106658999999922,77.660263000000043],[-93.14834599999989,77.645538000000101],[-93.164169000000015,77.64027400000009],[-93.196380999999974,77.637206999999989],[-93.222504000000015,77.638596000000007],[-93.249161000000015,77.641663000000108],[-93.277221999999938,77.643599999999935],[-93.303054999999972,77.643599999999935],[-93.35943599999996,77.635818000000029],[-93.379439999999988,77.630814000000044],[-93.390288999999939,77.625533999999959],[-93.397232000000031,77.619979999999998],[-93.486388999999974,77.54553199999998],[-93.502501999999993,77.503052000000082],[-93.477782999999988,77.492477000000122],[-93.474715999999944,77.487487999999985],[-93.474166999999909,77.476379000000065],[-93.475280999999995,77.47137499999991],[-93.480834999999956,77.466660000000104],[-93.537780999999995,77.445816000000093],[-93.553054999999915,77.440811000000053],[-93.570556999999951,77.437759000000142],[-93.906661999999983,77.433319000000097],[-93.933884000000035,77.433593999999971],[-94.25167799999997,77.455261000000007],[-94.319457999999997,77.468597000000102],[-94.345001000000025,77.472487999999998],[-94.468886999999995,77.476929000000098],[-94.801101999999901,77.480270000000132],[-95.032226999999978,77.469986000000119],[-95.123610999999983,77.463882000000069],[-95.204453000000001,77.460814999999968],[-95.252791999999943,77.460814999999968],[-95.294998000000021,77.466385000000059],[-95.346389999999985,77.469986000000119],[-95.477492999999981,77.473877000000016],[-95.532776000000013,77.473601999999971],[-95.726105000000018,77.470260999999937],[-95.823623999999938,77.466385000000059],[-95.838897999999858,77.462493999999992],[-95.864166000000012,77.462203999999986],[-95.889450000000011,77.464432000000102],[-96,77.479980000000126],[-96.061385999999857,77.491652999999985],[-96.083327999999995,77.497756999999979],[-96.099730999999963,77.504439999999988],[-96.259170999999981,77.571929999999952],[-96.318343999999968,77.598877000000073],[-96.328888000000006,77.604980000000012],[-96.255568999999923,77.689697000000024],[-96.241104000000007,77.694977000000108],[-96.194442999999978,77.704987000000017],[-96.077224999999942,77.726929000000041],[-95.934433000000013,77.753052000000025],[-95.918059999999969,77.755554000000075],[-95.897231999999974,77.757492000000013],[-95.869445999999925,77.757217000000026],[-95.848052999999993,77.755264000000068],[-95.742767000000015,77.762207000000046],[-95.630553999999961,77.771102999999982],[-95.583892999999932,77.779709000000082],[-95.570007000000032,77.784149000000127],[-95.566101000000003,77.78776600000009],[-95.565552000000025,77.792755000000056],[-95.552779999999927,77.796097000000145],[-95.528884999999946,77.801086000000112],[-95.49610899999999,77.805542000000059],[-95.465285999999935,77.80802900000009],[-95.427779999999984,77.803314000000057],[-95.418335000000013,77.798874000000069],[-95.410827999999981,77.792480000000012],[-95.40695199999999,77.787201000000039],[-95.404449,77.776381999999955],[-95.405838000000017,77.763885000000016]],[[-77.851944000000003,77.774429000000055],[-77.875274999999874,77.774429000000055],[-77.888061999999877,77.781372000000033],[-77.930556999999965,77.808868000000075],[-77.955001999999922,77.830276000000026],[-77.952224999999999,77.833054000000004],[-77.936385999999914,77.839157000000114],[-77.906386999999995,77.844437000000028],[-77.880279999999914,77.848038000000031],[-77.821121000000005,77.854431000000034],[-77.717772999999966,77.863037000000134],[-77.676102000000014,77.864700000000028],[-77.622771999999941,77.862762000000089],[-77.596389999999985,77.860808999999961],[-77.582779000000016,77.858032000000094],[-77.575286999999946,77.854980000000126],[-77.568619000000012,77.849716000000001],[-77.575561999999991,77.823608000000036],[-77.579178000000013,77.81860400000005],[-77.592772999999909,77.813309000000004],[-77.628052000000025,77.804153000000042],[-77.658889999999985,77.79693600000013],[-77.680557000000022,77.792755000000056],[-77.851944000000003,77.774429000000055]],[[-101.71140300000002,77.901657000000057],[-101.671944,77.893326000000002],[-101.62082699999996,77.884430000000066],[-101.52443700000003,77.869980000000112],[-101.450287,77.861098999999967],[-101.36833200000001,77.853867000000093],[-101.26555599999995,77.842758000000003],[-101.23777799999993,77.838882000000126],[-101.19138299999997,77.830826000000059],[-101.16139199999992,77.822769000000051],[-100.96056399999992,77.759155000000135],[-100.92639200000002,77.743317000000104],[-100.92555199999998,77.737198000000092],[-100.92887899999999,77.731369000000086],[-100.94055200000003,77.726929000000041],[-100.96472199999994,77.72554000000008],[-101.096947,77.719436999999914],[-101.21694899999994,77.721924000000001],[-101.26777599999997,77.725815000000068],[-101.31806899999992,77.726089000000002],[-101.50695799999994,77.724991000000102],[-101.53527799999995,77.723602000000142],[-101.56471299999993,77.720535000000041],[-101.58583099999993,77.71527100000003],[-101.593613,77.709427000000005],[-101.60582699999992,77.703873000000044],[-101.62249799999995,77.69859300000013],[-101.65222199999994,77.694427000000076],[-101.79888900000003,77.676376000000062],[-101.82640099999992,77.676086000000055],[-102.01695299999994,77.679703000000018],[-102.06777999999997,77.682205000000067],[-102.1416779999999,77.690810999999997],[-102.43639399999995,77.729705999999965],[-102.44444299999998,77.731934000000081],[-102.51083399999999,77.786102000000085],[-102.52971600000001,77.834152000000074],[-102.51806599999992,77.844146999999964],[-102.49889400000001,77.855545000000006],[-102.45889299999999,77.871094000000085],[-102.44249000000002,77.876648000000102],[-102.41665599999999,77.881927000000076],[-102.38778699999995,77.884155000000021],[-102.13999899999999,77.896378000000084],[-102.08389299999999,77.897217000000069],[-102.04915599999998,77.896942000000024],[-101.91583299999996,77.893875000000094],[-101.83194699999996,77.893875000000094],[-101.779449,77.896378000000084],[-101.74973299999999,77.899719000000118],[-101.71140300000002,77.901657000000057]],[[-114.07305899999994,77.981659000000036],[-113.9813769999999,77.934982000000105],[-113.97501399999993,77.931091000000038],[-113.97222899999997,77.925262000000032],[-113.97222899999997,77.919983000000059],[-113.9583439999999,77.914993000000038],[-113.92388900000003,77.910812000000135],[-113.89499699999993,77.908325000000048],[-113.84028599999999,77.906097000000102],[-113.72666899999996,77.896103000000039],[-113.70639,77.891663000000051],[-113.58556399999998,77.825820999999962],[-113.57861300000002,77.819991999999957],[-113.57611099999997,77.814147999999989],[-113.58750899999995,77.80802900000009],[-113.61916399999996,77.795821999999987],[-113.65972899999997,77.783324999999991],[-113.78832999999992,77.745255000000043],[-113.90833999999995,77.726379000000009],[-113.93472300000002,77.72387700000013],[-114.11444099999989,77.706649999999911],[-114.19304699999998,77.69802900000002],[-114.22305299999999,77.698868000000004],[-114.27722199999999,77.702209000000039],[-114.33112299999999,77.709717000000012],[-114.415009,77.731369000000086],[-114.514183,77.765273999999977],[-114.66251399999999,77.803863999999919],[-114.70916699999998,77.813599000000011],[-114.73029300000002,77.818877999999984],[-114.84834299999994,77.854706000000022],[-115.07721699999996,77.938582999999994],[-115.11138900000003,77.953872999999987],[-115.11501299999992,77.956375000000037],[-115.11609599999991,77.958327999999995],[-115.10833700000001,77.961380000000077],[-115.09084300000001,77.963608000000079],[-115.06054699999993,77.963882000000012],[-115.03388999999993,77.962204000000042],[-114.93028299999997,77.960541000000148],[-114.81973299999993,77.973037999999917],[-114.79778299999992,77.975540000000024],[-114.77749599999993,77.981659000000036],[-114.74027999999998,78.000000000000057],[-114.60582699999998,78.03054800000001],[-114.40083299999998,78.067490000000021],[-114.35500300000001,78.070541000000048],[-114.32694999999995,78.0711060000001],[-114.30332899999996,78.070541000000048],[-114.28694200000001,78.066086000000041],[-114.07305899999994,77.981659000000036]],[[-109.58805799999999,78.064697000000024],[-109.58056599999998,78.058319000000097],[-109.58112299999988,78.041367000000093],[-109.58528100000001,78.035538000000088],[-109.66972399999997,77.971649000000127],[-109.68305999999995,77.965820000000122],[-109.70556599999986,77.959991000000116],[-109.76027699999997,77.951096000000064],[-109.81527699999992,77.942749000000106],[-109.84249899999998,77.938873000000001],[-109.89750699999996,77.932755000000043],[-110.00723299999987,77.921371000000136],[-110.14499699999999,77.911926000000108],[-110.162781,77.906936999999971],[-110.16665599999999,77.901093000000117],[-110.19611399999991,77.896652000000017],[-110.22112299999998,77.893875000000094],[-110.24889399999995,77.893875000000094],[-110.48999000000003,77.883881000000088],[-110.62666300000001,77.873032000000023],[-110.65416700000003,77.871918000000051],[-110.79250299999995,77.870819000000097],[-110.846947,77.866379000000052],[-110.87389400000001,77.862198000000149],[-110.89584400000001,77.856093999999928],[-110.90139799999992,77.849716000000001],[-110.90471600000001,77.843872000000147],[-110.90360999999996,77.838042999999971],[-110.90028399999994,77.832763999999997],[-110.89444699999996,77.826934999999992],[-110.88639799999987,77.820831000000112],[-110.74388099999993,77.773605000000089],[-110.71556099999992,77.768875000000037],[-110.65888999999999,77.759720000000016],[-110.63110399999994,77.758040999999992],[-110.60138699999999,77.758881000000031],[-110.51972999999992,77.763321000000019],[-110.41583299999996,77.770827999999995],[-110.39306599999986,77.773041000000148],[-110.368607,77.776381999999955],[-110.28916899999996,77.782486000000006],[-110.16111799999999,77.784149000000127],[-110.13305700000001,77.780548000000067],[-110.10500299999995,77.774994000000049],[-110.09028599999994,77.769150000000081],[-110.08029199999993,77.763321000000019],[-110.04055800000003,77.637496999999996],[-110.08029199999993,77.563599000000067],[-110.08416699999992,77.557755000000043],[-110.09221599999995,77.551926000000037],[-110.11749299999997,77.539978000000019],[-110.20333899999997,77.511383000000137],[-110.22501399999987,77.505264000000125],[-110.27055399999995,77.49581900000004],[-110.29695100000004,77.491652999999985],[-110.502228,77.460266000000047],[-110.81500199999999,77.424988000000042],[-110.82749899999999,77.419144000000017],[-110.85082999999992,77.414428999999984],[-110.87721299999998,77.411377000000073],[-110.95639,77.407486000000006],[-111.00974299999996,77.406096999999988],[-111.06527699999998,77.406096999999988],[-111.11721799999992,77.408874999999966],[-111.172234,77.416092000000106],[-111.29998799999993,77.419144000000017],[-111.46305799999999,77.393051000000071],[-111.61833200000001,77.373871000000122],[-111.82501199999996,77.34887700000013],[-112.031113,77.324707000000103],[-112.05722000000003,77.323317999999915],[-112.083618,77.323043999999982],[-112.13694800000002,77.323317999999915],[-112.16639700000002,77.325271999999984],[-112.41306299999997,77.356094000000041],[-112.43888900000002,77.361099000000081],[-112.48222399999992,77.371094000000028],[-112.5,77.378235000000018],[-112.50778200000002,77.381363000000022],[-112.52139299999999,77.389434999999992],[-112.52333099999993,77.395263999999997],[-112.52694700000001,77.399719000000061],[-112.545547,77.415817000000061],[-112.587784,77.449141999999938],[-112.60109699999992,77.455261000000007],[-112.626938,77.459427000000062],[-112.65387699999997,77.458878000000141],[-112.68222000000003,77.456939999999975],[-112.69721999999996,77.455261000000007],[-112.73889200000002,77.445816000000093],[-112.764183,77.441650000000038],[-112.79083300000002,77.441086000000098],[-112.80249000000003,77.442474000000004],[-112.92887899999994,77.464157000000114],[-112.95777899999996,77.469436999999971],[-112.96389799999992,77.474152000000004],[-112.96806299999992,77.485809000000131],[-112.96806299999992,77.492203000000018],[-112.97028399999999,77.498032000000023],[-112.978882,77.503326000000015],[-112.99445300000002,77.508881000000088],[-113.01167299999997,77.512771999999984],[-113.03751399999999,77.515823000000012],[-113.06500199999999,77.517211999999972],[-113.14611799999994,77.517761000000121],[-113.17388900000003,77.519440000000145],[-113.198036,77.523880000000133],[-113.20472699999999,77.529433999999981],[-113.23805199999998,77.581375000000037],[-113.24027999999993,77.587204000000042],[-113.16251399999993,77.609146000000123],[-113.1875,77.739426000000037],[-113.20556599999998,77.744431000000077],[-113.26251200000002,77.755554000000075],[-113.283073,77.761108000000092],[-113.29444899999999,77.766662999999994],[-113.30387899999994,77.773041000000148],[-113.31054699999993,77.778595000000109],[-113.31500199999994,77.783875000000023],[-113.31973299999999,77.795531999999923],[-113.31973299999999,77.807204999999954],[-113.31749699999995,77.813033999999959],[-113.30638099999993,77.837203999999986],[-113.23473399999989,77.901657000000057],[-113.23082699999992,77.903594999999996],[-113.20973200000003,77.90887500000008],[-113.12721299999998,77.912201000000096],[-113.09973100000002,77.912766000000147],[-113.07167099999998,77.912201000000096],[-113.04666099999997,77.907761000000107],[-113.03971899999999,77.901932000000102],[-112.94360399999999,77.911926000000108],[-112.80499299999985,77.933043999999995],[-112.78333299999997,77.937195000000088],[-112.76666299999999,77.942474000000061],[-112.74194299999988,77.951660000000004],[-112.57444799999996,77.979431000000091],[-112.46694899999994,77.992477000000008],[-112.29499800000002,78.010544000000095],[-112.12526699999995,78.00610400000005],[-111.97944599999994,78.018599999999992],[-111.787216,78.033599999999922],[-111.77610800000002,78.028046000000131],[-111.756393,78.024428999999998],[-111.73055999999997,78.024155000000064],[-111.70556599999998,78.026931999999988],[-111.63221699999991,78.040817000000061],[-111.34583999999995,78.076935000000105],[-111.31833599999999,78.08027600000014],[-111.28832999999997,78.081940000000145],[-111.09333800000002,78.092484000000013],[-111.048607,78.093597000000102],[-111.02749599999999,78.093322999999998],[-110.99861099999993,78.090546000000074],[-110.99749799999995,78.084717000000069],[-111.00110599999994,78.079987000000017],[-110.995003,78.074158000000011],[-110.90334300000001,78.062194999999974],[-110.861107,78.061645999999996],[-110.83306899999997,78.06303400000013],[-110.80555700000002,78.065262000000075],[-110.78778099999994,78.0711060000001],[-110.77500899999995,78.076935000000105],[-110.77139299999999,78.082764000000111],[-110.76334399999996,78.088882000000069],[-110.74553700000001,78.094711000000075],[-110.72721899999988,78.097762999999986],[-110.67051700000002,78.101089000000002],[-110.54998799999998,78.106094000000098],[-110.46584299999995,78.108597000000032],[-110.23777799999999,78.110809000000131],[-110.10082999999992,78.108597000000032],[-109.95916699999987,78.104705999999965],[-109.78916899999996,78.099716000000114],[-109.67777999999998,78.091933999999981],[-109.65387699999985,78.088318000000129],[-109.60527000000002,78.0711060000001],[-109.58805799999999,78.064697000000024]],[[-101.65139799999997,78.144714000000022],[-101.67527799999999,78.144440000000088],[-101.859444,78.15525800000006],[-101.87917299999992,78.158324999999991],[-101.88194299999998,78.162201000000039],[-101.77610800000002,78.216385000000116],[-101.75334199999992,78.227203000000088],[-101.73137700000001,78.232483000000116],[-101.70722999999987,78.23275799999999],[-101.68472299999996,78.230545000000006],[-101.68167099999994,78.227478000000076],[-101.67250100000001,78.226089000000115],[-101.63362100000001,78.210815000000025],[-101.62277199999988,78.204712000000086],[-101.61582899999996,78.199416999999983],[-101.60360700000001,78.187485000000038],[-101.59999099999993,78.181090999999981],[-101.59861799999993,78.175261999999975],[-101.59973100000002,78.164429000000041],[-101.60527000000002,78.159149000000127],[-101.61305199999998,78.153594999999939],[-101.62581599999993,78.148041000000148],[-101.65139799999997,78.144714000000022]],[[-103.05695300000002,78.119705000000067],[-103.11444099999994,78.11775200000011],[-103.19444299999992,78.11914100000007],[-103.212784,78.120529000000033],[-103.23029300000002,78.123871000000122],[-103.25862099999995,78.134995000000004],[-103.27027900000002,78.141097999999943],[-103.27722199999999,78.146941999999967],[-103.28222700000003,78.15776100000005],[-103.27971600000001,78.163605000000075],[-103.274719,78.169983000000002],[-103.26750199999998,78.17553700000002],[-103.23916600000001,78.192200000000071],[-103.22721899999993,78.197754000000089],[-103.17027300000001,78.219985999999949],[-103.12470999999999,78.236649000000057],[-103.06276700000001,78.258041000000048],[-103.04138199999994,78.263610999999969],[-102.98693800000001,78.27276599999999],[-102.93415800000002,78.27276599999999],[-102.89750700000002,78.269149999999968],[-102.82556199999993,78.258881000000088],[-102.8125,78.255829000000006],[-102.79860699999995,78.250274999999988],[-102.78916899999996,78.24443100000002],[-102.78222700000003,78.238586000000055],[-102.78028899999993,78.23275799999999],[-102.77639799999986,78.215546000000131],[-102.77639799999986,78.210266000000047],[-102.781387,78.204987000000074],[-102.79332699999998,78.199416999999983],[-102.85527000000002,78.188872999999944],[-102.89806399999992,78.17804000000001],[-102.93195300000002,78.166931000000091],[-102.97721899999999,78.150269000000094],[-103.01777599999997,78.133606000000043],[-103.04167199999995,78.122208000000001],[-103.05695300000002,78.119705000000067]],[[-94.366652999999985,78.159149000000127],[-94.378051999999968,78.15776100000005],[-94.404448999999943,78.159988000000112],[-94.506118999999956,78.172760000000096],[-94.520003999999858,78.177475000000129],[-94.67111199999988,78.240814000000057],[-94.683060000000012,78.247208000000057],[-94.694152999999915,78.2586060000001],[-94.692215000000033,78.264709000000039],[-94.681106999999884,78.274155000000007],[-94.660827999999924,78.279160000000047],[-94.635558999999944,78.28387500000008],[-94.602218999999991,78.287200999999925],[-94.572234999999921,78.287766000000147],[-94.546386999999982,78.284424000000058],[-94.515014999999892,78.278046000000074],[-94.481948999999929,78.268326000000002],[-94.36111499999987,78.22164900000007],[-94.344726999999978,78.214706000000092],[-94.316665999999998,78.197479000000044],[-94.309433000000013,78.191086000000098],[-94.306945999999925,78.184982000000048],[-94.309157999999968,78.179153000000042],[-94.366652999999985,78.159149000000127]],[[-88.287215999999944,78.24331699999999],[-88.360001000000011,78.237761999999918],[-88.381942999999978,78.242476999999951],[-88.393616000000009,78.248871000000008],[-88.404723999999987,78.25999500000006],[-88.407500999999911,78.264435000000105],[-88.411117999999931,78.273879999999963],[-88.40972899999997,78.292205999999965],[-88.404449,78.298035000000027],[-88.235274999999888,78.42692599999998],[-88.113051999999982,78.45526099999995],[-88.09445199999999,78.456940000000145],[-88.070281999999963,78.454712000000029],[-88.061385999999914,78.452484000000084],[-88.052779999999927,78.445526000000086],[-88.049728000000016,78.444427000000076],[-88.043334999999956,78.436646000000053],[-88.044448999999929,78.42442299999999],[-88.044997999999964,78.421371000000079],[-88.046660999999972,78.418868999999972],[-88.057220000000029,78.407485999999949],[-88.166396999999961,78.308029000000033],[-88.187774999999988,78.291655999999932],[-88.245543999999995,78.252777000000094],[-88.255004999999983,78.247208000000057],[-88.287215999999944,78.24331699999999]],[[-109.64806399999992,78.588042999999971],[-109.569458,78.586380000000077],[-109.54998799999998,78.586655000000064],[-109.50055700000001,78.582763999999997],[-109.40527299999997,78.556931000000077],[-109.33416699999998,78.524155000000121],[-109.26055899999994,78.487198000000092],[-109.25556899999998,78.482483000000059],[-109.254997,78.478591999999992],[-109.26055899999994,78.455826000000002],[-109.31806899999992,78.35803199999998],[-109.32721700000002,78.352203000000145],[-109.40499899999992,78.306366000000082],[-109.42859599999997,78.303314],[-109.59583999999995,78.302765000000022],[-109.766953,78.294144000000131],[-109.82444799999996,78.293869000000086],[-109.85333300000002,78.29664600000001],[-109.882767,78.301376000000062],[-109.89306599999998,78.307205000000067],[-109.89835399999998,78.3119200000001],[-109.90862299999998,78.317764000000068],[-109.92610200000001,78.323043999999982],[-109.95527599999997,78.325821000000076],[-109.98388699999998,78.325546000000031],[-110.01251200000002,78.323608000000092],[-110.19638099999997,78.303864000000033],[-110.22444199999995,78.299987999999928],[-110.25250199999999,78.295822000000044],[-110.279449,78.284987999999998],[-110.29778299999992,78.281097000000102],[-110.354446,78.276657000000057],[-110.4119419999999,78.277206000000035],[-110.484734,78.284424000000058],[-110.57167099999992,78.289703000000031],[-110.65833999999995,78.29304500000012],[-110.71556099999992,78.292480000000126],[-110.78778099999994,78.306931000000134],[-110.85665899999987,78.327208999999982],[-110.85888699999998,78.337769000000094],[-110.97501399999999,78.363876000000005],[-111.00250199999999,78.368042000000059],[-111.14138799999995,78.386108000000036],[-111.16999799999996,78.384155000000078],[-111.27778599999994,78.372207999999944],[-111.27139299999999,78.346100000000035],[-111.30610699999994,78.321106000000043],[-111.41000400000001,78.277206000000035],[-111.42304999999993,78.272217000000069],[-111.43888899999996,78.268600000000106],[-111.46250899999995,78.267487000000017],[-111.50527999999997,78.266936999999984],[-111.57556199999999,78.270538000000045],[-111.65249599999993,78.27276599999999],[-111.73832700000003,78.27276599999999],[-111.76666299999994,78.271378000000084],[-111.79527299999995,78.271103000000096],[-111.82000700000003,78.273604999999975],[-111.86472300000003,78.296370999999965],[-111.88221699999997,78.306931000000134],[-111.88861099999997,78.312485000000095],[-111.89277599999997,78.318054000000132],[-111.89167800000001,78.322220000000016],[-111.91861,78.332764000000054],[-111.939438,78.338318000000072],[-112.13305700000001,78.36554000000001],[-112.21501199999994,78.365265000000136],[-112.43776700000001,78.354431000000091],[-112.58306899999997,78.343597000000045],[-112.68443299999996,78.331375000000037],[-112.73916599999995,78.323043999999982],[-112.78721599999989,78.310531999999967],[-112.89083900000003,78.292480000000126],[-112.94499199999996,78.28387500000008],[-113.02694700000001,78.27276599999999],[-113.05499299999997,78.271378000000084],[-113.14222699999999,78.268326000000002],[-113.16860999999994,78.268600000000106],[-113.18831599999999,78.269989000000123],[-113.21777299999985,78.27777100000003],[-113.27333099999998,78.296370999999965],[-113.28195199999999,78.299713000000111],[-113.287781,78.302475000000015],[-113.33249699999993,78.328872999999987],[-113.33416699999998,78.332764000000054],[-113.21611000000001,78.385269000000108],[-113.1241609999999,78.420822000000101],[-113.11527999999987,78.423035000000084],[-113.03832999999997,78.436919999999986],[-112.71167000000003,78.484711000000061],[-112.60749800000002,78.4994200000001],[-112.36305199999998,78.533324999999991],[-112.31166100000002,78.539977999999962],[-112.23805199999998,78.547211000000004],[-112.12970699999994,78.551926000000037],[-111.98805199999987,78.552764999999965],[-111.90360999999996,78.548874000000069],[-111.87304699999999,78.544434000000081],[-111.85305800000003,78.542755000000056],[-111.80972299999991,78.545258000000047],[-111.75250199999994,78.55053700000002],[-111.67777999999993,78.563034000000016],[-111.641953,78.574158000000068],[-111.60082999999997,78.585266000000104],[-111.57224299999996,78.588593000000003],[-111.45556599999998,78.592758000000003],[-111.39195299999994,78.61192299999999],[-111.378601,78.617751999999996],[-111.37998999999991,78.622757000000036],[-111.36305199999998,78.64276099999995],[-111.16055299999999,78.691649999999925],[-110.95612299999993,78.718323000000112],[-110.79110700000001,78.735259999999926],[-110.6375119999999,78.748596000000077],[-110.46028100000001,78.757492000000013],[-110.43055700000002,78.758605999999986],[-110.41055299999999,78.757767000000001],[-110.39527900000002,78.756104000000107],[-110.38445299999989,78.751389000000074],[-110.271118,78.727768000000026],[-110.16416900000002,78.70915199999996],[-110.07778899999988,78.694977000000051],[-109.99722300000002,78.683868000000018],[-109.86165599999998,78.666930999999977],[-109.85582699999998,78.660262999999986],[-109.86000100000001,78.654433999999981],[-109.86165599999998,78.649155000000007],[-109.86110699999995,78.643326000000002],[-109.85526999999996,78.637496999999996],[-109.67054699999989,78.591370000000097],[-109.64806399999992,78.588042999999971]],[[-74.306945999999982,78.676651000000049],[-74.334166999999923,78.675262000000089],[-74.36721799999998,78.676086000000055],[-74.419448999999986,78.681655999999919],[-74.614166000000012,78.702774000000034],[-74.704726999999934,78.722762999999929],[-74.710007000000019,78.727477999999962],[-74.710281000000009,78.731094000000041],[-74.706664999999987,78.737488000000099],[-74.645003999999972,78.772491000000059],[-74.632216999999969,78.777206000000092],[-74.615829000000019,78.778595000000109],[-74.591109999999958,78.778870000000097],[-74.555557000000022,78.776093000000003],[-74.356948999999929,78.755829000000062],[-74.312042000000019,78.750000000000057],[-74.28195199999999,78.746094000000028],[-74.192489999999964,78.729705999999965],[-74.167770000000019,78.719986000000063],[-74.163619999999923,78.716094999999996],[-74.172774999999888,78.711380000000133],[-74.236388999999974,78.687194999999917],[-74.256667999999934,78.6827550000001],[-74.28443900000002,78.678864000000033],[-74.306945999999982,78.676651000000049]],[[-96.768065999999976,78.684143000000006],[-96.708892999999989,78.6827550000001],[-96.645003999999972,78.686096000000134],[-96.613051999999982,78.685532000000023],[-96.585007000000019,78.68331900000004],[-96.533614999999941,78.676926000000094],[-96.510559000000001,78.672484999999995],[-96.466399999999965,78.661926000000108],[-96.395279000000016,78.640549000000078],[-96.379165999999998,78.634430000000066],[-96.356109999999944,78.627762000000075],[-96.315826000000015,78.618042000000003],[-96.293883999999935,78.615265000000079],[-96.265015000000005,78.618866000000139],[-96.235549999999989,78.627762000000075],[-96.202498999999875,78.630264000000011],[-96.184432999999956,78.628586000000041],[-96.167495999999971,78.623306000000014],[-96.158889999999872,78.617203000000075],[-96.152495999999985,78.611374000000012],[-96.216400000000021,78.560531999999967],[-96.178054999999915,78.518875000000094],[-96.009445000000028,78.492477000000122],[-95.857773000000009,78.494980000000055],[-95.820006999999919,78.502213000000097],[-95.746658000000025,78.514998999999989],[-95.71665999999999,78.519714000000022],[-95.68472300000002,78.521103000000039],[-95.652221999999995,78.521378000000027],[-95.601944000000003,78.519714000000022],[-95.537215999999944,78.514708999999982],[-95.481673999999998,78.508881000000031],[-95.407775999999956,78.497208000000057],[-95.206389999999942,78.461655000000007],[-95.086944999999957,78.437759000000085],[-94.895003999999972,78.395828000000108],[-94.877776999999924,78.391373000000101],[-94.86082499999992,78.384720000000129],[-94.831679999999949,78.364699999999971],[-94.829177999999956,78.358871000000136],[-94.830840999999907,78.352767999999969],[-94.837508999999955,78.347214000000008],[-94.853332999999907,78.341934000000094],[-94.941939999999988,78.316375999999991],[-94.966948999999943,78.311371000000122],[-95.096389999999928,78.290268000000026],[-95.36361699999992,78.24136400000009],[-95.388061999999934,78.236374000000012],[-95.399170000000026,78.231093999999985],[-95.398620999999991,78.226928999999984],[-95.388900999999976,78.222488000000055],[-95.368880999999988,78.218596999999988],[-95.345839999999953,78.217758000000003],[-95.255279999999914,78.21804800000001],[-95.227492999999981,78.216660000000104],[-95.130829000000006,78.194138000000009],[-95.113051999999925,78.188583000000108],[-95.106948999999986,78.185257000000092],[-95.108611999999994,78.179428000000087],[-95.111937999999952,78.174149000000114],[-95.111937999999952,78.167480000000012],[-95.106109999999944,78.161926000000051],[-95.089721999999995,78.154984000000127],[-95.068068999999923,78.148041000000148],[-94.98332199999993,78.133040999999992],[-94.90695199999999,78.117203000000131],[-94.889998999999989,78.108870999999965],[-94.886947999999961,78.102768000000026],[-94.911666999999852,78.055251999999996],[-95.011397999999986,77.991363999999919],[-95.043883999999935,77.974991000000045],[-95.057494999999903,77.969147000000078],[-95.085280999999952,77.958878000000027],[-95.100554999999929,77.953597999999943],[-95.112503000000004,77.951385000000016],[-95.137511999999958,77.950546000000031],[-95.162506000000008,77.953597999999943],[-95.186385999999857,77.957764000000054],[-95.211670000000026,77.961105000000089],[-95.236938000000009,77.964157],[-95.265838999999971,77.966095000000109],[-95.321395999999993,77.96775800000006],[-95.379989999999964,77.966384999999946],[-95.400283999999999,77.962769000000094],[-95.41332999999986,77.959426999999948],[-95.425551999999925,77.948029000000133],[-95.449722000000008,77.9433140000001],[-95.549728000000016,77.934143000000006],[-95.758057000000008,77.911926000000108],[-95.830840999999964,77.898880000000133],[-95.938599000000011,77.885817999999972],[-96.189437999999939,77.866089000000045],[-96.285552999999936,77.859421000000054],[-96.317504999999926,77.858322000000101],[-96.345551,77.858597000000088],[-96.365279999999984,77.859984999999995],[-96.386123999999995,77.862762000000089],[-96.404174999999952,77.868591000000094],[-96.41194200000001,77.874984999999981],[-96.410827999999924,77.880813999999987],[-96.405272999999966,77.886382999999967],[-96.410552999999993,77.890549000000078],[-96.416945999999996,77.893875000000094],[-96.43582200000003,77.898604999999975],[-96.456664999999987,77.901657000000057],[-96.541107000000011,77.897217000000069],[-96.734436000000017,77.872757000000036],[-96.735000999999954,77.86692800000003],[-96.710555999999997,77.855545000000006],[-96.696380999999917,77.850815000000125],[-96.667220999999927,77.849152000000061],[-96.585007000000019,77.856368999999972],[-96.558884000000035,77.859421000000054],[-96.539718999999991,77.864426000000094],[-96.516113000000018,77.869430999999963],[-96.491668999999888,77.870254999999929],[-96.515563999999983,77.845535000000098],[-96.542770000000019,77.841934000000037],[-96.628325999999959,77.840546000000131],[-96.68720999999988,77.840546000000131],[-96.71166999999997,77.839706000000092],[-96.734160999999972,77.835541000000092],[-96.748610999999926,77.830276000000026],[-96.829452999999944,77.789153999999996],[-96.849990999999989,77.787201000000039],[-96.880553999999961,77.786926000000051],[-96.900283999999999,77.788315000000011],[-96.907776000000013,77.790542999999957],[-96.912216000000001,77.793045000000063],[-96.933884000000035,77.797485000000052],[-97.014174999999966,77.804153000000042],[-97.057495000000017,77.805542000000059],[-97.072509999999909,77.804153000000042],[-97.096953999999926,77.803314000000057],[-97.102218999999991,77.807479999999998],[-97.119720000000029,77.865265000000079],[-97.11999499999996,77.870254999999929],[-97.107497999999964,77.876373000000058],[-97.081389999999942,77.886658000000011],[-97.015563999999983,77.904160000000047],[-97.002228000000002,77.908600000000035],[-96.99221799999998,77.914154000000053],[-96.992492999999911,77.918869000000086],[-96.994995000000017,77.921097000000032],[-97.142775999999969,77.934982000000105],[-97.281676999999945,77.948318000000086],[-97.30999799999995,77.951096000000064],[-97.354445999999996,77.962204000000042],[-97.380279999999971,77.969986000000006],[-97.431670999999994,77.986923000000047],[-97.454726999999934,77.992752000000053],[-97.503066999999874,78.002486999999917],[-97.572234999999978,78.012497000000053],[-97.602782999999931,78.015548999999965],[-97.673614999999984,78.021378000000141],[-97.75556899999998,78.025542999999971],[-97.766953000000001,78.028870000000097],[-97.77555799999999,78.034988000000055],[-97.666945999999996,78.088043000000084],[-97.647781000000009,78.090820000000008],[-97.618331999999953,78.091660000000047],[-97.567504999999926,78.089706000000035],[-97.513061999999991,78.086655000000007],[-97.43249499999996,78.080551000000128],[-97.323623999999995,78.076935000000105],[-97.297775000000001,78.076385000000073],[-97.024444999999901,78.074706999999933],[-96.997771999999998,78.075271999999984],[-96.910278000000005,78.079163000000051],[-96.887511999999958,78.083054000000118],[-96.855559999999912,78.104155999999932],[-96.856383999999991,78.108032000000037],[-96.870543999999995,78.133330999999998],[-96.885558999999944,78.138046000000031],[-96.983886999999925,78.150818000000072],[-97.059157999999968,78.15776100000005],[-97.138061999999934,78.165817000000118],[-97.164444000000003,78.168869000000029],[-97.184722999999963,78.172485000000108],[-97.194992000000013,78.17692599999998],[-97.200835999999924,78.183593999999971],[-97.212509000000011,78.189422999999977],[-97.299438000000009,78.204712000000086],[-97.321120999999948,78.207488999999953],[-97.349166999999966,78.208602999999982],[-97.407776000000013,78.207763999999997],[-97.635558999999944,78.206650000000025],[-97.829453000000001,78.219147000000021],[-97.849441999999954,78.234711000000118],[-97.817504999999983,78.23275799999999],[-97.773055999999997,78.238876000000118],[-97.763335999999924,78.24443100000002],[-97.777785999999878,78.25],[-97.867766999999958,78.279709000000025],[-97.881103999999993,78.283600000000092],[-97.904175000000009,78.28804000000008],[-97.930557000000022,78.290817000000004],[-98.012786999999946,78.296936000000017],[-98.054717999999923,78.301651000000049],[-98.068343999999968,78.308029000000033],[-98.070846999999958,78.313599000000067],[-98.043610000000001,78.389434999999992],[-98.148345999999947,78.403870000000097],[-98.172226000000023,78.40498400000007],[-98.198333999999988,78.408599999999979],[-98.347778000000005,78.443038999999999],[-98.366652999999985,78.449416999999983],[-98.388061999999991,78.467484000000013],[-98.410552999999993,78.490265000000022],[-98.411391999999921,78.4952550000001],[-98.410277999999948,78.508040999999992],[-98.308884000000035,78.533875000000023],[-98.171386999999982,78.529709000000139],[-98.054442999999992,78.533600000000035],[-98.022231999999917,78.53637700000013],[-98.019164999999987,78.542755000000056],[-98.028060999999923,78.563309000000004],[-98.042220999999927,78.569716999999969],[-98.080001999999922,78.582763999999997],[-98.115004999999996,78.593871999999976],[-98.139998999999989,78.599425999999994],[-98.169158999999922,78.603043000000127],[-98.235001000000011,78.619141000000013],[-98.315276999999924,78.64387499999998],[-98.326950000000011,78.650542999999914],[-98.328063999999927,78.652206000000035],[-98.371658000000025,78.719986000000063],[-98.366104000000007,78.763611000000026],[-98.36471599999993,78.768051000000071],[-98.17332499999992,78.812759000000142],[-98.144454999999994,78.816666000000112],[-98.06138599999997,78.818877999999984],[-97.777785999999878,78.815262000000075],[-97.65695199999999,78.811371000000008],[-97.59973100000002,78.807479999999941],[-97.488602000000014,78.796646000000067],[-97.461945000000014,78.792755],[-97.436934999999892,78.786925999999994],[-97.385559000000001,78.776931999999988],[-97.359160999999972,78.773041000000092],[-97.273620999999991,78.764434999999992],[-97.160278000000005,78.758881000000031],[-97.078063999999983,78.74971000000005],[-97.025283999999942,78.741928000000087],[-96.999725000000012,78.736923000000047],[-96.954726999999934,78.726379000000009],[-96.922500999999954,78.713318000000072],[-96.913895000000025,78.706940000000088],[-96.903884999999946,78.701660000000061],[-96.886397999999986,78.696640000000002],[-96.768065999999976,78.684143000000006]],[[-86.319457999999997,78.883606000000043],[-86.388061999999877,78.883041000000048],[-86.414718999999934,78.884430000000009],[-86.444442999999978,78.887207000000103],[-86.469161999999926,78.889708999999982],[-86.484436000000017,78.892761000000121],[-86.476943999999889,78.896378000000084],[-86.43638599999997,78.911102000000085],[-86.386672999999973,78.924988000000099],[-86.366104000000007,78.929703000000131],[-86.346114999999998,78.939697000000137],[-86.328613000000018,78.950821000000019],[-86.292770000000019,78.983047000000113],[-86.285277999999948,78.993317000000047],[-86.283614999999941,78.99803200000008],[-86.046951000000035,79.038589000000059],[-85.990828999999962,79.046936000000073],[-85.924437999999952,79.053864000000033],[-85.896117999999944,79.056931000000134],[-85.820007000000032,79.061371000000008],[-85.712509000000011,79.064148000000046],[-85.646118000000001,79.06442300000009],[-85.321395999999936,79.053864000000033],[-85.263335999999924,79.048874000000012],[-85.216109999999901,79.041367000000037],[-85.199722000000008,79.037490999999989],[-85.182495000000017,79.031372000000147],[-85.167220999999927,79.020828000000108],[-85.169448999999986,79.014709000000039],[-85.176391999999964,79.008880999999974],[-85.186661000000015,79.002777000000094],[-85.20944199999991,78.993590999999981],[-85.225829999999974,78.988586000000112],[-85.246947999999975,78.984146000000067],[-85.301392000000021,78.975266000000033],[-85.466110000000015,78.958327999999995],[-85.546660999999972,78.95248400000014],[-85.765563999999983,78.93414300000012],[-86.026947000000007,78.910262999999986],[-86.213897999999972,78.891663000000051],[-86.244995000000017,78.888321000000076],[-86.284163999999976,78.885268999999994],[-86.319457999999997,78.883606000000043]],[[-103.59388699999988,79.325821000000019],[-103.39835399999993,79.299988000000099],[-103.33556399999998,79.299988000000099],[-103.26251200000002,79.299988000000099],[-103.13999899999993,79.287766000000147],[-103.09777799999995,79.282486000000063],[-103.08361799999994,79.279433999999981],[-103.06806899999992,79.273880000000133],[-102.92111199999999,79.21748400000007],[-102.92666600000001,79.211105000000032],[-102.92639199999996,79.206649999999968],[-102.921944,79.200272000000041],[-102.90194699999995,79.172211000000118],[-102.89167800000001,79.166656000000046],[-102.87444299999987,79.164992999999924],[-102.76862299999993,79.138884999999959],[-102.620003,79.097214000000008],[-102.61165599999998,79.093048000000124],[-102.60582699999998,79.074432000000115],[-102.60637700000001,79.068054000000132],[-102.612213,79.056641000000127],[-102.654449,78.994141000000013],[-102.66555799999998,78.98275799999999],[-102.67582700000003,78.977478000000133],[-102.69860799999992,78.971924000000115],[-102.72084000000001,78.938309000000061],[-102.59500099999997,78.876648000000046],[-102.57945299999994,78.873032000000023],[-102.56082200000003,78.869705000000067],[-102.55082700000003,78.869431000000134],[-102.52887699999985,78.873032000000023],[-102.39195299999994,78.931656000000089],[-102.37638900000002,78.946365000000128],[-102.38054699999998,78.962769000000094],[-102.39806399999992,78.987198000000035],[-102.36305199999998,79.014999000000103],[-102.27944899999989,79.018051000000014],[-102.09361299999989,79.044144000000131],[-102.04943799999995,79.054427999999973],[-102.01500699999997,79.064987000000031],[-101.99333199999995,79.076096000000121],[-101.975281,79.080825999999945],[-101.942207,79.084717000000012],[-101.90249599999993,79.086380000000133],[-101.88194299999998,79.086104999999918],[-101.64890299999996,79.075821000000076],[-101.62805200000003,79.071930000000009],[-101.54194599999994,79.044708000000071],[-101.5202789999999,79.038315000000125],[-101.30803699999996,78.975815000000011],[-101.23166699999996,78.959427000000119],[-101.20472699999999,78.954162999999994],[-101.17666600000001,78.95387299999993],[-101.15222199999988,78.956650000000025],[-101.14334100000002,78.962494000000049],[-101.14472999999992,78.968323000000055],[-101.14083900000003,78.974152000000061],[-101.09388699999994,78.963608000000022],[-101.00556899999998,78.943039000000056],[-100.98665599999998,78.937195000000088],[-100.98528299999998,78.931366000000025],[-101.11694299999988,78.856934000000138],[-101.15278599999999,78.83998100000008],[-101.19304699999992,78.824431999999945],[-101.20056199999999,78.820831000000112],[-101.20333899999997,78.815811000000053],[-101.20084399999996,78.811919999999986],[-101.18639400000001,78.802765000000136],[-101.17278299999998,78.800537000000134],[-100.99194299999999,78.788879000000122],[-100.86389199999991,78.781372000000033],[-100.83056599999992,78.789703000000088],[-100.80055199999998,78.793320000000051],[-100.70556599999998,78.799712999999997],[-100.61389200000002,78.798035000000084],[-100.587784,78.799149000000057],[-100.55915799999997,78.80442800000003],[-100.55027799999993,78.809982000000048],[-100.53639199999998,78.815536000000009],[-100.52443700000003,78.818054000000018],[-100.35109699999998,78.828323000000012],[-100.34445199999993,78.826660000000118],[-100.32389799999999,78.802200000000084],[-100.32250999999997,78.797211000000118],[-100.33249699999993,78.782760999999994],[-100.32333399999993,78.778046000000131],[-100.283073,78.767761000000064],[-100.22778299999993,78.760544000000095],[-100.14334099999996,78.75221300000004],[-100.12416100000002,78.750000000000057],[-100.03250099999997,78.739426000000037],[-100.004997,78.735809000000074],[-99.952498999999989,78.725540000000024],[-99.93638599999997,78.719986000000063],[-99.896392999999932,78.695816000000036],[-99.893889999999942,78.693039000000113],[-99.893065999999976,78.6869200000001],[-99.913329999999917,78.679703000000018],[-99.972777999999948,78.659987999999998],[-100.0625,78.638885000000073],[-100.0625,78.635544000000039],[-100.01666299999988,78.616653000000042],[-99.988891999999908,78.613876000000118],[-99.96305799999999,78.614990000000091],[-99.90972899999997,78.623871000000008],[-99.853332999999964,78.633041000000048],[-99.817504999999926,78.630538999999999],[-99.573623999999995,78.595535000000098],[-99.550277999999878,78.590271000000143],[-99.533324999999991,78.583602999999982],[-99.529723999999987,78.578048999999965],[-99.534164000000033,78.572220000000129],[-99.661117999999931,78.485535000000027],[-99.670272999999895,78.479706000000022],[-99.684157999999968,78.474426000000108],[-99.712508999999955,78.469436999999971],[-99.777221999999995,78.46138000000002],[-99.831389999999999,78.450821000000133],[-99.859436000000017,78.442200000000014],[-99.867767000000015,78.437484999999981],[-99.865004999999996,78.434418000000051],[-99.821395999999993,78.427475000000072],[-99.801391999999964,78.420822000000101],[-99.786666999999966,78.414703000000088],[-99.776672000000019,78.408599999999979],[-99.761123999999995,78.396378000000141],[-99.753615999999909,78.389709000000096],[-99.748336999999992,78.383605999999986],[-99.749160999999958,78.372482000000105],[-99.778609999999958,78.332214000000022],[-99.797774999999945,78.308594000000028],[-99.799437999999952,78.303314],[-99.793883999999878,78.297211000000061],[-99.775832999999977,78.292480000000126],[-99.741378999999938,78.289978000000019],[-99.673049999999989,78.290817000000004],[-99.620543999999938,78.290268000000026],[-99.551102000000014,78.286102000000142],[-99.529449,78.282486000000063],[-99.514450000000011,78.277206000000035],[-99.479720999999984,78.249146000000053],[-99.447768999999994,78.224152000000061],[-99.428329000000019,78.211655000000064],[-99.413894999999968,78.205261000000007],[-99.398620999999991,78.199997000000053],[-99.188599000000011,78.133040999999992],[-98.989166000000012,78.073044000000039],[-98.969161999999926,78.068329000000006],[-98.945830999999885,78.061645999999996],[-98.945830999999885,78.05581699999999],[-98.962783999999942,78.009155000000078],[-98.971663999999976,77.997757000000092],[-98.980834999999956,77.992203000000075],[-98.998885999999914,77.986923000000047],[-99.021666999999866,77.981659000000036],[-99.081115999999952,77.971923999999944],[-99.094727000000034,77.966384999999946],[-99.099166999999966,77.960815000000082],[-99.098891999999921,77.954987000000131],[-99.078612999999905,77.925537000000077],[-99.069167999999991,77.913605000000075],[-99.041381999999942,77.900818000000072],[-99.022781000000009,77.894440000000145],[-99.013335999999981,77.888321000000133],[-99.022231999999974,77.882477000000108],[-99.238051999999982,77.837769000000037],[-99.396666999999979,77.824158000000068],[-99.525283999999999,77.813599000000011],[-99.549438000000009,77.812485000000038],[-99.713057999999933,77.810806000000014],[-99.853881999999999,77.792206000000078],[-99.859436000000017,77.786926000000051],[-99.876937999999939,77.781372000000033],[-99.90695199999999,77.778595000000109],[-100.21000699999996,77.809982000000048],[-100.32972699999999,77.825272000000041],[-100.49889399999995,77.85165400000011],[-100.60637699999995,77.879974000000118],[-100.75527999999997,77.955551000000071],[-100.78611799999999,77.974152000000117],[-100.81749699999995,77.999146000000053],[-100.82389799999999,78.004440000000045],[-100.83833299999998,78.022766000000047],[-100.83778399999994,78.034988000000055],[-100.83693700000003,78.040268000000083],[-100.83444199999991,78.04414399999996],[-100.82694999999995,78.048874000000012],[-100.853882,78.096649000000014],[-100.87581599999999,78.099990999999932],[-100.99861099999998,78.131653000000085],[-101.00974300000001,78.136658000000125],[-101.02194199999991,78.147766000000104],[-101.01889,78.156937000000084],[-101.01528899999994,78.16276600000009],[-101.01363399999997,78.173599000000081],[-101.01390100000003,78.184707999999944],[-101.02027900000002,78.189697000000081],[-101.03555299999999,78.196091000000138],[-101.06276699999995,78.198593000000017],[-101.08944700000001,78.198029000000076],[-101.23137700000001,78.183868000000075],[-101.28943599999997,78.182479999999998],[-101.31667299999998,78.184982000000048],[-101.34249899999998,78.189422999999977],[-101.41722099999998,78.208878000000141],[-101.432503,78.215271000000087],[-101.43138099999999,78.221374999999966],[-101.43276999999989,78.227478000000076],[-101.45638999999994,78.232208000000128],[-101.47416699999991,78.234711000000118],[-101.49665800000002,78.237198000000149],[-101.83332799999999,78.264999000000046],[-102.13305699999989,78.282761000000107],[-102.15750100000002,78.282486000000063],[-102.18221999999997,78.281097000000102],[-102.29888900000003,78.273315000000139],[-102.34722899999997,78.267761000000121],[-102.38890100000003,78.260817999999972],[-102.47138999999999,78.248871000000008],[-102.50167799999997,78.245819000000097],[-102.56139400000001,78.241089000000045],[-102.59056099999987,78.239700000000084],[-102.61860699999994,78.24136400000009],[-102.64527900000002,78.24552900000009],[-102.73222399999992,78.263885000000073],[-102.781387,78.276093000000117],[-102.79778299999998,78.282211000000075],[-102.80943300000001,78.288315000000125],[-102.8163909999999,78.294434000000138],[-102.81833599999999,78.300262000000032],[-102.81360599999994,78.310806000000127],[-102.80803700000001,78.316939999999931],[-102.74999999999989,78.338318000000072],[-102.736107,78.342484000000127],[-102.68639400000001,78.350540000000024],[-102.66583299999991,78.358596999999975],[-102.67083699999995,78.36303700000002],[-102.69499199999996,78.367752000000053],[-102.72250400000001,78.371368000000075],[-102.77778599999994,78.376372999999944],[-102.80610699999994,78.377762000000132],[-102.83583099999998,78.376372999999944],[-102.88999899999999,78.36914100000007],[-102.92027299999995,78.365814000000114],[-102.93804899999992,78.364699999999971],[-102.96694899999989,78.364150999999993],[-103.02443699999998,78.365265000000136],[-103.13390400000003,78.36914100000007],[-103.16388699999999,78.366928000000087],[-103.21417200000002,78.356644000000074],[-103.23832700000003,78.350540000000024],[-103.26471699999996,78.34526100000005],[-103.38110399999988,78.3316650000001],[-103.41111799999999,78.329437000000098],[-103.49804699999999,78.327774000000034],[-103.52749599999987,78.326385000000016],[-103.58473200000003,78.321930000000009],[-103.67999299999997,78.3119200000001],[-103.75110599999999,78.301376000000062],[-103.78195199999999,78.296097000000032],[-103.80803700000001,78.290543000000071],[-103.829453,78.284987999999998],[-103.87721299999998,78.272217000000069],[-103.89417300000002,78.252212999999927],[-103.89890299999996,78.245819000000097],[-103.91027800000001,78.241089000000045],[-103.93331899999998,78.237198000000149],[-103.96305799999999,78.233597000000088],[-103.99194299999999,78.233047000000056],[-104.02250699999996,78.234146000000067],[-104.04277000000002,78.23692299999999],[-104.06984699999987,78.242171999999982],[-104.08306899999997,78.244140999999956],[-104.110817,78.246643000000063],[-104.19027699999998,78.251663000000121],[-104.30471799999992,78.252212999999927],[-104.36361699999998,78.254439999999988],[-104.41251399999999,78.257767000000115],[-104.46749899999998,78.26527400000009],[-104.49445300000002,78.270538000000045],[-104.82055700000001,78.355820000000108],[-104.99194299999999,78.437759000000085],[-104.99999999999994,78.443862999999965],[-105.05055199999998,78.488037000000077],[-105.05139200000002,78.494431000000134],[-105.04305999999991,78.505829000000119],[-105.01194800000002,78.52165199999996],[-104.95361299999996,78.537491000000102],[-104.86860699999994,78.560531999999967],[-104.83139,78.569992000000013],[-104.806107,78.572495000000004],[-104.69638099999992,78.578873000000101],[-104.66665599999999,78.579712000000086],[-104.39778100000001,78.569992000000013],[-104.35500300000001,78.566375999999934],[-104.287781,78.555252000000053],[-104.26278699999995,78.549423000000047],[-104.21221899999995,78.539977999999962],[-104.1661069999999,78.53276100000005],[-104.14277600000003,78.529434000000094],[-104.08833300000003,78.524155000000121],[-104.03388999999999,78.519989000000066],[-103.93055699999996,78.516098],[-103.87110899999993,78.518051000000128],[-103.78250100000002,78.519714000000022],[-103.7225039999999,78.517211999999972],[-103.66583299999996,78.51249700000011],[-103.58860799999997,78.503875999999991],[-103.53333299999991,78.496367999999961],[-103.52362099999999,78.496094000000028],[-103.51834100000002,78.496933000000013],[-103.46584300000001,78.51748699999996],[-103.37805200000003,78.586105000000032],[-103.39998599999996,78.615540000000124],[-103.44666299999994,78.621368000000075],[-103.50611900000001,78.621368000000075],[-103.74082900000002,78.619705000000124],[-103.98554999999999,78.61692800000003],[-104.01000999999991,78.617203000000075],[-104.04215999999991,78.620681999999931],[-104.04222099999998,78.629973999999947],[-104.03278399999988,78.635269000000051],[-103.98916600000001,78.646103000000096],[-103.85193600000002,78.669434000000138],[-103.82611099999997,78.671921000000054],[-103.77223200000003,78.671097000000088],[-103.65834000000001,78.664993000000038],[-103.62888299999992,78.664429000000098],[-103.53943600000002,78.664993000000038],[-103.50917099999987,78.666382000000056],[-103.48361199999994,78.669144000000131],[-103.49082899999996,78.674987999999985],[-103.50306699999999,78.681091000000094],[-103.51306199999993,78.687484999999924],[-103.52778599999999,78.699417000000096],[-103.525284,78.705261000000121],[-103.51806599999998,78.710815000000082],[-103.48860200000001,78.715820000000122],[-103.439438,78.72026100000005],[-103.41221599999989,78.72026100000005],[-103.38861099999997,78.716933999999924],[-103.35804699999994,78.718597000000045],[-103.33389299999999,78.722488000000112],[-103.31916799999999,78.728591999999992],[-103.31639099999995,78.734420999999998],[-103.31889299999995,78.740264999999965],[-103.41665599999999,78.778870000000097],[-103.43916300000001,78.784988000000055],[-103.46806300000003,78.787491000000045],[-103.63971699999996,78.765273999999977],[-103.66915899999992,78.760544000000095],[-103.71056399999998,78.750000000000057],[-103.79611199999999,78.735809000000074],[-103.70249899999999,78.788315000000011],[-103.69526699999994,78.793868999999972],[-103.698036,78.799712999999997],[-103.72693599999997,78.802200000000084],[-103.86054999999999,78.806090999999981],[-103.87053699999996,78.806365999999969],[-103.886124,78.80442800000003],[-103.9083399999999,78.799149000000057],[-103.90556299999997,78.794144000000017],[-103.89639299999993,78.784714000000122],[-103.89083900000003,78.780273000000022],[-103.89527899999996,78.774994000000049],[-103.90527299999997,78.768875000000037],[-103.92916899999994,78.764998999999932],[-103.96056399999992,78.76138300000008],[-103.99109599999991,78.758881000000031],[-104.02166699999992,78.757492000000013],[-104.04943800000001,78.756378000000041],[-104.07389799999993,78.757767000000001],[-104.170547,78.765823000000069],[-104.19888300000002,78.770263999999997],[-104.21167000000003,78.776093000000003],[-104.21972699999998,78.782211000000132],[-104.21528599999999,78.793593999999985],[-104.16722099999998,78.816376000000105],[-104.13305700000001,78.827484000000084],[-104.04834,78.838882000000069],[-103.98665599999998,78.850265999999976],[-103.86054999999999,78.876648000000046],[-103.83139,78.886932000000115],[-103.82389799999999,78.892487000000017],[-103.82167099999992,78.898330999999985],[-103.82472199999995,78.903319999999951],[-103.86749299999997,78.916091999999992],[-103.96305799999999,78.929977000000065],[-103.98998999999998,78.932755000000043],[-104.00639299999995,78.935531999999967],[-104.029449,78.941650000000095],[-104.04750099999995,78.947754000000089],[-104.05332899999996,78.952208999999925],[-104.05387899999999,78.95748900000001],[-104.05222300000003,78.961380000000077],[-104.04778299999992,78.966659999999933],[-104.048607,78.971099999999979],[-104.05777,78.974152000000061],[-104.08112299999999,78.979431000000034],[-104.12943999999999,78.985809000000017],[-104.17859599999991,78.990265000000136],[-104.20361300000002,78.991653000000042],[-104.23388699999998,78.99192800000003],[-104.265556,78.988586000000112],[-104.45500199999998,78.956099999999992],[-104.47193899999996,78.950546000000031],[-104.51112399999994,78.910262999999986],[-104.53832999999997,78.881927000000019],[-104.56416300000001,78.864700000000028],[-104.57888799999989,78.858597000000088],[-104.78582799999998,78.806641000000013],[-104.81749699999995,78.802200000000084],[-104.87860099999995,78.798035000000084],[-104.90915699999999,78.796646000000067],[-104.96888699999994,78.797211000000118],[-104.98832700000003,78.798325000000091],[-105.01194800000002,78.803589000000102],[-105.02250699999996,78.809982000000048],[-105.02861000000001,78.815262000000075],[-105.02916699999997,78.821655000000078],[-105.02834300000001,78.832763999999941],[-105.01222200000001,78.844711000000075],[-104.83389299999999,78.926650999999993],[-104.68859899999995,78.993590999999981],[-104.67887899999999,78.999709999999993],[-104.674713,79.004990000000078],[-104.68110699999994,79.016663000000108],[-104.69415300000003,79.022766000000047],[-104.70805399999995,79.027771000000087],[-104.737213,79.031936999999971],[-104.90249599999993,79.04971299999994],[-104.98638899999997,79.043045000000006],[-105.01334399999996,79.038315000000125],[-105.09916699999991,79.02388000000002],[-105.12526700000001,79.021103000000096],[-105.15638699999988,79.019439999999975],[-105.39527900000002,79.011658000000068],[-105.42610200000001,79.011108000000036],[-105.48388699999998,79.013046000000145],[-105.51363399999997,79.016098000000056],[-105.54332699999998,79.020263999999941],[-105.5625,79.024428999999941],[-105.58138999999994,79.03054800000001],[-105.59084299999995,79.034424000000058],[-105.59944200000001,79.040268000000083],[-105.60665899999992,79.051926000000094],[-105.628601,79.161377000000073],[-105.62053699999996,79.172760000000096],[-105.48277300000001,79.306366000000082],[-105.45973199999997,79.324158000000125],[-105.43998699999997,79.329162999999994],[-105.40862299999992,79.328872999999987],[-105.38305699999995,79.326935000000049],[-105.33277899999996,79.319443000000092],[-105.19721999999996,79.299713000000111],[-105.16111799999999,79.297485000000108],[-105.12721299999998,79.297485000000108],[-105.10861199999999,79.298874000000126],[-105.01611300000002,79.310531999999967],[-104.95472699999993,79.315262000000018],[-104.85916099999997,79.319153000000085],[-104.74276700000001,79.322495000000004],[-104.58332799999999,79.329437000000098],[-104.54860699999989,79.331375000000037],[-104.49082900000002,79.339157],[-104.46083099999998,79.342209000000082],[-104.18167099999999,79.358871000000079],[-104.00723299999999,79.367752000000053],[-103.97778299999999,79.368866000000025],[-103.9491579999999,79.368042000000059],[-103.83500699999996,79.36442599999998],[-103.7225039999999,79.356934000000024],[-103.69526699999994,79.352203000000088],[-103.62053700000001,79.330551000000071],[-103.59388699999988,79.325821000000019]],[[-99.471663999999976,80.109711000000004],[-99.436661000000015,80.107208000000014],[-99.404723999999931,80.10803199999998],[-99.298049999999989,80.118866000000025],[-99.136672999999917,80.133040999999935],[-99.110549999999876,80.130539000000056],[-99.081680000000006,80.124695000000031],[-98.868880999999988,80.077774000000034],[-98.856658999999922,80.07249500000006],[-98.774719000000005,80.01527400000009],[-98.705841000000021,79.965820000000065],[-98.644164999999873,79.800261999999918],[-98.644164999999873,79.794144000000017],[-98.648620999999878,79.783599999999922],[-98.673049999999989,79.771927000000119],[-98.779175000000009,79.702208999999982],[-98.830001999999922,79.664429000000098],[-98.868057000000022,79.700821000000076],[-98.936110999999983,79.719711000000018],[-98.967772999999909,79.724152000000117],[-99.139998999999932,79.740814000000114],[-99.243056999999965,79.748596000000077],[-99.273620999999935,79.751389000000017],[-99.301391999999908,79.75471500000009],[-99.317229999999995,79.758605999999986],[-99.324448000000018,79.762497000000053],[-99.325561999999991,79.767487000000074],[-99.322509999999909,79.771378000000141],[-99.313048999999921,79.776093000000003],[-99.304717999999923,79.782211000000132],[-99.302779999999984,79.787490999999989],[-99.297501000000011,79.812759000000085],[-99.295837000000006,79.833328000000051],[-99.296386999999925,79.839157000000057],[-99.302215999999873,79.845261000000107],[-99.315826000000015,79.848602000000142],[-99.368880999999988,79.857758000000103],[-99.556655999999919,79.888885000000016],[-99.584441999999967,79.891937000000098],[-99.614166000000012,79.893326000000116],[-99.647781000000009,79.893051000000071],[-99.67971799999998,79.888046000000031],[-99.700835999999867,79.882750999999985],[-99.732223999999974,79.878860000000088],[-99.800827000000027,79.876648000000046],[-100.00556899999998,79.8744200000001],[-100.03582799999992,79.874695000000088],[-100.07028199999996,79.876923000000033],[-100.09777800000001,79.881088000000034],[-100.12110899999999,79.886658000000125],[-100.14389,79.893051000000071],[-100.15862299999998,79.898605000000089],[-100.17748999999998,79.909988000000112],[-100.17832900000002,79.915817000000118],[-100.19332900000001,80.03387500000008],[-100.08167999999989,80.084427000000005],[-100.06555200000003,80.089980999999966],[-100.02362099999993,80.099716000000058],[-99.827224999999999,80.143599999999992],[-99.795272999999952,80.147766000000104],[-99.759170999999981,80.149719000000005],[-99.726944000000003,80.150542999999971],[-99.625548999999921,80.148880000000077],[-99.599990999999989,80.145263999999997],[-99.593886999999881,80.139160000000004],[-99.571120999999948,80.132751000000098],[-99.471663999999976,80.109711000000004]],[[-99.155563000000029,80.174697999999978],[-99.127212999999927,80.168045000000006],[-99.113891999999964,80.163879000000122],[-99.138061999999991,80.162491000000045],[-99.160552999999993,80.163040000000137],[-99.184998000000007,80.167755],[-99.251952999999901,80.173035000000084],[-99.277495999999985,80.173035000000084],[-99.313613999999973,80.171097000000145],[-99.341384999999946,80.166092000000106],[-99.333069000000023,80.159424000000115],[-99.30360399999995,80.153870000000097],[-99.305556999999908,80.148331000000098],[-99.342498999999918,80.145538000000101],[-99.375274999999931,80.147217000000126],[-99.400557999999933,80.150818000000015],[-99.418059999999969,80.157211000000132],[-99.418335000000013,80.163040000000137],[-99.413329999999974,80.168868999999972],[-99.386947999999961,80.17886400000009],[-99.366942999999935,80.182205000000124],[-99.239165999999898,80.183868000000075],[-99.211944999999957,80.182205000000124],[-99.155563000000029,80.174697999999978]],[[-95.030837999999903,80.670258000000047],[-94.969451999999933,80.640274000000034],[-94.970551,80.635268999999994],[-94.981383999999991,80.631927000000076],[-95.006957999999997,80.626648000000046],[-95.190276999999924,80.608871000000022],[-95.226104999999961,80.60914600000001],[-95.453613000000018,80.629424999999969],[-95.611114999999984,80.648040999999978],[-95.676940999999943,80.653319999999951],[-95.711945000000014,80.654433999999981],[-95.749160999999958,80.653869999999984],[-95.788054999999929,80.652205999999978],[-95.823623999999938,80.648604999999918],[-95.86332699999997,80.645828000000051],[-96.061935000000005,80.656647000000078],[-96.118056999999965,80.660537999999974],[-96.14916999999997,80.664703000000145],[-96.139449999999954,80.669708000000014],[-96.076675000000023,80.683043999999995],[-96.028335999999967,80.687195000000088],[-96.006119000000012,80.688034000000016],[-95.491378999999995,80.699997000000053],[-95.424438000000009,80.699707000000046],[-95.200561999999934,80.697479000000101],[-95.166945999999939,80.695250999999985],[-95.128875999999934,80.691925000000083],[-95.096663999999976,80.688582999999994],[-95.062499999999943,80.682480000000055],[-95.065276999999924,80.680542000000116],[-95.045836999999949,80.676926000000037],[-95.030837999999903,80.670258000000047]],[[-92.727782999999931,81.305542000000059],[-92.530288999999982,81.284988000000112],[-92.21305799999999,81.245529000000033],[-92.148055999999997,81.236374000000126],[-92.124709999999936,81.232758000000103],[-92.052489999999921,81.218597000000102],[-91.955841000000021,81.196365000000014],[-91.858046999999999,81.167755],[-91.781677000000002,81.090271000000143],[-91.783889999999928,81.083602999999982],[-91.797501000000011,81.081665000000044],[-91.832503999999972,81.080276000000083],[-91.888061999999934,81.081940000000088],[-91.914444000000003,81.078049000000021],[-91.913894999999968,81.07499700000011],[-91.908614999999998,81.070540999999992],[-91.893341000000021,81.064986999999974],[-91.865828999999962,81.058594000000028],[-91.767226999999934,81.049148999999943],[-91.72222899999997,81.042205999999965],[-91.538895000000025,80.981658999999979],[-91.52555799999999,80.974990999999989],[-91.522781000000009,80.962769000000037],[-91.531676999999945,80.951096000000007],[-91.527221999999995,80.939697000000081],[-91.517776000000026,80.932754999999986],[-91.481673999999998,80.919434000000024],[-91.321121000000005,80.882750999999985],[-91.306106999999997,80.875534000000016],[-91.152221999999995,80.785538000000031],[-91.154998999999975,80.78054800000001],[-91.14916999999997,80.770263999999997],[-91.140563999999983,80.764709000000096],[-91.121658000000025,80.754715000000033],[-91.099441999999954,80.74803200000008],[-91.03472899999997,80.737488000000042],[-90.972777999999948,80.730270000000019],[-90.905272999999966,80.724425999999994],[-90.777221999999995,80.71775800000006],[-90.754181000000017,80.714995999999928],[-90.712783999999999,80.705551000000071],[-90.664718999999991,80.684708000000001],[-90.652495999999928,80.67804000000001],[-90.603881999999999,80.651382000000012],[-90.593612999999948,80.645264000000111],[-90.593063000000029,80.640823000000012],[-90.601943999999946,80.636107999999979],[-90.615829000000019,80.630264000000125],[-90.678054999999972,80.615540000000067],[-90.715835999999911,80.605545000000006],[-90.742492999999911,80.594711000000075],[-90.763061999999991,80.583603000000096],[-90.771666999999979,80.577484000000084],[-90.772780999999952,80.571930000000066],[-90.766402999999912,80.565536000000066],[-90.741378999999938,80.562195000000031],[-90.706116000000009,80.561371000000065],[-90.607223999999917,80.561371000000065],[-90.583069000000023,80.561371000000065],[-90.418059999999912,80.552200000000084],[-90.238891999999964,80.550536999999963],[-90.203339000000028,80.549712999999997],[-90.177215999999987,80.548874000000069],[-90.046386999999925,80.541656000000046],[-90.016402999999968,80.538039999999967],[-90,80.534591999999975],[-89.989990000000034,80.532486000000006],[-89.961394999999982,80.520263999999997],[-89.955565999999976,80.515548999999965],[-89.938598999999954,80.508330999999998],[-89.84056099999998,80.481369000000086],[-89.81639100000001,80.474991000000102],[-89.790282999999931,80.469437000000084],[-89.762511999999958,80.464995999999985],[-89.75111400000003,80.464432000000045],[-89.784163999999919,80.500824000000023],[-89.748336999999879,80.532760999999994],[-89.586945000000014,80.545532000000094],[-89.546111999999994,80.547485000000052],[-89.482773000000009,80.544983000000002],[-89.447219999999902,80.542480000000012],[-89.354172000000005,80.534988000000055],[-89.326400999999919,80.531937000000028],[-89.272781000000009,80.523315000000025],[-89.244995000000017,80.517212000000086],[-89.059158000000025,80.461380000000133],[-89.087508999999955,80.438583000000051],[-89.115279999999927,80.433868000000018],[-89.176101999999958,80.426651000000049],[-89.198333999999932,80.42164600000001],[-89.20944199999991,80.417754999999943],[-89.235001000000011,80.408035000000041],[-89.25,80.402206000000035],[-89.257232999999985,80.396942000000081],[-89.253615999999965,80.392761000000007],[-89.237212999999997,80.388596000000007],[-89.216948999999943,80.389709000000039],[-89.189712999999927,80.394149999999968],[-89.167496000000028,80.399155000000007],[-89.136123999999995,80.40248100000008],[-89.09973100000002,80.40248100000008],[-89.083327999999881,80.398331000000042],[-89.075835999999924,80.393051000000014],[-89.104995999999915,80.339431999999988],[-89.114165999999955,80.333327999999938],[-89.125274999999931,80.327773999999977],[-89.143616000000009,80.323318000000029],[-89.169158999999979,80.318054000000075],[-89.220275999999899,80.30914300000012],[-89.241942999999935,80.304153000000099],[-89.256667999999991,80.298599000000081],[-89.263900999999976,80.293320000000108],[-89.262221999999952,80.286652000000117],[-89.25140399999998,80.278320000000122],[-89.180496000000005,80.238174000000072],[-89.113892000000021,80.208038000000045],[-89.092223999999987,80.200821000000133],[-89.072784000000013,80.195526000000086],[-88.776672000000019,80.131363000000022],[-88.75,80.126647999999989],[-88.534728999999913,80.09887700000013],[-88.49888599999997,80.09887700000013],[-88.441939999999931,80.100540000000024],[-88.414718999999991,80.104980000000069],[-88.414444000000003,80.10803199999998],[-88.363051999999925,80.124420000000043],[-88.235274999999888,80.102477999999962],[-88.161941999999954,80.09165999999999],[-88.145554000000004,80.093872000000033],[-88.148346000000004,80.098037999999974],[-88.261397999999929,80.18803400000013],[-88.27305599999994,80.195526000000086],[-88.294158999999979,80.201385000000073],[-88.350829999999974,80.208878000000084],[-88.422775000000001,80.210541000000035],[-88.479996000000028,80.213608000000136],[-88.506957999999941,80.218322999999998],[-88.595276000000013,80.236923000000104],[-88.618057000000022,80.24331699999999],[-88.630279999999914,80.249145999999996],[-88.661391999999921,80.272491000000116],[-88.684432999999956,80.358597000000145],[-88.68582200000003,80.365540000000124],[-88.685271999999998,80.371643000000063],[-88.683059999999955,80.376923000000147],[-88.67721599999993,80.382751000000042],[-88.648894999999925,80.393600000000106],[-88.615279999999927,80.40387000000004],[-88.510284000000013,80.428864000000033],[-88.487777999999992,80.433868000000018],[-88.463333000000034,80.438034000000073],[-88.420546999999999,80.442200000000014],[-88.383895999999993,80.443588000000091],[-88.308333999999945,80.442749000000106],[-88.110549999999932,80.4327550000001],[-87.918883999999991,80.421097000000088],[-87.718613000000005,80.411102000000142],[-87.683884000000035,80.410263000000043],[-87.666396999999904,80.40387000000004],[-87.636123999999938,80.36692800000003],[-87.607498000000021,80.324158000000068],[-87.563889000000017,80.233322000000044],[-87.561935000000005,80.183593999999914],[-87.562774999999931,80.179153000000042],[-87.572234999999921,80.176086000000112],[-87.678054999999915,80.156371999999976],[-87.721389999999985,80.153046000000131],[-87.939162999999951,80.143875000000037],[-87.96665999999999,80.139434999999992],[-88.048889000000031,80.125809000000004],[-88.065552000000025,80.120818999999983],[-88.060546999999985,80.117477000000065],[-87.956664999999987,80.069717000000026],[-87.938048999999978,80.06442300000009],[-87.891387999999949,80.055542000000116],[-87.860001000000011,80.053588999999988],[-87.836120999999935,80.0577550000001],[-87.823059000000001,80.062484999999924],[-87.763061999999934,80.071106000000043],[-87.720000999999911,80.074707000000103],[-87.680557000000022,80.076385000000016],[-87.641678000000013,80.076385000000016],[-87.365004999999996,80.072768999999994],[-87.299987999999985,80.069443000000092],[-87.275557999999876,80.066939999999931],[-87.258620999999948,80.063873000000058],[-87.233321999999987,80.057480000000055],[-87.215285999999992,80.050537000000077],[-87.043334999999956,79.964996000000099],[-87.093612999999948,79.929428000000087],[-87.314437999999996,79.866088999999988],[-87.336120999999935,79.861374000000126],[-87.368332000000009,79.857208000000071],[-87.446655000000021,79.856094000000098],[-87.471938999999907,79.852478000000019],[-87.483062999999959,79.847214000000065],[-87.489440999999943,79.84137000000004],[-87.485549999999876,79.834991000000002],[-87.463622999999984,79.831374999999923],[-87.439162999999951,79.831940000000145],[-87.412780999999995,79.833328000000051],[-87.338608000000022,79.840820000000008],[-87.190826000000015,79.866088999999988],[-87.165558000000033,79.871094000000028],[-87.146956999999929,79.875534000000073],[-87.079726999999934,79.896103000000039],[-87.051392000000021,79.906647000000078],[-87.024718999999948,79.916091999999935],[-87.003066999999987,79.917755000000056],[-86.985824999999977,79.917755000000056],[-86.973891999999864,79.916381999999942],[-86.961394999999982,79.909988000000112],[-86.957779000000016,79.903594999999939],[-86.960555999999997,79.891372999999987],[-87.055557000000022,79.731934000000081],[-87.134170999999924,79.645264000000111],[-87.14416499999993,79.637771999999984],[-87.154998999999975,79.6336060000001],[-87.173049999999989,79.629149999999981],[-87.258620999999948,79.610260000000039],[-87.344451999999933,79.596374999999966],[-87.425551999999982,79.579163000000108],[-87.441665999999941,79.573883000000023],[-87.448043999999982,79.568329000000062],[-87.462509000000011,79.534713999999951],[-87.441939999999988,79.526382000000012],[-87.406661999999983,79.515823000000125],[-87.390563999999927,79.511108000000092],[-87.366394000000014,79.506378000000041],[-87.345276000000013,79.503052000000025],[-87.309998000000007,79.50221300000004],[-87.280563000000029,79.506943000000092],[-87.262786999999946,79.51138300000008],[-87.248336999999992,79.516937000000098],[-87.190552000000025,79.543593999999985],[-87.182769999999948,79.548874000000069],[-87.179992999999968,79.554153000000042],[-87.168883999999991,79.566376000000105],[-87.161117999999931,79.571655000000078],[-87.076675000000023,79.587493999999992],[-87.02555799999999,79.595535000000098],[-87.001113999999973,79.598877000000016],[-86.966659999999933,79.60165400000011],[-86.932495000000017,79.60165400000011],[-86.841384999999946,79.59304800000001],[-86.823623999999995,79.587769000000037],[-86.819732999999985,79.576096000000007],[-86.823897999999986,79.566086000000098],[-86.839721999999995,79.555817000000047],[-86.846389999999985,79.549988000000042],[-86.837783999999999,79.543320000000051],[-86.816665999999998,79.539703000000145],[-86.789992999999981,79.538878999999952],[-86.777221999999995,79.542206000000078],[-86.694991999999957,79.567490000000078],[-86.693329000000006,79.573608000000036],[-86.71055599999994,79.587203999999986],[-86.723891999999978,79.594437000000028],[-86.746383999999978,79.599990999999989],[-86.802489999999977,79.606093999999928],[-86.813048999999921,79.61192299999999],[-86.806380999999874,79.617751999999996],[-86.795272999999952,79.621643000000063],[-86.77694699999995,79.627472000000068],[-86.762222000000008,79.631653000000142],[-86.687209999999993,79.645264000000111],[-86.640838999999914,79.653320000000008],[-86.613051999999925,79.655822999999998],[-86.575012000000015,79.657211000000075],[-86.547775000000001,79.65637200000009],[-86.334166999999923,79.645538000000045],[-86.302779999999984,79.642761000000121],[-86.279448999999943,79.640274000000034],[-86.258895999999993,79.63499500000006],[-86.109160999999972,79.595260999999994],[-86.046111999999994,79.568877999999984],[-86.042220999999927,79.565536000000066],[-86.028060999999923,79.474701000000096],[-86.05471799999998,79.470535000000041],[-86.160552999999993,79.463608000000136],[-86.167496000000028,79.457764000000111],[-86.136123999999995,79.444702000000063],[-86.120834000000002,79.439972000000068],[-86.098891999999921,79.435806000000127],[-86.070847000000015,79.434143000000063],[-86.035004000000015,79.436371000000008],[-86.011947999999961,79.440262000000075],[-85.990554999999972,79.444977000000108],[-85.975829999999917,79.449142000000109],[-85.964171999999962,79.454436999999984],[-85.901108000000022,79.493591000000038],[-85.887222000000008,79.505264000000068],[-85.885283999999956,79.51138300000008],[-85.893341000000021,79.523315000000082],[-85.89916999999997,79.536377000000073],[-85.896666999999979,79.549149000000114],[-85.893341000000021,79.554703000000075],[-85.887786999999946,79.56109600000002],[-85.847504000000015,79.596374999999966],[-85.840285999999992,79.601928999999927],[-85.828339000000028,79.607483000000116],[-85.781386999999995,79.615540000000124],[-85.743606999999997,79.61692800000003],[-85.681945999999925,79.613312000000121],[-85.639175000000023,79.604155999999989],[-85.623885999999914,79.599152000000061],[-85.591385000000002,79.585266000000047],[-85.531112999999948,79.559418000000107],[-85.485000999999954,79.518600000000049],[-85.402221999999995,79.473602000000142],[-85.306655999999919,79.428314],[-85.27806099999998,79.415543000000127],[-85.150557999999933,79.38220200000012],[-85.130279999999971,79.378586000000098],[-85.039718999999877,79.350815000000011],[-84.93249499999996,79.300262000000032],[-84.920273000000009,79.293320000000108],[-84.904175000000009,79.276657000000057],[-84.904175000000009,79.267761000000121],[-84.909728999999857,79.263046000000088],[-84.93110699999994,79.258331000000055],[-85.099990999999932,79.239426000000094],[-85.158889999999928,79.231933999999967],[-85.211394999999868,79.223311999999964],[-85.232772999999952,79.218872000000147],[-85.248046999999872,79.213042999999971],[-85.260009999999909,79.207763999999997],[-85.271941999999967,79.19720500000011],[-85.280563000000029,79.192200000000071],[-85.297226000000023,79.187195000000031],[-85.591385000000002,79.15415999999999],[-85.779998999999918,79.131088000000034],[-85.877212999999983,79.121642999999949],[-86.00389100000001,79.111374000000126],[-86.158889999999985,79.103316999999947],[-86.271392999999989,79.095534999999984],[-86.341674999999952,79.088318000000072],[-86.422501000000011,79.075546000000088],[-86.485549999999989,79.063309000000118],[-86.550827000000027,79.048874000000012],[-86.55999799999995,79.044434000000138],[-86.555557000000022,79.042480000000126],[-86.550827000000027,79.035538000000031],[-86.552490000000034,79.029434000000037],[-86.55999799999995,79.012206999999989],[-86.587783999999942,78.983597000000145],[-86.598891999999921,78.978317000000061],[-86.614440999999943,78.973312000000021],[-86.676940999999886,78.959717000000126],[-86.702224999999942,78.955261000000064],[-86.741378999999938,78.951934999999992],[-86.765015000000005,78.953598000000113],[-86.785004000000015,78.957213999999965],[-86.808334000000002,78.967209000000082],[-86.903335999999854,79.009430000000066],[-86.916396999999961,79.016663000000108],[-86.926391999999964,79.035812000000135],[-86.930556999999965,79.047760000000039],[-86.940551999999968,79.053589000000045],[-86.949158000000011,79.057205000000067],[-86.965285999999935,79.057480000000112],[-86.98332199999993,79.056641000000127],[-86.989989999999977,79.047760000000039],[-87.004456000000005,78.987198000000035],[-87.002501999999993,78.981369000000029],[-86.986937999999952,78.949707000000046],[-86.979995999999971,78.9433140000001],[-86.966948999999943,78.936371000000122],[-86.950835999999981,78.929428000000087],[-86.942764000000011,78.922485000000108],[-86.937774999999988,78.91693099999992],[-86.952498999999932,78.906647000000078],[-86.97084000000001,78.896103000000039],[-86.997498000000007,78.882477000000051],[-87.021666999999923,78.873032000000023],[-87.052490000000034,78.862762000000089],[-87.179442999999935,78.830551000000014],[-87.282775999999956,78.810257000000036],[-87.328063999999983,78.794708000000128],[-87.353881999999999,78.78414900000007],[-87.529998999999918,78.6869200000001],[-87.532776000000013,78.669983000000116],[-87.543059999999969,78.664703000000031],[-87.572783999999956,78.654433999999981],[-87.591949,78.649718999999948],[-87.615829000000019,78.645264000000111],[-87.663054999999986,78.642487000000017],[-87.684432999999956,78.644989000000123],[-87.872771999999941,78.694977000000051],[-87.937774999999874,78.738312000000064],[-87.953612999999962,78.74971000000005],[-87.959166999999979,78.755264000000068],[-87.993880999999931,78.79525799999999],[-88.003341999999918,78.807205000000124],[-88.00140399999998,78.824158000000011],[-87.985275000000001,78.957213999999965],[-87.981673999999884,78.960541000000092],[-87.968338000000017,78.966385000000116],[-87.894164999999987,78.979706000000078],[-87.833617999999944,78.992203000000075],[-87.81361400000003,78.99693300000007],[-87.794448999999986,79.006943000000035],[-87.728881999999942,79.069442999999978],[-87.724715999999944,79.075821000000076],[-87.733886999999982,79.081100000000049],[-87.746108999999933,79.086104999999918],[-87.752791999999999,79.085540999999978],[-87.772780999999952,79.080825999999945],[-87.806380999999931,79.06999200000007],[-87.849166999999966,79.054977000000122],[-87.872771999999941,79.045258000000103],[-87.883330999999998,79.039978000000076],[-87.894454999999994,79.028320000000008],[-87.890288999999996,79.021652000000074],[-87.899993999999992,79.011108000000036],[-87.929442999999992,79.006943000000035],[-88.000564999999995,79.00360100000006],[-88.032776000000013,79.003876000000105],[-88.061385999999914,79.005829000000006],[-88.093886999999938,79.004440000000045],[-88.162506000000008,78.990540000000124],[-88.202498999999932,78.976379000000122],[-88.21305799999999,78.966095000000109],[-88.215285999999935,78.960815000000025],[-88.216659999999933,78.948318000000029],[-88.229720999999984,78.802200000000084],[-88.224716000000001,78.78915399999994],[-88.22222899999997,78.783324999999934],[-88.218063000000029,78.776931999999988],[-88.201110999999969,78.757216999999969],[-88.132216999999969,78.68081699999999],[-88.044158999999922,78.658600000000092],[-88.02416999999997,78.656647000000135],[-88.010833999999932,78.652771000000087],[-87.993056999999965,78.645264000000111],[-87.982772999999952,78.639435000000105],[-87.908614999999998,78.596939000000077],[-87.894729999999981,78.584717000000126],[-87.890839000000028,78.578323000000069],[-87.896956999999873,78.566375999999934],[-87.908339999999953,78.548599000000081],[-87.984725999999966,78.492202999999961],[-88.011948000000018,78.481369000000086],[-88.055832000000009,78.472762999999986],[-88.205276000000026,78.452484000000084],[-88.234160999999972,78.453598000000056],[-88.249160999999958,78.456649999999968],[-88.389450000000011,78.521378000000027],[-88.559432999999899,78.604156000000046],[-88.574721999999952,78.607208000000128],[-88.723052999999993,78.615814000000057],[-88.788605000000018,78.612761999999975],[-88.804168999999945,78.609711000000118],[-88.746108999999933,78.535812000000078],[-88.725006000000008,78.524155000000121],[-88.659164000000033,78.491088999999988],[-88.595276000000013,78.459991000000002],[-88.5625,78.44470200000012],[-88.552215999999987,78.437484999999981],[-88.543883999999991,78.426086000000112],[-88.535552999999993,78.413040000000137],[-88.536117999999931,78.406937000000028],[-88.538054999999986,78.401382000000126],[-88.541381999999999,78.396652000000074],[-88.553054999999915,78.385544000000095],[-88.561110999999983,78.379425000000083],[-88.570556999999951,78.373871000000065],[-88.614715999999987,78.348327999999981],[-88.663329999999974,78.321381000000031],[-88.672501000000011,78.316085999999984],[-88.704177999999956,78.271103000000096],[-88.710555999999997,78.261107999999979],[-88.713897999999858,78.254715000000033],[-88.71556099999998,78.249146000000053],[-88.716110000000015,78.243042000000003],[-88.721114999999941,78.231093999999985],[-88.726105000000018,78.225266000000033],[-88.75140399999998,78.196930000000123],[-88.776672000000019,78.176085999999941],[-88.78443900000002,78.169983000000002],[-88.793334999999956,78.164429000000041],[-88.817779999999914,78.154434000000094],[-88.847777999999948,78.151382000000012],[-88.978881999999942,78.165817000000118],[-89.002791999999943,78.169434000000081],[-89.065001999999879,78.184418000000107],[-89.079726999999991,78.189147999999989],[-89.115828999999962,78.200821000000019],[-89.227492999999981,78.245254999999986],[-89.259170999999924,78.262771999999984],[-89.265014999999948,78.268326000000002],[-89.275283999999999,78.281936999999971],[-89.353881999999885,78.339705999999978],[-89.364440999999999,78.344147000000078],[-89.381103999999993,78.3477630000001],[-89.518341000000021,78.392212000000086],[-89.676665999999955,78.447478999999987],[-89.803878999999995,78.494431000000134],[-89.819457999999997,78.500549000000092],[-89.891113000000018,78.552764999999965],[-89.921660999999972,78.578048999999965],[-89.945830999999998,78.599425999999994],[-89.95695499999988,78.605255],[-89.980559999999969,78.609711000000118],[-90.014724999999885,78.609421000000111],[-90.051391999999964,78.605820000000051],[-90.088332999999977,78.595825000000104],[-90.092498999999975,78.589980999999909],[-90.09973100000002,78.555252000000053],[-90.100829999999974,78.549713000000054],[-90.064712999999927,78.513321000000076],[-89.985000999999954,78.43609600000002],[-89.960555999999997,78.432480000000112],[-89.936110999999983,78.430267000000015],[-89.910004000000015,78.426086000000112],[-89.869995000000017,78.417755],[-89.80972300000002,78.404709000000082],[-89.785278000000005,78.398041000000092],[-89.774445000000014,78.39387499999998],[-89.748046999999929,78.380264000000011],[-89.615554999999858,78.300262000000032],[-89.606109999999944,78.293319999999994],[-89.461670000000026,78.17553700000002],[-89.455841000000021,78.169983000000002],[-89.452498999999989,78.162491000000045],[-89.461670000000026,78.158599999999979],[-89.476668999999958,78.153869999999984],[-89.507781999999963,78.149994000000106],[-89.530288999999982,78.148330999999985],[-89.549437999999952,78.148605000000089],[-89.563048999999921,78.149719000000061],[-89.59584000000001,78.156937000000084],[-89.61860699999994,78.163040000000024],[-89.631942999999978,78.168594000000041],[-89.639724999999942,78.173309000000074],[-89.644164999999987,78.179703000000075],[-89.646118000000001,78.184707999999944],[-89.646118000000001,78.19720500000011],[-89.64805599999994,78.202209000000096],[-89.654174999999952,78.209427000000119],[-89.657226999999978,78.212203999999986],[-89.673888999999974,78.217209000000082],[-89.700835999999981,78.219147000000021],[-89.748885999999914,78.217209000000082],[-89.783324999999934,78.214431999999988],[-89.847778000000005,78.213042999999971],[-89.886948000000018,78.215271000000087],[-89.911117999999988,78.218872000000147],[-89.929169000000002,78.223038000000088],[-89.955276000000026,78.233322000000101],[-89.960281000000009,78.238311999999951],[-89.961945000000014,78.243590999999924],[-89.959441999999967,78.254439999999988],[-89.955001999999922,78.260544000000039],[-89.980285999999921,78.27777100000003],[-90.023330999999985,78.298035000000027],[-90.060271999999998,78.308029000000033],[-90.172500999999954,78.331100000000049],[-90.186110999999926,78.333327999999995],[-90.213622999999984,78.335265999999933],[-90.242492999999854,78.336105000000089],[-90.27416999999997,78.334991000000116],[-90.34056099999998,78.331100000000049],[-90.411391999999921,78.324432000000058],[-90.478881999999999,78.321106000000043],[-90.507781999999963,78.320540999999992],[-90.59445199999999,78.322768999999937],[-90.620269999999948,78.325546000000031],[-90.667770000000019,78.32748399999997],[-90.729445999999996,78.326096000000064],[-90.744445999999982,78.323043999999982],[-90.748610999999983,78.320267000000058],[-90.73721299999994,78.314423000000033],[-90.715560999999923,78.309143000000006],[-90.622771999999941,78.291091999999992],[-90.598343,78.287490999999932],[-90.544998000000021,78.283051000000114],[-90.46166999999997,78.27887000000004],[-90.410277999999948,78.276657000000057],[-90.363327000000027,78.256942999999978],[-90.273894999999982,78.192200000000071],[-90.267501999999922,78.18664600000011],[-90.268889999999999,78.182755000000043],[-90.272781000000009,78.17692599999998],[-90.293883999999991,78.159988000000112],[-90.301102000000014,78.15525800000006],[-90.330291999999986,78.146103000000039],[-90.353881999999942,78.143326000000116],[-90.433884000000035,78.136383000000137],[-90.465012000000002,78.135268999999937],[-90.497771999999941,78.134995000000004],[-90.624434999999949,78.134430000000009],[-90.711120999999991,78.135818000000086],[-90.967223999999987,78.142761000000064],[-91.021392999999989,78.146103000000039],[-91.039718999999991,78.150269000000094],[-91.238387999999986,78.166594999999973],[-91.326674999999966,78.168594000000041],[-91.489715999999873,78.17692599999998],[-91.539992999999924,78.181366000000025],[-91.613891999999964,78.191925000000083],[-91.661941999999897,78.199707000000046],[-91.707229999999981,78.209427000000119],[-91.724715999999944,78.214706000000092],[-91.807770000000005,78.23275799999999],[-91.831389999999999,78.23692299999999],[-91.857497999999964,78.239700000000084],[-91.887511999999901,78.239425999999924],[-91.920273000000009,78.237198000000149],[-91.946380999999974,78.23275799999999],[-91.963332999999977,78.227768000000083],[-91.974441999999954,78.223312000000021],[-91.986114999999984,78.214706000000092],[-92.003066999999987,78.209717000000126],[-92.031113000000005,78.207488999999953],[-92.058334000000002,78.208878000000141],[-92.083327999999995,78.212494000000049],[-92.105559999999969,78.217758000000003],[-92.308333999999945,78.278594999999996],[-92.537216000000001,78.310531999999967],[-92.556655999999975,78.314696999999967],[-92.589447000000007,78.323608000000092],[-92.949431999999888,78.43193100000002],[-92.96665999999999,78.44358799999992],[-92.982498000000021,78.454436999999984],[-92.98721299999994,78.46026599999999],[-92.987502999999947,78.465546000000074],[-92.978881999999942,78.483322000000044],[-92.96665999999999,78.488586000000055],[-92.863891999999964,78.505264000000125],[-92.848617999999988,78.505554000000132],[-92.690551999999968,78.49581900000004],[-92.646392999999932,78.487487999999928],[-92.621933000000013,78.487198000000092],[-92.600554999999986,78.488037000000077],[-92.576675000000023,78.490540000000067],[-92.520279000000016,78.498596000000134],[-92.493606999999997,78.503325999999959],[-92.48721299999994,78.507767000000058],[-92.487777999999992,78.509430000000009],[-92.497771999999998,78.513046000000031],[-92.563323999999966,78.520537999999988],[-92.529448999999943,78.521378000000027],[-92.24722300000002,78.52777100000003],[-92.216659999999933,78.528046000000018],[-92.070847000000015,78.525543000000027],[-92.011123999999938,78.526657],[-91.949996999999939,78.530273000000079],[-91.918610000000001,78.534424000000001],[-91.726395000000025,78.530548000000067],[-91.682495000000017,78.52609300000006],[-91.660827999999981,78.526932000000045],[-91.646117999999944,78.529984000000127],[-91.636123999999938,78.533600000000035],[-91.632492000000013,78.539429000000041],[-91.635284000000013,78.546097000000032],[-91.647506999999962,78.560257000000092],[-91.657500999999968,78.563873000000001],[-91.670272999999952,78.56581100000011],[-91.945267000000001,78.572220000000129],[-92.151397999999915,78.579437000000041],[-92.351943999999946,78.586928999999998],[-92.557220000000029,78.594711000000132],[-92.58555599999994,78.596099999999979],[-92.604720999999984,78.598602000000028],[-92.697768999999994,78.614151000000106],[-92.733063000000016,78.62359600000002],[-92.757781999999963,78.628036000000009],[-92.806106999999997,78.6336060000001],[-92.828888000000006,78.631927000000076],[-92.907227000000034,78.62303200000008],[-92.935546999999985,78.618866000000139],[-92.935821999999973,78.614990000000091],[-92.941665999999998,78.608597000000145],[-92.955841000000021,78.603867000000093],[-92.991668999999945,78.599716000000001],[-93.176940999999999,78.586380000000077],[-93.210555999999997,78.584152000000074],[-93.242492999999968,78.582763999999997],[-93.271118000000001,78.584152000000074],[-93.28443900000002,78.587494000000049],[-93.434157999999968,78.6336060000001],[-93.771392999999989,78.750549000000035],[-93.813613999999973,78.765823000000069],[-93.802779999999927,78.770263999999997],[-93.684158000000025,78.782486000000006],[-93.650283999999999,78.784714000000122],[-93.589721999999995,78.783599999999979],[-93.534438999999963,78.778870000000097],[-93.429169000000002,78.767212000000086],[-93.376388999999961,78.760544000000095],[-93.351394999999968,78.756104000000107],[-93.299728000000016,78.748596000000077],[-93.24722300000002,78.741928000000087],[-93.190551999999968,78.736374000000126],[-93.163329999999974,78.735535000000141],[-93.09973100000002,78.737198000000092],[-93.054992999999968,78.739974999999959],[-93.04222099999987,78.745255000000043],[-93.039963,78.750000000000057],[-93.039443999999946,78.751099000000067],[-93.035277999999948,78.761932000000002],[-93.037780999999939,78.765823000000069],[-93.118880999999988,78.772491000000059],[-93.170273000000009,78.77998400000007],[-93.271941999999967,78.796097000000145],[-93.346389999999928,78.809982000000048],[-93.369155999999975,78.816086000000041],[-93.391388000000006,78.820831000000112],[-93.416397000000018,78.824996999999996],[-93.560546999999929,78.833328000000108],[-93.589721999999995,78.834717000000069],[-93.650283999999999,78.835541000000035],[-93.746947999999975,78.834991000000002],[-93.779723999999987,78.833603000000096],[-93.842772999999966,78.832489000000123],[-93.874709999999936,78.833603000000096],[-93.892501999999979,78.838042999999914],[-93.902221999999995,78.842484000000013],[-93.906386999999995,78.849152000000004],[-93.917495999999971,78.860535000000027],[-93.939437999999939,78.871643000000006],[-93.959441999999967,78.878310999999997],[-94.052490000000034,78.902481000000023],[-94.09584000000001,78.911102000000085],[-94.253066999999987,78.956940000000031],[-94.269729999999981,78.962204000000042],[-94.282227000000034,78.968872000000033],[-94.287506000000008,78.981093999999985],[-94.288605000000018,78.986374000000069],[-94.241378999999881,78.996643000000063],[-94.005279999999914,79.029709000000025],[-93.910277999999948,79.041930999999977],[-93.878051999999968,79.042480000000126],[-93.854720999999927,79.040543000000071],[-93.813889000000017,79.035538000000031],[-93.784164000000033,79.038040000000137],[-93.601943999999889,79.068328999999949],[-93.472778000000005,79.108871000000136],[-93.455565999999976,79.11970500000001],[-93.452498999999989,79.125534000000016],[-93.456664999999987,79.132202000000007],[-93.463333000000034,79.136932000000058],[-93.46055599999994,79.142761000000064],[-93.443054000000018,79.148041000000092],[-93.36610399999995,79.161377000000073],[-93.329726999999934,79.164428999999984],[-93.294997999999907,79.166931000000091],[-93.259170999999924,79.167480000000012],[-93.227782999999931,79.166931000000091],[-93.003066999999987,79.154434000000094],[-92.895553999999947,79.143875000000037],[-92.869720000000029,79.139708999999925],[-92.841109999999958,79.141098000000113],[-92.816101000000003,79.145537999999988],[-92.801392000000021,79.150269000000094],[-92.7933349999999,79.155823000000055],[-92.780288999999868,79.161102000000028],[-92.746947999999975,79.164153999999996],[-92.506957999999941,79.158324999999991],[-92.478606999999954,79.155823000000055],[-92.407500999999911,79.146102999999982],[-92.309433000000013,79.145264000000054],[-92.243057000000022,79.146941999999967],[-91.89805599999994,79.161377000000073],[-91.691939999999988,79.173309000000017],[-91.439162999999951,79.183593999999971],[-91.205275999999969,79.191925000000026],[-91.009170999999867,79.203048999999965],[-90.811934999999949,79.208038000000101],[-90.601669000000015,79.214157000000114],[-90.564162999999951,79.215546000000131],[-90.528335999999911,79.21748400000007],[-90.492767000000015,79.220825000000104],[-90.390839000000028,79.236374000000012],[-90.368331999999953,79.243042000000003],[-90.36326600000001,79.246811000000093],[-90.382216999999969,79.2494200000001],[-90.405563000000029,79.251938000000109],[-90.472778000000005,79.250823999999909],[-90.502227999999945,79.2494200000001],[-90.732223999999974,79.238312000000121],[-90.885833999999988,79.244141000000127],[-91.139998999999932,79.244431000000134],[-91.198883000000023,79.241364000000033],[-91.47084000000001,79.228867000000037],[-91.861114999999927,79.215271000000087],[-92.026397999999972,79.207489000000123],[-92.053604000000007,79.205261000000007],[-92.087783999999999,79.204163000000108],[-92.180832000000009,79.203048999999965],[-92.213897999999972,79.204163000000108],[-92.238892000000021,79.205551000000014],[-92.510284000000013,79.232757999999933],[-92.621933000000013,79.244431000000134],[-92.676666000000012,79.251389000000131],[-92.694716999999969,79.257217000000082],[-92.693053999999961,79.262207000000103],[-92.625548999999978,79.295258000000047],[-92.603881999999942,79.300812000000064],[-92.571944999999971,79.304153000000099],[-92.523330999999928,79.307755000000043],[-92.454453000000001,79.308594000000028],[-92.394729999999981,79.308594000000028],[-92.303329000000019,79.306366000000082],[-92.255004999999983,79.304428000000144],[-92.131377999999984,79.299988000000099],[-91.994995000000017,79.295258000000047],[-91.961944999999957,79.29553199999998],[-91.932494999999903,79.297211000000004],[-91.894164999999987,79.301085999999998],[-91.865279999999927,79.305542000000116],[-91.829452999999944,79.314697000000137],[-91.795546999999885,79.319153000000085],[-91.727492999999924,79.326096000000064],[-91.658889999999985,79.329987000000131],[-91.589721999999938,79.332214000000022],[-91.528884999999946,79.333054000000061],[-91.493880999999874,79.33248900000001],[-91.467498999999975,79.333602999999982],[-91.267776000000026,79.345824999999991],[-91.231673999999941,79.348037999999917],[-91.15834000000001,79.356093999999985],[-91.119995000000017,79.386383000000023],[-91.129165999999884,79.390823000000069],[-91.156386999999995,79.394440000000031],[-91.191100999999946,79.393326000000059],[-91.230559999999969,79.389434999999992],[-91.422225999999966,79.374146000000053],[-91.508621000000005,79.373306000000014],[-91.580841000000021,79.369141000000013],[-91.702224999999942,79.361374000000069],[-91.729720999999984,79.359421000000111],[-91.766662999999994,79.353317000000118],[-91.788329999999974,79.346375000000023],[-91.835281000000009,79.340820000000122],[-91.864715999999987,79.339431999999988],[-91.897781000000009,79.339157],[-92.150832999999977,79.344437000000084],[-92.18110699999994,79.345824999999991],[-92.210006999999962,79.348327999999924],[-92.290833000000021,79.358031999999923],[-92.351943999999946,79.362761999999975],[-92.41194200000001,79.36442599999998],[-92.510009999999966,79.364150999999993],[-92.561934999999949,79.365814000000057],[-92.571670999999867,79.37052900000009],[-92.577498999999989,79.379150000000038],[-92.567504999999869,79.384155000000078],[-92.479996000000028,79.404434000000037],[-92.462509000000011,79.406937000000028],[-92.41194200000001,79.411652000000061],[-92.31361400000003,79.418593999999928],[-92.243880999999988,79.426651000000106],[-92.228607000000011,79.431366000000139],[-92.227782999999931,79.435257000000036],[-92.228881999999999,79.438309000000118],[-92.234726000000023,79.441649999999981],[-92.241942999999935,79.444138000000123],[-92.259170999999981,79.446930000000066],[-92.283324999999991,79.449142000000109],[-92.33805799999999,79.453049000000078],[-92.419723999999974,79.457214000000079],[-92.580841000000021,79.452209000000039],[-92.605270000000019,79.450546000000088],[-92.634170999999981,79.445816000000036],[-92.679992999999968,79.437194999999974],[-92.774170000000026,79.417755],[-92.803054999999972,79.413040000000137],[-92.854445999999996,79.407760999999994],[-92.876098999999954,79.407760999999994],[-92.901671999999962,79.408874999999966],[-92.929442999999935,79.412490999999989],[-92.950835999999981,79.416382000000056],[-92.973327999999981,79.423598999999967],[-93.029175000000009,79.46026599999999],[-93.032775999999956,79.465546000000074],[-93.034728999999913,79.471649000000014],[-93.044723999999917,79.476089000000002],[-93.063048999999921,79.48054500000012],[-93.09056099999998,79.482208000000071],[-93.107223999999974,79.482208000000071],[-93.126662999999951,79.479980000000069],[-93.143889999999885,79.475815000000068],[-93.146666999999979,79.469986000000063],[-93.144454999999994,79.463882000000069],[-93.125,79.450821000000133],[-93.105834999999956,79.43942300000009],[-93.081389999999942,79.426376000000062],[-93.061110999999983,79.415817000000061],[-93.033614999999941,79.404434000000037],[-93.018889999999999,79.399719000000005],[-93.009170999999981,79.395263999999997],[-93.006957999999941,79.389160000000118],[-93.008347000000015,79.388046000000145],[-93.009445000000028,79.387206999999989],[-93.021392999999989,79.382751000000098],[-93.125,79.359711000000118],[-93.264175000000023,79.353592000000106],[-93.312499999999943,79.372757000000092],[-93.251113999999973,79.40498400000007],[-93.236114999999984,79.415268000000083],[-93.229720999999984,79.425537000000134],[-93.231383999999991,79.429977000000122],[-93.235001000000011,79.435257000000036],[-93.252501999999993,79.441924999999969],[-93.275833000000034,79.446640000000002],[-93.293334999999956,79.44802900000002],[-93.320007000000032,79.448317999999972],[-93.338057999999933,79.447205000000054],[-93.354445999999996,79.441360000000145],[-93.424437999999896,79.405258000000003],[-93.433059999999898,79.387496999999996],[-93.485275000000001,79.354156000000046],[-93.641387999999893,79.31164600000011],[-93.757507000000032,79.283600000000035],[-93.801940999999886,79.274704000000099],[-93.869995000000017,79.263885000000073],[-93.906661999999983,79.260544000000039],[-93.969726999999978,79.25749200000007],[-93.99722300000002,79.256942999999978],[-94.047225999999966,79.25749200000007],[-94.206954999999994,79.272490999999945],[-94.212219000000005,79.276657000000057],[-94.162780999999995,79.322220000000016],[-94.14805599999994,79.333602999999982],[-94.119720000000029,79.344711000000018],[-94.088608000000022,79.353592000000106],[-94.056380999999931,79.379700000000071],[-94.245834000000002,79.404160000000104],[-94.366652999999985,79.419708000000128],[-94.386123999999938,79.421371000000022],[-94.494720000000029,79.421371000000022],[-94.509170999999981,79.416382000000056],[-94.5,79.379700000000071],[-94.483063000000016,79.375809000000004],[-94.46305799999999,79.379150000000038],[-94.454453000000001,79.385544000000095],[-94.432769999999948,79.385544000000095],[-94.398055999999997,79.375259000000142],[-94.389998999999989,79.368866000000025],[-94.506667999999991,79.337204000000042],[-94.538054999999929,79.333602999999982],[-94.573623999999938,79.331100000000049],[-94.638900999999976,79.33248900000001],[-94.669997999999964,79.331375000000037],[-94.697495000000004,79.326660000000004],[-94.720001000000025,79.321655000000135],[-94.765015000000005,79.31164600000011],[-94.952498999999932,79.289978000000019],[-94.970000999999968,79.284714000000008],[-94.972777999999892,79.273880000000133],[-94.977218999999991,79.270264000000111],[-94.985824999999977,79.267487000000017],[-95.018616000000009,79.266936999999984],[-95.087555000000009,79.27075200000013],[-95.161666999999966,79.281097000000045],[-95.304992999999968,79.325821000000019],[-95.318619000000012,79.332214000000022],[-95.32028200000002,79.335266000000104],[-95.294448999999986,79.336655000000121],[-95.285004000000015,79.353042999999957],[-95.295837000000006,79.379425000000026],[-95.394164999999987,79.387496999999996],[-95.477218999999991,79.380814000000044],[-95.655563000000029,79.391663000000108],[-95.753341999999975,79.404434000000037],[-95.771666999999979,79.409714000000065],[-95.778609999999958,79.413040000000137],[-95.779449,79.425812000000121],[-95.736388999999974,79.537491000000045],[-95.657500999999968,79.553314000000114],[-95.636123999999938,79.557479999999998],[-95.565552000000025,79.55914300000012],[-95.309722999999963,79.569153000000028],[-95.170273000000009,79.575272000000041],[-95.051665999999955,79.582214000000135],[-94.839995999999871,79.597214000000122],[-94.802489999999977,79.600540000000137],[-94.699432000000002,79.612198000000149],[-94.40695199999999,79.667755000000113],[-94.360275000000001,79.677765000000022],[-94.329453000000001,79.688309000000061],[-94.282776000000013,79.757492000000013],[-94.28694200000001,79.762772000000041],[-94.298339999999996,79.76887499999998],[-94.318344000000025,79.778595000000053],[-94.335281000000009,79.780823000000055],[-94.361664000000019,79.781937000000028],[-94.384170999999981,79.778046000000131],[-94.577498999999932,79.735809000000074],[-94.592498999999975,79.731094000000041],[-94.596663999999976,79.725815000000011],[-94.601395000000025,79.713882000000012],[-94.608886999999925,79.708327999999995],[-94.748336999999935,79.678314],[-94.776671999999962,79.673598999999967],[-94.814437999999939,79.670258000000103],[-94.878325999999959,79.66804500000012],[-94.946380999999974,79.666930999999977],[-94.985001000000011,79.664993000000038],[-95.091675000000009,79.656936999999971],[-95.153610000000015,79.647491000000002],[-95.190825999999959,79.644149999999968],[-95.355559999999969,79.638321000000133],[-95.419998000000021,79.637496999999996],[-95.485274999999945,79.638046000000088],[-95.740828999999906,79.641373000000044],[-95.799437999999952,79.642487000000017],[-95.853332999999964,79.646103000000096],[-95.901107999999965,79.654433999999981],[-95.933060000000012,79.664429000000098],[-95.954726999999991,79.671920999999998],[-95.980835000000013,79.6827550000001],[-96.032227000000034,79.706940000000088],[-96.282501000000025,79.798874000000012],[-96.335555999999997,79.815536000000009],[-96.360824999999977,79.82249500000006],[-96.384170999999924,79.826385000000073],[-96.490554999999972,79.836104999999975],[-96.575561999999934,79.849990999999932],[-96.589447000000007,79.852478000000019],[-96.610549999999989,79.877762000000018],[-96.61500499999994,79.883881000000031],[-96.609436000000017,79.888596000000064],[-96.573623999999995,79.900269000000094],[-96.458618000000001,79.914429000000041],[-96.422775000000001,79.916091999999935],[-96.391387999999949,79.913879000000009],[-96.385009999999909,79.909714000000008],[-96.37777699999998,79.899155000000121],[-96.194716999999912,79.901382000000012],[-96.158889999999872,79.903046000000018],[-96.138061999999991,79.906372000000033],[-96.147780999999952,79.912491000000102],[-96.164718999999991,79.917205999999908],[-96.23332199999993,79.933043999999938],[-96.262512000000015,79.936920000000043],[-96.325561999999991,79.941360000000032],[-96.399170000000026,79.941086000000098],[-96.492766999999958,79.943314000000044],[-96.52416999999997,79.945251000000098],[-96.556655999999975,79.948868000000061],[-96.580565999999976,79.952773999999977],[-96.595839999999953,79.956940000000031],[-96.606658999999922,79.962204000000042],[-96.675003000000004,80.008331000000055],[-96.679442999999992,80.014435000000105],[-96.661941999999954,80.019989000000123],[-96.628052000000025,80.024429000000112],[-96.482772999999952,80.041091999999992],[-96.419158999999922,80.041930999999977],[-96.394164999999873,80.043869000000086],[-96.391677999999956,80.045822000000044],[-96.40583799999996,80.048325000000034],[-96.428878999999995,80.050537000000077],[-96.479172000000005,80.053864000000033],[-96.512222000000008,80.054977000000122],[-96.548614999999927,80.053314],[-96.582503999999915,80.048598999999967],[-96.599166999999909,80.044434000000138],[-96.627776999999924,80.039429000000098],[-96.676101999999958,80.041930999999977],[-96.698882999999967,80.046936000000017],[-96.737503000000004,80.058029000000033],[-96.781676999999945,80.076660000000061],[-96.801391999999964,80.086929000000055],[-96.802779999999984,80.090820000000122],[-96.748885999999857,80.134720000000129],[-96.734436000000017,80.139709000000096],[-96.711120999999935,80.14498900000001],[-96.675827000000027,80.145538000000101],[-96.410003999999958,80.13888500000013],[-96.381103999999937,80.13638300000008],[-96.351395000000025,80.132476999999994],[-96.322784000000013,80.127472000000125],[-96.163054999999872,80.093048000000067],[-96.077788999999996,80.078049000000021],[-96.017776000000026,80.070830999999998],[-95.847777999999892,80.053314],[-95.545836999999949,80.040543000000071],[-95.418883999999935,80.036652000000004],[-95.325011999999958,80.03387500000008],[-95.193877999999984,80.03137200000009],[-95.06361400000003,80.029984000000013],[-95.038054999999986,80.031936999999971],[-95.011672999999917,80.038879000000065],[-94.988892000000021,80.04304500000012],[-94.951110999999855,80.045532000000037],[-94.921386999999925,80.046371000000022],[-94.887512000000015,80.045822000000044],[-94.852782999999874,80.044144000000131],[-94.825835999999924,80.040543000000071],[-94.717772999999966,80.020828000000051],[-94.607498000000021,80.002777000000094],[-94.569457999999941,79.997208000000114],[-94.416945999999996,79.978867000000093],[-94.383620999999948,79.982482999999945],[-94.387786999999946,79.987761999999918],[-94.413894999999911,79.997757000000036],[-94.451674999999966,80.009720000000073],[-94.525557999999933,80.02276599999999],[-94.62110899999999,80.04304500000012],[-94.67111199999988,80.056931000000134],[-94.74888599999997,80.07998699999996],[-94.728881999999942,80.105545000000063],[-94.632766999999944,80.131088000000034],[-94.611937999999952,80.135544000000095],[-94.510558999999944,80.154434000000037],[-94.480559999999855,80.15914900000007],[-94.416396999999961,80.163605000000018],[-94.387222000000008,80.163315000000011],[-94.285827999999924,80.164993000000095],[-94.121108999999933,80.17025799999999],[-94.091675000000009,80.172485000000052],[-94.083892999999989,80.175537000000134],[-94.096389999999985,80.179153000000042],[-94.119995000000017,80.183044000000109],[-94.184433000000013,80.186646000000053],[-94.217772999999966,80.18803400000013],[-94.354171999999949,80.190811000000053],[-94.485000999999954,80.209991000000002],[-94.642226999999991,80.199996999999996],[-94.649993999999879,80.194427000000076],[-94.704453000000001,80.178040000000124],[-94.748336999999935,80.169434000000024],[-94.816956000000005,80.159714000000122],[-95.033324999999991,80.134995000000004],[-95.104996000000028,80.128860000000032],[-95.263625999999988,80.118317000000104],[-95.333618000000001,80.118042000000059],[-95.367767000000015,80.118317000000104],[-95.420273000000009,80.122482000000105],[-95.658889999999985,80.168593999999985],[-95.683884000000035,80.173874000000012],[-95.695830999999998,80.178314000000057],[-95.692215000000033,80.181090999999981],[-95.673889000000031,80.186371000000008],[-95.621658000000025,80.195251000000042],[-95.580841000000021,80.199706999999989],[-95.542770000000019,80.202209000000039],[-95.471114999999941,80.203598000000056],[-95.404175000000009,80.203598000000056],[-95.370543999999995,80.204712000000029],[-95.327788999999882,80.208603000000096],[-95.295837000000006,80.21276899999998],[-95.268341000000021,80.218047999999953],[-95.254455999999948,80.222214000000065],[-95.235000999999897,80.232208000000071],[-95.229996000000028,80.236098999999967],[-95.235000999999897,80.241088999999988],[-95.243331999999953,80.243591000000094],[-95.258895999999993,80.244980000000055],[-95.278060999999923,80.243866000000082],[-95.287216000000001,80.241088999999988],[-95.325561999999991,80.232208000000071],[-95.39834599999989,80.223602000000142],[-95.461394999999868,80.219986000000119],[-95.496947999999975,80.219436999999971],[-95.548339999999996,80.220261000000107],[-95.566955999999948,80.224152000000004],[-95.577498999999989,80.229430999999977],[-95.581389999999885,80.235535000000027],[-95.586394999999925,80.240540000000067],[-95.601944000000003,80.242203000000018],[-95.645844000000011,80.239700000000028],[-95.69027699999998,80.232483000000116],[-95.71055599999994,80.227768000000083],[-95.884170999999981,80.199142000000109],[-95.922500999999954,80.194138000000009],[-95.93360899999999,80.194427000000076],[-95.98443599999996,80.200271999999984],[-96.216659999999877,80.235809000000131],[-96.43499799999995,80.269714000000022],[-96.46444699999995,80.313034000000016],[-96.613892000000021,80.329987000000131],[-96.645844000000011,80.333054000000004],[-96.670272999999952,80.336928999999998],[-96.681670999999881,80.342209000000082],[-96.676101999999958,80.346939000000134],[-96.658051,80.352203000000088],[-96.634170999999981,80.357208000000128],[-96.604720999999984,80.362198000000035],[-96.592223999999987,80.362761999999975],[-96.440552000000025,80.356644000000017],[-96.408889999999985,80.353592000000106],[-96.363892000000021,80.342209000000082],[-96.254729999999938,80.335541000000092],[-96.232223999999974,80.334717000000126],[-96.216400000000021,80.338042999999971],[-96.221664000000033,80.343323000000055],[-96.255004999999983,80.354156000000046],[-96.277221999999938,80.359985000000052],[-96.280838000000017,80.36192299999999],[-96.268065999999919,80.367477000000008],[-96.240554999999972,80.37303200000008],[-96.080841000000021,80.387206999999989],[-96.047774999999888,80.389984000000084],[-95.978606999999954,80.388596000000007],[-95.732497999999907,80.372757000000036],[-95.697495000000004,80.369979999999941],[-95.636948000000018,80.364150999999936],[-95.61221299999994,80.360260000000039],[-95.566955999999948,80.352203000000088],[-95.542770000000019,80.345824999999934],[-95.513900999999976,80.340820000000065],[-95.48832699999997,80.338042999999971],[-95.460280999999952,80.336928999999998],[-95.440826000000015,80.338318000000015],[-95.436935000000005,80.341095000000109],[-95.453338999999971,80.373306000000014],[-95.458617999999944,80.378586000000041],[-95.468063000000029,80.38220200000012],[-95.498610999999983,80.383880999999974],[-95.564162999999951,80.385817999999972],[-95.624999999999943,80.391663000000108],[-95.653885000000002,80.396652000000074],[-95.694992000000013,80.406097000000102],[-95.721664000000033,80.412765999999976],[-95.852218999999991,80.454163000000051],[-95.957229999999925,80.504990000000134],[-96.020553999999947,80.567490000000078],[-96.027221999999995,80.574158000000068],[-96.024445000000014,80.578323000000069],[-96.006957999999884,80.582763999999941],[-95.979996000000028,80.584717000000069],[-95.941665999999941,80.58638000000002],[-95.671660999999972,80.584717000000069],[-95.536391999999978,80.590820000000008],[-95.498046999999872,80.59248400000007],[-95.423614999999984,80.593597000000102],[-95.318343999999911,80.590820000000008],[-95.246658000000025,80.58998100000008],[-95.172226000000023,80.59137000000004],[-95.132216999999969,80.593872000000147],[-95.067229999999995,80.601379000000065],[-95.030837999999903,80.603317000000004],[-94.99499499999996,80.603043000000071],[-94.962783999999942,80.599715999999944],[-94.902495999999985,80.586655000000007],[-94.846953999999926,80.574706999999989],[-94.823623999999995,80.569716999999969],[-94.77194199999991,80.561371000000065],[-94.752791999999943,80.559982000000048],[-94.696654999999964,80.55693100000002],[-94.658614999999998,80.555817000000047],[-94.554992999999911,80.55442800000003],[-94.374999999999943,80.557205000000124],[-94.230835000000013,80.556365999999969],[-94.010559000000001,80.54942299999999],[-93.968886999999995,80.540817000000061],[-93.968886999999995,80.536925999999994],[-93.966110000000015,80.530823000000055],[-93.958343999999954,80.52609300000006],[-93.89916999999997,80.519150000000025],[-93.866942999999992,80.518326000000059],[-93.839447000000007,80.518599999999992],[-93.786391999999978,80.525543000000027],[-93.783066000000019,80.529709000000082],[-93.790832999999964,80.534424000000115],[-93.810546999999985,80.541367000000093],[-93.894729999999868,80.565811000000053],[-93.949158000000011,80.578048999999908],[-93.973617999999931,80.581939999999975],[-94.005004999999983,80.585266000000047],[-94.093612999999948,80.593322999999998],[-94.308334000000002,80.606368999999972],[-94.437774999999988,80.605545000000006],[-94.457503999999915,80.600265999999976],[-94.484726000000023,80.598328000000038],[-94.524170000000026,80.598328000000038],[-94.543335000000013,80.599715999999944],[-94.561935000000005,80.605819999999994],[-94.660278000000005,80.651382000000012],[-94.669448999999929,80.65776100000005],[-94.672775000000001,80.663879000000009],[-94.670273000000009,80.669708000000014],[-94.662215999999944,80.675262000000032],[-94.650283999999999,80.681366000000082],[-94.628326000000015,80.685806000000071],[-94.596953999999982,80.690536000000122],[-94.553604000000007,80.694977000000051],[-94.514724999999942,80.696365000000128],[-94.439163000000008,80.697479000000101],[-94.331116000000009,80.693863000000022],[-94.231673999999884,80.692200000000128],[-94.199722000000008,80.693039000000056],[-94.117492999999968,80.698593000000074],[-94.088332999999977,80.701660000000004],[-94.075561999999991,80.706099999999992],[-94.076950000000011,80.709152000000131],[-94.086394999999982,80.713043000000027],[-94.108337000000006,80.718872000000033],[-94.140288999999996,80.721924000000115],[-94.304442999999935,80.733871000000079],[-94.423049999999876,80.734985000000052],[-94.449158000000011,80.730270000000019],[-94.491104000000007,80.726928999999984],[-94.549438000000009,80.724991000000045],[-94.65972899999997,80.72526600000009],[-94.694716999999969,80.726653999999996],[-94.722778000000005,80.728592000000106],[-94.895554000000004,80.747757000000092],[-95.035827999999867,80.768326000000002],[-95.037505999999951,80.771378000000141],[-95.03694200000001,80.776093000000003],[-95.033889999999985,80.778046000000131],[-95.025283999999999,80.801651000000106],[-95.243056999999965,80.787766000000033],[-95.282501000000025,80.786101999999971],[-95.334166999999923,80.788879000000065],[-95.442764000000011,80.79971299999994],[-95.475554999999986,80.803040000000067],[-95.501113999999973,80.806931000000134],[-95.524170000000026,80.812484999999981],[-95.534164000000033,80.818878000000097],[-95.526397999999972,80.833328000000051],[-95.500838999999871,80.838318000000072],[-95.44027699999998,80.846100000000035],[-95.371384000000035,80.853316999999947],[-95.212783999999999,80.868317000000104],[-95.170837000000006,80.875809000000061],[-95.150832999999921,80.881088000000034],[-95.146666999999923,80.883881000000031],[-95.170546999999999,80.884720000000016],[-95.300827000000027,80.885269000000108],[-95.41332999999986,80.885269000000108],[-95.468886999999995,80.890273999999977],[-95.481383999999991,80.894714000000022],[-95.484726000000023,80.899155000000121],[-95.474166999999966,80.904434000000094],[-95.460280999999952,80.909713999999951],[-95.422775000000001,80.920821999999987],[-95.334166999999923,80.934708000000114],[-95.311934999999949,80.939147999999989],[-95.283614999999941,80.949996999999996],[-95.267501999999979,80.96138000000002],[-95.259734999999921,80.973602000000028],[-95.257506999999976,80.979431000000034],[-95.259170999999981,80.984984999999995],[-95.255004999999983,80.996643000000063],[-95.241104000000007,81.006103999999993],[-95.220839999999896,81.011382999999967],[-95.183060000000012,81.019714000000079],[-94.943329000000006,81.048874000000126],[-94.814163000000008,81.054153000000099],[-94.663054999999986,81.048598999999911],[-94.572783999999899,81.038879000000009],[-94.546111999999994,81.033325000000048],[-94.493880999999988,81.017487000000017],[-94.495543999999995,80.995819000000097],[-94.504181000000017,80.990265000000079],[-94.509170999999981,80.984711000000061],[-94.508057000000008,80.979431000000034],[-94.492767000000015,80.972763000000043],[-94.472778000000005,80.969146999999964],[-94.434158000000025,80.965546000000131],[-94.408614999999941,80.965546000000131],[-94.365554999999972,80.968872000000147],[-94.344726999999978,80.974152000000061],[-94.330001999999865,80.979706000000022],[-94.143616000000009,81.015823000000012],[-94.071670999999924,81.024993999999936],[-93.908051,81.039429000000041],[-93.906386999999995,81.040543000000071],[-94.013335999999981,81.053588999999988],[-94.042220999999927,81.055542000000116],[-94.18249499999996,81.068054000000075],[-94.328612999999962,81.089432000000045],[-94.357498000000021,81.09526100000005],[-94.36221299999994,81.100540000000024],[-94.353607000000011,81.106093999999985],[-94.345550999999944,81.109421000000111],[-94.313048999999978,81.115539999999953],[-94.278335999999967,81.117203000000075],[-94.255279999999971,81.115539999999953],[-94.230835000000013,81.110535000000084],[-94.214721999999881,81.106369000000029],[-94.195830999999941,81.10026600000009],[-94.154723999999987,81.093872000000033],[-94.130279999999971,81.09275800000006],[-93.989715999999987,81.092484000000127],[-93.960830999999928,81.094147000000078],[-93.935271999999941,81.098327999999981],[-93.907227000000034,81.101653999999996],[-93.866394000000014,81.103043000000014],[-93.795273000000009,81.099426000000051],[-93.689437999999996,81.093048000000067],[-93.517226999999878,81.084426999999948],[-93.299987999999928,81.079711999999915],[-93.255844000000025,81.082764000000054],[-93.163054999999929,81.091934000000094],[-93.152221999999938,81.094711000000018],[-93.123321999999916,81.115265000000136],[-93.095550999999944,81.154160000000104],[-93.091674999999952,81.159988000000055],[-93.095839999999953,81.165268000000083],[-93.121108999999933,81.182754999999929],[-93.259734999999978,81.212203999999929],[-93.419448999999929,81.219986000000063],[-93.514724999999999,81.217758000000117],[-93.687499999999943,81.21026599999999],[-93.728333000000021,81.207214000000079],[-93.852218999999934,81.203049000000078],[-93.928878999999995,81.203873000000044],[-94.031386999999938,81.208878000000084],[-94.166397000000018,81.218048000000124],[-94.200561999999877,81.221100000000035],[-94.282227000000034,81.231094000000098],[-94.302489999999977,81.234984999999938],[-94.381667999999991,81.25082400000008],[-94.388061999999991,81.254990000000134],[-94.391388000000006,81.261108000000092],[-94.386123999999938,81.272766000000104],[-94.370270000000005,81.284714000000008],[-94.278610000000015,81.341934000000037],[-94.268616000000009,81.346099999999922],[-94.240829000000019,81.350814999999955],[-94.200561999999877,81.355545000000006],[-94.153884999999946,81.359711000000118],[-94.06806899999998,81.363311999999951],[-94.035278000000005,81.363311999999951],[-93.789444000000003,81.348038000000088],[-93.755004999999926,81.344711000000132],[-93.694442999999922,81.337494000000049],[-93.665833000000021,81.332763999999997],[-93.638900999999976,81.327209000000096],[-93.621933000000013,81.321655000000078],[-93.611389000000031,81.316376000000105],[-93.594451999999933,81.31053199999991],[-93.553329000000019,81.305542000000059],[-93.515288999999996,81.31053199999991],[-93.494994999999903,81.314697000000081],[-93.483063000000016,81.319716999999969],[-93.483611999999994,81.325272000000041],[-93.488051999999982,81.330551000000014],[-93.533324999999991,81.348602000000028],[-93.560546999999929,81.367751999999996],[-93.564712999999927,81.376648000000102],[-93.550551999999925,81.38108799999992],[-93.517501999999979,81.38499500000006],[-93.340285999999992,81.372208000000057],[-93.177490000000034,81.358597000000088],[-93.01556399999987,81.341370000000097],[-92.928054999999972,81.330826000000059],[-92.831680000000006,81.317764000000011],[-92.727782999999931,81.305542000000059]],[[-91.71833799999996,81.549149000000057],[-91.761672999999973,81.548035000000084],[-91.801391999999964,81.548599000000024],[-91.837509000000011,81.551086000000112],[-91.863616999999977,81.555251999999996],[-91.951110999999912,81.584152000000017],[-91.958617999999944,81.588882000000069],[-91.960555999999997,81.594986000000119],[-91.956115999999952,81.600815000000125],[-91.932494999999903,81.605819999999994],[-91.903884999999946,81.608322000000044],[-91.868332000000009,81.608597000000088],[-91.823897999999986,81.606934000000138],[-91.789444000000003,81.603317000000004],[-91.724715999999944,81.596100000000092],[-91.597778000000005,81.580550999999957],[-91.582229999999925,81.578049000000078],[-91.619995000000017,81.562484999999981],[-91.643615999999895,81.557480000000112],[-91.673614999999984,81.552765000000079],[-91.71833799999996,81.549149000000057]],[[-78.365828999999962,82.883605999999986],[-78.383330999999998,82.883605999999986],[-78.419448999999986,82.899155000000064],[-78.417220999999927,82.935532000000023],[-78.414718999999934,82.941925000000026],[-78.405838000000017,82.947754000000032],[-78.389724999999885,82.953323000000012],[-78.361663999999962,82.958603000000096],[-78.323333999999875,82.961929000000112],[-78.273894999999868,82.963043000000084],[-78.223617999999988,82.961104999999975],[-78.145279000000016,82.954712000000029],[-78.119720000000029,82.94859299999996],[-78.116942999999992,82.942200000000014],[-78.122498000000007,82.937194999999974],[-78.150833000000034,82.926925999999924],[-78.212783999999999,82.911377000000016],[-78.336394999999982,82.888046000000145],[-78.365828999999962,82.883605999999986]],[[-70.111937999999952,83.109421000000111],[-70.00140399999998,83.10775799999999],[-69.812209999999993,83.112197999999978],[-69.74888599999997,83.11192299999999],[-69.701675000000023,83.110535000000084],[-69.665008999999998,83.108322000000101],[-69.659164000000033,83.103043000000127],[-69.662215999999944,83.074158000000068],[-69.664168999999958,83.070830999999941],[-69.680557000000022,83.064986999999974],[-69.716109999999958,83.061096000000077],[-69.757506999999976,83.057755000000043],[-69.773894999999982,83.051926000000037],[-69.775283999999942,83.047760000000096],[-69.744445999999982,83.04553199999998],[-69.671936000000017,83.041091999999935],[-69.636123999999995,83.039703000000145],[-69.471389999999985,83.038879000000009],[-69.451110999999969,83.035812000000078],[-69.513335999999981,83.019714000000022],[-69.536117999999988,83.014435000000049],[-69.565001999999936,83.009995000000004],[-69.559722999999963,82.994141000000127],[-69.233062999999959,83.010268999999937],[-69.156386999999938,83.017487000000131],[-69.120543999999995,83.021652000000131],[-69.097777999999948,83.026657],[-69.06361400000003,83.038040000000024],[-69.015563999999927,83.040817000000118],[-68.983063000000016,83.036652000000117],[-68.975280999999995,83.028320000000122],[-68.973891999999978,83.015549000000021],[-68.977218999999991,83.001663000000065],[-68.902785999999935,82.988312000000064],[-68.708344000000011,82.978043000000071],[-68.665008999999941,82.980270000000132],[-68.630829000000006,82.985259999999982],[-68.626663000000008,82.986923000000104],[-68.579726999999991,82.996933000000013],[-68.550551999999925,83.001663000000065],[-68.514724999999999,83.005554000000132],[-68.46665999999999,83.008040999999992],[-68.404723999999987,83.008330999999998],[-68.358046999999885,83.006103999999937],[-68.316101000000003,83.003326000000129],[-68.190826000000015,82.994705000000067],[-68.154175000000009,82.991088999999988],[-68.142226999999934,82.983597000000032],[-68.155272999999966,82.972487999999998],[-68.177779999999984,82.959991000000002],[-68.188599000000011,82.946091000000081],[-68.176391999999964,82.938873000000058],[-68.145554000000004,82.934981999999991],[-68.09973100000002,82.933594000000085],[-68.06806899999998,82.935257000000036],[-68.054169000000002,82.938873000000058],[-67.881667999999934,82.958878000000084],[-67.666945999999996,82.969711000000075],[-67.61082499999992,82.96887200000009],[-67.544158999999979,82.962203999999929],[-67.50140399999998,82.957214000000079],[-67.499999999999943,82.957016000000067],[-67.476104999999961,82.953598000000056],[-67.410003999999958,82.946640000000059],[-67.327788999999939,82.940811000000053],[-67.241669000000002,82.936919999999986],[-67.196655000000021,82.93609600000002],[-67.136123999999938,82.936646000000053],[-67.116942999999992,82.941086000000041],[-67.122771999999998,82.949142000000109],[-67.121658000000025,82.955261000000121],[-67.113327000000027,82.959427000000062],[-67.092223999999931,82.961104999999975],[-67.041107000000011,82.959717000000069],[-66.964721999999995,82.954163000000051],[-66.939986999999917,82.950546000000088],[-66.938323999999909,82.947754000000032],[-66.818893000000003,82.935257000000036],[-66.653060999999866,82.936371000000008],[-66.330001999999922,82.933868000000018],[-66.301391999999964,82.93193100000002],[-66.299437999999952,82.92942800000003],[-66.347503999999958,82.898041000000092],[-66.369155999999919,82.888321000000019],[-66.81138599999997,82.815262000000018],[-66.841110000000015,82.810806000000071],[-66.876663000000008,82.807205000000067],[-66.959732000000031,82.800812000000064],[-67.138335999999981,82.78387500000008],[-67.31527699999998,82.764709000000039],[-67.386123999999995,82.757767000000115],[-67.45777899999996,82.752212999999927],[-67.499999999999943,82.749611000000129],[-67.597778000000005,82.743590999999924],[-67.644729999999925,82.741652999999985],[-67.799164000000019,82.731658999999979],[-67.914168999999958,82.719986000000119],[-68.041381999999999,82.703873000000101],[-68.081679999999949,82.700821000000019],[-68.134170999999981,82.698593000000017],[-68.234726000000023,82.696640000000116],[-68.276108000000022,82.69470199999995],[-68.356658999999979,82.688034000000016],[-68.424437999999896,82.679703000000075],[-68.633621000000005,82.648605000000089],[-68.655838000000017,82.643600000000049],[-68.672225999999966,82.637772000000098],[-68.667220999999984,82.632477000000051],[-68.642501999999979,82.628585999999984],[-68.573623999999938,82.628860000000088],[-68.465011999999945,82.639435000000049],[-68.424437999999896,82.641937000000098],[-68.325835999999981,82.645537999999988],[-67.934998000000007,82.658324999999991],[-67.812774999999988,82.659149000000127],[-67.606658999999922,82.655548000000067],[-67.518065999999862,82.65109300000006],[-67.47084000000001,82.652205999999978],[-67.430557000000022,82.655548000000067],[-67.381942999999978,82.66276600000009],[-67.328063999999983,82.677199999999914],[-67.275283999999999,82.68609600000002],[-67.245834000000002,82.689697000000081],[-67.210830999999928,82.693587999999977],[-66.997771999999998,82.712203999999986],[-66.900283999999999,82.719437000000028],[-66.670837000000006,82.740265000000079],[-66.657227000000034,82.744430999999963],[-66.638335999999981,82.748871000000008],[-66.122771999999998,82.813034000000073],[-66.086670000000026,82.816665999999998],[-65.810271999999941,82.840820000000122],[-65.767776000000026,82.843048000000067],[-65.724166999999909,82.843597000000045],[-65.546660999999915,82.838043000000027],[-65.467772999999852,82.833327999999995],[-65.454726999999991,82.829162999999994],[-65.481673999999998,82.816665999999998],[-65.495834000000002,82.8119200000001],[-65.527221999999938,82.797484999999938],[-65.518065999999976,82.789978000000019],[-65.511123999999995,82.786652000000004],[-65.458617999999888,82.779433999999981],[-65.430832000000009,82.777481000000023],[-65.197494999999947,82.764160000000061],[-65.164444000000003,82.763046000000088],[-65.154723999999987,82.765274000000034],[-65.167496000000028,82.769989000000066],[-65.259170999999924,82.781662000000097],[-65.327498999999989,82.789154000000053],[-65.339721999999938,82.791930999999977],[-65.353057999999976,82.797211000000004],[-65.34445199999999,82.801926000000037],[-65.221938999999963,82.832764000000054],[-65.102782999999931,82.848037999999974],[-65.110001000000011,82.852767999999969],[-65.128052000000025,82.856094000000041],[-65.172775000000001,82.858321999999987],[-65.272781000000009,82.861099000000081],[-65.30749499999996,82.86554000000001],[-65.289168999999958,82.873306000000014],[-65.258057000000008,82.877472000000125],[-65.104720999999984,82.891663000000108],[-64.982223999999974,82.901093000000003],[-64.884734999999921,82.905823000000055],[-64.83555599999994,82.906937000000028],[-64.729720999999927,82.904160000000104],[-64.68472300000002,82.901657000000114],[-64.655562999999972,82.896942000000081],[-64.664168999999902,82.89027399999992],[-64.678604000000007,82.884720000000129],[-64.713897999999915,82.876372999999944],[-64.751953000000015,82.875259000000142],[-64.790558000000033,82.875809000000004],[-64.829726999999934,82.877762000000132],[-64.890288999999939,82.878036000000066],[-64.922501000000011,82.876372999999944],[-64.936934999999949,82.871368000000075],[-64.923614999999984,82.864699999999914],[-64.883895999999993,82.861649000000114],[-64.839995999999985,82.861923000000047],[-64.746384000000035,82.860535000000141],[-64.723052999999993,82.856369000000029],[-64.710555999999997,82.852478000000133],[-64.713897999999915,82.846375000000023],[-64.722777999999948,82.840820000000122],[-64.742217999999923,82.834427000000005],[-64.750838999999928,82.828323000000125],[-64.737777999999992,82.822220000000016],[-64.706954999999994,82.813034000000073],[-64.64805599999994,82.799713000000111],[-64.478607000000011,82.764435000000105],[-64.445266999999944,82.761932000000115],[-64.418059999999912,82.761382999999967],[-64.412780999999939,82.762206999999933],[-64.398055999999997,82.766936999999984],[-64.328888000000006,82.787201000000096],[-64.18638599999997,82.819153000000085],[-64.139998999999989,82.828049000000021],[-64.103058000000033,82.831665000000044],[-64.059722999999963,82.833327999999995],[-63.972770999999966,82.834991000000116],[-63.672775000000001,82.834717000000012],[-63.623610999999926,82.833603000000039],[-63.529723999999987,82.828323000000125],[-63.490836999999942,82.825272000000098],[-63.43472300000002,82.816665999999998],[-63.389167999999927,82.804977000000065],[-63.382499999999993,82.798325000000034],[-63.382216999999912,82.767761000000121],[-63.397223999999994,82.761382999999967],[-63.479163999999855,82.739425999999924],[-63.510284000000013,82.732483000000116],[-63.525832999999977,82.730545000000006],[-63.590836000000024,82.733047000000056],[-63.666106999999954,82.731368999999972],[-63.819449999999961,82.721374999999966],[-63.834998999999982,82.719147000000021],[-63.850280999999995,82.715820000000065],[-63.764450000000011,82.715271000000087],[-63.67888599999992,82.717758000000003],[-63.65166499999998,82.714996000000099],[-63.540001000000018,82.694427000000132],[-63.502040999999906,82.682762000000082],[-63.422226000000023,82.665543000000014],[-63.286948999999993,82.654434000000094],[-63.254447999999968,82.650269000000094],[-63.232215999999994,82.64498900000001],[-63.226105000000018,82.640273999999977],[-63.235557999999855,82.633330999999998],[-63.255835999999988,82.627197000000137],[-63.287223999999981,82.624985000000095],[-63.339721999999995,82.623596000000077],[-63.376388999999961,82.619980000000055],[-63.380829000000006,82.615265000000022],[-63.369445999999982,82.61053499999997],[-63.347495999999978,82.604980000000069],[-63.315001999999936,82.601089000000002],[-63.272223999999937,82.598602000000142],[-63.229720999999984,82.597214000000008],[-63.11361699999992,82.597487999999942],[-63.071113999999966,82.59637500000008],[-63.033614999999941,82.594436999999971],[-62.99639099999996,82.59027100000003],[-62.96416499999998,82.585541000000035],[-62.942496999999946,82.5816650000001],[-62.926108999999997,82.576096000000121],[-62.930557000000022,82.56999200000007],[-62.960555999999997,82.557754999999929],[-63.059440999999936,82.511932000000002],[-63.08943899999997,82.466385000000116],[-63.119994999999903,82.463608000000022],[-63.243889000000024,82.457764000000054],[-63.285004000000015,82.454987000000131],[-63.346106999999904,82.449142000000052],[-63.366111999999987,82.444977000000051],[-63.369995000000017,82.438873000000001],[-63.328613000000018,82.437759000000028],[-63.277221999999938,82.439148000000046],[-63.148887999999999,82.446929999999952],[-63.071670999999981,82.451935000000049],[-63.015838999999971,82.459716999999955],[-62.990836999999885,82.467209000000082],[-62.920836999999949,82.491089000000102],[-62.823616000000015,82.504440000000045],[-62.678336999999999,82.516098000000056],[-62.553328999999962,82.524428999999998],[-62.506667999999877,82.526657000000114],[-62.286948999999993,82.528046000000131],[-62.24500299999994,82.528046000000131],[-62.171669000000009,82.525542999999971],[-62.171386999999982,82.521378000000141],[-62.322776999999974,82.511108000000036],[-62.333060999999987,82.504166000000112],[-62.353057999999976,82.486374000000069],[-62.352782999999931,82.481093999999985],[-62.300835000000006,82.482483000000002],[-62.264449999999954,82.485809000000017],[-62.21566799999988,82.491928000000087],[-62.212497999999869,82.495766000000003],[-62.098052999999936,82.502212999999983],[-61.884170999999981,82.492752000000053],[-61.691665999999998,82.48803700000002],[-61.582503999999972,82.482483000000002],[-61.530829999999867,82.478317000000118],[-61.5,82.474152000000117],[-61.448607999999979,82.464431999999988],[-61.326110999999969,82.439697000000137],[-61.28556100000003,82.430267000000072],[-61.170279999999877,82.395264000000111],[-61.141113000000018,82.383041000000048],[-61.131385999999907,82.377472000000068],[-61.11222099999992,82.363876000000062],[-61.098609999999951,82.350266000000033],[-61.076392999999996,82.320831000000112],[-61.078613000000018,82.301086000000112],[-61.084723999999994,82.293593999999985],[-61.107779999999934,82.267761000000064],[-61.130359999999996,82.252937000000088],[-61.135558999999944,82.247482000000105],[-61.15694400000001,82.235259999999982],[-61.193328999999949,82.223602000000085],[-61.281112999999948,82.202774000000034],[-61.306389000000024,82.197205000000054],[-61.388054000000011,82.18331900000004],[-61.43332700000002,82.176376000000062],[-61.463614999999891,82.172484999999995],[-61.534171999999899,82.165543000000071],[-61.599441999999954,82.160812000000135],[-61.804442999999992,82.146652000000074],[-61.86999499999996,82.106644000000017],[-61.885001999999986,82.100539999999967],[-62.077781999999956,82.053588999999988],[-62.126944999999978,82.043869000000086],[-62.25417299999998,82.019989000000066],[-62.278885000000002,82.015822999999955],[-62.313056999999958,82.01249700000011],[-62.356948999999929,82.010268999999994],[-62.513618000000008,82.004715000000147],[-62.570281999999963,81.976089000000059],[-62.944999999999993,81.922211000000118],[-63.040557999999976,81.909714000000122],[-63.292502999999897,81.877761999999962],[-63.387221999999952,81.867752000000053],[-63.656104999999968,81.837494000000106],[-63.715003999999965,81.820831000000055],[-63.761116000000015,81.811645999999996],[-63.817223000000013,81.804703000000018],[-63.849723999999924,81.801086000000055],[-63.925003000000004,81.795258000000103],[-63.962775999999963,81.792480000000126],[-64.010009999999966,81.790268000000083],[-64.053054999999915,81.789978000000019],[-64.086945000000014,81.791930999999977],[-64.111663999999962,81.794983000000116],[-64.131667999999991,81.799149],[-64.142226999999934,81.803040000000067],[-64.177779999999984,81.810532000000023],[-64.207503999999972,81.81442300000009],[-64.271666999999923,81.821655000000021],[-64.301392000000021,81.824157999999954],[-64.325287000000003,81.824707000000103],[-64.323623999999995,81.819153000000085],[-64.308043999999995,81.814697000000024],[-64.253066999999987,81.806091000000094],[-64.232772999999952,81.800537000000077],[-64.12388599999997,81.768326000000002],[-64.118057000000022,81.764435000000105],[-64.134734999999921,81.754715000000033],[-64.207779000000016,81.74192800000003],[-64.355269999999962,81.726379000000122],[-64.472503999999958,81.721374999999966],[-64.629439999999931,81.722488000000055],[-64.720001000000025,81.723877000000073],[-64.767776000000026,81.725815000000011],[-64.801665999999955,81.728317000000061],[-64.812209999999993,81.730820000000051],[-64.833892999999932,81.738876000000118],[-64.839721999999938,81.742203000000075],[-64.885559000000001,81.750823999999966],[-64.910004000000015,81.752777000000094],[-64.962218999999948,81.752212999999983],[-65.21665999999999,81.74552900000009],[-65.337508999999955,81.737761999999975],[-65.409728999999913,81.728317000000061],[-65.631377999999927,81.70248400000014],[-65.668334999999956,81.700821000000019],[-65.725554999999929,81.701660000000004],[-65.773330999999985,81.702773999999977],[-65.924437999999952,81.70138500000013],[-66.012221999999952,81.696930000000123],[-66.038605000000018,81.692474000000004],[-66.042220999999984,81.690536000000066],[-66.030288999999925,81.684982000000105],[-65.991378999999995,81.682755000000043],[-65.821944999999971,81.684417999999937],[-65.612503000000004,81.680817000000104],[-65.487777999999935,81.687485000000038],[-65.404175000000009,81.69081100000011],[-65.352492999999868,81.691925000000083],[-65.336670000000026,81.688034000000016],[-65.370833999999945,81.678863999999976],[-65.402221999999995,81.674423000000047],[-65.523620999999991,81.659714000000008],[-65.618056999999908,81.648605000000089],[-65.789443999999946,81.632202000000063],[-65.871657999999911,81.627197000000024],[-65.910278000000005,81.629699999999957],[-65.926391999999964,81.634154999999964],[-65.92721599999993,81.635543999999982],[-65.924437999999952,81.639708999999982],[-65.92721599999993,81.645827999999995],[-65.943328999999892,81.650543000000027],[-65.982223999999917,81.65277100000003],[-66.024718999999948,81.653046000000018],[-66.042770000000019,81.651657],[-66.064712999999983,81.647765999999933],[-66.085555999999997,81.642761000000064],[-66.101943999999946,81.637207000000103],[-66.140838999999971,81.620529000000033],[-66.172501000000011,81.618042000000116],[-66.218886999999938,81.616928000000144],[-66.355270000000019,81.617477000000122],[-66.393889999999942,81.619705000000067],[-66.439712999999983,81.62692300000009],[-66.478333000000021,81.628585999999984],[-66.575561999999934,81.626082999999994],[-66.727492999999924,81.6202550000001],[-66.804992999999854,81.615814],[-66.896392999999932,81.611923000000104],[-67.15695199999999,81.608032000000037],[-67.509170999999924,81.60054000000008],[-67.55972300000002,81.599152000000004],[-67.766662999999994,81.593047999999953],[-67.792770000000019,81.589706000000035],[-68.111389000000031,81.56303400000013],[-68.156661999999983,81.56109600000002],[-68.231383999999991,81.561371000000008],[-68.274718999999948,81.562759000000085],[-68.309433000000013,81.565536000000009],[-68.330565999999919,81.56860400000005],[-68.352492999999981,81.573044000000039],[-68.410277999999892,81.588043000000084],[-68.459731999999974,81.597487999999998],[-68.661391999999978,81.633330999999998],[-68.715285999999992,81.642211999999972],[-68.976944000000003,81.684417999999937],[-69.058883999999921,81.697479000000101],[-69.139998999999989,81.70887799999997],[-69.176392000000021,81.712494000000049],[-69.247222999999963,81.71748400000007],[-69.291381999999999,81.718871999999976],[-69.299438000000009,81.717209000000082],[-69.306655999999975,81.714431999999988],[-69.291381999999999,81.707763999999997],[-69.268065999999976,81.70248400000014],[-69.214172000000019,81.695251000000098],[-69.123610999999983,81.683868000000132],[-69.005279999999914,81.667480000000069],[-68.902221999999995,81.651382000000012],[-68.624709999999993,81.604430999999977],[-68.449158000000011,81.570831000000055],[-68.370833999999888,81.553589000000045],[-68.357772999999952,81.548325000000091],[-68.352492999999981,81.541656000000046],[-68.37332200000003,81.537766000000033],[-68.407500999999968,81.533874999999966],[-68.504455999999948,81.532211000000132],[-68.551391999999964,81.532760999999994],[-68.637512000000015,81.535538000000088],[-68.715285999999992,81.539703000000088],[-68.810821999999916,81.548599000000024],[-68.848891999999978,81.549149000000057],[-68.856948999999986,81.547760000000039],[-68.851944000000003,81.541656000000046],[-68.839172000000019,81.536925999999994],[-68.813048999999978,81.533325000000104],[-68.777495999999928,81.529709000000082],[-68.579452999999887,81.514434999999992],[-68.536666999999966,81.513321000000019],[-68.446654999999964,81.517487000000074],[-68.376098999999954,81.522766000000047],[-68.285827999999924,81.526931999999988],[-68.091949,81.529160000000104],[-68.051101999999958,81.53054800000001],[-68.011123999999938,81.533051],[-67.910003999999958,81.542206000000078],[-67.819732999999871,81.546936000000073],[-67.724716000000001,81.551086000000112],[-67.383651999999984,81.56088299999999],[-67.182495000000017,81.564697000000081],[-67.150283999999942,81.564987000000087],[-67.107773000000009,81.564987000000087],[-67.064712999999983,81.562759000000085],[-66.859726000000023,81.546646000000067],[-66.791381999999885,81.540817000000061],[-66.766112999999962,81.537491000000045],[-66.629990000000021,81.518051000000014],[-66.608611999999994,81.512772000000041],[-66.62388599999997,81.506378000000041],[-66.741104000000007,81.491928000000087],[-66.887787000000003,81.480545000000063],[-66.962783999999942,81.474991000000102],[-67.043334999999956,81.469711000000018],[-67.248336999999992,81.44999700000011],[-67.457503999999972,81.423035000000027],[-67.753890999999896,81.391663000000051],[-67.818344000000025,81.385268999999994],[-67.994719999999973,81.368042000000003],[-68.244720000000029,81.33998100000008],[-68.355835000000013,81.32388300000008],[-68.429169000000002,81.31164600000011],[-68.486938000000009,81.303863999999976],[-68.618057000000022,81.290543000000014],[-68.796951000000035,81.275269000000094],[-69.028609999999958,81.258606000000043],[-69.319457999999997,81.260268999999937],[-69.34056099999998,81.263885000000016],[-69.357773000000009,81.268326000000116],[-69.362777999999992,81.268875000000037],[-69.391388000000006,81.270537999999988],[-69.426940999999943,81.26998900000001],[-69.455565999999976,81.265823000000125],[-69.468886999999995,81.259995000000004],[-69.46305799999999,81.253326000000129],[-69.436934999999949,81.249145999999939],[-69.366652999999985,81.246368000000132],[-69.319457999999997,81.243591000000038],[-69.312209999999993,81.240540000000067],[-69.323897999999929,81.238037000000077],[-69.541671999999949,81.212493999999936],[-69.911941999999954,81.182480000000112],[-69.999434999999949,81.179977000000122],[-70.158339999999953,81.181366000000139],[-70.206389999999942,81.179703000000018],[-70.210007000000019,81.173874000000012],[-70.126098999999954,81.165543000000127],[-70.050551999999982,81.161652000000061],[-69.960281000000009,81.160538000000088],[-69.907227000000034,81.161652000000061],[-69.864440999999999,81.16415400000011],[-69.760009999999966,81.173035000000027],[-69.638061999999991,81.177475000000072],[-69.647506999999962,81.172484999999995],[-69.831954999999994,81.137206999999989],[-69.887786999999946,81.129150000000038],[-69.953063999999983,81.122208000000114],[-69.976943999999946,81.118866000000025],[-70.013061999999934,81.109146000000123],[-70.025283999999999,81.102767999999969],[-70.023330999999985,81.100815000000011],[-69.995269999999948,81.099426000000051],[-69.955565999999976,81.099426000000051],[-69.922225999999966,81.102203000000145],[-69.832229999999981,81.111649000000114],[-69.632492000000013,81.139160000000118],[-69.609726000000023,81.14387499999998],[-69.591675000000009,81.14888000000002],[-69.541671999999949,81.164428999999927],[-69.528335999999911,81.169434000000024],[-69.463333000000034,81.183044000000052],[-69.430556999999965,81.187194999999974],[-69.359436000000017,81.193313999999987],[-68.876099000000011,81.231094000000098],[-68.760833999999932,81.239426000000037],[-68.37388599999997,81.266662999999994],[-68.246947999999975,81.272766000000104],[-68.116652999999928,81.280273000000079],[-68.052779999999984,81.286102000000085],[-67.887221999999952,81.30304000000001],[-67.823623999999938,81.310257000000092],[-67.791107000000011,81.315536000000066],[-67.690826000000015,81.329437000000041],[-67.593062999999972,81.340271000000087],[-67.356658999999979,81.363601999999958],[-67.24749799999995,81.371918000000051],[-67.124160999999901,81.379700000000014],[-66.990554999999915,81.385544000000039],[-66.621383999999978,81.413879000000065],[-66.365828999999962,81.434708000000001],[-66.290282999999988,81.440262000000018],[-66.16972399999986,81.447754000000145],[-66.134170999999924,81.450821000000076],[-66.050827000000027,81.459152000000131],[-65.985549999999989,81.468048000000067],[-65.831679999999949,81.484711000000004],[-65.724715999999944,81.493866000000025],[-65.643616000000009,81.498871000000065],[-65.557495000000017,81.503052000000139],[-65.466400000000021,81.506378000000041],[-65.252791999999943,81.517212000000086],[-65.002791999999999,81.530823000000055],[-64.612503000000004,81.544982999999945],[-64.566390999999953,81.545532000000094],[-64.537780999999995,81.543593999999985],[-64.528060999999923,81.541656000000046],[-64.517501999999979,81.537491000000045],[-64.444152999999972,81.490814000000114],[-64.436385999999914,81.479431000000091],[-64.451110999999969,81.466934000000094],[-64.491942999999992,81.448868000000118],[-64.508620999999948,81.441924999999969],[-64.520844000000011,81.4369200000001],[-64.554169000000002,81.425812000000064],[-64.616652999999928,81.404984000000013],[-64.658889999999985,81.393050999999957],[-64.735274999999945,81.374146000000053],[-64.808608999999933,81.360535000000084],[-64.855835000000013,81.352768000000083],[-64.99499499999996,81.333328000000108],[-65.060271999999998,81.326096000000007],[-65.168059999999969,81.309982000000048],[-65.286391999999978,81.287201000000039],[-65.323623999999995,81.278046000000018],[-65.441375999999934,81.256378000000041],[-65.493057000000022,81.250549000000035],[-65.527785999999992,81.247481999999934],[-65.571670999999981,81.244980000000055],[-65.747771999999998,81.235809000000131],[-65.941101000000003,81.226379000000065],[-65.980559999999912,81.22387700000013],[-66.010284000000013,81.220261000000107],[-66.199721999999895,81.183868000000018],[-66.244445999999868,81.17442299999999],[-66.264449999999954,81.169434000000024],[-66.418335000000013,81.128860000000032],[-66.438048999999978,81.12359600000002],[-66.482772999999952,81.106934000000081],[-66.50418099999996,81.095534999999984],[-66.509445000000028,81.08859300000006],[-66.529723999999987,81.076096000000064],[-66.544723999999974,81.070540999999992],[-66.603333000000021,81.05525200000011],[-66.685821999999973,81.035812000000135],[-66.753341999999975,81.021927000000005],[-66.921111999999994,80.991089000000045],[-67.164443999999946,80.948593000000017],[-67.208618000000001,80.941925000000026],[-67.279175000000009,80.93553200000008],[-67.309158000000025,80.934418000000107],[-67.349441999999954,80.936371000000065],[-67.440825999999959,80.936646000000053],[-67.562209999999993,80.93553200000008],[-67.591384999999946,80.933044000000109],[-67.606658999999922,80.929977000000008],[-67.603607000000011,80.92442299999999],[-67.588333000000034,80.913878999999952],[-67.567779999999971,80.908599999999979],[-67.543335000000013,80.90415999999999],[-67.53083799999996,80.897491000000116],[-67.539992999999981,80.891098000000113],[-67.583618000000001,80.876648000000046],[-67.634445000000028,80.860809000000074],[-67.653609999999958,80.856369000000086],[-67.863891999999964,80.834152000000017],[-67.910278000000005,80.8119200000001],[-67.965835999999911,80.797484999999995],[-68.011397999999986,80.788315000000125],[-68.065552000000025,80.779160000000104],[-68.089447000000007,80.776093000000003],[-68.138335999999981,80.772491000000002],[-68.202788999999939,80.765823000000069],[-68.225280999999939,80.761383000000023],[-68.672500999999897,80.66693099999992],[-68.738891999999908,80.647217000000012],[-68.814712999999983,80.628586000000041],[-68.952498999999875,80.603043000000071],[-69.146666999999923,80.529709000000082],[-69.171111999999994,80.517487000000131],[-69.273055999999997,80.463882000000012],[-69.289168999999958,80.451660000000061],[-69.291381999999999,80.444138000000123],[-69.290558000000033,80.437194999999917],[-69.297774999999945,80.424698000000149],[-69.305557000000022,80.418319999999994],[-69.317504999999983,80.412490999999989],[-69.333892999999932,80.406647000000135],[-69.384734999999921,80.391937000000041],[-69.427489999999977,80.382751000000042],[-69.479720999999984,80.37553400000013],[-69.551102000000014,80.366379000000109],[-69.596389999999872,80.361099000000024],[-69.729720999999927,80.352767999999969],[-69.982772999999895,80.344986000000006],[-70.072783999999956,80.344437000000028],[-70.218886999999938,80.346374999999966],[-70.284438999999907,80.351089000000115],[-70.305266999999958,80.356093999999985],[-70.310821999999973,80.363037000000134],[-70.285827999999981,80.372482000000048],[-70.256393000000003,80.381362999999965],[-70.244155999999919,80.386658000000011],[-70.227782999999988,80.401382000000069],[-70.220001000000025,80.416930999999977],[-70.235000999999897,80.429703000000018],[-70.275283999999942,80.44802900000002],[-70.314163000000008,80.464432000000045],[-70.499434999999949,80.513884999999959],[-70.539992999999924,80.521927000000119],[-70.68110699999994,80.548035000000084],[-70.706116000000009,80.552475000000129],[-70.754729999999995,80.559418000000107],[-70.783065999999963,80.56303400000013],[-70.812499999999886,80.562759000000142],[-70.825286999999889,80.558593999999971],[-70.827498999999932,80.551376000000118],[-70.813048999999921,80.544983000000002],[-70.796111999999994,80.540543000000127],[-70.765288999999996,80.534424000000115],[-70.741668999999945,80.531372000000033],[-70.670837000000006,80.518051000000071],[-70.637786999999946,80.509155000000135],[-70.531386999999995,80.474426000000051],[-70.490554999999915,80.460815000000082],[-70.476669000000015,80.454436999999984],[-70.423324999999977,80.42164600000001],[-70.434722999999963,80.391663000000108],[-70.450561999999991,80.385817999999972],[-70.458892999999989,80.381362999999965],[-70.472228999999913,80.368042000000003],[-70.471389999999985,80.362488000000042],[-70.469161999999983,80.354980000000012],[-70.462219000000005,80.346939000000134],[-70.444153000000028,80.340271000000143],[-70.424164000000019,80.336105000000032],[-70.352492999999924,80.324707000000046],[-70.309998000000007,80.318054000000075],[-70.252791999999943,80.313309000000061],[-70.15055799999999,80.299149000000114],[-70.035278000000005,80.278320000000122],[-69.991103999999893,80.268875000000094],[-69.974166999999966,80.263046000000088],[-69.960555999999997,80.256378000000097],[-69.965285999999935,80.252213000000097],[-69.990828999999962,80.24331699999999],[-70.128326000000015,80.19720500000011],[-70.145554000000004,80.193587999999977],[-70.178604000000007,80.189148000000102],[-70.21665999999999,80.186371000000008],[-70.24888599999997,80.18609600000002],[-70.315001999999879,80.187484999999981],[-70.611388999999974,80.19720500000011],[-70.645554000000004,80.199142000000109],[-70.821121000000005,80.195526000000086],[-71.120833999999945,80.172485000000052],[-71.180556999999908,80.166656000000046],[-71.238326999999913,80.158874999999966],[-71.381942999999978,80.139160000000004],[-71.418610000000001,80.131088000000034],[-71.446105999999929,80.121368000000132],[-71.463057999999933,80.118042000000059],[-71.50111400000003,80.11554000000001],[-71.654448999999943,80.111374000000069],[-71.694442999999978,80.110809000000074],[-71.731948999999929,80.111923000000047],[-71.762787000000003,80.114426000000037],[-71.789992999999981,80.117752000000053],[-71.811660999999901,80.123596000000077],[-71.836120999999991,80.131927000000132],[-71.848052999999993,80.143875000000037],[-71.878600999999946,80.162491000000045],[-71.907776000000013,80.171371000000079],[-71.953339000000028,80.180542000000003],[-72.006393000000003,80.188583000000108],[-72.057220000000029,80.19470200000012],[-72.081116000000009,80.194138000000009],[-72.099990999999875,80.192748999999992],[-72.127776999999924,80.187759000000142],[-72.165282999999988,80.188873000000115],[-72.189163000000008,80.192200000000014],[-72.223327999999981,80.201660000000118],[-72.241378999999995,80.207489000000123],[-72.256392999999946,80.213882000000069],[-72.274445000000014,80.219711000000075],[-72.294448999999872,80.223312000000135],[-72.329726999999878,80.22554000000008],[-72.358886999999925,80.226089000000059],[-72.378051999999968,80.224700999999982],[-72.391113000000018,80.221649000000014],[-72.400283999999942,80.218597000000102],[-72.420837000000006,80.211104999999975],[-72.412506000000008,80.207214000000079],[-72.188598999999954,80.163879000000122],[-72.140839000000028,80.156937000000028],[-72.082779000000016,80.151656999999943],[-72.052489999999977,80.149719000000005],[-71.996947999999861,80.143051000000071],[-71.977218999999934,80.139434999999992],[-71.896956999999929,80.11554000000001],[-71.895553999999947,80.114150999999993],[-71.898055999999997,80.108597000000032],[-71.905272999999966,80.103591999999935],[-71.926102000000014,80.099991000000102],[-71.954726999999934,80.096375000000023],[-72.115554999999972,80.087494000000106],[-72.250564999999938,80.085541000000148],[-72.391677999999956,80.085541000000148],[-72.392226999999991,80.081940000000088],[-72.358337000000006,80.064987000000031],[-72.340560999999923,80.059143000000006],[-72.306380999999988,80.057480000000055],[-72.170272999999952,80.053864000000033],[-72.137787000000003,80.053588999999988],[-72.053054999999915,80.057480000000055],[-71.920836999999949,80.066375999999991],[-71.885833999999932,80.067215000000147],[-71.849730999999906,80.067764000000125],[-71.701950000000011,80.064148000000046],[-71.618057000000022,80.06442300000009],[-71.489166000000012,80.068878000000097],[-71.376098999999954,80.076935000000049],[-71.316665999999941,80.081940000000088],[-71.186385999999914,80.093872000000033],[-70.968063000000029,80.114990000000148],[-70.854720999999984,80.12831100000011],[-70.821121000000005,80.131088000000034],[-70.762512000000015,80.133330999999941],[-70.651671999999962,80.131363000000022],[-70.626663000000008,80.130539000000056],[-70.50778200000002,80.099716000000058],[-70.502227999999945,80.093048000000067],[-70.497498000000007,80.082764000000054],[-70.48832699999997,80.057205000000067],[-70.494995000000017,80.050812000000121],[-70.508346999999958,80.047759999999982],[-70.568068999999923,80.042755000000113],[-70.59722899999997,80.039429000000098],[-70.646666999999979,80.031936999999971],[-70.662216000000001,80.026657000000057],[-70.673049999999989,80.020828000000051],[-70.679717999999866,80.014435000000105],[-70.672774999999945,80.006377999999984],[-70.672501000000011,80.001389000000017],[-70.689712999999983,79.993317000000047],[-70.71945199999999,79.986374000000012],[-70.767226999999878,79.981658999999979],[-70.916107000000011,79.974425999999994],[-70.954178000000013,79.972763000000043],[-71.08555599999994,79.968596999999988],[-71.241669000000002,79.960815000000025],[-71.27027899999996,79.957214000000135],[-71.401108000000022,79.93553199999991],[-71.416397000000018,79.930267000000072],[-71.453612999999962,79.906372000000033],[-71.460555999999883,79.901382000000012],[-71.458892999999932,79.894989000000066],[-71.438599000000011,79.88998399999997],[-71.415832999999907,79.886658000000125],[-71.394454999999994,79.884995000000004],[-71.352782999999931,79.886932000000058],[-71.338608000000022,79.888596000000064],[-71.168335000000013,79.914153999999996],[-71.109725999999966,79.915267999999969],[-71.063048999999978,79.911652000000117],[-70.944716999999969,79.894150000000081],[-70.925827000000027,79.890274000000034],[-70.910278000000005,79.885818000000086],[-70.916397000000018,79.879424999999969],[-71.005843999999968,79.819717000000082],[-71.116652999999985,79.789703000000088],[-71.136123999999938,79.784988000000055],[-71.183884000000035,79.77748100000008],[-71.212783999999999,79.774428999999998],[-71.343612999999948,79.76388500000013],[-71.376098999999954,79.760818000000029],[-71.400283999999999,79.757492000000013],[-71.444442999999922,79.741653000000042],[-71.463333000000034,79.736923000000047],[-71.49110399999995,79.733321999999987],[-71.699158000000011,79.709991000000116],[-71.739440999999943,79.707214000000022],[-71.781113000000005,79.706100000000049],[-71.817504999999983,79.703597999999943],[-71.922500999999954,79.695525999999973],[-71.990279999999984,79.689148000000046],[-72.096664000000033,79.674988000000099],[-72.217772999999909,79.659987999999998],[-72.267226999999934,79.659149000000014],[-72.287215999999944,79.659987999999998],[-72.317779999999914,79.667205999999965],[-72.330841000000021,79.672484999999938],[-72.348052999999879,79.678040000000067],[-72.367217999999923,79.681656000000089],[-72.392226999999991,79.683594000000028],[-72.425003000000004,79.685531999999967],[-72.467223999999931,79.684708000000001],[-72.574172999999917,79.679153000000099],[-72.619445999999925,79.677765000000022],[-72.661391999999978,79.677199999999971],[-72.697220000000016,79.678040000000067],[-72.729995999999971,79.679703000000131],[-72.756119000000012,79.682205000000067],[-72.912780999999939,79.702208999999982],[-72.932769999999948,79.706375000000037],[-72.944442999999978,79.710266000000104],[-73.062774999999988,79.79942299999999],[-73.061110999999983,79.805251999999996],[-73.048614999999984,79.808319000000097],[-73.027495999999985,79.80693100000002],[-73.017226999999934,79.804703000000018],[-73.003341999999975,79.803040000000124],[-72.979171999999949,79.802200000000084],[-72.945830999999998,79.804152999999985],[-72.924437999999952,79.806366000000139],[-72.912216000000001,79.809418000000051],[-72.902495999999928,79.815262000000075],[-72.926392000000021,79.819442999999978],[-73.059158000000025,79.825546000000088],[-73.091675000000009,79.826385000000073],[-73.178328999999906,79.822768999999994],[-73.218063000000029,79.822768999999994],[-73.285003999999958,79.826096000000121],[-73.348617999999988,79.83027600000014],[-73.371383999999978,79.833054000000118],[-73.396956999999986,79.834991000000002],[-73.43360899999999,79.835815000000139],[-73.576401000000033,79.832764000000111],[-73.667770000000019,79.829712000000029],[-73.745270000000005,79.828323000000012],[-73.780288999999982,79.82777400000009],[-73.853332999999907,79.829163000000051],[-73.866942999999992,79.830826000000002],[-73.864715999999987,79.835815000000139],[-73.853607000000011,79.839706000000035],[-73.801666000000012,79.84637500000008],[-73.745543999999938,79.849152000000004],[-73.742492999999854,79.849990999999932],[-73.746947999999975,79.854155999999932],[-73.768615999999895,79.858870999999965],[-73.890839000000028,79.875259000000028],[-73.945830999999885,79.881653000000085],[-74.010284000000013,79.885818000000086],[-74.117492999999968,79.888885000000016],[-74.156951999999933,79.888885000000016],[-74.238891999999964,79.887207000000103],[-74.283614999999941,79.881363000000079],[-74.30610699999994,79.876923000000033],[-74.383621000000005,79.868591000000094],[-74.415282999999988,79.865265000000022],[-74.576401000000033,79.856934000000138],[-74.667495999999971,79.853591999999992],[-74.795272999999952,79.850815000000125],[-74.833069000000023,79.849152000000004],[-74.846389999999985,79.847214000000065],[-74.846114999999941,79.84387200000009],[-74.71665999999999,79.796936000000073],[-74.699431999999945,79.792755],[-74.683884000000035,79.789978000000076],[-74.654998999999975,79.788879000000122],[-74.488892000000021,79.791655999999989],[-74.444992000000013,79.794708000000128],[-74.392226999999934,79.800261999999918],[-74.351668999999958,79.802475000000072],[-74.309432999999956,79.803314000000057],[-74.236388999999974,79.801925999999924],[-74.106383999999878,79.795532000000094],[-73.951401000000033,79.784424000000115],[-73.714721999999938,79.76638800000012],[-73.510833999999988,79.756377999999984],[-73.384734999999921,79.748871000000065],[-73.366652999999985,79.718048000000067],[-73.360824999999863,79.712769000000094],[-73.295546999999999,79.688582999999994],[-73.256957999999884,79.678040000000067],[-73.206664999999987,79.663605000000132],[-73.188889000000017,79.658035000000041],[-73.174438000000009,79.651657000000057],[-73.168334999999956,79.646103000000096],[-73.126098999999897,79.569443000000035],[-73.125823999999966,79.558318999999983],[-73.128875999999991,79.554153000000042],[-73.135833999999988,79.549713000000054],[-73.148620999999991,79.543593999999985],[-73.163054999999986,79.538878999999952],[-73.180831999999953,79.534149000000127],[-73.247222999999963,79.520827999999995],[-73.296111999999937,79.512772000000098],[-73.353881999999942,79.505829000000119],[-73.446380999999917,79.499145999999939],[-73.657776000000013,79.496368000000132],[-73.693054000000018,79.496933000000013],[-73.729172000000005,79.498596000000077],[-73.758057000000008,79.500275000000101],[-73.779998999999975,79.503052000000025],[-73.791945999999939,79.506653000000085],[-73.817229999999938,79.515549000000021],[-73.837783999999999,79.527480999999966],[-73.863892000000021,79.540267999999969],[-73.876662999999951,79.544708000000014],[-73.916106999999954,79.552475000000129],[-73.950286999999889,79.555252000000053],[-73.965012000000002,79.554703000000075],[-73.988892000000021,79.55192599999998],[-74.001113999999973,79.545821999999987],[-74.000290000000007,79.541656000000046],[-73.996947999999975,79.535537999999917],[-73.989440999999943,79.528595000000109],[-73.968612999999891,79.516937000000098],[-73.959166999999923,79.508881000000031],[-73.949996999999939,79.493866000000082],[-73.949721999999952,79.479980000000069],[-73.953063999999983,79.472762999999986],[-73.961945000000014,79.466933999999981],[-73.98332199999993,79.455551000000128],[-73.998046999999985,79.451385000000073],[-74.023620999999991,79.446930000000066],[-74.081389999999999,79.440536000000009],[-74.11610399999995,79.43803400000013],[-74.160278000000005,79.436371000000008],[-74.198333999999988,79.436095999999964],[-74.544158999999922,79.43803400000013],[-74.617492999999854,79.438583000000051],[-74.673614999999927,79.444138000000123],[-74.688598999999897,79.446930000000066],[-74.931670999999938,79.498871000000122],[-74.932410999999888,79.504798999999991],[-74.941939999999988,79.510543999999982],[-74.96444699999995,79.513046000000031],[-74.987503000000004,79.509995000000004],[-75.043334999999956,79.49581900000004],[-75.060271999999884,79.490813999999943],[-75.059433000000013,79.483871000000136],[-74.995269999999948,79.453598],[-74.983062999999959,79.449706999999933],[-74.948882999999967,79.440810999999997],[-74.912215999999944,79.429703000000018],[-74.897231999999974,79.423308999999961],[-74.884444999999971,79.416092000000049],[-74.883056999999894,79.408325000000104],[-74.911117999999988,79.39387499999998],[-74.93499799999995,79.385269000000051],[-74.951949999999954,79.380264000000011],[-75,79.375488000000075],[-75.016953000000001,79.374146000000053],[-75.058334000000002,79.373871000000065],[-75.213897999999972,79.376373000000115],[-75.31361400000003,79.379974000000004],[-75.410278000000005,79.384155000000078],[-75.531386999999995,79.392487000000074],[-75.695266999999944,79.409987999999998],[-75.799728000000016,79.431366000000139],[-75.907776000000013,79.426086000000055],[-75.931380999999988,79.423598999999967],[-75.957503999999972,79.426086000000055],[-75.985275000000001,79.429703000000018],[-76.031386999999995,79.438309000000118],[-76.049164000000019,79.443038999999999],[-76.097503999999958,79.461929000000112],[-76.109160999999915,79.467758000000117],[-76.115279999999927,79.472487999999942],[-76.124160999999958,79.476379000000009],[-76.138610999999912,79.481369000000086],[-76.175827000000027,79.488876000000005],[-76.203888000000006,79.492477000000065],[-76.261123999999995,79.497756999999979],[-76.320281999999906,79.501389000000074],[-76.636123999999995,79.519440000000088],[-76.665282999999988,79.520827999999995],[-76.718338000000017,79.51998900000001],[-76.795273000000009,79.51138300000008],[-76.834441999999967,79.508881000000031],[-76.872771999999998,79.508606000000043],[-76.90583799999996,79.509720000000016],[-77.050277999999992,79.518600000000049],[-77.069732999999985,79.523880000000077],[-77.092772999999909,79.539703000000145],[-77.112212999999997,79.545258000000047],[-77.142501999999865,79.547485000000052],[-77.160552999999936,79.543593999999985],[-77.191375999999934,79.511108000000092],[-77.184433000000013,79.503600999999946],[-77.178604000000007,79.499710000000107],[-77.134444999999971,79.490265000000022],[-77.071670999999924,79.486923000000104],[-76.895554000000004,79.48054500000012],[-76.867217999999923,79.479705999999965],[-76.612503000000004,79.474701000000096],[-76.406386999999995,79.473602000000142],[-76.204726999999991,79.461380000000133],[-76.179168999999888,79.459717000000069],[-76.159438999999963,79.456375000000094],[-76.143341000000021,79.449996999999939],[-76.138061999999934,79.443313999999987],[-76.138901000000033,79.441086000000041],[-76.149993999999992,79.437759000000085],[-76.159164000000033,79.436095999999964],[-76.189986999999974,79.433319000000097],[-76.208054000000004,79.429703000000018],[-76.205565999999976,79.424698000000149],[-76.167496000000028,79.396102999999925],[-76.157501000000025,79.391663000000108],[-76.11721799999998,79.384430000000123],[-76.083327999999995,79.378860000000032],[-76.059157999999968,79.374985000000038],[-75.902221999999995,79.357207999999957],[-75.881942999999978,79.353317000000118],[-75.879165999999998,79.351378999999952],[-75.889998999999875,79.348037999999917],[-75.902785999999878,79.346099999999979],[-76.086670000000026,79.332214000000022],[-76.12332200000003,79.331100000000049],[-76.351104999999961,79.341934000000094],[-76.682770000000005,79.352767999999969],[-76.717772999999909,79.353317000000118],[-76.790557999999976,79.353317000000118],[-76.829178000000013,79.350815000000011],[-76.869719999999973,79.349426000000051],[-76.89416499999993,79.353317000000118],[-76.959441999999967,79.367203000000075],[-77.018889999999999,79.381927000000132],[-77.076401000000033,79.398331000000098],[-77.090285999999935,79.40554800000001],[-77.105559999999912,79.416092000000049],[-77.108337000000006,79.420822000000101],[-77.212509000000011,79.447754000000032],[-77.326400999999976,79.454163000000051],[-77.359160999999915,79.455551000000128],[-77.386123999999938,79.452774000000034],[-77.397507000000019,79.447205000000054],[-77.395003999999972,79.440262000000075],[-77.384445000000028,79.433044000000052],[-77.262221999999952,79.372482000000048],[-77.172500999999954,79.336380000000077],[-77.158614999999998,79.329162999999994],[-77.163894999999968,79.324707000000046],[-77.187774999999988,79.322769000000108],[-77.228058000000033,79.321655000000135],[-77.260559000000001,79.322769000000108],[-77.317229999999938,79.327773999999977],[-77.36721799999998,79.336105000000089],[-77.386397999999986,79.33859300000006],[-77.41361999999998,79.34165999999999],[-77.466110000000015,79.346099999999979],[-77.477782999999931,79.346099999999979],[-77.596114999999941,79.345824999999991],[-77.634170999999924,79.345534999999984],[-77.707503999999972,79.343323000000055],[-77.739990000000034,79.344437000000084],[-77.769729999999981,79.346375000000023],[-77.819732999999985,79.351653999999996],[-77.905272999999909,79.365265000000136],[-77.922501000000011,79.366379000000109],[-77.957229999999981,79.363876000000118],[-78.051391999999964,79.354706000000078],[-78.058883999999978,79.349426000000051],[-78.043610000000001,79.344437000000084],[-78.021392999999932,79.339980999999966],[-77.903335999999967,79.322495000000004],[-77.876099000000011,79.319717000000026],[-77.846114999999998,79.317764000000068],[-77.809998000000007,79.316665999999998],[-77.760009999999966,79.316375999999991],[-77.726944000000003,79.317490000000134],[-77.650833000000034,79.317764000000068],[-77.624434999999949,79.315536000000122],[-77.529175000000009,79.30525200000011],[-77.478607000000011,79.29664600000001],[-77.322234999999978,79.267487000000017],[-77.329178000000013,79.261383000000137],[-77.341384999999946,79.259430000000009],[-77.358046999999942,79.257767000000115],[-77.422226000000023,79.254714999999976],[-77.453063999999983,79.252487000000031],[-77.482223999999974,79.248871000000008],[-77.496947999999918,79.24581900000004],[-77.488051999999982,79.244980000000112],[-77.424712999999997,79.246094000000085],[-77.358336999999949,79.249999999999943],[-77.191939999999988,79.263885000000073],[-76.999725000000012,79.273315000000139],[-76.671386999999925,79.277481000000023],[-76.237777999999935,79.271103000000039],[-76.168059999999969,79.269989000000066],[-76.136123999999995,79.268600000000106],[-76.105834999999956,79.265823000000012],[-76.068619000000012,79.25749200000007],[-76.052779999999984,79.251099000000124],[-76.03443900000002,79.24581900000004],[-75.991942999999992,79.236374000000012],[-75.938889000000017,79.230270000000132],[-75.807495000000017,79.227768000000083],[-75.777221999999938,79.227478000000076],[-75.734436000000017,79.229431000000034],[-75.675277999999992,79.236374000000012],[-75.637786999999946,79.239426000000094],[-75.608336999999949,79.239975000000072],[-75.465012000000002,79.239975000000072],[-75.405837999999903,79.237487999999985],[-75.083068999999966,79.235260000000039],[-74.876099000000011,79.238037000000134],[-74.800277999999992,79.240540000000067],[-74.777221999999995,79.240265000000079],[-74.52555799999999,79.227203000000031],[-74.496947999999975,79.224990999999989],[-74.47084000000001,79.22164900000007],[-74.464721999999995,79.219986000000119],[-74.467223999999987,79.215546000000131],[-74.474166999999966,79.211928999999998],[-74.520279000000016,79.203048999999965],[-74.571944999999914,79.196091000000138],[-74.601944000000003,79.192748999999992],[-74.758057000000008,79.18553200000008],[-74.791945999999996,79.182754999999986],[-74.817504999999926,79.17886400000009],[-74.826950000000011,79.174149000000057],[-74.819167999999934,79.167755000000056],[-74.795546999999999,79.163605000000018],[-74.766952999999944,79.161377000000073],[-74.672501000000011,79.156937000000028],[-74.617492999999854,79.151381999999955],[-74.445830999999941,79.065810999999997],[-74.436661000000015,79.0577550000001],[-74.443053999999961,79.046936000000073],[-74.455276000000026,79.041655999999989],[-74.47193900000002,79.036652000000004],[-74.514450000000011,79.028595000000053],[-74.543883999999991,79.025269000000037],[-74.578339000000028,79.023314999999968],[-74.654175000000009,79.022217000000069],[-74.725005999999951,79.022766000000047],[-74.960007000000019,79.028320000000008],[-75.116104000000007,79.035812000000135],[-75.243057000000022,79.043045000000006],[-75.626662999999951,79.066086000000041],[-75.655563000000029,79.068328999999949],[-75.763335999999981,79.080551000000128],[-75.885284000000013,79.097488000000112],[-75.891387999999949,79.102203000000145],[-75.887221999999952,79.12831100000011],[-75.880829000000006,79.134995000000004],[-75.856658999999979,79.139708999999925],[-75.848617999999988,79.14498900000001],[-75.857772999999952,79.152205999999921],[-75.944442999999922,79.173035000000084],[-76.047774999999945,79.192200000000071],[-76.071670999999924,79.196091000000138],[-76.098052999999993,79.199141999999995],[-76.132767000000001,79.199706999999989],[-76.309433000000013,79.190811000000053],[-76.519164999999987,79.190262000000132],[-76.859160999999972,79.185257000000092],[-76.973327999999924,79.183318999999926],[-77.044998000000021,79.183318999999926],[-77.083069000000023,79.183593999999971],[-77.111663999999962,79.184982000000048],[-77.167496000000028,79.189972000000125],[-77.205001999999979,79.195251000000098],[-77.250564999999995,79.198029000000076],[-77.388901000000033,79.199706999999989],[-77.510833999999988,79.194976999999994],[-77.548049999999932,79.194427000000132],[-77.642501999999922,79.199706999999989],[-77.695267000000001,79.204712000000029],[-77.749999999999886,79.208328000000108],[-77.777495999999928,79.208878000000141],[-77.817504999999983,79.207763999999997],[-78.158889999999985,79.189972000000125],[-78.213622999999984,79.183593999999971],[-78.233321999999987,79.17886400000009],[-78.245833999999945,79.174698000000035],[-78.25389100000001,79.169983000000002],[-78.253066999999987,79.164428999999984],[-78.228607000000011,79.160538000000088],[-78.181670999999994,79.159424000000115],[-78.084732000000031,79.168045000000063],[-78.056106999999997,79.171921000000111],[-78.026397999999972,79.174698000000035],[-77.988892000000021,79.177475000000129],[-77.912216000000001,79.17942800000003],[-77.842772999999966,79.178589000000102],[-77.47193900000002,79.167755000000056],[-77.237777999999992,79.156937000000028],[-77.208617999999944,79.154709000000082],[-77.181106999999997,79.153869999999927],[-77.018615999999952,79.153595000000109],[-76.841949,79.153595000000109],[-76.706115999999952,79.153045999999961],[-76.639998999999989,79.15109300000006],[-76.61082499999992,79.149155000000121],[-76.484725999999966,79.136108000000092],[-76.430557000000022,79.132202000000007],[-76.319732999999928,79.124695000000088],[-76.260009999999909,79.121917999999994],[-76.233611999999937,79.121642999999949],[-76.191375999999934,79.123596000000077],[-76.15972899999997,79.122208000000001],[-76.136672999999973,79.11914100000007],[-76.081954999999994,79.099716000000114],[-76.085006999999905,79.093323000000112],[-76.099990999999875,79.08776899999998],[-76.116652999999928,79.083328000000051],[-76.146666999999979,79.077774000000034],[-76.170546999999885,79.075821000000076],[-76.210006999999962,79.074707000000103],[-76.265014999999948,79.074432000000115],[-76.360001000000011,79.078323000000012],[-76.515015000000005,79.085815000000082],[-76.575561999999991,79.089432000000045],[-76.637222000000008,79.090546000000018],[-76.676391999999964,79.089432000000045],[-76.828339000000028,79.082764000000111],[-76.996383999999978,79.074707000000103],[-77.073333999999932,79.070831000000055],[-77.152785999999992,79.066086000000041],[-77.223052999999993,79.060532000000023],[-77.326950000000011,79.051651000000106],[-77.355559999999969,79.048325000000034],[-77.429717999999923,79.037200999999982],[-77.449431999999945,79.032760999999937],[-77.464721999999995,79.027771000000087],[-77.49499499999996,79.017761000000007],[-77.529175000000009,79.018051000000014],[-77.693054000000018,79.033600000000092],[-77.719727000000034,79.036652000000004],[-77.742217999999923,79.041930999999977],[-77.783066000000019,79.062484999999981],[-77.799987999999928,79.066666000000055],[-77.84973100000002,79.069717000000082],[-77.919723999999917,79.068878000000097],[-78.035004000000015,79.065536000000009],[-78.103333000000021,79.066086000000041],[-78.135009999999966,79.067490000000021],[-78.165282999999931,79.06999200000007],[-78.214447000000007,79.075271999999984],[-78.234160999999858,79.078323000000012],[-78.289992999999981,79.083328000000051],[-78.351105000000018,79.086380000000133],[-78.425277999999992,79.083054000000118],[-78.671386999999982,79.071930000000009],[-78.818343999999968,79.069442999999978],[-78.860000999999954,79.067214999999976],[-78.891387999999893,79.063309000000118],[-78.879439999999931,79.060256999999979],[-78.692489999999964,79.058594000000085],[-78.588332999999977,79.059143000000006],[-78.405272999999966,79.064987000000031],[-78.283889999999985,79.066666000000055],[-78.236388999999974,79.064987000000031],[-78.15972899999997,79.051086000000055],[-78.108337000000006,79.04664600000001],[-78.070557000000008,79.04664600000001],[-77.966110000000015,79.049149],[-77.86111499999987,79.049149],[-77.829453000000001,79.048035000000027],[-77.799437999999896,79.045258000000103],[-77.785552999999993,79.041092000000049],[-77.708344000000011,79.013046000000145],[-77.703339000000028,79.006943000000035],[-77.71665999999999,79.003326000000072],[-77.796111999999937,78.988586000000112],[-77.835007000000019,78.979431000000034],[-77.946945000000028,78.951660000000004],[-77.946380999999917,78.945815999999979],[-77.952498999999932,78.939697000000137],[-78.040282999999988,78.906097000000045],[-78.147506999999962,78.865265000000079],[-78.282227000000034,78.80386400000009],[-78.289992999999981,78.799149000000057],[-78.297226000000023,78.788879000000122],[-78.296111999999937,78.783051],[-78.285552999999993,78.775818000000015],[-78.269454999999937,78.772491000000059],[-78.248046999999929,78.770263999999997],[-78.215560999999923,78.770537999999931],[-78.196105999999929,78.772217000000126],[-78.168334999999956,78.780823000000055],[-78.15972899999997,78.784988000000055],[-78.15943900000002,78.789978000000133],[-78.145843999999954,78.800812000000008],[-78.129439999999988,78.812194999999974],[-78.105269999999905,78.828598000000056],[-78.042769999999962,78.861649],[-78.029174999999896,78.867477000000122],[-77.902221999999995,78.91276600000009],[-77.887222000000008,78.917755000000056],[-77.75167799999997,78.95748900000001],[-77.711944999999957,78.966095000000109],[-77.689437999999996,78.968596999999988],[-77.526397999999972,78.979156000000046],[-77.370270000000005,78.984421000000111],[-77.258346999999958,78.986374000000069],[-77.177490000000034,78.989700000000084],[-77.107497999999964,78.99552900000009],[-77.078888000000006,78.998871000000065],[-77.026107999999965,79.006652999999972],[-76.960281000000009,79.012772000000041],[-76.75418099999996,79.027771000000087],[-76.710555999999997,79.028320000000008],[-76.683318999999983,79.027771000000087],[-76.424163999999962,79.022491000000002],[-76.361389000000031,79.019714000000135],[-75.98971599999993,78.99552900000009],[-75.732223999999974,78.969147000000021],[-75.720276000000013,78.965545999999961],[-75.769454999999994,78.939971999999955],[-75.781113000000005,78.934708000000001],[-75.796951000000035,78.929703000000131],[-75.825561999999991,78.926085999999998],[-75.858611999999937,78.923309000000074],[-75.896118000000001,78.920821999999987],[-76.095276000000013,78.910262999999986],[-76.25,78.902205999999978],[-76.287215999999944,78.899719000000118],[-76.315552000000025,78.896103000000039],[-76.335555999999997,78.891663000000051],[-76.375548999999921,78.882750999999985],[-76.415008999999998,78.873870999999951],[-76.446105999999929,78.863876000000062],[-76.456389999999942,78.857758000000103],[-76.460007000000019,78.851929000000098],[-76.458343999999897,78.844986000000119],[-76.440276999999924,78.839432000000102],[-76.41194200000001,78.837203999999986],[-76.394454999999937,78.840820000000008],[-76.391113000000018,78.843872000000147],[-76.37470999999988,78.851089000000059],[-76.344727000000034,78.858871000000022],[-76.330001999999979,78.861649],[-76.231673999999998,78.879149999999981],[-76.204726999999991,78.881088000000091],[-76.178329000000019,78.880264000000125],[-76.15834000000001,78.879149999999981],[-76.133330999999998,78.876648000000046],[-76.077498999999989,78.873032000000023],[-75.975006000000008,78.872756999999979],[-75.791671999999949,78.884155000000021],[-75.461120999999991,78.891372999999987],[-75.316101000000003,78.892211999999972],[-75.292220999999927,78.890274000000034],[-75.180557000000022,78.879149999999981],[-74.964721999999995,78.856094000000098],[-74.775009000000011,78.829987000000074],[-74.760559000000001,78.823607999999979],[-74.752791999999943,78.816940000000045],[-74.719726999999978,78.707489000000066],[-74.727218999999934,78.701385000000016],[-74.755844000000025,78.69802900000002],[-74.823059000000001,78.697478999999987],[-74.84333799999996,78.693039000000113],[-74.86999499999996,78.675812000000121],[-74.869445999999925,78.668594000000098],[-74.857773000000009,78.636107999999979],[-74.819457999999884,78.627472000000068],[-74.789992999999981,78.591370000000097],[-74.862212999999997,78.56721500000009],[-74.878052000000025,78.562485000000038],[-75.024169999999913,78.531937000000084],[-75.048049999999989,78.528046000000018],[-75.072509999999909,78.52777100000003],[-75.079453000000001,78.533875000000023],[-75.101394999999968,78.53776600000009],[-75.131377999999927,78.539153999999996],[-75.16722099999987,78.539703000000145],[-75.200287000000003,78.537491000000102],[-75.219726999999978,78.533051000000057],[-75.235275000000001,78.528046000000018],[-75.261672999999973,78.523315000000082],[-75.290557999999919,78.520537999999988],[-75.479445999999996,78.50999500000006],[-75.830001999999979,78.504715000000147],[-75.888335999999924,78.506103999999993],[-75.965011999999888,78.510818000000086],[-75.989990000000034,78.513885000000016],[-76.030563000000029,78.521103000000039],[-76.073058999999944,78.529709000000139],[-76.095550999999944,78.533600000000035],[-76.120270000000005,78.536652000000117],[-76.151107999999965,78.538589000000002],[-76.404448999999886,78.548035000000141],[-76.437209999999993,78.548599000000081],[-76.468886999999938,78.54553199999998],[-76.642775999999969,78.528320000000122],[-76.684433000000013,78.522217000000012],[-76.691101000000003,78.518875000000094],[-76.692764000000011,78.514708999999982],[-76.693603999999993,78.509720000000016],[-76.684997999999894,78.505829000000119],[-76.668335000000013,78.503875999999991],[-76.645844000000011,78.502777000000037],[-76.539992999999981,78.503325999999959],[-76.468338000000017,78.505264000000125],[-76.36471599999993,78.513321000000076],[-76.324722000000008,78.515274000000034],[-76.289444000000003,78.515549000000021],[-76.261948000000018,78.513611000000083],[-76.243057000000022,78.512207000000103],[-76.124999999999943,78.494141000000127],[-76.114165999999955,78.488312000000121],[-76.112777999999878,78.481094000000098],[-76.108886999999982,78.474990999999989],[-76.100554999999986,78.468322999999998],[-76.081679999999949,78.464432000000102],[-76.057495000000017,78.461929000000112],[-75.761123999999995,78.443862999999965],[-75.61721799999998,78.43803400000013],[-75.49888599999997,78.433044000000052],[-75.443603999999993,78.430542000000003],[-75.410827999999924,78.426651000000106],[-75.269729999999925,78.404160000000104],[-75.089995999999985,78.368866000000025],[-75.031386999999995,78.331375000000037],[-75.038329999999917,78.325546000000031],[-75.051940999999886,78.315810999999997],[-75.0625,78.309708000000001],[-75.086670000000026,78.306366000000082],[-75.189986999999974,78.299713000000111],[-75.22193900000002,78.300262000000032],[-75.246108999999933,78.303314],[-75.273055999999883,78.305542000000116],[-75.307495000000017,78.305542000000116],[-75.358611999999937,78.301651000000049],[-75.377212999999983,78.29664600000001],[-75.385009999999909,78.291367000000037],[-75.392226999999934,78.285262999999986],[-75.39805599999994,78.272491000000002],[-75.479172000000005,78.222214000000122],[-75.494155999999975,78.217209000000082],[-75.513335999999924,78.212769000000037],[-75.582503999999915,78.201096000000007],[-75.61361699999992,78.198029000000076],[-75.650283999999942,78.196930000000123],[-75.679442999999992,78.198318000000029],[-75.776397999999972,78.210541000000092],[-75.902495999999928,78.224152000000061],[-75.985549999999932,78.229979999999955],[-76.157227000000034,78.240540000000124],[-76.188888999999961,78.241089000000045],[-76.225829999999974,78.239975000000072],[-76.291945999999996,78.234421000000054],[-76.324447999999961,78.23275799999999],[-76.361389000000031,78.231658999999979],[-76.393065999999976,78.232208000000128],[-76.474715999999944,78.239425999999924],[-76.520278999999903,78.24552900000009],[-76.548049999999876,78.248322000000087],[-76.574172999999917,78.249709999999993],[-76.608336999999949,78.249419999999986],[-76.630554000000018,78.247757000000036],[-76.831680000000006,78.230820000000051],[-76.855269999999962,78.227478000000076],[-76.888061999999991,78.21804800000001],[-76.898620999999935,78.212494000000049],[-76.912216000000001,78.201096000000007],[-76.90834000000001,78.195525999999916],[-76.883330999999941,78.191925000000083],[-76.688599000000011,78.168869000000029],[-76.664444000000003,78.166092000000106],[-76.641678000000013,78.164429000000041],[-76.537780999999939,78.158324999999991],[-76.021392999999989,78.138046000000031],[-75.763900999999976,78.131653000000085],[-75.735549999999989,78.1308140000001],[-75.621933000000013,78.1244200000001],[-75.59722899999997,78.12081900000004],[-75.581389999999942,78.115814],[-75.575561999999934,78.107758000000103],[-75.575287000000003,78.101379000000065],[-75.588897999999972,78.089432000000102],[-75.599166999999909,78.083328000000051],[-75.692763999999954,78.039978000000076],[-75.707503999999915,78.034988000000055],[-75.723052999999993,78.030823000000055],[-75.761123999999995,78.022491000000059],[-75.809433000000013,78.008331000000112],[-75.838608000000022,77.998322000000087],[-75.922775000000001,77.956650000000081],[-75.965011999999888,77.973037999999917],[-75.984160999999858,77.977478000000133],[-76.157227000000034,78.012497000000053],[-76.214721999999995,78.01527399999992],[-76.246108999999933,78.015823000000069],[-76.276672000000019,78.012772000000041],[-76.303054999999972,78.009430000000123],[-76.444716999999912,77.988586000000112],[-76.466949,77.984710999999947],[-76.481383999999935,77.979706000000078],[-76.491942999999992,77.968597000000045],[-76.499725000000012,77.958327999999995],[-76.526108000000022,77.949142000000052],[-76.548339999999996,77.944977000000051],[-76.595839999999953,77.939697000000137],[-76.669998000000021,77.936371000000122],[-76.694442999999865,77.937195000000088],[-76.730559999999912,77.936096000000077],[-76.757232999999985,77.93331900000004],[-76.780288999999925,77.929977000000065],[-76.802490000000034,77.920258000000103],[-76.805557000000022,77.917205999999965],[-76.806945999999925,77.91304000000008],[-76.825287000000003,77.908325000000048],[-76.86221299999994,77.90277100000003],[-76.93110699999994,77.901382000000069],[-76.959731999999974,77.902481000000023],[-76.986114999999927,77.904708999999968],[-77.036391999999921,77.909714000000008],[-77.077788999999939,77.915817000000004],[-77.089171999999962,77.919708000000071],[-77.095276000000013,77.927199999999971],[-77.104172000000005,77.934417999999994],[-77.120269999999891,77.939148000000046],[-77.160003999999901,77.946091000000024],[-77.210830999999985,77.949142000000052],[-77.244445999999982,77.948593000000074],[-77.272232000000031,77.946365000000128],[-77.298339999999996,77.942749000000106],[-77.336120999999991,77.94081099999994],[-77.838897999999972,77.942749000000106],[-77.997498000000007,77.957214000000022],[-78.03694200000001,77.966384999999946],[-78.140838999999914,77.985260000000096],[-78.162216000000001,77.988312000000008],[-78.237502999999947,77.995818999999983],[-78.260833999999932,77.995254999999986],[-78.411391999999921,77.917755000000113],[-78.420837000000006,77.912491000000102],[-78.426391999999964,77.90637200000009],[-78.419723999999974,77.898880000000133],[-78.410552999999936,77.892211999999972],[-78.330840999999907,77.868591000000094],[-78.317107999999962,77.865814],[-78.282500999999968,77.862762000000089],[-78.260283999999899,77.861374000000012],[-78.173889000000031,77.859984999999995],[-78.139450000000011,77.857208000000128],[-77.97193900000002,77.807204999999954],[-77.958617999999888,77.802200000000084],[-77.947768999999994,77.796371000000079],[-77.940826000000015,77.765549000000021],[-77.940551999999968,77.759995000000004],[-77.981109999999887,77.701385000000073],[-77.920272999999952,77.669983000000116],[-77.882767000000001,77.661652000000004],[-77.862777999999992,77.656372000000147],[-77.742766999999958,77.622208000000114],[-77.724716000000001,77.613312000000008],[-77.718612999999948,77.605820000000051],[-77.723052999999936,77.599152000000061],[-77.730835000000013,77.597214000000122],[-77.87222300000002,77.568329000000119],[-77.952224999999999,77.555817000000104],[-77.958343999999954,77.529709000000139],[-77.944442999999978,77.511383000000137],[-77.946105999999986,77.504714999999976],[-77.948607999999979,77.501938000000109],[-77.981673999999998,77.486374000000012],[-77.99499499999996,77.481094000000098],[-78.256667999999934,77.381926999999962],[-78.303878999999995,77.373306000000071],[-78.690552000000025,77.315535999999952],[-78.741104000000007,77.309418000000051],[-78.777221999999995,77.307205000000067],[-78.806655999999975,77.307205000000067],[-78.834166999999923,77.30831900000004],[-78.839721999999995,77.310256999999979],[-78.833069000000023,77.314987000000031],[-78.786117999999988,77.335815000000082],[-78.733886999999982,77.362762000000032],[-78.726944000000003,77.367477000000065],[-78.725280999999995,77.371094000000028],[-78.727782999999988,77.375259000000028],[-78.764449999999954,77.3808140000001],[-78.784438999999907,77.3808140000001],[-78.816665999999998,77.378036000000122],[-78.841110000000015,77.374420000000043],[-78.861663999999962,77.370255000000043],[-78.89805599999994,77.360809000000074],[-78.920273000000009,77.350815000000068],[-78.939986999999917,77.338882000000012],[-78.948043999999982,77.332489000000066],[-78.955565999999919,77.328322999999955],[-78.968338000000017,77.323317999999915],[-79.00418099999996,77.313873000000058],[-79.083327999999995,77.299987999999985],[-79.139724999999999,77.293594000000098],[-79.171386999999868,77.290817000000004],[-79.207229999999981,77.288315000000125],[-79.270554000000004,77.286926000000108],[-79.321670999999924,77.288589000000059],[-79.373321999999973,77.29304499999995],[-79.493332000000009,77.304428000000144],[-79.631377999999984,77.316666000000055],[-79.653885000000002,77.318603999999993],[-79.712218999999948,77.318328999999949],[-79.83666999999997,77.306931000000134],[-79.860824999999977,77.303314],[-79.881942999999978,77.299713000000111],[-79.896118000000001,77.295822000000044],[-79.92332499999992,77.285263000000043],[-79.960555999999883,77.276932000000102],[-79.988327000000027,77.273604999999975],[-80.01916499999993,77.272217000000069],[-80.042495999999971,77.272766000000047],[-80.456116000000009,77.296097000000088],[-80.753341999999918,77.330551000000128],[-80.775833000000034,77.334427000000005],[-80.879714999999919,77.353043000000014],[-81.005568999999923,77.377197000000137],[-81.015288999999996,77.381363000000022],[-81.019454999999994,77.392761000000064],[-81.027221999999995,77.398041000000092],[-81.035277999999948,77.40109300000006],[-81.095276000000013,77.411925999999994],[-81.121108999999933,77.413605000000018],[-81.150833000000034,77.413605000000018],[-81.207778999999903,77.415817000000061],[-81.254729999999995,77.420532000000094],[-81.277495999999928,77.42442299999999],[-81.294448999999929,77.429153000000042],[-81.310546999999985,77.434982000000048],[-81.316665999999998,77.438873000000115],[-81.321121000000005,77.450272000000041],[-81.325287000000003,77.454987000000074],[-81.337509000000011,77.462769000000037],[-81.351669000000015,77.469711000000075],[-81.370543999999938,77.475540000000137],[-81.388901000000033,77.480819999999994],[-81.442215000000033,77.491364000000033],[-81.533889999999928,77.506942999999978],[-81.573623999999938,77.512771999999984],[-81.587783999999942,77.517487000000017],[-81.589721999999995,77.520828000000051],[-81.608337000000006,77.553588999999988],[-81.610549999999989,77.576096000000064],[-81.820281999999963,77.621918000000107],[-81.839721999999938,77.625809000000004],[-81.845001000000025,77.628860000000032],[-81.848617999999988,77.639434999999935],[-81.847778000000005,77.643326000000002],[-81.836670000000026,77.65498400000007],[-81.847503999999901,77.665817000000004],[-81.860000999999954,77.671371000000022],[-81.876662999999951,77.677475000000072],[-81.89527899999996,77.682480000000112],[-81.913894999999911,77.685532000000023],[-81.928329000000019,77.685806000000127],[-81.930283000000031,77.684981999999991],[-81.935546999999929,77.678040000000067],[-81.949158000000011,77.655258000000003],[-81.949431999999945,77.644989000000123],[-81.911391999999921,77.609421000000111],[-81.895844000000011,77.604156000000046],[-81.857223999999974,77.598877000000073],[-81.810271999999941,77.595260999999994],[-81.798049999999989,77.59165999999999],[-81.787506000000008,77.587494000000049],[-81.678054999999972,77.538315000000068],[-81.670546999999942,77.531662000000097],[-81.667220999999984,77.52526899999998],[-81.666945999999996,77.502213000000097],[-81.670836999999949,77.496094000000085],[-81.690276999999924,77.485260000000039],[-81.710555999999997,77.474990999999989],[-81.71945199999999,77.469986000000119],[-81.748046999999929,77.448029000000076],[-81.743606999999997,77.441086000000098],[-81.739440999999999,77.436371000000065],[-81.728881999999999,77.429977000000008],[-81.700561999999877,77.422760000000096],[-81.523620999999991,77.378036000000122],[-81.484726000000023,77.372208000000001],[-81.432220000000029,77.368042000000059],[-81.336670000000026,77.368591000000038],[-81.25140399999998,77.36914100000007],[-81.203888000000006,77.370529000000147],[-81.189986999999917,77.368042000000059],[-81.178054999999972,77.360259999999926],[-81.172775000000001,77.354705999999965],[-81.167769999999962,77.342758000000117],[-81.165833000000021,77.337204000000099],[-81.165833000000021,77.332764000000054],[-81.169448999999986,77.32249500000006],[-81.283889999999985,77.315262000000018],[-81.425003000000004,77.306366000000082],[-81.538329999999974,77.302765000000079],[-81.874999999999943,77.292480000000126],[-81.953887999999949,77.302200000000028],[-82.091948999999943,77.316376000000048],[-82.151397999999972,77.303864000000033],[-82.166107000000011,77.292480000000126],[-82.081680000000006,77.272766000000047],[-82.043335000000013,77.265548999999908],[-81.978881999999999,77.258331000000112],[-81.90695199999999,77.198318000000029],[-81.906577999999968,77.1933140000001],[-81.902221999999995,77.187195000000031],[-81.876099000000011,77.174698000000092],[-81.868057000000022,77.171646000000123],[-81.834166999999866,77.162491000000102],[-81.796660999999972,77.157486000000063],[-81.78694200000001,77.157486000000063],[-81.715835999999967,77.176926000000037],[-81.696654999999907,77.181366000000025],[-81.634444999999971,77.193863000000022],[-81.607497999999964,77.197479000000101],[-81.395003999999972,77.231659000000036],[-81.149170000000026,77.274703999999986],[-80.960281000000009,77.271378000000141],[-80.592772999999966,77.242477000000008],[-80.526397999999915,77.234985000000052],[-80.280288999999868,77.213608000000022],[-80.258621000000005,77.212204000000042],[-80.205840999999964,77.209427000000119],[-80.154998999999975,77.208037999999931],[-80.135833999999988,77.205826000000059],[-80.116104000000007,77.20138500000013],[-80.114715999999987,77.195525999999973],[-80.136947999999961,77.186096000000077],[-80.152785999999992,77.181656000000032],[-80.255004999999983,77.153320000000122],[-80.401671999999962,77.086655000000007],[-80.40972899999997,77.081100000000106],[-80.40972899999997,77.076660000000118],[-80.394454999999937,77.072769000000051],[-80.373046999999929,77.071380999999917],[-80.34584000000001,77.074996999999996],[-80.328063999999927,77.078323000000012],[-80.206954999999937,77.108597000000088],[-80.159438999999963,77.122756999999979],[-80.135009999999966,77.139435000000049],[-80.118606999999997,77.150818000000072],[-80.094726999999978,77.161102000000085],[-80.072509999999909,77.17053199999998],[-80.013335999999924,77.190536000000066],[-79.93582200000003,77.206650000000025],[-79.785278000000005,77.231368999999972],[-79.725829999999917,77.239975000000072],[-79.660277999999948,77.24443100000002],[-79.633057000000008,77.243317000000047],[-79.445540999999992,77.234421000000111],[-79.424163999999905,77.233047000000113],[-79.255004999999983,77.218596999999988],[-79.216949,77.209717000000126],[-79.041945999999882,77.161102000000085],[-79.033066000000019,77.156647000000078],[-79.02806099999998,77.150543000000027],[-79.003890999999953,77.103592000000049],[-79.005004999999926,77.09693900000002],[-79.013335999999924,77.09137000000004],[-79.029723999999987,77.086929000000112],[-79.132492000000013,77.053589000000045],[-79.328888000000006,76.978591999999935],[-79.365554999999915,76.963318000000072],[-79.376663000000008,76.957489000000066],[-79.391387999999949,76.947204999999997],[-79.395003999999915,76.940536000000122],[-79.393065999999976,76.934143000000006],[-79.386948000000018,76.927475000000015],[-79.37222300000002,76.923309000000131],[-79.34584000000001,76.91804500000012],[-79.317504999999926,76.917755000000113],[-79.244445999999925,76.924987999999928],[-79.193053999999904,76.929152999999928],[-79.005843999999911,76.936096000000134],[-78.980835000000013,76.936371000000122],[-78.954178000000013,76.935256999999979],[-78.886123999999995,76.926926000000094],[-78.870834000000002,76.922211000000061],[-78.866394000000014,76.918869000000086],[-78.910004000000015,76.886658000000011],[-78.915282999999988,76.839706000000092],[-78.748336999999935,76.822494999999947],[-78.721938999999963,76.821380999999974],[-78.712218999999948,76.823318000000029],[-78.708053999999947,76.824997000000053],[-78.56361400000003,76.906647000000135],[-78.566101000000003,76.913605000000132],[-78.567504999999983,76.927200000000028],[-78.562774999999874,76.933043999999995],[-78.553878999999938,76.938582999999994],[-78.547775000000001,76.941360000000088],[-78.384444999999914,76.99971000000005],[-78.344161999999926,77.007767000000001],[-78.32028200000002,77.011658000000068],[-78.292770000000019,77.014709000000096],[-78.196944999999971,77.019440000000031],[-78.140838999999914,77.01998900000001],[-78.087219000000005,77.017761000000007],[-78.07028200000002,77.014434999999992],[-77.896666999999979,76.955551000000128],[-77.886947999999961,76.947754000000145],[-77.881103999999993,76.940262000000018],[-77.779448999999943,76.79136699999998],[-77.789443999999946,76.78166200000004],[-77.813323999999966,76.692748999999992],[-77.813613999999973,76.687759000000085],[-77.813048999999864,76.68193100000002],[-77.804992999999968,76.675261999999918],[-77.769454999999937,76.658325000000104],[-77.78443900000002,76.650269000000037],[-77.810271999999941,76.640823000000069],[-77.841110000000015,76.633331000000112],[-77.861663999999905,76.629700000000071],[-77.918335000000013,76.62831100000011],[-77.947219999999959,76.629425000000083],[-77.985000999999954,76.632476999999994],[-78.013625999999988,76.630814000000044],[-78.027495999999985,76.626922999999977],[-78.089721999999995,76.609420999999941],[-78.097777999999948,76.606094000000041],[-78.178328999999962,76.566085999999984],[-78.186110999999926,76.559708000000001],[-78.206107999999972,76.53914600000013],[-78.256667999999934,76.506653000000142],[-78.364440999999999,76.462493999999992],[-78.377486999999917,76.458038000000101],[-78.435103999999967,76.453171000000111],[-78.443328999999892,76.452209000000096],[-78.473052999999993,76.451660000000118],[-78.519164999999987,76.456940000000031],[-78.552490000000034,76.464157000000114],[-78.607772999999952,76.486649000000057],[-78.61471599999993,76.489975000000072],[-78.619445999999982,76.496094000000085],[-78.616942999999992,76.498871000000008],[-78.615004999999883,76.5],[-78.611388999999917,76.49941999999993],[-78.597228999999913,76.505264000000125],[-78.591949,76.5086060000001],[-78.588332999999977,76.513046000000088],[-78.613327000000027,76.547759999999982],[-78.627212999999927,76.563873000000001],[-78.75111400000003,76.572220000000016],[-78.773330999999985,76.572768999999937],[-78.790558000000033,76.571655000000135],[-78.868331999999953,76.521103000000096],[-78.886947999999961,76.497208000000057],[-78.900833000000034,76.478867000000093],[-78.937774999999988,76.449997000000053],[-78.946655000000021,76.444976999999994],[-78.96945199999999,76.43414300000012],[-78.994155999999975,76.424423000000047],[-79.013061999999991,76.420258000000047],[-79.06138599999997,76.41276600000009],[-79.090285999999992,76.411377000000073],[-79.139174999999966,76.411652000000117],[-79.170837000000006,76.409988000000112],[-79.18971299999987,76.405823000000112],[-79.198043999999868,76.400269000000094],[-79.261123999999995,76.352202999999975],[-79.265563999999927,76.346100000000035],[-79.266402999999968,76.339432000000102],[-79.262786999999946,76.331940000000145],[-79.254181000000017,76.320267000000115],[-79.25306699999993,76.314697000000024],[-79.261123999999995,76.309143000000063],[-79.272780999999952,76.304152999999985],[-79.312774999999988,76.297484999999995],[-79.338608000000022,76.296371000000022],[-79.365828999999962,76.296646000000067],[-79.414168999999902,76.301086000000055],[-79.445540999999992,76.306641000000127],[-79.500838999999928,76.314148000000102],[-79.525283999999886,76.31442300000009],[-79.573623999999995,76.311645999999996],[-79.596664000000033,76.308594000000085],[-79.805556999999965,76.278320000000065],[-79.924438000000009,76.25360100000006],[-80.061385999999914,76.226928999999984],[-80.087218999999948,76.223602000000085],[-80.107223999999974,76.2227630000001],[-80.121658000000025,76.224426000000051],[-80.136123999999995,76.228317000000118],[-80.156386999999881,76.23692299999999],[-80.178329000000019,76.239700000000084],[-80.203613000000018,76.240539999999953],[-80.230285999999978,76.239975000000129],[-80.261123999999995,76.238312000000008],[-80.2933349999999,76.235260000000096],[-80.338332999999977,76.228317000000118],[-80.366942999999992,76.218048000000067],[-80.375548999999921,76.213043000000027],[-80.383056999999951,76.20748900000001],[-80.396666999999923,76.202208999999982],[-80.412216000000001,76.198029000000133],[-80.426940999999886,76.195525999999973],[-80.506957999999941,76.196365000000128],[-80.606383999999991,76.191650000000095],[-80.627486999999917,76.187195000000088],[-80.637787000000003,76.17053199999998],[-80.639724999999885,76.167480000000069],[-80.654175000000009,76.162491000000102],[-80.672501000000011,76.158325000000048],[-80.703338999999971,76.156647000000078],[-80.949996999999996,76.144989000000066],[-81.053329000000019,76.128036000000009],[-81.075835999999924,76.129149999999981],[-81.085830999999928,76.134155000000021],[-81.090285999999935,76.137496999999939],[-81.095551,76.212204000000042],[-81.047501000000011,76.249419999999986],[-81.041106999999954,76.25360100000006],[-81.026397999999915,76.258331000000112],[-80.903885000000002,76.312194999999974],[-80.783614999999998,76.374985000000095],[-80.769454999999994,76.384720000000016],[-80.761123999999995,76.394150000000081],[-80.760009999999909,76.40415999999999],[-80.763625999999874,76.411102000000085],[-80.771666999999923,76.419144000000017],[-80.78472899999997,76.423874000000069],[-80.991668999999945,76.483047000000056],[-81.188889000000017,76.518875000000094],[-81.275008999999955,76.533325000000048],[-81.304169000000002,76.510544000000039],[-81.337218999999891,76.494980000000112],[-81.351944000000003,76.490265000000079],[-81.388901000000033,76.481368999999972],[-81.411117999999988,76.477478000000076],[-81.460830999999928,76.471374999999966],[-81.492492999999911,76.469437000000028],[-81.521941999999967,76.468596999999988],[-81.636948000000018,76.468872000000147],[-81.71665999999999,76.470260999999994],[-81.788605000000018,76.474700999999982],[-81.879990000000021,76.483871000000022],[-82.039718999999934,76.509430000000066],[-82.05860899999999,76.513610999999969],[-82.075835999999981,76.518600000000106],[-82.083617999999944,76.523879999999963],[-82.03195199999999,76.553588999999988],[-81.985000999999954,76.578597999999943],[-81.981948999999929,76.584717000000012],[-81.993331999999953,76.590270999999973],[-82.045273000000009,76.603592000000106],[-82.056655999999862,76.609146000000123],[-82.049438000000009,76.612488000000042],[-81.953338999999914,76.631927000000132],[-81.873610999999869,76.645828000000108],[-81.851394999999968,76.649719000000005],[-81.814163000000008,76.658599999999922],[-81.790282999999931,76.667755],[-81.782227000000034,76.672760000000039],[-81.776947000000007,76.677475000000072],[-81.778885000000002,76.681090999999924],[-81.785827999999924,76.685532000000023],[-81.799163999999962,76.685805999999957],[-81.819457999999997,76.682754999999986],[-81.838057999999933,76.678314000000057],[-81.852782999999988,76.673599000000024],[-81.861938000000009,76.669144000000017],[-81.893341000000021,76.660812000000021],[-82.081115999999952,76.631087999999977],[-82.115554999999915,76.628860000000032],[-82.145553999999947,76.628036000000066],[-82.199996999999996,76.628586000000098],[-82.273330999999928,76.633331000000112],[-82.292495999999971,76.635544000000095],[-82.326950000000011,76.641373000000101],[-82.346114999999998,76.645538000000101],[-82.377486999999917,76.657485999999949],[-82.442490000000021,76.684981999999991],[-82.470276000000013,76.698868000000004],[-82.476668999999958,76.704712000000029],[-82.487212999999997,76.717758000000117],[-82.580291999999986,76.776382000000012],[-82.596114999999998,76.782486000000006],[-82.698607999999979,76.812485000000038],[-82.725005999999951,76.819153000000028],[-82.749725000000012,76.818604000000107],[-82.767226999999991,76.813309000000004],[-82.769729999999925,76.811096000000077],[-82.76556399999987,76.808318999999983],[-82.74610899999999,76.804153000000042],[-82.728333000000021,76.799149000000114],[-82.698607999999979,76.788589000000002],[-82.640563999999983,76.766388000000006],[-82.556106999999997,76.723038000000031],[-82.558333999999945,76.718322999999998],[-82.566665999999941,76.707489000000123],[-82.569457999999941,76.701385000000073],[-82.562499999999943,76.688873000000058],[-82.545546999999942,76.674149000000057],[-82.533324999999991,76.666382000000056],[-82.460555999999997,76.636108000000036],[-82.435271999999998,76.628036000000066],[-82.415008999999884,76.62303199999991],[-82.308884000000035,76.609420999999941],[-82.208054000000004,76.593048000000067],[-82.113891999999908,76.572220000000016],[-82.102218999999991,76.568878000000041],[-82.081115999999952,76.561096000000134],[-82.093886999999995,76.557205000000067],[-82.175002999999947,76.546936000000017],[-82.196944999999971,76.542755000000113],[-82.211394999999925,76.53804000000008],[-82.22222899999997,76.532761000000107],[-82.225280999999995,76.526657000000057],[-82.224715999999887,76.520264000000111],[-82.222504000000015,76.514435000000105],[-82.216399999999965,76.5086060000001],[-82.189437999999882,76.486649000000057],[-82.158050999999944,76.466095000000053],[-82.147232000000031,76.461105000000032],[-82.135558999999944,76.453323000000069],[-82.131377999999927,76.448593000000017],[-82.127212999999927,76.441650000000038],[-82.132216999999912,76.436919999999986],[-82.162505999999951,76.421921000000111],[-82.17971799999998,76.416931000000091],[-82.209441999999967,76.409988000000112],[-82.260284000000013,76.398605000000089],[-82.293335000000013,76.395827999999995],[-82.348342999999943,76.395537999999988],[-82.483063000000016,76.396378000000027],[-82.704453000000001,76.386932000000058],[-82.833327999999881,76.397766000000104],[-82.990554999999915,76.426650999999993],[-83.003615999999965,76.429153000000042],[-83.0625,76.450272000000041],[-83.099730999999963,76.463882000000126],[-83.102492999999981,76.469437000000028],[-83.096953999999982,76.475814999999955],[-83.08944699999995,76.480819999999994],[-83.065001999999993,76.491089000000045],[-83.061935000000005,76.497208000000057],[-83.075012000000015,76.532761000000107],[-83.084441999999967,76.546370999999965],[-83.110001000000011,76.579987000000131],[-83.116652999999985,76.586105000000089],[-83.198607999999979,76.619431000000077],[-83.338897999999858,76.66415400000011],[-83.384170999999981,76.730819999999994],[-83.365279999999927,76.740540000000067],[-83.358611999999937,76.746094000000028],[-83.355834999999956,76.752213000000097],[-83.362212999999997,76.756103999999937],[-83.379989999999964,76.758881000000031],[-83.400833000000034,76.759995000000004],[-83.410003999999901,76.757767000000058],[-83.497498000000007,76.723876999999959],[-83.518340999999964,76.713318000000129],[-83.523620999999935,76.706649999999968],[-83.523330999999928,76.700821000000133],[-83.520553999999947,76.695251000000042],[-83.515014999999948,76.689972000000068],[-83.499161000000015,76.676651000000106],[-83.352218999999991,76.612488000000042],[-83.331116000000009,76.603317000000118],[-83.316101000000003,76.598037999999974],[-83.298614999999984,76.593048000000067],[-83.278060999999923,76.588318000000072],[-83.254181000000017,76.579437000000098],[-83.246383999999978,76.572768999999937],[-83.207503999999915,76.505553999999961],[-83.184432999999899,76.424988000000042],[-83.188323999999966,76.419434000000081],[-83.202224999999942,76.414428999999984],[-83.223617999999874,76.410537999999917],[-83.256667999999991,76.407486000000006],[-83.285827999999981,76.406372000000033],[-83.439986999999917,76.411102000000085],[-83.619995000000017,76.423599000000081],[-83.691100999999946,76.428863999999919],[-83.710555999999997,76.433044000000109],[-83.735000999999954,76.444138000000009],[-83.734160999999915,76.449141999999995],[-83.735275000000001,76.455826000000059],[-83.740554999999972,76.462769000000037],[-83.756667999999991,76.468596999999988],[-83.893616000000009,76.501663000000065],[-83.985001000000011,76.520538000000045],[-84.018616000000009,76.529433999999981],[-84.033614999999941,76.534714000000065],[-84.046660999999972,76.542205999999965],[-84.058334000000002,76.553040000000067],[-84.058884000000035,76.558868000000132],[-84.061661000000015,76.585266000000104],[-84.070846999999901,76.616653000000042],[-84.086670000000026,76.62414600000011],[-84.101944000000003,76.629425000000083],[-84.118880999999988,76.633880999999974],[-84.138610999999912,76.637772000000041],[-84.261123999999995,76.65554800000001],[-84.284438999999963,76.657760999999994],[-84.31082200000003,76.658325000000104],[-84.319732999999871,76.656096999999988],[-84.324722000000008,76.653320000000065],[-84.330841000000021,76.647491000000059],[-84.313323999999909,76.641098000000113],[-84.256667999999991,76.628586000000098],[-84.220551,76.622207999999944],[-84.202498999999932,76.617203000000075],[-84.193053999999961,76.609985000000108],[-84.194442999999978,76.606934000000081],[-84.216948999999886,76.571655000000135],[-84.249725000000012,76.536926000000108],[-84.248336999999992,76.530548000000124],[-84.24499499999996,76.524993999999936],[-84.221114999999941,76.510817999999972],[-84.208617999999888,76.505264000000125],[-84.192490000000021,76.49941999999993],[-84.179717999999923,76.49192800000003],[-84.180832000000009,76.484984999999995],[-84.195540999999935,76.45637499999998],[-84.205565999999976,76.451096000000007],[-84.215835999999967,76.448029000000076],[-84.236938000000009,76.443587999999977],[-84.489166000000012,76.429153000000042],[-84.518615999999952,76.427765000000136],[-84.570846999999958,76.428863999999919],[-84.619720000000029,76.431656000000032],[-84.636947999999961,76.434418000000107],[-84.652785999999992,76.438034000000016],[-84.783889999999985,76.469986000000119],[-84.792770000000019,76.474990999999989],[-84.785278000000005,76.485260000000039],[-84.783889999999985,76.489975000000072],[-84.795273000000009,76.503876000000048],[-84.848891999999921,76.53637700000013],[-84.860001000000011,76.542755000000113],[-84.950561999999934,76.577773999999977],[-84.970550999999944,76.581940000000088],[-84.991378999999938,76.582764000000054],[-85.016402999999912,76.578872999999987],[-85.028335999999967,76.57499700000011],[-85.034163999999976,76.569153000000085],[-85.051391999999964,76.514160000000061],[-85.022507000000019,76.456099999999992],[-84.970276000000013,76.426086000000112],[-84.960281000000009,76.42053199999998],[-84.944442999999978,76.416931000000091],[-84.904175000000009,76.411926000000051],[-84.728058000000033,76.390273999999977],[-84.43638599999997,76.338593000000117],[-84.397506999999962,76.330551000000128],[-84.381377999999927,76.324706999999933],[-84.376098999999954,76.317764000000125],[-84.381942999999978,76.31191999999993],[-84.393889999999999,76.308029000000033],[-84.413054999999986,76.304703000000018],[-84.429169000000002,76.303040000000067],[-84.533614999999941,76.30581699999999],[-84.716659999999933,76.306930999999963],[-84.776397999999972,76.303314],[-84.898055999999997,76.288589000000059],[-84.928328999999962,76.286377000000016],[-85.174438000000009,76.280272999999966],[-85.232223999999917,76.295257999999933],[-85.36221299999994,76.303314],[-85.505004999999983,76.321930000000066],[-85.523055999999883,76.326660000000061],[-85.544448999999986,76.329987000000017],[-85.698333999999988,76.34887700000013],[-85.952498999999932,76.368591000000038],[-85.978058000000033,76.370528999999976],[-86.004181000000017,76.37081900000004],[-86.110274999999945,76.368317000000104],[-86.134734999999978,76.369431000000077],[-86.281677000000002,76.376923000000033],[-86.330565999999976,76.3808140000001],[-86.37222300000002,76.38638300000008],[-86.412216000000001,76.40776100000005],[-86.415008999999884,76.41276600000009],[-86.421386999999925,76.456940000000031],[-86.418610000000001,76.469147000000021],[-86.409728999999913,76.474700999999982],[-86.398055999999997,76.478867000000093],[-86.378875999999991,76.483871000000022],[-86.36082499999992,76.487762000000089],[-86.307769999999948,76.49552900000009],[-86.277785999999935,76.5],[-86.256119000000012,76.503876000000048],[-86.22222899999997,76.513321000000133],[-86.213057999999933,76.518600000000106],[-86.20777899999996,76.524429000000112],[-86.211944999999957,76.535262999999986],[-86.226104999999961,76.542755000000113],[-86.532776000000013,76.623306000000014],[-86.594161999999983,76.634994999999947],[-86.63034099999993,76.635132000000112],[-86.625823999999966,76.629425000000083],[-86.601104999999961,76.619979999999998],[-86.512512000000015,76.586929000000055],[-86.36221299999994,76.541655999999932],[-86.342223999999987,76.512206999999933],[-86.508056999999894,76.487762000000089],[-86.64916999999997,76.458878000000141],[-86.664718999999991,76.419708000000014],[-86.711120999999991,76.348037999999974],[-86.71665999999999,76.346100000000035],[-86.770554000000004,76.350815000000068],[-87.083327999999995,76.379424999999912],[-87.130829000000006,76.384155000000135],[-87.148346000000004,76.388321000000076],[-87.154998999999975,76.39498900000001],[-87.154175000000009,76.40109300000006],[-87.225280999999995,76.448029000000076],[-87.426665999999898,76.468596999999988],[-87.462783999999942,76.586929000000055],[-87.468886999999995,76.59165999999999],[-87.520279000000016,76.612488000000042],[-87.53694200000001,76.617477000000008],[-87.563613999999973,76.616379000000109],[-87.580001999999979,76.611374000000069],[-87.583618000000001,76.604980000000012],[-87.598617999999988,76.540817000000004],[-87.595550999999944,76.534149000000014],[-87.553604000000007,76.451096000000007],[-87.545273000000009,76.443587999999977],[-87.53694200000001,76.439147999999989],[-87.516953000000001,76.432479999999998],[-87.500290000000007,76.428863999999919],[-87.455276000000026,76.423874000000069],[-87.429992999999911,76.417755000000056],[-87.402495999999985,76.352768000000026],[-87.416397000000018,76.348037999999974],[-87.591384999999889,76.341094999999996],[-87.648894999999868,76.338043000000084],[-87.719726999999978,76.343048000000124],[-87.742767000000015,76.34637500000008],[-87.760559000000001,76.352202999999975],[-87.788604999999961,76.366378999999995],[-87.817229999999995,76.390549000000021],[-87.864166000000012,76.38998400000014],[-87.900833000000034,76.363037000000077],[-87.916945999999996,76.359711000000004],[-87.948333999999988,76.357758000000103],[-87.997771999999998,76.358322000000044],[-88.351104999999905,76.384995000000004],[-88.389998999999875,76.389708999999982],[-88.42971799999998,76.398041000000148],[-88.434433000000013,76.402205999999978],[-88.391953000000001,76.454163000000108],[-88.371932999999956,76.476089000000059],[-88.355835000000013,76.481093999999928],[-88.348617999999988,76.487198000000149],[-88.349441999999954,76.514435000000105],[-88.356658999999979,76.521103000000096],[-88.442764000000011,76.59165999999999],[-88.515288999999939,76.636108000000036],[-88.509170999999981,76.697478999999987],[-88.488601999999958,76.765274000000034],[-88.479720999999927,76.776932000000045],[-88.476669000000015,76.783324999999991],[-88.474715999999887,76.788879000000009],[-88.474715999999887,76.794983000000002],[-88.477782999999988,76.807755000000043],[-88.485275000000001,76.814422999999977],[-88.494719999999973,76.81721500000009],[-88.518889999999999,76.816086000000098],[-88.541945999999939,76.812758999999971],[-88.554442999999935,76.807479999999998],[-88.557220000000029,76.805817000000104],[-88.701950000000011,76.707489000000123],[-88.683318999999983,76.701935000000105],[-88.649733999999967,76.684143000000063],[-88.591949,76.642761000000007],[-88.584441999999967,76.635818000000029],[-88.495543999999938,76.552199999999971],[-88.489440999999999,76.503326000000015],[-88.496383999999978,76.497208000000057],[-88.571670999999924,76.473602000000028],[-88.593558999999971,76.455933000000016],[-88.60321799999997,76.449265000000025],[-88.608214999999973,76.442261000000144],[-88.607727000000011,76.439095000000009],[-88.608611999999994,76.416092000000106],[-88.59973100000002,76.409988000000112],[-88.597503999999958,76.405823000000112],[-88.608046999999942,76.399994000000049],[-88.631942999999922,76.397217000000012],[-88.656386999999881,76.398330999999985],[-88.67721599999993,76.401932000000045],[-88.689986999999974,76.408324999999991],[-88.693603999999993,76.414703000000145],[-88.693329000000006,76.420821999999987],[-88.684998000000007,76.432479999999998],[-88.678054999999972,76.441650000000038],[-88.659508000000017,76.478706000000102],[-88.646506999999986,76.489212000000009],[-88.640288999999996,76.558594000000028],[-88.644164999999987,76.565262000000018],[-88.651672000000019,76.571930000000009],[-88.660277999999948,76.577773999999977],[-88.688888999999961,76.591369999999984],[-88.710006999999962,76.594986000000006],[-88.733611999999937,76.593872000000033],[-88.740828999999962,76.587769000000094],[-88.791381999999942,76.513321000000133],[-88.795273000000009,76.479431000000034],[-88.786666999999909,76.473602000000028],[-88.781386999999938,76.466385000000059],[-88.783324999999991,76.460815000000025],[-88.799438000000009,76.449997000000053],[-88.901671999999962,76.408324999999991],[-88.921111999999937,76.40525800000006],[-88.947220000000016,76.40525800000006],[-88.994155999999919,76.409149000000127],[-89.166396999999961,76.424423000000047],[-89.213332999999977,76.429703000000075],[-89.231673999999998,76.433593999999971],[-89.353333000000021,76.479979999999955],[-89.407227000000034,76.515823000000012],[-89.490279999999927,76.557480000000055],[-89.499435000000005,76.54664600000001],[-89.515015000000005,76.541655999999932],[-89.541381999999999,76.541655999999932],[-89.667220999999984,76.564423000000033],[-89.676665999999955,76.567215000000147],[-89.679442999999992,76.571655000000135],[-89.614166000000012,76.616089000000102],[-89.603607000000011,76.621918000000107],[-89.571945000000028,76.631653000000028],[-89.528335999999967,76.640823000000069],[-89.480559999999969,76.649428999999998],[-89.443329000000006,76.658325000000104],[-89.431380999999988,76.663605000000018],[-89.415558000000033,76.67442299999999],[-89.411666999999966,76.680266999999958],[-89.434432999999899,76.724426000000108],[-89.47222899999997,76.784714000000008],[-89.496947999999918,76.820267000000001],[-89.514449999999954,76.835815000000025],[-89.529175000000009,76.847214000000122],[-89.533324999999991,76.853592000000049],[-89.521392999999932,76.858871000000079],[-89.417770000000019,76.886658000000011],[-89.279449,76.906936999999971],[-89.238892000000021,76.916091999999992],[-89.14805599999994,76.925537000000077],[-88.986938000000009,76.954436999999928],[-88.976104999999961,76.959991000000116],[-88.898894999999982,76.985535000000141],[-88.769164999999987,76.998871000000065],[-88.740279999999927,77.00277699999998],[-88.719451999999933,77.007492000000013],[-88.702788999999939,77.012207000000046],[-88.50111400000003,77.071655000000078],[-88.473327999999981,77.096649000000014],[-88.544723999999917,77.098038000000031],[-88.545837000000006,77.100266000000147],[-88.426392000000021,77.12081900000004],[-88.307219999999973,77.128860000000088],[-88.278335999999911,77.129699999999957],[-88.172501000000011,77.128035999999952],[-88.154175000000009,77.116088999999988],[-87.967223999999931,77.127472000000012],[-87.690552000000025,77.135268999999994],[-87.670272999999952,77.133606000000043],[-87.656951999999933,77.130264000000125],[-87.642501999999979,77.124984999999924],[-87.626937999999996,77.117477000000122],[-87.619719999999973,77.110809000000131],[-87.568892999999889,77.099426000000108],[-87.455841000000021,77.101929000000098],[-87.349166999999966,77.106094000000098],[-87.337783999999886,77.110259999999982],[-87.353607000000011,77.114700000000028],[-87.37222300000002,77.117203000000018],[-87.451401000000033,77.122756999999979],[-87.460555999999997,77.125534000000073],[-87.456664999999987,77.131927000000019],[-87.452224999999999,77.136383000000137],[-87.432219999999973,77.149719000000061],[-87.416107000000011,77.156647000000078],[-87.404174999999896,77.160812000000078],[-87.356383999999991,77.17553700000002],[-87.33666999999997,77.179153000000099],[-87.312774999999988,77.180817000000104],[-87.069167999999991,77.182755000000043],[-87.044448999999929,77.180542000000059],[-86.959166999999979,77.161926000000051],[-86.951674999999966,77.158324999999991],[-86.946945000000028,77.154433999999924],[-86.951949999999897,77.149994000000106],[-86.951401000000033,77.144714000000022],[-86.942490000000021,77.141936999999928],[-86.875274999999931,77.132202000000063],[-86.829177999999956,77.127762000000018],[-86.804442999999992,77.127197000000024],[-86.791381999999999,77.130813999999987],[-86.739990000000034,77.174149000000114],[-86.773620999999935,77.185806000000071],[-86.960006999999962,77.195815999999979],[-87.15055799999999,77.199417000000039],[-87.148055999999997,77.198029000000133],[-87.146956999999929,77.195815999999979],[-87.161117999999931,77.194426999999962],[-87.182769999999948,77.196930000000123],[-87.196105999999929,77.199997000000053],[-87.21055599999994,77.205261000000064],[-87.174437999999896,77.229431000000034],[-87.166945999999939,77.233871000000079],[-87.141388000000006,77.238037000000134],[-87.007232999999985,77.255829000000006],[-86.976669000000015,77.257492000000127],[-86.948882999999967,77.255554000000018],[-86.928329000000019,77.255264000000011],[-86.910552999999936,77.260269000000051],[-86.919158999999979,77.266098000000056],[-86.947494999999947,77.271652000000074],[-86.984436000000017,77.274703999999986],[-87.012221999999952,77.274993999999992],[-87.078063999999927,77.273604999999975],[-87.106110000000001,77.272217000000069],[-87.136672999999973,77.272217000000069],[-87.183884000000035,77.273604999999975],[-87.197495000000004,77.27526899999998],[-87.229171999999949,77.285538000000031],[-87.245270000000005,77.298325000000034],[-87.24888599999997,77.303314],[-87.108611999999994,77.338318000000072],[-87.09584000000001,77.34027100000003],[-87.068618999999956,77.342209000000139],[-87.037780999999995,77.342209000000139],[-86.962783999999942,77.339157000000057],[-86.934722999999963,77.338882000000012],[-86.900283999999999,77.342209000000139],[-86.845839999999953,77.349152000000117],[-86.829726999999991,77.353043000000014],[-86.838608000000022,77.357483000000059],[-86.851944000000003,77.360535000000141],[-86.963332999999977,77.366378999999995],[-87.064162999999951,77.366928000000087],[-87.091109999999958,77.366378999999995],[-87.241378999999938,77.356094000000041],[-87.263061999999877,77.351654000000053],[-87.280838000000017,77.34693900000002],[-87.294158999999979,77.34165999999999],[-87.326110999999969,77.333878000000084],[-87.358886999999982,77.331375000000094],[-87.391112999999962,77.330551000000128],[-87.416397000000018,77.330826000000116],[-87.695830999999998,77.35554500000012],[-87.711945000000014,77.359985000000108],[-87.715835999999911,77.363312000000064],[-87.775283999999999,77.415543000000127],[-87.780288999999982,77.421097000000145],[-87.78472899999997,77.429703000000075],[-87.775009000000011,77.441360000000032],[-87.748336999999992,77.451660000000118],[-87.730834999999956,77.45637499999998],[-87.669539999999984,77.469238000000018],[-87.65194699999995,77.474990999999989],[-87.642501999999979,77.480270000000132],[-87.646117999999944,77.486923000000104],[-87.694442999999978,77.537201000000096],[-87.711120999999878,77.541656000000103],[-87.868880999999988,77.578598000000113],[-88.063048999999978,77.618866000000025],[-88.162216000000001,77.626923000000147],[-88.180556999999965,77.631927000000132],[-88.200835999999924,77.642761000000007],[-88.214721999999995,77.650542999999971],[-88.223617999999931,77.662490999999989],[-88.223052999999993,77.667206000000022],[-88.221114999999884,77.672760000000039],[-88.162780999999995,77.758330999999998],[-88.06806899999998,77.820267000000001],[-87.835830999999928,77.840271000000087],[-87.640563999999983,77.862487999999985],[-87.294723999999917,77.898041000000035],[-87.231383999999935,77.898880000000133],[-87.174712999999997,77.897491000000002],[-86.876099000000011,77.8836060000001],[-86.824172999999917,77.879424999999969],[-86.651671999999962,77.860260000000039],[-86.46166999999997,77.836105000000032],[-86.422225999999966,77.830826000000059],[-86.377486999999917,77.822769000000051],[-86.222778000000005,77.794434000000024],[-86.198883000000023,77.786102000000085],[-85.986938000000009,77.711380000000133],[-85.975280999999882,77.705825999999945],[-85.884445000000028,77.632751000000098],[-85.718886999999995,77.472214000000065],[-85.715835999999967,77.467209000000025],[-85.717223999999931,77.462493999999992],[-85.727218999999877,77.451934999999935],[-85.748610999999983,77.446930000000066],[-85.76916499999993,77.443587999999977],[-85.775832999999921,77.439972000000068],[-85.795837000000006,77.423874000000069],[-85.794448999999929,77.419708000000128],[-85.776947000000007,77.421371000000079],[-85.551391999999964,77.458328000000108],[-85.530562999999916,77.461928999999941],[-85.493331999999953,77.430267000000015],[-85.436385999999914,77.404159999999933],[-85.39973399999991,77.395827999999995],[-85.376662999999894,77.392487000000131],[-85.299438000000009,77.387772000000098],[-85.270003999999915,77.386658000000125],[-85.155838000000017,77.387497000000053],[-84.973327999999867,77.377197000000137],[-84.954726999999934,77.374420000000043],[-84.9375,77.370818999999983],[-84.875274999999988,77.351654000000053],[-84.825286999999946,77.334152000000017],[-84.759170999999867,77.318328999999949],[-84.719727000000034,77.311645999999996],[-84.649444999999957,77.304428000000144],[-84.601944000000003,77.300537000000077],[-84.529175000000009,77.295822000000044],[-84.479445999999996,77.294434000000138],[-84.466399999999965,77.296371000000022],[-84.463333000000034,77.300262000000089],[-84.47444200000001,77.3119200000001],[-84.481948999999986,77.317764000000125],[-84.494719999999973,77.321106000000043],[-84.520279000000016,77.324157999999954],[-84.553878999999995,77.331375000000094],[-84.569167999999991,77.339705999999978],[-84.615004999999996,77.383040999999992],[-84.612777999999878,77.389160000000004],[-84.603881999999942,77.393599999999992],[-84.58555599999994,77.398041000000092],[-84.550277999999935,77.401382000000126],[-84.520844000000011,77.401657],[-84.49610899999999,77.399428999999998],[-84.470550999999944,77.396378000000027],[-84.429442999999935,77.388884999999959],[-84.386397999999986,77.383881000000031],[-84.33444199999991,77.383040999999992],[-84.27027899999996,77.384995000000004],[-84.153609999999958,77.39498900000001],[-84.061661000000015,77.398605000000032],[-84.005843999999968,77.397491000000059],[-83.985275000000001,77.395537999999931],[-83.949996999999996,77.388884999999959],[-83.868057000000022,77.376923000000033],[-83.793610000000001,77.36914100000007],[-83.531951999999933,77.346375000000023],[-83.505843999999968,77.344711000000018],[-83.478058000000033,77.344147000000078],[-83.464721999999995,77.348327999999981],[-83.463057999999876,77.349152000000117],[-83.46444699999995,77.35554500000012],[-83.472504000000015,77.387207000000046],[-83.553054999999972,77.393051000000071],[-83.654998999999975,77.395537999999931],[-83.711669999999913,77.404709000000082],[-83.728607000000011,77.408324999999934],[-83.778609999999958,77.423309000000017],[-83.822509999999966,77.442474000000004],[-83.833892999999989,77.448868000000004],[-83.835555999999997,77.455261000000007],[-83.824722000000008,77.460541000000035],[-83.801391999999964,77.464706000000035],[-83.768065999999919,77.466934000000037],[-83.682220000000029,77.46804800000001],[-83.620833999999945,77.471924000000058],[-83.593886999999938,77.475540000000137],[-83.426102000000014,77.499710000000107],[-83.389450000000011,77.507767000000115],[-83.36332699999997,77.518051000000128],[-83.216110000000015,77.577773999999977],[-83.011123999999995,77.665817000000004],[-82.895003999999858,77.717484000000013],[-82.674438000000009,77.836928999999998],[-82.655272999999852,77.847763000000043],[-82.541671999999949,77.920532000000037],[-82.526107999999965,77.961929000000055],[-82.577224999999999,78.003326000000072],[-82.590835999999967,78.011108000000036],[-82.591675000000009,78.017487000000074],[-82.579726999999878,78.022766000000047],[-82.56361400000003,78.027771000000087],[-82.538054999999986,78.031096999999988],[-82.497498000000007,78.03414900000007],[-82.470551,78.034714000000122],[-82.40972899999997,78.03414900000007],[-82.377486999999917,78.035812000000021],[-82.369445999999925,78.039428999999927],[-82.326110999999969,78.065262000000075],[-82.318619000000012,78.070831000000055],[-82.320007000000032,78.075821000000133],[-82.336120999999991,78.078873000000044],[-82.518341000000021,78.074158000000011],[-82.549438000000009,78.071930000000066],[-82.652221999999995,78.056090999999924],[-82.672500999999954,78.051651000000106],[-82.692489999999964,78.044983000000116],[-82.780288999999982,78.014999000000103],[-82.790282999999988,78.010544000000095],[-82.792769999999905,78.005829000000062],[-82.794158999999979,77.994979999999998],[-82.785277999999948,77.969986000000006],[-82.775283999999942,77.964157],[-82.735275000000001,77.947479000000101],[-82.728881999999942,77.939972000000012],[-82.728607000000011,77.929703000000131],[-82.736114999999984,77.924148999999943],[-82.769164999999987,77.914993000000038],[-82.852218999999991,77.896942000000024],[-82.949157999999898,77.874694999999974],[-83.123046999999929,77.780548000000067],[-83.156661999999926,77.744980000000055],[-83.185546999999985,77.716385000000002],[-83.192489999999964,77.710540999999978],[-83.200835999999867,77.705551000000128],[-83.386672999999917,77.616653000000042],[-83.427215999999987,77.600815000000011],[-83.527785999999935,77.572769000000108],[-83.648055999999997,77.540816999999947],[-83.735000999999954,77.518875000000094],[-83.873046999999985,77.49331699999999],[-83.898345999999947,77.490540000000067],[-83.920546999999942,77.491652999999985],[-84.143889999999999,77.509430000000009],[-84.192490000000021,77.515549000000078],[-84.229995999999971,77.521378000000084],[-84.386672999999917,77.528594999999996],[-84.419997999999964,77.52777100000003],[-84.452224999999942,77.524994000000106],[-84.483321999999987,77.521652000000017],[-84.500564999999995,77.518051000000128],[-84.555557000000022,77.51249700000011],[-84.579726999999991,77.51249700000011],[-84.760558999999944,77.519714000000079],[-84.779174999999952,77.522490999999945],[-84.858886999999925,77.542755000000113],[-84.869155999999975,77.562759000000028],[-84.87110899999999,77.569153000000085],[-84.866393999999957,77.574158000000125],[-84.837219000000005,77.583878000000027],[-84.815552000000025,77.588881999999955],[-84.773620999999991,77.5977630000001],[-84.707229999999981,77.609985000000052],[-84.665282999999988,77.618866000000025],[-84.627486999999917,77.628036000000066],[-84.520003999999972,77.664703000000031],[-84.441939999999931,77.706100000000106],[-84.429992999999968,77.718322999999941],[-84.428328999999962,77.722762999999986],[-84.431106999999884,77.726379000000009],[-84.443054000000018,77.736374000000126],[-84.486938000000009,77.750275000000101],[-84.495270000000005,77.751099000000067],[-84.503066999999987,77.74971000000005],[-84.48971599999993,77.746368000000132],[-84.483062999999959,77.74470500000001],[-84.475280999999995,77.738876000000005],[-84.476669000000015,77.728316999999947],[-84.486388999999974,77.711380000000133],[-84.499161000000015,77.699707000000103],[-84.520844000000011,77.689148000000102],[-84.533889999999985,77.684981999999991],[-84.547226000000023,77.68081699999999],[-84.715012000000002,77.639709000000096],[-84.922501000000011,77.601653999999996],[-84.952498999999989,77.601379000000122],[-84.972503999999901,77.606369000000029],[-85.158339999999896,77.641663000000108],[-85.298889000000031,77.660538000000031],[-85.310546999999985,77.664703000000031],[-85.348891999999921,77.72886699999998],[-85.348891999999921,77.733871000000136],[-85.335830999999985,77.738037000000077],[-85.190276999999867,77.779984000000127],[-85.054992999999968,77.79693600000013],[-85.05360399999995,77.830551000000014],[-85.144164999999987,77.817490000000078],[-85.297775000000001,77.797211000000118],[-85.328063999999927,77.79832499999992],[-85.381942999999978,77.807754999999986],[-85.400283999999942,77.813309000000004],[-85.402495999999928,77.819991999999957],[-85.400283999999942,77.83638000000002],[-85.389724999999999,77.841934000000037],[-85.353333000000021,77.855545000000006],[-85.325012000000015,77.866089000000045],[-85.281386999999995,77.87441999999993],[-85.231948999999986,77.881653000000142],[-85.207778999999903,77.883881000000088],[-84.925551999999982,77.891098],[-84.837219000000005,77.887496999999939],[-84.692490000000021,77.898604999999975],[-84.664444000000003,77.902206000000035],[-84.611114999999927,77.90387000000004],[-84.498154,77.900116000000082],[-84.428878999999995,77.896942000000024],[-84.385833999999932,77.891098],[-84.368056999999908,77.887206999999933],[-84.342772999999909,77.88499500000006],[-84.318618999999956,77.886932000000115],[-84.31361400000003,77.891936999999984],[-84.325012000000015,77.896103000000039],[-84.379715000000033,77.90637200000009],[-84.401671999999962,77.910262999999986],[-84.559432999999956,77.92303499999997],[-84.575561999999991,77.923874000000126],[-84.634444999999914,77.926926000000037],[-84.663054999999929,77.925262000000032],[-84.816665999999941,77.911652000000004],[-84.847228999999913,77.90887500000008],[-85.056945999999982,77.900543000000084],[-85.166396999999961,77.902206000000035],[-85.200561999999991,77.901657000000057],[-85.267501999999922,77.898041000000035],[-85.303604000000007,77.894714000000079],[-85.331680000000006,77.890823000000012],[-85.378051999999968,77.882202000000063],[-85.423049999999989,77.874694999999974],[-85.474715999999944,77.868591000000094],[-85.515288999999996,77.8836060000001],[-85.678878999999938,77.929428000000144],[-85.67971799999998,77.936645999999939],[-85.675277999999992,77.941650000000095],[-85.660278000000005,77.946639999999945],[-85.450561999999991,77.991089000000102],[-85.28694200000001,78.021652000000074],[-85.065551999999911,78.056366000000139],[-85.038894999999911,78.057205000000124],[-85.009734999999921,78.055251999999996],[-84.963057999999933,78.04414399999996],[-84.884170999999924,78.033051],[-84.816955999999948,78.026382000000126],[-84.788054999999986,78.024155000000064],[-84.761672999999917,78.023605000000032],[-84.726943999999946,78.025817999999958],[-84.708892999999989,78.029434000000037],[-84.695540999999935,78.033599999999922],[-84.688888999999961,78.03915400000011],[-84.673888999999974,78.04414399999996],[-84.654175000000009,78.048874000000012],[-84.575561999999991,78.067215000000033],[-84.547501000000011,78.0711060000001],[-84.524444999999901,78.072220000000073],[-84.360001000000011,78.070267000000115],[-84.328612999999905,78.070541000000048],[-84.307219999999973,78.07249500000006],[-84.288054999999929,78.075546000000088],[-84.292769999999962,78.078049000000078],[-84.299438000000009,78.079712000000029],[-84.323623999999938,78.082764000000111],[-84.410003999999958,78.086929000000112],[-84.532775999999899,78.085541000000035],[-84.557220000000029,78.083603000000096],[-84.623046999999985,78.071381000000088],[-84.673614999999984,78.064148000000102],[-84.736937999999896,78.058319000000097],[-84.765563999999983,78.056366000000139],[-84.798888999999974,78.055251999999996],[-84.855835000000013,78.056930999999963],[-84.881942999999978,78.059143000000063],[-84.993880999999988,78.074158000000011],[-85.077498999999932,78.090820000000008],[-85.094451999999933,78.097487999999998],[-85.087783999999886,78.103317000000004],[-84.994994999999903,78.163040000000024],[-84.901947000000007,78.170821999999987],[-84.829452999999944,78.168869000000029],[-84.793883999999991,78.171096999999975],[-84.761123999999995,78.174423000000047],[-84.708617999999944,78.182479999999998],[-84.688598999999954,78.187195000000031],[-84.657775999999956,78.19720500000011],[-84.63110399999988,78.199997000000053],[-84.549437999999952,78.19720500000011],[-84.430557000000022,78.186371000000065],[-84.315551999999968,78.173599000000081],[-84.284164000000033,78.166381999999942],[-84.222778000000005,78.158875000000023],[-84.201110999999969,78.156937000000084],[-84.173889000000031,78.15776100000005],[-84.127776999999924,78.171096999999975],[-84.126662999999951,78.179977000000008],[-84.453612999999962,78.214706000000092],[-84.479720999999927,78.216934000000037],[-84.506667999999934,78.217758000000003],[-84.693603999999993,78.217209000000082],[-84.722504000000015,78.216934000000037],[-84.777495999999871,78.210266000000047],[-84.877212999999927,78.193039000000056],[-84.909728999999857,78.191086000000098],[-84.937774999999931,78.192474000000004],[-84.951400999999976,78.195525999999916],[-84.968613000000005,78.202484000000084],[-84.973891999999978,78.208602999999982],[-84.970276000000013,78.214157000000114],[-84.967223999999931,78.21804800000001],[-84.956116000000009,78.232208000000128],[-84.942764000000011,78.243866000000139],[-84.83444199999991,78.314987000000031],[-84.815276999999924,78.321654999999964],[-84.792496000000028,78.32499700000011],[-84.731383999999991,78.325546000000031],[-84.658614999999998,78.329437000000098],[-84.629715000000033,78.333327999999995],[-84.605270000000019,78.337494000000106],[-84.585281000000009,78.341934000000094],[-84.575561999999991,78.346375000000023],[-84.572784000000013,78.350540000000024],[-84.571944999999971,78.355545000000063],[-84.575835999999924,78.361374000000069],[-84.581679999999949,78.366089000000102],[-84.601944000000003,78.368866000000025],[-84.630828999999949,78.364990000000148],[-84.667769999999962,78.348602000000085],[-84.684722999999963,78.344147000000078],[-84.707229999999981,78.341094999999939],[-84.735001000000011,78.340270999999973],[-84.772231999999974,78.342209000000139],[-84.815552000000025,78.349152000000117],[-84.866942999999992,78.36914100000007],[-84.865829000000019,78.372207999999944],[-84.785278000000005,78.501663000000065],[-84.782501000000025,78.505829000000119],[-84.774718999999948,78.509154999999964],[-84.759170999999867,78.514160000000061],[-84.738602000000014,78.518875000000094],[-84.724166999999966,78.524429000000055],[-84.704452999999944,78.534988000000112],[-84.625823999999966,78.584152000000074],[-84.619445999999925,78.588318000000015],[-84.61999499999996,78.590546000000131],[-84.638610999999969,78.594147000000021],[-84.661117999999988,78.59248400000007],[-84.675277999999992,78.588318000000015],[-84.838332999999977,78.516662999999994],[-84.846389999999928,78.511658000000125],[-84.978333000000021,78.414993000000095],[-84.974715999999944,78.358871000000136],[-84.970550999999944,78.353317000000118],[-84.964721999999938,78.348602000000085],[-84.961945000000014,78.343597000000045],[-84.96665999999999,78.338882000000012],[-85.043335000000013,78.299149],[-85.188048999999978,78.228317000000061],[-85.418335000000013,78.118866000000082],[-85.433318999999983,78.113876000000005],[-85.450835999999924,78.109984999999938],[-85.486114999999927,78.102478000000019],[-85.508057000000008,78.099152000000004],[-85.523055999999883,78.099426000000108],[-85.528060999999923,78.101929000000098],[-85.608886999999982,78.100815000000068],[-85.740829000000019,78.093048000000124],[-85.80471799999998,78.088882000000069],[-85.876662999999951,78.08166499999993],[-85.894164999999987,78.078049000000078],[-86.010283999999956,78.066086000000041],[-86.119995000000017,78.056366000000139],[-86.148345999999947,78.054703000000018],[-86.178054999999972,78.054977000000122],[-86.223327999999981,78.057480000000112],[-86.267226999999991,78.066376000000048],[-86.282227000000034,78.071655000000021],[-86.288329999999974,78.076385000000073],[-86.291381999999999,78.081375000000094],[-86.290558000000033,78.085815000000139],[-86.25140399999998,78.156647000000078],[-86.234160999999972,78.160537999999974],[-86.135558999999944,78.165543000000014],[-86.113051999999868,78.17053199999998],[-86.098052999999993,78.17553700000002],[-85.949996999999996,78.228317000000061],[-85.93110699999994,78.236649000000057],[-85.839995999999985,78.325821000000076],[-85.835281000000009,78.332214000000022],[-85.827224999999942,78.344147000000078],[-85.825561999999934,78.348602000000085],[-85.833068999999966,78.379974000000004],[-85.853333000000021,78.379150000000038],[-85.878051999999968,78.376922999999977],[-86.052779999999984,78.297484999999995],[-86.060271999999998,78.292480000000126],[-86.060546999999929,78.280548000000124],[-86.06527699999998,78.263610999999969],[-86.073623999999938,78.24859600000002],[-86.259170999999924,78.196365000000071],[-86.285277999999948,78.193314000000044],[-86.311110999999983,78.193314000000044],[-86.453613000000018,78.211928999999998],[-86.476668999999958,78.215820000000065],[-86.497771999999941,78.215546000000131],[-86.515014999999948,78.211655000000064],[-86.537215999999944,78.19470199999995],[-86.548888999999974,78.183044000000109],[-86.569457999999941,78.172210999999947],[-86.719726999999978,78.121917999999994],[-86.736938000000009,78.118042000000116],[-86.763061999999991,78.114990000000034],[-87.079726999999934,78.102768000000026],[-87.10943599999996,78.103043000000071],[-87.196654999999964,78.106094000000098],[-87.439712999999983,78.121643000000006],[-87.505843999999911,78.12831099999994],[-87.529174999999952,78.132202000000007],[-87.538605000000018,78.138046000000031],[-87.535003999999958,78.143051000000071],[-87.526671999999962,78.149155000000121],[-87.483886999999925,78.164429000000041],[-87.430556999999965,78.178314000000114],[-87.407501000000025,78.183044000000109],[-87.352218999999991,78.191086000000098],[-87.314163000000008,78.193863000000022],[-87.289992999999981,78.19470199999995],[-87.166945999999939,78.195525999999916],[-87.104996000000028,78.199141999999995],[-87.08944699999995,78.201934999999992],[-87.087219000000005,78.206099999999992],[-87.105835000000013,78.209427000000119],[-87.262222000000008,78.22665400000011],[-87.293609999999944,78.226089000000115],[-87.363892000000021,78.221099999999922],[-87.371657999999968,78.219437000000028],[-87.396118000000001,78.217209000000082],[-87.423049999999932,78.216095000000053],[-87.475554999999872,78.216385000000116],[-87.497771999999941,78.219711000000132],[-87.513335999999924,78.224990999999989],[-87.518616000000009,78.230545000000006],[-87.516953000000001,78.24136400000009],[-87.516113000000018,78.245819000000097],[-87.494445999999982,78.298598999999967],[-87.502501999999879,78.30525200000011],[-87.513061999999991,78.316375999999991],[-87.516402999999968,78.322768999999937],[-87.52555799999999,78.410263000000043],[-87.524718999999948,78.416382000000112],[-87.517226999999991,78.426376000000118],[-87.503066999999987,78.436646000000053],[-87.476943999999946,78.44802900000002],[-87.311385999999914,78.509154999999964],[-87.292220999999927,78.513885000000016],[-87.15834000000001,78.546371000000136],[-87.140563999999983,78.550262000000032],[-87.013061999999991,78.554153000000099],[-86.891112999999962,78.54553199999998],[-86.866394000000014,78.546371000000136],[-86.858336999999949,78.547760000000096],[-86.855834999999956,78.551650999999993],[-86.858886999999982,78.566375999999934],[-86.864440999999999,78.568878000000041],[-86.877776999999924,78.573044000000095],[-86.898620999999991,78.575821000000019],[-86.957779000000016,78.574997000000053],[-87.031676999999945,78.569153000000028],[-87.066101000000003,78.567490000000134],[-87.095275999999956,78.568604000000107],[-87.113051999999925,78.573044000000095],[-87.121658000000025,78.576934999999992],[-87.12388599999997,78.581099999999992],[-87.122498000000007,78.587204000000042],[-86.944716999999969,78.704711999999972],[-86.934432999999956,78.709991000000116],[-86.922501000000011,78.714705999999978],[-86.856948999999929,78.734985000000108],[-86.638901000000033,78.79942299999999],[-86.615829000000019,78.803040000000124],[-86.377212999999983,78.809982000000048],[-86.138061999999991,78.816666000000112],[-86.067504999999983,78.819716999999912],[-86.037215999999944,78.821380999999974],[-85.646666999999866,78.848602000000142],[-85.607497999999964,78.85165400000011],[-85.577498999999932,78.855819999999994],[-85.350280999999995,78.88749700000011],[-85.329726999999934,78.892211999999972],[-85.297500999999954,78.902205999999978],[-85.257507000000032,78.910537999999974],[-85.09973100000002,78.917755000000056],[-85.064163000000008,78.919144000000074],[-85.036117999999988,78.91693099999992],[-85.008895999999993,78.913315000000068],[-84.84584000000001,78.888885000000016],[-84.788329999999917,78.878035999999952],[-84.766402999999968,78.873032000000023],[-84.740554999999915,78.869980000000112],[-84.712783999999942,78.86775200000011],[-84.563323999999966,78.859984999999995],[-84.412216000000001,78.85554499999995],[-84.212783999999886,78.856934000000138],[-84.145003999999972,78.85554499999995],[-83.850829999999974,78.845261000000107],[-83.746947999999918,78.836928999999941],[-83.694442999999978,78.829712000000029],[-83.674437999999952,78.825546000000145],[-83.660004000000015,78.819992000000127],[-83.64056399999987,78.813873000000115],[-83.601944000000003,78.802200000000084],[-83.579726999999934,78.796371000000079],[-83.538329999999917,78.787201000000039],[-83.513061999999991,78.783874999999966],[-83.485824999999977,78.781372000000033],[-83.428604000000007,78.779159999999933],[-83.394164999999987,78.778870000000097],[-83.34584000000001,78.773605000000032],[-83.327498999999932,78.769713999999965],[-83.308334000000002,78.76388500000013],[-83.293610000000001,78.756104000000107],[-83.284926999999925,78.750000000000057],[-83.236938000000009,78.74054000000001],[-83.101394999999968,78.714432000000045],[-82.994720000000029,78.699707000000103],[-82.941939999999988,78.695526000000029],[-82.910827999999981,78.694702000000063],[-82.845000999999968,78.697478999999987],[-82.822509999999966,78.695250999999985],[-82.689712999999983,78.664154000000053],[-82.69638099999986,78.657761000000107],[-82.704453000000001,78.651932000000102],[-82.695540999999992,78.645264000000111],[-82.610549999999932,78.611374000000012],[-82.506957999999997,78.591095000000109],[-82.417220999999927,78.574158000000068],[-82.37388599999997,78.568604000000107],[-82.357497999999907,78.567490000000134],[-82.337783999999999,78.566665999999941],[-82.308334000000002,78.568878000000041],[-82.262222000000008,78.578048999999965],[-82.236938000000009,78.588318000000015],[-82.235549999999932,78.595825000000104],[-82.244719999999973,78.598877000000073],[-82.310271999999941,78.616653000000042],[-82.416655999999989,78.64276099999995],[-82.496384000000035,78.661926000000108],[-82.516953000000001,78.666930999999977],[-82.535278000000005,78.672759999999982],[-82.559433000000013,78.682205000000067],[-82.565552000000025,78.685256999999979],[-82.584732000000031,78.695526000000029],[-82.59445199999999,78.703049000000021],[-82.581954999999994,78.708327999999995],[-82.569167999999991,78.711380000000133],[-82.45666499999993,78.730820000000108],[-82.435546999999929,78.731659000000093],[-82.407775999999956,78.730820000000108],[-82.350554999999986,78.726089000000002],[-82.279723999999987,78.71775800000006],[-82.255279999999914,78.71665999999999],[-82.230835000000013,78.71775800000006],[-82.223327999999981,78.719711000000018],[-82.215011999999888,78.723037999999974],[-82.220550999999887,78.732208000000014],[-82.231948999999986,78.736374000000126],[-82.254729999999995,78.740814000000114],[-82.279175000000009,78.74414100000007],[-82.310821999999973,78.746933000000126],[-82.396392999999932,78.74914600000011],[-82.45666499999993,78.74914600000011],[-82.480835000000013,78.748322000000144],[-82.506119000000012,78.745818999999983],[-82.525557999999933,78.742203000000131],[-82.542770000000019,78.737198000000092],[-82.564437999999996,78.732758000000047],[-82.619155999999975,78.728043000000014],[-82.663619999999923,78.728043000000014],[-82.752501999999936,78.729705999999965],[-82.781386999999995,78.731094000000041],[-82.809722999999963,78.734146000000123],[-82.826950000000011,78.737488000000099],[-82.84333799999996,78.742203000000131],[-82.911666999999909,78.76638800000012],[-83.069732999999928,78.792206000000078],[-83.108611999999994,78.796646000000067],[-83.21055599999994,78.798874000000069],[-83.228607000000011,78.804153000000042],[-83.255844000000025,78.829987000000074],[-83.254729999999995,78.834991000000002],[-83.244445999999925,78.839432000000102],[-83.218337999999903,78.843597000000102],[-83.1875,78.847214000000065],[-83.085830999999985,78.85554499999995],[-83.056945999999925,78.856094000000098],[-82.991669000000002,78.85554499999995],[-82.811110999999983,78.848038000000031],[-82.67582699999997,78.842209000000025],[-82.65055799999999,78.838882000000069],[-82.621384000000035,78.837493999999992],[-82.462783999999942,78.833328000000108],[-82.429442999999992,78.833328000000108],[-82.289718999999991,78.837203999999986],[-82.254455999999948,78.840546000000074],[-82.112777999999992,78.857483000000116],[-82.079452999999944,78.859711000000061],[-81.947495000000004,78.865814],[-81.913894999999911,78.865814],[-81.764174999999966,78.859984999999995],[-81.749434999999949,78.858032000000037],[-81.740554999999915,78.855254999999943],[-81.767226999999991,78.853317000000004],[-81.824447999999961,78.853867000000037],[-81.838607999999965,78.851379000000065],[-81.833618000000001,78.846649000000014],[-81.820281999999963,78.845261000000107],[-81.741378999999881,78.839157000000114],[-81.712509000000011,78.839706000000035],[-81.699157999999954,78.842757999999947],[-81.660827999999924,78.877762000000018],[-81.656661999999869,78.883881000000088],[-81.65695199999999,78.888321000000076],[-81.666397000000018,78.895537999999988],[-81.68249499999996,78.900268999999923],[-81.734725999999966,78.90637200000009],[-81.753066999999987,78.912201000000096],[-81.755843999999968,78.91804500000012],[-81.698607999999922,78.973877000000073],[-81.690825999999959,78.980270000000019],[-81.683060000000012,78.984421000000111],[-81.553604000000007,79.024155000000007],[-81.486114999999927,79.041655999999989],[-81.477218999999991,79.047211000000061],[-81.486663999999962,79.052475000000072],[-81.50306699999993,79.059143000000006],[-81.521118000000001,79.061096000000134],[-81.548614999999984,79.061355999999989],[-81.617767000000015,79.051086000000055],[-81.865829000000019,79.013610999999969],[-81.910277999999948,79.004990000000078],[-81.928329000000019,79],[-81.961120999999935,78.98692299999999],[-81.97222899999997,78.982483000000002],[-81.974166999999966,78.979431000000034],[-81.999725000000012,78.960266000000104],[-82.092772999999909,78.918320000000108],[-82.110274999999945,78.913605000000075],[-82.34722899999997,78.894440000000088],[-82.50306699999993,78.882750999999985],[-82.559433000000013,78.884720000000016],[-82.681380999999988,78.903319999999951],[-82.813888999999961,78.923035000000141],[-82.839447000000007,78.926376000000005],[-82.924438000000009,78.934982000000105],[-83.063048999999978,78.939697000000137],[-83.126663000000008,78.941085999999927],[-83.264175000000023,78.939147999999989],[-83.514174999999966,78.930542000000059],[-83.570557000000008,78.929977000000065],[-83.637512000000015,78.930817000000104],[-83.694716999999912,78.934708000000001],[-83.787215999999887,78.942474000000061],[-83.812774999999988,78.945815999999979],[-84.034163999999976,78.956650000000025],[-84.165558000000033,78.956940000000031],[-84.200561999999991,78.957213999999965],[-84.259170999999981,78.959427000000119],[-84.328888000000006,78.965271000000143],[-84.367492999999968,78.972488000000055],[-84.386123999999882,78.977767999999969],[-84.429992999999968,78.987761999999975],[-84.473052999999936,78.99552900000009],[-84.573333999999875,79.009995000000117],[-84.651397999999972,79.019439999999975],[-84.679442999999992,79.021652000000074],[-84.726943999999946,79.027771000000087],[-84.748046999999985,79.031936999999971],[-84.766953000000001,79.037200999999982],[-84.779174999999952,79.04664600000001],[-84.789718999999991,79.064148000000046],[-84.789168999999958,79.069442999999978],[-84.783889999999985,79.074432000000115],[-84.651672000000019,79.114699999999971],[-84.544158999999979,79.141372999999987],[-84.528609999999901,79.143326000000059],[-84.503615999999909,79.144440000000088],[-84.473052999999936,79.143051000000071],[-84.163894999999911,79.12414600000011],[-84.135559000000001,79.121917999999994],[-84.075561999999934,79.10443099999992],[-84.0625,79.090546000000018],[-84.040558000000033,79.075447000000054],[-83.990279999999984,79.051651000000106],[-83.950561999999934,79.043594000000098],[-83.896392999999989,79.038040000000137],[-83.744720000000029,79.028046000000074],[-83.600554999999929,79.025269000000037],[-83.504456000000005,79.023604999999975],[-83.474716000000001,79.024155000000007],[-83.454726999999991,79.025542999999971],[-83.386123999999995,79.039429000000098],[-83.36860699999994,79.044434000000138],[-83.358611999999937,79.050812000000121],[-83.373610999999926,79.056366000000139],[-83.399445000000014,79.059708000000057],[-83.415557999999976,79.059981999999991],[-83.430831999999953,79.05831900000004],[-83.461670000000026,79.052200000000028],[-83.493880999999931,79.043319999999994],[-83.521118000000001,79.041367000000037],[-83.546111999999937,79.042480000000126],[-83.70666499999993,79.077774000000034],[-83.976394999999968,79.141098000000113],[-84.003615999999909,79.148605000000089],[-84.029998999999975,79.151657],[-84.029175000000009,79.156937000000028],[-84.018889999999999,79.161377000000073],[-84.005004999999926,79.166092000000106],[-83.952498999999989,79.180267000000015],[-83.939986999999917,79.18553200000008],[-83.933318999999926,79.191925000000026],[-83.941101000000003,79.216385000000059],[-83.956664999999987,79.221924000000058],[-83.979720999999927,79.22164900000007],[-84.016952999999944,79.213042999999971],[-84.043059999999912,79.203048999999965],[-84.051940999999943,79.198029000000076],[-84.067504999999983,79.192474000000004],[-84.086120999999991,79.188033999999959],[-84.121933000000013,79.184708000000114],[-84.158507999999983,79.183304000000135],[-84.193329000000006,79.183044000000109],[-84.303329000000019,79.186646000000053],[-84.326949999999954,79.188583000000108],[-84.323897999999872,79.19470200000012],[-84.316665999999941,79.200546000000145],[-84.31361400000003,79.206649999999968],[-84.335555999999997,79.252213000000097],[-84.34445199999999,79.258041000000048],[-84.362777999999992,79.264999000000046],[-84.401108000000022,79.27526899999998],[-84.428878999999995,79.290268000000026],[-84.452788999999996,79.328872999999987],[-84.452224999999942,79.34165999999999],[-84.446654999999964,79.353866999999923],[-84.446105999999929,79.358871000000079],[-84.484725999999966,79.406372000000147],[-84.503341999999975,79.413040000000137],[-84.581116000000009,79.433868000000018],[-84.606110000000001,79.43803400000013],[-84.660278000000005,79.444138000000123],[-84.709166999999979,79.451660000000061],[-84.821120999999948,79.473037999999974],[-84.882492000000013,79.486098999999911],[-84.896956999999929,79.492477000000065],[-84.96945199999999,79.537491000000045],[-84.972503999999901,79.542206000000078],[-85.022232000000031,79.611099000000024],[-85.028885000000002,79.615814000000057],[-85.050277999999992,79.621643000000063],[-85.068892999999946,79.626083000000051],[-85.25418099999996,79.667205999999965],[-85.372497999999894,79.684417999999994],[-85.493331999999953,79.700546000000031],[-85.551391999999964,79.705826000000116],[-85.615828999999962,79.708327999999995],[-85.684433000000013,79.709152000000131],[-85.763061999999991,79.705551000000071],[-85.94888299999991,79.708327999999995],[-86.203339000000028,79.735809000000074],[-86.387512000000015,79.747482000000048],[-86.415833000000021,79.750548999999978],[-86.445830999999885,79.754166000000112],[-86.47193900000002,79.759720000000129],[-86.486389000000031,79.763611000000026],[-86.49360699999994,79.768326000000059],[-86.502227999999945,79.775269000000037],[-86.47193900000002,79.890549000000021],[-86.460281000000009,79.919708000000014],[-86.450286999999889,79.931091000000038],[-86.43638599999997,79.942474000000004],[-86.424437999999952,79.948029000000076],[-86.389724999999999,79.958038000000101],[-86.36721799999998,79.962769000000037],[-86.300277999999935,79.968596999999988],[-86.263335999999924,79.969147000000021],[-86.230285999999978,79.96804800000001],[-86.083892999999989,79.95748900000001],[-85.885833999999988,79.941086000000098],[-85.819732999999928,79.938582999999937],[-85.785003999999958,79.938034000000016],[-85.711394999999925,79.937485000000038],[-85.65695199999999,79.938034000000016],[-85.519454999999994,79.924988000000042],[-85.460006999999905,79.910812000000078],[-85.416397000000018,79.901382000000012],[-85.389998999999932,79.897491000000116],[-85.365829000000019,79.896378000000027],[-85.308334000000002,79.900543000000027],[-85.289168999999958,79.904984000000127],[-85.275008999999955,79.909424000000001],[-85.262511999999958,79.914992999999981],[-85.255004999999926,79.920821999999987],[-85.271118000000001,79.923874000000069],[-85.440826000000015,79.938309000000004],[-85.640839000000028,79.962769000000037],[-86.190552000000025,80],[-86.301940999999943,79.998322000000087],[-86.341384999999946,79.99693300000007],[-86.413329999999974,79.99803200000008],[-86.442763999999954,79.999709999999993],[-86.466400000000021,80.003876000000048],[-86.482773000000009,80.0086060000001],[-86.565551999999968,80.035812000000135],[-86.579452999999944,80.04304500000012],[-86.642501999999922,80.098037999999974],[-86.658614999999884,80.117752000000053],[-86.65943900000002,80.128036000000066],[-86.65583799999996,80.135269000000108],[-86.514724999999942,80.299149000000114],[-86.493057000000022,80.304428000000087],[-86.46833799999996,80.308594000000028],[-86.434432999999956,80.312485000000095],[-86.345001000000025,80.319153000000028],[-86.11610399999995,80.333602999999982],[-86.076110999999912,80.333602999999982],[-85.897507000000019,80.333054000000004],[-85.745269999999948,80.320267000000001],[-85.717498999999975,80.316375999999934],[-85.671936000000017,80.306931000000077],[-85.616652999999928,80.298874000000126],[-85.509170999999981,80.285812000000078],[-85.479171999999949,80.28276100000005],[-85.354171999999892,80.273041000000148],[-85.290832999999964,80.268600000000049],[-85.256957999999997,80.267211999999972],[-85.095839999999953,80.262207000000103],[-84.9375,80.267211999999972],[-84.898346000000004,80.269440000000088],[-84.779174999999952,80.272491000000116],[-84.702498999999932,80.273315000000082],[-84.589721999999995,80.273605000000089],[-84.196655000000021,80.271378000000027],[-84.049437999999896,80.267761000000121],[-83.989440999999999,80.264435000000049],[-83.926392000000021,80.259720000000016],[-83.811110999999983,80.249145999999996],[-83.78195199999999,80.24581900000004],[-83.716110000000015,80.233871000000022],[-83.626389000000017,80.213608000000136],[-83.560821999999973,80.195816000000093],[-83.546386999999982,80.189423000000147],[-83.478058000000033,80.164428999999984],[-83.461394999999925,80.15914900000007],[-83.42471299999994,80.148331000000098],[-83.40306099999998,80.142212000000086],[-83.24499499999996,80.103591999999935],[-83.138901000000033,80.078323000000125],[-83.029723999999987,80.053314],[-82.89805599999994,80.02526899999998],[-82.803329000000019,80.006377999999984],[-82.736114999999984,79.992476999999951],[-82.605835000000013,79.964431999999988],[-82.283889999999985,79.893051000000071],[-82.15306099999998,79.858870999999965],[-82.101943999999946,79.839706000000035],[-82.091675000000009,79.834717000000069],[-82.062499999999943,79.816086000000041],[-82.046386999999982,79.801651000000106],[-81.976944000000003,79.735809000000074],[-81.981673999999998,79.723877000000073],[-81.978881999999999,79.718323000000112],[-81.916655999999989,79.703323000000125],[-81.853057999999976,79.693588000000034],[-81.799438000000009,79.686645999999939],[-81.767501999999922,79.684981999999934],[-81.733886999999925,79.686371000000122],[-81.68472300000002,79.675812000000064],[-81.6163939999999,79.623305999999957],[-81.61860699999994,79.61831699999999],[-81.628052000000025,79.614700000000028],[-81.651671999999905,79.610260000000039],[-81.678054999999972,79.607208000000128],[-81.687774999999874,79.608032000000094],[-81.694716999999969,79.609711000000061],[-81.709732000000031,79.615540000000124],[-81.734160999999972,79.619705000000124],[-81.748610999999983,79.621094000000085],[-81.767501999999922,79.62052900000009],[-81.777221999999995,79.619140999999956],[-81.785277999999892,79.614990000000091],[-81.786117999999931,79.609146000000067],[-81.782227000000034,79.604979999999955],[-81.768616000000009,79.600266000000033],[-81.750290000000007,79.594711000000132],[-81.728333000000021,79.589706000000092],[-81.706664999999987,79.586655000000064],[-81.675277999999992,79.584991000000059],[-81.639450000000011,79.584991000000059],[-81.605835000000013,79.588593000000003],[-81.578613000000018,79.59304800000001],[-81.56361400000003,79.597763000000043],[-81.544998000000021,79.609146000000067],[-81.509444999999914,79.624145999999996],[-81.495270000000005,79.629425000000026],[-81.476395000000025,79.634155000000021],[-81.457229999999981,79.636932000000115],[-81.424712999999997,79.636658000000011],[-81.368056999999965,79.634430000000066],[-81.279998999999918,79.628310999999997],[-81.253615999999965,79.624694999999974],[-81.013061999999877,79.598877000000016],[-80.69027699999998,79.56860400000005],[-80.630554000000018,79.564147999999989],[-80.598052999999993,79.566086000000098],[-80.589721999999995,79.568054000000018],[-80.591949,79.573608000000036],[-80.60861199999988,79.576096000000007],[-80.625274999999931,79.580826000000059],[-80.641953000000001,79.588042999999971],[-80.634170999999981,79.592758000000003],[-80.618606999999884,79.597214000000122],[-80.598052999999993,79.601379000000122],[-80.569167999999877,79.605255],[-80.50167799999997,79.61192299999999],[-80.100280999999995,79.644440000000145],[-80.056655999999975,79.646942000000024],[-80.025283999999942,79.647217000000069],[-79.972778000000005,79.644440000000145],[-79.93638599999997,79.644440000000145],[-79.904723999999987,79.646942000000024],[-79.892501999999922,79.649155000000007],[-79.761947999999961,79.695816000000036],[-79.751403999999923,79.701385000000016],[-79.768616000000009,79.701935000000049],[-80.041381999999999,79.697479000000101],[-80.356658999999979,79.685256999999979],[-80.389724999999999,79.68331900000004],[-80.432220000000029,79.677765000000022],[-80.473617999999988,79.669708000000071],[-80.516113000000018,79.664429000000098],[-80.618057000000022,79.654160000000047],[-80.658889999999928,79.652481000000023],[-80.795273000000009,79.648041000000035],[-80.827498999999989,79.648331000000042],[-80.910552999999993,79.651932000000102],[-80.942215000000033,79.653594999999996],[-80.955275999999969,79.658600000000035],[-80.958892999999932,79.664993000000038],[-80.970839999999953,79.671370999999965],[-80.978333000000021,79.67303499999997],[-81.076110999999969,79.688873000000001],[-81.171936000000017,79.703323000000125],[-81.227782999999988,79.709427000000005],[-81.291945999999882,79.713608000000079],[-81.385559000000001,79.713608000000079],[-81.424437999999952,79.712769000000094],[-81.519729999999925,79.730820000000108],[-81.569457999999941,79.819717000000082],[-81.582779000000016,79.836929000000112],[-81.587783999999942,79.841660000000047],[-81.59973100000002,79.851929000000098],[-81.608337000000006,79.858597000000032],[-81.631377999999984,79.872208000000001],[-81.651947000000007,79.882750999999985],[-81.65972899999997,79.888596000000064],[-81.665008999999941,79.897765999999933],[-81.663054999999986,79.903046000000018],[-81.643616000000009,79.909988000000112],[-81.540557999999919,79.922760000000096],[-81.515839000000028,79.924988000000042],[-81.416945999999939,79.927199999999971],[-81.402221999999995,79.932479999999998],[-81.400283999999942,79.937758999999971],[-81.420272999999952,79.943587999999977],[-81.557495000000017,79.960815000000025],[-81.589721999999995,79.962494000000049],[-81.639450000000011,79.962204000000042],[-81.643341000000021,79.962204000000042],[-81.710555999999997,79.964706000000092],[-81.743056999999965,79.966385000000116],[-81.833068999999966,79.973877000000016],[-82.005004999999983,79.993042000000003],[-82.168334999999956,80.013610999999969],[-82.191101000000003,80.018600000000106],[-82.285827999999981,80.046097000000088],[-82.34333799999996,80.063873000000058],[-82.359160999999915,80.069153000000085],[-82.619155999999975,80.150542999999971],[-82.948043999999982,80.247481999999991],[-83.12110899999999,80.292755000000056],[-83.166655999999932,80.301376000000005],[-83.186934999999949,80.30664100000007],[-83.201400999999976,80.313309000000061],[-83.203887999999949,80.318054000000075],[-83.196654999999964,80.320830999999998],[-83.166945999999939,80.326934999999992],[-83.131942999999978,80.330551000000071],[-82.942764000000011,80.345535000000098],[-82.854720999999984,80.350815000000011],[-82.787780999999939,80.352203000000088],[-82.706664999999987,80.352767999999969],[-82.579726999999878,80.358322000000101],[-82.273330999999928,80.377472000000068],[-82.031386999999938,80.398331000000042],[-81.987212999999997,80.40026899999998],[-81.899170000000026,80.401657000000114],[-81.882216999999969,80.401932000000102],[-81.673888999999974,80.406097000000102],[-81.334441999999967,80.420532000000037],[-81.204726999999991,80.427200000000028],[-81.079726999999991,80.436096000000134],[-80.98611499999987,80.443588000000091],[-80.835007000000019,80.452774000000034],[-80.660004000000015,80.460815000000082],[-80.481110000000001,80.462494000000106],[-80.412216000000001,80.460541000000148],[-80.367766999999958,80.462204000000099],[-80.336120999999991,80.465819999999951],[-80.318893000000003,80.470534999999984],[-80.306655999999919,80.47526600000009],[-80.294158999999866,80.486649000000114],[-80.297775000000001,80.488876000000005],[-80.312209999999936,80.491653000000099],[-80.343338000000017,80.49414100000007],[-80.354996000000028,80.498031999999967],[-80.357223999999917,80.501389000000074],[-80.227492999999924,80.519713999999965],[-80.195540999999935,80.523605000000032],[-80.153335999999967,80.526382000000126],[-80.116394000000014,80.527771000000143],[-80.058608999999933,80.527206000000092],[-79.940276999999924,80.528869999999927],[-79.558043999999995,80.536377000000073],[-79.490554999999915,80.539703000000088],[-79.339995999999928,80.549988000000042],[-79.232773000000009,80.553314000000057],[-79.190552000000025,80.55386400000009],[-79.011123999999995,80.553314000000057],[-78.815551999999911,80.555817000000047],[-78.592772999999966,80.562195000000031],[-78.46556099999998,80.563873000000115],[-78.345276000000013,80.564423000000147],[-78.098891999999921,80.562485000000038],[-78.063889000000017,80.564697000000081],[-78.038054999999929,80.567215000000033],[-78.015014999999948,80.586655000000007],[-78.013625999999988,80.591095000000053],[-78.019164999999987,80.594436999999971],[-78.030838000000017,80.596100000000092],[-78.088608000000022,80.596939000000077],[-78.357773000000009,80.60165400000011],[-78.741378999999938,80.60914600000001],[-78.851944000000003,80.612487999999985],[-78.925277999999992,80.616652999999985],[-78.981109999999944,80.616089000000045],[-79.114440999999999,80.612487999999985],[-79.255004999999983,80.605819999999994],[-79.347228999999913,80.601089000000059],[-79.392226999999934,80.599715999999944],[-79.565276999999924,80.596100000000092],[-79.634170999999981,80.595535000000041],[-79.86332699999997,80.603043000000071],[-79.934433000000013,80.606094000000098],[-79.960555999999883,80.608032000000037],[-79.960280999999952,80.614700000000028],[-79.907226999999978,80.623871000000008],[-79.847777999999948,80.631927000000076],[-79.559433000000013,80.669983000000059],[-79.353607000000011,80.696640000000116],[-79.291945999999996,80.703872999999987],[-79.172501000000011,80.713043000000027],[-78.990829000000019,80.729706000000078],[-78.809432999999956,80.746933000000126],[-78.62388599999997,80.769149999999968],[-78.585280999999952,80.772217000000069],[-78.50556899999998,80.77748100000008],[-78.236664000000019,80.793319999999994],[-77.894454999999994,80.813309000000118],[-77.805832000000009,80.818603999999993],[-77.733062999999959,80.825546000000088],[-77.639175000000023,80.83027600000014],[-77.287780999999939,80.83526599999999],[-76.926392000000021,80.841933999999981],[-76.845001000000025,80.841094999999996],[-76.729172000000005,80.838043000000084],[-76.681380999999931,80.838593000000117],[-76.590835999999967,80.842758000000117],[-76.556655999999975,80.84637500000008],[-76.511672999999973,80.854430999999977],[-76.484725999999966,80.86554000000001],[-76.485000999999897,80.871094000000028],[-76.490829000000019,80.874985000000095],[-76.526672000000019,80.88638300000008],[-76.621108999999933,80.900818000000015],[-76.656661999999983,80.898041000000148],[-76.699432000000002,80.891372999999987],[-76.738892000000021,80.888321000000019],[-76.797500999999954,80.886108000000092],[-76.841675000000009,80.885543999999982],[-77.168883999999935,80.886932000000058],[-77.201675000000023,80.887772000000098],[-77.308884000000035,80.893051000000071],[-77.428329000000019,80.903046000000018],[-77.454726999999991,80.90525800000006],[-77.581115999999895,80.911377000000073],[-77.766113000000018,80.906937000000084],[-77.980285999999921,80.90109300000006],[-78.421111999999994,80.879424999999912],[-78.836394999999982,80.85386699999998],[-78.869445999999925,80.852202999999975],[-78.885283999999956,80.853591999999992],[-78.896118000000001,80.854705999999965],[-78.908614999999998,80.858871000000136],[-78.922225999999966,80.866088999999988],[-78.93499799999995,80.875534000000016],[-78.93638599999997,80.881363000000079],[-78.930556999999965,80.981933999999967],[-78.928604000000007,80.990540000000067],[-78.839721999999995,81.016098],[-78.799987999999985,81.026382000000069],[-78.757781999999906,81.035537999999974],[-78.636672999999973,81.058594000000028],[-78.528884999999946,81.081940000000088],[-78.501113999999973,81.09165999999999],[-78.457503999999972,81.107758000000047],[-78.426101999999958,81.120818999999983],[-78.416396999999961,81.125259000000142],[-78.397231999999917,81.137497000000053],[-78.393065999999919,81.142761000000007],[-78.406386999999938,81.144988999999953],[-78.461945000000014,81.147491000000059],[-78.475280999999939,81.149719000000005],[-78.475829999999974,81.15248100000008],[-78.472777999999948,81.158325000000104],[-78.463622999999927,81.160812000000021],[-78.438598999999954,81.164703000000088],[-78.411391999999921,81.167479999999955],[-78.290833000000021,81.174698000000149],[-78.254729999999995,81.177765000000079],[-78.225005999999894,81.181930999999963],[-78.15943900000002,81.193862999999965],[-78.051102000000014,81.218597000000102],[-78.03694200000001,81.223312000000135],[-78.016662999999994,81.232758000000103],[-78.009170999999981,81.238585999999998],[-77.976943999999889,81.249145999999939],[-77.875274999999874,81.272766000000104],[-77.850829999999917,81.277205999999978],[-77.612503000000004,81.318877999999984],[-77.576949999999897,81.322494999999947],[-77.50306699999993,81.328323000000069],[-77.366394000000014,81.336105000000032],[-77.233611999999994,81.351089000000115],[-77.116942999999935,81.367751999999996],[-76.955275999999969,81.393874999999923],[-76.765014999999948,81.428588999999988],[-76.748610999999983,81.4327550000001],[-76.745269999999948,81.439148000000046],[-76.761123999999995,81.442749000000106],[-76.777785999999878,81.444427000000019],[-76.803328999999962,81.445526000000029],[-76.855835000000013,81.445526000000029],[-76.951110999999969,81.440536000000122],[-77.028609999999958,81.43331900000004],[-77.208617999999944,81.409424000000058],[-77.264450000000011,81.400818000000129],[-77.41722099999987,81.380538999999999],[-77.571395999999993,81.366652999999985],[-77.609726000000023,81.364425999999924],[-77.829177999999899,81.34248400000007],[-77.896117999999944,81.335541000000092],[-78.174163999999962,81.30053700000002],[-78.228333000000021,81.291656000000046],[-78.273620999999935,81.283599999999979],[-78.29222099999987,81.278320000000122],[-78.305557000000022,81.272766000000104],[-78.325835999999924,81.261383000000137],[-78.351944000000003,81.250275000000101],[-78.370270000000005,81.2452550000001],[-78.410004000000015,81.236374000000126],[-78.433883999999921,81.231934000000138],[-78.487212999999997,81.223038000000031],[-78.604996000000028,81.206375000000094],[-78.652495999999928,81.197205000000054],[-78.675277999999935,81.191925000000026],[-78.701950000000011,81.181655999999975],[-78.721114999999998,81.172211000000061],[-78.728333000000021,81.166382000000056],[-78.75111400000003,81.141663000000108],[-78.754181000000017,81.135818000000029],[-78.745833999999945,81.129150000000038],[-78.71665999999999,81.123306000000014],[-78.690552000000025,81.12164300000012],[-78.690825999999959,81.11943100000002],[-78.817504999999926,81.106093999999985],[-78.895019999999931,81.098999000000049],[-78.916945999999996,81.098037999999917],[-78.941375999999934,81.101088999999945],[-78.963622999999984,81.107758000000047],[-79.015014999999948,81.115539999999953],[-79.075287000000003,81.122757000000092],[-79.162780999999939,81.13220199999995],[-79.218062999999972,81.136932000000002],[-79.242767000000015,81.139984000000084],[-79.399170000000026,81.174698000000149],[-79.463622999999984,81.193313999999987],[-79.486114999999984,81.194977000000108],[-79.50167799999997,81.193588000000091],[-79.499434999999949,81.189972000000068],[-79.491669000000002,81.186095999999964],[-79.475829999999974,81.180542000000003],[-79.275283999999999,81.12359600000002],[-79.218886999999938,81.111099000000081],[-79.172501000000011,81.10386699999998],[-79.088837000000012,81.094757000000072],[-79.073623999999995,81.090820000000122],[-79.063613999999916,81.085541000000148],[-79.072783999999956,81.080826000000116],[-79.087783999999999,81.076660000000004],[-79.142226999999991,81.069153000000085],[-79.226944000000003,81.063034000000073],[-79.255279999999914,81.058868000000132],[-79.305266999999958,81.029984000000013],[-79.315826000000015,81.023880000000133],[-79.323623999999938,81.018326000000002],[-79.33666999999997,81.0086060000001],[-79.343886999999995,80.99832200000003],[-79.336945000000014,80.992203000000018],[-79.321120999999891,80.988586000000055],[-79.291381999999885,80.984984999999995],[-79.258347000000015,80.984421000000054],[-79.205275999999969,80.987762000000089],[-79.18472300000002,80.986374000000012],[-79.164718999999991,80.983047000000056],[-79.158889999999985,80.977768000000083],[-79.15834000000001,80.972763000000043],[-79.165282999999931,80.966660000000104],[-79.265288999999996,80.924149000000057],[-79.600829999999917,80.824432000000115],[-79.618056999999965,80.819442999999978],[-79.883621000000005,80.783325000000104],[-80.065552000000025,80.759720000000129],[-80.247498000000007,80.73692299999999],[-80.511123999999938,80.705826000000059],[-80.651947000000007,80.691925000000083],[-80.720551,80.684142999999949],[-80.855559999999969,80.663315000000068],[-80.919448999999929,80.655548000000124],[-80.956664999999987,80.651932000000045],[-81.336394999999925,80.623306000000127],[-81.533324999999991,80.607208000000071],[-81.575561999999991,80.604155999999989],[-81.808884000000035,80.59304800000001],[-81.966110000000015,80.579712000000029],[-82.353881999999942,80.556365999999969],[-82.434998000000007,80.553040000000124],[-82.798889000000031,80.539428999999984],[-82.881103999999937,80.536652000000061],[-82.956389999999999,80.536377000000073],[-83.027495999999928,80.538589000000115],[-83.096664000000033,80.541656000000046],[-83.151946999999893,80.546371000000079],[-83.165008999999998,80.55192599999998],[-83.170272999999895,80.564147999999932],[-83.168059999999912,80.576660000000118],[-83.165282999999931,80.589432000000102],[-83.161391999999864,80.601089000000059],[-83.156112999999948,80.606644000000131],[-83.146666999999979,80.612198000000149],[-83.096953999999982,80.639435000000049],[-83.078063999999927,80.644989000000066],[-83.056380999999988,80.649154999999951],[-82.773055999999997,80.68664600000011],[-82.527495999999985,80.703323000000125],[-82.431945999999982,80.708878000000027],[-82.250838999999928,80.716385000000116],[-82.216399999999965,80.719147000000021],[-82.135833999999875,80.729431000000091],[-82.025009000000011,80.746643000000063],[-81.948333999999932,80.759155000000078],[-81.908614999999941,80.767761000000007],[-81.762786999999889,80.810806000000127],[-81.758895999999993,80.813034000000073],[-81.767501999999922,80.821381000000088],[-81.943603999999993,80.833054000000118],[-81.961120999999935,80.833054000000118],[-81.996108999999933,80.83027600000014],[-82.05221599999993,80.822768999999994],[-82.099730999999906,80.813599000000124],[-82.146118000000001,80.803589000000045],[-82.193877999999984,80.796646000000067],[-82.332229999999981,80.781372000000147],[-82.513061999999934,80.763046000000145],[-82.526107999999965,80.752777000000094],[-82.535827999999867,80.747208000000114],[-82.543334999999956,80.74443100000002],[-82.567229999999995,80.740814000000057],[-82.601669000000015,80.738036999999963],[-82.940551999999968,80.714431999999988],[-83.311934999999949,80.687759000000028],[-83.356948999999929,80.685531999999967],[-83.516113000000018,80.701384999999959],[-83.541107000000011,80.704162999999994],[-83.547226000000023,80.706940000000088],[-83.569457999999997,80.739150999999993],[-83.5625,80.743866000000025],[-83.529723999999987,80.747482000000048],[-83.456664999999987,80.751099000000011],[-83.422500999999954,80.753876000000105],[-83.391387999999949,80.758041000000105],[-83.261947999999961,80.786377000000016],[-83.133057000000008,80.818878000000097],[-83.120270000000005,80.823317999999972],[-83.132492000000013,80.828598],[-83.158051,80.833603000000039],[-83.191100999999946,80.835815000000139],[-83.256957999999997,80.838593000000117],[-83.297225999999966,80.836104999999975],[-83.323333999999932,80.8316650000001],[-83.329177999999956,80.828323000000012],[-83.331954999999937,80.823883000000137],[-83.353881999999999,80.813599000000124],[-83.381377999999984,80.803864000000033],[-83.407226999999978,80.799422999999933],[-83.493332000000009,80.787766000000033],[-83.587218999999891,80.775269000000037],[-83.610549999999932,80.771652000000074],[-83.630828999999949,80.766937000000041],[-83.645554000000004,80.761658000000068],[-83.64916999999997,80.755554000000018],[-83.658889999999872,80.751937999999996],[-83.667769999999905,80.75],[-83.696655000000021,80.746643000000063],[-83.712783999999999,80.747757000000092],[-83.827498999999932,80.761383000000023],[-83.859160999999972,80.759155000000078],[-83.863892000000021,80.757492000000127],[-83.836394999999982,80.719710999999961],[-83.821670999999981,80.705826000000059],[-83.812499999999943,80.698318000000086],[-83.801391999999964,80.691925000000083],[-83.783065999999963,80.684142999999949],[-83.757232999999928,80.669708000000014],[-83.734436000000017,80.654160000000047],[-83.723327999999924,80.643875000000094],[-83.720000999999911,80.636658000000011],[-83.719726999999978,80.630813999999987],[-83.73582499999992,80.613037000000077],[-83.779175000000009,80.570831000000112],[-83.794723999999974,80.560257000000036],[-83.821120999999948,80.550536999999963],[-83.840560999999866,80.545532000000094],[-83.871108999999933,80.541367000000093],[-83.93472300000002,80.534424000000115],[-83.973327999999981,80.531937000000028],[-84.313323999999909,80.513611000000026],[-84.381103999999993,80.512207000000046],[-84.48971599999993,80.514434999999992],[-84.551392000000021,80.517761000000064],[-84.689437999999996,80.524994000000049],[-84.763625999999988,80.525818000000015],[-84.846664000000033,80.523315000000025],[-84.890563999999983,80.521102999999982],[-84.964447000000007,80.514434999999992],[-85.027221999999995,80.507217000000026],[-85.066956000000005,80.505264000000068],[-85.232772999999952,80.508881000000031],[-85.334731999999974,80.513611000000026],[-85.366652999999985,80.517487000000131],[-85.42582699999997,80.523041000000092],[-85.462218999999948,80.524994000000049],[-85.594727000000034,80.529159999999933],[-85.809433000000013,80.531937000000028],[-85.864165999999898,80.535538000000088],[-85.865829000000019,80.541367000000093],[-85.812774999999931,80.559143000000063],[-85.705841000000021,80.589706000000035],[-85.689162999999951,80.593872000000147],[-85.665008999999941,80.598601999999971],[-85.613051999999982,80.606368999999972],[-85.571945000000028,80.615265000000079],[-85.564712999999927,80.619431000000134],[-85.594451999999933,80.6202550000001],[-85.636397999999986,80.619141000000127],[-85.694716999999969,80.613602000000128],[-85.744719999999916,80.606368999999972],[-85.793059999999855,80.596939000000077],[-85.854720999999984,80.582214000000135],[-85.889724999999999,80.573044000000039],[-85.925277999999992,80.562485000000038],[-85.950606999999991,80.552947999999958],[-85.95666499999993,80.548325000000091],[-85.982773000000009,80.537491000000045],[-86.011947999999961,80.533324999999934],[-86.037215999999944,80.530823000000055],[-86.080840999999964,80.528320000000065],[-86.148345999999947,80.53166200000004],[-86.177490000000034,80.534149000000127],[-86.428329000000019,80.560257000000036],[-86.639998999999932,80.583054000000004],[-86.718062999999972,80.59304800000001],[-86.739165999999898,80.597487999999998],[-86.744995000000017,80.603043000000071],[-86.732498000000021,80.615265000000079],[-86.680282999999974,80.654984000000013],[-86.660003999999958,80.666091999999992],[-86.638061999999991,80.676651000000049],[-86.514724999999942,80.729431000000091],[-86.497771999999941,80.735260000000096],[-86.466110000000015,80.74552900000009],[-86.410004000000015,80.760818000000029],[-86.338333000000034,80.775542999999971],[-86.244719999999973,80.794144000000131],[-86.225554999999929,80.799149],[-86.174438000000009,80.81442300000009],[-86.050277999999992,80.856644000000074],[-85.964171999999962,80.886932000000058],[-85.846114999999998,80.928589000000102],[-85.828339000000028,80.93414300000012],[-85.77416999999997,80.948868000000061],[-85.698607999999922,80.962769000000037],[-85.605835000000013,80.975815000000125],[-85.556106999999997,80.981933999999967],[-85.003066999999874,81.028320000000008],[-84.928878999999995,81.030822999999941],[-84.726669000000015,81.031097000000102],[-84.404998999999918,81.043869000000086],[-84.368332000000009,81.046097000000032],[-84.20666499999993,81.060531999999967],[-84.119994999999903,81.067490000000134],[-84.025009000000011,81.070830999999998],[-83.908050999999944,81.071381000000031],[-83.823623999999938,81.073608000000092],[-83.529998999999918,81.090271000000143],[-83.31138599999997,81.103317000000118],[-83.15055799999999,81.120529000000147],[-83.12332200000003,81.12303200000008],[-83.053328999999962,81.123306000000014],[-82.943603999999993,81.120818999999983],[-82.869445999999925,81.121368000000075],[-82.826401000000033,81.12303200000008],[-82.785004000000015,81.125534000000016],[-82.760283999999956,81.129150000000038],[-82.738891999999964,81.133880999999974],[-82.707229999999981,81.144440000000031],[-82.688323999999966,81.148331000000098],[-82.64416499999993,81.151657000000114],[-82.599166999999966,81.152771000000087],[-82.531386999999938,81.149993999999992],[-82.50306699999993,81.147766000000047],[-82.466659999999933,81.148331000000098],[-82.37222300000002,81.174698000000149],[-82.364440999999999,81.17942800000003],[-82.389998999999989,81.180266999999958],[-82.420837000000006,81.17942800000003],[-82.484160999999972,81.169983000000116],[-82.52305599999994,81.166382000000056],[-82.565276999999924,81.166092000000049],[-82.665008999999998,81.17442299999999],[-82.828063999999983,81.173308999999961],[-82.866652999999928,81.169708000000128],[-82.894164999999987,81.165268000000083],[-82.926940999999999,81.161102000000028],[-82.962783999999942,81.158325000000104],[-83.14973399999991,81.151382000000126],[-83.453338999999971,81.13220199999995],[-83.757507000000032,81.113312000000008],[-84.116104000000007,81.0977630000001],[-84.372771999999941,81.092209000000082],[-84.58555599999994,81.086380000000077],[-84.797500999999954,81.078323000000125],[-85.065551999999911,81.066375999999991],[-85.211944999999901,81.056931000000077],[-85.25,81.05525200000011],[-85.291381999999999,81.054703000000131],[-85.404448999999943,81.057755000000043],[-85.482773000000009,81.058594000000028],[-85.572509999999966,81.05664100000007],[-85.681670999999938,81.049423000000104],[-85.75556899999998,81.041367000000037],[-85.817779999999971,81.032761000000107],[-85.988602000000014,81.006653000000142],[-86.143340999999907,80.978317000000061],[-86.30972300000002,80.940811000000053],[-86.351944000000003,80.930542000000059],[-87.061935000000005,80.727478000000133],[-87.076401000000033,80.7227630000001],[-87.083618000000001,80.716934000000094],[-87.079078999999979,80.707024000000104],[-87.080291999999986,80.699142000000052],[-87.121383999999921,80.677475000000015],[-87.180557000000022,80.649154999999951],[-87.215011999999945,80.638321000000076],[-87.240554999999972,80.634155000000021],[-87.273055999999997,80.630813999999987],[-87.315001999999936,80.629424999999969],[-87.458054000000004,80.627762000000075],[-87.489715999999873,80.627472000000012],[-87.559433000000013,80.627472000000012],[-87.594726999999978,80.628586000000041],[-87.628051999999968,80.632202000000063],[-87.777221999999938,80.648880000000133],[-87.864166000000012,80.659424000000001],[-87.954726999999878,80.671645999999953],[-88.139724999999999,80.685256999999922],[-88.17721599999993,80.686920000000043],[-88.196105999999986,80.688582999999994],[-88.22222899999997,80.691085999999984],[-88.348891999999921,80.708602999999982],[-88.406661999999926,80.716934000000094],[-88.488601999999958,80.731934000000024],[-88.566956000000005,80.74859600000002],[-88.706116000000009,80.772766000000047],[-88.967498999999862,80.808594000000085],[-89.034163999999976,80.816376000000048],[-89.125823999999966,80.825821000000076],[-89.290557999999976,80.849426000000108],[-89.334731999999917,80.857483000000059],[-89.382492000000013,80.86970500000001],[-89.398055999999997,80.876082999999994],[-89.450561999999934,80.903320000000122],[-89.462218999999948,80.909988000000055],[-89.466110000000015,80.914153999999996],[-89.462218999999948,80.919144000000017],[-89.442763999999897,80.923599000000024],[-89.380828999999892,80.933044000000109],[-89.235274999999945,80.948318000000029],[-89.18638599999997,80.953048999999965],[-88.905563000000029,80.977768000000083],[-88.858611999999994,80.981368999999972],[-88.766861000000006,80.986801000000014],[-88.590285999999992,80.996368000000018],[-88.513901000000033,80.99832200000003],[-88.283324999999991,81.002213000000097],[-88.089721999999938,81.003601000000003],[-88.011397999999986,81.003326000000015],[-87.826674999999966,80.998032000000023],[-87.755004999999983,80.994980000000112],[-87.689437999999939,80.990814],[-87.628051999999968,80.984711000000061],[-87.597504000000015,80.980819999999994],[-87.524169999999913,80.977203000000031],[-87.446380999999974,80.976928999999927],[-87.279448999999943,80.981933999999967],[-87.15943900000002,80.986922999999933],[-87.119719999999973,80.989700000000028],[-87.089172000000019,80.994141000000127],[-87.064712999999983,80.998871000000008],[-87.030562999999972,81.001938000000109],[-86.983062999999902,81.003876000000048],[-86.946105999999986,81.004166000000055],[-86.755004999999983,81.001099000000124],[-86.711670000000026,81.002487000000031],[-86.671936000000017,81.005264000000125],[-86.635559000000001,81.009430000000066],[-86.541945999999996,81.020264000000111],[-86.419448999999986,81.036102000000142],[-86.061110999999983,81.082764000000054],[-85.916396999999961,81.104980000000012],[-85.916396999999961,81.110260000000096],[-85.907227000000034,81.113875999999948],[-85.887512000000015,81.118866000000025],[-85.562774999999988,81.17942800000003],[-85.483063000000016,81.192748999999992],[-85.425277999999935,81.201660000000061],[-85.297500999999954,81.218597000000102],[-85.22193900000002,81.226379000000065],[-85.02027899999996,81.244980000000055],[-84.976394999999968,81.248596000000134],[-84.876388999999961,81.254715000000147],[-84.832503999999972,81.258330999999998],[-84.802490000000034,81.261658000000125],[-84.776108000000022,81.266097999999943],[-84.733886999999982,81.281097000000045],[-84.735549999999989,81.285537999999974],[-84.745834000000002,81.289429000000041],[-84.899993999999936,81.304977000000008],[-84.936660999999958,81.307755000000043],[-84.975554999999986,81.307479999999998],[-85.029175000000009,81.305817000000047],[-85.279174999999952,81.289978000000133],[-85.361388999999974,81.28276100000005],[-85.768340999999964,81.244705000000067],[-85.950561999999991,81.224701000000096],[-86.018341000000021,81.215820000000008],[-86.077498999999932,81.207489000000066],[-86.154174999999952,81.193313999999987],[-86.225006000000008,81.173874000000012],[-86.240829000000019,81.16914399999996],[-86.256957999999941,81.162766000000033],[-86.299437999999896,81.148605000000032],[-86.338333000000034,81.138596000000007],[-86.404998999999975,81.129700000000071],[-86.438048999999921,81.126083000000108],[-86.472777999999892,81.122757000000092],[-86.521118000000001,81.119704999999954],[-86.650833000000034,81.115814000000114],[-86.956389999999999,81.099426000000051],[-87.111388999999917,81.087769000000094],[-87.297225999999966,81.076935000000049],[-87.637512000000015,81.059417999999994],[-87.678878999999995,81.058594000000028],[-87.720000999999911,81.059417999999994],[-87.841385000000002,81.062759000000028],[-88.0625,81.069992000000013],[-88.217772999999852,81.071381000000031],[-88.339995999999985,81.069717000000026],[-88.43499799999995,81.064148000000046],[-88.571670999999924,81.054703000000131],[-88.65834000000001,81.051376000000005],[-88.740828999999962,81.049713000000111],[-88.889998999999932,81.051926000000037],[-88.964721999999938,81.049423000000104],[-89.041672000000005,81.041091999999992],[-89.210555999999997,81.026657000000057],[-89.25556899999998,81.023880000000133],[-89.341675000000009,81.020264000000111],[-89.629165999999998,81.009155000000021],[-89.746658000000025,81.008881000000088],[-89.787505999999951,81.009720000000073],[-89.820847000000015,81.010817999999972],[-89.87388599999997,81.016388000000006],[-90.011947999999961,81.033051000000114],[-90.06361400000003,81.039702999999975],[-90.095275999999899,81.044708000000071],[-90.149170000000026,81.054977000000065],[-90.19776899999988,81.069717000000026],[-90.210007000000019,81.07499700000011],[-90.338057999999933,81.151657000000114],[-90.351944000000003,81.167479999999955],[-90.325561999999934,81.181930999999963],[-90.277221999999995,81.197205000000054],[-90.102218999999991,81.230270000000132],[-90.043059999999969,81.239426000000037],[-90.011123999999995,81.241928000000144],[-89.972778000000005,81.24275200000011],[-89.870543999999938,81.242203000000131],[-89.74610899999999,81.236649],[-89.669158999999866,81.218048000000124],[-89.635009999999909,81.212203999999929],[-89.573059000000001,81.206940000000145],[-89.535004000000015,81.206100000000106],[-89.491104000000007,81.206375000000094],[-89.447219999999902,81.208328000000051],[-89.357223999999974,81.214432000000102],[-89.281386999999995,81.221649000000014],[-89.136672999999973,81.238876000000005],[-89.088333000000034,81.242477000000065],[-89.044448999999986,81.24275200000011],[-88.982223999999974,81.241928000000144],[-88.954178000000013,81.24275200000011],[-88.944152999999972,81.24414100000007],[-88.935821999999973,81.247756999999979],[-88.949721999999895,81.253601000000003],[-88.979445999999996,81.258330999999998],[-89.162215999999944,81.255829000000119],[-89.198607999999865,81.253326000000129],[-89.265014999999948,81.244431000000134],[-89.307220000000029,81.240540000000067],[-89.335280999999952,81.24275200000011],[-89.443603999999937,81.260543999999982],[-89.687774999999988,81.289978000000133],[-89.775008999999955,81.296371000000079],[-89.868056999999965,81.306090999999981],[-89.898620999999935,81.31053199999991],[-89.91722099999987,81.314422999999977],[-89.950287000000003,81.324158000000068],[-89.952498999999875,81.329437000000041],[-89.940552000000025,81.333328000000108],[-89.916396999999904,81.336928999999998],[-89.882216999999969,81.340271000000087],[-89.702224999999999,81.350266000000033],[-89.627212999999983,81.356644000000017],[-89.242492999999968,81.423035000000027],[-89.059158000000025,81.455551000000071],[-88.928328999999962,81.485535000000141],[-88.90943900000002,81.490814000000114],[-88.846953999999982,81.49971000000005],[-88.715835999999967,81.513045999999974],[-88.545272999999952,81.525269000000037],[-88.494995000000017,81.527206000000092],[-88.406113000000005,81.528320000000065],[-88.37110899999999,81.526931999999988],[-88.161391999999921,81.530273000000022],[-88.029998999999975,81.535812000000021],[-87.984160999999972,81.535812000000021],[-87.959732000000031,81.534714000000122],[-87.939437999999996,81.531661999999983],[-87.893699999999967,81.524712000000136],[-87.801391999999964,81.515548999999965],[-87.679442999999935,81.51388500000013],[-87.490279999999984,81.508880999999974],[-87.431380999999931,81.50471500000009],[-87.398894999999982,81.500824000000023],[-87.343063000000029,81.492752000000053],[-87.311110999999983,81.488876000000005],[-87.276672000000019,81.485809000000074],[-87.251403999999923,81.487488000000042],[-87.244719999999973,81.490265000000136],[-87.286391999999921,81.505554000000075],[-87.288329999999974,81.506104000000107],[-87.315551999999968,81.513321000000019],[-87.37860099999989,81.517212000000086],[-87.489166000000012,81.523315000000025],[-87.645844000000011,81.527480999999909],[-87.721664000000033,81.532211000000132],[-87.751952999999958,81.535263000000043],[-87.915008999999941,81.552765000000079],[-88.279449,81.579436999999984],[-88.306380999999931,81.581374999999923],[-88.352218999999991,81.579712000000029],[-88.392226999999991,81.57777400000009],[-88.446944999999971,81.572220000000073],[-88.552215999999987,81.558868000000018],[-88.642226999999934,81.551651000000106],[-88.669448999999986,81.550537000000134],[-88.769164999999987,81.551086000000112],[-88.849990999999989,81.550537000000134],[-88.900283999999886,81.548325000000091],[-88.998046999999985,81.540543000000127],[-89.073058999999944,81.532211000000132],[-89.145844000000011,81.523041000000092],[-89.282500999999911,81.505264000000011],[-89.548339999999882,81.477203000000145],[-89.585555999999997,81.473037999999974],[-89.710280999999952,81.455261000000064],[-90.011397999999929,81.416930999999977],[-90.370833999999945,81.375259000000085],[-90.443053999999961,81.366652999999985],[-90.467498999999918,81.367751999999996],[-90.500564999999938,81.371368000000018],[-90.535827999999981,81.37692300000009],[-90.553329000000019,81.38499500000006],[-90.525283999999999,81.388596000000121],[-90.517226999999934,81.389160000000061],[-90.478881999999999,81.394440000000145],[-90.481383999999991,81.396652000000017],[-90.487777999999935,81.398604999999975],[-90.516953000000001,81.402481000000023],[-90.643616000000009,81.416381999999999],[-90.678328999999962,81.417480000000126],[-90.746658000000025,81.422211000000061],[-90.779998999999975,81.425537000000077],[-90.811385999999914,81.429977000000065],[-90.841110000000015,81.435531999999967],[-90.854171999999949,81.440536000000122],[-90.856658999999922,81.444138000000066],[-90.853881999999942,81.450821000000076],[-90.848342999999943,81.454987000000131],[-90.80082699999997,81.464995999999985],[-90.770554000000004,81.469711000000018],[-90.583069000000023,81.497482000000105],[-90.540282999999988,81.501663000000008],[-90.312209999999993,81.531371999999976],[-90.130553999999904,81.564423000000147],[-89.874709999999936,81.599152000000004],[-89.797500999999954,81.602478000000019],[-89.674438000000009,81.601654000000053],[-89.632492000000013,81.604706000000022],[-89.597503999999958,81.614151000000049],[-89.585006999999962,81.619705000000067],[-89.585006999999962,81.625809000000061],[-89.601943999999889,81.627762000000018],[-89.798889000000031,81.629974000000061],[-89.868056999999965,81.630264000000125],[-89.914169000000015,81.628310999999997],[-89.962218999999948,81.625534000000073],[-90.069457999999941,81.633606000000043],[-90.111580000000004,81.656746000000112],[-90.204726999999934,81.686371000000065],[-90.271392999999989,81.697479000000101],[-90.296950999999979,81.698593000000074],[-90.330291999999986,81.696090999999967],[-90.353057999999976,81.690536000000066],[-90.36082499999992,81.685257000000092],[-90.355270000000019,81.673599000000081],[-90.337218999999948,81.662491000000102],[-90.354720999999984,81.651382000000012],[-90.511123999999995,81.65776100000005],[-90.604720999999927,81.664703000000145],[-90.638901000000033,81.668045000000063],[-90.678878999999995,81.668869000000029],[-90.718886999999938,81.666656000000103],[-90.734725999999966,81.660812000000078],[-90.74221799999998,81.655548000000067],[-90.763625999999931,81.645537999999988],[-90.779723999999987,81.641098],[-90.803878999999995,81.636108000000092],[-90.834731999999974,81.631363000000079],[-90.878052000000025,81.627472000000012],[-90.923888999999974,81.625259000000028],[-90.966948999999943,81.621094000000028],[-90.99110399999995,81.616088999999988],[-91.006957999999997,81.598876999999959],[-91.003341999999918,81.592209000000025],[-90.988602000000014,81.579436999999984],[-90.988602000000014,81.557754999999986],[-91.071670999999981,81.537200999999982],[-91.091949,81.533874999999966],[-91.104445999999996,81.534424000000115],[-91.113891999999964,81.539978000000076],[-91.236938000000009,81.543320000000051],[-91.313888999999961,81.53414900000007],[-91.401397999999972,81.526382000000126],[-91.446380999999974,81.524428999999998],[-91.463332999999977,81.526093000000003],[-91.467772999999909,81.527206000000092],[-91.452498999999932,81.531661999999983],[-91.428604000000007,81.536652000000061],[-91.411117999999988,81.541931000000034],[-91.406386999999938,81.547760000000039],[-91.444153000000028,81.583603000000096],[-91.474441999999954,81.588882000000069],[-91.654175000000009,81.605819999999994],[-91.74722300000002,81.60914600000001],[-91.85722399999986,81.612762000000089],[-91.878326000000015,81.614151000000049],[-91.900283999999999,81.616928000000144],[-91.938599000000011,81.625534000000073],[-91.948607999999922,81.631088000000091],[-91.956664999999987,81.658600000000035],[-91.949432000000002,81.662201000000096],[-91.926940999999999,81.664992999999981],[-91.902221999999938,81.666931000000091],[-91.867767000000015,81.663315000000068],[-91.838897999999858,81.658600000000035],[-91.801101999999958,81.658600000000035],[-91.770844000000011,81.663315000000068],[-91.73721299999994,81.686920000000043],[-91.725829999999917,81.706650000000025],[-91.723617999999874,81.72164900000007],[-91.485549999999989,81.769989000000123],[-91.386123999999995,81.77388000000002],[-91.351395000000025,81.770264000000111],[-91.287506000000008,81.761931999999945],[-91.255004999999983,81.759155000000078],[-91.212508999999898,81.759430000000066],[-91.053328999999906,81.761658000000011],[-91.03443900000002,81.763885000000073],[-91.033324999999991,81.76776099999995],[-91.05749499999996,81.772766000000047],[-91.090560999999923,81.777206000000035],[-91.117766999999958,81.784424000000058],[-91.140563999999983,81.791930999999977],[-91.152495999999928,81.798035000000027],[-91.147232000000031,81.803864000000033],[-91.137511999999958,81.808594000000085],[-91.101104999999961,81.818878000000097],[-91.051665999999955,81.828872999999987],[-91.001113999999973,81.832764000000054],[-90.852218999999991,81.842483999999956],[-90.727492999999981,81.841094999999996],[-90.704178000000013,81.843597000000045],[-90.689986999999917,81.848602000000085],[-90.686377999999991,81.853966000000014],[-90.678328999999962,81.858597000000032],[-90.635009999999966,81.868866000000025],[-90.610001000000011,81.873871000000065],[-90.565276999999867,81.878036000000066],[-90.436661000000015,81.887497000000053],[-90.338057999999933,81.893051000000071],[-90.245270000000005,81.896102999999982],[-90.154449,81.896652000000131],[-89.990828999999962,81.905548000000067],[-89.783324999999934,81.917206000000078],[-89.735824999999977,81.917480000000012],[-89.700835999999981,81.915543000000127],[-89.676940999999999,81.9102630000001],[-89.683051999999975,81.899437000000148],[-89.682494999999903,81.883330999999998],[-89.649445000000014,81.863312000000064],[-89.629989999999964,81.856369000000029],[-89.461394999999982,81.818054000000132],[-89.425003000000004,81.815262000000018],[-89.356383999999935,81.811096000000134],[-89.244720000000029,81.846375000000023],[-89.227218999999991,81.852203000000145],[-89.203223999999977,81.878036000000066],[-89.19923399999999,81.881537999999921],[-89.199059000000034,81.885208000000034],[-89.213218999999981,81.888382000000092],[-89.328063999999927,81.902206000000092],[-89.367217999999923,81.905548000000067],[-89.397506999999962,81.909424000000115],[-89.419158999999979,81.915543000000127],[-89.416945999999939,81.925812000000008],[-89.397780999999895,81.930817000000047],[-89.371658000000025,81.935806000000014],[-89.338897999999972,81.940262000000075],[-89.288895000000025,81.943038999999999],[-89.249724999999955,81.941086000000041],[-89.157393999999954,81.928368000000091],[-89.156218999999908,81.925201000000072],[-89.152556999999945,81.921371000000079],[-89.133057000000008,81.918533000000082],[-89.074721999999952,81.911652000000061],[-89.033324999999991,81.912201000000039],[-89.007232999999871,81.915543000000127],[-88.98971599999993,81.921097000000145],[-88.986388999999974,81.944976999999938],[-88.992767000000015,81.951385000000073],[-89.011947999999904,81.958603000000096],[-89.048339999999996,81.978043000000071],[-89.054442999999992,81.987487999999985],[-89.041106999999954,81.993041999999946],[-89.021117999999944,81.998032000000023],[-88.963897999999972,82.008041000000048],[-88.77305599999994,82.039429000000041],[-88.625548999999978,82.062759000000028],[-88.589721999999938,82.066665999999998],[-88.543059999999912,82.070540999999992],[-88.443054000000018,82.074997000000053],[-88.296660999999915,82.080276000000026],[-88.25,82.080826000000059],[-88.145003999999972,82.086928999999998],[-88.11361699999992,82.090545999999961],[-88.09973100000002,82.093048000000067],[-88.095001000000025,82.096374999999966],[-88.085281000000009,82.101379000000122],[-88.075561999999934,82.104980000000012],[-88.038329999999974,82.103867000000093],[-87.91194200000001,82.090820000000065],[-87.71833799999996,82.083878000000027],[-87.702224999999942,82.086928999999998],[-87.666396999999904,82.089431999999988],[-87.641952999999944,82.090271000000143],[-87.599730999999963,82.089157],[-87.50140399999998,82.084152000000131],[-87.402221999999938,82.07388300000008],[-87.352782999999931,82.06721500000009],[-87.333617999999888,82.063309000000061],[-87.271666999999979,82.047759999999926],[-87.230559999999969,82.036926000000051],[-87.195830999999998,82.026382000000012],[-87.183608999999933,82.022491000000116],[-87.174437999999896,82.014708999999982],[-87.173324999999977,82.011107999999922],[-87.178603999999893,82.007767000000115],[-87.197768999999937,82.002213000000097],[-87.232773000000009,81.99331699999999],[-87.258057000000008,81.989426000000094],[-87.299987999999985,81.979155999999989],[-87.314437999999996,81.973877000000016],[-87.309432999999956,81.967484000000013],[-87.265839000000028,81.958878000000141],[-87.169158999999979,81.945526000000086],[-87.101669000000015,81.937759000000142],[-87.063323999999909,81.934418000000107],[-86.939437999999996,81.918868999999972],[-86.877212999999983,81.909424000000115],[-86.828887999999949,81.897491000000059],[-86.804169000000002,81.893051000000071],[-86.768341000000021,81.890273999999977],[-86.726669000000015,81.891937000000098],[-86.726944000000003,81.897217000000126],[-86.734160999999915,81.902771000000143],[-86.745833999999945,81.906647000000021],[-86.834732000000031,81.927765000000136],[-86.86361699999992,81.933593999999971],[-86.919448999999986,81.942748999999992],[-87.066101000000003,81.954987000000074],[-87.098052999999936,81.958328000000108],[-87.127212999999927,81.963882000000069],[-87.130279999999857,81.968322999999998],[-87.00140399999998,82.036102000000085],[-86.987212999999997,82.039978000000019],[-86.931670999999938,82.049423000000047],[-86.892501999999979,82.054153000000099],[-86.84333799999996,82.05720500000001],[-86.791945999999939,82.058029000000147],[-86.583617999999944,82.053863999999976],[-86.356383999999991,82.053588999999988],[-86.27806099999998,82.050812000000064],[-86.239166000000012,82.048599000000081],[-86.202788999999996,82.04553199999998],[-86.169158999999922,82.041656000000103],[-86.016112999999962,82.016663000000051],[-85.960555999999997,82.00749200000007],[-85.914443999999946,81.997481999999991],[-85.815001999999993,81.973877000000016],[-85.767501999999922,81.961928999999941],[-85.731383999999878,81.949996999999996],[-85.628875999999991,81.916092000000106],[-85.467223999999987,81.867203000000131],[-85.422501000000011,81.857483000000059],[-85.379439999999988,81.856934000000081],[-85.371658000000025,81.859711000000004],[-85.37388599999997,81.863876000000005],[-85.385833999999932,81.874985000000095],[-85.398055999999997,81.881088000000034],[-85.441939999999988,81.893875000000037],[-85.469451999999876,81.899719000000005],[-85.566101000000003,81.924988000000042],[-85.654723999999987,81.950821000000133],[-85.731948999999986,81.983322000000044],[-85.729996000000028,81.987762000000089],[-85.726943999999946,81.990265000000079],[-85.693877999999984,81.994980000000112],[-85.650557999999933,81.99832200000003],[-85.559432999999956,82.001663000000065],[-85.258621000000005,81.996933000000013],[-85.217498999999975,81.995529000000033],[-85.188323999999909,81.99275200000011],[-85.165833000000021,81.985259999999982],[-85.160004000000015,81.979706000000022],[-85.140563999999927,81.966095000000053],[-85.096389999999985,81.945816000000093],[-85.018889999999999,81.919434000000024],[-84.984160999999915,81.911102000000028],[-84.879439999999988,81.887497000000053],[-84.838897999999915,81.882476999999994],[-84.816887000000008,81.885367999999914],[-84.821884000000011,81.888214000000062],[-84.844222999999886,81.894882000000052],[-84.863891999999964,81.900269000000037],[-84.915008999999998,81.918045000000006],[-84.994719999999973,81.948593000000017],[-85.025283999999942,81.960815000000139],[-85.037216000000001,81.966933999999981],[-85.048889000000031,81.974426000000108],[-85.066100999999946,81.987487999999985],[-85.055556999999965,81.990814],[-85.038329999999974,81.994141000000127],[-85.00111400000003,81.994141000000127],[-84.929169000000002,81.993041999999946],[-84.889174999999966,81.990265000000079],[-84.858886999999925,81.985259999999982],[-84.831680000000006,81.979430999999977],[-84.816665999999941,81.970825000000048],[-84.814437999999996,81.966385000000059],[-84.815276999999924,81.961104999999975],[-84.821945000000028,81.949141999999938],[-84.797606999999971,81.930870000000141],[-84.789267999999993,81.924698000000035],[-84.75144199999994,81.910538000000088],[-84.74227899999994,81.908378999999968],[-84.688598999999954,81.891937000000098],[-84.656113000000005,81.887772000000098],[-84.635283999999956,81.886108000000036],[-84.621933000000013,81.886932000000002],[-84.604996000000028,81.88998400000014],[-84.714721999999995,81.969986000000119],[-84.729720999999984,81.977203000000031],[-84.751677999999913,81.984711000000061],[-84.815276999999924,82.00082400000008],[-84.840835999999967,82.006103999999993],[-84.89973399999991,82.015274000000034],[-84.93249499999996,82.019440000000088],[-85.039992999999981,82.028594999999996],[-85.116942999999935,82.033051000000057],[-85.405838000000017,82.042205999999965],[-85.678328999999906,82.054428000000087],[-85.755843999999968,82.058868000000132],[-85.851669000000015,82.06721500000009],[-85.915833000000021,82.07748400000014],[-85.999725000000012,82.094147000000021],[-86.062209999999936,82.103867000000093],[-86.091109999999901,82.104431000000034],[-86.278885000000002,82.107208000000128],[-86.485001000000011,82.114150999999936],[-86.565551999999968,82.118865999999969],[-86.637511999999958,82.124419999999986],[-86.706116000000009,82.131927000000132],[-86.731383999999935,82.136383000000023],[-86.752228000000002,82.141098000000056],[-86.856658999999922,82.184708000000057],[-86.869155999999919,82.195251000000042],[-86.876099000000011,82.202208999999982],[-86.871933000000013,82.207764000000111],[-86.843613000000005,82.212494000000106],[-86.764174999999966,82.221649000000014],[-86.669448999999929,82.228316999999947],[-86.619445999999982,82.229705999999965],[-86.571670999999981,82.230270000000075],[-86.520003999999915,82.229705999999965],[-86.316665999999998,82.224701000000096],[-86.228881999999885,82.224701000000096],[-86.181106999999997,82.225266000000147],[-86.137787000000003,82.226929000000041],[-85.984436000000017,82.237488000000099],[-85.934158000000025,82.238876000000005],[-85.841384999999946,82.239151000000049],[-85.798889000000031,82.237762000000032],[-85.753890999999953,82.237488000000099],[-85.706115999999952,82.23803700000002],[-85.662215999999944,82.239699999999971],[-85.61999499999996,82.243591000000038],[-85.603881999999999,82.24914600000011],[-85.598891999999978,82.254440000000102],[-85.580565999999976,82.264434999999992],[-85.557770000000005,82.269440000000088],[-85.508347000000015,82.273041000000092],[-85.413895000000025,82.27609300000006],[-85.370833999999945,82.279984000000127],[-85.350554999999929,82.283875000000023],[-85.34722899999997,82.286377000000073],[-85.367492999999911,82.291092000000106],[-85.396392999999989,82.29693600000013],[-85.457229999999981,82.307479999999998],[-85.481673999999941,82.313599000000011],[-85.489990000000034,82.319716999999969],[-85.515015000000005,82.343322999999998],[-85.531677000000002,82.369705000000067],[-85.50167799999997,82.393600000000106],[-85.501403999999923,82.398880000000133],[-85.515288999999996,82.403320000000008],[-85.534164000000033,82.407486000000063],[-85.669448999999872,82.409424000000001],[-85.866942999999992,82.421920999999998],[-85.904998999999975,82.424988000000099],[-85.921111999999994,82.429977000000065],[-85.911941999999954,82.435806000000071],[-85.819732999999928,82.454437000000098],[-85.794723999999974,82.458602999999982],[-85.746947999999975,82.461380000000077],[-85.708617999999944,82.463608000000022],[-85.502501999999993,82.471099999999979],[-85.298614999999927,82.478042999999957],[-85.046950999999979,82.481934000000024],[-85.003066999999874,82.480820000000051],[-84.693877999999927,82.471375000000023],[-84.662780999999995,82.468596999999988],[-84.641678000000013,82.465546000000018],[-84.62222300000002,82.459152000000131],[-84.616394000000014,82.453598000000113],[-84.613326999999913,82.447204999999997],[-84.613326999999913,82.4433140000001],[-84.631377999999984,82.440262000000018],[-84.787780999999995,82.434982000000105],[-84.895279000000016,82.433594000000028],[-84.940552000000025,82.431931000000077],[-84.943877999999984,82.425812000000064],[-84.916655999999932,82.42053199999998],[-84.888610999999855,82.416930999999977],[-84.714721999999995,82.405822999999941],[-84.559722999999906,82.394989000000066],[-84.482498000000021,82.389435000000105],[-84.449996999999996,82.386107999999979],[-84.418334999999956,82.381088000000091],[-84.388061999999991,82.371094000000085],[-84.384170999999924,82.366089000000045],[-84.387221999999952,82.361649],[-84.378600999999946,82.356933999999967],[-84.34445199999999,82.352768000000083],[-84.303329000000019,82.355819999999994],[-84.228881999999999,82.363876000000062],[-84.180556999999965,82.368042000000003],[-84.146956999999986,82.369705000000067],[-84.095550999999944,82.371094000000085],[-84.047226000000023,82.371368000000018],[-83.961394999999925,82.368591000000094],[-83.876937999999939,82.364151000000106],[-83.841948999999943,82.361374000000012],[-83.767501999999979,82.353043000000071],[-83.606383999999935,82.33137499999998],[-83.516402999999968,82.316940000000045],[-83.384734999999978,82.282210999999961],[-83.36860699999994,82.276381999999955],[-83.360001000000011,82.269440000000088],[-83.360001000000011,82.263611000000026],[-83.369155999999975,82.251663000000008],[-83.371933000000013,82.24470500000001],[-83.371933000000013,82.239151000000049],[-83.344451999999933,82.227203000000145],[-83.308334000000002,82.218323000000112],[-83.24221799999998,82.204163000000051],[-83.184157999999968,82.194702000000063],[-83.130553999999961,82.184981999999991],[-83.083892999999932,82.175812000000121],[-83.022781000000009,82.159424000000058],[-83,82.151093000000003],[-82.976669000000015,82.138321000000133],[-82.953063999999983,82.119979999999998],[-82.95666499999993,82.109711000000118],[-82.958617999999944,82.104431000000034],[-82.968338000000017,82.098038000000088],[-82.978058000000033,82.093872000000033],[-83.001953000000015,82.089157],[-83.0625,82.080276000000026],[-83.126098999999954,82.072495000000004],[-83.128051999999968,82.06721500000009],[-83.111937999999952,82.065261999999962],[-83.076400999999919,82.061920000000043],[-82.974166999999966,82.064986999999974],[-82.888335999999981,82.072495000000004],[-82.797501000000011,82.077773999999977],[-82.758057000000008,82.076934999999992],[-82.674438000000009,82.073043999999925],[-82.636397999999986,82.070540999999992],[-82.421660999999972,82.066940000000102],[-82.284163999999976,82.066375999999991],[-82.199432000000002,82.064147999999989],[-82.122222999999906,82.058594000000028],[-82.055556999999965,82.050812000000064],[-81.963622999999927,82.037201000000096],[-81.926101999999958,82.034714000000008],[-81.889998999999989,82.034988000000112],[-81.878051999999968,82.03637700000013],[-81.884734999999921,82.041091999999992],[-81.924164000000019,82.058868000000132],[-81.966110000000015,82.071105999999986],[-82.020844000000011,82.082213999999965],[-82.05860899999999,82.084717000000126],[-82.102492999999981,82.085541000000092],[-82.243056999999965,82.084991000000059],[-82.417496000000028,82.087204000000042],[-82.546386999999982,82.090271000000143],[-82.58444199999991,82.09275800000006],[-82.619719999999916,82.096099999999979],[-82.651947000000007,82.100266000000033],[-82.676940999999943,82.10775799999999],[-82.683884000000035,82.118317000000047],[-82.688599000000011,82.126083000000108],[-82.697495000000004,82.131362999999965],[-82.717223999999931,82.142761000000007],[-82.731383999999935,82.149993999999992],[-82.772232000000031,82.163315000000125],[-82.860275000000001,82.187759000000085],[-82.886947999999961,82.193862999999908],[-82.94027699999998,82.203598],[-82.987503000000004,82.214995999999985],[-83.011397999999986,82.221649000000014],[-83.027785999999878,82.235259999999982],[-83.028884999999946,82.264998999999989],[-83.028884999999946,82.276657],[-83.02555799999999,82.283324999999991],[-83.019164999999873,82.288879000000122],[-82.990829000000019,82.292480000000012],[-82.735549999999932,82.286102000000028],[-82.693603999999937,82.284714000000122],[-82.654448999999886,82.282210999999961],[-82.621658000000025,82.278045999999961],[-82.508895999999936,82.258040999999992],[-82.452788999999939,82.249420000000043],[-82.286666999999966,82.229156000000103],[-82.263061999999991,82.222214000000008],[-82.211120999999991,82.204711999999972],[-82.160278000000005,82.193313999999987],[-82.101943999999946,82.183044000000052],[-82.011123999999995,82.168594000000098],[-81.918059999999912,82.15498400000007],[-81.608886999999982,82.118590999999981],[-81.425277999999935,82.0977630000001],[-81.353057999999976,82.091659999999933],[-81.249161000000015,82.081375000000037],[-81.150283999999999,82.068878000000041],[-81.091110000000015,82.059417999999994],[-80.868332000000009,82.03137200000009],[-80.640288999999996,82.018326000000116],[-80.43249499999996,81.997481999999991],[-80.225829999999974,81.986098999999967],[-80.153609999999958,81.981368999999916],[-80.085006999999905,81.973602000000142],[-80.035277999999948,81.963042999999914],[-79.883056999999951,81.924698000000035],[-79.610000999999897,81.851089000000002],[-79.589721999999938,81.844147000000078],[-79.587783999999999,81.838318000000072],[-79.577224999999942,81.828872999999987],[-79.564163000000008,81.825271999999927],[-79.53443900000002,81.820831000000055],[-79.492217999999923,81.819717000000026],[-79.244445999999925,81.816085999999984],[-79.229171999999949,81.816085999999984],[-79.452224999999999,81.88998400000014],[-79.489989999999977,81.900269000000037],[-79.521117999999888,81.905548000000067],[-79.579726999999934,81.913605000000018],[-79.670837000000006,81.927475000000072],[-79.844451999999933,81.97137499999991],[-79.837783999999942,82.007217000000082],[-79.832229999999868,82.013885000000016],[-79.853333000000021,82.018875000000094],[-79.880829000000006,82.021927000000005],[-79.916397000000018,82.023880000000133],[-80.213897999999858,82.032211000000018],[-80.331680000000006,82.038589000000002],[-80.368606999999997,82.041091999999992],[-80.624435000000005,82.061920000000043],[-80.657226999999921,82.064697000000137],[-80.725554999999986,82.071655000000135],[-80.791107000000011,82.079437000000098],[-80.822234999999921,82.083878000000027],[-80.878326000000015,82.094147000000021],[-80.922226000000023,82.103592000000106],[-80.948607999999979,82.110260000000096],[-80.962783999999999,82.116379000000109],[-80.975554999999986,82.12359600000002],[-80.975554999999986,82.127762000000132],[-80.956664999999987,82.137206999999989],[-80.931380999999988,82.142212000000029],[-80.89973399999991,82.146378000000141],[-80.874435000000005,82.151093000000003],[-80.868056999999965,82.15498400000007],[-80.909163999999976,82.156647000000135],[-81.051391999999964,82.154709000000025],[-81.171111999999994,82.156372000000147],[-81.253341999999918,82.159714000000065],[-81.324722000000008,82.164993000000038],[-81.423324999999977,82.176926000000094],[-81.799728000000016,82.222762999999986],[-81.825561999999934,82.226654000000053],[-81.887786999999946,82.23803700000002],[-82.170546999999999,82.286652000000061],[-82.454726999999991,82.328048999999965],[-82.513061999999934,82.337769000000037],[-82.625548999999921,82.359146000000067],[-82.679992999999968,82.37081900000004],[-82.711670000000026,82.382477000000108],[-82.722778000000005,82.388321000000076],[-82.7308349999999,82.395264000000111],[-82.732223999999974,82.401657000000057],[-82.728881999999942,82.408325000000048],[-82.710281000000009,82.419434000000081],[-82.698333999999988,82.424988000000099],[-82.539444000000003,82.497208000000114],[-82.520553999999947,82.502487000000087],[-82.498336999999992,82.506377999999984],[-82.458892999999989,82.508331000000112],[-82.406386999999881,82.509155000000078],[-82.316956000000005,82.506943000000035],[-82.091675000000009,82.501389000000017],[-81.669997999999907,82.492477000000008],[-81.541672000000005,82.496093999999971],[-81.542220999999927,82.504990000000078],[-81.713332999999977,82.51527400000009],[-81.75140399999998,82.516937000000041],[-81.84722899999997,82.515548999999965],[-81.880554000000018,82.517761000000007],[-81.927489999999977,82.522766000000047],[-81.966400000000021,82.528870000000097],[-82.263901000000033,82.576660000000061],[-82.321121000000005,82.589157000000057],[-82.343886999999938,82.595261000000107],[-82.390288999999996,82.611923000000104],[-82.394729999999925,82.617477000000065],[-82.392226999999934,82.622756999999979],[-82.38110399999988,82.634720000000016],[-82.371933000000013,82.639708999999982],[-82.354445999999996,82.645537999999988],[-82.335281000000009,82.650543000000027],[-82.288054999999986,82.659988000000112],[-82.255004999999926,82.664428999999984],[-82.215285999999992,82.668593999999985],[-82.154998999999918,82.671097000000145],[-82.060271999999998,82.669708000000014],[-81.97222899999997,82.666382000000112],[-81.931380999999931,82.663878999999952],[-81.543335000000013,82.637207000000046],[-81.432495000000017,82.629150000000095],[-81.359725999999966,82.62081900000004],[-81.30082699999997,82.611098999999911],[-81.136123999999995,82.578049000000078],[-80.989440999999999,82.547211000000061],[-80.949721999999952,82.538040000000137],[-80.891952999999944,82.532760999999994],[-80.581679999999949,82.543045000000006],[-80.578063999999983,82.546097000000088],[-80.599166999999966,82.55442800000003],[-80.87388599999997,82.629700000000128],[-80.994445999999925,82.650269000000094],[-81.049987999999985,82.660812000000078],[-81.077224999999999,82.666931000000091],[-81.097503999999958,82.672485000000052],[-81.124709999999993,82.686919999999986],[-81.223617999999988,82.715820000000065],[-81.305831999999953,82.733871000000022],[-81.449996999999996,82.755553999999961],[-81.508620999999948,82.764709000000039],[-81.573623999999938,82.788315000000068],[-81.58444199999991,82.794434000000138],[-81.585006999999962,82.800812000000064],[-81.571670999999924,82.806366000000082],[-81.556655999999975,82.811371000000122],[-81.536391999999921,82.816665999999998],[-81.514175000000023,82.821106000000043],[-81.473052999999993,82.82499700000011],[-81.411391999999921,82.827773999999977],[-81.359725999999966,82.827773999999977],[-81.022232000000031,82.821930000000009],[-80.977218999999934,82.820267000000058],[-80.801940999999999,82.812485000000095],[-80.500564999999995,82.797484999999938],[-80.418334999999956,82.792205999999965],[-80.381103999999993,82.788879000000065],[-80.318618999999956,82.779984000000013],[-80.2933349999999,82.774429000000112],[-80.15834000000001,82.727768000000083],[-80.138901000000033,82.719986000000119],[-80.139449999999954,82.715820000000065],[-80.178329000000019,82.699997000000053],[-80.182495000000017,82.69470199999995],[-80.181380999999931,82.687759000000142],[-80.160277999999948,82.681366000000025],[-80.070846999999901,82.665543000000014],[-80.003066999999987,82.656372000000033],[-79.941665999999998,82.649429000000055],[-79.861664000000019,82.644150000000081],[-79.817779999999914,82.644440000000088],[-79.800827000000027,82.646652000000131],[-79.803604000000007,82.649994000000049],[-79.822509999999966,82.65776100000005],[-79.848617999999988,82.663878999999952],[-79.966949,82.684708000000114],[-79.983321999999987,82.689147999999989],[-79.977492999999981,82.695815999999922],[-79.961394999999925,82.700821000000019],[-79.928604000000007,82.705551000000014],[-79.885833999999875,82.708602999999925],[-79.829726999999991,82.708878000000141],[-79.787505999999894,82.707763999999997],[-79.74749799999995,82.704987000000074],[-79.684158000000025,82.699706999999989],[-79.617492999999911,82.693039000000056],[-79.468338000000017,82.677475000000129],[-79.384734999999978,82.672760000000096],[-79.149993999999936,82.667755000000056],[-78.843613000000005,82.664992999999981],[-78.565552000000025,82.674698000000035],[-78.521118000000001,82.67692599999998],[-78.502791999999999,82.681090999999981],[-78.53195199999999,82.684418000000107],[-78.576675000000023,82.686919999999986],[-78.840835999999967,82.680817000000047],[-78.895003999999858,82.680267000000015],[-78.931945999999982,82.681656000000032],[-79.243057000000022,82.695251000000098],[-79.331680000000006,82.699706999999989],[-79.40306099999998,82.70637499999998],[-79.623046999999985,82.727768000000083],[-79.836944999999901,82.750549000000092],[-79.886948000000018,82.759430000000066],[-79.913329999999917,82.765274000000034],[-79.93638599999997,82.772217000000069],[-79.996947999999975,82.803314],[-79.975829999999974,82.808594000000028],[-79.942489999999964,82.811371000000122],[-79.692215000000033,82.818054000000075],[-79.674437999999952,82.820267000000058],[-79.67222599999991,82.823883000000137],[-79.673889000000031,82.824707000000103],[-79.847777999999948,82.834991000000116],[-79.896118000000001,82.835815000000082],[-80.006667999999934,82.834427000000005],[-80.110000999999954,82.834717000000012],[-80.15834000000001,82.835541000000148],[-80.194153000000028,82.838318000000072],[-80.219727000000034,82.84165999999999],[-80.277221999999938,82.850815000000011],[-80.393065999999976,82.875534000000016],[-80.430282999999974,82.887497000000053],[-80.42971799999998,82.894150000000025],[-80.398055999999997,82.899719000000005],[-80.095839999999953,82.937194999999974],[-79.904723999999987,82.951096000000121],[-79.793335000000013,82.957489000000123],[-79.458344000000011,82.974152000000004],[-79.414444000000003,82.975266000000147],[-79.370543999999995,82.974152000000004],[-79.177489999999977,82.951935000000105],[-79.073333999999988,82.901931999999988],[-79.064437999999882,82.895828000000108],[-79.066101000000003,82.889434999999992],[-78.928054999999972,82.898605000000032],[-78.825287000000003,82.928040000000124],[-78.780288999999982,82.93803400000013],[-78.756118999999956,82.942474000000118],[-78.719726999999978,82.946640000000059],[-78.671111999999937,82.945526000000086],[-78.631942999999978,82.941360000000145],[-78.546111999999994,82.926651000000106],[-78.521666999999923,82.921097000000088],[-78.503341999999918,82.913314999999955],[-78.501953000000015,82.907760999999994],[-78.504180999999903,82.901093000000003],[-78.521941999999967,82.889159999999947],[-78.538605000000018,82.876647999999989],[-78.557770000000005,82.860535000000141],[-78.553328999999906,82.853592000000106],[-78.53443900000002,82.8477630000001],[-78.500564999999938,82.845534999999984],[-78.341674999999952,82.850540000000024],[-78.175551999999982,82.827208999999982],[-78.14416499999993,82.823318000000086],[-78.109160999999972,82.825272000000098],[-78.106658999999979,82.831940000000088],[-78.128875999999877,82.836655000000121],[-78.194442999999922,82.845824999999991],[-78.223617999999988,82.851088999999945],[-78.241378999999938,82.858871000000079],[-78.238891999999964,82.865265000000136],[-78.108337000000006,82.893326000000059],[-78.080291999999986,82.898331000000098],[-77.986663999999962,82.909988000000055],[-77.949996999999883,82.91415400000011],[-77.863327000000027,82.921371000000022],[-77.813048999999864,82.92442299999999],[-77.768340999999964,82.922485000000052],[-77.708344000000011,82.916092000000049],[-77.688889000000017,82.912490999999989],[-77.616652999999985,82.902771000000087],[-77.528060999999923,82.891098000000113],[-77.467223999999987,82.883880999999974],[-77.405272999999909,82.878860000000032],[-77.319457999999997,82.873306000000014],[-77.128325999999959,82.863312000000008],[-77.108046999999999,82.859146000000123],[-77.089171999999962,82.852767999999969],[-76.96665999999999,82.804703000000131],[-76.959166999999923,82.774155000000007],[-76.941665999999998,82.768326000000002],[-76.898346000000004,82.766098],[-76.851104999999961,82.764999000000046],[-76.815552000000025,82.761107999999979],[-76.789168999999958,82.756377999999927],[-76.766662999999994,82.750823999999966],[-76.708617999999944,82.733047000000056],[-76.674438000000009,82.721374999999966],[-76.644164999999987,82.709152000000074],[-76.612503000000004,82.696091000000138],[-76.598052999999993,82.688873000000115],[-76.570556999999951,82.666656000000046],[-76.538329999999974,82.664153999999996],[-76.387221999999952,82.651382000000012],[-76.09333799999996,82.62081900000004],[-76.058884000000035,82.616928000000144],[-75.913895000000025,82.597487999999942],[-75.892226999999991,82.591933999999981],[-75.896392999999989,82.588318000000072],[-75.918610000000001,82.579987000000017],[-75.938323999999966,82.575821000000133],[-75.972778000000005,82.571381000000088],[-76.038895000000025,82.557205000000067],[-76.194716999999969,82.511108000000036],[-76.207503999999972,82.506377999999984],[-76.217772999999909,82.500548999999978],[-76.255279999999971,82.471924000000115],[-76.261002000000019,82.466552999999976],[-76.236937999999896,82.445250999999985],[-76.230835000000013,82.444702000000007],[-76.184158000000025,82.453872999999987],[-76.102782999999874,82.470534999999984],[-76.037780999999939,82.484421000000111],[-75.975006000000008,82.499709999999993],[-75.887221999999952,82.522217000000126],[-75.802779999999984,82.546371000000022],[-75.773894999999925,82.557205000000067],[-75.671386999999925,82.586929000000112],[-75.648055999999997,82.591660000000047],[-75.606383999999935,82.595825000000048],[-75.500838999999928,82.600266000000147],[-75.451675000000023,82.603317000000004],[-75.420273000000009,82.606934000000138],[-75.396118000000001,82.614699999999971],[-75.40972899999997,82.61914100000007],[-75.43472300000002,82.623871000000122],[-75.468886999999881,82.627762000000018],[-75.503615999999852,82.628860000000088],[-75.55749499999996,82.628585999999984],[-75.625548999999978,82.633040999999992],[-75.670546999999999,82.642761000000064],[-75.807495000000017,82.654709000000082],[-76.103057999999976,82.68609600000002],[-76.235824999999977,82.712203999999986],[-76.256392999999946,82.717209000000025],[-76.275557999999933,82.724425999999994],[-76.299987999999871,82.739700000000028],[-76.306655999999919,82.745819000000097],[-76.309158000000025,82.752777000000094],[-76.269454999999994,82.760817999999972],[-76.226395000000025,82.764435000000105],[-76.176391999999964,82.767212000000029],[-76.056945999999982,82.771652000000017],[-76.014724999999999,82.775818000000129],[-75.989440999999999,82.779984000000013],[-75.976104999999961,82.784714000000065],[-75.998336999999935,82.787490999999932],[-76.18638599999997,82.78387500000008],[-76.241378999999995,82.783600000000035],[-76.288605000000018,82.784714000000065],[-76.375274999999988,82.789154000000053],[-76.447495000000004,82.797484999999938],[-76.50167799999997,82.8077550000001],[-76.525283999999942,82.813873000000001],[-76.545272999999952,82.821106000000043],[-76.586394999999982,82.83859300000006],[-76.629165999999998,82.859710999999947],[-76.666655999999989,82.872482000000048],[-76.710830999999985,82.885818000000029],[-76.752791999999999,82.894988999999953],[-76.844161999999983,82.90914900000007],[-76.881942999999978,82.913605000000018],[-77.025832999999977,82.927765000000079],[-77.066390999999953,82.93081699999999],[-77.131667999999991,82.939972000000068],[-77.344726999999978,82.972487999999998],[-77.385283999999899,82.983046999999999],[-77.381377999999984,82.994431000000134],[-77.364440999999999,83.000000000000114],[-77.341949,83.005554000000132],[-77.276108000000022,83.020264000000054],[-77.252227999999945,83.025269000000094],[-77.222777999999948,83.030548000000067],[-77.183883999999978,83.033875000000023],[-77.134734999999978,83.032486000000006],[-77.137221999999895,83.028320000000122],[-77.171386999999982,83.017211999999972],[-77.169723999999974,83.013885000000016],[-77.135558999999944,83.011383000000137],[-76.863051999999925,83.010818000000086],[-76.559432999999956,83.011932000000058],[-76.360274999999945,83.021378000000027],[-76.266662999999994,83.02915999999999],[-76.20666499999993,83.036652000000117],[-76.113327000000027,83.05053700000002],[-76.079177999999956,83.053589000000102],[-76.028610000000015,83.054428000000087],[-75.979720999999927,83.05304000000001],[-75.948607999999922,83.051926000000037],[-75.580841000000021,83.038040000000024],[-75.313323999999909,83.027480999999966],[-75.046951000000035,83.041656000000103],[-75,83.043884000000048],[-74.956389999999999,83.04553199999998],[-74.797501000000011,83.043594000000041],[-74.706664999999987,83.041091999999935],[-74.43582200000003,83.027205999999978],[-74.408050999999887,83.024704000000099],[-74.279175000000009,83.009995000000004],[-74.172774999999888,82.991088999999988],[-74.084166999999979,82.972487999999998],[-74.018065999999976,82.956940000000145],[-73.879439999999875,82.897217000000126],[-73.851668999999958,82.866653000000042],[-73.817779999999971,82.852767999999969],[-73.607772999999952,82.81581099999994],[-73.548339999999939,82.806091000000038],[-73.281951999999933,82.766388000000063],[-73.247222999999963,82.761658000000011],[-73.160278000000005,82.751388999999961],[-73.075011999999958,82.745819000000097],[-72.949721999999952,82.738876000000062],[-72.906661999999983,82.735808999999961],[-72.835830999999985,82.728592000000049],[-72.75,82.714706000000092],[-72.700835999999981,82.703323000000069],[-72.672225999999966,82.698593000000017],[-72.633895999999936,82.694427000000132],[-72.603332999999964,82.695815999999922],[-72.594727000000034,82.697479000000044],[-72.49888599999997,82.718323000000055],[-72.502501999999936,82.724425999999994],[-72.648894999999925,82.746643000000063],[-72.716659999999933,82.755553999999961],[-72.912216000000001,82.776657000000057],[-72.983886999999982,82.78387500000008],[-73.027221999999881,82.786926000000108],[-73.211394999999925,82.813873000000001],[-73.257506999999919,82.825821000000076],[-73.401397999999915,82.874985000000038],[-73.420272999999952,82.890548999999965],[-73.430556999999908,82.893599999999992],[-73.460830999999928,82.898605000000032],[-73.49499499999996,82.90248100000008],[-73.577224999999999,82.908035000000098],[-73.607498000000021,82.913040000000137],[-73.633330999999998,82.918593999999985],[-73.65055799999999,82.925811999999951],[-73.644164999999873,82.932205000000124],[-73.634444999999971,82.936646000000053],[-73.619155999999975,82.941086000000041],[-73.261948000000018,83.007767000000058],[-73.033889999999928,83.036652000000117],[-72.948607999999979,83.055252000000053],[-72.927489999999977,83.067490000000078],[-72.650557999999933,83.096374999999966],[-72.59973100000002,83.096939000000077],[-72.57028200000002,83.092758000000003],[-72.568619000000012,83.087769000000037],[-72.556655999999975,83.079712000000086],[-72.523894999999925,83.076934999999992],[-72.477492999999868,83.076659999999947],[-72.424163999999962,83.079163000000108],[-72.407776000000013,83.083602999999982],[-72.393616000000009,83.089431999999988],[-72.365829000000019,83.094147000000021],[-72.336394999999925,83.097763000000043],[-72.226943999999946,83.101379000000122],[-72.111938000000009,83.101089000000115],[-72.005568999999866,83.099152000000061],[-71.831680000000006,83.097763000000043],[-71.712783999999886,83.098877000000016],[-71.611663999999905,83.096099999999979],[-71.581679999999949,83.091095000000109],[-71.596953999999869,83.085266000000047],[-71.654448999999943,83.068878000000041],[-71.696380999999917,83.057755000000043],[-71.75,83.043045000000063],[-71.775008999999898,83.032211000000018],[-71.7933349999999,83.020537999999988],[-71.794998000000021,83.013611000000083],[-71.792220999999984,83.00749200000007],[-71.778335999999911,83.001663000000065],[-71.567229999999938,82.941086000000041],[-71.493606999999997,82.932205000000124],[-71.33666999999997,82.914703000000088],[-71.219726999999978,82.914993000000095],[-71.144164999999987,82.908325000000104],[-71.084166999999979,82.900542999999971],[-71.018340999999964,82.891937000000041],[-70.952224999999999,82.883605999999986],[-70.871384000000035,82.881087999999977],[-70.835006999999962,82.883041000000105],[-70.84333799999996,82.889984000000084],[-70.857773000000009,82.897217000000126],[-70.904174999999952,82.908035000000098],[-70.961944999999957,82.918593999999985],[-71.080841000000021,82.937484999999981],[-71.306380999999931,82.982208000000071],[-71.472777999999948,83.001663000000065],[-71.497498000000007,83.007217000000026],[-71.489990000000034,83.014435000000049],[-71.474166999999852,83.019440000000088],[-71.425002999999947,83.029434000000094],[-71.125274999999988,83.087494000000049],[-70.887221999999895,83.098038000000088],[-70.694152999999972,83.103592000000049],[-70.585280999999952,83.103317000000061],[-70.470000999999968,83.107482999999945],[-70.37388599999997,83.113311999999951],[-70.260009999999966,83.113876000000118],[-70.160003999999958,83.111374000000012],[-70.111937999999952,83.109421000000111]]]} +} +] +} diff --git a/benchmark/data/citm_catalog.json b/benchmark/data/citm_catalog.json new file mode 100644 index 00000000000000..245fdbbedf478e --- /dev/null +++ b/benchmark/data/citm_catalog.json @@ -0,0 +1,50469 @@ +{ + "areaNames": { + "205705993": "Arrière-scène central", + "205705994": "1er balcon central", + "205705995": "2ème balcon bergerie cour", + "205705996": "2ème balcon bergerie jardin", + "205705998": "1er balcon bergerie jardin", + "205705999": "1er balcon bergerie cour", + "205706000": "Arrière-scène jardin", + "205706001": "Arrière-scène cour", + "205706002": "2ème balcon jardin", + "205706003": "2ème balcon cour", + "205706004": "2ème Balcon central", + "205706005": "1er balcon jardin", + "205706006": "1er balcon cour", + "205706007": "Orchestre central", + "205706008": "Orchestre jardin", + "205706009": "Orchestre cour", + "342752287": "Zone physique secrète" + }, + "audienceSubCategoryNames": { + "337100890": "Abonné" + }, + "blockNames": {}, + "events": { + "138586341": { + "description": null, + "id": 138586341, + "logo": null, + "name": "30th Anniversary Tour", + "subTopicIds": [ + 337184269, + 337184283 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604 + ] + }, + "138586345": { + "description": null, + "id": 138586345, + "logo": "/images/UE0AAAAACEKo6QAAAAZDSVRN", + "name": "Berliner Philharmoniker", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586349": { + "description": null, + "id": 138586349, + "logo": "/images/UE0AAAAACEKo7QAAAAZDSVRN", + "name": "Berliner Philharmoniker", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586353": { + "description": null, + "id": 138586353, + "logo": "/images/UE0AAAAACEKo8QAAAAZDSVRN", + "name": "Pittsburgh Symphony Orchestra", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586357": { + "description": null, + "id": 138586357, + "logo": "/images/UE0AAAAACEKo9QAAAAhDSVRN", + "name": "Orchestre Philharmonique de Radio France", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586361": { + "description": null, + "id": 138586361, + "logo": "/images/UE0AAAAACEKo+QAAAAVDSVRN", + "name": "WDR Sinfonieorchester Köln", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586365": { + "description": null, + "id": 138586365, + "logo": "/images/UE0AAAAACEKo/QAAAAVDSVRN", + "name": "Alessandro - G.F. Haendel", + "subTopicIds": [ + 337184284, + 337184263, + 337184298, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586369": { + "description": null, + "id": 138586369, + "logo": "/images/UE0AAAAACEKpAQAAAAVDSVRN", + "name": "Orchestre Colonne", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586373": { + "description": null, + "id": 138586373, + "logo": "/images/UE0AAAAACEKpBQAAAAdDSVRN", + "name": "Christophe", + "subTopicIds": [ + 337184280, + 337184297, + 337184283, + 337184262 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586377": { + "description": null, + "id": 138586377, + "logo": "/images/UE0AAAAACEKpCQAAAAVDSVRN", + "name": "Joshua Redman Quartet", + "subTopicIds": [ + 337184269, + 337184283, + 337184262 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586381": { + "description": null, + "id": 138586381, + "logo": "/images/UE0AAAAACEKpDQAAAAVDSVRN", + "name": "Orchestre Symphonique d'Etat de São Paulo", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586385": { + "description": null, + "id": 138586385, + "logo": "/images/UE0AAAAACEKpEQAAAAVDSVRN", + "name": "Le génie italien", + "subTopicIds": [ + 337184284, + 337184298, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586389": { + "description": null, + "id": 138586389, + "logo": "/images/UE0AAAAACEKpFQAAAAVDSVRN", + "name": "Les Noces de Figaro - W.A. Mozart (version de concert)", + "subTopicIds": [ + 337184284, + 337184298, + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586393": { + "description": null, + "id": 138586393, + "logo": "/images/UE0AAAAACEKpGQAAAAhDSVRN", + "name": "Orchestre Pasdeloup", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586397": { + "description": null, + "id": 138586397, + "logo": null, + "name": "The Saxophone Summit", + "subTopicIds": [ + 337184269, + 337184283, + 337184262 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586401": { + "description": null, + "id": 138586401, + "logo": "/images/UE0AAAAACEKpIQAAAAVDSVRN", + "name": "Patricia Petibon - Nouveau Monde", + "subTopicIds": [ + 337184263, + 337184298, + 337184283, + 337184292 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586405": { + "description": null, + "id": 138586405, + "logo": "/images/UE0AAAAACEKpJQAAAAVDSVRN", + "name": "Russian National Orchestra", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586409": { + "description": null, + "id": 138586409, + "logo": "/images/UE0AAAAACEKpKQAAAAZDSVRN", + "name": "Orchestre Philharmonique de Radio France", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586413": { + "description": null, + "id": 138586413, + "logo": "/images/UE0AAAAACEKpLQAAAAVDSVRN", + "name": "Evgeny Kissin", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586417": { + "description": null, + "id": 138586417, + "logo": "/images/UE0AAAAACEKpMQAAAAZDSVRN", + "name": "Bach, concertos pour piano", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586421": { + "description": null, + "id": 138586421, + "logo": "/images/UE0AAAAACEKpNQAAAAVDSVRN", + "name": "Bach, concertos pour piano", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586425": { + "description": null, + "id": 138586425, + "logo": null, + "name": "Orchestre National d'Île-de-France", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586429": { + "description": null, + "id": 138586429, + "logo": "/images/UE0AAAAACEKpPQAAAAVDSVRN", + "name": "Gewandhausorchester Leipzig", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586433": { + "description": null, + "id": 138586433, + "logo": "/images/UE0AAAAACEKpQQAAAAVDSVRN", + "name": "Gewandhausorchester Leipzig", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586437": { + "description": null, + "id": 138586437, + "logo": "/images/UE0AAAAACEKpRQAAAAVDSVRN", + "name": "Budapest Festival Orchestra", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586441": { + "description": null, + "id": 138586441, + "logo": "/images/UE0AAAAACEKpSQAAAAVDSVRN", + "name": "Orchestre National du Capitole de Toulouse", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586445": { + "description": null, + "id": 138586445, + "logo": "/images/UE0AAAAACEKpTQAAAAVDSVRN", + "name": "Gewandhausorchester Leipzig", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586449": { + "description": null, + "id": 138586449, + "logo": "/images/UE0AAAAACEKpUQAAAAVDSVRN", + "name": "Gewandhausorchester Leipzig", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586453": { + "description": null, + "id": 138586453, + "logo": "/images/UE0AAAAACEKpVQAAAAVDSVRN", + "name": "Remember Shakti", + "subTopicIds": [ + 337184269, + 337184283, + 337184262 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586457": { + "description": null, + "id": 138586457, + "logo": "/images/UE0AAAAACEKpWQAAAAVDSVRN", + "name": "Menahem Pressler - Quatuor Ebène", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586461": { + "description": null, + "id": 138586461, + "logo": "/images/UE0AAAAACEKpXQAAAAZDSVRN", + "name": "Orchestre Philharmonique de Radio France", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586465": { + "description": null, + "id": 138586465, + "logo": "/images/UE0AAAAACEKpYQAAAAVDSVRN", + "name": "Orquesta Buena Vista Social Club", + "subTopicIds": [ + 337184279, + 337184283, + 337184262 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586469": { + "description": null, + "id": 138586469, + "logo": "/images/UE0AAAAACEKpZQAAAAVDSVRN", + "name": "The Cleveland Orchestra", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586473": { + "description": null, + "id": 138586473, + "logo": "/images/UE0AAAAACEKpaQAAAAVDSVRN", + "name": "The Cleveland Orchestra", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586477": { + "description": null, + "id": 138586477, + "logo": "/images/UE0AAAAACEKpbQAAAAZDSVRN", + "name": "Orchestre Philharmonique du Luxembourg", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586481": { + "description": null, + "id": 138586481, + "logo": "/images/UE0AAAAACEKpcQAAAAVDSVRN", + "name": "Maurizio Pollini, piano", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586485": { + "description": null, + "id": 138586485, + "logo": "/images/UE0AAAAACEKpdQAAAAZDSVRN", + "name": "Orchestre Philharmonique de Radio France", + "subTopicIds": [ + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586501": { + "description": null, + "id": 138586501, + "logo": "/images/UE0AAAAACEKphQAAAAVDSVRN", + "name": "Antonio Meneses - Maria-João Pires", + "subTopicIds": [ + 337184268, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586505": { + "description": null, + "id": 138586505, + "logo": "/images/UE0AAAAACEKpiQAAAAVDSVRN", + "name": "Musiques pour la reine Caroline", + "subTopicIds": [ + 337184284, + 337184263, + 337184298, + 337184283, + 337184292 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586509": { + "description": null, + "id": 138586509, + "logo": null, + "name": "Orchestre National d'Île-de-France", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586513": { + "description": null, + "id": 138586513, + "logo": "/images/UE0AAAAACEKpkQAAAAVDSVRN", + "name": "Les Mystères d'Isis - W.A. Mozart (cersion de concert)", + "subTopicIds": [ + 337184284, + 337184298, + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586517": { + "description": null, + "id": 138586517, + "logo": "/images/UE0AAAAACEKplQAAAAdDSVRN", + "name": "Martha Argerich - Gidon Kremer", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586521": { + "description": null, + "id": 138586521, + "logo": "/images/UE0AAAAACEKpmQAAAAVDSVRN", + "name": "Cecilia Bartoli - Mozart et la Vienne classique", + "subTopicIds": [ + 337184298, + 337184268, + 337184283, + 337184292 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586525": { + "description": null, + "id": 138586525, + "logo": "/images/UE0AAAAACEKpnQAAAAVDSVRN", + "name": "Orchestre Philharmonique de Radio France", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586529": { + "description": null, + "id": 138586529, + "logo": null, + "name": "Orchestre Pasdeloup", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586533": { + "description": null, + "id": 138586533, + "logo": "/images/UE0AAAAACEKppQAAAAVDSVRN", + "name": "Orchestre du Théâtre Mariinsky", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586537": { + "description": null, + "id": 138586537, + "logo": "/images/UE0AAAAACEKpqQAAAAVDSVRN", + "name": "Orchestre du Théâtre Mariinsky", + "subTopicIds": [ + 337184298, + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586541": { + "description": null, + "id": 138586541, + "logo": "/images/UE0AAAAACEKprQAAAAVDSVRN", + "name": "Orchestre du Théâtre Mariinsky", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586545": { + "description": null, + "id": 138586545, + "logo": "/images/UE0AAAAACEKpsQAAAAVDSVRN", + "name": "Academy of Saint Martin in the Fields", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586549": { + "description": null, + "id": 138586549, + "logo": "/images/UE0AAAAACEKptQAAAAVDSVRN", + "name": "Quatuor Hagen", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586553": { + "description": null, + "id": 138586553, + "logo": "/images/UE0AAAAACEKpuQAAAAVDSVRN", + "name": "Quatuor Hagen", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586557": { + "description": null, + "id": 138586557, + "logo": "/images/UE0AAAAACEKpvQAAAAVDSVRN", + "name": "Quatuor Hagen", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586561": { + "description": null, + "id": 138586561, + "logo": "/images/UE0AAAAACEKpwQAAAAVDSVRN", + "name": "Sunwook Kim, piano", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586565": { + "description": null, + "id": 138586565, + "logo": null, + "name": "Orchestre Colonne", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586569": { + "description": null, + "id": 138586569, + "logo": "/images/UE0AAAAACEKpyQAAAAVDSVRN", + "name": "Orchestre Philharmonique de Radio France", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586581": { + "description": null, + "id": 138586581, + "logo": null, + "name": "Orchestre National de France", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586585": { + "description": null, + "id": 138586585, + "logo": "/images/UE0AAAAACEKp2QAAAAVDSVRN", + "name": "Messe en si mineur - J.S. Bach", + "subTopicIds": [ + 337184296, + 337184263, + 337184298, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586589": { + "description": null, + "id": 138586589, + "logo": null, + "name": "Le Messie - G.F. Haendel", + "subTopicIds": [ + 337184263, + 337184298, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586593": { + "description": null, + "id": 138586593, + "logo": "/images/UE0AAAAACEKp4QAAAAdDSVRN", + "name": "Orchestre National d'Île-de-France", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586597": { + "description": null, + "id": 138586597, + "logo": "/images/UE0AAAAACEKp5QAAAAVDSVRN", + "name": "Orchestre Philharmonique de Radio France", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586601": { + "description": null, + "id": 138586601, + "logo": "/images/UE0AAAAACEKp6QAAAAdDSVRN", + "name": "Orchestre Pasdeloup", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586605": { + "description": null, + "id": 138586605, + "logo": null, + "name": "Orchestre Colonne", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586609": { + "description": null, + "id": 138586609, + "logo": null, + "name": "Ciné-concert - Le Cuirassé Potemkine", + "subTopicIds": [ + 337184267, + 337184262, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 107888604, + 324846100 + ] + }, + "138586613": { + "description": null, + "id": 138586613, + "logo": "/images/UE0AAAAACEKp9QAAAAVDSVRN", + "name": "Orchestre Philharmonique de Radio France", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586617": { + "description": null, + "id": 138586617, + "logo": "/images/UE0AAAAACEKp+QAAAAVDSVRN", + "name": "London Symphony Orchestra", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586625": { + "description": null, + "id": 138586625, + "logo": null, + "name": "Orchestre National d'Île-de-France", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586629": { + "description": null, + "id": 138586629, + "logo": "/images/UE0AAAAACEKqBQAAAAVDSVRN", + "name": "Orquesta Sinfonica Simón Bolívar de Venezuela", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586633": { + "description": null, + "id": 138586633, + "logo": "/images/UE0AAAAACEKqCQAAAAVDSVRN", + "name": "Orchestre Philharmonique de Radio France", + "subTopicIds": [ + 337184298, + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586641": { + "description": null, + "id": 138586641, + "logo": "/images/UE0AAAAACEKqEQAAAAVDSVRN", + "name": "Edita Gruberova - Airs de concert", + "subTopicIds": [ + 337184284, + 337184298, + 337184283, + 337184292 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586645": { + "description": null, + "id": 138586645, + "logo": "/images/UE0AAAAACEKqFQAAAAdDSVRN", + "name": "Orchestre National d'Île-de-France", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586649": { + "description": null, + "id": 138586649, + "logo": "/images/UE0AAAAACEKqGQAAAAZDSVRN", + "name": "Alexei Volodin, piano", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586653": { + "description": null, + "id": 138586653, + "logo": null, + "name": "Sonya Yoncheva - Diva !", + "subTopicIds": [ + 337184284, + 337184263, + 337184298, + 337184283, + 337184292 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586657": { + "description": null, + "id": 138586657, + "logo": "/images/UE0AAAAACEKqIQAAAAVDSVRN", + "name": "Orchestre Philharmonique de Radio France", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586661": { + "description": null, + "id": 138586661, + "logo": null, + "name": "Le Ramayana balinais - L'Enlèvement de Sita", + "subTopicIds": [ + 337184279, + 337184283, + 337184262 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586667": { + "description": null, + "id": 138586667, + "logo": null, + "name": "Dave Holland & friends", + "subTopicIds": [ + 337184269, + 337184283, + 337184262 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586671": { + "description": null, + "id": 138586671, + "logo": "/images/UE0AAAAACEKqLwAAAAlDSVRN", + "name": "Boris Godounov - M.Moussorgski (version de concert)", + "subTopicIds": [ + 337184284, + 337184298, + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586675": { + "description": null, + "id": 138586675, + "logo": "/images/UE0AAAAACEKqMwAAAAVDSVRN", + "name": "Insula orchestra - Accentus", + "subTopicIds": [ + 337184298, + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586679": { + "description": null, + "id": 138586679, + "logo": "/images/UE0AAAAACEKqNwAAAAVDSVRN", + "name": "Orchestre Philharmonique de Radio France", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586687": { + "description": null, + "id": 138586687, + "logo": "/images/UE0AAAAACEKqPwAAAAVDSVRN", + "name": "Bryn Terfel - Héros légendaires", + "subTopicIds": [ + 337184284, + 337184298, + 337184283, + 337184292 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586691": { + "description": null, + "id": 138586691, + "logo": null, + "name": "Les Siècles", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586695": { + "description": null, + "id": 138586695, + "logo": "/images/UE0AAAAACEKqRwAAAAVDSVRN", + "name": "Gautier Capuçon - Frank Braley", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586699": { + "description": null, + "id": 138586699, + "logo": null, + "name": "Festival Présences 2014 \"Paris Berlin\"", + "subTopicIds": [ + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586703": { + "description": null, + "id": 138586703, + "logo": "/images/UE0AAAAACEKqTwAAAAZDSVRN", + "name": "Autour de Tristan", + "subTopicIds": [ + 337184284, + 337184298, + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586707": { + "description": null, + "id": 138586707, + "logo": "/images/UE0AAAAACEKqUwAAAAVDSVRN", + "name": "Orchestre du Théâtre Mariinsky", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586711": { + "description": null, + "id": 138586711, + "logo": "/images/UE0AAAAACEKqVwAAAAVDSVRN", + "name": "Orchestre du Théâtre Mariinsky", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586715": { + "description": null, + "id": 138586715, + "logo": "/images/UE0AAAAACEKqWwAAAAVDSVRN", + "name": "Orchestre du Théâtre Mariinsky", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586719": { + "description": null, + "id": 138586719, + "logo": "/images/UE0AAAAACEKqXwAAAAVDSVRN", + "name": "Etienne Daho et invités", + "subTopicIds": [ + 337184280, + 337184297, + 337184283, + 337184262 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586723": { + "description": null, + "id": 138586723, + "logo": null, + "name": "Fantasia in concert", + "subTopicIds": [ + 337184299, + 337184268, + 337184267, + 337184275, + 337184282 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846098, + 324846099, + 107888604, + 324846100 + ] + }, + "138586731": { + "description": null, + "id": 138586731, + "logo": "/images/UE0AAAAACEKqawAAAAVDSVRN", + "name": "Khatia Buniatishvili, piano", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586735": { + "description": null, + "id": 138586735, + "logo": "/images/UE0AAAAACEKqbwAAAAVDSVRN", + "name": "Orchestre Philharmonique de Radio France", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586743": { + "description": null, + "id": 138586743, + "logo": null, + "name": "Guy Braunstein - Zvi Plesser - Sunwook Kim", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586747": { + "description": null, + "id": 138586747, + "logo": "/images/UE0AAAAACEKqewAAAAVDSVRN", + "name": "Janine Jansen and friends", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586751": { + "description": null, + "id": 138586751, + "logo": "/images/UE0AAAAACEKqfwAAAAVDSVRN", + "name": "Elena Bashkirova, piano", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586755": { + "description": null, + "id": 138586755, + "logo": null, + "name": "Orchestre Philharmonique de Radio France", + "subTopicIds": [ + 337184284, + 337184298, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586759": { + "description": null, + "id": 138586759, + "logo": null, + "name": "San Francisco Symphony", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586771": { + "description": null, + "id": 138586771, + "logo": null, + "name": "Passion selon saint Jean - J.S. Bach", + "subTopicIds": [ + 337184296, + 337184263, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586775": { + "description": null, + "id": 138586775, + "logo": null, + "name": "Yundi Li , piano", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586779": { + "description": null, + "id": 138586779, + "logo": null, + "name": "Orchestre Philharmonique de Radio France", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586783": { + "description": null, + "id": 138586783, + "logo": null, + "name": "Orchestre Pasdeloup", + "subTopicIds": [ + 337184268, + 337184269, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586787": { + "description": null, + "id": 138586787, + "logo": null, + "name": "Orchestre du Conservatoire de Paris", + "subTopicIds": [ + 337184284, + 337184298, + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586795": { + "description": null, + "id": 138586795, + "logo": null, + "name": "Orchestre National d'Île-de-France", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586799": { + "description": null, + "id": 138586799, + "logo": null, + "name": "Orchestre Philharmonique de Radio France", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586803": { + "description": null, + "id": 138586803, + "logo": null, + "name": "Royal Concertgebouw Orchestra Amsterdam", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586807": { + "description": null, + "id": 138586807, + "logo": null, + "name": "Royal Concertgebouw Orchestra Amsterdam", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586811": { + "description": null, + "id": 138586811, + "logo": null, + "name": "Royal Concertgebouw Orchestra Amsterdam", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586815": { + "description": null, + "id": 138586815, + "logo": null, + "name": "Orchestre Philharmonique de Radio France", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586823": { + "description": null, + "id": 138586823, + "logo": null, + "name": "London Symphony Orchestra", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586827": { + "description": null, + "id": 138586827, + "logo": null, + "name": "London Symphony Orchestra", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586831": { + "description": null, + "id": 138586831, + "logo": null, + "name": "Le Concert des Nations - Jordi Savall", + "subTopicIds": [ + 337184263, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586835": { + "description": null, + "id": 138586835, + "logo": null, + "name": "Leonidas Kavakos - Yuja Wang", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586839": { + "description": null, + "id": 138586839, + "logo": null, + "name": "Orchestre Philharmonique de Radio France", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586843": { + "description": null, + "id": 138586843, + "logo": null, + "name": "Quatuor Artemis - Gautier Capuçon", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586847": { + "description": null, + "id": 138586847, + "logo": null, + "name": "Quatuor Artemis - Quatuor Ébène", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586851": { + "description": null, + "id": 138586851, + "logo": null, + "name": "Quatuor Artemis - Elisabeth Leonskaja", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586855": { + "description": null, + "id": 138586855, + "logo": null, + "name": "Russian National Orchestra", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586859": { + "description": null, + "id": 138586859, + "logo": null, + "name": "Passion selon saint Matthieu", + "subTopicIds": [ + 337184296, + 337184263, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586863": { + "description": null, + "id": 138586863, + "logo": null, + "name": "Les Arts Florissants - Concert de Pâques", + "subTopicIds": [ + 337184263, + 337184298, + 337184283, + 337184292 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586867": { + "description": null, + "id": 138586867, + "logo": null, + "name": "Orchestre Philharmonique de Radio France", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586871": { + "description": null, + "id": 138586871, + "logo": null, + "name": "Leylâ et Majnûn ou L'Amour mystique", + "subTopicIds": [ + 337184279, + 337184283, + 337184262 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586875": { + "description": null, + "id": 138586875, + "logo": null, + "name": "Stephen Kovacevich, piano", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586879": { + "description": null, + "id": 138586879, + "logo": null, + "name": "Orchestra Mozart Bologna - Mahler Chamber Orchestra", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586883": { + "description": null, + "id": 138586883, + "logo": null, + "name": "Ballet Royal du Cambodge", + "subTopicIds": [ + 337184279, + 337184283, + 337184262 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586889": { + "description": null, + "id": 138586889, + "logo": null, + "name": "MDR Sinfonieorchester Leipzig", + "subTopicIds": [ + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586893": { + "description": null, + "id": 138586893, + "logo": null, + "name": "Orchestre Colonne", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586897": { + "description": null, + "id": 138586897, + "logo": null, + "name": "Elisabeth Leonskaja, piano", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586901": { + "description": null, + "id": 138586901, + "logo": null, + "name": "Yuja Wang, piano", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586905": { + "description": null, + "id": 138586905, + "logo": null, + "name": "Orchestre Philharmonique de Radio France", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586909": { + "description": null, + "id": 138586909, + "logo": null, + "name": "Anne-Sophie Mutter - Lambert Orkis", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586917": { + "description": null, + "id": 138586917, + "logo": null, + "name": "Orchestre National d'Île-de-France", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586921": { + "description": null, + "id": 138586921, + "logo": null, + "name": "Orchestre Philharmonique de Radio France", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586929": { + "description": null, + "id": 138586929, + "logo": null, + "name": "Orchestre Pasdeloup", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586933": { + "description": null, + "id": 138586933, + "logo": null, + "name": "Gilberto Gil", + "subTopicIds": [ + 337184279, + 337184283, + 337184262 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586937": { + "description": null, + "id": 138586937, + "logo": null, + "name": "Nelson Freire, piano", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586941": { + "description": null, + "id": 138586941, + "logo": null, + "name": "Orchestre Philharmonique de Radio France", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586945": { + "description": null, + "id": 138586945, + "logo": null, + "name": "Orfeo - C. Monteverdi (version de concert)", + "subTopicIds": [ + 337184284, + 337184263, + 337184298, + 337184283, + 337184292 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586949": { + "description": null, + "id": 138586949, + "logo": null, + "name": "Bamberger Symphoniker", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586953": { + "description": null, + "id": 138586953, + "logo": null, + "name": "Murray Perahia, piano", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586957": { + "description": null, + "id": 138586957, + "logo": null, + "name": "Orchestre National du Capitole de Toulouse", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586961": { + "description": null, + "id": 138586961, + "logo": null, + "name": "Krystian Zimerman, piano", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586965": { + "description": null, + "id": 138586965, + "logo": null, + "name": "Rafal Blechacz, piano", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586969": { + "description": null, + "id": 138586969, + "logo": null, + "name": "Les Voyages musicaux de Marco Polo", + "subTopicIds": [ + 337184279, + 337184283, + 337184262 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586973": { + "description": null, + "id": 138586973, + "logo": null, + "name": "Orchestre National de Lyon", + "subTopicIds": [ + 337184298, + 337184268, + 337184283, + 337184292, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586977": { + "description": null, + "id": 138586977, + "logo": null, + "name": "Guy Braunstein - Zvi Plesser - Sunwook Kim", + "subTopicIds": [ + 337184281, + 337184283, + 337184273 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586981": { + "description": null, + "id": 138586981, + "logo": null, + "name": "La Bohème - G. Puccini (version de concert)", + "subTopicIds": [ + 337184284, + 337184298, + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586989": { + "description": null, + "id": 138586989, + "logo": null, + "name": "Otello - G. Verdi (version de concert)", + "subTopicIds": [ + 337184284, + 337184298, + 337184268, + 337184283, + 337184292 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586993": { + "description": null, + "id": 138586993, + "logo": null, + "name": "Staatskapelle Berlin", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "138586997": { + "description": null, + "id": 138586997, + "logo": null, + "name": "Staatskapelle Berlin", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "151183114": { + "description": null, + "id": 151183114, + "logo": null, + "name": "San Francisco Symphony", + "subTopicIds": [ + 337184298, + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "339420802": { + "description": null, + "id": 339420802, + "logo": null, + "name": "Lou Doillon", + "subTopicIds": [ + 337184280, + 337184283, + 337184262 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "339420805": { + "description": null, + "id": 339420805, + "logo": null, + "name": "Patrick Watson & Orchestre National d'Ile-de-France", + "subTopicIds": [ + 337184280, + 337184283, + 337184262 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341069930": { + "description": null, + "id": 341069930, + "logo": "/images/UE0AAAAAFFRQagAAAAlDSVRN", + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181232": { + "description": null, + "id": 341181232, + "logo": null, + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181233": { + "description": null, + "id": 341181233, + "logo": "/images/UE0AAAAAFFYDMQAAAAhDSVRN", + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181234": { + "description": null, + "id": 341181234, + "logo": "/images/UE0AAAAAFFYDMgAAAAdDSVRN", + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181235": { + "description": null, + "id": 341181235, + "logo": "/images/UE0AAAAAFFYDMwAAAAZDSVRN", + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181236": { + "description": null, + "id": 341181236, + "logo": "/images/UE0AAAAAFFYDNAAAAAZDSVRN", + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181237": { + "description": null, + "id": 341181237, + "logo": "/images/UE0AAAAAFFYDNQAAAAhDSVRN", + "name": "Paavo Järvi, direction", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181238": { + "description": null, + "id": 341181238, + "logo": "/images/UE0AAAAAFFYDNgAAAAdDSVRN", + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181239": { + "description": null, + "id": 341181239, + "logo": "/images/UE0AAAAAFFYDNwAAAAdDSVRN", + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181240": { + "description": null, + "id": 341181240, + "logo": "/images/UE0AAAAAFFYDOAAAAAhDSVRN", + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181241": { + "description": null, + "id": 341181241, + "logo": "/images/UE0AAAAAFFYDOQAAAAZDSVRN", + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181242": { + "description": null, + "id": 341181242, + "logo": "/images/UE0AAAAAFFYDOgAAAAdDSVRN", + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181243": { + "description": null, + "id": 341181243, + "logo": "/images/UE0AAAAAFFYDOwAAAAdDSVRN", + "name": "Concert anniversaire des 90 ans de Menahem Pressler", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181244": { + "description": null, + "id": 341181244, + "logo": "/images/UE0AAAAAFFYDPAAAAAZDSVRN", + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181245": { + "description": null, + "id": 341181245, + "logo": "/images/UE0AAAAAFFYDPQAAAAZDSVRN", + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181246": { + "description": null, + "id": 341181246, + "logo": null, + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181247": { + "description": null, + "id": 341181247, + "logo": null, + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181248": { + "description": null, + "id": 341181248, + "logo": "/images/UE0AAAAAFFYDQAAAAAZDSVRN", + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181249": { + "description": null, + "id": 341181249, + "logo": "/images/UE0AAAAAFFYDQQAAAAdDSVRN", + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181250": { + "description": null, + "id": 341181250, + "logo": "/images/UE0AAAAAFFYDQgAAAAdDSVRN", + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181251": { + "description": null, + "id": 341181251, + "logo": null, + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181252": { + "description": null, + "id": 341181252, + "logo": "/images/UE0AAAAAFFYDRAAAAAdDSVRN", + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181253": { + "description": null, + "id": 341181253, + "logo": null, + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181254": { + "description": null, + "id": 341181254, + "logo": "/images/UE0AAAAAFFYDRgAAAAlDSVRN", + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181255": { + "description": null, + "id": 341181255, + "logo": null, + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181256": { + "description": null, + "id": 341181256, + "logo": null, + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181257": { + "description": null, + "id": 341181257, + "logo": null, + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181258": { + "description": null, + "id": 341181258, + "logo": null, + "name": "Orchestre de Paris", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "341181259": { + "description": null, + "id": 341181259, + "logo": null, + "name": "14052122 JARVI / GOERNE / SOLBERG / CHŒUR", + "subTopicIds": [ + 337184268, + 337184288, + 337184283, + 337184275 + ], + "subjectCode": null, + "subtitle": null, + "topicIds": [ + 324846099, + 107888604, + 324846100 + ] + }, + "342742592": { + "description": null, + "id": 342742592, + "logo": null, + "name": "event secret 2", + "subTopicIds": [], + "subjectCode": null, + "subtitle": null, + "topicIds": [] + }, + "342742593": { + "description": null, + "id": 342742593, + "logo": null, + "name": "event secret 3", + "subTopicIds": [], + "subjectCode": null, + "subtitle": null, + "topicIds": [] + }, + "342742594": { + "description": null, + "id": 342742594, + "logo": null, + "name": "event secret 4", + "subTopicIds": [], + "subjectCode": null, + "subtitle": null, + "topicIds": [] + }, + "342742595": { + "description": null, + "id": 342742595, + "logo": null, + "name": "event secret 5", + "subTopicIds": [], + "subjectCode": null, + "subtitle": null, + "topicIds": [] + }, + "342742596": { + "description": null, + "id": 342742596, + "logo": null, + "name": "event secret 6", + "subTopicIds": [], + "subjectCode": null, + "subtitle": null, + "topicIds": [] + } + }, + "performances": [ + { + "eventId": 138586341, + "id": 339887544, + "logo": null, + "name": null, + "prices": [ + { + "amount": 90250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937295 + }, + { + "amount": 66500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937296 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937295 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937296 + } + ], + "seatMapImage": null, + "start": 1372701600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 339420802, + "id": 339430296, + "logo": null, + "name": null, + "prices": [ + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937295 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937296 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937295 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937296 + } + ], + "seatMapImage": null, + "start": 1372788000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 339420805, + "id": 339430301, + "logo": null, + "name": null, + "prices": [ + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937295 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937296 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937295 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937296 + } + ], + "seatMapImage": null, + "start": 1373220000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586345, + "id": 138586347, + "logo": "/images/UE0AAAAACEKo6QAAAAZDSVRN", + "name": null, + "prices": [ + { + "amount": 152000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 104500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 76000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 52250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937283 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937283 + } + ], + "seatMapImage": null, + "start": 1377972000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586349, + "id": 138586351, + "logo": "/images/UE0AAAAACEKo7QAAAAZDSVRN", + "name": null, + "prices": [ + { + "amount": 152000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 104500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 76000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 52250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937283 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937283 + } + ], + "seatMapImage": null, + "start": 1378044000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586353, + "id": 138586355, + "logo": "/images/UE0AAAAACEKo8QAAAAZDSVRN", + "name": null, + "prices": [ + { + "amount": 90250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 71250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 52250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + } + ], + "seatMapImage": null, + "start": 1378490400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341069930, + "id": 341070133, + "logo": "/images/UE0AAAAAFFRQagAAAAlDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826016 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826017 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826015 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826018 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826016 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826017 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826015 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 340826018 + } + ], + "seatMapImage": null, + "start": 1378922400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341069930, + "id": 341070132, + "logo": "/images/UE0AAAAAFFRQagAAAAlDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826016 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826017 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826015 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826018 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826016 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826017 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826015 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 340826018 + } + ], + "seatMapImage": null, + "start": 1379008800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586357, + "id": 138586359, + "logo": "/images/UE0AAAAACEKo9QAAAAhDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086210 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086211 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086213 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086214 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086210 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086211 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086214 + } + ], + "seatMapImage": null, + "start": 1379095200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586361, + "id": 138586363, + "logo": "/images/UE0AAAAACEKo+QAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1379440800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586365, + "id": 138586367, + "logo": "/images/UE0AAAAACEKo/QAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1379959200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181254, + "id": 341181470, + "logo": "/images/UE0AAAAAFFYDRgAAAAlDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + } + ], + "seatMapImage": null, + "start": 1380132000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181254, + "id": 341181469, + "logo": "/images/UE0AAAAAFFYDRgAAAAlDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + } + ], + "seatMapImage": null, + "start": 1380218400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586369, + "id": 138586371, + "logo": "/images/UE0AAAAACEKpAQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 19000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 14250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1380650400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181252, + "id": 341181467, + "logo": "/images/UE0AAAAAFFYDRAAAAAdDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1380736800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586373, + "id": 138586375, + "logo": "/images/UE0AAAAACEKpBQAAAAdDSVRN", + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086196 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086197 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086196 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086197 + } + ], + "seatMapImage": null, + "start": 1380996000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586377, + "id": 138586379, + "logo": "/images/UE0AAAAACEKpCQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086196 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086197 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086196 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086197 + } + ], + "seatMapImage": null, + "start": 1381082400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586381, + "id": 138586383, + "logo": "/images/UE0AAAAACEKpDQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1381168800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586385, + "id": 138586387, + "logo": "/images/UE0AAAAACEKpEQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1381255200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181234, + "id": 341181437, + "logo": "/images/UE0AAAAAFFYDMgAAAAdDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1381341600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181234, + "id": 341181436, + "logo": "/images/UE0AAAAAFFYDMgAAAAdDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1381428000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586389, + "id": 138586391, + "logo": "/images/UE0AAAAACEKpFQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + } + ], + "seatMapImage": null, + "start": 1381512600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586393, + "id": 138586395, + "logo": "/images/UE0AAAAACEKpGQAAAAhDSVRN", + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937241 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937242 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937244 + }, + { + "amount": 16150, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937245 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937246 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937241 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937242 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937244 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937245 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937246 + } + ], + "seatMapImage": null, + "start": 1381586400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586397, + "id": 138586399, + "logo": null, + "name": null, + "prices": [ + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086196 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086197 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086196 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086197 + } + ], + "seatMapImage": null, + "start": 1381672800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586401, + "id": 138586403, + "logo": "/images/UE0AAAAACEKpIQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1381773600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586405, + "id": 138586407, + "logo": "/images/UE0AAAAACEKpJQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1381860000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181233, + "id": 341181435, + "logo": "/images/UE0AAAAAFFYDMQAAAAhDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1381946400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181237, + "id": 341181442, + "logo": "/images/UE0AAAAAFFYDNQAAAAhDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1382032800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586409, + "id": 138586411, + "logo": "/images/UE0AAAAACEKpKQAAAAZDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086210 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086211 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086213 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086214 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086210 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086211 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086214 + } + ], + "seatMapImage": null, + "start": 1382119200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586413, + "id": 138586415, + "logo": "/images/UE0AAAAACEKpLQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 95000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 76000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937283 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937283 + } + ], + "seatMapImage": null, + "start": 1382277600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586417, + "id": 138586419, + "logo": "/images/UE0AAAAACEKpMQAAAAZDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1382378400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586421, + "id": 138586423, + "logo": "/images/UE0AAAAACEKpNQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1382464800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181238, + "id": 341181444, + "logo": "/images/UE0AAAAAFFYDNgAAAAdDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1382551200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181238, + "id": 341181443, + "logo": "/images/UE0AAAAAFFYDNgAAAAdDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1382637600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586425, + "id": 138586427, + "logo": null, + "name": null, + "prices": [ + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937235 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937236 + }, + { + "amount": 19000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937238 + }, + { + "amount": 14250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937239 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937240 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937235 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937236 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937238 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937239 + }, + { + "areas": [ + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937240 + } + ], + "seatMapImage": null, + "start": 1382724000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586429, + "id": 138586431, + "logo": "/images/UE0AAAAACEKpPQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + } + ], + "seatMapImage": null, + "start": 1382810400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586433, + "id": 138586435, + "logo": "/images/UE0AAAAACEKpQQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + } + ], + "seatMapImage": null, + "start": 1382886000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586437, + "id": 138586439, + "logo": "/images/UE0AAAAACEKpRQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1383073200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586441, + "id": 138586443, + "logo": "/images/UE0AAAAACEKpSQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1383246000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586445, + "id": 138586447, + "logo": "/images/UE0AAAAACEKpTQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + } + ], + "seatMapImage": null, + "start": 1383332400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586449, + "id": 138586451, + "logo": "/images/UE0AAAAACEKpUQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + } + ], + "seatMapImage": null, + "start": 1383418800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742592, + "id": 342742708, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1383555600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742592, + "id": 342742709, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1383562800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586453, + "id": 138586455, + "logo": "/images/UE0AAAAACEKpVQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937295 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937296 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937295 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937296 + } + ], + "seatMapImage": null, + "start": 1383591600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742592, + "id": 342742710, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1383642000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742592, + "id": 342742711, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1383649200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742592, + "id": 342742712, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1383728400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742592, + "id": 342742713, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1383735600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742592, + "id": 342742714, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1383814800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742592, + "id": 342742715, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1383822000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586457, + "id": 138586459, + "logo": "/images/UE0AAAAACEKpWQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1383850800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586461, + "id": 138586463, + "logo": "/images/UE0AAAAACEKpXQAAAAZDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086210 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086211 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086213 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086214 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086210 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086211 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086214 + } + ], + "seatMapImage": null, + "start": 1383937200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586465, + "id": 138586467, + "logo": "/images/UE0AAAAACEKpYQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086196 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086197 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086196 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086197 + } + ], + "seatMapImage": null, + "start": 1384110000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586469, + "id": 138586471, + "logo": "/images/UE0AAAAACEKpZQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 90250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937289 + }, + { + "amount": 71250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937290 + }, + { + "amount": 52250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937292 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937293 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937289 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937290 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937292 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937293 + } + ], + "seatMapImage": null, + "start": 1384196400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586473, + "id": 138586475, + "logo": "/images/UE0AAAAACEKpaQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1384282800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586477, + "id": 138586479, + "logo": "/images/UE0AAAAACEKpbQAAAAZDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1384369200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586481, + "id": 138586483, + "logo": "/images/UE0AAAAACEKpcQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 95000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 76000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1384455600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586485, + "id": 138586487, + "logo": "/images/UE0AAAAACEKpdQAAAAZDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086210 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086211 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086213 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086214 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086210 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086211 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086214 + } + ], + "seatMapImage": null, + "start": 1384542000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586501, + "id": 138586503, + "logo": "/images/UE0AAAAACEKphQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1384801200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586505, + "id": 138586507, + "logo": "/images/UE0AAAAACEKpiQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1384887600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586509, + "id": 138586511, + "logo": null, + "name": null, + "prices": [ + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937235 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937236 + }, + { + "amount": 19000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937238 + }, + { + "amount": 14250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937239 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937240 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937235 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937236 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937238 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937239 + }, + { + "areas": [ + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937240 + } + ], + "seatMapImage": null, + "start": 1385146800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586513, + "id": 138586515, + "logo": "/images/UE0AAAAACEKpkQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + } + ], + "seatMapImage": null, + "start": 1385231400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586517, + "id": 138586519, + "logo": "/images/UE0AAAAACEKplQAAAAdDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + } + ], + "seatMapImage": null, + "start": 1385305200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586521, + "id": 138586523, + "logo": "/images/UE0AAAAACEKpmQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 152000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 104500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 76000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 52250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1385492400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181235, + "id": 341181439, + "logo": "/images/UE0AAAAAFFYDMwAAAAZDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826016 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826017 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826015 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826018 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826019 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826016 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826017 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826015 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 340826018 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826019 + } + ], + "seatMapImage": null, + "start": 1385665200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586525, + "id": 138586527, + "logo": "/images/UE0AAAAACEKpnQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086210 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086211 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086213 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086214 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086210 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086211 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086214 + } + ], + "seatMapImage": null, + "start": 1385751600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586529, + "id": 138586531, + "logo": null, + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937241 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937242 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937244 + }, + { + "amount": 16150, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937245 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937246 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937241 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937242 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937244 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937245 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937246 + } + ], + "seatMapImage": null, + "start": 1385823600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181235, + "id": 341181438, + "logo": "/images/UE0AAAAAFFYDMwAAAAZDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826016 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826017 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826015 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826018 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826019 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826016 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826017 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826015 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 340826018 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826019 + } + ], + "seatMapImage": null, + "start": 1385838000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586533, + "id": 138586535, + "logo": "/images/UE0AAAAACEKppQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + } + ], + "seatMapImage": null, + "start": 1385910000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586537, + "id": 138586539, + "logo": "/images/UE0AAAAACEKpqQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1386010800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586541, + "id": 138586543, + "logo": "/images/UE0AAAAACEKprQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1386097200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181236, + "id": 341181440, + "logo": "/images/UE0AAAAAFFYDNAAAAAZDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1386183600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181236, + "id": 341181441, + "logo": "/images/UE0AAAAAFFYDNAAAAAZDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1386270000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586545, + "id": 138586547, + "logo": "/images/UE0AAAAACEKpsQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 104500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 76000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937283 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937283 + } + ], + "seatMapImage": null, + "start": 1386356400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586549, + "id": 138586551, + "logo": "/images/UE0AAAAACEKptQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 16150, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937283 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937283 + } + ], + "seatMapImage": null, + "start": 1386428400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586553, + "id": 138586555, + "logo": "/images/UE0AAAAACEKpuQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 16150, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937283 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937283 + } + ], + "seatMapImage": null, + "start": 1386442800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586557, + "id": 138586559, + "logo": "/images/UE0AAAAACEKpvQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 16150, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937283 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937283 + } + ], + "seatMapImage": null, + "start": 1386514800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742593, + "id": 342742716, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1386579600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742593, + "id": 342742717, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1386586800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586561, + "id": 138586563, + "logo": "/images/UE0AAAAACEKpwQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 95000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 76000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1386615600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742593, + "id": 342742718, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1386666000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742593, + "id": 342742719, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1386673200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586565, + "id": 138586567, + "logo": null, + "name": null, + "prices": [ + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 19000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 14250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1386702000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742593, + "id": 342742720, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1386752400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742593, + "id": 342742721, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1386759600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181241, + "id": 341181449, + "logo": "/images/UE0AAAAAFFYDOQAAAAZDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1386788400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742593, + "id": 342742722, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1386838800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742593, + "id": 342742723, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1386846000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181241, + "id": 341181450, + "logo": "/images/UE0AAAAAFFYDOQAAAAZDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1386874800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586569, + "id": 138586571, + "logo": "/images/UE0AAAAACEKpyQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086210 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086211 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086213 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086214 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086210 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086211 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086214 + } + ], + "seatMapImage": null, + "start": 1386961200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742594, + "id": 342742724, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1387184400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742594, + "id": 342742725, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1387191600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586581, + "id": 138586583, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341264860 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341264861 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341264863 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341264864 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341264860 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341264861 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341264863 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341264864 + } + ], + "seatMapImage": null, + "start": 1387220400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742594, + "id": 342742726, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1387270800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742594, + "id": 342742727, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1387278000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586585, + "id": 138586587, + "logo": "/images/UE0AAAAACEKp2QAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1387306800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742594, + "id": 342742728, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1387357200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742594, + "id": 342742729, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1387364400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181250, + "id": 341181465, + "logo": "/images/UE0AAAAAFFYDQgAAAAdDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1387393200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742594, + "id": 342742730, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1387443600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742594, + "id": 342742731, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1387450800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586589, + "id": 138586591, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + } + ], + "seatMapImage": null, + "start": 1387566000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586593, + "id": 138586595, + "logo": "/images/UE0AAAAACEKp4QAAAAdDSVRN", + "name": null, + "prices": [ + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937235 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937236 + }, + { + "amount": 19000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937238 + }, + { + "amount": 14250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937239 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937240 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937235 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937236 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937238 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937239 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937240 + } + ], + "seatMapImage": null, + "start": 1387724400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742595, + "id": 342742732, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1387789200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742595, + "id": 342742733, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1387796400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742595, + "id": 342742734, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1387875600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742595, + "id": 342742735, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1387882800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742595, + "id": 342742736, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1387962000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742595, + "id": 342742737, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1387969200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742595, + "id": 342742738, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1388048400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742595, + "id": 342742739, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1388055600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742596, + "id": 342742740, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1388998800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742596, + "id": 342742741, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1389006000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742596, + "id": 342742742, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1389085200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742596, + "id": 342742743, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1389092400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742596, + "id": 342742744, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1389171600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742596, + "id": 342742745, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1389178800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181245, + "id": 341181458, + "logo": "/images/UE0AAAAAFFYDPQAAAAZDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1389207600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742596, + "id": 342742746, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1389258000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 342742596, + "id": 342742747, + "logo": null, + "name": null, + "prices": [ + { + "amount": 180500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 342752792 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 342752287, + "blockIds": [] + } + ], + "seatCategoryId": 342752792 + } + ], + "seatMapImage": null, + "start": 1389265200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181245, + "id": 341181457, + "logo": "/images/UE0AAAAAFFYDPQAAAAZDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1389294000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586597, + "id": 138586599, + "logo": "/images/UE0AAAAACEKp5QAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086210 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086211 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086213 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086214 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086210 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086211 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086214 + } + ], + "seatMapImage": null, + "start": 1389380400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586601, + "id": 138586603, + "logo": "/images/UE0AAAAACEKp6QAAAAdDSVRN", + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937241 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937242 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937244 + }, + { + "amount": 16150, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937245 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937246 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937241 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937242 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937244 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937245 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937246 + } + ], + "seatMapImage": null, + "start": 1389452400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586605, + "id": 138586607, + "logo": null, + "name": null, + "prices": [ + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 19000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 14250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937283 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937283 + } + ], + "seatMapImage": null, + "start": 1389538800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586609, + "id": 138586611, + "logo": null, + "name": null, + "prices": [ + { + "amount": 15000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937314 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937314 + } + ], + "seatMapImage": null, + "start": 1389726000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181242, + "id": 341181451, + "logo": "/images/UE0AAAAAFFYDOgAAAAdDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1389812400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181242, + "id": 341181452, + "logo": "/images/UE0AAAAAFFYDOgAAAAdDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1389898800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586613, + "id": 138586615, + "logo": "/images/UE0AAAAACEKp9QAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086210 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086211 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086213 + }, + { + "amount": 16150, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086214 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086215 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086210 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086211 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086214 + }, + { + "areas": [ + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086215 + } + ], + "seatMapImage": null, + "start": 1389985200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586617, + "id": 138586619, + "logo": "/images/UE0AAAAACEKp+QAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 90250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 71250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 52250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + } + ], + "seatMapImage": null, + "start": 1390071600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586625, + "id": 138586627, + "logo": null, + "name": null, + "prices": [ + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937235 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937236 + }, + { + "amount": 19000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937238 + }, + { + "amount": 14250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937239 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937240 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937235 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937236 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937238 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937239 + }, + { + "areas": [ + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937240 + } + ], + "seatMapImage": null, + "start": 1390143600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586629, + "id": 138586631, + "logo": "/images/UE0AAAAACEKqBQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 90250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937271 + }, + { + "amount": 71250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937272 + }, + { + "amount": 52250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937274 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937275 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937271 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937272 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937274 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937275 + } + ], + "seatMapImage": null, + "start": 1390159800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181239, + "id": 341181446, + "logo": "/images/UE0AAAAAFFYDNwAAAAdDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826016 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826017 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826015 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826018 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826019 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826016 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826017 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826015 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 340826018 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826019 + } + ], + "seatMapImage": null, + "start": 1390417200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181239, + "id": 341181445, + "logo": "/images/UE0AAAAAFFYDNwAAAAdDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826016 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826017 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826015 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826018 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826019 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826016 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826017 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826015 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 340826018 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826019 + } + ], + "seatMapImage": null, + "start": 1390503600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586633, + "id": 138586635, + "logo": "/images/UE0AAAAACEKqCQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086210 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086211 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086213 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086214 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086210 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086211 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086214 + } + ], + "seatMapImage": null, + "start": 1390590000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586641, + "id": 138586643, + "logo": "/images/UE0AAAAACEKqEQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + } + ], + "seatMapImage": null, + "start": 1390676400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586645, + "id": 138586647, + "logo": "/images/UE0AAAAACEKqFQAAAAdDSVRN", + "name": null, + "prices": [ + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937235 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937236 + }, + { + "amount": 19000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937238 + }, + { + "amount": 14250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937239 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937240 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937235 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937236 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937238 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937239 + }, + { + "areas": [ + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937240 + } + ], + "seatMapImage": null, + "start": 1390748400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586649, + "id": 138586651, + "logo": "/images/UE0AAAAACEKqGQAAAAZDSVRN", + "name": null, + "prices": [ + { + "amount": 95000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 76000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1390849200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586653, + "id": 138586655, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1390935600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181243, + "id": 341181453, + "logo": "/images/UE0AAAAAFFYDOwAAAAdDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + } + ], + "seatMapImage": null, + "start": 1391022000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181243, + "id": 341181454, + "logo": "/images/UE0AAAAAFFYDOwAAAAdDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + } + ], + "seatMapImage": null, + "start": 1391108400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586657, + "id": 138586659, + "logo": "/images/UE0AAAAACEKqIQAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086210 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086211 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086213 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086214 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086210 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086211 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086214 + } + ], + "seatMapImage": null, + "start": 1391194800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586661, + "id": 138586663, + "logo": null, + "name": null, + "prices": [ + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086196 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086197 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086196 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086197 + } + ], + "seatMapImage": null, + "start": 1391353200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586661, + "id": 138586665, + "logo": null, + "name": null, + "prices": [ + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086196 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086197 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086196 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086197 + } + ], + "seatMapImage": null, + "start": 1391367600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586667, + "id": 138586669, + "logo": null, + "name": null, + "prices": [ + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937295 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937296 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937295 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937296 + } + ], + "seatMapImage": null, + "start": 1391540400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586671, + "id": 138586673, + "logo": "/images/UE0AAAAACEKqLwAAAAlDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937289 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937290 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937292 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937293 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937289 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937290 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937292 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937293 + } + ], + "seatMapImage": null, + "start": 1391626800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586675, + "id": 138586677, + "logo": "/images/UE0AAAAACEKqMwAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1391713200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586679, + "id": 138586681, + "logo": "/images/UE0AAAAACEKqNwAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086210 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086211 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086213 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086214 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086210 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086211 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086214 + } + ], + "seatMapImage": null, + "start": 1391799600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586687, + "id": 138586689, + "logo": "/images/UE0AAAAACEKqPwAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 90250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 71250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 52250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + } + ], + "seatMapImage": null, + "start": 1391886000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586691, + "id": 138586693, + "logo": null, + "name": null, + "prices": [ + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 19000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 14250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937283 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937283 + } + ], + "seatMapImage": null, + "start": 1391958000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586695, + "id": 138586697, + "logo": "/images/UE0AAAAACEKqRwAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 16150, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1392145200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181240, + "id": 341181448, + "logo": "/images/UE0AAAAAFFYDOAAAAAhDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1392231600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181240, + "id": 341181447, + "logo": "/images/UE0AAAAAFFYDOAAAAAhDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1392318000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586699, + "id": 138586701, + "logo": null, + "name": null, + "prices": [ + { + "amount": 15000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341264872 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341264872 + } + ], + "seatMapImage": null, + "start": 1392404400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586703, + "id": 138586705, + "logo": "/images/UE0AAAAACEKqTwAAAAZDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + } + ], + "seatMapImage": null, + "start": 1392490800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586707, + "id": 138586709, + "logo": "/images/UE0AAAAACEKqUwAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + } + ], + "seatMapImage": null, + "start": 1392562800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586711, + "id": 138586713, + "logo": "/images/UE0AAAAACEKqVwAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1392663600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586715, + "id": 138586717, + "logo": "/images/UE0AAAAACEKqWwAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1392750000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181248, + "id": 341181462, + "logo": "/images/UE0AAAAAFFYDQAAAAAZDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1392836400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586719, + "id": 138586721, + "logo": "/images/UE0AAAAACEKqXwAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086196 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086197 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086196 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086197 + } + ], + "seatMapImage": null, + "start": 1393095600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586723, + "id": 138586729, + "logo": null, + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937307 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937308 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937310 + }, + { + "amount": 16150, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937311 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937312 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937307 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937308 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937310 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937311 + }, + { + "areas": [ + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937312 + } + ], + "seatMapImage": null, + "start": 1393678800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586723, + "id": 138586725, + "logo": null, + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937307 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937308 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937310 + }, + { + "amount": 16150, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937311 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937312 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937307 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937308 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937310 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937311 + }, + { + "areas": [ + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937312 + } + ], + "seatMapImage": null, + "start": 1393693200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586723, + "id": 138586727, + "logo": null, + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937307 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937308 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937310 + }, + { + "amount": 16150, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937311 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937312 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937307 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937308 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937310 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937311 + }, + { + "areas": [ + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937312 + } + ], + "seatMapImage": null, + "start": 1393754400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586731, + "id": 138586733, + "logo": "/images/UE0AAAAACEKqawAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 19000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 14250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1393959600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181249, + "id": 341181463, + "logo": "/images/UE0AAAAAFFYDQQAAAAdDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826016 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826017 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826015 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826018 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826019 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826016 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826017 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 340826015 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 340826018 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826019 + } + ], + "seatMapImage": null, + "start": 1394046000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181249, + "id": 341181464, + "logo": "/images/UE0AAAAAFFYDQQAAAAdDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826016 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826017 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826015 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826018 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826019 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826016 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826017 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 340826015 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 340826018 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826019 + } + ], + "seatMapImage": null, + "start": 1394132400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586735, + "id": 138586737, + "logo": "/images/UE0AAAAACEKqbwAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086210 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086211 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086213 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086214 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086210 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086211 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086214 + } + ], + "seatMapImage": null, + "start": 1394218800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586743, + "id": 138586745, + "logo": null, + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 16150, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937283 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937283 + } + ], + "seatMapImage": null, + "start": 1394305200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586747, + "id": 138586749, + "logo": "/images/UE0AAAAACEKqewAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 16150, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937283 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937283 + } + ], + "seatMapImage": null, + "start": 1394377200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586751, + "id": 138586753, + "logo": "/images/UE0AAAAACEKqfwAAAAVDSVRN", + "name": null, + "prices": [ + { + "amount": 95000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 76000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1394478000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181244, + "id": 341181455, + "logo": "/images/UE0AAAAAFFYDPAAAAAZDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1394650800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181244, + "id": 341181456, + "logo": "/images/UE0AAAAAFFYDPAAAAAZDSVRN", + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1394737200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586755, + "id": 138586757, + "logo": null, + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341264866 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341264867 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341264869 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341264870 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341264866 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341264867 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341264869 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341264870 + } + ], + "seatMapImage": null, + "start": 1394823600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586759, + "id": 138586761, + "logo": null, + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1395082800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 151183114, + "id": 151183116, + "logo": null, + "name": null, + "prices": [ + { + "amount": 90250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937289 + }, + { + "amount": 71250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937290 + }, + { + "amount": 52250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937292 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937293 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937289 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937290 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937292 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937293 + } + ], + "seatMapImage": null, + "start": 1395169200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586771, + "id": 138586773, + "logo": null, + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1395255600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586775, + "id": 138586777, + "logo": null, + "name": null, + "prices": [ + { + "amount": 95000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 76000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1395342000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586779, + "id": 138586781, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086210 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086211 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086213 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086214 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086210 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086211 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086214 + } + ], + "seatMapImage": null, + "start": 1395428400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586783, + "id": 138586785, + "logo": null, + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937241 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937242 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937244 + }, + { + "amount": 16150, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937245 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937246 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937241 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937242 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937244 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937245 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937246 + } + ], + "seatMapImage": null, + "start": 1395500400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586787, + "id": 138586789, + "logo": null, + "name": null, + "prices": [ + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 19000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 14250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937283 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937283 + } + ], + "seatMapImage": null, + "start": 1395514800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586795, + "id": 138586797, + "logo": null, + "name": null, + "prices": [ + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937235 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937236 + }, + { + "amount": 19000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937238 + }, + { + "amount": 14250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937239 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937240 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937235 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937236 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937238 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937239 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937240 + } + ], + "seatMapImage": null, + "start": 1395586800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181246, + "id": 341181459, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826016 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826017 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826015 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826018 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826019 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826016 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826017 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826015 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 340826018 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826019 + } + ], + "seatMapImage": null, + "start": 1395860400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181246, + "id": 341181460, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826016 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826017 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826015 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826018 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826019 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826016 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826017 + }, + { + "areas": [ + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826015 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 340826018 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826019 + } + ], + "seatMapImage": null, + "start": 1395946800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586799, + "id": 138586801, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086210 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086211 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086213 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086214 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086210 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086211 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086214 + } + ], + "seatMapImage": null, + "start": 1396033200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586803, + "id": 138586805, + "logo": null, + "name": null, + "prices": [ + { + "amount": 90250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 71250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 52250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + } + ], + "seatMapImage": null, + "start": 1396191600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586807, + "id": 138586809, + "logo": null, + "name": null, + "prices": [ + { + "amount": 104500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 76000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1396288800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586811, + "id": 138586813, + "logo": null, + "name": null, + "prices": [ + { + "amount": 90250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 71250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 52250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1396375200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181255, + "id": 341181472, + "logo": null, + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + } + ], + "seatMapImage": null, + "start": 1396461600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181255, + "id": 341181471, + "logo": null, + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + } + ], + "seatMapImage": null, + "start": 1396548000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586815, + "id": 138586817, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086210 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086211 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086213 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086214 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086210 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086211 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086214 + } + ], + "seatMapImage": null, + "start": 1396634400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586823, + "id": 138586825, + "logo": null, + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + } + ], + "seatMapImage": null, + "start": 1396720800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586827, + "id": 138586829, + "logo": null, + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + } + ], + "seatMapImage": null, + "start": 1396792800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586831, + "id": 138586833, + "logo": null, + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 16150, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1396893600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586835, + "id": 138586837, + "logo": null, + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 16150, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1396980000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181256, + "id": 341181473, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1397066400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181256, + "id": 341181474, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1397152800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586839, + "id": 138586841, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341264866 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341264867 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341264869 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341264870 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341264866 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341264867 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341264869 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341264870 + } + ], + "seatMapImage": null, + "start": 1397239200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586843, + "id": 138586845, + "logo": null, + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 16150, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937283 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937283 + } + ], + "seatMapImage": null, + "start": 1397311200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586847, + "id": 138586849, + "logo": null, + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 16150, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937283 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937283 + } + ], + "seatMapImage": null, + "start": 1397325600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586851, + "id": 138586853, + "logo": null, + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 16150, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937283 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937283 + } + ], + "seatMapImage": null, + "start": 1397397600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586855, + "id": 138586857, + "logo": null, + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1397498400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586859, + "id": 138586861, + "logo": null, + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1397584800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586863, + "id": 138586865, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1397930400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181251, + "id": 341181466, + "logo": null, + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + } + ], + "seatMapImage": null, + "start": 1398276000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181253, + "id": 341181468, + "logo": null, + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + } + ], + "seatMapImage": null, + "start": 1398362400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586867, + "id": 138586869, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086210 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086211 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086213 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086214 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086210 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086211 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086214 + } + ], + "seatMapImage": null, + "start": 1398448800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586871, + "id": 138586873, + "logo": null, + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086196 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086197 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086196 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086197 + } + ], + "seatMapImage": null, + "start": 1398607200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586875, + "id": 138586877, + "logo": null, + "name": null, + "prices": [ + { + "amount": 95000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 76000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1398708000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586879, + "id": 138586881, + "logo": null, + "name": null, + "prices": [ + { + "amount": 171000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 123500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 95000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 66500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1398794400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586883, + "id": 138586887, + "logo": null, + "name": null, + "prices": [ + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086196 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086197 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086196 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086197 + } + ], + "seatMapImage": null, + "start": 1399125600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586883, + "id": 138586885, + "logo": null, + "name": null, + "prices": [ + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086196 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086197 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086196 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086197 + } + ], + "seatMapImage": null, + "start": 1399140000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586889, + "id": 138586891, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937307 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937308 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937310 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937311 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937307 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937308 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937310 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937311 + } + ], + "seatMapImage": null, + "start": 1399312800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586893, + "id": 138586895, + "logo": null, + "name": null, + "prices": [ + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 19000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 14250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1399399200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181232, + "id": 341181434, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1399485600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586897, + "id": 138586899, + "logo": null, + "name": null, + "prices": [ + { + "amount": 95000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 76000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1399917600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586901, + "id": 138586903, + "logo": null, + "name": null, + "prices": [ + { + "amount": 95000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 76000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1400176800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586905, + "id": 138586907, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086210 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086211 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086213 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086214 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086210 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086211 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086214 + } + ], + "seatMapImage": null, + "start": 1400263200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586909, + "id": 138586911, + "logo": null, + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + } + ], + "seatMapImage": null, + "start": 1400349600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586917, + "id": 138586919, + "logo": null, + "name": null, + "prices": [ + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937235 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937236 + }, + { + "amount": 19000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937238 + }, + { + "amount": 14250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937239 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937240 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937235 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937236 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937238 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937239 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937240 + } + ], + "seatMapImage": null, + "start": 1400421600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181259, + "id": 341181480, + "logo": null, + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826016 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826017 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826015 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826018 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826016 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826017 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826015 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 340826018 + } + ], + "seatMapImage": null, + "start": 1400695200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181259, + "id": 341181479, + "logo": null, + "name": null, + "prices": [ + { + "amount": 80750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826016 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826017 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826015 + }, + { + "amount": 28500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 340826018 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826016 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826017 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 340826015 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 340826018 + } + ], + "seatMapImage": null, + "start": 1400781600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586921, + "id": 138586923, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086210 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086211 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086213 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086214 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086210 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086211 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086214 + } + ], + "seatMapImage": null, + "start": 1400868000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586929, + "id": 138586931, + "logo": null, + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937241 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937242 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937244 + }, + { + "amount": 16150, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937245 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937246 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937241 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937242 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937244 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937245 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937246 + } + ], + "seatMapImage": null, + "start": 1400940000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586933, + "id": 138586935, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086196 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086197 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086196 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086197 + } + ], + "seatMapImage": null, + "start": 1401026400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586937, + "id": 138586939, + "logo": null, + "name": null, + "prices": [ + { + "amount": 95000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 76000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1401127200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586941, + "id": 138586943, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341264860 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341264861 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341264863 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341264864 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341264860 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341264861 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341264863 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341264864 + } + ], + "seatMapImage": null, + "start": 1401472800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586945, + "id": 138586947, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1401730200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586949, + "id": 138586951, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1401818400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586953, + "id": 138586955, + "logo": null, + "name": null, + "prices": [ + { + "amount": 95000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 76000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1401904800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586957, + "id": 138586959, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + } + ], + "seatMapImage": null, + "start": 1401991200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586961, + "id": 138586963, + "logo": null, + "name": null, + "prices": [ + { + "amount": 95000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 76000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937283 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937283 + } + ], + "seatMapImage": null, + "start": 1402077600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586965, + "id": 138586967, + "logo": null, + "name": null, + "prices": [ + { + "amount": 95000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 76000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1402423200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181258, + "id": 341181477, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1402509600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181258, + "id": 341181478, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1402596000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586969, + "id": 138586971, + "logo": null, + "name": null, + "prices": [ + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086196 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 339086197 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086196 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 339086197 + } + ], + "seatMapImage": null, + "start": 1402768800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586973, + "id": 138586975, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + } + ], + "seatMapImage": null, + "start": 1402840800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586977, + "id": 138586979, + "logo": null, + "name": null, + "prices": [ + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 33250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 23750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 16150, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1402941600000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586981, + "id": 138586983, + "logo": null, + "name": null, + "prices": [ + { + "amount": 123500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937289 + }, + { + "amount": 85500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937290 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937292 + }, + { + "amount": 38000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937293 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937294 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937289 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937290 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937292 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937293 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937294 + } + ], + "seatMapImage": null, + "start": 1403028000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181257, + "id": 341181475, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1403114400000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181257, + "id": 341181476, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1403200800000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 341181247, + "id": 341181461, + "logo": null, + "name": null, + "prices": [ + { + "amount": 57000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179212 + }, + { + "amount": 42750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179213 + }, + { + "amount": 32300, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179214 + }, + { + "amount": 20900, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179215 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 341179216 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179212 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179213 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179214 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + } + ], + "seatCategoryId": 341179215 + }, + { + "areas": [ + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 341179216 + } + ], + "seatMapImage": null, + "start": 1403719200000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586989, + "id": 138586991, + "logo": null, + "name": null, + "prices": [ + { + "amount": 152000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937284 + }, + { + "amount": 104500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937285 + }, + { + "amount": 76000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937287 + }, + { + "amount": 52250, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937288 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937283 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937284 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937285 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937287 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937288 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937283 + } + ], + "seatMapImage": null, + "start": 1403892000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586993, + "id": 138586995, + "logo": null, + "name": null, + "prices": [ + { + "amount": 123500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 85500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 38000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1404324000000, + "venueCode": "PLEYEL_PLEYEL" + }, + { + "eventId": 138586997, + "id": 138586999, + "logo": null, + "name": null, + "prices": [ + { + "amount": 123500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937277 + }, + { + "amount": 85500, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937278 + }, + { + "amount": 61750, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937280 + }, + { + "amount": 38000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937281 + }, + { + "amount": 10000, + "audienceSubCategoryId": 337100890, + "seatCategoryId": 338937282 + } + ], + "seatCategories": [ + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937277 + }, + { + "areas": [ + { + "areaId": 205705999, + "blockIds": [] + }, + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937278 + }, + { + "areas": [ + { + "areaId": 205705998, + "blockIds": [] + }, + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205705995, + "blockIds": [] + }, + { + "areaId": 205705996, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205705993, + "blockIds": [] + }, + { + "areaId": 205706007, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937280 + }, + { + "areas": [ + { + "areaId": 205705994, + "blockIds": [] + }, + { + "areaId": 205706006, + "blockIds": [] + }, + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706001, + "blockIds": [] + }, + { + "areaId": 205706000, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937281 + }, + { + "areas": [ + { + "areaId": 205706005, + "blockIds": [] + }, + { + "areaId": 205706004, + "blockIds": [] + }, + { + "areaId": 205706003, + "blockIds": [] + }, + { + "areaId": 205706002, + "blockIds": [] + }, + { + "areaId": 205706009, + "blockIds": [] + }, + { + "areaId": 205706008, + "blockIds": [] + } + ], + "seatCategoryId": 338937282 + } + ], + "seatMapImage": null, + "start": 1404410400000, + "venueCode": "PLEYEL_PLEYEL" + } + ], + "seatCategoryNames": { + "338937235": "1ère catégorie", + "338937236": "2ème catégorie", + "338937238": "3ème catégorie", + "338937239": "4ème catégorie", + "338937240": "5ème catégorie", + "338937241": "1ère catégorie", + "338937242": "2ème catégorie", + "338937244": "3ème catégorie", + "338937245": "4ème catégorie", + "338937246": "5ème catégorie", + "338937271": "1ère catégorie", + "338937272": "2ème catégorie", + "338937274": "3ème catégorie", + "338937275": "4ème catégorie", + "338937277": "1ère catégorie", + "338937278": "2ème catégorie", + "338937280": "3ème catégorie", + "338937281": "4ème catégorie", + "338937282": "5ème catégorie", + "338937283": "5ème catégorie", + "338937284": "1ère catégorie", + "338937285": "2ème catégorie", + "338937287": "3ème catégorie", + "338937288": "4ème catégorie", + "338937289": "1ère catégorie", + "338937290": "2ème catégorie", + "338937292": "3ème catégorie", + "338937293": "4ème catégorie", + "338937294": "5ème catégorie", + "338937295": "1ère catégorie", + "338937296": "2ème catégorie", + "338937307": "1ère catégorie", + "338937308": "2ème catégorie", + "338937310": "3ème catégorie", + "338937311": "4ème catégorie", + "338937312": "5ème catégorie", + "338937314": "Catégorie unique", + "339086196": "1ère catégorie", + "339086197": "2ème catégorie", + "339086210": "1ère catégorie", + "339086211": "2ème catégorie", + "339086213": "3ème catégorie", + "339086214": "4ème catégorie", + "339086215": "5ème catégorie", + "340826015": "Catégorie 3", + "340826016": "Catégorie 1", + "340826017": "Catégorie 2", + "340826018": "Catégorie 4", + "340826019": "Catégorie 5", + "341179212": "CAT1", + "341179213": "CAT2", + "341179214": "CAT3", + "341179215": "CAT4", + "341179216": "CAT5", + "341264860": "1ère catégorie", + "341264861": "2ème catégorie", + "341264863": "3ème catégorie", + "341264864": "4ème catégorie", + "341264866": "1ère catégorie", + "341264867": "2ème catégorie", + "341264869": "3ème catégorie", + "341264870": "4ème catégorie", + "341264872": "1ère catégorie", + "342752792": "catétgorie unique" + }, + "subTopicNames": { + "337184262": "Musique amplifiée", + "337184263": "Musique baroque", + "337184267": "Ciné-concert", + "337184268": "Musique classique", + "337184269": "Jazz", + "337184273": "Musique de chambre", + "337184275": "Musique dirigée", + "337184279": "Musique du monde", + "337184280": "Pop/rock", + "337184281": "Musique de chambre", + "337184282": "Famille", + "337184283": "Concert", + "337184284": "Opéra (version de concert)", + "337184288": "Musique contemporaine", + "337184292": "Musique vocale", + "337184296": "Musique ancienne", + "337184297": "Chanson", + "337184298": "Voix", + "337184299": "famille" + }, + "subjectNames": {}, + "topicNames": { + "107888604": "Activité", + "324846098": "Type de public", + "324846099": "Genre", + "324846100": "Formations musicales" + }, + "topicSubTopics": { + "107888604": [ + 337184283, + 337184267 + ], + "324846098": [ + 337184299 + ], + "324846099": [ + 337184268, + 337184288, + 337184284, + 337184263, + 337184298, + 337184269, + 337184280, + 337184297, + 337184281, + 337184296, + 337184279 + ], + "324846100": [ + 337184275, + 337184262, + 337184292, + 337184273, + 337184282 + ] + }, + "venueNames": { + "PLEYEL_PLEYEL": "Salle Pleyel" + } +} \ No newline at end of file diff --git a/benchmark/data/ohai.json b/benchmark/data/ohai.json new file mode 100644 index 00000000000000..584bdbd08563b0 --- /dev/null +++ b/benchmark/data/ohai.json @@ -0,0 +1,1216 @@ +{ + "command": { + "ps": "ps -ef" + }, + "kernel": { + "modules": { + "org.virtualbox.kext.VBoxDrv": { + "size": 118784, + "version": "2.2.0", + "index": "114", + "refcount": "3" + }, + "com.cisco.nke.ipsec": { + "size": 454656, + "version": "2.0.1", + "index": "111", + "refcount": "0" + }, + "com.apple.driver.AppleAPIC": { + "size": 12288, + "version": "1.4", + "index": "26", + "refcount": "0" + }, + "com.apple.driver.AirPort.Atheros": { + "size": 593920, + "version": "318.8.3", + "index": "88", + "refcount": "0" + }, + "com.apple.driver.AppleIntelCPUPowerManagement": { + "size": 102400, + "version": "59.0.1", + "index": "22", + "refcount": "0" + }, + "com.apple.iokit.IOStorageFamily": { + "size": 98304, + "version": "1.5.5", + "index": "44", + "refcount": "9" + }, + "com.apple.iokit.IOATAPIProtocolTransport": { + "size": 16384, + "version": "1.5.2", + "index": "52", + "refcount": "0" + }, + "com.apple.iokit.IOPCIFamily": { + "size": 65536, + "version": "2.5", + "index": "17", + "refcount": "18" + }, + "com.apple.driver.AppleHPET": { + "size": 12288, + "version": "1.3", + "index": "33", + "refcount": "0" + }, + "com.apple.driver.AppleUSBHub": { + "size": 49152, + "version": "3.2.7", + "index": "47", + "refcount": "0" + }, + "com.apple.iokit.IOFireWireFamily": { + "size": 258048, + "version": "3.4.6", + "index": "49", + "refcount": "2" + }, + "com.apple.driver.AppleUSBComposite": { + "size": 16384, + "version": "3.2.0", + "index": "60", + "refcount": "1" + }, + "com.apple.driver.AppleIntelPIIXATA": { + "size": 36864, + "version": "2.0.0", + "index": "41", + "refcount": "0" + }, + "com.apple.driver.AppleSmartBatteryManager": { + "size": 28672, + "version": "158.6.0", + "index": "32", + "refcount": "0" + }, + "com.apple.filesystems.udf": { + "size": 233472, + "version": "2.0.2", + "index": "119", + "refcount": "0" + }, + "com.apple.iokit.IOSMBusFamily": { + "size": 12288, + "version": "1.1", + "index": "27", + "refcount": "2" + }, + "com.apple.iokit.IOACPIFamily": { + "size": 16384, + "version": "1.2.0", + "index": "18", + "refcount": "10" + }, + "foo.tap": { + "size": 24576, + "version": "1.0", + "index": "113", + "refcount": "0" + }, + "com.vmware.kext.vmx86": { + "size": 864256, + "version": "2.0.4", + "index": "104", + "refcount": "0" + }, + "com.apple.iokit.CHUDUtils": { + "size": 28672, + "version": "200", + "index": "98", + "refcount": "0" + }, + "org.virtualbox.kext.VBoxNetAdp": { + "size": 8192, + "version": "2.2.0", + "index": "117", + "refcount": "0" + }, + "com.apple.filesystems.autofs": { + "size": 45056, + "version": "2.0.1", + "index": "109", + "refcount": "0" + }, + "com.vmware.kext.vmnet": { + "size": 36864, + "version": "2.0.4", + "index": "108", + "refcount": "0" + }, + "com.apple.driver.AppleACPIButtons": { + "size": 16384, + "version": "1.2.4", + "index": "30", + "refcount": "0" + }, + "com.apple.driver.AppleFWOHCI": { + "size": 139264, + "version": "3.7.2", + "index": "50", + "refcount": "0" + }, + "com.apple.iokit.IOSCSIArchitectureModelFamily": { + "size": 102400, + "version": "2.0.5", + "index": "51", + "refcount": "4" + }, + "com.apple.iokit.IOSCSIBlockCommandsDevice": { + "size": 90112, + "version": "2.0.5", + "index": "57", + "refcount": "1" + }, + "com.apple.driver.AppleACPIPCI": { + "size": 12288, + "version": "1.2.4", + "index": "31", + "refcount": "0" + }, + "com.apple.security.seatbelt": { + "size": 98304, + "version": "107.10", + "index": "25", + "refcount": "0" + }, + "com.apple.driver.AppleUpstreamUserClient": { + "size": 16384, + "version": "2.7.2", + "index": "100", + "refcount": "0" + }, + "com.apple.kext.OSvKernDSPLib": { + "size": 12288, + "version": "1.1", + "index": "79", + "refcount": "1" + }, + "com.apple.iokit.IOBDStorageFamily": { + "size": 20480, + "version": "1.5", + "index": "58", + "refcount": "1" + }, + "com.apple.iokit.IOGraphicsFamily": { + "size": 118784, + "version": "1.7.1", + "index": "70", + "refcount": "5" + }, + "com.apple.iokit.IONetworkingFamily": { + "size": 90112, + "version": "1.6.1", + "index": "82", + "refcount": "4" + }, + "com.apple.iokit.IOATAFamily": { + "size": 53248, + "version": "2.0.0", + "index": "40", + "refcount": "2" + }, + "com.apple.iokit.IOUSBHIDDriver": { + "size": 20480, + "version": "3.2.2", + "index": "63", + "refcount": "2" + }, + "org.virtualbox.kext.VBoxUSB": { + "size": 28672, + "version": "2.2.0", + "index": "115", + "refcount": "0" + }, + "com.vmware.kext.vmioplug": { + "size": 24576, + "version": "2.0.4", + "index": "107", + "refcount": "0" + }, + "com.apple.security.TMSafetyNet": { + "size": 12288, + "version": "3", + "index": "23", + "refcount": "0" + }, + "com.apple.iokit.IONDRVSupport": { + "size": 57344, + "version": "1.7.1", + "index": "71", + "refcount": "3" + }, + "com.apple.BootCache": { + "size": 20480, + "version": "30.3", + "index": "20", + "refcount": "0" + }, + "com.apple.iokit.IOUSBUserClient": { + "size": 8192, + "version": "3.2.4", + "index": "46", + "refcount": "1" + }, + "com.apple.iokit.IOSCSIMultimediaCommandsDevice": { + "size": 90112, + "version": "2.0.5", + "index": "59", + "refcount": "0" + }, + "com.apple.driver.AppleIRController": { + "size": 20480, + "version": "110", + "index": "78", + "refcount": "0" + }, + "com.apple.driver.AudioIPCDriver": { + "size": 16384, + "version": "1.0.5", + "index": "81", + "refcount": "0" + }, + "org.virtualbox.kext.VBoxNetFlt": { + "size": 16384, + "version": "2.2.0", + "index": "116", + "refcount": "0" + }, + "com.apple.driver.AppleLPC": { + "size": 12288, + "version": "1.2.11", + "index": "73", + "refcount": "0" + }, + "com.apple.iokit.CHUDKernLib": { + "size": 20480, + "version": "196", + "index": "93", + "refcount": "2" + }, + "com.apple.iokit.CHUDProf": { + "size": 49152, + "version": "207", + "index": "97", + "refcount": "0" + }, + "com.apple.NVDAResman": { + "size": 2478080, + "version": "5.3.6", + "index": "90", + "refcount": "2" + }, + "com.apple.driver.AppleACPIEC": { + "size": 20480, + "version": "1.2.4", + "index": "28", + "refcount": "0" + }, + "foo.tun": { + "size": 24576, + "version": "1.0", + "index": "118", + "refcount": "0" + }, + "com.apple.iokit.IOSerialFamily": { + "size": 36864, + "version": "9.3", + "index": "102", + "refcount": "1" + }, + "com.apple.GeForce": { + "size": 622592, + "version": "5.3.6", + "index": "96", + "refcount": "0" + }, + "com.apple.iokit.IOCDStorageFamily": { + "size": 32768, + "version": "1.5", + "index": "55", + "refcount": "3" + }, + "com.apple.driver.AppleUSBEHCI": { + "size": 73728, + "version": "3.2.5", + "index": "39", + "refcount": "0" + }, + "com.apple.nvidia.nv50hal": { + "size": 2445312, + "version": "5.3.6", + "index": "91", + "refcount": "0" + }, + "com.apple.driver.AppleSMBIOS": { + "size": 16384, + "version": "1.1.1", + "index": "29", + "refcount": "0" + }, + "com.apple.driver.AppleBacklight": { + "size": 16384, + "version": "1.4.4", + "index": "72", + "refcount": "0" + }, + "com.apple.driver.AppleACPIPlatform": { + "size": 253952, + "version": "1.2.4", + "index": "19", + "refcount": "3" + }, + "com.apple.iokit.SCSITaskUserClient": { + "size": 24576, + "version": "2.0.5", + "index": "54", + "refcount": "0" + }, + "com.apple.iokit.IOHIDFamily": { + "size": 233472, + "version": "1.5.3", + "index": "21", + "refcount": "7" + }, + "com.apple.driver.DiskImages": { + "size": 65536, + "version": "195.2.2", + "index": "101", + "refcount": "0" + }, + "com.apple.iokit.IODVDStorageFamily": { + "size": 24576, + "version": "1.5", + "index": "56", + "refcount": "2" + }, + "com.apple.driver.XsanFilter": { + "size": 20480, + "version": "2.7.91", + "index": "53", + "refcount": "0" + }, + "com.apple.driver.AppleEFIRuntime": { + "size": 12288, + "version": "1.2.0", + "index": "35", + "refcount": "1" + }, + "com.apple.driver.AppleRTC": { + "size": 20480, + "version": "1.2.3", + "index": "34", + "refcount": "0" + }, + "com.apple.iokit.IOFireWireIP": { + "size": 36864, + "version": "1.7.6", + "index": "83", + "refcount": "0" + }, + "com.vmware.kext.vmci": { + "size": 45056, + "version": "2.0.4", + "index": "106", + "refcount": "0" + }, + "com.apple.iokit.IO80211Family": { + "size": 126976, + "version": "215.1", + "index": "87", + "refcount": "1" + }, + "com.apple.nke.applicationfirewall": { + "size": 32768, + "version": "1.0.77", + "index": "24", + "refcount": "0" + }, + "com.apple.iokit.IOAHCIBlockStorage": { + "size": 69632, + "version": "1.2.0", + "index": "48", + "refcount": "0" + }, + "com.apple.driver.AppleUSBUHCI": { + "size": 57344, + "version": "3.2.5", + "index": "38", + "refcount": "0" + }, + "com.apple.iokit.IOAHCIFamily": { + "size": 24576, + "version": "1.5.0", + "index": "42", + "refcount": "2" + }, + "com.apple.driver.AppleAHCIPort": { + "size": 53248, + "version": "1.5.2", + "index": "43", + "refcount": "0" + }, + "com.apple.driver.AppleEFINVRAM": { + "size": 24576, + "version": "1.2.0", + "index": "36", + "refcount": "0" + }, + "com.apple.iokit.IOUSBFamily": { + "size": 167936, + "version": "3.2.7", + "index": "37", + "refcount": "13" + }, + "com.apple.driver.AppleUSBMergeNub": { + "size": 12288, + "version": "3.2.4", + "index": "61", + "refcount": "0" + } + }, + "machine": "i386", + "name": "Darwin", + "os": "Darwin", + "version": "Darwin Kernel Version 9.6.0: Mon Nov 24 17:37:00 PST 2008; root:xnu-1228.9.59~1\/RELEASE_I386", + "release": "9.6.0" + }, + "platform_version": "10.5.6", + "platform": "mac_os_x", + "ipaddress": "192.168.88.1", + "keys": { + "ssh": { + "host_dsa_public": "private", + "host_rsa_public": "private" + } + }, + "network": { + "settings": { + "net.inet6.ip6.forwarding": "0", + "net.inet.ip.dummynet.debug": "0", + "net.inet.ip.rtexpire": "10", + "net.inet6.ipsec6.esp_trans_deflev": "1", + "net.inet.tcp.tcbhashsize": "4096", + "net.key.esp_auth": "0", + "net.inet6.ip6.hlim": "64", + "net.inet.ip.fw.dyn_fin_lifetime": "1", + "net.inet.ip.fw.dyn_udp_lifetime": "10", + "net.inet.icmp.bmcastecho": "1", + "net.athforceBias": "2 2", + "net.athbgscan": "1 1", + "net.inet.tcp.reass.maxsegments": "2048", + "net.inet6.ip6.auto_flowlabel": "1", + "net.inet6.ip6.rtmaxcache": "128", + "net.inet.tcp.sendspace": "131072", + "net.inet.tcp.keepinit": "75000", + "net.inet.ip.dummynet.max_chain_len": "16", + "net.inet.tcp.rfc1644": "0", + "net.inet.ip.fw.curr_dyn_buckets": "256", + "net.inet.ip.dummynet.ready_heap": "0", + "net.inet.ip.portrange.first": "49152", + "net.inet.tcp.background_io_trigger": "5", + "net.link.ether.inet.host_down_time": "20", + "net.inet6.ipsec6.def_policy": "1", + "net.inet6.ipsec6.ecn": "0", + "net.inet.ip.fastforwarding": "0", + "net.athaddbaignore": "0 0", + "net.inet6.ip6.v6only": "0", + "net.inet.tcp.sack": "1", + "net.inet6.ip6.rtexpire": "3600", + "net.link.ether.inet.proxyall": "0", + "net.inet6.ip6.keepfaith": "0", + "net.key.spi_trycnt": "1000", + "net.link.ether.inet.prune_intvl": "300", + "net.inet.tcp.ecn_initiate_out": "0", + "net.inet.ip.fw.dyn_rst_lifetime": "1", + "net.local.stream.sendspace": "8192", + "net.inet.tcp.socket_unlocked_on_output": "1", + "net.inet.ip.fw.verbose_limit": "0", + "net.local.dgram.recvspace": "4096", + "net.inet.ipsec.debug": "0", + "net.link.ether.inet.log_arp_warnings": "0", + "net.inet.tcp.ecn_negotiate_in": "0", + "net.inet.tcp.rfc3465": "1", + "net.inet.tcp.icmp_may_rst": "1", + "net.link.ether.inet.sendllconflict": "0", + "net.inet.ipsec.ah_offsetmask": "0", + "net.key.blockacq_count": "10", + "net.inet.tcp.delayed_ack": "3", + "net.inet.ip.fw.verbose": "2", + "net.inet.ip.fw.dyn_count": "0", + "net.inet.tcp.slowlink_wsize": "8192", + "net.inet6.ip6.fw.enable": "1", + "net.inet.ip.portrange.hilast": "65535", + "net.inet.icmp.maskrepl": "0", + "net.link.ether.inet.apple_hwcksum_rx": "1", + "net.inet.tcp.drop_synfin": "1", + "net.key.spi_maxval": "268435455", + "net.inet.ipsec.ecn": "0", + "net.inet.ip.fw.dyn_keepalive": "1", + "net.key.int_random": "60", + "net.key.debug": "0", + "net.inet.ip.dummynet.curr_time": "0", + "net.inet.udp.blackhole": "0", + "net.athaggrqmin": "1 1", + "net.athppmenable": "1 1", + "net.inet.ip.fw.dyn_syn_lifetime": "20", + "net.inet.tcp.keepidle": "7200000", + "net.inet6.ip6.tempvltime": "604800", + "net.inet.tcp.recvspace": "358400", + "net.inet.tcp.keepintvl": "75000", + "net.inet.udp.maxdgram": "9216", + "net.inet.ip.maxchainsent": "0", + "net.inet.ipsec.esp_net_deflev": "1", + "net.inet6.icmp6.nd6_useloopback": "1", + "net.inet.tcp.slowstart_flightsize": "1", + "net.inet.ip.fw.debug": "0", + "net.inet.ip.linklocal.in.allowbadttl": "1", + "net.key.spi_minval": "256", + "net.inet.ip.forwarding": "0", + "net.inet.tcp.v6mssdflt": "1024", + "net.key.larval_lifetime": "30", + "net.inet6.ip6.fw.verbose_limit": "0", + "net.inet.ip.dummynet.red_lookup_depth": "256", + "net.inet.tcp.pcbcount": "36", + "net.inet.ip.fw.dyn_ack_lifetime": "300", + "net.inet.ip.portrange.lowlast": "600", + "net.athCCAThreshold": "28 28", + "net.link.ether.inet.useloopback": "1", + "net.athqdepth": "0 0", + "net.inet.ip.ttl": "64", + "net.inet.ip.rtmaxcache": "128", + "net.inet.ipsec.bypass": "0", + "net.inet6.icmp6.nd6_debug": "0", + "net.inet.ip.use_route_genid": "1", + "net.inet6.icmp6.rediraccept": "1", + "net.inet.ip.fw.static_count": "1", + "net.inet6.ip6.fw.debug": "0", + "net.inet.udp.pcbcount": "104", + "net.inet.ipsec.esp_randpad": "-1", + "net.inet6.icmp6.nd6_maxnudhint": "0", + "net.inet.tcp.always_keepalive": "0", + "net.inet.udp.checksum": "1", + "net.link.ether.inet.keep_announcements": "1", + "net.athfixedDropThresh": "150 150", + "net.inet6.ip6.kame_version": "20010528\/apple-darwin", + "net.inet.ip.fw.dyn_max": "4096", + "net.inet.udp.log_in_vain": "0", + "net.inet6.icmp6.nd6_mmaxtries": "3", + "net.inet.ip.rtminexpire": "10", + "net.inet.ip.fw.dyn_buckets": "256", + "net.inet6.ip6.accept_rtadv": "0", + "net.inet6.ip6.rr_prune": "5", + "net.key.ah_keymin": "128", + "net.inet.ip.redirect": "1", + "net.inet.tcp.sack_globalmaxholes": "65536", + "net.inet.ip.keepfaith": "0", + "net.inet.ip.dummynet.expire": "1", + "net.inet.ip.gifttl": "30", + "net.inet.ip.portrange.last": "65535", + "net.inet.ipsec.ah_net_deflev": "1", + "net.inet6.icmp6.nd6_delay": "5", + "net.inet.tcp.packetchain": "50", + "net.inet6.ip6.hdrnestlimit": "50", + "net.inet.tcp.newreno": "0", + "net.inet6.ip6.dad_count": "1", + "net.inet6.ip6.auto_linklocal": "1", + "net.inet6.ip6.temppltime": "86400", + "net.inet.tcp.strict_rfc1948": "0", + "net.athdupie": "1 1", + "net.inet.ip.dummynet.red_max_pkt_size": "1500", + "net.inet.ip.maxfrags": "2048", + "net.inet.tcp.log_in_vain": "0", + "net.inet.tcp.rfc1323": "1", + "net.inet.ip.subnets_are_local": "0", + "net.inet.ip.dummynet.search_steps": "0", + "net.inet.icmp.icmplim": "250", + "net.link.ether.inet.apple_hwcksum_tx": "1", + "net.inet6.icmp6.redirtimeout": "600", + "net.inet.ipsec.ah_cleartos": "1", + "net.inet6.ip6.log_interval": "5", + "net.link.ether.inet.max_age": "1200", + "net.inet.ip.fw.enable": "1", + "net.inet6.ip6.redirect": "1", + "net.athaggrfmax": "28 28", + "net.inet.ip.maxfragsperpacket": "128", + "net.inet6.ip6.use_deprecated": "1", + "net.link.generic.system.dlil_input_sanity_check": "0", + "net.inet.tcp.sack_globalholes": "0", + "net.inet.tcp.reass.cursegments": "0", + "net.inet6.icmp6.nodeinfo": "3", + "net.local.inflight": "0", + "net.inet.ip.dummynet.hash_size": "64", + "net.inet.ip.dummynet.red_avg_pkt_size": "512", + "net.inet.ipsec.dfbit": "0", + "net.inet.tcp.reass.overflows": "0", + "net.inet.tcp.rexmt_thresh": "2", + "net.inet6.ip6.maxfrags": "8192", + "net.inet6.ip6.rtminexpire": "10", + "net.inet6.ipsec6.esp_net_deflev": "1", + "net.inet.tcp.blackhole": "0", + "net.key.esp_keymin": "256", + "net.inet.ip.check_interface": "0", + "net.inet.tcp.minmssoverload": "0", + "net.link.ether.inet.maxtries": "5", + "net.inet.tcp.do_tcpdrain": "0", + "net.inet.ipsec.esp_port": "4500", + "net.inet6.ipsec6.ah_net_deflev": "1", + "net.inet.ip.dummynet.extract_heap": "0", + "net.inet.tcp.path_mtu_discovery": "1", + "net.inet.ip.intr_queue_maxlen": "50", + "net.inet.ipsec.def_policy": "1", + "net.inet.ip.fw.autoinc_step": "100", + "net.inet.ip.accept_sourceroute": "0", + "net.inet.raw.maxdgram": "8192", + "net.inet.ip.maxfragpackets": "1024", + "net.inet.ip.fw.one_pass": "0", + "net.appletalk.routermix": "2000", + "net.inet.tcp.tcp_lq_overflow": "1", + "net.link.generic.system.ifcount": "9", + "net.link.ether.inet.send_conflicting_probes": "1", + "net.inet.tcp.background_io_enabled": "1", + "net.inet6.ipsec6.debug": "0", + "net.inet.tcp.win_scale_factor": "3", + "net.key.natt_keepalive_interval": "20", + "net.inet.tcp.msl": "15000", + "net.inet.ip.portrange.hifirst": "49152", + "net.inet.ipsec.ah_trans_deflev": "1", + "net.inet.tcp.rtt_min": "1", + "net.inet6.ip6.defmcasthlim": "1", + "net.inet6.icmp6.nd6_prune": "1", + "net.inet6.ip6.fw.verbose": "0", + "net.inet.ip.portrange.lowfirst": "1023", + "net.inet.tcp.maxseg_unacked": "8", + "net.local.dgram.maxdgram": "2048", + "net.key.blockacq_lifetime": "20", + "net.inet.tcp.sack_maxholes": "128", + "net.inet6.ip6.maxfragpackets": "1024", + "net.inet6.ip6.use_tempaddr": "0", + "net.athpowermode": "0 0", + "net.inet.udp.recvspace": "73728", + "net.inet.tcp.isn_reseed_interval": "0", + "net.inet.tcp.local_slowstart_flightsize": "8", + "net.inet.ip.dummynet.searches": "0", + "net.inet.ip.intr_queue_drops": "0", + "net.link.generic.system.multi_threaded_input": "1", + "net.inet.raw.recvspace": "8192", + "net.inet.ipsec.esp_trans_deflev": "1", + "net.key.prefered_oldsa": "0", + "net.local.stream.recvspace": "8192", + "net.inet.tcp.sockthreshold": "64", + "net.inet6.icmp6.nd6_umaxtries": "3", + "net.pstimeout": "20 20", + "net.inet.ip.sourceroute": "0", + "net.inet.ip.fw.dyn_short_lifetime": "5", + "net.inet.tcp.minmss": "216", + "net.inet6.ip6.gifhlim": "0", + "net.athvendorie": "1 1", + "net.inet.ip.check_route_selfref": "1", + "net.inet6.icmp6.errppslimit": "100", + "net.inet.tcp.mssdflt": "512", + "net.inet.icmp.log_redirect": "0", + "net.inet6.ipsec6.ah_trans_deflev": "1", + "net.inet6.ipsec6.esp_randpad": "-1", + "net.inet.icmp.drop_redirect": "0", + "net.inet.icmp.timestamp": "0", + "net.inet.ip.random_id": "1" + }, + "interfaces": { + "vmnet1": { + "flags": [ + "UP", + "BROADCAST", + "SMART", + "RUNNING", + "SIMPLEX", + "MULTICAST" + ], + "addresses": [ + { + "broadcast": "192.168.88.255", + "netmask": "255.255.255.0", + "family": "inet", + "address": "192.168.88.1" + }, + { + "family": "lladdr", + "address": "private" + } + ], + "number": "1", + "mtu": "1500", + "type": "vmnet", + "encapsulation": "Ethernet" + }, + "stf0": { + "flags": [ + + ], + "number": "0", + "mtu": "1280", + "type": "stf", + "encapsulation": "6to4" + }, + "vboxnet0": { + "flags": [ + "BROADCAST", + "RUNNING", + "SIMPLEX", + "MULTICAST" + ], + "addresses": [ + { + "family": "lladdr", + "address": "private" + } + ], + "number": "0", + "mtu": "1500", + "type": "vboxnet", + "encapsulation": "Ethernet" + }, + "lo0": { + "flags": [ + "UP", + "LOOPBACK", + "RUNNING", + "MULTICAST" + ], + "addresses": [ + { + "scope": "Link", + "prefixlen": "64", + "family": "inet6", + "address": "fe80::1" + }, + { + "netmask": "255.0.0.0", + "family": "inet", + "address": "127.0.0.1" + }, + { + "scope": "Node", + "prefixlen": "128", + "family": "inet6", + "address": "::1" + }, + { + "scope": "Node", + "prefixlen": "128", + "family": "inet6", + "address": "private" + } + ], + "number": "0", + "mtu": "16384", + "type": "lo", + "encapsulation": "Loopback" + }, + "vboxn": { + "counters": { + "tx": { + "bytes": "0", + "packets": "0", + "collisions": "0", + "compressed": 0, + "carrier": 0, + "drop": 0, + "errors": "0", + "overrun": 0 + }, + "rx": { + "bytes": "0", + "packets": "0", + "compressed": 0, + "drop": 0, + "errors": "0", + "overrun": 0, + "frame": 0, + "multicast": 0 + } + } + }, + "gif0": { + "flags": [ + "POINTOPOINT", + "MULTICAST" + ], + "number": "0", + "mtu": "1280", + "type": "gif", + "encapsulation": "IPIP" + }, + "vmnet": { + "counters": { + "tx": { + "bytes": "0", + "packets": "0", + "collisions": "0", + "compressed": 0, + "carrier": 0, + "drop": 0, + "errors": "0", + "overrun": 0 + }, + "rx": { + "bytes": "0", + "packets": "0", + "compressed": 0, + "drop": 0, + "errors": "0", + "overrun": 0, + "frame": 0, + "multicast": 0 + } + } + }, + "vmnet8": { + "flags": [ + "UP", + "BROADCAST", + "SMART", + "RUNNING", + "SIMPLEX", + "MULTICAST" + ], + "addresses": [ + { + "broadcast": "192.168.237.255", + "netmask": "255.255.255.0", + "family": "inet", + "address": "192.168.237.1" + }, + { + "family": "lladdr", + "address": "private" + } + ], + "number": "8", + "mtu": "1500", + "type": "vmnet", + "encapsulation": "Ethernet" + }, + "en0": { + "status": "inactive", + "flags": [ + "UP", + "BROADCAST", + "SMART", + "RUNNING", + "SIMPLEX", + "MULTICAST" + ], + "addresses": [ + { + "family": "lladdr", + "address": "private" + } + ], + "number": "0", + "mtu": "1500", + "media": { + "supported": [ + { + "autoselect": { + "options": [ + + ] + } + }, + { + "10baseT\/UTP": { + "options": [ + "half-duplex" + ] + } + }, + { + "10baseT\/UTP": { + "options": [ + "full-duplex" + ] + } + }, + { + "10baseT\/UTP": { + "options": [ + "full-duplex", + "hw-loopback" + ] + } + }, + { + "10baseT\/UTP": { + "options": [ + "full-duplex", + "flow-control" + ] + } + }, + { + "100baseTX": { + "options": [ + "half-duplex" + ] + } + }, + { + "100baseTX": { + "options": [ + "full-duplex" + ] + } + }, + { + "100baseTX": { + "options": [ + "full-duplex", + "hw-loopback" + ] + } + }, + { + "100baseTX": { + "options": [ + "full-duplex", + "flow-control" + ] + } + }, + { + "1000baseT": { + "options": [ + "full-duplex" + ] + } + }, + { + "1000baseT": { + "options": [ + "full-duplex", + "hw-loopback" + ] + } + }, + { + "1000baseT": { + "options": [ + "full-duplex", + "flow-control" + ] + } + }, + { + "none": { + "options": [ + + ] + } + } + ], + "selected": [ + { + "autoselect": { + "options": [ + + ] + } + } + ] + }, + "type": "en", + "counters": { + "tx": { + "bytes": "342", + "packets": "0", + "collisions": "0", + "compressed": 0, + "carrier": 0, + "drop": 0, + "errors": "0", + "overrun": 0 + }, + "rx": { + "bytes": "0", + "packets": "0", + "compressed": 0, + "drop": 0, + "errors": "0", + "overrun": 0, + "frame": 0, + "multicast": 0 + } + }, + "encapsulation": "Ethernet" + }, + "en1": { + "status": "active", + "flags": [ + "UP", + "BROADCAST", + "SMART", + "RUNNING", + "SIMPLEX", + "MULTICAST" + ], + "addresses": [ + { + "scope": "Link", + "prefixlen": "64", + "family": "inet6", + "address": "private" + }, + { + "broadcast": "192.168.1.255", + "netmask": "255.255.255.0", + "family": "inet", + "address": "192.168.1.4" + }, + { + "family": "lladdr", + "address": "private" + } + ], + "number": "1", + "mtu": "1500", + "media": { + "supported": [ + { + "autoselect": { + "options": [ + + ] + } + } + ], + "selected": [ + { + "autoselect": { + "options": [ + + ] + } + } + ] + }, + "type": "en", + "counters": { + "tx": { + "bytes": "449206298", + "packets": "7041789", + "collisions": "0", + "compressed": 0, + "carrier": 0, + "drop": 0, + "errors": "95", + "overrun": 0 + }, + "rx": { + "bytes": "13673879120", + "packets": "19966002", + "compressed": 0, + "drop": 0, + "errors": "1655893", + "overrun": 0, + "frame": 0, + "multicast": 0 + } + }, + "arp": { + "192.168.1.7": "private" + }, + "encapsulation": "Ethernet" + }, + "fw0": { + "status": "inactive", + "flags": [ + "UP", + "BROADCAST", + "SMART", + "RUNNING", + "SIMPLEX", + "MULTICAST" + ], + "addresses": [ + { + "family": "lladdr", + "address": "private" + } + ], + "number": "0", + "mtu": "4078", + "media": { + "supported": [ + { + "autoselect": { + "options": [ + "full-duplex" + ] + } + } + ], + "selected": [ + { + "autoselect": { + "options": [ + "full-duplex" + ] + } + } + ] + }, + "type": "fw", + "counters": { + "tx": { + "bytes": "346", + "packets": "0", + "collisions": "0", + "compressed": 0, + "carrier": 0, + "drop": 0, + "errors": "0", + "overrun": 0 + }, + "rx": { + "bytes": "0", + "packets": "0", + "compressed": 0, + "drop": 0, + "errors": "0", + "overrun": 0, + "frame": 0, + "multicast": 0 + } + }, + "encapsulation": "1394" + } + } + }, + "fqdn": "local.local", + "ohai_time": 1240624355.08575, + "domain": "local", + "os": "darwin", + "platform_build": "9G55", + "os_version": "9.6.0", + "hostname": "local", + "macaddress": "private", + "languages": { + "ruby": { + "target_os": "darwin9.0", + "platform": "universal-darwin9.0", + "host_vendor": "apple", + "target_vendor": "apple", + "target_cpu": "i686", + "host_os": "darwin9.0", + "host_cpu": "i686", + "version": "1.8.6", + "host": "i686-apple-darwin9.0", + "target": "i686-apple-darwin9.0", + "release_date": "2008-03-03" + } + } +} diff --git a/benchmark/data/twitter.json b/benchmark/data/twitter.json new file mode 100644 index 00000000000000..137fb516252d69 --- /dev/null +++ b/benchmark/data/twitter.json @@ -0,0 +1,15482 @@ +{ + "statuses": [ + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:15 +0000 2014", + "id": 505874924095815700, + "id_str": "505874924095815681", + "text": "@aym0566x \n\nåå‰:å‰ç”°ã‚ゆã¿\n第一å°è±¡:ãªã‚“ã‹æ€–ã£ï¼\n今ã®å°è±¡:ã¨ã‚Šã‚ãˆãšã‚­ãƒ¢ã„。噛ã¿åˆã‚ãªã„\n好ããªã¨ã“ã‚:ã¶ã™ã§ã‚­ãƒ¢ã„ã¨ã“😋✨✨\næ€ã„出:んーーーã€ã‚ã‚Šã™ãŽðŸ˜Šâ¤ï¸\nLINE交æ›ã§ãる?:ã‚ã……ã”ã‚ん✋\nトプ画をã¿ã¦:照れã¾ã™ãŒãªðŸ˜˜âœ¨\n一言:ãŠå‰ã¯ä¸€ç”Ÿã‚‚ã‚“ã®ãƒ€ãƒðŸ’–", + "source": "Twitter for iPhone", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": 866260188, + "in_reply_to_user_id_str": "866260188", + "in_reply_to_screen_name": "aym0566x", + "user": { + "id": 1186275104, + "id_str": "1186275104", + "name": "AYUMI", + "screen_name": "ayuu0123", + "location": "", + "description": "元野çƒéƒ¨ãƒžãƒãƒ¼ã‚¸ãƒ£ãƒ¼â¤ï¸Žâ€¦æœ€é«˜ã®å¤ã‚’ã‚ã‚ŠãŒã¨ã†â€¦â¤ï¸Ž", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 262, + "friends_count": 252, + "listed_count": 0, + "created_at": "Sat Feb 16 13:40:25 +0000 2013", + "favourites_count": 235, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 1769, + "lang": "en", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/497760886795153410/LDjAwR_y_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/497760886795153410/LDjAwR_y_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/1186275104/1409318784", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 0, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "aym0566x", + "name": "å‰ç”°ã‚ゆã¿", + "id": 866260188, + "id_str": "866260188", + "indices": [ + 0, + 9 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:14 +0000 2014", + "id": 505874922023837700, + "id_str": "505874922023837696", + "text": "RT @KATANA77: ãˆã£ãã‚Œã¯ãƒ»ãƒ»ãƒ»ï¼ˆä¸€åŒï¼‰ http://t.co/PkCJAcSuYK", + "source": "Twitter for iPhone", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 903487807, + "id_str": "903487807", + "name": "RT&ファボ魔ã®ã‚€ã£ã¤ã‚“ã•ã£m", + "screen_name": "yuttari1998", + "location": "関西 ↓詳ã—ã„プロ↓", + "description": "無言フォローã¯ã‚ã¾ã‚Šå¥½ã¿ã¾ã›ã‚“ ゲームã¨å‹•ç”»ãŒå¥½ãã§ã™ã‚·ãƒ¢é‡ŽéƒŽã§ã™ãŒã‚ˆã‚ã—ã…最近ã¯MGSã¨ãƒ–レイブルーã€éŸ³ã‚²ãƒ¼ã‚’プレイã—ã¦ã¾ã™", + "url": "http://t.co/Yg9e1Fl8wd", + "entities": { + "url": { + "urls": [ + { + "url": "http://t.co/Yg9e1Fl8wd", + "expanded_url": "http://twpf.jp/yuttari1998", + "display_url": "twpf.jp/yuttari1998", + "indices": [ + 0, + 22 + ] + } + ] + }, + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 95, + "friends_count": 158, + "listed_count": 1, + "created_at": "Thu Oct 25 08:27:13 +0000 2012", + "favourites_count": 3652, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 10276, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/500268849275494400/AoXHZ7Ij_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/500268849275494400/AoXHZ7Ij_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/903487807/1409062272", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sat Aug 30 23:49:35 +0000 2014", + "id": 505864943636197400, + "id_str": "505864943636197376", + "text": "ãˆã£ãã‚Œã¯ãƒ»ãƒ»ãƒ»ï¼ˆä¸€åŒï¼‰ http://t.co/PkCJAcSuYK", + "source": "Twitter Web Client", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 77915997, + "id_str": "77915997", + "name": "(有)刀", + "screen_name": "KATANA77", + "location": "", + "description": "プリキュア好ãã®ã‚µãƒ©ãƒªãƒ¼ãƒžãƒ³ã§ã™ã€‚好ããªãƒ—リキュアシリーズã¯ãƒãƒ¼ãƒˆã‚­ãƒ£ãƒƒãƒã€æœ€æ„›ã®ã‚­ãƒ£ãƒ©ã‚¯ã‚¿ãƒ¼ã¯æœˆå½±ã‚†ã‚Šã•ã‚“ã§ã™ã€‚ http://t.co/QMLJeFmfMTã”質å•ã€ãŠå•ã„åˆã‚ã›ã¯ã“ã¡ã‚‰ http://t.co/LU8T7vmU3h", + "url": null, + "entities": { + "description": { + "urls": [ + { + "url": "http://t.co/QMLJeFmfMT", + "expanded_url": "http://www.pixiv.net/member.php?id=4776", + "display_url": "pixiv.net/member.php?id=…", + "indices": [ + 58, + 80 + ] + }, + { + "url": "http://t.co/LU8T7vmU3h", + "expanded_url": "http://ask.fm/KATANA77", + "display_url": "ask.fm/KATANA77", + "indices": [ + 95, + 117 + ] + } + ] + } + }, + "protected": false, + "followers_count": 1095, + "friends_count": 740, + "listed_count": 50, + "created_at": "Mon Sep 28 03:41:27 +0000 2009", + "favourites_count": 3741, + "utc_offset": 32400, + "time_zone": "Tokyo", + "geo_enabled": true, + "verified": false, + "statuses_count": 19059, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://pbs.twimg.com/profile_background_images/808597451/45b82f887085d32bd4b87dfc348fe22a.png", + "profile_background_image_url_https": "https://pbs.twimg.com/profile_background_images/808597451/45b82f887085d32bd4b87dfc348fe22a.png", + "profile_background_tile": true, + "profile_image_url": "http://pbs.twimg.com/profile_images/480210114964504577/MjVIEMS4_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/480210114964504577/MjVIEMS4_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/77915997/1404661392", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "FFFFFF", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": false, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 82, + "favorite_count": 42, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [], + "media": [ + { + "id": 505864942575034400, + "id_str": "505864942575034369", + "indices": [ + 13, + 35 + ], + "media_url": "http://pbs.twimg.com/media/BwUxfC6CIAEr-Ye.jpg", + "media_url_https": "https://pbs.twimg.com/media/BwUxfC6CIAEr-Ye.jpg", + "url": "http://t.co/PkCJAcSuYK", + "display_url": "pic.twitter.com/PkCJAcSuYK", + "expanded_url": "http://twitter.com/KATANA77/status/505864943636197376/photo/1", + "type": "photo", + "sizes": { + "medium": { + "w": 600, + "h": 338, + "resize": "fit" + }, + "small": { + "w": 340, + "h": 192, + "resize": "fit" + }, + "thumb": { + "w": 150, + "h": 150, + "resize": "crop" + }, + "large": { + "w": 765, + "h": 432, + "resize": "fit" + } + } + } + ] + }, + "favorited": false, + "retweeted": false, + "possibly_sensitive": false, + "lang": "ja" + }, + "retweet_count": 82, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "KATANA77", + "name": "(有)刀", + "id": 77915997, + "id_str": "77915997", + "indices": [ + 3, + 12 + ] + } + ], + "media": [ + { + "id": 505864942575034400, + "id_str": "505864942575034369", + "indices": [ + 27, + 49 + ], + "media_url": "http://pbs.twimg.com/media/BwUxfC6CIAEr-Ye.jpg", + "media_url_https": "https://pbs.twimg.com/media/BwUxfC6CIAEr-Ye.jpg", + "url": "http://t.co/PkCJAcSuYK", + "display_url": "pic.twitter.com/PkCJAcSuYK", + "expanded_url": "http://twitter.com/KATANA77/status/505864943636197376/photo/1", + "type": "photo", + "sizes": { + "medium": { + "w": 600, + "h": 338, + "resize": "fit" + }, + "small": { + "w": 340, + "h": 192, + "resize": "fit" + }, + "thumb": { + "w": 150, + "h": 150, + "resize": "crop" + }, + "large": { + "w": 765, + "h": 432, + "resize": "fit" + } + }, + "source_status_id": 505864943636197400, + "source_status_id_str": "505864943636197376" + } + ] + }, + "favorited": false, + "retweeted": false, + "possibly_sensitive": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:14 +0000 2014", + "id": 505874920140591100, + "id_str": "505874920140591104", + "text": "@longhairxMIURA æœä¸€ãƒ©ã‚¤ã‚«ã‚¹è¾›ç›®ã ã‚ˆw", + "source": "Twitter for iPhone", + "truncated": false, + "in_reply_to_status_id": 505874728897085440, + "in_reply_to_status_id_str": "505874728897085440", + "in_reply_to_user_id": 114188950, + "in_reply_to_user_id_str": "114188950", + "in_reply_to_screen_name": "longhairxMIURA", + "user": { + "id": 114786346, + "id_str": "114786346", + "name": "PROTECT-T", + "screen_name": "ttm_protect", + "location": "é™å²¡çœŒé•·æ³‰ç”º", + "description": "24 / XXX / @andprotector / @lifefocus0545 potato design works", + "url": "http://t.co/5EclbQiRX4", + "entities": { + "url": { + "urls": [ + { + "url": "http://t.co/5EclbQiRX4", + "expanded_url": "http://ap.furtherplatonix.net/index.html", + "display_url": "ap.furtherplatonix.net/index.html", + "indices": [ + 0, + 22 + ] + } + ] + }, + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 1387, + "friends_count": 903, + "listed_count": 25, + "created_at": "Tue Feb 16 16:13:41 +0000 2010", + "favourites_count": 492, + "utc_offset": 32400, + "time_zone": "Osaka", + "geo_enabled": false, + "verified": false, + "statuses_count": 12679, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/481360383253295104/4B9Rcfys_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/481360383253295104/4B9Rcfys_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/114786346/1403600232", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 0, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "longhairxMIURA", + "name": "miura desu", + "id": 114188950, + "id_str": "114188950", + "indices": [ + 0, + 15 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:14 +0000 2014", + "id": 505874919020699650, + "id_str": "505874919020699648", + "text": "RT @omo_kko: ラウワン脱出→å‹é”ãŒå®¶ã«é€£ã‚“ã§å¸°ã£ã¦ã£ã¦è¨€ã†ã‹ã‚‰å‹é”ん家ã«ä¹—ã›ã¦å¸°ã‚‹(1度も行ã£ãŸã“ã¨ãªã„田舎é“)→å‹é”ãŠã‚ã—ã¦è¿·å­â†’500メートルãらã„続ã変ãªä¸€æœ¬é“進む→墓地ã§è¡Œãæ­¢ã¾ã‚Šã§Uターン出æ¥ãšãƒãƒƒã‚¯ã§500メートル元ã®ã¨ã“ã‚ã¾ã§é€²ã¾ãªã„ã¨ã„ã‘ãªã„â†ä»Šã“ã“", + "source": "Twitter for iPhone", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 392585658, + "id_str": "392585658", + "name": "原稿", + "screen_name": "chibu4267", + "location": "キミã®éƒ¨å±‹ã®ç‡ƒãˆã‚‹ã‚´ãƒŸç®±", + "description": "RTã—ã¦TLã«æ¿æµã‚’èµ·ã“ã™ã‹ã‚‰ãƒ•ã‚©ãƒ­ãƒ¼ã—ãªã„æ–¹ãŒè‰¯ã„よ 言ã£ã¦ã‚‹ã“ã¨ã‚‚ã¤ã¾ã‚‰ãªã„㗠詳細→http://t.co/ANSFlYXERJ 相方@1life_5106_hshd 葛西教徒ãã®å£±", + "url": "http://t.co/JTFjV89eaN", + "entities": { + "url": { + "urls": [ + { + "url": "http://t.co/JTFjV89eaN", + "expanded_url": "http://www.pixiv.net/member.php?id=1778417", + "display_url": "pixiv.net/member.php?id=…", + "indices": [ + 0, + 22 + ] + } + ] + }, + "description": { + "urls": [ + { + "url": "http://t.co/ANSFlYXERJ", + "expanded_url": "http://twpf.jp/chibu4267", + "display_url": "twpf.jp/chibu4267", + "indices": [ + 45, + 67 + ] + } + ] + } + }, + "protected": false, + "followers_count": 1324, + "friends_count": 1165, + "listed_count": 99, + "created_at": "Mon Oct 17 08:23:46 +0000 2011", + "favourites_count": 9542, + "utc_offset": 32400, + "time_zone": "Tokyo", + "geo_enabled": true, + "verified": false, + "statuses_count": 369420, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://pbs.twimg.com/profile_background_images/453106940822814720/PcJIZv43.png", + "profile_background_image_url_https": "https://pbs.twimg.com/profile_background_images/453106940822814720/PcJIZv43.png", + "profile_background_tile": true, + "profile_image_url": "http://pbs.twimg.com/profile_images/505731759216943107/pzhnkMEg_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/505731759216943107/pzhnkMEg_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/392585658/1362383911", + "profile_link_color": "5EB9FF", + "profile_sidebar_border_color": "FFFFFF", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": false, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sat Aug 30 16:51:09 +0000 2014", + "id": 505759640164892700, + "id_str": "505759640164892673", + "text": "ラウワン脱出→å‹é”ãŒå®¶ã«é€£ã‚“ã§å¸°ã£ã¦ã£ã¦è¨€ã†ã‹ã‚‰å‹é”ん家ã«ä¹—ã›ã¦å¸°ã‚‹(1度も行ã£ãŸã“ã¨ãªã„田舎é“)→å‹é”ãŠã‚ã—ã¦è¿·å­â†’500メートルãらã„続ã変ãªä¸€æœ¬é“進む→墓地ã§è¡Œãæ­¢ã¾ã‚Šã§Uターン出æ¥ãšãƒãƒƒã‚¯ã§500メートル元ã®ã¨ã“ã‚ã¾ã§é€²ã¾ãªã„ã¨ã„ã‘ãªã„â†ä»Šã“ã“", + "source": "Twitter for iPhone", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 309565423, + "id_str": "309565423", + "name": "ãŠã‚‚ã£ã“", + "screen_name": "omo_kko", + "location": "", + "description": "ã±ã‚“ã™ã¨", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 730, + "friends_count": 200, + "listed_count": 23, + "created_at": "Thu Jun 02 09:15:51 +0000 2011", + "favourites_count": 5441, + "utc_offset": 32400, + "time_zone": "Tokyo", + "geo_enabled": true, + "verified": false, + "statuses_count": 30012, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/499126939378929664/GLWpIKTW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/499126939378929664/GLWpIKTW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/309565423/1409418370", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 67, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "omo_kko", + "name": "ãŠã‚‚ã£ã“", + "id": 309565423, + "id_str": "309565423", + "indices": [ + 3, + 11 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:13 +0000 2014", + "id": 505874918198624260, + "id_str": "505874918198624256", + "text": "RT @thsc782_407: #LEDカツカツé¸æ‰‹æ¨©\n漢字一文字ã¶ã‚“ã®ã‚¹ãƒšãƒ¼ã‚¹ã«ã€Œãƒã‚¦ã‚¹ãƒ†ãƒ³ãƒœã‚¹ã€ã‚’åŽã‚ã‚‹ç‹‚æ°— http://t.co/vmrreDMziI", + "source": "Twitter for Android", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 753161754, + "id_str": "753161754", + "name": "ã­ã“ã­ã“ã¿ã‹ã‚“*", + "screen_name": "nekonekomikan", + "location": "ソーダ水ã®ã‚ãµã‚Œã‚‹ãƒ“ンã®ä¸­", + "description": "猫×6ã€å¤§å­¦ãƒ»é«˜æ ¡ãƒ»æ—¦é‚£å„1ã¨æš®ã‚‰ã—ã¦ã„ã¾ã™ã€‚猫ã€å­ä¾›ã€æ—¥å¸¸æ€ã£ãŸäº‹ã‚’ã¤ã¶ã‚„ã„ã¦ã„ã¾ã™ï¼ä»Šå¹´ã®ç›®æ¨™ï¼šèª­æ›¸ã€åº­ã®æ‰‹å…¥ã‚Œã€ãƒ©ãƒ³ãƒ‹ãƒ³ã‚°ã€æ‰‹èŠ¸ï¼çŒ«ï¼ŠèŠ±ï¼Šå†™çœŸï¼Šè©©ï¼Šæž—ã‚‚ã‚‚ã“ã•ã‚“*鉄é“ãªã©å¥½ããªæ–¹ã‚’フォローã•ã›ã¦ã„ãŸã ã„ã¦ã„ã¾ã™ã€‚よã‚ã—ããŠé¡˜ã„ã—ã¾ã™â™¬", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 217, + "friends_count": 258, + "listed_count": 8, + "created_at": "Sun Aug 12 14:00:47 +0000 2012", + "favourites_count": 7650, + "utc_offset": 32400, + "time_zone": "Tokyo", + "geo_enabled": false, + "verified": false, + "statuses_count": 20621, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/470627990271848448/m83uy6Vc_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/470627990271848448/m83uy6Vc_normal.jpeg", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Fri Feb 28 16:04:13 +0000 2014", + "id": 439430848190742500, + "id_str": "439430848190742528", + "text": "#LEDカツカツé¸æ‰‹æ¨©\n漢字一文字ã¶ã‚“ã®ã‚¹ãƒšãƒ¼ã‚¹ã«ã€Œãƒã‚¦ã‚¹ãƒ†ãƒ³ãƒœã‚¹ã€ã‚’åŽã‚ã‚‹ç‹‚æ°— http://t.co/vmrreDMziI", + "source": "Twitter Web Client", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 82900665, + "id_str": "82900665", + "name": "[90]é’è‘‰å° èŠ¦ (第二粟屋) 屋", + "screen_name": "thsc782_407", + "location": "ã‹ã‚“ã¾ã—ã", + "description": "湯ã®è¡—ã®å…ƒå‹ƒé…©å§¦ãªã‚“ã¡ã‚ƒã‚‰å¤§ã€€èµ¤ã„犬ã®çŠ¬ï¼ˆå¤–資系) 肥後ã§ç·‘ナンãƒãƒ¼å±‹ã•ã‚“勤ã‚\nãã ã‚‰ãªã„ã“ã¨ã—ã‹ã¤ã¶ã‚„ã‹ãªã„ã—ã€ã„ã¡ã„ã¡è¨³ã®ã‚ã‹ã‚‰ãªã„記å·ã‚’連呼ã™ã‚‹ã®ã§ç›¸å½“邪魔ã«ãªã‚‹ã¨æ€ã„ã¾ã™ã€‚害ã¯ãªã„ã¨æ€ã„ã¾ã™ã€‚ã®ã‚Šã‚‚ã®ã®ç”»åƒã¨ã‹ãŸãã•ã‚“上ã’ã¾ã™ã€‚ã•ã¿ã—ã„。車輪ã®ã¤ã„ãŸã‚‚ã®ãªã‚‰ã ã„ãŸã„好ã。", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 587, + "friends_count": 623, + "listed_count": 30, + "created_at": "Fri Oct 16 15:13:32 +0000 2009", + "favourites_count": 1405, + "utc_offset": 32400, + "time_zone": "Tokyo", + "geo_enabled": true, + "verified": false, + "statuses_count": 60427, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "352726", + "profile_background_image_url": "http://pbs.twimg.com/profile_background_images/154137819/__813-1103.jpg", + "profile_background_image_url_https": "https://pbs.twimg.com/profile_background_images/154137819/__813-1103.jpg", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/493760276676620289/32oLiTtT_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/493760276676620289/32oLiTtT_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/82900665/1398865798", + "profile_link_color": "D02B55", + "profile_sidebar_border_color": "829D5E", + "profile_sidebar_fill_color": "99CC33", + "profile_text_color": "3E4415", + "profile_use_background_image": true, + "default_profile": false, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 3291, + "favorite_count": 1526, + "entities": { + "hashtags": [ + { + "text": "LEDカツカツé¸æ‰‹æ¨©", + "indices": [ + 0, + 11 + ] + } + ], + "symbols": [], + "urls": [], + "user_mentions": [], + "media": [ + { + "id": 439430848194936800, + "id_str": "439430848194936832", + "indices": [ + 41, + 63 + ], + "media_url": "http://pbs.twimg.com/media/BhksBzoCAAAJeDS.jpg", + "media_url_https": "https://pbs.twimg.com/media/BhksBzoCAAAJeDS.jpg", + "url": "http://t.co/vmrreDMziI", + "display_url": "pic.twitter.com/vmrreDMziI", + "expanded_url": "http://twitter.com/thsc782_407/status/439430848190742528/photo/1", + "type": "photo", + "sizes": { + "medium": { + "w": 600, + "h": 450, + "resize": "fit" + }, + "large": { + "w": 1024, + "h": 768, + "resize": "fit" + }, + "thumb": { + "w": 150, + "h": 150, + "resize": "crop" + }, + "small": { + "w": 340, + "h": 255, + "resize": "fit" + } + } + } + ] + }, + "favorited": false, + "retweeted": false, + "possibly_sensitive": false, + "lang": "ja" + }, + "retweet_count": 3291, + "favorite_count": 0, + "entities": { + "hashtags": [ + { + "text": "LEDカツカツé¸æ‰‹æ¨©", + "indices": [ + 17, + 28 + ] + } + ], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "thsc782_407", + "name": "[90]é’è‘‰å° èŠ¦ (第二粟屋) 屋", + "id": 82900665, + "id_str": "82900665", + "indices": [ + 3, + 15 + ] + } + ], + "media": [ + { + "id": 439430848194936800, + "id_str": "439430848194936832", + "indices": [ + 58, + 80 + ], + "media_url": "http://pbs.twimg.com/media/BhksBzoCAAAJeDS.jpg", + "media_url_https": "https://pbs.twimg.com/media/BhksBzoCAAAJeDS.jpg", + "url": "http://t.co/vmrreDMziI", + "display_url": "pic.twitter.com/vmrreDMziI", + "expanded_url": "http://twitter.com/thsc782_407/status/439430848190742528/photo/1", + "type": "photo", + "sizes": { + "medium": { + "w": 600, + "h": 450, + "resize": "fit" + }, + "large": { + "w": 1024, + "h": 768, + "resize": "fit" + }, + "thumb": { + "w": 150, + "h": 150, + "resize": "crop" + }, + "small": { + "w": 340, + "h": 255, + "resize": "fit" + } + }, + "source_status_id": 439430848190742500, + "source_status_id_str": "439430848190742528" + } + ] + }, + "favorited": false, + "retweeted": false, + "possibly_sensitive": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:13 +0000 2014", + "id": 505874918039228400, + "id_str": "505874918039228416", + "text": "ã€é‡‘一地区太鼓å°ã€‘å·é–¢ã¨å°å±±ã®è¦‹åˆ†ã‘ãŒã¤ã‹ãªã„", + "source": "twittbot.net", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2530194984, + "id_str": "2530194984", + "name": "å·ä¹‹æ±Ÿä¸­é«˜ç”Ÿã‚ã‚‹ã‚ã‚‹", + "screen_name": "kw_aru", + "location": "DMã«ã¦ãƒã‚¿æ供待ã£ã¦ã¾ã™ã‚ˆ", + "description": "å·ä¹‹æ±Ÿä¸­é«˜ç”Ÿã®å·ä¹‹æ±Ÿä¸­é«˜ç”Ÿã«ã‚ˆã‚‹å·ä¹‹æ±Ÿä¸­é«˜ç”Ÿã®ãŸã‚ã®ã‚ã‚‹ã‚るアカウントã§ã™ã€‚タイムリーãªãƒã‚¿ã¯ãŠæ°—ã«å…¥ã‚Šã«ã‚ã‚Šã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 113, + "friends_count": 157, + "listed_count": 0, + "created_at": "Wed May 28 15:01:43 +0000 2014", + "favourites_count": 30, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 4472, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/471668359314948097/XbIyXiZK_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/471668359314948097/XbIyXiZK_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2530194984/1401289473", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 0, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:13 +0000 2014", + "id": 505874915338104800, + "id_str": "505874915338104833", + "text": "ãŠã¯ã‚ˆã†ã”ã–ã„ã¾ã™ã‚“♪ SSDSã®DVDãŒæœä¸€ã§å±Šã„ãŸã€œï¼ˆâ‰§âˆ‡â‰¦ï¼‰", + "source": "TweetList!", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 428179337, + "id_str": "428179337", + "name": "サラ", + "screen_name": "sala_mgn", + "location": "æ±äº¬éƒ½", + "description": "botéŠã³ã¨å®Ÿæ³ãŒä¸»ç›®çš„ã®è¶£å‘³ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã€‚æˆäººæ¸ˆâ™€ã€‚時々TLãŠé¨’ãŒã›ã—ã¾ã™ã€‚リフォ率低ã„ã§ã™ãŒï¼¦ï¼ï¼¢ã”自由ã«ã€‚スパムã¯ãƒ–ロックï¼[HOT]K[アニメ]タイãƒãƒ‹/K/薄桜鬼/トライガン/進撃[å°èª¬]冲方ä¸/森åšå—£[漫画]内藤泰弘/高河ゆん[ä»–]声優/演劇 ※@sano_bot1二代目管ç†äºº", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 104, + "friends_count": 421, + "listed_count": 2, + "created_at": "Sun Dec 04 12:51:18 +0000 2011", + "favourites_count": 3257, + "utc_offset": -36000, + "time_zone": "Hawaii", + "geo_enabled": false, + "verified": false, + "statuses_count": 25303, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "1A1B1F", + "profile_background_image_url": "http://pbs.twimg.com/profile_background_images/601682567/put73jtg48ytjylq00if.jpeg", + "profile_background_image_url_https": "https://pbs.twimg.com/profile_background_images/601682567/put73jtg48ytjylq00if.jpeg", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/3350624721/755920942e4f512e6ba489df7eb1147e_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/3350624721/755920942e4f512e6ba489df7eb1147e_normal.jpeg", + "profile_link_color": "2FC2EF", + "profile_sidebar_border_color": "181A1E", + "profile_sidebar_fill_color": "252429", + "profile_text_color": "666666", + "profile_use_background_image": true, + "default_profile": false, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 0, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:13 +0000 2014", + "id": 505874914897690600, + "id_str": "505874914897690624", + "text": "@ran_kirazuki ãã®ã‚ˆã†ãªãŠè¨€è‘‰ã‚’é ‚ã‘ã‚‹ã¨ã¯â€¦â€¦ï¼ã“ã®é›¨å¤ªéƒŽã€èª å¿ƒèª æ„ã‚’æŒã£ã¦å§‰å¾¡ã®è¶³ã®æŒ‡ã®ç¬¬ä¸€é–¢ç¯€ã‚’å´‡ã‚奉りã¨ã†ã”ã–ã„ã¾ã™", + "source": "Twitter for Android", + "truncated": false, + "in_reply_to_status_id": 505874276692406300, + "in_reply_to_status_id_str": "505874276692406272", + "in_reply_to_user_id": 531544559, + "in_reply_to_user_id_str": "531544559", + "in_reply_to_screen_name": "ran_kirazuki", + "user": { + "id": 2364828518, + "id_str": "2364828518", + "name": "雨", + "screen_name": "tear_dice", + "location": "変態/日常/創作/室町/ãŸã¾ã«ç‰ˆæ¨©", + "description": "アイコンã¯å…„ã•ã‚“ã‹ã‚‰ï¼", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 28, + "friends_count": 28, + "listed_count": 0, + "created_at": "Fri Feb 28 00:28:40 +0000 2014", + "favourites_count": 109, + "utc_offset": 32400, + "time_zone": "Seoul", + "geo_enabled": false, + "verified": false, + "statuses_count": 193, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "000000", + "profile_background_image_url": "http://pbs.twimg.com/profile_background_images/504434510675443713/lvW7ad5b.jpeg", + "profile_background_image_url_https": "https://pbs.twimg.com/profile_background_images/504434510675443713/lvW7ad5b.jpeg", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/505170142284640256/rnW4XeEJ_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/505170142284640256/rnW4XeEJ_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2364828518/1409087198", + "profile_link_color": "0D31BF", + "profile_sidebar_border_color": "000000", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": false, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 0, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "ran_kirazuki", + "name": "蘭ã´ã‚ˆã®æ—¥å¸¸", + "id": 531544559, + "id_str": "531544559", + "indices": [ + 0, + 13 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:13 +0000 2014", + "id": 505874914591514600, + "id_str": "505874914591514626", + "text": "RT @AFmbsk: @samao21718 \n呼ã³æ–¹â˜žã¾ãŠã¡ã‚ƒã‚“\n呼ã°ã‚Œæ–¹â˜žã‚ーã¡ã‚ƒã‚“\n第一å°è±¡â˜žå¹³é‡Žã‹ã‚‰ï¼Ÿï¼\n今ã®å°è±¡â˜žãŠã¨ãªã£ã½ã„ï¼ï¼\nLINE交æ›â˜žã‚‚ã£ã¦ã‚‹ã‚“\\( ˆoˆ )/\nトプ画ã«ã¤ã„ã¦â˜žæ¥½ã—ãã†ã§ã„ーãªðŸ˜³\n家æ—ã«ã™ã‚‹ãªã‚‰â˜žãŠã­ã‡ã¡ã‚ƒã‚“\n最後ã«ä¸€è¨€â˜žå…¨ç„¶ä¼šãˆãªã„…", + "source": "Twitter for Android", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2179759316, + "id_str": "2179759316", + "name": "ã¾ãŠ", + "screen_name": "samao21718", + "location": "埼玉 UK留学ã—ã¦ã¾ã—ãŸâœˆ", + "description": "゚.*97line ãŠã•ã‚‰ã«è²¢ã„ã§ã‚‹ç³»å¥³å­ï¼Š.ã‚œ DISH// ✯ ä½é‡Žæ‚ æ–— ✯ 読モ ✯ WEGO ✯ åµ I met @OTYOfficial in the London ;)", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 111, + "friends_count": 121, + "listed_count": 0, + "created_at": "Thu Nov 07 09:47:41 +0000 2013", + "favourites_count": 321, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 1777, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501535615351926784/c5AAh6Sz_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501535615351926784/c5AAh6Sz_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2179759316/1407640217", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sat Aug 30 14:59:49 +0000 2014", + "id": 505731620456771600, + "id_str": "505731620456771584", + "text": "@samao21718 \n呼ã³æ–¹â˜žã¾ãŠã¡ã‚ƒã‚“\n呼ã°ã‚Œæ–¹â˜žã‚ーã¡ã‚ƒã‚“\n第一å°è±¡â˜žå¹³é‡Žã‹ã‚‰ï¼Ÿï¼\n今ã®å°è±¡â˜žãŠã¨ãªã£ã½ã„ï¼ï¼\nLINE交æ›â˜žã‚‚ã£ã¦ã‚‹ã‚“\\( ˆoˆ )/\nトプ画ã«ã¤ã„ã¦â˜žæ¥½ã—ãã†ã§ã„ーãªðŸ˜³\n家æ—ã«ã™ã‚‹ãªã‚‰â˜žãŠã­ã‡ã¡ã‚ƒã‚“\n最後ã«ä¸€è¨€â˜žå…¨ç„¶ä¼šãˆãªã„ã­ãƒ¼ä»Šåº¦ä¼šãˆãŸã‚‰ã„ã„ãªï¼", + "source": "Twitter for iPhone", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": 2179759316, + "in_reply_to_user_id_str": "2179759316", + "in_reply_to_screen_name": "samao21718", + "user": { + "id": 1680668713, + "id_str": "1680668713", + "name": "★Shiiiii!☆", + "screen_name": "AFmbsk", + "location": "埼玉", + "description": "2310*basketball#41*UVERworld*Pooh☪Bell +.。*å¼±ã•ã‚’知ã£ã¦å¼·ããªã‚Œ*゚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 429, + "friends_count": 434, + "listed_count": 0, + "created_at": "Sun Aug 18 12:45:00 +0000 2013", + "favourites_count": 2488, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 6352, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/504643170886365185/JN_dlwUd_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/504643170886365185/JN_dlwUd_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/1680668713/1408805886", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 1, + "favorite_count": 1, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "samao21718", + "name": "ã¾ãŠ", + "id": 2179759316, + "id_str": "2179759316", + "indices": [ + 0, + 11 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 1, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "AFmbsk", + "name": "★Shiiiii!☆", + "id": 1680668713, + "id_str": "1680668713", + "indices": [ + 3, + 10 + ] + }, + { + "screen_name": "samao21718", + "name": "ã¾ãŠ", + "id": 2179759316, + "id_str": "2179759316", + "indices": [ + 12, + 23 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:10 +0000 2014", + "id": 505874905712189440, + "id_str": "505874905712189440", + "text": "一ã€å¸¸ã«èº«ä¸€ã¤ç°¡ç´ ã«ã—ã¦ã€ç¾Žé£Ÿã‚’好んã§ã¯ãªã‚‰ãªã„", + "source": "twittbot.net", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 1330420010, + "id_str": "1330420010", + "name": "ç¨è¡Œé“bot", + "screen_name": "dokkodo_bot", + "location": "", + "description": "宮本武蔵ã®è‡ªèª“書ã€ã€Œç¨è¡Œé“ã€ã«è¨˜ã•ã‚ŒãŸäºŒå一箇æ¡ã‚’ランダムã«ã¤ã¶ã‚„ãbotã§ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 4, + "friends_count": 5, + "listed_count": 1, + "created_at": "Sat Apr 06 01:19:55 +0000 2013", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 9639, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/3482551671/d9e749f7658b523bdd50b7584ed4ba6a_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/3482551671/d9e749f7658b523bdd50b7584ed4ba6a_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/1330420010/1365212335", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 0, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:10 +0000 2014", + "id": 505874903094939650, + "id_str": "505874903094939648", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "モテモテ大作戦★男å­ç·¨", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2714526565, + "id_str": "2714526565", + "name": "モテモテ大作戦★男å­ç·¨", + "screen_name": "mote_danshi1", + "location": "", + "description": "ã‚„ã£ã±ã‚Šãƒ¢ãƒ†ãƒ¢ãƒ†ç”·å­ã«ãªã‚ŠãŸã„ï¼è‡ªåˆ†ã‚’磨ãヒントをã¿ã¤ã‘ãŸã„ï¼å¿œæ´ã—ã¦ãれる人㯠RT & 相互フォロー㧠ã¿ãªã•ã‚“ã€ãŠé¡˜ã„ã—ã¾ã™â™ª", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 664, + "friends_count": 1835, + "listed_count": 0, + "created_at": "Thu Aug 07 12:59:59 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 597, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/497368689386086400/7hqdKMzG_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/497368689386086400/7hqdKMzG_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2714526565/1407416898", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:10 +0000 2014", + "id": 505874902390276100, + "id_str": "505874902390276096", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "心ã«éŸ¿ãアツã„å言集", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2699261263, + "id_str": "2699261263", + "name": "心ã«éŸ¿ãアツã„å言集", + "screen_name": "kokoro_meigen11", + "location": "", + "description": "人生ã®æ ¼è¨€ã¯ã€äººã®å¿ƒã‚„人生を瞬時ã«ã«å‹•ã‹ã—ã¦ã—ã¾ã†ã“ã¨ãŒã‚る。\r\nãã‚“ãªè¨€è‘‰ã®é‡ã¿ã‚’味ã‚ãŠã†ã€‚\r\né¢ç™½ã‹ã£ãŸã‚‰RT & 相互フォローã§ã¿ãªã•ã‚“ã€ãŠé¡˜ã„ã—ã¾ã™â™ª", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 183, + "friends_count": 1126, + "listed_count": 0, + "created_at": "Fri Aug 01 22:00:00 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 749, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/495328654126112768/1rKnNuWK_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/495328654126112768/1rKnNuWK_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2699261263/1406930543", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:10 +0000 2014", + "id": 505874902247677950, + "id_str": "505874902247677954", + "text": "RT @POTENZA_SUPERGT: ã‚ã‚ŠãŒã¨ã†ã”ã–ã„ã¾ã™ï¼â€œ@8CBR8: @POTENZA_SUPERGT 13時åŠã”ã‚一雨ããã†ã§ã™ãŒã€ç„¡äº‹å…¨è»Šæ±ºå‹ãƒ¬ãƒ¼ã‚¹å®Œèµ°å‡ºæ¥ã‚‹ã“ã¨ç¥ˆã£ã¦ã¾ã™ï¼ http://t.co/FzTyFnt9xHâ€", + "source": "jigtwi", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 1021030416, + "id_str": "1021030416", + "name": "narur", + "screen_name": "narur2", + "location": "æ™´ã‚Œã®å›½ãªã®ã«ä½•æ•…ã‹é–‹å¹•æˆ¦ã§ã¯é›¨ã‚„雪や冰や霰ãŒé™ã‚‹âœ¨", + "description": "F1.GP2.Superformula.SuperGT.F3...\nスーパーGTãŒå¤§å¥½ã♡車ãŒå¥½ãï¼æ–°å¹¹ç·šã‚‚好ãï¼é£›è¡Œæ©Ÿã‚‚好ãï¼ã“ã£ãり別アカã§ã™(๑´ㅂ`๑)♡*.+ã‚œ", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 257, + "friends_count": 237, + "listed_count": 2, + "created_at": "Wed Dec 19 01:14:41 +0000 2012", + "favourites_count": 547, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 55417, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://pbs.twimg.com/profile_background_images/462180217574789121/1Jf6m_2L.jpeg", + "profile_background_image_url_https": "https://pbs.twimg.com/profile_background_images/462180217574789121/1Jf6m_2L.jpeg", + "profile_background_tile": true, + "profile_image_url": "http://pbs.twimg.com/profile_images/444312241395863552/FKl40ebQ_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/444312241395863552/FKl40ebQ_normal.jpeg", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": false, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:05:11 +0000 2014", + "id": 505868866686169100, + "id_str": "505868866686169089", + "text": "ã‚ã‚ŠãŒã¨ã†ã”ã–ã„ã¾ã™ï¼â€œ@8CBR8: @POTENZA_SUPERGT 13時åŠã”ã‚一雨ããã†ã§ã™ãŒã€ç„¡äº‹å…¨è»Šæ±ºå‹ãƒ¬ãƒ¼ã‚¹å®Œèµ°å‡ºæ¥ã‚‹ã“ã¨ç¥ˆã£ã¦ã¾ã™ï¼ http://t.co/FzTyFnt9xHâ€", + "source": "Twitter for iPhone", + "truncated": false, + "in_reply_to_status_id": 505868690588303360, + "in_reply_to_status_id_str": "505868690588303360", + "in_reply_to_user_id": 333344408, + "in_reply_to_user_id_str": "333344408", + "in_reply_to_screen_name": "8CBR8", + "user": { + "id": 359324738, + "id_str": "359324738", + "name": "POTENZA_SUPERGT", + "screen_name": "POTENZA_SUPERGT", + "location": "", + "description": "ブリヂストンã®ã‚¹ãƒãƒ¼ãƒ„タイヤ「POTENZAã€ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã§ã™ã€‚レースやタイヤã®äº‹ãªã©ã‚’ã¤ã¶ã‚„ãã¾ã™ã€‚今シーズンも「ãƒãƒ£ãƒ³ãƒ”オンタイヤã®ç§°å·ã¯è­²ã‚‰ãªã„ã€ã‚’キャッãƒã‚³ãƒ”ーã«ã€ã‚¿ã‚¤ãƒ¤ä¾›çµ¦ãƒãƒ¼ãƒ ã‚’全力ã§ã‚µãƒãƒ¼ãƒˆã—ã¦ã„ãã¾ã™ã®ã§ã€å¿œæ´ã‚ˆã‚ã—ããŠé¡˜ã„ã—ã¾ã™ï¼ãªãŠã€è¿”ä¿¡ãŒã§ããªã„å ´åˆã‚‚ã‚ã‚Šã¾ã™ã®ã§ã€ã”了承よã‚ã—ããŠé¡˜ã„致ã—ã¾ã™ã€‚", + "url": "http://t.co/LruVPk5x4K", + "entities": { + "url": { + "urls": [ + { + "url": "http://t.co/LruVPk5x4K", + "expanded_url": "http://www.bridgestone.co.jp/sc/potenza/", + "display_url": "bridgestone.co.jp/sc/potenza/", + "indices": [ + 0, + 22 + ] + } + ] + }, + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 9612, + "friends_count": 308, + "listed_count": 373, + "created_at": "Sun Aug 21 11:33:38 +0000 2011", + "favourites_count": 26, + "utc_offset": -36000, + "time_zone": "Hawaii", + "geo_enabled": true, + "verified": false, + "statuses_count": 10032, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "131516", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme14/bg.gif", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme14/bg.gif", + "profile_background_tile": true, + "profile_image_url": "http://pbs.twimg.com/profile_images/1507885396/TW_image_normal.jpg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/1507885396/TW_image_normal.jpg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/359324738/1402546267", + "profile_link_color": "FF2424", + "profile_sidebar_border_color": "EEEEEE", + "profile_sidebar_fill_color": "EFEFEF", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": false, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 7, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "8CBR8", + "name": "CBR Rider #17 KEIHIN", + "id": 333344408, + "id_str": "333344408", + "indices": [ + 12, + 18 + ] + }, + { + "screen_name": "POTENZA_SUPERGT", + "name": "POTENZA_SUPERGT", + "id": 359324738, + "id_str": "359324738", + "indices": [ + 20, + 36 + ] + } + ], + "media": [ + { + "id": 505868690252779500, + "id_str": "505868690252779521", + "indices": [ + 75, + 97 + ], + "media_url": "http://pbs.twimg.com/media/BwU05MGCUAEY6Wu.jpg", + "media_url_https": "https://pbs.twimg.com/media/BwU05MGCUAEY6Wu.jpg", + "url": "http://t.co/FzTyFnt9xH", + "display_url": "pic.twitter.com/FzTyFnt9xH", + "expanded_url": "http://twitter.com/8CBR8/status/505868690588303360/photo/1", + "type": "photo", + "sizes": { + "medium": { + "w": 600, + "h": 399, + "resize": "fit" + }, + "thumb": { + "w": 150, + "h": 150, + "resize": "crop" + }, + "large": { + "w": 1024, + "h": 682, + "resize": "fit" + }, + "small": { + "w": 340, + "h": 226, + "resize": "fit" + } + }, + "source_status_id": 505868690588303360, + "source_status_id_str": "505868690588303360" + } + ] + }, + "favorited": false, + "retweeted": false, + "possibly_sensitive": false, + "lang": "ja" + }, + "retweet_count": 7, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "POTENZA_SUPERGT", + "name": "POTENZA_SUPERGT", + "id": 359324738, + "id_str": "359324738", + "indices": [ + 3, + 19 + ] + }, + { + "screen_name": "8CBR8", + "name": "CBR Rider #17 KEIHIN", + "id": 333344408, + "id_str": "333344408", + "indices": [ + 33, + 39 + ] + }, + { + "screen_name": "POTENZA_SUPERGT", + "name": "POTENZA_SUPERGT", + "id": 359324738, + "id_str": "359324738", + "indices": [ + 41, + 57 + ] + } + ], + "media": [ + { + "id": 505868690252779500, + "id_str": "505868690252779521", + "indices": [ + 96, + 118 + ], + "media_url": "http://pbs.twimg.com/media/BwU05MGCUAEY6Wu.jpg", + "media_url_https": "https://pbs.twimg.com/media/BwU05MGCUAEY6Wu.jpg", + "url": "http://t.co/FzTyFnt9xH", + "display_url": "pic.twitter.com/FzTyFnt9xH", + "expanded_url": "http://twitter.com/8CBR8/status/505868690588303360/photo/1", + "type": "photo", + "sizes": { + "medium": { + "w": 600, + "h": 399, + "resize": "fit" + }, + "thumb": { + "w": 150, + "h": 150, + "resize": "crop" + }, + "large": { + "w": 1024, + "h": 682, + "resize": "fit" + }, + "small": { + "w": 340, + "h": 226, + "resize": "fit" + } + }, + "source_status_id": 505868690588303360, + "source_status_id_str": "505868690588303360" + } + ] + }, + "favorited": false, + "retweeted": false, + "possibly_sensitive": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:09 +0000 2014", + "id": 505874901689851900, + "id_str": "505874901689851904", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "ã“ã“ã ã‘ã®æœ¬éŸ³â˜…ç”·å­ç·¨", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2762136439, + "id_str": "2762136439", + "name": "ã“ã“ã ã‘ã®æœ¬éŸ³â˜…ç”·å­ç·¨", + "screen_name": "danshi_honne1", + "location": "", + "description": "æ€ã£ã¦ã‚‹ã‘ã©è¨€ãˆãªã„ï¼ã§ã‚‚ホントã¯è¨€ã„ãŸã„ã“ã¨ã€å®Ÿã¯ã„ã£ã±ã„ã‚ã‚‹ã‚“ã§ã™ï¼ \r\nãã‚“ãªç”·å­ã®æœ¬éŸ³ã‚’ã€ã¤ã¶ã‚„ãã¾ã™ã€‚ \r\nãã®æ°—æŒã‚ã‹ã‚‹ã£ã¦äººã¯ RT & フォローãŠé¡˜ã„ã—ã¾ã™â™ª", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 101, + "friends_count": 985, + "listed_count": 0, + "created_at": "Sun Aug 24 11:11:30 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 209, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/503500282840354816/CEv8UMay_normal.png", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/503500282840354816/CEv8UMay_normal.png", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2762136439/1408878822", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:09 +0000 2014", + "id": 505874900939046900, + "id_str": "505874900939046912", + "text": "RT @UARROW_Y: よã†ã‹ã„体æ“第一を踊る国見英 http://t.co/SXoYWH98as", + "source": "Twitter for iPhone", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2454426158, + "id_str": "2454426158", + "name": "ã´ã‹ã‚Šã‚“", + "screen_name": "gncnToktTtksg", + "location": "", + "description": "銀魂/é»’ãƒã‚¹/進撃/ãƒã‚¤ã‚­ãƒ¥ãƒ¼/BLEACH/ã†ãŸãƒ—リ/鈴木é”央ã•ã‚“/神谷浩å²ã•ã‚“ 気軽ã«ãƒ•ã‚©ãƒ­ãƒ¼ã—ã¦ãã ã•ã„(^∇^)✨", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 1274, + "friends_count": 1320, + "listed_count": 17, + "created_at": "Sun Apr 20 07:48:53 +0000 2014", + "favourites_count": 2314, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 5868, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/457788684146716672/KCOy0S75_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/457788684146716672/KCOy0S75_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2454426158/1409371302", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:45 +0000 2014", + "id": 505871779949051900, + "id_str": "505871779949051904", + "text": "よã†ã‹ã„体æ“第一を踊る国見英 http://t.co/SXoYWH98as", + "source": "Twitter for Android", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 1261662588, + "id_str": "1261662588", + "name": "ゆã†çŸ¢", + "screen_name": "UARROW_Y", + "location": "ã¤ãり出ãã†å›½å½±ã®æ³¢ 広ã’よã†å›½å½±ã®è¼ª", + "description": "HQ!! æˆäººæ¸ˆè…女å­ã€‚日常ツイート多ã„ã§ã™ã€‚赤葦京治夢豚クソツイå«ã¿ã¾ã™æ³¨æ„。フォローをãŠè€ƒãˆã®éš›ã¯ãƒ—ロフã”一読ãŠé¡˜ã„致ã—ã¾ã™ã€‚FRBãŠæ°—軽ã«", + "url": "http://t.co/LFX2XOzb0l", + "entities": { + "url": { + "urls": [ + { + "url": "http://t.co/LFX2XOzb0l", + "expanded_url": "http://twpf.jp/UARROW_Y", + "display_url": "twpf.jp/UARROW_Y", + "indices": [ + 0, + 22 + ] + } + ] + }, + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 265, + "friends_count": 124, + "listed_count": 12, + "created_at": "Tue Mar 12 10:42:17 +0000 2013", + "favourites_count": 6762, + "utc_offset": 32400, + "time_zone": "Tokyo", + "geo_enabled": true, + "verified": false, + "statuses_count": 55946, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/502095104618663937/IzuPYx3E_normal.png", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/502095104618663937/IzuPYx3E_normal.png", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/1261662588/1408618604", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 29, + "favorite_count": 54, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [ + { + "url": "http://t.co/SXoYWH98as", + "expanded_url": "http://twitter.com/UARROW_Y/status/505871779949051904/photo/1", + "display_url": "pic.twitter.com/SXoYWH98as", + "indices": [ + 15, + 37 + ] + } + ], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "possibly_sensitive": false, + "lang": "ja" + }, + "retweet_count": 29, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [ + { + "url": "http://t.co/SXoYWH98as", + "expanded_url": "http://twitter.com/UARROW_Y/status/505871779949051904/photo/1", + "display_url": "pic.twitter.com/SXoYWH98as", + "indices": [ + 29, + 51 + ] + } + ], + "user_mentions": [ + { + "screen_name": "UARROW_Y", + "name": "ゆã†çŸ¢", + "id": 1261662588, + "id_str": "1261662588", + "indices": [ + 3, + 12 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "possibly_sensitive": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:09 +0000 2014", + "id": 505874900561580000, + "id_str": "505874900561580032", + "text": "今日ã¯ä¸€é«˜ã¨ä¸‰æ¡œï¼ˆãƒ»Î¸ãƒ»ï¼‰\n光梨ã¡ã‚ƒã‚“ã«ä¼šãˆãªã„ã‹ãªã€œ", + "source": "Twitter for iPhone", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 1366375976, + "id_str": "1366375976", + "name": "ゆã„ã®", + "screen_name": "yuino1006", + "location": "", + "description": "ã•ã‚“ãŠã† ç”·ãƒã‚¹ãƒžãƒ2ã­ã‚“(^ω^)", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 270, + "friends_count": 260, + "listed_count": 0, + "created_at": "Sat Apr 20 07:02:08 +0000 2013", + "favourites_count": 1384, + "utc_offset": 32400, + "time_zone": "Irkutsk", + "geo_enabled": false, + "verified": false, + "statuses_count": 5202, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/505354401448349696/nxVFEQQ4_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/505354401448349696/nxVFEQQ4_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/1366375976/1399989379", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 0, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:09 +0000 2014", + "id": 505874899324248060, + "id_str": "505874899324248064", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "共感★絶対ã‚ã‚‹ã‚ã‚‹ww", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2704420069, + "id_str": "2704420069", + "name": "共感★絶対ã‚ã‚‹ã‚ã‚‹ww", + "screen_name": "kyoukan_aru", + "location": "", + "description": "ã¿ã‚“ãªã«ã‚‚ã‚ã‹ã£ã¦ã‚‚らãˆã‚‹ã€ã‚ã‚‹ã‚るを見ã¤ã‘ãŸã„。\r\né¢ç™½ã‹ã£ãŸã‚‰RT & 相互フォローã§ã¿ãªã•ã‚“ã€ãŠé¡˜ã„ã—ã¾ã™â™ª", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 857, + "friends_count": 1873, + "listed_count": 0, + "created_at": "Sun Aug 03 15:50:40 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 682, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/495960812670836737/1LqkoyvU_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/495960812670836737/1LqkoyvU_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2704420069/1407081298", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:09 +0000 2014", + "id": 505874898493796350, + "id_str": "505874898493796352", + "text": "RT @assam_house: 泉田新潟県知事ã¯ã€æ±é›»ã®ç”³è«‹æ›¸æ出を容èªã•ã›ã‚‰ã‚ŒãŸã ã‘ã§ã€å†ç¨¼åƒã«å¿…è¦ãªã€ŒåŒæ„ã€ã¯ã¾ã ä¸Žãˆã¦ã„ã¾ã›ã‚“。今ã¾ã§æŸå´Žåˆˆç¾½ã®å†ç¨¼åƒã‚’抑ãˆç¶šã‘ã¦ããŸçŸ¥äº‹ã«ã€ã‚‚ã†ä¸€è¸ã‚“張りをãŠé¡˜ã„ã™ã‚‹æ„見をé€ã£ã¦ä¸‹ã•ã„。全国ã®çš†æ§˜ã€ãŠé¡˜ã„ã—ã¾ã™ï¼\nhttp://t.co…", + "source": "jigtwi for Android", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 960765968, + "id_str": "960765968", + "name": "ã•ã¡", + "screen_name": "sachitaka_dears", + "location": "宮城県", + "description": "動物関連ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã§ã™ã€‚サブアカウント@sachi_dears (ã•ã¡ â·) ã‚‚ã‚ã‚Šã¾ã™ã€‚『心ã‚ã‚‹ã‚‚ã®ã¯çš†ã€æ„›ã—æ„›ã•ã‚Œã‚‹ãŸã‚ã«ç”Ÿã¾ã‚Œã¦ããŸã€‚ãã—ã¦æ„›æƒ…ã‚’æ„Ÿã˜ãªãŒã‚‰ç”Ÿã‚’å…¨ã†ã™ã‚‹ã¹ããªã‚“ã ã€", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 3212, + "friends_count": 3528, + "listed_count": 91, + "created_at": "Tue Nov 20 16:30:53 +0000 2012", + "favourites_count": 3180, + "utc_offset": 32400, + "time_zone": "Irkutsk", + "geo_enabled": false, + "verified": false, + "statuses_count": 146935, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/3659653229/5b698df67f5d105400e9077f5ea50e91_normal.png", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/3659653229/5b698df67f5d105400e9077f5ea50e91_normal.png", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Tue Aug 19 11:00:53 +0000 2014", + "id": 501685228427964400, + "id_str": "501685228427964417", + "text": "泉田新潟県知事ã¯ã€æ±é›»ã®ç”³è«‹æ›¸æ出を容èªã•ã›ã‚‰ã‚ŒãŸã ã‘ã§ã€å†ç¨¼åƒã«å¿…è¦ãªã€ŒåŒæ„ã€ã¯ã¾ã ä¸Žãˆã¦ã„ã¾ã›ã‚“。今ã¾ã§æŸå´Žåˆˆç¾½ã®å†ç¨¼åƒã‚’抑ãˆç¶šã‘ã¦ããŸçŸ¥äº‹ã«ã€ã‚‚ã†ä¸€è¸ã‚“張りをãŠé¡˜ã„ã™ã‚‹æ„見をé€ã£ã¦ä¸‹ã•ã„。全国ã®çš†æ§˜ã€ãŠé¡˜ã„ã—ã¾ã™ï¼\nhttp://t.co/9oH5cgpy1q", + "source": "twittbot.net", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 1104771276, + "id_str": "1104771276", + "name": "アッサム山中(殺処分ゼロã«ä¸€ç¥¨ï¼‰", + "screen_name": "assam_house", + "location": "新潟県æŸå´Žå¸‚", + "description": "アッサム山中ã®è¶£å‘³ç”¨ã‚¢ã‚«ã€‚当分ã®é–“ã€é¸æŒ™å•“発用ã¨ã—ã¦ã‚‚使ã£ã¦ã„ãã¾ã™ã€‚ã“ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆãŒã‚¢ãƒƒã‚µãƒ å±±ä¸­æœ¬äººã®ã‚‚ã®ã§ã‚る事㯠@assam_yamanaka ã®ãƒ—ロフã§ã”確èªä¸‹ã•ã„。\r\nå…¬é¸æ³•ã«ä¿‚る表示\r\n庶民新党 #脱原発 http://t.co/96UqoCo0oU\r\nonestep.revival@gmail.com", + "url": "http://t.co/AEOCATaNZc", + "entities": { + "url": { + "urls": [ + { + "url": "http://t.co/AEOCATaNZc", + "expanded_url": "http://www.assam-house.net/", + "display_url": "assam-house.net", + "indices": [ + 0, + 22 + ] + } + ] + }, + "description": { + "urls": [ + { + "url": "http://t.co/96UqoCo0oU", + "expanded_url": "http://blog.assam-house.net/datsu-genpatsu/index.html", + "display_url": "blog.assam-house.net/datsu-genpatsu…", + "indices": [ + 110, + 132 + ] + } + ] + } + }, + "protected": false, + "followers_count": 2977, + "friends_count": 3127, + "listed_count": 64, + "created_at": "Sat Jan 19 22:10:13 +0000 2013", + "favourites_count": 343, + "utc_offset": 32400, + "time_zone": "Irkutsk", + "geo_enabled": false, + "verified": false, + "statuses_count": 18021, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/378800000067217575/e0a85b440429ff50430a41200327dcb8_normal.png", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/378800000067217575/e0a85b440429ff50430a41200327dcb8_normal.png", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/1104771276/1408948288", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 2, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [ + { + "url": "http://t.co/9oH5cgpy1q", + "expanded_url": "http://www.pref.niigata.lg.jp/kouhou/info.html", + "display_url": "pref.niigata.lg.jp/kouhou/info.ht…", + "indices": [ + 111, + 133 + ] + } + ], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "possibly_sensitive": false, + "lang": "ja" + }, + "retweet_count": 2, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [ + { + "url": "http://t.co/9oH5cgpy1q", + "expanded_url": "http://www.pref.niigata.lg.jp/kouhou/info.html", + "display_url": "pref.niigata.lg.jp/kouhou/info.ht…", + "indices": [ + 139, + 140 + ] + } + ], + "user_mentions": [ + { + "screen_name": "assam_house", + "name": "アッサム山中(殺処分ゼロã«ä¸€ç¥¨ï¼‰", + "id": 1104771276, + "id_str": "1104771276", + "indices": [ + 3, + 15 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "possibly_sensitive": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:09 +0000 2014", + "id": 505874898468630500, + "id_str": "505874898468630528", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "ãŠã—ゃれ★ペアルック", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2708607692, + "id_str": "2708607692", + "name": "ãŠã—ゃれ★ペアルック", + "screen_name": "osyare_pea", + "location": "", + "description": "ラブラブ度ãŒã‚¢ãƒƒãƒ—ã™ã‚‹ã€ç´ æ•µãªãƒšã‚¢ãƒ«ãƒƒã‚¯ã‚’見ã¤ã‘ã¦ç´¹ä»‹ã—ã¾ã™â™ª æ°—ã«å…¥ã£ãŸã‚‰ RT & 相互フォロー㧠ã¿ãªã•ã‚“ã€ãŠé¡˜ã„ã—ã¾ã™â™ª", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 129, + "friends_count": 1934, + "listed_count": 0, + "created_at": "Tue Aug 05 07:09:31 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 641, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/496554257676382208/Zgg0bmNu_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/496554257676382208/Zgg0bmNu_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2708607692/1407222776", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:08 +0000 2014", + "id": 505874897633951740, + "id_str": "505874897633951745", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "LOVE ♥ ラブライブ", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745389137, + "id_str": "2745389137", + "name": "LOVE ♥ ラブライブ", + "screen_name": "love_live55", + "location": "", + "description": "ã¨ã«ã‹ã「ラブライブãŒå¥½ãã§ï½žã™â™¥ã€ \r\nラブライブファンã«ã¯ã€ãŸã¾ã‚‰ãªã„内容ã°ã‹ã‚Šé›†ã‚ã¦ã„ã¾ã™â™ª \r\næ°—ã«å…¥ã£ãŸã‚‰ RT & 相互フォローãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 251, + "friends_count": 969, + "listed_count": 0, + "created_at": "Tue Aug 19 15:45:40 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 348, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501757482448850944/x2uPpqRx_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501757482448850944/x2uPpqRx_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745389137/1408463342", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:08 +0000 2014", + "id": 505874896795086850, + "id_str": "505874896795086848", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "æ‹ã™ã‚‹â™¡ãƒ‰ãƒ¬ã‚¹ã‚·ãƒªãƒ¼ã‚º", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2726346560, + "id_str": "2726346560", + "name": "æ‹ã™ã‚‹â™¡ãƒ‰ãƒ¬ã‚¹ã‚·ãƒªãƒ¼ã‚º", + "screen_name": "koisurudoress", + "location": "", + "description": "ã©ã‚Œã‚‚ã“れもã€è¦‹ã¦ã„ã‚‹ã ã‘ã§æ¬²ã—ããªã£ã¡ã‚ƒã†â™ª \r\n特別ãªæ—¥ã«ç€ã‚‹ç´ æ•µãªãƒ‰ãƒ¬ã‚¹ã‚’見ã¤ã‘ãŸã„ã§ã™ã€‚ \r\nç€ã¦ã¿ãŸã„ã¨æ€ã£ãŸã‚‰ RT & フォローãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 314, + "friends_count": 1900, + "listed_count": 0, + "created_at": "Tue Aug 12 14:10:35 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 471, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/499199619465621504/fg7sVusT_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/499199619465621504/fg7sVusT_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2726346560/1407853688", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:08 +0000 2014", + "id": 505874895964626940, + "id_str": "505874895964626944", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "胸キュン♥動物図鑑", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2759192574, + "id_str": "2759192574", + "name": "胸キュン♥動物図鑑", + "screen_name": "doubutuzukan", + "location": "", + "description": "ãµã¨ã—ãŸè¡¨æƒ…ã«æ€ã‚ãšã‚­ãƒ¥ãƒ³ã¨ã—ã¦ã—ã¾ã†â™ª \r\nãã‚“ãªæ„›ã—ã®å‹•ç‰©ãŸã¡ã®å†™çœŸã‚’見ã¤ã‘ã¾ã™ã€‚ \r\næ°—ã«å…¥ã£ãŸã‚‰ RT & フォローをã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 80, + "friends_count": 959, + "listed_count": 1, + "created_at": "Sat Aug 23 15:47:36 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 219, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/503211559552688128/Ej_bixna_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/503211559552688128/Ej_bixna_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2759192574/1408809101", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:08 +0000 2014", + "id": 505874895079608300, + "id_str": "505874895079608320", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "ディズニー★パラダイス", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2719228561, + "id_str": "2719228561", + "name": "ディズニー★パラダイス", + "screen_name": "disney_para", + "location": "", + "description": "ディズニーã®ã‹ã‚ã„ã„ç”»åƒã€ãƒ‹ãƒ¥ãƒ¼ã‚¹æƒ…å ±ã€ã‚ã‚‹ã‚ã‚‹ãªã©ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª\r\nディズニーファン㯠RT & フォローもãŠé¡˜ã„ã—ã¾ã™â™ª", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 331, + "friends_count": 1867, + "listed_count": 0, + "created_at": "Sat Aug 09 12:01:32 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 540, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/498076922488696832/Ti2AEuOT_normal.png", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/498076922488696832/Ti2AEuOT_normal.png", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2719228561/1407585841", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:08 +0000 2014", + "id": 505874894135898100, + "id_str": "505874894135898112", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "生々ã—ã„風刺画", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2714772727, + "id_str": "2714772727", + "name": "生々ã—ã„風刺画", + "screen_name": "nama_fuushi", + "location": "", + "description": "æ·±ã„æ„味ãŒè¾¼ã‚られãŸã€Œç”Ÿã€…ã—ã„風刺画ã€ã‚’見ã¤ã‘ã¾ã™ã€‚\r\n考ãˆã•ã›ã‚‰ã‚ŒãŸã‚‰ RT & 相互フォローã§ã¿ãªã•ã‚“ã€ãŠé¡˜ã„ã—ã¾ã™", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 298, + "friends_count": 1902, + "listed_count": 1, + "created_at": "Thu Aug 07 15:04:45 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 595, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/497398363352875011/tS-5FPJB_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/497398363352875011/tS-5FPJB_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2714772727/1407424091", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:07 +0000 2014", + "id": 505874893347377150, + "id_str": "505874893347377152", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "åµâ˜…大好ãã£å¨˜", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2721682579, + "id_str": "2721682579", + "name": "åµâ˜…大好ãã£å¨˜", + "screen_name": "arashi_suki1", + "location": "", + "description": "ãªã‚“ã ã‹ã‚“ã è¨€ã£ã¦ã€ã‚„ã£ã±ã‚ŠåµãŒå¥½ããªã‚“ã§ã™â™ª\r\nã„ã‚ã„ã‚集ã‚ãŸã„ã®ã§ã€åµå¥½ããªäººã«è¦‹ã¦ã»ã—ã„ã§ã™ã€‚\r\næ°—ã«å…¥ã£ãŸã‚‰ RT & 相互フォローãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 794, + "friends_count": 1913, + "listed_count": 2, + "created_at": "Sun Aug 10 13:43:56 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 504, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/498465364733198336/RO6wupdc_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/498465364733198336/RO6wupdc_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2721682579/1407678436", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:07 +0000 2014", + "id": 505874893154426900, + "id_str": "505874893154426881", + "text": "RT @Takashi_Shiina: テレビã§ã€Œæˆäººç”·æ€§ã®ã‚«ãƒ­ãƒªãƒ¼æ‘‚å–é‡ã¯1900kcalã€ã¨ã‹è¨€ã£ã¦ã¦ã€ãã‚Œã¯ã„ã¾ã¾ã•ã«ç§ãŒãƒ€ã‚¤ã‚¨ãƒƒãƒˆã®ãŸã‚ã«å¿…æ­»ã§ã‚­ãƒ¼ãƒ—ã—よã†ã¨ã—ã¦ã„ã‚‹é‡ã§ã€ã€Œãã‚ŒãŒæ™®é€šãªã‚‰äººã¯ã„ã¤å¤©ä¸€ã‚„ココイãƒã«è¡Œã£ã¦å¤§ç››ã‚Šã‚’食ãˆã°ã„ã„ã‚“ã ï¼ã€ã¨æ€ã£ãŸã€‚", + "source": "twicca", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 353516742, + "id_str": "353516742", + "name": "ãŠã—ã‚“ã“ー@土曜西ãˆ41a", + "screen_name": "oshin_koko", + "location": "ã“ãŸã¤", + "description": "ROMã£ã¦æ¥½ã—ã‚“ã§ã„る部分もã‚り無言フォロー多ã‚ã§ã™ã™ã¿ã¾ã›ã‚“…。ツイート数多ã‚・ã‚らã¶ã‚Šå¤šã‚ãªã®ã§ãƒ•ã‚©ãƒ­ãƒ¼éžæŽ¨å¥¨ã§ã™ã€‚最近ã¯æ—©å…µãƒ»å…µéƒ¨å—ã‘中心ã§ã™ãŒBLNLãªã‚“ã§ã‚‚好ãã§ã™ã€‚地雷少ãªã„ãŸã‚雑多ã«å‘Ÿãã¾ã™ã€‚è…・R18・ãƒã‚¿ãƒãƒ¬æœ‰ã‚‹ã®ã§ã”注æ„。他好ããªã‚¸ãƒ£ãƒ³ãƒ«ã¯ãƒ—ロフå‚照願ã„ã¾ã™ã€‚ 主催→@chounou_antholo", + "url": "http://t.co/mM1dG54NiO", + "entities": { + "url": { + "urls": [ + { + "url": "http://t.co/mM1dG54NiO", + "expanded_url": "http://twpf.jp/oshin_koko", + "display_url": "twpf.jp/oshin_koko", + "indices": [ + 0, + 22 + ] + } + ] + }, + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 479, + "friends_count": 510, + "listed_count": 43, + "created_at": "Fri Aug 12 05:53:13 +0000 2011", + "favourites_count": 3059, + "utc_offset": 32400, + "time_zone": "Tokyo", + "geo_enabled": false, + "verified": false, + "statuses_count": 104086, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "000000", + "profile_background_image_url": "http://pbs.twimg.com/profile_background_images/799871497/01583a031f83a45eba881c8acde729ee.jpeg", + "profile_background_image_url_https": "https://pbs.twimg.com/profile_background_images/799871497/01583a031f83a45eba881c8acde729ee.jpeg", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/484347196523835393/iHaYxm-2_normal.png", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/484347196523835393/iHaYxm-2_normal.png", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/353516742/1369039651", + "profile_link_color": "FF96B0", + "profile_sidebar_border_color": "FFFFFF", + "profile_sidebar_fill_color": "95E8EC", + "profile_text_color": "3C3940", + "profile_use_background_image": false, + "default_profile": false, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sat Aug 30 09:58:30 +0000 2014", + "id": 505655792733650940, + "id_str": "505655792733650944", + "text": "テレビã§ã€Œæˆäººç”·æ€§ã®ã‚«ãƒ­ãƒªãƒ¼æ‘‚å–é‡ã¯1900kcalã€ã¨ã‹è¨€ã£ã¦ã¦ã€ãã‚Œã¯ã„ã¾ã¾ã•ã«ç§ãŒãƒ€ã‚¤ã‚¨ãƒƒãƒˆã®ãŸã‚ã«å¿…æ­»ã§ã‚­ãƒ¼ãƒ—ã—よã†ã¨ã—ã¦ã„ã‚‹é‡ã§ã€ã€Œãã‚ŒãŒæ™®é€šãªã‚‰äººã¯ã„ã¤å¤©ä¸€ã‚„ココイãƒã«è¡Œã£ã¦å¤§ç››ã‚Šã‚’食ãˆã°ã„ã„ã‚“ã ï¼ã€ã¨æ€ã£ãŸã€‚", + "source": "Janetter", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 126573583, + "id_str": "126573583", + "name": "椎å高志", + "screen_name": "Takashi_Shiina", + "location": "BABEL(超能力支æ´ç ”究局)", + "description": "漫画家。週刊少年サンデーã§ã€Žçµ¶å¯¾å¯æ†ãƒãƒ«ãƒ‰ãƒ¬ãƒ³ã€é€£è¼‰ä¸­ã€‚TVアニメ『THE UNLIMITED 兵部京介ã€å…¬å¼ã‚µã‚¤ãƒˆï¼žhttp://t.co/jVqBoBEc", + "url": "http://t.co/K3Oi83wM3w", + "entities": { + "url": { + "urls": [ + { + "url": "http://t.co/K3Oi83wM3w", + "expanded_url": "http://cnanews.asablo.jp/blog/", + "display_url": "cnanews.asablo.jp/blog/", + "indices": [ + 0, + 22 + ] + } + ] + }, + "description": { + "urls": [ + { + "url": "http://t.co/jVqBoBEc", + "expanded_url": "http://unlimited-zc.jp/index.html", + "display_url": "unlimited-zc.jp/index.html", + "indices": [ + 59, + 79 + ] + } + ] + } + }, + "protected": false, + "followers_count": 110756, + "friends_count": 61, + "listed_count": 8159, + "created_at": "Fri Mar 26 08:54:51 +0000 2010", + "favourites_count": 25, + "utc_offset": 32400, + "time_zone": "Tokyo", + "geo_enabled": false, + "verified": false, + "statuses_count": 27364, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "EDECE9", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme3/bg.gif", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme3/bg.gif", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/504597210772688896/Uvt4jgf5_normal.png", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/504597210772688896/Uvt4jgf5_normal.png", + "profile_link_color": "088253", + "profile_sidebar_border_color": "D3D2CF", + "profile_sidebar_fill_color": "E3E2DE", + "profile_text_color": "634047", + "profile_use_background_image": false, + "default_profile": false, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 221, + "favorite_count": 109, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 221, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "Takashi_Shiina", + "name": "椎å高志", + "id": 126573583, + "id_str": "126573583", + "indices": [ + 3, + 18 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:07 +0000 2014", + "id": 505874892567244800, + "id_str": "505874892567244801", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "下ãƒã‚¿ï¼†ç¬‘変態雑学", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2762581922, + "id_str": "2762581922", + "name": "下ãƒã‚¿ï¼†ç¬‘変態雑学", + "screen_name": "shimo_hentai", + "location": "", + "description": "普通ã®äººã«ã¯æ€ã„ã¤ã‹ãªã„ã€ã¡ã‚‡ã£ã¨å¤‰æ…‹ãƒãƒƒã‚¯ãª 笑ãˆã‚‹ä¸‹ãƒã‚¿é›‘学をãŠå±Šã‘ã—ã¾ã™ã€‚ \r\nãŠã‚‚ã—ã‚ã‹ã£ãŸã‚‰ RT & フォローãŠé¡˜ã„ã—ã¾ã™â™ª", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 37, + "friends_count": 990, + "listed_count": 0, + "created_at": "Sun Aug 24 14:13:20 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 212, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/503545991950114816/K9yQbh1Q_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/503545991950114816/K9yQbh1Q_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2762581922/1408889893", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:07 +0000 2014", + "id": 505874891778703360, + "id_str": "505874891778703360", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "超簡å˜â˜…åˆå¿ƒè€…英語", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2744544025, + "id_str": "2744544025", + "name": "超簡å˜â˜…åˆå¿ƒè€…英語", + "screen_name": "kantaneigo1", + "location": "", + "description": "ã™ãã«ä½¿ãˆã‚‹ãƒ•ãƒ¬ãƒ¼ã‚ºã‚„ç°¡å˜ãªä¼šè©±ã‚’紹介ã—ã¾ã™ã€‚ \r\nå°‘ã—ã¥ã¤ç·´ç¿’ã—ã¦ã€ã©ã‚“ã©ã‚“使ã£ã¦ã¿ã‚ˆã†â˜† \r\n使ã£ã¦ã¿ãŸã„ã¨æ€ã£ãŸã‚‰ RT & フォローãŠé¡˜ã„ã—ã¾ã™â™ª", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 147, + "friends_count": 970, + "listed_count": 1, + "created_at": "Tue Aug 19 10:11:48 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 345, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501676136321929216/4MLpyHe3_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501676136321929216/4MLpyHe3_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2744544025/1408443928", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:07 +0000 2014", + "id": 505874891032121340, + "id_str": "505874891032121344", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "ç¾ä»£ã®ãƒãƒ³ãƒ‰ã‚µã‚¤ãƒ³", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2762816814, + "id_str": "2762816814", + "name": "ç¾ä»£ã®ãƒãƒ³ãƒ‰ã‚µã‚¤ãƒ³", + "screen_name": "ima_handsign", + "location": "", + "description": "イザã¨ã„ã†æ™‚ã‚„ã€å›°ã£ãŸæ™‚ã«ã€å¿…ãšå½¹ã«ç«‹ã¤ãƒãƒ³ãƒ‰ã‚µã‚¤ãƒ³ã®ã‚ªãƒ³ãƒ‘レードã§ã™â™ª \r\n使ã£ã¦ã¿ãŸããªã£ãŸã‚‰ RT & フォローãŠé¡˜ã„ã—ã¾ã™â™ª", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 95, + "friends_count": 996, + "listed_count": 0, + "created_at": "Sun Aug 24 15:33:58 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 210, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/503566188253687809/7wtdp1AC_normal.png", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/503566188253687809/7wtdp1AC_normal.png", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2762816814/1408894540", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:07 +0000 2014", + "id": 505874890247782400, + "id_str": "505874890247782401", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "今日ã‹ã‚‰ã‚¢ãƒŠã‚¿ã‚‚イイ女♪", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2714167411, + "id_str": "2714167411", + "name": "今日ã‹ã‚‰ã‚¢ãƒŠã‚¿ã‚‚イイ女♪", + "screen_name": "anata_iionna", + "location": "", + "description": "ã¿ã‚“ãªãŒçŸ¥ã‚ŠãŸã„ イイ女ã®ç§˜å¯†ã‚’見ã¤ã‘ã¾ã™â™ª ã„ã„ãªï½žã¨æ€ã£ã¦ãã‚ŒãŸäººã¯ RT & 相互フォロー㧠ã¿ãªã•ã‚“ã€ãŠé¡˜ã„ã—ã¾ã™â™ª", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 390, + "friends_count": 1425, + "listed_count": 0, + "created_at": "Thu Aug 07 09:27:59 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 609, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/497314455655436288/dz7P3-fy_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/497314455655436288/dz7P3-fy_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2714167411/1407404214", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:07 +0000 2014", + "id": 505874890218434560, + "id_str": "505874890218434560", + "text": "@kohecyan3 \nåå‰:上野滉平\n呼ã³æ–¹:ã†ãˆã®\n呼ã°ã‚Œæ–¹:ãšã‚‹ã‹ã‚\n第一å°è±¡:éŽå‰°ãªä¿ºã‚¤ã‚±ãƒ¡ãƒ³ã§ã™ã‚¢ãƒ”ール\n今ã®å°è±¡:ãƒãƒ¼ãƒãƒªãƒ¼ã®æ™‚計\n好ããªã¨ã“ã‚:ã‚ã®è‡ªä¿¡ã•ã€ç¬‘ã„ãŒçµ¶ãˆãªã„\n一言:大学å—ã‹ã£ãŸã®ï¼Ÿå¿œæ´ã—ã¦ã‚‹ã€œ(*^^*)ï¼\n\n#RTã—ãŸäººã«ã‚„ã‚‹\nã¡ã‚‡ã£ã¨ã‚„ã£ã¦ã¿ã‚‹ç¬‘", + "source": "Twitter for iPhone", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": 2591363659, + "in_reply_to_user_id_str": "2591363659", + "in_reply_to_screen_name": "kohecyan3", + "user": { + "id": 2613282517, + "id_str": "2613282517", + "name": "K", + "screen_name": "kawazurukenna", + "location": "", + "description": "# I surprise even my self", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 113, + "friends_count": 185, + "listed_count": 0, + "created_at": "Wed Jul 09 09:39:13 +0000 2014", + "favourites_count": 157, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 242, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/502436858135973888/PcUU0lov_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/502436858135973888/PcUU0lov_normal.jpeg", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 0, + "favorite_count": 0, + "entities": { + "hashtags": [ + { + "text": "RTã—ãŸäººã«ã‚„ã‚‹", + "indices": [ + 119, + 128 + ] + } + ], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "kohecyan3", + "name": "上野滉平", + "id": 2591363659, + "id_str": "2591363659", + "indices": [ + 0, + 10 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:07 +0000 2014", + "id": 505874889392156700, + "id_str": "505874889392156672", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "IQ★力ã ã‚ã—", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2709308887, + "id_str": "2709308887", + "name": "IQ★力ã ã‚ã—", + "screen_name": "iq_tameshi", + "location": "", + "description": "解ã‘ã‚‹ã¨æ¥½ã—ã„気分ã«ãªã‚Œã‚‹å•é¡Œã‚’見ã¤ã‘ã¦ç´¹ä»‹ã—ã¾ã™â™ªé¢ç™½ã‹ã£ãŸã‚‰ RT & 相互フォロー㧠ã¿ãªã•ã‚“ã€ãŠé¡˜ã„ã—ã¾ã™â™ª", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 443, + "friends_count": 1851, + "listed_count": 1, + "created_at": "Tue Aug 05 13:14:30 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 664, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/496646485266558977/W_W--qV__normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/496646485266558977/W_W--qV__normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2709308887/1407244754", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:06 +0000 2014", + "id": 505874888817532900, + "id_str": "505874888817532928", + "text": "第一三è»ã‹ã‚‰ï¼’個師団ãŒåŒ—ã¸ç§»å‹•ä¸­ã‚‰ã—ã„     ã“ã®èª¿å­ã§ã¯æº€å·žã«é™¸è»å…µåŠ›ãŒã‚ãµã‚Œã‹ãˆã‚‹", + "source": "如月克己", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 1171299612, + "id_str": "1171299612", + "name": "如月 å…‹å·±", + "screen_name": "kisaragi_katumi", + "location": "満州", + "description": "Gパングã®Aåž‹K月克己中尉ã®éžå…¬å¼botã§ã™ã€‚ 主ã«ä¸ƒå·»ã¨å…«å·»ãŒä¸­å¿ƒã®å°è©žã‚’ã¤ã¶ã‚„ãã¾ã™ã€‚ 4/18.å°è©žè¿½åŠ ã—ã¾ã—ãŸ/ç¾åœ¨è©¦é‹è»¢ä¸­/ç¾åœ¨è»½ã„挨拶ã ã‘TLå応。/追加ã—ãŸã„å°è©žã‚„何ãŠã‹ã—ã„所ãŒã‚ã‚Šã¾ã—ãŸã‚‰DMやリプライã§/フォロー返ã—ã¯æ‰‹å‹•ã§ã™/", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 65, + "friends_count": 63, + "listed_count": 0, + "created_at": "Tue Feb 12 08:21:38 +0000 2013", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 27219, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/3242847112/0ce536444c94cbec607229022d43a27a_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/3242847112/0ce536444c94cbec607229022d43a27a_normal.jpeg", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 0, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:06 +0000 2014", + "id": 505874888616181760, + "id_str": "505874888616181760", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "徳田有希★応æ´éšŠ", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2766021865, + "id_str": "2766021865", + "name": "徳田有希★応æ´éšŠ", + "screen_name": "tokuda_ouen1", + "location": "", + "description": "女å­ä¸­é«˜ç”Ÿã«å¤§äººæ°—ww ã„ã‚„ã•ã‚Œã‚‹ã‚¤ãƒ©ã‚¹ãƒˆã‚’紹介ã—ã¾ã™ã€‚ \r\nã¿ã‚“ãªã§ RTã—ã¦å¿œæ´ã—よã†ï½žâ™ª \r\n「éžå…¬å¼ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã§ã™ã€", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 123, + "friends_count": 978, + "listed_count": 0, + "created_at": "Mon Aug 25 10:48:41 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 210, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/503857235802333184/YS0sDN6q_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/503857235802333184/YS0sDN6q_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2766021865/1408963998", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:06 +0000 2014", + "id": 505874887802511360, + "id_str": "505874887802511361", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "è…女å­ã®â˜†éƒ¨å±‹", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2744683982, + "id_str": "2744683982", + "name": "è…女å­ã®â˜†éƒ¨å±‹", + "screen_name": "fujyoshinoheya", + "location": "", + "description": "è…女å­ã«ã—ã‹ã‚ã‹ã‚‰ãªã„ãƒã‚¿ã‚„ã€ã‚ã‚‹ã‚るを見ã¤ã‘ã¦ã„ãã¾ã™ã€‚ \r\nä»–ã«ã¯ã€BL~èŒãˆã‚­ãƒ¥ãƒ³ç³»ã¾ã§ã€è…ã®ãŸã‚ã®ç”»åƒã‚’集ã‚ã¦ã„ã¾ã™â™ª \r\nåŒã˜å¢ƒé‡ã®äººã«ã¯ã€ã‚ã‹ã£ã¦ã‚‚らãˆã‚‹ã¨æ€ã†ã®ã§ã€æ°—軽㫠RT & フォローãŠé¡˜ã„ã—ã¾ã™â˜†", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 241, + "friends_count": 990, + "listed_count": 0, + "created_at": "Tue Aug 19 11:47:21 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 345, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501697365590306817/GLP_QH_b_normal.png", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501697365590306817/GLP_QH_b_normal.png", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2744683982/1408448984", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:06 +0000 2014", + "id": 505874887009767400, + "id_str": "505874887009767424", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "èŒãˆèŠ¸è¡“★ラテアート", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2763178045, + "id_str": "2763178045", + "name": "èŒãˆèŠ¸è¡“★ラテアート", + "screen_name": "moe_rate", + "location": "", + "description": "ã“ã“ã¾ã§æ¥ã‚‹ã¨ã€ã‚‚ã¯ã‚„芸術!! 見ã¦ã‚‹ã ã‘ã§æ¥½ã—ã„♪ \r\nãã‚“ãªãƒ©ãƒ†ã‚¢ãƒ¼ãƒˆã‚’ã€ã¨ã“ã¨ã‚“探ã—ã¾ã™ã€‚ \r\nスゴイã¨æ€ã£ãŸã‚‰ RT & フォローãŠé¡˜ã„ã—ã¾ã™â™ª", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 187, + "friends_count": 998, + "listed_count": 0, + "created_at": "Sun Aug 24 16:53:16 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 210, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/503586151764992000/RC80it20_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/503586151764992000/RC80it20_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2763178045/1408899447", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:06 +0000 2014", + "id": 505874886225448960, + "id_str": "505874886225448960", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "全部★ジャニーズ図鑑", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2724158970, + "id_str": "2724158970", + "name": "全部★ジャニーズ図鑑", + "screen_name": "zenbu_johnnys", + "location": "", + "description": "ジャニーズã®ã‚«ãƒƒã‚³ã‚¤ã‚¤ç”»åƒã€ãŠã‚‚ã—ã‚エピソードãªã©ã‚’発信ã—ã¾ã™ã€‚\r\n「éžå…¬å¼ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã§ã™ã€\r\nジャニーズ好ããªäººã¯ã€æ˜¯éž RT & フォローãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 738, + "friends_count": 1838, + "listed_count": 0, + "created_at": "Mon Aug 11 15:50:08 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 556, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/498859581057945600/ncMKwdvC_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/498859581057945600/ncMKwdvC_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2724158970/1407772462", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:06 +0000 2014", + "id": 505874885810200600, + "id_str": "505874885810200576", + "text": "RT @naopisu_: 呼ã³æ–¹:\n呼ã°ã‚Œæ–¹:\n第一å°è±¡:\n今ã®å°è±¡:\n好ããªã¨ã“ã‚:\n家æ—ã«ã™ã‚‹ãªã‚‰:\n最後ã«ä¸€è¨€:\n#RTã—ãŸäººã«ã‚„ã‚‹\n\nãŠè…¹ç—›ãã¦å¯ã‚Œãªã„ã‹ã‚‰ã‚„ã‚‹ww\nã ã‚Œã§ã‚‚ã©ã†ãžã€œðŸ˜ðŸ™Œ", + "source": "Twitter for Android", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2347898072, + "id_str": "2347898072", + "name": "ã«ãŸã«ãŸ", + "screen_name": "syo6660129", + "location": "", + "description": "", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 64, + "friends_count": 70, + "listed_count": 1, + "created_at": "Mon Feb 17 04:29:46 +0000 2014", + "favourites_count": 58, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 145, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/485603672118669314/73uh_xRS_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/485603672118669314/73uh_xRS_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2347898072/1396957619", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sat Aug 30 14:19:31 +0000 2014", + "id": 505721480261300200, + "id_str": "505721480261300224", + "text": "呼ã³æ–¹:\n呼ã°ã‚Œæ–¹:\n第一å°è±¡:\n今ã®å°è±¡:\n好ããªã¨ã“ã‚:\n家æ—ã«ã™ã‚‹ãªã‚‰:\n最後ã«ä¸€è¨€:\n#RTã—ãŸäººã«ã‚„ã‚‹\n\nãŠè…¹ç—›ãã¦å¯ã‚Œãªã„ã‹ã‚‰ã‚„ã‚‹ww\nã ã‚Œã§ã‚‚ã©ã†ãžã€œðŸ˜ðŸ™Œ", + "source": "Twitter for iPhone", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 856045488, + "id_str": "856045488", + "name": "ãªãŠã´ã™", + "screen_name": "naopisu_", + "location": "Fujino 65th ⇢ Sagaso 12A(LJK", + "description": "ï¼¼ ã‚‚ã†ã™ã18æ­³ “Only Oneâ€ã«ãªã‚‹ ï¼", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 267, + "friends_count": 259, + "listed_count": 2, + "created_at": "Mon Oct 01 08:36:23 +0000 2012", + "favourites_count": 218, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 1790, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/496321592553525249/tuzX9ByR_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/496321592553525249/tuzX9ByR_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/856045488/1407118111", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 23, + "favorite_count": 1, + "entities": { + "hashtags": [ + { + "text": "RTã—ãŸäººã«ã‚„ã‚‹", + "indices": [ + 47, + 56 + ] + } + ], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 23, + "favorite_count": 0, + "entities": { + "hashtags": [ + { + "text": "RTã—ãŸäººã«ã‚„ã‚‹", + "indices": [ + 61, + 70 + ] + } + ], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "naopisu_", + "name": "ãªãŠã´ã™", + "id": 856045488, + "id_str": "856045488", + "indices": [ + 3, + 12 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:06 +0000 2014", + "id": 505874885474656260, + "id_str": "505874885474656256", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "爆笑★LINE ã‚ã‚‹ã‚ã‚‹", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2709561589, + "id_str": "2709561589", + "name": "爆笑★LINE ã‚ã‚‹ã‚ã‚‹", + "screen_name": "line_aru1", + "location": "", + "description": "æ€ã‚ãšç¬‘ã£ã¦ã—ã¾ã†LINEã§ã®ã‚„ã‚Šã¨ã‚Šã‚„ã€ã‚ã‚‹ã‚るを見ã¤ã‘ãŸã„ã§ã™â™ªé¢ç™½ã‹ã£ãŸã‚‰ RT & 相互フォロー㧠ã¿ãªã•ã‚“ã€ãŠé¡˜ã„ã—ã¾ã™â™ª", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 496, + "friends_count": 1875, + "listed_count": 1, + "created_at": "Tue Aug 05 15:01:30 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 687, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/496673793939492867/p1BN4YaW_normal.png", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/496673793939492867/p1BN4YaW_normal.png", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2709561589/1407251270", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:05 +0000 2014", + "id": 505874884627410940, + "id_str": "505874884627410944", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "全力★ミサワ的w発言", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2734455415, + "id_str": "2734455415", + "name": "全力★ミサワ的w発言!!", + "screen_name": "misawahatugen", + "location": "", + "description": "ウザã™ãŽã¦ç¬‘ãˆã‚‹ãƒŸã‚µãƒ¯çš„å言やã€ãŠã‚‚ã—ã‚ミサワ画åƒã‚’集ã‚ã¦ã„ã¾ã™ã€‚ \r\nミサワを知らãªã„人ã§ã‚‚ã€ã„ããªã‚Šãƒ„ボã«ãƒãƒžã£ã¡ã‚ƒã†å†…容をãŠå±Šã‘ã—ã¾ã™ã€‚ \r\nウザã„ï½—ã¨æ€ã£ãŸã‚‰ RT & 相互フォローãŠé¡˜ã„ã—ã¾ã™â™ª", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 144, + "friends_count": 1915, + "listed_count": 1, + "created_at": "Fri Aug 15 13:20:04 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 436, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/500271070834749444/HvengMe5_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/500271070834749444/HvengMe5_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2734455415/1408108944", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:05 +0000 2014", + "id": 505874883809521660, + "id_str": "505874883809521664", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "ãŠå®ww有å人å’アル特集", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2708183557, + "id_str": "2708183557", + "name": "ãŠå®ww有å人å’アル特集", + "screen_name": "otakara_sotuaru", + "location": "", + "description": "ã¿ã‚“ãªæ˜”ã¯è‹¥ã‹ã£ãŸã‚“ã§ã™ã­ã€‚今ã‹ã‚‰ã¯æƒ³åƒã‚‚ã¤ã‹ãªã„ã€ã‚ã®æœ‰å人を見ã¤ã‘ã¾ã™ã€‚\r\né¢ç™½ã‹ã£ãŸã‚‰ RT & 相互フォロー㧠ã¿ãªã•ã‚“ã€ãŠé¡˜ã„ã—ã¾ã™â™ª", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 286, + "friends_count": 1938, + "listed_count": 0, + "created_at": "Tue Aug 05 03:26:54 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 650, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/496499121276985344/hC8RoebP_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/496499121276985344/hC8RoebP_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2708183557/1407318758", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:05 +0000 2014", + "id": 505874883322970100, + "id_str": "505874883322970112", + "text": "レッドクリフã®ã‚­ãƒ£ãƒ©ã®ã“ã¨å¥³è£…ã£ã¦ããã‚ã‚ãŸwwwæœä¸€ã§é¢ç™½ã‹ã£ãŸ( ˘ω゜)笑", + "source": "Twitter for iPhone", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 1620730616, + "id_str": "1620730616", + "name": "ã²ãƒ¼ã¡ã‚ƒã‚“@橘芋å¥ã´", + "screen_name": "2nd_8hkr", + "location": "北ã®å¤§åœ°.95年組 ☞ 9/28.10/2(5).12/28", + "description": "THE SECOND/劇団EXILE/EXILE/二代目JSB ☞KENCHI.AKIRA.é’柳翔.å°æ£®éš¼.石井æ奈☜ Big Love ♡ Respect ..... ✠MATSU Origin✧ .㟠㡠㰠㪠'' ã„ ã‚‚ '' ã‘ ã‚“ ㄠ㡠゠ㆠ㕠んTEAM NACS 安田.戸次 Liebe !", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 109, + "friends_count": 148, + "listed_count": 0, + "created_at": "Thu Jul 25 16:09:29 +0000 2013", + "favourites_count": 783, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 9541, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/458760951060123648/Cocoxi-2_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/458760951060123648/Cocoxi-2_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/1620730616/1408681982", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 0, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:05 +0000 2014", + "id": 505874883067129860, + "id_str": "505874883067129857", + "text": "ã€çŠ¶æ…‹è‰¯å¥½ã€‘ペンタックス・デジタル一眼レフカメラ・K20D 入札数=38 ç¾åœ¨ä¾¡æ ¼=15000円 http://t.co/4WK1f6V2n6終了=2014å¹´08月31æ—¥ 20:47:53 #一眼レフ http://t.co/PcSaXzfHMW", + "source": "YahooAuction Degicame", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2278053589, + "id_str": "2278053589", + "name": "AuctionCamera", + "screen_name": "AuctionCamera", + "location": "", + "description": "Yahooオークションã®ãƒ‡ã‚¸ã‚«ãƒ¡ã‚«ãƒ†ã‚´ãƒªã‹ã‚‰å•†å“を抽出ã™ã‚‹ãƒœãƒƒãƒˆã§ã™ã€‚", + "url": "https://t.co/3sB1NDnd0m", + "entities": { + "url": { + "urls": [ + { + "url": "https://t.co/3sB1NDnd0m", + "expanded_url": "https://github.com/AKB428/YahooAuctionBot", + "display_url": "github.com/AKB428/YahooAu…", + "indices": [ + 0, + 23 + ] + } + ] + }, + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 5, + "friends_count": 24, + "listed_count": 0, + "created_at": "Sun Jan 05 20:10:56 +0000 2014", + "favourites_count": 1, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 199546, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/419927606146789376/vko-kd6Q_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/419927606146789376/vko-kd6Q_normal.jpeg", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 0, + "favorite_count": 0, + "entities": { + "hashtags": [ + { + "text": "一眼レフ", + "indices": [ + 95, + 100 + ] + } + ], + "symbols": [], + "urls": [ + { + "url": "http://t.co/4WK1f6V2n6", + "expanded_url": "http://atq.ck.valuecommerce.com/servlet/atq/referral?sid=2219441&pid=877510753&vcptn=auct/p/RJH492.PLqoLQQx1Jy8U9LE-&vc_url=http://page8.auctions.yahoo.co.jp/jp/auction/h192024356", + "display_url": "atq.ck.valuecommerce.com/servlet/atq/re…", + "indices": [ + 49, + 71 + ] + } + ], + "user_mentions": [], + "media": [ + { + "id": 505874882828046340, + "id_str": "505874882828046336", + "indices": [ + 101, + 123 + ], + "media_url": "http://pbs.twimg.com/media/BwU6hpPCEAAxnpq.jpg", + "media_url_https": "https://pbs.twimg.com/media/BwU6hpPCEAAxnpq.jpg", + "url": "http://t.co/PcSaXzfHMW", + "display_url": "pic.twitter.com/PcSaXzfHMW", + "expanded_url": "http://twitter.com/AuctionCamera/status/505874883067129857/photo/1", + "type": "photo", + "sizes": { + "large": { + "w": 600, + "h": 450, + "resize": "fit" + }, + "medium": { + "w": 600, + "h": 450, + "resize": "fit" + }, + "thumb": { + "w": 150, + "h": 150, + "resize": "crop" + }, + "small": { + "w": 340, + "h": 255, + "resize": "fit" + } + } + } + ] + }, + "favorited": false, + "retweeted": false, + "possibly_sensitive": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:05 +0000 2014", + "id": 505874882995826700, + "id_str": "505874882995826689", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "ヤãƒã™ãŽã‚‹!!ã‚®ãƒã‚¹ä¸–界記録", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2762405780, + "id_str": "2762405780", + "name": "ヤãƒã™ãŽã‚‹!!ã‚®ãƒã‚¹ä¸–界記録", + "screen_name": "yabai_giness", + "location": "", + "description": "世ã®ä¸­ã«ã¯ã€ã¾ã ã¾ã çŸ¥ã‚‰ã‚Œã¦ã„ãªã„スゴイ記録ãŒã‚ã‚‹ã‚“ã§ã™ï¼ \r\nãã‚“ãªã‚®ãƒã‚¹ä¸–界記録を見ã¤ã‘ã¾ã™â˜† \r\nã©ã‚“ã©ã‚“å‹é”ã«ã‚‚æ•™ãˆã¦ã‚ã’ã¦ãã ã•ã„ã­ww \r\nヤãƒã‚¤ã¨æ€ã£ãŸã‚‰ RT & フォローをã€ãŠé¡˜ã„ã—ã¾ã™â™ª", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 36, + "friends_count": 985, + "listed_count": 0, + "created_at": "Sun Aug 24 13:17:03 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 210, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/503531782919045121/NiIC25wL_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/503531782919045121/NiIC25wL_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2762405780/1408886328", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:05 +0000 2014", + "id": 505874882870009860, + "id_str": "505874882870009856", + "text": "ã™ã”ãé¢ç™½ã„夢見ãŸã€‚魔法科高校通ã£ã¦ã¦ï¼ˆåˆ¥ã«ä¸€ç§‘二科ã®åŒºåˆ¥ãªã„)クラスメイトã«ãƒ¨ã‚»ã‚¢ãƒ„メé¢å­ã‚„赤僕ã®æ‹“也ãŒã„ã¦ã€å­¦æ ¡å¯¾æŠ—åˆå”±ã‚³ãƒ³ã‚¯ãƒ¼ãƒ«ãŒé–‹å‚¬ã•ã‚ŒãŸã‚Šä¼šå ´å…¥ã‚Šã®éš›ä»–æ ¡ã®å¦¨å®³å·¥ä½œå—ã‘ãŸã‚Šã€æ‹“也ãŒé€£ã‚Œã¦ãã¦ãŸå®ŸãŒäººè³ªã«å–られãŸã‚Šã¨ã«ã‹ãã¦ã‚“ã“盛りã ã£ãŸæ¥½ã—ã‹ã£ãŸèµ¤åƒ•èª­ã¿ãŸã„手元ã«ãªã„", + "source": "Twitter for Android", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 597357105, + "id_str": "597357105", + "name": "ãµã˜ã‚ˆã—", + "screen_name": "fuji_mark", + "location": "多摩動物公園", + "description": "æˆäººè…女å­", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 128, + "friends_count": 126, + "listed_count": 6, + "created_at": "Sat Jun 02 10:06:05 +0000 2012", + "favourites_count": 2842, + "utc_offset": 32400, + "time_zone": "Irkutsk", + "geo_enabled": false, + "verified": false, + "statuses_count": 10517, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "0099B9", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme4/bg.gif", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme4/bg.gif", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/503553738569560065/D_JW2dCJ_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/503553738569560065/D_JW2dCJ_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/597357105/1408864355", + "profile_link_color": "0099B9", + "profile_sidebar_border_color": "5ED4DC", + "profile_sidebar_fill_color": "95E8EC", + "profile_text_color": "3C3940", + "profile_use_background_image": true, + "default_profile": false, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 0, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:05 +0000 2014", + "id": 505874882228281340, + "id_str": "505874882228281345", + "text": "RT @oen_yakyu: â—継続試åˆï¼ˆä¸­äº¬å¯¾å´‡å¾³ï¼‰46回~ 9時~\n 〈ラジオ中継〉\n らã˜ã‚‹â˜…らã˜ã‚‹â†’大阪放é€å±€ã‚’é¸æŠžâ†’NHK-FM\nâ—決å‹æˆ¦(三浦対中京or崇徳) 12時30分~\n 〈ラジオ中継〉\n らã˜ã‚‹â˜…らã˜ã‚‹â†’大阪放é€å±€ã‚’é¸æŠžâ†’NHK第一\n ※神奈å·ã®æ–¹ã¯æ™®é€šã®ãƒ©â€¦", + "source": "twicca", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 18477566, + "id_str": "18477566", + "name": "Natit(ãªã¡ï¼‰ï¼ ãã†ã ã€ãƒˆãƒƒãƒ—è¡Œã“ã†", + "screen_name": "natit_yso", + "location": "ç¦å²¡å¸‚ã®ç«¯ã£ã“", + "description": "ヤー・ãƒãƒ£ã‚¤ã‚«ã€‚ç´«å®å‹¢ã®æœ«å¸­ãらã„ã§QMAã‚„ã£ã¦ã¾ã™ã€‚\r\n9/13(土)「ä¹å·žæ¯ã€ä»Šå¹´ã‚‚宜ã—ããŠé¡˜ã„ã—ã¾ã™ï¼ã‚­ãƒ¼ãƒ¯ãƒ¼ãƒ‰ã¯ã€Œãã†ã ã€ãƒˆãƒƒãƒ—ã€è¡Œã“ã†ã€‚ã€\r\nmore → http://t.co/ezuHyjF4Qy \r\nã€æ—…ã®äºˆå®šã€‘9/20-22 関西 → 9/23-28 北海é“ãã‚‹ã‚Š", + "url": "http://t.co/ll2yu78DGR", + "entities": { + "url": { + "urls": [ + { + "url": "http://t.co/ll2yu78DGR", + "expanded_url": "http://qma-kyushu.sakura.ne.jp/", + "display_url": "qma-kyushu.sakura.ne.jp", + "indices": [ + 0, + 22 + ] + } + ] + }, + "description": { + "urls": [ + { + "url": "http://t.co/ezuHyjF4Qy", + "expanded_url": "http://twpf.jp/natit_yso", + "display_url": "twpf.jp/natit_yso", + "indices": [ + 83, + 105 + ] + } + ] + } + }, + "protected": false, + "followers_count": 591, + "friends_count": 548, + "listed_count": 93, + "created_at": "Tue Dec 30 14:11:44 +0000 2008", + "favourites_count": 11676, + "utc_offset": 32400, + "time_zone": "Tokyo", + "geo_enabled": false, + "verified": false, + "statuses_count": 130145, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "131516", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme14/bg.gif", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme14/bg.gif", + "profile_background_tile": true, + "profile_image_url": "http://pbs.twimg.com/profile_images/1556202861/chibi-Leon_normal.jpg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/1556202861/chibi-Leon_normal.jpg", + "profile_link_color": "009999", + "profile_sidebar_border_color": "EEEEEE", + "profile_sidebar_fill_color": "EFEFEF", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": false, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sat Aug 30 23:12:39 +0000 2014", + "id": 505855649196953600, + "id_str": "505855649196953600", + "text": "â—継続試åˆï¼ˆä¸­äº¬å¯¾å´‡å¾³ï¼‰46回~ 9時~\n 〈ラジオ中継〉\n らã˜ã‚‹â˜…らã˜ã‚‹â†’大阪放é€å±€ã‚’é¸æŠžâ†’NHK-FM\nâ—決å‹æˆ¦(三浦対中京or崇徳) 12時30分~\n 〈ラジオ中継〉\n らã˜ã‚‹â˜…らã˜ã‚‹â†’大阪放é€å±€ã‚’é¸æŠžâ†’NHK第一\n ※神奈å·ã®æ–¹ã¯æ™®é€šã®ãƒ©ã‚¸ã‚ªã®NHK-FMã§ã‚‚", + "source": "Twitter Web Client", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2761692762, + "id_str": "2761692762", + "name": "三浦学苑軟å¼é‡Žçƒéƒ¨å¿œæ´å›£ï¼", + "screen_name": "oen_yakyu", + "location": "", + "description": "兵庫県ã§é–‹å‚¬ã•ã‚Œã‚‹ã€Œã‚‚ã†ä¸€ã¤ã®ç”²å­åœ’ã€ã“ã¨å…¨å›½é«˜æ ¡è»Ÿå¼é‡Žçƒé¸æ‰‹æ¨©å¤§ä¼šã«å—é–¢æ±ãƒ–ロックã‹ã‚‰å‡ºå ´ã™ã‚‹ä¸‰æµ¦å­¦è‹‘軟å¼é‡Žçƒéƒ¨ã‚’å¿œæ´ã™ã‚‹éžå…¬å¼ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã§ã™ã€‚", + "url": "http://t.co/Cn1tPTsBGY", + "entities": { + "url": { + "urls": [ + { + "url": "http://t.co/Cn1tPTsBGY", + "expanded_url": "http://www.miura.ed.jp/index.html", + "display_url": "miura.ed.jp/index.html", + "indices": [ + 0, + 22 + ] + } + ] + }, + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 464, + "friends_count": 117, + "listed_count": 4, + "created_at": "Sun Aug 24 07:47:29 +0000 2014", + "favourites_count": 69, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 553, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/504299474445811712/zsxJUmL0_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/504299474445811712/zsxJUmL0_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2761692762/1409069337", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 7, + "favorite_count": 2, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 7, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "oen_yakyu", + "name": "三浦学苑軟å¼é‡Žçƒéƒ¨å¿œæ´å›£ï¼", + "id": 2761692762, + "id_str": "2761692762", + "indices": [ + 3, + 13 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:05 +0000 2014", + "id": 505874882110824450, + "id_str": "505874882110824448", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "スマホã«å¯†å°â˜…アニメ画åƒ", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2725976444, + "id_str": "2725976444", + "name": "スマホã«å¯†å°â˜…アニメ画åƒ", + "screen_name": "sumahoanime", + "location": "", + "description": "ãªã‚“ã¨ã‚‚ã‚ãšã‚‰ã—ã„ã€ã„ã‚ã‚“ãªã‚­ãƒ£ãƒ©ãŒã‚¹ãƒžãƒ›ã«é–‰ã˜è¾¼ã‚られã¦ã„ã¾ã™ã€‚ \r\nã‚ãªãŸã®ã‚¹ãƒžãƒ›ã«ãƒžãƒƒãƒã™ã‚‹ç”»åƒãŒè¦‹ã¤ã‹ã‚‹ã‹ã‚‚♪ \r\næ°—ã«å…¥ã£ãŸã‚‰æ˜¯éž RT & フォローãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 227, + "friends_count": 1918, + "listed_count": 0, + "created_at": "Tue Aug 12 11:27:54 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 527, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/499155646164393984/l5vSz5zu_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/499155646164393984/l5vSz5zu_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2725976444/1407843121", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:05 +0000 2014", + "id": 505874881297133600, + "id_str": "505874881297133568", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "アナタã®ãã°ã®èº«è¿‘ãªå±é™º", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2713926078, + "id_str": "2713926078", + "name": "アナタã®ãã°ã®èº«è¿‘ãªå±é™º", + "screen_name": "mijika_kiken", + "location": "", + "description": "知らãªã„ã†ã¡ã«ã‚„ã£ã¦ã„ã‚‹å±é™ºãªè¡Œå‹•ã‚’見ã¤ã‘ã¦è‡ªåˆ†ã‚’守りã¾ã—ょã†ã€‚ å½¹ã«ç«‹ã¤ã¨æ€ã£ãŸã‚‰ RT & 相互フォロー㧠ã¿ãªã•ã‚“ã€ãŠé¡˜ã„ã—ã¾ã™â™ª", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 301, + "friends_count": 1871, + "listed_count": 0, + "created_at": "Thu Aug 07 07:12:50 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 644, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/497279579245907968/Ftvms_HR_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/497279579245907968/Ftvms_HR_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2713926078/1407395683", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:04 +0000 2014", + "id": 505874880294682600, + "id_str": "505874880294682624", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "人気者♥デイジー大好ã", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2726199583, + "id_str": "2726199583", + "name": "人気者♥デイジー大好ã", + "screen_name": "ninkimono_daosy", + "location": "", + "description": "デイジーã®æƒ³ã„ã‚’ã€ä»£ã‚ã‚Šã«ã¤ã¶ã‚„ãã¾ã™â™ª \r\nデイジーã®ã‹ã‚ã„ã„ç”»åƒã‚„グッズも大好ãï½— \r\nå¯æ„›ã„ã¨æ€ã£ãŸã‚‰ RT & フォローãŠé¡˜ã„ã—ã¾ã™ã€‚ \r\n「éžå…¬å¼ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã§ã™ã€", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 190, + "friends_count": 474, + "listed_count": 0, + "created_at": "Tue Aug 12 12:58:33 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 469, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/499178622494576640/EzWKdR_p_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/499178622494576640/EzWKdR_p_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2726199583/1407848478", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:04 +0000 2014", + "id": 505874879392919550, + "id_str": "505874879392919552", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "幸ã›è©±ã§ãƒ•ãƒ«å……é›»ã—よã†", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2721453846, + "id_str": "2721453846", + "name": "幸ã›è©±ã§ãƒ•ãƒ«å……é›»ã—よã†ww", + "screen_name": "shiawasehanashi", + "location": "", + "description": "ç§ãŒèžã„ã¦å¿ƒã«æ®‹ã£ãŸæ„Ÿå‹•ã‚¨ãƒ”ソードをãŠå±Šã‘ã—ã¾ã™ã€‚\r\nå°‘ã—ã§ã‚‚多ãã®äººã¸å±Šã‘ãŸã„ã¨æ€ã„ã¾ã™ã€‚\r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & フォローãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 302, + "friends_count": 1886, + "listed_count": 0, + "created_at": "Sun Aug 10 12:16:25 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 508, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/498444554916216832/ml8EiQka_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/498444554916216832/ml8EiQka_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2721453846/1407673555", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:04 +0000 2014", + "id": 505874879103520800, + "id_str": "505874879103520768", + "text": "RT @Ang_Angel73: 逢å‚「ãã£â€¦åƒ•ã®ç§˜ã‚られã—å³ç›®ãŒâ€¦ï¼ã€\n一åŒã€Œâ€¦â€¦â€¦â€¦â€¦ã€‚ã€", + "source": "Twitter for iPhone", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2571968509, + "id_str": "2571968509", + "name": "イイヒト", + "screen_name": "IwiAlohomora", + "location": "è‰è‘‰ã®é™°", + "description": "大人ã§ã™ã€‚気軽ã«çµ¡ã‚“ã§ãれるã¨ã†ã‚Œã—ã„ã§ã™ï¼ イラスト大好ãï¼ï¼ˆâ‰§âˆ‡â‰¦ï¼‰ BF(仮)逢å‚紘夢ãã‚“ã«ãŠç†±ã§ã™ï¼ マンガも好ã♡欲望ã®ã¾ã¾ã«ã¤ã¶ã‚„ãã¾ã™ã®ã§ã”注æ„を。雑食♡", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 156, + "friends_count": 165, + "listed_count": 14, + "created_at": "Tue Jun 17 01:18:34 +0000 2014", + "favourites_count": 11926, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 7234, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/504990074862178304/DoBvOb9c_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/504990074862178304/DoBvOb9c_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2571968509/1409106012", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:27:01 +0000 2014", + "id": 505874364596621300, + "id_str": "505874364596621313", + "text": "逢å‚「ãã£â€¦åƒ•ã®ç§˜ã‚られã—å³ç›®ãŒâ€¦ï¼ã€\n一åŒã€Œâ€¦â€¦â€¦â€¦â€¦ã€‚ã€", + "source": "Twitter for Android", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 1600750194, + "id_str": "1600750194", + "name": "臙脂", + "screen_name": "Ang_Angel73", + "location": "逢å‚紘夢ã®ãã°ã«", + "description": "自由ã€æ°—ã¾ã¾ã«ã€‚詳ã—ãã¯ãƒ„イプロ。アイコンã¯ã¾ã‚ã›ã‚ã‚Šã¡ã‚ƒã‚“ã‹ã‚‰ã ã‚ˆâ˜†ï½žï¼ˆã‚。∂)", + "url": "http://t.co/kKCCwHTaph", + "entities": { + "url": { + "urls": [ + { + "url": "http://t.co/kKCCwHTaph", + "expanded_url": "http://twpf.jp/Ang_Angel73", + "display_url": "twpf.jp/Ang_Angel73", + "indices": [ + 0, + 22 + ] + } + ] + }, + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 155, + "friends_count": 154, + "listed_count": 10, + "created_at": "Wed Jul 17 11:44:31 +0000 2013", + "favourites_count": 2115, + "utc_offset": 32400, + "time_zone": "Irkutsk", + "geo_enabled": false, + "verified": false, + "statuses_count": 12342, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://pbs.twimg.com/profile_background_images/378800000027871001/aa764602922050b22bf9ade3741367dc.jpeg", + "profile_background_image_url_https": "https://pbs.twimg.com/profile_background_images/378800000027871001/aa764602922050b22bf9ade3741367dc.jpeg", + "profile_background_tile": true, + "profile_image_url": "http://pbs.twimg.com/profile_images/500293786287603713/Ywyh69eG_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/500293786287603713/Ywyh69eG_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/1600750194/1403879183", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "FFFFFF", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": false, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 2, + "favorite_count": 2, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 2, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "Ang_Angel73", + "name": "臙脂", + "id": 1600750194, + "id_str": "1600750194", + "indices": [ + 3, + 15 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:04 +0000 2014", + "id": 505874877933314050, + "id_str": "505874877933314048", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "秘密ã®æœ¬éŸ³â™¥å¥³å­ç·¨", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2762237088, + "id_str": "2762237088", + "name": "秘密ã®æœ¬éŸ³â™¥å¥³å­ç·¨", + "screen_name": "honne_jyoshi1", + "location": "", + "description": "普段ã¯è¨€ãˆãªã„「ãŠãƒ»ã‚“・ãªã®å»ºå‰ã¨æœ¬éŸ³ã€ã‚’ã¤ã¶ã‚„ãã¾ã™ã€‚ æ°—ã«ãªã‚‹ ã‚ã®äººã®æœ¬éŸ³ã‚‚ã€ã‚ã‹ã‚‹ã‹ã‚‚!? \r\nã‚ã‹ã‚‹ã£ã¦äººã¯ RT & フォローをã€ãŠé¡˜ã„ã—ã¾ã™â™ª", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 123, + "friends_count": 988, + "listed_count": 0, + "created_at": "Sun Aug 24 12:27:07 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 211, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/503519190364332032/BVjS_XBD_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/503519190364332032/BVjS_XBD_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2762237088/1408883328", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:04 +0000 2014", + "id": 505874877148958700, + "id_str": "505874877148958721", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "美ã—éŽãŽã‚‹â˜…色鉛筆アート", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2740047343, + "id_str": "2740047343", + "name": "美ã—éŽãŽã‚‹â˜…色鉛筆アート", + "screen_name": "bi_iroenpitu", + "location": "", + "description": "ã»ã‚“ã¨ã«ã‚³ãƒ¬è‰²é‰›ç­†ãªã®ï½žï¼Ÿ \r\n本物ã¨è¦‹é–“é•ãˆã‚‹ç¨‹ã®ãƒªã‚¢ãƒªãƒ†ã‚£ã‚’御覧ãã ã•ã„。 \r\næ°—ã«å…¥ã£ãŸã‚‰ RT & 相互フォローãŠé¡˜ã„ã—ã¾ã™â™ª", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 321, + "friends_count": 1990, + "listed_count": 0, + "created_at": "Sun Aug 17 16:15:05 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 396, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501039950972739585/isigil4V_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501039950972739585/isigil4V_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2740047343/1408292283", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:03 +0000 2014", + "id": 505874876465295360, + "id_str": "505874876465295361", + "text": "ã€H15-9-4】é“路を利用ã™ã‚‹åˆ©ç›Šã¯å射的利益ã§ã‚ã‚Šã€å»ºç¯‰åŸºæº–法ã«åŸºã¥ã„ã¦é“路一ã®æŒ‡å®šãŒãªã•ã‚Œã¦ã„ã‚‹ç§é“ã®æ•·åœ°æ‰€æœ‰è€…ã«å¯¾ã—ã€é€šè¡Œå¦¨å®³è¡Œç‚ºã®æŽ’除を求ã‚る人格的権利をèªã‚ã‚‹ã“ã¨ã¯ã§ããªã„。→誤。", + "source": "twittbot.net", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 1886570281, + "id_str": "1886570281", + "name": "行政法éŽåŽ»å•", + "screen_name": "gyosei_goukaku", + "location": "", + "description": "行政書士ã®æœ¬è©¦é¨“å•é¡Œã®éŽåŽ»å•ï¼ˆè¡Œæ”¿æ³•åˆ†é‡Žï¼‰ã‚’ランダムã«ã¤ã¶ã‚„ãã¾ã™ã€‚å•é¡Œã¯éšæ™‚追加中ã§ã™ã€‚基本的ã«ç›¸äº’フォローã—ã¾ã™ã€‚※140字制é™ã®éƒ½åˆä¸Šã€è¡¨ç¾ã¯ä¸€éƒ¨å¤‰ãˆã¦ã‚ã‚Šã¾ã™ã€‚解説も文字数ãŒå¯èƒ½ã§ã‚ã‚Œã°ãªã‚‹ã¹ã…。", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 1554, + "friends_count": 1772, + "listed_count": 12, + "created_at": "Fri Sep 20 13:24:29 +0000 2013", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 14565, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/378800000487791870/0e45e3c089c6b641cdd8d1b6f1ceb8a4_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/378800000487791870/0e45e3c089c6b641cdd8d1b6f1ceb8a4_normal.jpeg", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 0, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:03 +0000 2014", + "id": 505874876318511100, + "id_str": "505874876318511104", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "K点越ãˆã®ç™ºæƒ³åŠ›!!", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2744863153, + "id_str": "2744863153", + "name": "K点越ãˆã®ç™ºæƒ³åŠ›!!", + "screen_name": "kgoehassou", + "location": "", + "description": "ã„ã£ãŸã„ã©ã†ã‚„ã£ãŸã‚‰ã€ãã®é ˜åŸŸã«ãŸã©ã‚Šã¤ã‘ã‚‹ã®ã‹ï¼ï¼Ÿ \r\nãã‚“ãªæ€ã‚ãšç¬‘ã£ã¦ã—ã¾ã†åˆ¥ä¸–ç•Œã®ç™ºæƒ³åŠ›ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nãŠã‚‚ã—ã‚ã‹ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 76, + "friends_count": 957, + "listed_count": 0, + "created_at": "Tue Aug 19 13:00:08 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 341, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501715651686178816/Fgpe0B8M_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501715651686178816/Fgpe0B8M_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2744863153/1408453328", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:03 +0000 2014", + "id": 505874875521581060, + "id_str": "505874875521581056", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "血液型ã®çœŸå®Ÿï¼’", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2698625690, + "id_str": "2698625690", + "name": "血液型ã®çœŸå®Ÿ", + "screen_name": "ketueki_sinjitu", + "location": "", + "description": "ã‚„ã£ã±ã‚Šãã†ã ã£ãŸã®ã‹ï½žâ™ª\r\næ„外ãªã€ã‚ã®äººã®è£å´ã‚’見ã¤ã‘ã¾ã™ã€‚\r\né¢ç™½ã‹ã£ãŸã‚‰RT & 相互フォローã§ã¿ãªã•ã‚“ã€ãŠé¡˜ã„ã—ã¾ã™â™ª", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 193, + "friends_count": 1785, + "listed_count": 1, + "created_at": "Fri Aug 01 16:11:40 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 769, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/495241446706790400/h_0DSFPG_normal.png", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/495241446706790400/h_0DSFPG_normal.png", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2698625690/1406911319", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:03 +0000 2014", + "id": 505874874712072200, + "id_str": "505874874712072192", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "ã‚„ã£ã±ã‚Šç¥žãŒï¼Ÿï¼Ÿã‚’作る時", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2714868440, + "id_str": "2714868440", + "name": "ã‚„ã£ã±ã‚Šç¥žãŒï¼Ÿï¼Ÿã‚’作る時", + "screen_name": "yahari_kamiga", + "location": "", + "description": "ã‚„ã£ã±ã‚Šä»Šæ—¥ã‚‚ã€ç¥žã¯ä½•ã‹ã‚’作ã‚ã†ã¨ã—ã¦ã„ã¾ã™ã€€ç¬‘。 ã©ã†ã‚„ã£ã¦ä½œã£ã¦ã„ã‚‹ã®ã‹ã‚ã‹ã£ãŸã‚‰ RT & 相互フォロー㧠ã¿ãªã•ã‚“ã€ãŠé¡˜ã„ã—ã¾ã™â™ª", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 243, + "friends_count": 1907, + "listed_count": 0, + "created_at": "Thu Aug 07 16:12:33 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 590, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/497416102108884992/NRMEbKaT_normal.png", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/497416102108884992/NRMEbKaT_normal.png", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2714868440/1407428237", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:03 +0000 2014", + "id": 505874874275864600, + "id_str": "505874874275864576", + "text": "RT @takuramix: ç¦å³¶ç¬¬ä¸€åŽŸç™ºã®æ§‹å†…地図ãŒã“ã¡ã‚‰ã€‚\nhttp://t.co/ZkU4TZCGPG\nã©ã†è¦‹ã¦ã‚‚ã€ï¼‘å·æ©Ÿã€‚\nRT @Lightworker19: ã€å¤§æ‹¡æ•£ã€‘  ç¦å³¶ç¬¬ä¸€åŽŸç™ºã€€ï¼”å·æ©Ÿã€€çˆ†ç™ºå‹•ç”»ã€€40秒~  http://t.co/lmlgp38fgZ", + "source": "ツイタマ", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 62525372, + "id_str": "62525372", + "name": "NANCY-MOON☆ã²ã‚ˆã“ã¡ã‚ƒã‚“☆", + "screen_name": "nancy_moon_703", + "location": "JAPAN", + "description": "ã€ç„¡æ–­è»¢è¼‰ç¦æ­¢ï½¥ã‚³ãƒ”ペç¦æ­¢ãƒ»éžå…¬å¼RTç¦æ­¢ã€‘ã€å¿…読ï¼ã€‘⇒ http://t.co/nuUvfUVD 今ç¾åœ¨æ´»å‹•ä¸­ã®æ±æ–¹ç¥žèµ·YUNHO&CHANGMINã®2人を全力ã§å¿œæ´ã—ã¦ã„ã¾ã™!!(^_-)-☆ ※æ±æ–¹ç¥žèµ·åŠã³YUNHO&CHANGMINã‚’å¿œæ´ã—ã¦ã„ãªã„方・éµä»˜ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒ•ã‚©ãƒ­ãƒ¼ãŠæ–­ã‚Šï¼", + "url": null, + "entities": { + "description": { + "urls": [ + { + "url": "http://t.co/nuUvfUVD", + "expanded_url": "http://goo.gl/SrGLb", + "display_url": "goo.gl/SrGLb", + "indices": [ + 29, + 49 + ] + } + ] + } + }, + "protected": false, + "followers_count": 270, + "friends_count": 328, + "listed_count": 4, + "created_at": "Mon Aug 03 14:22:24 +0000 2009", + "favourites_count": 3283, + "utc_offset": 32400, + "time_zone": "Tokyo", + "geo_enabled": false, + "verified": false, + "statuses_count": 180310, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "642D8B", + "profile_background_image_url": "http://pbs.twimg.com/profile_background_images/470849781397336064/ltM6EdFn.jpeg", + "profile_background_image_url_https": "https://pbs.twimg.com/profile_background_images/470849781397336064/ltM6EdFn.jpeg", + "profile_background_tile": true, + "profile_image_url": "http://pbs.twimg.com/profile_images/3699005246/9ba2e306518d296b68b7cbfa5e4ce4e6_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/3699005246/9ba2e306518d296b68b7cbfa5e4ce4e6_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/62525372/1401094223", + "profile_link_color": "FF0000", + "profile_sidebar_border_color": "FFFFFF", + "profile_sidebar_fill_color": "F065A8", + "profile_text_color": "080808", + "profile_use_background_image": true, + "default_profile": false, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sat Aug 30 21:21:33 +0000 2014", + "id": 505827689660313600, + "id_str": "505827689660313600", + "text": "ç¦å³¶ç¬¬ä¸€åŽŸç™ºã®æ§‹å†…地図ãŒã“ã¡ã‚‰ã€‚\nhttp://t.co/ZkU4TZCGPG\nã©ã†è¦‹ã¦ã‚‚ã€ï¼‘å·æ©Ÿã€‚\nRT @Lightworker19: ã€å¤§æ‹¡æ•£ã€‘  ç¦å³¶ç¬¬ä¸€åŽŸç™ºã€€ï¼”å·æ©Ÿã€€çˆ†ç™ºå‹•ç”»ã€€40秒~  http://t.co/lmlgp38fgZ", + "source": "TweetDeck", + "truncated": false, + "in_reply_to_status_id": 505774460910043140, + "in_reply_to_status_id_str": "505774460910043136", + "in_reply_to_user_id": 238157843, + "in_reply_to_user_id_str": "238157843", + "in_reply_to_screen_name": "Lightworker19", + "user": { + "id": 29599253, + "id_str": "29599253", + "name": "タクラミックス", + "screen_name": "takuramix", + "location": "i7", + "description": "ç§ã®æ©Ÿèƒ½ä¸€è¦§ï¼šæ­Œã†ã€æ¼”劇ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¨ãƒ³ã‚¸ãƒ‹ã‚¢ã€ãƒ©ã‚¤ã‚¿ãƒ¼ã€ãƒ—ログラマã€ç¿»è¨³ã€ã‚·ãƒ«ãƒãƒ¼ã‚¢ã‚¯ã‚»ã‚µãƒªã€â€¦â€¦ä½•ã‚’ã‚„ã£ã¦ã‚‹äººã‹ã¯è‰¯ãã‚ã‹ã‚‰ãªã„人ãªã®ã§ã€ã€Œæ©Ÿèƒ½ã€ãŒæ¬²ã—ã„人ã¯ç§ã«ãŒã£ã‹ã‚Šã™ã‚‹ã§ã—ょã†ã€‚ç§ã£ã¦äººé–“ã«å¾¡ç”¨ãŒã‚ã‚‹ãªã‚‰åˆ¥ã§ã™ãŒã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 5136, + "friends_count": 724, + "listed_count": 335, + "created_at": "Wed Apr 08 01:10:58 +0000 2009", + "favourites_count": 21363, + "utc_offset": 32400, + "time_zone": "Tokyo", + "geo_enabled": false, + "verified": false, + "statuses_count": 70897, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/2049751947/takuramix1204_normal.jpg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/2049751947/takuramix1204_normal.jpg", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 1, + "favorite_count": 1, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [ + { + "url": "http://t.co/ZkU4TZCGPG", + "expanded_url": "http://www.tepco.co.jp/nu/fukushima-np/review/images/review1_01.gif", + "display_url": "tepco.co.jp/nu/fukushima-n…", + "indices": [ + 17, + 39 + ] + }, + { + "url": "http://t.co/lmlgp38fgZ", + "expanded_url": "http://youtu.be/gDXEhyuVSDk", + "display_url": "youtu.be/gDXEhyuVSDk", + "indices": [ + 99, + 121 + ] + } + ], + "user_mentions": [ + { + "screen_name": "Lightworker19", + "name": "Lightworker", + "id": 238157843, + "id_str": "238157843", + "indices": [ + 54, + 68 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "possibly_sensitive": false, + "lang": "ja" + }, + "retweet_count": 1, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [ + { + "url": "http://t.co/ZkU4TZCGPG", + "expanded_url": "http://www.tepco.co.jp/nu/fukushima-np/review/images/review1_01.gif", + "display_url": "tepco.co.jp/nu/fukushima-n…", + "indices": [ + 32, + 54 + ] + }, + { + "url": "http://t.co/lmlgp38fgZ", + "expanded_url": "http://youtu.be/gDXEhyuVSDk", + "display_url": "youtu.be/gDXEhyuVSDk", + "indices": [ + 114, + 136 + ] + } + ], + "user_mentions": [ + { + "screen_name": "takuramix", + "name": "タクラミックス", + "id": 29599253, + "id_str": "29599253", + "indices": [ + 3, + 13 + ] + }, + { + "screen_name": "Lightworker19", + "name": "Lightworker", + "id": 238157843, + "id_str": "238157843", + "indices": [ + 69, + 83 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "possibly_sensitive": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:03 +0000 2014", + "id": 505874873961308160, + "id_str": "505874873961308160", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "ã‚„ã£ã±ã‚Šã‚¢ãƒŠé›ªãŒå¥½ã♥", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2714052962, + "id_str": "2714052962", + "name": "ã‚„ã£ã±ã‚Šã‚¢ãƒŠé›ªãŒå¥½ã♥", + "screen_name": "anayuki_suki", + "location": "", + "description": "ãªã‚“ã ã‹ã‚“ã è¨€ã£ã¦ã‚‚ã‚„ã£ã±ã‚Šã‚¢ãƒŠé›ªãŒå¥½ããªã‚“ã§ã™ã‚ˆã­ï½žâ™ª \r\nç§ã‚‚好ãã£ã¦äººã¯ RT & 相互フォロー㧠ã¿ãªã•ã‚“ã€ãŠé¡˜ã„ã—ã¾ã™â™ª", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 368, + "friends_count": 1826, + "listed_count": 1, + "created_at": "Thu Aug 07 08:29:13 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 670, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/497299646662705153/KMo3gkv7_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/497299646662705153/KMo3gkv7_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2714052962/1407400477", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "zh" + }, + "created_at": "Sun Aug 31 00:29:03 +0000 2014", + "id": 505874873759977500, + "id_str": "505874873759977473", + "text": "å››å·ç›†åœ°æ±Ÿæ·®ç­‰åœ°å°†æœ‰å¼ºé™é›¨ 开学日多地将有雨:   中新网8月31日电 æ®ä¸­å¤®æ°”象å°æ¶ˆæ¯ï¼Œæ±Ÿæ·®ä¸œéƒ¨ã€å››å·ç›†åœ°ä¸œåŒ—部等地今天(31æ—¥)åˆå°†è¿Žæ¥ä¸€åœºæš´é›¨æˆ–大暴雨天气。明天9月1日,是中å°å­¦ç”Ÿå¼€å­¦çš„æ—¥å­ã€‚预计明天,内蒙å¤ä¸­éƒ¨ã€... http://t.co/toQgVlXPyH", + "source": "twitterfeed", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2281979863, + "id_str": "2281979863", + "name": "News 24h China", + "screen_name": "news24hchn", + "location": "", + "description": "", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 719, + "friends_count": 807, + "listed_count": 7, + "created_at": "Wed Jan 08 10:56:04 +0000 2014", + "favourites_count": 0, + "utc_offset": 7200, + "time_zone": "Amsterdam", + "geo_enabled": false, + "verified": false, + "statuses_count": 94782, + "lang": "it", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://pbs.twimg.com/profile_background_images/452558963754561536/QPID3isM.jpeg", + "profile_background_image_url_https": "https://pbs.twimg.com/profile_background_images/452558963754561536/QPID3isM.jpeg", + "profile_background_tile": true, + "profile_image_url": "http://pbs.twimg.com/profile_images/439031926569979904/SlBH9iMg_normal.png", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/439031926569979904/SlBH9iMg_normal.png", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2281979863/1393508427", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "FFFFFF", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": false, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 0, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [ + { + "url": "http://t.co/toQgVlXPyH", + "expanded_url": "http://news24h.allnews24h.com/FX54", + "display_url": "news24h.allnews24h.com/FX54", + "indices": [ + 114, + 136 + ] + } + ], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "possibly_sensitive": false, + "lang": "zh" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:03 +0000 2014", + "id": 505874873248268300, + "id_str": "505874873248268288", + "text": "@Take3carnifex ãã‚Œã¯å¤§å¤‰ï¼ä¸€å¤§äº‹ï¼å‘½ã«é–¢ã‚ã‚Šã¾ã™ï¼\n是éžã†ã¡ã«å—診ã—ã¦ä¸‹ã•ã„ï¼", + "source": "Twitter for iPhone", + "truncated": false, + "in_reply_to_status_id": 505874353716600800, + "in_reply_to_status_id_str": "505874353716600832", + "in_reply_to_user_id": 535179785, + "in_reply_to_user_id_str": "535179785", + "in_reply_to_screen_name": "Take3carnifex", + "user": { + "id": 226897125, + "id_str": "226897125", + "name": "ã²ã‹ã‚Šï¼ hack", + "screen_name": "hikari_thirteen", + "location": "", + "description": "hackã¨ã„ã†ãƒãƒ³ãƒ‰ã§ã€ã‚®ã‚¿ãƒ¼ã‚’å¼¾ã„ã¦ã„ã¾ã™ã€‚ モンãƒãƒ³ã¨ãƒã‚±ãƒ¢ãƒ³ãŒå¥½ã。 \nSPRING WATER リードギター(ヘルプ)\nROCK OUT レギュラーDJ", + "url": "http://t.co/SQLZnvjVxB", + "entities": { + "url": { + "urls": [ + { + "url": "http://t.co/SQLZnvjVxB", + "expanded_url": "http://s.ameblo.jp/hikarihikarimay", + "display_url": "s.ameblo.jp/hikarihikarimay", + "indices": [ + 0, + 22 + ] + } + ] + }, + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 296, + "friends_count": 348, + "listed_count": 3, + "created_at": "Wed Dec 15 10:51:51 +0000 2010", + "favourites_count": 33, + "utc_offset": 32400, + "time_zone": "Tokyo", + "geo_enabled": false, + "verified": false, + "statuses_count": 3293, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "131516", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme14/bg.gif", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme14/bg.gif", + "profile_background_tile": true, + "profile_image_url": "http://pbs.twimg.com/profile_images/378800000504584690/8ccba98eda8c0fd1d15a74e401f621d1_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/378800000504584690/8ccba98eda8c0fd1d15a74e401f621d1_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/226897125/1385551752", + "profile_link_color": "009999", + "profile_sidebar_border_color": "EEEEEE", + "profile_sidebar_fill_color": "EFEFEF", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": false, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 0, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "Take3carnifex", + "name": "Take3", + "id": 535179785, + "id_str": "535179785", + "indices": [ + 0, + 14 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:03 +0000 2014", + "id": 505874873223110660, + "id_str": "505874873223110656", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "今ã©ã女å­é«˜ç”Ÿã®è¬Žw", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2744236873, + "id_str": "2744236873", + "name": "今ã©ã女å­é«˜ç”Ÿã®è¬Žw", + "screen_name": "imadokijoshiko", + "location": "", + "description": "æ€ã‚ãšè€³ã‚’ç–‘ã†ç”·æ€§ã®æ–¹ã®å¤¢ã‚’壊ã—ã¦ã—ã¾ã†ã€\r\n女å­é«˜ç”Ÿé”ã®ãƒ‡ã‚£ãƒ¼ãƒ—ãªä¸–界を見ã¦ãã ã•ã„☆ \r\nãŠã‚‚ã—ã‚ã„ã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ãŠé¡˜ã„ã—ã¾ã™â™ª", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 79, + "friends_count": 973, + "listed_count": 0, + "created_at": "Tue Aug 19 07:06:47 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 354, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501627015980535808/avWBgkDh_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501627015980535808/avWBgkDh_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2744236873/1408432455", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:02 +0000 2014", + "id": 505874872463925250, + "id_str": "505874872463925248", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "ç§ã®ç†æƒ³ã®ç”·æ€§åƒ", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2761782601, + "id_str": "2761782601", + "name": "ç§ã®ç†æƒ³ã®ç”·æ€§åƒ", + "screen_name": "risou_dansei", + "location": "", + "description": "ã“ã‚“ãªç”·æ€§â™¥ ã»ã‚“ã¨ã«ã„ã‚‹ã®ã‹ã—ら!? \r\n「ã„ãŸã‚‰ã„ã„ã®ã«ãªãã€ã£ã¦ã„ã†ç†æƒ³ã®ç”·æ€§åƒã‚’ã‚’ã€ç§ç›®ç·šã§ã¤ã¶ã‚„ãã¾ã™ã€‚ \r\nã„ã„ãªã¨æ€ã£ãŸäººã¯ RT & フォローãŠé¡˜ã„ã—ã¾ã™â™ª", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 69, + "friends_count": 974, + "listed_count": 0, + "created_at": "Sun Aug 24 08:03:32 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 208, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/503452833719410688/tFU509Yk_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/503452833719410688/tFU509Yk_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2761782601/1408867519", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:02 +0000 2014", + "id": 505874871713157100, + "id_str": "505874871713157120", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "激アツ★6秒動画", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2725690658, + "id_str": "2725690658", + "name": "激アツ★6秒動画", + "screen_name": "gekiatu_6byou", + "location": "", + "description": "話題ã®ï¼–ç§’å‹•ç”»ï¼ \r\næ€ã‚ãšã€Œã»ã‚“ã¨ã‹ã‚ˆã£ã€ã¦ãƒ„ッコんã§ã—ã¾ã†å†…容ã®ã‚ªãƒ³ãƒ‘ãƒ¬ãƒ¼ãƒ‰ï¼ \r\nãŠã‚‚ã—ã‚ã‹ã£ãŸã‚‰ã€æ˜¯éž RT & フォローãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 195, + "friends_count": 494, + "listed_count": 0, + "created_at": "Tue Aug 12 08:17:29 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 477, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/499107997444886528/3rl6FrIk_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/499107997444886528/3rl6FrIk_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2725690658/1407832963", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:02 +0000 2014", + "id": 505874871616671740, + "id_str": "505874871616671744", + "text": "爆笑wwç解答集ï¼\n先生ã®ãƒ„メã®ç”˜ã•ã¨ç”Ÿå¾’ã®ã‚»ãƒ³ã‚¹ã‚’æ„Ÿã˜ã‚‹ä¸€å•ä¸€ç­”ã ã¨FBã§ã‚‚話題ï¼ï¼\nã†ã©ã‚“天下一決定戦ウィンドウズ9三é‡é«˜æ ¡ç«¹å†…ç”±æµã‚¢ãƒŠèŠ±ç«ä¿é™º\nhttp://t.co/jRWJt8IrSB http://t.co/okrAoxSbt0", + "source": "笑ãˆã‚‹åšç‰©é¤¨", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2748747362, + "id_str": "2748747362", + "name": "笑ãˆã‚‹åšç‰©é¤¨", + "screen_name": "waraeru_kan", + "location": "", + "description": "", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 19, + "friends_count": 10, + "listed_count": 0, + "created_at": "Wed Aug 20 11:11:04 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 15137, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://abs.twimg.com/sticky/default_profile_images/default_profile_4_normal.png", + "profile_image_url_https": "https://abs.twimg.com/sticky/default_profile_images/default_profile_4_normal.png", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": true, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 0, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [ + { + "url": "http://t.co/jRWJt8IrSB", + "expanded_url": "http://bit.ly/1qBa1nl", + "display_url": "bit.ly/1qBa1nl", + "indices": [ + 75, + 97 + ] + } + ], + "user_mentions": [], + "media": [ + { + "id": 505874871344066560, + "id_str": "505874871344066560", + "indices": [ + 98, + 120 + ], + "media_url": "http://pbs.twimg.com/media/BwU6g-dCcAALxAW.png", + "media_url_https": "https://pbs.twimg.com/media/BwU6g-dCcAALxAW.png", + "url": "http://t.co/okrAoxSbt0", + "display_url": "pic.twitter.com/okrAoxSbt0", + "expanded_url": "http://twitter.com/waraeru_kan/status/505874871616671744/photo/1", + "type": "photo", + "sizes": { + "small": { + "w": 340, + "h": 425, + "resize": "fit" + }, + "thumb": { + "w": 150, + "h": 150, + "resize": "crop" + }, + "large": { + "w": 600, + "h": 750, + "resize": "fit" + }, + "medium": { + "w": 600, + "h": 750, + "resize": "fit" + } + } + } + ] + }, + "favorited": false, + "retweeted": false, + "possibly_sensitive": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:02 +0000 2014", + "id": 505874871268540400, + "id_str": "505874871268540416", + "text": "@nasan_arai \nåå‰â†’ãªãƒ¼ã•ã‚“\n第一å°è±¡â†’誰。(´・_ï½¥`)\n今ã®å°è±¡â†’ã‚Œã„ら♡\nLINE交æ›ã§ãる?→ã—ã¦ã‚‹(「・ω・)ï½¢\n好ããªã¨ã“ã‚→å¯æ„›ã„優ã—ã„優ã—ã„優ã—ã„\n最後ã«ä¸€è¨€â†’ãªãƒ¼ã•ã‚“好ã〜(´・_ï½¥`)♡GEMç¾å ´ãŠã„ã§ã­(´・_ï½¥`)♡\n\n#ãµãã¼ã—ãŸäººã«ã‚„ã‚‹", + "source": "Twitter for iPhone", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": 1717603286, + "in_reply_to_user_id_str": "1717603286", + "in_reply_to_screen_name": "nasan_arai", + "user": { + "id": 2417626784, + "id_str": "2417626784", + "name": "✩.ゆãଘ(*´꒳`)", + "screen_name": "Ymaaya_gem", + "location": "", + "description": "â½â½Ù©( á– )Û¶â¾â¾ â¤ï¸Ž æ­¦ ç”° 舞 彩 â¤ï¸Ž â‚â‚Ù©( á› )۶₎₎", + "url": "http://t.co/wR0Qb76TbB", + "entities": { + "url": { + "urls": [ + { + "url": "http://t.co/wR0Qb76TbB", + "expanded_url": "http://twpf.jp/Ymaaya_gem", + "display_url": "twpf.jp/Ymaaya_gem", + "indices": [ + 0, + 22 + ] + } + ] + }, + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 198, + "friends_count": 245, + "listed_count": 1, + "created_at": "Sat Mar 29 16:03:06 +0000 2014", + "favourites_count": 3818, + "utc_offset": null, + "time_zone": null, + "geo_enabled": true, + "verified": false, + "statuses_count": 8056, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/505516858816987136/4gFGjHzu_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/505516858816987136/4gFGjHzu_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2417626784/1407764793", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 0, + "favorite_count": 0, + "entities": { + "hashtags": [ + { + "text": "ãµãã¼ã—ãŸäººã«ã‚„ã‚‹", + "indices": [ + 128, + 138 + ] + } + ], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "nasan_arai", + "name": "ãªãƒ¼ã•ã‚“", + "id": 1717603286, + "id_str": "1717603286", + "indices": [ + 0, + 11 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:02 +0000 2014", + "id": 505874871218225150, + "id_str": "505874871218225152", + "text": "\"ソードマスター\"剣è–カミイズミ (CV:ç·‘å·å…‰)-「ソードマスターã€ã®ã‚¢ã‚¹ã‚¿ãƒªã‚¹ã‚¯æ‰€æŒè€…\n第一師団団長ã«ã—ã¦ã€Œå‰£è–ã€ã®ç§°å·ã‚’æŒã¤å‰£å£«ã€‚イデアã®å‰£ã®å¸«åŒ ã€‚ \n敵味方ã‹ã‚‰ã‚‚尊敬ã•ã‚Œã‚‹ä¸€æµã®æ­¦äººã€‚", + "source": "twittbot.net", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 1435517814, + "id_str": "1435517814", + "name": "俺ã€é–¢ä¿‚ãªã„よ?", + "screen_name": "BDFF_LOVE", + "location": "ルクセンダルクorリングアベルã•ã‚“ã®éš£", + "description": "自分ãªã‚Šã«ç”Ÿãる人ã€æœ€å¾Œã¾ã§ã‚ãらã‚ãªã„ã®ã€‚ã§ã‚‚ã€ãƒ•ã‚©ãƒ­ãƒ¼ã‚ã‚ŠãŒã¨ã†â€¦ã€‚@ringo_BDFFLOVE â†ã¯ã€å¦¹ã§ã™ã€‚時々ã€ä¼šè©±ã—ã¾ã™ã€‚「ç¾åœ¨BOTã§ã€BDFFã®ã“ã¨å‘Ÿãよï¼ã€å¤œã¯ã€å…¨æ»… 「BDFFプレイ中ã€è©³ã—ãã¯ã€ãƒ„イプロã¿ã¦ãã ã•ã„ï¼(絶対)", + "url": "http://t.co/5R4dzpbWX2", + "entities": { + "url": { + "urls": [ + { + "url": "http://t.co/5R4dzpbWX2", + "expanded_url": "http://twpf.jp/BDFF_LOVE", + "display_url": "twpf.jp/BDFF_LOVE", + "indices": [ + 0, + 22 + ] + } + ] + }, + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 1066, + "friends_count": 1799, + "listed_count": 6, + "created_at": "Fri May 17 12:33:23 +0000 2013", + "favourites_count": 1431, + "utc_offset": 32400, + "time_zone": "Irkutsk", + "geo_enabled": true, + "verified": false, + "statuses_count": 6333, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/505696320380612608/qvaxb_zx_normal.png", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/505696320380612608/qvaxb_zx_normal.png", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/1435517814/1409401948", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 0, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:02 +0000 2014", + "id": 505874871130136600, + "id_str": "505874871130136576", + "text": "闇「リンã¨ä»˜ãåˆã†ã«å½“ãŸã£ã¦æ­³ã®å·®ä»¥å¤–ã«ã‚‚ã„ã‚ã„ã‚å£ãŒã‚ã£ãŸã‚“ã ã‚ˆã€‚æ„›ã—隊ã®å¦¨å®³ã¨ã‹é¢¨ç´€åŽ¨ã®ç”Ÿå¾’会長ã¨ã‹â€¦ã€\n一å·ã€Œãƒªãƒ³ã¡ã‚ƒã‚“ã‚’æ³£ã‹ã›ãŸã‚‰ã‚·ãƒ¡ã‚‹ã‹ã‚“ã­ï¼ã€\n二å·ã€Œãƒªãƒ³ã¡ã‚ƒã‚“ã«ã‚„ã¾ã—ã„事ã—ãŸã‚‰Ã—ã™â€¦ã€\n執行部「ä¸ç´”ãªäº¤éš›ã¯åƒ•ãŒå–ã‚Šç· ã¾ã‚ã†ã˜ã‚ƒãªã„ã‹â€¦ã€\n闇「(消ã•ã‚Œã‚‹ï¼‰ã€", + "source": "twittbot.net", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2386208737, + "id_str": "2386208737", + "name": "闇未æ¥Bot", + "screen_name": "StxRinFbot", + "location": "DIVAルーム", + "description": "ProjectDIVAã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãƒ»ã‚¹ãƒˆãƒ¬ãƒ³ã‚¸ãƒ€ãƒ¼ã‚¯Ã—é¡éŸ³ãƒªãƒ³FutureStyleã®è‡ªå·±æº€è¶³éžå…¬å¼Bot マセレン仕様。CPè¦ç´ ã‚ã‚Šã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 7, + "friends_count": 2, + "listed_count": 0, + "created_at": "Thu Mar 13 02:58:09 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 4876, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/443948925351755776/6rmljL5C_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/443948925351755776/6rmljL5C_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2386208737/1396259004", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 0, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:02 +0000 2014", + "id": 505874870933016600, + "id_str": "505874870933016576", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "絶å“!!スイーツ天国", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2725681663, + "id_str": "2725681663", + "name": "絶å“!!スイーツ天国", + "screen_name": "suitestengoku", + "location": "", + "description": "美味ã—ãã†ãªã‚¹ã‚¤ãƒ¼ãƒ„ã£ã¦ã€è¦‹ã¦ã‚‹ã ã‘ã§å¹¸ã›ãªæ°—分ã«ãªã‚Œã¾ã™ã­â™ª\r\nãã‚“ãªç´ æ•µãªã‚¹ã‚¤ãƒ¼ãƒ„ã«å‡ºä¼šã„ãŸã„ã§ã™ã€‚\r\n食ã¹ãŸã„ã¨æ€ã£ãŸã‚‰æ˜¯éž RT & フォローãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 401, + "friends_count": 1877, + "listed_count": 1, + "created_at": "Tue Aug 12 07:43:52 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 554, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/499099533507178496/g5dNpArt_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/499099533507178496/g5dNpArt_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2725681663/1407829743", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:02 +0000 2014", + "id": 505874870148669440, + "id_str": "505874870148669440", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "電車厳ç¦!!ãŠã‚‚ã—ã‚話", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2699667800, + "id_str": "2699667800", + "name": "電車厳ç¦!!ãŠã‚‚ã—ã‚話w", + "screen_name": "dengeki_omoro", + "location": "", + "description": "日常ã®ã‚ªãƒ¢ã‚·ãƒ­ãã¦ç¬‘ãˆã‚‹å ´é¢ã‚’探ã—ã¾ã™â™ª\r\né¢ç™½ã‹ã£ãŸã‚‰RT & 相互フォローã§ã¿ãªã•ã‚“ã€ãŠé¡˜ã„ã—ã¾ã™â™ª", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 461, + "friends_count": 1919, + "listed_count": 0, + "created_at": "Sat Aug 02 02:16:32 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 728, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/495400387961036800/BBMb_hcG_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/495400387961036800/BBMb_hcG_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2699667800/1406947654", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:02 +0000 2014", + "id": 505874869339189250, + "id_str": "505874869339189249", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "笑ãˆã‚‹wwランキング2", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2695745652, + "id_str": "2695745652", + "name": "笑ãˆã‚‹wwランキング", + "screen_name": "wara_runk", + "location": "", + "description": "知ã£ã¦ã‚‹ã¨ä½¿ãˆã‚‹ãƒ©ãƒ³ã‚­ãƒ³ã‚°ã‚’探ãã†ã€‚\r\né¢ç™½ã‹ã£ãŸã‚‰RT & 相互フォローã§ã¿ãªã•ã‚“ã€ãŠé¡˜ã„ã—ã¾ã™â™ª", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 314, + "friends_count": 1943, + "listed_count": 1, + "created_at": "Thu Jul 31 13:51:57 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 737, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/494844659856728064/xBQfnm5J_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/494844659856728064/xBQfnm5J_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2695745652/1406815103", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:02 +0000 2014", + "id": 505874868533854200, + "id_str": "505874868533854209", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "スニーカー大好ã★図鑑", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2707963890, + "id_str": "2707963890", + "name": "スニーカー大好ã★図鑑", + "screen_name": "sunikar_daisuki", + "location": "", + "description": "スニーカー好ãを見ã¤ã‘ã¦ä»²é–“ã«ãªã‚ã†â™ª\r\næ°—ã«å…¥ã£ãŸã‚‰ RT & 相互フォロー㧠ã¿ãªã•ã‚“ã€ãŠé¡˜ã„ã—ã¾ã™â™ª", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 394, + "friends_count": 1891, + "listed_count": 0, + "created_at": "Tue Aug 05 01:54:28 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 642, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/496474952631996416/f0C_u3_u_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/496474952631996416/f0C_u3_u_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2707963890/1407203869", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "zh" + }, + "created_at": "Sun Aug 31 00:29:01 +0000 2014", + "id": 505874867997380600, + "id_str": "505874867997380608", + "text": "\"@BelloTexto: ¿Quieres ser feliz? \n一\"No stalkees\" \n一\"No stalkees\" \n一\"No stalkees\" \n一\"No stalkees\" \n一\"No stalkees\" \n一\"No stalkees\".\"", + "source": "Twitter for Android", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2249378935, + "id_str": "2249378935", + "name": "Maggie Becerril ", + "screen_name": "maggdesie", + "location": "", + "description": "cambiando la vida de las personas.", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 120, + "friends_count": 391, + "listed_count": 0, + "created_at": "Mon Dec 16 21:56:49 +0000 2013", + "favourites_count": 314, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 1657, + "lang": "es", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/505093371665604608/K0x_LV2y_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/505093371665604608/K0x_LV2y_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2249378935/1409258479", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 0, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "BelloTexto", + "name": "Indirectas... ✉", + "id": 833083404, + "id_str": "833083404", + "indices": [ + 1, + 12 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "zh" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:01 +0000 2014", + "id": 505874867720183800, + "id_str": "505874867720183808", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "ザ・異性ã®è£ã®é¡”", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2719746578, + "id_str": "2719746578", + "name": "ザ・異性ã®è£ã®é¡”", + "screen_name": "iseiuragao", + "location": "", + "description": "異性ã«ã¤ã„ã¦å°‘ã—å­¦ã¶ã“ã¨ã§ã€å¿…然的ã«ãƒ¢ãƒ†ã‚‹ã‚ˆã†ã«ãªã‚‹ï¼ï¼Ÿã€€ç›¸æ‰‹ã‚’ç†è§£ã™ã‚‹ã“ã¨ã§è¦‹ãˆã¦ãã‚‹ã‚‚ã®ã€Œãã‚Œã¯ãƒ»ãƒ»ãƒ»â—â—ã€ã€€ã„ã„内容ã ã¨æ€ã£ãŸã‚‰ RT & フォローもãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 238, + "friends_count": 1922, + "listed_count": 0, + "created_at": "Sat Aug 09 17:18:43 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 532, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/498157077726900224/tW8q4di__normal.png", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/498157077726900224/tW8q4di__normal.png", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2719746578/1407604947", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:01 +0000 2014", + "id": 505874866910687200, + "id_str": "505874866910687233", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "超w美女☆アルãƒãƒ ", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2744054334, + "id_str": "2744054334", + "name": "超w美女☆アルãƒãƒ ", + "screen_name": "bijyoalbum", + "location": "", + "description": "「ãŠãŠï½žã£ï¼ã„ã„ã­ï½žã€ã£ã¦ã€æ€ã‚ãšè¨€ã£ã¦ã—ã¾ã†ã€ç¾Žå¥³ã‚’見ã¤ã‘ã¾ã™â˜† \r\nタイプã ã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ãŠé¡˜ã„ã—ã¾ã™â™ª", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 45, + "friends_count": 966, + "listed_count": 0, + "created_at": "Tue Aug 19 05:36:48 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 352, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501604413312491520/GP66eKWr_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501604413312491520/GP66eKWr_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2744054334/1408426814", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:01 +0000 2014", + "id": 505874866105376800, + "id_str": "505874866105376769", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "ç”·ã«è¦‹ã›ãªã„女å­ã®è£ç”Ÿæ…‹", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2744261238, + "id_str": "2744261238", + "name": "ç”·ã«è¦‹ã›ãªã„女å­ã®è£ç”Ÿæ…‹", + "screen_name": "jyoshiuraseitai", + "location": "", + "description": "ç”·ã®çŸ¥ã‚‰ãªã„女å­ãªã‚‰ã§ã¯ã®ã‚ã‚‹ã‚る☆ \r\nãã‚“ãªç”Ÿã€…ã—ã„女å­ã®ç”Ÿæ…‹ã‚’ã¤ã¶ã‚„ãã¾ã™ã€‚ \r\nã‚ã‹ã‚‹ï½žã£ã¦äººã¯ RT & フォローã§ãŠé¡˜ã„ã—ã¾ã™â™ª", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 203, + "friends_count": 967, + "listed_count": 0, + "created_at": "Tue Aug 19 08:01:28 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 348, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501641354804346880/Uh1-n1LD_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501641354804346880/Uh1-n1LD_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2744261238/1408435630", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:01 +0000 2014", + "id": 505874865354584060, + "id_str": "505874865354584064", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "é©šãã®å‹•ç‰©ãŸã¡ã®ç”Ÿæ…‹", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2759403146, + "id_str": "2759403146", + "name": "é©šãã®å‹•ç‰©ãŸã¡ã®ç”Ÿæ…‹", + "screen_name": "soubutu_seitai", + "location": "", + "description": "「ãŠãŠï½žã£ã€ã¨ 言ã‚れるよã†ãªã€å‹•ç‰©ã®ç”Ÿæ…‹ã‚’ツイートã—ã¾ã™â™ª \r\n知ã£ã¦ã„ã‚‹ã¨ã€ã‚ãªãŸã‚‚人気者ã«!? \r\nãŠã‚‚ã—ã‚ã‹ã£ãŸã‚‰ RT & フォローをã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 67, + "friends_count": 954, + "listed_count": 0, + "created_at": "Sat Aug 23 16:39:31 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 219, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/503220468128567296/Z8mGDIBS_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/503220468128567296/Z8mGDIBS_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2759403146/1408812130", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:01 +0000 2014", + "id": 505874864603820000, + "id_str": "505874864603820032", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "モテ女å­â˜…ファションã®ç§˜å¯†", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2706659820, + "id_str": "2706659820", + "name": "モテ女å­â˜…ファションã®ç§˜å¯†", + "screen_name": "mote_woman", + "location": "", + "description": "オシャレã‹ã‚ã„ã„♥モテ度UPã®æ³¨ç›®ã‚¢ã‚¤ãƒ†ãƒ ã‚’見ã¤ã‘ã¾ã™ã€‚\r\næ°—ã«å…¥ã£ãŸã‚‰ RT & 相互フォロー㧠ã¿ãªã•ã‚“ã€ãŠé¡˜ã„ã—ã¾ã™â™ª", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 217, + "friends_count": 1806, + "listed_count": 0, + "created_at": "Mon Aug 04 14:30:24 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 682, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/496303370936668161/s7xP8rTy_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/496303370936668161/s7xP8rTy_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2706659820/1407163059", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:00 +0000 2014", + "id": 505874863874007040, + "id_str": "505874863874007040", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "男女ã®é•ã„を解明ã™ã‚‹", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2761896468, + "id_str": "2761896468", + "name": "男女ã®é•ã„を解明ã™ã‚‹", + "screen_name": "danjyonotigai1", + "location": "", + "description": "æ„外ã¨ç†è§£ã§ãã¦ã„ãªã„男女ãã‚Œãžã‚Œã®äº‹æƒ…。 \r\n「ãˆã£ã€€ãƒžã‚¸ã§!?ã€ã¨é©šãよã†ãªã€ç”·å¥³ã®ç¿’性をã¤ã¶ã‚„ãã¾ã™â™ª ãŸã‚ã«ãªã£ãŸã‚‰ã€æ˜¯éž RT & フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 82, + "friends_count": 992, + "listed_count": 0, + "created_at": "Sun Aug 24 09:47:44 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 237, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/503479057380413441/zDLu5Z9o_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/503479057380413441/zDLu5Z9o_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2761896468/1408873803", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:00 +0000 2014", + "id": 505874862900924400, + "id_str": "505874862900924416", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "神レベル★極é™ã®ç™ºæƒ³", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2744950735, + "id_str": "2744950735", + "name": "神レベル★極é™ã®ç™ºæƒ³", + "screen_name": "kamihassou", + "location": "", + "description": "見ã¦ã„ã‚‹ã ã‘ã§ã€æœ¬æ°—ãŒãƒ“ã‚·ãƒã‚·ä¼ã‚ã£ã¦ãã¾ã™ï¼ \r\n人生ã®ãƒ’ントã«ãªã‚‹ã‚ˆã†ãªã€ãã‚“ãªç©¶æ¥µã®ç™ºæƒ³ã‚’集ã‚ã¦ã„ã¾ã™ã€‚ \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™â™ª", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 84, + "friends_count": 992, + "listed_count": 0, + "created_at": "Tue Aug 19 13:36:05 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 343, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501725053189226496/xZNOTYz2_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501725053189226496/xZNOTYz2_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2744950735/1408455571", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:00 +0000 2014", + "id": 505874862397591550, + "id_str": "505874862397591552", + "text": "@kaoritoxx ãã†ã‚ˆï¼ã‚ãŸã—ã¯ãã†æ€ã†ã‚ˆã†ã«ã—ã¦ãŠã‚‹ã€‚ã„ã¾è·å ´ä¸€ã‚„ã‘ã¨ã‚‹æ°—ãŒã™ã‚‹(°_°)ï¼æº€å–«å¹¸ã›ç„¼ã‘ï¼ï¼wã‚ーã€ãªã‚‹ã»ã©ã­ï¼æ¯Žå›žãã†ã ã‚ˆã­ï¼ãƒ†ã‚£ã‚¢ãƒ©ã¡ã‚ƒã‚“ã¿ã«ã„ã£ã¦ã‚‹ã‚‚ã‚“ã­â™¡äº”月ã¨ä¹æœˆæã‚ã—ã„ã€ã€ã€\nãƒãƒªãƒã‚¿ã‚¨ãƒªã‚¢ã¯ã„ã£ãŸï¼Ÿï¼Ÿ", + "source": "Twitter for iPhone", + "truncated": false, + "in_reply_to_status_id": 505838547308277760, + "in_reply_to_status_id_str": "505838547308277761", + "in_reply_to_user_id": 796000214, + "in_reply_to_user_id_str": "796000214", + "in_reply_to_screen_name": "kaoritoxx", + "user": { + "id": 2256249487, + "id_str": "2256249487", + "name": "ã¯ã‚ã¡ã‚ƒã‚“@海賊åŒç›Ÿä¸­", + "screen_name": "onepiece_24", + "location": "ã©ãˆã™ãˆã‚ã‰ãŸã‚“ã®åŠ©æ‰‹å…¼ã­å¦¹(願望)", + "description": "ONE PIECEæ„›ã—ã™ãŽã¦ä»Šå¹´ï¼’3ã¡ã‚ƒã„(歴14年目)ゾロ様ã«ä¸€é€”ã ã£ãŸã®ã«ãƒ­ãƒ¼ã€ã“ã®ã‚„ã‚ー。ロビンã¡ã‚ƒã‚“ãŒå¹¸ã›ã«ãªã‚Œã°ã„ã„。ルフィã¯ç„¡æ¡ä»¶ã«ã™ã。ゾロビンã€ãƒ­ãƒ¼ãƒ­ãƒ“ã€ãƒ«ãƒ­ãƒ“♡usjã€å£°å„ªã•ã‚“ã€ã‚³ãƒŠãƒ³ã€é€²æ’ƒã€ã‚¯ãƒ¬ã—ã‚“ã€H x Hも好ã♩", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 415, + "friends_count": 384, + "listed_count": 3, + "created_at": "Sat Dec 21 09:37:25 +0000 2013", + "favourites_count": 1603, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 9636, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501686340564418561/hMQFN4vD_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501686340564418561/hMQFN4vD_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2256249487/1399987924", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 0, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "kaoritoxx", + "name": "ã‹ãŠã¡ã‚ƒã‚“", + "id": 796000214, + "id_str": "796000214", + "indices": [ + 0, + 10 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:00 +0000 2014", + "id": 505874861973991400, + "id_str": "505874861973991424", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "æ‹æ„›ä»™äºº", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2698885082, + "id_str": "2698885082", + "name": "æ‹æ„›ä»™äºº", + "screen_name": "renai_sennin", + "location": "", + "description": "豊富ã§ã‚¹ãƒ†ã‚­ãªæ‹æ„›çµŒé¨“ã‚’ã€ã‚·ã‚§ã‚¢ã—ã¾ã—ょã†ã€‚\r\né¢ç™½ã‹ã£ãŸã‚‰RT & 相互フォローã§ã¿ãªã•ã‚“ã€ãŠé¡˜ã„ã—ã¾ã™â™ª", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 618, + "friends_count": 1847, + "listed_count": 1, + "created_at": "Fri Aug 01 18:09:38 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 726, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/495272204641132544/GNA18aOg_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/495272204641132544/GNA18aOg_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2698885082/1406917096", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:00 +0000 2014", + "id": 505874861881700350, + "id_str": "505874861881700353", + "text": "@itsukibot_ 一稀ã®ä¿ºã®ã‚½ãƒ¼ã‚»ãƒ¼ã‚¸ã‚’ペロペロã™ã‚‹éŸ³ã¯ãƒ‡ã‚«ã‚¤", + "source": "jigtwi", + "truncated": false, + "in_reply_to_status_id": 505871017428795400, + "in_reply_to_status_id_str": "505871017428795392", + "in_reply_to_user_id": 141170845, + "in_reply_to_user_id_str": "141170845", + "in_reply_to_screen_name": "itsukibot_", + "user": { + "id": 2184752048, + "id_str": "2184752048", + "name": "アンドー", + "screen_name": "55dakedayo", + "location": "", + "description": "", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 15, + "friends_count": 24, + "listed_count": 0, + "created_at": "Sat Nov 09 17:42:22 +0000 2013", + "favourites_count": 37249, + "utc_offset": 32400, + "time_zone": "Irkutsk", + "geo_enabled": false, + "verified": false, + "statuses_count": 21070, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://abs.twimg.com/sticky/default_profile_images/default_profile_3_normal.png", + "profile_image_url_https": "https://abs.twimg.com/sticky/default_profile_images/default_profile_3_normal.png", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": true, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 0, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "itsukibot_", + "name": "å‰ç”°ä¸€ç¨€", + "id": 141170845, + "id_str": "141170845", + "indices": [ + 0, + 11 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:00 +0000 2014", + "id": 505874861185437700, + "id_str": "505874861185437697", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "ã‚ã®ä¼èª¬ã®åドラマ&åå ´é¢", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2706951979, + "id_str": "2706951979", + "name": "ã‚ã®ä¼èª¬ã®åドラマ&åå ´é¢", + "screen_name": "densetunodorama", + "location": "", + "description": "誰ã«ã§ã‚‚記憶ã«æ®‹ã‚‹ã€ãƒ‰ãƒ©ãƒžã®åå ´é¢ãŒã‚ã‚‹ã¨æ€ã„ã¾ã™ã€‚ãã‚“ãªæ„Ÿå‹•ã®ã‚¹ãƒˆãƒ¼ãƒªãƒ¼ã‚’ã€ã‚‚ã†ä¸€åº¦ã‚ã‹ã¡ã‚ã„ãŸã„ã§ã™ã€‚\r\n「ã“れ知ã£ã¦ã‚‹ï¼ã€ã¨ã‹ã€Œã‚~æ‡ã‹ã—ã„ã€ã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã¿ãªã•ã‚“ã€ãŠé¡˜ã„ã—ã¾ã™â™ª", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 300, + "friends_count": 1886, + "listed_count": 0, + "created_at": "Mon Aug 04 16:38:25 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 694, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/496335892152209408/fKzb8Nv3_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/496335892152209408/fKzb8Nv3_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2706951979/1407170704", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:29:00 +0000 2014", + "id": 505874860447260700, + "id_str": "505874860447260672", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "マジã§é£Ÿã¹ãŸã„♥ケーキ特集", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2724328646, + "id_str": "2724328646", + "name": "マジã§é£Ÿã¹ãŸã„♥ケーキ特集", + "screen_name": "tabetaicake1", + "location": "", + "description": "女性ã®ç›®ç·šã‹ã‚‰è¦‹ãŸã€ç¾Žå‘³ã—ãã†ãªã‚±ãƒ¼ã‚­ã‚’探ã—求ã‚ã¦ã„ã¾ã™ã€‚\r\n見ã¦ã‚‹ã ã‘ã§ã€ã‚れもコレも食ã¹ãŸããªã£ã¡ã‚ƒã†â™ª\r\n美味ã—ãã†ã ã¨æ€ã£ãŸã‚‰ã€æ˜¯éž RT & フォローãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 158, + "friends_count": 1907, + "listed_count": 0, + "created_at": "Mon Aug 11 17:15:22 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 493, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/498881289844293632/DAa9No9M_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/498881289844293632/DAa9No9M_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2724328646/1407777704", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:28:59 +0000 2014", + "id": 505874859662925800, + "id_str": "505874859662925824", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "アディダス★マニア", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2704003662, + "id_str": "2704003662", + "name": "アディダス★マニア", + "screen_name": "adi_mania11", + "location": "", + "description": "素敵ãªã‚¢ãƒ‡ã‚£ãƒ€ã‚¹ã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’見ã¤ã‘ãŸã„ã§ã™â™ª\r\næ°—ã«å…¥ã£ã¦ã‚‚らãˆãŸã‚‰ã‚‰RT & 相互フォロー㧠ã¿ãªã•ã‚“ã€ãŠé¡˜ã„ã—ã¾ã™â™ª", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 340, + "friends_count": 1851, + "listed_count": 0, + "created_at": "Sun Aug 03 12:26:37 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 734, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/495911561781727235/06QAMVrR_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/495911561781727235/06QAMVrR_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2704003662/1407069046", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:28:59 +0000 2014", + "id": 505874858920513540, + "id_str": "505874858920513537", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "èŒãˆãƒšãƒƒãƒˆå¤§å¥½ã", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2719061228, + "id_str": "2719061228", + "name": "èŒãˆãƒšãƒƒãƒˆå¤§å¥½ã", + "screen_name": "moe_pet1", + "location": "", + "description": "ã‹ã‚ã„ã„ペットを見るã®ãŒè¶£å‘³ã§ã™â™¥ãã‚“ãªç§ã¨ä¸€ç·’ã«ã„ã‚„ã•ã‚ŒãŸã„人ã„ã¾ã›ã‚“ã‹ï¼Ÿã‹ã‚ã„ã„ã¨æ€ã£ãŸã‚‰ RT & フォローもãŠé¡˜ã„ã—ã¾ã™â™ª", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 289, + "friends_count": 1812, + "listed_count": 0, + "created_at": "Sat Aug 09 10:20:25 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 632, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/498051549537386496/QizThq7N_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/498051549537386496/QizThq7N_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2719061228/1407581287", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:28:59 +0000 2014", + "id": 505874858115219460, + "id_str": "505874858115219456", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "æ‹æ„›ã®æ•™ç§‘書 ", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2744344514, + "id_str": "2744344514", + "name": "æ‹æ„›ã®æ•™ç§‘書", + "screen_name": "renaikyoukasyo", + "location": "", + "description": "ã‚‚ã£ã¨æ—©ã知ã£ã¨ãã¹ãã ã£ãŸï½žï¼çŸ¥ã£ã¦ã„ã‚Œã°ã‚‚ã£ã¨ä¸Šæ‰‹ãã„ã♪ \r\n今ã™ã役立ã¤æ‹æ„›ã«ã¤ã„ã¦ã®é›‘学やマメ知識をãŠå±Šã‘ã—ã¾ã™ã€‚ \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 124, + "friends_count": 955, + "listed_count": 0, + "created_at": "Tue Aug 19 08:32:45 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 346, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501655512018997248/7SznYGWi_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501655512018997248/7SznYGWi_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2744344514/1408439001", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:28:59 +0000 2014", + "id": 505874857335074800, + "id_str": "505874857335074816", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "オモロã™ãŽã‚‹â˜…学生ã®æ—¥å¸¸", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2699365116, + "id_str": "2699365116", + "name": "オモロã™ãŽã‚‹â˜…学生ã®æ—¥å¸¸", + "screen_name": "omorogakusei", + "location": "", + "description": "楽ã—ã™ãŽã‚‹å­¦ç”Ÿã®æ—¥å¸¸ã‚’探ã—ã¦ã„ãã¾ã™ã€‚\r\né¢ç™½ã‹ã£ãŸã‚‰RT & 相互フォローã§ã¿ãªã•ã‚“ã€ãŠé¡˜ã„ã—ã¾ã™â™ª", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 289, + "friends_count": 1156, + "listed_count": 2, + "created_at": "Fri Aug 01 23:35:18 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 770, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/495353473886478336/S-4B_RVl_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/495353473886478336/S-4B_RVl_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2699365116/1406936481", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:28:59 +0000 2014", + "id": 505874856605257700, + "id_str": "505874856605257728", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "憧れã®â˜…インテリア図鑑", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2721907602, + "id_str": "2721907602", + "name": "憧れã®â˜…インテリア図鑑", + "screen_name": "akogareinteria", + "location": "", + "description": "自分ã®ä½ã‚€éƒ¨å±‹ã‚‚ã“ã‚“ãªãµã†ã«ã—ã¦ã¿ãŸã„♪ \r\nãã‚“ãªç´ æ•µãªã‚¤ãƒ³ãƒ†ãƒªã‚¢ã‚’ã€æ—¥ã€…探ã—ã¦ã„ã¾ã™w \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 298, + "friends_count": 1925, + "listed_count": 0, + "created_at": "Sun Aug 10 15:59:13 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 540, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/498499374423343105/Wi_izHvT_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/498499374423343105/Wi_izHvT_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2721907602/1407686543", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:28:59 +0000 2014", + "id": 505874856089378800, + "id_str": "505874856089378816", + "text": "天冥ã®æ¨™ VI 宿怨 PART1 / å°å· 一水\nhttp://t.co/fXIgRt4ffH\n \n#キンドル #天冥ã®æ¨™VI宿怨PART1", + "source": "waromett", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 1953404612, + "id_str": "1953404612", + "name": "ã‚ã‚ã‚ã£ã¨", + "screen_name": "waromett", + "location": "", + "description": "ãŸã®ã—ã„ã¤ã„ーã¨ã—ょã†ã‹ã„", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 16980, + "friends_count": 16983, + "listed_count": 18, + "created_at": "Fri Oct 11 05:49:57 +0000 2013", + "favourites_count": 3833, + "utc_offset": 32400, + "time_zone": "Tokyo", + "geo_enabled": false, + "verified": false, + "statuses_count": 98655, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "352726", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme5/bg.gif", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme5/bg.gif", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/378800000578908101/14c4744c7aa34b1f8bbd942b78e59385_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/378800000578908101/14c4744c7aa34b1f8bbd942b78e59385_normal.jpeg", + "profile_link_color": "D02B55", + "profile_sidebar_border_color": "829D5E", + "profile_sidebar_fill_color": "99CC33", + "profile_text_color": "3E4415", + "profile_use_background_image": true, + "default_profile": false, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 0, + "favorite_count": 0, + "entities": { + "hashtags": [ + { + "text": "キンドル", + "indices": [ + 50, + 55 + ] + }, + { + "text": "天冥ã®æ¨™VI宿怨PART1", + "indices": [ + 56, + 70 + ] + } + ], + "symbols": [], + "urls": [ + { + "url": "http://t.co/fXIgRt4ffH", + "expanded_url": "http://j.mp/1kHBOym", + "display_url": "j.mp/1kHBOym", + "indices": [ + 25, + 47 + ] + } + ], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "possibly_sensitive": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "zh" + }, + "created_at": "Sun Aug 31 00:28:58 +0000 2014", + "id": 505874855770599400, + "id_str": "505874855770599425", + "text": "å››å·ç›†åœ°æ±Ÿæ·®ç­‰åœ°å°†æœ‰å¼ºé™é›¨ 开学日多地将有雨:   中新网8月31日电 æ®ä¸­å¤®æ°”象å°æ¶ˆæ¯ï¼Œæ±Ÿæ·®ä¸œéƒ¨ã€å››å·ç›†åœ°ä¸œåŒ—部等地今天(31æ—¥)åˆå°†è¿Žæ¥ä¸€åœºæš´é›¨æˆ–大暴雨天气。明天9月1日,是中å°å­¦ç”Ÿå¼€å­¦çš„æ—¥å­ã€‚预计明天,内蒙å¤ä¸­éƒ¨ã€... http://t.co/RNdqIHmTby", + "source": "twitterfeed", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 402427654, + "id_str": "402427654", + "name": "中国新闻", + "screen_name": "zhongwenxinwen", + "location": "", + "description": "中国的新闻,世界的新闻。", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 2429, + "friends_count": 15, + "listed_count": 29, + "created_at": "Tue Nov 01 01:56:43 +0000 2011", + "favourites_count": 0, + "utc_offset": -28800, + "time_zone": "Alaska", + "geo_enabled": false, + "verified": false, + "statuses_count": 84564, + "lang": "zh-cn", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "709397", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme6/bg.gif", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme6/bg.gif", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/2700523149/5597e347b2eb880425faef54287995f2_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/2700523149/5597e347b2eb880425faef54287995f2_normal.jpeg", + "profile_link_color": "FF3300", + "profile_sidebar_border_color": "86A4A6", + "profile_sidebar_fill_color": "A0C5C7", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": false, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 0, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [ + { + "url": "http://t.co/RNdqIHmTby", + "expanded_url": "http://bit.ly/1tOdNsI", + "display_url": "bit.ly/1tOdNsI", + "indices": [ + 114, + 136 + ] + } + ], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "possibly_sensitive": false, + "lang": "zh" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:28:58 +0000 2014", + "id": 505874854877200400, + "id_str": "505874854877200384", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "LDH ★大好ãå¿œæ´å›£", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2700961603, + "id_str": "2700961603", + "name": "LDH ★大好ãå¿œæ´å›£", + "screen_name": "LDH_daisuki1", + "location": "", + "description": "LDHファンã¯ã€å…¨å“¡ä»²é–“ã§ã™â™ª\r\né¢ç™½ã‹ã£ãŸã‚‰RT & 相互フォローã§ã¿ãªã•ã‚“ã€ãŠé¡˜ã„ã—ã¾ã™â™ª", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 458, + "friends_count": 1895, + "listed_count": 0, + "created_at": "Sat Aug 02 14:23:46 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 735, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/495578007298252800/FOZflgYu_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/495578007298252800/FOZflgYu_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2700961603/1406989928", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:28:58 +0000 2014", + "id": 505874854147407900, + "id_str": "505874854147407872", + "text": "RT @shiawaseomamori: 一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®â€¦", + "source": "マジ!?怖ã„アニメ都市ä¼èª¬", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2719489172, + "id_str": "2719489172", + "name": "マジ!?怖ã„アニメ都市ä¼èª¬", + "screen_name": "anime_toshiden1", + "location": "", + "description": "ã‚ãªãŸã®çŸ¥ã‚‰ãªã„ã€æ€–ã™ãŽã‚‹ã‚¢ãƒ‹ãƒ¡ã®éƒ½å¸‚ä¼èª¬ã‚’集ã‚ã¦ã„ã¾ã™ã€‚\r\n「ãˆï½žçŸ¥ã‚‰ãªã‹ã£ãŸã‚ˆww]ã€ã£ã¦äººã¯ RT & フォローãŠé¡˜ã„ã—ã¾ã™â™ª", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 377, + "friends_count": 1911, + "listed_count": 1, + "created_at": "Sat Aug 09 14:41:15 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 536, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/498118027322208258/h7XOTTSi_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/498118027322208258/h7XOTTSi_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2719489172/1407595513", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:06 +0000 2014", + "id": 505871615125491700, + "id_str": "505871615125491712", + "text": "一ã«æ­¢ã¾ã‚‹ã¨æ›¸ã„ã¦ã€æ­£ã—ã„ã¨ã„ã†æ„味ã ãªã‚“ã¦ã€ã“ã®å¹´ã«ãªã‚‹ã¾ã§çŸ¥ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ 人ã¯ç”Ÿãã¦ã„ã‚‹ã¨ã€å‰ã¸å‰ã¸ã¨ã„ã†æ°—æŒã¡ã°ã‹ã‚Šæ€¥ã„ã¦ã€ã©ã‚“ã©ã‚“大切ãªã‚‚ã®ã‚’ç½®ã去りã«ã—ã¦ã„ãã‚‚ã®ã§ã—ょã†ã€‚本当ã«æ­£ã—ã„ã“ã¨ã¨ã„ã†ã®ã¯ã€ä¸€ç•ªåˆã‚ã®å ´æ‰€ã«ã‚ã‚‹ã®ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 by神様ã®ã‚«ãƒ«ãƒ†ã€å¤å·è‰ä»‹", + "source": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2745121514, + "id_str": "2745121514", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "screen_name": "shiawaseomamori", + "location": "", + "description": "自分ãŒå¹¸ã›ã ã¨å‘¨ã‚Šã‚‚幸ã›ã«ã§ãã‚‹ï¼ \r\nãã‚“ãªäººç”Ÿã‚’精一æ¯ç”Ÿãã‚‹ãŸã‚ã«å¿…è¦ãªè¨€è‘‰ã‚’ãŠå±Šã‘ã—ã¾ã™â™ª \r\nã„ã„ãªã¨æ€ã£ãŸã‚‰ RT & 相互フォローã§ã€ãŠé¡˜ã„ã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 213, + "friends_count": 991, + "listed_count": 0, + "created_at": "Tue Aug 19 14:45:19 +0000 2014", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 349, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/501742437606244354/scXy81ZW_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2745121514/1408459730", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 58, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "shiawaseomamori", + "name": "幸ã›ã®â˜†ãŠå®ˆã‚Š", + "id": 2745121514, + "id_str": "2745121514", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:28:58 +0000 2014", + "id": 505874854134820860, + "id_str": "505874854134820864", + "text": "@vesperia1985 ãŠã¯ã‚ˆãƒ¼ï¼\n今日ã¾ã§ãªã®ã§ã™ã‚ˆâ€¦ï¼ï¼æ˜Žæ—¥ä¸€ç”Ÿæ¥ãªãã¦ã„ã„", + "source": "Twitter for iPhone", + "truncated": false, + "in_reply_to_status_id": 505868030329364500, + "in_reply_to_status_id_str": "505868030329364480", + "in_reply_to_user_id": 2286548834, + "in_reply_to_user_id_str": "2286548834", + "in_reply_to_screen_name": "vesperia1985", + "user": { + "id": 2389045190, + "id_str": "2389045190", + "name": "ã‚Šã„ã“", + "screen_name": "riiko_dq10", + "location": "", + "description": "サマーエルフã§ã™ã€ã‚Šã„ã“ã§ã™ã€‚ãˆã‚‹ãŠãんラブã§ã™ï¼éšæ™‚ãµã‚Œã¼ã—ゅ〜〜(ã£Ë˜Ï‰Ë˜c )*日常ã®ã©ã†ã§ã‚‚ã„ã„ã“ã¨ã‚‚å‘Ÿã„ã¦ã¾ã™ãŒã‚ˆã‚ã—ãã­ã€œ", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 67, + "friends_count": 69, + "listed_count": 0, + "created_at": "Fri Mar 14 13:02:27 +0000 2014", + "favourites_count": 120, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 324, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/503906346815610881/BfSrCoBr_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/503906346815610881/BfSrCoBr_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2389045190/1409232058", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 0, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "vesperia1985", + "name": "ユーリ", + "id": 2286548834, + "id_str": "2286548834", + "indices": [ + 0, + 13 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:28:58 +0000 2014", + "id": 505874853778685950, + "id_str": "505874853778685952", + "text": "ã€æ˜ ç”»ãƒ‘ンフレット】 永é ã®ï¼ (永é ã®ã‚¼ãƒ­ï¼‰ã€€ç›£ç£ã€€å±±å´Žè²´ã€€ã‚­ãƒ£ã‚¹ãƒˆã€€å²¡ç”°å‡†ä¸€ã€ä¸‰æµ¦æ˜¥é¦¬ã€äº•ä¸ŠçœŸå¤®æ±å®(2)11点ã®æ–°å“ï¼ä¸­å¤å“を見る: ï¿¥ 500より\n(ã“ã®å•†å“ã®ç¾åœ¨ã®ãƒ©ãƒ³ã‚¯ã«é–¢ã™ã‚‹æ­£å¼ãªæƒ…å ±ã«ã¤ã„ã¦ã¯ã€ã‚¢ãƒ¼ãƒˆãƒ•ãƒ¬ãƒ¼ãƒ ... http://t.co/4hbyB1rbQ7", + "source": "IFTTT", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 1319883571, + "id_str": "1319883571", + "name": "森林木工家具製作所", + "screen_name": "Furniturewood", + "location": "沖縄", + "description": "家具(ã‹ãã€Furniture)ã¯ã€å®¶è²¡é“å…·ã®ã†ã¡å®¶ã®ä¸­ã«æ®ãˆç½®ã„ã¦åˆ©ç”¨ã™ã‚‹æ¯”較的大型ã®é“å…·é¡žã€ã¾ãŸã¯å…ƒã€…家ã«ä½œã‚Šä»˜ã‘られã¦ã„る比較的大型ã®é“å…·é¡žã‚’ã•ã™ã€‚ãªãŠã€æ—¥æœ¬ã®å»ºç¯‰åŸºæº–法上ã¯ã€ä½œã‚Šä»˜ã‘家具ã¯ã€å»ºç¯‰ç¢ºèªåŠã³å®Œäº†æ¤œæŸ»ã®å¯¾è±¡ã¨ãªã‚‹ãŒã€å¾Œã‹ã‚‰ç½®ã‹ã‚Œã‚‹ã‚‚ã®ã«ã¤ã„ã¦ã¯å¯¾è±¡å¤–ã§ã‚る。", + "url": "http://t.co/V4oyL0xtZk", + "entities": { + "url": { + "urls": [ + { + "url": "http://t.co/V4oyL0xtZk", + "expanded_url": "http://astore.amazon.co.jp/furniturewood-22", + "display_url": "astore.amazon.co.jp/furniturewood-…", + "indices": [ + 0, + 22 + ] + } + ] + }, + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 677, + "friends_count": 743, + "listed_count": 1, + "created_at": "Mon Apr 01 07:55:14 +0000 2013", + "favourites_count": 0, + "utc_offset": 32400, + "time_zone": "Irkutsk", + "geo_enabled": false, + "verified": false, + "statuses_count": 17210, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/3460466135/c67d9df9b760787b9ed284fe80b1dd31_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/3460466135/c67d9df9b760787b9ed284fe80b1dd31_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/1319883571/1364804982", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 0, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [ + { + "url": "http://t.co/4hbyB1rbQ7", + "expanded_url": "http://ift.tt/1kT55bk", + "display_url": "ift.tt/1kT55bk", + "indices": [ + 116, + 138 + ] + } + ], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "possibly_sensitive": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:28:58 +0000 2014", + "id": 505874852754907140, + "id_str": "505874852754907136", + "text": "RT @siranuga_hotoke: ゴキブリã¯ä¸€ä¸–帯ã«å¹³å‡ã—ã¦480匹ã„る。", + "source": "Twitter for iPhone", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 413944345, + "id_str": "413944345", + "name": "泥酔イナãƒã‚¦ã‚¢ãƒ¼", + "screen_name": "Natade_co_co_21", + "location": "", + "description": "å›ã®çž³ã«ã†ã¤ã‚‹åƒ•ã«ä¹¾æ¯ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 298, + "friends_count": 300, + "listed_count": 4, + "created_at": "Wed Nov 16 12:52:46 +0000 2011", + "favourites_count": 3125, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 12237, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "FFF04D", + "profile_background_image_url": "http://pbs.twimg.com/profile_background_images/378800000115928444/9bf5fa13385cc80bfeb097e51af9862a.jpeg", + "profile_background_image_url_https": "https://pbs.twimg.com/profile_background_images/378800000115928444/9bf5fa13385cc80bfeb097e51af9862a.jpeg", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/500849752351600640/lMQqIzYj_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/500849752351600640/lMQqIzYj_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/413944345/1403511193", + "profile_link_color": "0099CC", + "profile_sidebar_border_color": "000000", + "profile_sidebar_fill_color": "F6FFD1", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": false, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sat Aug 30 23:24:23 +0000 2014", + "id": 505858599411666940, + "id_str": "505858599411666944", + "text": "ゴキブリã¯ä¸€ä¸–帯ã«å¹³å‡ã—ã¦480匹ã„る。", + "source": "twittbot.net", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2243896200, + "id_str": "2243896200", + "name": "知らã¬ãŒä»bot", + "screen_name": "siranuga_hotoke", + "location": "奈良・京都辺り", + "description": "知らã¬ãŒä»ãªæƒ…報をãŠä¼ãˆã—ã¾ã™ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 3288, + "friends_count": 3482, + "listed_count": 7, + "created_at": "Fri Dec 13 13:16:35 +0000 2013", + "favourites_count": 0, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 1570, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/378800000866399372/ypy5NnPe_normal.png", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/378800000866399372/ypy5NnPe_normal.png", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/2243896200/1386997755", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 1, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + "retweet_count": 1, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [], + "user_mentions": [ + { + "screen_name": "siranuga_hotoke", + "name": "知らã¬ãŒä»bot", + "id": 2243896200, + "id_str": "2243896200", + "indices": [ + 3, + 19 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:28:58 +0000 2014", + "id": 505874852603908100, + "id_str": "505874852603908096", + "text": "RT @UARROW_Y: よã†ã‹ã„体æ“第一を踊る国見英 http://t.co/SXoYWH98as", + "source": "Twitter for iPhone", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 2463035136, + "id_str": "2463035136", + "name": "ã‚„", + "screen_name": "yae45", + "location": "", + "description": "ãã‚‚ã¡ã‚ã‚‹ã„ã“ã¨ã¤ã¶ã‚„ã用", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 4, + "friends_count": 30, + "listed_count": 0, + "created_at": "Fri Apr 25 10:49:20 +0000 2014", + "favourites_count": 827, + "utc_offset": 32400, + "time_zone": "Irkutsk", + "geo_enabled": false, + "verified": false, + "statuses_count": 390, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/505345820137234433/csFeRxPm_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/505345820137234433/csFeRxPm_normal.jpeg", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:16:45 +0000 2014", + "id": 505871779949051900, + "id_str": "505871779949051904", + "text": "よã†ã‹ã„体æ“第一を踊る国見英 http://t.co/SXoYWH98as", + "source": "Twitter for Android", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 1261662588, + "id_str": "1261662588", + "name": "ゆã†çŸ¢", + "screen_name": "UARROW_Y", + "location": "ã¤ãり出ãã†å›½å½±ã®æ³¢ 広ã’よã†å›½å½±ã®è¼ª", + "description": "HQ!! æˆäººæ¸ˆè…女å­ã€‚日常ツイート多ã„ã§ã™ã€‚赤葦京治夢豚クソツイå«ã¿ã¾ã™æ³¨æ„。フォローをãŠè€ƒãˆã®éš›ã¯ãƒ—ロフã”一読ãŠé¡˜ã„致ã—ã¾ã™ã€‚FRBãŠæ°—軽ã«", + "url": "http://t.co/LFX2XOzb0l", + "entities": { + "url": { + "urls": [ + { + "url": "http://t.co/LFX2XOzb0l", + "expanded_url": "http://twpf.jp/UARROW_Y", + "display_url": "twpf.jp/UARROW_Y", + "indices": [ + 0, + 22 + ] + } + ] + }, + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 265, + "friends_count": 124, + "listed_count": 12, + "created_at": "Tue Mar 12 10:42:17 +0000 2013", + "favourites_count": 6762, + "utc_offset": 32400, + "time_zone": "Tokyo", + "geo_enabled": true, + "verified": false, + "statuses_count": 55946, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/502095104618663937/IzuPYx3E_normal.png", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/502095104618663937/IzuPYx3E_normal.png", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/1261662588/1408618604", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 29, + "favorite_count": 54, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [ + { + "url": "http://t.co/SXoYWH98as", + "expanded_url": "http://twitter.com/UARROW_Y/status/505871779949051904/photo/1", + "display_url": "pic.twitter.com/SXoYWH98as", + "indices": [ + 15, + 37 + ] + } + ], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "possibly_sensitive": false, + "lang": "ja" + }, + "retweet_count": 29, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [ + { + "url": "http://t.co/SXoYWH98as", + "expanded_url": "http://twitter.com/UARROW_Y/status/505871779949051904/photo/1", + "display_url": "pic.twitter.com/SXoYWH98as", + "indices": [ + 29, + 51 + ] + } + ], + "user_mentions": [ + { + "screen_name": "UARROW_Y", + "name": "ゆã†çŸ¢", + "id": 1261662588, + "id_str": "1261662588", + "indices": [ + 3, + 12 + ] + } + ] + }, + "favorited": false, + "retweeted": false, + "possibly_sensitive": false, + "lang": "ja" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "zh" + }, + "created_at": "Sun Aug 31 00:28:57 +0000 2014", + "id": 505874848900341760, + "id_str": "505874848900341760", + "text": "RT @fightcensorship: æŽå…‹å¼·ç¸½ç†çš„臉綠了ï¼åœ¨å‰æ—¥å—京é’奧會閉幕å¼ï¼Œè§€çœ¾å¸­ä¸Šä¸€å貪玩韓國少年é‹å‹•å“¡ï¼Œç«Ÿæ–—膽用激光筆射å‘中國總ç†æŽå…‹å¼·çš„臉。http://t.co/HLX9mHcQwe http://t.co/fVVOSML5s8", + "source": "Twitter for iPhone", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 889332218, + "id_str": "889332218", + "name": "民權åˆæ­¥", + "screen_name": "JoeyYoungkm", + "location": "km/cn", + "description": "ç»åŽ†äº†æ€Žæ ·çš„曲折æ‰ä»Žè¿½æ±‚“一致通过â€å‘展到今天人们接å—“过åŠæ•°é€šè¿‡â€ï¼Œæ­£æ˜¯äººä»¬è®¤è¯†åˆ°å¯¹â€œä¸€è‡´â€ç”šè‡³æ˜¯â€œåŸºæœ¬ä¸€è‡´â€çš„追求本身就会å˜æˆä¸€ç§ç‹¬è£ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 313, + "friends_count": 46, + "listed_count": 0, + "created_at": "Thu Oct 18 17:21:17 +0000 2012", + "favourites_count": 24, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 15707, + "lang": "en", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "C0DEED", + "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/378800000563062033/a7e8274752ce36a6cd5bad971ec7d416_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/378800000563062033/a7e8274752ce36a6cd5bad971ec7d416_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/889332218/1388896916", + "profile_link_color": "0084B4", + "profile_sidebar_border_color": "C0DEED", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": true, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweeted_status": { + "metadata": { + "result_type": "recent", + "iso_language_code": "zh" + }, + "created_at": "Sat Aug 30 23:56:27 +0000 2014", + "id": 505866670356070400, + "id_str": "505866670356070401", + "text": "æŽå…‹å¼·ç¸½ç†çš„臉綠了ï¼åœ¨å‰æ—¥å—京é’奧會閉幕å¼ï¼Œè§€çœ¾å¸­ä¸Šä¸€å貪玩韓國少年é‹å‹•å“¡ï¼Œç«Ÿæ–—膽用激光筆射å‘中國總ç†æŽå…‹å¼·çš„臉。http://t.co/HLX9mHcQwe http://t.co/fVVOSML5s8", + "source": "Twitter Web Client", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 67661086, + "id_str": "67661086", + "name": "※范强※法特姗瑟希蒲※", + "screen_name": "fightcensorship", + "location": "Middle of Nowhere", + "description": "被人指责“å°å»ºâ€ã€â€œè½åŽâ€ã€â€œä¿å®ˆâ€çš„代表,当代红å«å…µæ”»å‡»å¯¹è±¡ã€‚致力于言论自由,人æƒï¼› 倡导资讯公开,å对网络å°é”。既ä¸æ˜¯ç²¾è‹±åˆ†å­ï¼Œä¹Ÿä¸æ˜¯æ„è§é¢†è¢–,本推言论ä¸ä»£è¡¨ä»»ä½•å›½å®¶ã€å…šæ´¾å’Œç»„织,也ä¸æ ‡æ¦œä¼Ÿå¤§ã€å…‰è£å’Œæ­£ç¡®ã€‚", + "url": null, + "entities": { + "description": { + "urls": [] + } + }, + "protected": false, + "followers_count": 7143, + "friends_count": 779, + "listed_count": 94, + "created_at": "Fri Aug 21 17:16:22 +0000 2009", + "favourites_count": 364, + "utc_offset": 28800, + "time_zone": "Singapore", + "geo_enabled": false, + "verified": false, + "statuses_count": 16751, + "lang": "en", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "FFFFFF", + "profile_background_image_url": "http://pbs.twimg.com/profile_background_images/611138516/toeccqnahbpmr0sw9ybv.jpeg", + "profile_background_image_url_https": "https://pbs.twimg.com/profile_background_images/611138516/toeccqnahbpmr0sw9ybv.jpeg", + "profile_background_tile": true, + "profile_image_url": "http://pbs.twimg.com/profile_images/3253137427/3524557d21ef2c04871e985d4d136bdb_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/3253137427/3524557d21ef2c04871e985d4d136bdb_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/67661086/1385608347", + "profile_link_color": "ED1313", + "profile_sidebar_border_color": "FFFFFF", + "profile_sidebar_fill_color": "E0FF92", + "profile_text_color": "000000", + "profile_use_background_image": true, + "default_profile": false, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 4, + "favorite_count": 2, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [ + { + "url": "http://t.co/HLX9mHcQwe", + "expanded_url": "http://is.gd/H3OgTO", + "display_url": "is.gd/H3OgTO", + "indices": [ + 57, + 79 + ] + } + ], + "user_mentions": [], + "media": [ + { + "id": 505866668485386240, + "id_str": "505866668485386241", + "indices": [ + 80, + 102 + ], + "media_url": "http://pbs.twimg.com/media/BwUzDgbIIAEgvhD.jpg", + "media_url_https": "https://pbs.twimg.com/media/BwUzDgbIIAEgvhD.jpg", + "url": "http://t.co/fVVOSML5s8", + "display_url": "pic.twitter.com/fVVOSML5s8", + "expanded_url": "http://twitter.com/fightcensorship/status/505866670356070401/photo/1", + "type": "photo", + "sizes": { + "large": { + "w": 640, + "h": 554, + "resize": "fit" + }, + "medium": { + "w": 600, + "h": 519, + "resize": "fit" + }, + "thumb": { + "w": 150, + "h": 150, + "resize": "crop" + }, + "small": { + "w": 340, + "h": 294, + "resize": "fit" + } + } + } + ] + }, + "favorited": false, + "retweeted": false, + "possibly_sensitive": false, + "lang": "zh" + }, + "retweet_count": 4, + "favorite_count": 0, + "entities": { + "hashtags": [], + "symbols": [], + "urls": [ + { + "url": "http://t.co/HLX9mHcQwe", + "expanded_url": "http://is.gd/H3OgTO", + "display_url": "is.gd/H3OgTO", + "indices": [ + 78, + 100 + ] + } + ], + "user_mentions": [ + { + "screen_name": "fightcensorship", + "name": "※范强※法特姗瑟希蒲※", + "id": 67661086, + "id_str": "67661086", + "indices": [ + 3, + 19 + ] + } + ], + "media": [ + { + "id": 505866668485386240, + "id_str": "505866668485386241", + "indices": [ + 101, + 123 + ], + "media_url": "http://pbs.twimg.com/media/BwUzDgbIIAEgvhD.jpg", + "media_url_https": "https://pbs.twimg.com/media/BwUzDgbIIAEgvhD.jpg", + "url": "http://t.co/fVVOSML5s8", + "display_url": "pic.twitter.com/fVVOSML5s8", + "expanded_url": "http://twitter.com/fightcensorship/status/505866670356070401/photo/1", + "type": "photo", + "sizes": { + "large": { + "w": 640, + "h": 554, + "resize": "fit" + }, + "medium": { + "w": 600, + "h": 519, + "resize": "fit" + }, + "thumb": { + "w": 150, + "h": 150, + "resize": "crop" + }, + "small": { + "w": 340, + "h": 294, + "resize": "fit" + } + }, + "source_status_id": 505866670356070400, + "source_status_id_str": "505866670356070401" + } + ] + }, + "favorited": false, + "retweeted": false, + "possibly_sensitive": false, + "lang": "zh" + }, + { + "metadata": { + "result_type": "recent", + "iso_language_code": "ja" + }, + "created_at": "Sun Aug 31 00:28:56 +0000 2014", + "id": 505874847260352500, + "id_str": "505874847260352513", + "text": "ã€ãƒžã‚¤ãƒªã‚¹ãƒˆã€‘ã€å½©ã‚Šã‚Šã‚】妖怪体æ“第一 踊ã£ã¦ã¿ãŸã€å転】 http://t.co/PjL9if8OZC #sm24357625", + "source": "ニコニコ動画", + "truncated": false, + "in_reply_to_status_id": null, + "in_reply_to_status_id_str": null, + "in_reply_to_user_id": null, + "in_reply_to_user_id_str": null, + "in_reply_to_screen_name": null, + "user": { + "id": 1609789375, + "id_str": "1609789375", + "name": "食ã„ã—ã‚“åŠå‰ã¡ã‚ƒã‚“", + "screen_name": "2no38mae", + "location": "ニノã¨äºŒæ¬¡å…ƒã®é–“", + "description": "ニコ動ã§è¸Šã‚Šæ‰‹ã‚„ã£ã¦ã¾ã™!!å¿œæ´æœ¬å½“ã«å¬‰ã—ã„ã§ã™ã‚ã‚ŠãŒã¨ã†ã”ã–ã„ã¾ã™!! ã½ã£ã¡ã‚ƒã‚Šã ã‘ã©å‰å‘ãã«é ‘張るè…女å­ã§ã™ã€‚åµã¨å¼±è™«ãƒšãƒ€ãƒ«ãŒå¤§å¥½ãï¼ã€ãŠè¿”事】りã·(基本ã¯)â€â—‹â€ã€€DM (åŒæ¥­è€…様を除ã„ã¦)â€Ã—â€ã€€å‹•ç”»ã®è»¢è¼‰ã¯çµ¶å¯¾ã«ã‚„ã‚ã¦ãã ã•ã„。 ブログ→http://t.co/8E91tqoeKX  ", + "url": "http://t.co/ulD2e9mcwb", + "entities": { + "url": { + "urls": [ + { + "url": "http://t.co/ulD2e9mcwb", + "expanded_url": "http://www.nicovideo.jp/mylist/37917495", + "display_url": "nicovideo.jp/mylist/37917495", + "indices": [ + 0, + 22 + ] + } + ] + }, + "description": { + "urls": [ + { + "url": "http://t.co/8E91tqoeKX", + "expanded_url": "http://ameblo.jp/2no38mae/", + "display_url": "ameblo.jp/2no38mae/", + "indices": [ + 125, + 147 + ] + } + ] + } + }, + "protected": false, + "followers_count": 560, + "friends_count": 875, + "listed_count": 11, + "created_at": "Sun Jul 21 05:09:43 +0000 2013", + "favourites_count": 323, + "utc_offset": null, + "time_zone": null, + "geo_enabled": false, + "verified": false, + "statuses_count": 3759, + "lang": "ja", + "contributors_enabled": false, + "is_translator": false, + "is_translation_enabled": false, + "profile_background_color": "F2C6E4", + "profile_background_image_url": "http://pbs.twimg.com/profile_background_images/378800000029400927/114b242f5d838ec7cb098ea5db6df413.jpeg", + "profile_background_image_url_https": "https://pbs.twimg.com/profile_background_images/378800000029400927/114b242f5d838ec7cb098ea5db6df413.jpeg", + "profile_background_tile": false, + "profile_image_url": "http://pbs.twimg.com/profile_images/487853237723095041/LMBMGvOc_normal.jpeg", + "profile_image_url_https": "https://pbs.twimg.com/profile_images/487853237723095041/LMBMGvOc_normal.jpeg", + "profile_banner_url": "https://pbs.twimg.com/profile_banners/1609789375/1375752225", + "profile_link_color": "FF9EDD", + "profile_sidebar_border_color": "FFFFFF", + "profile_sidebar_fill_color": "DDEEF6", + "profile_text_color": "333333", + "profile_use_background_image": true, + "default_profile": false, + "default_profile_image": false, + "following": false, + "follow_request_sent": false, + "notifications": false + }, + "geo": null, + "coordinates": null, + "place": null, + "contributors": null, + "retweet_count": 0, + "favorite_count": 0, + "entities": { + "hashtags": [ + { + "text": "sm24357625", + "indices": [ + 53, + 64 + ] + } + ], + "symbols": [], + "urls": [ + { + "url": "http://t.co/PjL9if8OZC", + "expanded_url": "http://nico.ms/sm24357625", + "display_url": "nico.ms/sm24357625", + "indices": [ + 30, + 52 + ] + } + ], + "user_mentions": [] + }, + "favorited": false, + "retweeted": false, + "possibly_sensitive": false, + "lang": "ja" + } + ], + "search_metadata": { + "completed_in": 0.087, + "max_id": 505874924095815700, + "max_id_str": "505874924095815681", + "next_results": "?max_id=505874847260352512&q=%E4%B8%80&count=100&include_entities=1", + "query": "%E4%B8%80", + "refresh_url": "?since_id=505874924095815681&q=%E4%B8%80&include_entities=1", + "count": 100, + "since_id": 0, + "since_id_str": "0" + } +} \ No newline at end of file diff --git a/benchmark/encoder.rb b/benchmark/encoder.rb new file mode 100644 index 00000000000000..8d997b84cce909 --- /dev/null +++ b/benchmark/encoder.rb @@ -0,0 +1,53 @@ +require "benchmark/ips" +require "json" +require "oj" +require "rapidjson" + +if ENV["ONLY"] + RUN = ENV["ONLY"].split(/[,: ]/).map{|x| [x.to_sym, true] }.to_h + RUN.default = false +elsif ENV["EXCEPT"] + RUN = ENV["EXCEPT"].split(/[,: ]/).map{|x| [x.to_sym, false] }.to_h + RUN.default = true +else + RUN = Hash.new(true) +end + +def implementations(ruby_obj) + { + json: ["json", proc { JSON.dump(ruby_obj) }], + oj: ["oj", proc { Oj.dump(ruby_obj) }], + rapidjson: ["rapidjson", proc { RapidJSON.dump(ruby_obj) }], + } +end + +def benchmark_encoding(benchmark_name, ruby_obj, check_expected: true) + json_output = JSON.dump(ruby_obj) + puts "== Encoding #{benchmark_name} (#{json_output.bytesize} bytes)" + + Benchmark.ips do |x| + expected = ::JSON.dump(ruby_obj) if check_expected + implementations(ruby_obj).select { |name| RUN[name] }.values.each do |name, block| + begin + result = block.call + if check_expected && expected != result + puts "#{name} does not match expected output. Skipping" + next + end + rescue => error + puts "#{name} unsupported (#{error})" + next + end + x.report(name, &block) + end + x.compare!(order: :baseline) + end + puts +end + +benchmark_encoding "small nested array", [[1,2,3,4,5]]*10 +benchmark_encoding "small hash", { "username" => "jhawthorn", "id" => 123, "event" => "wrote json serializer" } +benchmark_encoding "twitter.json", JSON.load_file("#{__dir__}/data/twitter.json") +benchmark_encoding "citm_catalog.json", JSON.load_file("#{__dir__}/data/citm_catalog.json") +benchmark_encoding "canada.json", JSON.load_file("#{__dir__}/data/canada.json"), check_expected: false +benchmark_encoding "many #to_json calls", [{Object.new => Object.new, 12 => 54.3, Integer => Float, Time.now => Date.today}] * 20 diff --git a/benchmark/parser.rb b/benchmark/parser.rb new file mode 100644 index 00000000000000..1c26ed8d407789 --- /dev/null +++ b/benchmark/parser.rb @@ -0,0 +1,39 @@ +require "benchmark/ips" +require "json" +require "oj" +require "rapidjson" + +if ENV["ONLY"] + RUN = ENV["ONLY"].split(/[,: ]/).map{|x| [x.to_sym, true] }.to_h + RUN.default = false +elsif ENV["EXCEPT"] + RUN = ENV["EXCEPT"].split(/[,: ]/).map{|x| [x.to_sym, false] }.to_h + RUN.default = true +else + RUN = Hash.new(true) +end + +def benchmark_parsing(name, json_output) + puts "== Parsing #{name} (#{json_output.size} bytes)" + + Benchmark.ips do |x| + x.report("json") { JSON.parse(json_output) } if RUN[:json] + x.report("oj") { Oj.load(json_output) } if RUN[:oj] + x.report("oj strict") { Oj.strict_load(json_output) } if RUN[:oj] + x.report("Oj::Parser") { Oj::Parser.usual.parse(json_output) } if RUN[:oj] + x.report("rapidjson") { RapidJSON.parse(json_output) } if RUN[:rapidjson] + x.compare!(order: :baseline) + end + puts +end + +benchmark_parsing "small nested array", JSON.dump([[1,2,3,4,5]]*10) +benchmark_parsing "small hash", JSON.dump({ "username" => "jhawthorn", "id" => 123, "event" => "wrote json serializer" }) + +benchmark_parsing "test from oj", < 0 + s << strftime(".%#{fraction_digits}N") + end + s << (utc? ? 'Z' : strftime("%:z")) + end + end + end + time = Time.now + utc_time = Time.now.utc + fraction_sec = Time.at(123456789.quo(9999999999)).getlocal("+09:00") + future_time = Time.utc(10000) +benchmark: + - time.xmlschema + - utc_time.xmlschema + - time.xmlschema(6) + - utc_time.xmlschema(6) + - time.xmlschema(9) + - utc_time.xmlschema(9) + - fraction_sec.xmlschema(10) + - future_time.xmlschema diff --git a/bootstraptest/test_eval.rb b/bootstraptest/test_eval.rb index d923a957bcbd27..20bd9615f4561c 100644 --- a/bootstraptest/test_eval.rb +++ b/bootstraptest/test_eval.rb @@ -217,7 +217,7 @@ def initialize &b } %w[break next redo].each do |keyword| - assert_match %r"Can't escape from eval with #{keyword}\b", %{ + assert_match %r"Invalid #{keyword}\b", %{ $stderr = STDOUT begin eval "0 rescue #{keyword}" diff --git a/bootstraptest/test_literal.rb b/bootstraptest/test_literal.rb index a30661a7960d44..7295f7a148eed3 100644 --- a/bootstraptest/test_literal.rb +++ b/bootstraptest/test_literal.rb @@ -119,14 +119,14 @@ assert_equal 'bar', '[*:foo];:bar' assert_equal '[1, 2]', 'def nil.to_a; [2]; end; [1, *nil]' assert_equal '[1, 2]', 'def nil.to_a; [1, 2]; end; [*nil]' -assert_equal '[0, 1, {2=>3}]', '[0, *[1], 2=>3]', "[ruby-dev:31592]" +assert_equal '[0, 1, {2 => 3}]', '[0, *[1], 2=>3]', "[ruby-dev:31592]" # hash assert_equal 'Hash', '{}.class' assert_equal '{}', '{}.inspect' assert_equal 'Hash', '{1=>2}.class' -assert_equal '{1=>2}', '{1=>2}.inspect' +assert_equal '{1 => 2}', '{1=>2}.inspect' assert_equal '2', 'h = {1 => 2}; h[1]' assert_equal '0', 'h = {1 => 2}; h.delete(1); h.size' assert_equal '', 'h = {1 => 2}; h.delete(1); h[1]' diff --git a/bootstraptest/test_ractor.rb b/bootstraptest/test_ractor.rb index 53ad1b5783ec33..0991a7541eac49 100644 --- a/bootstraptest/test_ractor.rb +++ b/bootstraptest/test_ractor.rb @@ -573,7 +573,7 @@ def test n } # threads in a ractor will killed -assert_equal '{:ok=>3}', %q{ +assert_equal '{ok: 3}', %q{ Ractor.new Ractor.current do |main| q = Thread::Queue.new Thread.new do diff --git a/bootstraptest/test_yjit.rb b/bootstraptest/test_yjit.rb index 1a14dd8eafc99e..e72d4edcb9a26a 100644 --- a/bootstraptest/test_yjit.rb +++ b/bootstraptest/test_yjit.rb @@ -1800,7 +1800,7 @@ def build_hash } # test building hash with values -assert_equal '{:foo=>:bar}', %q{ +assert_equal '{foo: :bar}', %q{ def build_hash(val) { foo: val } end @@ -3377,7 +3377,7 @@ def foo(required:, specified: 999, simple_default: 3, complex_default: "4".to_i) } # cfunc kwargs -assert_equal '{:foo=>123}', %q{ +assert_equal '{foo: 123}', %q{ def foo(bar) bar.store(:value, foo: 123) bar[:value] @@ -3388,7 +3388,7 @@ def foo(bar) } # cfunc kwargs -assert_equal '{:foo=>123}', %q{ +assert_equal '{foo: 123}', %q{ def foo(bar) bar.replace(foo: 123) end @@ -3398,7 +3398,7 @@ def foo(bar) } # cfunc kwargs -assert_equal '{:foo=>123, :bar=>456}', %q{ +assert_equal '{foo: 123, bar: 456}', %q{ def foo(bar) bar.replace(foo: 123, bar: 456) end @@ -3408,7 +3408,7 @@ def foo(bar) } # variadic cfunc kwargs -assert_equal '{:foo=>123}', %q{ +assert_equal '{foo: 123}', %q{ def foo(bar) bar.merge(foo: 123) end @@ -3532,7 +3532,7 @@ def initialize(title) } # duphash -assert_equal '{:foo=>123}', %q{ +assert_equal '{foo: 123}', %q{ def foo {foo: 123} end @@ -3542,7 +3542,7 @@ def foo } # newhash -assert_equal '{:foo=>2}', %q{ +assert_equal '{foo: 2}', %q{ def foo {foo: 1+1} end @@ -4351,7 +4351,7 @@ def literal_append(sql, v) # Rest with block # Simplified code from railsbench -assert_equal '[{"/a"=>"b", :as=>:c, :via=>:post}, [], nil]', %q{ +assert_equal '[{"/a" => "b", as: :c, via: :post}, [], nil]', %q{ def match(path, *rest, &block) [path, rest, block] end @@ -4612,7 +4612,7 @@ def defined_yield = defined?(yield) } # splat with ruby2_keywords into rest parameter -assert_equal '[[{:a=>1}], {}]', %q{ +assert_equal '[[{a: 1}], {}]', %q{ ruby2_keywords def foo(*args) = args def bar(*args, **kw) = [args, kw] @@ -4653,7 +4653,7 @@ def try = foo(0, &nil) } # a kwrest case -assert_equal '[1, 2, {:complete=>false}]', %q{ +assert_equal '[1, 2, {complete: false}]', %q{ def rest(foo: 1, bar: 2, **kwrest) [foo, bar, kwrest] end @@ -4712,7 +4712,7 @@ def test_cfunc_vargs_splat(sub_instance, array_class, empty_kw_hash) } # Class#new (arity=-1), splat, and ruby2_keywords -assert_equal '[0, {1=>1}]', %q{ +assert_equal '[0, {1 => 1}]', %q{ class KwInit attr_reader :init_args def initialize(x = 0, **kw) diff --git a/builtin.c b/builtin.c index fbc11bf1b47ad4..3bde2408f8bb3e 100644 --- a/builtin.c +++ b/builtin.c @@ -7,7 +7,7 @@ #ifndef BUILTIN_BINARY_SIZE -#define INCLUDED_BY_BUILTIN_C 1 +#define BUILTIN_LOADED(feature_name, iseq) ((void)0) #include "mini_builtin.c" #else diff --git a/builtin.h b/builtin.h index 24aa7c2fdb2fca..f23c0a7dad6788 100644 --- a/builtin.h +++ b/builtin.h @@ -15,7 +15,7 @@ struct rb_builtin_function { #define RB_BUILTIN_FUNCTION(_i, _name, _fname, _arity) {\ .name = _i < 0 ? NULL : #_name, \ - .func_ptr = (void *)_fname, \ + .func_ptr = (void *)(uintptr_t)_fname, \ .argc = _arity, \ .index = _i, \ } diff --git a/class.c b/class.c index 5cce99e334d8b1..c0920e111de64a 100644 --- a/class.c +++ b/class.c @@ -1272,7 +1272,7 @@ static int do_include_modules_at(const VALUE klass, VALUE c, VALUE module, int search_super, bool check_cyclic) { VALUE p, iclass, origin_stack = 0; - int method_changed = 0, add_subclass; + int method_changed = 0; long origin_len; VALUE klass_origin = RCLASS_ORIGIN(klass); VALUE original_klass = klass; @@ -1336,7 +1336,6 @@ do_include_modules_at(const VALUE klass, VALUE c, VALUE module, int search_super iclass = rb_include_class_new(module, super_class); c = RCLASS_SET_SUPER(c, iclass); RCLASS_SET_INCLUDER(iclass, klass); - add_subclass = TRUE; if (module != RCLASS_ORIGIN(module)) { if (!origin_stack) origin_stack = rb_ary_hidden_new(2); VALUE origin[2] = {iclass, RCLASS_ORIGIN(module)}; @@ -1347,14 +1346,11 @@ do_include_modules_at(const VALUE klass, VALUE c, VALUE module, int search_super RCLASS_SET_ORIGIN(RARRAY_AREF(origin_stack, (origin_len -= 2)), iclass); RICLASS_SET_ORIGIN_SHARED_MTBL(iclass); rb_ary_resize(origin_stack, origin_len); - add_subclass = FALSE; } - if (add_subclass) { - VALUE m = module; - if (BUILTIN_TYPE(m) == T_ICLASS) m = METACLASS_OF(m); - rb_module_add_to_subclasses_list(m, iclass); - } + VALUE m = module; + if (BUILTIN_TYPE(m) == T_ICLASS) m = METACLASS_OF(m); + rb_module_add_to_subclasses_list(m, iclass); if (BUILTIN_TYPE(klass) == T_MODULE && FL_TEST(klass, RMODULE_IS_REFINEMENT)) { VALUE refined_class = diff --git a/common.mk b/common.mk index 350a2984522147..dc99518e3bf0c7 100644 --- a/common.mk +++ b/common.mk @@ -6,7 +6,7 @@ bin: $(PROGRAM) $(WPROGRAM) lib: $(LIBRUBY) dll: $(LIBRUBY_SO) -.SUFFIXES: .rbinc .rb .inc .h .c .y .i .$(ASMEXT) .$(DTRACE_EXT) +.SUFFIXES: .rbinc .rbbin .rb .inc .h .c .y .i .$(ASMEXT) .$(DTRACE_EXT) # V=0 quiet, V=1 verbose. other values don't work. V = 0 @@ -70,7 +70,6 @@ HTMLOUT = $(EXTOUT)/html CAPIOUT = doc/capi INSTALL_DOC_OPTS = --rdoc-output="$(RDOCOUT)" --html-output="$(HTMLOUT)" RDOC_GEN_OPTS = --no-force-update \ - --title "Documentation for Ruby $(RUBY_API_VERSION)" \ $(empty) INITOBJS = dmyext.$(OBJEXT) dmyenc.$(OBJEXT) @@ -292,7 +291,7 @@ DEFAULT_PRELUDES = $(GEM_PRELUDE) PRELUDE_SCRIPTS = $(DEFAULT_PRELUDES) GEM_PRELUDE = PRELUDES = {$(srcdir)}miniprelude.c -GOLFPRELUDES = {$(srcdir)}golf_prelude.c +GOLFPRELUDES = golf_prelude.rbbin SCRIPT_ARGS = --dest-dir="$(DESTDIR)" \ --extout="$(EXTOUT)" \ @@ -760,7 +759,7 @@ clean-rubyspec: clean-spec distclean: distclean-ext distclean-enc distclean-golf distclean-docs distclean-extout distclean-local distclean-platform distclean-spec distclean-local:: clean-local - $(Q)$(RM) $(MKFILES) yasmdata.rb *.inc $(PRELUDES) *.rbinc + $(Q)$(RM) $(MKFILES) yasmdata.rb *.inc $(PRELUDES) *.rbinc *.rbbin $(Q)$(RM) config.cache config.status config.status.lineno $(Q)$(RM) *~ *.bak *.stackdump core *.core gmon.out $(PREP) -$(Q)$(RMALL) $(srcdir)/autom4te.cache @@ -1306,10 +1305,7 @@ $(MINIPRELUDE_C): $(COMPILE_PRELUDE) $(BUILTIN_RB_SRCS) $(Q) $(BASERUBY) $(tooldir)/generic_erb.rb -I$(srcdir) -o $@ \ $(srcdir)/template/prelude.c.tmpl $(BUILTIN_RB_SRCS) -$(GOLF_PRELUDE_C): $(COMPILE_PRELUDE) {$(srcdir)}golf_prelude.rb - $(ECHO) generating $@ - $(Q) $(BASERUBY) $(tooldir)/generic_erb.rb -I$(srcdir) -c -o $@ \ - $(srcdir)/template/prelude.c.tmpl golf_prelude.rb +golf_prelude.rbbin: {$(srcdir)}golf_prelude.rb $(tooldir)/mk_rbbin.rb $(PREP) MAINCPPFLAGS = $(ENABLE_DEBUG_ENV:yes=-DRUBY_DEBUG_ENV=1) @@ -1327,7 +1323,10 @@ probes.h: {$(VPATH)}probes.$(DTRACE_EXT) prereq: incs srcs preludes PHONY preludes: {$(VPATH)}miniprelude.c -preludes: {$(srcdir)}golf_prelude.c + +{$(srcdir)}.rb.rbbin: + $(ECHO) making $@ + $(Q) $(MINIRUBY) $(tooldir)/mk_rbbin.rb $< > $@ {$(srcdir)}.rb.rbinc: $(ECHO) making $@ @@ -1914,10 +1913,10 @@ shared-gc: probes.h elif test -z $(SHARED_GC); then \ echo "You must specify SHARED_GC with the GC to build"; \ exit 1; \ - else \ - echo generating $(shared_gc_dir)librubygc.$(SHARED_GC).$(SOEXT); \ - $(LDSHARED) -I$(srcdir)/include -I$(srcdir) -I$(arch_hdrdir) $(XDLDFLAGS) $(cflags) -DBUILDING_SHARED_GC -fPIC -o $(shared_gc_dir)librubygc.$(SHARED_GC).$(SOEXT) $(srcdir)/gc/$(SHARED_GC).c; \ fi + $(ECHO) generating $(shared_gc_dir)librubygc.$(SHARED_GC).$(SOEXT) + $(Q) $(MAKEDIRS) $(shared_gc_dir) + $(Q) $(LDSHARED) -I$(srcdir)/include -I$(srcdir) -I$(arch_hdrdir) $(XDLDFLAGS) $(cflags) -DBUILDING_SHARED_GC -fPIC -o $(shared_gc_dir)librubygc.$(SHARED_GC).$(SOEXT) $(srcdir)/gc/$(SHARED_GC).c help: PHONY $(MESSAGE_BEGIN) \ @@ -7569,7 +7568,7 @@ goruby.$(OBJEXT): {$(VPATH)}config.h goruby.$(OBJEXT): {$(VPATH)}constant.h goruby.$(OBJEXT): {$(VPATH)}defines.h goruby.$(OBJEXT): {$(VPATH)}encoding.h -goruby.$(OBJEXT): {$(VPATH)}golf_prelude.c +goruby.$(OBJEXT): {$(VPATH)}golf_prelude.rbbin goruby.$(OBJEXT): {$(VPATH)}goruby.c goruby.$(OBJEXT): {$(VPATH)}id.h goruby.$(OBJEXT): {$(VPATH)}id_table.h @@ -8606,6 +8605,7 @@ io_buffer.$(OBJEXT): $(top_srcdir)/internal/bits.h io_buffer.$(OBJEXT): $(top_srcdir)/internal/compilers.h io_buffer.$(OBJEXT): $(top_srcdir)/internal/error.h io_buffer.$(OBJEXT): $(top_srcdir)/internal/fixnum.h +io_buffer.$(OBJEXT): $(top_srcdir)/internal/io.h io_buffer.$(OBJEXT): $(top_srcdir)/internal/numeric.h io_buffer.$(OBJEXT): $(top_srcdir)/internal/serial.h io_buffer.$(OBJEXT): $(top_srcdir)/internal/static_assert.h @@ -12836,6 +12836,8 @@ prism/node.$(OBJEXT): {$(VPATH)}prism/node.c prism/options.$(OBJEXT): $(top_srcdir)/prism/defines.h prism/options.$(OBJEXT): $(top_srcdir)/prism/options.c prism/options.$(OBJEXT): $(top_srcdir)/prism/options.h +prism/options.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.h +prism/options.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h prism/options.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.h prism/pack.$(OBJEXT): $(top_srcdir)/prism/defines.h prism/pack.$(OBJEXT): $(top_srcdir)/prism/pack.c @@ -15955,6 +15957,7 @@ rjit_c.$(OBJEXT): $(hdrdir)/ruby/ruby.h rjit_c.$(OBJEXT): $(srcdir)/rjit_c.rb rjit_c.$(OBJEXT): $(top_srcdir)/internal/array.h rjit_c.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h +rjit_c.$(OBJEXT): $(top_srcdir)/internal/bits.h rjit_c.$(OBJEXT): $(top_srcdir)/internal/class.h rjit_c.$(OBJEXT): $(top_srcdir)/internal/compile.h rjit_c.$(OBJEXT): $(top_srcdir)/internal/compilers.h @@ -19142,6 +19145,7 @@ time.$(OBJEXT): {$(VPATH)}thread_native.h time.$(OBJEXT): {$(VPATH)}time.c time.$(OBJEXT): {$(VPATH)}timev.h time.$(OBJEXT): {$(VPATH)}timev.rbinc +time.$(OBJEXT): {$(VPATH)}util.h time.$(OBJEXT): {$(VPATH)}vm_core.h time.$(OBJEXT): {$(VPATH)}vm_opts.h transcode.$(OBJEXT): $(hdrdir)/ruby/ruby.h @@ -19733,6 +19737,7 @@ version.$(OBJEXT): $(top_srcdir)/internal/cmdlineopt.h version.$(OBJEXT): $(top_srcdir)/internal/compilers.h version.$(OBJEXT): $(top_srcdir)/internal/gc.h version.$(OBJEXT): $(top_srcdir)/internal/imemo.h +version.$(OBJEXT): $(top_srcdir)/internal/parse.h version.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h version.$(OBJEXT): $(top_srcdir)/internal/serial.h version.$(OBJEXT): $(top_srcdir)/internal/static_assert.h diff --git a/compar.c b/compar.c index 081b4e2dea9f44..8d7a2081858789 100644 --- a/compar.c +++ b/compar.c @@ -293,7 +293,7 @@ cmp_clamp(int argc, VALUE *argv, VALUE x) * * == What's Here * - * \Module \Comparable provides these methods, all of which use method <=>: + * \Module \Comparable provides these methods, all of which use method #<=>: * * - #<: Returns whether +self+ is less than the given object. * - #<=: Returns whether +self+ is less than or equal to the given object. diff --git a/compile.c b/compile.c index f1d84156cf8780..29a32770d6ccdc 100644 --- a/compile.c +++ b/compile.c @@ -498,7 +498,7 @@ static int iseq_set_sequence(rb_iseq_t *iseq, LINK_ANCHOR *const anchor); static int iseq_set_exception_table(rb_iseq_t *iseq); static int iseq_set_optargs_table(rb_iseq_t *iseq); -static int compile_defined_expr(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, VALUE needstr); +static int compile_defined_expr(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, VALUE needstr, bool ignore); static int compile_hash(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *node, int method_call_keywords, int popped); /* @@ -615,12 +615,25 @@ branch_coverage_valid_p(rb_iseq_t *iseq, int first_line) #define PTR2NUM(x) (rb_int2inum((intptr_t)(void *)(x))) static VALUE -decl_branch_base(rb_iseq_t *iseq, VALUE key, const rb_code_location_t *loc, const char *type) +setup_branch(const rb_code_location_t *loc, const char *type, VALUE structure, VALUE key) { const int first_lineno = loc->beg_pos.lineno, first_column = loc->beg_pos.column; const int last_lineno = loc->end_pos.lineno, last_column = loc->end_pos.column; + VALUE branch = rb_ary_hidden_new(6); - if (!branch_coverage_valid_p(iseq, first_lineno)) return Qundef; + rb_hash_aset(structure, key, branch); + rb_ary_push(branch, ID2SYM(rb_intern(type))); + rb_ary_push(branch, INT2FIX(first_lineno)); + rb_ary_push(branch, INT2FIX(first_column)); + rb_ary_push(branch, INT2FIX(last_lineno)); + rb_ary_push(branch, INT2FIX(last_column)); + return branch; +} + +static VALUE +decl_branch_base(rb_iseq_t *iseq, VALUE key, const rb_code_location_t *loc, const char *type) +{ + if (!branch_coverage_valid_p(iseq, loc->beg_pos.lineno)) return Qundef; /* * if !structure[node] @@ -635,13 +648,7 @@ decl_branch_base(rb_iseq_t *iseq, VALUE key, const rb_code_location_t *loc, cons VALUE branches; if (NIL_P(branch_base)) { - branch_base = rb_ary_hidden_new(6); - rb_hash_aset(structure, key, branch_base); - rb_ary_push(branch_base, ID2SYM(rb_intern(type))); - rb_ary_push(branch_base, INT2FIX(first_lineno)); - rb_ary_push(branch_base, INT2FIX(first_column)); - rb_ary_push(branch_base, INT2FIX(last_lineno)); - rb_ary_push(branch_base, INT2FIX(last_column)); + branch_base = setup_branch(loc, type, structure, key); branches = rb_hash_new(); rb_obj_hide(branches); rb_ary_push(branch_base, branches); @@ -665,10 +672,7 @@ generate_dummy_line_node(int lineno, int node_id) static void add_trace_branch_coverage(rb_iseq_t *iseq, LINK_ANCHOR *const seq, const rb_code_location_t *loc, int node_id, int branch_id, const char *type, VALUE branches) { - const int first_lineno = loc->beg_pos.lineno, first_column = loc->beg_pos.column; - const int last_lineno = loc->end_pos.lineno, last_column = loc->end_pos.column; - - if (!branch_coverage_valid_p(iseq, first_lineno)) return; + if (!branch_coverage_valid_p(iseq, loc->beg_pos.lineno)) return; /* * if !branches[branch_id] @@ -683,13 +687,7 @@ add_trace_branch_coverage(rb_iseq_t *iseq, LINK_ANCHOR *const seq, const rb_code long counter_idx; if (NIL_P(branch)) { - branch = rb_ary_hidden_new(6); - rb_hash_aset(branches, key, branch); - rb_ary_push(branch, ID2SYM(rb_intern(type))); - rb_ary_push(branch, INT2FIX(first_lineno)); - rb_ary_push(branch, INT2FIX(first_column)); - rb_ary_push(branch, INT2FIX(last_lineno)); - rb_ary_push(branch, INT2FIX(last_column)); + branch = setup_branch(loc, type, branches, key); VALUE counters = RARRAY_AREF(ISEQ_BRANCH_COVERAGE(iseq), 1); counter_idx = RARRAY_LEN(counters); rb_ary_push(branch, LONG2FIX(counter_idx)); @@ -700,7 +698,7 @@ add_trace_branch_coverage(rb_iseq_t *iseq, LINK_ANCHOR *const seq, const rb_code } ADD_TRACE_WITH_DATA(seq, RUBY_EVENT_COVERAGE_BRANCH, counter_idx); - ADD_SYNTHETIC_INSN(seq, last_lineno, node_id, nop); + ADD_SYNTHETIC_INSN(seq, loc->end_pos.lineno, node_id, nop); } #define ISEQ_LAST_LINE(iseq) (ISEQ_COMPILE_DATA(iseq)->last_line) @@ -1358,6 +1356,7 @@ new_label_body(rb_iseq_t *iseq, long line) labelobj->set = 0; labelobj->rescued = LABEL_RESCUE_NONE; labelobj->unremovable = 0; + labelobj->position = -1; return labelobj; } @@ -1994,10 +1993,7 @@ iseq_set_arguments_keywords(rb_iseq_t *iseq, LINK_ANCHOR *const optargs, for (i = 0; i < RARRAY_LEN(default_values); i++) { VALUE dv = RARRAY_AREF(default_values, i); if (dv == complex_mark) dv = Qundef; - if (!SPECIAL_CONST_P(dv)) { - RB_OBJ_WRITTEN(iseq, Qundef, dv); - } - dvs[i] = dv; + RB_OBJ_WRITE(iseq, &dvs[i], dv); } keyword->default_values = dvs; @@ -2471,6 +2467,7 @@ add_adjust_info(struct iseq_insn_info_entry *insns_info, unsigned int *positions int insns_info_index, int code_index, const ADJUST *adjust) { insns_info[insns_info_index].line_no = adjust->line_no; + insns_info[insns_info_index].node_id = -1; insns_info[insns_info_index].events = 0; positions[insns_info_index] = code_index; return TRUE; @@ -2885,11 +2882,16 @@ iseq_set_exception_table(rb_iseq_t *iseq) table->size = tlen; for (i = 0; i < table->size; i++) { + int pos; ptr = RARRAY_CONST_PTR(tptr[i]); entry = UNALIGNED_MEMBER_PTR(table, entries[i]); entry->type = (enum rb_catch_type)(ptr[0] & 0xffff); - entry->start = label_get_position((LABEL *)(ptr[1] & ~1)); - entry->end = label_get_position((LABEL *)(ptr[2] & ~1)); + pos = label_get_position((LABEL *)(ptr[1] & ~1)); + RUBY_ASSERT(pos >= 0); + entry->start = (unsigned int)pos; + pos = label_get_position((LABEL *)(ptr[2] & ~1)); + RUBY_ASSERT(pos >= 0); + entry->end = (unsigned int)pos; entry->iseq = (rb_iseq_t *)ptr[3]; RB_OBJ_WRITTEN(iseq, Qundef, entry->iseq); @@ -3238,6 +3240,8 @@ ci_argc_set(const rb_iseq_t *iseq, const struct rb_callinfo *ci, int argc) return nci; } +#define vm_ci_simple(ci) (vm_ci_flag(ci) & VM_CALL_ARGS_SIMPLE) + static int iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcallopt) { @@ -3404,6 +3408,104 @@ iseq_peephole_optimize(rb_iseq_t *iseq, LINK_ELEMENT *list, const int do_tailcal } } + /* + * duparray [...] + * send , nil + * => + * opt_ary_freeze [...], + */ + if (IS_INSN_ID(iobj, duparray)) { + LINK_ELEMENT *next = iobj->link.next; + if (IS_INSN(next) && (IS_INSN_ID(next, send))) { + const struct rb_callinfo *ci = (struct rb_callinfo *)OPERAND_AT(next, 0); + const rb_iseq_t *blockiseq = (rb_iseq_t *)OPERAND_AT(next, 1); + + if (vm_ci_simple(ci) && vm_ci_argc(ci) == 0 && blockiseq == NULL && vm_ci_mid(ci) == idFreeze) { + VALUE ary = iobj->operands[0]; + rb_obj_reveal(ary, rb_cArray); + + iobj->insn_id = BIN(opt_ary_freeze); + iobj->operand_size = 2; + iobj->operands = compile_data_calloc2(iseq, iobj->operand_size, sizeof(VALUE)); + iobj->operands[0] = ary; + iobj->operands[1] = (VALUE)ci; + ELEM_REMOVE(next); + } + } + } + + /* + * duphash {...} + * send , nil + * => + * opt_hash_freeze {...}, + */ + if (IS_INSN_ID(iobj, duphash)) { + LINK_ELEMENT *next = iobj->link.next; + if (IS_INSN(next) && (IS_INSN_ID(next, send))) { + const struct rb_callinfo *ci = (struct rb_callinfo *)OPERAND_AT(next, 0); + const rb_iseq_t *blockiseq = (rb_iseq_t *)OPERAND_AT(next, 1); + + if (vm_ci_simple(ci) && vm_ci_argc(ci) == 0 && blockiseq == NULL && vm_ci_mid(ci) == idFreeze) { + VALUE hash = iobj->operands[0]; + rb_obj_reveal(hash, rb_cHash); + + iobj->insn_id = BIN(opt_hash_freeze); + iobj->operand_size = 2; + iobj->operands = compile_data_calloc2(iseq, iobj->operand_size, sizeof(VALUE)); + iobj->operands[0] = hash; + iobj->operands[1] = (VALUE)ci; + ELEM_REMOVE(next); + } + } + } + + /* + * newarray 0 + * send , nil + * => + * opt_ary_freeze [], + */ + if (IS_INSN_ID(iobj, newarray) && iobj->operands[0] == INT2FIX(0)) { + LINK_ELEMENT *next = iobj->link.next; + if (IS_INSN(next) && (IS_INSN_ID(next, send))) { + const struct rb_callinfo *ci = (struct rb_callinfo *)OPERAND_AT(next, 0); + const rb_iseq_t *blockiseq = (rb_iseq_t *)OPERAND_AT(next, 1); + + if (vm_ci_simple(ci) && vm_ci_argc(ci) == 0 && blockiseq == NULL && vm_ci_mid(ci) == idFreeze) { + iobj->insn_id = BIN(opt_ary_freeze); + iobj->operand_size = 2; + iobj->operands = compile_data_calloc2(iseq, iobj->operand_size, sizeof(VALUE)); + iobj->operands[0] = rb_cArray_empty_frozen; + iobj->operands[1] = (VALUE)ci; + ELEM_REMOVE(next); + } + } + } + + /* + * newhash 0 + * send , nil + * => + * opt_hash_freeze {}, + */ + if (IS_INSN_ID(iobj, newhash) && iobj->operands[0] == INT2FIX(0)) { + LINK_ELEMENT *next = iobj->link.next; + if (IS_INSN(next) && (IS_INSN_ID(next, send))) { + const struct rb_callinfo *ci = (struct rb_callinfo *)OPERAND_AT(next, 0); + const rb_iseq_t *blockiseq = (rb_iseq_t *)OPERAND_AT(next, 1); + + if (vm_ci_simple(ci) && vm_ci_argc(ci) == 0 && blockiseq == NULL && vm_ci_mid(ci) == idFreeze) { + iobj->insn_id = BIN(opt_hash_freeze); + iobj->operand_size = 2; + iobj->operands = compile_data_calloc2(iseq, iobj->operand_size, sizeof(VALUE)); + iobj->operands[0] = rb_cHash_empty_frozen; + iobj->operands[1] = (VALUE)ci; + ELEM_REMOVE(next); + } + } + } + if (IS_INSN_ID(iobj, branchif) || IS_INSN_ID(iobj, branchnil) || IS_INSN_ID(iobj, branchunless)) { @@ -3989,8 +4091,6 @@ insn_set_specialized_instruction(rb_iseq_t *iseq, INSN *iobj, int insn_id) return COMPILE_OK; } -#define vm_ci_simple(ci) (vm_ci_flag(ci) & VM_CALL_ARGS_SIMPLE) - static int iseq_specialized_instruction(rb_iseq_t *iseq, INSN *iobj) { @@ -4549,7 +4649,7 @@ compile_branch_condition(rb_iseq_t *iseq, LINK_ANCHOR *ret, const NODE *cond, CHECK(compile_flip_flop(iseq, ret, cond, FALSE, then_label, else_label)); return COMPILE_OK; case NODE_DEFINED: - CHECK(compile_defined_expr(iseq, ret, cond, Qfalse)); + CHECK(compile_defined_expr(iseq, ret, cond, Qfalse, ret == ignore)); break; default: { @@ -5772,7 +5872,7 @@ private_recv_p(const NODE *node) static void defined_expr(rb_iseq_t *iseq, LINK_ANCHOR *const ret, - const NODE *const node, LABEL **lfinish, VALUE needstr); + const NODE *const node, LABEL **lfinish, VALUE needstr, bool ignore); static int compile_call(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, const enum node_type type, const NODE *const line_node, int popped, bool assume_receiver); @@ -6013,7 +6113,7 @@ build_defined_rescue_iseq(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const void *u static void defined_expr(rb_iseq_t *iseq, LINK_ANCHOR *const ret, - const NODE *const node, LABEL **lfinish, VALUE needstr) + const NODE *const node, LABEL **lfinish, VALUE needstr, bool ignore) { LINK_ELEMENT *lcur = ret->last; defined_expr0(iseq, ret, node, lfinish, needstr, false); @@ -6032,12 +6132,14 @@ defined_expr(rb_iseq_t *iseq, LINK_ANCHOR *const ret, lend->rescued = LABEL_RESCUE_END; APPEND_LABEL(ret, lcur, lstart); ADD_LABEL(ret, lend); - ADD_CATCH_ENTRY(CATCH_TYPE_RESCUE, lstart, lend, rescue, lfinish[1]); + if (!ignore) { + ADD_CATCH_ENTRY(CATCH_TYPE_RESCUE, lstart, lend, rescue, lfinish[1]); + } } } static int -compile_defined_expr(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, VALUE needstr) +compile_defined_expr(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, VALUE needstr, bool ignore) { const int line = nd_line(node); const NODE *line_node = node; @@ -6051,7 +6153,7 @@ compile_defined_expr(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const lfinish[0] = NEW_LABEL(line); lfinish[1] = 0; lfinish[2] = 0; - defined_expr(iseq, ret, RNODE_DEFINED(node)->nd_head, lfinish, needstr); + defined_expr(iseq, ret, RNODE_DEFINED(node)->nd_head, lfinish, needstr, ignore); if (lfinish[1]) { ELEM_INSERT_NEXT(last, &new_insn_body(iseq, nd_line(line_node), nd_node_id(line_node), BIN(putnil), 0)->link); ADD_INSN(ret, line_node, swap); @@ -6195,6 +6297,21 @@ keyword_node_single_splat_p(NODE *kwnode) RNODE_LIST(RNODE_LIST(node)->nd_next)->nd_next == NULL; } +static void +compile_single_keyword_splat_mutable(rb_iseq_t *iseq, LINK_ANCHOR *const args, const NODE *argn, + NODE *kwnode, unsigned int *flag_ptr) +{ + *flag_ptr |= VM_CALL_KW_SPLAT_MUT; + ADD_INSN1(args, argn, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE)); + ADD_INSN1(args, argn, newhash, INT2FIX(0)); + compile_hash(iseq, args, kwnode, TRUE, FALSE); + ADD_SEND(args, argn, id_core_hash_merge_kwd, INT2FIX(2)); +} + +#define SPLATARRAY_FALSE 0 +#define SPLATARRAY_TRUE 1 +#define DUP_SINGLE_KW_SPLAT 2 + static int setup_args_core(rb_iseq_t *iseq, LINK_ANCHOR *const args, const NODE *argn, unsigned int *dup_rest, unsigned int *flag_ptr, struct rb_callinfo_kwarg **kwarg_ptr) @@ -6214,7 +6331,12 @@ setup_args_core(rb_iseq_t *iseq, LINK_ANCHOR *const args, const NODE *argn, len -= 1; } else { - compile_hash(iseq, args, kwnode, TRUE, FALSE); + if (keyword_node_single_splat_p(kwnode) && (*dup_rest & DUP_SINGLE_KW_SPLAT)) { + compile_single_keyword_splat_mutable(iseq, args, argn, kwnode, flag_ptr); + } + else { + compile_hash(iseq, args, kwnode, TRUE, FALSE); + } } } @@ -6223,8 +6345,8 @@ setup_args_core(rb_iseq_t *iseq, LINK_ANCHOR *const args, const NODE *argn, case NODE_SPLAT: { // f(*a) NO_CHECK(COMPILE(args, "args (splat)", RNODE_SPLAT(argn)->nd_head)); - ADD_INSN1(args, argn, splatarray, RBOOL(*dup_rest)); - if (*dup_rest) *dup_rest = 0; + ADD_INSN1(args, argn, splatarray, RBOOL(*dup_rest & SPLATARRAY_TRUE)); + if (*dup_rest & SPLATARRAY_TRUE) *dup_rest &= ~SPLATARRAY_TRUE; if (flag_ptr) *flag_ptr |= VM_CALL_ARGS_SPLAT; RUBY_ASSERT(flag_ptr == NULL || (*flag_ptr & VM_CALL_KW_SPLAT) == 0); return 1; @@ -6246,8 +6368,8 @@ setup_args_core(rb_iseq_t *iseq, LINK_ANCHOR *const args, const NODE *argn, } if (nd_type_p(RNODE_ARGSCAT(argn)->nd_head, NODE_LIST)) { - ADD_INSN1(args, argn, splatarray, RBOOL(*dup_rest)); - if (*dup_rest) *dup_rest = 0; + ADD_INSN1(args, argn, splatarray, RBOOL(*dup_rest & SPLATARRAY_TRUE)); + if (*dup_rest & SPLATARRAY_TRUE) *dup_rest &= ~SPLATARRAY_TRUE; argc += 1; } else if (!args_pushed) { @@ -6289,8 +6411,14 @@ setup_args_core(rb_iseq_t *iseq, LINK_ANCHOR *const args, const NODE *argn, *flag_ptr |= VM_CALL_KW_SPLAT; if (!keyword_node_single_splat_p(kwnode)) { *flag_ptr |= VM_CALL_KW_SPLAT_MUT; + compile_hash(iseq, args, kwnode, TRUE, FALSE); + } + else if (*dup_rest & DUP_SINGLE_KW_SPLAT) { + compile_single_keyword_splat_mutable(iseq, args, argn, kwnode, flag_ptr); + } + else { + compile_hash(iseq, args, kwnode, TRUE, FALSE); } - compile_hash(iseq, args, kwnode, TRUE, FALSE); argc += 1; } @@ -6348,7 +6476,7 @@ setup_args(rb_iseq_t *iseq, LINK_ANCHOR *const args, const NODE *argn, unsigned int *flag, struct rb_callinfo_kwarg **keywords) { VALUE ret; - unsigned int dup_rest = 1, initial_dup_rest; + unsigned int dup_rest = SPLATARRAY_TRUE, initial_dup_rest; if (argn) { const NODE *check_arg = nd_type_p(argn, NODE_BLOCK_PASS) ? @@ -6358,7 +6486,7 @@ setup_args(rb_iseq_t *iseq, LINK_ANCHOR *const args, const NODE *argn, switch(nd_type(check_arg)) { case(NODE_SPLAT): // avoid caller side array allocation for f(*arg) - dup_rest = 0; + dup_rest = SPLATARRAY_FALSE; break; case(NODE_ARGSCAT): // avoid caller side array allocation for f(1, *arg) @@ -6372,20 +6500,20 @@ setup_args(rb_iseq_t *iseq, LINK_ANCHOR *const args, const NODE *argn, nd_type_p(RNODE_ARGSPUSH(check_arg)->nd_body, NODE_HASH) && !RNODE_HASH(RNODE_ARGSPUSH(check_arg)->nd_body)->nd_brace); - if (!dup_rest) { + if (dup_rest == SPLATARRAY_FALSE) { // require allocation for keyword key/value/splat that may modify splatted argument NODE *node = RNODE_HASH(RNODE_ARGSPUSH(check_arg)->nd_body)->nd_head; while (node) { NODE *key_node = RNODE_LIST(node)->nd_head; if (key_node && setup_args_dup_rest_p(key_node)) { - dup_rest = 1; + dup_rest = SPLATARRAY_TRUE; break; } node = RNODE_LIST(node)->nd_next; NODE *value_node = RNODE_LIST(node)->nd_head; if (setup_args_dup_rest_p(value_node)) { - dup_rest = 1; + dup_rest = SPLATARRAY_TRUE; break; } @@ -6398,9 +6526,9 @@ setup_args(rb_iseq_t *iseq, LINK_ANCHOR *const args, const NODE *argn, } } - if (!dup_rest && (check_arg != argn) && setup_args_dup_rest_p(RNODE_BLOCK_PASS(argn)->nd_body)) { - // require allocation for block pass that may modify splatted argument - dup_rest = 1; + if (check_arg != argn && setup_args_dup_rest_p(RNODE_BLOCK_PASS(argn)->nd_body)) { + // for block pass that may modify splatted argument, dup rest and kwrest if given + dup_rest = SPLATARRAY_TRUE | DUP_SINGLE_KW_SPLAT; } } initial_dup_rest = dup_rest; @@ -6584,7 +6712,12 @@ compile_if(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, int else_label = NEW_LABEL(line); end_label = 0; - CHECK(compile_branch_condition(iseq, cond_seq, RNODE_IF(node)->nd_cond, then_label, else_label)); + NODE *cond = RNODE_IF(node)->nd_cond; + if (nd_type(cond) == NODE_BLOCK) { + cond = RNODE_BLOCK(cond)->nd_head; + } + + CHECK(compile_branch_condition(iseq, cond_seq, cond, then_label, else_label)); ADD_SEQ(ret, cond_seq); if (then_label->refcnt && else_label->refcnt) { @@ -8068,7 +8201,7 @@ compile_iter(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, in // Normally, "send" instruction is at the last. // However, qcall under branch coverage measurement adds some instructions after the "send". // - // Note that "invokesuper" appears instead of "send". + // Note that "invokesuper", "invokesuperforward" appears instead of "send". INSN *iobj; LINK_ELEMENT *last_elem = LAST_ELEMENT(ret); iobj = IS_INSN(last_elem) ? (INSN*) last_elem : (INSN*) get_prev_insn((INSN*) last_elem); @@ -9017,7 +9150,7 @@ compile_builtin_function_call(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NOD if (cconst) { typedef VALUE(*builtin_func0)(void *, VALUE); - VALUE const_val = (*(builtin_func0)bf->func_ptr)(NULL, Qnil); + VALUE const_val = (*(builtin_func0)(uintptr_t)bf->func_ptr)(NULL, Qnil); ADD_INSN1(ret, line_node, putobject, const_val); return COMPILE_OK; } @@ -9527,7 +9660,7 @@ compile_op_log(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const node, LABEL *lfinish[2]; lfinish[0] = lfin; lfinish[1] = 0; - defined_expr(iseq, ret, RNODE_OP_ASGN_OR(node)->nd_head, lfinish, Qfalse); + defined_expr(iseq, ret, RNODE_OP_ASGN_OR(node)->nd_head, lfinish, Qfalse, false); lassign = lfinish[1]; if (!lassign) { lassign = NEW_LABEL(line); @@ -11122,7 +11255,7 @@ iseq_compile_each0(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const NODE *const no break; case NODE_DEFINED: if (!popped) { - CHECK(compile_defined_expr(iseq, ret, node, Qtrue)); + CHECK(compile_defined_expr(iseq, ret, node, Qtrue, false)); } break; case NODE_POSTEXE:{ @@ -11842,7 +11975,7 @@ iseq_build_kw(rb_iseq_t *iseq, VALUE params, VALUE keywords) rb_raise(rb_eTypeError, "keyword default has unsupported len %+"PRIsVALUE, key); } ids[i] = SYM2ID(sym); - dvs[j] = default_val; + RB_OBJ_WRITE(iseq, &dvs[j], default_val); } keyword->table = ids; diff --git a/complex.c b/complex.c index f562ed316123c7..1d7ae694d50dde 100644 --- a/complex.c +++ b/complex.c @@ -1593,16 +1593,15 @@ f_tpositive_p(VALUE x) } static VALUE -f_format(VALUE self, VALUE (*func)(VALUE)) +f_format(VALUE self, VALUE s, VALUE (*func)(VALUE)) { - VALUE s; int impos; get_dat1(self); impos = f_tpositive_p(dat->imag); - s = (*func)(dat->real); + rb_str_concat(s, (*func)(dat->real)); rb_str_cat2(s, !impos ? "-" : "+"); rb_str_concat(s, (*func)(f_abs(dat->imag))); @@ -1629,7 +1628,7 @@ f_format(VALUE self, VALUE (*func)(VALUE)) static VALUE nucomp_to_s(VALUE self) { - return f_format(self, rb_String); + return f_format(self, rb_usascii_str_new2(""), rb_String); } /* @@ -1651,7 +1650,7 @@ nucomp_inspect(VALUE self) VALUE s; s = rb_usascii_str_new2("("); - rb_str_concat(s, f_format(self, rb_inspect)); + f_format(self, s, rb_inspect); rb_str_cat2(s, ")"); return s; @@ -2589,7 +2588,7 @@ float_arg(VALUE self) * - #as_json: Returns a serialized hash constructed from +self+. * - #to_json: Returns a JSON string representing +self+. * - * These methods are provided by the {JSON gem}[https://github.com/flori/json]. To make these methods available: + * These methods are provided by the {JSON gem}[https://github.com/ruby/json]. To make these methods available: * * require 'json/add/complex' * diff --git a/configure.ac b/configure.ac index 4184ab00350dbb..f9eb38707c0c44 100644 --- a/configure.ac +++ b/configure.ac @@ -663,9 +663,9 @@ RUBY_WERROR_FLAG([ [enable_rpath=$enableval], [enable_rpath="$rb_cv_binary_elf"]) AS_IF([test "$enable_rpath:${RPATHFLAG}" = yes:], [ - RPATHFLAG="${rpathflag:+ ${rpathflag}%1\$-s}" + RPATHFLAG="${rpathflag:+${rpathflag}%1\$-s}" ]) - AS_CASE([${RPATHFLAG}],[*'%1$'*],[: ${LIBPATHFLAG=' -L%1$-s'}],[: ${LIBPATHFLAG=' -L%s'}]) + AS_CASE([${RPATHFLAG}],[*'%1$'*],[: ${LIBPATHFLAG='-L%1$-s'}],[: ${LIBPATHFLAG='-L%s'}]) } RUBY_TRY_LDFLAGS(-fdeclspec, [fdeclspec=yes], [fdeclspec=no]) @@ -841,18 +841,38 @@ AS_IF([test "$GCC" = yes], [ # aarch64 branch protection AS_CASE(["$target_cpu"], [aarch64|arm64], [ - AS_FOR(option, opt, [-mbranch-protection=pac-ret -msign-return-address=all], [ - # Try these flags in the _prepended_ position - i.e. we want to try building a program - # with CFLAGS="-mbranch-protection=pac-ret $CFLAGS". If the builder has provided different - # branch protection flags in CFLAGS, we don't want to overwrite those. We just want to - # find some branch protection flags which work if none were provided. - RUBY_TRY_CFLAGS_PREPEND(option, [branch_protection=yes], [branch_protection=no]) - AS_IF([test "x$branch_protection" = xyes], [ - # _prepend_ the options to CFLAGS, so that user-provided flags will overwrite them. - # These CFLAGS are used during the configure script to compile further test programs; - # however, $harden_flags is prepended separately to CFLAGS at the end of the script. - RUBY_PREPEND_OPTION(hardenflags, $opt) - break + # LLVM libunwind is not actually capable of unwinding code compiled with pointer + # authentication unless it's built without LIBUNWIND_ENABLE_CROSS_UNWINDING (see + # https://github.com/llvm/llvm-project/blob/8e35c86977ce5529a9387657321ac9fefcdae5b5/libunwind/src/DwarfInstructions.hpp#L294) + # It seems that macOS ships LLVM compiled this way. + # Detect this and disable automatic insertion of pac-ret flags in that case, since we assume + # that reliable backtraces are more important than hardening flags. + AC_MSG_CHECKING([for a broken LLVM libunwind that cannot unwind code with RA signing]) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ + @%:@include + int foo = UNW_ECROSSRASIGNING; + ]])], + # If compilation succeeds, that means we a) had libunwind, and b) it was NOT native only + [rb_cv_libunwind_broken_ra_signing=yes], + # if compilation fails, that means we either a) do not have libunwind, or b) have it in + # native only mode (which is good!) + [rb_cv_libunwind_broken_ra_signing=no] + ) + AC_MSG_RESULT(["$rb_cv_libunwind_broken_ra_signing"]) + AS_IF([test "x$rb_cv_libunwind_broken_ra_signing" = "xno"], [ + AS_FOR(option, opt, [-mbranch-protection=pac-ret -msign-return-address=all], [ + # Try these flags in the _prepended_ position - i.e. we want to try building a program + # with CFLAGS="-mbranch-protection=pac-ret $CFLAGS". If the builder has provided different + # branch protection flags in CFLAGS, we don't want to overwrite those. We just want to + # find some branch protection flags which work if none were provided. + RUBY_TRY_CFLAGS_PREPEND(option, [branch_protection=yes], [branch_protection=no]) + AS_IF([test "x$branch_protection" = xyes], [ + # _prepend_ the options to CFLAGS, so that user-provided flags will overwrite them. + # These CFLAGS are used during the configure script to compile further test programs; + # however, $harden_flags is prepended separately to CFLAGS at the end of the script. + RUBY_PREPEND_OPTION(hardenflags, $opt) + break + ]) ]) ]) ]) @@ -2069,7 +2089,7 @@ AC_CHECK_FUNCS(_longjmp) # used for AC_ARG_WITH(setjmp-type) test x$ac_cv_func__longjmp = xno && ac_cv_func__setjmp=no AC_CHECK_FUNCS(arc4random_buf) AC_CHECK_FUNCS(atan2l atan2f) -AC_CHECK_DECLS(atomic_signal_fence, [], [], [#include ]) +AC_CHECK_DECLS(atomic_signal_fence, [], [], [@%:@include ]) AC_CHECK_FUNCS(chmod) AC_CHECK_FUNCS(chown) AC_CHECK_FUNCS(chroot) @@ -2732,6 +2752,12 @@ AS_CASE([$coroutine_type], [yes|''], [ [aarch64-freebsd*], [ coroutine_type=arm64 ], + [powerpc64-freebsd*], [ + coroutine_type=ppc64le + ], + [powerpc64le-freebsd*], [ + coroutine_type=ppc64le + ], [x86_64-netbsd*], [ coroutine_type=amd64 ], @@ -3694,16 +3720,16 @@ AS_CASE("$enable_shared", [yes], [ ]) ]) AS_IF([test "$enable_rpath" = yes], [ - test -z "$LIBRUBY_RPATHFLAGS" || LIBRUBY_RPATHFLAGS="$LIBRUBY_RPATHFLAGS " - rpathflag="${RPATHFLAG}" - AS_CASE(["${cross_compiling}${load_relative}"], [*yes*], [], [rpathflag="$RPATHFLAG$LIBPATHFLAG"]) + AS_CASE(["${cross_compiling}${load_relative}"], + [*yes*], [rpathflag="${RPATHFLAG}"], + [rpathflag="$RPATHFLAG${LIBPATHFLAG:+${RPATHFLAG:+ }$LIBPATHFLAG}"]) rpathflag=`IFS="$PATH_SEPARATOR" echo x "$rpathflag" | sed "s/^x *//;s${IFS}"'%1\\$-s'"${IFS}${libprefix}${IFS}g;s${IFS}%s${IFS}${libprefix}${IFS}g" ` - LIBRUBY_RPATHFLAGS="$LIBRUBY_RPATHFLAGS${rpathflag}" - LIBRUBYARG_SHARED="$LIBRUBY_RPATHFLAGS $LIBRUBYARG_SHARED" - LIBRUBYARG_STATIC="$LIBRUBY_RPATHFLAGS $LIBRUBYARG_STATIC" + LIBRUBY_RPATHFLAGS="${LIBRUBY_RPATHFLAGS:+$LIBRUBY_RPATHFLAGS }${rpathflag}" + LIBRUBYARG_SHARED="${LIBRUBY_RPATHFLAGS:+$LIBRUBY_RPATHFLAGS }$LIBRUBYARG_SHARED" + LIBRUBYARG_STATIC="${LIBRUBY_RPATHFLAGS:+$LIBRUBY_RPATHFLAGS }$LIBRUBYARG_STATIC" ]) AC_SUBST(LIBRUBY_RELATIVE) @@ -4538,6 +4564,17 @@ AS_IF([test x"$enable_rubygems" = xno], [ ]) AC_SUBST(USE_RUBYGEMS) +m4_define(available_parsers, [parse.y, prism]) +with_parser=prism +AC_ARG_WITH(parser, + AS_HELP_STRING([--with-parser=PARSER], + [specify default parser; PARSER is one of ]m4_join([, ],available_parsers))) +AS_CASE([$with_parser], +m4_foreach(parser, [available_parsers], + parser[,][AC_DEFINE_UNQUOTED(RB_DEFAULT_PARSER, RB_DEFAULT_PARSER_[]AS_TR_CPP(parser)),]) + [AC_MSG_ERROR([Unknown parser: $with_parser])] +) + arch_hdrdir="${EXTOUT}/include/${arch}/ruby" AS_MKDIR_P("${arch_hdrdir}") config_h="${arch_hdrdir}/config.h" diff --git a/coroutine/amd64/Context.S b/coroutine/amd64/Context.S index eebf9bf18efcc2..4b94d31f30839f 100644 --- a/coroutine/amd64/Context.S +++ b/coroutine/amd64/Context.S @@ -10,12 +10,11 @@ * one at the bottom of this file */ #define TOKEN_PASTE(x,y) x##y -#define PREFIXED_SYMBOL(prefix,name) TOKEN_PASTE(prefix,name) .text -.globl PREFIXED_SYMBOL(SYMBOL_PREFIX,coroutine_transfer) -PREFIXED_SYMBOL(SYMBOL_PREFIX,coroutine_transfer): +.globl PREFIXED_SYMBOL(coroutine_transfer) +PREFIXED_SYMBOL(coroutine_transfer): #if defined(__CET__) && (__CET__ & 0x01) != 0 /* IBT landing pad */ diff --git a/coroutine/amd64/Context.h b/coroutine/amd64/Context.h index 44daa4e01a8861..65aa6383044973 100644 --- a/coroutine/amd64/Context.h +++ b/coroutine/amd64/Context.h @@ -69,7 +69,7 @@ static inline void coroutine_initialize( context->stack_pointer = (void**)((uintptr_t)top & ~0xF); *--context->stack_pointer = NULL; - *--context->stack_pointer = (void*)start; + *--context->stack_pointer = (void*)(uintptr_t)start; context->stack_pointer -= COROUTINE_REGISTERS; memset(context->stack_pointer, 0, sizeof(void*) * COROUTINE_REGISTERS); diff --git a/coroutine/arm32/Context.S b/coroutine/arm32/Context.S index 1850c4c4080602..945e4f82d5d61b 100644 --- a/coroutine/arm32/Context.S +++ b/coroutine/arm32/Context.S @@ -6,16 +6,15 @@ ## #define TOKEN_PASTE(x,y) x##y -#define PREFIXED_SYMBOL(prefix,name) TOKEN_PASTE(prefix,name) .file "Context.S" .text -.globl PREFIXED_SYMBOL(SYMBOL_PREFIX,coroutine_transfer) +.globl PREFIXED_SYMBOL(coroutine_transfer) .align 2 -.type PREFIXED_SYMBOL(SYMBOL_PREFIX,coroutine_transfer),%function +.type PREFIXED_SYMBOL(coroutine_transfer),%function .syntax unified -PREFIXED_SYMBOL(SYMBOL_PREFIX,coroutine_transfer): +PREFIXED_SYMBOL(coroutine_transfer): # Save caller state (8 registers + return address) push {r4-r11,lr} diff --git a/coroutine/arm32/Context.h b/coroutine/arm32/Context.h index 09410eb25dc4c4..7529dd2efc74a5 100644 --- a/coroutine/arm32/Context.h +++ b/coroutine/arm32/Context.h @@ -44,7 +44,7 @@ static inline void coroutine_initialize( char * top = (char*)stack + size; context->stack_pointer = (void**)((uintptr_t)top & ~0xF); - *--context->stack_pointer = (void*)start; + *--context->stack_pointer = (void*)(uintptr_t)start; context->stack_pointer -= COROUTINE_REGISTERS; memset(context->stack_pointer, 0, sizeof(void*) * COROUTINE_REGISTERS); diff --git a/coroutine/arm64/Context.S b/coroutine/arm64/Context.S index 2391333caee064..11f6aa08108baa 100644 --- a/coroutine/arm64/Context.S +++ b/coroutine/arm64/Context.S @@ -6,7 +6,6 @@ ## #define TOKEN_PASTE(x,y) x##y -#define PREFIXED_SYMBOL(prefix,name) TOKEN_PASTE(prefix,name) #if defined(__APPLE__) #define x29 fp @@ -28,8 +27,8 @@ ## See "Providing protection for complex software" for more details about PAC/BTI ## https://developer.arm.com/architectures/learn-the-architecture/providing-protection-for-complex-software -.global PREFIXED_SYMBOL(SYMBOL_PREFIX,coroutine_transfer) -PREFIXED_SYMBOL(SYMBOL_PREFIX,coroutine_transfer): +.global PREFIXED_SYMBOL(coroutine_transfer) +PREFIXED_SYMBOL(coroutine_transfer): #if defined(__ARM_FEATURE_PAC_DEFAULT) && (__ARM_FEATURE_PAC_DEFAULT != 0) # paciasp (it also acts as BTI landing pad, so no need to insert BTI also) diff --git a/coroutine/arm64/Context.h b/coroutine/arm64/Context.h index eb66fbea0f4a56..b6ca5b8dde385a 100644 --- a/coroutine/arm64/Context.h +++ b/coroutine/arm64/Context.h @@ -86,7 +86,8 @@ static inline void coroutine_initialize( context->stack_pointer -= COROUTINE_REGISTERS; memset(context->stack_pointer, 0, sizeof(void*) * COROUTINE_REGISTERS); - context->stack_pointer[0x98 / 8] = ptrauth_sign_instruction_addr((void*)start, (void*)top); + void *addr = (void*)(uintptr_t)start; + context->stack_pointer[0x98 / 8] = ptrauth_sign_instruction_addr(addr, (void*)top); } struct coroutine_context * coroutine_transfer(struct coroutine_context * current, struct coroutine_context * target); diff --git a/coroutine/loongarch64/Context.S b/coroutine/loongarch64/Context.S index 662f5dfb6c7af8..6e10cd032bea8d 100644 --- a/coroutine/loongarch64/Context.S +++ b/coroutine/loongarch64/Context.S @@ -1,11 +1,10 @@ #define TOKEN_PASTE(x,y) x##y -#define PREFIXED_SYMBOL(prefix,name) TOKEN_PASTE(prefix,name) .text .align 2 -.global PREFIXED_SYMBOL(SYMBOL_PREFIX,coroutine_transfer) -PREFIXED_SYMBOL(SYMBOL_PREFIX,coroutine_transfer): +.global PREFIXED_SYMBOL(coroutine_transfer) +PREFIXED_SYMBOL(coroutine_transfer): # Make space on the stack for caller registers addi.d $sp, $sp, -0xa0 diff --git a/coroutine/loongarch64/Context.h b/coroutine/loongarch64/Context.h index 668c9a965e4174..82b85b36e9e411 100644 --- a/coroutine/loongarch64/Context.h +++ b/coroutine/loongarch64/Context.h @@ -36,7 +36,7 @@ static inline void coroutine_initialize( context->stack_pointer -= COROUTINE_REGISTERS; memset(context->stack_pointer, 0, sizeof(void*) * COROUTINE_REGISTERS); - context->stack_pointer[0x90 / 8] = (void*)start; + context->stack_pointer[0x90 / 8] = (void*)(uintptr_t)start; } struct coroutine_context * coroutine_transfer(struct coroutine_context * current, struct coroutine_context * target); diff --git a/coroutine/ppc/Context.S b/coroutine/ppc/Context.S index e2431a9250da21..f44b2419b4dfee 100644 --- a/coroutine/ppc/Context.S +++ b/coroutine/ppc/Context.S @@ -9,15 +9,14 @@ ; To add support for AIX, *BSD or *Linux, please make separate implementations. #define TOKEN_PASTE(x,y) x##y -#define PREFIXED_SYMBOL(prefix,name) TOKEN_PASTE(prefix,name) .machine ppc7400 ; = G4, Rosetta .text -.globl PREFIXED_SYMBOL(SYMBOL_PREFIX,coroutine_transfer) +.globl PREFIXED_SYMBOL(coroutine_transfer) .align 2 -PREFIXED_SYMBOL(SYMBOL_PREFIX,coroutine_transfer): +PREFIXED_SYMBOL(coroutine_transfer): ; Make space on the stack for caller registers ; (Should we rather use red zone? See libphobos example.) subi r1,r1,80 diff --git a/coroutine/ppc64/Context.S b/coroutine/ppc64/Context.S index f8561e0e7d0bee..20a47c61c6914e 100644 --- a/coroutine/ppc64/Context.S +++ b/coroutine/ppc64/Context.S @@ -8,15 +8,14 @@ ; To add support for AIX, *BSD or *Linux, please make separate implementations. #define TOKEN_PASTE(x,y) x##y -#define PREFIXED_SYMBOL(prefix,name) TOKEN_PASTE(prefix,name) .machine ppc64 ; = G5 .text -.globl PREFIXED_SYMBOL(SYMBOL_PREFIX,coroutine_transfer) +.globl PREFIXED_SYMBOL(coroutine_transfer) .align 2 -PREFIXED_SYMBOL(SYMBOL_PREFIX,coroutine_transfer): +PREFIXED_SYMBOL(coroutine_transfer): ; Make space on the stack for caller registers ; (Should we rather use red zone? See libphobos example.) subi r1,r1,160 diff --git a/coroutine/ppc64le/Context.S b/coroutine/ppc64le/Context.S index 61be9efcf0461a..cccd002be5a5ac 100644 --- a/coroutine/ppc64le/Context.S +++ b/coroutine/ppc64le/Context.S @@ -1,12 +1,11 @@ #define TOKEN_PASTE(x,y) x##y -#define PREFIXED_SYMBOL(prefix,name) TOKEN_PASTE(prefix,name) .text .align 2 -.globl PREFIXED_SYMBOL(SYMBOL_PREFIX,coroutine_transfer) -.type PREFIXED_SYMBOL(SYMBOL_PREFIX,coroutine_transfer), @function -PREFIXED_SYMBOL(SYMBOL_PREFIX,coroutine_transfer): +.globl PREFIXED_SYMBOL(coroutine_transfer) +.type PREFIXED_SYMBOL(coroutine_transfer), @function +PREFIXED_SYMBOL(coroutine_transfer): # Make space on the stack for caller registers addi 1,1,-152 diff --git a/coroutine/riscv64/Context.S b/coroutine/riscv64/Context.S index cc4e872f84b3dd..8e7fc74ffc1ee5 100644 --- a/coroutine/riscv64/Context.S +++ b/coroutine/riscv64/Context.S @@ -1,11 +1,10 @@ #define TOKEN_PASTE(x,y) x##y -#define PREFIXED_SYMBOL(prefix,name) TOKEN_PASTE(prefix,name) .text .align 2 -.global PREFIXED_SYMBOL(SYMBOL_PREFIX,coroutine_transfer) -PREFIXED_SYMBOL(SYMBOL_PREFIX,coroutine_transfer): +.global PREFIXED_SYMBOL(coroutine_transfer) +PREFIXED_SYMBOL(coroutine_transfer): # Make space on the stack for caller registers addi sp, sp, -0xd0 diff --git a/coroutine/riscv64/Context.h b/coroutine/riscv64/Context.h index 9ce1140e0b826d..3660fb5577a43e 100644 --- a/coroutine/riscv64/Context.h +++ b/coroutine/riscv64/Context.h @@ -36,7 +36,7 @@ static inline void coroutine_initialize( context->stack_pointer -= COROUTINE_REGISTERS; memset(context->stack_pointer, 0, sizeof(void*) * COROUTINE_REGISTERS); - context->stack_pointer[0xc0 / 8] = (void*)start; + context->stack_pointer[0xc0 / 8] = (void*)(uintptr_t)start; } struct coroutine_context * coroutine_transfer(struct coroutine_context * current, struct coroutine_context * target); diff --git a/coroutine/win32/Context.h b/coroutine/win32/Context.h index 902fd1246f0876..243ae5a43b1420 100644 --- a/coroutine/win32/Context.h +++ b/coroutine/win32/Context.h @@ -45,7 +45,7 @@ static inline void coroutine_initialize( char * top = (char*)stack + size; context->stack_pointer = (void**)((uintptr_t)top & ~0xF); - *--context->stack_pointer = (void*)start; + *--context->stack_pointer = (void*)(uintptr_t)start; /* Windows Thread Information Block */ *--context->stack_pointer = (void*)0xFFFFFFFF; /* fs:[0] */ diff --git a/coroutine/win64/Context.h b/coroutine/win64/Context.h index d85ebf8e0e48c3..c5cab729f8230a 100644 --- a/coroutine/win64/Context.h +++ b/coroutine/win64/Context.h @@ -53,7 +53,7 @@ static inline void coroutine_initialize( /* Return address */ *--context->stack_pointer = 0; - *--context->stack_pointer = (void*)start; + *--context->stack_pointer = (void*)(uintptr_t)start; *--context->stack_pointer = (void*)coroutine_trampoline; /* Windows Thread Information Block */ diff --git a/coroutine/x86/Context.S b/coroutine/x86/Context.S index f06a417084b4e2..b04e71aa1cbbfa 100644 --- a/coroutine/x86/Context.S +++ b/coroutine/x86/Context.S @@ -6,12 +6,11 @@ ## #define TOKEN_PASTE(x,y) x##y -#define PREFIXED_SYMBOL(prefix,name) TOKEN_PASTE(prefix,name) .text -.globl PREFIXED_SYMBOL(SYMBOL_PREFIX,coroutine_transfer) -PREFIXED_SYMBOL(SYMBOL_PREFIX,coroutine_transfer): +.globl PREFIXED_SYMBOL(coroutine_transfer) +PREFIXED_SYMBOL(coroutine_transfer): # Save caller registers pushl %ebp diff --git a/coroutine/x86/Context.h b/coroutine/x86/Context.h index d98eaf6486165a..f33b338eabf2a7 100644 --- a/coroutine/x86/Context.h +++ b/coroutine/x86/Context.h @@ -45,7 +45,7 @@ static inline void coroutine_initialize( context->stack_pointer = (void**)((uintptr_t)top & ~0xF); *--context->stack_pointer = NULL; - *--context->stack_pointer = (void*)start; + *--context->stack_pointer = (void*)(uintptr_t)start; context->stack_pointer -= COROUTINE_REGISTERS; memset(context->stack_pointer, 0, sizeof(void*) * COROUTINE_REGISTERS); diff --git a/darray.h b/darray.h index d24e3c3eb5f5c3..08b53d8cd10761 100644 --- a/darray.h +++ b/darray.h @@ -43,10 +43,7 @@ * * void rb_darray_append(rb_darray(T) *ptr_to_ary, T element); */ -#define rb_darray_append(ptr_to_ary, element) \ - rb_darray_append_impl(ptr_to_ary, element) - -#define rb_darray_append_impl(ptr_to_ary, element) do { \ +#define rb_darray_append(ptr_to_ary, element) do { \ rb_darray_ensure_space((ptr_to_ary), \ sizeof(**(ptr_to_ary)), \ sizeof((*(ptr_to_ary))->data[0])); \ @@ -56,6 +53,19 @@ (*(ptr_to_ary))->meta.size++; \ } while (0) +#define rb_darray_insert(ptr_to_ary, idx, element) do { \ + rb_darray_ensure_space((ptr_to_ary), \ + sizeof(**(ptr_to_ary)), \ + sizeof((*(ptr_to_ary))->data[0])); \ + MEMMOVE( \ + rb_darray_ref(*(ptr_to_ary), idx + 1), \ + rb_darray_ref(*(ptr_to_ary), idx), \ + sizeof((*(ptr_to_ary))->data[0]), \ + rb_darray_size(*(ptr_to_ary)) - idx); \ + rb_darray_set(*(ptr_to_ary), idx, element); \ + (*(ptr_to_ary))->meta.size++; \ +} while (0) + // Iterate over items of the array in a for loop // #define rb_darray_foreach(ary, idx_name, elem_ptr_var) \ @@ -111,6 +121,14 @@ rb_darray_size(const void *ary) return meta ? meta->size : 0; } + +static inline void +rb_darray_pop(void *ary, size_t count) +{ + rb_darray_meta_t *meta = ary; + meta->size -= count; +} + // Get the capacity of the dynamic array. // static inline size_t diff --git a/dir.c b/dir.c index 84687227a2d624..24eec8dc15dfaf 100644 --- a/dir.c +++ b/dir.c @@ -571,6 +571,25 @@ opendir_without_gvl(const char *path) return opendir(path); } +static void +close_dir_data(struct dir_data *dp) +{ + if (dp->dir) { + if (closedir(dp->dir) < 0) { + dp->dir = NULL; + rb_sys_fail("closedir"); + } + dp->dir = NULL; + } +} + +static void +check_closedir(DIR *dirp) +{ + if (closedir(dirp) < 0) + rb_sys_fail("closedir"); +} + static VALUE dir_initialize(rb_execution_context_t *ec, VALUE dir, VALUE dirname, VALUE enc) { @@ -585,8 +604,7 @@ dir_initialize(rb_execution_context_t *ec, VALUE dir, VALUE dirname, VALUE enc) dirname = rb_str_dup_frozen(dirname); TypedData_Get_Struct(dir, struct dir_data, &dir_data_type, dp); - if (dp->dir) closedir(dp->dir); - dp->dir = NULL; + close_dir_data(dp); RB_OBJ_WRITE(dir, &dp->path, Qnil); dp->enc = fsenc; path = RSTRING_PTR(dirname); @@ -810,10 +828,22 @@ fundamental_encoding_p(rb_encoding *enc) # define READDIR(dir, enc) rb_w32_readdir((dir), (enc)) # define READDIR_NOGVL READDIR #else +NORETURN(static void *sys_failure(void *function)); +static void * +sys_failure(void *function) +{ + rb_sys_fail(function); +} + static void * nogvl_readdir(void *dir) { - return readdir(dir); + rb_errno_set(0); + if ((dir = readdir(dir)) == NULL) { + if (rb_errno()) + rb_thread_call_with_gvl(sys_failure, (void *)"readdir"); + } + return dir; } # define READDIR(dir, enc) IO_WITHOUT_GVL(nogvl_readdir, (void *)(dir)) @@ -962,7 +992,8 @@ dir_tell(VALUE dir) long pos; GetDIR(dir, dirp); - pos = telldir(dirp->dir); + if((pos = telldir(dirp->dir)) < 0) + rb_sys_fail("telldir"); return rb_int2inum(pos); } #else @@ -1081,8 +1112,7 @@ dir_close(VALUE dir) dirp = dir_get(dir); if (!dirp->dir) return Qnil; - closedir(dirp->dir); - dirp->dir = NULL; + close_dir_data(dirp); return Qnil; } @@ -2585,7 +2615,7 @@ static void glob_dir_finish(ruby_glob_entries_t *ent, int flags) { if (flags & FNM_GLOB_NOSORT) { - closedir(ent->nosort.dirp); + check_closedir(ent->nosort.dirp); ent->nosort.dirp = NULL; } else if (ent->sort.entries) { @@ -2616,7 +2646,7 @@ glob_opendir(ruby_glob_entries_t *ent, DIR *dirp, int flags, rb_encoding *enc) #ifdef _WIN32 if ((capacity = dirp->nfiles) > 0) { if (!(newp = GLOB_ALLOC_N(rb_dirent_t, capacity))) { - closedir(dirp); + check_closedir(dirp); return NULL; } ent->sort.entries = newp; @@ -2636,7 +2666,7 @@ glob_opendir(ruby_glob_entries_t *ent, DIR *dirp, int flags, rb_encoding *enc) ent->sort.entries[count++] = rdp; ent->sort.count = count; } - closedir(dirp); + check_closedir(dirp); if (count < capacity) { if (!(newp = GLOB_REALLOC_N(ent->sort.entries, count))) { glob_dir_finish(ent, 0); @@ -2651,7 +2681,7 @@ glob_opendir(ruby_glob_entries_t *ent, DIR *dirp, int flags, rb_encoding *enc) nomem: glob_dir_finish(ent, 0); - closedir(dirp); + check_closedir(dirp); return NULL; } @@ -2814,7 +2844,7 @@ glob_helper( # if NORMALIZE_UTF8PATH if (!(norm_p || magical || recursive)) { - closedir(dirp); + check_closedir(dirp); goto literally; } # endif @@ -3712,7 +3742,7 @@ nogvl_dir_empty_p(void *ptr) break; } } - closedir(dir); + check_closedir(dir); return (void *)result; } diff --git a/dln.c b/dln.c index db6ea5aa0fb03d..043815148bfe8f 100644 --- a/dln.c +++ b/dln.c @@ -437,7 +437,7 @@ dln_sym(void *handle, const char *symbol) #endif } -static void * +static uintptr_t dln_sym_func(void *handle, const char *symbol) { void *func = dln_sym(handle, symbol); @@ -453,7 +453,7 @@ dln_sym_func(void *handle, const char *symbol) #endif dln_loaderror("%s - %s", error, symbol); } - return func; + return (uintptr_t)func; } #define dln_sym_callable(rettype, argtype, handle, symbol) \ diff --git a/doc/ChangeLog/ChangeLog-1.9.3 b/doc/ChangeLog/ChangeLog-1.9.3 index 0f80eed2d5d0b9..03a7f3eabffd10 100644 --- a/doc/ChangeLog/ChangeLog-1.9.3 +++ b/doc/ChangeLog/ChangeLog-1.9.3 @@ -9012,7 +9012,7 @@ Thu Dec 2 01:24:39 2010 NARUSE, Yui Thu Dec 2 01:02:03 2010 NARUSE, Yui - * ext/json: Update github/flori/json from 1.4.2+ to + * ext/json: Update github/ruby/json from 1.4.2+ to e22b2f2bdfe6a9b0. this fixes some bugs. Thu Dec 2 00:05:44 2010 NARUSE, Yui diff --git a/doc/ChangeLog/ChangeLog-2.0.0 b/doc/ChangeLog/ChangeLog-2.0.0 index 9e654db1893a91..de47b66a6947ba 100644 --- a/doc/ChangeLog/ChangeLog-2.0.0 +++ b/doc/ChangeLog/ChangeLog-2.0.0 @@ -14426,7 +14426,7 @@ Tue May 8 02:34:26 2012 NARUSE, Yui Mon May 7 21:19:17 2012 NARUSE, Yui * ext/json: Merge JSON 1.7.1. - https://github.com/flori/json/commit/e5b9a9465c1159fae533bca320d950b772bcb4ac + https://github.com/ruby/json/commit/e5b9a9465c1159fae533bca320d950b772bcb4ac Mon May 7 22:54:22 2012 Martin Bosslet diff --git a/doc/ChangeLog/ChangeLog-2.1.0 b/doc/ChangeLog/ChangeLog-2.1.0 index 7964a682ebd9c8..b6977dbccdd980 100644 --- a/doc/ChangeLog/ChangeLog-2.1.0 +++ b/doc/ChangeLog/ChangeLog-2.1.0 @@ -2167,7 +2167,7 @@ Wed Nov 20 11:46:38 2013 NARUSE, Yui * ext/json: merge JSON 1.8.1. https://github.com/nurse/json/compare/002ac2771ce32776b32ccd2d06e5604de6c36dcd...e09ffc0d7da25d0393873936c118c188c78dbac3 * Remove Rubinius exception since transcoding should be working now. - * Fix https://github.com/flori/json/issues/162 reported by Marc-Andre + * Fix https://github.com/ruby/json/issues/162 reported by Marc-Andre Lafortune . Thanks! * Applied patches by Yui NARUSE to suppress warning with -Wchar-subscripts and better validate UTF-8 strings. @@ -17913,7 +17913,7 @@ Tue Feb 12 12:02:35 2013 NARUSE, Yui * ext/json: merge JSON 1.7.7. This includes security fix. [CVE-2013-0269] - https://github.com/flori/json/commit/d0a62f3ced7560daba2ad546d83f0479a5ae2cf2 + https://github.com/ruby/json/commit/d0a62f3ced7560daba2ad546d83f0479a5ae2cf2 https://groups.google.com/d/topic/rubyonrails-security/4_YvCpLzL58/discussion Mon Feb 11 23:08:48 2013 Tanaka Akira diff --git a/doc/ChangeLog/ChangeLog-2.3.0 b/doc/ChangeLog/ChangeLog-2.3.0 index 94996cffd0de92..e6161838957e67 100644 --- a/doc/ChangeLog/ChangeLog-2.3.0 +++ b/doc/ChangeLog/ChangeLog-2.3.0 @@ -1211,7 +1211,7 @@ Sun Dec 6 08:39:05 2015 SHIBATA Hiroshi upstream changes. https://github.com/ruby/ruby/commit/4d059bf9f5f10f3d3088de49fc87e5555db7770d - https://github.com/flori/json/commit/d4c99de78905d96c3f301f48b2c789943bb3f098 + https://github.com/ruby/json/commit/d4c99de78905d96c3f301f48b2c789943bb3f098 * ext/json/lib/json/version.rb: ditto. @@ -10989,7 +10989,7 @@ Fri Feb 13 21:16:00 2015 Yusuke Endoh Fri Feb 13 14:19:06 2015 SHIBATA Hiroshi - * ext/json: merge upstream from flori/json + * ext/json: merge upstream from ruby/json change usage of TypedData. [Feature #10739][ruby-core:67564] Thu Feb 12 18:34:01 2015 multisnow @@ -11556,7 +11556,7 @@ Tue Jan 13 21:08:22 2015 SHIBATA Hiroshi * ext/json, test/json: merge JSON HEAD(259dee6) separate implementation of Typed_Data macro. - https://github.com/flori/json/compare/v1.8.1...v1.8.2 + https://github.com/ruby/json/compare/v1.8.1...v1.8.2 Tue Jan 13 14:16:35 2015 Nobuyoshi Nakada @@ -12009,7 +12009,7 @@ Mon Dec 29 10:37:27 2014 Thiago Lewin Mon Dec 29 07:27:23 2014 SHIBATA Hiroshi * ext/json, test/json: merge JSON HEAD(17fe8e7) - https://github.com/flori/json/compare/v1.8.1...17fe8e7 + https://github.com/ruby/json/compare/v1.8.1...17fe8e7 Sun Dec 28 23:49:37 2014 Michal Papis diff --git a/doc/ChangeLog/ChangeLog-2.4.0 b/doc/ChangeLog/ChangeLog-2.4.0 index 30e9ccab3d9aac..5e126fbd90e282 100644 --- a/doc/ChangeLog/ChangeLog-2.4.0 +++ b/doc/ChangeLog/ChangeLog-2.4.0 @@ -2668,8 +2668,8 @@ Wed Jul 6 07:11:27 2016 Shugo Maeda Tue Jul 5 20:49:30 2016 SHIBATA Hiroshi * ext/json/*, test/json/*: Update json-2.0.1. - Changes of 2.0.0: https://github.com/flori/json/blob/f679ebd0c69a94e3e70a897ac9a229f5779c2ee1/CHANGES.md#2015-09-11-200 - Changes of 2.0.1: https://github.com/flori/json/blob/f679ebd0c69a94e3e70a897ac9a229f5779c2ee1/CHANGES.md#2016-07-01-201 + Changes of 2.0.0: https://github.com/ruby/json/blob/f679ebd0c69a94e3e70a897ac9a229f5779c2ee1/CHANGES.md#2015-09-11-200 + Changes of 2.0.1: https://github.com/ruby/json/blob/f679ebd0c69a94e3e70a897ac9a229f5779c2ee1/CHANGES.md#2016-07-01-201 [Feature #12542][ruby-dev:49706][fix GH-1395] Tue Jul 5 19:39:49 2016 Naohisa Goto diff --git a/doc/_regexp.rdoc b/doc/_regexp.rdoc index 7b71eee984b4b4..da323e913f8ba8 100644 --- a/doc/_regexp.rdoc +++ b/doc/_regexp.rdoc @@ -212,7 +212,7 @@ Method Regexp.escape returns an escaped string: === Source Literals The source literal largely behaves like a double-quoted string; -see {String Literals}[rdoc-ref:syntax/literals.rdoc@String+Literals]. +see {Double-Quoted String Literals}[rdoc-ref:syntax/literals.rdoc@Double-Quoted+String+Literals]. In particular, a source literal may contain interpolated expressions: @@ -1050,7 +1050,7 @@ Example: re.match('TEst') # => # re.match('TEST') # => nil re.match('teST') # => nil - + re = /t(?i:e)st/ re.match('test') # => # re.match('tEst') # => # diff --git a/doc/forwardable.rd.ja b/doc/forwardable.rd.ja index 171724b2e50d26..53e82025133425 100644 --- a/doc/forwardable.rd.ja +++ b/doc/forwardable.rd.ja @@ -1,4 +1,4 @@ - -- forwatable.rb + -- forwardable.rb $Release Version: 1.1 $ $Revision$ diff --git a/doc/maintainers.md b/doc/maintainers.md index dabbdc0cb6e687..fa2c24140b4944 100644 --- a/doc/maintainers.md +++ b/doc/maintainers.md @@ -348,7 +348,8 @@ have commit right, others don't. #### ext/json * NARUSE, Yui (naruse) * Hiroshi SHIBATA (hsbt) -* https://github.com/flori/json +* Jean Boussier (byroot) +* https://github.com/ruby/json * https://rubygems.org/gems/json #### ext/openssl diff --git a/doc/packed_data.rdoc b/doc/packed_data.rdoc index 17bbf92023d7a5..fa95db9106eca6 100644 --- a/doc/packed_data.rdoc +++ b/doc/packed_data.rdoc @@ -564,26 +564,42 @@ for one byte in the input or output string. == Offset Directives - '@' - Begin packing at the given byte offset; - for packing, null fill if necessary: + for packing, null fill or shrink if necessary: + + [1, 2].pack("C@0C") # => "\x02" + [1, 2].pack("C@1C") # => "\x01\x02" + [1, 2].pack("C@5C") # => "\x01\x00\x00\x00\x00\x02" + [*1..5].pack("CCCC@2C") # => "\x01\x02\x05" - [1, 2].pack("C@0C") # => "\x02" - [1, 2].pack("C@1C") # => "\x01\x02" - [1, 2].pack("C@5C") # => "\x01\x00\x00\x00\x00\x02" + For unpacking, cannot to move to outside the string: "\x01\x00\x00\x02".unpack("C@3C") # => [1, 2] "\x00".unpack("@1C") # => [nil] + "\x00".unpack("@2C") # Raises ArgumentError. -- 'X' - Back up a byte: +- 'X' - For packing, shrink for the given byte offset: [0, 1, 2].pack("CCXC") # => "\x00\x02" [0, 1, 2].pack("CCX2C") # => "\x02" + + For unpacking; rewind unpacking position for the given byte offset: + "\x00\x02".unpack("CCXC") # => [0, 2, 2] -== Null Byte Directive + Cannot to move to outside the string: -- 'x' - Null byte: + [0, 1, 2].pack("CCX3C") # Raises ArgumentError. + "\x00\x02".unpack("CX3C") # Raises ArgumentError. + +- 'x' - Begin packing at after the given byte offset; + for packing, null fill if necessary: [].pack("x0") # => "" [].pack("x") # => "\x00" [].pack("x8") # => "\x00\x00\x00\x00\x00\x00\x00\x00" + + For unpacking, cannot to move to outside the string: + "\x00\x00\x02".unpack("CxC") # => [0, 2] + "\x00\x00\x02".unpack("x3C") # => [nil] + "\x00\x00\x02".unpack("x4C") # Raises ArgumentError diff --git a/doc/rdoc/markup_reference.rb b/doc/rdoc/markup_reference.rb index d1901b86e2cb7a..bb2dc67eca9bb3 100644 --- a/doc/rdoc/markup_reference.rb +++ b/doc/rdoc/markup_reference.rb @@ -918,10 +918,6 @@ # # - Linked: https://github.com links to https://github.com. # -# [Protocol +www+] -# -# - Linked: www.yahoo.com links to www.yahoo.com. -# # [Protocol +ftp+] # # - Linked: ftp://nosuch.site links to ftp://nosuch.site. diff --git a/doc/syntax.rdoc b/doc/syntax.rdoc index 6ca58435126e4c..cb427b6f0f03a2 100644 --- a/doc/syntax.rdoc +++ b/doc/syntax.rdoc @@ -12,7 +12,7 @@ Assignment[rdoc-ref:syntax/assignment.rdoc] :: +if+, +unless+, +while+, +until+, +for+, +break+, +next+, +redo+ {Pattern matching}[rdoc-ref:syntax/pattern_matching.rdoc] :: - Experimental structural pattern matching and variable binding syntax + Structural pattern matching and variable binding syntax Methods[rdoc-ref:syntax/methods.rdoc] :: Method and method argument syntax diff --git a/doc/syntax/control_expressions.rdoc b/doc/syntax/control_expressions.rdoc index 9126289389e0b7..3de6cd293f55c8 100644 --- a/doc/syntax/control_expressions.rdoc +++ b/doc/syntax/control_expressions.rdoc @@ -255,7 +255,7 @@ Again, the +then+ and +else+ are optional. The result value of a +case+ expression is the last value executed in the expression. -Since Ruby 2.7, +case+ expressions also provide a more powerful experimental +Since Ruby 2.7, +case+ expressions also provide a more powerful pattern matching feature via the +in+ keyword: case {a: 1, b: 2, c: 3} diff --git a/doc/syntax/literals.rdoc b/doc/syntax/literals.rdoc index 6d681419a2b459..ce398dd75dfba2 100644 --- a/doc/syntax/literals.rdoc +++ b/doc/syntax/literals.rdoc @@ -178,7 +178,7 @@ sequences are as follows: The last one, \, represents an empty string instead of a character. It is used to fold a line in a string. -=== Double-quoted \String Literals +=== Double-Quoted \String Literals The most common way of writing strings is using ": @@ -213,7 +213,7 @@ See also: * {% and %Q: Interpolable String Literals}[#label-25+and+-25Q-3A+Interpolable+String+Literals] -=== Single-quoted \String Literals +=== Single-Quoted \String Literals Interpolation may be disabled by escaping the "#" character or using single-quoted strings: diff --git a/doc/yjit/yjit.md b/doc/yjit/yjit.md index c63d31b64f5924..906a827d51d1ba 100644 --- a/doc/yjit/yjit.md +++ b/doc/yjit/yjit.md @@ -166,7 +166,8 @@ The machine code generated for a given method can be printed by adding `puts Rub YJIT supports all command-line options supported by upstream CRuby, but also adds a few YJIT-specific options: - `--yjit`: enable YJIT (disabled by default) -- `--yjit-exec-mem-size=N`: size of the executable memory block to allocate, in MiB (default 48 MiB) +- `--yjit-mem-size=N`: soft limit on YJIT memory usage in MiB (default: 128). Tries to limit `code_region_size + yjit_alloc_size` +- `--yjit-exec-mem-size=N`: hard limit on executable memory block in MiB. Limits `code_region_size` - `--yjit-call-threshold=N`: number of calls after which YJIT begins to compile a function. It defaults to 30, and it's then increased to 120 when the number of ISEQs in the process reaches 40,000. - `--yjit-cold-threshold=N`: number of global calls after which an ISEQ is considered cold and not diff --git a/enc/trans/iso2022.trans b/enc/trans/iso2022.trans index a441f1596dc6ca..a25a4a12a14ad5 100644 --- a/enc/trans/iso2022.trans +++ b/enc/trans/iso2022.trans @@ -79,6 +79,34 @@ iso2022jp_init(void *statep) return 0; } +static unsigned char * +iso2022jp_put_state(unsigned char *sp, unsigned char *o, int oldstate, int newstate) +{ + if (oldstate != newstate) { + *o++ = 0x1b; + switch (newstate) { + case G0_ASCII: + *o++ = '('; + *o++ = 'B'; + break; + case G0_JISX0201_KATAKANA: + *o++ = '('; + *o++ = 'I'; + break; + case G0_JISX0208_1978: + *o++ = '$'; + *o++ = '@'; + break; + default: + *o++ = '$'; + *o++ = 'B'; + break; + } + *sp = newstate; + } + return o; +} + static VALUE fun_si_iso2022jp_decoder(void *statep, const unsigned char *s, size_t l) { @@ -154,24 +182,7 @@ fun_so_iso2022jp_encoder(void *statep, const unsigned char *s, size_t l, unsigne else newstate = G0_JISX0208_1983; - if (*sp != newstate) { - if (newstate == G0_ASCII) { - *o++ = 0x1b; - *o++ = '('; - *o++ = 'B'; - } - else if (newstate == G0_JISX0208_1978) { - *o++ = 0x1b; - *o++ = '$'; - *o++ = '@'; - } - else { - *o++ = 0x1b; - *o++ = '$'; - *o++ = 'B'; - } - *sp = newstate; - } + o = iso2022jp_put_state(sp, o, *sp, newstate); if (l == 1) { *o++ = s[0] & 0x7f; @@ -202,10 +213,7 @@ finish_iso2022jp_encoder(void *statep, unsigned char *o, size_t osize) if (*sp == G0_ASCII) return 0; - *o++ = 0x1b; - *o++ = '('; - *o++ = 'B'; - *sp = G0_ASCII; + o = iso2022jp_put_state(sp, o, *sp, G0_ASCII); return o - output0; } @@ -399,24 +407,7 @@ fun_so_cp5022x_encoder(void *statep, const unsigned char *s, size_t l, else newstate = G0_JISX0208_1983; - if (*sp != newstate) { - if (newstate == G0_ASCII) { - *o++ = 0x1b; - *o++ = '('; - *o++ = 'B'; - } - else if (newstate == G0_JISX0201_KATAKANA) { - *o++ = 0x1b; - *o++ = '('; - *o++ = 'I'; - } - else { - *o++ = 0x1b; - *o++ = '$'; - *o++ = 'B'; - } - *sp = newstate; - } + o = iso2022jp_put_state(sp, o, sp[0], newstate); if (l == 1) { *o++ = s[0] & 0x7f; @@ -443,15 +434,26 @@ rb_cp50221_encoder = { iso2022jp_encoder_reset_sequence_size, finish_iso2022jp_encoder }; -static const char *tbl0208 = - "\x21\x23\x21\x56\x21\x57\x21\x22\x21\x26\x25\x72\x25\x21\x25\x23" \ - "\x25\x25\x25\x27\x25\x29\x25\x63\x25\x65\x25\x67\x25\x43\x21\x3C" \ - "\x25\x22\x25\x24\x25\x26\x25\x28\x25\x2A\x25\x2B\x25\x2D\x25\x2F" \ - "\x25\x31\x25\x33\x25\x35\x25\x37\x25\x39\x25\x3B\x25\x3D\x25\x3F" \ - "\x25\x41\x25\x44\x25\x46\x25\x48\x25\x4A\x25\x4B\x25\x4C\x25\x4D" \ - "\x25\x4E\x25\x4F\x25\x52\x25\x55\x25\x58\x25\x5B\x25\x5E\x25\x5F" \ - "\x25\x60\x25\x61\x25\x62\x25\x64\x25\x66\x25\x68\x25\x69\x25\x6A" \ - "\x25\x6B\x25\x6C\x25\x6D\x25\x6F\x25\x73\x21\x2B\x21\x2C"; +/* JIS0201 to JIS0208 conversion table */ +enum {tbl0208_num = 0xDF - 0xA1 + 1}; +static const char tbl0208[tbl0208_num][2] = { + "\x21\x23", "\x21\x56", "\x21\x57", "\x21\x22", + "\x21\x26", "\x25\x72", "\x25\x21", "\x25\x23", + "\x25\x25", "\x25\x27", "\x25\x29", "\x25\x63", + "\x25\x65", "\x25\x67", "\x25\x43", "\x21\x3C", + "\x25\x22", "\x25\x24", "\x25\x26", "\x25\x28", + "\x25\x2A", "\x25\x2B", "\x25\x2D", "\x25\x2F", + "\x25\x31", "\x25\x33", "\x25\x35", "\x25\x37", + "\x25\x39", "\x25\x3B", "\x25\x3D", "\x25\x3F", + "\x25\x41", "\x25\x44", "\x25\x46", "\x25\x48", + "\x25\x4A", "\x25\x4B", "\x25\x4C", "\x25\x4D", + "\x25\x4E", "\x25\x4F", "\x25\x52", "\x25\x55", + "\x25\x58", "\x25\x5B", "\x25\x5E", "\x25\x5F", + "\x25\x60", "\x25\x61", "\x25\x62", "\x25\x64", + "\x25\x66", "\x25\x68", "\x25\x69", "\x25\x6A", + "\x25\x6B", "\x25\x6C", "\x25\x6D", "\x25\x6F", + "\x25\x73", "\x21\x2B", "\x21\x2C" +}; static ssize_t fun_so_cp50220_encoder(void *statep, const unsigned char *s, size_t l, @@ -460,22 +462,21 @@ fun_so_cp50220_encoder(void *statep, const unsigned char *s, size_t l, unsigned char *output0 = o; unsigned char *sp = statep; - if (sp[0] == G0_JISX0201_KATAKANA) { + if (sp[0] == G0_JISX0201_KATAKANA && sp[2]) { int c = sp[2] & 0x7F; - const char *p = tbl0208 + (c - 0x21) * 2; - if (sp[1] != G0_JISX0208_1983) { - *o++ = 0x1b; - *o++ = '$'; - *o++ = 'B'; - } + const char *p = tbl0208[c - 0x21]; + sp[2] = 0; + o = iso2022jp_put_state(sp, o, sp[1], G0_JISX0208_1983); sp[0] = G0_JISX0208_1983; *o++ = *p++; if (l == 2 && s[0] == 0x8E) { if (s[1] == 0xDE) { + /* VOICED SOUND MARK */ *o++ = *p + 1; return o - output0; } else if (s[1] == 0xDF && (0x4A <= c && c <= 0x4E)) { + /* SEMI-VOICED SOUND MARK */ *o++ = *p + 2; return o - output0; } @@ -484,21 +485,25 @@ fun_so_cp50220_encoder(void *statep, const unsigned char *s, size_t l, } if (l == 2 && s[0] == 0x8E) { - const char *p = tbl0208 + (s[1] - 0xA1) * 2; if ((0xA1 <= s[1] && s[1] <= 0xB5) || (0xC5 <= s[1] && s[1] <= 0xC9) || (0xCF <= s[1] && s[1] <= 0xDF)) { - if (*sp != G0_JISX0208_1983) { - *o++ = 0x1b; - *o++ = '$'; - *o++ = 'B'; - *sp = G0_JISX0208_1983; - } + /* May not be followed by a sound mark */ + const char *p = tbl0208[s[1] - 0xA1]; + o = iso2022jp_put_state(sp, o, *sp, G0_JISX0208_1983); *o++ = *p++; *o++ = *p; return o - output0; } + if (s[1] > 0xDF) { /* undef */ + o = iso2022jp_put_state(sp, o, *sp, G0_JISX0201_KATAKANA); + *o++ = s[1] & 0x7F; + sp[2] = 0; + return o - output0; + } + + /* Katakana that may be followed by a sound mark */ sp[2] = s[1]; sp[1] = sp[0]; sp[0] = G0_JISX0201_KATAKANA; @@ -518,23 +523,16 @@ finish_cp50220_encoder(void *statep, unsigned char *o, size_t osize) if (*sp == G0_ASCII) return 0; - if (sp[0] == G0_JISX0201_KATAKANA) { + if (sp[0] == G0_JISX0201_KATAKANA && sp[2]) { int c = sp[2] & 0x7F; - const char *p = tbl0208 + (c - 0x21) * 2; - if (sp[1] != G0_JISX0208_1983) { - *o++ = 0x1b; - *o++ = '$'; - *o++ = 'B'; - } + const char *p = tbl0208[c - 0x21]; + o = iso2022jp_put_state(sp, o, sp[1], G0_JISX0208_1983); sp[0] = G0_JISX0208_1983; *o++ = *p++; *o++ = *p; } - *o++ = 0x1b; - *o++ = '('; - *o++ = 'B'; - *sp = G0_ASCII; + o = iso2022jp_put_state(sp, o, sp[0], G0_ASCII); return o - output0; } @@ -564,4 +562,3 @@ TRANS_INIT(iso2022) rb_register_transcoder(&rb_cp50220_encoder); rb_register_transcoder(&rb_cp50221_encoder); } - diff --git a/encoding.c b/encoding.c index 222610b1d476b3..d4fe6ea1243bd9 100644 --- a/encoding.c +++ b/encoding.c @@ -1053,6 +1053,13 @@ rb_enc_check(VALUE str1, VALUE str2) static rb_encoding* enc_compatible_latter(VALUE str1, VALUE str2, int idx1, int idx2) { + if (idx1 < 0 || idx2 < 0) + return 0; + + if (idx1 == idx2) { + return rb_enc_from_index(idx1); + } + int isstr1, isstr2; rb_encoding *enc1 = rb_enc_from_index(idx1); rb_encoding *enc2 = rb_enc_from_index(idx2); @@ -1111,15 +1118,7 @@ enc_compatible_str(VALUE str1, VALUE str2) int idx1 = enc_get_index_str(str1); int idx2 = enc_get_index_str(str2); - if (idx1 < 0 || idx2 < 0) - return 0; - - if (idx1 == idx2) { - return rb_enc_from_index(idx1); - } - else { - return enc_compatible_latter(str1, str2, idx1, idx2); - } + return enc_compatible_latter(str1, str2, idx1, idx2); } rb_encoding* @@ -1128,13 +1127,6 @@ rb_enc_compatible(VALUE str1, VALUE str2) int idx1 = rb_enc_get_index(str1); int idx2 = rb_enc_get_index(str2); - if (idx1 < 0 || idx2 < 0) - return 0; - - if (idx1 == idx2) { - return rb_enc_from_index(idx1); - } - return enc_compatible_latter(str1, str2, idx1, idx2); } diff --git a/enum.c b/enum.c index f734d1814246b6..495b01dfa05309 100644 --- a/enum.c +++ b/enum.c @@ -1358,7 +1358,7 @@ enum_first(int argc, VALUE *argv, VALUE obj) * The ordering of equal elements is indeterminate and may be unstable. * * With no block given, the sort compares - * using the elements' own method <=>: + * using the elements' own method #<=>: * * %w[b c a d].sort # => ["a", "b", "c", "d"] * {foo: 0, bar: 1, baz: 2}.sort # => [[:bar, 1], [:baz, 2], [:foo, 0]] @@ -2327,7 +2327,7 @@ min_ii(RB_BLOCK_CALL_FUNC_ARGLIST(i, args)) * The ordering of equal elements is indeterminate and may be unstable. * * With no argument and no block, returns the minimum element, - * using the elements' own method <=> for comparison: + * using the elements' own method #<=> for comparison: * * (1..4).min # => 1 * (-4..-1).min # => -4 @@ -2449,7 +2449,7 @@ max_ii(RB_BLOCK_CALL_FUNC_ARGLIST(i, args)) * The ordering of equal elements is indeterminate and may be unstable. * * With no argument and no block, returns the maximum element, - * using the elements' own method <=> for comparison: + * using the elements' own method #<=> for comparison: * * (1..4).max # => 4 * (-4..-1).max # => -1 @@ -2638,7 +2638,7 @@ minmax_ii(RB_BLOCK_CALL_FUNC_ARGLIST(i, _memo)) * The ordering of equal elements is indeterminate and may be unstable. * * With no argument and no block, returns the minimum and maximum elements, - * using the elements' own method <=> for comparison: + * using the elements' own method #<=> for comparison: * * (1..4).minmax # => [1, 4] * (-4..-1).minmax # => [-4, -1] @@ -4955,7 +4955,7 @@ enum_compact(VALUE obj) * * These methods return information about the \Enumerable other than the elements themselves: * - * - #include?, #member?: Returns +true+ if self == object, +false+ otherwise. + * - #member? (aliased as #include?): Returns +true+ if self == object, +false+ otherwise. * - #all?: Returns +true+ if all elements meet a specified criterion; +false+ otherwise. * - #any?: Returns +true+ if any element meets a specified criterion; +false+ otherwise. * - #none?: Returns +true+ if no element meets a specified criterion; +false+ otherwise. @@ -4970,7 +4970,7 @@ enum_compact(VALUE obj) * * Leading, trailing, or all elements: * - * - #entries, #to_a: Returns all elements. + * - #to_a (aliased as #entries): Returns all elements. * - #first: Returns the first element or leading elements. * - #take: Returns a specified number of leading elements. * - #drop: Returns a specified number of trailing elements. @@ -4980,9 +4980,9 @@ enum_compact(VALUE obj) * Minimum and maximum value elements: * * - #min: Returns the elements whose values are smallest among the elements, - * as determined by <=> or a given block. + * as determined by #<=> or a given block. * - #max: Returns the elements whose values are largest among the elements, - * as determined by <=> or a given block. + * as determined by #<=> or a given block. * - #minmax: Returns a 2-element Array containing the smallest and largest elements. * - #min_by: Returns the smallest element, as determined by the given block. * - #max_by: Returns the largest element, as determined by the given block. @@ -5005,8 +5005,8 @@ enum_compact(VALUE obj) * * These methods return elements that meet a specified criterion: * - * - #find, #detect: Returns an element selected by the block. - * - #find_all, #filter, #select: Returns elements selected by the block. + * - #find (aliased as #detect): Returns an element selected by the block. + * - #find_all (aliased as #filter, #select): Returns elements selected by the block. * - #find_index: Returns the index of an element selected by a given object or block. * - #reject: Returns elements not rejected by the block. * - #uniq: Returns elements that are not duplicates. @@ -5015,7 +5015,7 @@ enum_compact(VALUE obj) * * These methods return elements in sorted order: * - * - #sort: Returns the elements, sorted by <=> or the given block. + * - #sort: Returns the elements, sorted by #<=> or the given block. * - #sort_by: Returns the elements, sorted by the given block. * * === Methods for Iterating @@ -5031,14 +5031,14 @@ enum_compact(VALUE obj) * * === Other Methods * - * - #map, #collect: Returns objects returned by the block. + * - #collect (aliased as #map): Returns objects returned by the block. * - #filter_map: Returns truthy objects returned by the block. - * - #flat_map, #collect_concat: Returns flattened objects returned by the block. + * - #flat_map (aliased as #collect_concat): Returns flattened objects returned by the block. * - #grep: Returns elements selected by a given object * or objects returned by a given block. * - #grep_v: Returns elements selected by a given object * or objects returned by a given block. - * - #reduce, #inject: Returns the object formed by combining all elements. + * - #inject (aliased as #reduce): Returns the object formed by combining all elements. * - #sum: Returns the sum of the elements, using method +. * - #zip: Combines each element with elements from other enumerables; * returns the n-tuples or calls the block with each. diff --git a/enumerator.c b/enumerator.c index 8fa7bb8a36aa3d..faaa77cb49784d 100644 --- a/enumerator.c +++ b/enumerator.c @@ -506,7 +506,7 @@ enumerator_init_copy(VALUE obj, VALUE orig) } RB_OBJ_WRITE(obj, &ptr1->obj, ptr0->obj); - RB_OBJ_WRITE(obj, &ptr1->meth, ptr0->meth); + ptr1->meth = ptr0->meth; RB_OBJ_WRITE(obj, &ptr1->args, ptr0->args); ptr1->fib = 0; ptr1->lookahead = Qundef; diff --git a/error.c b/error.c index b62d13440fe012..bf10c811e32fa3 100644 --- a/error.c +++ b/error.c @@ -222,7 +222,6 @@ rb_warning_category_enabled_p(rb_warning_category_t category) * * +:experimental+ :: * experimental features - * * Pattern matching * * +:performance+ :: * performance hints @@ -1707,7 +1706,7 @@ check_order_keyword(VALUE opt) * "\tfrom t.rb:11:in `foo'", * "\tfrom t.rb:12:in `
'"] * - * An overrriding method should be careful with ANSI code enhancements; + * An overriding method should be careful with ANSI code enhancements; * see {Messages}[rdoc-ref:exceptions.md@Messages]. */ @@ -1791,7 +1790,7 @@ exc_message(VALUE exc) * - +:error_highlight+. * - +:syntax_suggest+. * - * An overrriding method should also be careful with ANSI code enhancements; + * An overriding method should also be careful with ANSI code enhancements; * see {Messages}[rdoc-ref:exceptions.md@Messages]. */ @@ -3524,11 +3523,11 @@ Init_Exception(void) * and will render `idPath` as an attribute name without this trick */ ID path = idPath; - /* the path failed to parse */ + /* the path that failed to parse */ rb_attr(rb_eSyntaxError, path, TRUE, FALSE, FALSE); rb_eLoadError = rb_define_class("LoadError", rb_eScriptError); - /* the path failed to load */ + /* the path that failed to load */ rb_attr(rb_eLoadError, path, TRUE, FALSE, FALSE); rb_eNotImpError = rb_define_class("NotImplementedError", rb_eScriptError); diff --git a/eval.c b/eval.c index f7d3033834919a..7fb9d35903ffd4 100644 --- a/eval.c +++ b/eval.c @@ -1547,7 +1547,7 @@ mod_using(VALUE self, VALUE module) * call-seq: * refinements -> array * - * Returns an array of modules defined within the receiver. + * Returns an array of +Refinement+ defined within the receiver. * * module A * refine Integer do diff --git a/ext/-test-/fatal/invalid.c b/ext/-test-/fatal/invalid.c index f0726edb521152..393465416a0f6c 100644 --- a/ext/-test-/fatal/invalid.c +++ b/ext/-test-/fatal/invalid.c @@ -1,9 +1,9 @@ #include #if SIZEOF_LONG == SIZEOF_VOIDP -# define NUM2PTR(x) (void *)NUM2ULONG(x) +# define NUM2PTR(x) NUM2ULONG(x) #elif SIZEOF_LONG_LONG == SIZEOF_VOIDP -# define NUM2PTR(x) (void *)NUM2ULL(x) +# define NUM2PTR(x) NUM2ULL(x) #endif static VALUE diff --git a/ext/-test-/load/resolve_symbol_resolver/resolve_symbol_resolver.c b/ext/-test-/load/resolve_symbol_resolver/resolve_symbol_resolver.c index a856319cfb652c..6cc07cc1f84b14 100644 --- a/ext/-test-/load/resolve_symbol_resolver/resolve_symbol_resolver.c +++ b/ext/-test-/load/resolve_symbol_resolver/resolve_symbol_resolver.c @@ -5,6 +5,7 @@ typedef VALUE(*target_func)(VALUE); static target_func rst_any_method; +#define resolve_func(file, name) (target_func)(uintptr_t)rb_ext_resolve_symbol(file, name) VALUE rsr_any_method(VALUE klass) { @@ -15,7 +16,7 @@ VALUE rsr_try_resolve_fname(VALUE klass) { target_func rst_something_missing = - (target_func) rb_ext_resolve_symbol("-test-/load/resolve_symbol_missing", "rst_any_method"); + resolve_func("-test-/load/resolve_symbol_missing", "rst_any_method"); if (rst_something_missing == NULL) { // This should be done in Init_*, so the error is LoadError rb_raise(rb_eLoadError, "symbol not found: missing fname"); @@ -27,7 +28,7 @@ VALUE rsr_try_resolve_sname(VALUE klass) { target_func rst_something_missing = - (target_func)rb_ext_resolve_symbol("-test-/load/resolve_symbol_target", "rst_something_missing"); + resolve_func("-test-/load/resolve_symbol_target", "rst_something_missing"); if (rst_something_missing == NULL) { // This should be done in Init_*, so the error is LoadError rb_raise(rb_eLoadError, "symbol not found: missing sname"); @@ -43,7 +44,7 @@ Init_resolve_symbol_resolver(void) * If the module and methods are defined before raising LoadError, retrying `require "this.so"` will * cause re-defining those methods (and will be warned). */ - rst_any_method = (target_func)rb_ext_resolve_symbol("-test-/load/resolve_symbol_target", "rst_any_method"); + rst_any_method = resolve_func("-test-/load/resolve_symbol_target", "rst_any_method"); if (rst_any_method == NULL) { rb_raise(rb_eLoadError, "resolve_symbol_target is not loaded"); } diff --git a/ext/digest/md5/md5cc.h b/ext/digest/md5/md5cc.h index e34d7d5c115a0c..657f573f85ddcf 100644 --- a/ext/digest/md5/md5cc.h +++ b/ext/digest/md5/md5cc.h @@ -1,8 +1,16 @@ #define COMMON_DIGEST_FOR_OPENSSL 1 #include -#ifdef __clang__ -# pragma clang diagnostic ignored "-Wdeprecated-declarations" +#ifdef __GNUC__ +# define RB_DIGEST_DIAGNOSTIC(compiler, op, flag) _Pragma(STRINGIZE(compiler diagnostic op flag)) +# ifdef RBIMPL_WARNING_IGNORED +# define RB_DIGEST_WARNING_IGNORED(flag) RBIMPL_WARNING_IGNORED(flag) +# elif defined(__clang__) +# define RB_DIGEST_WARNING_IGNORED(flag) RB_DIGEST_DIAGNOSTIC(clang, ignored, #flag) +# else /* __GNUC__ */ +# define RB_DIGEST_WARNING_IGNORED(flag) RB_DIGEST_DIAGNOSTIC(GCC, ignored, #flag) +# endif +RB_DIGEST_WARNING_IGNORED(-Wdeprecated-declarations) /* Suppress deprecation warnings of MD5 from Xcode 11.1 */ /* Although we know MD5 is deprecated too, provide just for backward * compatibility, as well as Apple does. */ @@ -17,3 +25,11 @@ static DEFINE_FINISH_FUNC_FROM_FINAL(MD5) #undef MD5_Finish #define MD5_Update rb_digest_MD5_update #define MD5_Finish rb_digest_MD5_finish + +/* + * Pre-10.6 defines are with args, which don't match the argless use in + * the function pointer inits. Thus, we redefine MD5_Init as well. + * This is a NOP on 10.6+. + */ +#undef MD5_Init +#define MD5_Init CC_MD5_Init diff --git a/ext/digest/sha1/sha1cc.h b/ext/digest/sha1/sha1cc.h index 2ed8d646ab3fa1..f39ecc623405c3 100644 --- a/ext/digest/sha1/sha1cc.h +++ b/ext/digest/sha1/sha1cc.h @@ -12,3 +12,11 @@ static DEFINE_FINISH_FUNC_FROM_FINAL(SHA1) #undef SHA1_Finish #define SHA1_Update rb_digest_SHA1_update #define SHA1_Finish rb_digest_SHA1_finish + +/* + * Pre-10.6 defines are with args, which don't match the argless use in + * the function pointer inits. Thus, we redefine SHA1_Init as well. + * This is a NOP on 10.6+. + */ +#undef SHA1_Init +#define SHA1_Init CC_SHA1_Init diff --git a/ext/digest/sha2/sha2cc.h b/ext/digest/sha2/sha2cc.h index 3f99604465b6e0..1245a2e2c7d6b4 100644 --- a/ext/digest/sha2/sha2cc.h +++ b/ext/digest/sha2/sha2cc.h @@ -1,6 +1,33 @@ #define COMMON_DIGEST_FOR_OPENSSL 1 #include +/* + * Prior to 10.5, OpenSSL-compatible definitions are missing for + * SHA2 macros, though the CC_ versions are present. + * Add the missing definitions we actually use here if needed. + * Note that the definitions are the argless 10.6+-style. + * The weird CTX mismatch is copied from the 10.6 header. + */ +#ifndef SHA256_DIGEST_LENGTH +#define SHA256_DIGEST_LENGTH CC_SHA256_DIGEST_LENGTH +#define SHA256_CTX CC_SHA256_CTX +#define SHA256_Update CC_SHA256_Update +#define SHA256_Final CC_SHA256_Final +#endif /* !defined SHA256_DIGEST_LENGTH */ + +#ifndef SHA384_DIGEST_LENGTH +#define SHA384_DIGEST_LENGTH CC_SHA384_DIGEST_LENGTH +#define SHA512_CTX CC_SHA512_CTX +#define SHA384_Update CC_SHA384_Update +#define SHA384_Final CC_SHA384_Final +#endif /* !defined SHA384_DIGEST_LENGTH */ + +#ifndef SHA512_DIGEST_LENGTH +#define SHA512_DIGEST_LENGTH CC_SHA512_DIGEST_LENGTH +#define SHA512_Update CC_SHA512_Update +#define SHA512_Final CC_SHA512_Final +#endif /* !defined SHA512_DIGEST_LENGTH */ + #define SHA256_BLOCK_LENGTH CC_SHA256_BLOCK_BYTES #define SHA384_BLOCK_LENGTH CC_SHA384_BLOCK_BYTES #define SHA512_BLOCK_LENGTH CC_SHA512_BLOCK_BYTES @@ -29,3 +56,15 @@ static DEFINE_FINISH_FUNC_FROM_FINAL(SHA512) #undef SHA512_Finish #define SHA512_Update rb_digest_SHA512_update #define SHA512_Finish rb_digest_SHA512_finish + +/* + * Pre-10.6 defines are with args, which don't match the argless use in + * the function pointer inits. Thus, we redefine SHA*_Init as well. + * This is a NOP on 10.6+. + */ +#undef SHA256_Init +#define SHA256_Init CC_SHA256_Init +#undef SHA384_Init +#define SHA384_Init CC_SHA384_Init +#undef SHA512_Init +#define SHA512_Init CC_SHA512_Init diff --git a/ext/fiddle/extconf.rb b/ext/fiddle/extconf.rb index 2d85b3eea5215f..6b0ea753fc373b 100644 --- a/ext/fiddle/extconf.rb +++ b/ext/fiddle/extconf.rb @@ -1,6 +1,11 @@ # frozen_string_literal: true require 'mkmf' +if RUBY_ENGINE == "jruby" + File.write('Makefile', dummy_makefile("").join) + return +end + # :stopdoc: def gcc? diff --git a/ext/fiddle/fiddle.gemspec b/ext/fiddle/fiddle.gemspec index fc3cbfabc7005a..65de7a30af95fd 100644 --- a/ext/fiddle/fiddle.gemspec +++ b/ext/fiddle/fiddle.gemspec @@ -40,7 +40,9 @@ Gem::Specification.new do |spec| "lib/fiddle/cparser.rb", "lib/fiddle/function.rb", "lib/fiddle/import.rb", + "lib/fiddle/jruby.rb", "lib/fiddle/pack.rb", + "lib/fiddle/ruby.rb", "lib/fiddle/struct.rb", "lib/fiddle/types.rb", "lib/fiddle/value.rb", diff --git a/ext/fiddle/lib/fiddle.rb b/ext/fiddle/lib/fiddle.rb index 6137c487c67887..b1c6cd08bf6c41 100644 --- a/ext/fiddle/lib/fiddle.rb +++ b/ext/fiddle/lib/fiddle.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -require 'fiddle.so' +require "fiddle/#{RUBY_ENGINE}" require 'fiddle/closure' require 'fiddle/function' require 'fiddle/version' @@ -10,36 +10,63 @@ module Fiddle # Returns the last win32 +Error+ of the current executing +Thread+ or nil # if none def self.win32_last_error - Thread.current[:__FIDDLE_WIN32_LAST_ERROR__] + if RUBY_ENGINE == 'jruby' + errno = FFI.errno + errno == 0 ? nil : errno + else + Thread.current[:__FIDDLE_WIN32_LAST_ERROR__] + end end # Sets the last win32 +Error+ of the current executing +Thread+ to +error+ def self.win32_last_error= error - Thread.current[:__FIDDLE_WIN32_LAST_ERROR__] = error + if RUBY_ENGINE == 'jruby' + FFI.errno = error || 0 + else + Thread.current[:__FIDDLE_WIN32_LAST_ERROR__] = error + end end # Returns the last win32 socket +Error+ of the current executing # +Thread+ or nil if none def self.win32_last_socket_error - Thread.current[:__FIDDLE_WIN32_LAST_SOCKET_ERROR__] + if RUBY_ENGINE == 'jruby' + errno = FFI.errno + errno == 0 ? nil : errno + else + Thread.current[:__FIDDLE_WIN32_LAST_SOCKET_ERROR__] + end end # Sets the last win32 socket +Error+ of the current executing # +Thread+ to +error+ def self.win32_last_socket_error= error - Thread.current[:__FIDDLE_WIN32_LAST_SOCKET_ERROR__] = error + if RUBY_ENGINE == 'jruby' + FFI.errno = error || 0 + else + Thread.current[:__FIDDLE_WIN32_LAST_SOCKET_ERROR__] = error + end end end # Returns the last +Error+ of the current executing +Thread+ or nil if none def self.last_error - Thread.current[:__FIDDLE_LAST_ERROR__] + if RUBY_ENGINE == 'jruby' + errno = FFI.errno + errno == 0 ? nil : errno + else + Thread.current[:__FIDDLE_LAST_ERROR__] + end end # Sets the last +Error+ of the current executing +Thread+ to +error+ def self.last_error= error - Thread.current[:__DL2_LAST_ERROR__] = error - Thread.current[:__FIDDLE_LAST_ERROR__] = error + if RUBY_ENGINE == 'jruby' + FFI.errno = error || 0 + else + Thread.current[:__DL2_LAST_ERROR__] = error + Thread.current[:__FIDDLE_LAST_ERROR__] = error + end end # call-seq: dlopen(library) => Fiddle::Handle diff --git a/ext/fiddle/lib/fiddle/jruby.rb b/ext/fiddle/lib/fiddle/jruby.rb new file mode 100644 index 00000000000000..9ad61d4d9d1d5b --- /dev/null +++ b/ext/fiddle/lib/fiddle/jruby.rb @@ -0,0 +1,600 @@ +# This is part of JRuby's FFI-based fiddle implementation. + +require 'ffi' + +module Fiddle + def self.malloc(size) + Fiddle::Pointer.malloc(size) + end + + def self.free(ptr) + Fiddle::Pointer::LibC::FREE.call(ptr) + nil + end + + def self.dlwrap(val) + Pointer.to_ptr(val) + end + + module Types + VOID = 0 + VOIDP = 1 + CHAR = 2 + UCHAR = -CHAR + SHORT = 3 + USHORT = -SHORT + INT = 4 + UINT = -INT + LONG = 5 + ULONG = -LONG + LONG_LONG = 6 + ULONG_LONG = -LONG_LONG + FLOAT = 7 + DOUBLE = 8 + VARIADIC = 9 + CONST_STRING = 10 + BOOL = 11 + INT8_T = CHAR + UINT8_T = UCHAR + if FFI::Type::Builtin::SHORT.size == 2 + INT16_T = SHORT + UINT16_T = USHORT + elsif FFI::Type::Builtin::INT.size == 2 + INT16_T = INT + UINT16_T = UINT + end + if FFI::Type::Builtin::SHORT.size == 4 + INT32_T = SHORT + UINT32_T = USHORT + elsif FFI::Type::Builtin::INT.size == 4 + INT32_T = INT + UINT32_T = UINT + elsif FFI::Type::Builtin::LONG.size == 4 + INT32_T = LONG + UINT32_T = ULONG + end + if FFI::Type::Builtin::INT.size == 8 + INT64_T = INT + UINT64_T = UINT + elsif FFI::Type::Builtin::LONG.size == 8 + INT64_T = LONG + UINT64_T = ULONG + else + INT64_T = LONG_LONG + UINT64_T = ULONG_LONG + end + + # FIXME: platform specific values + SSIZE_T = INT64_T + SIZE_T = -SSIZE_T + PTRDIFF_T = SSIZE_T + INTPTR_T = INT64_T + UINTPTR_T = -INTPTR_T + end + + WINDOWS = FFI::Platform.windows? + + module JRuby + FFITypes = { + 'c' => FFI::Type::INT8, + 'h' => FFI::Type::INT16, + 'i' => FFI::Type::INT32, + 'l' => FFI::Type::LONG, + 'f' => FFI::Type::FLOAT32, + 'd' => FFI::Type::FLOAT64, + 'p' => FFI::Type::POINTER, + 's' => FFI::Type::STRING, + + Types::VOID => FFI::Type::Builtin::VOID, + Types::VOIDP => FFI::Type::Builtin::POINTER, + Types::CHAR => FFI::Type::Builtin::CHAR, + Types::UCHAR => FFI::Type::Builtin::UCHAR, + Types::SHORT => FFI::Type::Builtin::SHORT, + Types::USHORT => FFI::Type::Builtin::USHORT, + Types::INT => FFI::Type::Builtin::INT, + Types::UINT => FFI::Type::Builtin::UINT, + Types::LONG => FFI::Type::Builtin::LONG, + Types::ULONG => FFI::Type::Builtin::ULONG, + Types::LONG_LONG => FFI::Type::Builtin::LONG_LONG, + Types::ULONG_LONG => FFI::Type::Builtin::ULONG_LONG, + Types::FLOAT => FFI::Type::Builtin::FLOAT, + Types::DOUBLE => FFI::Type::Builtin::DOUBLE, + Types::BOOL => FFI::Type::Builtin::BOOL, + Types::CONST_STRING => FFI::Type::Builtin::POINTER, + Types::VARIADIC => FFI::Type::Builtin::VARARGS, + } + + def self.__ffi_type__(dl_type) + if dl_type.is_a?(Symbol) + dl_type = Types.const_get(dl_type.to_s.upcase) + end + if !dl_type.is_a?(Integer) && dl_type.respond_to?(:to_int) + dl_type = dl_type.to_int + end + ffi_type = FFITypes[dl_type] + ffi_type = FFITypes[-dl_type] if ffi_type.nil? && dl_type.is_a?(Integer) && dl_type < 0 + raise TypeError.new("cannot convert #{dl_type} to ffi") unless ffi_type + ffi_type + end + end + + class Function + DEFAULT = "default" + STDCALL = "stdcall" + + def initialize(ptr, args, return_type, abi = DEFAULT, kwargs = nil) + if kwargs.nil? + if abi.kind_of? Hash + kwargs = abi + abi = DEFAULT + end + end + @name = kwargs[:name] if kwargs.kind_of? Hash + @ptr, @args, @return_type, @abi = ptr, args, return_type, abi + raise TypeError.new "invalid argument types" unless args.is_a?(Array) + + ffi_return_type = Fiddle::JRuby::__ffi_type__(@return_type) + ffi_args = @args.map { |t| Fiddle::JRuby.__ffi_type__(t) } + pointer = FFI::Pointer.new(ptr.to_i) + options = {convention: @abi} + if ffi_args.last == FFI::Type::Builtin::VARARGS + @function = FFI::VariadicInvoker.new( + pointer, + ffi_args, + ffi_return_type, + options + ) + else + @function = FFI::Function.new(ffi_return_type, ffi_args, pointer, options) + end + end + + def call(*args, &block); + if @function.is_a?(FFI::VariadicInvoker) + n_fixed_args = @args.size - 1 + n_fixed_args.step(args.size - 1, 2) do |i| + if args[i] == :const_string || args[i] == Types::CONST_STRING + args[i + 1] = String.try_convert(args[i + 1]) || args[i + 1] + end + args[i] = Fiddle::JRuby.__ffi_type__(args[i]) + end + end + result = @function.call(*args, &block) + result = Pointer.new(result) if result.is_a?(FFI::Pointer) + result + end + end + + class Closure + def initialize(ret, args, abi = Function::DEFAULT) + raise TypeError.new "invalid argument types" unless args.is_a?(Array) + + @ctype, @args = ret, args + ffi_args = @args.map { |t| Fiddle::JRuby.__ffi_type__(t) } + if ffi_args.size == 1 && ffi_args[0] == FFI::Type::Builtin::VOID + ffi_args = [] + end + @function = FFI::Function.new( + Fiddle::JRuby.__ffi_type__(@ctype), + ffi_args, + self, + :convention => abi + ) + @freed = false + end + + def to_i + @function.to_i + end + + def free + return if @freed + @function.free + @freed = true + end + + def freed? + @freed + end + end + + class Error < StandardError; end + class DLError < Error; end + class ClearedReferenceError < Error; end + + class Pointer + attr_reader :ffi_ptr + extend FFI::DataConverter + native_type FFI::Type::Builtin::POINTER + + def self.to_native(value, ctx) + if value.is_a?(Pointer) + value.ffi_ptr + + elsif value.is_a?(Integer) + FFI::Pointer.new(value) + + elsif value.is_a?(String) + value + end + end + + def self.from_native(value, ctx) + self.new(value) + end + + def self.to_ptr(value) + if value.is_a?(String) + cptr = Pointer.malloc(value.bytesize) + cptr.ffi_ptr.put_string(0, value) + cptr + + elsif value.is_a?(Array) + raise NotImplementedError, "array ptr" + + elsif value.respond_to?(:to_ptr) + ptr = value.to_ptr + case ptr + when Pointer + ptr + when FFI::Pointer + Pointer.new(ptr) + else + raise DLError.new("to_ptr should return a Fiddle::Pointer object, was #{ptr.class}") + end + + else + Pointer.new(value) + end + end + + class << self + alias [] to_ptr + end + + def []=(*args, value) + if args.size == 2 + if value.is_a?(Integer) + value = self.class.new(value) + end + if value.is_a?(Fiddle::Pointer) + value = value.to_str(args[1]) + end + + @ffi_ptr.put_bytes(args[0], value, 0, args[1]) + elsif args.size == 1 + if value.is_a?(Fiddle::Pointer) + value = value.to_str(args[0] + 1) + else + value = value.chr + end + + @ffi_ptr.put_bytes(args[0], value, 0, 1) + end + rescue FFI::NullPointerError + raise DLError.new("NULL pointer access") + end + + def initialize(addr, size = nil, free = nil) + ptr = if addr.is_a?(FFI::Pointer) + addr + + elsif addr.is_a?(Integer) + FFI::Pointer.new(addr) + + elsif addr.respond_to?(:to_ptr) + fiddle_ptr = addr.to_ptr + if fiddle_ptr.is_a?(Pointer) + fiddle_ptr.ffi_ptr + elsif fiddle_ptr.is_a?(FFI::AutoPointer) + addr.ffi_ptr + elsif fiddle_ptr.is_a?(FFI::Pointer) + fiddle_ptr + else + raise DLError.new("to_ptr should return a Fiddle::Pointer object, was #{fiddle_ptr.class}") + end + elsif addr.is_a?(IO) + raise NotImplementedError, "IO ptr isn't supported" + end + + @size = size ? size : ptr.size + @free = free + @ffi_ptr = ptr + @freed = false + end + + module LibC + extend FFI::Library + ffi_lib FFI::Library::LIBC + MALLOC = attach_function :malloc, [ :size_t ], :pointer + REALLOC = attach_function :realloc, [ :pointer, :size_t ], :pointer + FREE = attach_function :free, [ :pointer ], :void + end + + def self.malloc(size, free = nil) + if block_given? and free.nil? + message = "a free function must be supplied to #{self}.malloc " + + "when it is called with a block" + raise ArgumentError, message + end + + pointer = new(LibC.malloc(size), size, free) + if block_given? + begin + yield(pointer) + ensure + pointer.call_free + end + else + pointer + end + end + + def null? + @ffi_ptr.null? + end + + def to_ptr + @ffi_ptr + end + + def size + defined?(@layout) ? @layout.size : @size + end + + def free + @free + end + + def free=(free) + @free = free + end + + def call_free + return if @free.nil? + return if @freed + if @free == RUBY_FREE + LibC::FREE.call(@ffi_ptr) + else + @free.call(@ffi_ptr) + end + @freed = true + end + + def freed? + @freed + end + + def size=(size) + @size = size + end + + def [](index, length = nil) + if length + ffi_ptr.get_bytes(index, length) + else + ffi_ptr.get_char(index) + end + rescue FFI::NullPointerError + raise DLError.new("NULL pointer dereference") + end + + def to_i + ffi_ptr.to_i + end + alias to_int to_i + + # without \0 + def to_s(len = nil) + if len + ffi_ptr.get_string(0, len) + else + ffi_ptr.get_string(0) + end + rescue FFI::NullPointerError + raise DLError.new("NULL pointer access") + end + + def to_str(len = nil) + if len + ffi_ptr.read_string(len) + else + ffi_ptr.read_string(@size) + end + rescue FFI::NullPointerError + raise DLError.new("NULL pointer access") + end + + def to_value + raise NotImplementedError, "to_value isn't supported" + end + + def inspect + "#<#{self.class.name} ptr=#{to_i.to_s(16)} size=#{@size} free=#{@free.inspect}>" + end + + def +(delta) + self.class.new(to_i + delta, @size - delta) + end + + def -(delta) + self.class.new(to_i - delta, @size + delta) + end + + def <=>(other) + return unless other.is_a?(Pointer) + diff = self.to_i - other.to_i + return 0 if diff == 0 + diff > 0 ? 1 : -1 + end + + def eql?(other) + return unless other.is_a?(Pointer) + self.to_i == other.to_i + end + + def ==(other) + eql?(other) + end + + def ptr + Pointer.new(ffi_ptr.get_pointer(0)) + end + + def +@ + ptr + end + + def -@ + ref + end + + def ref + cptr = Pointer.malloc(FFI::Type::POINTER.size, RUBY_FREE) + cptr.ffi_ptr.put_pointer(0, ffi_ptr) + cptr + end + end + + class Handle + RTLD_GLOBAL = FFI::DynamicLibrary::RTLD_GLOBAL + RTLD_LAZY = FFI::DynamicLibrary::RTLD_LAZY + RTLD_NOW = FFI::DynamicLibrary::RTLD_NOW + + def initialize(libname = nil, flags = RTLD_LAZY | RTLD_GLOBAL) + @lib = FFI::DynamicLibrary.open(libname, flags) rescue LoadError + raise DLError.new("Could not open #{libname}") unless @lib + + @open = true + + begin + yield(self) + ensure + self.close + end if block_given? + end + + def close + raise DLError.new("closed handle") unless @open + @open = false + 0 + end + + def self.sym(func) + DEFAULT.sym(func) + end + + def sym(func) + raise TypeError.new("invalid function name") unless func.is_a?(String) + raise DLError.new("closed handle") unless @open + address = @lib.find_function(func) + raise DLError.new("unknown symbol #{func}") if address.nil? || address.null? + address.to_i + end + + def self.sym_defined?(func) + DEFAULT.sym_defined?(func) + end + + def sym_defined?(func) + raise TypeError.new("invalid function name") unless func.is_a?(String) + raise DLError.new("closed handle") unless @open + address = @lib.find_function(func) + !address.nil? && !address.null? + end + + def self.[](func) + self.sym(func) + end + + def [](func) + sym(func) + end + + def enable_close + @enable_close = true + end + + def close_enabled? + @enable_close + end + + def disable_close + @enable_close = false + end + + DEFAULT = new + end + + class Pinned + def initialize(object) + @object = object + end + + def ref + if @object.nil? + raise ClearedReferenceError, "`ref` called on a cleared object" + end + @object + end + + def clear + @object = nil + end + + def cleared? + @object.nil? + end + end + + RUBY_FREE = Fiddle::Pointer::LibC::FREE.address + NULL = Fiddle::Pointer.new(0) + + ALIGN_VOIDP = Fiddle::JRuby::FFITypes[Types::VOIDP].alignment + ALIGN_CHAR = Fiddle::JRuby::FFITypes[Types::CHAR].alignment + ALIGN_SHORT = Fiddle::JRuby::FFITypes[Types::SHORT].alignment + ALIGN_INT = Fiddle::JRuby::FFITypes[Types::INT].alignment + ALIGN_LONG = Fiddle::JRuby::FFITypes[Types::LONG].alignment + ALIGN_LONG_LONG = Fiddle::JRuby::FFITypes[Types::LONG_LONG].alignment + ALIGN_INT8_T = Fiddle::JRuby::FFITypes[Types::INT8_T].alignment + ALIGN_INT16_T = Fiddle::JRuby::FFITypes[Types::INT16_T].alignment + ALIGN_INT32_T = Fiddle::JRuby::FFITypes[Types::INT32_T].alignment + ALIGN_INT64_T = Fiddle::JRuby::FFITypes[Types::INT64_T].alignment + ALIGN_FLOAT = Fiddle::JRuby::FFITypes[Types::FLOAT].alignment + ALIGN_DOUBLE = Fiddle::JRuby::FFITypes[Types::DOUBLE].alignment + ALIGN_BOOL = Fiddle::JRuby::FFITypes[Types::BOOL].alignment + ALIGN_SIZE_T = Fiddle::JRuby::FFITypes[Types::SIZE_T].alignment + ALIGN_SSIZE_T = ALIGN_SIZE_T + ALIGN_PTRDIFF_T = Fiddle::JRuby::FFITypes[Types::PTRDIFF_T].alignment + ALIGN_INTPTR_T = Fiddle::JRuby::FFITypes[Types::INTPTR_T].alignment + ALIGN_UINTPTR_T = Fiddle::JRuby::FFITypes[Types::UINTPTR_T].alignment + + SIZEOF_VOIDP = Fiddle::JRuby::FFITypes[Types::VOIDP].size + SIZEOF_CHAR = Fiddle::JRuby::FFITypes[Types::CHAR].size + SIZEOF_UCHAR = Fiddle::JRuby::FFITypes[Types::UCHAR].size + SIZEOF_SHORT = Fiddle::JRuby::FFITypes[Types::SHORT].size + SIZEOF_USHORT = Fiddle::JRuby::FFITypes[Types::USHORT].size + SIZEOF_INT = Fiddle::JRuby::FFITypes[Types::INT].size + SIZEOF_UINT = Fiddle::JRuby::FFITypes[Types::UINT].size + SIZEOF_LONG = Fiddle::JRuby::FFITypes[Types::LONG].size + SIZEOF_ULONG = Fiddle::JRuby::FFITypes[Types::ULONG].size + SIZEOF_LONG_LONG = Fiddle::JRuby::FFITypes[Types::LONG_LONG].size + SIZEOF_ULONG_LONG = Fiddle::JRuby::FFITypes[Types::ULONG_LONG].size + SIZEOF_INT8_T = Fiddle::JRuby::FFITypes[Types::INT8_T].size + SIZEOF_UINT8_T = Fiddle::JRuby::FFITypes[Types::UINT8_T].size + SIZEOF_INT16_T = Fiddle::JRuby::FFITypes[Types::INT16_T].size + SIZEOF_UINT16_T = Fiddle::JRuby::FFITypes[Types::UINT16_T].size + SIZEOF_INT32_T = Fiddle::JRuby::FFITypes[Types::INT32_T].size + SIZEOF_UINT32_T = Fiddle::JRuby::FFITypes[Types::UINT32_T].size + SIZEOF_INT64_T = Fiddle::JRuby::FFITypes[Types::INT64_T].size + SIZEOF_UINT64_T = Fiddle::JRuby::FFITypes[Types::UINT64_T].size + SIZEOF_FLOAT = Fiddle::JRuby::FFITypes[Types::FLOAT].size + SIZEOF_DOUBLE = Fiddle::JRuby::FFITypes[Types::DOUBLE].size + SIZEOF_BOOL = Fiddle::JRuby::FFITypes[Types::BOOL].size + SIZEOF_SIZE_T = Fiddle::JRuby::FFITypes[Types::SIZE_T].size + SIZEOF_SSIZE_T = SIZEOF_SIZE_T + SIZEOF_PTRDIFF_T = Fiddle::JRuby::FFITypes[Types::PTRDIFF_T].size + SIZEOF_INTPTR_T = Fiddle::JRuby::FFITypes[Types::INTPTR_T].size + SIZEOF_UINTPTR_T = Fiddle::JRuby::FFITypes[Types::UINTPTR_T].size + SIZEOF_CONST_STRING = Fiddle::JRuby::FFITypes[Types::VOIDP].size +end diff --git a/ext/fiddle/lib/fiddle/pack.rb b/ext/fiddle/lib/fiddle/pack.rb index 81088f402b1c27..b41e36e8e26608 100644 --- a/ext/fiddle/lib/fiddle/pack.rb +++ b/ext/fiddle/lib/fiddle/pack.rb @@ -41,6 +41,12 @@ module PackInfo # :nodoc: all when SIZEOF_LONG PACK_MAP[TYPE_BOOL] = PACK_MAP[TYPE_ULONG] end + if RUBY_ENGINE == "jruby" and WINDOWS and [0].pack("l!").size == 8 + # JRuby's 'l!' pack string doesn't use 32-bit on Windows. + # See https://github.com/jruby/jruby/issues/8357 for details + PACK_MAP[TYPE_LONG] = PACK_MAP[TYPE_INT] + PACK_MAP[TYPE_ULONG] = PACK_MAP[TYPE_UINT] + end SIZE_MAP = { TYPE_VOIDP => SIZEOF_VOIDP, diff --git a/ext/fiddle/lib/fiddle/ruby.rb b/ext/fiddle/lib/fiddle/ruby.rb new file mode 100644 index 00000000000000..ee5a9a937979c6 --- /dev/null +++ b/ext/fiddle/lib/fiddle/ruby.rb @@ -0,0 +1 @@ +require "fiddle.so" diff --git a/ext/fiddle/lib/fiddle/struct.rb b/ext/fiddle/lib/fiddle/struct.rb index 6d05bbd7421c24..e4c2c79ac59b01 100644 --- a/ext/fiddle/lib/fiddle/struct.rb +++ b/ext/fiddle/lib/fiddle/struct.rb @@ -290,15 +290,28 @@ def CStructEntity.alignment(types) # Allocates a C struct with the +types+ provided. # # See Fiddle::Pointer.malloc for memory management issues. - def CStructEntity.malloc(types, func = nil, size = size(types), &block) + def CStructEntity.malloc(types, func = nil, size = size(types)) + if block_given? and func.nil? + message = "a free function must be supplied to #{self}.malloc " + + "when it is called with a block" + raise ArgumentError, message + end + + pointer = Pointer.malloc(size) + begin + struct = new(pointer, types, func) + rescue + pointer.free = func + pointer.call_free + raise + end if block_given? - super(size, func) do |struct| - struct.set_ctypes types - yield struct + begin + yield(struct) + ensure + struct.call_free end else - struct = super(size, func) - struct.set_ctypes types struct end end @@ -505,6 +518,14 @@ def []=(*args) def to_s() # :nodoc: super(@size) end + + def +(delta) + Pointer.new(to_i + delta, @size - delta) + end + + def -(delta) + Pointer.new(to_i - delta, @size + delta) + end end # A pointer to a C union diff --git a/ext/fiddle/lib/fiddle/version.rb b/ext/fiddle/lib/fiddle/version.rb index 6c5109dca8d3ef..3444e24f926a2a 100644 --- a/ext/fiddle/lib/fiddle/version.rb +++ b/ext/fiddle/lib/fiddle/version.rb @@ -1,3 +1,3 @@ module Fiddle - VERSION = "1.1.3" + VERSION = "1.1.3.dev" end diff --git a/ext/io/console/console.c b/ext/io/console/console.c index 38f6b5b7af42a3..85e6a0613eed59 100644 --- a/ext/io/console/console.c +++ b/ext/io/console/console.c @@ -81,7 +81,7 @@ getattr(int fd, conmode *t) #define CSI "\x1b\x5b" -static ID id_getc, id_console, id_close; +static ID id_getc, id_close; static ID id_gets, id_flush, id_chomp_bang; #if defined HAVE_RUBY_FIBER_SCHEDULER_H @@ -1538,10 +1538,8 @@ console_clear_screen(VALUE io) static VALUE io_open_descriptor_fallback(VALUE klass, int descriptor, int mode, VALUE path, VALUE timeout, void *encoding) { - rb_update_max_fd(descriptor); - VALUE arguments[2] = { - INT2NUM(descriptor), + (rb_update_max_fd(descriptor), INT2NUM(descriptor)), INT2FIX(mode), }; @@ -1566,6 +1564,62 @@ rb_io_closed_p(VALUE io) } #endif +#if defined(RB_EXT_RACTOR_SAFE) && defined(HAVE_RB_RACTOR_LOCAL_STORAGE_VALUE_NEWKEY) +# define USE_RACTOR_STORAGE 1 +#else +# define USE_RACTOR_STORAGE 0 +#endif + +#if USE_RACTOR_STORAGE +#include "ruby/ractor.h" +static rb_ractor_local_key_t key_console_dev; + +static bool +console_dev_get(VALUE klass, VALUE *dev) +{ + return rb_ractor_local_storage_value_lookup(key_console_dev, dev); +} + +static void +console_dev_set(VALUE klass, VALUE value) +{ + rb_ractor_local_storage_value_set(key_console_dev, value); +} + +static void +console_dev_remove(VALUE klass) +{ + console_dev_set(klass, Qnil); +} + +#else + +static ID id_console; + +static int +console_dev_get(VALUE klass, VALUE *dev) +{ + if (rb_const_defined(klass, id_console)) { + *dev = rb_const_get(klass, id_console); + return 1; + } + return 0; +} + +static void +console_dev_set(VALUE klass, VALUE value) +{ + rb_const_set(klass, id_console, value); +} + +static void +console_dev_remove(VALUE klass) +{ + rb_const_remove(klass, id_console); +} + +#endif + /* * call-seq: * IO.console -> # @@ -1594,10 +1648,9 @@ console_dev(int argc, VALUE *argv, VALUE klass) // Force the class to be File. if (klass == rb_cIO) klass = rb_cFile; - if (rb_const_defined(klass, id_console)) { - con = rb_const_get(klass, id_console); + if (console_dev_get(klass, &con)) { if (!RB_TYPE_P(con, T_FILE) || RTEST(rb_io_closed_p(con))) { - rb_const_remove(klass, id_console); + console_dev_remove(klass); con = 0; } } @@ -1606,7 +1659,7 @@ console_dev(int argc, VALUE *argv, VALUE klass) if (sym == ID2SYM(id_close) && argc == 1) { if (con) { rb_io_close(con); - rb_const_remove(klass, id_console); + console_dev_remove(klass); con = 0; } return Qnil; @@ -1647,7 +1700,7 @@ console_dev(int argc, VALUE *argv, VALUE klass) #ifdef CONSOLE_DEVICE_FOR_WRITING rb_io_set_write_io(con, out); #endif - rb_const_set(klass, id_console, con); + console_dev_set(klass, con); } if (sym) { @@ -1764,12 +1817,20 @@ io_getpass(int argc, VALUE *argv, VALUE io) void Init_console(void) { +#if USE_RACTOR_STORAGE + RB_EXT_RACTOR_SAFE(true); +#endif + #undef rb_intern +#if USE_RACTOR_STORAGE + key_console_dev = rb_ractor_local_storage_value_newkey(); +#else + id_console = rb_intern("console"); +#endif id_getc = rb_intern("getc"); id_gets = rb_intern("gets"); id_flush = rb_intern("flush"); id_chomp_bang = rb_intern("chomp!"); - id_console = rb_intern("console"); id_close = rb_intern("close"); #define init_rawmode_opt_id(name) \ rawmode_opt_ids[kwd_##name] = rb_intern(#name) diff --git a/ext/io/console/depend b/ext/io/console/depend index 2907722dbca861..e66b6f4f5d2144 100644 --- a/ext/io/console/depend +++ b/ext/io/console/depend @@ -169,6 +169,7 @@ console.o: $(hdrdir)/ruby/io.h console.o: $(hdrdir)/ruby/missing.h console.o: $(hdrdir)/ruby/onigmo.h console.o: $(hdrdir)/ruby/oniguruma.h +console.o: $(hdrdir)/ruby/ractor.h console.o: $(hdrdir)/ruby/ruby.h console.o: $(hdrdir)/ruby/st.h console.o: $(hdrdir)/ruby/subst.h diff --git a/ext/io/console/extconf.rb b/ext/io/console/extconf.rb index 0cd8eaea0f40fb..6161b747b5fca9 100644 --- a/ext/io/console/extconf.rb +++ b/ext/io/console/extconf.rb @@ -10,6 +10,7 @@ have_func("rb_io_get_write_io") have_func("rb_io_closed_p") have_func("rb_io_open_descriptor") +have_func("rb_ractor_local_storage_value_newkey") is_wasi = /wasi/ =~ MakeMakefile::RbConfig::CONFIG["platform"] # `ok` can be `true`, `false`, or `nil`: diff --git a/ext/json/fbuffer/fbuffer.h b/ext/json/fbuffer/fbuffer.h index dc8f406b5b8594..1fb9d667003452 100644 --- a/ext/json/fbuffer/fbuffer.h +++ b/ext/json/fbuffer/fbuffer.h @@ -31,12 +31,8 @@ # define RB_OBJ_STRING(obj) StringValueCStr(obj) #endif -#ifdef HAVE_RUBY_ENCODING_H #include "ruby/encoding.h" #define FORCE_UTF8(obj) rb_enc_associate((obj), rb_utf8_encoding()) -#else -#define FORCE_UTF8(obj) -#endif /* We don't need to guard objects for rbx, so let's do nothing at all. */ #ifndef RB_GC_GUARD @@ -70,6 +66,10 @@ static FBuffer *fbuffer_dup(FBuffer *fb); static VALUE fbuffer_to_s(FBuffer *fb); #endif +#ifndef RB_UNLIKELY +#define RB_UNLIKELY(expr) expr +#endif + static FBuffer *fbuffer_alloc(unsigned long initial_length) { FBuffer *fb; @@ -91,20 +91,22 @@ static void fbuffer_clear(FBuffer *fb) fb->len = 0; } -static void fbuffer_inc_capa(FBuffer *fb, unsigned long requested) +static inline void fbuffer_inc_capa(FBuffer *fb, unsigned long requested) { - unsigned long required; + if (RB_UNLIKELY(requested > fb->capa - fb->len)) { + unsigned long required; - if (!fb->ptr) { - fb->ptr = ALLOC_N(char, fb->initial_length); - fb->capa = fb->initial_length; - } + if (RB_UNLIKELY(!fb->ptr)) { + fb->ptr = ALLOC_N(char, fb->initial_length); + fb->capa = fb->initial_length; + } - for (required = fb->capa; requested > required - fb->len; required <<= 1); + for (required = fb->capa; requested > required - fb->len; required <<= 1); - if (required > fb->capa) { - REALLOC_N(fb->ptr, char, required); - fb->capa = required; + if (required > fb->capa) { + REALLOC_N(fb->ptr, char, required); + fb->capa = required; + } } } diff --git a/ext/json/generator/generator.c b/ext/json/generator/generator.c index e9686192059840..50fcb77bdfccc4 100644 --- a/ext/json/generator/generator.c +++ b/ext/json/generator/generator.c @@ -18,315 +18,122 @@ static ID i_to_s, i_to_json, i_new, i_indent, i_space, i_space_before, i_aref, i_send, i_respond_to_p, i_match, i_keys, i_depth, i_buffer_initial_length, i_dup, i_script_safe, i_escape_slash, i_strict; -/* - * Copyright 2001-2004 Unicode, Inc. +/* Converts in_string to a JSON string (without the wrapping '"' + * characters) in FBuffer out_buffer. * - * Disclaimer + * Character are JSON-escaped according to: * - * This source code is provided as is by Unicode, Inc. No claims are - * made as to fitness for any particular purpose. No warranties of any - * kind are expressed or implied. The recipient agrees to determine - * applicability of information provided. If this file has been - * purchased on magnetic or optical media from Unicode, Inc., the - * sole remedy for any claim will be exchange of defective media - * within 90 days of receipt. + * - Always: ASCII control characters (0x00-0x1F), dquote, and + * backslash. * - * Limitations on Rights to Redistribute This Code + * - If out_ascii_only: non-ASCII characters (>0x7F) * - * Unicode, Inc. hereby grants the right to freely use the information - * supplied in this file in the creation of products supporting the - * Unicode Standard, and to make copies of this file in any form - * for internal or external distribution as long as this notice - * remains attached. - */ - -/* - * Index into the table below with the first byte of a UTF-8 sequence to - * get the number of trailing bytes that are supposed to follow it. - * Note that *legal* UTF-8 values can't have 4 or 5-bytes. The table is - * left as-is for anyone who may want to do such conversion, which was - * allowed in earlier algorithms. - */ -static const char trailingBytesForUTF8[256] = { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5 -}; - -/* - * Magic values subtracted from a buffer value during UTF8 conversion. - * This table contains as many values as there might be trailing bytes - * in a UTF-8 sequence. - */ -static const UTF32 offsetsFromUTF8[6] = { 0x00000000UL, 0x00003080UL, 0x000E2080UL, - 0x03C82080UL, 0xFA082080UL, 0x82082080UL }; - -/* - * Utility routine to tell whether a sequence of bytes is legal UTF-8. - * This must be called with the length pre-determined by the first byte. - * If not calling this from ConvertUTF8to*, then the length can be set by: - * length = trailingBytesForUTF8[*source]+1; - * and the sequence is illegal right away if there aren't that many bytes - * available. - * If presented with a length > 4, this returns 0. The Unicode - * definition of UTF-8 goes up to 4-byte sequences. + * - If out_script_safe: forwardslash, line separator (U+2028), and + * paragraph separator (U+2029) + * + * Everything else (should be UTF-8) is just passed through and + * appended to the result. */ -static unsigned char isLegalUTF8(const UTF8 *source, unsigned long length) -{ - UTF8 a; - const UTF8 *srcptr = source+length; - switch (length) { - default: return 0; - /* Everything else falls through when "1"... */ - case 4: if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return 0; - case 3: if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return 0; - case 2: if ((a = (*--srcptr)) > 0xBF) return 0; - - switch (*source) { - /* no fall-through in this inner switch */ - case 0xE0: if (a < 0xA0) return 0; break; - case 0xED: if (a > 0x9F) return 0; break; - case 0xF0: if (a < 0x90) return 0; break; - case 0xF4: if (a > 0x8F) return 0; break; - default: if (a < 0x80) return 0; - } - - case 1: if (*source >= 0x80 && *source < 0xC2) return 0; - } - if (*source > 0xF4) return 0; - return 1; -} - -/* Escapes the UTF16 character and stores the result in the buffer buf. */ -static void unicode_escape(char *buf, UTF16 character) +static void convert_UTF8_to_JSON(FBuffer *out_buffer, VALUE in_string, bool out_ascii_only, bool out_script_safe) { - const char *digits = "0123456789abcdef"; - - buf[2] = digits[character >> 12]; - buf[3] = digits[(character >> 8) & 0xf]; - buf[4] = digits[(character >> 4) & 0xf]; - buf[5] = digits[character & 0xf]; -} + const char *hexdig = "0123456789abcdef"; + char scratch[12] = { '\\', 'u', 0, 0, 0, 0, '\\', 'u' }; -/* Escapes the UTF16 character and stores the result in the buffer buf, then - * the buffer buf is appended to the FBuffer buffer. */ -static void unicode_escape_to_buffer(FBuffer *buffer, char buf[6], UTF16 - character) -{ - unicode_escape(buf, character); - fbuffer_append(buffer, buf, 6); -} + const char *in_utf8_str = RSTRING_PTR(in_string); + unsigned long in_utf8_len = RSTRING_LEN(in_string); + bool in_is_ascii_only = rb_enc_str_asciionly_p(in_string); -/* Converts string to a JSON string in FBuffer buffer, where all but the ASCII - * and control characters are JSON escaped. */ -static void convert_UTF8_to_JSON_ASCII(FBuffer *buffer, VALUE string, char script_safe) -{ - const UTF8 *source = (UTF8 *) RSTRING_PTR(string); - const UTF8 *sourceEnd = source + RSTRING_LEN(string); - char buf[6] = { '\\', 'u' }; + unsigned long beg = 0, pos; - while (source < sourceEnd) { - UTF32 ch = 0; - unsigned short extraBytesToRead = trailingBytesForUTF8[*source]; - if (source + extraBytesToRead >= sourceEnd) { - rb_raise(rb_path2class("JSON::GeneratorError"), - "partial character in source, but hit end"); - } - if (!isLegalUTF8(source, extraBytesToRead+1)) { - rb_raise(rb_path2class("JSON::GeneratorError"), - "source sequence is illegal/malformed utf-8"); - } - /* - * The cases all fall through. See "Note A" below. - */ - switch (extraBytesToRead) { - case 5: ch += *source++; ch <<= 6; /* remember, illegal UTF-8 */ - case 4: ch += *source++; ch <<= 6; /* remember, illegal UTF-8 */ - case 3: ch += *source++; ch <<= 6; - case 2: ch += *source++; ch <<= 6; - case 1: ch += *source++; ch <<= 6; - case 0: ch += *source++; - } - ch -= offsetsFromUTF8[extraBytesToRead]; + for (pos = 0; pos < in_utf8_len;) { + uint32_t ch; + short ch_len; + bool should_escape; - if (ch <= UNI_MAX_BMP) { /* Target is a character <= 0xFFFF */ - /* UTF-16 surrogate values are illegal in UTF-32 */ - if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_LOW_END) { -#if UNI_STRICT_CONVERSION - source -= (extraBytesToRead+1); /* return to the illegal value itself */ + /* UTF-8 decoding */ + if (in_is_ascii_only) { + ch = in_utf8_str[pos]; + ch_len = 1; + } else { + short i; + if ((in_utf8_str[pos] & 0x80) == 0x00) { ch_len = 1; ch = in_utf8_str[pos]; } /* leading 1 bit is 0b0 */ + else if ((in_utf8_str[pos] & 0xE0) == 0xC0) { ch_len = 2; ch = in_utf8_str[pos] & 0x1F; } /* leading 3 bits are 0b110 */ + else if ((in_utf8_str[pos] & 0xF0) == 0xE0) { ch_len = 3; ch = in_utf8_str[pos] & 0x0F; } /* leading 4 bits are 0b1110 */ + else if ((in_utf8_str[pos] & 0xF8) == 0xF0) { ch_len = 4; ch = in_utf8_str[pos] & 0x07; } /* leading 5 bits are 0b11110 */ + else rb_raise(rb_path2class("JSON::GeneratorError"), - "source sequence is illegal/malformed utf-8"); -#else - unicode_escape_to_buffer(buffer, buf, UNI_REPLACEMENT_CHAR); -#endif - } else { - /* normal case */ - if (ch >= 0x20 && ch <= 0x7f) { - switch (ch) { - case '\\': - fbuffer_append(buffer, "\\\\", 2); - break; - case '"': - fbuffer_append(buffer, "\\\"", 2); - break; - case '/': - if(script_safe) { - fbuffer_append(buffer, "\\/", 2); - break; - } - default: - fbuffer_append_char(buffer, (char)ch); - break; - } - } else { - switch (ch) { - case '\n': - fbuffer_append(buffer, "\\n", 2); - break; - case '\r': - fbuffer_append(buffer, "\\r", 2); - break; - case '\t': - fbuffer_append(buffer, "\\t", 2); - break; - case '\f': - fbuffer_append(buffer, "\\f", 2); - break; - case '\b': - fbuffer_append(buffer, "\\b", 2); - break; - default: - unicode_escape_to_buffer(buffer, buf, (UTF16) ch); - break; - } - } + "source sequence is illegal/malformed utf-8"); + if ((pos+ch_len) > in_utf8_len) + rb_raise(rb_path2class("JSON::GeneratorError"), + "partial character in source, but hit end"); + for (i = 1; i < ch_len; i++) { + if ((in_utf8_str[pos+i] & 0xC0) != 0x80) /* leading 2 bits should be 0b10 */ + rb_raise(rb_path2class("JSON::GeneratorError"), + "source sequence is illegal/malformed utf-8"); + ch = (ch<<6) | (in_utf8_str[pos+i] & 0x3F); } - } else if (ch > UNI_MAX_UTF16) { -#if UNI_STRICT_CONVERSION - source -= (extraBytesToRead+1); /* return to the start */ - rb_raise(rb_path2class("JSON::GeneratorError"), - "source sequence is illegal/malformed utf8"); -#else - unicode_escape_to_buffer(buffer, buf, UNI_REPLACEMENT_CHAR); -#endif - } else { - /* target is a character in range 0xFFFF - 0x10FFFF. */ - ch -= halfBase; - unicode_escape_to_buffer(buffer, buf, (UTF16)((ch >> halfShift) + UNI_SUR_HIGH_START)); - unicode_escape_to_buffer(buffer, buf, (UTF16)((ch & halfMask) + UNI_SUR_LOW_START)); + if (ch > 0x10FFFF) + rb_raise(rb_path2class("JSON::GeneratorError"), + "source sequence is illegal/malformed utf-8"); } - } - RB_GC_GUARD(string); -} - -/* Converts string to a JSON string in FBuffer buffer, where only the - * characters required by the JSON standard are JSON escaped. The remaining - * characters (should be UTF8) are just passed through and appended to the - * result. */ -static void convert_UTF8_to_JSON(FBuffer *buffer, VALUE string, char script_safe) -{ - const char *ptr = RSTRING_PTR(string), *p; - unsigned long len = RSTRING_LEN(string), start = 0, end = 0; - const char *escape = NULL; - int escape_len; - unsigned char c; - char buf[6] = { '\\', 'u' }; - int ascii_only = rb_enc_str_asciionly_p(string); - - for (start = 0, end = 0; end < len;) { - p = ptr + end; - c = (unsigned char) *p; - if (c < 0x20) { - switch (c) { - case '\n': - escape = "\\n"; - escape_len = 2; - break; - case '\r': - escape = "\\r"; - escape_len = 2; - break; - case '\t': - escape = "\\t"; - escape_len = 2; - break; - case '\f': - escape = "\\f"; - escape_len = 2; - break; - case '\b': - escape = "\\b"; - escape_len = 2; - break; - default: - unicode_escape(buf, (UTF16) *p); - escape = buf; - escape_len = 6; - break; - } - } else { - switch (c) { - case '\\': - escape = "\\\\"; - escape_len = 2; - break; - case '"': - escape = "\\\""; - escape_len = 2; - break; - case '/': - if(script_safe) { - escape = "\\/"; - escape_len = 2; - break; - } + + /* JSON policy */ + should_escape = + (ch < 0x20) || + (ch == '"') || + (ch == '\\') || + (out_ascii_only && (ch > 0x7F)) || + (out_script_safe && (ch == '/')) || + (out_script_safe && (ch == 0x2028)) || + (out_script_safe && (ch == 0x2029)); + + /* JSON encoding */ + if (should_escape) { + if (pos > beg) + fbuffer_append(out_buffer, &in_utf8_str[beg], pos - beg); + beg = pos + ch_len; + switch (ch) { + case '"': fbuffer_append(out_buffer, "\\\"", 2); break; + case '\\': fbuffer_append(out_buffer, "\\\\", 2); break; + case '/': fbuffer_append(out_buffer, "\\/", 2); break; + case '\b': fbuffer_append(out_buffer, "\\b", 2); break; + case '\f': fbuffer_append(out_buffer, "\\f", 2); break; + case '\n': fbuffer_append(out_buffer, "\\n", 2); break; + case '\r': fbuffer_append(out_buffer, "\\r", 2); break; + case '\t': fbuffer_append(out_buffer, "\\t", 2); break; default: - { - unsigned short clen = 1; - if (!ascii_only) { - clen += trailingBytesForUTF8[c]; - if (end + clen > len) { - rb_raise(rb_path2class("JSON::GeneratorError"), - "partial character in source, but hit end"); - } - - if (script_safe && c == 0xE2) { - unsigned char c2 = (unsigned char) *(p+1); - unsigned char c3 = (unsigned char) *(p+2); - if (c2 == 0x80 && (c3 == 0xA8 || c3 == 0xA9)) { - fbuffer_append(buffer, ptr + start, end - start); - start = end = (end + clen); - if (c3 == 0xA8) { - fbuffer_append(buffer, "\\u2028", 6); - } else { - fbuffer_append(buffer, "\\u2029", 6); - } - continue; - } - } - - if (!isLegalUTF8((UTF8 *) p, clen)) { - rb_raise(rb_path2class("JSON::GeneratorError"), - "source sequence is illegal/malformed utf-8"); - } - } - end += clen; + if (ch <= 0xFFFF) { + scratch[2] = hexdig[ch >> 12]; + scratch[3] = hexdig[(ch >> 8) & 0xf]; + scratch[4] = hexdig[(ch >> 4) & 0xf]; + scratch[5] = hexdig[ch & 0xf]; + fbuffer_append(out_buffer, scratch, 6); + } else { + uint16_t hi, lo; + ch -= 0x10000; + hi = 0xD800 + (uint16_t)(ch >> 10); + lo = 0xDC00 + (uint16_t)(ch & 0x3FF); + + scratch[2] = hexdig[hi >> 12]; + scratch[3] = hexdig[(hi >> 8) & 0xf]; + scratch[4] = hexdig[(hi >> 4) & 0xf]; + scratch[5] = hexdig[hi & 0xf]; + + scratch[8] = hexdig[lo >> 12]; + scratch[9] = hexdig[(lo >> 8) & 0xf]; + scratch[10] = hexdig[(lo >> 4) & 0xf]; + scratch[11] = hexdig[lo & 0xf]; + + fbuffer_append(out_buffer, scratch, 12); } - continue; - break; } } - fbuffer_append(buffer, ptr + start, end - start); - fbuffer_append(buffer, escape, escape_len); - start = ++end; - escape = NULL; + + pos += ch_len; } - fbuffer_append(buffer, ptr + start, end - start); + if (beg < in_utf8_len) + fbuffer_append(out_buffer, &in_utf8_str[beg], in_utf8_len - beg); + RB_GC_GUARD(in_string); } static char *fstrndup(const char *ptr, unsigned long len) { @@ -847,7 +654,6 @@ json_object_i(VALUE key, VALUE val, VALUE _arg) long delim2_len = FBUFFER_LEN(state->object_delim2); long depth = state->depth; int j; - VALUE klass, key_to_s; if (arg->iter > 0) fbuffer_append(buffer, delim, delim_len); if (object_nl) { @@ -859,15 +665,19 @@ json_object_i(VALUE key, VALUE val, VALUE _arg) } } - klass = CLASS_OF(key); - if (klass == rb_cString) { - key_to_s = key; - } else if (klass == rb_cSymbol) { - key_to_s = rb_sym2str(key); - } else { - key_to_s = rb_funcall(key, i_to_s, 0); + VALUE key_to_s; + switch(rb_type(key)) { + case T_STRING: + key_to_s = key; + break; + case T_SYMBOL: + key_to_s = rb_sym2str(key); + break; + default: + key_to_s = rb_convert_type(key, T_STRING, "String", "to_s"); + break; } - Check_Type(key_to_s, T_STRING); + generate_json(buffer, Vstate, state, key_to_s); fbuffer_append(buffer, delim2, delim2_len); generate_json(buffer, Vstate, state, val); @@ -947,28 +757,20 @@ static void generate_json_array(FBuffer *buffer, VALUE Vstate, JSON_Generator_St fbuffer_append_char(buffer, ']'); } -#ifdef HAVE_RUBY_ENCODING_H static int enc_utf8_compatible_p(rb_encoding *enc) { if (enc == rb_usascii_encoding()) return 1; if (enc == rb_utf8_encoding()) return 1; return 0; } -#endif static void generate_json_string(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj) { fbuffer_append_char(buffer, '"'); -#ifdef HAVE_RUBY_ENCODING_H if (!enc_utf8_compatible_p(rb_enc_get(obj))) { obj = rb_str_export_to_enc(obj, rb_utf8_encoding()); } -#endif - if (state->ascii_only) { - convert_UTF8_to_JSON_ASCII(buffer, obj, state->script_safe); - } else { - convert_UTF8_to_JSON(buffer, obj, state->script_safe); - } + convert_UTF8_to_JSON(buffer, obj, state->ascii_only, state->script_safe); fbuffer_append_char(buffer, '"'); } diff --git a/ext/json/generator/generator.h b/ext/json/generator/generator.h index 98b7d833f3d4c8..03709447ff7a4a 100644 --- a/ext/json/generator/generator.h +++ b/ext/json/generator/generator.h @@ -6,6 +6,23 @@ #include "ruby.h" +/* This is the fallback definition from Ruby 3.4 */ +#ifndef RBIMPL_STDBOOL_H +#if defined(__cplusplus) +# if defined(HAVE_STDBOOL_H) && (__cplusplus >= 201103L) +# include +# endif +#elif defined(HAVE_STDBOOL_H) +# include +#elif !defined(HAVE__BOOL) +typedef unsigned char _Bool; +# define bool _Bool +# define true ((_Bool)+1) +# define false ((_Bool)+0) +# define __bool_true_false_are_defined +#endif +#endif + #ifdef HAVE_RUBY_RE_H #include "ruby/re.h" #else @@ -22,35 +39,7 @@ #define option_given_p(opts, key) RTEST(rb_funcall(opts, i_key_p, 1, key)) -/* unicode definitions */ - -#define UNI_STRICT_CONVERSION 1 - -typedef unsigned long UTF32; /* at least 32 bits */ -typedef unsigned short UTF16; /* at least 16 bits */ -typedef unsigned char UTF8; /* typically 8 bits */ - -#define UNI_REPLACEMENT_CHAR (UTF32)0x0000FFFD -#define UNI_MAX_BMP (UTF32)0x0000FFFF -#define UNI_MAX_UTF16 (UTF32)0x0010FFFF -#define UNI_MAX_UTF32 (UTF32)0x7FFFFFFF -#define UNI_MAX_LEGAL_UTF32 (UTF32)0x0010FFFF - -#define UNI_SUR_HIGH_START (UTF32)0xD800 -#define UNI_SUR_HIGH_END (UTF32)0xDBFF -#define UNI_SUR_LOW_START (UTF32)0xDC00 -#define UNI_SUR_LOW_END (UTF32)0xDFFF - -static const int halfShift = 10; /* used for shifting by 10 bits */ - -static const UTF32 halfBase = 0x0010000UL; -static const UTF32 halfMask = 0x3FFUL; - -static unsigned char isLegalUTF8(const UTF8 *source, unsigned long length); -static void unicode_escape(char *buf, UTF16 character); -static void unicode_escape_to_buffer(FBuffer *buffer, char buf[6], UTF16 character); -static void convert_UTF8_to_JSON_ASCII(FBuffer *buffer, VALUE string, char script_safe); -static void convert_UTF8_to_JSON(FBuffer *buffer, VALUE string, char script_safe); +static void convert_UTF8_to_JSON(FBuffer *out_buffer, VALUE in_string, bool out_ascii_only, bool out_script_safe); static char *fstrndup(const char *ptr, unsigned long len); /* ruby api and some helpers */ diff --git a/ext/json/json.gemspec b/ext/json/json.gemspec index 64d0c81391e2f8..5a951a8b25db83 100644 --- a/ext/json/json.gemspec +++ b/ext/json/json.gemspec @@ -54,14 +54,14 @@ Gem::Specification.new do |s| "lib/json/pure/parser.rb", "lib/json/version.rb", ] - s.homepage = "https://flori.github.io/json" + s.homepage = "https://ruby.github.io/json" s.metadata = { - 'bug_tracker_uri' => 'https://github.com/flori/json/issues', - 'changelog_uri' => 'https://github.com/flori/json/blob/master/CHANGES.md', - 'documentation_uri' => 'https://flori.github.io/json/doc/index.html', + 'bug_tracker_uri' => 'https://github.com/ruby/json/issues', + 'changelog_uri' => 'https://github.com/ruby/json/blob/master/CHANGES.md', + 'documentation_uri' => 'https://ruby.github.io/json/doc/index.html', 'homepage_uri' => s.homepage, - 'source_code_uri' => 'https://github.com/flori/json', - 'wiki_uri' => 'https://github.com/flori/json/wiki' + 'source_code_uri' => 'https://github.com/ruby/json', + 'wiki_uri' => 'https://github.com/ruby/json/wiki' } s.required_ruby_version = Gem::Requirement.new(">= 2.3") diff --git a/ext/json/parser/parser.c b/ext/json/parser/parser.c index 7e44d469f8c7e2..37627edbd40baf 100644 --- a/ext/json/parser/parser.c +++ b/ext/json/parser/parser.c @@ -3,28 +3,6 @@ #include "../fbuffer/fbuffer.h" #include "parser.h" -#if defined HAVE_RUBY_ENCODING_H -# define EXC_ENCODING rb_utf8_encoding(), -# ifndef HAVE_RB_ENC_RAISE -static void -enc_raise(rb_encoding *enc, VALUE exc, const char *fmt, ...) -{ - va_list args; - VALUE mesg; - - va_start(args, fmt); - mesg = rb_enc_vsprintf(enc, fmt, args); - va_end(args); - - rb_exc_raise(rb_exc_new3(exc, mesg)); -} -# define rb_enc_raise enc_raise -# endif -#else -# define EXC_ENCODING /* nothing */ -# define rb_enc_raise rb_raise -#endif - /* unicode */ static const signed char digit_values[256] = { @@ -44,26 +22,28 @@ static const signed char digit_values[256] = { -1, -1, -1, -1, -1, -1, -1 }; -static UTF32 unescape_unicode(const unsigned char *p) +static uint32_t unescape_unicode(const unsigned char *p) { + const uint32_t replacement_char = 0xFFFD; + signed char b; - UTF32 result = 0; + uint32_t result = 0; b = digit_values[p[0]]; - if (b < 0) return UNI_REPLACEMENT_CHAR; + if (b < 0) return replacement_char; result = (result << 4) | (unsigned char)b; b = digit_values[p[1]]; - if (b < 0) return UNI_REPLACEMENT_CHAR; + if (b < 0) return replacement_char; result = (result << 4) | (unsigned char)b; b = digit_values[p[2]]; - if (b < 0) return UNI_REPLACEMENT_CHAR; + if (b < 0) return replacement_char; result = (result << 4) | (unsigned char)b; b = digit_values[p[3]]; - if (b < 0) return UNI_REPLACEMENT_CHAR; + if (b < 0) return replacement_char; result = (result << 4) | (unsigned char)b; return result; } -static int convert_UTF32_to_UTF8(char *buf, UTF32 ch) +static int convert_UTF32_to_UTF8(char *buf, uint32_t ch) { int len = 1; if (ch <= 0x7F) { @@ -99,11 +79,11 @@ static ID i_json_creatable_p, i_json_create, i_create_id, i_create_additions, i_leftshift, i_new, i_try_convert, i_freeze, i_uminus; -#line 125 "parser.rl" +#line 105 "parser.rl" -#line 107 "parser.c" +#line 87 "parser.c" enum {JSON_object_start = 1}; enum {JSON_object_first_final = 27}; enum {JSON_object_error = 0}; @@ -111,7 +91,7 @@ enum {JSON_object_error = 0}; enum {JSON_object_en_main = 1}; -#line 167 "parser.rl" +#line 147 "parser.rl" static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting) @@ -127,14 +107,14 @@ static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *resu *result = NIL_P(object_class) ? rb_hash_new() : rb_class_new_instance(0, 0, object_class); -#line 131 "parser.c" +#line 111 "parser.c" { cs = JSON_object_start; } -#line 182 "parser.rl" +#line 162 "parser.rl" -#line 138 "parser.c" +#line 118 "parser.c" { if ( p == pe ) goto _test_eof; @@ -162,7 +142,7 @@ case 2: goto st2; goto st0; tr2: -#line 149 "parser.rl" +#line 129 "parser.rl" { char *np; json->parsing_name = 1; @@ -175,7 +155,7 @@ case 2: if ( ++p == pe ) goto _test_eof3; case 3: -#line 179 "parser.c" +#line 159 "parser.c" switch( (*p) ) { case 13: goto st3; case 32: goto st3; @@ -242,7 +222,7 @@ case 8: goto st8; goto st0; tr11: -#line 133 "parser.rl" +#line 113 "parser.rl" { VALUE v = Qnil; char *np = JSON_parse_value(json, p, pe, &v, current_nesting); @@ -263,7 +243,7 @@ case 8: if ( ++p == pe ) goto _test_eof9; case 9: -#line 267 "parser.c" +#line 247 "parser.c" switch( (*p) ) { case 13: goto st9; case 32: goto st9; @@ -352,14 +332,14 @@ case 18: goto st9; goto st18; tr4: -#line 157 "parser.rl" +#line 137 "parser.rl" { p--; {p++; cs = 27; goto _out;} } goto st27; st27: if ( ++p == pe ) goto _test_eof27; case 27: -#line 363 "parser.c" +#line 343 "parser.c" goto st0; st19: if ( ++p == pe ) @@ -457,7 +437,7 @@ case 26: _out: {} } -#line 183 "parser.rl" +#line 163 "parser.rl" if (cs >= JSON_object_first_final) { if (json->create_additions) { @@ -482,7 +462,7 @@ case 26: -#line 486 "parser.c" +#line 466 "parser.c" enum {JSON_value_start = 1}; enum {JSON_value_first_final = 29}; enum {JSON_value_error = 0}; @@ -490,7 +470,7 @@ enum {JSON_value_error = 0}; enum {JSON_value_en_main = 1}; -#line 283 "parser.rl" +#line 263 "parser.rl" static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting) @@ -498,14 +478,14 @@ static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *resul int cs = EVIL; -#line 502 "parser.c" +#line 482 "parser.c" { cs = JSON_value_start; } -#line 290 "parser.rl" +#line 270 "parser.rl" -#line 509 "parser.c" +#line 489 "parser.c" { if ( p == pe ) goto _test_eof; @@ -539,14 +519,14 @@ case 1: cs = 0; goto _out; tr2: -#line 235 "parser.rl" +#line 215 "parser.rl" { char *np = JSON_parse_string(json, p, pe, result); if (np == NULL) { p--; {p++; cs = 29; goto _out;} } else {p = (( np))-1;} } goto st29; tr3: -#line 240 "parser.rl" +#line 220 "parser.rl" { char *np; if(pe > p + 8 && !strncmp(MinusInfinity, p, 9)) { @@ -555,7 +535,7 @@ cs = 0; {p = (( p + 10))-1;} p--; {p++; cs = 29; goto _out;} } else { - rb_enc_raise(EXC_ENCODING eParserError, "unexpected token at '%s'", p); + rb_enc_raise(rb_utf8_encoding(), eParserError, "unexpected token at '%s'", p); } } np = JSON_parse_float(json, p, pe, result); @@ -566,7 +546,7 @@ cs = 0; } goto st29; tr7: -#line 258 "parser.rl" +#line 238 "parser.rl" { char *np; np = JSON_parse_array(json, p, pe, result, current_nesting + 1); @@ -574,7 +554,7 @@ cs = 0; } goto st29; tr11: -#line 264 "parser.rl" +#line 244 "parser.rl" { char *np; np = JSON_parse_object(json, p, pe, result, current_nesting + 1); @@ -582,39 +562,39 @@ cs = 0; } goto st29; tr25: -#line 228 "parser.rl" +#line 208 "parser.rl" { if (json->allow_nan) { *result = CInfinity; } else { - rb_enc_raise(EXC_ENCODING eParserError, "unexpected token at '%s'", p - 7); + rb_enc_raise(rb_utf8_encoding(), eParserError, "unexpected token at '%s'", p - 7); } } goto st29; tr27: -#line 221 "parser.rl" +#line 201 "parser.rl" { if (json->allow_nan) { *result = CNaN; } else { - rb_enc_raise(EXC_ENCODING eParserError, "unexpected token at '%s'", p - 2); + rb_enc_raise(rb_utf8_encoding(), eParserError, "unexpected token at '%s'", p - 2); } } goto st29; tr31: -#line 215 "parser.rl" +#line 195 "parser.rl" { *result = Qfalse; } goto st29; tr34: -#line 212 "parser.rl" +#line 192 "parser.rl" { *result = Qnil; } goto st29; tr37: -#line 218 "parser.rl" +#line 198 "parser.rl" { *result = Qtrue; } @@ -623,9 +603,9 @@ cs = 0; if ( ++p == pe ) goto _test_eof29; case 29: -#line 270 "parser.rl" +#line 250 "parser.rl" { p--; {p++; cs = 29; goto _out;} } -#line 629 "parser.c" +#line 609 "parser.c" switch( (*p) ) { case 13: goto st29; case 32: goto st29; @@ -866,7 +846,7 @@ case 28: _out: {} } -#line 291 "parser.rl" +#line 271 "parser.rl" if (json->freeze) { OBJ_FREEZE(*result); @@ -880,7 +860,7 @@ case 28: } -#line 884 "parser.c" +#line 864 "parser.c" enum {JSON_integer_start = 1}; enum {JSON_integer_first_final = 3}; enum {JSON_integer_error = 0}; @@ -888,7 +868,7 @@ enum {JSON_integer_error = 0}; enum {JSON_integer_en_main = 1}; -#line 311 "parser.rl" +#line 291 "parser.rl" static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *result) @@ -896,15 +876,15 @@ static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *res int cs = EVIL; -#line 900 "parser.c" +#line 880 "parser.c" { cs = JSON_integer_start; } -#line 318 "parser.rl" +#line 298 "parser.rl" json->memo = p; -#line 908 "parser.c" +#line 888 "parser.c" { if ( p == pe ) goto _test_eof; @@ -938,14 +918,14 @@ case 3: goto st0; goto tr4; tr4: -#line 308 "parser.rl" +#line 288 "parser.rl" { p--; {p++; cs = 4; goto _out;} } goto st4; st4: if ( ++p == pe ) goto _test_eof4; case 4: -#line 949 "parser.c" +#line 929 "parser.c" goto st0; st5: if ( ++p == pe ) @@ -964,7 +944,7 @@ case 5: _out: {} } -#line 320 "parser.rl" +#line 300 "parser.rl" if (cs >= JSON_integer_first_final) { long len = p - json->memo; @@ -979,7 +959,7 @@ case 5: } -#line 983 "parser.c" +#line 963 "parser.c" enum {JSON_float_start = 1}; enum {JSON_float_first_final = 8}; enum {JSON_float_error = 0}; @@ -987,7 +967,7 @@ enum {JSON_float_error = 0}; enum {JSON_float_en_main = 1}; -#line 345 "parser.rl" +#line 325 "parser.rl" static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *result) @@ -995,15 +975,15 @@ static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *resul int cs = EVIL; -#line 999 "parser.c" +#line 979 "parser.c" { cs = JSON_float_start; } -#line 352 "parser.rl" +#line 332 "parser.rl" json->memo = p; -#line 1007 "parser.c" +#line 987 "parser.c" { if ( p == pe ) goto _test_eof; @@ -1061,14 +1041,14 @@ case 8: goto st0; goto tr9; tr9: -#line 339 "parser.rl" +#line 319 "parser.rl" { p--; {p++; cs = 9; goto _out;} } goto st9; st9: if ( ++p == pe ) goto _test_eof9; case 9: -#line 1072 "parser.c" +#line 1052 "parser.c" goto st0; st5: if ( ++p == pe ) @@ -1129,7 +1109,7 @@ case 7: _out: {} } -#line 354 "parser.rl" +#line 334 "parser.rl" if (cs >= JSON_float_first_final) { VALUE mod = Qnil; @@ -1180,7 +1160,7 @@ case 7: -#line 1184 "parser.c" +#line 1164 "parser.c" enum {JSON_array_start = 1}; enum {JSON_array_first_final = 17}; enum {JSON_array_error = 0}; @@ -1188,7 +1168,7 @@ enum {JSON_array_error = 0}; enum {JSON_array_en_main = 1}; -#line 432 "parser.rl" +#line 412 "parser.rl" static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting) @@ -1202,14 +1182,14 @@ static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *resul *result = NIL_P(array_class) ? rb_ary_new() : rb_class_new_instance(0, 0, array_class); -#line 1206 "parser.c" +#line 1186 "parser.c" { cs = JSON_array_start; } -#line 445 "parser.rl" +#line 425 "parser.rl" -#line 1213 "parser.c" +#line 1193 "parser.c" { if ( p == pe ) goto _test_eof; @@ -1248,7 +1228,7 @@ case 2: goto st2; goto st0; tr2: -#line 409 "parser.rl" +#line 389 "parser.rl" { VALUE v = Qnil; char *np = JSON_parse_value(json, p, pe, &v, current_nesting); @@ -1268,7 +1248,7 @@ case 2: if ( ++p == pe ) goto _test_eof3; case 3: -#line 1272 "parser.c" +#line 1252 "parser.c" switch( (*p) ) { case 13: goto st3; case 32: goto st3; @@ -1368,14 +1348,14 @@ case 12: goto st3; goto st12; tr4: -#line 424 "parser.rl" +#line 404 "parser.rl" { p--; {p++; cs = 17; goto _out;} } goto st17; st17: if ( ++p == pe ) goto _test_eof17; case 17: -#line 1379 "parser.c" +#line 1359 "parser.c" goto st0; st13: if ( ++p == pe ) @@ -1431,12 +1411,12 @@ case 16: _out: {} } -#line 446 "parser.rl" +#line 426 "parser.rl" if(cs >= JSON_array_first_final) { return p + 1; } else { - rb_enc_raise(EXC_ENCODING eParserError, "unexpected token at '%s'", p); + rb_enc_raise(rb_utf8_encoding(), eParserError, "unexpected token at '%s'", p); return NULL; } } @@ -1500,25 +1480,35 @@ static VALUE json_string_unescape(char *string, char *stringEnd, int intern, int ruby_xfree(bufferStart); } rb_enc_raise( - EXC_ENCODING eParserError, + rb_utf8_encoding(), eParserError, "incomplete unicode character escape sequence at '%s'", p ); } else { - UTF32 ch = unescape_unicode((unsigned char *) ++pe); + uint32_t ch = unescape_unicode((unsigned char *) ++pe); pe += 3; - if (UNI_SUR_HIGH_START == (ch & 0xFC00)) { + /* To handle values above U+FFFF, we take a sequence of + * \uXXXX escapes in the U+D800..U+DBFF then + * U+DC00..U+DFFF ranges, take the low 10 bits from each + * to make a 20-bit number, then add 0x10000 to get the + * final codepoint. + * + * See Unicode 15: 3.8 "Surrogates", 5.3 "Handling + * Surrogate Pairs in UTF-16", and 23.6 "Surrogates + * Area". + */ + if ((ch & 0xFC00) == 0xD800) { pe++; if (pe > stringEnd - 6) { if (bufferSize > MAX_STACK_BUFFER_SIZE) { ruby_xfree(bufferStart); } rb_enc_raise( - EXC_ENCODING eParserError, + rb_utf8_encoding(), eParserError, "incomplete surrogate pair at '%s'", p ); } if (pe[0] == '\\' && pe[1] == 'u') { - UTF32 sur = unescape_unicode((unsigned char *) pe + 2); + uint32_t sur = unescape_unicode((unsigned char *) pe + 2); ch = (((ch & 0x3F) << 10) | ((((ch >> 6) & 0xF) + 1) << 16) | (sur & 0x3FF)); pe += 5; @@ -1588,7 +1578,7 @@ static VALUE json_string_unescape(char *string, char *stringEnd, int intern, int } -#line 1592 "parser.c" +#line 1582 "parser.c" enum {JSON_string_start = 1}; enum {JSON_string_first_final = 8}; enum {JSON_string_error = 0}; @@ -1596,7 +1586,7 @@ enum {JSON_string_error = 0}; enum {JSON_string_en_main = 1}; -#line 620 "parser.rl" +#line 610 "parser.rl" static int @@ -1617,15 +1607,15 @@ static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *resu VALUE match_string; -#line 1621 "parser.c" +#line 1611 "parser.c" { cs = JSON_string_start; } -#line 640 "parser.rl" +#line 630 "parser.rl" json->memo = p; -#line 1629 "parser.c" +#line 1619 "parser.c" { if ( p == pe ) goto _test_eof; @@ -1650,7 +1640,7 @@ case 2: goto st0; goto st2; tr2: -#line 607 "parser.rl" +#line 597 "parser.rl" { *result = json_string_unescape(json->memo + 1, p, json->parsing_name || json-> freeze, json->parsing_name && json->symbolize_names); if (NIL_P(*result)) { @@ -1660,14 +1650,14 @@ case 2: {p = (( p + 1))-1;} } } -#line 617 "parser.rl" +#line 607 "parser.rl" { p--; {p++; cs = 8; goto _out;} } goto st8; st8: if ( ++p == pe ) goto _test_eof8; case 8: -#line 1671 "parser.c" +#line 1661 "parser.c" goto st0; st3: if ( ++p == pe ) @@ -1743,7 +1733,7 @@ case 7: _out: {} } -#line 642 "parser.rl" +#line 632 "parser.rl" if (json->create_additions && RTEST(match_string = json->match_string)) { VALUE klass; @@ -1916,7 +1906,7 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self) } -#line 1920 "parser.c" +#line 1910 "parser.c" enum {JSON_start = 1}; enum {JSON_first_final = 10}; enum {JSON_error = 0}; @@ -1924,7 +1914,7 @@ enum {JSON_error = 0}; enum {JSON_en_main = 1}; -#line 828 "parser.rl" +#line 818 "parser.rl" /* @@ -1942,16 +1932,16 @@ static VALUE cParser_parse(VALUE self) GET_PARSER; -#line 1946 "parser.c" +#line 1936 "parser.c" { cs = JSON_start; } -#line 845 "parser.rl" +#line 835 "parser.rl" p = json->source; pe = p + json->len; -#line 1955 "parser.c" +#line 1945 "parser.c" { if ( p == pe ) goto _test_eof; @@ -1985,7 +1975,7 @@ case 1: cs = 0; goto _out; tr2: -#line 820 "parser.rl" +#line 810 "parser.rl" { char *np = JSON_parse_value(json, p, pe, &result, 0); if (np == NULL) { p--; {p++; cs = 10; goto _out;} } else {p = (( np))-1;} @@ -1995,7 +1985,7 @@ cs = 0; if ( ++p == pe ) goto _test_eof10; case 10: -#line 1999 "parser.c" +#line 1989 "parser.c" switch( (*p) ) { case 13: goto st10; case 32: goto st10; @@ -2084,12 +2074,12 @@ case 9: _out: {} } -#line 848 "parser.rl" +#line 838 "parser.rl" if (cs >= JSON_first_final && p == pe) { return result; } else { - rb_enc_raise(EXC_ENCODING eParserError, "unexpected token at '%s'", p); + rb_enc_raise(rb_utf8_encoding(), eParserError, "unexpected token at '%s'", p); return Qnil; } } diff --git a/ext/json/parser/parser.h b/ext/json/parser/parser.h index 651d40c074992f..f6974461ae478c 100644 --- a/ext/json/parser/parser.h +++ b/ext/json/parser/parser.h @@ -19,18 +19,6 @@ #define option_given_p(opts, key) RTEST(rb_funcall(opts, i_key_p, 1, key)) -/* unicode */ - -typedef unsigned long UTF32; /* at least 32 bits */ -typedef unsigned short UTF16; /* at least 16 bits */ -typedef unsigned char UTF8; /* typically 8 bits */ - -#define UNI_REPLACEMENT_CHAR (UTF32)0x0000FFFD -#define UNI_SUR_HIGH_START (UTF32)0xD800 -#define UNI_SUR_HIGH_END (UTF32)0xDBFF -#define UNI_SUR_LOW_START (UTF32)0xDC00 -#define UNI_SUR_LOW_END (UTF32)0xDFFF - typedef struct JSON_ParserStruct { VALUE Vsource; char *source; @@ -60,8 +48,8 @@ typedef struct JSON_ParserStruct { #define MinusInfinity "-Infinity" #define EVIL 0x666 -static UTF32 unescape_unicode(const unsigned char *p); -static int convert_UTF32_to_UTF8(char *buf, UTF32 ch); +static uint32_t unescape_unicode(const unsigned char *p); +static int convert_UTF32_to_UTF8(char *buf, uint32_t ch); static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting); static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting); static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *result); diff --git a/ext/json/parser/parser.rl b/ext/json/parser/parser.rl index e2522918dc6728..7c41883d88fb31 100644 --- a/ext/json/parser/parser.rl +++ b/ext/json/parser/parser.rl @@ -1,28 +1,6 @@ #include "../fbuffer/fbuffer.h" #include "parser.h" -#if defined HAVE_RUBY_ENCODING_H -# define EXC_ENCODING rb_utf8_encoding(), -# ifndef HAVE_RB_ENC_RAISE -static void -enc_raise(rb_encoding *enc, VALUE exc, const char *fmt, ...) -{ - va_list args; - VALUE mesg; - - va_start(args, fmt); - mesg = rb_enc_vsprintf(enc, fmt, args); - va_end(args); - - rb_exc_raise(rb_exc_new3(exc, mesg)); -} -# define rb_enc_raise enc_raise -# endif -#else -# define EXC_ENCODING /* nothing */ -# define rb_enc_raise rb_raise -#endif - /* unicode */ static const signed char digit_values[256] = { @@ -42,26 +20,28 @@ static const signed char digit_values[256] = { -1, -1, -1, -1, -1, -1, -1 }; -static UTF32 unescape_unicode(const unsigned char *p) +static uint32_t unescape_unicode(const unsigned char *p) { + const uint32_t replacement_char = 0xFFFD; + signed char b; - UTF32 result = 0; + uint32_t result = 0; b = digit_values[p[0]]; - if (b < 0) return UNI_REPLACEMENT_CHAR; + if (b < 0) return replacement_char; result = (result << 4) | (unsigned char)b; b = digit_values[p[1]]; - if (b < 0) return UNI_REPLACEMENT_CHAR; + if (b < 0) return replacement_char; result = (result << 4) | (unsigned char)b; b = digit_values[p[2]]; - if (b < 0) return UNI_REPLACEMENT_CHAR; + if (b < 0) return replacement_char; result = (result << 4) | (unsigned char)b; b = digit_values[p[3]]; - if (b < 0) return UNI_REPLACEMENT_CHAR; + if (b < 0) return replacement_char; result = (result << 4) | (unsigned char)b; return result; } -static int convert_UTF32_to_UTF8(char *buf, UTF32 ch) +static int convert_UTF32_to_UTF8(char *buf, uint32_t ch) { int len = 1; if (ch <= 0x7F) { @@ -222,14 +202,14 @@ static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *resu if (json->allow_nan) { *result = CNaN; } else { - rb_enc_raise(EXC_ENCODING eParserError, "unexpected token at '%s'", p - 2); + rb_enc_raise(rb_utf8_encoding(), eParserError, "unexpected token at '%s'", p - 2); } } action parse_infinity { if (json->allow_nan) { *result = CInfinity; } else { - rb_enc_raise(EXC_ENCODING eParserError, "unexpected token at '%s'", p - 7); + rb_enc_raise(rb_utf8_encoding(), eParserError, "unexpected token at '%s'", p - 7); } } action parse_string { @@ -245,7 +225,7 @@ static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *resu fexec p + 10; fhold; fbreak; } else { - rb_enc_raise(EXC_ENCODING eParserError, "unexpected token at '%s'", p); + rb_enc_raise(rb_utf8_encoding(), eParserError, "unexpected token at '%s'", p); } } np = JSON_parse_float(json, fpc, pe, result); @@ -447,7 +427,7 @@ static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *resul if(cs >= JSON_array_first_final) { return p + 1; } else { - rb_enc_raise(EXC_ENCODING eParserError, "unexpected token at '%s'", p); + rb_enc_raise(rb_utf8_encoding(), eParserError, "unexpected token at '%s'", p); return NULL; } } @@ -511,25 +491,35 @@ static VALUE json_string_unescape(char *string, char *stringEnd, int intern, int ruby_xfree(bufferStart); } rb_enc_raise( - EXC_ENCODING eParserError, + rb_utf8_encoding(), eParserError, "incomplete unicode character escape sequence at '%s'", p ); } else { - UTF32 ch = unescape_unicode((unsigned char *) ++pe); + uint32_t ch = unescape_unicode((unsigned char *) ++pe); pe += 3; - if (UNI_SUR_HIGH_START == (ch & 0xFC00)) { + /* To handle values above U+FFFF, we take a sequence of + * \uXXXX escapes in the U+D800..U+DBFF then + * U+DC00..U+DFFF ranges, take the low 10 bits from each + * to make a 20-bit number, then add 0x10000 to get the + * final codepoint. + * + * See Unicode 15: 3.8 "Surrogates", 5.3 "Handling + * Surrogate Pairs in UTF-16", and 23.6 "Surrogates + * Area". + */ + if ((ch & 0xFC00) == 0xD800) { pe++; if (pe > stringEnd - 6) { if (bufferSize > MAX_STACK_BUFFER_SIZE) { ruby_xfree(bufferStart); } rb_enc_raise( - EXC_ENCODING eParserError, + rb_utf8_encoding(), eParserError, "incomplete surrogate pair at '%s'", p ); } if (pe[0] == '\\' && pe[1] == 'u') { - UTF32 sur = unescape_unicode((unsigned char *) pe + 2); + uint32_t sur = unescape_unicode((unsigned char *) pe + 2); ch = (((ch & 0x3F) << 10) | ((((ch >> 6) & 0xF) + 1) << 16) | (sur & 0x3FF)); pe += 5; @@ -849,7 +839,7 @@ static VALUE cParser_parse(VALUE self) if (cs >= JSON_first_final && p == pe) { return result; } else { - rb_enc_raise(EXC_ENCODING eParserError, "unexpected token at '%s'", p); + rb_enc_raise(rb_utf8_encoding(), eParserError, "unexpected token at '%s'", p); return Qnil; } } diff --git a/ext/pathname/lib/pathname.rb b/ext/pathname/lib/pathname.rb index dc639174d56d66..2deda00ff2abb8 100644 --- a/ext/pathname/lib/pathname.rb +++ b/ext/pathname/lib/pathname.rb @@ -572,7 +572,7 @@ def find(ignore_error: true) # :yield: pathname return to_enum(__method__, ignore_error: ignore_error) unless block_given? require 'find' if @path == '.' - Find.find(@path, ignore_error: ignore_error) {|f| yield self.class.new(f.sub(%r{\A\./}, '')) } + Find.find(@path, ignore_error: ignore_error) {|f| yield self.class.new(f.delete_prefix('./')) } else Find.find(@path, ignore_error: ignore_error) {|f| yield self.class.new(f) } end @@ -588,7 +588,7 @@ class Pathname # * FileUtils * def mkpath(mode: nil) require 'fileutils' FileUtils.mkpath(@path, mode: mode) - nil + self end # Recursively deletes a directory, including all directories beneath it. @@ -599,7 +599,23 @@ def rmtree(noop: nil, verbose: nil, secure: nil) # File::Path provides "mkpath" and "rmtree". require 'fileutils' FileUtils.rm_rf(@path, noop: noop, verbose: verbose, secure: secure) - nil + self end end +class Pathname # * tmpdir * + # Creates a tmp directory and wraps the returned path in a Pathname object. + # + # See Dir.mktmpdir + def self.mktmpdir + require 'tmpdir' unless defined?(Dir.mktmpdir) + if block_given? + Dir.mktmpdir do |dir| + dir = self.new(dir) + yield dir + end + else + self.new(Dir.mktmpdir) + end + end +end diff --git a/ext/psych/lib/psych.rb b/ext/psych/lib/psych.rb index d87bd9040ac47a..d227b1f2251ebe 100644 --- a/ext/psych/lib/psych.rb +++ b/ext/psych/lib/psych.rb @@ -340,7 +340,7 @@ def self.safe_load yaml, permitted_classes: [], permitted_symbols: [], aliases: # provided, the object contained in the first document will be returned. # +filename+ will be used in the exception message if any exception # is raised while parsing. If +yaml+ is empty, it returns - # the specified +fallback+ return value, which defaults to +false+. + # the specified +fallback+ return value, which defaults to +nil+. # # Raises a Psych::SyntaxError when a YAML syntax error is detected. # @@ -479,6 +479,7 @@ def self.parse_stream yaml, filename: nil, &block # # Default: 2. # [:line_width] Max character to wrap line at. + # For unlimited line width use -1. # # Default: 0 (meaning "wrap at 81"). # [:canonical] Write "canonical" YAML form (very verbose, yet @@ -559,6 +560,7 @@ def self.dump o, io = nil, options = {} # # Default: 2. # [:line_width] Max character to wrap line at. + # For unlimited line width use -1. # # Default: 0 (meaning "wrap at 81"). # [:canonical] Write "canonical" YAML form (very verbose, yet @@ -667,7 +669,7 @@ def self.unsafe_load_file filename, **kwargs ### # Safely loads the document contained in +filename+. Returns the yaml contained in # +filename+ as a Ruby object, or if the file is empty, it returns - # the specified +fallback+ return value, which defaults to +false+. + # the specified +fallback+ return value, which defaults to +nil+. # See safe_load for options. def self.safe_load_file filename, **kwargs File.open(filename, 'r:bom|utf-8') { |f| @@ -678,7 +680,7 @@ def self.safe_load_file filename, **kwargs ### # Loads the document contained in +filename+. Returns the yaml contained in # +filename+ as a Ruby object, or if the file is empty, it returns - # the specified +fallback+ return value, which defaults to +false+. + # the specified +fallback+ return value, which defaults to +nil+. # See load for options. def self.load_file filename, **kwargs File.open(filename, 'r:bom|utf-8') { |f| diff --git a/ext/psych/lib/psych/nodes/node.rb b/ext/psych/lib/psych/nodes/node.rb index f44fce5f053a5f..1a4ea5531f7280 100644 --- a/ext/psych/lib/psych/nodes/node.rb +++ b/ext/psych/lib/psych/nodes/node.rb @@ -1,5 +1,4 @@ # frozen_string_literal: true -require 'stringio' require_relative '../class_loader' require_relative '../scalar_scanner' @@ -56,6 +55,7 @@ def to_ruby(symbolize_names: false, freeze: false, strict_integer: false) # # See also Psych::Visitors::Emitter def yaml io = nil, options = {} + require "stringio" real_io = io || StringIO.new(''.encode('utf-8')) Visitors::Emitter.new(real_io, options).accept self diff --git a/ext/psych/lib/psych/scalar_scanner.rb b/ext/psych/lib/psych/scalar_scanner.rb index f124569436b1d2..de21442344e518 100644 --- a/ext/psych/lib/psych/scalar_scanner.rb +++ b/ext/psych/lib/psych/scalar_scanner.rb @@ -13,18 +13,18 @@ class ScalarScanner # Base 60, [-+]inf and NaN are handled separately FLOAT = /^(?:[-+]?([0-9][0-9_,]*)?\.[0-9]*([eE][-+][0-9]+)?(?# base 10))$/x - # Taken from http://yaml.org/type/int.html - INTEGER_STRICT = /^(?:[-+]?0b[0-1_]+ (?# base 2) - |[-+]?0[0-7_]+ (?# base 8) - |[-+]?(0|[1-9][0-9_]*) (?# base 10) - |[-+]?0x[0-9a-fA-F_]+ (?# base 16))$/x + # Taken from http://yaml.org/type/int.html and modified to ensure at least one numerical symbol exists + INTEGER_STRICT = /^(?:[-+]?0b[_]*[0-1][0-1_]* (?# base 2) + |[-+]?0[_]*[0-7][0-7_]* (?# base 8) + |[-+]?(0|[1-9][0-9_]*) (?# base 10) + |[-+]?0x[_]*[0-9a-fA-F][0-9a-fA-F_]* (?# base 16))$/x # Same as above, but allows commas. # Not to YML spec, but kept for backwards compatibility - INTEGER_LEGACY = /^(?:[-+]?0b[0-1_,]+ (?# base 2) - |[-+]?0[0-7_,]+ (?# base 8) + INTEGER_LEGACY = /^(?:[-+]?0b[_,]*[0-1][0-1_,]* (?# base 2) + |[-+]?0[_,]*[0-7][0-7_,]* (?# base 8) |[-+]?(?:0|[1-9](?:[0-9]|,[0-9]|_[0-9])*) (?# base 10) - |[-+]?0x[0-9a-fA-F_,]+ (?# base 16))$/x + |[-+]?0x[_,]*[0-9a-fA-F][0-9a-fA-F_,]* (?# base 16))$/x attr_reader :class_loader diff --git a/ext/psych/lib/psych/versions.rb b/ext/psych/lib/psych/versions.rb index b9e8d9ef1103af..3d69bf38a11c91 100644 --- a/ext/psych/lib/psych/versions.rb +++ b/ext/psych/lib/psych/versions.rb @@ -2,7 +2,7 @@ module Psych # The version of Psych you are using - VERSION = '5.1.2' + VERSION = '5.2.0.beta1' if RUBY_ENGINE == 'jruby' DEFAULT_SNAKEYAML_VERSION = '2.7'.freeze diff --git a/ext/psych/lib/psych/visitors/to_ruby.rb b/ext/psych/lib/psych/visitors/to_ruby.rb index f0fda9bdbcc4a0..9e4da5ef0dcc2b 100644 --- a/ext/psych/lib/psych/visitors/to_ruby.rb +++ b/ext/psych/lib/psych/visitors/to_ruby.rb @@ -36,7 +36,7 @@ def accept target unless @domain_types.empty? || !target.tag key = target.tag.sub(/^[!\/]*/, '').sub(/(,\d+)\//, '\1:') - key = "tag:#{key}" unless key =~ /^(?:tag:|x-private)/ + key = "tag:#{key}" unless key.match?(/^(?:tag:|x-private)/) if @domain_types.key? key value, block = @domain_types[key] diff --git a/ext/psych/lib/psych/visitors/yaml_tree.rb b/ext/psych/lib/psych/visitors/yaml_tree.rb index a2ebc4d78189b3..e27c927996b7b2 100644 --- a/ext/psych/lib/psych/visitors/yaml_tree.rb +++ b/ext/psych/lib/psych/visitors/yaml_tree.rb @@ -261,7 +261,7 @@ def visit_String o style = Nodes::Scalar::LITERAL plain = false quote = false - elsif o =~ /\n(?!\Z)/ # match \n except blank line at the end of string + elsif o.match?(/\n(?!\Z)/) # match \n except blank line at the end of string style = Nodes::Scalar::LITERAL elsif o == '<<' style = Nodes::Scalar::SINGLE_QUOTED @@ -272,9 +272,9 @@ def visit_String o style = Nodes::Scalar::DOUBLE_QUOTED elsif @line_width && o.length > @line_width style = Nodes::Scalar::FOLDED - elsif o =~ /^[^[:word:]][^"]*$/ + elsif o.match?(/^[^[:word:]][^"]*$/) style = Nodes::Scalar::DOUBLE_QUOTED - elsif not String === @ss.tokenize(o) or /\A0[0-7]*[89]/ =~ o + elsif not String === @ss.tokenize(o) or /\A0[0-7]*[89]/.match?(o) style = Nodes::Scalar::SINGLE_QUOTED end diff --git a/ext/pty/pty.c b/ext/pty/pty.c index 49caa0b79f8678..0e04b02d835c00 100644 --- a/ext/pty/pty.c +++ b/ext/pty/pty.c @@ -610,9 +610,17 @@ pty_detach_process(VALUE v) * +env+ is an optional hash that provides additional environment variables to the spawned pty. * * # sets FOO to "bar" - * PTY.spawn({"FOO"=>"bar"}, "printenv", "FOO") { |r,w,pid| p r.read } #=> "bar\r\n" + * PTY.spawn({"FOO"=>"bar"}, "printenv", "FOO") do |r, w, pid| + * p r.read #=> "bar\r\n" + * ensure + * r.close; w.close; Process.wait(pid) + * end * # unsets FOO - * PTY.spawn({"FOO"=>nil}, "printenv", "FOO") { |r,w,pid| p r.read } #=> "" + * PTY.spawn({"FOO"=>nil}, "printenv", "FOO") do |r, w, pid| + * p r.read #=> "" + * ensure + * r.close; w.close; Process.wait(pid) + * end * * +command+ and +command_line+ are the full commands to run, given a String. * Any additional +arguments+ will be passed to the command. @@ -628,6 +636,15 @@ pty_detach_process(VALUE v) * standard output and standard error * +w+:: A writable IO that is the command's standard input * +pid+:: The process identifier for the command. + * + * === Clean up + * + * This method does not clean up like closing IOs or waiting for child + * process, except that the process is detached in the block form to + * prevent it from becoming a zombie (see Process.detach). Any other + * cleanup is the responsibility of the caller. If waiting for +pid+, + * be sure to close both +r+ and +w+ before doing so; doing it in the + * reverse order may cause deadlock on some OSes. */ static VALUE pty_getpty(int argc, VALUE *argv, VALUE self) diff --git a/ext/ripper/ripper_init.c.tmpl b/ext/ripper/ripper_init.c.tmpl index fc98c067b87f21..11e432423db208 100644 --- a/ext/ripper/ripper_init.c.tmpl +++ b/ext/ripper/ripper_init.c.tmpl @@ -252,6 +252,18 @@ ripper_parser_set_debug_output(VALUE self, VALUE output) return output; } +static int +ripper_parser_dedent_string(struct parser_params *p, VALUE string, int width) +{ + int col; + rb_parser_string_t *str; + str = rb_str_to_parser_string(p, string); + col = rb_ruby_ripper_dedent_string(p, str, width); + rb_str_replace(string, rb_str_new_parser_string(str)); + rb_parser_string_free(p, str); + return col; +} + #ifdef UNIVERSAL_PARSER struct dedent_string_arg { struct parser_params *p; @@ -267,7 +279,7 @@ parser_dedent_string0(VALUE a) StringValue(arg->input); wid = NUM2UINT(arg->width); - col = rb_ruby_ripper_dedent_string(arg->p, arg->input, wid); + col = ripper_parser_dedent_string(arg->p, arg->input, wid); return INT2NUM(col); } @@ -312,7 +324,7 @@ parser_dedent_string(VALUE self, VALUE input, VALUE width) StringValue(input); wid = NUM2UINT(width); - col = rb_ruby_ripper_dedent_string(0, input, wid); + col = ripper_parser_dedent_string(0, input, wid); return INT2NUM(col); } #endif diff --git a/ext/socket/ancdata.c b/ext/socket/ancdata.c index 6ef040b692f338..f1e9e425248d3e 100644 --- a/ext/socket/ancdata.c +++ b/ext/socket/ancdata.c @@ -1643,14 +1643,14 @@ bsock_recvmsg_internal(VALUE sock, rb_obj_reveal(dat_str, rb_cString); } - ret = rb_ary_new3(3, dat_str, - rsock_io_socket_addrinfo(sock, mh.msg_name, mh.msg_namelen), #if defined(HAVE_STRUCT_MSGHDR_MSG_CONTROL) - INT2NUM(mh.msg_flags) + VALUE msg_flags = INT2NUM(mh.msg_flags); #else - Qnil + VALUE msg_flags = Qnil; #endif - ); + ret = rb_ary_new3(3, dat_str, + rsock_io_socket_addrinfo(sock, mh.msg_name, mh.msg_namelen), + msg_flags); #if defined(HAVE_STRUCT_MSGHDR_MSG_CONTROL) family = rsock_getfamily(fptr); diff --git a/ext/socket/basicsocket.c b/ext/socket/basicsocket.c index 54c369f6fcb4b8..2fcae8eb54f37c 100644 --- a/ext/socket/basicsocket.c +++ b/ext/socket/basicsocket.c @@ -124,7 +124,7 @@ bsock_close_read(VALUE sock) rb_io_t *fptr; GetOpenFile(sock, fptr); - shutdown(fptr->fd, 0); + shutdown(fptr->fd, SHUT_RD); if (!(fptr->mode & FMODE_WRITABLE)) { return rb_io_close(sock); } @@ -157,7 +157,7 @@ bsock_close_write(VALUE sock) if (!(fptr->mode & FMODE_READABLE)) { return rb_io_close(sock); } - shutdown(fptr->fd, 1); + shutdown(fptr->fd, SHUT_WR); fptr->mode &= ~FMODE_WRITABLE; return Qnil; @@ -597,7 +597,7 @@ rsock_bsock_send(int argc, VALUE *argv, VALUE socket) rb_io_wait(socket, RB_INT2NUM(RUBY_IO_WRITABLE), Qnil); #endif - ssize_t n = (ssize_t)BLOCKING_REGION_FD(func, &arg); + ssize_t n = (ssize_t)rb_io_blocking_region(fptr, func, &arg); if (n >= 0) return SSIZET2NUM(n); diff --git a/ext/socket/init.c b/ext/socket/init.c index 0e312b540e88cf..90870fec6915a8 100644 --- a/ext/socket/init.c +++ b/ext/socket/init.c @@ -107,6 +107,7 @@ rsock_send_blocking(void *data) } struct recvfrom_arg { + rb_io_t *fptr; int fd, flags; VALUE str; size_t length; @@ -151,7 +152,7 @@ recvfrom_locktmp(VALUE v) { struct recvfrom_arg *arg = (struct recvfrom_arg *)v; - return rb_thread_io_blocking_region(recvfrom_blocking, arg, arg->fd); + return rb_io_blocking_region(arg->fptr, recvfrom_blocking, arg); } int @@ -192,6 +193,7 @@ rsock_s_recvfrom(VALUE socket, int argc, VALUE *argv, enum sock_recv_type from) rb_raise(rb_eIOError, "recv for buffered IO"); } + arg.fptr = fptr; arg.fd = fptr->fd; arg.alen = (socklen_t)sizeof(arg.buf); arg.str = str; @@ -719,7 +721,7 @@ rsock_s_accept(VALUE klass, VALUE io, struct sockaddr *sockaddr, socklen_t *len) #ifdef RSOCK_WAIT_BEFORE_BLOCKING rb_io_wait(fptr->self, RB_INT2NUM(RUBY_IO_READABLE), Qnil); #endif - peer = (int)BLOCKING_REGION_FD(accept_blocking, &accept_arg); + peer = (int)rb_io_blocking_region(fptr, accept_blocking, &accept_arg); if (peer < 0) { int error = errno; diff --git a/ext/socket/ipsocket.c b/ext/socket/ipsocket.c index 0c1362025846c1..d94584c90baae1 100644 --- a/ext/socket/ipsocket.c +++ b/ext/socket/ipsocket.c @@ -274,16 +274,13 @@ ip_inspect(VALUE sock) static VALUE ip_addr(int argc, VALUE *argv, VALUE sock) { - rb_io_t *fptr; union_sockaddr addr; socklen_t len = (socklen_t)sizeof addr; int norevlookup; - GetOpenFile(sock, fptr); - if (argc < 1 || !rsock_revlookup_flag(argv[0], &norevlookup)) - norevlookup = fptr->mode & FMODE_NOREVLOOKUP; - if (getsockname(fptr->fd, &addr.addr, &len) < 0) + norevlookup = rb_io_mode(sock) & FMODE_NOREVLOOKUP; + if (getsockname(rb_io_descriptor(sock), &addr.addr, &len) < 0) rb_sys_fail("getsockname(2)"); return rsock_ipaddr(&addr.addr, len, norevlookup); } @@ -315,16 +312,13 @@ ip_addr(int argc, VALUE *argv, VALUE sock) static VALUE ip_peeraddr(int argc, VALUE *argv, VALUE sock) { - rb_io_t *fptr; union_sockaddr addr; socklen_t len = (socklen_t)sizeof addr; int norevlookup; - GetOpenFile(sock, fptr); - if (argc < 1 || !rsock_revlookup_flag(argv[0], &norevlookup)) - norevlookup = fptr->mode & FMODE_NOREVLOOKUP; - if (getpeername(fptr->fd, &addr.addr, &len) < 0) + norevlookup = rb_io_mode(sock) & FMODE_NOREVLOOKUP; + if (getpeername(rb_io_descriptor(sock), &addr.addr, &len) < 0) rb_sys_fail("getpeername(2)"); return rsock_ipaddr(&addr.addr, len, norevlookup); } diff --git a/ext/socket/lib/socket.rb b/ext/socket/lib/socket.rb index 86f2a523ebbdab..0832ed1783efaf 100644 --- a/ext/socket/lib/socket.rb +++ b/ext/socket/lib/socket.rb @@ -635,7 +635,9 @@ class << self # The optional last argument _opts_ is options represented by a hash. # _opts_ may have following options: # - # [:connect_timeout] specify the timeout in seconds. + # [:resolv_timeout] specify the timeout of hostname resolution in seconds. + # [:connect_timeout] specify the timeout of conncetion in seconds. + # [:fast_fallback] enable Happy Eyeballs Version 2 ({RFC 8305}[https://datatracker.ietf.org/doc/html/rfc8305]) algorithm (Enabled by default). # # If a block is given, the block is called with the socket. # The value of the block is returned. @@ -648,11 +650,11 @@ class << self # sock.close_write # puts sock.read # } - def self.tcp(host, port, local_host = nil, local_port = nil, connect_timeout: nil, resolv_timeout: nil, fast_fallback: tcp_fast_fallback, &block) # :yield: socket + def self.tcp(host, port, local_host = nil, local_port = nil, connect_timeout: nil, resolv_timeout: nil, fast_fallback: tcp_fast_fallback, &) # :yield: socket sock = if fast_fallback && !(host && ip_address?(host)) - tcp_with_fast_fallback(host, port, local_host, local_port, connect_timeout:, resolv_timeout:, &block) + tcp_with_fast_fallback(host, port, local_host, local_port, connect_timeout:, resolv_timeout:) else - tcp_without_fast_fallback(host, port, local_host, local_port, connect_timeout:, resolv_timeout:, &block) + tcp_without_fast_fallback(host, port, local_host, local_port, connect_timeout:, resolv_timeout:) end if block_given? @@ -897,7 +899,7 @@ def self.tcp_with_fast_fallback(host, port, local_host = nil, local_port = nil, end end - def self.tcp_without_fast_fallback(host, port, local_host, local_port, connect_timeout:, resolv_timeout:, &block) + def self.tcp_without_fast_fallback(host, port, local_host, local_port, connect_timeout:, resolv_timeout:) last_error = nil ret = nil diff --git a/ext/socket/raddrinfo.c b/ext/socket/raddrinfo.c index 55bfe44a68a919..7ec700075eb227 100644 --- a/ext/socket/raddrinfo.c +++ b/ext/socket/raddrinfo.c @@ -327,6 +327,12 @@ nogvl_getaddrinfo(void *arg) return (void *)(VALUE)ret; } +static void * +fork_safe_getaddrinfo(void *arg) +{ + return rb_thread_prevent_fork(nogvl_getaddrinfo, arg); +} + static int rb_getaddrinfo(const char *hostp, const char *portp, const struct addrinfo *hints, struct addrinfo **ai) { @@ -336,7 +342,7 @@ rb_getaddrinfo(const char *hostp, const char *portp, const struct addrinfo *hint arg.service = portp; arg.hints = hints; arg.res = ai; - return (int)(VALUE)rb_thread_call_without_gvl(nogvl_getaddrinfo, &arg, RUBY_UBF_IO, 0); + return (int)(VALUE)rb_thread_call_without_gvl(fork_safe_getaddrinfo, &arg, RUBY_UBF_IO, 0); } #elif GETADDRINFO_IMPL == 2 @@ -477,6 +483,12 @@ do_pthread_create(pthread_t *th, void *(*start_routine) (void *), void *arg) return ret; } +static void * +fork_safe_do_getaddrinfo(void *ptr) +{ + return rb_thread_prevent_fork(do_getaddrinfo, ptr); +} + static int rb_getaddrinfo(const char *hostp, const char *portp, const struct addrinfo *hints, struct addrinfo **ai) { @@ -493,7 +505,7 @@ rb_getaddrinfo(const char *hostp, const char *portp, const struct addrinfo *hint } pthread_t th; - if (do_pthread_create(&th, do_getaddrinfo, arg) != 0) { + if (do_pthread_create(&th, fork_safe_do_getaddrinfo, arg) != 0) { int err = errno; free_getaddrinfo_arg(arg); errno = err; diff --git a/ext/socket/sockssocket.c b/ext/socket/sockssocket.c index f263ac3804abc7..1e94186cd0ab62 100644 --- a/ext/socket/sockssocket.c +++ b/ext/socket/sockssocket.c @@ -48,7 +48,7 @@ socks_s_close(VALUE sock) rb_io_t *fptr; GetOpenFile(sock, fptr); - shutdown(fptr->fd, 2); + shutdown(fptr->fd, SHUT_RDWR); return rb_io_close(sock); } #endif diff --git a/ext/socket/udpsocket.c b/ext/socket/udpsocket.c index 5224e48a96a1fd..8aada76b26dc81 100644 --- a/ext/socket/udpsocket.c +++ b/ext/socket/udpsocket.c @@ -156,6 +156,7 @@ udp_send_internal(VALUE v) struct addrinfo *res; rb_io_check_closed(fptr = arg->fptr); + for (res = arg->res->ai; res; res = res->ai_next) { retry: arg->sarg.fd = fptr->fd; @@ -166,7 +167,7 @@ udp_send_internal(VALUE v) rb_io_wait(fptr->self, RB_INT2NUM(RUBY_IO_WRITABLE), Qnil); #endif - ssize_t n = (ssize_t)BLOCKING_REGION_FD(rsock_sendto_blocking, &arg->sarg); + ssize_t n = (ssize_t)rb_io_blocking_region(fptr, rsock_sendto_blocking, &arg->sarg); if (n >= 0) return RB_SSIZE2NUM(n); diff --git a/ext/socket/unixsocket.c b/ext/socket/unixsocket.c index a8475e3e6090a4..b08e3bb708c91d 100644 --- a/ext/socket/unixsocket.c +++ b/ext/socket/unixsocket.c @@ -288,7 +288,7 @@ unix_send_io(VALUE sock, VALUE val) #endif arg.fd = fptr->fd; - while ((int)BLOCKING_REGION_FD(sendmsg_blocking, &arg) == -1) { + while ((int)rb_io_blocking_region(fptr, sendmsg_blocking, &arg) == -1) { if (!rb_io_wait_writable(arg.fd)) rsock_sys_fail_path("sendmsg(2)", fptr->pathv); } @@ -390,7 +390,7 @@ unix_recv_io(int argc, VALUE *argv, VALUE sock) #endif arg.fd = fptr->fd; - while ((int)BLOCKING_REGION_FD(recvmsg_blocking, &arg) == -1) { + while ((int)rb_io_blocking_region(fptr, recvmsg_blocking, &arg) == -1) { int e = errno; if (e == EMSGSIZE && !(gc_reason & GC_REASON_EMSGSIZE)) { /* FreeBSD gets here when we're out of FDs */ diff --git a/ext/stringio/stringio.c b/ext/stringio/stringio.c index 74515901e0ecd9..07e970f2957e7e 100644 --- a/ext/stringio/stringio.c +++ b/ext/stringio/stringio.c @@ -13,7 +13,7 @@ **********************************************************************/ static const char *const -STRINGIO_VERSION = "3.1.2"; +STRINGIO_VERSION = "3.1.2.dev"; #include diff --git a/ext/strscan/strscan.c b/ext/strscan/strscan.c index fad35925a82851..e272f9224947f6 100644 --- a/ext/strscan/strscan.c +++ b/ext/strscan/strscan.c @@ -22,7 +22,7 @@ extern size_t onig_region_memsize(const struct re_registers *regs); #include -#define STRSCAN_VERSION "3.1.1" +#define STRSCAN_VERSION "3.1.1.dev" /* ======================================================================= Data Type Definitions @@ -686,14 +686,6 @@ strscan_do_scan(VALUE self, VALUE pattern, int succptr, int getstr, int headonly { struct strscanner *p; - if (headonly) { - if (!RB_TYPE_P(pattern, T_REGEXP)) { - StringValue(pattern); - } - } - else { - Check_Type(pattern, T_REGEXP); - } GET_SCANNER(self, p); CLEAR_MATCH_STATUS(p); @@ -714,14 +706,25 @@ strscan_do_scan(VALUE self, VALUE pattern, int succptr, int getstr, int headonly } } else { + StringValue(pattern); rb_enc_check(p->str, pattern); if (S_RESTLEN(p) < RSTRING_LEN(pattern)) { return Qnil; } - if (memcmp(CURPTR(p), RSTRING_PTR(pattern), RSTRING_LEN(pattern)) != 0) { - return Qnil; + + if (headonly) { + if (memcmp(CURPTR(p), RSTRING_PTR(pattern), RSTRING_LEN(pattern)) != 0) { + return Qnil; + } + set_registers(p, RSTRING_LEN(pattern)); + } else { + long pos = rb_memsearch(RSTRING_PTR(pattern), RSTRING_LEN(pattern), + CURPTR(p), S_RESTLEN(p), rb_enc_get(pattern)); + if (pos == -1) { + return Qnil; + } + set_registers(p, RSTRING_LEN(pattern) + pos); } - set_registers(p, RSTRING_LEN(pattern)); } MATCHED(p); diff --git a/ext/win32/lib/win32/registry.rb b/ext/win32/lib/win32/registry.rb index 92b95d1bf720a0..e84653d9459455 100644 --- a/ext/win32/lib/win32/registry.rb +++ b/ext/win32/lib/win32/registry.rb @@ -69,7 +69,7 @@ module Win32 WCHAR_NUL = "\0".encode(WCHAR).freeze WCHAR_CR = "\r".encode(WCHAR).freeze WCHAR_SIZE = WCHAR_NUL.bytesize - LOCALE = Encoding.find(Encoding.locale_charmap) + LOCALE = Encoding::UTF_8 class Registry @@ -563,9 +563,16 @@ def close end # - # Enumerate values. + # Enumerate all values in this registry path. + # + # For each value it yields key, type and data. + # + # key is a String which contains name of key. + # type is a type contant kind of Win32::Registry::REG_* + # data is the value of this key. # def each_value + return enum_for(:each_value) unless block_given? index = 0 while true begin @@ -596,13 +603,16 @@ def values end # - # Enumerate subkeys. + # Enumerate all subkeys. + # + # For each subkey it yields subkey and wtime. # # subkey is String which contains name of subkey. # wtime is last write time as FILETIME (64-bit integer). # (see Registry.wtime2time) # def each_key + return enum_for(:each_key) unless block_given? index = 0 while true begin diff --git a/ext/win32/lib/win32/sspi.rb b/ext/win32/lib/win32/sspi.rb deleted file mode 100644 index 20205fd4d6e4f8..00000000000000 --- a/ext/win32/lib/win32/sspi.rb +++ /dev/null @@ -1,338 +0,0 @@ -# frozen_string_literal: false -# -# = win32/sspi.rb -# -# Copyright (c) 2006-2007 Justin Bailey -# -# Written and maintained by Justin Bailey . -# -# This program is free software. You can re-distribute and/or -# modify this program under the same terms of ruby itself --- -# Ruby Distribution License or GNU General Public License. -# - -require 'fiddle/import' - -# Implements bindings to Win32 SSPI functions, focused on authentication to a proxy server over HTTP. -module Win32 - module SSPI - # Specifies how credential structure requested will be used. Only SECPKG_CRED_OUTBOUND is used - # here. - SECPKG_CRED_INBOUND = 0x00000001 - SECPKG_CRED_OUTBOUND = 0x00000002 - SECPKG_CRED_BOTH = 0x00000003 - - # Format of token. NETWORK format is used here. - SECURITY_NATIVE_DREP = 0x00000010 - SECURITY_NETWORK_DREP = 0x00000000 - - # InitializeSecurityContext Requirement flags - ISC_REQ_REPLAY_DETECT = 0x00000004 - ISC_REQ_SEQUENCE_DETECT = 0x00000008 - ISC_REQ_CONFIDENTIALITY = 0x00000010 - ISC_REQ_USE_SESSION_KEY = 0x00000020 - ISC_REQ_PROMPT_FOR_CREDS = 0x00000040 - ISC_REQ_CONNECTION = 0x00000800 - - # Win32 API Functions. Uses Win32API to bind methods to constants contained in class. - module API - extend Fiddle::Importer - dlload "secur32.dll" - [ - # Can be called with AcquireCredentialsHandleA.call() - "unsigned long AcquireCredentialsHandleA(void *, void *, unsigned long, void *, void *, void *, void *, void *, void *)", - # Can be called with InitializeSecurityContextA.call() - "unsigned long InitializeSecurityContextA(void *, void *, void *, unsigned long, unsigned long, unsigned long, void *, unsigned long, void *, void *, void *, void *)", - # Can be called with DeleteSecurityContext.call() - "unsigned long DeleteSecurityContext(void *)", - # Can be called with FreeCredentialsHandle.call() - "unsigned long FreeCredentialsHandle(void *)" - ].each do |fn| - cfunc = extern fn, :stdcall - const_set cfunc.name.intern, cfunc - end - end - - # SecHandle struct - class SecurityHandle - def upper - @struct.unpack("LL")[1] - end - - def lower - @struct.unpack("LL")[0] - end - - def to_p - @struct ||= "\0" * 8 - end - end - - # Some familiar aliases for the SecHandle structure - CredHandle = CtxtHandle = SecurityHandle - - # TimeStamp struct - class TimeStamp - attr_reader :struct - - def to_p - @struct ||= "\0" * 8 - end - end - - # Creates binary representations of a SecBufferDesc structure, - # including the SecBuffer contained inside. - class SecurityBuffer - - SECBUFFER_TOKEN = 2 # Security token - - TOKENBUFSIZE = 12288 - SECBUFFER_VERSION = 0 - - def initialize(buffer = nil) - @buffer = buffer || "\0" * TOKENBUFSIZE - @bufferSize = @buffer.length - @type = SECBUFFER_TOKEN - end - - def bufferSize - unpack - @bufferSize - end - - def bufferType - unpack - @type - end - - def token - unpack - @buffer - end - - def to_p - # Assumption is that when to_p is called we are going to get a packed structure. Therefore, - # set @unpacked back to nil so we know to unpack when accessors are next accessed. - @unpacked = nil - # Assignment of inner structure to variable is very important here. Without it, - # will not be able to unpack changes to the structure. Alternative, nested unpacks, - # does not work (i.e. @struct.unpack("LLP12")[2].unpack("LLP12") results in "no associated pointer") - @sec_buffer ||= [@bufferSize, @type, @buffer].pack("LLP") - @struct ||= [SECBUFFER_VERSION, 1, @sec_buffer].pack("LLP") - end - - private - - # Unpacks the SecurityBufferDesc structure into member variables. We - # only want to do this once per struct, so the struct is deleted - # after unpacking. - def unpack - if ! @unpacked && @sec_buffer && @struct - @bufferSize, @type = @sec_buffer.unpack("LL") - @buffer = @sec_buffer.unpack("LLP#{@bufferSize}")[2] - @struct = nil - @sec_buffer = nil - @unpacked = true - end - end - end - - # SEC_WINNT_AUTH_IDENTITY structure - class Identity - SEC_WINNT_AUTH_IDENTITY_ANSI = 0x1 - - attr_accessor :user, :domain, :password - - def initialize(user = nil, domain = nil, password = nil) - @user = user - @domain = domain - @password = password - @flags = SEC_WINNT_AUTH_IDENTITY_ANSI - end - - def to_p - [@user, @user ? @user.length : 0, - @domain, @domain ? @domain.length : 0, - @password, @password ? @password.length : 0, - @flags].pack("PLPLPLL") - end - end - - # Takes a return result from an SSPI function and interprets the value. - class SSPIResult - # Good results - SEC_E_OK = 0x00000000 - SEC_I_CONTINUE_NEEDED = 0x00090312 - - # These are generally returned by InitializeSecurityContext - SEC_E_INSUFFICIENT_MEMORY = 0x80090300 - SEC_E_INTERNAL_ERROR = 0x80090304 - SEC_E_INVALID_HANDLE = 0x80090301 - SEC_E_INVALID_TOKEN = 0x80090308 - SEC_E_LOGON_DENIED = 0x8009030C - SEC_E_NO_AUTHENTICATING_AUTHORITY = 0x80090311 - SEC_E_NO_CREDENTIALS = 0x8009030E - SEC_E_TARGET_UNKNOWN = 0x80090303 - SEC_E_UNSUPPORTED_FUNCTION = 0x80090302 - SEC_E_WRONG_PRINCIPAL = 0x80090322 - - # These are generally returned by AcquireCredentialsHandle - SEC_E_NOT_OWNER = 0x80090306 - SEC_E_SECPKG_NOT_FOUND = 0x80090305 - SEC_E_UNKNOWN_CREDENTIALS = 0x8009030D - - @@map = {} - constants.each { |v| @@map[self.const_get(v.to_s)] = v } - - attr_reader :value - - def initialize(value) - # convert to unsigned long - value = [value].pack("L").unpack("L").first - raise "#{value.to_s(16)} is not a recognized result" unless @@map.has_key? value - @value = value - end - - def to_s - @@map[@value].to_s - end - - def ok? - @value == SEC_I_CONTINUE_NEEDED || @value == SEC_E_OK - end - - def ==(other) - if other.is_a?(SSPIResult) - @value == other.value - elsif other.is_a?(Fixnum) - @value == @@map[other] - else - false - end - end - end - - # Handles "Negotiate" type authentication. Geared towards authenticating with a proxy server over HTTP - class NegotiateAuth - attr_accessor :credentials, :context, :contextAttributes, :user, :domain - - # Default request flags for SSPI functions - REQUEST_FLAGS = ISC_REQ_CONFIDENTIALITY | ISC_REQ_REPLAY_DETECT | ISC_REQ_CONNECTION - - # NTLM tokens start with this header always. Encoding alone adds "==" and newline, so remove those - B64_TOKEN_PREFIX = ["NTLMSSP"].pack("m").delete("=\n") - - # Given a connection and a request path, performs authentication as the current user and returns - # the response from a GET request. The connection should be a Net::HTTP object, and it should - # have been constructed using the Net::HTTP.Proxy method, but anything that responds to "get" will work. - # If a user and domain are given, will authenticate as the given user. - # Returns the response received from the get method (usually Net::HTTPResponse) - def NegotiateAuth.proxy_auth_get(http, path, user = nil, domain = nil) - raise "http must respond to :get" unless http.respond_to?(:get) - nego_auth = self.new user, domain - - resp = http.get path, { "Proxy-Authorization" => "Negotiate " + nego_auth.get_initial_token } - if resp["Proxy-Authenticate"] - resp = http.get path, { "Proxy-Authorization" => "Negotiate " + nego_auth.complete_authentication(resp["Proxy-Authenticate"].split(" ").last.strip) } - end - - resp - end - - # Creates a new instance ready for authentication as the given user in the given domain. - # Defaults to current user and domain as defined by ENV["USERDOMAIN"] and ENV["USERNAME"] if - # no arguments are supplied. - def initialize(user = nil, domain = nil) - if user.nil? && domain.nil? && ENV["USERNAME"].nil? && ENV["USERDOMAIN"].nil? - raise "A username or domain must be supplied since they cannot be retrieved from the environment" - end - - @user = user || ENV["USERNAME"] - @domain = domain || ENV["USERDOMAIN"] - end - - # Gets the initial Negotiate token. Returns it as a base64 encoded string suitable for use in HTTP. Can - # be easily decoded, however. - def get_initial_token - raise "This object is no longer usable because its resources have been freed." if @cleaned_up - get_credentials - - outputBuffer = SecurityBuffer.new - @context = CtxtHandle.new - @contextAttributes = "\0" * 4 - - result = SSPIResult.new(API::InitializeSecurityContextA.call(@credentials.to_p, nil, nil, - REQUEST_FLAGS,0, SECURITY_NETWORK_DREP, nil, 0, @context.to_p, outputBuffer.to_p, @contextAttributes, TimeStamp.new.to_p)) - - if result.ok? then - return encode_token(outputBuffer.token) - else - raise "Error: #{result.to_s}" - end - end - - # Takes a token and gets the next token in the Negotiate authentication chain. Token can be Base64 encoded or not. - # The token can include the "Negotiate" header and it will be stripped. - # Does not indicate if SEC_I_CONTINUE or SEC_E_OK was returned. - # Token returned is Base64 encoded w/ all new lines removed. - def complete_authentication(token) - raise "This object is no longer usable because its resources have been freed." if @cleaned_up - - # Nil token OK, just set it to empty string - token = "" if token.nil? - - if token.include? "Negotiate" - # If the Negotiate prefix is passed in, assume we are seeing "Negotiate " and get the token. - token = token.split(" ").last - end - - if token.include? B64_TOKEN_PREFIX - # indicates base64 encoded token - token = token.strip.unpack("m")[0] - end - - outputBuffer = SecurityBuffer.new - result = SSPIResult.new(API::InitializeSecurityContext.call(@credentials.to_p, @context.to_p, nil, - REQUEST_FLAGS, 0, SECURITY_NETWORK_DREP, SecurityBuffer.new(token).to_p, 0, - @context.to_p, - outputBuffer.to_p, @contextAttributes, TimeStamp.new.to_p)) - - if result.ok? then - return encode_token(outputBuffer.token) - else - raise "Error: #{result.to_s}" - end - ensure - # need to make sure we don't clean up if we've already cleaned up. - clean_up unless @cleaned_up - end - - private - - def clean_up - # free structures allocated - @cleaned_up = true - API::FreeCredentialsHandle.call(@credentials.to_p) - API::DeleteSecurityContext.call(@context.to_p) - @context = nil - @credentials = nil - @contextAttributes = nil - end - - # Gets credentials based on user, domain or both. If both are nil, an error occurs - def get_credentials - @credentials = CredHandle.new - ts = TimeStamp.new - @identity = Identity.new @user, @domain - result = SSPIResult.new(API::AcquireCredentialsHandleA.call(nil, "Negotiate", SECPKG_CRED_OUTBOUND, nil, @identity.to_p, - nil, nil, @credentials.to_p, ts.to_p)) - raise "Error acquire credentials: #{result}" unless result.ok? - end - - def encode_token(t) - # encode64 will add newlines every 60 characters so we need to remove those. - [t].pack("m").delete("\n") - end - end - end -end diff --git a/ext/win32/resolv/extconf.rb b/ext/win32/resolv/extconf.rb index 01f3df730afe16..ac865ec5e1ddd0 100644 --- a/ext/win32/resolv/extconf.rb +++ b/ext/win32/resolv/extconf.rb @@ -1,3 +1,6 @@ +require 'mkmf' if have_library('iphlpapi', 'GetNetworkParams') create_makefile('win32/resolv') +else + File.write('Makefile', "all clean install:\n\t@echo Done: $(@)\n") end diff --git a/ext/win32/win32-registry.gemspec b/ext/win32/win32-registry.gemspec new file mode 100644 index 00000000000000..b6df247574a3f5 --- /dev/null +++ b/ext/win32/win32-registry.gemspec @@ -0,0 +1,29 @@ +# frozen_string_literal: true +Gem::Specification.new do |spec| + spec.name = "win32-registry" + spec.version = "0.0.1" + spec.authors = ["U.Nakamura"] + spec.email = ["usa@garbagecollect.jp"] + + spec.summary = %q{Provides an interface to the Windows Registry in Ruby} + spec.description = spec.summary + spec.homepage = "https://github.com/ruby/win32-registry" + spec.required_ruby_version = ">= 2.6.0" + + spec.metadata["homepage_uri"] = spec.homepage + spec.metadata["source_code_uri"] = spec.homepage + + # Specify which files should be added to the gem when it is released. + # The `git ls-files -z` loads the files in the RubyGem that have been added into git. + spec.files = Dir.chdir(__dir__) do + `git ls-files -z`.split("\x0").reject do |f| + (File.expand_path(f) == __FILE__) || + f.start_with?(*%w[bin/ test/ spec/ features/ .git .github appveyor Gemfile]) + end + end + spec.bindir = "exe" + spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) } + spec.require_paths = ["lib"] + + spec.add_dependency "fiddle", "~> 1.0" +end diff --git a/ext/zlib/zlib.c b/ext/zlib/zlib.c index aad9f8d28a4374..50d8dd40c6580c 100644 --- a/ext/zlib/zlib.c +++ b/ext/zlib/zlib.c @@ -25,7 +25,7 @@ # define VALGRIND_MAKE_MEM_UNDEFINED(p, n) 0 #endif -#define RUBY_ZLIB_VERSION "3.1.0" +#define RUBY_ZLIB_VERSION "3.1.1" #ifndef RB_PASS_CALLED_KEYWORDS # define rb_class_new_instance_kw(argc, argv, klass, kw_splat) rb_class_new_instance(argc, argv, klass) diff --git a/file.c b/file.c index 5e3b303c9636af..585dd906658690 100644 --- a/file.c +++ b/file.c @@ -271,6 +271,18 @@ rb_str_encode_ospath(VALUE path) # define NORMALIZE_UTF8PATH 1 # ifdef HAVE_WORKING_FORK +static CFMutableStringRef +mutable_CFString_new(CFStringRef *s, const char *ptr, long len) +{ + const CFAllocatorRef alloc = kCFAllocatorDefault; + *s = CFStringCreateWithBytesNoCopy(alloc, (const UInt8 *)ptr, len, + kCFStringEncodingUTF8, FALSE, + kCFAllocatorNull); + return CFStringCreateMutableCopy(alloc, len, *s); +} + +# define mutable_CFString_release(m, s) (CFRelease(m), CFRelease(s)) + static void rb_CFString_class_initialize_before_fork(void) { @@ -297,15 +309,17 @@ rb_CFString_class_initialize_before_fork(void) /* Enough small but non-empty ASCII string to fit in NSTaggedPointerString. */ const char small_str[] = "/"; long len = sizeof(small_str) - 1; - - const CFAllocatorRef alloc = kCFAllocatorDefault; - CFStringRef s = CFStringCreateWithBytesNoCopy(alloc, - (const UInt8 *)small_str, - len, kCFStringEncodingUTF8, - FALSE, kCFAllocatorNull); - CFMutableStringRef m = CFStringCreateMutableCopy(alloc, len, s); - CFRelease(m); - CFRelease(s); + CFStringRef s; + /* + * Touch `CFStringCreateWithBytesNoCopy` *twice* because the implementation + * shipped with macOS 15.0 24A5331b does not return `NSTaggedPointerString` + * instance for the first call (totally not sure why). CoreFoundation + * shipped with macOS 15.1 does not have this issue. + */ + for (int i = 0; i < 2; i++) { + CFMutableStringRef m = mutable_CFString_new(&s, small_str, len); + mutable_CFString_release(m, s); + } } # endif /* HAVE_WORKING_FORK */ @@ -314,11 +328,8 @@ rb_str_append_normalized_ospath(VALUE str, const char *ptr, long len) { CFIndex buflen = 0; CFRange all; - CFStringRef s = CFStringCreateWithBytesNoCopy(kCFAllocatorDefault, - (const UInt8 *)ptr, len, - kCFStringEncodingUTF8, FALSE, - kCFAllocatorNull); - CFMutableStringRef m = CFStringCreateMutableCopy(kCFAllocatorDefault, len, s); + CFStringRef s; + CFMutableStringRef m = mutable_CFString_new(&s, ptr, len); long oldlen = RSTRING_LEN(str); CFStringNormalize(m, kCFStringNormalizationFormC); @@ -328,8 +339,7 @@ rb_str_append_normalized_ospath(VALUE str, const char *ptr, long len) CFStringGetBytes(m, all, kCFStringEncodingUTF8, '?', FALSE, (UInt8 *)(RSTRING_PTR(str) + oldlen), buflen, &buflen); rb_str_set_len(str, oldlen + buflen); - CFRelease(m); - CFRelease(s); + mutable_CFString_release(m, s); return str; } @@ -1143,14 +1153,14 @@ no_gvl_fstat(void *data) } static int -fstat_without_gvl(int fd, struct stat *st) +fstat_without_gvl(rb_io_t *fptr, struct stat *st) { no_gvl_stat_data data; - data.file.fd = fd; + data.file.fd = fptr->fd; data.st = st; - return (int)(VALUE)rb_thread_io_blocking_region(no_gvl_fstat, &data, fd); + return (int)rb_io_blocking_region(fptr, no_gvl_fstat, &data); } static void * @@ -1222,12 +1232,12 @@ statx_without_gvl(const char *path, struct statx *stx, unsigned int mask) } static int -fstatx_without_gvl(int fd, struct statx *stx, unsigned int mask) +fstatx_without_gvl(rb_io_t *fptr, struct statx *stx, unsigned int mask) { - no_gvl_statx_data data = {stx, fd, "", AT_EMPTY_PATH, mask}; + no_gvl_statx_data data = {stx, fptr->fd, "", AT_EMPTY_PATH, mask}; /* call statx(2) with fd */ - return (int)rb_thread_io_blocking_region(io_blocking_statx, &data, fd); + return (int)rb_io_blocking_region(fptr, io_blocking_statx, &data); } static int @@ -1240,7 +1250,7 @@ rb_statx(VALUE file, struct statx *stx, unsigned int mask) if (!NIL_P(tmp)) { rb_io_t *fptr; GetOpenFile(tmp, fptr); - result = fstatx_without_gvl(fptr->fd, stx, mask); + result = fstatx_without_gvl(fptr, stx, mask); file = tmp; } else { @@ -1281,7 +1291,7 @@ typedef struct statx statx_data; #elif defined(HAVE_STAT_BIRTHTIME) # define statx_without_gvl(path, st, mask) stat_without_gvl(path, st) -# define fstatx_without_gvl(fd, st, mask) fstat_without_gvl(fd, st) +# define fstatx_without_gvl(fptr, st, mask) fstat_without_gvl(fptr, st) # define statx_birthtime(st, fname) stat_birthtime(st) # define statx_has_birthtime(st) 1 # define rb_statx(file, st, mask) rb_stat(file, st) @@ -1301,7 +1311,7 @@ rb_stat(VALUE file, struct stat *st) rb_io_t *fptr; GetOpenFile(tmp, fptr); - result = fstat_without_gvl(fptr->fd, st); + result = fstat_without_gvl(fptr, st); file = tmp; } else { @@ -2499,7 +2509,7 @@ rb_file_birthtime(VALUE obj) statx_data st; GetOpenFile(obj, fptr); - if (fstatx_without_gvl(fptr->fd, &st, STATX_BTIME) == -1) { + if (fstatx_without_gvl(fptr, &st, STATX_BTIME) == -1) { rb_sys_fail_path(fptr->pathv); } return statx_birthtime(&st, fptr->pathv); @@ -3690,25 +3700,20 @@ copy_home_path(VALUE result, const char *dir) return result; } -#ifdef HAVE_PWD_H -static void * -nogvl_getpwnam(void *login) -{ - return (void *)getpwnam((const char *)login); -} -#endif - VALUE rb_home_dir_of(VALUE user, VALUE result) { #ifdef HAVE_PWD_H - struct passwd *pwPtr; + VALUE dirname = rb_getpwdirnam_for_login(user); + if (dirname == Qnil) { + rb_raise(rb_eArgError, "user %"PRIsVALUE" doesn't exist", user); + } + const char *dir = RSTRING_PTR(dirname); #else extern char *getlogin(void); const char *pwPtr = 0; const char *login; # define endpwent() ((void)0) -#endif const char *dir, *username = RSTRING_PTR(user); rb_encoding *enc = rb_enc_get(user); #if defined _WIN32 @@ -3720,21 +3725,13 @@ rb_home_dir_of(VALUE user, VALUE result) dir = username = RSTRING_PTR(rb_str_conv_enc(user, enc, fsenc)); } -#ifdef HAVE_PWD_H - pwPtr = (struct passwd *)IO_WITHOUT_GVL(nogvl_getpwnam, (void *)username); -#else if ((login = getlogin()) && strcasecmp(username, login) == 0) dir = pwPtr = getenv("HOME"); -#endif if (!pwPtr) { - endpwent(); rb_raise(rb_eArgError, "user %"PRIsVALUE" doesn't exist", user); } -#ifdef HAVE_PWD_H - dir = pwPtr->pw_dir; #endif copy_home_path(result, dir); - endpwent(); return result; } @@ -4546,6 +4543,11 @@ rb_check_realpath_emulate_rescue(VALUE arg, VALUE exc) { return Qnil; } +#elif !defined(NEEDS_REALPATH_BUFFER) && defined(__APPLE__) && \ + (!defined(MAC_OS_X_VERSION_10_6) || (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_6)) +/* realpath() on OSX < 10.6 doesn't implement automatic allocation */ +# include +# define NEEDS_REALPATH_BUFFER 1 #endif /* HAVE_REALPATH */ static VALUE @@ -4555,6 +4557,11 @@ rb_check_realpath_internal(VALUE basedir, VALUE path, rb_encoding *origenc, enum VALUE unresolved_path; char *resolved_ptr = NULL; VALUE resolved; +# if defined(NEEDS_REALPATH_BUFFER) && NEEDS_REALPATH_BUFFER + char resolved_buffer[PATH_MAX]; +# else + char *const resolved_buffer = NULL; +# endif if (mode == RB_REALPATH_DIR) { return rb_check_realpath_emulate(basedir, path, origenc, mode); @@ -4566,7 +4573,7 @@ rb_check_realpath_internal(VALUE basedir, VALUE path, rb_encoding *origenc, enum } if (origenc) unresolved_path = TO_OSPATH(unresolved_path); - if ((resolved_ptr = realpath(RSTRING_PTR(unresolved_path), NULL)) == NULL) { + if ((resolved_ptr = realpath(RSTRING_PTR(unresolved_path), resolved_buffer)) == NULL) { /* glibc realpath(3) does not allow /path/to/file.rb/../other_file.rb, returning ENOTDIR in that case. glibc realpath(3) can also return ENOENT for paths that exist, @@ -4583,7 +4590,9 @@ rb_check_realpath_internal(VALUE basedir, VALUE path, rb_encoding *origenc, enum rb_sys_fail_path(unresolved_path); } resolved = ospath_new(resolved_ptr, strlen(resolved_ptr), rb_filesystem_encoding()); +# if !(defined(NEEDS_REALPATH_BUFFER) && NEEDS_REALPATH_BUFFER) free(resolved_ptr); +# endif # if !defined(__LINUX__) && !defined(__APPLE__) /* As `resolved` is a String in the filesystem encoding, no @@ -5279,7 +5288,7 @@ rb_file_truncate(VALUE obj, VALUE len) } rb_io_flush_raw(obj, 0); fa.fd = fptr->fd; - if ((int)rb_thread_io_blocking_region(nogvl_ftruncate, &fa, fa.fd) < 0) { + if ((int)rb_io_blocking_region(fptr, nogvl_ftruncate, &fa) < 0) { rb_sys_fail_path(fptr->pathv); } return INT2FIX(0); @@ -5379,7 +5388,7 @@ rb_file_flock(VALUE obj, VALUE operation) if (fptr->mode & FMODE_WRITABLE) { rb_io_flush_raw(obj, 0); } - while ((int)rb_thread_io_blocking_region(rb_thread_flock, op, fptr->fd) < 0) { + while ((int)rb_io_blocking_region(fptr, rb_thread_flock, op) < 0) { int e = errno; switch (e) { case EAGAIN: @@ -5456,14 +5465,14 @@ test_check(int n, int argc, VALUE *argv) * | 'o' | Whether the entity is owned by the caller's effective uid. | * | 'O' | Like 'o', but uses the real uid (not the effective uid). | * | 'p' | Whether the entity is a FIFO device (named pipe). | - * | 'r' | Whether the entity is readable by the caller's effecive uid/gid. | + * | 'r' | Whether the entity is readable by the caller's effective uid/gid. | * | 'R' | Like 'r', but uses the real uid/gid (not the effective uid/gid). | * | 'S' | Whether the entity is a socket. | * | 'u' | Whether the entity's setuid bit is set. | * | 'w' | Whether the entity is writable by the caller's effective uid/gid. | * | 'W' | Like 'w', but uses the real uid/gid (not the effective uid/gid). | * | 'x' | Whether the entity is executable by the caller's effective uid/gid. | - * | 'X' | Like 'x', but uses the real uid/gid (not the effecive uid/git). | + * | 'X' | Like 'x', but uses the real uid/gid (not the effective uid/git). | * | 'z' | Whether the entity exists and is of length zero. | * * - This test operates only on the entity at `path0`, diff --git a/gc.c b/gc.c index 0fd28686209429..c3bd71007ee0db 100644 --- a/gc.c +++ b/gc.c @@ -187,7 +187,7 @@ rb_gc_event_hook(VALUE obj, rb_event_flag_t event) void * rb_gc_get_objspace(void) { - return GET_VM()->objspace; + return GET_VM()->gc.objspace; } void @@ -310,13 +310,13 @@ rb_gc_set_shape(VALUE obj, uint32_t shape_id) } uint32_t -rb_gc_rebuild_shape(VALUE obj, size_t size_pool_id) +rb_gc_rebuild_shape(VALUE obj, size_t heap_id) { rb_shape_t *orig_shape = rb_shape_get_shape(obj); if (rb_shape_obj_too_complex(obj)) return (uint32_t)OBJ_TOO_COMPLEX_SHAPE_ID; - rb_shape_t *initial_shape = rb_shape_get_shape_by_id((shape_id_t)(size_pool_id + FIRST_T_OBJECT_SHAPE_ID)); + rb_shape_t *initial_shape = rb_shape_get_shape_by_id((shape_id_t)(heap_id + FIRST_T_OBJECT_SHAPE_ID)); rb_shape_t *new_shape = rb_shape_traverse_from_new_root(initial_shape, orig_shape); if (!new_shape) return 0; @@ -337,7 +337,7 @@ void rb_vm_update_references(void *ptr); #define unless_objspace(objspace) \ void *objspace; \ rb_vm_t *unless_objspace_vm = GET_VM(); \ - if (unless_objspace_vm) objspace = unless_objspace_vm->objspace; \ + if (unless_objspace_vm) objspace = unless_objspace_vm->gc.objspace; \ else /* return; or objspace will be warned uninitialized */ #define RMOVED(obj) ((struct RMoved *)(obj)) @@ -364,10 +364,6 @@ void rb_vm_update_references(void *ptr); int ruby_gc_debug_indent = 0; #endif -#ifndef RGENGC_CHECK_MODE -# define RGENGC_CHECK_MODE 0 -#endif - #ifndef RGENGC_OBJ_INFO # define RGENGC_OBJ_INFO RGENGC_CHECK_MODE #endif @@ -591,8 +587,7 @@ typedef struct gc_function_map { void (*ractor_cache_free)(void *objspace_ptr, void *cache); void (*set_params)(void *objspace_ptr); void (*init)(void); - void (*initial_stress_set)(VALUE flag); - size_t *(*size_pool_sizes)(void *objspace_ptr); + size_t *(*heap_sizes)(void *objspace_ptr); // Shutdown void (*shutdown_free_objects)(void *objspace_ptr); // GC @@ -609,7 +604,7 @@ typedef struct gc_function_map { // Object allocation VALUE (*new_obj)(void *objspace_ptr, void *cache_ptr, VALUE klass, VALUE flags, VALUE v1, VALUE v2, VALUE v3, bool wb_protected, size_t alloc_size); size_t (*obj_slot_size)(VALUE obj); - size_t (*size_pool_id_for_size)(void *objspace_ptr, size_t size); + size_t (*heap_id_for_size)(void *objspace_ptr, size_t size); bool (*size_allocatable_p)(size_t size); // Malloc void *(*malloc)(void *objspace_ptr, size_t size); @@ -644,9 +639,9 @@ typedef struct gc_function_map { VALUE (*object_id)(void *objspace_ptr, VALUE obj); VALUE (*object_id_to_ref)(void *objspace_ptr, VALUE object_id); // Statistics - VALUE (*set_measure_total_time)(void *objspace_ptr, VALUE flag); - VALUE (*get_measure_total_time)(void *objspace_ptr); - VALUE (*get_profile_total_time)(void *objspace_ptr); + void (*set_measure_total_time)(void *objspace_ptr, VALUE flag); + bool (*get_measure_total_time)(void *objspace_ptr); + unsigned long long (*get_total_time)(void *objspace_ptr); size_t (*gc_count)(void *objspace_ptr); VALUE (*latest_gc_info)(void *objspace_ptr, VALUE key); size_t (*stat)(void *objspace_ptr, VALUE hash_or_sym); @@ -667,7 +662,7 @@ static void ruby_external_gc_init(void) { // Assert that the directory path ends with a / - GC_ASSERT(SHARED_GC_DIR[strlen(SHARED_GC_DIR) - 2] == '/'); + RUBY_ASSERT_ALWAYS(SHARED_GC_DIR[sizeof(SHARED_GC_DIR) - 2] == '/'); char *gc_so_file = getenv(RUBY_GC_LIBRARY); @@ -685,31 +680,35 @@ ruby_external_gc_init(void) case '.': break; default: - rb_bug("Only alphanumeric, dash, underscore, and period is allowed in "RUBY_GC_LIBRARY""); + fprintf(stderr, "Only alphanumeric, dash, underscore, and period is allowed in "RUBY_GC_LIBRARY"\n"); + exit(1); } } gc_so_path = alloca(strlen(SHARED_GC_DIR) + strlen(gc_so_file) + 1); strcpy(gc_so_path, SHARED_GC_DIR); strcpy(gc_so_path + strlen(SHARED_GC_DIR), gc_so_file); - gc_so_path[strlen(SHARED_GC_DIR) + strlen(gc_so_file)] = '\0'; handle = dlopen(gc_so_path, RTLD_LAZY | RTLD_GLOBAL); if (!handle) { - fprintf(stderr, "%s\n", dlerror()); - rb_bug("ruby_external_gc_init: Shared library %s cannot be opened", gc_so_path); + fprintf(stderr, "ruby_external_gc_init: Shared library %s cannot be opened: %s\n", gc_so_path, dlerror()); + exit(1); } } + rb_gc_function_map_t gc_functions; + # define load_external_gc_func(name) do { \ if (handle) { \ - rb_gc_functions.name = dlsym(handle, "rb_gc_impl_" #name); \ - if (!rb_gc_functions.name) { \ - rb_bug("ruby_external_gc_init: " #name " func not exported by library %s", gc_so_path); \ + const char *func_name = "rb_gc_impl_" #name; \ + gc_functions.name = dlsym(handle, func_name); \ + if (!gc_functions.name) { \ + fprintf(stderr, "ruby_external_gc_init: %s function not exported by library %s\n", func_name, gc_so_path); \ + exit(1); \ } \ } \ else { \ - rb_gc_functions.name = rb_gc_impl_##name; \ + gc_functions.name = rb_gc_impl_##name; \ } \ } while (0) @@ -721,8 +720,7 @@ ruby_external_gc_init(void) load_external_gc_func(ractor_cache_free); load_external_gc_func(set_params); load_external_gc_func(init); - load_external_gc_func(initial_stress_set); - load_external_gc_func(size_pool_sizes); + load_external_gc_func(heap_sizes); // Shutdown load_external_gc_func(shutdown_free_objects); // GC @@ -739,7 +737,7 @@ ruby_external_gc_init(void) // Object allocation load_external_gc_func(new_obj); load_external_gc_func(obj_slot_size); - load_external_gc_func(size_pool_id_for_size); + load_external_gc_func(heap_id_for_size); load_external_gc_func(size_allocatable_p); // Malloc load_external_gc_func(malloc); @@ -776,7 +774,7 @@ ruby_external_gc_init(void) // Statistics load_external_gc_func(set_measure_total_time); load_external_gc_func(get_measure_total_time); - load_external_gc_func(get_profile_total_time); + load_external_gc_func(get_total_time); load_external_gc_func(gc_count); load_external_gc_func(latest_gc_info); load_external_gc_func(stat); @@ -789,6 +787,8 @@ ruby_external_gc_init(void) load_external_gc_func(copy_attributes); # undef load_external_gc_func + + rb_gc_functions = gc_functions; } // Bootup @@ -799,8 +799,7 @@ ruby_external_gc_init(void) # define rb_gc_impl_ractor_cache_free rb_gc_functions.ractor_cache_free # define rb_gc_impl_set_params rb_gc_functions.set_params # define rb_gc_impl_init rb_gc_functions.init -# define rb_gc_impl_initial_stress_set rb_gc_functions.initial_stress_set -# define rb_gc_impl_size_pool_sizes rb_gc_functions.size_pool_sizes +# define rb_gc_impl_heap_sizes rb_gc_functions.heap_sizes // Shutdown # define rb_gc_impl_shutdown_free_objects rb_gc_functions.shutdown_free_objects // GC @@ -817,7 +816,7 @@ ruby_external_gc_init(void) // Object allocation # define rb_gc_impl_new_obj rb_gc_functions.new_obj # define rb_gc_impl_obj_slot_size rb_gc_functions.obj_slot_size -# define rb_gc_impl_size_pool_id_for_size rb_gc_functions.size_pool_id_for_size +# define rb_gc_impl_heap_id_for_size rb_gc_functions.heap_id_for_size # define rb_gc_impl_size_allocatable_p rb_gc_functions.size_allocatable_p // Malloc # define rb_gc_impl_malloc rb_gc_functions.malloc @@ -854,7 +853,7 @@ ruby_external_gc_init(void) // Statistics # define rb_gc_impl_set_measure_total_time rb_gc_functions.set_measure_total_time # define rb_gc_impl_get_measure_total_time rb_gc_functions.get_measure_total_time -# define rb_gc_impl_get_profile_total_time rb_gc_functions.get_profile_total_time +# define rb_gc_impl_get_total_time rb_gc_functions.get_total_time # define rb_gc_impl_gc_count rb_gc_functions.gc_count # define rb_gc_impl_latest_gc_info rb_gc_functions.latest_gc_info # define rb_gc_impl_stat rb_gc_functions.stat @@ -867,6 +866,8 @@ ruby_external_gc_init(void) # define rb_gc_impl_copy_attributes rb_gc_functions.copy_attributes #endif +static VALUE initial_stress = Qfalse; + void * rb_objspace_alloc(void) { @@ -875,9 +876,10 @@ rb_objspace_alloc(void) #endif void *objspace = rb_gc_impl_objspace_alloc(); - ruby_current_vm_ptr->objspace = objspace; + ruby_current_vm_ptr->gc.objspace = objspace; rb_gc_impl_objspace_init(objspace); + rb_gc_impl_stress_set(objspace, initial_stress); return objspace; } @@ -1061,7 +1063,7 @@ rb_data_free(void *objspace, VALUE obj) if (dfree) { if (dfree == RUBY_DEFAULT_FREE) { - if (!RTYPEDDATA_EMBEDDED_P(obj)) { + if (!RTYPEDDATA_P(obj) || !RTYPEDDATA_EMBEDDED_P(obj)) { xfree(data); RB_DEBUG_COUNTER_INC(obj_data_xfree); } @@ -1093,8 +1095,6 @@ rb_gc_obj_free(void *objspace, VALUE obj) { RB_DEBUG_COUNTER_INC(obj_free); - rb_gc_event_hook(obj, RUBY_INTERNAL_EVENT_FREEOBJ); - switch (BUILTIN_TYPE(obj)) { case T_NIL: case T_FIXNUM: @@ -2065,60 +2065,84 @@ ruby_stack_check(void) /* ==================== Marking ==================== */ +#define RB_GC_MARK_OR_TRAVERSE(func, obj_or_ptr, obj, check_obj) do { \ + if (!RB_SPECIAL_CONST_P(obj)) { \ + rb_vm_t *vm = GET_VM(); \ + void *objspace = vm->gc.objspace; \ + if (LIKELY(vm->gc.mark_func_data == NULL)) { \ + GC_ASSERT(rb_gc_impl_during_gc_p(objspace)); \ + (func)(objspace, (obj_or_ptr)); \ + } \ + else if (check_obj ? \ + rb_gc_impl_pointer_to_heap_p(objspace, (const void *)obj) && \ + !rb_gc_impl_garbage_object_p(objspace, obj) : \ + true) { \ + GC_ASSERT(!rb_gc_impl_during_gc_p(objspace)); \ + struct gc_mark_func_data_struct *mark_func_data = vm->gc.mark_func_data; \ + vm->gc.mark_func_data = NULL; \ + mark_func_data->mark_func((obj), mark_func_data->data); \ + vm->gc.mark_func_data = mark_func_data; \ + } \ + } \ +} while (0) + static inline void -gc_mark_internal(void *objspace, VALUE obj) +gc_mark_internal(VALUE obj) { - if (RB_SPECIAL_CONST_P(obj)) return; - - rb_gc_impl_mark(objspace, obj); + RB_GC_MARK_OR_TRAVERSE(rb_gc_impl_mark, obj, obj, false); } void rb_gc_mark_movable(VALUE obj) { - gc_mark_internal(rb_gc_get_objspace(), obj); + gc_mark_internal(obj); } void rb_gc_mark_and_move(VALUE *ptr) { - if (SPECIAL_CONST_P(*ptr)) return; - - rb_gc_impl_mark_and_move(rb_gc_get_objspace(), ptr); + RB_GC_MARK_OR_TRAVERSE(rb_gc_impl_mark_and_move, ptr, *ptr, false); } static inline void -gc_mark_and_pin_internal(void *objspace, VALUE obj) +gc_mark_and_pin_internal(VALUE obj) { - if (RB_SPECIAL_CONST_P(obj)) return; - - rb_gc_impl_mark_and_pin(objspace, obj); + RB_GC_MARK_OR_TRAVERSE(rb_gc_impl_mark_and_pin, obj, obj, false); } void rb_gc_mark(VALUE obj) { - gc_mark_and_pin_internal(rb_gc_get_objspace(), obj); + gc_mark_and_pin_internal(obj); } static inline void -gc_mark_maybe_internal(void *objspace, VALUE obj) +gc_mark_maybe_internal(VALUE obj) { - if (RB_SPECIAL_CONST_P(obj)) return; - - rb_gc_impl_mark_maybe(objspace, obj); + RB_GC_MARK_OR_TRAVERSE(rb_gc_impl_mark_maybe, obj, obj, true); } void rb_gc_mark_maybe(VALUE obj) { - gc_mark_maybe_internal(rb_gc_get_objspace(), obj); + gc_mark_maybe_internal(obj); } void rb_gc_mark_weak(VALUE *ptr) { - rb_gc_impl_mark_weak(rb_gc_get_objspace(), ptr); + if (RB_SPECIAL_CONST_P(*ptr)) return; + + rb_vm_t *vm = GET_VM(); + void *objspace = vm->gc.objspace; + if (LIKELY(vm->gc.mark_func_data == NULL)) { + GC_ASSERT(rb_gc_impl_during_gc_p(objspace)); + + rb_gc_impl_mark_weak(objspace, ptr); + } + else { + GC_ASSERT(!rb_gc_impl_during_gc_p(objspace)); + } } void @@ -2127,39 +2151,42 @@ rb_gc_remove_weak(VALUE parent_obj, VALUE *ptr) rb_gc_impl_remove_weak(rb_gc_get_objspace(), parent_obj, ptr); } -ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS(static void each_location(register const VALUE *x, register long n, void (*cb)(void *data, VALUE), void *data)); +ATTRIBUTE_NO_ADDRESS_SAFETY_ANALYSIS(static void each_location(register const VALUE *x, register long n, void (*cb)(VALUE, void *), void *data)); static void -each_location(register const VALUE *x, register long n, void (*cb)(void *data, VALUE obj), void *data) +each_location(register const VALUE *x, register long n, void (*cb)(VALUE, void *), void *data) { VALUE v; while (n--) { v = *x; - cb(data, v); + cb(v, data); x++; } } static void -gc_mark_locations(const VALUE *start, const VALUE *end, void (*cb)(void *, VALUE), void *data) +each_location_ptr(const VALUE *start, const VALUE *end, void (*cb)(VALUE, void *), void *data) { - long n; - if (end <= start) return; - n = end - start; - each_location(start, n, cb, data); + each_location(start, end - start, cb, data); +} + +static void +gc_mark_maybe_each_location(VALUE obj, void *data) +{ + gc_mark_maybe_internal(obj); } void rb_gc_mark_locations(const VALUE *start, const VALUE *end) { - gc_mark_locations(start, end, rb_gc_impl_mark_maybe, rb_gc_get_objspace()); + each_location_ptr(start, end, gc_mark_maybe_each_location, NULL); } void rb_gc_mark_values(long n, const VALUE *values) { for (long i = 0; i < n; i++) { - gc_mark_internal(rb_gc_get_objspace(), values[i]); + gc_mark_internal(values[i]); } } @@ -2167,16 +2194,14 @@ void rb_gc_mark_vm_stack_values(long n, const VALUE *values) { for (long i = 0; i < n; i++) { - gc_mark_and_pin_internal(rb_gc_get_objspace(), values[i]); + gc_mark_and_pin_internal(values[i]); } } static int mark_key(st_data_t key, st_data_t value, st_data_t data) { - void *objspace = (void *)data; - - gc_mark_and_pin_internal(objspace, (VALUE)key); + gc_mark_and_pin_internal((VALUE)key); return ST_CONTINUE; } @@ -2192,10 +2217,8 @@ rb_mark_set(st_table *tbl) static int mark_keyvalue(st_data_t key, st_data_t value, st_data_t data) { - void *objspace = (void *)data; - - gc_mark_internal(objspace, (VALUE)key); - gc_mark_internal(objspace, (VALUE)value); + gc_mark_internal((VALUE)key); + gc_mark_internal((VALUE)value); return ST_CONTINUE; } @@ -2203,10 +2226,8 @@ mark_keyvalue(st_data_t key, st_data_t value, st_data_t data) static int pin_key_pin_value(st_data_t key, st_data_t value, st_data_t data) { - void *objspace = (void *)data; - - gc_mark_and_pin_internal(objspace, (VALUE)key); - gc_mark_and_pin_internal(objspace, (VALUE)value); + gc_mark_and_pin_internal((VALUE)key); + gc_mark_and_pin_internal((VALUE)value); return ST_CONTINUE; } @@ -2214,25 +2235,23 @@ pin_key_pin_value(st_data_t key, st_data_t value, st_data_t data) static int pin_key_mark_value(st_data_t key, st_data_t value, st_data_t data) { - void *objspace = (void *)data; - - gc_mark_and_pin_internal(objspace, (VALUE)key); - gc_mark_internal(objspace, (VALUE)value); + gc_mark_and_pin_internal((VALUE)key); + gc_mark_internal((VALUE)value); return ST_CONTINUE; } static void -mark_hash(void *objspace, VALUE hash) +mark_hash(VALUE hash) { if (rb_hash_compare_by_id_p(hash)) { - rb_hash_stlike_foreach(hash, pin_key_mark_value, (st_data_t)objspace); + rb_hash_stlike_foreach(hash, pin_key_mark_value, 0); } else { - rb_hash_stlike_foreach(hash, mark_keyvalue, (st_data_t)objspace); + rb_hash_stlike_foreach(hash, mark_keyvalue, 0); } - gc_mark_internal(objspace, RHASH(hash)->ifnone); + gc_mark_internal(RHASH(hash)->ifnone); } void @@ -2240,13 +2259,13 @@ rb_mark_hash(st_table *tbl) { if (!tbl) return; - st_foreach(tbl, pin_key_pin_value, (st_data_t)rb_gc_get_objspace()); + st_foreach(tbl, pin_key_pin_value, 0); } static enum rb_id_table_iterator_result mark_method_entry_i(VALUE me, void *objspace) { - gc_mark_internal(objspace, me); + gc_mark_internal(me); return ID_TABLE_CONTINUE; } @@ -2270,32 +2289,12 @@ mark_m_tbl(void *objspace, struct rb_id_table *tbl) #endif static void -each_stack_location(const VALUE *stack_start, const VALUE *stack_end, void (*cb)(void *data, VALUE obj), void *data) +gc_mark_machine_stack_location_maybe(VALUE obj, void *data) { - gc_mark_locations(stack_start, stack_end, cb, data); + gc_mark_maybe_internal(obj); -#if defined(__mc68000__) - gc_mark_locations((VALUE*)((char*)stack_start + 2), - (VALUE*)((char*)stack_end - 2), cb, data); -#endif -} - -struct mark_machine_stack_location_maybe_data { - void *objspace; #ifdef RUBY_ASAN_ENABLED - const rb_execution_context_t *ec; -#endif -}; - -static void -gc_mark_machine_stack_location_maybe(void *data, VALUE obj) -{ - void *objspace = ((struct mark_machine_stack_location_maybe_data *)data)->objspace; - - gc_mark_maybe_internal(objspace, obj); - -#ifdef RUBY_ASAN_ENABLED - const rb_execution_context_t *ec = ((struct mark_machine_stack_location_maybe_data *)data)->ec; + const rb_execution_context_t *ec = (const rb_execution_context_t *)data; void *fake_frame_start; void *fake_frame_end; bool is_fake_frame = asan_get_fake_stack_extents( @@ -2304,7 +2303,7 @@ gc_mark_machine_stack_location_maybe(void *data, VALUE obj) &fake_frame_start, &fake_frame_end ); if (is_fake_frame) { - each_stack_location(fake_frame_start, fake_frame_end, rb_gc_impl_mark_maybe, objspace); + each_location_ptr(fake_frame_start, fake_frame_end, gc_mark_maybe_each_location, NULL); } #endif } @@ -2324,26 +2323,26 @@ rb_mark_locations(void *begin, void *end) # if defined(__EMSCRIPTEN__) static void -mark_current_machine_context(void *objspace, rb_execution_context_t *ec) +mark_current_machine_context(rb_execution_context_t *ec) { emscripten_scan_stack(rb_mark_locations); - each_stack_location(rb_stack_range_tmp[0], rb_stack_range_tmp[1], rb_gc_impl_mark_maybe, objspace); + each_location_ptr(rb_stack_range_tmp[0], rb_stack_range_tmp[1], gc_mark_maybe_each_location, NULL); emscripten_scan_registers(rb_mark_locations); - each_stack_location(rb_stack_range_tmp[0], rb_stack_range_tmp[1], rb_gc_impl_mark_maybe, objspace); + each_location_ptr(rb_stack_range_tmp[0], rb_stack_range_tmp[1], gc_mark_maybe_each_location, NULL); } # else // use Asyncify version static void -mark_current_machine_context(void *objspace, rb_execution_context_t *ec) +mark_current_machine_context(rb_execution_context_t *ec) { VALUE *stack_start, *stack_end; SET_STACK_END; GET_STACK_BOUNDS(stack_start, stack_end, 1); - each_stack_location(stack_start, stack_end, rb_gc_impl_mark_maybe, objspace); + each_location_ptr(stack_start, stack_end, gc_mark_maybe_each_location, NULL); rb_wasm_scan_locals(rb_mark_locations); - each_stack_location(rb_stack_range_tmp[0], rb_stack_range_tmp[1], rb_gc_impl_mark_maybe, objspace); + each_location_ptr(rb_stack_range_tmp[0], rb_stack_range_tmp[1], gc_mark_maybe_each_location, NULL); } # endif @@ -2351,7 +2350,7 @@ mark_current_machine_context(void *objspace, rb_execution_context_t *ec) #else // !defined(__wasm__) static void -mark_current_machine_context(void *objspace, rb_execution_context_t *ec) +mark_current_machine_context(rb_execution_context_t *ec) { union { rb_jmp_buf j; @@ -2370,15 +2369,15 @@ mark_current_machine_context(void *objspace, rb_execution_context_t *ec) SET_STACK_END; GET_STACK_BOUNDS(stack_start, stack_end, 1); - struct mark_machine_stack_location_maybe_data data = { - .objspace = objspace, + void *data = #ifdef RUBY_ASAN_ENABLED - .ec = ec + ec; +#else + NULL; #endif - }; - each_location(save_regs_gc_mark.v, numberof(save_regs_gc_mark.v), gc_mark_machine_stack_location_maybe, &data); - each_stack_location(stack_start, stack_end, gc_mark_machine_stack_location_maybe, &data); + each_location(save_regs_gc_mark.v, numberof(save_regs_gc_mark.v), gc_mark_machine_stack_location_maybe, data); + each_location_ptr(stack_start, stack_end, gc_mark_machine_stack_location_maybe, data); } #endif @@ -2390,24 +2389,23 @@ rb_gc_mark_machine_context(const rb_execution_context_t *ec) GET_STACK_BOUNDS(stack_start, stack_end, 0); RUBY_DEBUG_LOG("ec->th:%u stack_start:%p stack_end:%p", rb_ec_thread_ptr(ec)->serial, stack_start, stack_end); - struct mark_machine_stack_location_maybe_data data = { - .objspace = rb_gc_get_objspace(), + void *data = #ifdef RUBY_ASAN_ENABLED - .ec = ec + /* gc_mark_machine_stack_location_maybe() uses data as const */ + (rb_execution_context_t *)ec; +#else + NULL; #endif - }; - each_stack_location(stack_start, stack_end, gc_mark_machine_stack_location_maybe, &data); + each_location_ptr(stack_start, stack_end, gc_mark_machine_stack_location_maybe, data); int num_regs = sizeof(ec->machine.regs)/(sizeof(VALUE)); - each_location((VALUE*)&ec->machine.regs, num_regs, gc_mark_machine_stack_location_maybe, &data); + each_location((VALUE*)&ec->machine.regs, num_regs, gc_mark_machine_stack_location_maybe, data); } static int rb_mark_tbl_i(st_data_t key, st_data_t value, st_data_t data) { - void *objspace = (void *)data; - - gc_mark_and_pin_internal(objspace, (VALUE)value); + gc_mark_and_pin_internal((VALUE)value); return ST_CONTINUE; } @@ -2417,21 +2415,21 @@ rb_mark_tbl(st_table *tbl) { if (!tbl || tbl->num_entries == 0) return; - st_foreach(tbl, rb_mark_tbl_i, (st_data_t)rb_gc_get_objspace()); + st_foreach(tbl, rb_mark_tbl_i, 0); } static void -gc_mark_tbl_no_pin(void *objspace, st_table *tbl) +gc_mark_tbl_no_pin(st_table *tbl) { if (!tbl || tbl->num_entries == 0) return; - st_foreach(tbl, gc_mark_tbl_no_pin_i, (st_data_t)objspace); + st_foreach(tbl, gc_mark_tbl_no_pin_i, 0); } void rb_mark_tbl_no_pin(st_table *tbl) { - gc_mark_tbl_no_pin(rb_gc_get_objspace(), tbl); + gc_mark_tbl_no_pin(tbl); } static enum rb_id_table_iterator_result @@ -2451,7 +2449,7 @@ mark_cvc_tbl_i(VALUE cvc_entry, void *objspace) #if USE_MMTK } #endif - gc_mark_internal(objspace, (VALUE)entry->cref); + gc_mark_internal((VALUE)entry->cref); return ID_TABLE_CONTINUE; } @@ -2476,8 +2474,8 @@ mark_const_table_i(VALUE value, void *objspace) { const rb_const_entry_t *ce = (const rb_const_entry_t *)value; - gc_mark_internal(objspace, ce->value); - gc_mark_internal(objspace, ce->file); + gc_mark_internal(ce->value); + gc_mark_internal(ce->file); return ID_TABLE_CONTINUE; } @@ -2494,10 +2492,10 @@ rb_gc_mark_roots(void *objspace, const char **categoryp) MARK_CHECKPOINT("vm"); rb_vm_mark(vm); - if (vm->self) gc_mark_internal(objspace, vm->self); + if (vm->self) gc_mark_internal(vm->self); MARK_CHECKPOINT("machine_context"); - mark_current_machine_context(objspace, ec); + mark_current_machine_context(ec); MARK_CHECKPOINT("end_proc"); rb_mark_end_proc(); @@ -2525,10 +2523,10 @@ void rb_mmtk_scan_vm_roots(void) { rb_vm_t *vm = GET_VM(); - rb_objspace_t *objspace = vm->objspace; rb_vm_mark(vm); - if (vm->self) gc_mark(objspace, vm->self); + // We don't move roots now, but it's unnecessary to explicitly use the non-movable variant rb_gc_mark, either. + if (vm->self) rb_gc_mark_movable(vm->self); } void @@ -2556,6 +2554,8 @@ rb_mmtk_scan_yjit_roots(void) } #endif +#define TYPED_DATA_REFS_OFFSET_LIST(d) (size_t *)(uintptr_t)RTYPEDDATA(d)->type->function.dmark + void rb_gc_mark_children(void *objspace, VALUE obj) { @@ -2595,28 +2595,28 @@ rb_gc_mark_children(void *objspace, VALUE obj) break; } - gc_mark_internal(objspace, RBASIC(obj)->klass); + gc_mark_internal(RBASIC(obj)->klass); switch (BUILTIN_TYPE(obj)) { case T_CLASS: if (FL_TEST(obj, FL_SINGLETON)) { - gc_mark_internal(objspace, RCLASS_ATTACHED_OBJECT(obj)); + gc_mark_internal(RCLASS_ATTACHED_OBJECT(obj)); } // Continue to the shared T_CLASS/T_MODULE case T_MODULE: if (RCLASS_SUPER(obj)) { - gc_mark_internal(objspace, RCLASS_SUPER(obj)); + gc_mark_internal(RCLASS_SUPER(obj)); } mark_m_tbl(objspace, RCLASS_M_TBL(obj)); mark_cvc_tbl(objspace, obj); rb_cc_table_mark(obj); if (rb_shape_obj_too_complex(obj)) { - gc_mark_tbl_no_pin(objspace, (st_table *)RCLASS_IVPTR(obj)); + gc_mark_tbl_no_pin((st_table *)RCLASS_IVPTR(obj)); } else { for (attr_index_t i = 0; i < RCLASS_IV_COUNT(obj); i++) { - gc_mark_internal(objspace, RCLASS_IVPTR(obj)[i]); + gc_mark_internal(RCLASS_IVPTR(obj)[i]); } } @@ -2624,7 +2624,7 @@ rb_gc_mark_children(void *objspace, VALUE obj) rb_id_table_foreach_values(RCLASS_CONST_TBL(obj), mark_const_table_i, objspace); } - gc_mark_internal(objspace, RCLASS_EXT(obj)->classpath); + gc_mark_internal(RCLASS_EXT(obj)->classpath); break; case T_ICLASS: @@ -2632,11 +2632,11 @@ rb_gc_mark_children(void *objspace, VALUE obj) mark_m_tbl(objspace, RCLASS_M_TBL(obj)); } if (RCLASS_SUPER(obj)) { - gc_mark_internal(objspace, RCLASS_SUPER(obj)); + gc_mark_internal(RCLASS_SUPER(obj)); } if (RCLASS_INCLUDER(obj)) { - gc_mark_internal(objspace, RCLASS_INCLUDER(obj)); + gc_mark_internal(RCLASS_INCLUDER(obj)); } mark_m_tbl(objspace, RCLASS_CALLABLE_M_TBL(obj)); rb_cc_table_mark(obj); @@ -2652,19 +2652,19 @@ rb_gc_mark_children(void *objspace, VALUE obj) #endif if (ARY_SHARED_P(obj)) { VALUE root = ARY_SHARED_ROOT(obj); - gc_mark_internal(objspace, root); + gc_mark_internal(root); } else { long len = RARRAY_LEN(obj); const VALUE *ptr = RARRAY_CONST_PTR(obj); for (long i = 0; i < len; i++) { - gc_mark_internal(objspace, ptr[i]); + gc_mark_internal(ptr[i]); } } break; case T_HASH: - mark_hash(objspace, obj); + mark_hash(obj); break; case T_STRING: @@ -2681,10 +2681,10 @@ rb_gc_mark_children(void *objspace, VALUE obj) * points into the slot of the shared string. There may be code * using the RSTRING_PTR on the stack, which would pin this * string but not pin the shared string, causing it to move. */ - gc_mark_and_pin_internal(objspace, RSTRING(obj)->as.heap.aux.shared); + gc_mark_and_pin_internal(RSTRING(obj)->as.heap.aux.shared); } else { - gc_mark_internal(objspace, RSTRING(obj)->as.heap.aux.shared); + gc_mark_internal(RSTRING(obj)->as.heap.aux.shared); } } break; @@ -2694,10 +2694,10 @@ rb_gc_mark_children(void *objspace, VALUE obj) if (ptr) { if (RTYPEDDATA_P(obj) && gc_declarative_marking_p(RTYPEDDATA(obj)->type)) { - size_t *offset_list = (size_t *)RTYPEDDATA(obj)->type->function.dmark; + size_t *offset_list = TYPED_DATA_REFS_OFFSET_LIST(obj); for (size_t offset = *offset_list; offset != RUBY_REF_END; offset = *offset_list++) { - gc_mark_internal(objspace, *(VALUE *)((char *)ptr + offset)); + gc_mark_internal(*(VALUE *)((char *)ptr + offset)); } } else { @@ -2715,14 +2715,14 @@ rb_gc_mark_children(void *objspace, VALUE obj) rb_shape_t *shape = rb_shape_get_shape_by_id(ROBJECT_SHAPE_ID(obj)); if (rb_shape_obj_too_complex(obj)) { - gc_mark_tbl_no_pin(objspace, ROBJECT_IV_HASH(obj)); + gc_mark_tbl_no_pin(ROBJECT_IV_HASH(obj)); } else { const VALUE * const ptr = ROBJECT_IVPTR(obj); uint32_t len = ROBJECT_IV_COUNT(obj); for (uint32_t i = 0; i < len; i++) { - gc_mark_internal(objspace, ptr[i]); + gc_mark_internal(ptr[i]); } } @@ -2741,25 +2741,25 @@ rb_gc_mark_children(void *objspace, VALUE obj) case T_FILE: if (RFILE(obj)->fptr) { - gc_mark_internal(objspace, RFILE(obj)->fptr->self); - gc_mark_internal(objspace, RFILE(obj)->fptr->pathv); - gc_mark_internal(objspace, RFILE(obj)->fptr->tied_io_for_writing); - gc_mark_internal(objspace, RFILE(obj)->fptr->writeconv_asciicompat); - gc_mark_internal(objspace, RFILE(obj)->fptr->writeconv_pre_ecopts); - gc_mark_internal(objspace, RFILE(obj)->fptr->encs.ecopts); - gc_mark_internal(objspace, RFILE(obj)->fptr->write_lock); - gc_mark_internal(objspace, RFILE(obj)->fptr->timeout); + gc_mark_internal(RFILE(obj)->fptr->self); + gc_mark_internal(RFILE(obj)->fptr->pathv); + gc_mark_internal(RFILE(obj)->fptr->tied_io_for_writing); + gc_mark_internal(RFILE(obj)->fptr->writeconv_asciicompat); + gc_mark_internal(RFILE(obj)->fptr->writeconv_pre_ecopts); + gc_mark_internal(RFILE(obj)->fptr->encs.ecopts); + gc_mark_internal(RFILE(obj)->fptr->write_lock); + gc_mark_internal(RFILE(obj)->fptr->timeout); } break; case T_REGEXP: - gc_mark_internal(objspace, RREGEXP(obj)->src); + gc_mark_internal(RREGEXP(obj)->src); break; case T_MATCH: - gc_mark_internal(objspace, RMATCH(obj)->regexp); + gc_mark_internal(RMATCH(obj)->regexp); if (RMATCH(obj)->str) { - gc_mark_internal(objspace, RMATCH(obj)->str); + gc_mark_internal(RMATCH(obj)->str); } #if USE_MMTK if (rb_mmtk_enabled_p()) { @@ -2773,13 +2773,13 @@ rb_gc_mark_children(void *objspace, VALUE obj) break; case T_RATIONAL: - gc_mark_internal(objspace, RRATIONAL(obj)->num); - gc_mark_internal(objspace, RRATIONAL(obj)->den); + gc_mark_internal(RRATIONAL(obj)->num); + gc_mark_internal(RRATIONAL(obj)->den); break; case T_COMPLEX: - gc_mark_internal(objspace, RCOMPLEX(obj)->real); - gc_mark_internal(objspace, RCOMPLEX(obj)->imag); + gc_mark_internal(RCOMPLEX(obj)->real); + gc_mark_internal(RCOMPLEX(obj)->imag); break; case T_STRUCT: { @@ -2787,7 +2787,7 @@ rb_gc_mark_children(void *objspace, VALUE obj) const VALUE * const ptr = RSTRUCT_CONST_PTR(obj); for (long i = 0; i < len; i++) { - gc_mark_internal(objspace, ptr[i]); + gc_mark_internal(ptr[i]); } break; @@ -3134,9 +3134,9 @@ rb_gc_prepare_heap(void) } size_t -rb_gc_size_pool_id_for_size(size_t size) +rb_gc_heap_id_for_size(size_t size) { - return rb_gc_impl_size_pool_id_for_size(rb_gc_get_objspace(), size); + return rb_gc_impl_heap_id_for_size(rb_gc_get_objspace(), size); } bool @@ -3462,7 +3462,7 @@ rb_gc_update_object_references(void *objspace, VALUE obj) void *const ptr = RTYPEDDATA_P(obj) ? RTYPEDDATA_GET_DATA(obj) : DATA_PTR(obj); if (ptr) { if (RTYPEDDATA_P(obj) && gc_declarative_marking_p(RTYPEDDATA(obj)->type)) { - size_t *offset_list = (size_t *)RTYPEDDATA(obj)->type->function.dmark; + size_t *offset_list = TYPED_DATA_REFS_OFFSET_LIST(obj); for (size_t offset = *offset_list; offset != RUBY_REF_END; offset = *offset_list++) { VALUE *ref = (VALUE *)((char *)ptr + offset); @@ -3594,19 +3594,6 @@ rb_gc_latest_gc_info(VALUE key) return rb_gc_impl_latest_gc_info(rb_gc_get_objspace(), key); } -static VALUE -gc_latest_gc_info(rb_execution_context_t *ec, VALUE self, VALUE arg) -{ - if (NIL_P(arg)) { - arg = rb_hash_new(); - } - else if (!SYMBOL_P(arg) && !RB_TYPE_P(arg, T_HASH)) { - rb_raise(rb_eTypeError, "non-hash or symbol given"); - } - - return rb_gc_latest_gc_info(arg); -} - static VALUE gc_stat(rb_execution_context_t *ec, VALUE self, VALUE arg) // arg is (nil || hash || symbol) { @@ -3682,13 +3669,13 @@ gc_stress_set_m(rb_execution_context_t *ec, VALUE self, VALUE flag) void rb_gc_initial_stress_set(VALUE flag) { - rb_gc_impl_initial_stress_set(flag); + initial_stress = flag; } size_t * -rb_gc_size_pool_sizes(void) +rb_gc_heap_sizes(void) { - return rb_gc_impl_size_pool_sizes(rb_gc_get_objspace()); + return rb_gc_impl_heap_sizes(rb_gc_get_objspace()); } VALUE @@ -3754,13 +3741,6 @@ ruby_gc_set_params(void) rb_gc_impl_set_params(rb_gc_get_objspace()); } -void -rb_gc_reachable_objects_from_callback(VALUE obj) -{ - rb_ractor_t *cr = GET_RACTOR(); - cr->mfd->mark_func(obj, cr->mfd->data); -} - void rb_objspace_reachable_objects_from(VALUE obj, void (func)(VALUE, void *), void *data) { @@ -3769,15 +3749,16 @@ rb_objspace_reachable_objects_from(VALUE obj, void (func)(VALUE, void *), void * if (rb_gc_impl_during_gc_p(rb_gc_get_objspace())) rb_bug("rb_objspace_reachable_objects_from() is not supported while during GC"); if (!RB_SPECIAL_CONST_P(obj)) { - rb_ractor_t *cr = GET_RACTOR(); + rb_vm_t *vm = GET_VM(); + struct gc_mark_func_data_struct *prev_mfd = vm->gc.mark_func_data; struct gc_mark_func_data_struct mfd = { .mark_func = func, .data = data, - }, *prev_mfd = cr->mfd; + }; - cr->mfd = &mfd; + vm->gc.mark_func_data = &mfd; rb_gc_mark_children(rb_gc_get_objspace(), obj); - cr->mfd = prev_mfd; + vm->gc.mark_func_data = prev_mfd; } } RB_VM_LOCK_LEAVE(); @@ -3801,19 +3782,22 @@ rb_objspace_reachable_objects_from_root(void (func)(const char *category, VALUE, { if (rb_gc_impl_during_gc_p(rb_gc_get_objspace())) rb_bug("rb_gc_impl_objspace_reachable_objects_from_root() is not supported while during GC"); - rb_ractor_t *cr = GET_RACTOR(); + rb_vm_t *vm = GET_VM(); + struct root_objects_data data = { .func = func, .data = passing_data, }; + + struct gc_mark_func_data_struct *prev_mfd = vm->gc.mark_func_data; struct gc_mark_func_data_struct mfd = { .mark_func = root_objects_from, .data = &data, - }, *prev_mfd = cr->mfd; + }; - cr->mfd = &mfd; + vm->gc.mark_func_data = &mfd; rb_gc_mark_roots(rb_gc_get_objspace(), &data.category); - cr->mfd = prev_mfd; + vm->gc.mark_func_data = prev_mfd; } /* @@ -4172,7 +4156,7 @@ rb_raw_obj_info_buitin_type(char *const buff, const size_t buff_size, const VALU cme ? rb_id2name(cme->called_id) : "", cme ? (METHOD_ENTRY_INVALIDATED(cme) ? " [inv]" : "") : "", (void *)cme, - (void *)vm_cc_call(cc)); + (void *)(uintptr_t)vm_cc_call(cc)); break; } default: diff --git a/gc.rb b/gc.rb index f714fba749090a..2a75e166ce98f9 100644 --- a/gc.rb +++ b/gc.rb @@ -257,9 +257,9 @@ def self.stat_heap heap_name = nil, hash_or_key = nil # GC.config -> hash # GC.config(hash) -> hash # - # Sets or gets information about the current GC config. + # Sets or gets information about the current \GC config. # - # Configuration parameters are GC implementation specific and may change + # Configuration parameters are \GC implementation specific and may change # without notice. # # This method can be called without parameters to retrieve the current config. @@ -269,26 +269,26 @@ def self.stat_heap heap_name = nil, hash_or_key = nil # unmodified. # # If a key/value pair is passed to this function that does not correspond to - # a valid config key for the GC implementation being used, no config will be + # a valid config key for the \GC implementation being used, no config will be # updated, the key will be present in the returned Hash, and it's value will - # be +nil+. This is to facilitate easy migration between GC implementations. + # be +nil+. This is to facilitate easy migration between \GC implementations. # # In both call-seqs the return value of GC.config will be a +Hash+ # containing the most recent full configuration. ie. All keys and values - # defined by the specific GC implementation being used. In the case of a + # defined by the specific \GC implementation being used. In the case of a # config update, the return value will include the new values being updated. # # This method is only expected to work on CRuby. # - # Valid config keys for Ruby's default GC implementation are: + # Valid config keys for Ruby's default \GC implementation are: # # [rgengc_allow_full_mark] - # Control whether the GC is allowed to run a full mark (young & old objects). + # Control whether the \GC is allowed to run a full mark (young & old objects). # - # When +true+ GC interleaves major and minor collections. This is default. GC + # When +true+ \GC interleaves major and minor collections. This is default. \GC # will function as intended. # - # When +false+, the GC will never trigger a full marking cycle unless + # When +false+, the \GC will never trigger a full marking cycle unless # explicitly requested by user code. Instead only a minor mark will run - # only young objects will be marked. When the heap space is exhausted, new # pages will be allocated immediately instead of running a full mark. @@ -312,15 +312,27 @@ def self.config hash = nil # call-seq: # GC.latest_gc_info -> hash # GC.latest_gc_info(hash) -> hash - # GC.latest_gc_info(:major_by) -> :malloc + # GC.latest_gc_info(key) -> value # # Returns information about the most recent garbage collection. # - # If the optional argument, hash, is given, + # If the argument +hash+ is given and is a Hash object, # it is overwritten and returned. # This is intended to avoid probe effect. + # + # If the argument +key+ is given and is a Symbol object, + # it returns the value associated with the key. + # This is equivalent to GC.latest_gc_info[key]. def self.latest_gc_info hash_or_key = nil - Primitive.gc_latest_gc_info hash_or_key + if hash_or_key == nil + hash_or_key = {} + elsif Primitive.cexpr!("RBOOL(!SYMBOL_P(hash_or_key) && !RB_TYPE_P(hash_or_key, T_HASH))") + raise TypeError, "non-hash or symbol given" + end + + Primitive.cstmt! %{ + return rb_gc_latest_gc_info(hash_or_key); + } end # call-seq: @@ -331,7 +343,8 @@ def self.latest_gc_info hash_or_key = nil # Note that \GC time measurement can cause some performance overhead. def self.measure_total_time=(flag) Primitive.cstmt! %{ - return rb_gc_impl_set_measure_total_time(rb_gc_get_objspace(), flag); + rb_gc_impl_set_measure_total_time(rb_gc_get_objspace(), flag); + return flag; } end @@ -342,7 +355,7 @@ def self.measure_total_time=(flag) # Note that measurement can affect the application performance. def self.measure_total_time Primitive.cexpr! %{ - rb_gc_impl_get_measure_total_time(rb_gc_get_objspace()) + RBOOL(rb_gc_impl_get_measure_total_time(rb_gc_get_objspace())) } end @@ -352,7 +365,7 @@ def self.measure_total_time # Return measured \GC total time in nano seconds. def self.total_time Primitive.cexpr! %{ - rb_gc_impl_get_profile_total_time(rb_gc_get_objspace()) + ULL2NUM(rb_gc_impl_get_total_time(rb_gc_get_objspace())) } end end diff --git a/gc/default.c b/gc/default.c index 1dcc9907ca829d..8cbd057ab5190e 100644 --- a/gc/default.c +++ b/gc/default.c @@ -162,22 +162,22 @@ #define USE_TICK_T (PRINT_ENTER_EXIT_TICK || PRINT_ROOT_TICKS) -#ifndef SIZE_POOL_COUNT -# define SIZE_POOL_COUNT 5 +#ifndef HEAP_COUNT +# define HEAP_COUNT 5 #endif -typedef struct ractor_newobj_size_pool_cache { +typedef struct ractor_newobj_heap_cache { struct free_slot *freelist; struct heap_page *using_page; -} rb_ractor_newobj_size_pool_cache_t; +} rb_ractor_newobj_heap_cache_t; typedef struct ractor_newobj_cache { size_t incremental_mark_step_allocated_slots; - rb_ractor_newobj_size_pool_cache_t size_pool_caches[SIZE_POOL_COUNT]; + rb_ractor_newobj_heap_cache_t heap_caches[HEAP_COUNT]; } rb_ractor_newobj_cache_t; typedef struct { - size_t size_pool_init_slots[SIZE_POOL_COUNT]; + size_t heap_init_slots[HEAP_COUNT]; size_t heap_free_slots; double growth_factor; size_t growth_max_slots; @@ -198,7 +198,7 @@ typedef struct { } ruby_gc_params_t; static ruby_gc_params_t gc_params = { - { 0 }, + { GC_HEAP_INIT_SLOTS }, GC_HEAP_FREE_SLOTS, GC_HEAP_GROWTH_FACTOR, GC_HEAP_GROWTH_MAX_SLOTS, @@ -248,18 +248,6 @@ static ruby_gc_params_t gc_params = { #endif int ruby_rgengc_debug; -/* RGENGC_CHECK_MODE - * 0: disable all assertions - * 1: enable assertions (to debug RGenGC) - * 2: enable internal consistency check at each GC (for debugging) - * 3: enable internal consistency check at each GC steps (for debugging) - * 4: enable liveness check - * 5: show all references - */ -#ifndef RGENGC_CHECK_MODE -# define RGENGC_CHECK_MODE 0 -#endif - /* RGENGC_PROFILE * 0: disable RGenGC profiling * 1: enable profiling for basic information @@ -427,30 +415,13 @@ typedef struct mark_stack { size_t unused_cache_size; } mark_stack_t; -#define SIZE_POOL_EDEN_HEAP(size_pool) (&(size_pool)->eden_heap) -#define SIZE_POOL_TOMB_HEAP(size_pool) (&(size_pool)->tomb_heap) - typedef int (*gc_compact_compare_func)(const void *l, const void *r, void *d); typedef struct rb_heap_struct { - struct heap_page *free_pages; - struct ccan_list_head pages; - struct heap_page *sweeping_page; /* iterator for .pages */ - struct heap_page *compact_cursor; - uintptr_t compact_cursor_index; - struct heap_page *pooled_pages; - size_t total_pages; /* total page count in a heap */ - size_t total_slots; /* total slot count (about total_pages * HEAP_PAGE_OBJ_LIMIT) */ -} rb_heap_t; - -typedef struct rb_size_pool_struct { short slot_size; - size_t allocatable_pages; - /* Basic statistics */ size_t total_allocated_pages; - size_t total_freed_pages; size_t force_major_gc_count; size_t force_incremental_marking_finish_count; size_t total_allocated_objects; @@ -461,9 +432,16 @@ typedef struct rb_size_pool_struct { size_t freed_slots; size_t empty_slots; - rb_heap_t eden_heap; - rb_heap_t tomb_heap; -} rb_size_pool_t; + struct heap_page *free_pages; + struct ccan_list_head pages; + struct heap_page *sweeping_page; /* iterator for .pages */ + struct heap_page *compact_cursor; + uintptr_t compact_cursor_index; + struct heap_page *pooled_pages; + size_t total_pages; /* total page count in a heap */ + size_t total_slots; /* total slot count (about total_pages * HEAP_PAGE_OBJ_LIMIT) */ + +} rb_heap_t; enum { gc_stress_no_major, @@ -511,7 +489,9 @@ typedef struct rb_objspace { rb_event_flag_t hook_events; unsigned long long next_object_id; - rb_size_pool_t size_pools[SIZE_POOL_COUNT]; + rb_heap_t heaps[HEAP_COUNT]; + size_t empty_pages_count; + struct heap_page *empty_pages; struct { rb_atomic_t finalizing; @@ -521,13 +501,15 @@ typedef struct rb_objspace { size_t marked_slots; struct { - struct heap_page **sorted; + rb_darray(struct heap_page *) sorted; + size_t allocated_pages; - size_t allocatable_pages; - size_t sorted_length; + size_t freed_pages; uintptr_t range[2]; size_t freeable_pages; + size_t allocatable_slots; + /* final */ VALUE deferred_final; } heap_pages; @@ -576,9 +558,9 @@ typedef struct rb_objspace { /* basic statistics */ size_t count; - uint64_t marking_time_ns; + unsigned long long marking_time_ns; struct timespec marking_start_time; - uint64_t sweeping_time_ns; + unsigned long long sweeping_time_ns; struct timespec sweeping_start_time; /* Weak references */ @@ -743,21 +725,21 @@ struct free_slot { }; struct heap_page { - short slot_size; - short total_slots; - short free_slots; - short final_slots; - short pinned_slots; + unsigned short slot_size; + unsigned short total_slots; + unsigned short free_slots; + unsigned short final_slots; + unsigned short pinned_slots; struct { unsigned int before_sweep : 1; unsigned int has_remembered_objects : 1; unsigned int has_uncollectible_wb_unprotected_objects : 1; - unsigned int in_tomb : 1; } flags; - rb_size_pool_t *size_pool; + rb_heap_t *heap; struct heap_page *free_next; + struct heap_page_body *body; uintptr_t start; struct free_slot *freelist; struct ccan_list_node page_node; @@ -793,6 +775,29 @@ asan_unlock_freelist(struct heap_page *page) asan_unpoison_memory_region(&page->freelist, sizeof(struct free_list *), false); } +static inline bool +heap_page_in_global_empty_pages_pool(rb_objspace_t *objspace, struct heap_page *page) +{ + if (page->total_slots == 0) { + GC_ASSERT(page->start == 0); + GC_ASSERT(page->slot_size == 0); + GC_ASSERT(page->heap == NULL); + GC_ASSERT(page->free_slots == 0); + asan_unpoisoning_memory_region(&page->freelist, sizeof(&page->freelist)) { + GC_ASSERT(page->freelist == NULL); + } + + return true; + } + else { + GC_ASSERT(page->start != 0); + GC_ASSERT(page->slot_size != 0); + GC_ASSERT(page->heap != NULL); + + return false; + } +} + #define GET_PAGE_BODY(x) ((struct heap_page_body *)((bits_t)(x) & ~(HEAP_PAGE_ALIGN_MASK))) #define GET_PAGE_HEADER(x) (&GET_PAGE_BODY(x)->header) #define GET_HEAP_PAGE(x) (GET_PAGE_HEADER(x)->page) @@ -856,14 +861,11 @@ RVALUE_AGE_SET(VALUE obj, int age) #define malloc_limit objspace->malloc_params.limit #define malloc_increase objspace->malloc_params.increase #define malloc_allocated_size objspace->malloc_params.allocated_size -#define heap_pages_sorted objspace->heap_pages.sorted -#define heap_allocated_pages objspace->heap_pages.allocated_pages -#define heap_pages_sorted_length objspace->heap_pages.sorted_length #define heap_pages_lomem objspace->heap_pages.range[0] #define heap_pages_himem objspace->heap_pages.range[1] #define heap_pages_freeable_pages objspace->heap_pages.freeable_pages #define heap_pages_deferred_final objspace->heap_pages.deferred_final -#define size_pools objspace->size_pools +#define heaps objspace->heaps #define during_gc objspace->flags.during_gc #define finalizing objspace->atomic_flags.finalizing #define finalizer_table objspace->finalizer_table @@ -924,8 +926,8 @@ gc_mode_verify(enum gc_mode mode) static inline bool has_sweeping_pages(rb_objspace_t *objspace) { - for (int i = 0; i < SIZE_POOL_COUNT; i++) { - if (SIZE_POOL_EDEN_HEAP(&size_pools[i])->sweeping_page) { + for (int i = 0; i < HEAP_COUNT; i++) { + if ((&heaps[i])->sweeping_page) { return TRUE; } } @@ -936,72 +938,8 @@ static inline size_t heap_eden_total_pages(rb_objspace_t *objspace) { size_t count = 0; - for (int i = 0; i < SIZE_POOL_COUNT; i++) { - count += SIZE_POOL_EDEN_HEAP(&size_pools[i])->total_pages; - } - return count; -} - -static inline size_t -heap_eden_total_slots(rb_objspace_t *objspace) -{ - size_t count = 0; - for (int i = 0; i < SIZE_POOL_COUNT; i++) { - count += SIZE_POOL_EDEN_HEAP(&size_pools[i])->total_slots; - } - return count; -} - -static inline size_t -heap_tomb_total_pages(rb_objspace_t *objspace) -{ - size_t count = 0; - for (int i = 0; i < SIZE_POOL_COUNT; i++) { - count += SIZE_POOL_TOMB_HEAP(&size_pools[i])->total_pages; - } - return count; -} - -static inline size_t -heap_allocatable_pages(rb_objspace_t *objspace) -{ - size_t count = 0; - for (int i = 0; i < SIZE_POOL_COUNT; i++) { - count += size_pools[i].allocatable_pages; - } - return count; -} - -static inline size_t -heap_allocatable_slots(rb_objspace_t *objspace) -{ - size_t count = 0; - for (int i = 0; i < SIZE_POOL_COUNT; i++) { - rb_size_pool_t *size_pool = &size_pools[i]; - int slot_size_multiple = size_pool->slot_size / BASE_SLOT_SIZE; - count += size_pool->allocatable_pages * HEAP_PAGE_OBJ_LIMIT / slot_size_multiple; - } - return count; -} - -static inline size_t -total_allocated_pages(rb_objspace_t *objspace) -{ - size_t count = 0; - for (int i = 0; i < SIZE_POOL_COUNT; i++) { - rb_size_pool_t *size_pool = &size_pools[i]; - count += size_pool->total_allocated_pages; - } - return count; -} - -static inline size_t -total_freed_pages(rb_objspace_t *objspace) -{ - size_t count = 0; - for (int i = 0; i < SIZE_POOL_COUNT; i++) { - rb_size_pool_t *size_pool = &size_pools[i]; - count += size_pool->total_freed_pages; + for (int i = 0; i < HEAP_COUNT; i++) { + count += (&heaps[i])->total_pages; } return count; } @@ -1010,9 +948,9 @@ static inline size_t total_allocated_objects(rb_objspace_t *objspace) { size_t count = 0; - for (int i = 0; i < SIZE_POOL_COUNT; i++) { - rb_size_pool_t *size_pool = &size_pools[i]; - count += size_pool->total_allocated_objects; + for (int i = 0; i < HEAP_COUNT; i++) { + rb_heap_t *heap = &heaps[i]; + count += heap->total_allocated_objects; } return count; } @@ -1021,9 +959,9 @@ static inline size_t total_freed_objects(rb_objspace_t *objspace) { size_t count = 0; - for (int i = 0; i < SIZE_POOL_COUNT; i++) { - rb_size_pool_t *size_pool = &size_pools[i]; - count += size_pool->total_freed_objects; + for (int i = 0; i < HEAP_COUNT; i++) { + rb_heap_t *heap = &heaps[i]; + count += heap->total_freed_objects; } return count; } @@ -1032,9 +970,9 @@ static inline size_t total_final_slots_count(rb_objspace_t *objspace) { size_t count = 0; - for (int i = 0; i < SIZE_POOL_COUNT; i++) { - rb_size_pool_t *size_pool = &size_pools[i]; - count += size_pool->final_slots_count; + for (int i = 0; i < HEAP_COUNT; i++) { + rb_heap_t *heap = &heaps[i]; + count += heap->final_slots_count; } return count; } @@ -1118,11 +1056,11 @@ static void gc_marking_enter(rb_objspace_t *objspace); static void gc_marking_exit(rb_objspace_t *objspace); static void gc_sweeping_enter(rb_objspace_t *objspace); static void gc_sweeping_exit(rb_objspace_t *objspace); -static bool gc_marks_continue(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_t *heap); +static bool gc_marks_continue(rb_objspace_t *objspace, rb_heap_t *heap); static void gc_sweep(rb_objspace_t *objspace); -static void gc_sweep_finish_size_pool(rb_objspace_t *objspace, rb_size_pool_t *size_pool); -static void gc_sweep_continue(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_t *heap); +static void gc_sweep_finish_heap(rb_objspace_t *objspace, rb_heap_t *heap); +static void gc_sweep_continue(rb_objspace_t *objspace, rb_heap_t *heap); static inline void gc_mark(rb_objspace_t *objspace, VALUE ptr); static inline void gc_pin(rb_objspace_t *objspace, VALUE ptr); @@ -1259,19 +1197,6 @@ tick(void) #define MEASURE_LINE(expr) expr #endif /* USE_TICK_T */ -#define asan_unpoisoning_object(obj) \ - for (void *poisoned = asan_unpoison_object_temporary(obj), \ - *unpoisoning = &poisoned; /* flag to loop just once */ \ - unpoisoning; \ - unpoisoning = asan_poison_object_restore(obj, poisoned)) - -#define FL_CHECK2(name, x, pred) \ - ((RGENGC_CHECK_MODE && SPECIAL_CONST_P(x)) ? \ - (rb_bug(name": SPECIAL_CONST (%p)", (void *)(x)), 0) : (pred)) -#define FL_TEST2(x,f) FL_CHECK2("FL_TEST2", x, FL_TEST_RAW((x),(f)) != 0) -#define FL_SET2(x,f) FL_CHECK2("FL_SET2", x, RBASIC(x)->flags |= (f)) -#define FL_UNSET2(x,f) FL_CHECK2("FL_UNSET2", x, RBASIC(x)->flags &= ~(f)) - static inline VALUE check_rvalue_consistency(rb_objspace_t *objspace, const VALUE obj); #define RVALUE_MARKED_BITMAP(obj) MARKED_IN_BITMAP(GET_HEAP_MARK_BITS(obj), (obj)) @@ -1352,18 +1277,15 @@ check_rvalue_consistency_force(rb_objspace_t *objspace, const VALUE obj, int ter err++; } else if (!is_pointer_to_heap(objspace, (void *)obj)) { - /* check if it is in tomb_pages */ - struct heap_page *page = NULL; - for (int i = 0; i < SIZE_POOL_COUNT; i++) { - rb_size_pool_t *size_pool = &size_pools[i]; - ccan_list_for_each(&size_pool->tomb_heap.pages, page, page_node) { - if (page->start <= (uintptr_t)obj && - (uintptr_t)obj < (page->start + (page->total_slots * size_pool->slot_size))) { - fprintf(stderr, "check_rvalue_consistency: %p is in a tomb_heap (%p).\n", - (void *)obj, (void *)page); - err++; - goto skip; - } + struct heap_page *empty_page = objspace->empty_pages; + while (empty_page) { + if ((uintptr_t)empty_page->body <= (uintptr_t)obj && + (uintptr_t)obj < (uintptr_t)empty_page->body + HEAP_PAGE_SIZE) { + GC_ASSERT(heap_page_in_global_empty_pages_pool(objspace, empty_page)); + fprintf(stderr, "check_rvalue_consistency: %p is in an empty page (%p).\n", + (void *)obj, (void *)empty_page); + err++; + goto skip; } } fprintf(stderr, "check_rvalue_consistency: %p is not a Ruby object.\n", (void *)obj); @@ -1379,7 +1301,7 @@ check_rvalue_consistency_force(rb_objspace_t *objspace, const VALUE obj, int ter const int remembered_bit = MARKED_IN_BITMAP(GET_HEAP_PAGE(obj)->remembered_bits, obj) != 0; const int age = RVALUE_AGE_GET((VALUE)obj); - if (GET_HEAP_PAGE(obj)->flags.in_tomb) { + if (heap_page_in_global_empty_pages_pool(objspace, GET_HEAP_PAGE(obj))) { fprintf(stderr, "check_rvalue_consistency: %s is in tomb page.\n", rb_obj_info(obj)); err++; } @@ -1474,13 +1396,9 @@ gc_object_moved_p(rb_objspace_t *objspace, VALUE obj) return FALSE; } else { - void *poisoned = asan_unpoison_object_temporary(obj); - - int ret = BUILTIN_TYPE(obj) == T_MOVED; - /* Re-poison slot if it's not the one we want */ - if (poisoned) { - GC_ASSERT(BUILTIN_TYPE(obj) == T_NONE); - asan_poison_object(obj); + int ret; + asan_unpoisoning_object(obj) { + ret = BUILTIN_TYPE(obj) == T_MOVED; } return ret; } @@ -1627,60 +1545,38 @@ rb_gc_impl_set_event_hook(void *objspace_ptr, const rb_event_flag_t event) objspace->flags.has_newobj_hook = !!(objspace->hook_events & RUBY_INTERNAL_EVENT_NEWOBJ); } -VALUE -rb_gc_impl_get_profile_total_time(void *objspace_ptr) +unsigned long long +rb_gc_impl_get_total_time(void *objspace_ptr) { rb_objspace_t *objspace = objspace_ptr; - uint64_t marking_time = objspace->profile.marking_time_ns; - uint64_t sweeping_time = objspace->profile.sweeping_time_ns; + unsigned long long marking_time = objspace->profile.marking_time_ns; + unsigned long long sweeping_time = objspace->profile.sweeping_time_ns; - return ULL2NUM(marking_time + sweeping_time); + return marking_time + sweeping_time; } -VALUE +void rb_gc_impl_set_measure_total_time(void *objspace_ptr, VALUE flag) { rb_objspace_t *objspace = objspace_ptr; objspace->flags.measure_gc = RTEST(flag) ? TRUE : FALSE; - - return flag; } -VALUE +bool rb_gc_impl_get_measure_total_time(void *objspace_ptr) { rb_objspace_t *objspace = objspace_ptr; - return objspace->flags.measure_gc ? Qtrue : Qfalse; -} - -static size_t -slots_to_pages_for_size_pool(rb_objspace_t *objspace, rb_size_pool_t *size_pool, size_t slots) -{ - size_t multiple = size_pool->slot_size / BASE_SLOT_SIZE; - /* Due to alignment, heap pages may have one less slot. We should - * ensure there is enough pages to guarantee that we will have at - * least the required number of slots after allocating all the pages. */ - size_t slots_per_page = (HEAP_PAGE_OBJ_LIMIT / multiple) - 1; - return CEILDIV(slots, slots_per_page); + return objspace->flags.measure_gc; } static size_t -minimum_pages_for_size_pool(rb_objspace_t *objspace, rb_size_pool_t *size_pool) -{ - size_t size_pool_idx = size_pool - size_pools; - size_t init_slots = gc_params.size_pool_init_slots[size_pool_idx]; - return slots_to_pages_for_size_pool(objspace, size_pool, init_slots); -} - -static VALUE initial_stress = Qfalse; - -void -rb_gc_impl_initial_stress_set(VALUE flag) +minimum_slots_for_heap(rb_objspace_t *objspace, rb_heap_t *heap) { - initial_stress = flag; + size_t heap_idx = heap - heaps; + return gc_params.heap_init_slots[heap_idx]; } static int @@ -1714,15 +1610,21 @@ rb_gc_impl_garbage_object_p(void *objspace_ptr, VALUE ptr) { rb_objspace_t *objspace = objspace_ptr; - switch (BUILTIN_TYPE(ptr)) { - case T_NONE: - case T_MOVED: - case T_ZOMBIE: - return true; - default: - break; + bool dead = false; + + asan_unpoisoning_object(ptr) { + switch (BUILTIN_TYPE(ptr)) { + case T_NONE: + case T_MOVED: + case T_ZOMBIE: + dead = true; + break; + default: + break; + } } + if (dead) return true; return is_lazy_sweeping(objspace) && GET_HEAP_PAGE(ptr)->flags.before_sweep && !RVALUE_MARKED(objspace, ptr); } @@ -1781,60 +1683,6 @@ static void free_stack_chunks(mark_stack_t *); static void mark_stack_free_cache(mark_stack_t *); static void heap_page_free(rb_objspace_t *objspace, struct heap_page *page); -static void -heap_pages_expand_sorted_to(rb_objspace_t *objspace, size_t next_length) -{ - struct heap_page **sorted; - size_t size = rb_size_mul_or_raise(next_length, sizeof(struct heap_page *), rb_eRuntimeError); - - gc_report(3, objspace, "heap_pages_expand_sorted: next_length: %"PRIdSIZE", size: %"PRIdSIZE"\n", - next_length, size); - - if (heap_pages_sorted_length > 0) { - sorted = (struct heap_page **)realloc(heap_pages_sorted, size); - if (sorted) heap_pages_sorted = sorted; - } - else { - sorted = heap_pages_sorted = (struct heap_page **)malloc(size); - } - - if (sorted == 0) { - rb_memerror(); - } - - heap_pages_sorted_length = next_length; -} - -static void -heap_pages_expand_sorted(rb_objspace_t *objspace) -{ - /* usually heap_allocatable_pages + heap_eden->total_pages == heap_pages_sorted_length - * because heap_allocatable_pages contains heap_tomb->total_pages (recycle heap_tomb pages). - * however, if there are pages which do not have empty slots, then try to create new pages - * so that the additional allocatable_pages counts (heap_tomb->total_pages) are added. - */ - size_t next_length = heap_allocatable_pages(objspace); - for (int i = 0; i < SIZE_POOL_COUNT; i++) { - rb_size_pool_t *size_pool = &size_pools[i]; - next_length += SIZE_POOL_EDEN_HEAP(size_pool)->total_pages; - next_length += SIZE_POOL_TOMB_HEAP(size_pool)->total_pages; - } - - if (next_length > heap_pages_sorted_length) { - heap_pages_expand_sorted_to(objspace, next_length); - } - - GC_ASSERT(heap_allocatable_pages(objspace) + heap_eden_total_pages(objspace) <= heap_pages_sorted_length); - GC_ASSERT(heap_allocated_pages <= heap_pages_sorted_length); -} - -static void -size_pool_allocatable_pages_set(rb_objspace_t *objspace, rb_size_pool_t *size_pool, size_t s) -{ - size_pool->allocatable_pages = s; - heap_pages_expand_sorted(objspace); -} - static inline void heap_page_add_freeobj(rb_objspace_t *objspace, struct heap_page *page, VALUE obj) { @@ -1862,20 +1710,50 @@ heap_page_add_freeobj(rb_objspace_t *objspace, struct heap_page *page, VALUE obj gc_report(3, objspace, "heap_page_add_freeobj: add %p to freelist\n", (void *)obj); } -static size_t -heap_extend_pages(rb_objspace_t *objspace, rb_size_pool_t *size_pool, - size_t free_slots, size_t total_slots, size_t used); - - static void -size_pool_allocatable_pages_expand(rb_objspace_t *objspace, - rb_size_pool_t *size_pool, size_t swept_slots, size_t total_slots, size_t total_pages) +static void +heap_allocatable_slots_expand(rb_objspace_t *objspace, + rb_heap_t *heap, size_t free_slots, size_t total_slots) { - size_t extend_page_count = heap_extend_pages(objspace, size_pool, swept_slots, - total_slots, total_pages); + double goal_ratio = gc_params.heap_free_slots_goal_ratio; + size_t target_total_slots; - if (extend_page_count > size_pool->allocatable_pages) { - size_pool_allocatable_pages_set(objspace, size_pool, extend_page_count); + if (goal_ratio == 0.0) { + target_total_slots = (size_t)(total_slots * gc_params.growth_factor); } + else if (total_slots == 0) { + target_total_slots = minimum_slots_for_heap(objspace, heap); + } + else { + /* Find `f' where free_slots = f * total_slots * goal_ratio + * => f = (total_slots - free_slots) / ((1 - goal_ratio) * total_slots) + */ + double f = (double)(total_slots - free_slots) / ((1 - goal_ratio) * total_slots); + + if (f > gc_params.growth_factor) f = gc_params.growth_factor; + if (f < 1.0) f = 1.1; + + target_total_slots = (size_t)(f * total_slots); + + if (0) { + fprintf(stderr, + "free_slots(%8"PRIuSIZE")/total_slots(%8"PRIuSIZE")=%1.2f," + " G(%1.2f), f(%1.2f)," + " total_slots(%8"PRIuSIZE") => target_total_slots(%8"PRIuSIZE")\n", + free_slots, total_slots, free_slots/(double)total_slots, + goal_ratio, f, total_slots, target_total_slots); + } + } + + if (gc_params.growth_max_slots > 0) { + size_t max_total_slots = (size_t)(total_slots + gc_params.growth_max_slots); + if (target_total_slots > max_total_slots) target_total_slots = max_total_slots; + } + + size_t extend_slot_count = target_total_slots - total_slots; + /* Extend by at least 1 page. */ + if (extend_slot_count == 0) extend_slot_count = 1; + + objspace->heap_pages.allocatable_slots += extend_slot_count; } static inline void @@ -1950,52 +1828,59 @@ heap_page_body_free(struct heap_page_body *page_body) static void heap_page_free(rb_objspace_t *objspace, struct heap_page *page) { - heap_allocated_pages--; - page->size_pool->total_freed_pages++; - heap_page_body_free(GET_PAGE_BODY(page->start)); + objspace->heap_pages.freed_pages++; + heap_page_body_free(page->body); free(page); } static void heap_pages_free_unused_pages(rb_objspace_t *objspace) { - size_t i, j; + size_t pages_to_keep_count = + // Get number of pages estimated for the smallest size pool + CEILDIV(objspace->heap_pages.allocatable_slots, HEAP_PAGE_OBJ_LIMIT) * + // Estimate the average slot size multiple + (1 << (HEAP_COUNT / 2)); - bool has_pages_in_tomb_heap = FALSE; - for (i = 0; i < SIZE_POOL_COUNT; i++) { - if (!ccan_list_empty(&SIZE_POOL_TOMB_HEAP(&size_pools[i])->pages)) { - has_pages_in_tomb_heap = TRUE; - break; - } - } + if (objspace->empty_pages != NULL && objspace->empty_pages_count > pages_to_keep_count) { + GC_ASSERT(objspace->empty_pages_count > 0); + objspace->empty_pages = NULL; + objspace->empty_pages_count = 0; - if (has_pages_in_tomb_heap) { - for (i = j = 0; j < heap_allocated_pages; i++) { - struct heap_page *page = heap_pages_sorted[i]; + size_t i, j; + for (i = j = 0; i < rb_darray_size(objspace->heap_pages.sorted); i++) { + struct heap_page *page = rb_darray_get(objspace->heap_pages.sorted, i); - if (page->flags.in_tomb && page->free_slots == page->total_slots) { - heap_unlink_page(objspace, SIZE_POOL_TOMB_HEAP(page->size_pool), page); + if (heap_page_in_global_empty_pages_pool(objspace, page) && pages_to_keep_count == 0) { heap_page_free(objspace, page); } else { + if (heap_page_in_global_empty_pages_pool(objspace, page) && pages_to_keep_count > 0) { + page->free_next = objspace->empty_pages; + objspace->empty_pages = page; + objspace->empty_pages_count++; + pages_to_keep_count--; + } + if (i != j) { - heap_pages_sorted[j] = page; + rb_darray_set(objspace->heap_pages.sorted, j, page); } j++; } } - struct heap_page *hipage = heap_pages_sorted[heap_allocated_pages - 1]; - uintptr_t himem = (uintptr_t)hipage->start + (hipage->total_slots * hipage->slot_size); + rb_darray_pop(objspace->heap_pages.sorted, i - j); + GC_ASSERT(rb_darray_size(objspace->heap_pages.sorted) == j); + + struct heap_page *hipage = rb_darray_get(objspace->heap_pages.sorted, rb_darray_size(objspace->heap_pages.sorted) - 1); + uintptr_t himem = (uintptr_t)hipage->body + HEAP_PAGE_SIZE; GC_ASSERT(himem <= heap_pages_himem); heap_pages_himem = himem; - struct heap_page *lopage = heap_pages_sorted[0]; - uintptr_t lomem = (uintptr_t)lopage->start; + struct heap_page *lopage = rb_darray_get(objspace->heap_pages.sorted, 0); + uintptr_t lomem = (uintptr_t)lopage->body + sizeof(struct heap_page_header); GC_ASSERT(lomem >= heap_pages_lomem); heap_pages_lomem = lomem; - - GC_ASSERT(j == heap_allocated_pages); } } @@ -2082,57 +1967,43 @@ heap_page_body_allocate(void) } static struct heap_page * -heap_page_allocate(rb_objspace_t *objspace, rb_size_pool_t *size_pool) +heap_page_resurrect(rb_objspace_t *objspace) { - uintptr_t start, end, p; - struct heap_page *page; - uintptr_t hi, lo, mid; - size_t stride = size_pool->slot_size; - unsigned int limit = (unsigned int)((HEAP_PAGE_SIZE - sizeof(struct heap_page_header)))/(int)stride; + struct heap_page *page = NULL; + if (objspace->empty_pages != NULL) { + GC_ASSERT(objspace->empty_pages_count > 0); + objspace->empty_pages_count--; + page = objspace->empty_pages; + objspace->empty_pages = page->free_next; + } + + return page; +} - /* assign heap_page body (contains heap_page_header and RVALUEs) */ +static struct heap_page * +heap_page_allocate(rb_objspace_t *objspace) +{ struct heap_page_body *page_body = heap_page_body_allocate(); if (page_body == 0) { rb_memerror(); } - /* assign heap_page entry */ - page = calloc1(sizeof(struct heap_page)); + struct heap_page *page = calloc1(sizeof(struct heap_page)); if (page == 0) { heap_page_body_free(page_body); rb_memerror(); } - /* adjust obj_limit (object number available in this page) */ - start = (uintptr_t)((VALUE)page_body + sizeof(struct heap_page_header)); - - if (start % BASE_SLOT_SIZE != 0) { - int delta = BASE_SLOT_SIZE - (start % BASE_SLOT_SIZE); - start = start + delta; - GC_ASSERT(NUM_IN_PAGE(start) == 0 || NUM_IN_PAGE(start) == 1); - - /* Find a num in page that is evenly divisible by `stride`. - * This is to ensure that objects are aligned with bit planes. - * In other words, ensure there are an even number of objects - * per bit plane. */ - if (NUM_IN_PAGE(start) == 1) { - start += stride - BASE_SLOT_SIZE; - } - - GC_ASSERT(NUM_IN_PAGE(start) * BASE_SLOT_SIZE % stride == 0); - - limit = (HEAP_PAGE_SIZE - (int)(start - (uintptr_t)page_body))/(int)stride; - } - end = start + (limit * (int)stride); + uintptr_t start = (uintptr_t)page_body + sizeof(struct heap_page_header); + uintptr_t end = (uintptr_t)page_body + HEAP_PAGE_SIZE; - /* setup heap_pages_sorted */ - lo = 0; - hi = (uintptr_t)heap_allocated_pages; + size_t lo = 0; + size_t hi = rb_darray_size(objspace->heap_pages.sorted); while (lo < hi) { struct heap_page *mid_page; - mid = (lo + hi) / 2; - mid_page = heap_pages_sorted[mid]; + size_t mid = (lo + hi) / 2; + mid_page = rb_darray_get(objspace->heap_pages.sorted, mid); if ((uintptr_t)mid_page->start < start) { lo = mid + 1; } @@ -2144,189 +2015,116 @@ heap_page_allocate(rb_objspace_t *objspace, rb_size_pool_t *size_pool) } } - if (hi < (uintptr_t)heap_allocated_pages) { - MEMMOVE(&heap_pages_sorted[hi+1], &heap_pages_sorted[hi], struct heap_page_header*, heap_allocated_pages - hi); - } - - heap_pages_sorted[hi] = page; - - heap_allocated_pages++; - - GC_ASSERT(heap_eden_total_pages(objspace) + heap_allocatable_pages(objspace) <= heap_pages_sorted_length); - GC_ASSERT(heap_eden_total_pages(objspace) + heap_tomb_total_pages(objspace) == heap_allocated_pages - 1); - GC_ASSERT(heap_allocated_pages <= heap_pages_sorted_length); - - size_pool->total_allocated_pages++; - - if (heap_allocated_pages > heap_pages_sorted_length) { - rb_bug("heap_page_allocate: allocated(%"PRIdSIZE") > sorted(%"PRIdSIZE")", - heap_allocated_pages, heap_pages_sorted_length); - } + rb_darray_insert(&objspace->heap_pages.sorted, hi, page); if (heap_pages_lomem == 0 || heap_pages_lomem > start) heap_pages_lomem = start; if (heap_pages_himem < end) heap_pages_himem = end; - page->start = start; - page->total_slots = limit; - page->slot_size = size_pool->slot_size; - page->size_pool = size_pool; + page->body = page_body; page_body->header.page = page; - for (p = start; p != end; p += stride) { - gc_report(3, objspace, "assign_heap_page: %p is added to freelist\n", (void *)p); - heap_page_add_freeobj(objspace, page, (VALUE)p); - } - page->free_slots = limit; + objspace->heap_pages.allocated_pages++; - asan_lock_freelist(page); return page; } -static struct heap_page * -heap_page_resurrect(rb_objspace_t *objspace, rb_size_pool_t *size_pool) +static void +heap_add_page(rb_objspace_t *objspace, rb_heap_t *heap, struct heap_page *page) { - struct heap_page *page = 0, *next; + /* Adding to eden heap during incremental sweeping is forbidden */ + GC_ASSERT(!heap->sweeping_page); + GC_ASSERT(heap_page_in_global_empty_pages_pool(objspace, page)); - ccan_list_for_each_safe(&SIZE_POOL_TOMB_HEAP(size_pool)->pages, page, next, page_node) { - asan_unlock_freelist(page); - if (page->freelist != NULL) { - heap_unlink_page(objspace, &size_pool->tomb_heap, page); - asan_lock_freelist(page); - return page; + /* adjust obj_limit (object number available in this page) */ + uintptr_t start = (uintptr_t)page->body + sizeof(struct heap_page_header); + if (start % BASE_SLOT_SIZE != 0) { + int delta = BASE_SLOT_SIZE - (start % BASE_SLOT_SIZE); + start = start + delta; + GC_ASSERT(NUM_IN_PAGE(start) == 0 || NUM_IN_PAGE(start) == 1); + + /* Find a num in page that is evenly divisible by `stride`. + * This is to ensure that objects are aligned with bit planes. + * In other words, ensure there are an even number of objects + * per bit plane. */ + if (NUM_IN_PAGE(start) == 1) { + start += heap->slot_size - BASE_SLOT_SIZE; } + + GC_ASSERT(NUM_IN_PAGE(start) * BASE_SLOT_SIZE % heap->slot_size == 0); } - return NULL; -} + int slot_count = (int)((HEAP_PAGE_SIZE - (start - (uintptr_t)page->body))/heap->slot_size); -static struct heap_page * -heap_page_create(rb_objspace_t *objspace, rb_size_pool_t *size_pool) -{ - struct heap_page *page; - const char *method = "recycle"; + page->start = start; + page->total_slots = slot_count; + page->slot_size = heap->slot_size; + page->heap = heap; - size_pool->allocatable_pages--; + asan_unlock_freelist(page); + page->freelist = NULL; + asan_unpoison_memory_region(page->body, HEAP_PAGE_SIZE, false); + for (VALUE p = (VALUE)start; p < start + (slot_count * heap->slot_size); p += heap->slot_size) { + heap_page_add_freeobj(objspace, page, p); + } + asan_lock_freelist(page); - page = heap_page_resurrect(objspace, size_pool); + page->free_slots = slot_count; - if (page == NULL) { - page = heap_page_allocate(objspace, size_pool); - method = "allocate"; - } - if (0) fprintf(stderr, "heap_page_create: %s - %p, " - "heap_allocated_pages: %"PRIdSIZE", " - "heap_allocated_pages: %"PRIdSIZE", " - "tomb->total_pages: %"PRIdSIZE"\n", - method, (void *)page, heap_pages_sorted_length, heap_allocated_pages, SIZE_POOL_TOMB_HEAP(size_pool)->total_pages); - return page; -} + heap->total_allocated_pages++; -static void -heap_add_page(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_t *heap, struct heap_page *page) -{ - /* Adding to eden heap during incremental sweeping is forbidden */ - GC_ASSERT(!(heap == SIZE_POOL_EDEN_HEAP(size_pool) && heap->sweeping_page)); - page->flags.in_tomb = (heap == SIZE_POOL_TOMB_HEAP(size_pool)); ccan_list_add_tail(&heap->pages, &page->page_node); heap->total_pages++; heap->total_slots += page->total_slots; } -static void -heap_assign_page(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_t *heap) -{ - struct heap_page *page = heap_page_create(objspace, size_pool); - heap_add_page(objspace, size_pool, heap, page); - heap_add_freepage(heap, page); -} - -#if GC_CAN_COMPILE_COMPACTION -static void -heap_add_pages(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_t *heap, size_t add) -{ - size_t i; - - size_pool_allocatable_pages_set(objspace, size_pool, add); - - for (i = 0; i < add; i++) { - heap_assign_page(objspace, size_pool, heap); - } - - GC_ASSERT(size_pool->allocatable_pages == 0); -} -#endif - -static size_t -heap_extend_pages(rb_objspace_t *objspace, rb_size_pool_t *size_pool, size_t free_slots, size_t total_slots, size_t used) +static int +heap_page_allocate_and_initialize(rb_objspace_t *objspace, rb_heap_t *heap) { - double goal_ratio = gc_params.heap_free_slots_goal_ratio; - size_t next_used; - - if (goal_ratio == 0.0) { - next_used = (size_t)(used * gc_params.growth_factor); - } - else if (total_slots == 0) { - next_used = minimum_pages_for_size_pool(objspace, size_pool); - } - else { - /* Find `f' where free_slots = f * total_slots * goal_ratio - * => f = (total_slots - free_slots) / ((1 - goal_ratio) * total_slots) - */ - double f = (double)(total_slots - free_slots) / ((1 - goal_ratio) * total_slots); - - if (f > gc_params.growth_factor) f = gc_params.growth_factor; - if (f < 1.0) f = 1.1; + if (objspace->heap_pages.allocatable_slots > 0) { + gc_report(1, objspace, "heap_page_allocate_and_initialize: rb_darray_size(objspace->heap_pages.sorted): %"PRIdSIZE", " + "allocatable_slots: %"PRIdSIZE", heap->total_pages: %"PRIdSIZE"\n", + rb_darray_size(objspace->heap_pages.sorted), objspace->heap_pages.allocatable_slots, heap->total_pages); - next_used = (size_t)(f * used); + struct heap_page *page = heap_page_resurrect(objspace); + if (page == NULL) { + page = heap_page_allocate(objspace); + } + heap_add_page(objspace, heap, page); + heap_add_freepage(heap, page); - if (0) { - fprintf(stderr, - "free_slots(%8"PRIuSIZE")/total_slots(%8"PRIuSIZE")=%1.2f," - " G(%1.2f), f(%1.2f)," - " used(%8"PRIuSIZE") => next_used(%8"PRIuSIZE")\n", - free_slots, total_slots, free_slots/(double)total_slots, - goal_ratio, f, used, next_used); + if (objspace->heap_pages.allocatable_slots > (size_t)page->total_slots) { + objspace->heap_pages.allocatable_slots -= page->total_slots; + } + else { + objspace->heap_pages.allocatable_slots = 0; } - } - if (gc_params.growth_max_slots > 0) { - size_t max_used = (size_t)(used + gc_params.growth_max_slots/HEAP_PAGE_OBJ_LIMIT); - if (next_used > max_used) next_used = max_used; + return true; } - size_t extend_page_count = next_used - used; - /* Extend by at least 1 page. */ - if (extend_page_count == 0) extend_page_count = 1; - - return extend_page_count; + return false; } -static int -heap_increment(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_t *heap) -{ - if (size_pool->allocatable_pages > 0) { - gc_report(1, objspace, "heap_increment: heap_pages_sorted_length: %"PRIdSIZE", " - "heap_pages_inc: %"PRIdSIZE", heap->total_pages: %"PRIdSIZE"\n", - heap_pages_sorted_length, size_pool->allocatable_pages, heap->total_pages); - - GC_ASSERT(heap_allocatable_pages(objspace) + heap_eden_total_pages(objspace) <= heap_pages_sorted_length); - GC_ASSERT(heap_allocated_pages <= heap_pages_sorted_length); - - heap_assign_page(objspace, size_pool, heap); - return TRUE; - } - return FALSE; +static void +heap_page_allocate_and_initialize_force(rb_objspace_t *objspace, rb_heap_t *heap) +{ + size_t prev_allocatable_slots = objspace->heap_pages.allocatable_slots; + // Set allocatable slots to 1 to force a page to be created. + objspace->heap_pages.allocatable_slots = 1; + heap_page_allocate_and_initialize(objspace, heap); + GC_ASSERT(heap->free_pages != NULL); + objspace->heap_pages.allocatable_slots = prev_allocatable_slots; } static void -gc_continue(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_t *heap) +gc_continue(rb_objspace_t *objspace, rb_heap_t *heap) { unsigned int lock_lev; gc_enter(objspace, gc_enter_event_continue, &lock_lev); /* Continue marking if in incremental marking. */ if (is_incremental_marking(objspace)) { - if (gc_marks_continue(objspace, size_pool, heap)) { + if (gc_marks_continue(objspace, heap)) { gc_sweep(objspace); } } @@ -2334,14 +2132,14 @@ gc_continue(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_t *heap) /* Continue sweeping if in lazy sweeping or the previous incremental * marking finished and did not yield a free page. */ if (heap->free_pages == NULL && is_lazy_sweeping(objspace)) { - gc_sweep_continue(objspace, size_pool, heap); + gc_sweep_continue(objspace, heap); } gc_exit(objspace, gc_enter_event_continue, &lock_lev); } static void -heap_prepare(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_t *heap) +heap_prepare(rb_objspace_t *objspace, rb_heap_t *heap) { GC_ASSERT(heap->free_pages == NULL); @@ -2356,8 +2154,19 @@ heap_prepare(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_t *heap } #endif + if (heap->total_slots < gc_params.heap_init_slots[heap - heaps] && + heap->sweeping_page == NULL) { + heap_page_allocate_and_initialize_force(objspace, heap); + GC_ASSERT(heap->free_pages != NULL); + return; + } + /* Continue incremental marking or lazy sweeping, if in any of those steps. */ - gc_continue(objspace, size_pool, heap); + gc_continue(objspace, heap); + + if (heap->free_pages == NULL) { + heap_page_allocate_and_initialize(objspace, heap); + } #if USE_MMTK if (!rb_mmtk_enabled_p()) { @@ -2367,27 +2176,24 @@ heap_prepare(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_t *heap /* If we still don't have a free page and not allowed to create a new page, * we should start a new GC cycle. */ - if (heap->free_pages == NULL && - (will_be_incremental_marking(objspace) || - (heap_increment(objspace, size_pool, heap) == FALSE))) { + if (heap->free_pages == NULL) { if (gc_start(objspace, GPR_FLAG_NEWOBJ) == FALSE) { rb_memerror(); } else { - if (size_pool->allocatable_pages == 0 && !gc_config_full_mark_val) { - size_pool_allocatable_pages_expand(objspace, size_pool, - size_pool->freed_slots + size_pool->empty_slots, - heap->total_slots + SIZE_POOL_TOMB_HEAP(size_pool)->total_slots, - heap->total_pages + SIZE_POOL_TOMB_HEAP(size_pool)->total_pages); - GC_ASSERT(size_pool->allocatable_pages > 0); + if (objspace->heap_pages.allocatable_slots == 0 && !gc_config_full_mark_val) { + heap_allocatable_slots_expand(objspace, heap, + heap->freed_slots + heap->empty_slots, + heap->total_slots); + GC_ASSERT(objspace->heap_pages.allocatable_slots > 0); } /* Do steps of incremental marking or lazy sweeping if the GC run permits. */ - gc_continue(objspace, size_pool, heap); + gc_continue(objspace, heap); /* If we're not incremental marking (e.g. a minor GC) or finished * sweeping and still don't have a free page, then - * gc_sweep_finish_size_pool should allow us to create a new page. */ - if (heap->free_pages == NULL && !heap_increment(objspace, size_pool, heap)) { + * gc_sweep_finish_heap should allow us to create a new page. */ + if (heap->free_pages == NULL && !heap_page_allocate_and_initialize(objspace, heap)) { if (gc_needs_major_flags == GPR_FLAG_NONE) { rb_bug("cannot create a new page after GC"); } @@ -2397,10 +2203,10 @@ heap_prepare(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_t *heap } else { /* Do steps of incremental marking or lazy sweeping. */ - gc_continue(objspace, size_pool, heap); + gc_continue(objspace, heap); if (heap->free_pages == NULL && - !heap_increment(objspace, size_pool, heap)) { + !heap_page_allocate_and_initialize(objspace, heap)) { rb_bug("cannot create a new page after major GC"); } } @@ -2541,15 +2347,15 @@ rb_gc_impl_obj_slot_size(VALUE obj) } static inline size_t -size_pool_slot_size(unsigned char pool_id) +heap_slot_size(unsigned char pool_id) { - GC_ASSERT(pool_id < SIZE_POOL_COUNT); + GC_ASSERT(pool_id < HEAP_COUNT); size_t slot_size = (1 << pool_id) * BASE_SLOT_SIZE; #if RGENGC_CHECK_MODE rb_objspace_t *objspace = rb_gc_get_objspace(); - GC_ASSERT(size_pools[pool_id].slot_size == (short)slot_size); + GC_ASSERT(heaps[pool_id].slot_size == (short)slot_size); #endif slot_size -= RVALUE_OVERHEAD; @@ -2560,15 +2366,15 @@ size_pool_slot_size(unsigned char pool_id) bool rb_gc_impl_size_allocatable_p(size_t size) { - return size <= size_pool_slot_size(SIZE_POOL_COUNT - 1); + return size <= heap_slot_size(HEAP_COUNT - 1); } static inline VALUE ractor_cache_allocate_slot(rb_objspace_t *objspace, rb_ractor_newobj_cache_t *cache, - size_t size_pool_idx) + size_t heap_idx) { - rb_ractor_newobj_size_pool_cache_t *size_pool_cache = &cache->size_pool_caches[size_pool_idx]; - struct free_slot *p = size_pool_cache->freelist; + rb_ractor_newobj_heap_cache_t *heap_cache = &cache->heap_caches[heap_idx]; + struct free_slot *p = heap_cache->freelist; if (RB_UNLIKELY(is_incremental_marking(objspace))) { // Not allowed to allocate without running an incremental marking step @@ -2583,8 +2389,8 @@ ractor_cache_allocate_slot(rb_objspace_t *objspace, rb_ractor_newobj_cache_t *ca if (RB_LIKELY(p)) { VALUE obj = (VALUE)p; - MAYBE_UNUSED(const size_t) stride = size_pool_slot_size(size_pool_idx); - size_pool_cache->freelist = p->next; + MAYBE_UNUSED(const size_t) stride = heap_slot_size(heap_idx); + heap_cache->freelist = p->next; asan_unpoison_memory_region(p, stride, true); #if RGENGC_CHECK_MODE GC_ASSERT(rb_gc_impl_obj_slot_size(obj) == stride); @@ -2599,12 +2405,12 @@ ractor_cache_allocate_slot(rb_objspace_t *objspace, rb_ractor_newobj_cache_t *ca } static struct heap_page * -heap_next_free_page(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_t *heap) +heap_next_free_page(rb_objspace_t *objspace, rb_heap_t *heap) { struct heap_page *page; if (heap->free_pages == NULL) { - heap_prepare(objspace, size_pool, heap); + heap_prepare(objspace, heap); } page = heap->free_pages; @@ -2618,79 +2424,78 @@ heap_next_free_page(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_ } static inline void -ractor_cache_set_page(rb_objspace_t *objspace, rb_ractor_newobj_cache_t *cache, size_t size_pool_idx, +ractor_cache_set_page(rb_objspace_t *objspace, rb_ractor_newobj_cache_t *cache, size_t heap_idx, struct heap_page *page) { - gc_report(3, objspace, "ractor_set_cache: Using page %p\n", (void *)GET_PAGE_BODY(page->start)); + gc_report(3, objspace, "ractor_set_cache: Using page %p\n", (void *)page->body); - rb_ractor_newobj_size_pool_cache_t *size_pool_cache = &cache->size_pool_caches[size_pool_idx]; + rb_ractor_newobj_heap_cache_t *heap_cache = &cache->heap_caches[heap_idx]; - GC_ASSERT(size_pool_cache->freelist == NULL); + GC_ASSERT(heap_cache->freelist == NULL); GC_ASSERT(page->free_slots != 0); GC_ASSERT(page->freelist != NULL); - size_pool_cache->using_page = page; - size_pool_cache->freelist = page->freelist; + heap_cache->using_page = page; + heap_cache->freelist = page->freelist; page->free_slots = 0; page->freelist = NULL; - asan_unpoison_object((VALUE)size_pool_cache->freelist, false); - GC_ASSERT(RB_TYPE_P((VALUE)size_pool_cache->freelist, T_NONE)); - asan_poison_object((VALUE)size_pool_cache->freelist); + asan_unpoison_object((VALUE)heap_cache->freelist, false); + GC_ASSERT(RB_TYPE_P((VALUE)heap_cache->freelist, T_NONE)); + asan_poison_object((VALUE)heap_cache->freelist); } static inline size_t -size_pool_idx_for_size(size_t size) +heap_idx_for_size(size_t size) { size += RVALUE_OVERHEAD; size_t slot_count = CEILDIV(size, BASE_SLOT_SIZE); - /* size_pool_idx is ceil(log2(slot_count)) */ - size_t size_pool_idx = 64 - nlz_int64(slot_count - 1); + /* heap_idx is ceil(log2(slot_count)) */ + size_t heap_idx = 64 - nlz_int64(slot_count - 1); - if (size_pool_idx >= SIZE_POOL_COUNT) { - rb_bug("size_pool_idx_for_size: allocation size too large " - "(size=%"PRIuSIZE"u, size_pool_idx=%"PRIuSIZE"u)", size, size_pool_idx); + if (heap_idx >= HEAP_COUNT) { + rb_bug("heap_idx_for_size: allocation size too large " + "(size=%"PRIuSIZE"u, heap_idx=%"PRIuSIZE"u)", size, heap_idx); } #if RGENGC_CHECK_MODE rb_objspace_t *objspace = rb_gc_get_objspace(); - GC_ASSERT(size <= (size_t)size_pools[size_pool_idx].slot_size); - if (size_pool_idx > 0) GC_ASSERT(size > (size_t)size_pools[size_pool_idx - 1].slot_size); + GC_ASSERT(size <= (size_t)heaps[heap_idx].slot_size); + if (heap_idx > 0) GC_ASSERT(size > (size_t)heaps[heap_idx - 1].slot_size); #endif - return size_pool_idx; + return heap_idx; } size_t -rb_gc_impl_size_pool_id_for_size(void *objspace_ptr, size_t size) +rb_gc_impl_heap_id_for_size(void *objspace_ptr, size_t size) { - return size_pool_idx_for_size(size); + return heap_idx_for_size(size); } -static size_t size_pool_sizes[SIZE_POOL_COUNT + 1] = { 0 }; +static size_t heap_sizes[HEAP_COUNT + 1] = { 0 }; size_t * -rb_gc_impl_size_pool_sizes(void *objspace_ptr) +rb_gc_impl_heap_sizes(void *objspace_ptr) { - if (size_pool_sizes[0] == 0) { - for (unsigned char i = 0; i < SIZE_POOL_COUNT; i++) { - size_pool_sizes[i] = size_pool_slot_size(i); + if (heap_sizes[0] == 0) { + for (unsigned char i = 0; i < HEAP_COUNT; i++) { + heap_sizes[i] = heap_slot_size(i); } } - return size_pool_sizes; + return heap_sizes; } -NOINLINE(static VALUE newobj_cache_miss(rb_objspace_t *objspace, rb_ractor_newobj_cache_t *cache, size_t size_pool_idx, bool vm_locked)); +NOINLINE(static VALUE newobj_cache_miss(rb_objspace_t *objspace, rb_ractor_newobj_cache_t *cache, size_t heap_idx, bool vm_locked)); static VALUE -newobj_cache_miss(rb_objspace_t *objspace, rb_ractor_newobj_cache_t *cache, size_t size_pool_idx, bool vm_locked) +newobj_cache_miss(rb_objspace_t *objspace, rb_ractor_newobj_cache_t *cache, size_t heap_idx, bool vm_locked) { - rb_size_pool_t *size_pool = &size_pools[size_pool_idx]; - rb_heap_t *heap = SIZE_POOL_EDEN_HEAP(size_pool); + rb_heap_t *heap = &heaps[heap_idx]; VALUE obj = Qfalse; unsigned int lev = 0; @@ -2704,20 +2509,20 @@ newobj_cache_miss(rb_objspace_t *objspace, rb_ractor_newobj_cache_t *cache, size { if (is_incremental_marking(objspace)) { - gc_continue(objspace, size_pool, heap); + gc_continue(objspace, heap); cache->incremental_mark_step_allocated_slots = 0; // Retry allocation after resetting incremental_mark_step_allocated_slots - obj = ractor_cache_allocate_slot(objspace, cache, size_pool_idx); + obj = ractor_cache_allocate_slot(objspace, cache, heap_idx); } if (obj == Qfalse) { // Get next free page (possibly running GC) - struct heap_page *page = heap_next_free_page(objspace, size_pool, heap); - ractor_cache_set_page(objspace, cache, size_pool_idx, page); + struct heap_page *page = heap_next_free_page(objspace, heap); + ractor_cache_set_page(objspace, cache, heap_idx, page); // Retry allocation after moving to new page - obj = ractor_cache_allocate_slot(objspace, cache, size_pool_idx); + obj = ractor_cache_allocate_slot(objspace, cache, heap_idx); } } @@ -2732,27 +2537,27 @@ newobj_cache_miss(rb_objspace_t *objspace, rb_ractor_newobj_cache_t *cache, size } static VALUE -newobj_alloc(rb_objspace_t *objspace, rb_ractor_newobj_cache_t *cache, size_t size_pool_idx, bool vm_locked) +newobj_alloc(rb_objspace_t *objspace, rb_ractor_newobj_cache_t *cache, size_t heap_idx, bool vm_locked) { - VALUE obj = ractor_cache_allocate_slot(objspace, cache, size_pool_idx); + VALUE obj = ractor_cache_allocate_slot(objspace, cache, heap_idx); if (RB_UNLIKELY(obj == Qfalse)) { - obj = newobj_cache_miss(objspace, cache, size_pool_idx, vm_locked); + obj = newobj_cache_miss(objspace, cache, heap_idx, vm_locked); } - rb_size_pool_t *size_pool = &size_pools[size_pool_idx]; - size_pool->total_allocated_objects++; + rb_heap_t *heap = &heaps[heap_idx]; + heap->total_allocated_objects++; GC_ASSERT(rb_gc_multi_ractor_p() || - SIZE_POOL_EDEN_HEAP(size_pool)->total_slots + SIZE_POOL_TOMB_HEAP(size_pool)->total_slots >= - (size_pool->total_allocated_objects - size_pool->total_freed_objects - size_pool->final_slots_count)); + heap->total_slots >= + (heap->total_allocated_objects - heap->total_freed_objects - heap->final_slots_count)); return obj; } -ALWAYS_INLINE(static VALUE newobj_slowpath(VALUE klass, VALUE flags, rb_objspace_t *objspace, rb_ractor_newobj_cache_t *cache, int wb_protected, size_t size_pool_idx)); +ALWAYS_INLINE(static VALUE newobj_slowpath(VALUE klass, VALUE flags, rb_objspace_t *objspace, rb_ractor_newobj_cache_t *cache, int wb_protected, size_t heap_idx)); static inline VALUE -newobj_slowpath(VALUE klass, VALUE flags, rb_objspace_t *objspace, rb_ractor_newobj_cache_t *cache, int wb_protected, size_t size_pool_idx) +newobj_slowpath(VALUE klass, VALUE flags, rb_objspace_t *objspace, rb_ractor_newobj_cache_t *cache, int wb_protected, size_t heap_idx) { VALUE obj; unsigned int lev; @@ -2773,7 +2578,7 @@ newobj_slowpath(VALUE klass, VALUE flags, rb_objspace_t *objspace, rb_ractor_new } } - obj = newobj_alloc(objspace, cache, size_pool_idx, true); + obj = newobj_alloc(objspace, cache, heap_idx, true); newobj_init(klass, flags, wb_protected, objspace, obj); } rb_gc_cr_unlock(lev); @@ -2782,20 +2587,20 @@ newobj_slowpath(VALUE klass, VALUE flags, rb_objspace_t *objspace, rb_ractor_new } NOINLINE(static VALUE newobj_slowpath_wb_protected(VALUE klass, VALUE flags, - rb_objspace_t *objspace, rb_ractor_newobj_cache_t *cache, size_t size_pool_idx)); + rb_objspace_t *objspace, rb_ractor_newobj_cache_t *cache, size_t heap_idx)); NOINLINE(static VALUE newobj_slowpath_wb_unprotected(VALUE klass, VALUE flags, - rb_objspace_t *objspace, rb_ractor_newobj_cache_t *cache, size_t size_pool_idx)); + rb_objspace_t *objspace, rb_ractor_newobj_cache_t *cache, size_t heap_idx)); static VALUE -newobj_slowpath_wb_protected(VALUE klass, VALUE flags, rb_objspace_t *objspace, rb_ractor_newobj_cache_t *cache, size_t size_pool_idx) +newobj_slowpath_wb_protected(VALUE klass, VALUE flags, rb_objspace_t *objspace, rb_ractor_newobj_cache_t *cache, size_t heap_idx) { - return newobj_slowpath(klass, flags, objspace, cache, TRUE, size_pool_idx); + return newobj_slowpath(klass, flags, objspace, cache, TRUE, heap_idx); } static VALUE -newobj_slowpath_wb_unprotected(VALUE klass, VALUE flags, rb_objspace_t *objspace, rb_ractor_newobj_cache_t *cache, size_t size_pool_idx) +newobj_slowpath_wb_unprotected(VALUE klass, VALUE flags, rb_objspace_t *objspace, rb_ractor_newobj_cache_t *cache, size_t heap_idx) { - return newobj_slowpath(klass, flags, objspace, cache, FALSE, size_pool_idx); + return newobj_slowpath(klass, flags, objspace, cache, FALSE, heap_idx); } #if USE_MMTK @@ -2836,7 +2641,7 @@ rb_gc_impl_new_obj(void *objspace_ptr, void *cache_ptr, VALUE klass, VALUE flags } } - size_t size_pool_idx = size_pool_idx_for_size(alloc_size); + size_t heap_idx = heap_idx_for_size(alloc_size); #if USE_MMTK if (rb_mmtk_enabled_p()) { @@ -2856,10 +2661,10 @@ rb_gc_impl_new_obj(void *objspace_ptr, void *cache_ptr, VALUE klass, VALUE flags // Please keep in mind that this is only a temporary solution. // We first calculate the object size if the object were allocated using Ruby's own GC. - size_t size_pool_size = size_pool_slot_size(size_pool_idx); - RUBY_ASSERT(size_pool_size % MMTK_MIN_OBJ_ALIGN == 0); + size_t payload_size = heap_slot_size(heap_idx); + RUBY_ASSERT(payload_size % MMTK_MIN_OBJ_ALIGN == 0); - obj = rb_mmtk_newobj_of_inner(klass, flags, wb_protected, size_pool_size); + obj = rb_mmtk_newobj_of_inner(klass, flags, wb_protected, payload_size); } else { #endif @@ -2867,15 +2672,15 @@ rb_gc_impl_new_obj(void *objspace_ptr, void *cache_ptr, VALUE klass, VALUE flags if (!RB_UNLIKELY(during_gc || ruby_gc_stressful) && wb_protected) { - obj = newobj_alloc(objspace, cache, size_pool_idx, false); + obj = newobj_alloc(objspace, cache, heap_idx, false); newobj_init(klass, flags, wb_protected, objspace, obj); } else { RB_DEBUG_COUNTER_INC(obj_newobj_slowpath); obj = wb_protected ? - newobj_slowpath_wb_protected(klass, flags, objspace, cache, size_pool_idx) : - newobj_slowpath_wb_unprotected(klass, flags, objspace, cache, size_pool_idx); + newobj_slowpath_wb_protected(klass, flags, objspace, cache, heap_idx) : + newobj_slowpath_wb_unprotected(klass, flags, objspace, cache, heap_idx); } #if USE_MMTK @@ -2889,7 +2694,7 @@ static int ptr_in_page_body_p(const void *ptr, const void *memb) { struct heap_page *page = *(struct heap_page **)memb; - uintptr_t p_body = (uintptr_t)GET_PAGE_BODY(page->start); + uintptr_t p_body = (uintptr_t)page->body; if ((uintptr_t)ptr >= p_body) { return (uintptr_t)ptr < (p_body + HEAP_PAGE_SIZE) ? 0 : 1; @@ -2910,8 +2715,8 @@ heap_page_for_ptr(rb_objspace_t *objspace, uintptr_t ptr) return NULL; } - res = bsearch((void *)ptr, heap_pages_sorted, - (size_t)heap_allocated_pages, sizeof(struct heap_page *), + res = bsearch((void *)ptr, rb_darray_ref(objspace->heap_pages.sorted, 0), + rb_darray_size(objspace->heap_pages.sorted), sizeof(struct heap_page *), ptr_in_page_body_p); if (res) { @@ -2968,7 +2773,7 @@ is_pointer_to_heap(rb_objspace_t *objspace, const void *ptr) page = heap_page_for_ptr(objspace, (uintptr_t)ptr); if (page) { RB_DEBUG_COUNTER_INC(gc_isptr_maybe); - if (page->flags.in_tomb) { + if (heap_page_in_global_empty_pages_pool(objspace, page)) { return FALSE; } else { @@ -3074,7 +2879,7 @@ rb_gc_impl_make_zombie(void *objspace_ptr, VALUE obj, void (*dfree)(void *), voi struct heap_page *page = GET_HEAP_PAGE(obj); page->final_slots++; - page->size_pool->final_slots_count++; + page->heap->final_slots_count++; } static void @@ -3105,8 +2910,8 @@ struct each_obj_data { each_page_callback *each_page_callback; void *data; - struct heap_page **pages[SIZE_POOL_COUNT]; - size_t pages_counts[SIZE_POOL_COUNT]; + struct heap_page **pages[HEAP_COUNT]; + size_t pages_counts[HEAP_COUNT]; }; static VALUE @@ -3120,7 +2925,7 @@ objspace_each_objects_ensure(VALUE arg) objspace->flags.dont_incremental = FALSE; } - for (int i = 0; i < SIZE_POOL_COUNT; i++) { + for (int i = 0; i < HEAP_COUNT; i++) { struct heap_page **pages = data->pages[i]; free(pages); } @@ -3134,10 +2939,10 @@ objspace_each_objects_try(VALUE arg) struct each_obj_data *data = (struct each_obj_data *)arg; rb_objspace_t *objspace = data->objspace; - /* Copy pages from all size_pools to their respective buffers. */ - for (int i = 0; i < SIZE_POOL_COUNT; i++) { - rb_size_pool_t *size_pool = &size_pools[i]; - size_t size = SIZE_POOL_EDEN_HEAP(size_pool)->total_pages * sizeof(struct heap_page *); + /* Copy pages from all heaps to their respective buffers. */ + for (int i = 0; i < HEAP_COUNT; i++) { + rb_heap_t *heap = &heaps[i]; + size_t size = heap->total_pages * sizeof(struct heap_page *); struct heap_page **pages = malloc(size); if (!pages) rb_memerror(); @@ -3149,21 +2954,21 @@ objspace_each_objects_try(VALUE arg) * an infinite loop. */ struct heap_page *page = 0; size_t pages_count = 0; - ccan_list_for_each(&SIZE_POOL_EDEN_HEAP(size_pool)->pages, page, page_node) { + ccan_list_for_each(&heap->pages, page, page_node) { pages[pages_count] = page; pages_count++; } data->pages[i] = pages; data->pages_counts[i] = pages_count; - GC_ASSERT(pages_count == SIZE_POOL_EDEN_HEAP(size_pool)->total_pages); + GC_ASSERT(pages_count == heap->total_pages); } - for (int i = 0; i < SIZE_POOL_COUNT; i++) { - rb_size_pool_t *size_pool = &size_pools[i]; + for (int i = 0; i < HEAP_COUNT; i++) { + rb_heap_t *heap = &heaps[i]; size_t pages_count = data->pages_counts[i]; struct heap_page **pages = data->pages[i]; - struct heap_page *page = ccan_list_top(&SIZE_POOL_EDEN_HEAP(size_pool)->pages, struct heap_page, page_node); + struct heap_page *page = ccan_list_top(&heap->pages, struct heap_page, page_node); for (size_t i = 0; i < pages_count; i++) { /* If we have reached the end of the linked list then there are no * more pages, so break. */ @@ -3174,10 +2979,10 @@ objspace_each_objects_try(VALUE arg) if (pages[i] != page) continue; uintptr_t pstart = (uintptr_t)page->start; - uintptr_t pend = pstart + (page->total_slots * size_pool->slot_size); + uintptr_t pend = pstart + (page->total_slots * heap->slot_size); if (data->each_obj_callback && - (*data->each_obj_callback)((void *)pstart, (void *)pend, size_pool->slot_size, data->data)) { + (*data->each_obj_callback)((void *)pstart, (void *)pend, heap->slot_size, data->data)) { break; } if (data->each_page_callback && @@ -3185,7 +2990,7 @@ objspace_each_objects_try(VALUE arg) break; } - page = ccan_list_next(&SIZE_POOL_EDEN_HEAP(size_pool)->pages, page, page_node); + page = ccan_list_next(&heap->pages, page, page_node); } } @@ -3473,14 +3278,14 @@ finalize_list(rb_objspace_t *objspace, VALUE zombie) obj_free_object_id(objspace, zombie); } - GC_ASSERT(page->size_pool->final_slots_count > 0); + GC_ASSERT(page->heap->final_slots_count > 0); GC_ASSERT(page->final_slots > 0); - page->size_pool->final_slots_count--; + page->heap->final_slots_count--; page->final_slots--; page->free_slots++; heap_page_add_freeobj(objspace, page, zombie); - page->size_pool->total_freed_objects++; + page->heap->total_freed_objects++; } rb_gc_vm_unlock(lev); @@ -3609,9 +3414,8 @@ gc_abort(void *objspace_ptr) } if (is_lazy_sweeping(objspace)) { - for (int i = 0; i < SIZE_POOL_COUNT; i++) { - rb_size_pool_t *size_pool = &size_pools[i]; - rb_heap_t *heap = SIZE_POOL_EDEN_HEAP(size_pool); + for (int i = 0; i < HEAP_COUNT; i++) { + rb_heap_t *heap = &heaps[i]; heap->sweeping_page = NULL; struct heap_page *page = NULL; @@ -3622,9 +3426,8 @@ gc_abort(void *objspace_ptr) } } - for (int i = 0; i < SIZE_POOL_COUNT; i++) { - rb_size_pool_t *size_pool = &size_pools[i]; - rb_heap_t *heap = SIZE_POOL_EDEN_HEAP(size_pool); + for (int i = 0; i < HEAP_COUNT; i++) { + rb_heap_t *heap = &heaps[i]; rgengc_mark_and_rememberset_clear(objspace, heap); } @@ -3649,8 +3452,8 @@ rb_gc_impl_shutdown_free_objects(void *objspace_ptr) { rb_objspace_t *objspace = objspace_ptr; - for (size_t i = 0; i < heap_allocated_pages; i++) { - struct heap_page *page = heap_pages_sorted[i]; + for (size_t i = 0; i < rb_darray_size(objspace->heap_pages.sorted); i++) { + struct heap_page *page = rb_darray_get(objspace->heap_pages.sorted, i); short stride = page->slot_size; uintptr_t p = (uintptr_t)page->start; @@ -3766,23 +3569,18 @@ rb_gc_impl_shutdown_call_finalizer(void *objspace_ptr) gc_enter(objspace, gc_enter_event_finalizer, &lock_lev); /* run data/file object's finalizers */ - for (size_t i = 0; i < heap_allocated_pages; i++) { - struct heap_page *page = heap_pages_sorted[i]; + for (size_t i = 0; i < rb_darray_size(objspace->heap_pages.sorted); i++) { + struct heap_page *page = rb_darray_get(objspace->heap_pages.sorted, i); short stride = page->slot_size; uintptr_t p = (uintptr_t)page->start; uintptr_t pend = p + page->total_slots * stride; for (; p < pend; p += stride) { VALUE vp = (VALUE)p; - void *poisoned = asan_unpoison_object_temporary(vp); - - if (rb_gc_shutdown_call_finalizer_p(vp)) { - rb_gc_obj_free(objspace, vp); - } - - if (poisoned) { - GC_ASSERT(BUILTIN_TYPE(vp) == T_NONE); - asan_poison_object(vp); + asan_unpoisoning_object(vp) { + if (rb_gc_shutdown_call_finalizer_p(vp)) { + rb_gc_obj_free(objspace, vp); + } } } } @@ -3805,8 +3603,8 @@ rb_gc_impl_each_object(void *objspace_ptr, void (*func)(VALUE obj, void *data), { rb_objspace_t *objspace = objspace_ptr; - for (size_t i = 0; i < heap_allocated_pages; i++) { - struct heap_page *page = heap_pages_sorted[i]; + for (size_t i = 0; i < rb_darray_size(objspace->heap_pages.sorted); i++) { + struct heap_page *page = rb_darray_get(objspace->heap_pages.sorted, i); short stride = page->slot_size; uintptr_t p = (uintptr_t)page->start; @@ -3814,13 +3612,8 @@ rb_gc_impl_each_object(void *objspace_ptr, void (*func)(VALUE obj, void *data), for (; p < pend; p += stride) { VALUE obj = (VALUE)p; - void *poisoned = asan_unpoison_object_temporary(obj); - - func(obj, data); - - if (poisoned) { - GC_ASSERT(BUILTIN_TYPE(obj) == T_NONE); - asan_poison_object(obj); + asan_unpoisoning_object(obj) { + func(obj, data); } } } @@ -3842,10 +3635,9 @@ objspace_available_slots(rb_objspace_t *objspace) #endif size_t total_slots = 0; - for (int i = 0; i < SIZE_POOL_COUNT; i++) { - rb_size_pool_t *size_pool = &size_pools[i]; - total_slots += SIZE_POOL_EDEN_HEAP(size_pool)->total_slots; - total_slots += SIZE_POOL_TOMB_HEAP(size_pool)->total_slots; + for (int i = 0; i < HEAP_COUNT; i++) { + rb_heap_t *heap = &heaps[i]; + total_slots += heap->total_slots; } return total_slots; } @@ -3965,7 +3757,7 @@ gc_unprotect_pages(rb_objspace_t *objspace, rb_heap_t *heap) struct heap_page *cursor = heap->compact_cursor; while (cursor) { - unlock_page_body(objspace, GET_PAGE_BODY(cursor->start)); + unlock_page_body(objspace, cursor->body); cursor = ccan_list_next(&heap->pages, cursor, page_node); } } @@ -4160,9 +3952,8 @@ install_handlers(void) static void gc_compact_finish(rb_objspace_t *objspace) { - for (int i = 0; i < SIZE_POOL_COUNT; i++) { - rb_size_pool_t *size_pool = &size_pools[i]; - rb_heap_t *heap = SIZE_POOL_EDEN_HEAP(size_pool); + for (int i = 0; i < HEAP_COUNT; i++) { + rb_heap_t *heap = &heaps[i]; gc_unprotect_pages(objspace, heap); } @@ -4171,9 +3962,8 @@ gc_compact_finish(rb_objspace_t *objspace) gc_update_references(objspace); objspace->profile.compact_count++; - for (int i = 0; i < SIZE_POOL_COUNT; i++) { - rb_size_pool_t *size_pool = &size_pools[i]; - rb_heap_t *heap = SIZE_POOL_EDEN_HEAP(size_pool); + for (int i = 0; i < HEAP_COUNT; i++) { + rb_heap_t *heap = &heaps[i]; heap->compact_cursor = NULL; heap->free_pages = NULL; heap->compact_cursor_index = 0; @@ -4228,6 +4018,8 @@ gc_sweep_plane(rb_objspace_t *objspace, rb_heap_t *heap, uintptr_t p, bits_t bit #undef CHECK #endif + rb_gc_event_hook(vp, RUBY_INTERNAL_EVENT_FREEOBJ); + bool has_object_id = FL_TEST(vp, FL_SEEN_OBJ_ID); if (rb_gc_obj_free(objspace, vp)) { if (has_object_id) { @@ -4275,7 +4067,7 @@ static inline void gc_sweep_page(rb_objspace_t *objspace, rb_heap_t *heap, struct gc_sweep_context *ctx) { struct heap_page *sweep_page = ctx->page; - GC_ASSERT(SIZE_POOL_EDEN_HEAP(sweep_page->size_pool) == heap); + GC_ASSERT(sweep_page->heap == heap); uintptr_t p; bits_t *bits, bitset; @@ -4339,7 +4131,7 @@ gc_sweep_page(rb_objspace_t *objspace, rb_heap_t *heap, struct gc_sweep_context ctx->freed_slots, ctx->empty_slots, ctx->final_slots); sweep_page->free_slots += ctx->freed_slots + ctx->empty_slots; - sweep_page->size_pool->total_freed_objects += ctx->freed_slots; + sweep_page->heap->total_freed_objects += ctx->freed_slots; if (heap_pages_deferred_final && !finalizing) { gc_finalize_deferred_register(objspace); @@ -4445,8 +4237,8 @@ gc_ractor_newobj_cache_clear(void *c, void *data) newobj_cache->incremental_mark_step_allocated_slots = 0; - for (size_t size_pool_idx = 0; size_pool_idx < SIZE_POOL_COUNT; size_pool_idx++) { - rb_ractor_newobj_size_pool_cache_t *cache = &newobj_cache->size_pool_caches[size_pool_idx]; + for (size_t heap_idx = 0; heap_idx < HEAP_COUNT; heap_idx++) { + rb_ractor_newobj_heap_cache_t *cache = &newobj_cache->heap_caches[heap_idx]; struct heap_page *page = cache->using_page; struct free_slot *freelist = cache->freelist; @@ -4464,6 +4256,7 @@ gc_sweep_start(rb_objspace_t *objspace) { gc_mode_transition(objspace, gc_mode_sweeping); objspace->rincgc.pooled_slots = 0; + objspace->heap_pages.allocatable_slots = 0; #if GC_CAN_COMPILE_COMPACTION if (objspace->flags.during_compacting) { @@ -4474,17 +4267,15 @@ gc_sweep_start(rb_objspace_t *objspace) } #endif - for (int i = 0; i < SIZE_POOL_COUNT; i++) { - rb_size_pool_t *size_pool = &size_pools[i]; - rb_heap_t *heap = SIZE_POOL_EDEN_HEAP(size_pool); - + for (int i = 0; i < HEAP_COUNT; i++) { + rb_heap_t *heap = &heaps[i]; gc_sweep_start_heap(objspace, heap); - /* We should call gc_sweep_finish_size_pool for size pools with no pages. */ + /* We should call gc_sweep_finish_heap for size pools with no pages. */ if (heap->sweeping_page == NULL) { GC_ASSERT(heap->total_pages == 0); GC_ASSERT(heap->total_slots == 0); - gc_sweep_finish_size_pool(objspace, size_pool); + gc_sweep_finish_heap(objspace, heap); } } @@ -4492,55 +4283,42 @@ gc_sweep_start(rb_objspace_t *objspace) } static void -gc_sweep_finish_size_pool(rb_objspace_t *objspace, rb_size_pool_t *size_pool) +gc_sweep_finish_heap(rb_objspace_t *objspace, rb_heap_t *heap) { - rb_heap_t *heap = SIZE_POOL_EDEN_HEAP(size_pool); - size_t total_slots = heap->total_slots + SIZE_POOL_TOMB_HEAP(size_pool)->total_slots; - size_t total_pages = heap->total_pages + SIZE_POOL_TOMB_HEAP(size_pool)->total_pages; - size_t swept_slots = size_pool->freed_slots + size_pool->empty_slots; + size_t total_slots = heap->total_slots; + size_t swept_slots = heap->freed_slots + heap->empty_slots; - size_t init_slots = gc_params.size_pool_init_slots[size_pool - size_pools]; + size_t init_slots = gc_params.heap_init_slots[heap - heaps]; size_t min_free_slots = (size_t)(MAX(total_slots, init_slots) * gc_params.heap_free_slots_min_ratio); - /* If we don't have enough slots and we have pages on the tomb heap, move - * pages from the tomb heap to the eden heap. This may prevent page - * creation thrashing (frequently allocating and deallocting pages) and - * GC thrashing (running GC more frequently than required). */ - struct heap_page *resurrected_page; - while (swept_slots < min_free_slots && - (resurrected_page = heap_page_resurrect(objspace, size_pool))) { - swept_slots += resurrected_page->free_slots; - - heap_add_page(objspace, size_pool, heap, resurrected_page); - heap_add_freepage(heap, resurrected_page); - } - - if (swept_slots < min_free_slots) { - bool grow_heap = is_full_marking(objspace); - - /* Consider growing or starting a major GC if we are not currently in a - * major GC and we can't allocate any more pages. */ - if (!is_full_marking(objspace) && size_pool->allocatable_pages == 0) { + if (swept_slots < min_free_slots && /* The heap is a growth heap if it freed more slots than had empty slots. */ - bool is_growth_heap = size_pool->empty_slots == 0 || size_pool->freed_slots > size_pool->empty_slots; - - /* Grow this heap if we haven't run at least RVALUE_OLD_AGE minor - * GC since the last major GC or if this heap is smaller than the - * the configured initial size. */ - if (objspace->profile.count - objspace->rgengc.last_major_gc < RVALUE_OLD_AGE || - total_slots < init_slots) { - grow_heap = TRUE; + (heap->empty_slots == 0 || heap->freed_slots > heap->empty_slots)) { + /* If we don't have enough slots and we have pages on the tomb heap, move + * pages from the tomb heap to the eden heap. This may prevent page + * creation thrashing (frequently allocating and deallocting pages) and + * GC thrashing (running GC more frequently than required). */ + struct heap_page *resurrected_page; + while (swept_slots < min_free_slots && + (resurrected_page = heap_page_resurrect(objspace))) { + heap_add_page(objspace, heap, resurrected_page); + heap_add_freepage(heap, resurrected_page); + + swept_slots += resurrected_page->free_slots; + } + + if (swept_slots < min_free_slots) { + /* Grow this heap if we are in a major GC or if we haven't run at least + * RVALUE_OLD_AGE minor GC since the last major GC. */ + if (is_full_marking(objspace) || + objspace->profile.count - objspace->rgengc.last_major_gc < RVALUE_OLD_AGE) { + heap_allocatable_slots_expand(objspace, heap, swept_slots, heap->total_slots); } - else if (is_growth_heap) { /* Only growth heaps are allowed to start a major GC. */ + else { gc_needs_major_flags |= GPR_FLAG_MAJOR_BY_NOFREE; - size_pool->force_major_gc_count++; + heap->force_major_gc_count++; } } - - if (grow_heap) { - size_pool_allocatable_pages_expand(objspace, size_pool, swept_slots, - total_slots, total_pages); - } } } @@ -4552,33 +4330,25 @@ gc_sweep_finish(rb_objspace_t *objspace) gc_prof_set_heap_info(objspace); heap_pages_free_unused_pages(objspace); - for (int i = 0; i < SIZE_POOL_COUNT; i++) { - rb_size_pool_t *size_pool = &size_pools[i]; - - /* if heap_pages has unused pages, then assign them to increment */ - size_t tomb_pages = SIZE_POOL_TOMB_HEAP(size_pool)->total_pages; - if (size_pool->allocatable_pages < tomb_pages) { - size_pool->allocatable_pages = tomb_pages; - } + for (int i = 0; i < HEAP_COUNT; i++) { + rb_heap_t *heap = &heaps[i]; - size_pool->freed_slots = 0; - size_pool->empty_slots = 0; + heap->freed_slots = 0; + heap->empty_slots = 0; if (!will_be_incremental_marking(objspace)) { - rb_heap_t *eden_heap = SIZE_POOL_EDEN_HEAP(size_pool); - struct heap_page *end_page = eden_heap->free_pages; + struct heap_page *end_page = heap->free_pages; if (end_page) { while (end_page->free_next) end_page = end_page->free_next; - end_page->free_next = eden_heap->pooled_pages; + end_page->free_next = heap->pooled_pages; } else { - eden_heap->free_pages = eden_heap->pooled_pages; + heap->free_pages = heap->pooled_pages; } - eden_heap->pooled_pages = NULL; + heap->pooled_pages = NULL; objspace->rincgc.pooled_slots = 0; } } - heap_pages_expand_sorted(objspace); rb_gc_event_hook(0, RUBY_INTERNAL_EVENT_GC_END_SWEEP); gc_mode_transition(objspace, gc_mode_none); @@ -4589,7 +4359,7 @@ gc_sweep_finish(rb_objspace_t *objspace) } static int -gc_sweep_step(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_t *heap) +gc_sweep_step(rb_objspace_t *objspace, rb_heap_t *heap) { struct heap_page *sweep_page = heap->sweeping_page; int unlink_limit = GC_SWEEP_PAGES_FREEABLE_PER_STEP; @@ -4616,18 +4386,33 @@ gc_sweep_step(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_t *hea heap->sweeping_page = ccan_list_next(&heap->pages, sweep_page, page_node); - if (sweep_page->final_slots + free_slots == sweep_page->total_slots && - heap_pages_freeable_pages > 0 && - unlink_limit > 0) { + if (free_slots == sweep_page->total_slots && + heap_pages_freeable_pages > 0 && + unlink_limit > 0) { heap_pages_freeable_pages--; unlink_limit--; - /* there are no living objects -> move this page to tomb heap */ + /* There are no living objects, so move this page to the global empty pages. */ heap_unlink_page(objspace, heap, sweep_page); - heap_add_page(objspace, size_pool, SIZE_POOL_TOMB_HEAP(size_pool), sweep_page); + + sweep_page->start = 0; + sweep_page->total_slots = 0; + sweep_page->slot_size = 0; + sweep_page->heap = NULL; + sweep_page->free_slots = 0; + + asan_unlock_freelist(sweep_page); + sweep_page->freelist = NULL; + asan_lock_freelist(sweep_page); + + asan_poison_memory_region(sweep_page->body, HEAP_PAGE_SIZE); + + objspace->empty_pages_count++; + sweep_page->free_next = objspace->empty_pages; + objspace->empty_pages = sweep_page; } else if (free_slots > 0) { - size_pool->freed_slots += ctx.freed_slots; - size_pool->empty_slots += ctx.empty_slots; + heap->freed_slots += ctx.freed_slots; + heap->empty_slots += ctx.empty_slots; if (pooled_slots < GC_INCREMENTAL_SWEEP_POOL_SLOT_COUNT) { heap_add_poolpage(objspace, heap, sweep_page); @@ -4647,7 +4432,7 @@ gc_sweep_step(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_t *hea } while ((sweep_page = heap->sweeping_page)); if (!heap->sweeping_page) { - gc_sweep_finish_size_pool(objspace, size_pool); + gc_sweep_finish_heap(objspace, heap); if (!has_sweeping_pages(objspace)) { gc_sweep_finish(objspace); @@ -4664,36 +4449,32 @@ gc_sweep_step(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_t *hea static void gc_sweep_rest(rb_objspace_t *objspace) { - for (int i = 0; i < SIZE_POOL_COUNT; i++) { - rb_size_pool_t *size_pool = &size_pools[i]; + for (int i = 0; i < HEAP_COUNT; i++) { + rb_heap_t *heap = &heaps[i]; - while (SIZE_POOL_EDEN_HEAP(size_pool)->sweeping_page) { - gc_sweep_step(objspace, size_pool, SIZE_POOL_EDEN_HEAP(size_pool)); + while (heap->sweeping_page) { + gc_sweep_step(objspace, heap); } } } static void -gc_sweep_continue(rb_objspace_t *objspace, rb_size_pool_t *sweep_size_pool, rb_heap_t *heap) +gc_sweep_continue(rb_objspace_t *objspace, rb_heap_t *sweep_heap) { GC_ASSERT(dont_gc_val() == FALSE || objspace->profile.latest_gc_info & GPR_FLAG_METHOD); if (!GC_ENABLE_LAZY_SWEEP) return; gc_sweeping_enter(objspace); - for (int i = 0; i < SIZE_POOL_COUNT; i++) { - rb_size_pool_t *size_pool = &size_pools[i]; - if (!gc_sweep_step(objspace, size_pool, SIZE_POOL_EDEN_HEAP(size_pool))) { - /* sweep_size_pool requires a free slot but sweeping did not yield any. */ - if (size_pool == sweep_size_pool) { - if (size_pool->allocatable_pages > 0) { - heap_increment(objspace, size_pool, heap); - } - else { - /* Not allowed to create a new page so finish sweeping. */ - gc_sweep_rest(objspace); - break; - } + for (int i = 0; i < HEAP_COUNT; i++) { + rb_heap_t *heap = &heaps[i]; + if (!gc_sweep_step(objspace, heap)) { + /* sweep_heap requires a free slot but sweeping did not yield any + * and we cannot allocate a new page. */ + if (heap == sweep_heap && objspace->heap_pages.allocatable_slots == 0) { + /* Not allowed to create a new page so finish sweeping. */ + gc_sweep_rest(objspace); + break; } } } @@ -4713,20 +4494,14 @@ rb_gc_impl_location(void *objspace_ptr, VALUE value) VALUE destination; if (!SPECIAL_CONST_P(value)) { - void *poisoned = asan_unpoison_object_temporary(value); - - if (BUILTIN_TYPE(value) == T_MOVED) { - destination = (VALUE)RMOVED(value)->destination; - GC_ASSERT(BUILTIN_TYPE(destination) != T_NONE); - } - else { - destination = value; - } - - /* Re-poison slot if it's not the one we want */ - if (poisoned) { - GC_ASSERT(BUILTIN_TYPE(value) == T_NONE); - asan_poison_object(value); + asan_unpoisoning_object(value) { + if (BUILTIN_TYPE(value) == T_MOVED) { + destination = (VALUE)RMOVED(value)->destination; + GC_ASSERT(BUILTIN_TYPE(destination) != T_NONE); + } + else { + destination = value; + } } } else { @@ -4817,8 +4592,8 @@ gc_compact_start(rb_objspace_t *objspace) struct heap_page *page = NULL; gc_mode_transition(objspace, gc_mode_compacting); - for (int i = 0; i < SIZE_POOL_COUNT; i++) { - rb_heap_t *heap = SIZE_POOL_EDEN_HEAP(&size_pools[i]); + for (int i = 0; i < HEAP_COUNT; i++) { + rb_heap_t *heap = &heaps[i]; ccan_list_for_each(&heap->pages, page, page_node) { page->flags.before_sweep = TRUE; } @@ -4869,9 +4644,9 @@ gc_sweep(rb_objspace_t *objspace) else { /* Sweep every size pool. */ - for (int i = 0; i < SIZE_POOL_COUNT; i++) { - rb_size_pool_t *size_pool = &size_pools[i]; - gc_sweep_step(objspace, size_pool, SIZE_POOL_EDEN_HEAP(size_pool)); + for (int i = 0; i < HEAP_COUNT; i++) { + rb_heap_t *heap = &heaps[i]; + gc_sweep_step(objspace, heap); } } @@ -5148,43 +4923,35 @@ gc_grey(rb_objspace_t *objspace, VALUE obj) static void gc_mark(rb_objspace_t *objspace, VALUE obj) { -// NOTE: In upstream mmtk this is in gc_mark, but the rest of this function is in gc_mark_ptr. -#if USE_MMTK - if (rb_mmtk_enabled_p()) { - if (!LIKELY(during_gc)) { - rb_gc_reachable_objects_from_callback(obj); - return; - } + WHEN_USING_MMTK({ + GC_ASSERT(rb_mmtk_is_mmtk_worker()); rb_mmtk_mark_movable(obj); return; - } -#endif - if (RB_LIKELY(during_gc)) { - rgengc_check_relation(objspace, obj); - if (!gc_mark_set(objspace, obj)) return; /* already marked */ + }) - if (0) { // for debug GC marking miss - if (objspace->rgengc.parent_object) { - RUBY_DEBUG_LOG("%p (%s) parent:%p (%s)", - (void *)obj, obj_type_name(obj), - (void *)objspace->rgengc.parent_object, obj_type_name(objspace->rgengc.parent_object)); - } - else { - RUBY_DEBUG_LOG("%p (%s)", (void *)obj, obj_type_name(obj)); - } - } + GC_ASSERT(during_gc); - if (RB_UNLIKELY(RB_TYPE_P(obj, T_NONE))) { - rb_obj_info_dump(obj); - rb_bug("try to mark T_NONE object"); /* check here will help debugging */ - } + rgengc_check_relation(objspace, obj); + if (!gc_mark_set(objspace, obj)) return; /* already marked */ - gc_aging(objspace, obj); - gc_grey(objspace, obj); + if (0) { // for debug GC marking miss + if (objspace->rgengc.parent_object) { + RUBY_DEBUG_LOG("%p (%s) parent:%p (%s)", + (void *)obj, obj_type_name(obj), + (void *)objspace->rgengc.parent_object, obj_type_name(objspace->rgengc.parent_object)); + } + else { + RUBY_DEBUG_LOG("%p (%s)", (void *)obj, obj_type_name(obj)); + } } - else { - rb_gc_reachable_objects_from_callback(obj); + + if (RB_UNLIKELY(RB_TYPE_P(obj, T_NONE))) { + rb_obj_info_dump(obj); + rb_bug("try to mark T_NONE object"); /* check here will help debugging */ } + + gc_aging(objspace, obj); + gc_grey(objspace, obj); } static inline void @@ -5205,16 +4972,11 @@ gc_pin(rb_objspace_t *objspace, VALUE obj) static inline void gc_mark_and_pin(rb_objspace_t *objspace, VALUE obj) { -#if USE_MMTK - if (rb_mmtk_enabled_p()) { - if (!LIKELY(during_gc)) { - rb_gc_reachable_objects_from_callback(obj); - return; - } + WHEN_USING_MMTK({ + GC_ASSERT(rb_mmtk_is_mmtk_worker()); rb_mmtk_mark_pin(obj); return; - } -#endif + }) gc_pin(objspace, obj); gc_mark(objspace, obj); } @@ -5265,21 +5027,16 @@ rb_gc_impl_mark_maybe(void *objspace_ptr, VALUE obj) (void)VALGRIND_MAKE_MEM_DEFINED(&obj, sizeof(obj)); if (is_pointer_to_heap(objspace, (void *)obj)) { - void *ptr = asan_unpoison_object_temporary(obj); - - /* Garbage can live on the stack, so do not mark or pin */ - switch (BUILTIN_TYPE(obj)) { - case T_ZOMBIE: - case T_NONE: - break; - default: - gc_mark_and_pin(objspace, obj); - break; - } - - if (ptr) { - GC_ASSERT(BUILTIN_TYPE(obj) == T_NONE); - asan_poison_object(obj); + asan_unpoisoning_object(obj) { + /* Garbage can live on the stack, so do not mark or pin */ + switch (BUILTIN_TYPE(obj)) { + case T_ZOMBIE: + case T_NONE: + break; + default: + gc_mark_and_pin(objspace, obj); + break; + } } } } @@ -5289,12 +5046,9 @@ rb_gc_impl_mark_weak(void *objspace_ptr, VALUE *ptr) { rb_objspace_t *objspace = objspace_ptr; - if (RB_UNLIKELY(!during_gc)) return; + GC_ASSERT(objspace->rgengc.parent_object == 0 || FL_TEST(objspace->rgengc.parent_object, FL_WB_PROTECTED)); VALUE obj = *ptr; - if (RB_SPECIAL_CONST_P(obj)) return; - - GC_ASSERT(objspace->rgengc.parent_object == 0 || FL_TEST(objspace->rgengc.parent_object, FL_WB_PROTECTED)); if (RB_UNLIKELY(RB_TYPE_P(obj, T_NONE))) { rb_obj_info_dump(obj); @@ -5389,7 +5143,7 @@ void rb_mmtk_scan_obj_to_id_tbl_roots(void) { rb_vm_t *vm = GET_VM(); - rb_objspace_t *objspace = vm->objspace; + rb_objspace_t *objspace = vm->gc.objspace; rb_mark_tbl_no_pin(objspace->obj_to_id_tbl); /* Only mark ids */ } @@ -5398,7 +5152,7 @@ void rb_mmtk_scan_misc_roots(void) { rb_vm_t *vm = GET_VM(); - rb_objspace_t *objspace = vm->objspace; + rb_objspace_t *objspace = vm->gc.objspace; if (stress_to_class) rb_gc_mark(stress_to_class); } @@ -5411,7 +5165,7 @@ rb_mmtk_scan_final_jobs_roots(void) { rb_vm_t *vm = GET_VM(); - struct MMTk_FinalJob *cur_job = (struct MMTk_FinalJob*)vm->objspace->heap_pages.deferred_final; + struct MMTk_FinalJob *cur_job = (struct MMTk_FinalJob*)vm->gc.objspace->heap_pages.deferred_final; while (cur_job != NULL) { if (cur_job->kind == MMTK_FJOB_FINALIZE) { // The finalizer array is a proper MMTk heap object, and needs to be kept alive. @@ -5624,10 +5378,10 @@ allrefs_roots_i(VALUE obj, void *ptr) } } #define PUSH_MARK_FUNC_DATA(v) do { \ - struct gc_mark_func_data_struct *prev_mark_func_data = GET_RACTOR()->mfd; \ - GET_RACTOR()->mfd = (v); + struct gc_mark_func_data_struct *prev_mark_func_data = GET_VM()->gc.mark_func_data; \ + GET_VM()->gc.mark_func_data = (v); -#define POP_MARK_FUNC_DATA() GET_RACTOR()->mfd = prev_mark_func_data;} while (0) +#define POP_MARK_FUNC_DATA() GET_VM()->gc.mark_func_data = prev_mark_func_data;} while (0) static st_table * objspace_allrefs(rb_objspace_t *objspace) @@ -5647,7 +5401,7 @@ objspace_allrefs(rb_objspace_t *objspace) /* traverse root objects */ PUSH_MARK_FUNC_DATA(&mfd); - GET_RACTOR()->mfd = &mfd; + GET_VM()->gc.mark_func_data = &mfd; mark_roots(objspace, &data.category); POP_MARK_FUNC_DATA(); @@ -5705,7 +5459,7 @@ gc_check_after_marks_i(st_data_t k, st_data_t v, st_data_t ptr) rb_objspace_t *objspace = (rb_objspace_t *)ptr; /* object should be marked or oldgen */ - if (!RVALUE_MARKED(obj)) { + if (!RVALUE_MARKED(objspace, obj)) { fprintf(stderr, "gc_check_after_marks_i: %s is not marked and not oldgen.\n", rb_obj_info(obj)); fprintf(stderr, "gc_check_after_marks_i: %p is referred from ", (void *)obj); reflist_dump(refs); @@ -5817,60 +5571,56 @@ verify_internal_consistency_i(void *page_start, void *page_end, size_t stride, rb_objspace_t *objspace = data->objspace; for (obj = (VALUE)page_start; obj != (VALUE)page_end; obj += stride) { - void *poisoned = asan_unpoison_object_temporary(obj); - - if (!rb_gc_impl_garbage_object_p(objspace, obj)) { - /* count objects */ - data->live_object_count++; - data->parent = obj; - - /* Normally, we don't expect T_MOVED objects to be in the heap. - * But they can stay alive on the stack, */ - if (!gc_object_moved_p(objspace, obj)) { - /* moved slots don't have children */ - rb_objspace_reachable_objects_from(obj, check_children_i, (void *)data); - } + asan_unpoisoning_object(obj) { + if (!rb_gc_impl_garbage_object_p(objspace, obj)) { + /* count objects */ + data->live_object_count++; + data->parent = obj; - /* check health of children */ - if (RVALUE_OLD_P(objspace, obj)) data->old_object_count++; - if (RVALUE_WB_UNPROTECTED(objspace, obj) && RVALUE_UNCOLLECTIBLE(objspace, obj)) data->remembered_shady_count++; + /* Normally, we don't expect T_MOVED objects to be in the heap. + * But they can stay alive on the stack, */ + if (!gc_object_moved_p(objspace, obj)) { + /* moved slots don't have children */ + rb_objspace_reachable_objects_from(obj, check_children_i, (void *)data); + } - if (!is_marking(objspace) && RVALUE_OLD_P(objspace, obj)) { - /* reachable objects from an oldgen object should be old or (young with remember) */ - data->parent = obj; - rb_objspace_reachable_objects_from(obj, check_generation_i, (void *)data); - } + /* check health of children */ + if (RVALUE_OLD_P(objspace, obj)) data->old_object_count++; + if (RVALUE_WB_UNPROTECTED(objspace, obj) && RVALUE_UNCOLLECTIBLE(objspace, obj)) data->remembered_shady_count++; - if (is_incremental_marking(objspace)) { - if (RVALUE_BLACK_P(objspace, obj)) { - /* reachable objects from black objects should be black or grey objects */ + if (!is_marking(objspace) && RVALUE_OLD_P(objspace, obj)) { + /* reachable objects from an oldgen object should be old or (young with remember) */ data->parent = obj; - rb_objspace_reachable_objects_from(obj, check_color_i, (void *)data); + rb_objspace_reachable_objects_from(obj, check_generation_i, (void *)data); } - } - } - else { - if (BUILTIN_TYPE(obj) == T_ZOMBIE) { - data->zombie_object_count++; - if ((RBASIC(obj)->flags & ~ZOMBIE_OBJ_KEPT_FLAGS) != T_ZOMBIE) { - fprintf(stderr, "verify_internal_consistency_i: T_ZOMBIE has extra flags set: %s\n", - rb_obj_info(obj)); - data->err_count++; + if (is_incremental_marking(objspace)) { + if (RVALUE_BLACK_P(objspace, obj)) { + /* reachable objects from black objects should be black or grey objects */ + data->parent = obj; + rb_objspace_reachable_objects_from(obj, check_color_i, (void *)data); + } } + } + else { + if (BUILTIN_TYPE(obj) == T_ZOMBIE) { + data->zombie_object_count++; + + if ((RBASIC(obj)->flags & ~ZOMBIE_OBJ_KEPT_FLAGS) != T_ZOMBIE) { + fprintf(stderr, "verify_internal_consistency_i: T_ZOMBIE has extra flags set: %s\n", + rb_obj_info(obj)); + data->err_count++; + } - if (!!FL_TEST(obj, FL_FINALIZE) != !!st_is_member(finalizer_table, obj)) { - fprintf(stderr, "verify_internal_consistency_i: FL_FINALIZE %s but %s finalizer_table: %s\n", - FL_TEST(obj, FL_FINALIZE) ? "set" : "not set", st_is_member(finalizer_table, obj) ? "in" : "not in", - rb_obj_info(obj)); - data->err_count++; + if (!!FL_TEST(obj, FL_FINALIZE) != !!st_is_member(finalizer_table, obj)) { + fprintf(stderr, "verify_internal_consistency_i: FL_FINALIZE %s but %s finalizer_table: %s\n", + FL_TEST(obj, FL_FINALIZE) ? "set" : "not set", st_is_member(finalizer_table, obj) ? "in" : "not in", + rb_obj_info(obj)); + data->err_count++; + } } } } - if (poisoned) { - GC_ASSERT(BUILTIN_TYPE(obj) == T_NONE); - asan_poison_object(obj); - } } return 0; @@ -5891,22 +5641,18 @@ gc_verify_heap_page(rb_objspace_t *objspace, struct heap_page *page, VALUE obj) for (uintptr_t ptr = start; ptr < end; ptr += slot_size) { VALUE val = (VALUE)ptr; - void *poisoned = asan_unpoison_object_temporary(val); - enum ruby_value_type type = BUILTIN_TYPE(val); - - if (type == T_NONE) free_objects++; - if (type == T_ZOMBIE) zombie_objects++; - if (RVALUE_PAGE_UNCOLLECTIBLE(page, val) && RVALUE_PAGE_WB_UNPROTECTED(page, val)) { - has_remembered_shady = TRUE; - } - if (RVALUE_PAGE_MARKING(page, val)) { - has_remembered_old = TRUE; - remembered_old_objects++; - } + asan_unpoisoning_object(val) { + enum ruby_value_type type = BUILTIN_TYPE(val); - if (poisoned) { - GC_ASSERT(BUILTIN_TYPE(val) == T_NONE); - asan_poison_object(val); + if (type == T_NONE) free_objects++; + if (type == T_ZOMBIE) zombie_objects++; + if (RVALUE_PAGE_UNCOLLECTIBLE(page, val) && RVALUE_PAGE_WB_UNPROTECTED(page, val)) { + has_remembered_shady = TRUE; + } + if (RVALUE_PAGE_MARKING(page, val)) { + has_remembered_old = TRUE; + remembered_old_objects++; + } } } @@ -5974,9 +5720,8 @@ static int gc_verify_heap_pages(rb_objspace_t *objspace) { int remembered_old_objects = 0; - for (int i = 0; i < SIZE_POOL_COUNT; i++) { - remembered_old_objects += gc_verify_heap_pages_(objspace, &(SIZE_POOL_EDEN_HEAP(&size_pools[i])->pages)); - remembered_old_objects += gc_verify_heap_pages_(objspace, &(SIZE_POOL_TOMB_HEAP(&size_pools[i])->pages)); + for (int i = 0; i < HEAP_COUNT; i++) { + remembered_old_objects += gc_verify_heap_pages_(objspace, &((&heaps[i])->pages)); } return remembered_old_objects; } @@ -5995,8 +5740,8 @@ gc_verify_internal_consistency_(rb_objspace_t *objspace) gc_report(5, objspace, "gc_verify_internal_consistency: start\n"); /* check relations */ - for (size_t i = 0; i < heap_allocated_pages; i++) { - struct heap_page *page = heap_pages_sorted[i]; + for (size_t i = 0; i < rb_darray_size(objspace->heap_pages.sorted); i++) { + struct heap_page *page = rb_darray_get(objspace->heap_pages.sorted, i); short slot_size = page->slot_size; uintptr_t start = (uintptr_t)page->start; @@ -6233,8 +5978,8 @@ gc_marks_finish(rb_objspace_t *objspace) objspace->flags.during_incremental_marking = FALSE; /* check children of all marked wb-unprotected objects */ - for (int i = 0; i < SIZE_POOL_COUNT; i++) { - gc_marks_wb_unprotected_objects(objspace, SIZE_POOL_EDEN_HEAP(&size_pools[i])); + for (int i = 0; i < HEAP_COUNT; i++) { + gc_marks_wb_unprotected_objects(objspace, &heaps[i]); } } @@ -6251,20 +5996,24 @@ gc_marks_finish(rb_objspace_t *objspace) #endif { - /* decide full GC is needed or not */ - size_t total_slots = heap_allocatable_slots(objspace) + heap_eden_total_slots(objspace); + const unsigned long r_mul = objspace->live_ractor_cache_count > 8 ? 8 : objspace->live_ractor_cache_count; // upto 8 + + size_t total_slots = objspace_available_slots(objspace); size_t sweep_slots = total_slots - objspace->marked_slots; /* will be swept slots */ size_t max_free_slots = (size_t)(total_slots * gc_params.heap_free_slots_max_ratio); size_t min_free_slots = (size_t)(total_slots * gc_params.heap_free_slots_min_ratio); + if (min_free_slots < gc_params.heap_free_slots * r_mul) { + min_free_slots = gc_params.heap_free_slots * r_mul; + } + int full_marking = is_full_marking(objspace); - const unsigned long r_mul = objspace->live_ractor_cache_count > 8 ? 8 : objspace->live_ractor_cache_count; // upto 8 - GC_ASSERT(heap_eden_total_slots(objspace) >= objspace->marked_slots); + GC_ASSERT(objspace_available_slots(objspace) >= objspace->marked_slots); /* Setup freeable slots. */ size_t total_init_slots = 0; - for (int i = 0; i < SIZE_POOL_COUNT; i++) { - total_init_slots += gc_params.size_pool_init_slots[i] * r_mul; + for (int i = 0; i < HEAP_COUNT; i++) { + total_init_slots += gc_params.heap_init_slots[i] * r_mul; } if (max_free_slots < total_init_slots) { @@ -6278,17 +6027,10 @@ gc_marks_finish(rb_objspace_t *objspace) heap_pages_freeable_pages = 0; } - /* check free_min */ - if (min_free_slots < gc_params.heap_free_slots * r_mul) { - min_free_slots = gc_params.heap_free_slots * r_mul; - } - - if (sweep_slots < min_free_slots) { + if (objspace->heap_pages.allocatable_slots == 0 && sweep_slots < min_free_slots) { if (!full_marking) { if (objspace->profile.count - objspace->rgengc.last_major_gc < RVALUE_OLD_AGE) { full_marking = TRUE; - /* do not update last_major_gc, because full marking is not done. */ - /* goto increment; */ } else { gc_report(1, objspace, "gc_marks_finish: next is full GC!!)\n"); @@ -6319,8 +6061,8 @@ gc_marks_finish(rb_objspace_t *objspace) gc_report(1, objspace, "gc_marks_finish (marks %"PRIdSIZE" objects, " "old %"PRIdSIZE" objects, total %"PRIdSIZE" slots, " - "sweep %"PRIdSIZE" slots, increment: %"PRIdSIZE", next GC: %s)\n", - objspace->marked_slots, objspace->rgengc.old_objects, heap_eden_total_slots(objspace), sweep_slots, heap_allocatable_pages(objspace), + "sweep %"PRIdSIZE" slots, allocatable %"PRIdSIZE" slots, next GC: %s)\n", + objspace->marked_slots, objspace->rgengc.old_objects, objspace_available_slots(objspace), sweep_slots, objspace->heap_pages.allocatable_slots, gc_needs_major_flags ? "major" : "minor"); } @@ -6337,8 +6079,8 @@ gc_compact_heap_cursors_met_p(rb_heap_t *heap) } -static rb_size_pool_t * -gc_compact_destination_pool(rb_objspace_t *objspace, rb_size_pool_t *src_pool, VALUE obj) +static rb_heap_t * +gc_compact_destination_pool(rb_objspace_t *objspace, rb_heap_t *src_pool, VALUE obj) { size_t obj_size = rb_gc_obj_optimal_size(obj); if (obj_size == 0) { @@ -6347,42 +6089,41 @@ gc_compact_destination_pool(rb_objspace_t *objspace, rb_size_pool_t *src_pool, V size_t idx = 0; if (rb_gc_impl_size_allocatable_p(obj_size)) { - idx = size_pool_idx_for_size(obj_size); + idx = heap_idx_for_size(obj_size); } - return &size_pools[idx]; + return &heaps[idx]; } static bool -gc_compact_move(rb_objspace_t *objspace, rb_heap_t *heap, rb_size_pool_t *size_pool, VALUE src) +gc_compact_move(rb_objspace_t *objspace, rb_heap_t *heap, VALUE src) { GC_ASSERT(BUILTIN_TYPE(src) != T_MOVED); GC_ASSERT(gc_is_moveable_obj(objspace, src)); - rb_size_pool_t *dest_pool = gc_compact_destination_pool(objspace, size_pool, src); - rb_heap_t *dheap = SIZE_POOL_EDEN_HEAP(dest_pool); + rb_heap_t *dest_pool = gc_compact_destination_pool(objspace, heap, src); uint32_t orig_shape = 0; uint32_t new_shape = 0; - if (gc_compact_heap_cursors_met_p(dheap)) { - return dheap != heap; + if (gc_compact_heap_cursors_met_p(dest_pool)) { + return dest_pool != heap; } if (RB_TYPE_P(src, T_OBJECT)) { orig_shape = rb_gc_get_shape(src); - if (dheap != heap) { - new_shape = rb_gc_rebuild_shape(src, dest_pool - size_pools); + if (dest_pool != heap) { + new_shape = rb_gc_rebuild_shape(src, dest_pool - heaps); if (new_shape == 0) { - dheap = heap; + dest_pool = heap; } } } - while (!try_move(objspace, dheap, dheap->free_pages, src)) { + while (!try_move(objspace, dest_pool, dest_pool->free_pages, src)) { struct gc_sweep_context ctx = { - .page = dheap->sweeping_page, + .page = dest_pool->sweeping_page, .final_slots = 0, .freed_slots = 0, .empty_slots = 0, @@ -6392,16 +6133,16 @@ gc_compact_move(rb_objspace_t *objspace, rb_heap_t *heap, rb_size_pool_t *size_p * T_MOVED. Sweeping a page may read objects on this page, so we * need to lock the page. */ lock_page_body(objspace, GET_PAGE_BODY(src)); - gc_sweep_page(objspace, dheap, &ctx); + gc_sweep_page(objspace, dest_pool, &ctx); unlock_page_body(objspace, GET_PAGE_BODY(src)); - if (dheap->sweeping_page->free_slots > 0) { - heap_add_freepage(dheap, dheap->sweeping_page); + if (dest_pool->sweeping_page->free_slots > 0) { + heap_add_freepage(dest_pool, dest_pool->sweeping_page); } - dheap->sweeping_page = ccan_list_next(&dheap->pages, dheap->sweeping_page, page_node); - if (gc_compact_heap_cursors_met_p(dheap)) { - return dheap != heap; + dest_pool->sweeping_page = ccan_list_next(&dest_pool->pages, dest_pool->sweeping_page, page_node); + if (gc_compact_heap_cursors_met_p(dest_pool)) { + return dest_pool != heap; } } @@ -6417,7 +6158,7 @@ gc_compact_move(rb_objspace_t *objspace, rb_heap_t *heap, rb_size_pool_t *size_p } static bool -gc_compact_plane(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_t *heap, uintptr_t p, bits_t bitset, struct heap_page *page) +gc_compact_plane(rb_objspace_t *objspace, rb_heap_t *heap, uintptr_t p, bits_t bitset, struct heap_page *page) { short slot_size = page->slot_size; short slot_bits = slot_size / BASE_SLOT_SIZE; @@ -6431,7 +6172,7 @@ gc_compact_plane(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_t * objspace->rcompactor.considered_count_table[BUILTIN_TYPE(vp)]++; if (gc_is_moveable_obj(objspace, vp)) { - if (!gc_compact_move(objspace, heap, size_pool, vp)) { + if (!gc_compact_move(objspace, heap, vp)) { //the cursors met. bubble up return false; } @@ -6446,7 +6187,7 @@ gc_compact_plane(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_t * // Iterate up all the objects in page, moving them to where they want to go static bool -gc_compact_page(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_t *heap, struct heap_page *page) +gc_compact_page(rb_objspace_t *objspace, rb_heap_t *heap, struct heap_page *page) { GC_ASSERT(page == heap->compact_cursor); @@ -6461,7 +6202,7 @@ gc_compact_page(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_t *h bitset = (mark_bits[0] & ~pin_bits[0]); bitset >>= NUM_IN_PAGE(p); if (bitset) { - if (!gc_compact_plane(objspace, size_pool, heap, (uintptr_t)p, bitset, page)) + if (!gc_compact_plane(objspace, heap, (uintptr_t)p, bitset, page)) return false; } p += (BITS_BITLENGTH - NUM_IN_PAGE(p)) * BASE_SLOT_SIZE; @@ -6469,7 +6210,7 @@ gc_compact_page(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_t *h for (int j = 1; j < HEAP_PAGE_BITMAP_LIMIT; j++) { bitset = (mark_bits[j] & ~pin_bits[j]); if (bitset) { - if (!gc_compact_plane(objspace, size_pool, heap, (uintptr_t)p, bitset, page)) + if (!gc_compact_plane(objspace, heap, (uintptr_t)p, bitset, page)) return false; } p += BITS_BITLENGTH * BASE_SLOT_SIZE; @@ -6481,9 +6222,8 @@ gc_compact_page(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_t *h static bool gc_compact_all_compacted_p(rb_objspace_t *objspace) { - for (int i = 0; i < SIZE_POOL_COUNT; i++) { - rb_size_pool_t *size_pool = &size_pools[i]; - rb_heap_t *heap = SIZE_POOL_EDEN_HEAP(size_pool); + for (int i = 0; i < HEAP_COUNT; i++) { + rb_heap_t *heap = &heaps[i]; if (heap->total_pages > 0 && !gc_compact_heap_cursors_met_p(heap)) { @@ -6503,9 +6243,8 @@ gc_sweep_compact(rb_objspace_t *objspace) #endif while (!gc_compact_all_compacted_p(objspace)) { - for (int i = 0; i < SIZE_POOL_COUNT; i++) { - rb_size_pool_t *size_pool = &size_pools[i]; - rb_heap_t *heap = SIZE_POOL_EDEN_HEAP(size_pool); + for (int i = 0; i < HEAP_COUNT; i++) { + rb_heap_t *heap = &heaps[i]; if (gc_compact_heap_cursors_met_p(heap)) { continue; @@ -6513,15 +6252,15 @@ gc_sweep_compact(rb_objspace_t *objspace) struct heap_page *start_page = heap->compact_cursor; - if (!gc_compact_page(objspace, size_pool, heap, start_page)) { - lock_page_body(objspace, GET_PAGE_BODY(start_page->start)); + if (!gc_compact_page(objspace, heap, start_page)) { + lock_page_body(objspace, start_page->body); continue; } // If we get here, we've finished moving all objects on the compact_cursor page // So we can lock it and move the cursor on to the next one. - lock_page_body(objspace, GET_PAGE_BODY(start_page->start)); + lock_page_body(objspace, start_page->body); heap->compact_cursor = ccan_list_prev(&heap->pages, heap->compact_cursor, page_node); } } @@ -6538,8 +6277,8 @@ gc_marks_rest(rb_objspace_t *objspace) { gc_report(1, objspace, "gc_marks_rest\n"); - for (int i = 0; i < SIZE_POOL_COUNT; i++) { - SIZE_POOL_EDEN_HEAP(&size_pools[i])->pooled_pages = NULL; + for (int i = 0; i < HEAP_COUNT; i++) { + (&heaps[i])->pooled_pages = NULL; } if (is_incremental_marking(objspace)) { @@ -6568,7 +6307,7 @@ gc_marks_step(rb_objspace_t *objspace, size_t slots) } static bool -gc_marks_continue(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_t *heap) +gc_marks_continue(rb_objspace_t *objspace, rb_heap_t *heap) { GC_ASSERT(dont_gc_val() == FALSE || objspace->profile.latest_gc_info & GPR_FLAG_METHOD); bool marking_finished = true; @@ -6583,7 +6322,7 @@ gc_marks_continue(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_t else { gc_report(2, objspace, "gc_marks_continue: no more pooled pages (stack depth: %"PRIdSIZE").\n", mark_stack_size(&objspace->mark_stack)); - size_pool->force_incremental_marking_finish_count++; + heap->force_incremental_marking_finish_count++; gc_marks_rest(objspace); } @@ -6617,9 +6356,8 @@ gc_marks_start(rb_objspace_t *objspace, int full_mark) objspace->rgengc.last_major_gc = objspace->profile.count; objspace->marked_slots = 0; - for (int i = 0; i < SIZE_POOL_COUNT; i++) { - rb_size_pool_t *size_pool = &size_pools[i]; - rb_heap_t *heap = SIZE_POOL_EDEN_HEAP(size_pool); + for (int i = 0; i < HEAP_COUNT; i++) { + rb_heap_t *heap = &heaps[i]; rgengc_mark_and_rememberset_clear(objspace, heap); heap_move_pooled_pages_to_free_pages(heap); @@ -6638,8 +6376,8 @@ gc_marks_start(rb_objspace_t *objspace, int full_mark) objspace->rgengc.old_objects + objspace->rgengc.uncollectible_wb_unprotected_objects; /* uncollectible objects are marked already */ objspace->profile.minor_gc_count++; - for (int i = 0; i < SIZE_POOL_COUNT; i++) { - rgengc_rememberset_mark(objspace, SIZE_POOL_EDEN_HEAP(&size_pools[i])); + for (int i = 0; i < HEAP_COUNT; i++) { + rgengc_rememberset_mark(objspace, &heaps[i]); } } @@ -6942,6 +6680,13 @@ rb_gc_impl_writebarrier(void *objspace_ptr, VALUE a, VALUE b) if (SPECIAL_CONST_P(b)) rb_bug("rb_gc_writebarrier: b is special const: %"PRIxVALUE, b); } + GC_ASSERT(RB_BUILTIN_TYPE(a) != T_NONE); + GC_ASSERT(RB_BUILTIN_TYPE(a) != T_MOVED); + GC_ASSERT(RB_BUILTIN_TYPE(a) != T_ZOMBIE); + GC_ASSERT(RB_BUILTIN_TYPE(b) != T_NONE); + GC_ASSERT(RB_BUILTIN_TYPE(b) != T_MOVED); + GC_ASSERT(RB_BUILTIN_TYPE(b) != T_ZOMBIE); + retry: if (!is_incremental_marking(objspace)) { if (!RVALUE_OLD_P(objspace, a) || RVALUE_OLD_P(objspace, b)) { @@ -7128,12 +6873,12 @@ rb_gc_impl_ractor_cache_free(void *objspace_ptr, void *cache) } static void -heap_ready_to_gc(rb_objspace_t *objspace, rb_size_pool_t *size_pool, rb_heap_t *heap) +heap_ready_to_gc(rb_objspace_t *objspace, rb_heap_t *heap) { if (!heap->free_pages) { - if (!heap_increment(objspace, size_pool, heap)) { - size_pool_allocatable_pages_set(objspace, size_pool, 1); - heap_increment(objspace, size_pool, heap); + if (!heap_page_allocate_and_initialize(objspace, heap)) { + objspace->heap_pages.allocatable_slots = 1; + heap_page_allocate_and_initialize(objspace, heap); } } } @@ -7142,9 +6887,9 @@ static int ready_to_gc(rb_objspace_t *objspace) { if (dont_gc_val() || during_gc || ruby_disable_gc) { - for (int i = 0; i < SIZE_POOL_COUNT; i++) { - rb_size_pool_t *size_pool = &size_pools[i]; - heap_ready_to_gc(objspace, size_pool, SIZE_POOL_EDEN_HEAP(size_pool)); + for (int i = 0; i < HEAP_COUNT; i++) { + rb_heap_t *heap = &heaps[i]; + heap_ready_to_gc(objspace, heap); } return FALSE; } @@ -7265,7 +7010,7 @@ gc_start(rb_objspace_t *objspace, unsigned int reason) /* reason may be clobbered, later, so keep set immediate_sweep here */ objspace->flags.immediate_sweep = !!(reason & GPR_FLAG_IMMEDIATE_SWEEP); - if (!heap_allocated_pages) return TRUE; /* heap is not ready */ + if (!rb_darray_size(objspace->heap_pages.sorted)) return TRUE; /* heap is not ready */ if (!(reason & GPR_FLAG_METHOD) && !ready_to_gc(objspace)) return TRUE; /* GC is not allowed */ GC_ASSERT(gc_mode(objspace) == gc_mode_none); @@ -7362,7 +7107,7 @@ gc_start(rb_objspace_t *objspace, unsigned int reason) objspace->profile.count++; objspace->profile.latest_gc_info = reason; objspace->profile.total_allocated_objects_at_gc_start = total_allocated_objects(objspace); - objspace->profile.heap_used_at_gc_start = heap_allocated_pages; + objspace->profile.heap_used_at_gc_start = rb_darray_size(objspace->heap_pages.sorted); objspace->profile.weak_references_count = 0; objspace->profile.retained_weak_references_count = 0; gc_prof_setup_new_record(objspace, reason); @@ -7524,7 +7269,7 @@ gc_clock_start(struct timespec *ts) } } -static uint64_t +static unsigned long long gc_clock_end(struct timespec *ts) { struct timespec end_time; @@ -7532,7 +7277,7 @@ gc_clock_end(struct timespec *ts) if ((ts->tv_sec > 0 || ts->tv_nsec > 0) && current_process_time(&end_time) && end_time.tv_sec >= ts->tv_sec) { - return (uint64_t)(end_time.tv_sec - ts->tv_sec) * (1000 * 1000 * 1000) + + return (unsigned long long)(end_time.tv_sec - ts->tv_sec) * (1000 * 1000 * 1000) + (end_time.tv_nsec - ts->tv_nsec); } @@ -7737,56 +7482,32 @@ rb_gc_impl_start(void *objspace_ptr, bool full_mark, bool immediate_mark, bool i #endif } -static void -free_empty_pages(void *objspace_ptr) +void +rb_gc_impl_prepare_heap(void *objspace_ptr) { rb_objspace_t *objspace = objspace_ptr; - for (int i = 0; i < SIZE_POOL_COUNT; i++) { - /* Move all empty pages to the tomb heap for freeing. */ - rb_size_pool_t *size_pool = &size_pools[i]; - rb_heap_t *heap = SIZE_POOL_EDEN_HEAP(size_pool); - rb_heap_t *tomb_heap = SIZE_POOL_TOMB_HEAP(size_pool); + size_t orig_total_slots = objspace_available_slots(objspace); + size_t orig_allocatable_slots = objspace->heap_pages.allocatable_slots; - size_t freed_pages = 0; + rb_gc_impl_each_objects(objspace, gc_set_candidate_object_i, objspace_ptr); - struct heap_page **next_page_ptr = &heap->free_pages; - struct heap_page *page = heap->free_pages; - while (page) { - /* All finalizers should have been ran in gc_start_internal, so there - * should be no objects that require finalization. */ - GC_ASSERT(page->final_slots == 0); + double orig_max_free_slots = gc_params.heap_free_slots_max_ratio; + /* Ensure that all empty pages are moved onto empty_pages. */ + gc_params.heap_free_slots_max_ratio = 0.0; + rb_gc_impl_start(objspace, true, true, true, true); + gc_params.heap_free_slots_max_ratio = orig_max_free_slots; - struct heap_page *next_page = page->free_next; + objspace->heap_pages.allocatable_slots = 0; + heap_pages_free_unused_pages(objspace_ptr); + GC_ASSERT(objspace->empty_pages_count == 0); + objspace->heap_pages.allocatable_slots = orig_allocatable_slots; - if (page->free_slots == page->total_slots) { - heap_unlink_page(objspace, heap, page); - heap_add_page(objspace, size_pool, tomb_heap, page); - freed_pages++; - } - else { - *next_page_ptr = page; - next_page_ptr = &page->free_next; - } - - page = next_page; - } - - *next_page_ptr = NULL; - - size_pool_allocatable_pages_set(objspace, size_pool, size_pool->allocatable_pages + freed_pages); + size_t total_slots = objspace_available_slots(objspace); + if (orig_total_slots > total_slots) { + objspace->heap_pages.allocatable_slots += orig_total_slots - total_slots; } - heap_pages_free_unused_pages(objspace); -} - -void -rb_gc_impl_prepare_heap(void *objspace_ptr) -{ - rb_gc_impl_each_objects(objspace_ptr, gc_set_candidate_object_i, objspace_ptr); - rb_gc_impl_start(objspace_ptr, true, true, true, true); - free_empty_pages(objspace_ptr); - #if defined(HAVE_MALLOC_TRIM) && !defined(RUBY_ALTERNATIVE_MALLOC_HEADER) malloc_trim(0); #endif @@ -7971,8 +7692,8 @@ gc_move(rb_objspace_t *objspace, VALUE src, VALUE dest, size_t src_slot_size, si RMOVED(src)->destination = dest; GC_ASSERT(BUILTIN_TYPE(dest) != T_NONE); - GET_HEAP_PAGE(src)->size_pool->total_freed_objects++; - GET_HEAP_PAGE(dest)->size_pool->total_allocated_objects++; + GET_HEAP_PAGE(src)->heap->total_freed_objects++; + GET_HEAP_PAGE(dest)->heap->total_allocated_objects++; return src; } @@ -8005,16 +7726,16 @@ compare_free_slots(const void *left, const void *right, void *dummy) static void gc_sort_heap_by_compare_func(rb_objspace_t *objspace, gc_compact_compare_func compare_func) { - for (int j = 0; j < SIZE_POOL_COUNT; j++) { - rb_size_pool_t *size_pool = &size_pools[j]; + for (int j = 0; j < HEAP_COUNT; j++) { + rb_heap_t *heap = &heaps[j]; - size_t total_pages = SIZE_POOL_EDEN_HEAP(size_pool)->total_pages; + size_t total_pages = heap->total_pages; size_t size = rb_size_mul_or_raise(total_pages, sizeof(struct heap_page *), rb_eRuntimeError); struct heap_page *page = 0, **page_list = malloc(size); size_t i = 0; - SIZE_POOL_EDEN_HEAP(size_pool)->free_pages = NULL; - ccan_list_for_each(&SIZE_POOL_EDEN_HEAP(size_pool)->pages, page, page_node) { + heap->free_pages = NULL; + ccan_list_for_each(&heap->pages, page, page_node) { page_list[i++] = page; GC_ASSERT(page); } @@ -8026,12 +7747,12 @@ gc_sort_heap_by_compare_func(rb_objspace_t *objspace, gc_compact_compare_func co ruby_qsort(page_list, total_pages, sizeof(struct heap_page *), compare_func, NULL); /* Reset the eden heap */ - ccan_list_head_init(&SIZE_POOL_EDEN_HEAP(size_pool)->pages); + ccan_list_head_init(&heap->pages); for (i = 0; i < total_pages; i++) { - ccan_list_add(&SIZE_POOL_EDEN_HEAP(size_pool)->pages, &page_list[i]->page_node); + ccan_list_add(&heap->pages, &page_list[i]->page_node); if (page_list[i]->free_slots != 0) { - heap_add_freepage(SIZE_POOL_EDEN_HEAP(size_pool), page_list[i]); + heap_add_freepage(heap, page_list[i]); } } @@ -8057,32 +7778,28 @@ gc_ref_update(void *vstart, void *vend, size_t stride, rb_objspace_t *objspace, /* For each object on the page */ for (; v != (VALUE)vend; v += stride) { - void *poisoned = asan_unpoison_object_temporary(v); - - switch (BUILTIN_TYPE(v)) { - case T_NONE: - case T_MOVED: - case T_ZOMBIE: - break; - default: - if (RVALUE_WB_UNPROTECTED(objspace, v)) { - page->flags.has_uncollectible_wb_unprotected_objects = TRUE; - } - if (RVALUE_REMEMBERED(objspace, v)) { - page->flags.has_remembered_objects = TRUE; - } - if (page->flags.before_sweep) { - if (RVALUE_MARKED(objspace, v)) { + asan_unpoisoning_object(v) { + switch (BUILTIN_TYPE(v)) { + case T_NONE: + case T_MOVED: + case T_ZOMBIE: + break; + default: + if (RVALUE_WB_UNPROTECTED(objspace, v)) { + page->flags.has_uncollectible_wb_unprotected_objects = TRUE; + } + if (RVALUE_REMEMBERED(objspace, v)) { + page->flags.has_remembered_objects = TRUE; + } + if (page->flags.before_sweep) { + if (RVALUE_MARKED(objspace, v)) { + rb_gc_update_object_references(objspace, v); + } + } + else { rb_gc_update_object_references(objspace, v); } } - else { - rb_gc_update_object_references(objspace, v); - } - } - - if (poisoned) { - asan_poison_object(v); } } @@ -8096,16 +7813,15 @@ gc_update_references(rb_objspace_t *objspace) struct heap_page *page = NULL; - for (int i = 0; i < SIZE_POOL_COUNT; i++) { + for (int i = 0; i < HEAP_COUNT; i++) { bool should_set_mark_bits = TRUE; - rb_size_pool_t *size_pool = &size_pools[i]; - rb_heap_t *heap = SIZE_POOL_EDEN_HEAP(size_pool); + rb_heap_t *heap = &heaps[i]; ccan_list_for_each(&heap->pages, page, page_node) { uintptr_t start = (uintptr_t)page->start; - uintptr_t end = start + (page->total_slots * size_pool->slot_size); + uintptr_t end = start + (page->total_slots * heap->slot_size); - gc_ref_update((void *)start, (void *)end, size_pool->slot_size, objspace, page); + gc_ref_update((void *)start, (void *)end, heap->slot_size, objspace, page); if (page == heap->sweeping_page) { should_set_mark_bits = FALSE; } @@ -8154,22 +7870,17 @@ heap_check_moved_i(void *vstart, void *vend, size_t stride, void *data) /* Moved object still on the heap, something may have a reference. */ } else { - void *poisoned = asan_unpoison_object_temporary(v); - - switch (BUILTIN_TYPE(v)) { - case T_NONE: - case T_ZOMBIE: - break; - default: - if (!rb_gc_impl_garbage_object_p(objspace, v)) { - rb_objspace_reachable_objects_from(v, reachable_object_check_moved_i, (void *)v); + asan_unpoisoning_object(v) { + switch (BUILTIN_TYPE(v)) { + case T_NONE: + case T_ZOMBIE: + break; + default: + if (!rb_gc_impl_garbage_object_p(objspace, v)) { + rb_objspace_reachable_objects_from(v, reachable_object_check_moved_i, (void *)v); + } } } - - if (poisoned) { - GC_ASSERT(BUILTIN_TYPE(v) == T_NONE); - asan_poison_object(v); - } } } @@ -8177,38 +7888,6 @@ heap_check_moved_i(void *vstart, void *vend, size_t stride, void *data) } #endif -struct desired_compaction_pages_i_data { - rb_objspace_t *objspace; - size_t required_slots[SIZE_POOL_COUNT]; -}; - -static int -desired_compaction_pages_i(struct heap_page *page, void *data) -{ - struct desired_compaction_pages_i_data *tdata = data; - rb_objspace_t *objspace = tdata->objspace; - VALUE vstart = (VALUE)page->start; - VALUE vend = vstart + (VALUE)(page->total_slots * page->size_pool->slot_size); - - - for (VALUE v = vstart; v != vend; v += page->size_pool->slot_size) { - /* skip T_NONEs; they won't be moved */ - void *poisoned = asan_unpoison_object_temporary(v); - if (BUILTIN_TYPE(v) == T_NONE) { - if (poisoned) { - asan_poison_object(v); - } - continue; - } - - rb_size_pool_t *dest_pool = gc_compact_destination_pool(objspace, page->size_pool, v); - size_t dest_pool_idx = dest_pool - size_pools; - tdata->required_slots[dest_pool_idx]++; - } - - return 0; -} - bool rb_gc_impl_during_gc_p(void *objspace_ptr) { @@ -8405,15 +8084,14 @@ enum gc_stat_sym { gc_stat_sym_marking_time, gc_stat_sym_sweeping_time, gc_stat_sym_heap_allocated_pages, - gc_stat_sym_heap_sorted_length, - gc_stat_sym_heap_allocatable_pages, + gc_stat_sym_heap_empty_pages, + gc_stat_sym_heap_allocatable_slots, gc_stat_sym_heap_available_slots, gc_stat_sym_heap_live_slots, gc_stat_sym_heap_free_slots, gc_stat_sym_heap_final_slots, gc_stat_sym_heap_marked_slots, gc_stat_sym_heap_eden_pages, - gc_stat_sym_heap_tomb_pages, gc_stat_sym_total_allocated_pages, gc_stat_sym_total_freed_pages, gc_stat_sym_total_allocated_objects, @@ -8464,15 +8142,14 @@ setup_gc_stat_symbols(void) S(marking_time), S(sweeping_time), S(heap_allocated_pages); - S(heap_sorted_length); - S(heap_allocatable_pages); + S(heap_empty_pages); + S(heap_allocatable_slots); S(heap_available_slots); S(heap_live_slots); S(heap_free_slots); S(heap_final_slots); S(heap_marked_slots); S(heap_eden_pages); - S(heap_tomb_pages); S(total_allocated_pages); S(total_freed_pages); S(total_allocated_objects); @@ -8560,18 +8237,17 @@ rb_gc_impl_stat(void *objspace_ptr, VALUE hash_or_sym) #if USE_MMTK if (!rb_mmtk_enabled_p()) { #endif - SET(heap_allocated_pages, heap_allocated_pages); - SET(heap_sorted_length, heap_pages_sorted_length); - SET(heap_allocatable_pages, heap_allocatable_pages(objspace)); + SET(heap_allocated_pages, rb_darray_size(objspace->heap_pages.sorted)); + SET(heap_empty_pages, objspace->empty_pages_count) + SET(heap_allocatable_slots, objspace->heap_pages.allocatable_slots); SET(heap_available_slots, objspace_available_slots(objspace)); SET(heap_live_slots, objspace_live_slots(objspace)); SET(heap_free_slots, objspace_free_slots(objspace)); SET(heap_final_slots, total_final_slots_count(objspace)); SET(heap_marked_slots, objspace->marked_slots); SET(heap_eden_pages, heap_eden_total_pages(objspace)); - SET(heap_tomb_pages, heap_tomb_total_pages(objspace)); - SET(total_allocated_pages, total_allocated_pages(objspace)); - SET(total_freed_pages, total_freed_pages(objspace)); + SET(total_allocated_pages, objspace->heap_pages.allocated_pages); + SET(total_freed_pages, objspace->heap_pages.freed_pages); SET(total_allocated_objects, total_allocated_objects(objspace)); SET(total_freed_objects, total_freed_objects(objspace)); SET(minor_gc_count, objspace->profile.minor_gc_count); @@ -8631,13 +8307,9 @@ rb_gc_impl_stat(void *objspace_ptr, VALUE hash_or_sym) enum gc_stat_heap_sym { gc_stat_heap_sym_slot_size, - gc_stat_heap_sym_heap_allocatable_pages, gc_stat_heap_sym_heap_eden_pages, gc_stat_heap_sym_heap_eden_slots, - gc_stat_heap_sym_heap_tomb_pages, - gc_stat_heap_sym_heap_tomb_slots, gc_stat_heap_sym_total_allocated_pages, - gc_stat_heap_sym_total_freed_pages, gc_stat_heap_sym_force_major_gc_count, gc_stat_heap_sym_force_incremental_marking_finish_count, gc_stat_heap_sym_total_allocated_objects, @@ -8653,13 +8325,9 @@ setup_gc_stat_heap_symbols(void) if (gc_stat_heap_symbols[0] == 0) { #define S(s) gc_stat_heap_symbols[gc_stat_heap_sym_##s] = ID2SYM(rb_intern_const(#s)) S(slot_size); - S(heap_allocatable_pages); S(heap_eden_pages); S(heap_eden_slots); - S(heap_tomb_pages); - S(heap_tomb_slots); S(total_allocated_pages); - S(total_freed_pages); S(force_major_gc_count); S(force_incremental_marking_finish_count); S(total_allocated_objects); @@ -8669,7 +8337,7 @@ setup_gc_stat_heap_symbols(void) } static size_t -stat_one_heap(rb_size_pool_t *size_pool, VALUE hash, VALUE key) +stat_one_heap(rb_heap_t *heap, VALUE hash, VALUE key) { #define SET(name, attr) \ if (key == gc_stat_heap_symbols[gc_stat_heap_sym_##name]) \ @@ -8677,18 +8345,14 @@ stat_one_heap(rb_size_pool_t *size_pool, VALUE hash, VALUE key) else if (hash != Qnil) \ rb_hash_aset(hash, gc_stat_heap_symbols[gc_stat_heap_sym_##name], SIZET2NUM(attr)); - SET(slot_size, size_pool->slot_size); - SET(heap_allocatable_pages, size_pool->allocatable_pages); - SET(heap_eden_pages, SIZE_POOL_EDEN_HEAP(size_pool)->total_pages); - SET(heap_eden_slots, SIZE_POOL_EDEN_HEAP(size_pool)->total_slots); - SET(heap_tomb_pages, SIZE_POOL_TOMB_HEAP(size_pool)->total_pages); - SET(heap_tomb_slots, SIZE_POOL_TOMB_HEAP(size_pool)->total_slots); - SET(total_allocated_pages, size_pool->total_allocated_pages); - SET(total_freed_pages, size_pool->total_freed_pages); - SET(force_major_gc_count, size_pool->force_major_gc_count); - SET(force_incremental_marking_finish_count, size_pool->force_incremental_marking_finish_count); - SET(total_allocated_objects, size_pool->total_allocated_objects); - SET(total_freed_objects, size_pool->total_freed_objects); + SET(slot_size, heap->slot_size); + SET(heap_eden_pages, heap->total_pages); + SET(heap_eden_slots, heap->total_slots); + SET(total_allocated_pages, heap->total_allocated_pages); + SET(force_major_gc_count, heap->force_major_gc_count); + SET(force_incremental_marking_finish_count, heap->force_incremental_marking_finish_count); + SET(total_allocated_objects, heap->total_allocated_objects); + SET(total_freed_objects, heap->total_freed_objects); #undef SET if (!NIL_P(key)) { /* matched key should return above */ @@ -8710,28 +8374,28 @@ rb_gc_impl_stat_heap(void *objspace_ptr, VALUE heap_name, VALUE hash_or_sym) rb_raise(rb_eTypeError, "non-hash given"); } - for (int i = 0; i < SIZE_POOL_COUNT; i++) { + for (int i = 0; i < HEAP_COUNT; i++) { VALUE hash = rb_hash_aref(hash_or_sym, INT2FIX(i)); if (NIL_P(hash)) { hash = rb_hash_new(); rb_hash_aset(hash_or_sym, INT2FIX(i), hash); } - stat_one_heap(&size_pools[i], hash, Qnil); + stat_one_heap(&heaps[i], hash, Qnil); } } else if (FIXNUM_P(heap_name)) { - int size_pool_idx = FIX2INT(heap_name); + int heap_idx = FIX2INT(heap_name); - if (size_pool_idx < 0 || size_pool_idx >= SIZE_POOL_COUNT) { + if (heap_idx < 0 || heap_idx >= HEAP_COUNT) { rb_raise(rb_eArgError, "size pool index out of range"); } if (SYMBOL_P(hash_or_sym)) { - return stat_one_heap(&size_pools[size_pool_idx], Qnil, hash_or_sym); + return stat_one_heap(&heaps[heap_idx], Qnil, hash_or_sym); } else if (RB_TYPE_P(hash_or_sym, T_HASH)) { - return stat_one_heap(&size_pools[size_pool_idx], hash_or_sym, Qnil); + return stat_one_heap(&heaps[heap_idx], hash_or_sym, Qnil); } else { rb_raise(rb_eTypeError, "non-hash or symbol given"); @@ -8905,34 +8569,6 @@ get_envparam_double(const char *name, double *default_value, double lower_bound, return 1; } -static void -gc_set_initial_pages(rb_objspace_t *objspace) -{ - gc_rest(objspace); - - for (int i = 0; i < SIZE_POOL_COUNT; i++) { - rb_size_pool_t *size_pool = &size_pools[i]; - char env_key[sizeof("RUBY_GC_HEAP_" "_INIT_SLOTS") + DECIMAL_SIZE_OF_BITS(sizeof(int) * CHAR_BIT)]; - snprintf(env_key, sizeof(env_key), "RUBY_GC_HEAP_%d_INIT_SLOTS", i); - - size_t size_pool_init_slots = gc_params.size_pool_init_slots[i]; - if (get_envparam_size(env_key, &size_pool_init_slots, 0)) { - gc_params.size_pool_init_slots[i] = size_pool_init_slots; - } - - if (size_pool_init_slots > size_pool->eden_heap.total_slots) { - size_t slots = size_pool_init_slots - size_pool->eden_heap.total_slots; - size_pool->allocatable_pages = slots_to_pages_for_size_pool(objspace, size_pool, slots); - } - else { - /* We already have more slots than size_pool_init_slots allows, so - * prevent creating more pages. */ - size_pool->allocatable_pages = 0; - } - } - heap_pages_expand_sorted(objspace); -} - /* * GC tuning environment variables * @@ -8982,7 +8618,12 @@ rb_gc_impl_set_params(void *objspace_ptr) /* ok */ } - gc_set_initial_pages(objspace); + for (int i = 0; i < HEAP_COUNT; i++) { + char env_key[sizeof("RUBY_GC_HEAP_" "_INIT_SLOTS") + DECIMAL_SIZE_OF_BITS(sizeof(int) * CHAR_BIT)]; + snprintf(env_key, sizeof(env_key), "RUBY_GC_HEAP_%d_INIT_SLOTS", i); + + get_envparam_size(env_key, &gc_params.heap_init_slots[i], 0); + } get_envparam_double("RUBY_GC_HEAP_GROWTH_FACTOR", &gc_params.growth_factor, 1.0, 0.0, FALSE); get_envparam_size ("RUBY_GC_HEAP_GROWTH_MAX_SLOTS", &gc_params.growth_max_slots, 0); @@ -10196,6 +9837,34 @@ gc_compact(VALUE self) #endif #if GC_CAN_COMPILE_COMPACTION +struct desired_compaction_pages_i_data { + rb_objspace_t *objspace; + size_t required_slots[HEAP_COUNT]; +}; + +static int +desired_compaction_pages_i(struct heap_page *page, void *data) +{ + struct desired_compaction_pages_i_data *tdata = data; + rb_objspace_t *objspace = tdata->objspace; + VALUE vstart = (VALUE)page->start; + VALUE vend = vstart + (VALUE)(page->total_slots * page->heap->slot_size); + + + for (VALUE v = vstart; v != vend; v += page->heap->slot_size) { + asan_unpoisoning_object(v) { + /* skip T_NONEs; they won't be moved */ + if (BUILTIN_TYPE(v) != T_NONE) { + rb_heap_t *dest_pool = gc_compact_destination_pool(objspace, page->heap, v); + size_t dest_pool_idx = dest_pool - heaps; + tdata->required_slots[dest_pool_idx]++; + } + } + } + + return 0; +} + /* call-seq: * GC.verify_compaction_references(toward: nil, double_heap: false) -> hash * @@ -10249,15 +9918,14 @@ gc_verify_compaction_references(int argc, VALUE* argv, VALUE self) /* Find out which pool has the most pages */ size_t max_existing_pages = 0; - for (int i = 0; i < SIZE_POOL_COUNT; i++) { - rb_size_pool_t *size_pool = &size_pools[i]; - rb_heap_t *heap = SIZE_POOL_EDEN_HEAP(size_pool); + for (int i = 0; i < HEAP_COUNT; i++) { + rb_heap_t *heap = &heaps[i]; max_existing_pages = MAX(max_existing_pages, heap->total_pages); } + /* Add pages to each size pool so that compaction is guaranteed to move every object */ - for (int i = 0; i < SIZE_POOL_COUNT; i++) { - rb_size_pool_t *size_pool = &size_pools[i]; - rb_heap_t *heap = SIZE_POOL_EDEN_HEAP(size_pool); + for (int i = 0; i < HEAP_COUNT; i++) { + rb_heap_t *heap = &heaps[i]; size_t pages_to_add = 0; /* @@ -10271,14 +9939,19 @@ gc_verify_compaction_references(int argc, VALUE* argv, VALUE self) * Step 2: Now add additional free pages to each size pool sufficient to hold all objects * that want to be in that size pool, whether moved into it or moved within it */ - pages_to_add += slots_to_pages_for_size_pool(objspace, size_pool, desired_compaction.required_slots[i]); + objspace->heap_pages.allocatable_slots = desired_compaction.required_slots[i]; + while (objspace->heap_pages.allocatable_slots > 0) { + heap_page_allocate_and_initialize(objspace, heap); + } /* * Step 3: Add two more pages so that the compact & sweep cursors will meet _after_ all objects * have been moved, and not on the last iteration of the `gc_sweep_compact` loop */ pages_to_add += 2; - heap_add_pages(objspace, size_pool, heap, pages_to_add); + for (; pages_to_add > 0; pages_to_add--) { + heap_page_allocate_and_initialize_force(objspace, heap); + } } } @@ -10312,24 +9985,19 @@ rb_gc_impl_objspace_free(void *objspace_ptr) free(objspace->profile.records); objspace->profile.records = NULL; - if (heap_pages_sorted) { - size_t i; - size_t total_heap_pages = heap_allocated_pages; - for (i = 0; i < total_heap_pages; ++i) { - heap_page_free(objspace, heap_pages_sorted[i]); - } - free(heap_pages_sorted); - heap_allocated_pages = 0; - heap_pages_sorted_length = 0; - heap_pages_lomem = 0; - heap_pages_himem = 0; + for (size_t i = 0; i < rb_darray_size(objspace->heap_pages.sorted); i++) { + heap_page_free(objspace, rb_darray_get(objspace->heap_pages.sorted, i)); + } + rb_darray_free(objspace->heap_pages.sorted); + heap_pages_lomem = 0; + heap_pages_himem = 0; - for (int i = 0; i < SIZE_POOL_COUNT; i++) { - rb_size_pool_t *size_pool = &size_pools[i]; - SIZE_POOL_EDEN_HEAP(size_pool)->total_pages = 0; - SIZE_POOL_EDEN_HEAP(size_pool)->total_slots = 0; - } + for (int i = 0; i < HEAP_COUNT; i++) { + rb_heap_t *heap = &heaps[i]; + heap->total_pages = 0; + heap->total_slots = 0; } + st_free_table(objspace->id_to_obj_tbl); st_free_table(objspace->obj_to_id_tbl); @@ -10341,8 +10009,6 @@ rb_gc_impl_objspace_free(void *objspace_ptr) free(objspace); } -void rb_gc_impl_mark(void *objspace_ptr, VALUE obj); - #if MALLOC_ALLOCATED_SIZE /* * call-seq: @@ -10390,9 +10056,6 @@ rb_gc_impl_objspace_init(void *objspace_ptr) gc_config_full_mark_set(TRUE); - objspace->flags.gc_stressful = RTEST(initial_stress); - objspace->gc_stress_mode = initial_stress; - objspace->flags.measure_gc = true; malloc_limit = gc_params.malloc_limit_min; objspace->finalize_deferred_pjob = rb_postponed_job_preregister(0, gc_finalize_deferred, objspace); @@ -10400,15 +10063,15 @@ rb_gc_impl_objspace_init(void *objspace_ptr) rb_bug("Could not preregister postponed job for GC"); } - for (int i = 0; i < SIZE_POOL_COUNT; i++) { - rb_size_pool_t *size_pool = &size_pools[i]; + for (int i = 0; i < HEAP_COUNT; i++) { + rb_heap_t *heap = &heaps[i]; - size_pool->slot_size = (1 << i) * BASE_SLOT_SIZE; + heap->slot_size = (1 << i) * BASE_SLOT_SIZE; - ccan_list_head_init(&SIZE_POOL_EDEN_HEAP(size_pool)->pages); - ccan_list_head_init(&SIZE_POOL_TOMB_HEAP(size_pool)->pages); + ccan_list_head_init(&heap->pages); } + rb_darray_make(&objspace->heap_pages.sorted, 0); rb_darray_make(&objspace->weak_references, 0); // TODO: debug why on Windows Ruby crashes on boot when GC is on. @@ -10432,15 +10095,11 @@ rb_gc_impl_objspace_init(void *objspace_ptr) #endif /* Set size pools allocatable pages. */ // TODO: This for loop is new with the gc impl. It's unclear to me if we want to skip this for MMTk - for (int i = 0; i < SIZE_POOL_COUNT; i++) { - rb_size_pool_t *size_pool = &size_pools[i]; - /* Set the default value of size_pool_init_slots. */ - gc_params.size_pool_init_slots[i] = GC_HEAP_INIT_SLOTS; - size_pool->allocatable_pages = minimum_pages_for_size_pool(objspace, size_pool); + for (int i = 0; i < HEAP_COUNT; i++) { + /* Set the default value of heap_init_slots. */ + gc_params.heap_init_slots[i] = GC_HEAP_INIT_SLOTS; } - heap_pages_expand_sorted(objspace); - init_mark_stack(&objspace->mark_stack); #if USE_MMTK } @@ -10466,8 +10125,8 @@ rb_gc_impl_init(void) rb_hash_aset(gc_constants, ID2SYM(rb_intern("HEAP_PAGE_OBJ_LIMIT")), SIZET2NUM(HEAP_PAGE_OBJ_LIMIT)); rb_hash_aset(gc_constants, ID2SYM(rb_intern("HEAP_PAGE_BITMAP_SIZE")), SIZET2NUM(HEAP_PAGE_BITMAP_SIZE)); rb_hash_aset(gc_constants, ID2SYM(rb_intern("HEAP_PAGE_SIZE")), SIZET2NUM(HEAP_PAGE_SIZE)); - rb_hash_aset(gc_constants, ID2SYM(rb_intern("SIZE_POOL_COUNT")), LONG2FIX(SIZE_POOL_COUNT)); - rb_hash_aset(gc_constants, ID2SYM(rb_intern("RVARGC_MAX_ALLOCATE_SIZE")), LONG2FIX(size_pool_slot_size(SIZE_POOL_COUNT - 1))); + rb_hash_aset(gc_constants, ID2SYM(rb_intern("HEAP_COUNT")), LONG2FIX(HEAP_COUNT)); + rb_hash_aset(gc_constants, ID2SYM(rb_intern("RVARGC_MAX_ALLOCATE_SIZE")), LONG2FIX(heap_slot_size(HEAP_COUNT - 1))); rb_hash_aset(gc_constants, ID2SYM(rb_intern("RVALUE_OLD_AGE")), LONG2FIX(RVALUE_OLD_AGE)); if (RB_BUG_INSTEAD_OF_RB_MEMERROR+0) { rb_hash_aset(gc_constants, ID2SYM(rb_intern("RB_BUG_INSTEAD_OF_RB_MEMERROR")), Qtrue); diff --git a/gc/gc.h b/gc/gc.h index 2ee96365f2ebc2..d5b07faf9270d9 100644 --- a/gc/gc.h +++ b/gc/gc.h @@ -23,7 +23,6 @@ size_t rb_gc_obj_optimal_size(VALUE obj); void rb_gc_mark_children(void *objspace, VALUE obj); void rb_gc_update_object_references(void *objspace, VALUE obj); void rb_gc_update_vm_references(void *objspace); -void rb_gc_reachable_objects_from_callback(VALUE obj); void rb_gc_event_hook(VALUE obj, rb_event_flag_t event); void *rb_gc_get_objspace(void); size_t rb_size_mul_or_raise(size_t x, size_t y, VALUE exc); @@ -41,7 +40,7 @@ const char *rb_obj_info(VALUE obj); bool rb_gc_shutdown_call_finalizer_p(VALUE obj); uint32_t rb_gc_get_shape(VALUE obj); void rb_gc_set_shape(VALUE obj, uint32_t shape_id); -uint32_t rb_gc_rebuild_shape(VALUE obj, size_t size_pool_id); +uint32_t rb_gc_rebuild_shape(VALUE obj, size_t heap_id); size_t rb_obj_memsize_of(VALUE obj); RUBY_SYMBOL_EXPORT_END @@ -50,6 +49,23 @@ void rb_ractor_finish_marking(void); // -------------------Private section begin------------------------ // Functions in this section are private to the default GC and gc.c +#ifdef BUILDING_SHARED_GC +RBIMPL_WARNING_PUSH() +RBIMPL_WARNING_IGNORED(-Wunused-function) +#endif + +/* RGENGC_CHECK_MODE + * 0: disable all assertions + * 1: enable assertions (to debug RGenGC) + * 2: enable internal consistency check at each GC (for debugging) + * 3: enable internal consistency check at each GC steps (for debugging) + * 4: enable liveness check + * 5: show all references + */ +#ifndef RGENGC_CHECK_MODE +# define RGENGC_CHECK_MODE 0 +#endif + #ifndef GC_ASSERT # define GC_ASSERT(expr) RUBY_ASSERT_MESG_WHEN(RGENGC_CHECK_MODE > 0, expr, #expr) #endif @@ -169,6 +185,10 @@ type_sym(size_t type) default: return SIZET2NUM(type); break; } } + +#ifdef BUILDING_SHARED_GC +RBIMPL_WARNING_POP() +#endif // -------------------Private section end------------------------ #endif diff --git a/gc/gc_impl.h b/gc/gc_impl.h index 12527845f7a2f9..045fce6c662ef8 100644 --- a/gc/gc_impl.h +++ b/gc/gc_impl.h @@ -32,8 +32,7 @@ GC_IMPL_FN void *rb_gc_impl_ractor_cache_alloc(void *objspace_ptr); GC_IMPL_FN void rb_gc_impl_ractor_cache_free(void *objspace_ptr, void *cache); GC_IMPL_FN void rb_gc_impl_set_params(void *objspace_ptr); GC_IMPL_FN void rb_gc_impl_init(void); -GC_IMPL_FN void rb_gc_impl_initial_stress_set(VALUE flag); -GC_IMPL_FN size_t *rb_gc_impl_size_pool_sizes(void *objspace_ptr); +GC_IMPL_FN size_t *rb_gc_impl_heap_sizes(void *objspace_ptr); // Shutdown GC_IMPL_FN void rb_gc_impl_shutdown_free_objects(void *objspace_ptr); // GC @@ -50,7 +49,7 @@ GC_IMPL_FN VALUE rb_gc_impl_config_set(void *objspace_ptr, VALUE hash); // Object allocation GC_IMPL_FN VALUE rb_gc_impl_new_obj(void *objspace_ptr, void *cache_ptr, VALUE klass, VALUE flags, VALUE v1, VALUE v2, VALUE v3, bool wb_protected, size_t alloc_size); GC_IMPL_FN size_t rb_gc_impl_obj_slot_size(VALUE obj); -GC_IMPL_FN size_t rb_gc_impl_size_pool_id_for_size(void *objspace_ptr, size_t size); +GC_IMPL_FN size_t rb_gc_impl_heap_id_for_size(void *objspace_ptr, size_t size); GC_IMPL_FN bool rb_gc_impl_size_allocatable_p(size_t size); // Malloc GC_IMPL_FN void *rb_gc_impl_malloc(void *objspace_ptr, size_t size); @@ -85,9 +84,9 @@ GC_IMPL_FN void rb_gc_impl_shutdown_call_finalizer(void *objspace_ptr); GC_IMPL_FN VALUE rb_gc_impl_object_id(void *objspace_ptr, VALUE obj); GC_IMPL_FN VALUE rb_gc_impl_object_id_to_ref(void *objspace_ptr, VALUE object_id); // Statistics -GC_IMPL_FN VALUE rb_gc_impl_set_measure_total_time(void *objspace_ptr, VALUE flag); -GC_IMPL_FN VALUE rb_gc_impl_get_measure_total_time(void *objspace_ptr); -GC_IMPL_FN VALUE rb_gc_impl_get_profile_total_time(void *objspace_ptr); +GC_IMPL_FN void rb_gc_impl_set_measure_total_time(void *objspace_ptr, VALUE flag); +GC_IMPL_FN bool rb_gc_impl_get_measure_total_time(void *objspace_ptr); +GC_IMPL_FN unsigned long long rb_gc_impl_get_total_time(void *objspace_ptr); GC_IMPL_FN size_t rb_gc_impl_gc_count(void *objspace_ptr); GC_IMPL_FN VALUE rb_gc_impl_latest_gc_info(void *objspace_ptr, VALUE key); GC_IMPL_FN size_t rb_gc_impl_stat(void *objspace_ptr, VALUE hash_or_sym); diff --git a/gems/bundled_gems b/gems/bundled_gems index 4e8ca298a0aff3..0e88f06f21f422 100644 --- a/gems/bundled_gems +++ b/gems/bundled_gems @@ -6,31 +6,32 @@ # - revision: revision in repository-url to test # if `revision` is not given, "v"+`version` or `version` will be used. -minitest 5.25.1 https://github.com/minitest/minitest -power_assert 2.0.3 https://github.com/ruby/power_assert 84e85124c5014a139af39161d484156cfe87a9ed -rake 13.2.1 https://github.com/ruby/rake -test-unit 3.6.2 https://github.com/test-unit/test-unit -rexml 3.3.6 https://github.com/ruby/rexml -rss 0.3.1 https://github.com/ruby/rss -net-ftp 0.3.7 https://github.com/ruby/net-ftp -net-imap 0.4.15 https://github.com/ruby/net-imap -net-pop 0.1.2 https://github.com/ruby/net-pop -net-smtp 0.5.0 https://github.com/ruby/net-smtp -matrix 0.4.2 https://github.com/ruby/matrix -prime 0.1.2 https://github.com/ruby/prime -rbs 3.5.3 https://github.com/ruby/rbs -typeprof 0.21.11 https://github.com/ruby/typeprof b19a6416da3a05d57fadd6ffdadb382b6d236ca5 -debug 1.9.2 https://github.com/ruby/debug -racc 1.8.1 https://github.com/ruby/racc -mutex_m 0.2.0 https://github.com/ruby/mutex_m -getoptlong 0.2.1 https://github.com/ruby/getoptlong -base64 0.2.0 https://github.com/ruby/base64 -bigdecimal 3.1.8 https://github.com/ruby/bigdecimal -observer 0.1.2 https://github.com/ruby/observer -abbrev 0.1.2 https://github.com/ruby/abbrev -resolv-replace 0.1.1 https://github.com/ruby/resolv-replace -rinda 0.2.0 https://github.com/ruby/rinda -drb 2.2.1 https://github.com/ruby/drb -nkf 0.2.0 https://github.com/ruby/nkf -syslog 0.1.2 https://github.com/ruby/syslog -csv 3.3.0 https://github.com/ruby/csv +minitest 5.25.1 https://github.com/minitest/minitest +power_assert 2.0.4 https://github.com/ruby/power_assert +rake 13.2.1 https://github.com/ruby/rake +test-unit 3.6.2 https://github.com/test-unit/test-unit +rexml 3.3.8 https://github.com/ruby/rexml +rss 0.3.1 https://github.com/ruby/rss +net-ftp 0.3.8 https://github.com/ruby/net-ftp +net-imap 0.4.16 https://github.com/ruby/net-imap +net-pop 0.1.2 https://github.com/ruby/net-pop +net-smtp 0.5.0 https://github.com/ruby/net-smtp +matrix 0.4.2 https://github.com/ruby/matrix +prime 0.1.2 https://github.com/ruby/prime +rbs 3.6.1 https://github.com/ruby/rbs +typeprof 0.21.11 https://github.com/ruby/typeprof 167263ca3a634b61df0445f1a6b3e259a5d47f94 +debug 1.9.2 https://github.com/ruby/debug 9c4279598e9e0376657b3813bf76a206f1f97beb +racc 1.8.1 https://github.com/ruby/racc +mutex_m 0.2.0 https://github.com/ruby/mutex_m +getoptlong 0.2.1 https://github.com/ruby/getoptlong +base64 0.2.0 https://github.com/ruby/base64 +bigdecimal 3.1.8 https://github.com/ruby/bigdecimal +observer 0.1.2 https://github.com/ruby/observer +abbrev 0.1.2 https://github.com/ruby/abbrev +resolv-replace 0.1.1 https://github.com/ruby/resolv-replace +rinda 0.2.0 https://github.com/ruby/rinda +drb 2.2.1 https://github.com/ruby/drb +nkf 0.2.0 https://github.com/ruby/nkf +syslog 0.1.2 https://github.com/ruby/syslog +csv 3.3.0 https://github.com/ruby/csv +repl_type_completor 0.1.7 https://github.com/ruby/repl_type_completor diff --git a/goruby.c b/goruby.c index 5d452772075a31..3ca96bfda0641a 100644 --- a/goruby.c +++ b/goruby.c @@ -1,4 +1,4 @@ -static void Init_golf(void); +static void Init_golf_prelude(void); static void *goruby_options(int argc, char **argv); static int goruby_run_node(void *arg); #define ruby_options goruby_options @@ -17,14 +17,13 @@ static int goruby_run_node(void *arg); RUBY_EXTERN void *ruby_options(int argc, char **argv); RUBY_EXTERN int ruby_run_node(void*); -RUBY_EXTERN void ruby_init_ext(const char *name, void (*init)(void)); -#include "golf_prelude.c" +#include "golf_prelude.rbbin" static VALUE init_golf(VALUE arg) { - Init_golf(); + Init_golf_prelude(); rb_provide("golf.so"); return arg; } @@ -61,7 +60,8 @@ int goruby_run_node(void *arg) { int state; - if (NIL_P(rb_protect(init_golf, Qtrue, &state))) { + if (ruby_executable_node(arg, NULL) && + NIL_P(rb_protect(init_golf, Qtrue, &state))) { return state == EXIT_SUCCESS ? EXIT_FAILURE : state; } return ruby_run_node(arg); diff --git a/hash.c b/hash.c index 5775457ecdf9b7..daf7ea09653d91 100644 --- a/hash.c +++ b/hash.c @@ -71,7 +71,7 @@ * The bounds of the AR table. * 13-19: RHASH_LEV_MASK * The iterational level of the hash. Used to prevent modifications - * to the hash during interation. + * to the hash during iteration. */ #ifndef HASH_DEBUG @@ -110,6 +110,7 @@ static VALUE rb_hash_s_try_convert(VALUE, VALUE); * 2. Insert WBs */ +/* :nodoc: */ VALUE rb_hash_freeze(VALUE hash) { @@ -117,6 +118,7 @@ rb_hash_freeze(VALUE hash) } VALUE rb_cHash; +VALUE rb_cHash_empty_frozen; static VALUE envtbl; static ID id_hash, id_flatten_bang; @@ -3410,20 +3412,65 @@ rb_hash_to_a(VALUE hash) return ary; } +static bool +symbol_key_needs_quote(VALUE str) +{ + long len = RSTRING_LEN(str); + if (len == 0 || !rb_str_symname_p(str)) return true; + const char *s = RSTRING_PTR(str); + char first = s[0]; + if (first == '@' || first == '$' || first == '!') return true; + if (!at_char_boundary(s, s + len - 1, RSTRING_END(str), rb_enc_get(str))) return false; + switch (s[len - 1]) { + case '+': + case '-': + case '*': + case '/': + case '`': + case '%': + case '^': + case '&': + case '|': + case ']': + case '<': + case '=': + case '>': + case '~': + case '@': + return true; + default: + return false; + } +} + static int inspect_i(VALUE key, VALUE value, VALUE str) { VALUE str2; - str2 = rb_inspect(key); + bool is_symbol = SYMBOL_P(key); + bool quote = false; + if (is_symbol) { + str2 = rb_sym2str(key); + quote = symbol_key_needs_quote(str2); + } + else { + str2 = rb_inspect(key); + } if (RSTRING_LEN(str) > 1) { rb_str_buf_cat_ascii(str, ", "); } else { rb_enc_copy(str, str2); } - rb_str_buf_append(str, str2); - rb_str_buf_cat_ascii(str, "=>"); + if (quote) { + rb_str_buf_append(str, rb_str_inspect(str2)); + } + else { + rb_str_buf_append(str, str2); + } + + rb_str_buf_cat_ascii(str, is_symbol ? ": " : " => "); str2 = rb_inspect(value); rb_str_buf_append(str, str2); @@ -5090,44 +5137,6 @@ envix(const char *nam) } #endif -#if defined(_WIN32) -static size_t -getenvsize(const WCHAR* p) -{ - const WCHAR* porg = p; - while (*p++) p += lstrlenW(p) + 1; - return p - porg + 1; -} - -static size_t -getenvblocksize(void) -{ -#ifdef _MAX_ENV - return _MAX_ENV; -#else - return 32767; -#endif -} - -static int -check_envsize(size_t n) -{ - if (_WIN32_WINNT < 0x0600 && rb_w32_osver() < 6) { - /* https://msdn.microsoft.com/en-us/library/windows/desktop/ms682653(v=vs.85).aspx */ - /* Windows Server 2003 and Windows XP: The maximum size of the - * environment block for the process is 32,767 characters. */ - WCHAR* p = GetEnvironmentStringsW(); - if (!p) return -1; /* never happen */ - n += getenvsize(p); - FreeEnvironmentStringsW(p); - if (n >= getenvblocksize()) { - return -1; - } - } - return 0; -} -#endif - #if defined(_WIN32) || \ (defined(__sun) && !(defined(HAVE_SETENV) && defined(HAVE_UNSETENV))) @@ -5153,9 +5162,6 @@ void ruby_setenv(const char *name, const char *value) { #if defined(_WIN32) -# if defined(MINGW_HAS_SECURE_API) || RUBY_MSVCRT_VERSION >= 80 -# define HAVE__WPUTENV_S 1 -# endif VALUE buf; WCHAR *wname; WCHAR *wvalue = 0; @@ -5166,34 +5172,23 @@ ruby_setenv(const char *name, const char *value) if (value) { int len2; len2 = MultiByteToWideChar(CP_UTF8, 0, value, -1, NULL, 0); - if (check_envsize((size_t)len + len2)) { /* len and len2 include '\0' */ - goto fail; /* 2 for '=' & '\0' */ - } wname = ALLOCV_N(WCHAR, buf, len + len2); wvalue = wname + len; MultiByteToWideChar(CP_UTF8, 0, name, -1, wname, len); MultiByteToWideChar(CP_UTF8, 0, value, -1, wvalue, len2); -#ifndef HAVE__WPUTENV_S - wname[len-1] = L'='; -#endif } else { wname = ALLOCV_N(WCHAR, buf, len + 1); MultiByteToWideChar(CP_UTF8, 0, name, -1, wname, len); wvalue = wname + len; *wvalue = L'\0'; -#ifndef HAVE__WPUTENV_S - wname[len-1] = L'='; -#endif } ENV_LOCK(); { -#ifndef HAVE__WPUTENV_S - failed = _wputenv(wname); -#else + /* Use _wputenv_s() instead of SetEnvironmentVariableW() to make sure + * special variables like "TZ" are interpret by libc. */ failed = _wputenv_s(wname, wvalue); -#endif } ENV_UNLOCK(); @@ -5202,7 +5197,7 @@ ruby_setenv(const char *name, const char *value) * variable from the system area. */ if (!value || !*value) { /* putenv() doesn't handle empty value */ - if (!SetEnvironmentVariable(name, value) && + if (!SetEnvironmentVariableW(wname, value ? wvalue : NULL) && GetLastError() != ERROR_ENVVAR_NOT_FOUND) goto fail; } if (failed) { @@ -6881,7 +6876,7 @@ static const rb_data_type_t env_data_type = { * * ==== User-Defined +Hash+ Keys * - * To be useable as a +Hash+ key, objects must implement the methods hash and eql?. + * To be usable as a +Hash+ key, objects must implement the methods hash and eql?. * Note: this requirement does not apply if the +Hash+ uses #compare_by_identity since comparison will then * rely on the keys' object id instead of hash and eql?. * @@ -7058,10 +7053,9 @@ static const rb_data_type_t env_data_type = { * - #empty?: Returns whether there are no entries. * - #eql?: Returns whether a given object is equal to +self+. * - #hash: Returns the integer hash code. - * - #has_value?: Returns whether a given object is a value in +self+. - * - #include?, #has_key?, #member?, #key?: Returns whether a given object is a key in +self+. - * - #length, #size: Returns the count of entries. - * - #value?: Returns whether a given object is a value in +self+. + * - #has_value? (aliased as #value?): Returns whether a given object is a value in +self+. + * - #include? (aliased as #has_key?, #member?, #key?): Returns whether a given object is a key in +self+. + * - #size (aliased as #length): Returns the count of entries. * * ==== Methods for Comparing * @@ -7088,10 +7082,10 @@ static const rb_data_type_t env_data_type = { * * ==== Methods for Assigning * - * - #[]=, #store: Associates a given key with a given value. + * - #[]= (aliased as #store): Associates a given key with a given value. * - #merge: Returns the hash formed by merging each given hash into a copy of +self+. - * - #merge!, #update: Merges each given hash into +self+. - * - #replace: Replaces the entire contents of +self+ with the contents of a given hash. + * - #update (aliased as #merge!): Merges each given hash into +self+. + * - #replace (aliased as #initialize_copy): Replaces the entire contents of +self+ with the contents of a given hash. * * ==== Methods for Deleting * @@ -7101,7 +7095,7 @@ static const rb_data_type_t env_data_type = { * - #compact!: Removes all +nil+-valued entries from +self+. * - #delete: Removes the entry for a given key. * - #delete_if: Removes entries selected by a given block. - * - #filter!, #select!: Keep only those entries selected by a given block. + * - #select! (aliased as #filter!): Keep only those entries selected by a given block. * - #keep_if: Keep only those entries selected by a given block. * - #reject!: Removes entries selected by a given block. * - #shift: Removes and returns the first entry. @@ -7110,18 +7104,18 @@ static const rb_data_type_t env_data_type = { * * - #compact: Returns a copy of +self+ with all +nil+-valued entries removed. * - #except: Returns a copy of +self+ with entries removed for specified keys. - * - #filter, #select: Returns a copy of +self+ with only those entries selected by a given block. + * - #select (aliased as #filter): Returns a copy of +self+ with only those entries selected by a given block. * - #reject: Returns a copy of +self+ with entries removed as specified by a given block. * - #slice: Returns a hash containing the entries for given keys. * * ==== Methods for Iterating - * - #each, #each_pair: Calls a given block with each key-value pair. + * - #each_pair (aliased as #each): Calls a given block with each key-value pair. * - #each_key: Calls a given block with each key. * - #each_value: Calls a given block with each value. * * ==== Methods for Converting * - * - #inspect, #to_s: Returns a new String containing the hash entries. + * - #inspect (aliased as #to_s): Returns a new String containing the hash entries. * - #to_a: Returns a new array of 2-element arrays; * each nested array contains a key-value pair from +self+. * - #to_h: Returns +self+ if a +Hash+; @@ -7158,6 +7152,7 @@ Init_Hash(void) rb_define_singleton_method(rb_cHash, "try_convert", rb_hash_s_try_convert, 1); rb_define_method(rb_cHash, "initialize_copy", rb_hash_replace, 1); rb_define_method(rb_cHash, "rehash", rb_hash_rehash, 0); + rb_define_method(rb_cHash, "freeze", rb_hash_freeze, 0); rb_define_method(rb_cHash, "to_hash", rb_hash_to_hash, 0); rb_define_method(rb_cHash, "to_h", rb_hash_to_h, 0); @@ -7244,6 +7239,9 @@ Init_Hash(void) rb_define_singleton_method(rb_cHash, "ruby2_keywords_hash?", rb_hash_s_ruby2_keywords_hash_p, 1); rb_define_singleton_method(rb_cHash, "ruby2_keywords_hash", rb_hash_s_ruby2_keywords_hash, 1); + rb_cHash_empty_frozen = rb_hash_freeze(rb_hash_new()); + rb_vm_register_global_object(rb_cHash_empty_frozen); + /* Document-class: ENV * * +ENV+ is a hash-like accessor for environment variables. diff --git a/hash.rb b/hash.rb index 3103c6260bf632..08edb745a4496a 100644 --- a/hash.rb +++ b/hash.rb @@ -33,7 +33,7 @@ class Hash # If both a block and a default_value are given, raises an +ArgumentError+ # # If the optional keyword argument +capacity+ is given, the hash will be allocated - # with enough capacity to accomodate this many keys without having to be resized. + # with enough capacity to accommodate this many keys without having to be resized. def initialize(ifnone = (ifnone_unset = true), capacity: 0, &block) Primitive.rb_hash_init(capacity, ifnone_unset, ifnone, block) end diff --git a/imemo.c b/imemo.c index d8ef0f8c257447..2520e6e1278a1a 100644 --- a/imemo.c +++ b/imemo.c @@ -5,6 +5,9 @@ #include "internal/imemo.h" #include "vm_callinfo.h" +// conditional compilation macros for MMTk +#include "internal/mmtk_macros.h" + size_t rb_iseq_memsize(const rb_iseq_t *iseq); void rb_iseq_mark_and_move(rb_iseq_t *iseq, bool reference_updating); void rb_iseq_free(const rb_iseq_t *iseq); @@ -181,20 +184,21 @@ rb_imemo_memsize(VALUE obj) * ========================================================================= */ static enum rb_id_table_iterator_result -cc_table_mark_i(ID id, VALUE ccs_ptr, void *data) +cc_table_mark_i(VALUE ccs_ptr, void *data) { struct rb_class_cc_entries *ccs = (struct rb_class_cc_entries *)ccs_ptr; VM_ASSERT(vm_ccs_p(ccs)); -#if USE_MMTK - if (!rb_mmtk_enabled_p()) { + +#if VM_CHECK_MODE > 0 + VALUE klass = (VALUE)data; + + WHEN_NOT_USING_MMTK({ // ccs->cme can point to heap object, too. // Evacuating GC (such as Immix) may have moved it. -#endif - VM_ASSERT(id == ccs->cme->called_id); -#if USE_MMTK - } else { - VM_ASSERT(id == 0); - } + VALUE lookup_val; + VM_ASSERT(rb_id_table_lookup(RCLASS_CC_TBL(klass), ccs->cme->called_id, &lookup_val)); + VM_ASSERT(lookup_val == ccs_ptr); + }) #endif if (METHOD_ENTRY_INVALIDATED(ccs->cme)) { @@ -227,7 +231,7 @@ cc_table_mark_i(ID id, VALUE ccs_ptr, void *data) // With evacuating GC, they may have been moved, too. // It is not safe to inspect reference fields during tracing. #endif - VM_ASSERT((VALUE)data == ccs->entries[i].cc->klass); + VM_ASSERT(klass == ccs->entries[i].cc->klass); VM_ASSERT(vm_cc_check_cme(ccs->entries[i].cc, ccs->cme)); #if USE_MMTK } @@ -239,31 +243,12 @@ cc_table_mark_i(ID id, VALUE ccs_ptr, void *data) } } -#if USE_MMTK -static enum rb_id_table_iterator_result -rb_mmtk_cc_table_mark_i_no_id(VALUE ccs_ptr, void *data_ptr) -{ - return cc_table_mark_i(0, ccs_ptr, data_ptr); -} -#endif - void rb_cc_table_mark(VALUE klass) { struct rb_id_table *cc_tbl = RCLASS_CC_TBL(klass); if (cc_tbl) { -#if USE_MMTK - if (rb_mmtk_enabled_p()) { - // Note: rb_id_table_foreach will look up the ID from keys by accessing - // arrays in the heap during key2id, but the id is only used for - // assertion which fails with an evacuating GC (such as Immix) anyway. - rb_id_table_foreach_values(cc_tbl, rb_mmtk_cc_table_mark_i_no_id, (void *)klass); - } else { -#endif - rb_id_table_foreach(cc_tbl, cc_table_mark_i, (void *)klass); -#if USE_MMTK - } -#endif + rb_id_table_foreach_values(cc_tbl, cc_table_mark_i, (void *)klass); } } diff --git a/include/ruby/internal/encoding/string.h b/include/ruby/internal/encoding/string.h index 2b9dfe4f318621..2cfa91c01e1e81 100644 --- a/include/ruby/internal/encoding/string.h +++ b/include/ruby/internal/encoding/string.h @@ -307,13 +307,13 @@ RBIMPL_ATTR_NONNULL(()) /** * Looks for the passed string in the passed buffer. * - * @param[in] x Buffer that potentially includes `y`. + * @param[in] x Query string. * @param[in] m Number of bytes of `x`. - * @param[in] y Query string. + * @param[in] y Buffer that potentially includes `x`. * @param[in] n Number of bytes of `y`. * @param[in] enc Encoding of both `x` and `y`. * @retval -1 Not found. - * @retval otherwise Found index in `x`. + * @retval otherwise Found index in `y`. * @note This API can match at a non-character-boundary. */ long rb_memsearch(const void *x, long m, const void *y, long n, rb_encoding *enc); diff --git a/include/ruby/internal/gc.h b/include/ruby/internal/gc.h index 462f416af21cfd..5ab3bb266e242f 100644 --- a/include/ruby/internal/gc.h +++ b/include/ruby/internal/gc.h @@ -45,7 +45,7 @@ RBIMPL_SYMBOL_EXPORT_BEGIN() #define RUBY_REF_EDGE(s, p) offsetof(s, p) -#define RUBY_REFS_LIST_PTR(l) (RUBY_DATA_FUNC)(l) +#define RUBY_REFS_LIST_PTR(l) (RUBY_DATA_FUNC)(uintptr_t)(l) #define RUBY_REF_END SIZE_MAX #define RUBY_REFERENCES(t) static const size_t t[] #define RUBY_REFERENCES_START(t) RUBY_REFERENCES(t) = { diff --git a/include/ruby/io.h b/include/ruby/io.h index e9dfeda5b1214b..d2fd3ed317a3c9 100644 --- a/include/ruby/io.h +++ b/include/ruby/io.h @@ -964,6 +964,9 @@ VALUE rb_io_wait(VALUE io, VALUE events, VALUE timeout); * } * ``` * + * On timeout, ::RUBY_Qfalse is returned. Unless you are specifically handling + * the timeouts, you should typically raise ::rb_eIOTimeoutError in this case. + * * @param[in] error System errno. * @param[in] io An IO object to wait. * @param[in] events An integer set of interests. @@ -972,19 +975,19 @@ VALUE rb_io_wait(VALUE io, VALUE events, VALUE timeout); * @exception rb_eRangeError `timeout` is out of range. * @exception rb_eSystemCallError `select(2)` failed for some reason. * @retval RUBY_Qfalse Operation timed out. + * @retval RUBY_Qnil Operation failed for some other reason (errno). * @retval Otherwise Actual events reached. * - * @internal - * - * This function to return ::RUBY_Qfalse on timeout could be unintended. It - * seems timeout feature has some rough edge. */ VALUE rb_io_maybe_wait(int error, VALUE io, VALUE events, VALUE timeout); /** * Blocks until the passed IO is ready for reading, if that makes sense for the - * passed errno. This is a special case of rb_io_maybe_wait() that only - * concerns for reading. + * passed errno. This is a special case of rb_io_maybe_wait() that is + * only concerned with reading and handles the timeout. + * + * If you do not want the default timeout handling, consider using + * ::rb_io_maybe_wait directly. * * @param[in] error System errno. * @param[in] io An IO object to wait. @@ -992,15 +995,18 @@ VALUE rb_io_maybe_wait(int error, VALUE io, VALUE events, VALUE timeout); * @exception rb_eIOError `io` is not open. * @exception rb_eRangeError `timeout` is out of range. * @exception rb_eSystemCallError `select(2)` failed for some reason. - * @retval 0 Operation timed out. + * @exception rb_eIOTimeoutError The wait operation timed out. * @retval Otherwise Always returns ::RUBY_IO_READABLE. */ int rb_io_maybe_wait_readable(int error, VALUE io, VALUE timeout); /** * Blocks until the passed IO is ready for writing, if that makes sense for the - * passed errno. This is a special case of rb_io_maybe_wait() that only - * concernsfor writing. + * passed errno. This is a special case of rb_io_maybe_wait() that is + * only concerned with writing, and handles the timeout. + * + * If you do not want the default timeout handling, consider using + * ::rb_io_maybe_wait directly. * * @param[in] error System errno. * @param[in] io An IO object to wait. @@ -1008,7 +1014,7 @@ int rb_io_maybe_wait_readable(int error, VALUE io, VALUE timeout); * @exception rb_eIOError `io` is not open. * @exception rb_eRangeError `timeout` is out of range. * @exception rb_eSystemCallError `select(2)` failed for some reason. - * @retval 0 Operation timed out. + * @exception rb_eIOTimeoutError The wait operation timed out. * @retval Otherwise Always returns ::RUBY_IO_WRITABLE. */ int rb_io_maybe_wait_writable(int error, VALUE io, VALUE timeout); diff --git a/insns.def b/insns.def index c8dcd61bec3f46..99ea95f5842eb4 100644 --- a/insns.def +++ b/insns.def @@ -919,6 +919,36 @@ objtostring } } +DEFINE_INSN +opt_ary_freeze +(VALUE ary, CALL_DATA cd) +() +(VALUE val) +{ + val = vm_opt_ary_freeze(ary, BOP_FREEZE, idFreeze); + + if (UNDEF_P(val)) { + RUBY_DTRACE_CREATE_HOOK(ARRAY, RARRAY_LEN(ary)); + PUSH(rb_ary_resurrect(ary)); + CALL_SIMPLE_METHOD(); + } +} + +DEFINE_INSN +opt_hash_freeze +(VALUE hash, CALL_DATA cd) +() +(VALUE val) +{ + val = vm_opt_hash_freeze(hash, BOP_FREEZE, idFreeze); + + if (UNDEF_P(val)) { + RUBY_DTRACE_CREATE_HOOK(HASH, RHASH_SIZE(hash) << 1); + PUSH(rb_hash_resurrect(hash)); + CALL_SIMPLE_METHOD(); + } +} + DEFINE_INSN opt_str_freeze (VALUE str, CALL_DATA cd) diff --git a/internal/array.h b/internal/array.h index 39f6fcbea64ed1..398676df4aa80d 100644 --- a/internal/array.h +++ b/internal/array.h @@ -37,6 +37,7 @@ size_t rb_ary_size_as_embedded(VALUE ary); void rb_ary_make_embedded(VALUE ary); bool rb_ary_embeddable_p(VALUE ary); VALUE rb_ary_diff(VALUE ary1, VALUE ary2); +RUBY_EXTERN VALUE rb_cArray_empty_frozen; static inline VALUE rb_ary_entry_internal(VALUE ary, long offset); static inline bool ARY_PTR_USING_P(VALUE ary); diff --git a/internal/class.h b/internal/class.h index 8a6c95623317b3..f94434b9389165 100644 --- a/internal/class.h +++ b/internal/class.h @@ -83,7 +83,7 @@ struct RClass { struct rb_id_table *m_tbl; }; -// Assert that classes can be embedded in size_pools[2] (which has 160B slot size) +// Assert that classes can be embedded in heaps[2] (which has 160B slot size) STATIC_ASSERT(sizeof_rb_classext_t, sizeof(struct RClass) + sizeof(rb_classext_t) <= 4 * RVALUE_SIZE); struct RClass_and_rb_classext_t { diff --git a/internal/fixnum.h b/internal/fixnum.h index 8c251adef17085..b78e31460eee1a 100644 --- a/internal/fixnum.h +++ b/internal/fixnum.h @@ -10,6 +10,7 @@ */ #include "ruby/internal/config.h" /* for HAVE_LONG_LONG */ #include /* for CHAR_BIT */ +#include "internal/bits.h" /* for MUL_OVERFLOW_FIXNUM_P */ #include "internal/compilers.h" /* for __has_builtin */ #include "ruby/internal/stdbool.h" /* for bool */ #include "ruby/intern.h" /* for rb_big_mul */ diff --git a/internal/gc.h b/internal/gc.h index 33362747959614..ac2c5190f57c86 100644 --- a/internal/gc.h +++ b/internal/gc.h @@ -201,8 +201,8 @@ void *rb_gc_ractor_cache_alloc(void); void rb_gc_ractor_cache_free(void *cache); bool rb_gc_size_allocatable_p(size_t size); -size_t *rb_gc_size_pool_sizes(void); -size_t rb_gc_size_pool_id_for_size(size_t size); +size_t *rb_gc_heap_sizes(void); +size_t rb_gc_heap_id_for_size(size_t size); void rb_gc_mark_and_move(VALUE *ptr); diff --git a/internal/hash.h b/internal/hash.h index fe859cb716b95b..d66b5b2d04401f 100644 --- a/internal/hash.h +++ b/internal/hash.h @@ -88,6 +88,7 @@ int rb_hash_stlike_foreach_with_replace(VALUE hash, st_foreach_check_callback_fu int rb_hash_stlike_update(VALUE hash, st_data_t key, st_update_callback_func *func, st_data_t arg); VALUE rb_ident_hash_new_with_size(st_index_t size); void rb_hash_free(VALUE hash); +RUBY_EXTERN VALUE rb_cHash_empty_frozen; static inline unsigned RHASH_AR_TABLE_SIZE_RAW(VALUE h); static inline VALUE RHASH_IFNONE(VALUE h); diff --git a/internal/io.h b/internal/io.h index 1891248a19ee08..c207ca38bfcbdd 100644 --- a/internal/io.h +++ b/internal/io.h @@ -135,6 +135,9 @@ RUBY_SYMBOL_EXPORT_BEGIN void rb_maygvl_fd_fix_cloexec(int fd); int rb_gc_for_fd(int err); void rb_write_error_str(VALUE mesg); + +VALUE rb_io_blocking_region_wait(struct rb_io *io, rb_blocking_function_t *function, void *argument, enum rb_io_event events); +VALUE rb_io_blocking_region(struct rb_io *io, rb_blocking_function_t *function, void *argument); RUBY_SYMBOL_EXPORT_END #endif /* INTERNAL_IO_H */ diff --git a/internal/parse.h b/internal/parse.h index fdf2a10183e115..de42acbed921b2 100644 --- a/internal/parse.h +++ b/internal/parse.h @@ -13,11 +13,15 @@ #include "internal/static_assert.h" // The default parser to use for Ruby code. -// 0: parse.y -// 1: Prism -#ifndef RB_DEFAULT_PARSER -#define RB_DEFAULT_PARSER 0 -#endif +typedef enum { + RB_DEFAULT_PARSER_PARSE_Y, + RB_DEFAULT_PARSER_PRISM, +} ruby_default_parser_enum; + +ruby_default_parser_enum rb_ruby_default_parser(void); +void rb_ruby_default_parser_set(ruby_default_parser_enum parser); + +#define rb_ruby_prism_p() (rb_ruby_default_parser() == RB_DEFAULT_PARSER_PRISM) #ifdef UNIVERSAL_PARSER #define rb_encoding const void @@ -70,6 +74,7 @@ rb_encoding *rb_ruby_parser_encoding(rb_parser_t *p); int rb_ruby_parser_end_seen_p(rb_parser_t *p); int rb_ruby_parser_set_yydebug(rb_parser_t *p, int flag); rb_parser_string_t *rb_str_to_parser_string(rb_parser_t *p, VALUE str); +void rb_parser_string_free(rb_parser_t *p, rb_parser_string_t *str); int rb_parser_dvar_defined_ref(struct parser_params*, ID, ID**); ID rb_parser_internal_id(struct parser_params*); @@ -104,7 +109,7 @@ VALUE rb_ruby_parser_ruby_sourcefile_string(rb_parser_t *p); int rb_ruby_parser_ruby_sourceline(rb_parser_t *p); int rb_ruby_parser_lex_state(rb_parser_t *p); void rb_ruby_ripper_parse0(rb_parser_t *p); -int rb_ruby_ripper_dedent_string(rb_parser_t *p, VALUE string, int width); +int rb_ruby_ripper_dedent_string(rb_parser_t *p, rb_parser_string_t *string, int width); int rb_ruby_ripper_initialized_p(rb_parser_t *p); void rb_ruby_ripper_parser_initialize(rb_parser_t *p); long rb_ruby_ripper_column(rb_parser_t *p); diff --git a/internal/sanitizers.h b/internal/sanitizers.h index b0eb1fc851b415..1cab12fb527388 100644 --- a/internal/sanitizers.h +++ b/internal/sanitizers.h @@ -54,10 +54,11 @@ # include "internal/warnings.h" # undef NO_SANITIZE # define NO_SANITIZE(x, y) \ - COMPILER_WARNING_PUSH; \ - COMPILER_WARNING_IGNORED(-Wattributes); \ + COMPILER_WARNING_PUSH \ + COMPILER_WARNING_IGNORED(-Wattributes) \ __attribute__((__no_sanitize__(x))) y; \ - COMPILER_WARNING_POP + COMPILER_WARNING_POP \ + y #endif #ifndef NO_SANITIZE @@ -206,6 +207,35 @@ asan_poison_object_restore(VALUE obj, void *ptr) return NULL; } +#define asan_unpoisoning_object(obj) \ + for (void *poisoned = asan_unpoison_object_temporary(obj), \ + *unpoisoning = &poisoned; /* flag to loop just once */ \ + unpoisoning; \ + unpoisoning = asan_poison_object_restore(obj, poisoned)) + + +static inline void * +asan_unpoison_memory_region_temporary(void *ptr, size_t len) +{ + void *poisoned_ptr = __asan_region_is_poisoned(ptr, len); + asan_unpoison_memory_region(ptr, len, false); + return poisoned_ptr; +} + +static inline void * +asan_poison_memory_region_restore(void *ptr, size_t len, void *poisoned_ptr) +{ + if (poisoned_ptr) { + asan_poison_memory_region(ptr, len); + } + return NULL; +} + +#define asan_unpoisoning_memory_region(ptr, len) \ + for (void *poisoned = asan_unpoison_memory_region_temporary(ptr, len), \ + *unpoisoning = &poisoned; /* flag to loop just once */ \ + unpoisoning; \ + unpoisoning = asan_poison_memory_region_restore(ptr, len, poisoned)) /** * Checks if the given pointer is on an ASAN fake stack. If so, it returns the diff --git a/internal/string.h b/internal/string.h index 2cf55b27a79389..16221b8b13add9 100644 --- a/internal/string.h +++ b/internal/string.h @@ -51,6 +51,12 @@ int rb_enc_str_coderange_scan(VALUE str, rb_encoding *enc); int rb_ascii8bit_appendable_encoding_index(rb_encoding *enc, unsigned int code); VALUE rb_str_include(VALUE str, VALUE arg); VALUE rb_str_byte_substr(VALUE str, VALUE beg, VALUE len); +VALUE rb_str_tmp_frozen_no_embed_acquire(VALUE str); +void rb_str_make_embedded(VALUE); +VALUE rb_str_upto_each(VALUE, VALUE, int, int (*each)(VALUE, VALUE), VALUE); +size_t rb_str_size_as_embedded(VALUE); +bool rb_str_reembeddable_p(VALUE); +VALUE rb_str_upto_endless_each(VALUE, int (*each)(VALUE, VALUE), VALUE); #if USE_MMTK bool rb_mmtk_str_no_free(VALUE str); @@ -67,14 +73,8 @@ static inline VALUE rb_str_eql_internal(const VALUE str1, const VALUE str2); RUBY_SYMBOL_EXPORT_BEGIN /* string.c (export) */ VALUE rb_str_tmp_frozen_acquire(VALUE str); -VALUE rb_str_tmp_frozen_no_embed_acquire(VALUE str); void rb_str_tmp_frozen_release(VALUE str, VALUE tmp); VALUE rb_setup_fake_str(struct RString *fake_str, const char *name, long len, rb_encoding *enc); -VALUE rb_str_upto_each(VALUE, VALUE, int, int (*each)(VALUE, VALUE), VALUE); -VALUE rb_str_upto_endless_each(VALUE, int (*each)(VALUE, VALUE), VALUE); -void rb_str_make_embedded(VALUE); -size_t rb_str_size_as_embedded(VALUE); -bool rb_str_reembeddable_p(VALUE); RUBY_SYMBOL_EXPORT_END VALUE rb_fstring_new(const char *ptr, long len); diff --git a/internal/thread.h b/internal/thread.h index 47273436e3bdbd..e079ebb22b1783 100644 --- a/internal/thread.h +++ b/internal/thread.h @@ -46,6 +46,9 @@ VALUE rb_thread_shield_wait(VALUE self); VALUE rb_thread_shield_release(VALUE self); VALUE rb_thread_shield_destroy(VALUE self); int rb_thread_to_be_killed(VALUE thread); +void rb_thread_acquire_fork_lock(void); +void rb_thread_release_fork_lock(void); +void rb_thread_reset_fork_lock(void); void rb_mutex_allow_trap(VALUE self, int val); VALUE rb_uninterruptible(VALUE (*b_proc)(VALUE), VALUE data); VALUE rb_mutex_owned_p(VALUE self); @@ -57,6 +60,7 @@ int rb_thread_wait_for_single_fd(int fd, int events, struct timeval * timeout); struct rb_io_close_wait_list { struct ccan_list_head pending_fd_users; VALUE closing_thread; + VALUE closing_fiber; VALUE wakeup_mutex; }; int rb_notify_fd_close(int fd, struct rb_io_close_wait_list *busy); @@ -64,6 +68,8 @@ void rb_notify_fd_close_wait(struct rb_io_close_wait_list *busy); RUBY_SYMBOL_EXPORT_BEGIN +void *rb_thread_prevent_fork(void *(*func)(void *), void *data); /* for ext/socket/raddrinfo.c */ + /* Temporary. This API will be removed (renamed). */ VALUE rb_thread_io_blocking_region(rb_blocking_function_t *func, void *data1, int fd); VALUE rb_thread_io_blocking_call(rb_blocking_function_t *func, void *data1, int fd, int events); diff --git a/io.c b/io.c index 54b60b7357e5c0..945c5f4fd15210 100644 --- a/io.c +++ b/io.c @@ -104,6 +104,16 @@ #ifdef HAVE_COPYFILE_H # include + +# ifndef COPYFILE_STATE_COPIED +/* + * Some OSes (e.g., OSX < 10.6) implement fcopyfile() but not + * COPYFILE_STATE_COPIED. Since the only use of the former here + * requires the latter, we disable the former when the latter is undefined. + */ +# undef HAVE_FCOPYFILE +# endif + #endif #include "ruby/internal/stdbool.h" @@ -212,6 +222,17 @@ static VALUE sym_HOLE; static VALUE prep_io(int fd, int fmode, VALUE klass, const char *path); +VALUE +rb_io_blocking_region_wait(struct rb_io *io, rb_blocking_function_t *function, void *argument, enum rb_io_event events) +{ + return rb_thread_io_blocking_call(function, argument, io->fd, events); +} + +VALUE rb_io_blocking_region(struct rb_io *io, rb_blocking_function_t *function, void *argument) +{ + return rb_io_blocking_region_wait(io, function, argument, 0); +} + struct argf { VALUE filename, current_file; long last_lineno; /* $. */ @@ -1288,7 +1309,7 @@ rb_io_read_memory(rb_io_t *fptr, void *buf, size_t count) iis.timeout = &timeout_storage; } - return (ssize_t)rb_thread_io_blocking_call(internal_read_func, &iis, fptr->fd, RB_WAITFD_IN); + return (ssize_t)rb_io_blocking_region_wait(fptr, internal_read_func, &iis, RUBY_IO_READABLE); } static ssize_t @@ -1321,7 +1342,7 @@ rb_io_write_memory(rb_io_t *fptr, const void *buf, size_t count) iis.timeout = &timeout_storage; } - return (ssize_t)rb_thread_io_blocking_call(internal_write_func, &iis, fptr->fd, RB_WAITFD_OUT); + return (ssize_t)rb_io_blocking_region_wait(fptr, internal_write_func, &iis, RUBY_IO_WRITABLE); } #ifdef HAVE_WRITEV @@ -1358,7 +1379,7 @@ rb_writev_internal(rb_io_t *fptr, const struct iovec *iov, int iovcnt) iis.timeout = &timeout_storage; } - return (ssize_t)rb_thread_io_blocking_call(internal_writev_func, &iis, fptr->fd, RB_WAITFD_OUT); + return (ssize_t)rb_io_blocking_region_wait(fptr, internal_writev_func, &iis, RUBY_IO_WRITABLE); } #endif @@ -1388,7 +1409,7 @@ static VALUE io_flush_buffer_async(VALUE arg) { rb_io_t *fptr = (rb_io_t *)arg; - return rb_thread_io_blocking_call(io_flush_buffer_sync, fptr, fptr->fd, RB_WAITFD_OUT); + return rb_io_blocking_region_wait(fptr, io_flush_buffer_sync, fptr, RUBY_IO_WRITABLE); } static inline int @@ -1613,7 +1634,7 @@ rb_io_maybe_wait(int error, VALUE io, VALUE events, VALUE timeout) default: // Non-specific error, no event is ready: - return Qfalse; + return Qnil; } } @@ -1625,9 +1646,11 @@ rb_io_maybe_wait_readable(int error, VALUE io, VALUE timeout) if (RTEST(result)) { return RB_NUM2INT(result); } - else { - return 0; + else if (result == RUBY_Qfalse) { + rb_raise(rb_eIOTimeoutError, "Timed out waiting for IO to become readable!"); } + + return 0; } int @@ -1638,9 +1661,11 @@ rb_io_maybe_wait_writable(int error, VALUE io, VALUE timeout) if (RTEST(result)) { return RB_NUM2INT(result); } - else { - return 0; + else if (result == RUBY_Qfalse) { + rb_raise(rb_eIOTimeoutError, "Timed out waiting for IO to become writable!"); } + + return 0; } static void @@ -2774,8 +2799,10 @@ rb_io_fsync(VALUE io) if (io_fflush(fptr) < 0) rb_sys_fail_on_write(fptr); - if ((int)rb_thread_io_blocking_region(nogvl_fsync, fptr, fptr->fd) < 0) + + if ((int)rb_io_blocking_region(fptr, nogvl_fsync, fptr)) rb_sys_fail_path(fptr->pathv); + return INT2FIX(0); } #else @@ -2824,7 +2851,7 @@ rb_io_fdatasync(VALUE io) if (io_fflush(fptr) < 0) rb_sys_fail_on_write(fptr); - if ((int)rb_thread_io_blocking_region(nogvl_fdatasync, fptr, fptr->fd) == 0) + if ((int)rb_io_blocking_region(fptr, nogvl_fdatasync, fptr) == 0) return INT2FIX(0); /* fall back */ @@ -3409,10 +3436,10 @@ io_read_memory_call(VALUE arg) } if (iis->nonblock) { - return rb_thread_io_blocking_call(internal_read_func, iis, iis->fptr->fd, 0); + return rb_io_blocking_region(iis->fptr, internal_read_func, iis); } else { - return rb_thread_io_blocking_call(internal_read_func, iis, iis->fptr->fd, RB_WAITFD_IN); + return rb_io_blocking_region_wait(iis->fptr, internal_read_func, iis, RUBY_IO_READABLE); } } @@ -4369,23 +4396,31 @@ rb_io_set_lineno(VALUE io, VALUE lineno) static VALUE io_readline(rb_execution_context_t *ec, VALUE io, VALUE sep, VALUE lim, VALUE chomp) { + long limit = -1; if (NIL_P(lim)) { + VALUE tmp = Qnil; // If sep is specified, but it's not a string and not nil, then assume // it's the limit (it should be an integer) - if (!NIL_P(sep) && NIL_P(rb_check_string_type(sep))) { + if (!NIL_P(sep) && NIL_P(tmp = rb_check_string_type(sep))) { // If the user has specified a non-nil / non-string value // for the separator, we assume it's the limit and set the // separator to default: rb_rs. lim = sep; + limit = NUM2LONG(lim); sep = rb_rs; } + else { + sep = tmp; + } } - - if (!NIL_P(sep)) { - StringValue(sep); + else { + if (!NIL_P(sep)) StringValue(sep); + limit = NUM2LONG(lim); } - VALUE line = rb_io_getline_1(sep, NIL_P(lim) ? -1L : NUM2LONG(lim), RTEST(chomp), io); + check_getline_args(&sep, &limit, io); + + VALUE line = rb_io_getline_1(sep, limit, RTEST(chomp), io); rb_lastline_set_up(line, 1); if (NIL_P(line)) { @@ -6085,7 +6120,7 @@ rb_io_sysread(int argc, VALUE *argv, VALUE io) } struct prdwr_internal_arg { - VALUE io; + struct rb_io *io; int fd; void *buf; size_t count; @@ -6107,14 +6142,14 @@ pread_internal_call(VALUE _arg) VALUE scheduler = rb_fiber_scheduler_current(); if (scheduler != Qnil) { - VALUE result = rb_fiber_scheduler_io_pread_memory(scheduler, arg->io, arg->offset, arg->buf, arg->count, 0); + VALUE result = rb_fiber_scheduler_io_pread_memory(scheduler, arg->io->self, arg->offset, arg->buf, arg->count, 0); if (!UNDEF_P(result)) { return rb_fiber_scheduler_io_result_apply(result); } } - return rb_thread_io_blocking_call(internal_pread_func, arg, arg->fd, RB_WAITFD_IN); + return rb_io_blocking_region_wait(arg->io, internal_pread_func, arg, RUBY_IO_READABLE); } /* @@ -6151,7 +6186,7 @@ rb_io_pread(int argc, VALUE *argv, VALUE io) VALUE len, offset, str; rb_io_t *fptr; ssize_t n; - struct prdwr_internal_arg arg = {.io = io}; + struct prdwr_internal_arg arg; int shrinkable; rb_scan_args(argc, argv, "21", &len, &offset, &str); @@ -6165,6 +6200,7 @@ rb_io_pread(int argc, VALUE *argv, VALUE io) GetOpenFile(io, fptr); rb_io_check_byte_readable(fptr); + arg.io = fptr; arg.fd = fptr->fd; rb_io_check_closed(fptr); @@ -6189,7 +6225,7 @@ internal_pwrite_func(void *_arg) VALUE scheduler = rb_fiber_scheduler_current(); if (scheduler != Qnil) { - VALUE result = rb_fiber_scheduler_io_pwrite_memory(scheduler, arg->io, arg->offset, arg->buf, arg->count, 0); + VALUE result = rb_fiber_scheduler_io_pwrite_memory(scheduler, arg->io->self, arg->offset, arg->buf, arg->count, 0); if (!UNDEF_P(result)) { return rb_fiber_scheduler_io_result_apply(result); @@ -6230,7 +6266,7 @@ rb_io_pwrite(VALUE io, VALUE str, VALUE offset) { rb_io_t *fptr; ssize_t n; - struct prdwr_internal_arg arg = {.io = io}; + struct prdwr_internal_arg arg; VALUE tmp; if (!RB_TYPE_P(str, T_STRING)) @@ -6241,13 +6277,15 @@ rb_io_pwrite(VALUE io, VALUE str, VALUE offset) io = GetWriteIO(io); GetOpenFile(io, fptr); rb_io_check_writable(fptr); + + arg.io = fptr; arg.fd = fptr->fd; tmp = rb_str_tmp_frozen_acquire(str); arg.buf = RSTRING_PTR(tmp); arg.count = (size_t)RSTRING_LEN(tmp); - n = (ssize_t)rb_thread_io_blocking_call(internal_pwrite_func, &arg, fptr->fd, RB_WAITFD_OUT); + n = (ssize_t)rb_io_blocking_region_wait(fptr, internal_pwrite_func, &arg, RUBY_IO_WRITABLE); if (n < 0) rb_sys_fail_path(fptr->pathv); rb_str_tmp_frozen_release(str, tmp); @@ -6956,7 +6994,10 @@ sysopen_func(void *ptr) static inline int rb_sysopen_internal(struct sysopen_struct *data) { - int fd = IO_WITHOUT_GVL_INT(sysopen_func, data); + int fd; + do { + fd = IO_WITHOUT_GVL_INT(sysopen_func, data); + } while (fd < 0 && errno == EINTR); if (0 <= fd) rb_update_max_fd(fd); return fd; @@ -10789,7 +10830,7 @@ do_io_advise(rb_io_t *fptr, VALUE advice, rb_off_t offset, rb_off_t len) ias.offset = offset; ias.len = len; - rv = (int)rb_thread_io_blocking_region(io_advise_internal, &ias, fptr->fd); + rv = (int)rb_io_blocking_region(fptr, io_advise_internal, &ias); if (rv && rv != ENOSYS) { /* posix_fadvise(2) doesn't set errno. On success it returns 0; otherwise it returns the error code. */ @@ -11082,16 +11123,16 @@ nogvl_ioctl(void *ptr) } static int -do_ioctl(int fd, ioctl_req_t cmd, long narg) +do_ioctl(struct rb_io *io, ioctl_req_t cmd, long narg) { int retval; struct ioctl_arg arg; - arg.fd = fd; + arg.fd = io->fd; arg.cmd = cmd; arg.narg = narg; - retval = (int)rb_thread_io_blocking_region(nogvl_ioctl, &arg, fd); + retval = (int)rb_io_blocking_region(io, nogvl_ioctl, &arg); return retval; } @@ -11354,7 +11395,7 @@ rb_ioctl(VALUE io, VALUE req, VALUE arg) narg = setup_narg(cmd, &arg, ioctl_narg_len); GetOpenFile(io, fptr); - retval = do_ioctl(fptr->fd, cmd, narg); + retval = do_ioctl(fptr, cmd, narg); return finish_narg(retval, arg, fptr); } @@ -11408,16 +11449,16 @@ nogvl_fcntl(void *ptr) } static int -do_fcntl(int fd, int cmd, long narg) +do_fcntl(struct rb_io *io, int cmd, long narg) { int retval; struct fcntl_arg arg; - arg.fd = fd; + arg.fd = io->fd; arg.cmd = cmd; arg.narg = narg; - retval = (int)rb_thread_io_blocking_region(nogvl_fcntl, &arg, fd); + retval = (int)rb_io_blocking_region(io, nogvl_fcntl, &arg); if (retval != -1) { switch (cmd) { #if defined(F_DUPFD) @@ -11443,7 +11484,7 @@ rb_fcntl(VALUE io, VALUE req, VALUE arg) narg = setup_narg(cmd, &arg, fcntl_narg_len); GetOpenFile(io, fptr); - retval = do_fcntl(fptr->fd, cmd, narg); + retval = do_fcntl(fptr, cmd, narg); return finish_narg(retval, arg, fptr); } diff --git a/io_buffer.c b/io_buffer.c index e6ca61bdae0136..51ddde8c29c71b 100644 --- a/io_buffer.c +++ b/io_buffer.c @@ -6,7 +6,6 @@ **********************************************************************/ -#include "ruby/io.h" #include "ruby/io/buffer.h" #include "ruby/fiber/scheduler.h" @@ -16,7 +15,7 @@ #include "internal/error.h" #include "internal/numeric.h" #include "internal/string.h" -#include "internal/thread.h" +#include "internal/io.h" VALUE rb_cIOBuffer; VALUE rb_eIOBufferLockedError; @@ -843,7 +842,8 @@ rb_io_buffer_get_bytes(VALUE self, void **base, size_t *size) static inline void io_buffer_get_bytes_for_writing(struct rb_io_buffer *buffer, void **base, size_t *size) { - if (buffer->flags & RB_IO_BUFFER_READONLY) { + if (buffer->flags & RB_IO_BUFFER_READONLY || + (!NIL_P(buffer->source) && OBJ_FROZEN(buffer->source))) { rb_raise(rb_eIOBufferAccessError, "Buffer is not writable!"); } @@ -1532,6 +1532,7 @@ rb_io_buffer_slice(struct rb_io_buffer *buffer, VALUE self, size_t offset, size_ struct rb_io_buffer *slice = NULL; TypedData_Get_Struct(instance, struct rb_io_buffer, &rb_io_buffer_type, slice); + slice->flags |= (buffer->flags & RB_IO_BUFFER_READONLY); slice->base = (char*)buffer->base + offset; slice->size = length; @@ -1566,7 +1567,7 @@ rb_io_buffer_slice(struct rb_io_buffer *buffer, VALUE self, size_t offset, size_ * buffer's bounds. * * string = 'test' - * buffer = IO::Buffer.for(string) + * buffer = IO::Buffer.for(string).dup * * slice = buffer.slice * # => @@ -1593,12 +1594,8 @@ rb_io_buffer_slice(struct rb_io_buffer *buffer, VALUE self, size_t offset, size_ * # it is also visible at position 1 of the original buffer * buffer * # => - * # # + * # # * # 0x00000000 74 6f 73 74 tost - * - * # ...and original string - * string - * # => tost */ static VALUE io_buffer_slice(int argc, VALUE *argv, VALUE self) @@ -2441,10 +2438,11 @@ rb_io_buffer_initialize_copy(VALUE self, VALUE source) * * #copy can be used to put buffer into strings associated with buffer: * - * string= "data: " + * string = "data: " * # => "data: " - * buffer = IO::Buffer.for(string) - * buffer.copy(IO::Buffer.for("test"), 5) + * buffer = IO::Buffer.for(string) do |buffer| + * buffer.copy(IO::Buffer.for("test"), 5) + * end * # => 4 * string * # => "data:test" @@ -2588,29 +2586,29 @@ rb_io_buffer_clear(VALUE self, uint8_t value, size_t offset, size_t length) * Fill buffer with +value+, starting with +offset+ and going for +length+ * bytes. * - * buffer = IO::Buffer.for('test') + * buffer = IO::Buffer.for('test').dup * # => - * # + * # * # 0x00000000 74 65 73 74 test * * buffer.clear * # => - * # + * # * # 0x00000000 00 00 00 00 .... * * buf.clear(1) # fill with 1 * # => - * # + * # * # 0x00000000 01 01 01 01 .... * * buffer.clear(2, 1, 2) # fill with 2, starting from offset 1, for 2 bytes * # => - * # + * # * # 0x00000000 01 02 02 01 .... * * buffer.clear(2, 1) # fill with 2, starting from offset 1 * # => - * # + * # * # 0x00000000 01 02 02 02 .... */ static VALUE @@ -2657,10 +2655,10 @@ io_buffer_default_size(size_t page_size) } struct io_buffer_blocking_region_argument { + struct rb_io *io; struct rb_io_buffer *buffer; rb_blocking_function_t *function; void *data; - int descriptor; }; static VALUE @@ -2668,7 +2666,7 @@ io_buffer_blocking_region_begin(VALUE _argument) { struct io_buffer_blocking_region_argument *argument = (void*)_argument; - return rb_thread_io_blocking_region(argument->function, argument->data, argument->descriptor); + return rb_io_blocking_region(argument->io, argument->function, argument->data); } static VALUE @@ -2682,13 +2680,17 @@ io_buffer_blocking_region_ensure(VALUE _argument) } static VALUE -io_buffer_blocking_region(struct rb_io_buffer *buffer, rb_blocking_function_t *function, void *data, int descriptor) +io_buffer_blocking_region(VALUE io, struct rb_io_buffer *buffer, rb_blocking_function_t *function, void *data) { + io = rb_io_get_io(io); + struct rb_io *ioptr; + RB_IO_POINTER(io, ioptr); + struct io_buffer_blocking_region_argument argument = { + .io = ioptr, .buffer = buffer, .function = function, .data = data, - .descriptor = descriptor, }; // If the buffer is already locked, we can skip the ensure (unlock): @@ -2775,7 +2777,7 @@ rb_io_buffer_read(VALUE self, VALUE io, size_t length, size_t offset) .length = length, }; - return io_buffer_blocking_region(buffer, io_buffer_read_internal, &argument, descriptor); + return io_buffer_blocking_region(io, buffer, io_buffer_read_internal, &argument); } /* @@ -2893,7 +2895,7 @@ rb_io_buffer_pread(VALUE self, VALUE io, rb_off_t from, size_t length, size_t of .offset = from, }; - return io_buffer_blocking_region(buffer, io_buffer_pread_internal, &argument, descriptor); + return io_buffer_blocking_region(io, buffer, io_buffer_pread_internal, &argument); } /* @@ -3012,7 +3014,7 @@ rb_io_buffer_write(VALUE self, VALUE io, size_t length, size_t offset) .length = length, }; - return io_buffer_blocking_region(buffer, io_buffer_write_internal, &argument, descriptor); + return io_buffer_blocking_region(io, buffer, io_buffer_write_internal, &argument); } /* @@ -3130,7 +3132,7 @@ rb_io_buffer_pwrite(VALUE self, VALUE io, rb_off_t from, size_t length, size_t o .offset = from, }; - return io_buffer_blocking_region(buffer, io_buffer_pwrite_internal, &argument, descriptor); + return io_buffer_blocking_region(io, buffer, io_buffer_pwrite_internal, &argument); } /* diff --git a/iseq.c b/iseq.c index 73b13158bda893..282371f84a8e50 100644 --- a/iseq.c +++ b/iseq.c @@ -370,11 +370,13 @@ rb_iseq_mark_and_move(rb_iseq_t *iseq, bool reference_updating) } } - if (body->param.flags.has_kw && ISEQ_COMPILE_DATA(iseq) == NULL) { + if (body->param.flags.has_kw && body->param.keyword != NULL) { const struct rb_iseq_param_keyword *const keyword = body->param.keyword; - for (int j = 0, i = keyword->required_num; i < keyword->num; i++, j++) { - rb_gc_mark_and_move(&keyword->default_values[j]); + if (keyword->default_values != NULL) { + for (int j = 0, i = keyword->required_num; i < keyword->num; i++, j++) { + rb_gc_mark_and_move(&keyword->default_values[j]); + } } } @@ -1296,6 +1298,7 @@ pm_iseq_compile_with_option(VALUE src, VALUE file, VALUE realpath, VALUE line, V pm_parse_result_t result = { 0 }; pm_options_line_set(&result.options, NUM2INT(line)); + pm_options_scopes_init(&result.options, 1); result.node.coverage_enabled = 1; switch (option.frozen_string_literal) { @@ -1579,7 +1582,49 @@ iseqw_s_compile_parser(int argc, VALUE *argv, VALUE self, bool prism) static VALUE iseqw_s_compile(int argc, VALUE *argv, VALUE self) { - return iseqw_s_compile_parser(argc, argv, self, *rb_ruby_prism_ptr()); + return iseqw_s_compile_parser(argc, argv, self, rb_ruby_prism_p()); +} + +/* + * call-seq: + * InstructionSequence.compile_parsey(source[, file[, path[, line[, options]]]]) -> iseq + * + * Takes +source+, which can be a string of Ruby code, or an open +File+ object. + * that contains Ruby source code. It parses and compiles using parse.y. + * + * Optionally takes +file+, +path+, and +line+ which describe the file path, + * real path and first line number of the ruby code in +source+ which are + * metadata attached to the returned +iseq+. + * + * +file+ is used for `__FILE__` and exception backtrace. +path+ is used for + * +require_relative+ base. It is recommended these should be the same full + * path. + * + * +options+, which can be +true+, +false+ or a +Hash+, is used to + * modify the default behavior of the Ruby iseq compiler. + * + * For details regarding valid compile options see ::compile_option=. + * + * RubyVM::InstructionSequence.compile_parsey("a = 1 + 2") + * #=> @> + * + * path = "test.rb" + * RubyVM::InstructionSequence.compile_parsey(File.read(path), path, File.expand_path(path)) + * #=> @test.rb:1> + * + * file = File.open("test.rb") + * RubyVM::InstructionSequence.compile_parsey(file) + * #=> @:1> + * + * path = File.expand_path("test.rb") + * RubyVM::InstructionSequence.compile_parsey(File.read(path), path, path) + * #=> @/absolute/path/to/test.rb:1> + * + */ +static VALUE +iseqw_s_compile_parsey(int argc, VALUE *argv, VALUE self) +{ + return iseqw_s_compile_parser(argc, argv, self, false); } /* @@ -1602,19 +1647,19 @@ iseqw_s_compile(int argc, VALUE *argv, VALUE self) * * For details regarding valid compile options see ::compile_option=. * - * RubyVM::InstructionSequence.compile("a = 1 + 2") + * RubyVM::InstructionSequence.compile_prism("a = 1 + 2") * #=> @> * * path = "test.rb" - * RubyVM::InstructionSequence.compile(File.read(path), path, File.expand_path(path)) + * RubyVM::InstructionSequence.compile_prism(File.read(path), path, File.expand_path(path)) * #=> @test.rb:1> * * file = File.open("test.rb") - * RubyVM::InstructionSequence.compile(file) + * RubyVM::InstructionSequence.compile_prism(file) * #=> @:1> * * path = File.expand_path("test.rb") - * RubyVM::InstructionSequence.compile(File.read(path), path, path) + * RubyVM::InstructionSequence.compile_prism(File.read(path), path, path) * #=> @/absolute/path/to/test.rb:1> * */ @@ -4296,6 +4341,7 @@ Init_ISeq(void) (void)iseq_s_load; rb_define_singleton_method(rb_cISeq, "compile", iseqw_s_compile, -1); + rb_define_singleton_method(rb_cISeq, "compile_parsey", iseqw_s_compile_parsey, -1); rb_define_singleton_method(rb_cISeq, "compile_prism", iseqw_s_compile_prism, -1); rb_define_singleton_method(rb_cISeq, "compile_file_prism", iseqw_s_compile_file_prism, -1); rb_define_singleton_method(rb_cISeq, "new", iseqw_s_compile, -1); diff --git a/kernel.rb b/kernel.rb index 541d0cfd9d11bf..07878e82dc04a4 100644 --- a/kernel.rb +++ b/kernel.rb @@ -105,9 +105,9 @@ def tap # require 'open-uri' # require 'json' # - # construct_url(arguments). - # then {|url| URI(url).read }. - # then {|response| JSON.parse(response) } + # construct_url(arguments) + # .then {|url| URI(url).read } + # .then {|response| JSON.parse(response) } # # When called without block, the method returns +Enumerator+, # which can be used, for example, for conditional @@ -118,15 +118,6 @@ def tap # # does not meet condition, drop value # 2.then.detect(&:odd?) # => nil # - # Good usage for +then+ is value piping in method chains: - # - # require 'open-uri' - # require 'json' - # - # construct_url(arguments). - # then {|url| URI(url).read }. - # then {|response| JSON.parse(response) } - # def then Primitive.attr! :inline_block unless defined?(yield) @@ -135,21 +126,7 @@ def then yield(self) end - # - # call-seq: - # obj.yield_self {|x| block } -> an_object - # - # Yields self to the block and returns the result of the block. - # - # "my string".yield_self {|s| s.upcase } #=> "MY STRING" - # - def yield_self - Primitive.attr! :inline_block - unless defined?(yield) - return Primitive.cexpr! 'SIZED_ENUMERATOR(self, 0, 0, rb_obj_size)' - end - yield(self) - end + alias yield_self then module_function diff --git a/lib/benchmark.gemspec b/lib/benchmark.gemspec index d6e98db805cffd..35deff8d181278 100644 --- a/lib/benchmark.gemspec +++ b/lib/benchmark.gemspec @@ -16,6 +16,8 @@ Gem::Specification.new do |spec| spec.homepage = "https://github.com/ruby/benchmark" spec.licenses = ["Ruby", "BSD-2-Clause"] + spec.required_ruby_version = ">= 2.1.0" + spec.metadata["homepage_uri"] = spec.homepage spec.metadata["source_code_uri"] = spec.homepage diff --git a/lib/benchmark.rb b/lib/benchmark.rb index 9f43255e42e98b..5072bdc2f383ed 100644 --- a/lib/benchmark.rb +++ b/lib/benchmark.rb @@ -307,6 +307,10 @@ def measure(label = "") # :yield: # # Returns the elapsed real time used to execute the given block. + # The unit of time is seconds. + # + # Benchmark.realtime { "a" * 1_000_000_000 } + # #=> 0.5098029999935534 # def realtime # :yield: r0 = Process.clock_gettime(Process::CLOCK_MONOTONIC) diff --git a/lib/bundled_gems.rb b/lib/bundled_gems.rb index e3d2617457f2a1..38057cf6c53931 100644 --- a/lib/bundled_gems.rb +++ b/lib/bundled_gems.rb @@ -4,9 +4,6 @@ module Gem::BUNDLED_GEMS SINCE = { - "rexml" => "3.0.0", - "rss" => "3.0.0", - "webrick" => "3.0.0", "matrix" => "3.1.0", "net-ftp" => "3.1.0", "net-imap" => "3.1.0", @@ -32,6 +29,10 @@ module Gem::BUNDLED_GEMS "win32ole" => "3.5.0", "fiddle" => "3.5.0", "logger" => "3.5.0", + "benchmark" => "3.5.0", + "irb" => "3.5.0", + "reline" => "3.5.0", + # "readline" => "3.5.0", # This is wrapper for reline. We don't warn for this. }.freeze SINCE_FAST_PATH = SINCE.transform_keys { |g| g.sub(/\A.*\-/, "") }.freeze @@ -48,6 +49,10 @@ module Gem::BUNDLED_GEMS "syslog" => true, }.freeze + OPTIONAL = { + "fiddle" => true, + }.freeze + WARNED = {} # unfrozen conf = ::RbConfig::CONFIG @@ -65,15 +70,30 @@ def self.replace_require(specs) [::Kernel.singleton_class, ::Kernel].each do |kernel_class| kernel_class.send(:alias_method, :no_warning_require, :require) kernel_class.send(:define_method, :require) do |name| - if message = ::Gem::BUNDLED_GEMS.warning?(name, specs: spec_names) + + message = ::Gem::BUNDLED_GEMS.warning?(name, specs: spec_names) + begin + result = kernel_class.send(:no_warning_require, name) + rescue LoadError => e + result = e + end + + # Don't warn if the gem is optional dependency and not found in the Bundler environment. + if !(result.is_a?(LoadError) && OPTIONAL[name]) && message if ::Gem::BUNDLED_GEMS.uplevel > 0 Kernel.warn message, uplevel: ::Gem::BUNDLED_GEMS.uplevel else Kernel.warn message end end - kernel_class.send(:no_warning_require, name) + + if result.is_a?(LoadError) + raise result + else + result + end end + if kernel_class == ::Kernel kernel_class.send(:private, :require) else @@ -129,6 +149,11 @@ def self.warning?(name, specs: nil) # name can be a feature name or a file path with String or Pathname feature = File.path(name) + # irb already has reline as a dependency on gemspec, so we don't want to warn about it. + # We should update this with a more general solution when we have another case. + # ex: Gem.loaded_specs[called_gem].dependencies.any? {|d| d.name == feature } + return false if feature.start_with?("reline") && caller_locations(2, 1)[0].to_s.include?("irb") + # The actual checks needed to properly identify the gem being required # are costly (see [Bug #20641]), so we first do a much cheaper check # to exclude the vast majority of candidates. diff --git a/lib/bundler.rb b/lib/bundler.rb index e7efeb8fa6086b..a195405fd9c210 100644 --- a/lib/bundler.rb +++ b/lib/bundler.rb @@ -384,28 +384,12 @@ def clean_env # @return [Hash] Environment with all bundler-related variables removed def unbundled_env - env = original_env - - if env.key?("BUNDLER_ORIG_MANPATH") - env["MANPATH"] = env["BUNDLER_ORIG_MANPATH"] - end - - env.delete_if {|k, _| k[0, 7] == "BUNDLE_" } - - if env.key?("RUBYOPT") - rubyopt = env["RUBYOPT"].split(" ") - rubyopt.delete("-r#{File.expand_path("bundler/setup", __dir__)}") - rubyopt.delete("-rbundler/setup") - env["RUBYOPT"] = rubyopt.join(" ") - end - - if env.key?("RUBYLIB") - rubylib = env["RUBYLIB"].split(File::PATH_SEPARATOR) - rubylib.delete(__dir__) - env["RUBYLIB"] = rubylib.join(File::PATH_SEPARATOR) - end + unbundle_env(original_env) + end - env + # Remove all bundler-related variables from ENV + def unbundle_env! + ENV.replace(unbundle_env(ENV)) end # Run block with environment present before Bundler was activated @@ -593,7 +577,7 @@ def load_plugins(definition = Bundler.definition) requested_path_gems = definition.requested_specs.select {|s| s.source.is_a?(Source::Path) } path_plugin_files = requested_path_gems.map do |spec| - Bundler.rubygems.spec_matches_for_glob(spec, "rubygems_plugin#{Bundler.rubygems.suffix_pattern}") + spec.matches_for_glob("rubygems_plugin#{Bundler.rubygems.suffix_pattern}") rescue TypeError error_message = "#{spec.name} #{spec.version} has an invalid gemspec" raise Gem::InvalidSpecificationException, error_message @@ -651,6 +635,30 @@ def self_manager private + def unbundle_env(env) + if env.key?("BUNDLER_ORIG_MANPATH") + env["MANPATH"] = env["BUNDLER_ORIG_MANPATH"] + end + + env.delete_if {|k, _| k[0, 7] == "BUNDLE_" } + env.delete("BUNDLER_SETUP") + + if env.key?("RUBYOPT") + rubyopt = env["RUBYOPT"].split(" ") + rubyopt.delete("-r#{File.expand_path("bundler/setup", __dir__)}") + rubyopt.delete("-rbundler/setup") + env["RUBYOPT"] = rubyopt.join(" ") + end + + if env.key?("RUBYLIB") + rubylib = env["RUBYLIB"].split(File::PATH_SEPARATOR) + rubylib.delete(__dir__) + env["RUBYLIB"] = rubylib.join(File::PATH_SEPARATOR) + end + + env + end + def load_marshal(data, marshal_proc: nil) Marshal.load(data, marshal_proc) rescue TypeError => e @@ -670,7 +678,7 @@ def eval_gemspec(path, contents) rescue ScriptError, StandardError => e msg = "There was an error while loading `#{path.basename}`: #{e.message}" - raise GemspecError, Dsl::DSLError.new(msg, path, e.backtrace, contents) + raise GemspecError, Dsl::DSLError.new(msg, path.to_s, e.backtrace, contents) end def configure_gem_path diff --git a/lib/bundler/bundler.gemspec b/lib/bundler/bundler.gemspec index 2d6269fae1f51b..88411f295dd3d2 100644 --- a/lib/bundler/bundler.gemspec +++ b/lib/bundler/bundler.gemspec @@ -29,10 +29,10 @@ Gem::Specification.new do |s| "source_code_uri" => "https://github.com/rubygems/rubygems/tree/master/bundler", } - s.required_ruby_version = ">= 3.0.0" + s.required_ruby_version = ">= 3.1.0" # It should match the RubyGems version shipped with `required_ruby_version` above - s.required_rubygems_version = ">= 3.2.3" + s.required_rubygems_version = ">= 3.3.3" s.files = Dir.glob("lib/bundler{.rb,/**/*}", File::FNM_DOTMATCH).reject {|f| File.directory?(f) } diff --git a/lib/bundler/cli/add.rb b/lib/bundler/cli/add.rb index 002d9e1d33bd69..2b300e178395a0 100644 --- a/lib/bundler/cli/add.rb +++ b/lib/bundler/cli/add.rb @@ -34,7 +34,7 @@ def inject_dependencies end def validate_options! - raise InvalidOption, "You can not specify `--strict` and `--optimistic` at the same time." if options[:strict] && options[:optimistic] + raise InvalidOption, "You cannot specify `--strict` and `--optimistic` at the same time." if options[:strict] && options[:optimistic] # raise error when no gems are specified raise InvalidOption, "Please specify gems to add." if gems.empty? diff --git a/lib/bundler/cli/gem.rb b/lib/bundler/cli/gem.rb index a162c213f1997f..22bcf0e47aa272 100644 --- a/lib/bundler/cli/gem.rb +++ b/lib/bundler/cli/gem.rb @@ -191,7 +191,10 @@ def run templates.merge!("standard.yml.tt" => ".standard.yml") end - templates.merge!("exe/newgem.tt" => "exe/#{name}") if config[:exe] + if config[:exe] + templates.merge!("exe/newgem.tt" => "exe/#{name}") + executables.push("exe/#{name}") + end if extension == "c" templates.merge!( @@ -443,7 +446,7 @@ def rust_builder_required_rubygems_version end def required_ruby_version - "3.0.0" + "3.1.0" end def rubocop_version diff --git a/lib/bundler/cli/install.rb b/lib/bundler/cli/install.rb index 038ea246fb8aac..b0b354cf107698 100644 --- a/lib/bundler/cli/install.rb +++ b/lib/bundler/cli/install.rb @@ -12,7 +12,11 @@ def run warn_if_root - Bundler.self_manager.install_locked_bundler_and_restart_with_it_if_needed + if options[:local] + Bundler.self_manager.restart_with_locked_bundler_if_needed + else + Bundler.self_manager.install_locked_bundler_and_restart_with_it_if_needed + end Bundler::SharedHelpers.set_env "RB_USER_INSTALL", "1" if Gem.freebsd_platform? diff --git a/lib/bundler/cli/outdated.rb b/lib/bundler/cli/outdated.rb index ec42e631bb7545..75fcdca6412c0d 100644 --- a/lib/bundler/cli/outdated.rb +++ b/lib/bundler/cli/outdated.rb @@ -54,7 +54,7 @@ def run end if options[:parseable] - Bundler.ui.silence(&definition_resolution) + Bundler.ui.progress(&definition_resolution) else definition_resolution.call end @@ -97,28 +97,26 @@ def run } end - if outdated_gems.empty? + relevant_outdated_gems = if options_include_groups + outdated_gems.group_by {|g| g[:groups] }.sort.flat_map do |groups, gems| + contains_group = groups.split(", ").include?(options[:group]) + next unless options[:groups] || contains_group + + gems + end.compact + else + outdated_gems + end + + if relevant_outdated_gems.empty? unless options[:parseable] Bundler.ui.info(nothing_outdated_message) end else - if options_include_groups - relevant_outdated_gems = outdated_gems.group_by {|g| g[:groups] }.sort.flat_map do |groups, gems| - contains_group = groups.split(", ").include?(options[:group]) - next unless options[:groups] || contains_group - - gems - end.compact - - if options[:parseable] - print_gems(relevant_outdated_gems) - else - print_gems_table(relevant_outdated_gems) - end - elsif options[:parseable] - print_gems(outdated_gems) + if options[:parseable] + print_gems(relevant_outdated_gems) else - print_gems_table(outdated_gems) + print_gems_table(relevant_outdated_gems) end exit 1 diff --git a/lib/bundler/definition.rb b/lib/bundler/definition.rb index 5471a72fddc5fc..bb6eb11e4eaf7f 100644 --- a/lib/bundler/definition.rb +++ b/lib/bundler/definition.rb @@ -266,11 +266,7 @@ def dependencies_for(groups) groups.map!(&:to_sym) deps = current_dependencies # always returns a new array deps.select! do |d| - if RUBY_VERSION >= "3.1" - d.groups.intersect?(groups) - else - !(d.groups & groups).empty? - end + d.groups.intersect?(groups) end deps end @@ -317,7 +313,7 @@ def groups def lock(file_or_preserve_unknown_sections = false, preserve_unknown_sections_or_unused = false) if [true, false, nil].include?(file_or_preserve_unknown_sections) - target_lockfile = lockfile || Bundler.default_lockfile + target_lockfile = lockfile preserve_unknown_sections = file_or_preserve_unknown_sections else target_lockfile = file_or_preserve_unknown_sections @@ -511,15 +507,11 @@ def should_add_extra_platforms? end def lockfile_exists? - file_exists?(lockfile) - end - - def file_exists?(file) - file && File.exist?(file) + lockfile && File.exist?(lockfile) end def write_lock(file, preserve_unknown_sections) - return if Definition.no_lock + return if Definition.no_lock || file.nil? contents = to_lock @@ -536,7 +528,7 @@ def write_lock(file, preserve_unknown_sections) preserve_unknown_sections ||= !updating_major && (Bundler.frozen_bundle? || !(unlocking? || @unlocking_bundler)) - if file_exists?(file) && lockfiles_equal?(@lockfile_contents, contents, preserve_unknown_sections) + if File.exist?(file) && lockfiles_equal?(@lockfile_contents, contents, preserve_unknown_sections) return if Bundler.frozen_bundle? SharedHelpers.filesystem_access(file) { FileUtils.touch(file) } return @@ -562,7 +554,7 @@ def expanded_dependencies def dependencies_with_bundler return dependencies unless @unlocking_bundler - return dependencies if dependencies.map(&:name).include?("bundler") + return dependencies if dependencies.any? {|d| d.name == "bundler" } [Dependency.new("bundler", @unlocking_bundler)] + dependencies end diff --git a/lib/bundler/dsl.rb b/lib/bundler/dsl.rb index 6af80fb31f6ddc..24a9a7683a3d4a 100644 --- a/lib/bundler/dsl.rb +++ b/lib/bundler/dsl.rb @@ -42,20 +42,20 @@ def initialize end def eval_gemfile(gemfile, contents = nil) - expanded_gemfile_path = Pathname.new(gemfile).expand_path(@gemfile&.parent) - original_gemfile = @gemfile - @gemfile = expanded_gemfile_path - @gemfiles << expanded_gemfile_path - contents ||= Bundler.read_file(@gemfile.to_s) - instance_eval(contents, @gemfile.to_s, 1) - rescue Exception => e # rubocop:disable Lint/RescueException - message = "There was an error " \ - "#{e.is_a?(GemfileEvalError) ? "evaluating" : "parsing"} " \ - "`#{File.basename gemfile.to_s}`: #{e.message}" - - raise DSLError.new(message, gemfile, e.backtrace, contents) - ensure - @gemfile = original_gemfile + with_gemfile(gemfile) do |current_gemfile| + contents ||= Bundler.read_file(current_gemfile) + instance_eval(contents, current_gemfile, 1) + rescue GemfileEvalError => e + message = "There was an error evaluating `#{File.basename current_gemfile}`: #{e.message}" + raise DSLError.new(message, current_gemfile, e.backtrace, contents) + rescue GemfileError, InvalidArgumentError, InvalidOption, DeprecatedError, ScriptError => e + message = "There was an error parsing `#{File.basename current_gemfile}`: #{e.message}" + raise DSLError.new(message, current_gemfile, e.backtrace, contents) + rescue StandardError => e + raise unless e.backtrace_locations.first.path == current_gemfile + message = "There was an error parsing `#{File.basename current_gemfile}`: #{e.message}" + raise DSLError.new(message, current_gemfile, e.backtrace, contents) + end end def gemspec(opts = nil) @@ -219,7 +219,7 @@ def git(uri, options = {}, &blk) end def github(repo, options = {}) - raise ArgumentError, "GitHub sources require a block" unless block_given? + raise InvalidArgumentError, "GitHub sources require a block" unless block_given? github_uri = @git_sources["github"].call(repo) git_options = normalize_hash(options).merge("uri" => github_uri) git_source = @sources.add_git_source(git_options) @@ -285,6 +285,16 @@ def check_primary_source_safety private + def with_gemfile(gemfile) + expanded_gemfile_path = Pathname.new(gemfile).expand_path(@gemfile&.parent) + original_gemfile = @gemfile + @gemfile = expanded_gemfile_path + @gemfiles << expanded_gemfile_path + yield @gemfile.to_s + ensure + @gemfile = original_gemfile + end + def add_git_sources git_source(:github) do |repo_name| if repo_name =~ GITHUB_PULL_REQUEST_URL @@ -577,23 +587,23 @@ def to_s return m unless backtrace && dsl_path && contents - trace_line = backtrace.find {|l| l.include?(dsl_path.to_s) } || trace_line + trace_line = backtrace.find {|l| l.include?(dsl_path) } || trace_line return m unless trace_line - line_numer = trace_line.split(":")[1].to_i - 1 - return m unless line_numer + line_number = trace_line.split(":")[1].to_i - 1 + return m unless line_number lines = contents.lines.to_a indent = " # " indicator = indent.tr("#", ">") - first_line = line_numer.zero? - last_line = (line_numer == (lines.count - 1)) + first_line = line_number.zero? + last_line = (line_number == (lines.count - 1)) m << "\n" m << "#{indent}from #{trace_line.gsub(/:in.*$/, "")}\n" m << "#{indent}-------------------------------------------\n" - m << "#{indent}#{lines[line_numer - 1]}" unless first_line - m << "#{indicator}#{lines[line_numer]}" - m << "#{indent}#{lines[line_numer + 1]}" unless last_line + m << "#{indent}#{lines[line_number - 1]}" unless first_line + m << "#{indicator}#{lines[line_number]}" + m << "#{indent}#{lines[line_number + 1]}" unless last_line m << "\n" unless m.end_with?("\n") m << "#{indent}-------------------------------------------\n" end @@ -603,7 +613,7 @@ def to_s def parse_line_number_from_description description = self.description - if dsl_path && description =~ /((#{Regexp.quote File.expand_path(dsl_path)}|#{Regexp.quote dsl_path.to_s}):\d+)/ + if dsl_path && description =~ /((#{Regexp.quote File.expand_path(dsl_path)}|#{Regexp.quote dsl_path}):\d+)/ trace_line = Regexp.last_match[1] description = description.sub(/\n.*\n(\.\.\.)? *\^~+$/, "").sub(/#{Regexp.quote trace_line}:\s*/, "").sub("\n", " - ") end diff --git a/lib/bundler/errors.rb b/lib/bundler/errors.rb index c29b1bfed89122..a0ce739ad7c64d 100644 --- a/lib/bundler/errors.rb +++ b/lib/bundler/errors.rb @@ -217,15 +217,15 @@ def initialize(orig_exception, msg) end class InsecureInstallPathError < BundlerError - def initialize(path) + def initialize(name, path) + @name = name @path = path end def message - "The installation path is insecure. Bundler cannot continue.\n" \ - "#{@path} is world-writable (without sticky bit).\n" \ - "Bundler cannot safely replace gems in world-writeable directories due to potential vulnerabilities.\n" \ - "Please change the permissions of this directory or choose a different install path." + "Bundler cannot reinstall #{@name} because there's a previous installation of it at #{@path} that is unsafe to remove.\n" \ + "The parent of #{@path} is world-writable and does not have the sticky bit set, making it insecure to remove due to potential vulnerabilities.\n" \ + "Please change the permissions of #{File.dirname(@path)} or choose a different install path." end status_code(38) @@ -244,4 +244,6 @@ def message status_code(39) end + + class InvalidArgumentError < BundlerError; status_code(40); end end diff --git a/lib/bundler/fetcher.rb b/lib/bundler/fetcher.rb index 6288b22dcd0636..14721623f9ded6 100644 --- a/lib/bundler/fetcher.rb +++ b/lib/bundler/fetcher.rb @@ -3,7 +3,7 @@ require_relative "vendored_persistent" require_relative "vendored_timeout" require "cgi" -require "securerandom" +require_relative "vendored_securerandom" require "zlib" module Bundler @@ -182,7 +182,7 @@ def user_agent agent << " ci/#{cis.join(",")}" if cis.any? # add a random ID so we can consolidate runs server-side - agent << " " << SecureRandom.hex(8) + agent << " " << Gem::SecureRandom.hex(8) # add any user agent strings set in the config extra_ua = Bundler.settings[:user_agent] diff --git a/lib/bundler/fetcher/compact_index.rb b/lib/bundler/fetcher/compact_index.rb index 6e5656d26a1fff..6c82d570114cde 100644 --- a/lib/bundler/fetcher/compact_index.rb +++ b/lib/bundler/fetcher/compact_index.rb @@ -10,7 +10,7 @@ def self.compact_index_request(method_name) method = instance_method(method_name) undef_method(method_name) define_method(method_name) do |*args, &blk| - method.bind(self).call(*args, &blk) + method.bind_call(self, *args, &blk) rescue NetworkDownError, CompactIndexClient::Updater::MismatchedChecksumError => e raise HTTPError, e.message rescue AuthenticationRequiredError, BadAuthenticationError diff --git a/lib/bundler/inline.rb b/lib/bundler/inline.rb index ae4ccf21385cb8..ca17d0233eaa9a 100644 --- a/lib/bundler/inline.rb +++ b/lib/bundler/inline.rb @@ -39,18 +39,20 @@ def gemfile(install = false, options = {}, &gemfile) Bundler.ui = ui raise ArgumentError, "Unknown options: #{opts.keys.join(", ")}" unless opts.empty? - Bundler.with_unbundled_env do + old_gemfile = ENV["BUNDLE_GEMFILE"] + + Bundler.unbundle_env! + + begin Bundler.instance_variable_set(:@bundle_path, Pathname.new(Gem.dir)) Bundler::SharedHelpers.set_env "BUNDLE_GEMFILE", "Gemfile" Bundler::Plugin.gemfile_install(&gemfile) if Bundler.feature_flag.plugins? builder = Bundler::Dsl.new builder.instance_eval(&gemfile) - builder.check_primary_source_safety Bundler.settings.temporary(deployment: false, frozen: false) do definition = builder.to_definition(nil, true) - def definition.lock(*); end definition.validate_runtime! if install || definition.missing_specs? @@ -62,12 +64,31 @@ def definition.lock(*); end end end - runtime = Bundler::Runtime.new(nil, definition) - runtime.setup.require - end - end + begin + runtime = Bundler::Runtime.new(nil, definition).setup + rescue Gem::LoadError => e + name = e.name + version = e.requirement.requirements.first[1] + activated_version = Gem.loaded_specs[name].version + + Bundler.ui.info \ + "The #{name} gem was resolved to #{version}, but #{activated_version} was activated by Bundler while installing it, causing a conflict. " \ + "Bundler will now retry resolving with #{activated_version} instead." - if ENV["BUNDLE_GEMFILE"].nil? - ENV["BUNDLE_GEMFILE"] = "" + builder.dependencies.delete_if {|d| d.name == name } + builder.instance_eval { gem name, activated_version } + definition = builder.to_definition(nil, true) + + retry + end + + runtime.require + end + ensure + if old_gemfile + ENV["BUNDLE_GEMFILE"] = old_gemfile + else + ENV["BUNDLE_GEMFILE"] = "" + end end end diff --git a/lib/bundler/installer.rb b/lib/bundler/installer.rb index 485782d1b410de..b65546a10a91d7 100644 --- a/lib/bundler/installer.rb +++ b/lib/bundler/installer.rb @@ -194,9 +194,14 @@ def generate_standalone_bundler_executable_stubs(spec, options = {}) # that said, it's a rare situation (other than rake), and parallel # installation is SO MUCH FASTER. so we let people opt in. def install(options) - force = options["force"] + standalone = options[:standalone] + force = options[:force] + local = options[:local] jobs = installation_parallelization(options) - install_in_parallel jobs, options[:standalone], force + spec_installations = ParallelInstaller.call(self, @definition.specs, jobs, standalone, force, local: local) + spec_installations.each do |installation| + post_install_messages[installation.name] = installation.post_install_message if installation.has_post_install_message? + end end def installation_parallelization(options) @@ -224,18 +229,11 @@ def ensure_specs_are_compatible! end end - def install_in_parallel(size, standalone, force = false) - spec_installations = ParallelInstaller.call(self, @definition.specs, size, standalone, force) - spec_installations.each do |installation| - post_install_messages[installation.name] = installation.post_install_message if installation.has_post_install_message? - end - end - # returns whether or not a re-resolve was needed def resolve_if_needed(options) - @definition.prefer_local! if options["prefer-local"] + @definition.prefer_local! if options[:"prefer-local"] - if options["local"] || (@definition.no_resolve_needed? && !@definition.missing_specs?) + if options[:local] || (@definition.no_resolve_needed? && !@definition.missing_specs?) @definition.resolve_with_cache! false else diff --git a/lib/bundler/installer/gem_installer.rb b/lib/bundler/installer/gem_installer.rb index a7770eb7e0b688..1da91857bd57b5 100644 --- a/lib/bundler/installer/gem_installer.rb +++ b/lib/bundler/installer/gem_installer.rb @@ -2,14 +2,15 @@ module Bundler class GemInstaller - attr_reader :spec, :standalone, :worker, :force, :installer + attr_reader :spec, :standalone, :worker, :force, :local, :installer - def initialize(spec, installer, standalone = false, worker = 0, force = false) + def initialize(spec, installer, standalone = false, worker = 0, force = false, local = false) @spec = spec @installer = installer @standalone = standalone @worker = worker @force = force + @local = local end def install_from_spec @@ -54,6 +55,7 @@ def install spec.source.install( spec, force: force, + local: local, build_args: Array(spec_settings), previous_spec: previous_spec, ) diff --git a/lib/bundler/installer/parallel_installer.rb b/lib/bundler/installer/parallel_installer.rb index e745088f81ad5d..d10e5ec92403ed 100644 --- a/lib/bundler/installer/parallel_installer.rb +++ b/lib/bundler/installer/parallel_installer.rb @@ -68,11 +68,12 @@ def self.call(*args, **kwargs) attr_reader :size - def initialize(installer, all_specs, size, standalone, force, skip: nil) + def initialize(installer, all_specs, size, standalone, force, local: false, skip: nil) @installer = installer @size = size @standalone = standalone @force = force + @local = local @specs = all_specs.map {|s| SpecInstallation.new(s) } @specs.each do |spec_install| spec_install.state = :installed if skip.include?(spec_install.name) @@ -127,7 +128,7 @@ def worker_pool def do_install(spec_install, worker_num) Plugin.hook(Plugin::Events::GEM_BEFORE_INSTALL, spec_install) gem_installer = Bundler::GemInstaller.new( - spec_install.spec, @installer, @standalone, worker_num, @force + spec_install.spec, @installer, @standalone, worker_num, @force, @local ) success, message = gem_installer.install_from_spec if success diff --git a/lib/bundler/man/bundle-add.1 b/lib/bundler/man/bundle-add.1 index ca82383c321542..dae05bd9458701 100644 --- a/lib/bundler/man/bundle-add.1 +++ b/lib/bundler/man/bundle-add.1 @@ -1,24 +1,12 @@ .\" generated with nRonn/v0.11.1 .\" https://github.com/n-ronn/nronn/tree/0.11.1 -.TH "BUNDLE\-ADD" "1" "August 2024" "" +.TH "BUNDLE\-ADD" "1" "September 2024" "" .SH "NAME" \fBbundle\-add\fR \- Add gem to the Gemfile and run bundle install .SH "SYNOPSIS" -\fBbundle add\fR \fIGEM_NAME\fR [\-\-group=GROUP] [\-\-version=VERSION] [\-\-source=SOURCE] [\-\-path=PATH] [\-\-git=GIT] [\-\-github=GITHUB] [\-\-branch=BRANCH] [\-\-ref=REF] [\-\-skip\-install] [\-\-strict] [\-\-optimistic] +\fBbundle add\fR \fIGEM_NAME\fR [\-\-group=GROUP] [\-\-version=VERSION] [\-\-source=SOURCE] [\-\-path=PATH] [\-\-git=GIT|\-\-github=GITHUB] [\-\-branch=BRANCH] [\-\-ref=REF] [\-\-skip\-install] [\-\-strict|\-\-optimistic] .SH "DESCRIPTION" -Adds the named gem to the Gemfile and run \fBbundle install\fR\. \fBbundle install\fR can be avoided by using the flag \fB\-\-skip\-install\fR\. -.P -Example: -.P -bundle add rails -.P -bundle add rails \-\-version "< 3\.0, > 1\.1" -.P -bundle add rails \-\-version "~> 5\.0\.0" \-\-source "https://gems\.example\.com" \-\-group "development" -.P -bundle add rails \-\-skip\-install -.P -bundle add rails \-\-group "development, test" +Adds the named gem to the [\fBGemfile(5)\fR][Gemfile(5)] and run \fBbundle install\fR\. \fBbundle install\fR can be avoided by using the flag \fB\-\-skip\-install\fR\. .SH "OPTIONS" .TP \fB\-\-version\fR, \fB\-v\fR @@ -56,4 +44,27 @@ Adds optimistic declaration of version\. .TP \fB\-\-strict\fR Adds strict declaration of version\. - +.SH "EXAMPLES" +.IP "1." 4 +You can add the \fBrails\fR gem to the Gemfile without any version restriction\. The source of the gem will be the global source\. +.IP +\fBbundle add rails\fR +.IP "2." 4 +You can add the \fBrails\fR gem with version greater than 1\.1 (not including 1\.1) and less than 3\.0\. +.IP +\fBbundle add rails \-\-version "> 1\.1, < 3\.0"\fR +.IP "3." 4 +You can use the \fBhttps://gems\.example\.com\fR custom source and assign the gem to a group\. +.IP +\fBbundle add rails \-\-version "~> 5\.0\.0" \-\-source "https://gems\.example\.com" \-\-group "development"\fR +.IP "4." 4 +The following adds the \fBgem\fR entry to the Gemfile without installing the gem\. You can install gems later via \fBbundle install\fR\. +.IP +\fBbundle add rails \-\-skip\-install\fR +.IP "5." 4 +You can assign the gem to more than one group\. +.IP +\fBbundle add rails \-\-group "development, test"\fR +.IP "" 0 +.SH "SEE ALSO" +Gemfile(5) \fIhttps://bundler\.io/man/gemfile\.5\.html\fR, bundle\-remove(1) \fIbundle\-remove\.1\.html\fR diff --git a/lib/bundler/man/bundle-add.1.ronn b/lib/bundler/man/bundle-add.1.ronn index 37c92e5fcdc70d..8b38c7a2483047 100644 --- a/lib/bundler/man/bundle-add.1.ronn +++ b/lib/bundler/man/bundle-add.1.ronn @@ -1,26 +1,19 @@ bundle-add(1) -- Add gem to the Gemfile and run bundle install -================================================================ +============================================================== ## SYNOPSIS -`bundle add` [--group=GROUP] [--version=VERSION] [--source=SOURCE] [--path=PATH] [--git=GIT] [--github=GITHUB] [--branch=BRANCH] [--ref=REF] [--skip-install] [--strict] [--optimistic] +`bundle add` [--group=GROUP] [--version=VERSION] [--source=SOURCE] + [--path=PATH] [--git=GIT|--github=GITHUB] [--branch=BRANCH] [--ref=REF] + [--skip-install] [--strict|--optimistic] ## DESCRIPTION -Adds the named gem to the Gemfile and run `bundle install`. `bundle install` can be avoided by using the flag `--skip-install`. -Example: - -bundle add rails - -bundle add rails --version "< 3.0, > 1.1" - -bundle add rails --version "~> 5.0.0" --source "https://gems.example.com" --group "development" - -bundle add rails --skip-install - -bundle add rails --group "development, test" +Adds the named gem to the [`Gemfile(5)`][Gemfile(5)] and run `bundle install`. +`bundle install` can be avoided by using the flag `--skip-install`. ## OPTIONS + * `--version`, `-v`: Specify version requirements(s) for the added gem. @@ -56,3 +49,33 @@ bundle add rails --group "development, test" * `--strict`: Adds strict declaration of version. + +## EXAMPLES + +1. You can add the `rails` gem to the Gemfile without any version restriction. + The source of the gem will be the global source. + + `bundle add rails` + +2. You can add the `rails` gem with version greater than 1.1 (not including 1.1) and less than 3.0. + + `bundle add rails --version "> 1.1, < 3.0"` + +3. You can use the `https://gems.example.com` custom source and assign the gem + to a group. + + `bundle add rails --version "~> 5.0.0" --source "https://gems.example.com" --group "development"` + +4. The following adds the `gem` entry to the Gemfile without installing the + gem. You can install gems later via `bundle install`. + + `bundle add rails --skip-install` + +5. You can assign the gem to more than one group. + + `bundle add rails --group "development, test"` + +## SEE ALSO + +[Gemfile(5)](https://bundler.io/man/gemfile.5.html), +[bundle-remove(1)](bundle-remove.1.html) diff --git a/lib/bundler/man/bundle-binstubs.1 b/lib/bundler/man/bundle-binstubs.1 index ab47bf97bb2de6..56c9966e75c1ca 100644 --- a/lib/bundler/man/bundle-binstubs.1 +++ b/lib/bundler/man/bundle-binstubs.1 @@ -1,6 +1,6 @@ .\" generated with nRonn/v0.11.1 .\" https://github.com/n-ronn/nronn/tree/0.11.1 -.TH "BUNDLE\-BINSTUBS" "1" "August 2024" "" +.TH "BUNDLE\-BINSTUBS" "1" "September 2024" "" .SH "NAME" \fBbundle\-binstubs\fR \- Install the binstubs of the listed gems .SH "SYNOPSIS" diff --git a/lib/bundler/man/bundle-cache.1 b/lib/bundler/man/bundle-cache.1 index 981b3c791aa219..d634eef203ee37 100644 --- a/lib/bundler/man/bundle-cache.1 +++ b/lib/bundler/man/bundle-cache.1 @@ -1,6 +1,6 @@ .\" generated with nRonn/v0.11.1 .\" https://github.com/n-ronn/nronn/tree/0.11.1 -.TH "BUNDLE\-CACHE" "1" "August 2024" "" +.TH "BUNDLE\-CACHE" "1" "September 2024" "" .SH "NAME" \fBbundle\-cache\fR \- Package your needed \fB\.gem\fR files into your application .SH "SYNOPSIS" diff --git a/lib/bundler/man/bundle-check.1 b/lib/bundler/man/bundle-check.1 index 5e6f69530c4ce9..e15a41e4fddba4 100644 --- a/lib/bundler/man/bundle-check.1 +++ b/lib/bundler/man/bundle-check.1 @@ -1,6 +1,6 @@ .\" generated with nRonn/v0.11.1 .\" https://github.com/n-ronn/nronn/tree/0.11.1 -.TH "BUNDLE\-CHECK" "1" "August 2024" "" +.TH "BUNDLE\-CHECK" "1" "September 2024" "" .SH "NAME" \fBbundle\-check\fR \- Verifies if dependencies are satisfied by installed gems .SH "SYNOPSIS" diff --git a/lib/bundler/man/bundle-clean.1 b/lib/bundler/man/bundle-clean.1 index 751bcfe9ed58e6..aa5ccf7594fffc 100644 --- a/lib/bundler/man/bundle-clean.1 +++ b/lib/bundler/man/bundle-clean.1 @@ -1,6 +1,6 @@ .\" generated with nRonn/v0.11.1 .\" https://github.com/n-ronn/nronn/tree/0.11.1 -.TH "BUNDLE\-CLEAN" "1" "August 2024" "" +.TH "BUNDLE\-CLEAN" "1" "September 2024" "" .SH "NAME" \fBbundle\-clean\fR \- Cleans up unused gems in your bundler directory .SH "SYNOPSIS" diff --git a/lib/bundler/man/bundle-config.1 b/lib/bundler/man/bundle-config.1 index a81869114d95f6..47104fb5c65b4d 100644 --- a/lib/bundler/man/bundle-config.1 +++ b/lib/bundler/man/bundle-config.1 @@ -1,6 +1,6 @@ .\" generated with nRonn/v0.11.1 .\" https://github.com/n-ronn/nronn/tree/0.11.1 -.TH "BUNDLE\-CONFIG" "1" "August 2024" "" +.TH "BUNDLE\-CONFIG" "1" "September 2024" "" .SH "NAME" \fBbundle\-config\fR \- Set bundler configuration options .SH "SYNOPSIS" diff --git a/lib/bundler/man/bundle-console.1 b/lib/bundler/man/bundle-console.1 index bd998476862df9..f2b2ddaed055bc 100644 --- a/lib/bundler/man/bundle-console.1 +++ b/lib/bundler/man/bundle-console.1 @@ -1,6 +1,6 @@ .\" generated with nRonn/v0.11.1 .\" https://github.com/n-ronn/nronn/tree/0.11.1 -.TH "BUNDLE\-CONSOLE" "1" "August 2024" "" +.TH "BUNDLE\-CONSOLE" "1" "September 2024" "" .SH "NAME" \fBbundle\-console\fR \- Deprecated way to open an IRB session with the bundle pre\-loaded .SH "SYNOPSIS" diff --git a/lib/bundler/man/bundle-doctor.1 b/lib/bundler/man/bundle-doctor.1 index 1d383e2a48f83b..f225d0cd791fbe 100644 --- a/lib/bundler/man/bundle-doctor.1 +++ b/lib/bundler/man/bundle-doctor.1 @@ -1,6 +1,6 @@ .\" generated with nRonn/v0.11.1 .\" https://github.com/n-ronn/nronn/tree/0.11.1 -.TH "BUNDLE\-DOCTOR" "1" "August 2024" "" +.TH "BUNDLE\-DOCTOR" "1" "September 2024" "" .SH "NAME" \fBbundle\-doctor\fR \- Checks the bundle for common problems .SH "SYNOPSIS" diff --git a/lib/bundler/man/bundle-exec.1 b/lib/bundler/man/bundle-exec.1 index 0b1a7316012009..e16b7bc7474b56 100644 --- a/lib/bundler/man/bundle-exec.1 +++ b/lib/bundler/man/bundle-exec.1 @@ -1,6 +1,6 @@ .\" generated with nRonn/v0.11.1 .\" https://github.com/n-ronn/nronn/tree/0.11.1 -.TH "BUNDLE\-EXEC" "1" "August 2024" "" +.TH "BUNDLE\-EXEC" "1" "September 2024" "" .SH "NAME" \fBbundle\-exec\fR \- Execute a command in the context of the bundle .SH "SYNOPSIS" diff --git a/lib/bundler/man/bundle-gem.1 b/lib/bundler/man/bundle-gem.1 index ee3d8e27883907..e6e58cd409382f 100644 --- a/lib/bundler/man/bundle-gem.1 +++ b/lib/bundler/man/bundle-gem.1 @@ -1,6 +1,6 @@ .\" generated with nRonn/v0.11.1 .\" https://github.com/n-ronn/nronn/tree/0.11.1 -.TH "BUNDLE\-GEM" "1" "August 2024" "" +.TH "BUNDLE\-GEM" "1" "September 2024" "" .SH "NAME" \fBbundle\-gem\fR \- Generate a project skeleton for creating a rubygem .SH "SYNOPSIS" diff --git a/lib/bundler/man/bundle-help.1 b/lib/bundler/man/bundle-help.1 index cd28a1ec3a06e3..d7a05f824e972f 100644 --- a/lib/bundler/man/bundle-help.1 +++ b/lib/bundler/man/bundle-help.1 @@ -1,6 +1,6 @@ .\" generated with nRonn/v0.11.1 .\" https://github.com/n-ronn/nronn/tree/0.11.1 -.TH "BUNDLE\-HELP" "1" "August 2024" "" +.TH "BUNDLE\-HELP" "1" "September 2024" "" .SH "NAME" \fBbundle\-help\fR \- Displays detailed help for each subcommand .SH "SYNOPSIS" diff --git a/lib/bundler/man/bundle-info.1 b/lib/bundler/man/bundle-info.1 index ace71632826d8a..6b401a57f42bca 100644 --- a/lib/bundler/man/bundle-info.1 +++ b/lib/bundler/man/bundle-info.1 @@ -1,6 +1,6 @@ .\" generated with nRonn/v0.11.1 .\" https://github.com/n-ronn/nronn/tree/0.11.1 -.TH "BUNDLE\-INFO" "1" "August 2024" "" +.TH "BUNDLE\-INFO" "1" "September 2024" "" .SH "NAME" \fBbundle\-info\fR \- Show information for the given gem in your bundle .SH "SYNOPSIS" diff --git a/lib/bundler/man/bundle-init.1 b/lib/bundler/man/bundle-init.1 index 1a7557f048a224..f2e444c7c283f8 100644 --- a/lib/bundler/man/bundle-init.1 +++ b/lib/bundler/man/bundle-init.1 @@ -1,6 +1,6 @@ .\" generated with nRonn/v0.11.1 .\" https://github.com/n-ronn/nronn/tree/0.11.1 -.TH "BUNDLE\-INIT" "1" "August 2024" "" +.TH "BUNDLE\-INIT" "1" "September 2024" "" .SH "NAME" \fBbundle\-init\fR \- Generates a Gemfile into the current working directory .SH "SYNOPSIS" diff --git a/lib/bundler/man/bundle-inject.1 b/lib/bundler/man/bundle-inject.1 index 9508d97786080d..8eb3633837cf0c 100644 --- a/lib/bundler/man/bundle-inject.1 +++ b/lib/bundler/man/bundle-inject.1 @@ -1,6 +1,6 @@ .\" generated with nRonn/v0.11.1 .\" https://github.com/n-ronn/nronn/tree/0.11.1 -.TH "BUNDLE\-INJECT" "1" "August 2024" "" +.TH "BUNDLE\-INJECT" "1" "September 2024" "" .SH "NAME" \fBbundle\-inject\fR \- Add named gem(s) with version requirements to Gemfile .SH "SYNOPSIS" diff --git a/lib/bundler/man/bundle-install.1 b/lib/bundler/man/bundle-install.1 index 5856a255ac10b3..7539d18f81fd9b 100644 --- a/lib/bundler/man/bundle-install.1 +++ b/lib/bundler/man/bundle-install.1 @@ -1,6 +1,6 @@ .\" generated with nRonn/v0.11.1 .\" https://github.com/n-ronn/nronn/tree/0.11.1 -.TH "BUNDLE\-INSTALL" "1" "August 2024" "" +.TH "BUNDLE\-INSTALL" "1" "September 2024" "" .SH "NAME" \fBbundle\-install\fR \- Install the dependencies specified in your Gemfile .SH "SYNOPSIS" diff --git a/lib/bundler/man/bundle-list.1 b/lib/bundler/man/bundle-list.1 index 081014bba8cae6..5cbb1c3cfe6215 100644 --- a/lib/bundler/man/bundle-list.1 +++ b/lib/bundler/man/bundle-list.1 @@ -1,6 +1,6 @@ .\" generated with nRonn/v0.11.1 .\" https://github.com/n-ronn/nronn/tree/0.11.1 -.TH "BUNDLE\-LIST" "1" "August 2024" "" +.TH "BUNDLE\-LIST" "1" "September 2024" "" .SH "NAME" \fBbundle\-list\fR \- List all the gems in the bundle .SH "SYNOPSIS" diff --git a/lib/bundler/man/bundle-lock.1 b/lib/bundler/man/bundle-lock.1 index dc7ac86bc71d31..5f0d43a9aa9041 100644 --- a/lib/bundler/man/bundle-lock.1 +++ b/lib/bundler/man/bundle-lock.1 @@ -1,6 +1,6 @@ .\" generated with nRonn/v0.11.1 .\" https://github.com/n-ronn/nronn/tree/0.11.1 -.TH "BUNDLE\-LOCK" "1" "August 2024" "" +.TH "BUNDLE\-LOCK" "1" "September 2024" "" .SH "NAME" \fBbundle\-lock\fR \- Creates / Updates a lockfile without installing .SH "SYNOPSIS" diff --git a/lib/bundler/man/bundle-open.1 b/lib/bundler/man/bundle-open.1 index 9a3eba09d815c4..fb5ff1fee71cb3 100644 --- a/lib/bundler/man/bundle-open.1 +++ b/lib/bundler/man/bundle-open.1 @@ -1,6 +1,6 @@ .\" generated with nRonn/v0.11.1 .\" https://github.com/n-ronn/nronn/tree/0.11.1 -.TH "BUNDLE\-OPEN" "1" "August 2024" "" +.TH "BUNDLE\-OPEN" "1" "September 2024" "" .SH "NAME" \fBbundle\-open\fR \- Opens the source directory for a gem in your bundle .SH "SYNOPSIS" diff --git a/lib/bundler/man/bundle-outdated.1 b/lib/bundler/man/bundle-outdated.1 index 85865f52c96466..ea3005dd87d829 100644 --- a/lib/bundler/man/bundle-outdated.1 +++ b/lib/bundler/man/bundle-outdated.1 @@ -1,6 +1,6 @@ .\" generated with nRonn/v0.11.1 .\" https://github.com/n-ronn/nronn/tree/0.11.1 -.TH "BUNDLE\-OUTDATED" "1" "August 2024" "" +.TH "BUNDLE\-OUTDATED" "1" "September 2024" "" .SH "NAME" \fBbundle\-outdated\fR \- List installed gems with newer versions available .SH "SYNOPSIS" diff --git a/lib/bundler/man/bundle-platform.1 b/lib/bundler/man/bundle-platform.1 index 52c657fd99157b..c3058175fc8d75 100644 --- a/lib/bundler/man/bundle-platform.1 +++ b/lib/bundler/man/bundle-platform.1 @@ -1,6 +1,6 @@ .\" generated with nRonn/v0.11.1 .\" https://github.com/n-ronn/nronn/tree/0.11.1 -.TH "BUNDLE\-PLATFORM" "1" "August 2024" "" +.TH "BUNDLE\-PLATFORM" "1" "September 2024" "" .SH "NAME" \fBbundle\-platform\fR \- Displays platform compatibility information .SH "SYNOPSIS" diff --git a/lib/bundler/man/bundle-plugin.1 b/lib/bundler/man/bundle-plugin.1 index 07b85c4d1862ab..34437d99739e19 100644 --- a/lib/bundler/man/bundle-plugin.1 +++ b/lib/bundler/man/bundle-plugin.1 @@ -1,6 +1,6 @@ .\" generated with nRonn/v0.11.1 .\" https://github.com/n-ronn/nronn/tree/0.11.1 -.TH "BUNDLE\-PLUGIN" "1" "August 2024" "" +.TH "BUNDLE\-PLUGIN" "1" "September 2024" "" .SH "NAME" \fBbundle\-plugin\fR \- Manage Bundler plugins .SH "SYNOPSIS" diff --git a/lib/bundler/man/bundle-pristine.1 b/lib/bundler/man/bundle-pristine.1 index 255585cb7e2a74..103c6f68ae040b 100644 --- a/lib/bundler/man/bundle-pristine.1 +++ b/lib/bundler/man/bundle-pristine.1 @@ -1,6 +1,6 @@ .\" generated with nRonn/v0.11.1 .\" https://github.com/n-ronn/nronn/tree/0.11.1 -.TH "BUNDLE\-PRISTINE" "1" "August 2024" "" +.TH "BUNDLE\-PRISTINE" "1" "September 2024" "" .SH "NAME" \fBbundle\-pristine\fR \- Restores installed gems to their pristine condition .SH "SYNOPSIS" diff --git a/lib/bundler/man/bundle-remove.1 b/lib/bundler/man/bundle-remove.1 index 082617a29e6317..4a2ed4eb132007 100644 --- a/lib/bundler/man/bundle-remove.1 +++ b/lib/bundler/man/bundle-remove.1 @@ -1,6 +1,6 @@ .\" generated with nRonn/v0.11.1 .\" https://github.com/n-ronn/nronn/tree/0.11.1 -.TH "BUNDLE\-REMOVE" "1" "August 2024" "" +.TH "BUNDLE\-REMOVE" "1" "September 2024" "" .SH "NAME" \fBbundle\-remove\fR \- Removes gems from the Gemfile .SH "SYNOPSIS" diff --git a/lib/bundler/man/bundle-show.1 b/lib/bundler/man/bundle-show.1 index 95335f6b360ac5..dfbb43921855b3 100644 --- a/lib/bundler/man/bundle-show.1 +++ b/lib/bundler/man/bundle-show.1 @@ -1,6 +1,6 @@ .\" generated with nRonn/v0.11.1 .\" https://github.com/n-ronn/nronn/tree/0.11.1 -.TH "BUNDLE\-SHOW" "1" "August 2024" "" +.TH "BUNDLE\-SHOW" "1" "September 2024" "" .SH "NAME" \fBbundle\-show\fR \- Shows all the gems in your bundle, or the path to a gem .SH "SYNOPSIS" diff --git a/lib/bundler/man/bundle-update.1 b/lib/bundler/man/bundle-update.1 index 355b0b40d6d102..5eb9514f03e82c 100644 --- a/lib/bundler/man/bundle-update.1 +++ b/lib/bundler/man/bundle-update.1 @@ -1,6 +1,6 @@ .\" generated with nRonn/v0.11.1 .\" https://github.com/n-ronn/nronn/tree/0.11.1 -.TH "BUNDLE\-UPDATE" "1" "August 2024" "" +.TH "BUNDLE\-UPDATE" "1" "September 2024" "" .SH "NAME" \fBbundle\-update\fR \- Update your gems to the latest available versions .SH "SYNOPSIS" diff --git a/lib/bundler/man/bundle-version.1 b/lib/bundler/man/bundle-version.1 index 565148b8e7b2ed..a29858181a8ba9 100644 --- a/lib/bundler/man/bundle-version.1 +++ b/lib/bundler/man/bundle-version.1 @@ -1,6 +1,6 @@ .\" generated with nRonn/v0.11.1 .\" https://github.com/n-ronn/nronn/tree/0.11.1 -.TH "BUNDLE\-VERSION" "1" "August 2024" "" +.TH "BUNDLE\-VERSION" "1" "September 2024" "" .SH "NAME" \fBbundle\-version\fR \- Prints Bundler version information .SH "SYNOPSIS" diff --git a/lib/bundler/man/bundle-viz.1 b/lib/bundler/man/bundle-viz.1 index 34f5abddde401e..9609e098dd85d5 100644 --- a/lib/bundler/man/bundle-viz.1 +++ b/lib/bundler/man/bundle-viz.1 @@ -1,6 +1,6 @@ .\" generated with nRonn/v0.11.1 .\" https://github.com/n-ronn/nronn/tree/0.11.1 -.TH "BUNDLE\-VIZ" "1" "August 2024" "" +.TH "BUNDLE\-VIZ" "1" "September 2024" "" .SH "NAME" \fBbundle\-viz\fR \- Generates a visual dependency graph for your Gemfile .SH "SYNOPSIS" diff --git a/lib/bundler/man/bundle.1 b/lib/bundler/man/bundle.1 index 19a704ca52c77b..d84d788748a348 100644 --- a/lib/bundler/man/bundle.1 +++ b/lib/bundler/man/bundle.1 @@ -1,6 +1,6 @@ .\" generated with nRonn/v0.11.1 .\" https://github.com/n-ronn/nronn/tree/0.11.1 -.TH "BUNDLE" "1" "August 2024" "" +.TH "BUNDLE" "1" "September 2024" "" .SH "NAME" \fBbundle\fR \- Ruby Dependency Management .SH "SYNOPSIS" diff --git a/lib/bundler/man/gemfile.5 b/lib/bundler/man/gemfile.5 index d503abc9d17fdb..f24a1c540d904e 100644 --- a/lib/bundler/man/gemfile.5 +++ b/lib/bundler/man/gemfile.5 @@ -1,6 +1,6 @@ .\" generated with nRonn/v0.11.1 .\" https://github.com/n-ronn/nronn/tree/0.11.1 -.TH "GEMFILE" "5" "August 2024" "" +.TH "GEMFILE" "5" "September 2024" "" .SH "NAME" \fBGemfile\fR \- A format for describing gem dependencies for Ruby programs .SH "SYNOPSIS" diff --git a/lib/bundler/plugin/api/source.rb b/lib/bundler/plugin/api/source.rb index f91b2638755646..690f37938947dd 100644 --- a/lib/bundler/plugin/api/source.rb +++ b/lib/bundler/plugin/api/source.rb @@ -131,7 +131,7 @@ def specs Bundler::Index.build do |index| files.each do |file| next unless spec = Bundler.load_gemspec(file) - Bundler.rubygems.set_installed_by_version(spec) + spec.installed_by_version = Gem::VERSION spec.source = self Bundler.rubygems.validate(spec) diff --git a/lib/bundler/ruby_version.rb b/lib/bundler/ruby_version.rb index 7e9e072b83cf10..0ed5cbc6cacfa2 100644 --- a/lib/bundler/ruby_version.rb +++ b/lib/bundler/ruby_version.rb @@ -23,7 +23,13 @@ def initialize(versions, patchlevel, engine, engine_version) # specified must match the version. @versions = Array(versions).map do |v| - op, v = Gem::Requirement.parse(normalize_version(v)) + normalized_v = normalize_version(v) + + unless Gem::Requirement::PATTERN.match?(normalized_v) + raise InvalidArgumentError, "#{v} is not a valid requirement on the Ruby version" + end + + op, v = Gem::Requirement.parse(normalized_v) op == "=" ? v.to_s : "#{op} #{v}" end diff --git a/lib/bundler/rubygems_ext.rb b/lib/bundler/rubygems_ext.rb index 79bea01e6e2e84..a3f70e9a3caf29 100644 --- a/lib/bundler/rubygems_ext.rb +++ b/lib/bundler/rubygems_ext.rb @@ -30,24 +30,32 @@ def self.freebsd_platform? end end - # Can be removed once RubyGems 3.5.14 support is dropped - unless Gem.respond_to?(:open_file_with_flock) - def self.open_file_with_flock(path, &block) - flags = File.exist?(path) ? "r+" : "a+" - - File.open(path, flags) do |io| - begin - io.flock(File::LOCK_EX) - rescue Errno::ENOSYS, Errno::ENOTSUP - end - yield io - rescue Errno::ENOLCK # NFS - if Thread.main != Thread.current - raise - else - File.open(path, flags, &block) + # Can be removed once RubyGems 3.5.18 support is dropped + unless Gem.respond_to?(:open_file_with_lock) + class << self + remove_method :open_file_with_flock if Gem.respond_to?(:open_file_with_flock) + + def open_file_with_flock(path, &block) + mode = IO::RDONLY | IO::APPEND | IO::CREAT | IO::BINARY + mode |= IO::SHARE_DELETE if IO.const_defined?(:SHARE_DELETE) + + File.open(path, mode) do |io| + begin + io.flock(File::LOCK_EX) + rescue Errno::ENOSYS, Errno::ENOTSUP + rescue Errno::ENOLCK # NFS + raise unless Thread.main == Thread.current + end + yield io end end + + def open_file_with_lock(path, &block) + file_lock = "#{path}.lock" + open_file_with_flock(file_lock, &block) + ensure + FileUtils.rm_f file_lock + end end end @@ -115,7 +123,9 @@ def extension_dir end end - remove_method :gem_dir + # Can be removed once RubyGems 3.5.21 support is dropped + remove_method :gem_dir if method_defined?(:gem_dir, false) + def gem_dir full_gem_path end @@ -261,23 +271,6 @@ def to_lock end end - # Requirements using lambda operator differentiate trailing zeros since rubygems 3.2.6 - if Gem::Requirement.new("~> 2.0").hash == Gem::Requirement.new("~> 2.0.0").hash - class Requirement - module CorrectHashForLambdaOperator - def hash - if requirements.any? {|r| r.first == "~>" } - requirements.map {|r| r.first == "~>" ? [r[0], r[1].to_s] : r }.sort.hash - else - super - end - end - end - - prepend CorrectHashForLambdaOperator - end - end - require "rubygems/platform" class Platform @@ -407,4 +400,23 @@ def lock_name end end end + + unless Gem.rubygems_version >= Gem::Version.new("3.5.19") + class Resolver::ActivationRequest + remove_method :installed? + + def installed? + case @spec + when Gem::Resolver::VendorSpecification then + true + else + this_spec = full_spec + + Gem::Specification.any? do |s| + s == this_spec && s.base_dir == this_spec.base_dir + end + end + end + end + end end diff --git a/lib/bundler/rubygems_gem_installer.rb b/lib/bundler/rubygems_gem_installer.rb index 4d4fd20fea6706..65fdf160725568 100644 --- a/lib/bundler/rubygems_gem_installer.rb +++ b/lib/bundler/rubygems_gem_installer.rb @@ -81,11 +81,11 @@ def generate_plugins end end - if Bundler.rubygems.provides?("< 3.5.15") + if Bundler.rubygems.provides?("< 3.5.19") def generate_bin_script(filename, bindir) bin_script_path = File.join bindir, formatted_program_filename(filename) - Gem.open_file_with_flock("#{bin_script_path}.lock") do + Gem.open_file_with_lock(bin_script_path) do require "fileutils" FileUtils.rm_f bin_script_path # prior install may have been --no-wrappers @@ -145,17 +145,17 @@ def prepare_extension_build(extension_dir) SharedHelpers.filesystem_access(extension_dir, :create) do FileUtils.mkdir_p extension_dir end - require "shellwords" unless Bundler.rubygems.provides?(">= 3.2.25") end def strict_rm_rf(dir) return unless File.exist?(dir) + return if Dir.empty?(dir) parent = File.dirname(dir) parent_st = File.stat(parent) if parent_st.world_writable? && !parent_st.sticky? - raise InsecureInstallPathError.new(parent) + raise InsecureInstallPathError.new(spec.full_name, dir) end begin diff --git a/lib/bundler/rubygems_integration.rb b/lib/bundler/rubygems_integration.rb index 72dead88f2741a..e77704aa0a3e78 100644 --- a/lib/bundler/rubygems_integration.rb +++ b/lib/bundler/rubygems_integration.rb @@ -20,10 +20,6 @@ def provides?(req_str) Gem::Requirement.new(req_str).satisfied_by?(version) end - def supports_bundler_trampolining? - provides?(">= 3.3.0.a") - end - def build_args require "rubygems/command" Gem::Command.build_args @@ -61,11 +57,6 @@ def validate(spec) nil end - def set_installed_by_version(spec, installed_by_version = Gem::VERSION) - return unless spec.respond_to?(:installed_by_version=) - spec.installed_by_version = Gem::Version.create(installed_by_version) - end - def spec_missing_extensions?(spec, default = true) return spec.missing_extensions? if spec.respond_to?(:missing_extensions?) @@ -75,14 +66,6 @@ def spec_missing_extensions?(spec, default = true) default end - def spec_matches_for_glob(spec, glob) - return spec.matches_for_glob(glob) if spec.respond_to?(:matches_for_glob) - - spec.load_paths.flat_map do |lp| - Dir["#{lp}/#{glob}#{suffix_pattern}"] - end - end - def stub_set_spec(stub, spec) stub.instance_variable_set(:@spec, spec) end @@ -369,11 +352,7 @@ def undo_replacements @replaced_methods.each do |(sym, klass), method| redefine_method(klass, sym, method) end - if Binding.public_method_defined?(:source_location) - post_reset_hooks.reject! {|proc| proc.binding.source_location[0] == __FILE__ } - else - post_reset_hooks.reject! {|proc| proc.binding.eval("__FILE__") == __FILE__ } - end + post_reset_hooks.reject! {|proc| proc.binding.source_location[0] == __FILE__ } @replaced_methods.clear end diff --git a/lib/bundler/self_manager.rb b/lib/bundler/self_manager.rb index ea7c014f3ca9e5..21516713d46c76 100644 --- a/lib/bundler/self_manager.rb +++ b/lib/bundler/self_manager.rb @@ -85,7 +85,7 @@ def restart_with(version) cmd = [*Shellwords.shellsplit(bundler_spec_original_cmd), *ARGV] else cmd = [$PROGRAM_NAME, *ARGV] - cmd.unshift(Gem.ruby) unless File.executable?($PROGRAM_NAME) + cmd.unshift(Gem.ruby) unless File.executable?($PROGRAM_NAME) || $PROGRAM_NAME.end_with?(".bat") end Bundler.with_original_env do @@ -98,15 +98,14 @@ def restart_with(version) def needs_switching? autoswitching_applies? && - released?(lockfile_version) && - !running?(lockfile_version) && - !updating? && - Bundler.settings[:version] != "system" + Bundler.settings[:version] != "system" && + released?(restart_version) && + !running?(restart_version) && + !updating? end def autoswitching_applies? ENV["BUNDLER_VERSION"].nil? && - Bundler.rubygems.supports_bundler_trampolining? && ruby_can_restart_with_same_arguments? && SharedHelpers.in_bundle? && lockfile_version diff --git a/lib/bundler/source/git.rb b/lib/bundler/source/git.rb index 9ce74adc2c1ce4..3b934adbb299cd 100644 --- a/lib/bundler/source/git.rb +++ b/lib/bundler/source/git.rb @@ -70,13 +70,13 @@ def to_gemfile end def hash - [self.class, uri, ref, branch, name, version, glob, submodules].hash + [self.class, uri, ref, branch, name, glob, submodules].hash end def eql?(other) other.is_a?(Git) && uri == other.uri && ref == other.ref && branch == other.branch && name == other.name && - version == other.version && glob == other.glob && + glob == other.glob && submodules == other.submodules end @@ -188,10 +188,10 @@ def local_override!(path) end def specs(*) - set_cache_path!(app_cache_path) if use_app_cache? + set_up_app_cache!(app_cache_path) if use_app_cache? if requires_checkout? && !@copied - FileUtils.rm_rf(app_cache_path) if use_app_cache? && git_proxy.not_a_bare_repository? + FileUtils.rm_rf(app_cache_path) if use_app_cache? && git_proxy.not_a_repository? fetch checkout @@ -226,6 +226,7 @@ def cache(spec, custom_path = nil) git_proxy.checkout if requires_checkout? FileUtils.cp_r("#{cache_path}/.", app_cache_path) FileUtils.touch(app_cache_path.join(".bundlecache")) + FileUtils.rm_rf(Dir.glob(app_cache_path.join("hooks/*.sample"))) end def load_spec_files @@ -298,7 +299,7 @@ def serialize_gemspecs_in(destination) # The gemspecs we cache should already be evaluated. spec = Bundler.load_gemspec(spec_path) next unless spec - Bundler.rubygems.set_installed_by_version(spec) + spec.installed_by_version = Gem::VERSION Bundler.rubygems.validate(spec) File.open(spec_path, "wb") {|file| file.write(spec.to_ruby) } end @@ -319,6 +320,11 @@ def set_install_path!(path) @install_path = path end + def set_up_app_cache!(path) + FileUtils.mkdir_p(path.join("refs")) + set_cache_path!(path) + end + def has_app_cache? cached_revision && super end @@ -392,9 +398,12 @@ def fetch def validate_spec(_spec); end def load_gemspec(file) - stub = Gem::StubSpecification.gemspec_stub(file, install_path.parent, install_path.parent) - stub.full_gem_path = Pathname.new(file).dirname.expand_path(root).to_s - StubSpecification.from_stub(stub) + dirname = Pathname.new(file).dirname + SharedHelpers.chdir(dirname.to_s) do + stub = Gem::StubSpecification.gemspec_stub(file, install_path.parent, install_path.parent) + stub.full_gem_path = dirname.expand_path(root).to_s + StubSpecification.from_stub(stub) + end end def git_scope diff --git a/lib/bundler/source/git/git_proxy.rb b/lib/bundler/source/git/git_proxy.rb index 768d40392fcfc3..744235bc046d7e 100644 --- a/lib/bundler/source/git/git_proxy.rb +++ b/lib/bundler/source/git/git_proxy.rb @@ -84,8 +84,10 @@ def current_branch end end - def not_a_bare_repository? - git_local("rev-parse", "--is-bare-repository", dir: path).strip == "false" + def not_a_repository? + _, status = git_null("rev-parse", "--resolve-git-dir", path.to_s, dir: path) + + !status.success? end def contains?(commit) diff --git a/lib/bundler/source/path.rb b/lib/bundler/source/path.rb index 754eaa39c46bda..d4c530e922b0d6 100644 --- a/lib/bundler/source/path.rb +++ b/lib/bundler/source/path.rb @@ -53,6 +53,8 @@ def to_s "source at `#{@path}`" end + alias_method :to_gemfile, :path + def hash [self.class, expanded_path, version].hash end @@ -148,7 +150,7 @@ def has_app_cache? def load_gemspec(file) return unless spec = Bundler.load_gemspec(file) - Bundler.rubygems.set_installed_by_version(spec) + spec.installed_by_version = Gem::VERSION spec end diff --git a/lib/bundler/source/rubygems.rb b/lib/bundler/source/rubygems.rb index 1085fdc2d89f7b..3b6ef8bd580df5 100644 --- a/lib/bundler/source/rubygems.rb +++ b/lib/bundler/source/rubygems.rb @@ -148,7 +148,7 @@ def specs end def install(spec, options = {}) - if (spec.default_gem? && !cached_built_in_gem(spec)) || (installed?(spec) && !options[:force]) + if (spec.default_gem? && !cached_built_in_gem(spec, local: options[:local])) || (installed?(spec) && !options[:force]) print_using_message "Using #{version_message(spec, options[:previous_spec])}" return nil # no post-install message end @@ -222,12 +222,13 @@ def cache(spec, custom_path = nil) raise InstallError, e.message end - def cached_built_in_gem(spec) - cached_path = cached_path(spec) - if cached_path.nil? + def cached_built_in_gem(spec, local: false) + cached_path = cached_gem(spec) + if cached_path.nil? && !local remote_spec = remote_specs.search(spec).first if remote_spec cached_path = fetch_gem(remote_spec) + spec.remote = remote_spec.remote else Bundler.ui.warn "#{spec.full_name} is built in to Ruby, and can't be cached because your Gemfile doesn't have any sources that contain it." end @@ -324,14 +325,6 @@ def remotes_for_spec(spec) end def cached_gem(spec) - if spec.default_gem? - cached_built_in_gem(spec) - else - cached_path(spec) - end - end - - def cached_path(spec) global_cache_path = download_cache_path(spec) caches << global_cache_path if global_cache_path diff --git a/lib/bundler/stub_specification.rb b/lib/bundler/stub_specification.rb index 1cbb506ef99f54..dc5d38580a8551 100644 --- a/lib/bundler/stub_specification.rb +++ b/lib/bundler/stub_specification.rb @@ -45,8 +45,8 @@ def missing_extensions? true end - def activated - stub.activated + def activated? + stub.activated? end def activated=(activated) diff --git a/lib/bundler/ui/shell.rb b/lib/bundler/ui/shell.rb index 32367a44f06e5f..6df1512a5b867d 100644 --- a/lib/bundler/ui/shell.rb +++ b/lib/bundler/ui/shell.rb @@ -119,6 +119,10 @@ def silence(&blk) with_level("silent", &blk) end + def progress(&blk) + with_output_stream(:stderr, &blk) + end + def unprinted_warnings [] end @@ -170,6 +174,14 @@ def with_level(level) ensure @level = original end + + def with_output_stream(symbol) + original = output_stream + self.output_stream = symbol + yield + ensure + @output_stream = original + end end end end diff --git a/lib/bundler/ui/silent.rb b/lib/bundler/ui/silent.rb index 9ca2a8b485c32c..83d31d4b5530e6 100644 --- a/lib/bundler/ui/silent.rb +++ b/lib/bundler/ui/silent.rb @@ -84,6 +84,10 @@ def silence yield end + def progress + yield + end + def unprinted_warnings @warnings end diff --git a/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb b/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb index c15b3463301e8b..cfc0f48197d95c 100644 --- a/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb +++ b/lib/bundler/vendor/net-http-persistent/lib/net/http/persistent.rb @@ -68,6 +68,8 @@ # #verify_callback :: For server certificate verification # #verify_depth :: Depth of certificate verification # #verify_mode :: How connections should be verified +# #verify_hostname :: Use hostname verification for server certificate +# during the handshake # # == Proxies # @@ -174,7 +176,7 @@ class Gem::Net::HTTP::Persistent ## # The version of Gem::Net::HTTP::Persistent you are using - VERSION = '4.0.2' + VERSION = '4.0.4' ## # Error class for errors raised by Gem::Net::HTTP::Persistent. Various @@ -449,6 +451,21 @@ def self.detect_idle_timeout uri, max = 10 attr_reader :verify_mode + ## + # HTTPS verify_hostname. + # + # If a client sets this to true and enables SNI with SSLSocket#hostname=, + # the hostname verification on the server certificate is performed + # automatically during the handshake using + # OpenSSL::SSL.verify_certificate_identity(). + # + # You can set +verify_hostname+ as true to use hostname verification + # during the handshake. + # + # NOTE: This works with Ruby > 3.0. + + attr_reader :verify_hostname + ## # Creates a new Gem::Net::HTTP::Persistent. # @@ -508,6 +525,7 @@ def initialize name: nil, proxy: nil, pool_size: DEFAULT_POOL_SIZE @verify_callback = nil @verify_depth = nil @verify_mode = nil + @verify_hostname = nil @cert_store = nil @generation = 0 # incremented when proxy Gem::URI changes @@ -607,13 +625,23 @@ def connection_for uri return yield connection rescue Errno::ECONNREFUSED - address = http.proxy_address || http.address - port = http.proxy_port || http.port + if http.proxy? + address = http.proxy_address + port = http.proxy_port + else + address = http.address + port = http.port + end raise Error, "connection refused: #{address}:#{port}" rescue Errno::EHOSTDOWN - address = http.proxy_address || http.address - port = http.proxy_port || http.port + if http.proxy? + address = http.proxy_address + port = http.proxy_port + else + address = http.address + port = http.port + end raise Error, "host down: #{address}:#{port}" ensure @@ -948,8 +976,10 @@ def ssl connection connection.min_version = @min_version if @min_version connection.max_version = @max_version if @max_version - connection.verify_depth = @verify_depth - connection.verify_mode = @verify_mode + connection.verify_depth = @verify_depth + connection.verify_mode = @verify_mode + connection.verify_hostname = @verify_hostname if + @verify_hostname != nil && connection.respond_to?(:verify_hostname=) if OpenSSL::SSL::VERIFY_PEER == OpenSSL::SSL::VERIFY_NONE and not Object.const_defined?(:I_KNOW_THAT_OPENSSL_VERIFY_PEER_EQUALS_VERIFY_NONE_IS_WRONG) then @@ -1058,6 +1088,15 @@ def verify_mode= verify_mode reconnect_ssl end + ## + # Sets the HTTPS verify_hostname. + + def verify_hostname= verify_hostname + @verify_hostname = verify_hostname + + reconnect_ssl + end + ## # SSL verification callback. @@ -1070,4 +1109,3 @@ def verify_callback= callback require_relative 'persistent/connection' require_relative 'persistent/pool' - diff --git a/lib/bundler/vendor/securerandom/.document b/lib/bundler/vendor/securerandom/.document new file mode 100644 index 00000000000000..0c43bbd6b38177 --- /dev/null +++ b/lib/bundler/vendor/securerandom/.document @@ -0,0 +1 @@ +# Vendored files do not need to be documented diff --git a/lib/bundler/vendor/securerandom/lib/random/formatter.rb b/lib/bundler/vendor/securerandom/lib/random/formatter.rb new file mode 100644 index 00000000000000..e4297097890a34 --- /dev/null +++ b/lib/bundler/vendor/securerandom/lib/random/formatter.rb @@ -0,0 +1,373 @@ +# -*- coding: us-ascii -*- +# frozen_string_literal: true + +# == \Random number formatter. +# +# Formats generated random numbers in many manners. When 'random/formatter' +# is required, several methods are added to empty core module Bundler::Random::Formatter, +# making them available as Random's instance and module methods. +# +# Standard library Bundler::SecureRandom is also extended with the module, and the methods +# described below are available as a module methods in it. +# +# === Examples +# +# Generate random hexadecimal strings: +# +# require 'bundler/vendor/securerandom/lib/random/formatter' +# +# prng = Random.new +# prng.hex(10) #=> "52750b30ffbc7de3b362" +# prng.hex(10) #=> "92b15d6c8dc4beb5f559" +# prng.hex(13) #=> "39b290146bea6ce975c37cfc23" +# # or just +# Random.hex #=> "1aed0c631e41be7f77365415541052ee" +# +# Generate random base64 strings: +# +# prng.base64(10) #=> "EcmTPZwWRAozdA==" +# prng.base64(10) #=> "KO1nIU+p9DKxGg==" +# prng.base64(12) #=> "7kJSM/MzBJI+75j8" +# Random.base64(4) #=> "bsQ3fQ==" +# +# Generate random binary strings: +# +# prng.random_bytes(10) #=> "\016\t{\370g\310pbr\301" +# prng.random_bytes(10) #=> "\323U\030TO\234\357\020\a\337" +# Random.random_bytes(6) #=> "\xA1\xE6Lr\xC43" +# +# Generate alphanumeric strings: +# +# prng.alphanumeric(10) #=> "S8baxMJnPl" +# prng.alphanumeric(10) #=> "aOxAg8BAJe" +# Random.alphanumeric #=> "TmP9OsJHJLtaZYhP" +# +# Generate UUIDs: +# +# prng.uuid #=> "2d931510-d99f-494a-8c67-87feb05e1594" +# prng.uuid #=> "bad85eb9-0713-4da7-8d36-07a8e4b00eab" +# Random.uuid #=> "f14e0271-de96-45cc-8911-8910292a42cd" +# +# All methods are available in the standard library Bundler::SecureRandom, too: +# +# Bundler::SecureRandom.hex #=> "05b45376a30c67238eb93b16499e50cf" + +module Bundler::Random::Formatter + + # Generate a random binary string. + # + # The argument _n_ specifies the length of the result string. + # + # If _n_ is not specified or is nil, 16 is assumed. + # It may be larger in future. + # + # The result may contain any byte: "\x00" - "\xff". + # + # require 'bundler/vendor/securerandom/lib/random/formatter' + # + # Random.random_bytes #=> "\xD8\\\xE0\xF4\r\xB2\xFC*WM\xFF\x83\x18\xF45\xB6" + # # or + # prng = Random.new + # prng.random_bytes #=> "m\xDC\xFC/\a\x00Uf\xB2\xB2P\xBD\xFF6S\x97" + def random_bytes(n=nil) + n = n ? n.to_int : 16 + gen_random(n) + end + + # Generate a random hexadecimal string. + # + # The argument _n_ specifies the length, in bytes, of the random number to be generated. + # The length of the resulting hexadecimal string is twice of _n_. + # + # If _n_ is not specified or is nil, 16 is assumed. + # It may be larger in the future. + # + # The result may contain 0-9 and a-f. + # + # require 'bundler/vendor/securerandom/lib/random/formatter' + # + # Random.hex #=> "eb693ec8252cd630102fd0d0fb7c3485" + # # or + # prng = Random.new + # prng.hex #=> "91dc3bfb4de5b11d029d376634589b61" + def hex(n=nil) + random_bytes(n).unpack1("H*") + end + + # Generate a random base64 string. + # + # The argument _n_ specifies the length, in bytes, of the random number + # to be generated. The length of the result string is about 4/3 of _n_. + # + # If _n_ is not specified or is nil, 16 is assumed. + # It may be larger in the future. + # + # The result may contain A-Z, a-z, 0-9, "+", "/" and "=". + # + # require 'bundler/vendor/securerandom/lib/random/formatter' + # + # Random.base64 #=> "/2BuBuLf3+WfSKyQbRcc/A==" + # # or + # prng = Random.new + # prng.base64 #=> "6BbW0pxO0YENxn38HMUbcQ==" + # + # See RFC 3548 for the definition of base64. + def base64(n=nil) + [random_bytes(n)].pack("m0") + end + + # Generate a random URL-safe base64 string. + # + # The argument _n_ specifies the length, in bytes, of the random number + # to be generated. The length of the result string is about 4/3 of _n_. + # + # If _n_ is not specified or is nil, 16 is assumed. + # It may be larger in the future. + # + # The boolean argument _padding_ specifies the padding. + # If it is false or nil, padding is not generated. + # Otherwise padding is generated. + # By default, padding is not generated because "=" may be used as a URL delimiter. + # + # The result may contain A-Z, a-z, 0-9, "-" and "_". + # "=" is also used if _padding_ is true. + # + # require 'bundler/vendor/securerandom/lib/random/formatter' + # + # Random.urlsafe_base64 #=> "b4GOKm4pOYU_-BOXcrUGDg" + # # or + # prng = Random.new + # prng.urlsafe_base64 #=> "UZLdOkzop70Ddx-IJR0ABg" + # + # prng.urlsafe_base64(nil, true) #=> "i0XQ-7gglIsHGV2_BNPrdQ==" + # prng.urlsafe_base64(nil, true) #=> "-M8rLhr7JEpJlqFGUMmOxg==" + # + # See RFC 3548 for the definition of URL-safe base64. + def urlsafe_base64(n=nil, padding=false) + s = [random_bytes(n)].pack("m0") + s.tr!("+/", "-_") + s.delete!("=") unless padding + s + end + + # Generate a random v4 UUID (Universally Unique IDentifier). + # + # require 'bundler/vendor/securerandom/lib/random/formatter' + # + # Random.uuid #=> "2d931510-d99f-494a-8c67-87feb05e1594" + # Random.uuid #=> "bad85eb9-0713-4da7-8d36-07a8e4b00eab" + # # or + # prng = Random.new + # prng.uuid #=> "62936e70-1815-439b-bf89-8492855a7e6b" + # + # The version 4 UUID is purely random (except the version). + # It doesn't contain meaningful information such as MAC addresses, timestamps, etc. + # + # The result contains 122 random bits (15.25 random bytes). + # + # See RFC4122[https://datatracker.ietf.org/doc/html/rfc4122] for details of UUID. + # + def uuid + ary = random_bytes(16).unpack("NnnnnN") + ary[2] = (ary[2] & 0x0fff) | 0x4000 + ary[3] = (ary[3] & 0x3fff) | 0x8000 + "%08x-%04x-%04x-%04x-%04x%08x" % ary + end + + alias uuid_v4 uuid + + # Generate a random v7 UUID (Universally Unique IDentifier). + # + # require 'bundler/vendor/securerandom/lib/random/formatter' + # + # Random.uuid_v7 # => "0188d4c3-1311-7f96-85c7-242a7aa58f1e" + # Random.uuid_v7 # => "0188d4c3-16fe-744f-86af-38fa04c62bb5" + # Random.uuid_v7 # => "0188d4c3-1af8-764f-b049-c204ce0afa23" + # Random.uuid_v7 # => "0188d4c3-1e74-7085-b14f-ef6415dc6f31" + # # |<--sorted-->| |<----- random ---->| + # + # # or + # prng = Random.new + # prng.uuid_v7 # => "0188ca51-5e72-7950-a11d-def7ff977c98" + # + # The version 7 UUID starts with the least significant 48 bits of a 64 bit + # Unix timestamp (milliseconds since the epoch) and fills the remaining bits + # with random data, excluding the version and variant bits. + # + # This allows version 7 UUIDs to be sorted by creation time. Time ordered + # UUIDs can be used for better database index locality of newly inserted + # records, which may have a significant performance benefit compared to random + # data inserts. + # + # The result contains 74 random bits (9.25 random bytes). + # + # Note that this method cannot be made reproducable because its output + # includes not only random bits but also timestamp. + # + # See draft-ietf-uuidrev-rfc4122bis[https://datatracker.ietf.org/doc/draft-ietf-uuidrev-rfc4122bis/] + # for details of UUIDv7. + # + # ==== Monotonicity + # + # UUIDv7 has millisecond precision by default, so multiple UUIDs created + # within the same millisecond are not issued in monotonically increasing + # order. To create UUIDs that are time-ordered with sub-millisecond + # precision, up to 12 bits of additional timestamp may added with + # +extra_timestamp_bits+. The extra timestamp precision comes at the expense + # of random bits. Setting extra_timestamp_bits: 12 provides ~244ns + # of precision, but only 62 random bits (7.75 random bytes). + # + # prng = Random.new + # Array.new(4) { prng.uuid_v7(extra_timestamp_bits: 12) } + # # => + # ["0188d4c7-13da-74f9-8b53-22a786ffdd5a", + # "0188d4c7-13da-753b-83a5-7fb9b2afaeea", + # "0188d4c7-13da-754a-88ea-ac0baeedd8db", + # "0188d4c7-13da-7557-83e1-7cad9cda0d8d"] + # # |<--- sorted --->| |<-- random --->| + # + # Array.new(4) { prng.uuid_v7(extra_timestamp_bits: 8) } + # # => + # ["0188d4c7-3333-7a95-850a-de6edb858f7e", + # "0188d4c7-3333-7ae8-842e-bc3a8b7d0cf9", # <- out of order + # "0188d4c7-3333-7ae2-995a-9f135dc44ead", # <- out of order + # "0188d4c7-3333-7af9-87c3-8f612edac82e"] + # # |<--- sorted -->||<---- random --->| + # + # Any rollbacks of the system clock will break monotonicity. UUIDv7 is based + # on UTC, which excludes leap seconds and can rollback the clock. To avoid + # this, the system clock can synchronize with an NTP server configured to use + # a "leap smear" approach. NTP or PTP will also be needed to synchronize + # across distributed nodes. + # + # Counters and other mechanisms for stronger guarantees of monotonicity are + # not implemented. Applications with stricter requirements should follow + # {Section 6.2}[https://www.ietf.org/archive/id/draft-ietf-uuidrev-rfc4122bis-07.html#monotonicity_counters] + # of the specification. + # + def uuid_v7(extra_timestamp_bits: 0) + case (extra_timestamp_bits = Integer(extra_timestamp_bits)) + when 0 # min timestamp precision + ms = Process.clock_gettime(Process::CLOCK_REALTIME, :millisecond) + rand = random_bytes(10) + rand.setbyte(0, rand.getbyte(0) & 0x0f | 0x70) # version + rand.setbyte(2, rand.getbyte(2) & 0x3f | 0x80) # variant + "%08x-%04x-%s" % [ + (ms & 0x0000_ffff_ffff_0000) >> 16, + (ms & 0x0000_0000_0000_ffff), + rand.unpack("H4H4H12").join("-") + ] + + when 12 # max timestamp precision + ms, ns = Process.clock_gettime(Process::CLOCK_REALTIME, :nanosecond) + .divmod(1_000_000) + extra_bits = ns * 4096 / 1_000_000 + rand = random_bytes(8) + rand.setbyte(0, rand.getbyte(0) & 0x3f | 0x80) # variant + "%08x-%04x-7%03x-%s" % [ + (ms & 0x0000_ffff_ffff_0000) >> 16, + (ms & 0x0000_0000_0000_ffff), + extra_bits, + rand.unpack("H4H12").join("-") + ] + + when (0..12) # the generic version is slower than the special cases above + rand_a, rand_b1, rand_b2, rand_b3 = random_bytes(10).unpack("nnnN") + rand_mask_bits = 12 - extra_timestamp_bits + ms, ns = Process.clock_gettime(Process::CLOCK_REALTIME, :nanosecond) + .divmod(1_000_000) + "%08x-%04x-%04x-%04x-%04x%08x" % [ + (ms & 0x0000_ffff_ffff_0000) >> 16, + (ms & 0x0000_0000_0000_ffff), + 0x7000 | + ((ns * (1 << extra_timestamp_bits) / 1_000_000) << rand_mask_bits) | + rand_a & ((1 << rand_mask_bits) - 1), + 0x8000 | (rand_b1 & 0x3fff), + rand_b2, + rand_b3 + ] + + else + raise ArgumentError, "extra_timestamp_bits must be in 0..12" + end + end + + # Internal interface to Random; Generate random data _n_ bytes. + private def gen_random(n) + self.bytes(n) + end + + # Generate a string that randomly draws from a + # source array of characters. + # + # The argument _source_ specifies the array of characters from which + # to generate the string. + # The argument _n_ specifies the length, in characters, of the string to be + # generated. + # + # The result may contain whatever characters are in the source array. + # + # require 'bundler/vendor/securerandom/lib/random/formatter' + # + # prng.choose([*'l'..'r'], 16) #=> "lmrqpoonmmlqlron" + # prng.choose([*'0'..'9'], 5) #=> "27309" + private def choose(source, n) + size = source.size + m = 1 + limit = size + while limit * size <= 0x100000000 + limit *= size + m += 1 + end + result = ''.dup + while m <= n + rs = random_number(limit) + is = rs.digits(size) + (m-is.length).times { is << 0 } + result << source.values_at(*is).join('') + n -= m + end + if 0 < n + rs = random_number(limit) + is = rs.digits(size) + if is.length < n + (n-is.length).times { is << 0 } + else + is.pop while n < is.length + end + result.concat source.values_at(*is).join('') + end + result + end + + # The default character list for #alphanumeric. + ALPHANUMERIC = [*'A'..'Z', *'a'..'z', *'0'..'9'] + + # Generate a random alphanumeric string. + # + # The argument _n_ specifies the length, in characters, of the alphanumeric + # string to be generated. + # The argument _chars_ specifies the character list which the result is + # consist of. + # + # If _n_ is not specified or is nil, 16 is assumed. + # It may be larger in the future. + # + # The result may contain A-Z, a-z and 0-9, unless _chars_ is specified. + # + # require 'bundler/vendor/securerandom/lib/random/formatter' + # + # Random.alphanumeric #=> "2BuBuLf3WfSKyQbR" + # # or + # prng = Random.new + # prng.alphanumeric(10) #=> "i6K93NdqiH" + # + # Random.alphanumeric(4, chars: [*"0".."9"]) #=> "2952" + # # or + # prng = Random.new + # prng.alphanumeric(10, chars: [*"!".."/"]) #=> ",.,++%/''." + def alphanumeric(n = nil, chars: ALPHANUMERIC) + n = 16 if n.nil? + choose(chars, n) + end +end diff --git a/lib/bundler/vendor/securerandom/lib/securerandom.rb b/lib/bundler/vendor/securerandom/lib/securerandom.rb new file mode 100644 index 00000000000000..e797054468edcc --- /dev/null +++ b/lib/bundler/vendor/securerandom/lib/securerandom.rb @@ -0,0 +1,96 @@ +# -*- coding: us-ascii -*- +# frozen_string_literal: true + +require_relative 'random/formatter' + +# == Secure random number generator interface. +# +# This library is an interface to secure random number generators which are +# suitable for generating session keys in HTTP cookies, etc. +# +# You can use this library in your application by requiring it: +# +# require 'bundler/vendor/securerandom/lib/securerandom' +# +# It supports the following secure random number generators: +# +# * openssl +# * /dev/urandom +# * Win32 +# +# Bundler::SecureRandom is extended by the Bundler::Random::Formatter module which +# defines the following methods: +# +# * alphanumeric +# * base64 +# * choose +# * gen_random +# * hex +# * rand +# * random_bytes +# * random_number +# * urlsafe_base64 +# * uuid +# +# These methods are usable as class methods of Bundler::SecureRandom such as +# +Bundler::SecureRandom.hex+. +# +# If a secure random number generator is not available, +# +NotImplementedError+ is raised. + +module Bundler::SecureRandom + + # The version + VERSION = "0.3.1" + + class << self + # Returns a random binary string containing +size+ bytes. + # + # See Random.bytes + def bytes(n) + return gen_random(n) + end + + private + + # :stopdoc: + + # Implementation using OpenSSL + def gen_random_openssl(n) + return OpenSSL::Random.random_bytes(n) + end + + # Implementation using system random device + def gen_random_urandom(n) + ret = Random.urandom(n) + unless ret + raise NotImplementedError, "No random device" + end + unless ret.length == n + raise NotImplementedError, "Unexpected partial read from random device: only #{ret.length} for #{n} bytes" + end + ret + end + + begin + # Check if Random.urandom is available + Random.urandom(1) + alias gen_random gen_random_urandom + rescue RuntimeError + begin + require 'openssl' + rescue NoMethodError + raise NotImplementedError, "No random device" + else + alias gen_random gen_random_openssl + end + end + + # :startdoc: + + # Generate random data bytes for Bundler::Random::Formatter + public :gen_random + end +end + +Bundler::SecureRandom.extend(Bundler::Random::Formatter) diff --git a/lib/bundler/vendor/uri/lib/uri/common.rb b/lib/bundler/vendor/uri/lib/uri/common.rb index 93f4f226add5e5..89044da0362dac 100644 --- a/lib/bundler/vendor/uri/lib/uri/common.rb +++ b/lib/bundler/vendor/uri/lib/uri/common.rb @@ -19,6 +19,8 @@ module Bundler::URI Parser = RFC2396_Parser RFC3986_PARSER = RFC3986_Parser.new Ractor.make_shareable(RFC3986_PARSER) if defined?(Ractor) + RFC2396_PARSER = RFC2396_Parser.new + Ractor.make_shareable(RFC2396_PARSER) if defined?(Ractor) # Bundler::URI::Parser.new DEFAULT_PARSER = Parser.new diff --git a/lib/bundler/vendor/uri/lib/uri/version.rb b/lib/bundler/vendor/uri/lib/uri/version.rb index 1fa1c7c09abceb..ac94e15221898a 100644 --- a/lib/bundler/vendor/uri/lib/uri/version.rb +++ b/lib/bundler/vendor/uri/lib/uri/version.rb @@ -1,6 +1,6 @@ module Bundler::URI # :stopdoc: - VERSION_CODE = '001300'.freeze + VERSION_CODE = '001301'.freeze VERSION = VERSION_CODE.scan(/../).collect{|n| n.to_i}.join('.').freeze # :startdoc: end diff --git a/lib/bundler/vendored_securerandom.rb b/lib/bundler/vendored_securerandom.rb new file mode 100644 index 00000000000000..6c15f4a2b2aef5 --- /dev/null +++ b/lib/bundler/vendored_securerandom.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +# Use RubyGems vendored copy when available. Otherwise fallback to Bundler +# vendored copy. The vendored copy in Bundler can be removed once support for +# RubyGems 3.5.18 is dropped. + +begin + require "rubygems/vendored_securerandom" +rescue LoadError + module Bundler::Random; end + require_relative "vendor/securerandom/lib/securerandom" + Gem::SecureRandom = Bundler::SecureRandom + Gem::Random = Bundler::Random +end diff --git a/lib/error_highlight/base.rb b/lib/error_highlight/base.rb index 1a29ee476c118a..e2077fa5a69fd0 100644 --- a/lib/error_highlight/base.rb +++ b/lib/error_highlight/base.rb @@ -85,7 +85,7 @@ def self.spot(obj, **opts) # corresponding to the backtrace location in the source code. def self.prism_find(location) require "prism" - return nil if Prism::VERSION < "0.29.0" + return nil if Prism::VERSION < "1.0.0" absolute_path = location.absolute_path return unless absolute_path @@ -700,6 +700,9 @@ def prism_spot_call_for_name # foo 42 # ^^ def prism_spot_call_for_args + # Disallow highlighting arguments if there are no arguments. + return if @node.arguments.nil? + # Explicitly turn off foo.() syntax because error_highlight expects this # to not work. return nil if @node.name == :call && @node.message_loc.nil? diff --git a/lib/irb/command/help.rb b/lib/irb/command/help.rb index c2018f9b30bdff..12b468fefcbb28 100644 --- a/lib/irb/command/help.rb +++ b/lib/irb/command/help.rb @@ -39,7 +39,7 @@ def help_message help_cmds = commands_grouped_by_categories.delete("Help") no_category_cmds = commands_grouped_by_categories.delete("No category") - aliases = irb_context.instance_variable_get(:@user_aliases).map do |alias_name, target| + aliases = irb_context.instance_variable_get(:@command_aliases).map do |alias_name, target| { display_name: alias_name, description: "Alias for `#{target}`" } end diff --git a/lib/irb/context.rb b/lib/irb/context.rb index aa0c60b0e35927..505bed80a13568 100644 --- a/lib/irb/context.rb +++ b/lib/irb/context.rb @@ -149,8 +149,7 @@ def initialize(irb, workspace = nil, input_method = nil) @newline_before_multiline_output = true end - @user_aliases = IRB.conf[:COMMAND_ALIASES].dup - @command_aliases = @user_aliases.merge(KEYWORD_ALIASES) + @command_aliases = IRB.conf[:COMMAND_ALIASES].dup end private def term_interactive? @@ -158,17 +157,6 @@ def initialize(irb, workspace = nil, input_method = nil) STDIN.tty? && ENV['TERM'] != 'dumb' end - # because all input will eventually be evaluated as Ruby code, - # command names that conflict with Ruby keywords need special workaround - # we can remove them once we implemented a better command system for IRB - KEYWORD_ALIASES = { - :break => :irb_break, - :catch => :irb_catch, - :next => :irb_next, - }.freeze - - private_constant :KEYWORD_ALIASES - def use_tracer=(val) require_relative "ext/tracer" if val IRB.conf[:USE_TRACER] = val @@ -188,11 +176,17 @@ def use_loader=(val) private def build_completor completor_type = IRB.conf[:COMPLETOR] + + # Gem repl_type_completor is added to bundled gems in Ruby 3.4. + # Use :type as default completor only in Ruby 3.4 or later. + verbose = !!completor_type + completor_type ||= RUBY_VERSION >= '3.4' ? :type : :regexp + case completor_type when :regexp return RegexpCompletor.new when :type - completor = build_type_completor + completor = build_type_completor(verbose: verbose) return completor if completor else warn "Invalid value for IRB.conf[:COMPLETOR]: #{completor_type}" @@ -201,17 +195,17 @@ def use_loader=(val) RegexpCompletor.new end - private def build_type_completor + private def build_type_completor(verbose:) if RUBY_ENGINE == 'truffleruby' # Avoid SyntaxError. truffleruby does not support endless method definition yet. - warn 'TypeCompletor is not supported on TruffleRuby yet' + warn 'TypeCompletor is not supported on TruffleRuby yet' if verbose return end begin require 'repl_type_completor' rescue LoadError => e - warn "TypeCompletor requires `gem repl_type_completor`: #{e.message}" + warn "TypeCompletor requires `gem repl_type_completor`: #{e.message}" if verbose return end @@ -661,6 +655,21 @@ def parse_command(code) end end + def colorize_input(input, complete:) + if IRB.conf[:USE_COLORIZE] && IRB::Color.colorable? + lvars = local_variables || [] + if parse_command(input) + name, sep, arg = input.split(/(\s+)/, 2) + arg = IRB::Color.colorize_code(arg, complete: complete, local_variables: lvars) + "#{IRB::Color.colorize(name, [:BOLD])}\e[m#{sep}#{arg}" + else + IRB::Color.colorize_code(input, complete: complete, local_variables: lvars) + end + else + Reline::Unicode.escape_for_print(input) + end + end + def inspect_last_value # :nodoc: @inspect_method.inspect_value(@last_value) end diff --git a/lib/irb/debug.rb b/lib/irb/debug.rb index 1ec2335a8e9705..cd64b77ad72a72 100644 --- a/lib/irb/debug.rb +++ b/lib/irb/debug.rb @@ -57,22 +57,18 @@ def DEBUGGER__.capture_frames(*args) DEBUGGER__::ThreadClient.prepend(SkipPathHelperForIRB) end - if !@output_modifier_defined && !DEBUGGER__::CONFIG[:no_hint] - irb_output_modifier_proc = Reline.output_modifier_proc - - Reline.output_modifier_proc = proc do |output, complete:| - unless output.strip.empty? - cmd = output.split(/\s/, 2).first + if !DEBUGGER__::CONFIG[:no_hint] && irb.context.io.is_a?(RelineInputMethod) + Reline.output_modifier_proc = proc do |input, complete:| + unless input.strip.empty? + cmd = input.split(/\s/, 2).first if !complete && DEBUGGER__.commands.key?(cmd) - output = output.sub(/\n$/, " # debug command\n") + input = input.sub(/\n$/, " # debug command\n") end end - irb_output_modifier_proc.call(output, complete: complete) + irb.context.colorize_input(input, complete: complete) end - - @output_modifier_defined = true end true diff --git a/lib/irb/debug/ui.rb b/lib/irb/debug/ui.rb index 307097b8c95bd5..7a1cd6dd164954 100644 --- a/lib/irb/debug/ui.rb +++ b/lib/irb/debug/ui.rb @@ -56,7 +56,7 @@ def puts str = nil def readline _ setup_interrupt do tc = DEBUGGER__::SESSION.instance_variable_get(:@tc) - cmd = @irb.debug_readline(tc.current_frame.binding || TOPLEVEL_BINDING) + cmd = @irb.debug_readline(tc.current_frame.eval_binding || TOPLEVEL_BINDING) case cmd when nil # when user types C-d diff --git a/lib/irb/default_commands.rb b/lib/irb/default_commands.rb index fec41df4e2eff2..768fbee9d74604 100644 --- a/lib/irb/default_commands.rb +++ b/lib/irb/default_commands.rb @@ -181,9 +181,15 @@ def load_command(command) [:edit, NO_OVERRIDE] ) - _register_with_aliases(:irb_break, Command::Break) - _register_with_aliases(:irb_catch, Command::Catch) - _register_with_aliases(:irb_next, Command::Next) + _register_with_aliases(:irb_break, Command::Break, + [:break, OVERRIDE_ALL] + ) + _register_with_aliases(:irb_catch, Command::Catch, + [:catch, OVERRIDE_PRIVATE_ONLY] + ) + _register_with_aliases(:irb_next, Command::Next, + [:next, OVERRIDE_ALL] + ) _register_with_aliases(:irb_delete, Command::Delete, [:delete, NO_OVERRIDE] ) diff --git a/lib/irb/easter-egg.rb b/lib/irb/easter-egg.rb index 439e5755bd74d0..14dc93fc9c9a19 100644 --- a/lib/irb/easter-egg.rb +++ b/lib/irb/easter-egg.rb @@ -107,13 +107,14 @@ def render_frame(i) end private def easter_egg(type = nil) + print "\e[?1049h" type ||= [:logo, :dancing].sample case type when :logo - require "rdoc" - RDoc::RI::Driver.new.page do |io| - type = STDOUT.external_encoding == Encoding::UTF_8 ? :unicode_large : :ascii_large - io.write easter_egg_logo(type) + Pager.page do |io| + logo_type = STDOUT.external_encoding == Encoding::UTF_8 ? :unicode_large : :ascii_large + io.write easter_egg_logo(logo_type) + STDIN.raw { STDIN.getc } if io == STDOUT end when :dancing STDOUT.cooked do @@ -138,10 +139,11 @@ def render_frame(i) end rescue Interrupt ensure - print "\e[0m\e[?1049l" trap("SIGINT", prev_trap) end end + ensure + print "\e[0m\e[?1049l" end end end diff --git a/lib/irb/init.rb b/lib/irb/init.rb index 7dc08912ef92ee..d474bd41d692e4 100644 --- a/lib/irb/init.rb +++ b/lib/irb/init.rb @@ -80,7 +80,7 @@ def IRB.init_config(ap_path) @CONF[:USE_SINGLELINE] = false unless defined?(ReadlineInputMethod) @CONF[:USE_COLORIZE] = (nc = ENV['NO_COLOR']).nil? || nc.empty? @CONF[:USE_AUTOCOMPLETE] = ENV.fetch("IRB_USE_AUTOCOMPLETE", "true") != "false" - @CONF[:COMPLETOR] = ENV.fetch("IRB_COMPLETOR", "regexp").to_sym + @CONF[:COMPLETOR] = ENV["IRB_COMPLETOR"]&.to_sym @CONF[:INSPECT_MODE] = true @CONF[:USE_TRACER] = false @CONF[:USE_LOADER] = false diff --git a/lib/irb/input-method.rb b/lib/irb/input-method.rb index 82c1e7329765ba..38f05d771687f9 100644 --- a/lib/irb/input-method.rb +++ b/lib/irb/input-method.rb @@ -67,7 +67,9 @@ def initialize # # See IO#gets for more information. def gets - puts if @stdout.tty? # workaround for debug compatibility test + # Workaround for debug compatibility test https://github.com/ruby/debug/pull/1100 + puts if ENV['RUBY_DEBUG_TEST_UI'] + print @prompt line = @stdin.gets @line[@line_no += 1] = line @@ -265,24 +267,9 @@ def initialize(completor) @completion_params = [preposing, target, postposing, bind] @completor.completion_candidates(preposing, target, postposing, bind: bind) } - Reline.output_modifier_proc = - if IRB.conf[:USE_COLORIZE] - proc do |output, complete: | - next unless IRB::Color.colorable? - lvars = IRB.CurrentContext&.local_variables || [] - if IRB.CurrentContext&.parse_command(output) - name, sep, arg = output.split(/(\s+)/, 2) - arg = IRB::Color.colorize_code(arg, complete: complete, local_variables: lvars) - "#{IRB::Color.colorize(name, [:BOLD])}\e[m#{sep}#{arg}" - else - IRB::Color.colorize_code(output, complete: complete, local_variables: lvars) - end - end - else - proc do |output| - Reline::Unicode.escape_for_print(output) - end - end + Reline.output_modifier_proc = proc do |input, complete:| + IRB.CurrentContext.colorize_input(input, complete: complete) + end Reline.dig_perfect_match_proc = ->(matched) { display_document(matched) } Reline.autocompletion = IRB.conf[:USE_AUTOCOMPLETE] diff --git a/lib/irb/source_finder.rb b/lib/irb/source_finder.rb index 5d7d729d19a593..c515da5702f902 100644 --- a/lib/irb/source_finder.rb +++ b/lib/irb/source_finder.rb @@ -100,7 +100,7 @@ def find_source(signature, super_level = 0) Source.new(file, line) elsif method # Method defined with eval, probably in IRB session - source = RubyVM::AbstractSyntaxTree.of(method)&.source rescue nil + source = RubyVM::InstructionSequence.of(method)&.script_lines&.join rescue nil Source.new(file, line, source) end rescue EvaluationError diff --git a/lib/irb/version.rb b/lib/irb/version.rb index e935a1d7f73ba4..955a3a81da9b8c 100644 --- a/lib/irb/version.rb +++ b/lib/irb/version.rb @@ -5,7 +5,7 @@ # module IRB # :nodoc: - VERSION = "1.14.0" + VERSION = "1.14.1" @RELEASE_VERSION = VERSION - @LAST_UPDATE_DATE = "2024-07-06" + @LAST_UPDATE_DATE = "2024-09-25" end diff --git a/lib/logger/version.rb b/lib/logger/version.rb index 202b6e4fbaed53..2a0801be633474 100644 --- a/lib/logger/version.rb +++ b/lib/logger/version.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true class Logger - VERSION = "1.6.0" + VERSION = "1.6.1" end diff --git a/lib/mkmf.rb b/lib/mkmf.rb index 73459ffeb95176..d970e9a6ad6dc9 100644 --- a/lib/mkmf.rb +++ b/lib/mkmf.rb @@ -583,14 +583,15 @@ def cpp_command(outfile, opt="") end def libpathflag(libpath=$DEFLIBPATH|$LIBPATH) + libpathflags = nil libpath.map{|x| case x when "$(topdir)", /\A\./ LIBPATHFLAG else - LIBPATHFLAG+RPATHFLAG + libpathflags ||= [LIBPATHFLAG, RPATHFLAG].grep(/\S/).join(" ") end % x.quote - }.join + }.join(" ") end def werror_flag(opt = nil) @@ -2906,7 +2907,7 @@ def MAIN_DOES_NOTHING(*refs) ## # Argument which will add a library path to the linker - LIBPATHFLAG = config_string('LIBPATHFLAG') || ' -L%s' + LIBPATHFLAG = config_string('LIBPATHFLAG') || '-L%s' ## # Argument which will add a runtime library path to the linker diff --git a/lib/open-uri.rb b/lib/open-uri.rb index 91eb61e54acbda..f2eddbcd2b9deb 100644 --- a/lib/open-uri.rb +++ b/lib/open-uri.rb @@ -109,6 +109,7 @@ module OpenURI :redirect => true, :encoding => nil, :max_redirects => 64, + :request_specific_fields => nil, } def OpenURI.check_options(options) # :nodoc: @@ -148,7 +149,11 @@ def OpenURI.open_uri(name, *rest) # :nodoc: end encoding = Encoding.find(options[:encoding]) end - + if options.has_key? :request_specific_fields + if !(options[:request_specific_fields].is_a?(Hash) || options[:request_specific_fields].is_a?(Proc)) + raise ArgumentError, "Invalid request_specific_fields option: #{options[:request_specific_fields].inspect}" + end + end unless mode == nil || mode == 'r' || mode == 'rb' || mode == File::RDONLY @@ -215,9 +220,17 @@ def OpenURI.open_loop(uri, options) # :nodoc: max_redirects = options[:max_redirects] || Options.fetch(:max_redirects) buf = nil while true + request_specific_fields = {} + if options.has_key? :request_specific_fields + request_specific_fields = if options[:request_specific_fields].is_a?(Hash) + options[:request_specific_fields] + else options[:request_specific_fields].is_a?(Proc) + options[:request_specific_fields].call(uri) + end + end redirect = catch(:open_uri_redirect) { buf = Buffer.new - uri.buffer_open(buf, find_proxy.call(uri), options) + uri.buffer_open(buf, find_proxy.call(uri), options.merge(request_specific_fields)) nil } if redirect @@ -237,6 +250,10 @@ def OpenURI.open_loop(uri, options) # :nodoc: options = options.dup options.delete :http_basic_authentication end + if options.include?(:request_specific_fields) && options[:request_specific_fields].is_a?(Hash) + # Send request specific headers only for the initial request. + options.delete :request_specific_fields + end uri = redirect raise "HTTP redirection loop: #{uri}" if uri_set.include? uri.to_s uri_set[uri.to_s] = true @@ -752,6 +769,38 @@ module OpenRead # # Number of HTTP redirects allowed before OpenURI::TooManyRedirects is raised. # The default is 64. + # + # [:request_specific_fields] + # Synopsis: + # :request_specific_fields => {} + # :request_specific_fields => lambda {|url| ...} + # + # :request_specific_fields option allows specifying custom header fields that + # are sent with the HTTP request. It can be passed as a Hash or a Proc that + # gets evaluated on each request and returns a Hash of header fields. + # + # If a Hash is provided, it specifies the headers only for the initial + # request and these headers will not be sent on redirects. + # + # If a Proc is provided, it will be executed for each request including + # redirects, allowing dynamic header customization based on the request URL. + # It is important that the Proc returns a Hash. And this Hash specifies the + # headers to be sent with the request. + # + # For Example with Hash + # URI.open("http://...", + # request_specific_fields: {"Authorization" => "token dummy"}) {|f| ... } + # + # For Example with Proc: + # URI.open("http://...", + # request_specific_fields: lambda { |uri| + # if uri.host == "example.com" + # {"Authorization" => "token dummy"} + # else + # {} + # end + # }) {|f| ... } + # def open(*rest, &block) OpenURI.open_uri(self, *rest, &block) end diff --git a/lib/optparse.rb b/lib/optparse.rb index d52401a31b60da..50641867f08db7 100644 --- a/lib/optparse.rb +++ b/lib/optparse.rb @@ -1115,7 +1115,7 @@ def help_exit Switch::OptionalArgument.new do |pkg| if pkg begin - require 'optparse/version' + require_relative 'optparse/version' rescue LoadError else show_version(*pkg.split(/,/)) or diff --git a/lib/pp.rb b/lib/pp.rb index 1ec5a880eb8fac..ed7e89923cfe5f 100644 --- a/lib/pp.rb +++ b/lib/pp.rb @@ -292,14 +292,35 @@ def pp_hash(obj) } end - # A pretty print for a pair of Hash - def pp_hash_pair(k, v) - pp k - text '=>' - group(1) { - breakable '' - pp v - } + if RUBY_VERSION >= '3.4.' + # A pretty print for a pair of Hash + def pp_hash_pair(k, v) + if Symbol === k + sym_s = k.inspect + if sym_s[1].match?(/["$@!]/) || sym_s[-1].match?(/[%&*+\-\/<=>@\]^`|~]/) + text "#{k.to_s.inspect}:" + else + text "#{k}:" + end + else + pp k + text ' ' + text '=>' + end + group(1) { + breakable + pp v + } + end + else + def pp_hash_pair(k, v) + pp k + text '=>' + group(1) { + breakable '' + pp v + } + end end end diff --git a/lib/prism/ffi.rb b/lib/prism/ffi.rb index 46c4a1a755743f..0520f7cdd24810 100644 --- a/lib/prism/ffi.rb +++ b/lib/prism/ffi.rb @@ -72,6 +72,7 @@ def self.load_exported_functions_from(header, *functions, callbacks) end callback :pm_parse_stream_fgets_t, [:pointer, :int, :pointer], :pointer + enum :pm_string_init_result_t, %i[PM_STRING_INIT_SUCCESS PM_STRING_INIT_ERROR_GENERIC PM_STRING_INIT_ERROR_DIRECTORY] load_exported_functions_from( "prism.h", @@ -176,13 +177,26 @@ def self.with_string(string) def self.with_file(filepath) raise TypeError unless filepath.is_a?(String) + # On Windows and Mac, it's expected that filepaths will be encoded in + # UTF-8. If they are not, we need to convert them to UTF-8 before + # passing them into pm_string_mapped_init. + if RbConfig::CONFIG["host_os"].match?(/bccwin|cygwin|djgpp|mingw|mswin|wince|darwin/i) && + (encoding = filepath.encoding) != Encoding::ASCII_8BIT && encoding != Encoding::UTF_8 + filepath = filepath.encode(Encoding::UTF_8) + end + FFI::MemoryPointer.new(SIZEOF) do |pm_string| - if LibRubyParser.pm_string_mapped_init(pm_string, filepath) + case (result = LibRubyParser.pm_string_mapped_init(pm_string, filepath)) + when :PM_STRING_INIT_SUCCESS pointer = LibRubyParser.pm_string_source(pm_string) length = LibRubyParser.pm_string_length(pm_string) return yield new(pointer, length, false) - else + when :PM_STRING_INIT_ERROR_GENERIC raise SystemCallError.new(filepath, FFI.errno) + when :PM_STRING_INIT_ERROR_DIRECTORY + raise Errno::EISDIR.new(filepath) + else + raise "Unknown error initializing pm_string_t: #{result.inspect}" end ensure LibRubyParser.pm_string_free(pm_string) @@ -397,6 +411,20 @@ def dump_options_command_line(options) end end + # Return the value that should be dumped for the version option. + def dump_options_version(version) + case version + when nil, "latest" + 0 + when /\A3\.3(\.\d+)?\z/ + 1 + when /\A3\.4(\.\d+)?\z/ + 0 + else + raise ArgumentError, "invalid version: #{version}" + end + end + # Convert the given options into a serialized options string. def dump_options(options) template = +"" @@ -429,11 +457,17 @@ def dump_options(options) values << dump_options_command_line(options) template << "C" - values << { nil => 0, "3.3.0" => 1, "3.3.1" => 1, "3.4.0" => 0, "latest" => 0 }.fetch(options[:version]) + values << dump_options_version(options[:version]) template << "C" values << (options[:encoding] == false ? 1 : 0) + template << "C" + values << (options.fetch(:main_script, false) ? 1 : 0) + + template << "C" + values << (options.fetch(:partial_script, false) ? 1 : 0) + template << "L" if (scopes = options[:scopes]) values << scopes.length diff --git a/lib/prism/lex_compat.rb b/lib/prism/lex_compat.rb index 4f8e443a3ba755..a83c24cb416df3 100644 --- a/lib/prism/lex_compat.rb +++ b/lib/prism/lex_compat.rb @@ -481,7 +481,7 @@ def to_a embexpr_balance -= 1 when :on_tstring_content if embexpr_balance == 0 - while index < max_index && tokens[index].event == :on_tstring_content + while index < max_index && tokens[index].event == :on_tstring_content && !token.value.match?(/\\\r?\n\z/) token.value << tokens[index].value index += 1 end diff --git a/lib/prism/parse_result.rb b/lib/prism/parse_result.rb index c3b4bc88875537..e3ba7e7c8e95c4 100644 --- a/lib/prism/parse_result.rb +++ b/lib/prism/parse_result.rb @@ -12,6 +12,21 @@ class Source def self.for(source, start_line = 1, offsets = []) if source.ascii_only? ASCIISource.new(source, start_line, offsets) + elsif source.encoding == Encoding::BINARY + source.force_encoding(Encoding::UTF_8) + + if source.valid_encoding? + new(source, start_line, offsets) + else + # This is an extremely niche use case where the file is marked as + # binary, contains multi-byte characters, and those characters are not + # valid UTF-8. In this case we'll mark it as binary and fall back to + # treating everything as a single-byte character. This _may_ cause + # problems when asking for code units, but it appears to be the + # cleanest solution at the moment. + source.force_encoding(Encoding::BINARY) + ASCIISource.new(source, start_line, offsets) + end else new(source, start_line, offsets) end @@ -89,8 +104,14 @@ def character_column(byte_offset) # This method is tested with UTF-8, UTF-16, and UTF-32. If there is the # concept of code units that differs from the number of characters in other # encodings, it is not captured here. + # + # We purposefully replace invalid and undefined characters with replacement + # characters in this conversion. This happens for two reasons. First, it's + # possible that the given byte offset will not occur on a character + # boundary. Second, it's possible that the source code will contain a + # character that has no equivalent in the given encoding. def code_units_offset(byte_offset, encoding) - byteslice = (source.byteslice(0, byte_offset) or raise).encode(encoding) + byteslice = (source.byteslice(0, byte_offset) or raise).encode(encoding, invalid: :replace, undef: :replace) if encoding == Encoding::UTF_16LE || encoding == Encoding::UTF_16BE byteslice.bytesize / 2 @@ -130,8 +151,12 @@ def find_line(byte_offset) # Specialized version of Prism::Source for source code that includes ASCII # characters only. This class is used to apply performance optimizations that - # cannot be applied to sources that include multibyte characters. Sources that - # include multibyte characters are represented by the Prism::Source class. + # cannot be applied to sources that include multibyte characters. + # + # In the extremely rare case that a source includes multi-byte characters but + # is marked as binary because of a magic encoding comment and it cannot be + # eagerly converted to UTF-8, this class will be used as well. This is because + # at that point we will treat everything as single-byte characters. class ASCIISource < Source # Return the character offset for the given byte offset. def character_offset(byte_offset) @@ -155,7 +180,7 @@ def code_units_offset(byte_offset, encoding) # Specialized version of `code_units_column` that does not depend on # `code_units_offset`, which is a more expensive operation. This is - # essentialy the same as `Prism::Source#column`. + # essentially the same as `Prism::Source#column`. def code_units_column(byte_offset, encoding) byte_offset - line_start(byte_offset) end diff --git a/lib/prism/translation/parser.rb b/lib/prism/translation/parser.rb index 8c7eb3aa752fd8..969f2b95b0ee78 100644 --- a/lib/prism/translation/parser.rb +++ b/lib/prism/translation/parser.rb @@ -51,7 +51,7 @@ def parse(source_buffer) source = source_buffer.source offset_cache = build_offset_cache(source) - result = unwrap(Prism.parse(source, filepath: source_buffer.name, version: convert_for_prism(version), scopes: [[]], encoding: false), offset_cache) + result = unwrap(Prism.parse(source, filepath: source_buffer.name, version: convert_for_prism(version), partial_script: true, encoding: false), offset_cache) build_ast(result.value, offset_cache) ensure @@ -64,7 +64,7 @@ def parse_with_comments(source_buffer) source = source_buffer.source offset_cache = build_offset_cache(source) - result = unwrap(Prism.parse(source, filepath: source_buffer.name, version: convert_for_prism(version), scopes: [[]], encoding: false), offset_cache) + result = unwrap(Prism.parse(source, filepath: source_buffer.name, version: convert_for_prism(version), partial_script: true, encoding: false), offset_cache) [ build_ast(result.value, offset_cache), @@ -83,7 +83,7 @@ def tokenize(source_buffer, recover = false) offset_cache = build_offset_cache(source) result = begin - unwrap(Prism.parse_lex(source, filepath: source_buffer.name, version: convert_for_prism(version), scopes: [[]], encoding: false), offset_cache) + unwrap(Prism.parse_lex(source, filepath: source_buffer.name, version: convert_for_prism(version), partial_script: true, encoding: false), offset_cache) rescue ::Parser::SyntaxError raise if !recover end diff --git a/lib/prism/translation/parser/lexer.rb b/lib/prism/translation/parser/lexer.rb index 8191bd19c5b5ce..db7dbb1c8768ed 100644 --- a/lib/prism/translation/parser/lexer.rb +++ b/lib/prism/translation/parser/lexer.rb @@ -134,7 +134,7 @@ class Lexer MINUS_GREATER: :tLAMBDA, NEWLINE: :tNL, NUMBERED_REFERENCE: :tNTH_REF, - PARENTHESIS_LEFT: :tLPAREN, + PARENTHESIS_LEFT: :tLPAREN2, PARENTHESIS_LEFT_PARENTHESES: :tLPAREN_ARG, PARENTHESIS_RIGHT: :tRPAREN, PERCENT: :tPERCENT, @@ -173,7 +173,7 @@ class Lexer UMINUS_NUM: :tUNARY_NUM, UPLUS: :tUPLUS, USTAR: :tSTAR, - USTAR_STAR: :tPOW, + USTAR_STAR: :tDSTAR, WORDS_SEP: :tSPACE } @@ -187,7 +187,20 @@ class Lexer EXPR_BEG = 0x1 # :nodoc: EXPR_LABEL = 0x400 # :nodoc: - private_constant :TYPES, :EXPR_BEG, :EXPR_LABEL + # It is used to determine whether `do` is of the token type `kDO` or `kDO_LAMBDA`. + # + # NOTE: In edge cases like `-> (foo = -> (bar) {}) do end`, please note that `kDO` is still returned + # instead of `kDO_LAMBDA`, which is expected: https://github.com/ruby/prism/pull/3046 + LAMBDA_TOKEN_TYPES = [:kDO_LAMBDA, :tLAMBDA, :tLAMBEG] + + # The `PARENTHESIS_LEFT` token in Prism is classified as either `tLPAREN` or `tLPAREN2` in the Parser gem. + # The following token types are listed as those classified as `tLPAREN`. + LPAREN_CONVERSION_TOKEN_TYPES = [ + :kBREAK, :kCASE, :tDIVIDE, :kFOR, :kIF, :kNEXT, :kRETURN, :kUNTIL, :kWHILE, :tAMPER, :tANDOP, :tBANG, :tCOMMA, :tDOT2, :tDOT3, + :tEQL, :tLPAREN, :tLPAREN2, :tLSHFT, :tNL, :tOP_ASGN, :tOROP, :tPIPE, :tSEMI, :tSTRING_DBEG, :tUMINUS, :tUPLUS + ] + + private_constant :TYPES, :EXPR_BEG, :EXPR_LABEL, :LAMBDA_TOKEN_TYPES, :LPAREN_CONVERSION_TOKEN_TYPES # The Parser::Source::Buffer that the tokens were lexed from. attr_reader :source_buffer @@ -229,6 +242,13 @@ def to_a location = Range.new(source_buffer, offset_cache[token.location.start_offset], offset_cache[token.location.end_offset]) case type + when :kDO + types = tokens.map(&:first) + nearest_lambda_token_type = types.reverse.find { |type| LAMBDA_TOKEN_TYPES.include?(type) } + + if nearest_lambda_token_type == :tLAMBDA + type = :kDO_LAMBDA + end when :tCHARACTER value.delete_prefix!("?") when :tCOMMENT @@ -268,6 +288,8 @@ def to_a value.chomp!(":") when :tLCURLY type = :tLBRACE if state == EXPR_BEG | EXPR_LABEL + when :tLPAREN2 + type = :tLPAREN if tokens.empty? || LPAREN_CONVERSION_TOKEN_TYPES.include?(tokens.dig(-1, 0)) when :tNTH_REF value = parse_integer(value.delete_prefix("$")) when :tOP_ASGN diff --git a/lib/prism/translation/ripper.rb b/lib/prism/translation/ripper.rb index cafe8c3f633dec..018842715b0be0 100644 --- a/lib/prism/translation/ripper.rb +++ b/lib/prism/translation/ripper.rb @@ -3269,11 +3269,7 @@ def visit_yield_node(node) # Lazily initialize the parse result. def result - @result ||= - begin - scopes = RUBY_VERSION >= "3.3.0" ? [] : [[]] - Prism.parse(source, scopes: scopes) - end + @result ||= Prism.parse(source, partial_script: true) end ########################################################################## diff --git a/lib/prism/translation/ruby_parser.rb b/lib/prism/translation/ruby_parser.rb index 9cd39075ecbf3c..189038d008d677 100644 --- a/lib/prism/translation/ruby_parser.rb +++ b/lib/prism/translation/ruby_parser.rb @@ -1428,7 +1428,13 @@ def visit_statements_node(node) # "foo" # ^^^^^ def visit_string_node(node) - s(node, :str, node.unescaped) + unescaped = node.unescaped + + if node.forced_binary_encoding? + unescaped.force_encoding(Encoding::BINARY) + end + + s(node, :str, unescaped) end # super(foo) @@ -1590,13 +1596,13 @@ def visit_write_value(node) # Parse the given source and translate it into the seattlerb/ruby_parser # gem's Sexp format. def parse(source, filepath = "(string)") - translate(Prism.parse(source, filepath: filepath, scopes: [[]]), filepath) + translate(Prism.parse(source, filepath: filepath, partial_script: true), filepath) end # Parse the given file and translate it into the seattlerb/ruby_parser # gem's Sexp format. def parse_file(filepath) - translate(Prism.parse_file(filepath, scopes: [[]]), filepath) + translate(Prism.parse_file(filepath, partial_script: true), filepath) end class << self diff --git a/lib/rdoc.rb b/lib/rdoc.rb index 209042ed0e861d..3821569f45fae5 100644 --- a/lib/rdoc.rb +++ b/lib/rdoc.rb @@ -21,7 +21,7 @@ # see RDoc::Markup and refer to rdoc --help for command line usage. # # If you want to set the default markup format see -# RDoc::Markup@Supported+Formats +# RDoc::Markup@Markup+Formats # # If you want to store rdoc configuration in your gem (such as the default # markup format) see RDoc::Options@Saved+Options diff --git a/lib/rdoc/generator/template/darkfish/css/rdoc.css b/lib/rdoc/generator/template/darkfish/css/rdoc.css index 0032ac172a8ab9..772a06b85b21e9 100644 --- a/lib/rdoc/generator/template/darkfish/css/rdoc.css +++ b/lib/rdoc/generator/template/darkfish/css/rdoc.css @@ -92,7 +92,6 @@ h6:target { color: var(--link-color); text-decoration: none; transition: color 0.3s ease; - font-weight: 600; /* Make links bolder */ } :link:hover, @@ -223,6 +222,7 @@ nav a:hover { position: fixed; top: 10px; left: 20px; + cursor: pointer; } #navigation-toggle[aria-expanded="true"] { @@ -307,7 +307,7 @@ main h6 { #search-field { width: 100%; - padding: 0.5em 1em 0.5em 2em; + padding: 0.5em 1em 0.5em 2.5em; border: 1px solid var(--border-color); border-radius: 20px; font-size: 14px; @@ -584,6 +584,9 @@ main header h3 { /* @group Method Details */ main .method-source-code { + /* While this is already invisible through the rule below, this will inform the browser to + not consider source code during text searching until it is actually expanded. */ + visibility: hidden; max-height: 0; overflow: auto; transition-duration: 200ms; @@ -593,6 +596,7 @@ main .method-source-code { } main .method-source-code.active-menu { + visibility: visible; max-height: 100vh; } diff --git a/lib/rdoc/markup/to_rdoc.rb b/lib/rdoc/markup/to_rdoc.rb index 88234f5096d122..90763ccfdb41c7 100644 --- a/lib/rdoc/markup/to_rdoc.rb +++ b/lib/rdoc/markup/to_rdoc.rb @@ -249,8 +249,8 @@ def accept_verbatim verbatim # Adds +table+ to the output def accept_table header, body, aligns - widths = header.zip(body) do |h, b| - [h.size, b.size].max + widths = header.zip(*body).map do |cols| + cols.map(&:size).max end aligns = aligns.map do |a| case a @@ -262,12 +262,12 @@ def accept_table header, body, aligns :rjust end end - @res << header.zip(widths, aligns) do |h, w, a| + @res << header.zip(widths, aligns).map do |h, w, a| h.__send__(a, w) end.join("|").rstrip << "\n" @res << widths.map {|w| "-" * w }.join("|") << "\n" body.each do |row| - @res << row.zip(widths, aligns) do |t, w, a| + @res << row.zip(widths, aligns).map do |t, w, a| t.__send__(a, w) end.join("|").rstrip << "\n" end diff --git a/lib/rdoc/rdoc.gemspec b/lib/rdoc/rdoc.gemspec index 93a281c8aea62d..26f9ba1a871986 100644 --- a/lib/rdoc/rdoc.gemspec +++ b/lib/rdoc/rdoc.gemspec @@ -46,27 +46,27 @@ RDoc includes the +rdoc+ and +ri+ tools for generating and displaying documentat "LEGAL.rdoc", "LICENSE.rdoc", "README.rdoc", - "RI.rdoc", + "RI.md", "TODO.rdoc", "exe/rdoc", "exe/ri", "lib/rdoc.rb", - "lib/rdoc/alias.rb", - "lib/rdoc/anon_class.rb", - "lib/rdoc/any_method.rb", - "lib/rdoc/attr.rb", - "lib/rdoc/class_module.rb", + "lib/rdoc/code_object/alias.rb", + "lib/rdoc/code_object/anon_class.rb", + "lib/rdoc/code_object/any_method.rb", + "lib/rdoc/code_object/attr.rb", + "lib/rdoc/code_object/class_module.rb", "lib/rdoc/code_object.rb", "lib/rdoc/code_objects.rb", "lib/rdoc/comment.rb", - "lib/rdoc/constant.rb", - "lib/rdoc/context.rb", - "lib/rdoc/context/section.rb", + "lib/rdoc/code_object/constant.rb", + "lib/rdoc/code_object/context.rb", + "lib/rdoc/code_object/context/section.rb", "lib/rdoc/cross_reference.rb", "lib/rdoc/encoding.rb", "lib/rdoc/erb_partial.rb", "lib/rdoc/erbio.rb", - "lib/rdoc/extend.rb", + "lib/rdoc/code_object/extend.rb", "lib/rdoc/generator.rb", "lib/rdoc/generator/darkfish.rb", "lib/rdoc/generator/json_index.rb", @@ -136,11 +136,11 @@ RDoc includes the +rdoc+ and +ri+ tools for generating and displaying documentat "lib/rdoc/generator/template/json_index/.document", "lib/rdoc/generator/template/json_index/js/navigation.js", "lib/rdoc/generator/template/json_index/js/searcher.js", - "lib/rdoc/ghost_method.rb", + "lib/rdoc/code_object/ghost_method.rb", "lib/rdoc/i18n.rb", "lib/rdoc/i18n/locale.rb", "lib/rdoc/i18n/text.rb", - "lib/rdoc/include.rb", + "lib/rdoc/code_object/include.rb", "lib/rdoc/known_classes.rb", "lib/rdoc/markdown.kpeg", "lib/rdoc/markdown/entities.rb", @@ -180,11 +180,11 @@ RDoc includes the +rdoc+ and +ri+ tools for generating and displaying documentat "lib/rdoc/markup/to_test.rb", "lib/rdoc/markup/to_tt_only.rb", "lib/rdoc/markup/verbatim.rb", - "lib/rdoc/meta_method.rb", - "lib/rdoc/method_attr.rb", - "lib/rdoc/mixin.rb", - "lib/rdoc/normal_class.rb", - "lib/rdoc/normal_module.rb", + "lib/rdoc/code_object/meta_method.rb", + "lib/rdoc/code_object/method_attr.rb", + "lib/rdoc/code_object/mixin.rb", + "lib/rdoc/code_object/normal_class.rb", + "lib/rdoc/code_object/normal_module.rb", "lib/rdoc/options.rb", "lib/rdoc/parser.rb", "lib/rdoc/parser/c.rb", @@ -201,7 +201,7 @@ RDoc includes the +rdoc+ and +ri+ tools for generating and displaying documentat "lib/rdoc/rd/inline.rb", "lib/rdoc/rd/inline_parser.ry", "lib/rdoc/rdoc.rb", - "lib/rdoc/require.rb", + "lib/rdoc/code_object/require.rb", "lib/rdoc/ri.rb", "lib/rdoc/ri/driver.rb", "lib/rdoc/ri/formatter.rb", @@ -210,7 +210,7 @@ RDoc includes the +rdoc+ and +ri+ tools for generating and displaying documentat "lib/rdoc/ri/task.rb", "lib/rdoc/rubygems_hook.rb", "lib/rdoc/servlet.rb", - "lib/rdoc/single_class.rb", + "lib/rdoc/code_object/single_class.rb", "lib/rdoc/stats.rb", "lib/rdoc/stats/normal.rb", "lib/rdoc/stats/quiet.rb", @@ -220,7 +220,7 @@ RDoc includes the +rdoc+ and +ri+ tools for generating and displaying documentat "lib/rdoc/text.rb", "lib/rdoc/token_stream.rb", "lib/rdoc/tom_doc.rb", - "lib/rdoc/top_level.rb", + "lib/rdoc/code_object/top_level.rb", "lib/rdoc/version.rb", "man/ri.1", ] diff --git a/lib/rdoc/rdoc.rb b/lib/rdoc/rdoc.rb index 47108ceee3e0b5..88ae55b4093f53 100644 --- a/lib/rdoc/rdoc.rb +++ b/lib/rdoc/rdoc.rb @@ -520,6 +520,7 @@ def generate Dir.chdir @options.op_dir do unless @options.quiet then $stderr.puts "\nGenerating #{@generator.class.name.sub(/^.*::/, '')} format into #{Dir.pwd}..." + $stderr.puts "\nYou can visit the home page at: \e]8;;file://#{Dir.pwd}/index.html\e\\file://#{Dir.pwd}/index.html\e]8;;\e\\" end @generator.generate diff --git a/lib/reline.rb b/lib/reline.rb index b851144627ffc3..4ba74d2cb2965c 100644 --- a/lib/reline.rb +++ b/lib/reline.rb @@ -324,14 +324,17 @@ def readline(prompt = '', add_hist = false) line_editor.prompt_proc = prompt_proc line_editor.auto_indent_proc = auto_indent_proc line_editor.dig_perfect_match_proc = dig_perfect_match_proc + + # Readline calls pre_input_hook just after printing the first prompt. + line_editor.print_nomultiline_prompt pre_input_hook&.call + unless Reline::IOGate.dumb? @dialog_proc_list.each_pair do |name_sym, d| line_editor.add_dialog_proc(name_sym, d.dialog_proc, d.context) end end - line_editor.print_nomultiline_prompt line_editor.update_dialogs line_editor.rerender @@ -343,7 +346,7 @@ def readline(prompt = '', add_hist = false) inputs.each do |key| if key.char == :bracketed_paste_start text = io_gate.read_bracketed_paste - line_editor.insert_pasted_text(text) + line_editor.insert_multiline_text(text) line_editor.scroll_into_view else line_editor.update(key) @@ -409,7 +412,7 @@ def ambiguous_width end private def may_req_ambiguous_char_width - @ambiguous_width = 2 if io_gate.dumb? || !STDIN.tty? || !STDOUT.tty? + @ambiguous_width = 1 if io_gate.dumb? || !STDIN.tty? || !STDOUT.tty? return if defined? @ambiguous_width io_gate.move_cursor_column(0) begin @@ -418,7 +421,7 @@ def ambiguous_width # LANG=C @ambiguous_width = 1 else - @ambiguous_width = io_gate.cursor_pos.x + @ambiguous_width = io_gate.cursor_pos.x == 2 ? 2 : 1 end io_gate.move_cursor_column(0) io_gate.erase_after_cursor @@ -457,8 +460,8 @@ def ambiguous_width def_single_delegator :line_editor, :byte_pointer, :point def_single_delegator :line_editor, :byte_pointer=, :point= - def self.insert_text(*args, &block) - line_editor.insert_text(*args, &block) + def self.insert_text(text) + line_editor.insert_multiline_text(text) self end diff --git a/lib/reline/config.rb b/lib/reline/config.rb index 16ed7eee05b4cb..e0fc37fc680114 100644 --- a/lib/reline/config.rb +++ b/lib/reline/config.rb @@ -1,7 +1,7 @@ class Reline::Config attr_reader :test_mode - KEYSEQ_PATTERN = /\\(?:C|Control)-[A-Za-z_]|\\(?:M|Meta)-[0-9A-Za-z_]|\\(?:C|Control)-(?:M|Meta)-[A-Za-z_]|\\(?:M|Meta)-(?:C|Control)-[A-Za-z_]|\\e|\\[\\\"\'abdfnrtv]|\\\d{1,3}|\\x\h{1,2}|./ + KEYSEQ_PATTERN = /\\(?:C|Control)-[A-Za-z_]|\\(?:M|Meta)-[0-9A-Za-z_]|\\(?:C|Control)-\\(?:M|Meta)-[A-Za-z_]|\\(?:M|Meta)-\\(?:C|Control)-[A-Za-z_]|\\e|\\[\\\"\'abdfnrtv]|\\\d{1,3}|\\x\h{1,2}|./ class InvalidInputrc < RuntimeError attr_accessor :file, :lineno @@ -29,6 +29,17 @@ class InvalidInputrc < RuntimeError attr_accessor :autocompletion def initialize + reset_variables + end + + def reset + if editing_mode_is?(:vi_command) + @editing_mode_label = :vi_insert + end + @oneshot_key_bindings.clear + end + + def reset_variables @additional_key_bindings = { # from inputrc emacs: Reline::KeyActor::Base.new, vi_insert: Reline::KeyActor::Base.new, @@ -51,16 +62,11 @@ def initialize @keyseq_timeout = 500 @test_mode = false @autocompletion = false - @convert_meta = true if seven_bit_encoding?(Reline::IOGate.encoding) + @convert_meta = seven_bit_encoding?(Reline::IOGate.encoding) @loaded = false @enable_bracketed_paste = true - end - - def reset - if editing_mode_is?(:vi_command) - @editing_mode_label = :vi_insert - end - @oneshot_key_bindings.clear + @show_mode_in_prompt = false + @default_inputrc_path = nil end def editing_mode @@ -188,13 +194,14 @@ def read_lines(lines, file = nil) # value ignores everything after a space, raw_value does not. var, value, raw_value = $1.downcase, $2.partition(' ').first, $2 bind_variable(var, value, raw_value) - next - when /\s*("#{KEYSEQ_PATTERN}+")\s*:\s*(.*)\s*$/o - key, func_name = $1, $2 - func_name = func_name.split.first - keystroke, func = bind_key(key, func_name) - next unless keystroke - @additional_key_bindings[@keymap_label].add(@keymap_prefix + keystroke, func) + when /^\s*(?:M|Meta)-([a-zA-Z_])\s*:\s*(.*)\s*$/o + bind_key("\"\\M-#$1\"", $2) + when /^\s*(?:C|Control)-([a-zA-Z_])\s*:\s*(.*)\s*$/o + bind_key("\"\\C-#$1\"", $2) + when /^\s*(?:(?:C|Control)-(?:M|Meta)|(?:M|Meta)-(?:C|Control))-([a-zA-Z_])\s*:\s*(.*)\s*$/o + bind_key("\"\\M-\\C-#$1\"", $2) + when /^\s*("#{KEYSEQ_PATTERN}+")\s*:\s*(.*)\s*$/o + bind_key($1, $2) end end unless if_stack.empty? @@ -304,7 +311,12 @@ def retrieve_string(str) parse_keyseq(str).map { |c| c.chr(Reline.encoding_system_needs) }.join end - def bind_key(key, func_name) + def bind_key(key, value) + keystroke, func = parse_key_binding(key, value) + @additional_key_bindings[@keymap_label].add(@keymap_prefix + keystroke, func) if keystroke + end + + def parse_key_binding(key, func_name) if key =~ /\A"(.*)"\z/ keyseq = parse_keyseq($1) else @@ -313,27 +325,19 @@ def bind_key(key, func_name) if func_name =~ /"(.*)"/ func = parse_keyseq($1) else - func = func_name.tr(?-, ?_).to_sym # It must be macro. + func = func_name.split.first.tr(?-, ?_).to_sym # It must be macro. end [keyseq, func] end def key_notation_to_code(notation) case notation + when /(?:\\(?:C|Control)-\\(?:M|Meta)|\\(?:M|Meta)-\\(?:C|Control))-([A-Za-z_])/ + [?\e.ord, $1.ord % 32] when /\\(?:C|Control)-([A-Za-z_])/ - (1 + $1.downcase.ord - ?a.ord) + ($1.upcase.ord % 32) when /\\(?:M|Meta)-([0-9A-Za-z_])/ - modified_key = $1 - case $1 - when /[0-9]/ - ?\M-0.bytes.first + (modified_key.ord - ?0.ord) - when /[A-Z]/ - ?\M-A.bytes.first + (modified_key.ord - ?A.ord) - when /[a-z]/ - ?\M-a.bytes.first + (modified_key.ord - ?a.ord) - end - when /\\(?:C|Control)-(?:M|Meta)-[A-Za-z_]/, /\\(?:M|Meta)-(?:C|Control)-[A-Za-z_]/ - # 129 M-^A + [?\e.ord, $1.ord] when /\\(\d{1,3})/ then $1.to_i(8) # octal when /\\x(\h{1,2})/ then $1.to_i(16) # hexadecimal when "\\e" then ?\e.ord @@ -353,11 +357,14 @@ def key_notation_to_code(notation) end def parse_keyseq(str) - ret = [] - str.scan(KEYSEQ_PATTERN) do - ret << key_notation_to_code($&) + str.scan(KEYSEQ_PATTERN).flat_map do |notation| + key_notation_to_code(notation) end - ret + end + + def reload + reset_variables + read end private def seven_bit_encoding?(encoding) diff --git a/lib/reline/history.rb b/lib/reline/history.rb index 3f3b65fea64aeb..47c68ba7745e10 100644 --- a/lib/reline/history.rb +++ b/lib/reline/history.rb @@ -19,7 +19,7 @@ def [](index) def []=(index, val) index = check_index(index) - super(index, String.new(val, encoding: Reline.encoding_system_needs)) + super(index, Reline::Unicode.safe_encode(val, Reline.encoding_system_needs)) end def concat(*val) @@ -45,7 +45,7 @@ def push(*val) end end super(*(val.map{ |v| - String.new(v, encoding: Reline.encoding_system_needs) + Reline::Unicode.safe_encode(v, Reline.encoding_system_needs) })) end @@ -56,7 +56,7 @@ def <<(val) if @config.history_size.positive? shift if size + 1 > @config.history_size end - super(String.new(val, encoding: Reline.encoding_system_needs)) + super(Reline::Unicode.safe_encode(val, Reline.encoding_system_needs)) end private def check_index(index) diff --git a/lib/reline/io/ansi.rb b/lib/reline/io/ansi.rb index a730a953f775dd..cf0c1c1b3172a3 100644 --- a/lib/reline/io/ansi.rb +++ b/lib/reline/io/ansi.rb @@ -75,7 +75,10 @@ def set_bracketed_paste_key_bindings(config) def set_default_key_bindings_ansi_cursor(config) ANSI_CURSOR_KEY_BINDINGS.each do |char, (default_func, modifiers)| - bindings = [["\e[#{char}", default_func]] # CSI + char + bindings = [ + ["\e[#{char}", default_func], # CSI + char + ["\eO#{char}", default_func] # SS3 + char, application cursor key mode + ] if modifiers[:ctrl] # CSI + ctrl_key_modifier + char bindings << ["\e[1;5#{char}", modifiers[:ctrl]] @@ -123,27 +126,9 @@ def set_default_key_bindings_comprehensive_list(config) [27, 91, 49, 126] => :ed_move_to_beg, # Home [27, 91, 52, 126] => :ed_move_to_end, # End - # KDE - # Del is 0x08 - [27, 71, 65] => :ed_prev_history, # ↑ - [27, 71, 66] => :ed_next_history, # ↓ - [27, 71, 67] => :ed_next_char, # → - [27, 71, 68] => :ed_prev_char, # ↠- # urxvt / exoterm [27, 91, 55, 126] => :ed_move_to_beg, # Home [27, 91, 56, 126] => :ed_move_to_end, # End - - # GNOME - [27, 79, 72] => :ed_move_to_beg, # Home - [27, 79, 70] => :ed_move_to_end, # End - # Del is 0x08 - # Arrow keys are the same of KDE - - [27, 79, 65] => :ed_prev_history, # ↑ - [27, 79, 66] => :ed_next_history, # ↓ - [27, 79, 67] => :ed_next_char, # → - [27, 79, 68] => :ed_prev_char, # ↠}.each_pair do |key, func| config.add_default_key_binding_by_keymap(:emacs, key, func) config.add_default_key_binding_by_keymap(:vi_insert, key, func) @@ -245,39 +230,30 @@ def set_screen_size(rows, columns) self end - def cursor_pos - if both_tty? - res = +'' - m = nil - @input.raw do |stdin| - @output << "\e[6n" - @output.flush - loop do - c = stdin.getc - next if c.nil? - res << c - m = res.match(/\e\[(?\d+);(?\d+)R/) - break if m - end - (m.pre_match + m.post_match).chars.reverse_each do |ch| - stdin.ungetc ch + private def cursor_pos_internal(timeout:) + match = nil + @input.raw do |stdin| + @output << "\e[6n" + @output.flush + timeout_at = Time.now + timeout + buf = +'' + while (wait = timeout_at - Time.now) > 0 && stdin.wait_readable(wait) + buf << stdin.readpartial(1024) + if (match = buf.match(/\e\[(?\d+);(?\d+)R/)) + buf = match.pre_match + match.post_match + break end end - column = m[:column].to_i - 1 - row = m[:row].to_i - 1 - else - begin - buf = @output.pread(@output.pos, 0) - row = buf.count("\n") - column = buf.rindex("\n") ? (buf.size - buf.rindex("\n")) - 1 : 0 - rescue Errno::ESPIPE, IOError - # Just returns column 1 for ambiguous width because this I/O is not - # tty and can't seek. - row = 0 - column = 1 + buf.chars.reverse_each do |ch| + stdin.ungetc ch end end - Reline::CursorPos.new(column, row) + [match[:column].to_i - 1, match[:row].to_i - 1] if match + end + + def cursor_pos + col, row = cursor_pos_internal(timeout: 0.5) if both_tty? + Reline::CursorPos.new(col || 0, row || 0) end def both_tty? diff --git a/lib/reline/io/dumb.rb b/lib/reline/io/dumb.rb index 6ed69ffdfa997e..6a10af4fef8c37 100644 --- a/lib/reline/io/dumb.rb +++ b/lib/reline/io/dumb.rb @@ -60,7 +60,7 @@ def get_screen_size end def cursor_pos - Reline::CursorPos.new(1, 1) + Reline::CursorPos.new(0, 0) end def hide_cursor diff --git a/lib/reline/io/windows.rb b/lib/reline/io/windows.rb index 6ba4b830d6225e..f7187431936fb1 100644 --- a/lib/reline/io/windows.rb +++ b/lib/reline/io/windows.rb @@ -159,14 +159,24 @@ def call(*args) FILE_NAME_INFO = 2 ENABLE_VIRTUAL_TERMINAL_PROCESSING = 4 + # Calling Win32API with console handle is reported to fail after executing some external command. + # We need to refresh console handle and retry the call again. + private def call_with_console_handle(win32func, *args) + val = win32func.call(@hConsoleHandle, *args) + return val if val != 0 + + @hConsoleHandle = @GetStdHandle.call(STD_OUTPUT_HANDLE) + win32func.call(@hConsoleHandle, *args) + end + private def getconsolemode mode = "\000\000\000\000" - @GetConsoleMode.call(@hConsoleHandle, mode) + call_with_console_handle(@GetConsoleMode, mode) mode.unpack1('L') end private def setconsolemode(mode) - @SetConsoleMode.call(@hConsoleHandle, mode) + call_with_console_handle(@SetConsoleMode, mode) end #if @legacy_console @@ -242,7 +252,7 @@ def process_key_event(repeat_count, virtual_key_code, virtual_scan_code, char_co key = KeyEventRecord.new(virtual_key_code, char_code, control_key_state) - match = KEY_MAP.find { |args,| key.matches?(**args) } + match = KEY_MAP.find { |args,| key.match?(**args) } unless match.nil? @output_buf.concat(match.last) return @@ -334,7 +344,7 @@ def get_console_screen_buffer_info # [18,2] dwMaximumWindowSize.X # [20,2] dwMaximumWindowSize.Y csbi = 0.chr * 22 - return if @GetConsoleScreenBufferInfo.call(@hConsoleHandle, csbi) == 0 + return if call_with_console_handle(@GetConsoleScreenBufferInfo, csbi) == 0 csbi end @@ -355,14 +365,14 @@ def cursor_pos end def move_cursor_column(val) - @SetConsoleCursorPosition.call(@hConsoleHandle, cursor_pos.y * 65536 + val) + call_with_console_handle(@SetConsoleCursorPosition, cursor_pos.y * 65536 + val) end def move_cursor_up(val) if val > 0 y = cursor_pos.y - val y = 0 if y < 0 - @SetConsoleCursorPosition.call(@hConsoleHandle, y * 65536 + cursor_pos.x) + call_with_console_handle(@SetConsoleCursorPosition, y * 65536 + cursor_pos.x) elsif val < 0 move_cursor_down(-val) end @@ -374,7 +384,7 @@ def move_cursor_down(val) screen_height = get_screen_size.first y = cursor_pos.y + val y = screen_height - 1 if y > (screen_height - 1) - @SetConsoleCursorPosition.call(@hConsoleHandle, (cursor_pos.y + val) * 65536 + cursor_pos.x) + call_with_console_handle(@SetConsoleCursorPosition, (cursor_pos.y + val) * 65536 + cursor_pos.x) elsif val < 0 move_cursor_up(-val) end @@ -385,8 +395,8 @@ def erase_after_cursor attributes = csbi[8, 2].unpack1('S') cursor = csbi[4, 4].unpack1('L') written = 0.chr * 4 - @FillConsoleOutputCharacter.call(@hConsoleHandle, 0x20, get_screen_size.last - cursor_pos.x, cursor, written) - @FillConsoleOutputAttribute.call(@hConsoleHandle, attributes, get_screen_size.last - cursor_pos.x, cursor, written) + call_with_console_handle(@FillConsoleOutputCharacter, 0x20, get_screen_size.last - cursor_pos.x, cursor, written) + call_with_console_handle(@FillConsoleOutputAttribute, attributes, get_screen_size.last - cursor_pos.x, cursor, written) end def scroll_down(val) @@ -404,7 +414,7 @@ def scroll_down(val) scroll_rectangle = [0, val, buffer_width, buffer_lines - val].pack('s4') destination_origin = 0 # y * 65536 + x fill = [' '.ord, attributes].pack('SS') - @ScrollConsoleScreenBuffer.call(@hConsoleHandle, scroll_rectangle, nil, destination_origin, fill) + call_with_console_handle(@ScrollConsoleScreenBuffer, scroll_rectangle, nil, destination_origin, fill) else origin_x = x + 1 origin_y = y - window_top + 1 @@ -423,9 +433,9 @@ def clear_screen fill_length = buffer_width * (window_bottom - window_top + 1) screen_topleft = window_top * 65536 written = 0.chr * 4 - @FillConsoleOutputCharacter.call(@hConsoleHandle, 0x20, fill_length, screen_topleft, written) - @FillConsoleOutputAttribute.call(@hConsoleHandle, attributes, fill_length, screen_topleft, written) - @SetConsoleCursorPosition.call(@hConsoleHandle, screen_topleft) + call_with_console_handle(@FillConsoleOutputCharacter, 0x20, fill_length, screen_topleft, written) + call_with_console_handle(@FillConsoleOutputAttribute, attributes, fill_length, screen_topleft, written) + call_with_console_handle(@SetConsoleCursorPosition, screen_topleft) else @output.write "\e[2J" "\e[H" end @@ -439,14 +449,14 @@ def hide_cursor size = 100 visible = 0 # 0 means false cursor_info = [size, visible].pack('Li') - @SetConsoleCursorInfo.call(@hConsoleHandle, cursor_info) + call_with_console_handle(@SetConsoleCursorInfo, cursor_info) end def show_cursor size = 100 visible = 1 # 1 means true cursor_info = [size, visible].pack('Li') - @SetConsoleCursorInfo.call(@hConsoleHandle, cursor_info) + call_with_console_handle(@SetConsoleCursorInfo, cursor_info) end def set_winch_handler(&handler) @@ -491,7 +501,7 @@ def enhanced? # Verifies if the arguments match with this key event. # Nil arguments are ignored, but at least one must be passed as non-nil. # To verify that no control keys were pressed, pass an empty array: `control_keys: []`. - def matches?(control_keys: nil, virtual_key_code: nil, char_code: nil) + def match?(control_keys: nil, virtual_key_code: nil, char_code: nil) raise ArgumentError, 'No argument was passed to match key event' if control_keys.nil? && virtual_key_code.nil? && char_code.nil? (control_keys.nil? || [*control_keys].sort == @control_keys) && diff --git a/lib/reline/line_editor.rb b/lib/reline/line_editor.rb index 9c97415050b233..b8156597135430 100644 --- a/lib/reline/line_editor.rb +++ b/lib/reline/line_editor.rb @@ -176,9 +176,8 @@ def handle_signal scroll_into_view Reline::IOGate.move_cursor_up @rendered_screen.cursor_y @rendered_screen.base_y = Reline::IOGate.cursor_pos.y - @rendered_screen.lines = [] - @rendered_screen.cursor_y = 0 - render_differential + clear_rendered_screen_cache + render end private def handle_interrupted @@ -186,11 +185,11 @@ def handle_signal @interrupted = false clear_dialogs - scrolldown = render_differential - Reline::IOGate.scroll_down scrolldown + render + cursor_to_bottom_offset = @rendered_screen.lines.size - @rendered_screen.cursor_y + Reline::IOGate.scroll_down cursor_to_bottom_offset Reline::IOGate.move_cursor_column 0 - @rendered_screen.lines = [] - @rendered_screen.cursor_y = 0 + clear_rendered_screen_cache case @old_trap when 'DEFAULT', 'SYSTEM_DEFAULT' raise Interrupt @@ -460,28 +459,7 @@ def update_dialogs(key = nil) end def render_finished - clear_rendered_lines - render_full_content - end - - def clear_rendered_lines - Reline::IOGate.move_cursor_up @rendered_screen.cursor_y - Reline::IOGate.move_cursor_column 0 - - num_lines = @rendered_screen.lines.size - return unless num_lines && num_lines >= 1 - - Reline::IOGate.move_cursor_down num_lines - 1 - (num_lines - 1).times do - Reline::IOGate.erase_after_cursor - Reline::IOGate.move_cursor_up 1 - end - Reline::IOGate.erase_after_cursor - @rendered_screen.lines = [] - @rendered_screen.cursor_y = 0 - end - - def render_full_content + render_differential([], 0, 0) lines = @buffer_of_lines.size.times.map do |i| line = prompt_list[i] + modified_lines[i] wrapped_lines, = split_by_width(line, screen_width) @@ -495,10 +473,8 @@ def print_nomultiline_prompt @output.write @prompt if @prompt && !@is_multiline end - def render_differential + def render wrapped_cursor_x, wrapped_cursor_y = wrapped_cursor_position - - rendered_lines = @rendered_screen.lines new_lines = wrapped_prompt_and_input_lines.flatten(1)[screen_scroll_top, screen_height].map do |prompt, line| prompt_width = Reline::Unicode.calculate_width(prompt, true) [[0, prompt_width, prompt], [prompt_width, Reline::Unicode.calculate_width(line, true), line]] @@ -516,12 +492,21 @@ def render_differential x_range, y_range = dialog_range dialog, wrapped_cursor_y - screen_scroll_top y_range.each do |row| next if row < 0 || row >= screen_height + dialog_rows = new_lines[row] ||= [] # index 0 is for prompt, index 1 is for line, index 2.. is for dialog dialog_rows[index + 2] = [x_range.begin, dialog.width, dialog.contents[row - y_range.begin]] end end + render_differential new_lines, wrapped_cursor_x, wrapped_cursor_y - screen_scroll_top + end + + # Reflects lines to be rendered and new cursor position to the screen + # by calculating the difference from the previous render. + + private def render_differential(new_lines, new_cursor_x, new_cursor_y) + rendered_lines = @rendered_screen.lines cursor_y = @rendered_screen.cursor_y if new_lines != rendered_lines # Hide cursor while rendering to avoid cursor flickering. @@ -548,11 +533,14 @@ def render_differential @rendered_screen.lines = new_lines Reline::IOGate.show_cursor end - y = wrapped_cursor_y - screen_scroll_top - Reline::IOGate.move_cursor_column wrapped_cursor_x - Reline::IOGate.move_cursor_down y - cursor_y - @rendered_screen.cursor_y = y - new_lines.size - y + Reline::IOGate.move_cursor_column new_cursor_x + Reline::IOGate.move_cursor_down new_cursor_y - cursor_y + @rendered_screen.cursor_y = new_cursor_y + end + + private def clear_rendered_screen_cache + @rendered_screen.lines = [] + @rendered_screen.cursor_y = 0 end def upper_space_height(wrapped_cursor_y) @@ -564,7 +552,7 @@ def rest_height(wrapped_cursor_y) end def rerender - render_differential unless @in_pasting + render unless @in_pasting end class DialogProcScope @@ -1333,11 +1321,11 @@ def confirm_multiline_termination @confirm_multiline_termination_proc.(temp_buffer.join("\n") + "\n") end - def insert_pasted_text(text) + def insert_multiline_text(text) save_old_buffer pre = @buffer_of_lines[@line_index].byteslice(0, @byte_pointer) post = @buffer_of_lines[@line_index].byteslice(@byte_pointer..) - lines = (pre + text.gsub(/\r\n?/, "\n") + post).split("\n", -1) + lines = (pre + Reline::Unicode.safe_encode(text, @encoding).gsub(/\r\n?/, "\n") + post).split("\n", -1) lines << '' if lines.empty? @buffer_of_lines[@line_index, 1] = lines @line_index += lines.size - 1 @@ -1677,57 +1665,29 @@ def finish end private def incremental_search_history(key) - unless @history_pointer - @line_backup_in_history = whole_buffer - end + backup = @buffer_of_lines.dup, @line_index, @byte_pointer, @history_pointer, @line_backup_in_history searcher = generate_searcher(key) @searching_prompt = "(reverse-i-search)`': " termination_keys = ["\C-j".ord] - termination_keys.concat(@config.isearch_terminators&.chars&.map(&:ord)) if @config.isearch_terminators + termination_keys.concat(@config.isearch_terminators.chars.map(&:ord)) if @config.isearch_terminators @waiting_proc = ->(k) { - case k - when *termination_keys - if @history_pointer - buffer = Reline::HISTORY[@history_pointer] - else - buffer = @line_backup_in_history - end - @buffer_of_lines = buffer.split("\n") - @buffer_of_lines = [String.new(encoding: @encoding)] if @buffer_of_lines.empty? - @line_index = @buffer_of_lines.size - 1 + chr = k.is_a?(String) ? k : k.chr(Encoding::ASCII_8BIT) + if k == "\C-g".ord + # cancel search and restore buffer + @buffer_of_lines, @line_index, @byte_pointer, @history_pointer, @line_backup_in_history = backup @searching_prompt = nil @waiting_proc = nil - @byte_pointer = 0 - when "\C-g".ord - @buffer_of_lines = @line_backup_in_history.split("\n") - @buffer_of_lines = [String.new(encoding: @encoding)] if @buffer_of_lines.empty? - @line_index = @buffer_of_lines.size - 1 - move_history(nil, line: :end, cursor: :end, save_buffer: false) + elsif !termination_keys.include?(k) && (chr.match?(/[[:print:]]/) || k == "\C-h".ord || k == "\C-?".ord || k == "\C-r".ord || k == "\C-s".ord) + search_word, prompt_name, hit_pointer = searcher.call(k) + Reline.last_incremental_search = search_word + @searching_prompt = "(%s)`%s'" % [prompt_name, search_word] + @searching_prompt += ': ' unless @is_multiline + move_history(hit_pointer, line: :end, cursor: :end) if hit_pointer + else + # terminaton_keys and other keys will terminalte + move_history(@history_pointer, line: :end, cursor: :start) @searching_prompt = nil @waiting_proc = nil - @byte_pointer = 0 - else - chr = k.is_a?(String) ? k : k.chr(Encoding::ASCII_8BIT) - if chr.match?(/[[:print:]]/) or k == "\C-h".ord or k == "\C-?".ord or k == "\C-r".ord or k == "\C-s".ord - search_word, prompt_name, hit_pointer = searcher.call(k) - Reline.last_incremental_search = search_word - @searching_prompt = "(%s)`%s'" % [prompt_name, search_word] - @searching_prompt += ': ' unless @is_multiline - move_history(hit_pointer, line: :end, cursor: :end, save_buffer: false) if hit_pointer - else - if @history_pointer - line = Reline::HISTORY[@history_pointer] - else - line = @line_backup_in_history - end - @line_backup_in_history = whole_buffer - @buffer_of_lines = line.split("\n") - @buffer_of_lines = [String.new(encoding: @encoding)] if @buffer_of_lines.empty? - @line_index = @buffer_of_lines.size - 1 - @searching_prompt = nil - @waiting_proc = nil - @byte_pointer = 0 - end end } end @@ -1782,14 +1742,14 @@ def finish end alias_method :history_search_forward, :ed_search_next_history - private def move_history(history_pointer, line:, cursor:, save_buffer: true) + private def move_history(history_pointer, line:, cursor:) history_pointer ||= Reline::HISTORY.size return if history_pointer < 0 || history_pointer > Reline::HISTORY.size old_history_pointer = @history_pointer || Reline::HISTORY.size if old_history_pointer == Reline::HISTORY.size - @line_backup_in_history = save_buffer ? whole_buffer : '' + @line_backup_in_history = whole_buffer else - Reline::HISTORY[old_history_pointer] = whole_buffer if save_buffer + Reline::HISTORY[old_history_pointer] = whole_buffer end if history_pointer == Reline::HISTORY.size buf = @line_backup_in_history @@ -1978,9 +1938,8 @@ def finish private def ed_clear_screen(key) Reline::IOGate.clear_screen @screen_size = Reline::IOGate.get_screen_size - @rendered_screen.lines = [] @rendered_screen.base_y = 0 - @rendered_screen.cursor_y = 0 + clear_rendered_screen_cache end alias_method :clear_screen, :ed_clear_screen @@ -2554,4 +2513,8 @@ def finish private def set_next_action_state(type, value) @next_action_state = [type, value] end + + private def re_read_init_file(_key) + @config.reload + end end diff --git a/lib/reline/unicode.rb b/lib/reline/unicode.rb index ef239d5e9ee947..0ec815aeea6f3d 100644 --- a/lib/reline/unicode.rb +++ b/lib/reline/unicode.rb @@ -54,6 +54,22 @@ def self.escape_for_print(str) }.join end + def self.safe_encode(str, encoding) + # Reline only supports utf-8 convertible string. + converted = str.encode(encoding, invalid: :replace, undef: :replace) + return converted if str.encoding == Encoding::UTF_8 || converted.encoding == Encoding::UTF_8 || converted.ascii_only? + + # This code is essentially doing the same thing as + # `str.encode(utf8, **replace_options).encode(encoding, **replace_options)` + # but also avoids unneccesary irreversible encoding conversion. + converted.gsub(/\X/) do |c| + c.encode(Encoding::UTF_8) + c + rescue Encoding::UndefinedConversionError + '?' + end + end + require 'reline/unicode/east_asian_width' def self.get_mbchar_width(mbchar) diff --git a/lib/reline/version.rb b/lib/reline/version.rb index 37916d11b99e04..b75d874adb7744 100644 --- a/lib/reline/version.rb +++ b/lib/reline/version.rb @@ -1,3 +1,3 @@ module Reline - VERSION = '0.5.9' + VERSION = '0.5.10' end diff --git a/lib/resolv.gemspec b/lib/resolv.gemspec index 6b83e303d7f51f..bfa2f9ff31f957 100644 --- a/lib/resolv.gemspec +++ b/lib/resolv.gemspec @@ -16,6 +16,7 @@ Gem::Specification.new do |spec| spec.homepage = "https://github.com/ruby/resolv" spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0") spec.licenses = ["Ruby", "BSD-2-Clause"] + spec.extensions << "ext/win32/resolv/extconf.rb" spec.metadata["homepage_uri"] = spec.homepage spec.metadata["source_code_uri"] = spec.homepage diff --git a/lib/resolv.rb b/lib/resolv.rb index 0574ce622bf73e..983540c415e2ca 100644 --- a/lib/resolv.rb +++ b/lib/resolv.rb @@ -396,13 +396,15 @@ def getaddresses(name) # be a Resolv::IPv4 or Resolv::IPv6 def each_address(name) - each_resource(name, Resource::IN::A) {|resource| yield resource.address} if use_ipv6? each_resource(name, Resource::IN::AAAA) {|resource| yield resource.address} end + each_resource(name, Resource::IN::A) {|resource| yield resource.address} end def use_ipv6? # :nodoc: + @config.lazy_initialize unless @config.instance_variable_get(:@initialized) + use_ipv6 = @config.use_ipv6? unless use_ipv6.nil? return use_ipv6 diff --git a/lib/ruby_vm/rjit/insn_compiler.rb b/lib/ruby_vm/rjit/insn_compiler.rb index 7a9a0f3aa5c48f..a33ba9f4687bff 100644 --- a/lib/ruby_vm/rjit/insn_compiler.rb +++ b/lib/ruby_vm/rjit/insn_compiler.rb @@ -90,6 +90,8 @@ def compile(jit, ctx, asm, insn) when :opt_send_without_block then opt_send_without_block(jit, ctx, asm) when :objtostring then objtostring(jit, ctx, asm) when :opt_str_freeze then opt_str_freeze(jit, ctx, asm) + when :opt_ary_freeze then opt_ary_freeze(jit, ctx, asm) + when :opt_hash_freeze then opt_hash_freeze(jit, ctx, asm) when :opt_nil_p then opt_nil_p(jit, ctx, asm) # opt_str_uminus when :opt_newarray_send then opt_newarray_send(jit, ctx, asm) @@ -1490,6 +1492,42 @@ def objtostring(jit, ctx, asm) end end + # @param jit [RubyVM::RJIT::JITState] + # @param ctx [RubyVM::RJIT::Context] + # @param asm [RubyVM::RJIT::Assembler] + def opt_ary_freeze(jit, ctx, asm) + unless Invariants.assume_bop_not_redefined(jit, C::ARRAY_REDEFINED_OP_FLAG, C::BOP_FREEZE) + return CantCompile; + end + + ary = jit.operand(0, ruby: true) + + # Push the return value onto the stack + stack_ret = ctx.stack_push(Type::CArray) + asm.mov(:rax, to_value(ary)) + asm.mov(stack_ret, :rax) + + KeepCompiling + end + + # @param jit [RubyVM::RJIT::JITState] + # @param ctx [RubyVM::RJIT::Context] + # @param asm [RubyVM::RJIT::Assembler] + def opt_hash_freeze(jit, ctx, asm) + unless Invariants.assume_bop_not_redefined(jit, C::HASH_REDEFINED_OP_FLAG, C::BOP_FREEZE) + return CantCompile; + end + + hash = jit.operand(0, ruby: true) + + # Push the return value onto the stack + stack_ret = ctx.stack_push(Type::CHash) + asm.mov(:rax, to_value(hash)) + asm.mov(stack_ret, :rax) + + KeepCompiling + end + # @param jit [RubyVM::RJIT::JITState] # @param ctx [RubyVM::RJIT::Context] # @param asm [RubyVM::RJIT::Assembler] diff --git a/lib/rubygems.rb b/lib/rubygems.rb index 2b52cde0a7494c..43c0d8f13c6b4d 100644 --- a/lib/rubygems.rb +++ b/lib/rubygems.rb @@ -773,18 +773,14 @@ def self.refresh # Safely read a file in binary mode on all platforms. def self.read_binary(path) - open_file(path, "rb+", &:read) - rescue Errno::EACCES, Errno::EROFS - open_file(path, "rb", &:read) + File.binread(path) end ## # Safely write a file in binary mode on all platforms. def self.write_binary(path, data) - open_file(path, "wb") do |io| - io.write data - end + File.binwrite(path, data) rescue Errno::ENOSPC # If we ran out of space but the file exists, it's *guaranteed* to be corrupted. File.delete(path) if File.exist?(path) @@ -798,24 +794,31 @@ def self.open_file(path, flags, &block) File.open(path, flags, &block) end + ## + # Open a file with given flags, and protect access with a file lock + + def self.open_file_with_lock(path, &block) + file_lock = "#{path}.lock" + open_file_with_flock(file_lock, &block) + ensure + FileUtils.rm_f file_lock + end + ## # Open a file with given flags, and protect access with flock def self.open_file_with_flock(path, &block) - flags = File.exist?(path) ? "r+" : "a+" + mode = IO::RDONLY | IO::APPEND | IO::CREAT | IO::BINARY + mode |= IO::SHARE_DELETE if IO.const_defined?(:SHARE_DELETE) - File.open(path, flags) do |io| + File.open(path, mode) do |io| begin io.flock(File::LOCK_EX) rescue Errno::ENOSYS, Errno::ENOTSUP + rescue Errno::ENOLCK # NFS + raise unless Thread.main == Thread.current end yield io - rescue Errno::ENOLCK # NFS - if Thread.main != Thread.current - raise - else - open_file(path, flags, &block) - end end end diff --git a/lib/rubygems/basic_specification.rb b/lib/rubygems/basic_specification.rb index 0eee52492f08e7..204231e95e26e4 100644 --- a/lib/rubygems/basic_specification.rb +++ b/lib/rubygems/basic_specification.rb @@ -129,7 +129,6 @@ def extensions_dir end def find_full_gem_path # :nodoc: - # TODO: also, shouldn't it default to full_name if it hasn't been written? File.expand_path File.join(gems_dir, full_name) end @@ -137,10 +136,10 @@ def find_full_gem_path # :nodoc: ## # The full path to the gem (install path + full name). + # + # TODO: This is duplicated with #gem_dir. Eventually either of them should be deprecated. def full_gem_path - # TODO: This is a heavily used method by gems, so we'll need - # to aleast just alias it to #gem_dir rather than remove it. @full_gem_path ||= find_full_gem_path end @@ -216,9 +215,11 @@ def to_fullpath(path) ## # Returns the full path to this spec's gem directory. # eg: /usr/local/lib/ruby/1.8/gems/mygem-1.0 + # + # TODO: This is duplicated with #full_gem_path. Eventually either of them should be deprecated. def gem_dir - @gem_dir ||= File.expand_path File.join(gems_dir, full_name) + @gem_dir ||= find_full_gem_path end ## diff --git a/lib/rubygems/command_manager.rb b/lib/rubygems/command_manager.rb index 8e578dc1966172..15834ce4dd0c09 100644 --- a/lib/rubygems/command_manager.rb +++ b/lib/rubygems/command_manager.rb @@ -230,18 +230,16 @@ def find_command_possibilities(cmd_name) def load_and_instantiate(command_name) command_name = command_name.to_s const_name = command_name.capitalize.gsub(/_(.)/) { $1.upcase } << "Command" - load_error = nil begin begin require "rubygems/commands/#{command_name}_command" - rescue LoadError => e - load_error = e + rescue LoadError + # it may have been defined from a rubygems_plugin.rb file end + Gem::Commands.const_get(const_name).new rescue StandardError => e - e = load_error if load_error - alert_error clean_text("Loading command: #{command_name} (#{e.class})\n\t#{e}") ui.backtrace e end diff --git a/lib/rubygems/commands/cleanup_command.rb b/lib/rubygems/commands/cleanup_command.rb index 08fb598cea54f1..bc24aaf753bf09 100644 --- a/lib/rubygems/commands/cleanup_command.rb +++ b/lib/rubygems/commands/cleanup_command.rb @@ -38,8 +38,6 @@ def initialize @default_gems = [] @full = nil @gems_to_cleanup = nil - @original_home = nil - @original_path = nil @primary_gems = nil end @@ -95,9 +93,6 @@ def execute end def clean_gems - @original_home = Gem.dir - @original_path = Gem.path - get_primary_gems get_candidate_gems get_gems_to_cleanup @@ -112,8 +107,6 @@ def clean_gems deps.reverse_each do |spec| uninstall_dep spec end - - Gem::Specification.reset end def get_candidate_gems @@ -133,7 +126,7 @@ def get_gems_to_cleanup default_gems, gems_to_cleanup = gems_to_cleanup.partition(&:default_gem?) - uninstall_from = options[:user_install] ? Gem.user_dir : @original_home + uninstall_from = options[:user_install] ? Gem.user_dir : Gem.dir gems_to_cleanup = gems_to_cleanup.select do |spec| spec.base_dir == uninstall_from @@ -181,8 +174,5 @@ def uninstall_dep(spec) say "Unable to uninstall #{spec.full_name}:" say "\t#{e.class}: #{e.message}" end - ensure - # Restore path Gem::Uninstaller may have changed - Gem.use_paths @original_home, *@original_path end end diff --git a/lib/rubygems/commands/exec_command.rb b/lib/rubygems/commands/exec_command.rb index d588804290e9ab..7985b0fda66244 100644 --- a/lib/rubygems/commands/exec_command.rb +++ b/lib/rubygems/commands/exec_command.rb @@ -57,8 +57,6 @@ def usage # :nodoc: end def execute - gem_paths = { "GEM_HOME" => Gem.paths.home, "GEM_PATH" => Gem.paths.path.join(File::PATH_SEPARATOR), "GEM_SPEC_CACHE" => Gem.paths.spec_cache_dir }.compact - check_executable print_command @@ -74,9 +72,6 @@ def execute end load! - ensure - ENV.update(gem_paths) if gem_paths - Gem.clear_paths end private @@ -143,7 +138,7 @@ def install_if_needed end def set_gem_exec_install_paths - home = File.join(Gem.dir, "gem_exec") + home = Gem.dir ENV["GEM_PATH"] = ([home] + Gem.path).join(File::PATH_SEPARATOR) ENV["GEM_HOME"] = home diff --git a/lib/rubygems/commands/fetch_command.rb b/lib/rubygems/commands/fetch_command.rb index f7f5b62306a50b..c524cf792293bd 100644 --- a/lib/rubygems/commands/fetch_command.rb +++ b/lib/rubygems/commands/fetch_command.rb @@ -63,6 +63,17 @@ def check_version # :nodoc: def execute check_version + + exit_code = fetch_gems + + terminate_interaction exit_code + end + + private + + def fetch_gems + exit_code = 0 + version = options[:version] platform = Gem.platforms.last @@ -86,10 +97,13 @@ def execute if spec.nil? show_lookup_failure gem_name, gem_version, errors, suppress_suggestions, options[:domain] + exit_code |= 2 next end source.download spec say "Downloaded #{spec.full_name}" end + + exit_code end end diff --git a/lib/rubygems/commands/install_command.rb b/lib/rubygems/commands/install_command.rb index 2091634a2912c6..2888b6c55a8372 100644 --- a/lib/rubygems/commands/install_command.rb +++ b/lib/rubygems/commands/install_command.rb @@ -224,10 +224,6 @@ def install_gems # :nodoc: rescue Gem::InstallError => e alert_error "Error installing #{gem_name}:\n\t#{e.message}" exit_code |= 1 - rescue Gem::GemNotFoundException => e - show_lookup_failure e.name, e.version, e.errors, suppress_suggestions - - exit_code |= 2 rescue Gem::UnsatisfiableDependencyError => e show_lookup_failure e.name, e.version, e.errors, suppress_suggestions, "'#{gem_name}' (#{gem_version})" diff --git a/lib/rubygems/commands/pristine_command.rb b/lib/rubygems/commands/pristine_command.rb index 999c9fef0f4cf0..96e48df4e61aa3 100644 --- a/lib/rubygems/commands/pristine_command.rb +++ b/lib/rubygems/commands/pristine_command.rb @@ -134,11 +134,8 @@ def execute say "Restoring gems to pristine condition..." - specs.each do |spec| - if spec.default_gem? - say "Skipped #{spec.full_name}, it is a default gem" - next - end + specs.group_by(&:full_name_with_location).values.each do |grouped_specs| + spec = grouped_specs.find {|s| !s.default_gem? } || grouped_specs.first if options.key? :skip if options[:skip].include? spec.name @@ -188,6 +185,7 @@ def execute env_shebang: env_shebang, build_args: spec.build_args, bin_dir: bin_dir, + install_as_default: spec.default_gem?, } if options[:only_executables] diff --git a/lib/rubygems/commands/setup_command.rb b/lib/rubygems/commands/setup_command.rb index 9f47b795f118dd..bb2246ca319281 100644 --- a/lib/rubygems/commands/setup_command.rb +++ b/lib/rubygems/commands/setup_command.rb @@ -336,6 +336,8 @@ def install_rdoc require_relative "../rdoc" + return false unless defined?(Gem::RDoc) + fake_spec = Gem::Specification.new "rubygems", Gem::VERSION def fake_spec.full_gem_path File.expand_path "../../..", __dir__ diff --git a/lib/rubygems/core_ext/kernel_warn.rb b/lib/rubygems/core_ext/kernel_warn.rb index 9dc9f2218cf900..f806b77faba3de 100644 --- a/lib/rubygems/core_ext/kernel_warn.rb +++ b/lib/rubygems/core_ext/kernel_warn.rb @@ -13,11 +13,7 @@ class << self module_function define_method(:warn) {|*messages, **kw| unless uplevel = kw[:uplevel] - if Gem.java_platform? && RUBY_VERSION < "3.1" - return original_warn.bind(self).call(*messages) - else - return original_warn.bind(self).call(*messages, **kw) - end + return original_warn.bind_call(self, *messages, **kw) end # Ensure `uplevel` fits a `long` @@ -44,6 +40,6 @@ class << self kw[:uplevel] = start end - original_warn.bind(self).call(*messages, **kw) + original_warn.bind_call(self, *messages, **kw) } end diff --git a/lib/rubygems/errors.rb b/lib/rubygems/errors.rb index be6c34dc8520b3..57fb3eb12008a1 100644 --- a/lib/rubygems/errors.rb +++ b/lib/rubygems/errors.rb @@ -30,6 +30,7 @@ def initialize(name, requirement, extra_message=nil) @name = name @requirement = requirement @extra_message = extra_message + super(message) end def message # :nodoc: @@ -53,8 +54,8 @@ class MissingSpecVersionError < MissingSpecError attr_reader :specs def initialize(name, requirement, specs) - super(name, requirement) @specs = specs + super(name, requirement) end private diff --git a/lib/rubygems/exceptions.rb b/lib/rubygems/exceptions.rb index 0308b4687f9f49..793324b875c754 100644 --- a/lib/rubygems/exceptions.rb +++ b/lib/rubygems/exceptions.rb @@ -104,9 +104,6 @@ class Gem::FormatException < Gem::Exception class Gem::GemNotFoundException < Gem::Exception; end -## -# Raised by the DependencyInstaller when a specific gem cannot be found - class Gem::SpecificGemNotFoundException < Gem::GemNotFoundException ## # Creates a new SpecificGemNotFoundException for a gem with the given +name+ @@ -137,6 +134,8 @@ def initialize(name, version, errors=nil) attr_reader :errors end +Gem.deprecate_constant :SpecificGemNotFoundException + ## # Raised by Gem::Resolver when dependencies conflict and create the # inability to find a valid possible spec for a request. diff --git a/lib/rubygems/installer.rb b/lib/rubygems/installer.rb index d558c0be2bfaaa..21b72973cc7b48 100644 --- a/lib/rubygems/installer.rb +++ b/lib/rubygems/installer.rb @@ -66,8 +66,6 @@ class Gem::Installer attr_reader :package - @path_warning = false - class << self # # Changes in rubygems to lazily loading `rubygems/command` (in order to @@ -86,11 +84,6 @@ def inherited(klass) super(klass) end - ## - # True if we've warned about PATH not including Gem.bindir - - attr_accessor :path_warning - ## # Overrides the executable format. # @@ -188,15 +181,6 @@ def initialize(package, options={}) @package.dir_mode = options[:dir_mode] @package.prog_mode = options[:prog_mode] @package.data_mode = options[:data_mode] - - if @gem_home == Gem.user_dir - # If we get here, then one of the following likely happened: - # - `--user-install` was specified - # - `Gem::PathSupport#home` fell back to `Gem.user_dir` - # - GEM_HOME was manually set to `Gem.user_dir` - - check_that_user_bin_dir_is_in_path - end end ## @@ -488,11 +472,21 @@ def generate_windows_script(filename, bindir) end def generate_bin # :nodoc: - return if spec.executables.nil? || spec.executables.empty? + executables = spec.executables + return if executables.nil? || executables.empty? + + if @gem_home == Gem.user_dir + # If we get here, then one of the following likely happened: + # - `--user-install` was specified + # - `Gem::PathSupport#home` fell back to `Gem.user_dir` + # - GEM_HOME was manually set to `Gem.user_dir` + + check_that_user_bin_dir_is_in_path(executables) + end ensure_writable_dir @bin_dir - spec.executables.each do |filename| + executables.each do |filename| bin_path = File.join gem_dir, spec.bindir, filename next unless File.exist? bin_path @@ -538,7 +532,7 @@ def generate_plugins # :nodoc: def generate_bin_script(filename, bindir) bin_script_path = File.join bindir, formatted_program_filename(filename) - Gem.open_file_with_flock("#{bin_script_path}.lock") do + Gem.open_file_with_lock(bin_script_path) do require "fileutils" FileUtils.rm_f bin_script_path # prior install may have been --no-wrappers @@ -694,9 +688,7 @@ def process_options # :nodoc: end end - def check_that_user_bin_dir_is_in_path # :nodoc: - return if self.class.path_warning - + def check_that_user_bin_dir_is_in_path(executables) # :nodoc: user_bin_dir = @bin_dir || Gem.bindir(gem_home) user_bin_dir = user_bin_dir.tr(File::ALT_SEPARATOR, File::SEPARATOR) if File::ALT_SEPARATOR @@ -712,8 +704,7 @@ def check_that_user_bin_dir_is_in_path # :nodoc: unless path.include? user_bin_dir unless !Gem.win_platform? && (path.include? user_bin_dir.sub(ENV["HOME"], "~")) - alert_warning "You don't have #{user_bin_dir} in your PATH,\n\t gem executables will not run." - self.class.path_warning = true + alert_warning "You don't have #{user_bin_dir} in your PATH,\n\t gem executables (#{executables.join(", ")}) will not run." end end end diff --git a/lib/rubygems/remote_fetcher.rb b/lib/rubygems/remote_fetcher.rb index c3a41592f670f5..4b5c74e0ea60e7 100644 --- a/lib/rubygems/remote_fetcher.rb +++ b/lib/rubygems/remote_fetcher.rb @@ -75,7 +75,6 @@ def self.fetcher def initialize(proxy=nil, dns=nil, headers={}) require_relative "core_ext/tcpsocket_init" if Gem.configuration.ipv4_fallback_enabled require_relative "vendored_net_http" - require "stringio" require_relative "vendor/uri/lib/uri" Socket.do_not_reverse_lookup = true diff --git a/lib/rubygems/resolver/activation_request.rb b/lib/rubygems/resolver/activation_request.rb index fc9ff58f5796f0..5c722001b1ae64 100644 --- a/lib/rubygems/resolver/activation_request.rb +++ b/lib/rubygems/resolver/activation_request.rb @@ -106,7 +106,7 @@ def installed? this_spec = full_spec Gem::Specification.any? do |s| - s == this_spec + s == this_spec && s.base_dir == this_spec.base_dir end end end diff --git a/lib/rubygems/resolver/api_set.rb b/lib/rubygems/resolver/api_set.rb index 3e4dadc40f489e..9f6695a6a97455 100644 --- a/lib/rubygems/resolver/api_set.rb +++ b/lib/rubygems/resolver/api_set.rb @@ -104,16 +104,21 @@ def versions(name) # :nodoc: end uri = @dep_uri + name - str = Gem::RemoteFetcher.fetcher.fetch_path uri - lines(str).each do |ver| - number, platform, dependencies, requirements = parse_gem(ver) + begin + str = Gem::RemoteFetcher.fetcher.fetch_path uri + rescue Gem::RemoteFetcher::FetchError + @data[name] = [] + else + lines(str).each do |ver| + number, platform, dependencies, requirements = parse_gem(ver) - platform ||= "ruby" - dependencies = dependencies.map {|dep_name, reqs| [dep_name, reqs.join(", ")] } - requirements = requirements.map {|req_name, reqs| [req_name.to_sym, reqs] }.to_h + platform ||= "ruby" + dependencies = dependencies.map {|dep_name, reqs| [dep_name, reqs.join(", ")] } + requirements = requirements.map {|req_name, reqs| [req_name.to_sym, reqs] }.to_h - @data[name] << { name: name, number: number, platform: platform, dependencies: dependencies, requirements: requirements } + @data[name] << { name: name, number: number, platform: platform, dependencies: dependencies, requirements: requirements } + end end @data[name] diff --git a/lib/rubygems/resolver/best_set.rb b/lib/rubygems/resolver/best_set.rb index a983f8c6b69f2f..e2307f6e026bde 100644 --- a/lib/rubygems/resolver/best_set.rb +++ b/lib/rubygems/resolver/best_set.rb @@ -29,10 +29,6 @@ def find_all(req) # :nodoc: pick_sets if @remote && @sets.empty? super - rescue Gem::RemoteFetcher::FetchError => e - replace_failed_api_set e - - retry end def prefetch(reqs) # :nodoc: @@ -50,28 +46,4 @@ def pretty_print(q) # :nodoc: q.pp @sets end end - - ## - # Replaces a failed APISet for the URI in +error+ with an IndexSet. - # - # If no matching APISet can be found the original +error+ is raised. - # - # The calling method must retry the exception to repeat the lookup. - - def replace_failed_api_set(error) # :nodoc: - uri = error.original_uri - uri = Gem::URI uri unless Gem::URI === uri - uri += "." - - raise error unless api_set = @sets.find do |set| - Gem::Resolver::APISet === set && set.dep_uri == uri - end - - index_set = Gem::Resolver::IndexSet.new api_set.source - - @sets.map! do |set| - next set unless set == api_set - index_set - end - end end diff --git a/lib/rubygems/source.rb b/lib/rubygems/source.rb index d90e311b65a197..bee5681dab293c 100644 --- a/lib/rubygems/source.rb +++ b/lib/rubygems/source.rb @@ -79,7 +79,7 @@ def dependency_resolver_set # :nodoc: uri end - bundler_api_uri = enforce_trailing_slash(fetch_uri) + bundler_api_uri = enforce_trailing_slash(fetch_uri) + "versions" begin fetcher = Gem::RemoteFetcher.fetcher @@ -213,14 +213,16 @@ def download(spec, dir=Dir.pwd) end def pretty_print(q) # :nodoc: - q.group 2, "[Remote:", "]" do - q.breakable - q.text @uri.to_s - - if api = uri + q.object_group(self) do + q.group 2, "[Remote:", "]" do q.breakable - q.text "API URI: " - q.text api.to_s + q.text @uri.to_s + + if api = uri + q.breakable + q.text "API URI: " + q.text api.to_s + end end end end diff --git a/lib/rubygems/source/git.rb b/lib/rubygems/source/git.rb index bda63c6844d92c..34f6851bc40557 100644 --- a/lib/rubygems/source/git.rb +++ b/lib/rubygems/source/git.rb @@ -157,12 +157,14 @@ def install_dir # :nodoc: end def pretty_print(q) # :nodoc: - q.group 2, "[Git: ", "]" do - q.breakable - q.text @repository + q.object_group(self) do + q.group 2, "[Git: ", "]" do + q.breakable + q.text @repository - q.breakable - q.text @reference + q.breakable + q.text @reference + end end end diff --git a/lib/rubygems/source/installed.rb b/lib/rubygems/source/installed.rb index cbe12a05163642..f5c96fee5129b4 100644 --- a/lib/rubygems/source/installed.rb +++ b/lib/rubygems/source/installed.rb @@ -32,6 +32,8 @@ def download(spec, path) end def pretty_print(q) # :nodoc: - q.text "[Installed]" + q.object_group(self) do + q.text "[Installed]" + end end end diff --git a/lib/rubygems/source/local.rb b/lib/rubygems/source/local.rb index d81d8343a818ff..ba6eea1f9aa5c7 100644 --- a/lib/rubygems/source/local.rb +++ b/lib/rubygems/source/local.rb @@ -117,10 +117,14 @@ def download(spec, cache_dir = nil) # :nodoc: end def pretty_print(q) # :nodoc: - q.group 2, "[Local gems:", "]" do - q.breakable - q.seplist @specs.keys do |v| - q.text v.full_name + q.object_group(self) do + q.group 2, "[Local gems:", "]" do + q.breakable + if @specs + q.seplist @specs.keys do |v| + q.text v.full_name + end + end end end end diff --git a/lib/rubygems/source/specific_file.rb b/lib/rubygems/source/specific_file.rb index e9b27536469300..dde1d48a219d76 100644 --- a/lib/rubygems/source/specific_file.rb +++ b/lib/rubygems/source/specific_file.rb @@ -42,9 +42,11 @@ def download(spec, dir = nil) # :nodoc: end def pretty_print(q) # :nodoc: - q.group 2, "[SpecificFile:", "]" do - q.breakable - q.text @path + q.object_group(self) do + q.group 2, "[SpecificFile:", "]" do + q.breakable + q.text @path + end end end diff --git a/lib/rubygems/spec_fetcher.rb b/lib/rubygems/spec_fetcher.rb index 610edf25c92155..9c0399f19653dc 100644 --- a/lib/rubygems/spec_fetcher.rb +++ b/lib/rubygems/spec_fetcher.rb @@ -176,19 +176,12 @@ def suggest_gems_from_name(gem_name, type = :latest, num_results = 5) matches = names.map do |n| next unless n.match_platform? - [n.name, 0] if n.name.downcase.tr("_-", "").include?(gem_name) + distance = levenshtein_distance gem_name, n.name.downcase.tr("_-", "") + next if distance >= max + return [n.name] if distance == 0 + [n.name, distance] end.compact - if matches.length < num_results - matches += names.map do |n| - next unless n.match_platform? - distance = levenshtein_distance gem_name, n.name.downcase.tr("_-", "") - next if distance >= max - return [n.name] if distance == 0 - [n.name, distance] - end.compact - end - matches = if matches.empty? && type != :prerelease suggest_gems_from_name gem_name, :prerelease else diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb index d0e0e4e91ac6ab..e5541e57b12d24 100644 --- a/lib/rubygems/specification.rb +++ b/lib/rubygems/specification.rb @@ -1208,7 +1208,7 @@ def self.reset unresolved.values.each do |dep| warn " #{dep}" - versions = find_all_by_name(dep.name) + versions = find_all_by_name(dep.name).uniq(&:full_name) unless versions.empty? warn " Available/installed versions of this gem:" versions.each {|s| warn " - #{s.version}" } @@ -1318,7 +1318,7 @@ def self._load(str) spec.instance_variable_set :@has_rdoc, array[15] spec.instance_variable_set :@new_platform, array[16] spec.instance_variable_set :@platform, array[16].to_s - spec.instance_variable_set :@license, array[17] + spec.instance_variable_set :@licenses, [array[17]] spec.instance_variable_set :@metadata, array[18] spec.instance_variable_set :@loaded, false spec.instance_variable_set :@activated, false @@ -1412,7 +1412,7 @@ def activate_dependencies end begin - specs = spec_dep.to_specs + specs = spec_dep.to_specs.uniq(&:full_name) rescue Gem::MissingSpecError => e raise Gem::MissingSpecError.new(e.name, e.requirement, "at: #{spec_file}") end @@ -1913,7 +1913,8 @@ def full_name end ## - # Work around bundler removing my methods + # Work around old bundler versions removing my methods + # Can be removed once RubyGems can no longer install Bundler 2.5 def gem_dir # :nodoc: super @@ -2471,7 +2472,7 @@ def to_ruby if @installed_by_version result << nil - result << " s.installed_by_version = #{ruby_code Gem::VERSION} if s.respond_to? :installed_by_version" + result << " s.installed_by_version = #{ruby_code Gem::VERSION}" end unless dependencies.empty? diff --git a/lib/rubygems/specification_policy.rb b/lib/rubygems/specification_policy.rb index d7568ddde95006..d79ee7df9252ae 100644 --- a/lib/rubygems/specification_policy.rb +++ b/lib/rubygems/specification_policy.rb @@ -307,7 +307,7 @@ def validate_name elsif !VALID_NAME_PATTERN.match?(name) error "invalid value for attribute name: #{name.dump} can only include letters, numbers, dashes, and underscores" elsif SPECIAL_CHARACTERS.match?(name) - error "invalid value for attribute name: #{name.dump} can not begin with a period, dash, or underscore" + error "invalid value for attribute name: #{name.dump} cannot begin with a period, dash, or underscore" end end diff --git a/lib/rubygems/specification_record.rb b/lib/rubygems/specification_record.rb index 664d5062651492..d838fcea26912a 100644 --- a/lib/rubygems/specification_record.rb +++ b/lib/rubygems/specification_record.rb @@ -30,7 +30,7 @@ def initialize(dirs) # Returns the list of all specifications in the record def all - @all ||= Gem.loaded_specs.values | stubs.map(&:to_spec) + @all ||= Gem.loaded_specs.values + stubs.map(&:to_spec) end ## diff --git a/lib/rubygems/vendor/net-http/lib/net/http.rb b/lib/rubygems/vendor/net-http/lib/net/http.rb index 7b15c3cf548156..1a7074819d33a3 100644 --- a/lib/rubygems/vendor/net-http/lib/net/http.rb +++ b/lib/rubygems/vendor/net-http/lib/net/http.rb @@ -722,7 +722,7 @@ class HTTPHeaderSyntaxError < StandardError; end class HTTP < Protocol # :stopdoc: - VERSION = "0.4.0" + VERSION = "0.4.1" HTTPVersion = '1.1' begin require 'zlib' diff --git a/lib/rubygems/vendor/net-http/lib/net/https.rb b/lib/rubygems/vendor/net-http/lib/net/https.rb index d2784f0be08774..f104c85c8134d4 100644 --- a/lib/rubygems/vendor/net-http/lib/net/https.rb +++ b/lib/rubygems/vendor/net-http/lib/net/https.rb @@ -4,7 +4,7 @@ = net/https -- SSL/TLS enhancement for Gem::Net::HTTP. This file has been merged with net/http. There is no longer any need to - require 'rubygems/vendor/net-http/lib/net/https' to use HTTPS. + require_relative 'https' to use HTTPS. See Gem::Net::HTTP for details on how to make HTTPS connections. diff --git a/lib/rubygems/vendor/optparse/lib/optparse.rb b/lib/rubygems/vendor/optparse/lib/optparse.rb index 59374317201d8b..00dc7c8a67355d 100644 --- a/lib/rubygems/vendor/optparse/lib/optparse.rb +++ b/lib/rubygems/vendor/optparse/lib/optparse.rb @@ -1084,7 +1084,7 @@ def compsys(to, name = File.basename($0)) # :nodoc: Switch::OptionalArgument.new do |pkg| if pkg begin - require 'rubygems/vendor/optparse/lib/optparse/version' + require_relative 'optparse/version' rescue LoadError else show_version(*pkg.split(/,/)) or diff --git a/lib/rubygems/vendor/resolv/lib/resolv.rb b/lib/rubygems/vendor/resolv/lib/resolv.rb index ac0ba0b3136a79..0f5ded3b767a4e 100644 --- a/lib/rubygems/vendor/resolv/lib/resolv.rb +++ b/lib/rubygems/vendor/resolv/lib/resolv.rb @@ -5,7 +5,7 @@ require 'io/wait' begin - require 'securerandom' + require_relative '../../../vendored_securerandom' rescue LoadError end @@ -602,10 +602,10 @@ def extract_resources(msg, name, typeclass) # :nodoc: } end - if defined? SecureRandom + if defined? Gem::SecureRandom def self.random(arg) # :nodoc: begin - SecureRandom.random_number(arg) + Gem::SecureRandom.random_number(arg) rescue NotImplementedError rand(arg) end diff --git a/lib/rubygems/vendor/securerandom/.document b/lib/rubygems/vendor/securerandom/.document new file mode 100644 index 00000000000000..0c43bbd6b38177 --- /dev/null +++ b/lib/rubygems/vendor/securerandom/.document @@ -0,0 +1 @@ +# Vendored files do not need to be documented diff --git a/lib/rubygems/vendor/securerandom/lib/random/formatter.rb b/lib/rubygems/vendor/securerandom/lib/random/formatter.rb new file mode 100644 index 00000000000000..3544033340be3f --- /dev/null +++ b/lib/rubygems/vendor/securerandom/lib/random/formatter.rb @@ -0,0 +1,373 @@ +# -*- coding: us-ascii -*- +# frozen_string_literal: true + +# == \Random number formatter. +# +# Formats generated random numbers in many manners. When 'random/formatter' +# is required, several methods are added to empty core module Gem::Random::Formatter, +# making them available as Random's instance and module methods. +# +# Standard library Gem::SecureRandom is also extended with the module, and the methods +# described below are available as a module methods in it. +# +# === Examples +# +# Generate random hexadecimal strings: +# +# require 'rubygems/vendor/securerandom/lib/random/formatter' +# +# prng = Random.new +# prng.hex(10) #=> "52750b30ffbc7de3b362" +# prng.hex(10) #=> "92b15d6c8dc4beb5f559" +# prng.hex(13) #=> "39b290146bea6ce975c37cfc23" +# # or just +# Random.hex #=> "1aed0c631e41be7f77365415541052ee" +# +# Generate random base64 strings: +# +# prng.base64(10) #=> "EcmTPZwWRAozdA==" +# prng.base64(10) #=> "KO1nIU+p9DKxGg==" +# prng.base64(12) #=> "7kJSM/MzBJI+75j8" +# Random.base64(4) #=> "bsQ3fQ==" +# +# Generate random binary strings: +# +# prng.random_bytes(10) #=> "\016\t{\370g\310pbr\301" +# prng.random_bytes(10) #=> "\323U\030TO\234\357\020\a\337" +# Random.random_bytes(6) #=> "\xA1\xE6Lr\xC43" +# +# Generate alphanumeric strings: +# +# prng.alphanumeric(10) #=> "S8baxMJnPl" +# prng.alphanumeric(10) #=> "aOxAg8BAJe" +# Random.alphanumeric #=> "TmP9OsJHJLtaZYhP" +# +# Generate UUIDs: +# +# prng.uuid #=> "2d931510-d99f-494a-8c67-87feb05e1594" +# prng.uuid #=> "bad85eb9-0713-4da7-8d36-07a8e4b00eab" +# Random.uuid #=> "f14e0271-de96-45cc-8911-8910292a42cd" +# +# All methods are available in the standard library Gem::SecureRandom, too: +# +# Gem::SecureRandom.hex #=> "05b45376a30c67238eb93b16499e50cf" + +module Gem::Random::Formatter + + # Generate a random binary string. + # + # The argument _n_ specifies the length of the result string. + # + # If _n_ is not specified or is nil, 16 is assumed. + # It may be larger in future. + # + # The result may contain any byte: "\x00" - "\xff". + # + # require 'rubygems/vendor/securerandom/lib/random/formatter' + # + # Random.random_bytes #=> "\xD8\\\xE0\xF4\r\xB2\xFC*WM\xFF\x83\x18\xF45\xB6" + # # or + # prng = Random.new + # prng.random_bytes #=> "m\xDC\xFC/\a\x00Uf\xB2\xB2P\xBD\xFF6S\x97" + def random_bytes(n=nil) + n = n ? n.to_int : 16 + gen_random(n) + end + + # Generate a random hexadecimal string. + # + # The argument _n_ specifies the length, in bytes, of the random number to be generated. + # The length of the resulting hexadecimal string is twice of _n_. + # + # If _n_ is not specified or is nil, 16 is assumed. + # It may be larger in the future. + # + # The result may contain 0-9 and a-f. + # + # require 'rubygems/vendor/securerandom/lib/random/formatter' + # + # Random.hex #=> "eb693ec8252cd630102fd0d0fb7c3485" + # # or + # prng = Random.new + # prng.hex #=> "91dc3bfb4de5b11d029d376634589b61" + def hex(n=nil) + random_bytes(n).unpack1("H*") + end + + # Generate a random base64 string. + # + # The argument _n_ specifies the length, in bytes, of the random number + # to be generated. The length of the result string is about 4/3 of _n_. + # + # If _n_ is not specified or is nil, 16 is assumed. + # It may be larger in the future. + # + # The result may contain A-Z, a-z, 0-9, "+", "/" and "=". + # + # require 'rubygems/vendor/securerandom/lib/random/formatter' + # + # Random.base64 #=> "/2BuBuLf3+WfSKyQbRcc/A==" + # # or + # prng = Random.new + # prng.base64 #=> "6BbW0pxO0YENxn38HMUbcQ==" + # + # See RFC 3548 for the definition of base64. + def base64(n=nil) + [random_bytes(n)].pack("m0") + end + + # Generate a random URL-safe base64 string. + # + # The argument _n_ specifies the length, in bytes, of the random number + # to be generated. The length of the result string is about 4/3 of _n_. + # + # If _n_ is not specified or is nil, 16 is assumed. + # It may be larger in the future. + # + # The boolean argument _padding_ specifies the padding. + # If it is false or nil, padding is not generated. + # Otherwise padding is generated. + # By default, padding is not generated because "=" may be used as a URL delimiter. + # + # The result may contain A-Z, a-z, 0-9, "-" and "_". + # "=" is also used if _padding_ is true. + # + # require 'rubygems/vendor/securerandom/lib/random/formatter' + # + # Random.urlsafe_base64 #=> "b4GOKm4pOYU_-BOXcrUGDg" + # # or + # prng = Random.new + # prng.urlsafe_base64 #=> "UZLdOkzop70Ddx-IJR0ABg" + # + # prng.urlsafe_base64(nil, true) #=> "i0XQ-7gglIsHGV2_BNPrdQ==" + # prng.urlsafe_base64(nil, true) #=> "-M8rLhr7JEpJlqFGUMmOxg==" + # + # See RFC 3548 for the definition of URL-safe base64. + def urlsafe_base64(n=nil, padding=false) + s = [random_bytes(n)].pack("m0") + s.tr!("+/", "-_") + s.delete!("=") unless padding + s + end + + # Generate a random v4 UUID (Universally Unique IDentifier). + # + # require 'rubygems/vendor/securerandom/lib/random/formatter' + # + # Random.uuid #=> "2d931510-d99f-494a-8c67-87feb05e1594" + # Random.uuid #=> "bad85eb9-0713-4da7-8d36-07a8e4b00eab" + # # or + # prng = Random.new + # prng.uuid #=> "62936e70-1815-439b-bf89-8492855a7e6b" + # + # The version 4 UUID is purely random (except the version). + # It doesn't contain meaningful information such as MAC addresses, timestamps, etc. + # + # The result contains 122 random bits (15.25 random bytes). + # + # See RFC4122[https://datatracker.ietf.org/doc/html/rfc4122] for details of UUID. + # + def uuid + ary = random_bytes(16).unpack("NnnnnN") + ary[2] = (ary[2] & 0x0fff) | 0x4000 + ary[3] = (ary[3] & 0x3fff) | 0x8000 + "%08x-%04x-%04x-%04x-%04x%08x" % ary + end + + alias uuid_v4 uuid + + # Generate a random v7 UUID (Universally Unique IDentifier). + # + # require 'rubygems/vendor/securerandom/lib/random/formatter' + # + # Random.uuid_v7 # => "0188d4c3-1311-7f96-85c7-242a7aa58f1e" + # Random.uuid_v7 # => "0188d4c3-16fe-744f-86af-38fa04c62bb5" + # Random.uuid_v7 # => "0188d4c3-1af8-764f-b049-c204ce0afa23" + # Random.uuid_v7 # => "0188d4c3-1e74-7085-b14f-ef6415dc6f31" + # # |<--sorted-->| |<----- random ---->| + # + # # or + # prng = Random.new + # prng.uuid_v7 # => "0188ca51-5e72-7950-a11d-def7ff977c98" + # + # The version 7 UUID starts with the least significant 48 bits of a 64 bit + # Unix timestamp (milliseconds since the epoch) and fills the remaining bits + # with random data, excluding the version and variant bits. + # + # This allows version 7 UUIDs to be sorted by creation time. Time ordered + # UUIDs can be used for better database index locality of newly inserted + # records, which may have a significant performance benefit compared to random + # data inserts. + # + # The result contains 74 random bits (9.25 random bytes). + # + # Note that this method cannot be made reproducable because its output + # includes not only random bits but also timestamp. + # + # See draft-ietf-uuidrev-rfc4122bis[https://datatracker.ietf.org/doc/draft-ietf-uuidrev-rfc4122bis/] + # for details of UUIDv7. + # + # ==== Monotonicity + # + # UUIDv7 has millisecond precision by default, so multiple UUIDs created + # within the same millisecond are not issued in monotonically increasing + # order. To create UUIDs that are time-ordered with sub-millisecond + # precision, up to 12 bits of additional timestamp may added with + # +extra_timestamp_bits+. The extra timestamp precision comes at the expense + # of random bits. Setting extra_timestamp_bits: 12 provides ~244ns + # of precision, but only 62 random bits (7.75 random bytes). + # + # prng = Random.new + # Array.new(4) { prng.uuid_v7(extra_timestamp_bits: 12) } + # # => + # ["0188d4c7-13da-74f9-8b53-22a786ffdd5a", + # "0188d4c7-13da-753b-83a5-7fb9b2afaeea", + # "0188d4c7-13da-754a-88ea-ac0baeedd8db", + # "0188d4c7-13da-7557-83e1-7cad9cda0d8d"] + # # |<--- sorted --->| |<-- random --->| + # + # Array.new(4) { prng.uuid_v7(extra_timestamp_bits: 8) } + # # => + # ["0188d4c7-3333-7a95-850a-de6edb858f7e", + # "0188d4c7-3333-7ae8-842e-bc3a8b7d0cf9", # <- out of order + # "0188d4c7-3333-7ae2-995a-9f135dc44ead", # <- out of order + # "0188d4c7-3333-7af9-87c3-8f612edac82e"] + # # |<--- sorted -->||<---- random --->| + # + # Any rollbacks of the system clock will break monotonicity. UUIDv7 is based + # on UTC, which excludes leap seconds and can rollback the clock. To avoid + # this, the system clock can synchronize with an NTP server configured to use + # a "leap smear" approach. NTP or PTP will also be needed to synchronize + # across distributed nodes. + # + # Counters and other mechanisms for stronger guarantees of monotonicity are + # not implemented. Applications with stricter requirements should follow + # {Section 6.2}[https://www.ietf.org/archive/id/draft-ietf-uuidrev-rfc4122bis-07.html#monotonicity_counters] + # of the specification. + # + def uuid_v7(extra_timestamp_bits: 0) + case (extra_timestamp_bits = Integer(extra_timestamp_bits)) + when 0 # min timestamp precision + ms = Process.clock_gettime(Process::CLOCK_REALTIME, :millisecond) + rand = random_bytes(10) + rand.setbyte(0, rand.getbyte(0) & 0x0f | 0x70) # version + rand.setbyte(2, rand.getbyte(2) & 0x3f | 0x80) # variant + "%08x-%04x-%s" % [ + (ms & 0x0000_ffff_ffff_0000) >> 16, + (ms & 0x0000_0000_0000_ffff), + rand.unpack("H4H4H12").join("-") + ] + + when 12 # max timestamp precision + ms, ns = Process.clock_gettime(Process::CLOCK_REALTIME, :nanosecond) + .divmod(1_000_000) + extra_bits = ns * 4096 / 1_000_000 + rand = random_bytes(8) + rand.setbyte(0, rand.getbyte(0) & 0x3f | 0x80) # variant + "%08x-%04x-7%03x-%s" % [ + (ms & 0x0000_ffff_ffff_0000) >> 16, + (ms & 0x0000_0000_0000_ffff), + extra_bits, + rand.unpack("H4H12").join("-") + ] + + when (0..12) # the generic version is slower than the special cases above + rand_a, rand_b1, rand_b2, rand_b3 = random_bytes(10).unpack("nnnN") + rand_mask_bits = 12 - extra_timestamp_bits + ms, ns = Process.clock_gettime(Process::CLOCK_REALTIME, :nanosecond) + .divmod(1_000_000) + "%08x-%04x-%04x-%04x-%04x%08x" % [ + (ms & 0x0000_ffff_ffff_0000) >> 16, + (ms & 0x0000_0000_0000_ffff), + 0x7000 | + ((ns * (1 << extra_timestamp_bits) / 1_000_000) << rand_mask_bits) | + rand_a & ((1 << rand_mask_bits) - 1), + 0x8000 | (rand_b1 & 0x3fff), + rand_b2, + rand_b3 + ] + + else + raise ArgumentError, "extra_timestamp_bits must be in 0..12" + end + end + + # Internal interface to Random; Generate random data _n_ bytes. + private def gen_random(n) + self.bytes(n) + end + + # Generate a string that randomly draws from a + # source array of characters. + # + # The argument _source_ specifies the array of characters from which + # to generate the string. + # The argument _n_ specifies the length, in characters, of the string to be + # generated. + # + # The result may contain whatever characters are in the source array. + # + # require 'rubygems/vendor/securerandom/lib/random/formatter' + # + # prng.choose([*'l'..'r'], 16) #=> "lmrqpoonmmlqlron" + # prng.choose([*'0'..'9'], 5) #=> "27309" + private def choose(source, n) + size = source.size + m = 1 + limit = size + while limit * size <= 0x100000000 + limit *= size + m += 1 + end + result = ''.dup + while m <= n + rs = random_number(limit) + is = rs.digits(size) + (m-is.length).times { is << 0 } + result << source.values_at(*is).join('') + n -= m + end + if 0 < n + rs = random_number(limit) + is = rs.digits(size) + if is.length < n + (n-is.length).times { is << 0 } + else + is.pop while n < is.length + end + result.concat source.values_at(*is).join('') + end + result + end + + # The default character list for #alphanumeric. + ALPHANUMERIC = [*'A'..'Z', *'a'..'z', *'0'..'9'] + + # Generate a random alphanumeric string. + # + # The argument _n_ specifies the length, in characters, of the alphanumeric + # string to be generated. + # The argument _chars_ specifies the character list which the result is + # consist of. + # + # If _n_ is not specified or is nil, 16 is assumed. + # It may be larger in the future. + # + # The result may contain A-Z, a-z and 0-9, unless _chars_ is specified. + # + # require 'rubygems/vendor/securerandom/lib/random/formatter' + # + # Random.alphanumeric #=> "2BuBuLf3WfSKyQbR" + # # or + # prng = Random.new + # prng.alphanumeric(10) #=> "i6K93NdqiH" + # + # Random.alphanumeric(4, chars: [*"0".."9"]) #=> "2952" + # # or + # prng = Random.new + # prng.alphanumeric(10, chars: [*"!".."/"]) #=> ",.,++%/''." + def alphanumeric(n = nil, chars: ALPHANUMERIC) + n = 16 if n.nil? + choose(chars, n) + end +end diff --git a/lib/rubygems/vendor/securerandom/lib/securerandom.rb b/lib/rubygems/vendor/securerandom/lib/securerandom.rb new file mode 100644 index 00000000000000..f83d2a74fc705a --- /dev/null +++ b/lib/rubygems/vendor/securerandom/lib/securerandom.rb @@ -0,0 +1,96 @@ +# -*- coding: us-ascii -*- +# frozen_string_literal: true + +require_relative 'random/formatter' + +# == Secure random number generator interface. +# +# This library is an interface to secure random number generators which are +# suitable for generating session keys in HTTP cookies, etc. +# +# You can use this library in your application by requiring it: +# +# require 'rubygems/vendor/securerandom/lib/securerandom' +# +# It supports the following secure random number generators: +# +# * openssl +# * /dev/urandom +# * Win32 +# +# Gem::SecureRandom is extended by the Gem::Random::Formatter module which +# defines the following methods: +# +# * alphanumeric +# * base64 +# * choose +# * gen_random +# * hex +# * rand +# * random_bytes +# * random_number +# * urlsafe_base64 +# * uuid +# +# These methods are usable as class methods of Gem::SecureRandom such as +# +Gem::SecureRandom.hex+. +# +# If a secure random number generator is not available, +# +NotImplementedError+ is raised. + +module Gem::SecureRandom + + # The version + VERSION = "0.3.1" + + class << self + # Returns a random binary string containing +size+ bytes. + # + # See Random.bytes + def bytes(n) + return gen_random(n) + end + + private + + # :stopdoc: + + # Implementation using OpenSSL + def gen_random_openssl(n) + return OpenSSL::Random.random_bytes(n) + end + + # Implementation using system random device + def gen_random_urandom(n) + ret = Random.urandom(n) + unless ret + raise NotImplementedError, "No random device" + end + unless ret.length == n + raise NotImplementedError, "Unexpected partial read from random device: only #{ret.length} for #{n} bytes" + end + ret + end + + begin + # Check if Random.urandom is available + Random.urandom(1) + alias gen_random gen_random_urandom + rescue RuntimeError + begin + require 'openssl' + rescue NoMethodError + raise NotImplementedError, "No random device" + else + alias gen_random gen_random_openssl + end + end + + # :startdoc: + + # Generate random data bytes for Gem::Random::Formatter + public :gen_random + end +end + +Gem::SecureRandom.extend(Gem::Random::Formatter) diff --git a/lib/rubygems/vendor/uri/lib/uri/common.rb b/lib/rubygems/vendor/uri/lib/uri/common.rb index 921fb9dd28c0a5..da2651084cdb5f 100644 --- a/lib/rubygems/vendor/uri/lib/uri/common.rb +++ b/lib/rubygems/vendor/uri/lib/uri/common.rb @@ -19,6 +19,8 @@ module Gem::URI Parser = RFC2396_Parser RFC3986_PARSER = RFC3986_Parser.new Ractor.make_shareable(RFC3986_PARSER) if defined?(Ractor) + RFC2396_PARSER = RFC2396_Parser.new + Ractor.make_shareable(RFC2396_PARSER) if defined?(Ractor) # Gem::URI::Parser.new DEFAULT_PARSER = Parser.new diff --git a/lib/rubygems/vendor/uri/lib/uri/version.rb b/lib/rubygems/vendor/uri/lib/uri/version.rb index 3c80c334d46aa1..080744095c7e84 100644 --- a/lib/rubygems/vendor/uri/lib/uri/version.rb +++ b/lib/rubygems/vendor/uri/lib/uri/version.rb @@ -1,6 +1,6 @@ module Gem::URI # :stopdoc: - VERSION_CODE = '001300'.freeze + VERSION_CODE = '001301'.freeze VERSION = VERSION_CODE.scan(/../).collect{|n| n.to_i}.join('.').freeze # :startdoc: end diff --git a/lib/rubygems/vendored_securerandom.rb b/lib/rubygems/vendored_securerandom.rb new file mode 100644 index 00000000000000..0ce26905c455ec --- /dev/null +++ b/lib/rubygems/vendored_securerandom.rb @@ -0,0 +1,4 @@ +# frozen_string_literal: true + +module Gem::Random; end +require_relative "vendor/securerandom/lib/securerandom" diff --git a/lib/set.rb b/lib/set.rb index a0954a31d1c419..8ac9ce45b16d82 100644 --- a/lib/set.rb +++ b/lib/set.rb @@ -3,7 +3,7 @@ # # set.rb - defines the Set class # -# Copyright (c) 2002-2023 Akinori MUSHA +# Copyright (c) 2002-2024 Akinori MUSHA # # Documentation by Akinori MUSHA and Gavin Sinclair. # @@ -335,7 +335,7 @@ def replace(enum) end end - # Converts the set to an array. The order of elements is uncertain. + # Returns an array containing all elements in the set. # # Set[1, 2].to_a #=> [1, 2] # Set[1, 'c', :s].to_a #=> [1, "c", :s] @@ -540,22 +540,22 @@ def delete?(o) # Deletes every element of the set for which block evaluates to # true, and returns self. Returns an enumerator if no block is # given. - def delete_if + def delete_if(&block) block_given? or return enum_for(__method__) { size } - # @hash.delete_if should be faster, but using it breaks the order - # of enumeration in subclasses. - select { |o| yield o }.each { |o| @hash.delete(o) } + # Instead of directly using @hash.delete_if, perform enumeration + # using self.each that subclasses may override. + select(&block).each { |o| @hash.delete(o) } self end # Deletes every element of the set for which block evaluates to # false, and returns self. Returns an enumerator if no block is # given. - def keep_if + def keep_if(&block) block_given? or return enum_for(__method__) { size } - # @hash.keep_if should be faster, but using it breaks the order of - # enumeration in subclasses. - reject { |o| yield o }.each { |o| @hash.delete(o) } + # Instead of directly using @hash.keep_if, perform enumeration + # using self.each that subclasses may override. + reject(&block).each { |o| @hash.delete(o) } self end diff --git a/lib/singleton.rb b/lib/singleton.rb index 6da939124ee064..1011335adfa1de 100644 --- a/lib/singleton.rb +++ b/lib/singleton.rb @@ -1,4 +1,4 @@ -# frozen_string_literal: false +# frozen_string_literal: true # The Singleton module implements the Singleton pattern. # @@ -94,20 +94,23 @@ module Singleton VERSION = "0.2.0" - # Raises a TypeError to prevent cloning. - def clone - raise TypeError, "can't clone instance of singleton #{self.class}" - end + module SingletonInstanceMethods + # Raises a TypeError to prevent cloning. + def clone + raise TypeError, "can't clone instance of singleton #{self.class}" + end - # Raises a TypeError to prevent duping. - def dup - raise TypeError, "can't dup instance of singleton #{self.class}" - end + # Raises a TypeError to prevent duping. + def dup + raise TypeError, "can't dup instance of singleton #{self.class}" + end - # By default, do not retain any state when marshalling. - def _dump(depth = -1) - '' + # By default, do not retain any state when marshalling. + def _dump(depth = -1) + '' + end end + include SingletonInstanceMethods module SingletonClassMethods # :nodoc: @@ -130,22 +133,42 @@ def inherited(sub_klass) super Singleton.__init__(sub_klass) end + + def set_instance(val) + @singleton__instance__ = val + end + + def set_mutex(val) + @singleton__mutex__ = val + end end - class << Singleton # :nodoc: + def self.module_with_class_methods + SingletonClassMethods + end + + module SingletonClassProperties + + def self.included(c) + # extending an object with Singleton is a bad idea + c.undef_method :extend_object + end + + def self.extended(c) + # extending an object with Singleton is a bad idea + c.singleton_class.send(:undef_method, :extend_object) + end + def __init__(klass) # :nodoc: klass.instance_eval { - @singleton__instance__ = nil - @singleton__mutex__ = Thread::Mutex.new + set_instance(nil) + set_mutex(Thread::Mutex.new) } klass end private - # extending an object with Singleton is a bad idea - undef_method :extend_object - def append_features(mod) # help out people counting on transitive mixins unless mod.instance_of?(Class) @@ -157,10 +180,11 @@ def append_features(mod) def included(klass) super klass.private_class_method :new, :allocate - klass.extend SingletonClassMethods + klass.extend module_with_class_methods Singleton.__init__(klass) end end + extend SingletonClassProperties ## # :singleton-method: _load @@ -170,3 +194,46 @@ def included(klass) # :singleton-method: instance # Returns the singleton instance. end + +if defined?(Ractor) + module RactorLocalSingleton + include Singleton::SingletonInstanceMethods + + module RactorLocalSingletonClassMethods + include Singleton::SingletonClassMethods + def instance + set_mutex(Thread::Mutex.new) if Ractor.current[mutex_key].nil? + return Ractor.current[instance_key] if Ractor.current[instance_key] + Ractor.current[mutex_key].synchronize { + return Ractor.current[instance_key] if Ractor.current[instance_key] + set_instance(new()) + } + Ractor.current[instance_key] + end + + private + + def instance_key + :"__RactorLocalSingleton_instance_with_class_id_#{object_id}__" + end + + def mutex_key + :"__RactorLocalSingleton_mutex_with_class_id_#{object_id}__" + end + + def set_instance(val) + Ractor.current[instance_key] = val + end + + def set_mutex(val) + Ractor.current[mutex_key] = val + end + end + + def self.module_with_class_methods + RactorLocalSingletonClassMethods + end + + extend Singleton::SingletonClassProperties + end +end diff --git a/lib/time.rb b/lib/time.rb index b565130b50c90a..10f75b1dda9a0b 100644 --- a/lib/time.rb +++ b/lib/time.rb @@ -26,7 +26,7 @@ class Time - VERSION = "0.3.0" + VERSION = "0.4.0" class << Time @@ -695,35 +695,36 @@ def httpdate getutc.strftime('%a, %d %b %Y %T GMT') end - # - # Returns a string which represents the time as a dateTime defined by XML - # Schema: - # - # CCYY-MM-DDThh:mm:ssTZD - # CCYY-MM-DDThh:mm:ss.sssTZD - # - # where TZD is Z or [+-]hh:mm. - # - # If self is a UTC time, Z is used as TZD. [+-]hh:mm is used otherwise. - # - # +fraction_digits+ specifies a number of digits to use for fractional - # seconds. Its default value is 0. - # - # require 'time' - # - # t = Time.now - # t.iso8601 # => "2011-10-05T22:26:12-04:00" - # - # You must require 'time' to use this method. - # - def xmlschema(fraction_digits=0) - fraction_digits = fraction_digits.to_i - s = strftime("%FT%T") - if fraction_digits > 0 - s << strftime(".%#{fraction_digits}N") + unless method_defined?(:xmlschema) + # + # Returns a string which represents the time as a dateTime defined by XML + # Schema: + # + # CCYY-MM-DDThh:mm:ssTZD + # CCYY-MM-DDThh:mm:ss.sssTZD + # + # where TZD is Z or [+-]hh:mm. + # + # If self is a UTC time, Z is used as TZD. [+-]hh:mm is used otherwise. + # + # +fraction_digits+ specifies a number of digits to use for fractional + # seconds. Its default value is 0. + # + # require 'time' + # + # t = Time.now + # t.iso8601 # => "2011-10-05T22:26:12-04:00" + # + # You must require 'time' to use this method. + # + def xmlschema(fraction_digits=0) + fraction_digits = fraction_digits.to_i + s = strftime("%FT%T") + if fraction_digits > 0 + s << strftime(".%#{fraction_digits}N") + end + s << (utc? ? 'Z' : strftime("%:z")) end - s << (utc? ? 'Z' : strftime("%:z")) end - alias iso8601 xmlschema + alias iso8601 xmlschema unless method_defined?(:iso8601) end - diff --git a/lib/tmpdir.rb b/lib/tmpdir.rb index fe3e0e19d1f00c..66ac7cfb321eb1 100644 --- a/lib/tmpdir.rb +++ b/lib/tmpdir.rb @@ -148,7 +148,11 @@ def next # Generates and yields random names to create a temporary name def create(basename, tmpdir=nil, max_try: nil, **opts) origdir = tmpdir - tmpdir ||= tmpdir() + if tmpdir + raise ArgumentError, "empty parent path" if tmpdir.empty? + else + tmpdir = tmpdir() + end n = nil prefix, suffix = basename prefix = (String.try_convert(prefix) or diff --git a/lib/uri/file.rb b/lib/uri/file.rb index 4ff0bc097e7c96..940d361af89f1d 100644 --- a/lib/uri/file.rb +++ b/lib/uri/file.rb @@ -70,17 +70,17 @@ def set_port(v) # raise InvalidURIError def check_userinfo(user) - raise URI::InvalidURIError, "can not set userinfo for file URI" + raise URI::InvalidURIError, "cannot set userinfo for file URI" end # raise InvalidURIError def check_user(user) - raise URI::InvalidURIError, "can not set user for file URI" + raise URI::InvalidURIError, "cannot set user for file URI" end # raise InvalidURIError def check_password(user) - raise URI::InvalidURIError, "can not set password for file URI" + raise URI::InvalidURIError, "cannot set password for file URI" end # do nothing diff --git a/lib/uri/generic.rb b/lib/uri/generic.rb index 7b48c9b9b8fd98..d4bfa3b91963ae 100644 --- a/lib/uri/generic.rb +++ b/lib/uri/generic.rb @@ -393,7 +393,7 @@ def check_userinfo(user, password = nil) def check_user(v) if @opaque raise InvalidURIError, - "can not set user with opaque" + "cannot set user with opaque" end return v unless v @@ -417,7 +417,7 @@ def check_user(v) def check_password(v, user = @user) if @opaque raise InvalidURIError, - "can not set password with opaque" + "cannot set password with opaque" end return v unless v @@ -596,7 +596,7 @@ def check_host(v) if @opaque raise InvalidURIError, - "can not set host with registry or opaque" + "cannot set host with registry or opaque" elsif parser.regexp[:HOST] !~ v raise InvalidComponentError, "bad component(expected host component): #{v}" @@ -685,7 +685,7 @@ def check_port(v) if @opaque raise InvalidURIError, - "can not set port with registry or opaque" + "cannot set port with registry or opaque" elsif !v.kind_of?(Integer) && parser.regexp[:PORT] !~ v raise InvalidComponentError, "bad component(expected port component): #{v.inspect}" @@ -733,17 +733,17 @@ def port=(v) end def check_registry(v) # :nodoc: - raise InvalidURIError, "can not set registry" + raise InvalidURIError, "cannot set registry" end private :check_registry def set_registry(v) #:nodoc: - raise InvalidURIError, "can not set registry" + raise InvalidURIError, "cannot set registry" end protected :set_registry def registry=(v) - raise InvalidURIError, "can not set registry" + raise InvalidURIError, "cannot set registry" end # @@ -866,7 +866,7 @@ def check_opaque(v) # hier_part = ( net_path | abs_path ) [ "?" query ] if @host || @port || @user || @path # userinfo = @user + ':' + @password raise InvalidURIError, - "can not set opaque with host, port, userinfo or path" + "cannot set opaque with host, port, userinfo or path" elsif v && parser.regexp[:OPAQUE] !~ v raise InvalidComponentError, "bad component(expected opaque component): #{v}" @@ -1235,7 +1235,7 @@ def route_from0(oth) return rel, rel end - # you can modify `rel', but can not `oth'. + # you can modify `rel', but cannot `oth'. return oth, rel end private :route_from0 @@ -1260,7 +1260,7 @@ def route_from0(oth) # #=> # # def route_from(oth) - # you can modify `rel', but can not `oth'. + # you can modify `rel', but cannot `oth'. begin oth, rel = route_from0(oth) rescue diff --git a/lib/uri/version.rb b/lib/uri/version.rb index 2dafa57d59a2b5..bfe3f476708714 100644 --- a/lib/uri/version.rb +++ b/lib/uri/version.rb @@ -1,6 +1,6 @@ module URI # :stopdoc: - VERSION_CODE = '001300'.freeze + VERSION_CODE = '001301'.freeze VERSION = VERSION_CODE.scan(/../).collect{|n| n.to_i}.join('.').freeze # :startdoc: end diff --git a/load.c b/load.c index 2c6a94b84268a0..c1862c38fa1dbb 100644 --- a/load.c +++ b/load.c @@ -743,7 +743,7 @@ load_iseq_eval(rb_execution_context_t *ec, VALUE fname) rb_thread_t *th = rb_ec_thread_ptr(ec); VALUE realpath_map = get_loaded_features_realpath_map(th->vm); - if (*rb_ruby_prism_ptr()) { + if (rb_ruby_prism_p()) { pm_parse_result_t result = { 0 }; result.options.line = 1; result.node.coverage_enabled = 1; @@ -1451,9 +1451,9 @@ ruby_init_ext(const char *name, void (*init)(void)) * A.autoload(:B, "b") * A::B.doit # autoloads "b" * - * If _const_ in _mod_ is defined as autoload, the file name to be - * loaded is replaced with _filename_. If _const_ is defined but not - * as autoload, does nothing. + * If _const_ in _mod_ is defined as autoload, the file name to be + * loaded is replaced with _filename_. If _const_ is defined but not + * as autoload, does nothing. */ static VALUE @@ -1515,9 +1515,9 @@ rb_mod_autoload_p(int argc, VALUE *argv, VALUE mod) * * autoload(:MyModule, "/usr/local/lib/modules/my_module.rb") * - * If _const_ is defined as autoload, the file name to be loaded is - * replaced with _filename_. If _const_ is defined but not as - * autoload, does nothing. + * If _const_ is defined as autoload, the file name to be loaded is + * replaced with _filename_. If _const_ is defined but not as + * autoload, does nothing. */ static VALUE diff --git a/mini_builtin.c b/mini_builtin.c index 2024d5d4a6c8e8..2fbc00234dfe9d 100644 --- a/mini_builtin.c +++ b/mini_builtin.c @@ -6,20 +6,43 @@ #include "miniprelude.c" -// included from miniinit.c +static VALUE +prelude_ast_value(VALUE name, VALUE code, int line) +{ + rb_ast_t *ast; + VALUE ast_value = rb_parser_compile_string_path(rb_parser_new(), name, code, line); + ast = rb_ruby_ast_data_get(ast_value); + if (!ast || !ast->body.root) { + if (ast) rb_ast_dispose(ast); + rb_exc_raise(rb_errinfo()); + } + return ast_value; +} -#ifndef INCLUDED_BY_BUILTIN_C -static struct st_table *loaded_builtin_table; -#endif +static void +pm_prelude_load(pm_parse_result_t *result, VALUE name, VALUE code, int line) +{ + pm_options_line_set(&result->options, line); + VALUE error = pm_parse_string(result, code, name, NULL); -bool pm_builtin_ast_value(pm_parse_result_t *result, const char *feature_name, VALUE *name_str); -VALUE rb_builtin_ast_value(const char *feature_name, VALUE *name_str); + if (!NIL_P(error)) { + pm_parse_result_free(result); + rb_exc_raise(error); + } +} static const rb_iseq_t * builtin_iseq_load(const char *feature_name, const struct rb_builtin_function *table) { VALUE name_str = 0; + int start_line; const rb_iseq_t *iseq; + VALUE code = rb_builtin_find(feature_name, &name_str, &start_line); + if (NIL_P(code)) { + rb_fatal("builtin_iseq_load: can not find %s; " + "probably miniprelude.c is out of date", + feature_name); + } rb_vm_t *vm = GET_VM(); static const rb_compile_option_t optimization = { @@ -35,35 +58,24 @@ builtin_iseq_load(const char *feature_name, const struct rb_builtin_function *ta .debug_level = 0, }; - if (*rb_ruby_prism_ptr()) { + if (rb_ruby_prism_p()) { pm_parse_result_t result = { 0 }; - if (!pm_builtin_ast_value(&result, feature_name, &name_str)) { - rb_fatal("builtin_iseq_load: can not find %s; " - "probably miniprelude.c is out of date", - feature_name); - } + pm_prelude_load(&result, name_str, code, start_line); vm->builtin_function_table = table; iseq = pm_iseq_new_with_opt(&result.node, name_str, name_str, Qnil, 0, NULL, 0, ISEQ_TYPE_TOP, &optimization); - GET_VM()->builtin_function_table = NULL; + vm->builtin_function_table = NULL; pm_parse_result_free(&result); } else { - VALUE ast_value = rb_builtin_ast_value(feature_name, &name_str); - - if (NIL_P(ast_value)) { - rb_fatal("builtin_iseq_load: can not find %s; " - "probably miniprelude.c is out of date", - feature_name); - } - + VALUE ast_value = prelude_ast_value(name_str, code, start_line); rb_ast_t *ast = rb_ruby_ast_data_get(ast_value); vm->builtin_function_table = table; iseq = rb_iseq_new_with_opt(ast_value, name_str, name_str, Qnil, 0, NULL, 0, ISEQ_TYPE_TOP, &optimization, Qnil); - GET_VM()->builtin_function_table = NULL; + vm->builtin_function_table = NULL; rb_ast_dispose(ast); } @@ -72,10 +84,7 @@ builtin_iseq_load(const char *feature_name, const struct rb_builtin_function *ta rb_io_write(rb_stdout, rb_iseq_disasm((const rb_iseq_t *)iseq)); } -#ifndef INCLUDED_BY_BUILTIN_C - st_insert(loaded_builtin_table, (st_data_t)feature_name, (st_data_t)iseq); - rb_vm_register_global_object((VALUE)iseq); -#endif + BUILTIN_LOADED(feature_name, iseq); return iseq; } @@ -86,39 +95,3 @@ rb_load_with_builtin_functions(const char *feature_name, const struct rb_builtin const rb_iseq_t *iseq = builtin_iseq_load(feature_name, table); rb_iseq_eval(iseq); } - -#ifndef INCLUDED_BY_BUILTIN_C - -static int -each_builtin_i(st_data_t key, st_data_t val, st_data_t dmy) -{ - const char *feature = (const char *)key; - const rb_iseq_t *iseq = (const rb_iseq_t *)val; - - rb_yield_values(2, rb_str_new2(feature), rb_iseqw_new(iseq)); - - return ST_CONTINUE; -} - -/* :nodoc: */ -static VALUE -each_builtin(VALUE self) -{ - st_foreach(loaded_builtin_table, each_builtin_i, 0); - return Qnil; -} - -void -Init_builtin(void) -{ - rb_define_singleton_method(rb_cRubyVM, "each_builtin", each_builtin, 0); - loaded_builtin_table = st_init_strtable(); -} - -void -Init_builtin_features(void) -{ - // register for ruby - builtin_iseq_load("gem_prelude", NULL); -} -#endif diff --git a/miniinit.c b/miniinit.c index 09608c1113ef91..b0adf9da2a73dc 100644 --- a/miniinit.c +++ b/miniinit.c @@ -54,8 +54,53 @@ Init_ext(void) { } +static void builtin_loaded(const char *feature_name, VALUE iseq); +#define BUILTIN_LOADED(feature_name, iseq) builtin_loaded(feature_name, (VALUE)(iseq)) + #include "mini_builtin.c" +static struct st_table *loaded_builtin_table; + +static void +builtin_loaded(const char *feature_name, VALUE iseq) +{ + st_insert(loaded_builtin_table, (st_data_t)feature_name, (st_data_t)iseq); + rb_vm_register_global_object(iseq); +} + +static int +each_builtin_i(st_data_t key, st_data_t val, st_data_t dmy) +{ + const char *feature = (const char *)key; + const rb_iseq_t *iseq = (const rb_iseq_t *)val; + + rb_yield_values(2, rb_str_new2(feature), rb_iseqw_new(iseq)); + + return ST_CONTINUE; +} + +/* :nodoc: */ +static VALUE +each_builtin(VALUE self) +{ + st_foreach(loaded_builtin_table, each_builtin_i, 0); + return Qnil; +} + +void +Init_builtin(void) +{ + rb_define_singleton_method(rb_cRubyVM, "each_builtin", each_builtin, 0); + loaded_builtin_table = st_init_strtable(); +} + +void +Init_builtin_features(void) +{ + // register for ruby + builtin_iseq_load("gem_prelude", NULL); +} + void rb_free_loaded_builtin_table(void) { diff --git a/misc/lldb_cruby.py b/misc/lldb_cruby.py index 400ccb45b9aaf2..0707bb42d3027d 100755 --- a/misc/lldb_cruby.py +++ b/misc/lldb_cruby.py @@ -547,7 +547,7 @@ def __init__(self, page, target): self.target = target self.start = page.GetChildMemberWithName('start').GetValueAsUnsigned(); self.num_slots = page.GetChildMemberWithName('total_slots').unsigned - self.slot_size = page.GetChildMemberWithName('size_pool').GetChildMemberWithName('slot_size').unsigned + self.slot_size = page.GetChildMemberWithName('heap').GetChildMemberWithName('slot_size').unsigned self.counter = 0 self.tRBasic = target.FindFirstType("struct RBasic") self.tRValue = target.FindFirstType("struct RVALUE") diff --git a/misc/ruby-style.el b/misc/ruby-style.el index 13aad77b3d734b..45fdccc6f2457c 100644 --- a/misc/ruby-style.el +++ b/misc/ruby-style.el @@ -66,6 +66,17 @@ (access-label /) ))) +(c-add-style + "prism" + '("bsd" + (c-basic-offset . 4) + (tab-width . 8) + (indent-tabs-mode . nil) + (setq show-trailing-whitespace t) + (c-offsets-alist + (case-label . +) + ))) + ;;;###autoload (defun ruby-style-c-mode () (interactive) diff --git a/missing/dtoa.c b/missing/dtoa.c index bce2cb22a1655c..477b212a1be682 100644 --- a/missing/dtoa.c +++ b/missing/dtoa.c @@ -1552,7 +1552,7 @@ strtod(const char *s00, char **se) aadj = 1.0; nd0 = -4; - if (!*++s || !(s1 = strchr(hexdigit, *s))) goto ret0; + if (!*++s || (!(s1 = strchr(hexdigit, *s)) && *s != '.')) goto ret0; if (*s == '0') { while (*++s == '0'); if (!*s) goto ret; @@ -1566,9 +1566,7 @@ strtod(const char *s00, char **se) } while (*++s && (s1 = strchr(hexdigit, *s))); } - if (*s == '.') { - dsign = 1; - if (!*++s || !(s1 = strchr(hexdigit, *s))) goto ret0; + if ((*s == '.') && *++s && (s1 = strchr(hexdigit, *s))) { if (nd0 < 0) { while (*s == '0') { s++; @@ -1583,9 +1581,6 @@ strtod(const char *s00, char **se) } } } - else { - dsign = 0; - } if (*s == 'P' || *s == 'p') { dsign = 0x2C - *++s; /* +: 2B, -: 2D */ @@ -1608,9 +1603,6 @@ strtod(const char *s00, char **se) } while ('0' <= c && c <= '9'); nd0 += nd * dsign; } - else { - if (dsign) goto ret0; - } dval(rv) = ldexp(adj, nd0); goto ret; } @@ -1647,9 +1639,9 @@ strtod(const char *s00, char **se) } #endif if (c == '.') { - if (!ISDIGIT(s[1])) - goto dig_done; c = *++s; + if (!ISDIGIT(c)) + goto dig_done; if (!nd) { for (; c == '0'; c = *++s) nz++; diff --git a/node_dump.c b/node_dump.c index f23aeca6f1ba41..d346ba9a7e7129 100644 --- a/node_dump.c +++ b/node_dump.c @@ -261,24 +261,30 @@ dump_node(VALUE buf, VALUE indent, int comment, const NODE * node) ANN("format: case [nd_head]; [nd_body]; end"); ANN("example: case x; when 1; foo; when 2; bar; else baz; end"); F_NODE(nd_head, RNODE_CASE, "case expr"); - LAST_NODE; F_NODE(nd_body, RNODE_CASE, "when clauses"); + F_LOC(case_keyword_loc, RNODE_CASE); + LAST_NODE; + F_LOC(end_keyword_loc, RNODE_CASE); return; case NODE_CASE2: ANN("case statement with no head"); ANN("format: case; [nd_body]; end"); ANN("example: case; when 1; foo; when 2; bar; else baz; end"); F_NODE(nd_head, RNODE_CASE2, "case expr"); - LAST_NODE; F_NODE(nd_body, RNODE_CASE2, "when clauses"); + F_LOC(case_keyword_loc, RNODE_CASE2); + LAST_NODE; + F_LOC(end_keyword_loc, RNODE_CASE2); return; case NODE_CASE3: ANN("case statement (pattern matching)"); ANN("format: case [nd_head]; [nd_body]; end"); ANN("example: case x; in 1; foo; in 2; bar; else baz; end"); F_NODE(nd_head, RNODE_CASE3, "case expr"); - LAST_NODE; F_NODE(nd_body, RNODE_CASE3, "in clauses"); + F_LOC(case_keyword_loc, RNODE_CASE3); + LAST_NODE; + F_LOC(end_keyword_loc, RNODE_CASE3); return; case NODE_WHEN: @@ -289,6 +295,9 @@ dump_node(VALUE buf, VALUE indent, int comment, const NODE * node) F_NODE(nd_body, RNODE_WHEN, "when body"); LAST_NODE; F_NODE(nd_next, RNODE_WHEN, "next when clause"); + F_LOC(keyword_loc, RNODE_WHEN); + LAST_NODE; + F_LOC(then_keyword_loc, RNODE_WHEN); return; case NODE_IN: @@ -316,8 +325,10 @@ dump_node(VALUE buf, VALUE indent, int comment, const NODE * node) A((RNODE_WHILE(node)->nd_state == 1) ? " (while-end)" : " (begin-end-while)"); } F_NODE(nd_cond, RNODE_WHILE, "condition"); - LAST_NODE; F_NODE(nd_body, RNODE_WHILE, "body"); + F_LOC(keyword_loc, RNODE_WHILE); + LAST_NODE; + F_LOC(closing_loc, RNODE_WHILE); return; case NODE_ITER: @@ -347,28 +358,32 @@ dump_node(VALUE buf, VALUE indent, int comment, const NODE * node) ANN("break statement"); ANN("format: break [nd_stts]"); ANN("example: break 1"); - LAST_NODE; F_NODE(nd_stts, RNODE_BREAK, "value"); + LAST_NODE; + F_LOC(keyword_loc, RNODE_BREAK); return; case NODE_NEXT: ANN("next statement"); ANN("format: next [nd_stts]"); ANN("example: next 1"); - LAST_NODE; F_NODE(nd_stts, RNODE_NEXT, "value"); + LAST_NODE; + F_LOC(keyword_loc, RNODE_NEXT); return; case NODE_RETURN: ANN("return statement"); ANN("format: return [nd_stts]"); ANN("example: return 1"); - LAST_NODE; F_NODE(nd_stts, RNODE_RETURN, "value"); + LAST_NODE; + F_LOC(keyword_loc, RNODE_RETURN); return; case NODE_REDO: ANN("redo statement"); ANN("format: redo"); ANN("example: redo"); + F_LOC(keyword_loc, RNODE_REDO); return; case NODE_RETRY: @@ -431,8 +446,9 @@ dump_node(VALUE buf, VALUE indent, int comment, const NODE * node) break; node = RNODE_AND(node)->nd_2nd; } - LAST_NODE; F_NODE(nd_2nd, RNODE_AND, "right expr"); + LAST_NODE; + F_LOC(operator_loc, RNODE_AND); return; case NODE_MASGN: @@ -526,8 +542,12 @@ dump_node(VALUE buf, VALUE indent, int comment, const NODE * node) F_NODE(nd_recv, RNODE_OP_ASGN1, "receiver"); F_ID(nd_mid, RNODE_OP_ASGN1, "operator"); F_NODE(nd_index, RNODE_OP_ASGN1, "index"); - LAST_NODE; F_NODE(nd_rvalue, RNODE_OP_ASGN1, "rvalue"); + F_LOC(call_operator_loc, RNODE_OP_ASGN1); + F_LOC(opening_loc, RNODE_OP_ASGN1); + F_LOC(closing_loc, RNODE_OP_ASGN1); + LAST_NODE; + F_LOC(binary_operator_loc, RNODE_OP_ASGN1); return; case NODE_OP_ASGN2: @@ -540,8 +560,11 @@ dump_node(VALUE buf, VALUE indent, int comment, const NODE * node) A_ID(RNODE_OP_ASGN2(node)->nd_vid); } F_ID(nd_mid, RNODE_OP_ASGN2, "operator"); - LAST_NODE; F_NODE(nd_value, RNODE_OP_ASGN2, "rvalue"); + F_LOC(call_operator_loc, RNODE_OP_ASGN2); + F_LOC(message_loc, RNODE_OP_ASGN2); + LAST_NODE; + F_LOC(binary_operator_loc, RNODE_OP_ASGN2); return; case NODE_OP_ASGN_AND: @@ -879,8 +902,9 @@ dump_node(VALUE buf, VALUE indent, int comment, const NODE * node) ANN("splat argument"); ANN("format: *[nd_head]"); ANN("example: foo(*ary)"); - LAST_NODE; F_NODE(nd_head, RNODE_SPLAT, "splat'ed array"); + LAST_NODE; + F_LOC(operator_loc, RNODE_SPLAT); return; case NODE_BLOCK_PASS: @@ -894,8 +918,9 @@ dump_node(VALUE buf, VALUE indent, int comment, const NODE * node) } } F_NODE(nd_head, RNODE_BLOCK_PASS, "other arguments"); - LAST_NODE; F_NODE(nd_body, RNODE_BLOCK_PASS, "block argument"); + LAST_NODE; + F_LOC(operator_loc, RNODE_BLOCK_PASS); return; case NODE_DEFN: @@ -922,8 +947,9 @@ dump_node(VALUE buf, VALUE indent, int comment, const NODE * node) ANN("format: alias [nd_1st] [nd_2nd]"); ANN("example: alias bar foo"); F_NODE(nd_1st, RNODE_ALIAS, "new name"); - LAST_NODE; F_NODE(nd_2nd, RNODE_ALIAS, "old name"); + LAST_NODE; + F_LOC(keyword_loc, RNODE_ALIAS); return; case NODE_VALIAS: @@ -932,6 +958,7 @@ dump_node(VALUE buf, VALUE indent, int comment, const NODE * node) ANN("example: alias $y $x"); F_ID(nd_alias, RNODE_VALIAS, "new name"); F_ID(nd_orig, RNODE_VALIAS, "old name"); + F_LOC(keyword_loc, RNODE_VALIAS); return; case NODE_UNDEF: @@ -940,6 +967,7 @@ dump_node(VALUE buf, VALUE indent, int comment, const NODE * node) ANN("example: undef foo"); LAST_NODE; F_ARRAY(nd_undefs, RNODE_UNDEF, "nd_undefs"); + F_LOC(keyword_loc, RNODE_UNDEF); return; case NODE_CLASS: diff --git a/numeric.c b/numeric.c index 3a19abea795a63..7e0e8f480f59f5 100644 --- a/numeric.c +++ b/numeric.c @@ -1047,16 +1047,15 @@ rb_float_new_in_heap(double d) * may contain: * * - A fixed-point number. + * 3.14.to_s # => "3.14" * - A number in "scientific notation" (containing an exponent). + * (10.1**50).to_s # => "1.644631821843879e+50" * - 'Infinity'. + * (10.1**500).to_s # => "Infinity" * - '-Infinity'. + * (-10.1**500).to_s # => "-Infinity" * - 'NaN' (indicating not-a-number). - * - * 3.14.to_s # => "3.14" - * (10.1**50).to_s # => "1.644631821843879e+50" - * (10.1**500).to_s # => "Infinity" - * (-10.1**500).to_s # => "-Infinity" - * (0.0/0.0).to_s # => "NaN" + * (0.0/0.0).to_s # => "NaN" * */ @@ -2744,7 +2743,7 @@ flo_truncate(int argc, VALUE *argv, VALUE num) * Returns the largest float or integer that is less than or equal to +self+, * as specified by the given `ndigits`, * which must be an - * [integer-convertible object](rdoc-ref:implicit_conversion.rdoc@Integer-Convertible+Objects). + * {integer-convertible object}[rdoc-ref:implicit_conversion.rdoc@Integer-Convertible+Objects]. * * Equivalent to self.to_f.floor(ndigits). * @@ -2764,7 +2763,7 @@ num_floor(int argc, VALUE *argv, VALUE num) * Returns the smallest float or integer that is greater than or equal to +self+, * as specified by the given `ndigits`, * which must be an - * [integer-convertible object](rdoc-ref:implicit_conversion.rdoc@Integer-Convertible+Objects). + * {integer-convertible object}[rdoc-ref:implicit_conversion.rdoc@Integer-Convertible+Objects]. * * Equivalent to self.to_f.ceil(ndigits). * diff --git a/numeric.rb b/numeric.rb index 4dc406fd2386a7..852385962e2d64 100644 --- a/numeric.rb +++ b/numeric.rb @@ -328,10 +328,7 @@ def abs Primitive.cexpr! 'rb_float_abs(self)' end - def magnitude - Primitive.attr! :leaf - Primitive.cexpr! 'rb_float_abs(self)' - end + alias magnitude abs # call-seq: # -float -> float diff --git a/object.c b/object.c index e2e68e07a429dc..1bd476b0228a0f 100644 --- a/object.c +++ b/object.c @@ -135,7 +135,7 @@ rb_class_allocate_instance(VALUE klass) RUBY_ASSERT(rb_shape_get_shape(obj)->type == SHAPE_ROOT); // Set the shape to the specific T_OBJECT shape. - ROBJECT_SET_SHAPE_ID(obj, (shape_id_t)(rb_gc_size_pool_id_for_size(size) + FIRST_T_OBJECT_SHAPE_ID)); + ROBJECT_SET_SHAPE_ID(obj, (shape_id_t)(rb_gc_heap_id_for_size(size) + FIRST_T_OBJECT_SHAPE_ID)); #if RUBY_DEBUG RUBY_ASSERT(!rb_shape_obj_too_complex(obj)); @@ -358,7 +358,7 @@ rb_obj_copy_ivar(VALUE dest, VALUE obj) rb_shape_t * initial_shape = rb_shape_get_shape(dest); - if (initial_shape->size_pool_index != src_shape->size_pool_index) { + if (initial_shape->heap_index != src_shape->heap_index) { RUBY_ASSERT(initial_shape->type == SHAPE_T_OBJECT); shape_to_set_on_dest = rb_shape_rebuild_shape(initial_shape, src_shape); @@ -3400,7 +3400,7 @@ rb_f_integer(rb_execution_context_t *ec, VALUE obj, VALUE arg, VALUE base, VALUE } static double -rb_cstr_to_dbl_raise(const char *p, int badcheck, int raise, int *error) +rb_cstr_to_dbl_raise(const char *p, rb_encoding *enc, int badcheck, int raise, int *error) { const char *q; char *end; @@ -3411,6 +3411,7 @@ rb_cstr_to_dbl_raise(const char *p, int badcheck, int raise, int *error) #define OutOfRange() ((end - p > max_width) ? \ (w = max_width, ellipsis = "...") : \ (w = (int)(end - p), ellipsis = "")) + /* p...end has been parsed with strtod, should be ASCII-only */ if (!p) return 0.0; q = p; @@ -3506,7 +3507,8 @@ rb_cstr_to_dbl_raise(const char *p, int badcheck, int raise, int *error) bad: if (raise) { - rb_invalid_str(q, "Float()"); + VALUE s = rb_enc_str_new_cstr(q, enc); + rb_raise(rb_eArgError, "invalid value for Float(): %+"PRIsVALUE, s); UNREACHABLE_RETURN(nan("")); } else { @@ -3518,7 +3520,7 @@ rb_cstr_to_dbl_raise(const char *p, int badcheck, int raise, int *error) double rb_cstr_to_dbl(const char *p, int badcheck) { - return rb_cstr_to_dbl_raise(p, badcheck, TRUE, NULL); + return rb_cstr_to_dbl_raise(p, NULL, badcheck, TRUE, NULL); } static double @@ -3530,6 +3532,7 @@ rb_str_to_dbl_raise(VALUE str, int badcheck, int raise, int *error) VALUE v = 0; StringValue(str); + rb_must_asciicompat(str); s = RSTRING_PTR(str); len = RSTRING_LEN(str); if (s) { @@ -3548,9 +3551,11 @@ rb_str_to_dbl_raise(VALUE str, int badcheck, int raise, int *error) s = p; } } - ret = rb_cstr_to_dbl_raise(s, badcheck, raise, error); + ret = rb_cstr_to_dbl_raise(s, rb_enc_get(str), badcheck, raise, error); if (v) ALLOCV_END(v); + else + RB_GC_GUARD(str); return ret; } diff --git a/pack.c b/pack.c index 1b0d66f9900995..3a5c1bfb9677cf 100644 --- a/pack.c +++ b/pack.c @@ -193,20 +193,69 @@ VALUE_to_float(VALUE obj) } } +static void +str_expand_fill(VALUE res, int c, long len) +{ + long olen = RSTRING_LEN(res); + memset(RSTRING_PTR(res) + olen, c, len); + rb_str_set_len(res, olen + len); +} + +static char * +skip_to_eol(const char *p, const char *pend) +{ + p = memchr(p, '\n', pend - p); + return (char *)(p ? p + 1 : pend); +} + +#define skip_blank(p, type) \ + (ISSPACE(type) || (type == '#' && (p = skip_to_eol(p, pend), 1))) + +#ifndef NATINT_PACK +# define pack_modifiers(p, t, n, e) pack_modifiers(p, t, e) +#endif +static char * +pack_modifiers(const char *p, char type, int *natint, int *explicit_endian) +{ + while (1) { + switch (*p) { + case '_': + case '!': + if (strchr(natstr, type)) { +#ifdef NATINT_PACK + *natint = 1; +#endif + p++; + } + else { + rb_raise(rb_eArgError, "'%c' allowed only after types %s", *p, natstr); + } + break; + + case '<': + case '>': + if (!strchr(endstr, type)) { + rb_raise(rb_eArgError, "'%c' allowed only after types %s", *p, endstr); + } + if (*explicit_endian) { + rb_raise(rb_eRangeError, "Can't use both '<' and '>'"); + } + *explicit_endian = *p++; + break; + default: + return (char *)p; + } + } +} + static VALUE pack_pack(rb_execution_context_t *ec, VALUE ary, VALUE fmt, VALUE buffer) { - static const char nul10[] = "\0\0\0\0\0\0\0\0\0\0"; - static const char spc10[] = " "; const char *p, *pend; VALUE res, from, associates = 0; - char type; long len, idx, plen; const char *ptr; int enc_info = 1; /* 0 - BINARY, 1 - US-ASCII, 2 - UTF-8 */ -#ifdef NATINT_PACK - int natint; /* native integer */ -#endif int integer_size, bigendian_p; StringValue(fmt); @@ -233,50 +282,16 @@ pack_pack(rb_execution_context_t *ec, VALUE ary, VALUE fmt, VALUE buffer) while (p < pend) { int explicit_endian = 0; - if (RSTRING_PTR(fmt) + RSTRING_LEN(fmt) != pend) { + if (RSTRING_END(fmt) != pend) { rb_raise(rb_eRuntimeError, "format string modified"); } - type = *p++; /* get data type */ -#ifdef NATINT_PACK - natint = 0; -#endif - - if (ISSPACE(type)) continue; - if (type == '#') { - while ((p < pend) && (*p != '\n')) { - p++; - } - continue; - } - - { - modifiers: - switch (*p) { - case '_': - case '!': - if (strchr(natstr, type)) { + const char type = *p++; /* get data type */ #ifdef NATINT_PACK - natint = 1; + int natint = 0; /* native integer */ #endif - p++; - } - else { - rb_raise(rb_eArgError, "'%c' allowed only after types %s", *p, natstr); - } - goto modifiers; - case '<': - case '>': - if (!strchr(endstr, type)) { - rb_raise(rb_eArgError, "'%c' allowed only after types %s", *p, endstr); - } - if (explicit_endian) { - rb_raise(rb_eRangeError, "Can't use both '<' and '>'"); - } - explicit_endian = *p++; - goto modifiers; - } - } + if (skip_blank(p, type)) continue; + p = pack_modifiers(p, type, &natint, &explicit_endian); if (*p == '*') { /* set data length */ len = strchr("@Xxu", type) ? 0 @@ -333,16 +348,12 @@ pack_pack(rb_execution_context_t *ec, VALUE ary, VALUE fmt, VALUE buffer) if (plen >= len) { rb_str_buf_cat(res, ptr, len); if (p[-1] == '*' && type == 'Z') - rb_str_buf_cat(res, nul10, 1); + rb_str_buf_cat(res, "", 1); } else { + rb_str_modify_expand(res, len); rb_str_buf_cat(res, ptr, plen); - len -= plen; - while (len >= 10) { - rb_str_buf_cat(res, (type == 'A')?spc10:nul10, 10); - len -= 10; - } - rb_str_buf_cat(res, (type == 'A')?spc10:nul10, len); + str_expand_fill(res, (type == 'A' ? ' ' : '\0'), len - plen); } break; @@ -616,11 +627,8 @@ pack_pack(rb_execution_context_t *ec, VALUE ary, VALUE fmt, VALUE buffer) case 'x': /* null byte */ grow: - while (len >= 10) { - rb_str_buf_cat(res, nul10, 10); - len -= 10; - } - rb_str_buf_cat(res, nul10, len); + rb_str_modify_expand(res, len); + str_expand_fill(res, '\0', len); break; case 'X': /* back up byte */ @@ -945,13 +953,8 @@ pack_unpack_internal(VALUE str, VALUE fmt, enum unpack_mode mode, long offset) char *s, *send; char *p, *pend; VALUE ary, associates = Qfalse; - char type; long len; AVOID_CC_BUG long tmp_len; - int star; -#ifdef NATINT_PACK - int natint; /* native integer */ -#endif int signed_p, integer_size, bigendian_p; #define UNPACK_PUSH(item) do {\ VALUE item_val = (item);\ @@ -986,49 +989,14 @@ pack_unpack_internal(VALUE str, VALUE fmt, enum unpack_mode mode, long offset) ary = mode == UNPACK_ARRAY ? rb_ary_new() : Qnil; while (p < pend) { int explicit_endian = 0; - type = *p++; -#ifdef NATINT_PACK - natint = 0; -#endif - - if (ISSPACE(type)) continue; - if (type == '#') { - while ((p < pend) && (*p != '\n')) { - p++; - } - continue; - } - - star = 0; - { - modifiers: - switch (*p) { - case '_': - case '!': - - if (strchr(natstr, type)) { + const char type = *p++; #ifdef NATINT_PACK - natint = 1; + int natint = 0; /* native integer */ #endif - p++; - } - else { - rb_raise(rb_eArgError, "'%c' allowed only after types %s", *p, natstr); - } - goto modifiers; + int star = 0; - case '<': - case '>': - if (!strchr(endstr, type)) { - rb_raise(rb_eArgError, "'%c' allowed only after types %s", *p, endstr); - } - if (explicit_endian) { - rb_raise(rb_eRangeError, "Can't use both '<' and '>'"); - } - explicit_endian = *p++; - goto modifiers; - } - } + if (skip_blank(p, type)) continue; + p = pack_modifiers(p, type, &natint, &explicit_endian); if (p >= pend) len = 1; diff --git a/pack.rb b/pack.rb index b6e29c3eab4f12..e70c6c7dc8b77d 100644 --- a/pack.rb +++ b/pack.rb @@ -11,10 +11,14 @@ def pack(fmt, buffer: nil) class String # call-seq: - # unpack(template, offset: 0) -> array + # unpack(template, offset: 0, &block) -> array + # + # Extracts data from +self+. + # + # If +block+ is not given, forming objects that become the elements + # of a new array, and returns that array. Otherwise, yields each + # object. # - # Extracts data from +self+, forming objects that become the elements of a new array; - # returns that array. # See {Packed Data}[rdoc-ref:packed_data.rdoc]. def unpack(fmt, offset: 0) Primitive.attr! :use_block diff --git a/parse.y b/parse.y index b92f9936401329..47854476b42921 100644 --- a/parse.y +++ b/parse.y @@ -709,10 +709,11 @@ after_pop_stack(int len, struct parser_params *p) #define VALID_SYMNAME_P(s, l, enc, type) (rb_enc_symname_type(s, l, enc, (1U<<(type))) == (int)(type)) #ifndef RIPPER -static inline bool -end_with_newline_p(struct parser_params *p, VALUE str) +static inline int +char_at_end(struct parser_params *p, VALUE str, int when_empty) { - return RSTRING_LEN(str) > 0 && RSTRING_END(str)[-1] == '\n'; + long len = RSTRING_LEN(str); + return len > 0 ? (unsigned char)RSTRING_PTR(str)[len-1] : when_empty; } #endif @@ -764,8 +765,6 @@ string_buffer_append(struct parser_params *p, rb_parser_string_t *str) buf->last->buf[buf->last->used++] = str; } -static void rb_parser_string_free(rb_parser_t *p, rb_parser_string_t *str); - static void string_buffer_free(struct parser_params *p) { @@ -1063,13 +1062,13 @@ static rb_node_scope_t *rb_node_scope_new2(struct parser_params *p, rb_ast_id_ta static rb_node_block_t *rb_node_block_new(struct parser_params *p, NODE *nd_head, const YYLTYPE *loc); static rb_node_if_t *rb_node_if_new(struct parser_params *p, NODE *nd_cond, NODE *nd_body, NODE *nd_else, const YYLTYPE *loc); static rb_node_unless_t *rb_node_unless_new(struct parser_params *p, NODE *nd_cond, NODE *nd_body, NODE *nd_else, const YYLTYPE *loc, const YYLTYPE *keyword_loc, const YYLTYPE *then_keyword_loc, const YYLTYPE *end_keyword_loc); -static rb_node_case_t *rb_node_case_new(struct parser_params *p, NODE *nd_head, NODE *nd_body, const YYLTYPE *loc); -static rb_node_case2_t *rb_node_case2_new(struct parser_params *p, NODE *nd_body, const YYLTYPE *loc); -static rb_node_case3_t *rb_node_case3_new(struct parser_params *p, NODE *nd_head, NODE *nd_body, const YYLTYPE *loc); -static rb_node_when_t *rb_node_when_new(struct parser_params *p, NODE *nd_head, NODE *nd_body, NODE *nd_next, const YYLTYPE *loc); +static rb_node_case_t *rb_node_case_new(struct parser_params *p, NODE *nd_head, NODE *nd_body, const YYLTYPE *loc, const YYLTYPE *case_keyword_loc, const YYLTYPE *end_keyword_loc); +static rb_node_case2_t *rb_node_case2_new(struct parser_params *p, NODE *nd_body, const YYLTYPE *loc, const YYLTYPE *case_keyword_loc, const YYLTYPE *end_keyword_loc); +static rb_node_case3_t *rb_node_case3_new(struct parser_params *p, NODE *nd_head, NODE *nd_body, const YYLTYPE *loc, const YYLTYPE *case_keyword_loc, const YYLTYPE *end_keyword_loc); +static rb_node_when_t *rb_node_when_new(struct parser_params *p, NODE *nd_head, NODE *nd_body, NODE *nd_next, const YYLTYPE *loc, const YYLTYPE *keyword_loc, const YYLTYPE *then_keyword_loc); static rb_node_in_t *rb_node_in_new(struct parser_params *p, NODE *nd_head, NODE *nd_body, NODE *nd_next, const YYLTYPE *loc); -static rb_node_while_t *rb_node_while_new(struct parser_params *p, NODE *nd_cond, NODE *nd_body, long nd_state, const YYLTYPE *loc); -static rb_node_until_t *rb_node_until_new(struct parser_params *p, NODE *nd_cond, NODE *nd_body, long nd_state, const YYLTYPE *loc); +static rb_node_while_t *rb_node_while_new(struct parser_params *p, NODE *nd_cond, NODE *nd_body, long nd_state, const YYLTYPE *loc, const YYLTYPE *keyword_loc, const YYLTYPE *closing_loc); +static rb_node_until_t *rb_node_until_new(struct parser_params *p, NODE *nd_cond, NODE *nd_body, long nd_state, const YYLTYPE *loc, const YYLTYPE *keyword_loc, const YYLTYPE *closing_loc); static rb_node_iter_t *rb_node_iter_new(struct parser_params *p, rb_node_args_t *nd_args, NODE *nd_body, const YYLTYPE *loc); static rb_node_for_t *rb_node_for_new(struct parser_params *p, NODE *nd_iter, NODE *nd_body, const YYLTYPE *loc); static rb_node_for_masgn_t *rb_node_for_masgn_new(struct parser_params *p, NODE *nd_var, const YYLTYPE *loc); @@ -1078,8 +1077,8 @@ static rb_node_begin_t *rb_node_begin_new(struct parser_params *p, NODE *nd_body static rb_node_rescue_t *rb_node_rescue_new(struct parser_params *p, NODE *nd_head, NODE *nd_resq, NODE *nd_else, const YYLTYPE *loc); static rb_node_resbody_t *rb_node_resbody_new(struct parser_params *p, NODE *nd_args, NODE *nd_exc_var, NODE *nd_body, NODE *nd_next, const YYLTYPE *loc); static rb_node_ensure_t *rb_node_ensure_new(struct parser_params *p, NODE *nd_head, NODE *nd_ensr, const YYLTYPE *loc); -static rb_node_and_t *rb_node_and_new(struct parser_params *p, NODE *nd_1st, NODE *nd_2nd, const YYLTYPE *loc); -static rb_node_or_t *rb_node_or_new(struct parser_params *p, NODE *nd_1st, NODE *nd_2nd, const YYLTYPE *loc); +static rb_node_and_t *rb_node_and_new(struct parser_params *p, NODE *nd_1st, NODE *nd_2nd, const YYLTYPE *loc, const YYLTYPE *operator_loc); +static rb_node_or_t *rb_node_or_new(struct parser_params *p, NODE *nd_1st, NODE *nd_2nd, const YYLTYPE *loc, const YYLTYPE *operator_loc); static rb_node_masgn_t *rb_node_masgn_new(struct parser_params *p, NODE *nd_head, NODE *nd_args, const YYLTYPE *loc); static rb_node_lasgn_t *rb_node_lasgn_new(struct parser_params *p, ID nd_vid, NODE *nd_value, const YYLTYPE *loc); static rb_node_dasgn_t *rb_node_dasgn_new(struct parser_params *p, ID nd_vid, NODE *nd_value, const YYLTYPE *loc); @@ -1087,8 +1086,8 @@ static rb_node_gasgn_t *rb_node_gasgn_new(struct parser_params *p, ID nd_vid, NO static rb_node_iasgn_t *rb_node_iasgn_new(struct parser_params *p, ID nd_vid, NODE *nd_value, const YYLTYPE *loc); static rb_node_cdecl_t *rb_node_cdecl_new(struct parser_params *p, ID nd_vid, NODE *nd_value, NODE *nd_else, enum rb_parser_shareability shareability, const YYLTYPE *loc); static rb_node_cvasgn_t *rb_node_cvasgn_new(struct parser_params *p, ID nd_vid, NODE *nd_value, const YYLTYPE *loc); -static rb_node_op_asgn1_t *rb_node_op_asgn1_new(struct parser_params *p, NODE *nd_recv, ID nd_mid, NODE *index, NODE *rvalue, const YYLTYPE *loc); -static rb_node_op_asgn2_t *rb_node_op_asgn2_new(struct parser_params *p, NODE *nd_recv, NODE *nd_value, ID nd_vid, ID nd_mid, bool nd_aid, const YYLTYPE *loc); +static rb_node_op_asgn1_t *rb_node_op_asgn1_new(struct parser_params *p, NODE *nd_recv, ID nd_mid, NODE *index, NODE *rvalue, const YYLTYPE *loc, const YYLTYPE *call_operator_loc, const YYLTYPE *opening_loc, const YYLTYPE *closing_loc, const YYLTYPE *binary_operator_loc); +static rb_node_op_asgn2_t *rb_node_op_asgn2_new(struct parser_params *p, NODE *nd_recv, NODE *nd_value, ID nd_vid, ID nd_mid, bool nd_aid, const YYLTYPE *loc, const YYLTYPE *call_operator_loc, const YYLTYPE *message_loc, const YYLTYPE *binary_operator_loc); static rb_node_op_asgn_or_t *rb_node_op_asgn_or_new(struct parser_params *p, NODE *nd_head, NODE *nd_value, const YYLTYPE *loc); static rb_node_op_asgn_and_t *rb_node_op_asgn_and_new(struct parser_params *p, NODE *nd_head, NODE *nd_value, const YYLTYPE *loc); static rb_node_op_cdecl_t *rb_node_op_cdecl_new(struct parser_params *p, NODE *nd_head, NODE *nd_value, ID nd_aid, enum rb_parser_shareability shareability, const YYLTYPE *loc); @@ -1103,7 +1102,7 @@ static rb_node_list_t *rb_node_list_new(struct parser_params *p, NODE *nd_head, static rb_node_list_t *rb_node_list_new2(struct parser_params *p, NODE *nd_head, long nd_alen, NODE *nd_next, const YYLTYPE *loc); static rb_node_zlist_t *rb_node_zlist_new(struct parser_params *p, const YYLTYPE *loc); static rb_node_hash_t *rb_node_hash_new(struct parser_params *p, NODE *nd_head, const YYLTYPE *loc); -static rb_node_return_t *rb_node_return_new(struct parser_params *p, NODE *nd_stts, const YYLTYPE *loc); +static rb_node_return_t *rb_node_return_new(struct parser_params *p, NODE *nd_stts, const YYLTYPE *loc, const YYLTYPE *keyword_loc); static rb_node_yield_t *rb_node_yield_new(struct parser_params *p, NODE *nd_head, const YYLTYPE *loc); static rb_node_lvar_t *rb_node_lvar_new(struct parser_params *p, ID nd_vid, const YYLTYPE *loc); static rb_node_dvar_t *rb_node_dvar_new(struct parser_params *p, ID nd_vid, const YYLTYPE *loc); @@ -1134,12 +1133,12 @@ static rb_node_kw_arg_t *rb_node_kw_arg_new(struct parser_params *p, NODE *nd_bo static rb_node_postarg_t *rb_node_postarg_new(struct parser_params *p, NODE *nd_1st, NODE *nd_2nd, const YYLTYPE *loc); static rb_node_argscat_t *rb_node_argscat_new(struct parser_params *p, NODE *nd_head, NODE *nd_body, const YYLTYPE *loc); static rb_node_argspush_t *rb_node_argspush_new(struct parser_params *p, NODE *nd_head, NODE *nd_body, const YYLTYPE *loc); -static rb_node_splat_t *rb_node_splat_new(struct parser_params *p, NODE *nd_head, const YYLTYPE *loc); -static rb_node_block_pass_t *rb_node_block_pass_new(struct parser_params *p, NODE *nd_body, const YYLTYPE *loc); +static rb_node_splat_t *rb_node_splat_new(struct parser_params *p, NODE *nd_head, const YYLTYPE *loc, const YYLTYPE *operator_loc); +static rb_node_block_pass_t *rb_node_block_pass_new(struct parser_params *p, NODE *nd_body, const YYLTYPE *loc, const YYLTYPE *operator_loc); static rb_node_defn_t *rb_node_defn_new(struct parser_params *p, ID nd_mid, NODE *nd_defn, const YYLTYPE *loc); static rb_node_defs_t *rb_node_defs_new(struct parser_params *p, NODE *nd_recv, ID nd_mid, NODE *nd_defn, const YYLTYPE *loc); -static rb_node_alias_t *rb_node_alias_new(struct parser_params *p, NODE *nd_1st, NODE *nd_2nd, const YYLTYPE *loc); -static rb_node_valias_t *rb_node_valias_new(struct parser_params *p, ID nd_alias, ID nd_orig, const YYLTYPE *loc); +static rb_node_alias_t *rb_node_alias_new(struct parser_params *p, NODE *nd_1st, NODE *nd_2nd, const YYLTYPE *loc, const YYLTYPE *keyword_loc); +static rb_node_valias_t *rb_node_valias_new(struct parser_params *p, ID nd_alias, ID nd_orig, const YYLTYPE *loc, const YYLTYPE *keyword_loc); static rb_node_undef_t *rb_node_undef_new(struct parser_params *p, NODE *nd_undef, const YYLTYPE *loc); static rb_node_class_t *rb_node_class_new(struct parser_params *p, NODE *nd_cpath, NODE *nd_body, NODE *nd_super, const YYLTYPE *loc); static rb_node_module_t *rb_node_module_new(struct parser_params *p, NODE *nd_cpath, NODE *nd_body, const YYLTYPE *loc); @@ -1171,13 +1170,13 @@ static rb_node_error_t *rb_node_error_new(struct parser_params *p, const YYLTYPE #define NEW_BLOCK(a,loc) (NODE *)rb_node_block_new(p,a,loc) #define NEW_IF(c,t,e,loc) (NODE *)rb_node_if_new(p,c,t,e,loc) #define NEW_UNLESS(c,t,e,loc,k_loc,t_loc,e_loc) (NODE *)rb_node_unless_new(p,c,t,e,loc,k_loc,t_loc,e_loc) -#define NEW_CASE(h,b,loc) (NODE *)rb_node_case_new(p,h,b,loc) -#define NEW_CASE2(b,loc) (NODE *)rb_node_case2_new(p,b,loc) -#define NEW_CASE3(h,b,loc) (NODE *)rb_node_case3_new(p,h,b,loc) -#define NEW_WHEN(c,t,e,loc) (NODE *)rb_node_when_new(p,c,t,e,loc) +#define NEW_CASE(h,b,loc,ck_loc,ek_loc) (NODE *)rb_node_case_new(p,h,b,loc,ck_loc,ek_loc) +#define NEW_CASE2(b,loc,ck_loc,ek_loc) (NODE *)rb_node_case2_new(p,b,loc,ck_loc,ek_loc) +#define NEW_CASE3(h,b,loc,ck_loc,ek_loc) (NODE *)rb_node_case3_new(p,h,b,loc,ck_loc,ek_loc) +#define NEW_WHEN(c,t,e,loc,k_loc,t_loc) (NODE *)rb_node_when_new(p,c,t,e,loc,k_loc,t_loc) #define NEW_IN(c,t,e,loc) (NODE *)rb_node_in_new(p,c,t,e,loc) -#define NEW_WHILE(c,b,n,loc) (NODE *)rb_node_while_new(p,c,b,n,loc) -#define NEW_UNTIL(c,b,n,loc) (NODE *)rb_node_until_new(p,c,b,n,loc) +#define NEW_WHILE(c,b,n,loc,k_loc,c_loc) (NODE *)rb_node_while_new(p,c,b,n,loc,k_loc,c_loc) +#define NEW_UNTIL(c,b,n,loc,k_loc,c_loc) (NODE *)rb_node_until_new(p,c,b,n,loc,k_loc,c_loc) #define NEW_ITER(a,b,loc) (NODE *)rb_node_iter_new(p,a,b,loc) #define NEW_FOR(i,b,loc) (NODE *)rb_node_for_new(p,i,b,loc) #define NEW_FOR_MASGN(v,loc) (NODE *)rb_node_for_masgn_new(p,v,loc) @@ -1186,8 +1185,8 @@ static rb_node_error_t *rb_node_error_new(struct parser_params *p, const YYLTYPE #define NEW_RESCUE(b,res,e,loc) (NODE *)rb_node_rescue_new(p,b,res,e,loc) #define NEW_RESBODY(a,v,ex,n,loc) (NODE *)rb_node_resbody_new(p,a,v,ex,n,loc) #define NEW_ENSURE(b,en,loc) (NODE *)rb_node_ensure_new(p,b,en,loc) -#define NEW_AND(f,s,loc) (NODE *)rb_node_and_new(p,f,s,loc) -#define NEW_OR(f,s,loc) (NODE *)rb_node_or_new(p,f,s,loc) +#define NEW_AND(f,s,loc,op_loc) (NODE *)rb_node_and_new(p,f,s,loc,op_loc) +#define NEW_OR(f,s,loc,op_loc) (NODE *)rb_node_or_new(p,f,s,loc,op_loc) #define NEW_MASGN(l,r,loc) rb_node_masgn_new(p,l,r,loc) #define NEW_LASGN(v,val,loc) (NODE *)rb_node_lasgn_new(p,v,val,loc) #define NEW_DASGN(v,val,loc) (NODE *)rb_node_dasgn_new(p,v,val,loc) @@ -1195,8 +1194,8 @@ static rb_node_error_t *rb_node_error_new(struct parser_params *p, const YYLTYPE #define NEW_IASGN(v,val,loc) (NODE *)rb_node_iasgn_new(p,v,val,loc) #define NEW_CDECL(v,val,path,share,loc) (NODE *)rb_node_cdecl_new(p,v,val,path,share,loc) #define NEW_CVASGN(v,val,loc) (NODE *)rb_node_cvasgn_new(p,v,val,loc) -#define NEW_OP_ASGN1(r,id,idx,rval,loc) (NODE *)rb_node_op_asgn1_new(p,r,id,idx,rval,loc) -#define NEW_OP_ASGN2(r,t,i,o,val,loc) (NODE *)rb_node_op_asgn2_new(p,r,val,i,o,t,loc) +#define NEW_OP_ASGN1(r,id,idx,rval,loc,c_op_loc,o_loc,c_loc,b_op_loc) (NODE *)rb_node_op_asgn1_new(p,r,id,idx,rval,loc,c_op_loc,o_loc,c_loc,b_op_loc) +#define NEW_OP_ASGN2(r,t,i,o,val,loc,c_op_loc,m_loc,b_op_loc) (NODE *)rb_node_op_asgn2_new(p,r,val,i,o,t,loc,c_op_loc,m_loc,b_op_loc) #define NEW_OP_ASGN_OR(i,val,loc) (NODE *)rb_node_op_asgn_or_new(p,i,val,loc) #define NEW_OP_ASGN_AND(i,val,loc) (NODE *)rb_node_op_asgn_and_new(p,i,val,loc) #define NEW_OP_CDECL(v,op,val,share,loc) (NODE *)rb_node_op_cdecl_new(p,v,val,op,share,loc) @@ -1211,7 +1210,7 @@ static rb_node_error_t *rb_node_error_new(struct parser_params *p, const YYLTYPE #define NEW_LIST2(h,l,n,loc) (NODE *)rb_node_list_new2(p,h,l,n,loc) #define NEW_ZLIST(loc) (NODE *)rb_node_zlist_new(p,loc) #define NEW_HASH(a,loc) (NODE *)rb_node_hash_new(p,a,loc) -#define NEW_RETURN(s,loc) (NODE *)rb_node_return_new(p,s,loc) +#define NEW_RETURN(s,loc,k_loc) (NODE *)rb_node_return_new(p,s,loc,k_loc) #define NEW_YIELD(a,loc) (NODE *)rb_node_yield_new(p,a,loc) #define NEW_LVAR(v,loc) (NODE *)rb_node_lvar_new(p,v,loc) #define NEW_DVAR(v,loc) (NODE *)rb_node_dvar_new(p,v,loc) @@ -1242,12 +1241,12 @@ static rb_node_error_t *rb_node_error_new(struct parser_params *p, const YYLTYPE #define NEW_POSTARG(i,v,loc) (NODE *)rb_node_postarg_new(p,i,v,loc) #define NEW_ARGSCAT(a,b,loc) (NODE *)rb_node_argscat_new(p,a,b,loc) #define NEW_ARGSPUSH(a,b,loc) (NODE *)rb_node_argspush_new(p,a,b,loc) -#define NEW_SPLAT(a,loc) (NODE *)rb_node_splat_new(p,a,loc) -#define NEW_BLOCK_PASS(b,loc) rb_node_block_pass_new(p,b,loc) +#define NEW_SPLAT(a,loc,op_loc) (NODE *)rb_node_splat_new(p,a,loc,op_loc) +#define NEW_BLOCK_PASS(b,loc,o_loc) rb_node_block_pass_new(p,b,loc,o_loc) #define NEW_DEFN(i,s,loc) (NODE *)rb_node_defn_new(p,i,s,loc) #define NEW_DEFS(r,i,s,loc) (NODE *)rb_node_defs_new(p,r,i,s,loc) -#define NEW_ALIAS(n,o,loc) (NODE *)rb_node_alias_new(p,n,o,loc) -#define NEW_VALIAS(n,o,loc) (NODE *)rb_node_valias_new(p,n,o,loc) +#define NEW_ALIAS(n,o,loc,k_loc) (NODE *)rb_node_alias_new(p,n,o,loc,k_loc) +#define NEW_VALIAS(n,o,loc,k_loc) (NODE *)rb_node_valias_new(p,n,o,loc,k_loc) #define NEW_UNDEF(i,loc) (NODE *)rb_node_undef_new(p,i,loc) #define NEW_CLASS(n,b,s,loc) (NODE *)rb_node_class_new(p,n,b,s,loc) #define NEW_MODULE(n,b,loc) (NODE *)rb_node_module_new(p,n,b,loc) @@ -1313,15 +1312,15 @@ struct RNode_DEF_TEMP { #define RNODE_DEF_TEMP(node) ((struct RNode_DEF_TEMP *)(node)) -static rb_node_break_t *rb_node_break_new(struct parser_params *p, NODE *nd_stts, const YYLTYPE *loc); -static rb_node_next_t *rb_node_next_new(struct parser_params *p, NODE *nd_stts, const YYLTYPE *loc); -static rb_node_redo_t *rb_node_redo_new(struct parser_params *p, const YYLTYPE *loc); +static rb_node_break_t *rb_node_break_new(struct parser_params *p, NODE *nd_stts, const YYLTYPE *loc, const YYLTYPE *keyword_loc); +static rb_node_next_t *rb_node_next_new(struct parser_params *p, NODE *nd_stts, const YYLTYPE *loc, const YYLTYPE *keyword_loc); +static rb_node_redo_t *rb_node_redo_new(struct parser_params *p, const YYLTYPE *loc, const YYLTYPE *keyword_loc); static rb_node_def_temp_t *rb_node_def_temp_new(struct parser_params *p, const YYLTYPE *loc); static rb_node_def_temp_t *def_head_save(struct parser_params *p, rb_node_def_temp_t *n); -#define NEW_BREAK(s,loc) (NODE *)rb_node_break_new(p,s,loc) -#define NEW_NEXT(s,loc) (NODE *)rb_node_next_new(p,s,loc) -#define NEW_REDO(loc) (NODE *)rb_node_redo_new(p,loc) +#define NEW_BREAK(s,loc,k_loc) (NODE *)rb_node_break_new(p,s,loc,k_loc) +#define NEW_NEXT(s,loc,k_loc) (NODE *)rb_node_next_new(p,s,loc,k_loc) +#define NEW_REDO(loc,k_loc) (NODE *)rb_node_redo_new(p,loc,k_loc) #define NEW_DEF_TEMP(loc) rb_node_def_temp_new(p,loc) /* Make a new internal node, which should not be appeared in the @@ -1454,8 +1453,8 @@ static VALUE rb_backref_error(struct parser_params*,NODE*); static NODE *node_assign(struct parser_params*,NODE*,NODE*,struct lex_context,const YYLTYPE*); static NODE *new_op_assign(struct parser_params *p, NODE *lhs, ID op, NODE *rhs, struct lex_context, const YYLTYPE *loc); -static NODE *new_ary_op_assign(struct parser_params *p, NODE *ary, NODE *args, ID op, NODE *rhs, const YYLTYPE *args_loc, const YYLTYPE *loc); -static NODE *new_attr_op_assign(struct parser_params *p, NODE *lhs, ID atype, ID attr, ID op, NODE *rhs, const YYLTYPE *loc); +static NODE *new_ary_op_assign(struct parser_params *p, NODE *ary, NODE *args, ID op, NODE *rhs, const YYLTYPE *args_loc, const YYLTYPE *loc, const YYLTYPE *call_operator_loc, const YYLTYPE *opening_loc, const YYLTYPE *closing_loc, const YYLTYPE *binary_operator_loc); +static NODE *new_attr_op_assign(struct parser_params *p, NODE *lhs, ID atype, ID attr, ID op, NODE *rhs, const YYLTYPE *loc, const YYLTYPE *call_operator_loc, const YYLTYPE *message_loc, const YYLTYPE *binary_operator_loc); static NODE *new_const_op_assign(struct parser_params *p, NODE *lhs, ID op, NODE *rhs, struct lex_context, const YYLTYPE *loc); static NODE *new_bodystmt(struct parser_params *p, NODE *head, NODE *rescue, NODE *rescue_else, NODE *ensure, const YYLTYPE *loc); @@ -1836,7 +1835,7 @@ clear_block_exit(struct parser_params *p, bool error) { rb_node_exits_t *exits = p->exits; if (!exits) return; - if (error && !compile_for_eval) { + if (error) { for (NODE *e = RNODE(exits); (e = RNODE_EXITS(e)->nd_chain) != 0; ) { switch (nd_type(e)) { case NODE_BREAK: @@ -2004,10 +2003,10 @@ parser_memhash(const void *ptr, long len) ((ptrvar) = str->ptr, \ (lenvar) = str->len) -static inline bool -parser_string_end_with_newline_p(struct parser_params *p, rb_parser_string_t *str) +static inline int +parser_string_char_at_end(struct parser_params *p, rb_parser_string_t *str, int when_empty) { - return PARSER_STRING_LEN(str) > 0 && PARSER_STRING_END(str)[-1] == '\n'; + return PARSER_STRING_LEN(str) > 0 ? (unsigned char)PARSER_STRING_END(str)[-1] : when_empty; } static rb_parser_string_t * @@ -2048,15 +2047,15 @@ rb_str_to_parser_string(rb_parser_t *p, VALUE str) RB_GC_GUARD(str); return ret; } -#endif -static void +void rb_parser_string_free(rb_parser_t *p, rb_parser_string_t *str) { if (!str) return; xfree(PARSER_STRING_PTR(str)); xfree(str); } +#endif static st_index_t rb_parser_str_hash(rb_parser_string_t *str) @@ -2203,8 +2202,7 @@ rb_parser_enc_associate(struct parser_params *p, rb_parser_string_t *str, rb_enc { if (rb_parser_str_get_encoding(str) == enc) return str; - if (!PARSER_ENC_CODERANGE_ASCIIONLY(str) || - !rb_enc_asciicompat(enc)) { + if (!PARSER_ENC_CODERANGE_ASCIIONLY(str)) { PARSER_ENC_CODERANGE_CLEAR(str); } rb_parser_string_set_encoding(str, enc); @@ -2217,30 +2215,25 @@ rb_parser_is_ascii_string(struct parser_params *p, rb_parser_string_t *str) return rb_parser_enc_str_coderange(p, str) == RB_PARSER_ENC_CODERANGE_7BIT; } -static int -rb_parser_enc_str_asciionly_p(struct parser_params *p, rb_parser_string_t *str) +static rb_encoding * +rb_parser_enc_compatible(struct parser_params *p, rb_parser_string_t *str1, rb_parser_string_t *str2) { - rb_encoding *enc = rb_parser_str_get_encoding(str); + rb_encoding *enc1 = rb_parser_str_get_encoding(str1); + rb_encoding *enc2 = rb_parser_str_get_encoding(str2); - if (!rb_enc_asciicompat(enc)) - return FALSE; - else if (rb_parser_is_ascii_string(p, str)) - return TRUE; - return FALSE; -} + if (enc1 == NULL || enc2 == NULL) + return 0; -static rb_encoding * -rb_parser_enc_compatible_latter(struct parser_params *p, rb_parser_string_t *str1, rb_parser_string_t *str2, rb_encoding *enc1, rb_encoding *enc2) -{ - int cr1, cr2; + if (enc1 == enc2) { + return enc1; + } if (PARSER_STRING_LEN(str2) == 0) return enc1; if (PARSER_STRING_LEN(str1) == 0) - return (rb_enc_asciicompat(enc1) && rb_parser_enc_str_asciionly_p(p, str2)) ? enc1 : enc2; - if (!rb_enc_asciicompat(enc1) || !rb_enc_asciicompat(enc2)) { - return 0; - } + return rb_parser_is_ascii_string(p, str2) ? enc1 : enc2; + + int cr1, cr2; cr1 = rb_parser_enc_str_coderange(p, str1); cr2 = rb_parser_enc_str_coderange(p, str2); @@ -2261,22 +2254,6 @@ rb_parser_enc_compatible_latter(struct parser_params *p, rb_parser_string_t *str return 0; } -static rb_encoding * -rb_parser_enc_compatible(struct parser_params *p, rb_parser_string_t *str1, rb_parser_string_t *str2) -{ - rb_encoding *enc1 = rb_parser_str_get_encoding(str1); - rb_encoding *enc2 = rb_parser_str_get_encoding(str2); - - if (enc1 == NULL || enc2 == NULL) - return 0; - - if (enc1 == enc2) { - return enc1; - } - - return rb_parser_enc_compatible_latter(p, str1, str2, enc1, enc2); -} - static void rb_parser_str_modify(rb_parser_string_t *str) { @@ -2344,6 +2321,9 @@ rb_parser_str_buf_cat(struct parser_params *p, rb_parser_string_t *str, const ch return str; } +#define parser_str_cat(str, ptr, len) rb_parser_str_buf_cat(p, str, ptr, len) +#define parser_str_cat_cstr(str, lit) rb_parser_str_buf_cat(p, str, lit, strlen(lit)) + static rb_parser_string_t * rb_parser_enc_cr_str_buf_cat(struct parser_params *p, rb_parser_string_t *str, const char *ptr, long len, rb_encoding *ptr_enc, int ptr_cr, int *ptr_cr_ret) @@ -2409,7 +2389,7 @@ rb_parser_enc_cr_str_buf_cat(struct parser_params *p, rb_parser_string_t *str, c if (len < 0) { compile_error(p, "negative string size (or size too big)"); } - rb_parser_str_buf_cat(p, str, ptr, len); + parser_str_cat(str, ptr, len); PARSER_ENCODING_CODERANGE_SET(str, res_enc, res_cr); return str; @@ -2918,63 +2898,74 @@ rb_parser_ary_free(rb_parser_t *p, rb_parser_ary_t *ary) /* * inlining rules */ -%rule %inline ident_or_const: tIDENTIFIER - | tCONSTANT - ; +%rule %inline ident_or_const + : tIDENTIFIER + | tCONSTANT + ; + +%rule %inline user_or_keyword_variable + : user_variable + | keyword_variable + ; /* * parameterizing rules */ -%rule f_opt(value) : f_arg_asgn f_eq value - { - p->ctxt.in_argdef = 1; - $$ = NEW_OPT_ARG(assignable(p, $1, $3, &@$), &@$); - /*% ripper: [$:$, $:3] %*/ - } - ; - -%rule f_optarg(value) : f_opt(value) - { - $$ = $1; - /*% ripper: rb_ary_new3(1, $:1) %*/ - } - | f_optarg(value) ',' f_opt(value) - { - $$ = opt_arg_append($1, $3); - /*% ripper: rb_ary_push($:1, $:3) %*/ - } - ; - -%rule f_kwarg(kw) : kw - { - $$ = $1; - /*% ripper: rb_ary_new3(1, $:1) %*/ - } - | f_kwarg(kw) ',' kw - { - $$ = kwd_append($1, $3); - /*% ripper: rb_ary_push($:1, $:3) %*/ - } - ; - -%rule opt_args_tail(tail) : ',' tail - { - $$ = $2; - /*% ripper: $:2 %*/ - } - | /* none */ - { - $$ = new_args_tail(p, 0, 0, 0, &@0); - /*% ripper: [Qnil, Qnil, Qnil] %*/ - } - ; - -%rule words(begin, word_list): begin ' '+ word_list tSTRING_END - { - $$ = make_list($3, &@$); - /*% ripper: array!($:3) %*/ - } - ; +%rule f_opt(value) + : f_arg_asgn f_eq value + { + p->ctxt.in_argdef = 1; + $$ = NEW_OPT_ARG(assignable(p, $1, $3, &@$), &@$); + /*% ripper: [$:$, $:3] %*/ + } + ; + +%rule f_optarg(value) + : f_opt(value) + { + $$ = $1; + /*% ripper: rb_ary_new3(1, $:1) %*/ + } + | f_optarg(value) ',' f_opt(value) + { + $$ = opt_arg_append($1, $3); + /*% ripper: rb_ary_push($:1, $:3) %*/ + } + ; + +%rule f_kwarg(kw) + : kw + { + $$ = $1; + /*% ripper: rb_ary_new3(1, $:1) %*/ + } + | f_kwarg(kw) ',' kw + { + $$ = kwd_append($1, $3); + /*% ripper: rb_ary_push($:1, $:3) %*/ + } + ; + +%rule opt_args_tail(tail) + : ',' tail + { + $$ = $2; + /*% ripper: $:2 %*/ + } + | /* none */ + { + $$ = new_args_tail(p, 0, 0, 0, &@0); + /*% ripper: [Qnil, Qnil, Qnil] %*/ + } + ; + +%rule words(begin, word_list) + : begin ' '+ word_list tSTRING_END + { + $$ = make_list($3, &@$); + /*% ripper: array!($:3) %*/ + } + ; %% program : { @@ -3128,12 +3119,12 @@ k_END : keyword_END lex_ctxt stmt : keyword_alias fitem {SET_LEX_STATE(EXPR_FNAME|EXPR_FITEM);} fitem { - $$ = NEW_ALIAS($2, $4, &@$); + $$ = NEW_ALIAS($2, $4, &@$, &@1); /*% ripper: alias!($:2, $:4) %*/ } | keyword_alias tGVAR tGVAR { - $$ = NEW_VALIAS($2, $3, &@$); + $$ = NEW_VALIAS($2, $3, &@$, &@1); /*% ripper: var_alias!($:2, $:3) %*/ } | keyword_alias tGVAR tBACK_REF @@ -3141,7 +3132,7 @@ stmt : keyword_alias fitem {SET_LEX_STATE(EXPR_FNAME|EXPR_FITEM);} fitem char buf[2]; buf[0] = '$'; buf[1] = (char)RNODE_BACK_REF($3)->nd_nth; - $$ = NEW_VALIAS($2, rb_intern2(buf, 2), &@$); + $$ = NEW_VALIAS($2, rb_intern2(buf, 2), &@$, &@1); /*% ripper: var_alias!($:2, $:3) %*/ } | keyword_alias tGVAR tNTH_REF @@ -3156,6 +3147,7 @@ stmt : keyword_alias fitem {SET_LEX_STATE(EXPR_FNAME|EXPR_FITEM);} fitem | keyword_undef undef_list { nd_set_first_loc($2, @1.beg_pos); + RNODE_UNDEF($2)->keyword_loc = @1; $$ = $2; /*% ripper: undef!($:2) %*/ } @@ -3175,10 +3167,10 @@ stmt : keyword_alias fitem {SET_LEX_STATE(EXPR_FNAME|EXPR_FITEM);} fitem { clear_block_exit(p, false); if ($1 && nd_type_p($1, NODE_BEGIN)) { - $$ = NEW_WHILE(cond(p, $3, &@3), RNODE_BEGIN($1)->nd_body, 0, &@$); + $$ = NEW_WHILE(cond(p, $3, &@3), RNODE_BEGIN($1)->nd_body, 0, &@$, &@2, &NULL_LOC); } else { - $$ = NEW_WHILE(cond(p, $3, &@3), $1, 1, &@$); + $$ = NEW_WHILE(cond(p, $3, &@3), $1, 1, &@$, &@2, &NULL_LOC); } /*% ripper: while_mod!($:3, $:1) %*/ } @@ -3186,10 +3178,10 @@ stmt : keyword_alias fitem {SET_LEX_STATE(EXPR_FNAME|EXPR_FITEM);} fitem { clear_block_exit(p, false); if ($1 && nd_type_p($1, NODE_BEGIN)) { - $$ = NEW_UNTIL(cond(p, $3, &@3), RNODE_BEGIN($1)->nd_body, 0, &@$); + $$ = NEW_UNTIL(cond(p, $3, &@3), RNODE_BEGIN($1)->nd_body, 0, &@$, &@2, &NULL_LOC); } else { - $$ = NEW_UNTIL(cond(p, $3, &@3), $1, 1, &@$); + $$ = NEW_UNTIL(cond(p, $3, &@3), $1, 1, &@$, &@2, &NULL_LOC); } /*% ripper: until_mod!($:3, $:1) %*/ } @@ -3263,13 +3255,13 @@ command_asgn : lhs '=' lex_ctxt command_rhs } | primary_value '[' opt_call_args rbracket tOP_ASGN lex_ctxt command_rhs { - $$ = new_ary_op_assign(p, $1, $3, $5, $7, &@3, &@$); + $$ = new_ary_op_assign(p, $1, $3, $5, $7, &@3, &@$, &NULL_LOC, &@2, &@4, &@5); /*% ripper: opassign!(aref_field!($:1, $:3), $:5, $:7) %*/ } | primary_value call_op ident_or_const tOP_ASGN lex_ctxt command_rhs { - $$ = new_attr_op_assign(p, $1, $2, $3, $4, $6, &@$); + $$ = new_attr_op_assign(p, $1, $2, $3, $4, $6, &@$, &@2, &@3, &@4); /*% ripper: opassign!(field!($:1, $:2, $:3), $:4, $:6) %*/ } | primary_value tCOLON2 tCONSTANT tOP_ASGN lex_ctxt command_rhs @@ -3280,7 +3272,7 @@ command_asgn : lhs '=' lex_ctxt command_rhs } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN lex_ctxt command_rhs { - $$ = new_attr_op_assign(p, $1, idCOLON2, $3, $4, $6, &@$); + $$ = new_attr_op_assign(p, $1, idCOLON2, $3, $4, $6, &@$, &@2, &@3, &@4); /*% ripper: opassign!(field!($:1, $:2, $:3), $:4, $:6) %*/ } | defn_head[head] f_opt_paren_args[args] '=' endless_command[bodystmt] @@ -3374,7 +3366,7 @@ expr : command_call pop_pktbl(p, $p_pktbl); pop_pvtbl(p, $p_pvtbl); p->ctxt.in_kwarg = $ctxt.in_kwarg; - $$ = NEW_CASE3($arg, NEW_IN($body, 0, 0, &@body), &@$); + $$ = NEW_CASE3($arg, NEW_IN($body, 0, 0, &@body), &@$, &NULL_LOC, &NULL_LOC); /*% ripper: case!($:arg, in!($:body, Qnil, Qnil)) %*/ } | arg keyword_in @@ -3387,7 +3379,7 @@ expr : command_call pop_pktbl(p, $p_pktbl); pop_pvtbl(p, $p_pvtbl); p->ctxt.in_kwarg = $ctxt.in_kwarg; - $$ = NEW_CASE3($arg, NEW_IN($body, NEW_TRUE(&@body), NEW_FALSE(&@body), &@body), &@$); + $$ = NEW_CASE3($arg, NEW_IN($body, NEW_TRUE(&@body), NEW_FALSE(&@body), &@body), &@$, &NULL_LOC, &NULL_LOC); /*% ripper: case!($:arg, in!($:body, Qnil, Qnil)) %*/ } | arg %prec tLBRACE_ARG @@ -3417,7 +3409,6 @@ defn_head : k_def def_name defs_head : k_def singleton dot_or_colon { SET_LEX_STATE(EXPR_FNAME); - p->ctxt.in_argdef = 1; } def_name { @@ -3530,21 +3521,21 @@ command : fcall command_args %prec tLOWEST } | k_return call_args { - $$ = NEW_RETURN(ret_args(p, $2), &@$); + $$ = NEW_RETURN(ret_args(p, $2), &@$, &@1); /*% ripper: return!($:2) %*/ } | keyword_break call_args { NODE *args = 0; args = ret_args(p, $2); - $$ = add_block_exit(p, NEW_BREAK(args, &@$)); + $$ = add_block_exit(p, NEW_BREAK(args, &@$, &@1)); /*% ripper: break!($:2) %*/ } | keyword_next call_args { NODE *args = 0; args = ret_args(p, $2); - $$ = add_block_exit(p, NEW_NEXT(args, &@$)); + $$ = add_block_exit(p, NEW_NEXT(args, &@$, &@1)); /*% ripper: next!($:2) %*/ } ; @@ -3649,12 +3640,7 @@ mlhs_post : mlhs_item } ; -mlhs_node : user_variable - { - /*% ripper: var_field!($:1) %*/ - $$ = assignable(p, $1, 0, &@$); - } - | keyword_variable +mlhs_node : user_or_keyword_variable { /*% ripper: var_field!($:1) %*/ $$ = assignable(p, $1, 0, &@$); @@ -3699,12 +3685,7 @@ mlhs_node : user_variable } ; -lhs : user_variable - { - /*% ripper: var_field!($:1) %*/ - $$ = assignable(p, $1, 0, &@$); - } - | keyword_variable +lhs : user_or_keyword_variable { /*% ripper: var_field!($:1) %*/ $$ = assignable(p, $1, 0, &@$); @@ -3864,22 +3845,22 @@ arg : lhs '=' lex_ctxt arg_rhs } | primary_value '[' opt_call_args rbracket tOP_ASGN lex_ctxt arg_rhs { - $$ = new_ary_op_assign(p, $1, $3, $5, $7, &@3, &@$); + $$ = new_ary_op_assign(p, $1, $3, $5, $7, &@3, &@$, &NULL_LOC, &@2, &@4, &@5); /*% ripper: opassign!(aref_field!($:1, $:3), $:5, $:7) %*/ } | primary_value call_op tIDENTIFIER tOP_ASGN lex_ctxt arg_rhs { - $$ = new_attr_op_assign(p, $1, $2, $3, $4, $6, &@$); + $$ = new_attr_op_assign(p, $1, $2, $3, $4, $6, &@$, &@2, &@3, &@4); /*% ripper: opassign!(field!($:1, $:2, $:3), $:4, $:6) %*/ } | primary_value call_op tCONSTANT tOP_ASGN lex_ctxt arg_rhs { - $$ = new_attr_op_assign(p, $1, $2, $3, $4, $6, &@$); + $$ = new_attr_op_assign(p, $1, $2, $3, $4, $6, &@$, &@2, &@3, &@4); /*% ripper: opassign!(field!($:1, $:2, $:3), $:4, $:6) %*/ } | primary_value tCOLON2 tIDENTIFIER tOP_ASGN lex_ctxt arg_rhs { - $$ = new_attr_op_assign(p, $1, idCOLON2, $3, $4, $6, &@$); + $$ = new_attr_op_assign(p, $1, idCOLON2, $3, $4, $6, &@$, &@2, &@3, &@4); /*% ripper: opassign!(field!($:1, $:2, $:3), $:4, $:6) %*/ } | primary_value tCOLON2 tCONSTANT tOP_ASGN lex_ctxt arg_rhs @@ -4310,13 +4291,13 @@ command_args : { block_arg : tAMPER arg_value { - $$ = NEW_BLOCK_PASS($2, &@$); + $$ = NEW_BLOCK_PASS($2, &@$, &@1); /*% ripper: $:2 %*/ } | tAMPER { forwarding_arg_check(p, idFWD_BLOCK, idFWD_ALL, "block"); - $$ = NEW_BLOCK_PASS(NEW_LVAR(idFWD_BLOCK, &@1), &@$); + $$ = NEW_BLOCK_PASS(NEW_LVAR(idFWD_BLOCK, &@1), &@$, &@1); /*% ripper: Qnil %*/ } ; @@ -4336,36 +4317,36 @@ opt_block_arg : ',' block_arg /* value */ args : arg_value { - $$ = NEW_LIST($1, &@$); - /*% ripper: args_add!(args_new!, $:1) %*/ + $$ = NEW_LIST($arg_value, &@$); + /*% ripper: args_add!(args_new!, $:arg_value) %*/ } | arg_splat { - $$ = NEW_SPLAT($arg_splat, &@$); + $$ = $arg_splat; /*% ripper: args_add_star!(args_new!, $:arg_splat) %*/ } - | args ',' arg_value + | args[non_last_args] ',' arg_value { - $$ = last_arg_append(p, $1, $3, &@$); - /*% ripper: args_add!($:1, $:3) %*/ + $$ = last_arg_append(p, $non_last_args, $arg_value, &@$); + /*% ripper: args_add!($:non_last_args, $:arg_value) %*/ } - | args ',' arg_splat + | args[non_last_args] ',' arg_splat { - $$ = rest_arg_append(p, $1, $3, &@$); - /*% ripper: args_add_star!($:1, $:3) %*/ + $$ = rest_arg_append(p, $non_last_args, RNODE_SPLAT($arg_splat)->nd_head, &@$); + /*% ripper: args_add_star!($:non_last_args, $:arg_splat) %*/ } ; /* value */ arg_splat : tSTAR arg_value { - $$ = $2; - /*% ripper: $:2 %*/ + $$ = NEW_SPLAT($arg_value, &@$, &@tSTAR); + /*% ripper: $:arg_value %*/ } | tSTAR /* none */ { forwarding_arg_check(p, idFWD_REST, idFWD_ALL, "rest"); - $$ = NEW_LVAR(idFWD_REST, &@1); + $$ = NEW_SPLAT(NEW_LVAR(idFWD_REST, &@tSTAR), &@$, &@tSTAR); /*% ripper: Qnil %*/ } ; @@ -4378,18 +4359,18 @@ mrhs_arg : mrhs /* value */ mrhs : args ',' arg_value { - $$ = last_arg_append(p, $1, $3, &@$); - /*% ripper: mrhs_add!(mrhs_new_from_args!($:1), $:3) %*/ + $$ = last_arg_append(p, $args, $arg_value, &@$); + /*% ripper: mrhs_add!(mrhs_new_from_args!($:args), $:arg_value) %*/ } | args ',' tSTAR arg_value { - $$ = rest_arg_append(p, $1, $4, &@$); - /*% ripper: mrhs_add_star!(mrhs_new_from_args!($:1), $:4) %*/ + $$ = rest_arg_append(p, $args, $arg_value, &@$); + /*% ripper: mrhs_add_star!(mrhs_new_from_args!($:args), $:arg_value) %*/ } | tSTAR arg_value { - $$ = NEW_SPLAT($2, &@$); - /*% ripper: mrhs_add_star!(mrhs_new!, $:2) %*/ + $$ = NEW_SPLAT($arg_value, &@$, &@tSTAR); + /*% ripper: mrhs_add_star!(mrhs_new!, $:arg_value) %*/ } ; @@ -4456,7 +4437,7 @@ primary : literal } | k_return { - $$ = NEW_RETURN(0, &@$); + $$ = NEW_RETURN(0, &@$, &@1); /*% ripper: return0! %*/ } | k_yield '(' call_args rparen @@ -4526,7 +4507,7 @@ primary : literal k_end { restore_block_exit(p, $1); - $$ = NEW_WHILE(cond(p, $2, &@2), $3, 1, &@$); + $$ = NEW_WHILE(cond(p, $2, &@2), $3, 1, &@$, &@1, &@4); fixpos($$, $2); /*% ripper: while!($:2, $:3) %*/ } @@ -4535,7 +4516,7 @@ primary : literal k_end { restore_block_exit(p, $1); - $$ = NEW_UNTIL(cond(p, $2, &@2), $3, 1, &@$); + $$ = NEW_UNTIL(cond(p, $2, &@2), $3, 1, &@$, &@1, &@4); fixpos($$, $2); /*% ripper: until!($:2, $:3) %*/ } @@ -4549,7 +4530,7 @@ primary : literal { if (CASE_LABELS_ENABLED_P(p->case_labels)) st_free_table(p->case_labels); p->case_labels = $4; - $$ = NEW_CASE($2, $5, &@$); + $$ = NEW_CASE($2, $5, &@$, &@1, &@6); fixpos($$, $2); /*% ripper: case!($:2, $:5) %*/ } @@ -4563,14 +4544,14 @@ primary : literal { if (p->case_labels) st_free_table(p->case_labels); p->case_labels = $3; - $$ = NEW_CASE2($4, &@$); + $$ = NEW_CASE2($4, &@$, &@1, &@5); /*% ripper: case!(Qnil, $:4) %*/ } | k_case expr_value terms? p_case_body k_end { - $$ = NEW_CASE3($2, $4, &@$); + $$ = NEW_CASE3($2, $4, &@$, &@1, &@5); /*% ripper: case!($:2, $:4) %*/ } | k_for for_var keyword_in expr_value_do @@ -4700,17 +4681,17 @@ primary : literal } | keyword_break { - $$ = add_block_exit(p, NEW_BREAK(0, &@$)); + $$ = add_block_exit(p, NEW_BREAK(0, &@$, &@1)); /*% ripper: break!(args_new!) %*/ } | keyword_next { - $$ = add_block_exit(p, NEW_NEXT(0, &@$)); + $$ = add_block_exit(p, NEW_NEXT(0, &@$, &@1)); /*% ripper: next!(args_new!) %*/ } | keyword_redo { - $$ = add_block_exit(p, NEW_REDO(&@$)); + $$ = add_block_exit(p, NEW_REDO(&@$, &@1)); /*% ripper: redo! %*/ } | keyword_retry @@ -5194,7 +5175,6 @@ lambda : tLAMBDA[lpar] { token_info_push(p, "->", &@1); $$ = dyna_push(p); - p->lex.lpar_beg = p->lex.paren_nest; }[dyna] max_numparam numparam it_id allow_exits f_larglist[args] @@ -5227,7 +5207,7 @@ lambda : tLAMBDA[lpar] f_larglist : '(' f_args opt_bv_decl ')' { p->ctxt.in_argdef = 0; - $$ = $2; + $$ = $f_args; p->max_numparam = ORDINAL_PARAM; /*% ripper: paren!($:2) %*/ } @@ -5236,7 +5216,7 @@ f_larglist : '(' f_args opt_bv_decl ')' p->ctxt.in_argdef = 0; if (!args_info_empty_p(&$1->nd_ainfo)) p->max_numparam = ORDINAL_PARAM; - $$ = $1; + $$ = $f_args; } ; @@ -5416,25 +5396,25 @@ do_body : { case_args : arg_value { - check_literal_when(p, $1, &@1); - $$ = NEW_LIST($1, &@$); - /*% ripper: args_add!(args_new!, $:1) %*/ + check_literal_when(p, $arg_value, &@arg_value); + $$ = NEW_LIST($arg_value, &@$); + /*% ripper: args_add!(args_new!, $:arg_value) %*/ } | tSTAR arg_value { - $$ = NEW_SPLAT($2, &@$); - /*% ripper: args_add_star!(args_new!, $:2) %*/ + $$ = NEW_SPLAT($arg_value, &@$, &@tSTAR); + /*% ripper: args_add_star!(args_new!, $:arg_value) %*/ } - | case_args ',' arg_value + | case_args[non_last_args] ',' arg_value { - check_literal_when(p, $3, &@3); - $$ = last_arg_append(p, $1, $3, &@$); - /*% ripper: args_add!($:1, $:3) %*/ + check_literal_when(p, $arg_value, &@arg_value); + $$ = last_arg_append(p, $non_last_args, $arg_value, &@$); + /*% ripper: args_add!($:non_last_args, $:arg_value) %*/ } - | case_args ',' tSTAR arg_value + | case_args[non_last_args] ',' tSTAR arg_value { - $$ = rest_arg_append(p, $1, $4, &@$); - /*% ripper: args_add_star!($:1, $:4) %*/ + $$ = rest_arg_append(p, $non_last_args, $arg_value, &@$); + /*% ripper: args_add_star!($:non_last_args, $:arg_value) %*/ } ; @@ -5442,7 +5422,7 @@ case_body : k_when case_args then compstmt cases { - $$ = NEW_WHEN($2, $4, $5, &@$); + $$ = NEW_WHEN($2, $4, $5, &@$, &@1, &@3); fixpos($$, $2); /*% ripper: when!($:2, $:4, $:5) %*/ } @@ -5543,7 +5523,7 @@ p_as : p_expr tASSOC p_variable p_alt : p_alt '|' p_expr_basic { - $$ = NEW_OR($1, $3, &@$); + $$ = NEW_OR($1, $3, &@$, &@2); /*% ripper: binary!($:1, ID2VAL(idOr), $:3) %*/ } | p_expr_basic @@ -6329,12 +6309,7 @@ var_ref : user_variable } ; -var_lhs : user_variable - { - /*% ripper: var_field!($:1) %*/ - $$ = assignable(p, $1, 0, &@$); - } - | keyword_variable +var_lhs : user_or_keyword_variable { /*% ripper: var_field!($:1) %*/ $$ = assignable(p, $1, 0, &@$); @@ -6422,8 +6397,16 @@ args_tail : f_kwarg(f_kw) ',' f_kwrest opt_f_block_arg } | args_forward { - add_forwarding_args(p); - $$ = new_args_tail(p, 0, $1, arg_FWD_BLOCK, &@1); + ID fwd = $args_forward; + if (lambda_beginning_p() || + (p->lex.lpar_beg >= 0 && p->lex.lpar_beg+1 == p->lex.paren_nest)) { + yyerror0("unexpected ... in lambda argument"); + fwd = 0; + } + else { + add_forwarding_args(p); + } + $$ = new_args_tail(p, 0, fwd, arg_FWD_BLOCK, &@1); $$->nd_ainfo.forwarding = 1; /*% ripper: [Qnil, $:1, Qnil] %*/ } @@ -6737,8 +6720,14 @@ singleton : var_ref value_expr($1); $$ = $1; } - | '(' {SET_LEX_STATE(EXPR_BEG);} expr rparen + | '(' + { + SET_LEX_STATE(EXPR_BEG); + p->ctxt.in_argdef = 0; + } + expr rparen { + p->ctxt.in_argdef = 1; NODE *expr = last_expr_node($3); switch (nd_type(expr)) { case NODE_STR: @@ -6908,11 +6897,7 @@ static void tokaddmbc(struct parser_params *p, int c, rb_encoding *enc); static enum yytokentype parse_string(struct parser_params*,rb_strterm_literal_t*); static enum yytokentype here_document(struct parser_params*,rb_strterm_heredoc_t*); -#ifndef RIPPER -#define set_parser_s_value(x) (void)(x) -#else -#define set_parser_s_value(x) (p->s_value = (x)) -#endif +#define set_parser_s_value(x) (ifdef_ripper(p->s_value = (x), (void)0)) # define set_yylval_node(x) { \ YYLTYPE _cur_loc; \ @@ -6922,8 +6907,8 @@ static enum yytokentype here_document(struct parser_params*,rb_strterm_heredoc_t } # define set_yylval_str(x) \ do { \ - set_yylval_node(NEW_STR(rb_str_to_parser_string(p, x), &_cur_loc)); \ - set_parser_s_value(x); \ + set_yylval_node(NEW_STR(x, &_cur_loc)); \ + set_parser_s_value(rb_str_new_mutable_parser_string(x)); \ } while(0) # define set_yylval_num(x) { \ yylval.num = (x); \ @@ -6984,14 +6969,13 @@ rb_parser_str_escape(struct parser_params *p, rb_parser_string_t *str) const char *prev = ptr; char charbuf[5] = {'\\', 'x', 0, 0, 0}; rb_parser_string_t * result = rb_parser_string_new(p, 0, 0); - int asciicompat = rb_enc_asciicompat(enc); while (ptr < pend) { unsigned int c; const char *cc; int n = rb_enc_precise_mbclen(ptr, pend, enc); if (!MBCLEN_CHARFOUND_P(n)) { - if (ptr > prev) rb_parser_str_buf_cat(p, result, prev, ptr - prev); + if (ptr > prev) parser_str_cat(result, prev, ptr - prev); n = rb_enc_mbminlen(enc); if (pend < ptr + n) n = (int)(pend - ptr); @@ -7000,7 +6984,7 @@ rb_parser_str_escape(struct parser_params *p, rb_parser_string_t *str) charbuf[2] = (c < 10) ? '0' + c : 'A' + c - 10; c = *ptr & 0x0f; charbuf[3] = (c < 10) ? '0' + c : 'A' + c - 10; - rb_parser_str_buf_cat(p, result, charbuf, 4); + parser_str_cat(result, charbuf, 4); prev = ++ptr; } continue; @@ -7010,22 +6994,22 @@ rb_parser_str_escape(struct parser_params *p, rb_parser_string_t *str) ptr += n; cc = escaped_char(c); if (cc) { - if (ptr - n > prev) rb_parser_str_buf_cat(p, result, prev, ptr - n - prev); - rb_parser_str_buf_cat(p, result, cc, strlen(cc)); + if (ptr - n > prev) parser_str_cat(result, prev, ptr - n - prev); + parser_str_cat_cstr(result, cc); prev = ptr; } - else if (asciicompat && rb_enc_isascii(c, enc) && ISPRINT(c)) { + else if (rb_enc_isascii(c, enc) && ISPRINT(c)) { } else { if (ptr - n > prev) { - rb_parser_str_buf_cat(p, result, prev, ptr - n - prev); + parser_str_cat(result, prev, ptr - n - prev); prev = ptr - n; } - rb_parser_str_buf_cat(p, result, prev, ptr - prev); + parser_str_cat(result, prev, ptr - prev); prev = ptr; } } - if (ptr > prev) rb_parser_str_buf_cat(p, result, prev, ptr - prev); + if (ptr > prev) parser_str_cat(result, prev, ptr - prev); return result; } @@ -7350,7 +7334,7 @@ ruby_show_error_line(struct parser_params *p, VALUE errbuf, const YYLTYPE *yyllo } if (RTEST(errbuf)) { mesg = rb_attr_get(errbuf, idMesg); - if (RSTRING_LEN(mesg) > 0 && *(RSTRING_END(mesg)-1) != '\n') + if (char_at_end(p, mesg, '\n') != '\n') rb_str_cat_cstr(mesg, "\n"); } else { @@ -7689,21 +7673,24 @@ enum string_type { str_dsym = (STR_FUNC_SYMBOL|STR_FUNC_EXPAND) }; -static VALUE +static rb_parser_string_t * parser_str_new(struct parser_params *p, const char *ptr, long len, rb_encoding *enc, int func, rb_encoding *enc0) { - VALUE str; + rb_parser_string_t *pstr; + + pstr = rb_parser_encoding_string_new(p, ptr, len, enc); - str = rb_enc_str_new(ptr, len, enc); - if (!(func & STR_FUNC_REGEXP) && rb_enc_asciicompat(enc)) { - if (is_ascii_string(str)) { + if (!(func & STR_FUNC_REGEXP)) { + if (rb_parser_is_ascii_string(p, pstr)) { } else if (rb_is_usascii_enc((void *)enc0) && enc != rb_utf8_encoding()) { - rb_enc_associate(str, rb_ascii8bit_encoding()); + /* everything is valid in ASCII-8BIT */ + enc = rb_ascii8bit_encoding(); + PARSER_ENCODING_CODERANGE_SET(pstr, enc, RB_PARSER_ENC_CODERANGE_VALID); } } - return str; + return pstr; } static int @@ -7743,7 +7730,7 @@ parser_add_delayed_token(struct parser_params *p, const char *tok, const char *e if (tok < end) { if (has_delayed_token(p)) { - bool next_line = parser_string_end_with_newline_p(p, p->delayed.token); + bool next_line = parser_string_char_at_end(p, p->delayed.token, 0) == '\n'; int end_line = (next_line ? 1 : 0) + p->delayed.end_line; int end_col = (next_line ? 0 : p->delayed.end_col); if (end_line != p->ruby_sourceline || end_col != tok - p->lex.pbeg) { @@ -7756,7 +7743,7 @@ parser_add_delayed_token(struct parser_params *p, const char *tok, const char *e p->delayed.beg_line = p->ruby_sourceline; p->delayed.beg_col = rb_long2int(tok - p->lex.pbeg); } - rb_parser_str_buf_cat(p, p->delayed.token, tok, end - tok); + parser_str_cat(p->delayed.token, tok, end - tok); p->delayed.end_line = p->ruby_sourceline; p->delayed.end_col = rb_long2int(end - p->lex.pbeg); p->lex.ptok = end; @@ -8752,7 +8739,7 @@ parse_string(struct parser_params *p, rb_strterm_literal_t *quote) int c, space = 0; rb_encoding *enc = p->enc; rb_encoding *base_enc = 0; - VALUE lit; + rb_parser_string_t *lit; if (func & STR_FUNC_TERM) { if (func & STR_FUNC_QWORDS) nextc(p); /* delayed term */ @@ -9157,7 +9144,7 @@ here_document(struct parser_params *p, rb_strterm_heredoc_t *here) int c, func, indent = 0; const char *eos, *ptr, *ptr_end; long len; - VALUE str = 0; + rb_parser_string_t *str = 0; rb_encoding *enc = p->enc; rb_encoding *base_enc = 0; int bol; @@ -9177,7 +9164,7 @@ here_document(struct parser_params *p, rb_strterm_heredoc_t *here) } else { if ((len = p->lex.pcur - p->lex.ptok) > 0) { - if (!(func & STR_FUNC_REGEXP) && rb_enc_asciicompat(enc)) { + if (!(func & STR_FUNC_REGEXP)) { int cr = ENC_CODERANGE_UNKNOWN; rb_str_coderange_scan_restartable(p->lex.ptok, p->lex.pcur, enc, &cr); if (cr != ENC_CODERANGE_7BIT && @@ -9243,16 +9230,17 @@ here_document(struct parser_params *p, rb_strterm_heredoc_t *here) } if (str) - rb_str_cat(str, ptr, ptr_end - ptr); + parser_str_cat(str, ptr, ptr_end - ptr); else - str = STR_NEW(ptr, ptr_end - ptr); - if (!lex_eol_ptr_p(p, ptr_end)) rb_str_cat(str, "\n", 1); + str = rb_parser_encoding_string_new(p, ptr, ptr_end - ptr, enc); + if (!lex_eol_ptr_p(p, ptr_end)) parser_str_cat_cstr(str, "\n"); lex_goto_eol(p); if (p->heredoc_indent > 0) { goto flush_str; } if (nextc(p) == -1) { if (str) { + rb_parser_string_free(p, str); str = 0; } goto error; @@ -10058,7 +10046,7 @@ parse_qmark(struct parser_params *p, int space_seen) { rb_encoding *enc; register int c; - VALUE lit; + rb_parser_string_t *lit; if (IS_END()) { SET_LEX_STATE(EXPR_VALUE); @@ -10107,7 +10095,7 @@ parse_qmark(struct parser_params *p, int space_seen) enc = rb_utf8_encoding(); tokadd_utf8(p, &enc, -1, 0, 0); } - else if (!ISASCII(c = peekc(p))) { + else if (!ISASCII(c = peekc(p)) && c != -1) { nextc(p); if (tokadd_mbchar(p, c) == -1) return 0; } @@ -11035,6 +11023,7 @@ parser_yylex(struct parser_params *p) if (c == '>') { SET_LEX_STATE(EXPR_ENDFN); yylval.num = p->lex.lpar_beg; + p->lex.lpar_beg = p->lex.paren_nest; return tLAMBDA; } if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous(p, '-'))) { @@ -11054,17 +11043,13 @@ parser_yylex(struct parser_params *p) SET_LEX_STATE(EXPR_BEG); if ((c = nextc(p)) == '.') { if ((c = nextc(p)) == '.') { - if (p->ctxt.in_argdef) { + if (p->ctxt.in_argdef || IS_LABEL_POSSIBLE()) { SET_LEX_STATE(EXPR_ENDARG); return tBDOT3; } if (p->lex.paren_nest == 0 && looking_at_eol_p(p)) { rb_warn0("... at EOL, should be parenthesized?"); } - else if (p->lex.lpar_beg >= 0 && p->lex.lpar_beg+1 == p->lex.paren_nest) { - if (IS_lex_state_for(last_state, EXPR_LABEL)) - return tDOT3; - } return is_beg ? tBDOT3 : tDOT3; } pushback(p, c); @@ -11492,30 +11477,33 @@ rb_node_ensure_new(struct parser_params *p, NODE *nd_head, NODE *nd_ensr, const } static rb_node_and_t * -rb_node_and_new(struct parser_params *p, NODE *nd_1st, NODE *nd_2nd, const YYLTYPE *loc) +rb_node_and_new(struct parser_params *p, NODE *nd_1st, NODE *nd_2nd, const YYLTYPE *loc, const YYLTYPE *operator_loc) { rb_node_and_t *n = NODE_NEWNODE(NODE_AND, rb_node_and_t, loc); n->nd_1st = nd_1st; n->nd_2nd = nd_2nd; + n->operator_loc = *operator_loc; return n; } static rb_node_or_t * -rb_node_or_new(struct parser_params *p, NODE *nd_1st, NODE *nd_2nd, const YYLTYPE *loc) +rb_node_or_new(struct parser_params *p, NODE *nd_1st, NODE *nd_2nd, const YYLTYPE *loc, const YYLTYPE *operator_loc) { rb_node_or_t *n = NODE_NEWNODE(NODE_OR, rb_node_or_t, loc); n->nd_1st = nd_1st; n->nd_2nd = nd_2nd; + n->operator_loc = *operator_loc; return n; } static rb_node_return_t * -rb_node_return_new(struct parser_params *p, NODE *nd_stts, const YYLTYPE *loc) +rb_node_return_new(struct parser_params *p, NODE *nd_stts, const YYLTYPE *loc, const YYLTYPE *keyword_loc) { rb_node_return_t *n = NODE_NEWNODE(NODE_RETURN, rb_node_return_t, loc); n->nd_stts = nd_stts; + n->keyword_loc = *keyword_loc; return n; } @@ -11614,42 +11602,50 @@ rb_node_lambda_new(struct parser_params *p, rb_node_args_t *nd_args, NODE *nd_bo } static rb_node_case_t * -rb_node_case_new(struct parser_params *p, NODE *nd_head, NODE *nd_body, const YYLTYPE *loc) +rb_node_case_new(struct parser_params *p, NODE *nd_head, NODE *nd_body, const YYLTYPE *loc, const YYLTYPE *case_keyword_loc, const YYLTYPE *end_keyword_loc) { rb_node_case_t *n = NODE_NEWNODE(NODE_CASE, rb_node_case_t, loc); n->nd_head = nd_head; n->nd_body = nd_body; + n->case_keyword_loc = *case_keyword_loc; + n->end_keyword_loc = *end_keyword_loc; return n; } static rb_node_case2_t * -rb_node_case2_new(struct parser_params *p, NODE *nd_body, const YYLTYPE *loc) +rb_node_case2_new(struct parser_params *p, NODE *nd_body, const YYLTYPE *loc, const YYLTYPE *case_keyword_loc, const YYLTYPE *end_keyword_loc) { rb_node_case2_t *n = NODE_NEWNODE(NODE_CASE2, rb_node_case2_t, loc); n->nd_head = 0; n->nd_body = nd_body; + n->case_keyword_loc = *case_keyword_loc; + n->end_keyword_loc = *end_keyword_loc; return n; } static rb_node_case3_t * -rb_node_case3_new(struct parser_params *p, NODE *nd_head, NODE *nd_body, const YYLTYPE *loc) +rb_node_case3_new(struct parser_params *p, NODE *nd_head, NODE *nd_body, const YYLTYPE *loc, const YYLTYPE *case_keyword_loc, const YYLTYPE *end_keyword_loc) { rb_node_case3_t *n = NODE_NEWNODE(NODE_CASE3, rb_node_case3_t, loc); n->nd_head = nd_head; n->nd_body = nd_body; + n->case_keyword_loc = *case_keyword_loc; + n->end_keyword_loc = *end_keyword_loc; return n; } static rb_node_when_t * -rb_node_when_new(struct parser_params *p, NODE *nd_head, NODE *nd_body, NODE *nd_next, const YYLTYPE *loc) +rb_node_when_new(struct parser_params *p, NODE *nd_head, NODE *nd_body, NODE *nd_next, const YYLTYPE *loc, const YYLTYPE *keyword_loc, const YYLTYPE *then_keyword_loc) { rb_node_when_t *n = NODE_NEWNODE(NODE_WHEN, rb_node_when_t, loc); n->nd_head = nd_head; n->nd_body = nd_body; n->nd_next = nd_next; + n->keyword_loc = *keyword_loc; + n->then_keyword_loc = *then_keyword_loc; return n; } @@ -11666,23 +11662,27 @@ rb_node_in_new(struct parser_params *p, NODE *nd_head, NODE *nd_body, NODE *nd_n } static rb_node_while_t * -rb_node_while_new(struct parser_params *p, NODE *nd_cond, NODE *nd_body, long nd_state, const YYLTYPE *loc) +rb_node_while_new(struct parser_params *p, NODE *nd_cond, NODE *nd_body, long nd_state, const YYLTYPE *loc, const YYLTYPE *keyword_loc, const YYLTYPE *closing_loc) { rb_node_while_t *n = NODE_NEWNODE(NODE_WHILE, rb_node_while_t, loc); n->nd_cond = nd_cond; n->nd_body = nd_body; n->nd_state = nd_state; + n->keyword_loc = *keyword_loc; + n->closing_loc = *closing_loc; return n; } static rb_node_until_t * -rb_node_until_new(struct parser_params *p, NODE *nd_cond, NODE *nd_body, long nd_state, const YYLTYPE *loc) +rb_node_until_new(struct parser_params *p, NODE *nd_cond, NODE *nd_body, long nd_state, const YYLTYPE *loc, const YYLTYPE *keyword_loc, const YYLTYPE *closing_loc) { rb_node_until_t *n = NODE_NEWNODE(NODE_UNTIL, rb_node_until_t, loc); n->nd_cond = nd_cond; n->nd_body = nd_body; n->nd_state = nd_state; + n->keyword_loc = *keyword_loc; + n->closing_loc = *closing_loc; return n; } @@ -11900,19 +11900,23 @@ rb_node_cvasgn_new(struct parser_params *p, ID nd_vid, NODE *nd_value, const YYL } static rb_node_op_asgn1_t * -rb_node_op_asgn1_new(struct parser_params *p, NODE *nd_recv, ID nd_mid, NODE *index, NODE *rvalue, const YYLTYPE *loc) +rb_node_op_asgn1_new(struct parser_params *p, NODE *nd_recv, ID nd_mid, NODE *index, NODE *rvalue, const YYLTYPE *loc, const YYLTYPE *call_operator_loc, const YYLTYPE *opening_loc, const YYLTYPE *closing_loc, const YYLTYPE *binary_operator_loc) { rb_node_op_asgn1_t *n = NODE_NEWNODE(NODE_OP_ASGN1, rb_node_op_asgn1_t, loc); n->nd_recv = nd_recv; n->nd_mid = nd_mid; n->nd_index = index; n->nd_rvalue = rvalue; + n->call_operator_loc = *call_operator_loc; + n->opening_loc = *opening_loc; + n->closing_loc = *closing_loc; + n->binary_operator_loc = *binary_operator_loc; return n; } static rb_node_op_asgn2_t * -rb_node_op_asgn2_new(struct parser_params *p, NODE *nd_recv, NODE *nd_value, ID nd_vid, ID nd_mid, bool nd_aid, const YYLTYPE *loc) +rb_node_op_asgn2_new(struct parser_params *p, NODE *nd_recv, NODE *nd_value, ID nd_vid, ID nd_mid, bool nd_aid, const YYLTYPE *loc, const YYLTYPE *call_operator_loc, const YYLTYPE *message_loc, const YYLTYPE *binary_operator_loc) { rb_node_op_asgn2_t *n = NODE_NEWNODE(NODE_OP_ASGN2, rb_node_op_asgn2_t, loc); n->nd_recv = nd_recv; @@ -11920,6 +11924,9 @@ rb_node_op_asgn2_new(struct parser_params *p, NODE *nd_recv, NODE *nd_value, ID n->nd_vid = nd_vid; n->nd_mid = nd_mid; n->nd_aid = nd_aid; + n->call_operator_loc = *call_operator_loc; + n->message_loc = *message_loc; + n->binary_operator_loc = *binary_operator_loc; return n; } @@ -12280,41 +12287,45 @@ rb_node_argspush_new(struct parser_params *p, NODE *nd_head, NODE *nd_body, cons } static rb_node_splat_t * -rb_node_splat_new(struct parser_params *p, NODE *nd_head, const YYLTYPE *loc) +rb_node_splat_new(struct parser_params *p, NODE *nd_head, const YYLTYPE *loc, const YYLTYPE *operator_loc) { rb_node_splat_t *n = NODE_NEWNODE(NODE_SPLAT, rb_node_splat_t, loc); n->nd_head = nd_head; + n->operator_loc = *operator_loc; return n; } static rb_node_block_pass_t * -rb_node_block_pass_new(struct parser_params *p, NODE *nd_body, const YYLTYPE *loc) +rb_node_block_pass_new(struct parser_params *p, NODE *nd_body, const YYLTYPE *loc, const YYLTYPE *operator_loc) { rb_node_block_pass_t *n = NODE_NEWNODE(NODE_BLOCK_PASS, rb_node_block_pass_t, loc); n->forwarding = 0; n->nd_head = 0; n->nd_body = nd_body; + n->operator_loc = *operator_loc; return n; } static rb_node_alias_t * -rb_node_alias_new(struct parser_params *p, NODE *nd_1st, NODE *nd_2nd, const YYLTYPE *loc) +rb_node_alias_new(struct parser_params *p, NODE *nd_1st, NODE *nd_2nd, const YYLTYPE *loc, const YYLTYPE *keyword_loc) { rb_node_alias_t *n = NODE_NEWNODE(NODE_ALIAS, rb_node_alias_t, loc); n->nd_1st = nd_1st; n->nd_2nd = nd_2nd; + n->keyword_loc = *keyword_loc; return n; } static rb_node_valias_t * -rb_node_valias_new(struct parser_params *p, ID nd_alias, ID nd_orig, const YYLTYPE *loc) +rb_node_valias_new(struct parser_params *p, ID nd_alias, ID nd_orig, const YYLTYPE *loc, const YYLTYPE *keyword_loc) { rb_node_valias_t *n = NODE_NEWNODE(NODE_VALIAS, rb_node_valias_t, loc); n->nd_alias = nd_alias; n->nd_orig = nd_orig; + n->keyword_loc = *keyword_loc; return n; } @@ -12324,6 +12335,7 @@ rb_node_undef_new(struct parser_params *p, NODE *nd_undef, const YYLTYPE *loc) { rb_node_undef_t *n = NODE_NEWNODE(NODE_UNDEF, rb_node_undef_t, loc); n->nd_undefs = rb_parser_ary_new_capa_for_node(p, 1); + n->keyword_loc = NULL_LOC; rb_parser_ary_push_node(p, n->nd_undefs, nd_undef); return n; @@ -12460,30 +12472,33 @@ rb_node_error_new(struct parser_params *p, const YYLTYPE *loc) } static rb_node_break_t * -rb_node_break_new(struct parser_params *p, NODE *nd_stts, const YYLTYPE *loc) +rb_node_break_new(struct parser_params *p, NODE *nd_stts, const YYLTYPE *loc, const YYLTYPE *keyword_loc) { rb_node_break_t *n = NODE_NEWNODE(NODE_BREAK, rb_node_break_t, loc); n->nd_stts = nd_stts; n->nd_chain = 0; + n->keyword_loc = *keyword_loc; return n; } static rb_node_next_t * -rb_node_next_new(struct parser_params *p, NODE *nd_stts, const YYLTYPE *loc) +rb_node_next_new(struct parser_params *p, NODE *nd_stts, const YYLTYPE *loc, const YYLTYPE *keyword_loc) { rb_node_next_t *n = NODE_NEWNODE(NODE_NEXT, rb_node_next_t, loc); n->nd_stts = nd_stts; n->nd_chain = 0; + n->keyword_loc = *keyword_loc; return n; } static rb_node_redo_t * -rb_node_redo_new(struct parser_params *p, const YYLTYPE *loc) +rb_node_redo_new(struct parser_params *p, const YYLTYPE *loc, const YYLTYPE *keyword_loc) { rb_node_redo_t *n = NODE_NEWNODE(NODE_REDO, rb_node_redo_t, loc); n->nd_chain = 0; + n->keyword_loc = *keyword_loc; return n; } @@ -14340,7 +14355,7 @@ new_unless(struct parser_params *p, NODE *cc, NODE *left, NODE *right, const YYL return newline_node(NEW_UNLESS(cc, left, right, loc, keyword_loc, then_keyword_loc, end_keyword_loc)); } -#define NEW_AND_OR(type, f, s, loc) (type == NODE_AND ? NEW_AND(f,s,loc) : NEW_OR(f,s,loc)) +#define NEW_AND_OR(type, f, s, loc, op_loc) (type == NODE_AND ? NEW_AND(f,s,loc,op_loc) : NEW_OR(f,s,loc,op_loc)) static NODE* logop(struct parser_params *p, ID id, NODE *left, NODE *right, @@ -14354,12 +14369,12 @@ logop(struct parser_params *p, ID id, NODE *left, NODE *right, while ((second = RNODE_AND(node)->nd_2nd) != 0 && nd_type_p(second, type)) { node = second; } - RNODE_AND(node)->nd_2nd = NEW_AND_OR(type, second, right, loc); + RNODE_AND(node)->nd_2nd = NEW_AND_OR(type, second, right, loc, op_loc); nd_set_line(RNODE_AND(node)->nd_2nd, op_loc->beg_pos.lineno); left->nd_loc.end_pos = loc->end_pos; return left; } - op = NEW_AND_OR(type, left, right, loc); + op = NEW_AND_OR(type, left, right, loc, op_loc); nd_set_line(op, op_loc->beg_pos.lineno); return op; } @@ -14800,24 +14815,26 @@ new_op_assign(struct parser_params *p, NODE *lhs, ID op, NODE *rhs, struct lex_c static NODE * new_ary_op_assign(struct parser_params *p, NODE *ary, - NODE *args, ID op, NODE *rhs, const YYLTYPE *args_loc, const YYLTYPE *loc) + NODE *args, ID op, NODE *rhs, const YYLTYPE *args_loc, const YYLTYPE *loc, + const YYLTYPE *call_operator_loc, const YYLTYPE *opening_loc, const YYLTYPE *closing_loc, const YYLTYPE *binary_operator_loc) { NODE *asgn; aryset_check(p, args); args = make_list(args, args_loc); - asgn = NEW_OP_ASGN1(ary, op, args, rhs, loc); + asgn = NEW_OP_ASGN1(ary, op, args, rhs, loc, call_operator_loc, opening_loc, closing_loc, binary_operator_loc); fixpos(asgn, ary); return asgn; } static NODE * new_attr_op_assign(struct parser_params *p, NODE *lhs, - ID atype, ID attr, ID op, NODE *rhs, const YYLTYPE *loc) + ID atype, ID attr, ID op, NODE *rhs, const YYLTYPE *loc, + const YYLTYPE *call_operator_loc, const YYLTYPE *message_loc, const YYLTYPE *binary_operator_loc) { NODE *asgn; - asgn = NEW_OP_ASGN2(lhs, CALL_Q_P(atype), attr, op, rhs, loc); + asgn = NEW_OP_ASGN2(lhs, CALL_Q_P(atype), attr, op, rhs, loc, call_operator_loc, message_loc, binary_operator_loc); fixpos(asgn, lhs); return asgn; } @@ -15121,11 +15138,11 @@ new_args_forward_call(struct parser_params *p, NODE *leading, const YYLTYPE *loc #ifndef FORWARD_ARGS_WITH_RUBY2_KEYWORDS NODE *kwrest = list_append(p, NEW_LIST(0, loc), NEW_LVAR(idFWD_KWREST, loc)); #endif - rb_node_block_pass_t *block = NEW_BLOCK_PASS(NEW_LVAR(idFWD_BLOCK, loc), loc); - NODE *args = leading ? rest_arg_append(p, leading, rest, argsloc) : NEW_SPLAT(rest, loc); + rb_node_block_pass_t *block = NEW_BLOCK_PASS(NEW_LVAR(idFWD_BLOCK, loc), argsloc, &NULL_LOC); + NODE *args = leading ? rest_arg_append(p, leading, rest, argsloc) : NEW_SPLAT(rest, loc, &NULL_LOC); block->forwarding = TRUE; #ifndef FORWARD_ARGS_WITH_RUBY2_KEYWORDS - args = arg_append(p, args, new_hash(p, kwrest, loc), loc); + args = arg_append(p, args, new_hash(p, kwrest, loc), argsloc); #endif return arg_blk_pass(args, block); } @@ -15524,7 +15541,7 @@ parser_append_options(struct parser_params *p, NODE *node) irs = list_append(p, irs, NEW_HASH(chomp, LOC)); } - node = NEW_WHILE((NODE *)NEW_FCALL(idGets, irs, LOC), node, 1, LOC); + node = NEW_WHILE((NODE *)NEW_FCALL(idGets, irs, LOC), node, 1, LOC, &NULL_LOC, &NULL_LOC); } return node; @@ -15857,23 +15874,9 @@ rb_ruby_ripper_parse0(rb_parser_t *p) } int -rb_ruby_ripper_dedent_string(rb_parser_t *p, VALUE string, int width) +rb_ruby_ripper_dedent_string(rb_parser_t *p, rb_parser_string_t *string, int width) { - char *str; - long len; - int i; - - RSTRING_GETMEM(string, str, len); - i = dedent_string_column(str, len, width); - if (!i) return 0; - - rb_str_modify(string); - str = RSTRING_PTR(string); - if (RSTRING_LEN(string) != len) - rb_fatal("literal string changed: %+"PRIsVALUE, string); - MEMMOVE(str, str + i, char, len - i); - rb_str_set_len(string, len - i); - return i; + return dedent_string(p, string, width); } int @@ -15940,7 +15943,7 @@ rb_parser_printf(struct parser_params *p, const char *fmt, ...) va_start(ap, fmt); rb_str_vcatf(mesg, fmt, ap); va_end(ap); - if (end_with_newline_p(p, mesg)) { + if (char_at_end(p, mesg, 0) == '\n') { rb_io_write(p->debug_output, mesg); p->debug_buffer = Qnil; } diff --git a/parser_st.c b/parser_st.c index 17f669e7634f3e..c2340261226d91 100644 --- a/parser_st.c +++ b/parser_st.c @@ -154,7 +154,8 @@ nonempty_memcpy(void *dest, const void *src, size_t n) _Pragma("GCC diagnostic push") \ _Pragma("GCC diagnostic ignored \"-Wattributes\"") \ __attribute__((__no_sanitize__(x))) y; \ - _Pragma("GCC diagnostic pop") + _Pragma("GCC diagnostic pop") \ + y #endif #ifndef NO_SANITIZE diff --git a/prelude.rb b/prelude.rb index ee78b44cc5267f..55b42f06c4f54d 100644 --- a/prelude.rb +++ b/prelude.rb @@ -1,12 +1,49 @@ class Binding # :nodoc: def irb - require 'irb' + begin + require 'irb' + rescue LoadError, Gem::LoadError + force_activate 'irb' + retry + end irb end # suppress redefinition warning alias irb irb # :nodoc: + + private def force_activate(gem) + Bundler.reset! + + builder = Bundler::Dsl.new + if Bundler.definition.gemfiles.empty? # bundler/inline + Bundler.definition.locked_gems.specs.each{|spec| builder.gem spec.name, spec.version.to_s } + else + Bundler.definition.gemfiles.each{|gemfile| builder.eval_gemfile(gemfile) } + end + builder.gem gem + + definition = builder.to_definition(nil, true) + definition.validate_runtime! + + begin + orig_ui = Bundler.ui + orig_no_lock = Bundler::Definition.no_lock + + ui = Bundler::UI::Shell.new + ui.level = "silent" + Bundler.ui = ui + Bundler::Definition.no_lock = true + + Bundler::Runtime.new(nil, definition).setup + rescue Bundler::GemNotFound + warn "Failed to activate #{gem}, please install it with 'gem install #{gem}'" + ensure + Bundler.ui = orig_ui + Bundler::Definition.no_lock = orig_no_lock + end + end end module Kernel diff --git a/prism/config.yml b/prism/config.yml index b7c673813b46f5..8bf621508f4627 100644 --- a/prism/config.yml +++ b/prism/config.yml @@ -15,7 +15,6 @@ errors: - ARGUMENT_FORMAL_GLOBAL - ARGUMENT_FORMAL_IVAR - ARGUMENT_FORWARDING_UNBOUND - - ARGUMENT_IN - ARGUMENT_NO_FORWARDING_AMPERSAND - ARGUMENT_NO_FORWARDING_ELLIPSES - ARGUMENT_NO_FORWARDING_STAR @@ -99,6 +98,7 @@ errors: - EXPECT_EXPRESSION_AFTER_SPLAT - EXPECT_EXPRESSION_AFTER_SPLAT_HASH - EXPECT_EXPRESSION_AFTER_STAR + - EXPECT_FOR_DELIMITER - EXPECT_IDENT_REQ_PARAMETER - EXPECT_IN_DELIMITER - EXPECT_LPAREN_REQ_PARAMETER @@ -107,6 +107,7 @@ errors: - EXPECT_RPAREN - EXPECT_RPAREN_AFTER_MULTI - EXPECT_RPAREN_REQ_PARAMETER + - EXPECT_SINGLETON_CLASS_DELIMITER - EXPECT_STRING_CONTENT - EXPECT_WHEN_DELIMITER - EXPRESSION_BARE_HASH @@ -140,6 +141,7 @@ errors: - INSTANCE_VARIABLE_BARE - INVALID_BLOCK_EXIT - INVALID_CHARACTER + - INVALID_COMMA - INVALID_ENCODING_MAGIC_COMMENT - INVALID_ESCAPE_CHARACTER - INVALID_FLOAT_EXPONENT @@ -185,7 +187,9 @@ errors: - MODULE_TERM - MULTI_ASSIGN_MULTI_SPLATS - MULTI_ASSIGN_UNEXPECTED_REST + - NESTING_TOO_DEEP - NO_LOCAL_VARIABLE + - NON_ASSOCIATIVE_OPERATOR - NOT_EXPRESSION - NUMBER_LITERAL_UNDERSCORE - NUMBERED_PARAMETER_INNER_BLOCK @@ -271,6 +275,7 @@ errors: - UNEXPECTED_BLOCK_ARGUMENT - UNEXPECTED_INDEX_BLOCK - UNEXPECTED_INDEX_KEYWORDS + - UNEXPECTED_LABEL - UNEXPECTED_MULTI_WRITE - UNEXPECTED_RANGE_OPERATOR - UNEXPECTED_SAFE_NAVIGATION @@ -647,14 +652,16 @@ tokens: flags: - name: ArgumentsNodeFlags values: + - name: CONTAINS_FORWARDING + comment: "if the arguments contain forwarding" - name: CONTAINS_KEYWORDS - comment: "if arguments contain keywords" + comment: "if the arguments contain keywords" - name: CONTAINS_KEYWORD_SPLAT - comment: "if arguments contain keyword splat" + comment: "if the arguments contain a keyword splat" - name: CONTAINS_SPLAT - comment: "if arguments contain splat" + comment: "if the arguments contain a splat" - name: CONTAINS_MULTIPLE_SPLATS - comment: "if arguments contain multiple splats" + comment: "if the arguments contain multiple splats" comment: Flags for arguments nodes. - name: ArrayNodeFlags values: @@ -791,8 +798,8 @@ nodes: - GlobalVariableReadNode - BackReferenceReadNode - NumberedReferenceReadNode - - SymbolNode # On parsing error of `alias $a b` - - MissingNode # On parsing error of `alias $a 42` + - on error: SymbolNode # alias $a b + - on error: MissingNode # alias $a 42 comment: | Represents the old name of the global variable that can be used before aliasing. @@ -817,13 +824,35 @@ nodes: kind: - SymbolNode - InterpolatedSymbolNode + comment: | + Represents the new name of the method that will be aliased. + + alias foo bar + ^^^ + + alias :foo :bar + ^^^^ + + alias :"#{foo}" :"#{bar}" + ^^^^^^^^^ - name: old_name type: node kind: - SymbolNode - InterpolatedSymbolNode - - GlobalVariableReadNode # On parsing error of `alias a $b` - - MissingNode # On parsing error of `alias a 42` + - on error: GlobalVariableReadNode # alias a $b + - on error: MissingNode # alias a 42 + comment: | + Represents the old name of the method that will be aliased. + + alias foo bar + ^^^ + + alias :foo :bar + ^^^^ + + alias :"#{foo}" :"#{bar}" + ^^^^^^^^^ - name: keyword_loc type: location comment: | @@ -835,10 +864,27 @@ nodes: fields: - name: left type: node + kind: pattern expression + comment: | + Represents the left side of the expression. + + foo => bar | baz + ^^^ - name: right type: node + kind: pattern expression + comment: | + Represents the right side of the expression. + + foo => bar | baz + ^^^ - name: operator_loc type: location + comment: | + Represents the alternation operator location. + + foo => bar | baz + ^ comment: | Represents an alternation pattern in pattern matching. @@ -848,6 +894,7 @@ nodes: fields: - name: left type: node + kind: non-void expression comment: | Represents the left side of the expression. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression). @@ -858,8 +905,9 @@ nodes: ^ - name: right type: node + kind: Node comment: | - Represents the right side of the expression. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression). + Represents the right side of the expression. left && right ^^^^^ @@ -883,6 +931,7 @@ nodes: fields: - name: arguments type: node[] + kind: non-void expression comment: | Represents a set of arguments to a method or a keyword. @@ -893,6 +942,7 @@ nodes: fields: - name: elements type: node[] + kind: non-void expression comment: Represent the list of zero or more [non-void expressions](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression) within the array. - name: opening_loc type: location? @@ -921,12 +971,18 @@ nodes: fields: - name: constant type: node? + kind: + - ConstantReadNode + - ConstantPathNode - name: requireds type: node[] + kind: pattern expression - name: rest type: node? + kind: pattern expression - name: posts type: node[] + kind: pattern expression - name: opening_loc type: location? - name: closing_loc @@ -952,6 +1008,7 @@ nodes: fields: - name: key type: node + kind: non-void expression comment: | The key of the association. This can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression). @@ -965,6 +1022,7 @@ nodes: ^^^^^^^^^^ - name: value type: node + kind: non-void expression comment: | The value of the association, if present. This can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression). @@ -989,6 +1047,7 @@ nodes: fields: - name: value type: node? + kind: non-void expression comment: | The value to be splatted, if present. Will be missing when keyword rest argument forwarding is used. @@ -1051,6 +1110,7 @@ nodes: fields: - name: expression type: node? + kind: non-void expression - name: operator_loc type: location comment: | @@ -1155,6 +1215,7 @@ nodes: fields: - name: receiver type: node? + kind: non-void expression - name: call_operator_loc type: location? - name: message_loc @@ -1167,6 +1228,7 @@ nodes: type: location - name: value type: node + kind: non-void expression comment: | Represents the use of the `&&=` operator on a call. @@ -1177,6 +1239,7 @@ nodes: fields: - name: receiver type: node? + kind: non-void expression comment: | The object that the method is being called on. This can be either `nil` or any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression). @@ -1203,6 +1266,9 @@ nodes: type: location? - name: block type: node? + kind: + - BlockNode + - BlockArgumentNode comment: | Represents a method call, in all of the various forms that can take. @@ -1228,6 +1294,7 @@ nodes: fields: - name: receiver type: node? + kind: non-void expression - name: call_operator_loc type: location? - name: message_loc @@ -1242,6 +1309,7 @@ nodes: type: location - name: value type: node + kind: non-void expression comment: | Represents the use of an assignment operator on a call. @@ -1252,6 +1320,7 @@ nodes: fields: - name: receiver type: node? + kind: non-void expression - name: call_operator_loc type: location? - name: message_loc @@ -1264,6 +1333,7 @@ nodes: type: location - name: value type: node + kind: non-void expression comment: | Represents the use of the `||=` operator on a call. @@ -1274,6 +1344,7 @@ nodes: fields: - name: receiver type: node + kind: non-void expression - name: call_operator_loc type: location - name: name @@ -1297,8 +1368,10 @@ nodes: fields: - name: value type: node + kind: pattern expression - name: target type: node + kind: LocalVariableTargetNode - name: operator_loc type: location comment: | @@ -1310,8 +1383,10 @@ nodes: fields: - name: predicate type: node? + kind: non-void expression - name: conditions type: node[] + kind: InNode - name: else_clause type: node? kind: ElseNode @@ -1330,8 +1405,10 @@ nodes: fields: - name: predicate type: node? + kind: non-void expression - name: conditions type: node[] + kind: WhenNode - name: else_clause type: node? kind: ElseNode @@ -1354,12 +1431,20 @@ nodes: type: location - name: constant_path type: node + kind: + - ConstantReadNode + - ConstantPathNode + - on error: CallNode # class 0.X end - name: inheritance_operator_loc type: location? - name: superclass type: node? + kind: non-void expression - name: body type: node? + kind: + - StatementsNode + - BeginNode - name: end_keyword_loc type: location - name: name @@ -1379,6 +1464,7 @@ nodes: type: location - name: value type: node + kind: non-void expression comment: | Represents the use of the `&&=` operator for assignment to a class variable. @@ -1394,6 +1480,7 @@ nodes: type: location - name: value type: node + kind: non-void expression - name: binary_operator type: constant comment: | @@ -1411,6 +1498,7 @@ nodes: type: location - name: value type: node + kind: non-void expression comment: | Represents the use of the `||=` operator for assignment to a class variable. @@ -1459,6 +1547,7 @@ nodes: ^^^^^ - name: value type: node + kind: non-void expression comment: | The value to write to the class variable. This can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression). @@ -1489,6 +1578,7 @@ nodes: type: location - name: value type: node + kind: non-void expression comment: | Represents the use of the `&&=` operator for assignment to a constant. @@ -1504,6 +1594,7 @@ nodes: type: location - name: value type: node + kind: non-void expression - name: binary_operator type: constant comment: | @@ -1521,6 +1612,7 @@ nodes: type: location - name: value type: node + kind: non-void expression comment: | Represents the use of the `||=` operator for assignment to a constant. @@ -1535,6 +1627,7 @@ nodes: type: location - name: value type: node + kind: non-void expression comment: | Represents the use of the `&&=` operator for assignment to a constant path. @@ -1544,6 +1637,7 @@ nodes: fields: - name: parent type: node? + kind: non-void expression comment: | The left-hand node of the path, if present. It can be `nil` or any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression). It will be `nil` when the constant lookup is at the root of the module tree. @@ -1592,6 +1686,7 @@ nodes: type: location - name: value type: node + kind: non-void expression - name: binary_operator type: constant comment: | @@ -1608,6 +1703,7 @@ nodes: type: location - name: value type: node + kind: non-void expression comment: | Represents the use of the `||=` operator for assignment to a constant path. @@ -1617,6 +1713,7 @@ nodes: fields: - name: parent type: node? + kind: non-void expression - name: name type: constant? - name: delimiter_loc @@ -1650,6 +1747,7 @@ nodes: ^ - name: value type: node + kind: non-void expression comment: | The value to write to the constant path. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression). @@ -1709,6 +1807,7 @@ nodes: ^^^ - name: value type: node + kind: non-void expression comment: | The value to write to the constant. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression). @@ -1737,11 +1836,15 @@ nodes: type: location - name: receiver type: node? + kind: non-void expression - name: parameters type: node? kind: ParametersNode - name: body type: node? + kind: + - StatementsNode + - BeginNode - name: locals type: constant[] - name: def_keyword_loc @@ -1768,6 +1871,7 @@ nodes: type: location? - name: value type: node + kind: Node # More than non-void expression as defined?(return) is allowed, yet defined?(BEGIN{}) is SyntaxError - name: rparen_loc type: location? - name: keyword_loc @@ -1811,6 +1915,12 @@ nodes: type: location - name: variable type: node + kind: + - InstanceVariableReadNode + - ClassVariableReadNode + - GlobalVariableReadNode + - BackReferenceReadNode + - NumberedReferenceReadNode comment: | Represents an interpolated variable. @@ -1844,12 +1954,20 @@ nodes: fields: - name: constant type: node? + kind: + - ConstantReadNode + - ConstantPathNode - name: left type: node + kind: SplatNode - name: requireds type: node[] + kind: pattern expression - name: right type: node + kind: + - SplatNode + - on error: MissingNode - name: opening_loc type: location? - name: closing_loc @@ -1870,8 +1988,10 @@ nodes: fields: - name: left type: node? + kind: non-void expression - name: right type: node? + kind: non-void expression - name: operator_loc type: location comment: | @@ -1893,6 +2013,19 @@ nodes: fields: - name: index type: node + kind: + - LocalVariableTargetNode + - InstanceVariableTargetNode + - ClassVariableTargetNode + - GlobalVariableTargetNode + - ConstantTargetNode + - ConstantPathTargetNode + - CallTargetNode + - IndexTargetNode + - MultiTargetNode + - on error: BackReferenceReadNode # for $& in a end + - on error: NumberedReferenceReadNode # for $1 in a end + - on error: MissingNode # for in 1..10; end comment: | The index expression for `for` loops. @@ -1900,6 +2033,7 @@ nodes: ^ - name: collection type: node + kind: non-void expression comment: | The collection to iterate over. @@ -1983,6 +2117,7 @@ nodes: type: location - name: value type: node + kind: non-void expression comment: | Represents the use of the `&&=` operator for assignment to a global variable. @@ -1998,6 +2133,7 @@ nodes: type: location - name: value type: node + kind: non-void expression - name: binary_operator type: constant comment: | @@ -2015,6 +2151,7 @@ nodes: type: location - name: value type: node + kind: non-void expression comment: | Represents the use of the `||=` operator for assignment to a global variable. @@ -2063,6 +2200,7 @@ nodes: ^^^^ - name: value type: node + kind: non-void expression comment: | The value to write to the global variable. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression). @@ -2121,6 +2259,9 @@ nodes: fields: - name: constant type: node? + kind: + - ConstantReadNode + - ConstantPathNode - name: elements type: node[] kind: AssocNode @@ -2154,6 +2295,7 @@ nodes: The `if_keyword_loc` field will be `nil` when the `IfNode` represents a ternary expression. - name: predicate type: node + kind: non-void expression comment: | The node for the condition the `IfNode` is testing. @@ -2246,6 +2388,11 @@ nodes: fields: - name: value type: node + kind: + - LocalVariableReadNode + - CallNode + - ConstantReadNode + - LocalVariableTargetNode comment: | Represents a node that is implicitly being added to the tree but doesn't correspond directly to a node in the source. @@ -2276,6 +2423,7 @@ nodes: fields: - name: pattern type: node + kind: pattern expression - name: statements type: node? kind: StatementsNode @@ -2293,6 +2441,7 @@ nodes: fields: - name: receiver type: node? + kind: non-void expression - name: call_operator_loc type: location? - name: opening_loc @@ -2304,10 +2453,12 @@ nodes: type: location - name: block type: node? + kind: BlockArgumentNode # foo[&b] &&= value, only valid on Ruby < 3.4 - name: operator_loc type: location - name: value type: node + kind: non-void expression comment: | Represents the use of the `&&=` operator on a call to the `[]` method. @@ -2318,6 +2469,7 @@ nodes: fields: - name: receiver type: node? + kind: non-void expression - name: call_operator_loc type: location? - name: opening_loc @@ -2329,12 +2481,14 @@ nodes: type: location - name: block type: node? + kind: BlockArgumentNode # foo[&b] += value, only valid on Ruby < 3.4 - name: binary_operator type: constant - name: binary_operator_loc type: location - name: value type: node + kind: non-void expression comment: | Represents the use of an assignment operator on a call to `[]`. @@ -2345,6 +2499,7 @@ nodes: fields: - name: receiver type: node? + kind: non-void expression - name: call_operator_loc type: location? - name: opening_loc @@ -2356,10 +2511,12 @@ nodes: type: location - name: block type: node? + kind: BlockArgumentNode # foo[&b] ||= value, only valid on Ruby < 3.4 - name: operator_loc type: location - name: value type: node + kind: non-void expression comment: | Represents the use of the `||=` operator on a call to `[]`. @@ -2370,6 +2527,7 @@ nodes: fields: - name: receiver type: node + kind: non-void expression - name: opening_loc type: location - name: arguments @@ -2379,6 +2537,7 @@ nodes: type: location - name: block type: node? + kind: BlockArgumentNode # foo[&b], = 1, only valid on Ruby < 3.4 comment: | Represents assigning to an index. @@ -2402,6 +2561,7 @@ nodes: type: location - name: value type: node + kind: non-void expression comment: | Represents the use of the `&&=` operator for assignment to an instance variable. @@ -2417,6 +2577,7 @@ nodes: type: location - name: value type: node + kind: non-void expression - name: binary_operator type: constant comment: | @@ -2434,6 +2595,7 @@ nodes: type: location - name: value type: node + kind: non-void expression comment: | Represents the use of the `||=` operator for assignment to an instance variable. @@ -2482,6 +2644,7 @@ nodes: ^^^ - name: value type: node + kind: non-void expression comment: | The value to write to the instance variable. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression). @@ -2659,8 +2822,15 @@ nodes: type: location - name: parameters type: node? + kind: + - BlockParametersNode + - NumberedParametersNode + - ItParametersNode - name: body type: node? + kind: + - StatementsNode + - BeginNode comment: | Represents using a lambda literal (not the lambda method call). @@ -2674,6 +2844,7 @@ nodes: type: location - name: value type: node + kind: non-void expression - name: name type: constant - name: depth @@ -2691,6 +2862,7 @@ nodes: type: location - name: value type: node + kind: non-void expression - name: name type: constant - name: binary_operator @@ -2710,6 +2882,7 @@ nodes: type: location - name: value type: node + kind: non-void expression - name: name type: constant - name: depth @@ -2789,6 +2962,7 @@ nodes: ^^^ - name: value type: node + kind: non-void expression comment: | The value to write to the local variable. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression). @@ -2833,8 +3007,10 @@ nodes: fields: - name: value type: node + kind: non-void expression - name: pattern type: node + kind: pattern expression - name: operator_loc type: location comment: | @@ -2846,8 +3022,10 @@ nodes: fields: - name: value type: node + kind: non-void expression - name: pattern type: node + kind: pattern expression - name: operator_loc type: location comment: | @@ -2879,8 +3057,15 @@ nodes: type: location - name: constant_path type: node + kind: + - ConstantReadNode + - ConstantPathNode + - on error: MissingNode # module Parent module end - name: body type: node? + kind: + - StatementsNode + - BeginNode - name: end_keyword_loc type: location - name: name @@ -2904,9 +3089,9 @@ nodes: - CallTargetNode - IndexTargetNode - MultiTargetNode - - RequiredParameterNode - - BackReferenceReadNode # On parsing error of `$',` - - NumberedReferenceReadNode # On parsing error of `$1,` + - RequiredParameterNode # def m((a,b)); end + - on error: BackReferenceReadNode # a, (b, $&) = z + - on error: NumberedReferenceReadNode # a, (b, $1) = z comment: | Represents the targets expressions before a splat node. @@ -2933,7 +3118,7 @@ nodes: a, (b, *) = 1, 2, 3, 4 ^ - If the `*` is omitted, the field will containt an `ImplicitRestNode` + If the `*` is omitted, this field will contain an `ImplicitRestNode` a, (b,) = 1, 2, 3, 4 ^ @@ -2949,8 +3134,9 @@ nodes: - CallTargetNode - IndexTargetNode - MultiTargetNode - - RequiredParameterNode - - BackReferenceReadNode # On parsing error of `*,$'` + - RequiredParameterNode # def m((*,b)); end + - on error: BackReferenceReadNode # a, (*, $&) = z + - on error: NumberedReferenceReadNode # a, (*, $1) = z comment: | Represents the targets expressions after a splat node. @@ -2994,6 +3180,8 @@ nodes: - CallTargetNode - IndexTargetNode - MultiTargetNode + - on error: BackReferenceReadNode # $&, = z + - on error: NumberedReferenceReadNode # $1, = z comment: | Represents the targets expressions before a splat node. @@ -3020,7 +3208,7 @@ nodes: a, b, * = 1, 2, 3, 4 ^ - If the `*` is omitted, the field will containt an `ImplicitRestNode` + If the `*` is omitted, this field will contain an `ImplicitRestNode` a, b, = 1, 2, 3, 4 ^ @@ -3036,6 +3224,8 @@ nodes: - CallTargetNode - IndexTargetNode - MultiTargetNode + - on error: BackReferenceReadNode # *, $& = z + - on error: NumberedReferenceReadNode # *, $1 = z comment: | Represents the targets expressions after a splat node. @@ -3064,6 +3254,7 @@ nodes: ^ - name: value type: node + kind: non-void expression comment: | The value to write to the targets. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression). @@ -3139,6 +3330,7 @@ nodes: type: location - name: value type: node + kind: non-void expression comment: | Represents an optional keyword parameter to a method, block, or lambda definition. @@ -3156,6 +3348,7 @@ nodes: type: location - name: value type: node + kind: non-void expression comment: | Represents an optional parameter to a method, block, or lambda definition. @@ -3166,6 +3359,7 @@ nodes: fields: - name: left type: node + kind: non-void expression comment: | Represents the left side of the expression. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression). @@ -3176,8 +3370,9 @@ nodes: ^ - name: right type: node + kind: Node comment: | - Represents the right side of the expression. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression). + Represents the right side of the expression. left || right ^^^^^ @@ -3217,10 +3412,10 @@ nodes: - RequiredParameterNode - MultiTargetNode # On parsing error of `f(**kwargs, ...)` or `f(**nil, ...)`, the keyword_rest value is moved here: - - KeywordRestParameterNode - - NoKeywordsParameterNode + - on error: KeywordRestParameterNode + - on error: NoKeywordsParameterNode # On parsing error of `f(..., ...)`, the first forwarding parameter is moved here: - - ForwardingParameterNode + - on error: ForwardingParameterNode - name: keywords type: node[] kind: @@ -3245,6 +3440,7 @@ nodes: fields: - name: body type: node? + kind: non-void expression # Usually a StatementsNode but not always e.g. `1 in (..10)` - name: opening_loc type: location - name: closing_loc @@ -3259,6 +3455,7 @@ nodes: fields: - name: expression type: node + kind: non-void expression - name: operator_loc type: location - name: lparen_loc @@ -3274,6 +3471,15 @@ nodes: fields: - name: variable type: node + kind: + - LocalVariableReadNode + - InstanceVariableReadNode + - ClassVariableReadNode + - GlobalVariableReadNode # foo in ^$a + - BackReferenceReadNode # foo in ^$& + - NumberedReferenceReadNode # foo in ^$1 + - ItLocalVariableReadNode # proc { 1 in ^it } + - on error: MissingNode # foo in ^Bar - name: operator_loc type: location comment: | @@ -3326,6 +3532,7 @@ nodes: fields: - name: left type: node? + kind: non-void expression comment: | The left-hand side of the range, if present. It can be either `nil` or any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression). @@ -3336,6 +3543,7 @@ nodes: ^^^^^ - name: right type: node? + kind: non-void expression comment: | The right-hand side of the range, if present. It can be either `nil` or any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression). @@ -3427,10 +3635,12 @@ nodes: fields: - name: expression type: node + kind: Node - name: keyword_loc type: location - name: rescue_expression type: node + kind: Node newline: expression comment: | Represents an expression modified with a rescue. @@ -3443,10 +3653,23 @@ nodes: type: location - name: exceptions type: node[] + kind: non-void expression - name: operator_loc type: location? - name: reference type: node? + kind: + - LocalVariableTargetNode + - InstanceVariableTargetNode + - ClassVariableTargetNode + - GlobalVariableTargetNode + - ConstantTargetNode + - ConstantPathTargetNode + - CallTargetNode + - IndexTargetNode + - on error: BackReferenceReadNode # => begin; rescue => $&; end + - on error: NumberedReferenceReadNode # => begin; rescue => $1; end + - on error: MissingNode # begin; rescue =>; end - name: statements type: node? kind: StatementsNode @@ -3533,8 +3756,12 @@ nodes: type: location - name: expression type: node + kind: non-void expression - name: body type: node? + kind: + - StatementsNode + - BeginNode - name: end_keyword_loc type: location comment: | @@ -3571,6 +3798,7 @@ nodes: type: location - name: expression type: node? + kind: non-void expression comment: | Represents the use of the splat operator. @@ -3580,6 +3808,7 @@ nodes: fields: - name: body type: node[] + kind: Node comment: | Represents a set of statements contained within some scope. @@ -3620,6 +3849,9 @@ nodes: type: location? - name: block type: node? + kind: + - BlockNode + - BlockArgumentNode comment: | Represents the use of the `super` keyword with parentheses or arguments. @@ -3681,6 +3913,7 @@ nodes: ^^^^^^ - name: predicate type: node + kind: non-void expression comment: | The condition to be evaluated for the unless expression. It can be any [non-void expression](https://github.com/ruby/prism/blob/main/docs/parsing_rules.md#non-void-expression). @@ -3738,6 +3971,7 @@ nodes: type: location? - name: predicate type: node + kind: non-void expression - name: statements type: node? kind: StatementsNode @@ -3756,6 +3990,7 @@ nodes: type: location - name: conditions type: node[] + kind: non-void expression - name: then_keyword_loc type: location? - name: statements @@ -3777,6 +4012,7 @@ nodes: type: location? - name: predicate type: node + kind: non-void expression - name: statements type: node? kind: StatementsNode diff --git a/prism/defines.h b/prism/defines.h index a4246e67c8a0be..e78c7dd75cee1e 100644 --- a/prism/defines.h +++ b/prism/defines.h @@ -25,6 +25,15 @@ #define __STDC_FORMAT_MACROS #include +/** + * When we are parsing using recursive descent, we want to protect against + * malicious payloads that could attempt to crash our parser. We do this by + * specifying a maximum depth to which we are allowed to recurse. + */ +#ifndef PRISM_DEPTH_MAXIMUM + #define PRISM_DEPTH_MAXIMUM 1000 +#endif + /** * By default, we compile with -fvisibility=hidden. When this is enabled, we * need to mark certain functions as being publically-visible. This macro does @@ -212,4 +221,22 @@ #define PRISM_ENCODING_EXCLUDE_FULL #endif +/** + * Support PRISM_LIKELY and PRISM_UNLIKELY to help the compiler optimize its + * branch predication. + */ +#if defined(__GNUC__) || defined(__clang__) + /** The compiler should predicate that this branch will be taken. */ + #define PRISM_LIKELY(x) __builtin_expect(!!(x), 1) + + /** The compiler should predicate that this branch will not be taken. */ + #define PRISM_UNLIKELY(x) __builtin_expect(!!(x), 0) +#else + /** Void because this platform does not support branch prediction hints. */ + #define PRISM_LIKELY(x) (x) + + /** Void because this platform does not support branch prediction hints. */ + #define PRISM_UNLIKELY(x) (x) +#endif + #endif diff --git a/prism/extension.c b/prism/extension.c index cd5165f41a124a..93fa7b09897747 100644 --- a/prism/extension.c +++ b/prism/extension.c @@ -31,6 +31,8 @@ ID rb_id_option_encoding; ID rb_id_option_filepath; ID rb_id_option_frozen_string_literal; ID rb_id_option_line; +ID rb_id_option_main_script; +ID rb_id_option_partial_script; ID rb_id_option_scopes; ID rb_id_option_version; ID rb_id_source_for; @@ -40,17 +42,11 @@ ID rb_id_source_for; /******************************************************************************/ /** - * Check if the given VALUE is a string. If it's nil, then return NULL. If it's - * not a string, then raise a type error. Otherwise return the VALUE as a C - * string. + * Check if the given VALUE is a string. If it's not a string, then raise a + * TypeError. Otherwise return the VALUE as a C string. */ static const char * check_string(VALUE value) { - // If the value is nil, then we don't need to do anything. - if (NIL_P(value)) { - return NULL; - } - // Check if the value is a string. If it's not, then raise a type error. if (!RB_TYPE_P(value, T_STRING)) { rb_raise(rb_eTypeError, "wrong argument type %" PRIsVALUE " (expected String)", rb_obj_class(value)); @@ -179,6 +175,10 @@ build_options_i(VALUE key, VALUE value, VALUE argument) { pm_options_command_line_set(options, command_line); } + } else if (key_id == rb_id_option_main_script) { + if (!NIL_P(value)) pm_options_main_script_set(options, RTEST(value)); + } else if (key_id == rb_id_option_partial_script) { + if (!NIL_P(value)) pm_options_partial_script_set(options, RTEST(value)); } else { rb_raise(rb_eArgError, "unknown keyword: %" PRIsVALUE, key); } @@ -254,27 +254,41 @@ string_options(int argc, VALUE *argv, pm_string_t *input, pm_options_t *options) * Read options for methods that look like (filepath, **options). */ static void -file_options(int argc, VALUE *argv, pm_string_t *input, pm_options_t *options) { +file_options(int argc, VALUE *argv, pm_string_t *input, pm_options_t *options, VALUE *encoded_filepath) { VALUE filepath; VALUE keywords; rb_scan_args(argc, argv, "1:", &filepath, &keywords); Check_Type(filepath, T_STRING); + *encoded_filepath = rb_str_encode_ospath(filepath); + extract_options(options, *encoded_filepath, keywords); - extract_options(options, filepath, keywords); + const char *source = (const char *) pm_string_source(&options->filepath); + pm_string_init_result_t result; - const char * string_source = (const char *) pm_string_source(&options->filepath); - - if (!pm_string_file_init(input, string_source)) { - pm_options_free(options); + switch (result = pm_string_file_init(input, source)) { + case PM_STRING_INIT_SUCCESS: + break; + case PM_STRING_INIT_ERROR_GENERIC: { + pm_options_free(options); #ifdef _WIN32 - int e = rb_w32_map_errno(GetLastError()); + int e = rb_w32_map_errno(GetLastError()); #else - int e = errno; + int e = errno; #endif - rb_syserr_fail(e, string_source); + rb_syserr_fail(e, source); + break; + } + case PM_STRING_INIT_ERROR_DIRECTORY: + pm_options_free(options); + rb_syserr_fail(EISDIR, source); + break; + default: + pm_options_free(options); + rb_raise(rb_eRuntimeError, "Unknown error (%d) initializing file: %s", result, source); + break; } } @@ -352,7 +366,8 @@ dump_file(int argc, VALUE *argv, VALUE self) { pm_string_t input; pm_options_t options = { 0 }; - file_options(argc, argv, &input, &options); + VALUE encoded_filepath; + file_options(argc, argv, &input, &options, &encoded_filepath); VALUE value = dump_input(&input, &options); pm_string_free(&input); @@ -685,7 +700,8 @@ lex_file(int argc, VALUE *argv, VALUE self) { pm_string_t input; pm_options_t options = { 0 }; - file_options(argc, argv, &input, &options); + VALUE encoded_filepath; + file_options(argc, argv, &input, &options, &encoded_filepath); VALUE value = parse_lex_input(&input, &options, false); pm_string_free(&input); @@ -737,14 +753,27 @@ parse_input(pm_string_t *input, const pm_options_t *options) { * has been set. This should be a boolean or nil. * * `line` - the line number that the parse starts on. This should be an * integer or nil. Note that this is 1-indexed. + * * `main_script` - a boolean indicating whether or not the source being parsed + * is the main script being run by the interpreter. This controls whether + * or not shebangs are parsed for additional flags and whether or not the + * parser will attempt to find a matching shebang if the first one does + * not contain the word "ruby". + * * `partial_script` - when the file being parsed is considered a "partial" + * script, jumps will not be marked as errors if they are not contained + * within loops/blocks. This is used in the case that you're parsing a + * script that you know will be embedded inside another script later, but + * you do not have that context yet. For example, when parsing an ERB + * template that will be evaluated inside another script. * * `scopes` - the locals that are in scope surrounding the code that is being * parsed. This should be an array of arrays of symbols or nil. Scopes are * ordered from the outermost scope to the innermost one. * * `version` - the version of Ruby syntax that prism should used to parse Ruby * code. By default prism assumes you want to parse with the latest version * of Ruby syntax (which you can trigger with `nil` or `"latest"`). You - * may also restrict the syntax to a specific version of Ruby. The - * supported values are `"3.3.0"` and `"3.4.0"`. + * may also restrict the syntax to a specific version of Ruby, e.g., with `"3.3.0"`. + * To parse with the same syntax version that the current Ruby is running + * use `version: RUBY_VERSION`. Raises ArgumentError if the version is not + * currently supported by Prism. */ static VALUE parse(int argc, VALUE *argv, VALUE self) { @@ -782,7 +811,8 @@ parse_file(int argc, VALUE *argv, VALUE self) { pm_string_t input; pm_options_t options = { 0 }; - file_options(argc, argv, &input, &options); + VALUE encoded_filepath; + file_options(argc, argv, &input, &options, &encoded_filepath); VALUE value = parse_input(&input, &options); pm_string_free(&input); @@ -838,7 +868,9 @@ profile_file(int argc, VALUE *argv, VALUE self) { pm_string_t input; pm_options_t options = { 0 }; - file_options(argc, argv, &input, &options); + VALUE encoded_filepath; + file_options(argc, argv, &input, &options, &encoded_filepath); + profile_input(&input, &options); pm_string_free(&input); pm_options_free(&options); @@ -952,7 +984,8 @@ parse_file_comments(int argc, VALUE *argv, VALUE self) { pm_string_t input; pm_options_t options = { 0 }; - file_options(argc, argv, &input, &options); + VALUE encoded_filepath; + file_options(argc, argv, &input, &options, &encoded_filepath); VALUE value = parse_input_comments(&input, &options); pm_string_free(&input); @@ -1007,7 +1040,8 @@ parse_lex_file(int argc, VALUE *argv, VALUE self) { pm_string_t input; pm_options_t options = { 0 }; - file_options(argc, argv, &input, &options); + VALUE encoded_filepath; + file_options(argc, argv, &input, &options, &encoded_filepath); VALUE value = parse_lex_input(&input, &options, true); pm_string_free(&input); @@ -1077,7 +1111,8 @@ parse_file_success_p(int argc, VALUE *argv, VALUE self) { pm_string_t input; pm_options_t options = { 0 }; - file_options(argc, argv, &input, &options); + VALUE encoded_filepath; + file_options(argc, argv, &input, &options, &encoded_filepath); VALUE result = parse_input_success_p(&input, &options); pm_string_free(&input); @@ -1143,6 +1178,8 @@ Init_prism(void) { rb_id_option_filepath = rb_intern_const("filepath"); rb_id_option_frozen_string_literal = rb_intern_const("frozen_string_literal"); rb_id_option_line = rb_intern_const("line"); + rb_id_option_main_script = rb_intern_const("main_script"); + rb_id_option_partial_script = rb_intern_const("partial_script"); rb_id_option_scopes = rb_intern_const("scopes"); rb_id_option_version = rb_intern_const("version"); rb_id_source_for = rb_intern("for"); diff --git a/prism/options.c b/prism/options.c index 643de9d95a3791..6b52b2f296034c 100644 --- a/prism/options.c +++ b/prism/options.c @@ -57,6 +57,14 @@ pm_options_command_line_set(pm_options_t *options, uint8_t command_line) { options->command_line = command_line; } +/** + * Checks if the given slice represents a number. + */ +static inline bool +is_number(const char *string, size_t length) { + return pm_strspn_decimal_digit((const uint8_t *) string, (ptrdiff_t) length) == length; +} + /** * Set the version option on the given options struct by parsing the given * string. If the string contains an invalid option, this returns false. @@ -64,40 +72,61 @@ pm_options_command_line_set(pm_options_t *options, uint8_t command_line) { */ PRISM_EXPORTED_FUNCTION bool pm_options_version_set(pm_options_t *options, const char *version, size_t length) { - switch (length) { - case 0: - if (version == NULL) { - options->version = PM_OPTIONS_VERSION_LATEST; - return true; - } + if (version == NULL) { + options->version = PM_OPTIONS_VERSION_LATEST; + return true; + } - return false; - case 5: - assert(version != NULL); + if (length == 3) { + if (strncmp(version, "3.3", 3) == 0) { + options->version = PM_OPTIONS_VERSION_CRUBY_3_3; + return true; + } - if ((strncmp(version, "3.3.0", length) == 0) || (strncmp(version, "3.3.1", length) == 0)) { - options->version = PM_OPTIONS_VERSION_CRUBY_3_3; - return true; - } + if (strncmp(version, "3.4", 3) == 0) { + options->version = PM_OPTIONS_VERSION_LATEST; + return true; + } - if (strncmp(version, "3.4.0", length) == 0) { - options->version = PM_OPTIONS_VERSION_LATEST; - return true; - } + return false; + } - return false; - case 6: - assert(version != NULL); + if (length >= 4) { + if (strncmp(version, "3.3.", 4) == 0 && is_number(version + 4, length - 4)) { + options->version = PM_OPTIONS_VERSION_CRUBY_3_3; + return true; + } - if (strncmp(version, "latest", length) == 0) { - options->version = PM_OPTIONS_VERSION_LATEST; - return true; - } + if (strncmp(version, "3.4.", 4) == 0 && is_number(version + 4, length - 4)) { + options->version = PM_OPTIONS_VERSION_LATEST; + return true; + } + } - return false; - default: - return false; + if (length >= 6) { + if (strncmp(version, "latest", 7) == 0) { // 7 to compare the \0 as well + options->version = PM_OPTIONS_VERSION_LATEST; + return true; + } } + + return false; +} + +/** + * Set the main script option on the given options struct. + */ +PRISM_EXPORTED_FUNCTION void +pm_options_main_script_set(pm_options_t *options, bool main_script) { + options->main_script = main_script; +} + +/** + * Set the partial script option on the given options struct. + */ +PRISM_EXPORTED_FUNCTION void +pm_options_partial_script_set(pm_options_t *options, bool partial_script) { + options->partial_script = partial_script; } // For some reason, GCC analyzer thinks we're leaking allocated scopes and @@ -233,6 +262,8 @@ pm_options_read(pm_options_t *options, const char *data) { options->command_line = (uint8_t) *data++; options->version = (pm_options_version_t) *data++; options->encoding_locked = ((uint8_t) *data++) > 0; + options->main_script = ((uint8_t) *data++) > 0; + options->partial_script = ((uint8_t) *data++) > 0; uint32_t scopes_count = pm_options_read_u32(data); data += 4; diff --git a/prism/options.h b/prism/options.h index 52b5380965a2ac..c96fa684ac666d 100644 --- a/prism/options.h +++ b/prism/options.h @@ -7,6 +7,7 @@ #define PRISM_OPTIONS_H #include "prism/defines.h" +#include "prism/util/pm_char.h" #include "prism/util/pm_string.h" #include @@ -139,6 +140,23 @@ typedef struct pm_options { * but ignore any encoding magic comments at the top of the file. */ bool encoding_locked; + + /** + * When the file being parsed is the main script, the shebang will be + * considered for command-line flags (or for implicit -x). The caller needs + * to pass this information to the parser so that it can behave correctly. + */ + bool main_script; + + /** + * When the file being parsed is considered a "partial" script, jumps will + * not be marked as errors if they are not contained within loops/blocks. + * This is used in the case that you're parsing a script that you know will + * be embedded inside another script later, but you do not have that context + * yet. For example, when parsing an ERB template that will be evaluated + * inside another script. + */ + bool partial_script; } pm_options_t; /** @@ -248,6 +266,22 @@ PRISM_EXPORTED_FUNCTION void pm_options_command_line_set(pm_options_t *options, */ PRISM_EXPORTED_FUNCTION bool pm_options_version_set(pm_options_t *options, const char *version, size_t length); +/** + * Set the main script option on the given options struct. + * + * @param options The options struct to set the main script value on. + * @param main_script The main script value to set. + */ +PRISM_EXPORTED_FUNCTION void pm_options_main_script_set(pm_options_t *options, bool main_script); + +/** + * Set the partial script option on the given options struct. + * + * @param options The options struct to set the partial script value on. + * @param partial_script The partial script value to set. + */ +PRISM_EXPORTED_FUNCTION void pm_options_partial_script_set(pm_options_t *options, bool partial_script); + /** * Allocate and zero out the scopes array on the given options struct. * @@ -315,6 +349,9 @@ PRISM_EXPORTED_FUNCTION void pm_options_free(pm_options_t *options); * | `1` | -l command line option | * | `1` | -a command line option | * | `1` | the version | + * | `1` | encoding locked | + * | `1` | main script | + * | `1` | partial script | * | `4` | the number of scopes | * | ... | the scopes | * @@ -347,8 +384,8 @@ PRISM_EXPORTED_FUNCTION void pm_options_free(pm_options_t *options); * * The encoding can have a length of 0, in which case we'll use the default * encoding (UTF-8). If it's not 0, it should correspond to a name of an * encoding that can be passed to `Encoding.find` in Ruby. - * * The frozen string literal and suppress warnings fields are booleans, so - * their values should be either 0 or 1. + * * The frozen string literal, encoding locked, main script, and partial script + * fields are booleans, so their values should be either 0 or 1. * * The number of scopes can be 0. * * @param options The options struct to deserialize into. diff --git a/prism/parser.h b/prism/parser.h index ea40fc910a23b2..992729d6555b1e 100644 --- a/prism/parser.h +++ b/prism/parser.h @@ -82,6 +82,23 @@ typedef enum { PM_HEREDOC_INDENT_TILDE, } pm_heredoc_indent_t; +/** + * All of the information necessary to store to lexing a heredoc. + */ +typedef struct { + /** A pointer to the start of the heredoc identifier. */ + const uint8_t *ident_start; + + /** The length of the heredoc identifier. */ + size_t ident_length; + + /** The type of quote that the heredoc uses. */ + pm_heredoc_quote_t quote; + + /** The type of indentation that the heredoc uses. */ + pm_heredoc_indent_t indent; +} pm_heredoc_lex_mode_t; + /** * When lexing Ruby source, the lexer has a small amount of state to tell which * kind of token it is currently lexing. For example, when we find the start of @@ -210,17 +227,10 @@ typedef struct pm_lex_mode { } string; struct { - /** A pointer to the start of the heredoc identifier. */ - const uint8_t *ident_start; - - /** The length of the heredoc identifier. */ - size_t ident_length; - - /** The type of quote that the heredoc uses. */ - pm_heredoc_quote_t quote; - - /** The type of indentation that the heredoc uses. */ - pm_heredoc_indent_t indent; + /** + * All of the data necessary to lex a heredoc. + */ + pm_heredoc_lex_mode_t base; /** * This is the pointer to the character where lexing should resume @@ -233,7 +243,7 @@ typedef struct pm_lex_mode { * line so that we know how much to dedent each line in the case of * a tilde heredoc. */ - size_t common_whitespace; + size_t *common_whitespace; /** True if the previous token ended with a line continuation. */ bool line_continuation; @@ -382,6 +392,9 @@ typedef enum { /** a rescue statement within a module statement */ PM_CONTEXT_MODULE_RESCUE, + /** a multiple target expression */ + PM_CONTEXT_MULTI_TARGET, + /** a parenthesized expression */ PM_CONTEXT_PARENS, @@ -861,6 +874,13 @@ struct pm_parser { */ bool parsing_eval; + /** + * Whether or not we are parsing a "partial" script, which is a script that + * will be evaluated in the context of another script, so we should not + * check jumps (next/break/etc.) for validity. + */ + bool partial_script; + /** Whether or not we're at the beginning of a command. */ bool command_start; diff --git a/prism/prism.c b/prism/prism.c index 43ce5df37197c7..7ef92ef5a59f0d 100644 --- a/prism/prism.c +++ b/prism/prism.c @@ -168,6 +168,7 @@ lex_mode_push_regexp(pm_parser_t *parser, uint8_t incrementor, uint8_t terminato breakpoints[index++] = incrementor; } + parser->explicit_encoding = NULL; return lex_mode_push(parser, lex_mode); } @@ -277,11 +278,6 @@ lex_state_beg_p(pm_parser_t *parser) { return lex_state_p(parser, PM_LEX_STATE_BEG_ANY) || ((parser->lex_state & (PM_LEX_STATE_ARG | PM_LEX_STATE_LABELED)) == (PM_LEX_STATE_ARG | PM_LEX_STATE_LABELED)); } -static inline bool -lex_state_arg_labeled_p(pm_parser_t *parser) { - return (parser->lex_state & (PM_LEX_STATE_ARG | PM_LEX_STATE_LABELED)) == (PM_LEX_STATE_ARG | PM_LEX_STATE_LABELED); -} - static inline bool lex_state_arg_p(pm_parser_t *parser) { return lex_state_p(parser, PM_LEX_STATE_ARG_ANY); @@ -548,10 +544,7 @@ pm_parser_warn_node(pm_parser_t *parser, const pm_node_t *node, pm_diagnostic_id * token. */ static void -pm_parser_err_heredoc_term(pm_parser_t *parser, pm_lex_mode_t *lex_mode) { - const uint8_t *ident_start = lex_mode->as.heredoc.ident_start; - size_t ident_length = lex_mode->as.heredoc.ident_length; - +pm_parser_err_heredoc_term(pm_parser_t *parser, const uint8_t *ident_start, size_t ident_length) { PM_PARSER_ERR_FORMAT( parser, ident_start, @@ -1038,7 +1031,7 @@ pm_parser_optional_constant_id_token(pm_parser_t *parser, const pm_token_t *toke */ static pm_node_t * pm_check_value_expression(pm_parser_t *parser, pm_node_t *node) { - pm_node_t* void_node = NULL; + pm_node_t *void_node = NULL; while (node != NULL) { switch (PM_NODE_TYPE(node)) { @@ -1054,24 +1047,43 @@ pm_check_value_expression(pm_parser_t *parser, pm_node_t *node) { case PM_BEGIN_NODE: { pm_begin_node_t *cast = (pm_begin_node_t *) node; - if (cast->statements == NULL && cast->ensure_clause != NULL) { - node = (pm_node_t *) cast->ensure_clause; - } - else { + if (cast->ensure_clause != NULL) { if (cast->rescue_clause != NULL) { - if (cast->rescue_clause->statements == NULL) { - return NULL; - } - else if (cast->else_clause != NULL) { - node = (pm_node_t *) cast->else_clause; + pm_node_t *vn = pm_check_value_expression(parser, (pm_node_t *) cast->rescue_clause); + if (vn != NULL) return vn; + } + + if (cast->statements != NULL) { + pm_node_t *vn = pm_check_value_expression(parser, (pm_node_t *) cast->statements); + if (vn != NULL) return vn; + } + + node = (pm_node_t *) cast->ensure_clause; + } else if (cast->rescue_clause != NULL) { + if (cast->statements == NULL) return NULL; + + pm_node_t *vn = pm_check_value_expression(parser, (pm_node_t *) cast->statements); + if (vn == NULL) return NULL; + if (void_node == NULL) void_node = vn; + + for (pm_rescue_node_t *rescue_clause = cast->rescue_clause; rescue_clause != NULL; rescue_clause = rescue_clause->subsequent) { + pm_node_t *vn = pm_check_value_expression(parser, (pm_node_t *) rescue_clause->statements); + if (vn == NULL) { + void_node = NULL; + break; } - else { - node = (pm_node_t *) cast->statements; + if (void_node == NULL) { + void_node = vn; } } - else { - node = (pm_node_t *) cast->statements; + + if (cast->else_clause != NULL) { + node = (pm_node_t *) cast->else_clause; + } else { + return void_node; } + } else { + node = (pm_node_t *) cast->statements; } break; @@ -2095,14 +2107,6 @@ pm_array_node_create(pm_parser_t *parser, const pm_token_t *opening) { return node; } -/** - * Return the size of the given array node. - */ -static inline size_t -pm_array_node_size(pm_array_node_t *node) { - return node->elements.size; -} - /** * Append an argument to an array node. */ @@ -2989,6 +2993,7 @@ pm_index_and_write_node_create(pm_parser_t *parser, pm_call_node_t *target, cons pm_index_arguments_check(parser, target->arguments, target->block); + assert(!target->block || PM_NODE_TYPE_P(target->block, PM_BLOCK_ARGUMENT_NODE)); *node = (pm_index_and_write_node_t) { { .type = PM_INDEX_AND_WRITE_NODE, @@ -3004,7 +3009,7 @@ pm_index_and_write_node_create(pm_parser_t *parser, pm_call_node_t *target, cons .opening_loc = target->opening_loc, .arguments = target->arguments, .closing_loc = target->closing_loc, - .block = target->block, + .block = (pm_block_argument_node_t *) target->block, .operator_loc = PM_LOCATION_TOKEN_VALUE(operator), .value = value }; @@ -3064,6 +3069,7 @@ pm_index_operator_write_node_create(pm_parser_t *parser, pm_call_node_t *target, pm_index_arguments_check(parser, target->arguments, target->block); + assert(!target->block || PM_NODE_TYPE_P(target->block, PM_BLOCK_ARGUMENT_NODE)); *node = (pm_index_operator_write_node_t) { { .type = PM_INDEX_OPERATOR_WRITE_NODE, @@ -3079,7 +3085,7 @@ pm_index_operator_write_node_create(pm_parser_t *parser, pm_call_node_t *target, .opening_loc = target->opening_loc, .arguments = target->arguments, .closing_loc = target->closing_loc, - .block = target->block, + .block = (pm_block_argument_node_t *) target->block, .binary_operator = pm_parser_constant_id_location(parser, operator->start, operator->end - 1), .binary_operator_loc = PM_LOCATION_TOKEN_VALUE(operator), .value = value @@ -3141,6 +3147,7 @@ pm_index_or_write_node_create(pm_parser_t *parser, pm_call_node_t *target, const pm_index_arguments_check(parser, target->arguments, target->block); + assert(!target->block || PM_NODE_TYPE_P(target->block, PM_BLOCK_ARGUMENT_NODE)); *node = (pm_index_or_write_node_t) { { .type = PM_INDEX_OR_WRITE_NODE, @@ -3156,7 +3163,7 @@ pm_index_or_write_node_create(pm_parser_t *parser, pm_call_node_t *target, const .opening_loc = target->opening_loc, .arguments = target->arguments, .closing_loc = target->closing_loc, - .block = target->block, + .block = (pm_block_argument_node_t *) target->block, .operator_loc = PM_LOCATION_TOKEN_VALUE(operator), .value = value }; @@ -3209,6 +3216,7 @@ pm_index_target_node_create(pm_parser_t *parser, pm_call_node_t *target) { pm_index_arguments_check(parser, target->arguments, target->block); + assert(!target->block || PM_NODE_TYPE_P(target->block, PM_BLOCK_ARGUMENT_NODE)); *node = (pm_index_target_node_t) { { .type = PM_INDEX_TARGET_NODE, @@ -3220,7 +3228,7 @@ pm_index_target_node_create(pm_parser_t *parser, pm_call_node_t *target) { .opening_loc = target->opening_loc, .arguments = target->arguments, .closing_loc = target->closing_loc, - .block = target->block + .block = (pm_block_argument_node_t *) target->block, }; // Here we're going to free the target, since it is no longer necessary. @@ -3235,7 +3243,7 @@ pm_index_target_node_create(pm_parser_t *parser, pm_call_node_t *target) { * Allocate and initialize a new CapturePatternNode node. */ static pm_capture_pattern_node_t * -pm_capture_pattern_node_create(pm_parser_t *parser, pm_node_t *value, pm_node_t *target, const pm_token_t *operator) { +pm_capture_pattern_node_create(pm_parser_t *parser, pm_node_t *value, pm_local_variable_target_node_t *target, const pm_token_t *operator) { pm_capture_pattern_node_t *node = PM_NODE_ALLOC(parser, pm_capture_pattern_node_t); *node = (pm_capture_pattern_node_t) { @@ -3244,7 +3252,7 @@ pm_capture_pattern_node_create(pm_parser_t *parser, pm_node_t *value, pm_node_t .node_id = PM_NODE_IDENTIFY(parser), .location = { .start = value->location.start, - .end = target->location.end + .end = target->base.location.end }, }, .value = value, @@ -4036,14 +4044,25 @@ pm_find_pattern_node_create(pm_parser_t *parser, pm_node_list_t *nodes) { pm_find_pattern_node_t *node = PM_NODE_ALLOC(parser, pm_find_pattern_node_t); pm_node_t *left = nodes->nodes[0]; + assert(PM_NODE_TYPE_P(left, PM_SPLAT_NODE)); + pm_splat_node_t *left_splat_node = (pm_splat_node_t *) left; + pm_node_t *right; if (nodes->size == 1) { right = (pm_node_t *) pm_missing_node_create(parser, left->location.end, left->location.end); } else { right = nodes->nodes[nodes->size - 1]; + assert(PM_NODE_TYPE_P(right, PM_SPLAT_NODE)); } +#if PRISM_SERIALIZE_ONLY_SEMANTICS_FIELDS + // FindPatternNode#right is typed as SplatNode in this case, so replace the potential MissingNode with a SplatNode. + // The resulting AST will anyway be ignored, but this file still needs to compile. + pm_splat_node_t *right_splat_node = PM_NODE_TYPE_P(right, PM_SPLAT_NODE) ? (pm_splat_node_t *) right : left_splat_node; +#else + pm_node_t *right_splat_node = right; +#endif *node = (pm_find_pattern_node_t) { { .type = PM_FIND_PATTERN_NODE, @@ -4054,8 +4073,8 @@ pm_find_pattern_node_create(pm_parser_t *parser, pm_node_list_t *nodes) { }, }, .constant = NULL, - .left = left, - .right = right, + .left = left_splat_node, + .right = right_splat_node, .requireds = { 0 }, .opening_loc = PM_OPTIONAL_LOCATION_NOT_PROVIDED_VALUE, .closing_loc = PM_OPTIONAL_LOCATION_NOT_PROVIDED_VALUE @@ -8543,6 +8562,7 @@ context_terminator(pm_context_t context, pm_token_t *token) { case PM_CONTEXT_MAIN: case PM_CONTEXT_DEF_PARAMS: case PM_CONTEXT_DEFINED: + case PM_CONTEXT_MULTI_TARGET: case PM_CONTEXT_TERNARY: case PM_CONTEXT_RESCUE_MODIFIER: return token->type == PM_TOKEN_EOF; @@ -8747,6 +8767,7 @@ context_human(pm_context_t context) { case PM_CONTEXT_LOOP_PREDICATE: return "loop predicate"; case PM_CONTEXT_MAIN: return "top level context"; case PM_CONTEXT_MODULE: return "module definition"; + case PM_CONTEXT_MULTI_TARGET: return "multiple targets"; case PM_CONTEXT_PARENS: return "parentheses"; case PM_CONTEXT_POSTEXE: return "'END' block"; case PM_CONTEXT_PREDICATE: return "predicate"; @@ -9021,6 +9042,10 @@ lex_global_variable(pm_parser_t *parser) { return PM_TOKEN_GLOBAL_VARIABLE; } + // True if multiple characters are allowed after the declaration of the + // global variable. Not true when it starts with "$-". + bool allow_multiple = true; + switch (*parser->current.end) { case '~': // $~: match-data case '*': // $*: argv @@ -9079,6 +9104,7 @@ lex_global_variable(pm_parser_t *parser) { case '-': parser->current.end++; + allow_multiple = false; /* fallthrough */ default: { size_t width; @@ -9086,7 +9112,7 @@ lex_global_variable(pm_parser_t *parser) { if ((width = char_is_identifier(parser, parser->current.end)) > 0) { do { parser->current.end += width; - } while (parser->current.end < parser->end && (width = char_is_identifier(parser, parser->current.end)) > 0); + } while (allow_multiple && parser->current.end < parser->end && (width = char_is_identifier(parser, parser->current.end)) > 0); } else if (pm_char_is_whitespace(peek(parser))) { // If we get here, then we have a $ followed by whitespace, // which is not allowed. @@ -9851,6 +9877,10 @@ escape_read(pm_parser_t *parser, pm_buffer_t *buffer, pm_buffer_t *regular_expre } case 'c': { parser->current.end++; + if (flags & PM_ESCAPE_FLAG_CONTROL) { + pm_parser_err_current(parser, PM_ERR_ESCAPE_INVALID_CONTROL_REPEAT); + } + if (parser->current.end == parser->end) { pm_parser_err_current(parser, PM_ERR_ESCAPE_INVALID_CONTROL); return; @@ -9864,10 +9894,6 @@ escape_read(pm_parser_t *parser, pm_buffer_t *buffer, pm_buffer_t *regular_expre return; } case '\\': - if (flags & PM_ESCAPE_FLAG_CONTROL) { - pm_parser_err_current(parser, PM_ERR_ESCAPE_INVALID_CONTROL_REPEAT); - return; - } parser->current.end++; if (match(parser, 'u') || match(parser, 'U')) { @@ -9901,6 +9927,10 @@ escape_read(pm_parser_t *parser, pm_buffer_t *buffer, pm_buffer_t *regular_expre } case 'C': { parser->current.end++; + if (flags & PM_ESCAPE_FLAG_CONTROL) { + pm_parser_err_current(parser, PM_ERR_ESCAPE_INVALID_CONTROL_REPEAT); + } + if (peek(parser) != '-') { size_t width = parser->encoding->char_width(parser->current.end, parser->end - parser->current.end); pm_parser_err(parser, parser->current.start, parser->current.end + width, PM_ERR_ESCAPE_INVALID_CONTROL); @@ -9921,10 +9951,6 @@ escape_read(pm_parser_t *parser, pm_buffer_t *buffer, pm_buffer_t *regular_expre return; } case '\\': - if (flags & PM_ESCAPE_FLAG_CONTROL) { - pm_parser_err_current(parser, PM_ERR_ESCAPE_INVALID_CONTROL_REPEAT); - return; - } parser->current.end++; if (match(parser, 'u') || match(parser, 'U')) { @@ -9959,6 +9985,10 @@ escape_read(pm_parser_t *parser, pm_buffer_t *buffer, pm_buffer_t *regular_expre } case 'M': { parser->current.end++; + if (flags & PM_ESCAPE_FLAG_META) { + pm_parser_err_current(parser, PM_ERR_ESCAPE_INVALID_META_REPEAT); + } + if (peek(parser) != '-') { size_t width = parser->encoding->char_width(parser->current.end, parser->end - parser->current.end); pm_parser_err(parser, parser->current.start, parser->current.end + width, PM_ERR_ESCAPE_INVALID_META); @@ -9974,10 +10004,6 @@ escape_read(pm_parser_t *parser, pm_buffer_t *buffer, pm_buffer_t *regular_expre uint8_t peeked = peek(parser); switch (peeked) { case '\\': - if (flags & PM_ESCAPE_FLAG_META) { - pm_parser_err_current(parser, PM_ERR_ESCAPE_INVALID_META_REPEAT); - return; - } parser->current.end++; if (match(parser, 'u') || match(parser, 'U')) { @@ -10020,6 +10046,8 @@ escape_read(pm_parser_t *parser, pm_buffer_t *buffer, pm_buffer_t *regular_expre default: { if (parser->current.end < parser->end) { escape_write_escape_encoded(parser, buffer); + } else { + pm_parser_err_current(parser, PM_ERR_INVALID_ESCAPE_CHARACTER); } return; } @@ -11123,12 +11151,14 @@ parser_lex(pm_parser_t *parser) { lex_mode_push(parser, (pm_lex_mode_t) { .mode = PM_LEX_HEREDOC, .as.heredoc = { - .ident_start = ident_start, - .ident_length = ident_length, + .base = { + .ident_start = ident_start, + .ident_length = ident_length, + .quote = quote, + .indent = indent + }, .next_start = parser->current.end, - .quote = quote, - .indent = indent, - .common_whitespace = (size_t) -1, + .common_whitespace = NULL, .line_continuation = false } }); @@ -11141,7 +11171,7 @@ parser_lex(pm_parser_t *parser) { // this is not a valid heredoc declaration. In this case we // will add an error, but we will still return a heredoc // start. - if (!ident_error) pm_parser_err_heredoc_term(parser, parser->lex_modes.current); + if (!ident_error) pm_parser_err_heredoc_term(parser, ident_start, ident_length); body_start = parser->end; } else { // Otherwise, we want to indicate that the body of the @@ -11277,7 +11307,16 @@ parser_lex(pm_parser_t *parser) { pm_token_type_t type = PM_TOKEN_AMPERSAND; if (lex_state_spcarg_p(parser, space_seen)) { - pm_parser_warn_token(parser, &parser->current, PM_WARN_AMBIGUOUS_PREFIX_AMPERSAND); + if ((peek(parser) != ':') || (peek_offset(parser, 1) == '\0')) { + pm_parser_warn_token(parser, &parser->current, PM_WARN_AMBIGUOUS_PREFIX_AMPERSAND); + } else { + const uint8_t delim = peek_offset(parser, 1); + + if ((delim != '\'') && (delim != '"') && !char_is_identifier(parser, parser->current.end + 1)) { + pm_parser_warn_token(parser, &parser->current, PM_WARN_AMBIGUOUS_PREFIX_AMPERSAND); + } + } + type = PM_TOKEN_UAMPERSAND; } else if (lex_state_beg_p(parser)) { type = PM_TOKEN_UAMPERSAND; @@ -11413,10 +11452,7 @@ parser_lex(pm_parser_t *parser) { if (match(parser, '.')) { if (match(parser, '.')) { // If we're _not_ inside a range within default parameters - if ( - !context_p(parser, PM_CONTEXT_DEFAULT_PARAMS) && - context_p(parser, PM_CONTEXT_DEF_PARAMS) - ) { + if (!context_p(parser, PM_CONTEXT_DEFAULT_PARAMS) && context_p(parser, PM_CONTEXT_DEF_PARAMS)) { if (lex_state_p(parser, PM_LEX_STATE_END)) { lex_state_set(parser, PM_LEX_STATE_BEG); } else { @@ -12478,6 +12514,7 @@ parser_lex(pm_parser_t *parser) { // Now let's grab the information about the identifier off of the // current lex mode. pm_lex_mode_t *lex_mode = parser->lex_modes.current; + pm_heredoc_lex_mode_t *heredoc_lex_mode = &lex_mode->as.heredoc.base; bool line_continuation = lex_mode->as.heredoc.line_continuation; lex_mode->as.heredoc.line_continuation = false; @@ -12487,15 +12524,16 @@ parser_lex(pm_parser_t *parser) { // terminator) but still continue parsing so that content after the // declaration of the heredoc can be parsed. if (parser->current.end >= parser->end) { - pm_parser_err_heredoc_term(parser, lex_mode); + pm_parser_err_heredoc_term(parser, heredoc_lex_mode->ident_start, heredoc_lex_mode->ident_length); parser->next_start = lex_mode->as.heredoc.next_start; parser->heredoc_end = parser->current.end; lex_state_set(parser, PM_LEX_STATE_END); + lex_mode_pop(parser); LEX(PM_TOKEN_HEREDOC_END); } - const uint8_t *ident_start = lex_mode->as.heredoc.ident_start; - size_t ident_length = lex_mode->as.heredoc.ident_length; + const uint8_t *ident_start = heredoc_lex_mode->ident_start; + size_t ident_length = heredoc_lex_mode->ident_length; // If we are immediately following a newline and we have hit the // terminator, then we need to return the ending of the heredoc. @@ -12520,10 +12558,7 @@ parser_lex(pm_parser_t *parser) { const uint8_t *terminator_start = ident_end - ident_length; const uint8_t *cursor = start; - if ( - lex_mode->as.heredoc.indent == PM_HEREDOC_INDENT_DASH || - lex_mode->as.heredoc.indent == PM_HEREDOC_INDENT_TILDE - ) { + if (heredoc_lex_mode->indent == PM_HEREDOC_INDENT_DASH || heredoc_lex_mode->indent == PM_HEREDOC_INDENT_TILDE) { while (cursor < terminator_start && pm_char_is_inline_whitespace(*cursor)) { cursor++; } @@ -12546,17 +12581,19 @@ parser_lex(pm_parser_t *parser) { } lex_state_set(parser, PM_LEX_STATE_END); + lex_mode_pop(parser); LEX(PM_TOKEN_HEREDOC_END); } } - size_t whitespace = pm_heredoc_strspn_inline_whitespace(parser, &start, lex_mode->as.heredoc.indent); + size_t whitespace = pm_heredoc_strspn_inline_whitespace(parser, &start, heredoc_lex_mode->indent); if ( - lex_mode->as.heredoc.indent == PM_HEREDOC_INDENT_TILDE && - (lex_mode->as.heredoc.common_whitespace > whitespace) && + heredoc_lex_mode->indent == PM_HEREDOC_INDENT_TILDE && + lex_mode->as.heredoc.common_whitespace != NULL && + (*lex_mode->as.heredoc.common_whitespace > whitespace) && peek_at(parser, start) != '\n' ) { - lex_mode->as.heredoc.common_whitespace = whitespace; + *lex_mode->as.heredoc.common_whitespace = whitespace; } } @@ -12565,7 +12602,7 @@ parser_lex(pm_parser_t *parser) { // strpbrk to find the first of these characters. uint8_t breakpoints[] = "\r\n\\#"; - pm_heredoc_quote_t quote = lex_mode->as.heredoc.quote; + pm_heredoc_quote_t quote = heredoc_lex_mode->quote; if (quote == PM_HEREDOC_QUOTE_SINGLE) { breakpoints[3] = '\0'; } @@ -12628,8 +12665,7 @@ parser_lex(pm_parser_t *parser) { // leading whitespace if we have a - or ~ heredoc. const uint8_t *cursor = start; - if (lex_mode->as.heredoc.indent == PM_HEREDOC_INDENT_DASH || - lex_mode->as.heredoc.indent == PM_HEREDOC_INDENT_TILDE) { + if (heredoc_lex_mode->indent == PM_HEREDOC_INDENT_DASH || heredoc_lex_mode->indent == PM_HEREDOC_INDENT_TILDE) { while (cursor < terminator_start && pm_char_is_inline_whitespace(*cursor)) { cursor++; } @@ -12645,16 +12681,16 @@ parser_lex(pm_parser_t *parser) { } } - size_t whitespace = pm_heredoc_strspn_inline_whitespace(parser, &start, lex_mode->as.heredoc.indent); + size_t whitespace = pm_heredoc_strspn_inline_whitespace(parser, &start, lex_mode->as.heredoc.base.indent); // If we have hit a newline that is followed by a valid // terminator, then we need to return the content of the // heredoc here as string content. Then, the next time a // token is lexed, it will match again and return the // end of the heredoc. - if (lex_mode->as.heredoc.indent == PM_HEREDOC_INDENT_TILDE) { - if ((lex_mode->as.heredoc.common_whitespace > whitespace) && peek_at(parser, start) != '\n') { - lex_mode->as.heredoc.common_whitespace = whitespace; + if (lex_mode->as.heredoc.base.indent == PM_HEREDOC_INDENT_TILDE) { + if ((lex_mode->as.heredoc.common_whitespace != NULL) && (*lex_mode->as.heredoc.common_whitespace > whitespace) && peek_at(parser, start) != '\n') { + *lex_mode->as.heredoc.common_whitespace = whitespace; } parser->current.end = breakpoint + 1; @@ -12721,7 +12757,7 @@ parser_lex(pm_parser_t *parser) { // If we are in a tilde here, we should // break out of the loop and return the // string content. - if (lex_mode->as.heredoc.indent == PM_HEREDOC_INDENT_TILDE) { + if (heredoc_lex_mode->indent == PM_HEREDOC_INDENT_TILDE) { const uint8_t *end = parser->current.end; pm_newline_list_append(&parser->newline_list, end); @@ -12947,7 +12983,7 @@ pm_binding_powers_t pm_binding_powers[PM_TOKEN_MAXIMUM] = { [PM_TOKEN_PERCENT] = LEFT_ASSOCIATIVE(PM_BINDING_POWER_FACTOR), [PM_TOKEN_SLASH] = LEFT_ASSOCIATIVE(PM_BINDING_POWER_FACTOR), [PM_TOKEN_STAR] = LEFT_ASSOCIATIVE(PM_BINDING_POWER_FACTOR), - [PM_TOKEN_USTAR] = LEFT_ASSOCIATIVE(PM_BINDING_POWER_FACTOR), + [PM_TOKEN_USTAR] = RIGHT_ASSOCIATIVE_UNARY(PM_BINDING_POWER_FACTOR), // -@ [PM_TOKEN_UMINUS] = RIGHT_ASSOCIATIVE_UNARY(PM_BINDING_POWER_UMINUS), @@ -13129,28 +13165,26 @@ expect3(pm_parser_t *parser, pm_token_type_t type1, pm_token_type_t type2, pm_to * lex mode accordingly. */ static void -expect1_heredoc_term(pm_parser_t *parser, pm_lex_mode_t *lex_mode) { +expect1_heredoc_term(pm_parser_t *parser, const uint8_t *ident_start, size_t ident_length) { if (match1(parser, PM_TOKEN_HEREDOC_END)) { - lex_mode_pop(parser); parser_lex(parser); } else { - pm_parser_err_heredoc_term(parser, lex_mode); - lex_mode_pop(parser); + pm_parser_err_heredoc_term(parser, ident_start, ident_length); parser->previous.start = parser->previous.end; parser->previous.type = PM_TOKEN_MISSING; } } static pm_node_t * -parse_expression(pm_parser_t *parser, pm_binding_power_t binding_power, bool accepts_command_call, pm_diagnostic_id_t diag_id); +parse_expression(pm_parser_t *parser, pm_binding_power_t binding_power, bool accepts_command_call, bool accepts_label, pm_diagnostic_id_t diag_id, uint16_t depth); /** * This is a wrapper of parse_expression, which also checks whether the * resulting node is a value expression. */ static pm_node_t * -parse_value_expression(pm_parser_t *parser, pm_binding_power_t binding_power, bool accepts_command_call, pm_diagnostic_id_t diag_id) { - pm_node_t *node = parse_expression(parser, binding_power, accepts_command_call, diag_id); +parse_value_expression(pm_parser_t *parser, pm_binding_power_t binding_power, bool accepts_command_call, bool accepts_label, pm_diagnostic_id_t diag_id, uint16_t depth) { + pm_node_t *node = parse_expression(parser, binding_power, accepts_command_call, accepts_label, diag_id, depth); pm_assert_value_expression(parser, node); return node; } @@ -13234,14 +13268,14 @@ token_begins_expression_p(pm_token_type_t type) { * prefixed by the * operator. */ static pm_node_t * -parse_starred_expression(pm_parser_t *parser, pm_binding_power_t binding_power, bool accepts_command_call, pm_diagnostic_id_t diag_id) { +parse_starred_expression(pm_parser_t *parser, pm_binding_power_t binding_power, bool accepts_command_call, pm_diagnostic_id_t diag_id, uint16_t depth) { if (accept1(parser, PM_TOKEN_USTAR)) { pm_token_t operator = parser->previous; - pm_node_t *expression = parse_value_expression(parser, binding_power, false, PM_ERR_EXPECT_EXPRESSION_AFTER_STAR); + pm_node_t *expression = parse_value_expression(parser, binding_power, false, false, PM_ERR_EXPECT_EXPRESSION_AFTER_STAR, (uint16_t) (depth + 1)); return (pm_node_t *) pm_splat_node_create(parser, &operator, expression); } - return parse_value_expression(parser, binding_power, accepts_command_call, diag_id); + return parse_value_expression(parser, binding_power, accepts_command_call, false, diag_id, depth); } /** @@ -13735,7 +13769,7 @@ parse_unwriteable_write(pm_parser_t *parser, pm_node_t *target, const pm_token_t * target node or a multi-target node. */ static pm_node_t * -parse_targets(pm_parser_t *parser, pm_node_t *first_target, pm_binding_power_t binding_power) { +parse_targets(pm_parser_t *parser, pm_node_t *first_target, pm_binding_power_t binding_power, uint16_t depth) { bool has_rest = PM_NODE_TYPE_P(first_target, PM_SPLAT_NODE); pm_multi_target_node_t *result = pm_multi_target_node_create(parser); @@ -13754,15 +13788,22 @@ parse_targets(pm_parser_t *parser, pm_node_t *first_target, pm_binding_power_t b pm_node_t *name = NULL; if (token_begins_expression_p(parser->current.type)) { - name = parse_expression(parser, binding_power, false, PM_ERR_EXPECT_EXPRESSION_AFTER_STAR); + name = parse_expression(parser, binding_power, false, false, PM_ERR_EXPECT_EXPRESSION_AFTER_STAR, (uint16_t) (depth + 1)); name = parse_target(parser, name, true, true); } pm_node_t *splat = (pm_node_t *) pm_splat_node_create(parser, &star_operator, name); pm_multi_target_node_targets_append(parser, result, splat); has_rest = true; + } else if (match1(parser, PM_TOKEN_PARENTHESIS_LEFT)) { + context_push(parser, PM_CONTEXT_MULTI_TARGET); + pm_node_t *target = parse_expression(parser, binding_power, false, false, PM_ERR_EXPECT_EXPRESSION_AFTER_COMMA, (uint16_t) (depth + 1)); + target = parse_target(parser, target, true, false); + + pm_multi_target_node_targets_append(parser, result, target); + context_pop(parser); } else if (token_begins_expression_p(parser->current.type)) { - pm_node_t *target = parse_expression(parser, binding_power, false, PM_ERR_EXPECT_EXPRESSION_AFTER_COMMA); + pm_node_t *target = parse_expression(parser, binding_power, false, false, PM_ERR_EXPECT_EXPRESSION_AFTER_COMMA, (uint16_t) (depth + 1)); target = parse_target(parser, target, true, false); pm_multi_target_node_targets_append(parser, result, target); @@ -13783,8 +13824,8 @@ parse_targets(pm_parser_t *parser, pm_node_t *first_target, pm_binding_power_t b * assignment. */ static pm_node_t * -parse_targets_validate(pm_parser_t *parser, pm_node_t *first_target, pm_binding_power_t binding_power) { - pm_node_t *result = parse_targets(parser, first_target, binding_power); +parse_targets_validate(pm_parser_t *parser, pm_node_t *first_target, pm_binding_power_t binding_power, uint16_t depth) { + pm_node_t *result = parse_targets(parser, first_target, binding_power, depth); accept1(parser, PM_TOKEN_NEWLINE); // Ensure that we have either an = or a ) after the targets. @@ -13799,7 +13840,7 @@ parse_targets_validate(pm_parser_t *parser, pm_node_t *first_target, pm_binding_ * Parse a list of statements separated by newlines or semicolons. */ static pm_statements_node_t * -parse_statements(pm_parser_t *parser, pm_context_t context) { +parse_statements(pm_parser_t *parser, pm_context_t context, uint16_t depth) { // First, skip past any optional terminators that might be at the beginning // of the statements. while (accept2(parser, PM_TOKEN_SEMICOLON, PM_TOKEN_NEWLINE)); @@ -13814,7 +13855,7 @@ parse_statements(pm_parser_t *parser, pm_context_t context) { context_push(parser, context); while (true) { - pm_node_t *node = parse_expression(parser, PM_BINDING_POWER_STATEMENT, true, PM_ERR_CANNOT_PARSE_EXPRESSION); + pm_node_t *node = parse_expression(parser, PM_BINDING_POWER_STATEMENT, true, false, PM_ERR_CANNOT_PARSE_EXPRESSION, (uint16_t) (depth + 1)); pm_statements_node_body_append(parser, statements, node, true); // If we're recovering from a syntax error, then we need to stop parsing @@ -13934,7 +13975,7 @@ pm_when_clause_static_literals_add(pm_parser_t *parser, pm_static_literals_t *li * Parse all of the elements of a hash. Return true if a double splat was found. */ static bool -parse_assocs(pm_parser_t *parser, pm_static_literals_t *literals, pm_node_t *node) { +parse_assocs(pm_parser_t *parser, pm_static_literals_t *literals, pm_node_t *node, uint16_t depth) { assert(PM_NODE_TYPE_P(node, PM_HASH_NODE) || PM_NODE_TYPE_P(node, PM_KEYWORD_HASH_NODE)); bool contains_keyword_splat = false; @@ -13953,9 +13994,9 @@ parse_assocs(pm_parser_t *parser, pm_static_literals_t *literals, pm_node_t *nod // inner hash to share the static literals with the outer // hash. parser->current_hash_keys = literals; - value = parse_value_expression(parser, PM_BINDING_POWER_DEFINED, false, PM_ERR_EXPECT_EXPRESSION_AFTER_SPLAT_HASH); + value = parse_value_expression(parser, PM_BINDING_POWER_DEFINED, false, false, PM_ERR_EXPECT_EXPRESSION_AFTER_SPLAT_HASH, (uint16_t) (depth + 1)); } else if (token_begins_expression_p(parser->current.type)) { - value = parse_value_expression(parser, PM_BINDING_POWER_DEFINED, false, PM_ERR_EXPECT_EXPRESSION_AFTER_SPLAT_HASH); + value = parse_value_expression(parser, PM_BINDING_POWER_DEFINED, false, false, PM_ERR_EXPECT_EXPRESSION_AFTER_SPLAT_HASH, (uint16_t) (depth + 1)); } else { pm_parser_scope_forwarding_keywords_check(parser, &operator); } @@ -13975,7 +14016,7 @@ parse_assocs(pm_parser_t *parser, pm_static_literals_t *literals, pm_node_t *nod pm_node_t *value = NULL; if (token_begins_expression_p(parser->current.type)) { - value = parse_value_expression(parser, PM_BINDING_POWER_DEFINED, false, PM_ERR_HASH_EXPRESSION_AFTER_LABEL); + value = parse_value_expression(parser, PM_BINDING_POWER_DEFINED, false, false, PM_ERR_HASH_EXPRESSION_AFTER_LABEL, (uint16_t) (depth + 1)); } else { if (parser->encoding->isupper_char(label.start, (label.end - 1) - label.start)) { pm_token_t constant = { .type = PM_TOKEN_CONSTANT, .start = label.start, .end = label.end - 1 }; @@ -14005,7 +14046,7 @@ parse_assocs(pm_parser_t *parser, pm_static_literals_t *literals, pm_node_t *nod break; } default: { - pm_node_t *key = parse_value_expression(parser, PM_BINDING_POWER_DEFINED, false, PM_ERR_HASH_KEY); + pm_node_t *key = parse_value_expression(parser, PM_BINDING_POWER_DEFINED, false, true, PM_ERR_HASH_KEY, (uint16_t) (depth + 1)); // Hash keys that are strings are automatically frozen. We will // mark that here. @@ -14023,7 +14064,7 @@ parse_assocs(pm_parser_t *parser, pm_static_literals_t *literals, pm_node_t *nod operator = parser->previous; } - pm_node_t *value = parse_value_expression(parser, PM_BINDING_POWER_DEFINED, false, PM_ERR_HASH_VALUE); + pm_node_t *value = parse_value_expression(parser, PM_BINDING_POWER_DEFINED, false, false, PM_ERR_HASH_VALUE, (uint16_t) (depth + 1)); element = (pm_node_t *) pm_assoc_node_create(parser, key, &operator, value); break; } @@ -14069,11 +14110,11 @@ parse_arguments_append(pm_parser_t *parser, pm_arguments_t *arguments, pm_node_t * Parse a list of arguments. */ static void -parse_arguments(pm_parser_t *parser, pm_arguments_t *arguments, bool accepts_forwarding, pm_token_type_t terminator) { +parse_arguments(pm_parser_t *parser, pm_arguments_t *arguments, bool accepts_forwarding, pm_token_type_t terminator, uint16_t depth) { pm_binding_power_t binding_power = pm_binding_powers[parser->current.type].left; - // First we need to check if the next token is one that could be the start of - // an argument. If it's not, then we can just return. + // First we need to check if the next token is one that could be the start + // of an argument. If it's not, then we can just return. if ( match2(parser, terminator, PM_TOKEN_EOF) || (binding_power != PM_BINDING_POWER_UNSET && binding_power < PM_BINDING_POWER_RANGE) || @@ -14108,7 +14149,7 @@ parse_arguments(pm_parser_t *parser, pm_arguments_t *arguments, bool accepts_for argument = (pm_node_t *) hash; pm_static_literals_t hash_keys = { 0 }; - bool contains_keyword_splat = parse_assocs(parser, &hash_keys, (pm_node_t *) hash); + bool contains_keyword_splat = parse_assocs(parser, &hash_keys, (pm_node_t *) hash, (uint16_t) (depth + 1)); parse_arguments_append(parser, arguments, argument); @@ -14127,7 +14168,7 @@ parse_arguments(pm_parser_t *parser, pm_arguments_t *arguments, bool accepts_for pm_node_t *expression = NULL; if (token_begins_expression_p(parser->current.type)) { - expression = parse_value_expression(parser, PM_BINDING_POWER_DEFINED, false, PM_ERR_EXPECT_ARGUMENT); + expression = parse_value_expression(parser, PM_BINDING_POWER_DEFINED, false, false, PM_ERR_EXPECT_ARGUMENT, (uint16_t) (depth + 1)); } else { pm_parser_scope_forwarding_block_check(parser, &operator); } @@ -14150,7 +14191,7 @@ parse_arguments(pm_parser_t *parser, pm_arguments_t *arguments, bool accepts_for pm_parser_scope_forwarding_positionals_check(parser, &operator); argument = (pm_node_t *) pm_splat_node_create(parser, &operator, NULL); } else { - pm_node_t *expression = parse_value_expression(parser, PM_BINDING_POWER_DEFINED, false, PM_ERR_EXPECT_EXPRESSION_AFTER_SPLAT); + pm_node_t *expression = parse_value_expression(parser, PM_BINDING_POWER_DEFINED, false, false, PM_ERR_EXPECT_EXPRESSION_AFTER_SPLAT, (uint16_t) (depth + 1)); if (parsed_bare_hash) { pm_parser_err(parser, operator.start, expression->location.end, PM_ERR_ARGUMENT_SPLAT_AFTER_ASSOC_SPLAT); @@ -14167,10 +14208,20 @@ parse_arguments(pm_parser_t *parser, pm_arguments_t *arguments, bool accepts_for parser_lex(parser); if (token_begins_expression_p(parser->current.type)) { - // If the token begins an expression then this ... was not actually - // argument forwarding but was instead a range. + // If the token begins an expression then this ... was + // not actually argument forwarding but was instead a + // range. pm_token_t operator = parser->previous; - pm_node_t *right = parse_expression(parser, PM_BINDING_POWER_RANGE, false, PM_ERR_EXPECT_EXPRESSION_AFTER_OPERATOR); + pm_node_t *right = parse_expression(parser, PM_BINDING_POWER_RANGE, false, false, PM_ERR_EXPECT_EXPRESSION_AFTER_OPERATOR, (uint16_t) (depth + 1)); + + // If we parse a range, we need to validate that we + // didn't accidentally violate the nonassoc rules of the + // ... operator. + if (PM_NODE_TYPE_P(right, PM_RANGE_NODE)) { + pm_range_node_t *range = (pm_range_node_t *) right; + pm_parser_err(parser, range->operator_loc.start, range->operator_loc.end, PM_ERR_UNEXPECTED_RANGE_OPERATOR); + } + argument = (pm_node_t *) pm_range_node_create(parser, NULL, &operator, right); } else { pm_parser_scope_forwarding_all_check(parser, &parser->previous); @@ -14180,6 +14231,7 @@ parse_arguments(pm_parser_t *parser, pm_arguments_t *arguments, bool accepts_for argument = (pm_node_t *) pm_forwarding_arguments_node_create(parser, &parser->previous); parse_arguments_append(parser, arguments, argument); + pm_node_flag_set((pm_node_t *) arguments->arguments, PM_ARGUMENTS_NODE_FLAGS_CONTAINS_FORWARDING); arguments->has_forwarding = true; parsed_forwarding_arguments = true; break; @@ -14189,7 +14241,7 @@ parse_arguments(pm_parser_t *parser, pm_arguments_t *arguments, bool accepts_for /* fallthrough */ default: { if (argument == NULL) { - argument = parse_value_expression(parser, PM_BINDING_POWER_DEFINED, !parsed_first_argument, PM_ERR_EXPECT_ARGUMENT); + argument = parse_value_expression(parser, PM_BINDING_POWER_DEFINED, !parsed_first_argument, true, PM_ERR_EXPECT_ARGUMENT, (uint16_t) (depth + 1)); } bool contains_keywords = false; @@ -14215,7 +14267,7 @@ parse_arguments(pm_parser_t *parser, pm_arguments_t *arguments, bool accepts_for pm_hash_key_static_literals_add(parser, &hash_keys, argument); // Finish parsing the one we are part way through. - pm_node_t *value = parse_value_expression(parser, PM_BINDING_POWER_DEFINED, false, PM_ERR_HASH_VALUE); + pm_node_t *value = parse_value_expression(parser, PM_BINDING_POWER_DEFINED, false, false, PM_ERR_HASH_VALUE, (uint16_t) (depth + 1)); argument = (pm_node_t *) pm_assoc_node_create(parser, argument, &operator, value); pm_keyword_hash_node_elements_append(bare_hash, argument); @@ -14226,14 +14278,11 @@ parse_arguments(pm_parser_t *parser, pm_arguments_t *arguments, bool accepts_for token_begins_expression_p(parser->current.type) || match2(parser, PM_TOKEN_USTAR_STAR, PM_TOKEN_LABEL) )) { - contains_keyword_splat = parse_assocs(parser, &hash_keys, (pm_node_t *) bare_hash); + contains_keyword_splat = parse_assocs(parser, &hash_keys, (pm_node_t *) bare_hash, (uint16_t) (depth + 1)); } pm_static_literals_free(&hash_keys); parsed_bare_hash = true; - } else if (accept1(parser, PM_TOKEN_KEYWORD_IN)) { - // TODO: Could we solve this with binding powers instead? - pm_parser_err_current(parser, PM_ERR_ARGUMENT_IN); } parse_arguments_append(parser, arguments, argument); @@ -14252,23 +14301,32 @@ parse_arguments(pm_parser_t *parser, pm_arguments_t *arguments, bool accepts_for // If parsing the argument failed, we need to stop parsing arguments. if (PM_NODE_TYPE_P(argument, PM_MISSING_NODE) || parser->recovering) break; - // If the terminator of these arguments is not EOF, then we have a specific - // token we're looking for. In that case we can accept a newline here - // because it is not functioning as a statement terminator. - if (terminator != PM_TOKEN_EOF) accept1(parser, PM_TOKEN_NEWLINE); + // If the terminator of these arguments is not EOF, then we have a + // specific token we're looking for. In that case we can accept a + // newline here because it is not functioning as a statement terminator. + bool accepted_newline = false; + if (terminator != PM_TOKEN_EOF) { + accepted_newline = accept1(parser, PM_TOKEN_NEWLINE); + } if (parser->previous.type == PM_TOKEN_COMMA && parsed_bare_hash) { - // If we previously were on a comma and we just parsed a bare hash, then - // we want to continue parsing arguments. This is because the comma was - // grabbed up by the hash parser. + // If we previously were on a comma and we just parsed a bare hash, + // then we want to continue parsing arguments. This is because the + // comma was grabbed up by the hash parser. + } else if (accept1(parser, PM_TOKEN_COMMA)) { + // If there was a comma, then we need to check if we also accepted a + // newline. If we did, then this is a syntax error. + if (accepted_newline) { + pm_parser_err_previous(parser, PM_ERR_INVALID_COMMA); + } } else { - // If there is no comma at the end of the argument list then we're done - // parsing arguments and can break out of this loop. - if (!accept1(parser, PM_TOKEN_COMMA)) break; + // If there is no comma at the end of the argument list then we're + // done parsing arguments and can break out of this loop. + break; } - // If we hit the terminator, then that means we have a trailing comma so we - // can accept that output as well. + // If we hit the terminator, then that means we have a trailing comma so + // we can accept that output as well. if (match1(parser, terminator)) break; } } @@ -14421,15 +14479,18 @@ parse_parameters( pm_binding_power_t binding_power, bool uses_parentheses, bool allows_trailing_comma, - bool allows_forwarding_parameters + bool allows_forwarding_parameters, + bool accepts_blocks_in_defaults, + uint16_t depth ) { - pm_parameters_node_t *params = pm_parameters_node_create(parser); - bool looping = true; - pm_do_loop_stack_push(parser, false); + + pm_parameters_node_t *params = pm_parameters_node_create(parser); pm_parameters_order_t order = PM_PARAMETERS_ORDER_NONE; - do { + while (true) { + bool parsing = true; + switch (parser->current.type) { case PM_TOKEN_PARENTHESIS_LEFT: { update_parameter_state(parser, &parser->current, &order); @@ -14532,18 +14593,22 @@ parse_parameters( bool repeated = pm_parser_parameter_name_check(parser, &name); pm_parser_local_add_token(parser, &name, 1); - if (accept1(parser, PM_TOKEN_EQUAL)) { - pm_token_t operator = parser->previous; + if (match1(parser, PM_TOKEN_EQUAL)) { + pm_token_t operator = parser->current; context_push(parser, PM_CONTEXT_DEFAULT_PARAMS); + parser_lex(parser); pm_constant_id_t name_id = pm_parser_constant_id_token(parser, &name); uint32_t reads = parser->version == PM_OPTIONS_VERSION_CRUBY_3_3 ? pm_locals_reads(&parser->current_scope->locals, name_id) : 0; - pm_node_t *value = parse_value_expression(parser, binding_power, false, PM_ERR_PARAMETER_NO_DEFAULT); + if (accepts_blocks_in_defaults) pm_accepts_block_stack_push(parser, true); + pm_node_t *value = parse_value_expression(parser, binding_power, false, false, PM_ERR_PARAMETER_NO_DEFAULT, (uint16_t) (depth + 1)); + if (accepts_blocks_in_defaults) pm_accepts_block_stack_pop(parser); + pm_optional_parameter_node_t *param = pm_optional_parameter_node_create(parser, &name, &operator, value); if (repeated) { - pm_node_flag_set_repeated_parameter((pm_node_t *)param); + pm_node_flag_set_repeated_parameter((pm_node_t *) param); } pm_parameters_node_optionals_append(params, param); @@ -14560,7 +14625,7 @@ parse_parameters( // then we can put a missing node in its place and stop parsing the // parameters entirely now. if (parser->recovering) { - looping = false; + parsing = false; break; } } else if (order > PM_PARAMETERS_ORDER_AFTER_OPTIONAL) { @@ -14582,6 +14647,8 @@ parse_parameters( case PM_TOKEN_LABEL: { if (!uses_parentheses) parser->in_keyword_arg = true; update_parameter_state(parser, &parser->current, &order); + + context_push(parser, PM_CONTEXT_DEFAULT_PARAMS); parser_lex(parser); pm_token_t name = parser->previous; @@ -14601,17 +14668,22 @@ parse_parameters( case PM_TOKEN_COMMA: case PM_TOKEN_PARENTHESIS_RIGHT: case PM_TOKEN_PIPE: { + context_pop(parser); + pm_node_t *param = (pm_node_t *) pm_required_keyword_parameter_node_create(parser, &name); if (repeated) { pm_node_flag_set_repeated_parameter(param); } + pm_parameters_node_keywords_append(params, param); break; } case PM_TOKEN_SEMICOLON: case PM_TOKEN_NEWLINE: { + context_pop(parser); + if (uses_parentheses) { - looping = false; + parsing = false; break; } @@ -14619,6 +14691,7 @@ parse_parameters( if (repeated) { pm_node_flag_set_repeated_parameter(param); } + pm_parameters_node_keywords_append(params, param); break; } @@ -14626,17 +14699,17 @@ parse_parameters( pm_node_t *param; if (token_begins_expression_p(parser->current.type)) { - context_push(parser, PM_CONTEXT_DEFAULT_PARAMS); - pm_constant_id_t name_id = pm_parser_constant_id_token(parser, &local); uint32_t reads = parser->version == PM_OPTIONS_VERSION_CRUBY_3_3 ? pm_locals_reads(&parser->current_scope->locals, name_id) : 0; - pm_node_t *value = parse_value_expression(parser, binding_power, false, PM_ERR_PARAMETER_NO_DEFAULT_KW); + + if (accepts_blocks_in_defaults) pm_accepts_block_stack_push(parser, true); + pm_node_t *value = parse_value_expression(parser, binding_power, false, false, PM_ERR_PARAMETER_NO_DEFAULT_KW, (uint16_t) (depth + 1)); + if (accepts_blocks_in_defaults) pm_accepts_block_stack_pop(parser); if (parser->version == PM_OPTIONS_VERSION_CRUBY_3_3 && (pm_locals_reads(&parser->current_scope->locals, name_id) != reads)) { PM_PARSER_ERR_TOKEN_FORMAT_CONTENT(parser, local, PM_ERR_PARAMETER_CIRCULAR); } - context_pop(parser); param = (pm_node_t *) pm_optional_keyword_parameter_node_create(parser, &name, value); } else { @@ -14646,13 +14719,15 @@ parse_parameters( if (repeated) { pm_node_flag_set_repeated_parameter(param); } + + context_pop(parser); pm_parameters_node_keywords_append(params, param); // If parsing the value of the parameter resulted in error recovery, // then we can put a missing node in its place and stop parsing the // parameters entirely now. if (parser->recovering) { - looping = false; + parsing = false; break; } } @@ -14738,7 +14813,7 @@ parse_parameters( } default: if (parser->previous.type == PM_TOKEN_COMMA) { - if (allows_trailing_comma) { + if (allows_trailing_comma && order >= PM_PARAMETERS_ORDER_NAMED) { // If we get here, then we have a trailing comma in a // block parameter list. pm_node_t *param = (pm_node_t *) pm_implicit_rest_node_create(parser, &parser->previous); @@ -14754,14 +14829,31 @@ parse_parameters( } } - looping = false; + parsing = false; break; } - if (looping && uses_parentheses) { - accept1(parser, PM_TOKEN_NEWLINE); + // If we hit some kind of issue while parsing the parameter, this would + // have been set to false. In that case, we need to break out of the + // loop. + if (!parsing) break; + + bool accepted_newline = false; + if (uses_parentheses) { + accepted_newline = accept1(parser, PM_TOKEN_NEWLINE); } - } while (looping && accept1(parser, PM_TOKEN_COMMA)); + + if (accept1(parser, PM_TOKEN_COMMA)) { + // If there was a comma, but we also accepted a newline, then this + // is a syntax error. + if (accepted_newline) { + pm_parser_err_previous(parser, PM_ERR_INVALID_COMMA); + } + } else { + // If there was no comma, then we're done parsing parameters. + break; + } + } pm_do_loop_stack_pop(parser); @@ -14835,7 +14927,7 @@ token_column(const pm_parser_t *parser, size_t newline_index, const pm_token_t * * function warns if the indentation of the two tokens does not match. */ static void -parser_warn_indentation_mismatch(pm_parser_t *parser, size_t opening_newline_index, const pm_token_t *opening_token, bool if_after_else) { +parser_warn_indentation_mismatch(pm_parser_t *parser, size_t opening_newline_index, const pm_token_t *opening_token, bool if_after_else, bool allow_indent) { // If these warnings are disabled (unlikely), then we can just return. if (!parser->warn_mismatched_indentation) return; @@ -14857,6 +14949,10 @@ parser_warn_indentation_mismatch(pm_parser_t *parser, size_t opening_newline_ind int64_t closing_column = token_column(parser, closing_newline_index, closing_token, true); if ((closing_column == -1) || (opening_column == closing_column)) return; + // If the closing column is greater than the opening column and we are + // allowing indentation, then we do not warn. + if (allow_indent && (closing_column > opening_column)) return; + // Otherwise, add a warning. PM_PARSER_WARN_FORMAT( parser, @@ -14886,11 +14982,11 @@ typedef enum { * nodes pointing to each other from the top. */ static inline void -parse_rescues(pm_parser_t *parser, size_t opening_newline_index, const pm_token_t *opening, pm_begin_node_t *parent_node, pm_rescues_type_t type) { +parse_rescues(pm_parser_t *parser, size_t opening_newline_index, const pm_token_t *opening, pm_begin_node_t *parent_node, pm_rescues_type_t type, uint16_t depth) { pm_rescue_node_t *current = NULL; while (match1(parser, PM_TOKEN_KEYWORD_RESCUE)) { - if (opening != NULL) parser_warn_indentation_mismatch(parser, opening_newline_index, opening, false); + if (opening != NULL) parser_warn_indentation_mismatch(parser, opening_newline_index, opening, false, false); parser_lex(parser); pm_rescue_node_t *rescue = pm_rescue_node_create(parser, &parser->previous); @@ -14903,7 +14999,7 @@ parse_rescues(pm_parser_t *parser, size_t opening_newline_index, const pm_token_ parser_lex(parser); pm_rescue_node_operator_set(rescue, &parser->previous); - pm_node_t *reference = parse_expression(parser, PM_BINDING_POWER_INDEX, false, PM_ERR_RESCUE_VARIABLE); + pm_node_t *reference = parse_expression(parser, PM_BINDING_POWER_INDEX, false, false, PM_ERR_RESCUE_VARIABLE, (uint16_t) (depth + 1)); reference = parse_target(parser, reference, false, false); pm_rescue_node_reference_set(rescue, reference); @@ -14921,7 +15017,7 @@ parse_rescues(pm_parser_t *parser, size_t opening_newline_index, const pm_token_ // we'll attempt to parse it here and any others delimited by commas. do { - pm_node_t *expression = parse_starred_expression(parser, PM_BINDING_POWER_DEFINED, false, PM_ERR_RESCUE_EXPRESSION); + pm_node_t *expression = parse_starred_expression(parser, PM_BINDING_POWER_DEFINED, false, PM_ERR_RESCUE_EXPRESSION, (uint16_t) (depth + 1)); pm_rescue_node_exceptions_append(rescue, expression); // If we hit a newline, then this is the end of the rescue expression. We @@ -14933,7 +15029,7 @@ parse_rescues(pm_parser_t *parser, size_t opening_newline_index, const pm_token_ if (accept1(parser, PM_TOKEN_EQUAL_GREATER)) { pm_rescue_node_operator_set(rescue, &parser->previous); - pm_node_t *reference = parse_expression(parser, PM_BINDING_POWER_INDEX, false, PM_ERR_RESCUE_VARIABLE); + pm_node_t *reference = parse_expression(parser, PM_BINDING_POWER_INDEX, false, false, PM_ERR_RESCUE_VARIABLE, (uint16_t) (depth + 1)); reference = parse_target(parser, reference, false, false); pm_rescue_node_reference_set(rescue, reference); @@ -14965,7 +15061,7 @@ parse_rescues(pm_parser_t *parser, size_t opening_newline_index, const pm_token_ default: assert(false && "unreachable"); context = PM_CONTEXT_BEGIN_RESCUE; break; } - pm_statements_node_t *statements = parse_statements(parser, context); + pm_statements_node_t *statements = parse_statements(parser, context, (uint16_t) (depth + 1)); if (statements != NULL) pm_rescue_node_statements_set(rescue, statements); pm_accepts_block_stack_pop(parser); @@ -14996,7 +15092,7 @@ parse_rescues(pm_parser_t *parser, size_t opening_newline_index, const pm_token_ pm_token_t else_keyword; if (match1(parser, PM_TOKEN_KEYWORD_ELSE)) { - if (opening != NULL) parser_warn_indentation_mismatch(parser, opening_newline_index, opening, false); + if (opening != NULL) parser_warn_indentation_mismatch(parser, opening_newline_index, opening, false, false); opening_newline_index = token_newline_index(parser); else_keyword = parser->current; @@ -15021,7 +15117,7 @@ parse_rescues(pm_parser_t *parser, size_t opening_newline_index, const pm_token_ default: assert(false && "unreachable"); context = PM_CONTEXT_BEGIN_RESCUE; break; } - else_statements = parse_statements(parser, context); + else_statements = parse_statements(parser, context, (uint16_t) (depth + 1)); pm_accepts_block_stack_pop(parser); accept2(parser, PM_TOKEN_NEWLINE, PM_TOKEN_SEMICOLON); @@ -15036,7 +15132,7 @@ parse_rescues(pm_parser_t *parser, size_t opening_newline_index, const pm_token_ } if (match1(parser, PM_TOKEN_KEYWORD_ENSURE)) { - if (opening != NULL) parser_warn_indentation_mismatch(parser, opening_newline_index, opening, false); + if (opening != NULL) parser_warn_indentation_mismatch(parser, opening_newline_index, opening, false, false); pm_token_t ensure_keyword = parser->current; parser_lex(parser); @@ -15058,7 +15154,7 @@ parse_rescues(pm_parser_t *parser, size_t opening_newline_index, const pm_token_ default: assert(false && "unreachable"); context = PM_CONTEXT_BEGIN_RESCUE; break; } - ensure_statements = parse_statements(parser, context); + ensure_statements = parse_statements(parser, context, (uint16_t) (depth + 1)); pm_accepts_block_stack_pop(parser); accept2(parser, PM_TOKEN_NEWLINE, PM_TOKEN_SEMICOLON); @@ -15069,7 +15165,7 @@ parse_rescues(pm_parser_t *parser, size_t opening_newline_index, const pm_token_ } if (match1(parser, PM_TOKEN_KEYWORD_END)) { - if (opening != NULL) parser_warn_indentation_mismatch(parser, opening_newline_index, opening, false); + if (opening != NULL) parser_warn_indentation_mismatch(parser, opening_newline_index, opening, false, false); pm_begin_node_end_keyword_set(parent_node, &parser->current); } else { pm_token_t end_keyword = (pm_token_t) { .type = PM_TOKEN_MISSING, .start = parser->previous.end, .end = parser->previous.end }; @@ -15082,11 +15178,11 @@ parse_rescues(pm_parser_t *parser, size_t opening_newline_index, const pm_token_ * class, module, def, etc.). */ static pm_begin_node_t * -parse_rescues_implicit_begin(pm_parser_t *parser, size_t opening_newline_index, const pm_token_t *opening, const uint8_t *start, pm_statements_node_t *statements, pm_rescues_type_t type) { +parse_rescues_implicit_begin(pm_parser_t *parser, size_t opening_newline_index, const pm_token_t *opening, const uint8_t *start, pm_statements_node_t *statements, pm_rescues_type_t type, uint16_t depth) { pm_token_t begin_keyword = not_provided(parser); pm_begin_node_t *node = pm_begin_node_create(parser, &begin_keyword, statements); - parse_rescues(parser, opening_newline_index, opening, node, type); + parse_rescues(parser, opening_newline_index, opening, node, type, (uint16_t) (depth + 1)); node->base.location.start = start; return node; @@ -15100,7 +15196,9 @@ parse_block_parameters( pm_parser_t *parser, bool allows_trailing_comma, const pm_token_t *opening, - bool is_lambda_literal + bool is_lambda_literal, + bool accepts_blocks_in_defaults, + uint16_t depth ) { pm_parameters_node_t *parameters = NULL; if (!match1(parser, PM_TOKEN_SEMICOLON)) { @@ -15109,7 +15207,9 @@ parse_block_parameters( is_lambda_literal ? PM_BINDING_POWER_DEFINED : PM_BINDING_POWER_INDEX, false, allows_trailing_comma, - false + false, + accepts_blocks_in_defaults, + (uint16_t) (depth + 1) ); } @@ -15263,7 +15363,7 @@ parse_blocklike_parameters(pm_parser_t *parser, pm_node_t *parameters, const pm_ * Parse a block. */ static pm_block_node_t * -parse_block(pm_parser_t *parser) { +parse_block(pm_parser_t *parser, uint16_t depth) { pm_token_t opening = parser->previous; accept1(parser, PM_TOKEN_NEWLINE); @@ -15279,7 +15379,7 @@ parse_block(pm_parser_t *parser) { parser->command_start = true; parser_lex(parser); } else { - block_parameters = parse_block_parameters(parser, true, &block_parameters_opening, false); + block_parameters = parse_block_parameters(parser, true, &block_parameters_opening, false, true, (uint16_t) (depth + 1)); accept1(parser, PM_TOKEN_NEWLINE); parser->command_start = true; expect1(parser, PM_TOKEN_PIPE, PM_ERR_BLOCK_PARAM_PIPE_TERM); @@ -15293,7 +15393,7 @@ parse_block(pm_parser_t *parser) { if (opening.type == PM_TOKEN_BRACE_LEFT) { if (!match1(parser, PM_TOKEN_BRACE_RIGHT)) { - statements = (pm_node_t *) parse_statements(parser, PM_CONTEXT_BLOCK_BRACES); + statements = (pm_node_t *) parse_statements(parser, PM_CONTEXT_BLOCK_BRACES, (uint16_t) (depth + 1)); } expect1(parser, PM_TOKEN_BRACE_RIGHT, PM_ERR_BLOCK_TERM_BRACE); @@ -15301,13 +15401,13 @@ parse_block(pm_parser_t *parser) { if (!match1(parser, PM_TOKEN_KEYWORD_END)) { if (!match3(parser, PM_TOKEN_KEYWORD_RESCUE, PM_TOKEN_KEYWORD_ELSE, PM_TOKEN_KEYWORD_ENSURE)) { pm_accepts_block_stack_push(parser, true); - statements = (pm_node_t *) parse_statements(parser, PM_CONTEXT_BLOCK_KEYWORDS); + statements = (pm_node_t *) parse_statements(parser, PM_CONTEXT_BLOCK_KEYWORDS, (uint16_t) (depth + 1)); pm_accepts_block_stack_pop(parser); } if (match2(parser, PM_TOKEN_KEYWORD_RESCUE, PM_TOKEN_KEYWORD_ENSURE)) { assert(statements == NULL || PM_NODE_TYPE_P(statements, PM_STATEMENTS_NODE)); - statements = (pm_node_t *) parse_rescues_implicit_begin(parser, 0, NULL, opening.start, (pm_statements_node_t *) statements, PM_RESCUES_BLOCK); + statements = (pm_node_t *) parse_rescues_implicit_begin(parser, 0, NULL, opening.start, (pm_statements_node_t *) statements, PM_RESCUES_BLOCK, (uint16_t) (depth + 1)); } } @@ -15330,7 +15430,7 @@ parse_block(pm_parser_t *parser) { * arguments, or blocks). */ static bool -parse_arguments_list(pm_parser_t *parser, pm_arguments_t *arguments, bool accepts_block, bool accepts_command_call) { +parse_arguments_list(pm_parser_t *parser, pm_arguments_t *arguments, bool accepts_block, bool accepts_command_call, uint16_t depth) { bool found = false; if (accept1(parser, PM_TOKEN_PARENTHESIS_LEFT)) { @@ -15341,7 +15441,7 @@ parse_arguments_list(pm_parser_t *parser, pm_arguments_t *arguments, bool accept arguments->closing_loc = PM_LOCATION_TOKEN_VALUE(&parser->previous); } else { pm_accepts_block_stack_push(parser, true); - parse_arguments(parser, arguments, accepts_block, PM_TOKEN_PARENTHESIS_RIGHT); + parse_arguments(parser, arguments, accepts_block, PM_TOKEN_PARENTHESIS_RIGHT, (uint16_t) (depth + 1)); if (!accept1(parser, PM_TOKEN_PARENTHESIS_RIGHT)) { PM_PARSER_ERR_TOKEN_FORMAT(parser, parser->current, PM_ERR_ARGUMENT_TERM_PAREN, pm_token_type_human(parser->current.type)); @@ -15359,13 +15459,13 @@ parse_arguments_list(pm_parser_t *parser, pm_arguments_t *arguments, bool accept // If we get here, then the subsequent token cannot be used as an infix // operator. In this case we assume the subsequent token is part of an // argument to this method call. - parse_arguments(parser, arguments, accepts_block, PM_TOKEN_EOF); + parse_arguments(parser, arguments, accepts_block, PM_TOKEN_EOF, (uint16_t) (depth + 1)); // If we have done with the arguments and still not consumed the comma, // then we have a trailing comma where we need to check whether it is // allowed or not. if (parser->previous.type == PM_TOKEN_COMMA && !match1(parser, PM_TOKEN_SEMICOLON)) { - pm_parser_err_previous(parser, PM_ERR_EXPECT_ARGUMENT); + PM_PARSER_ERR_TOKEN_FORMAT(parser, parser->previous, PM_ERR_EXPECT_ARGUMENT, pm_token_type_human(parser->current.type)); } pm_accepts_block_stack_pop(parser); @@ -15379,11 +15479,11 @@ parse_arguments_list(pm_parser_t *parser, pm_arguments_t *arguments, bool accept if (accept1(parser, PM_TOKEN_BRACE_LEFT)) { found |= true; - block = parse_block(parser); + block = parse_block(parser, (uint16_t) (depth + 1)); pm_arguments_validate_block(parser, arguments, block); } else if (pm_accepts_block_stack_p(parser) && accept1(parser, PM_TOKEN_KEYWORD_DO)) { found |= true; - block = parse_block(parser); + block = parse_block(parser, (uint16_t) (depth + 1)); } if (block != NULL) { @@ -15422,7 +15522,6 @@ parse_return(pm_parser_t *parser, pm_node_t *node) { case PM_CONTEXT_CASE_IN: case PM_CONTEXT_CASE_WHEN: case PM_CONTEXT_DEFAULT_PARAMS: - case PM_CONTEXT_DEF_PARAMS: case PM_CONTEXT_DEFINED: case PM_CONTEXT_ELSE: case PM_CONTEXT_ELSIF: @@ -15432,6 +15531,7 @@ parse_return(pm_parser_t *parser, pm_node_t *node) { case PM_CONTEXT_IF: case PM_CONTEXT_LOOP_PREDICATE: case PM_CONTEXT_MAIN: + case PM_CONTEXT_MULTI_TARGET: case PM_CONTEXT_PARENS: case PM_CONTEXT_POSTEXE: case PM_CONTEXT_PREDICATE: @@ -15468,6 +15568,7 @@ parse_return(pm_parser_t *parser, pm_node_t *node) { case PM_CONTEXT_BLOCK_RESCUE: case PM_CONTEXT_DEF_ELSE: case PM_CONTEXT_DEF_ENSURE: + case PM_CONTEXT_DEF_PARAMS: case PM_CONTEXT_DEF_RESCUE: case PM_CONTEXT_DEF: case PM_CONTEXT_LAMBDA_BRACES: @@ -15559,6 +15660,7 @@ parse_block_exit(pm_parser_t *parser, pm_node_t *node) { case PM_CONTEXT_MODULE_ENSURE: case PM_CONTEXT_MODULE_RESCUE: case PM_CONTEXT_MODULE: + case PM_CONTEXT_MULTI_TARGET: case PM_CONTEXT_PARENS: case PM_CONTEXT_PREDICATE: case PM_CONTEXT_RESCUE_MODIFIER: @@ -15638,10 +15740,10 @@ pop_block_exits(pm_parser_t *parser, pm_node_list_t *previous_block_exits) { } static inline pm_node_t * -parse_predicate(pm_parser_t *parser, pm_binding_power_t binding_power, pm_context_t context, pm_token_t *then_keyword) { +parse_predicate(pm_parser_t *parser, pm_binding_power_t binding_power, pm_context_t context, pm_token_t *then_keyword, uint16_t depth) { context_push(parser, PM_CONTEXT_PREDICATE); pm_diagnostic_id_t error_id = context == PM_CONTEXT_IF ? PM_ERR_CONDITIONAL_IF_PREDICATE : PM_ERR_CONDITIONAL_UNLESS_PREDICATE; - pm_node_t *predicate = parse_value_expression(parser, binding_power, true, error_id); + pm_node_t *predicate = parse_value_expression(parser, binding_power, true, false, error_id, (uint16_t) (depth + 1)); // Predicates are closed by a term, a "then", or a term and then a "then". bool predicate_closed = accept2(parser, PM_TOKEN_NEWLINE, PM_TOKEN_SEMICOLON); @@ -15660,19 +15762,19 @@ parse_predicate(pm_parser_t *parser, pm_binding_power_t binding_power, pm_contex } static inline pm_node_t * -parse_conditional(pm_parser_t *parser, pm_context_t context, size_t opening_newline_index, bool if_after_else) { +parse_conditional(pm_parser_t *parser, pm_context_t context, size_t opening_newline_index, bool if_after_else, uint16_t depth) { pm_node_list_t current_block_exits = { 0 }; pm_node_list_t *previous_block_exits = push_block_exits(parser, ¤t_block_exits); pm_token_t keyword = parser->previous; pm_token_t then_keyword = not_provided(parser); - pm_node_t *predicate = parse_predicate(parser, PM_BINDING_POWER_MODIFIER, context, &then_keyword); + pm_node_t *predicate = parse_predicate(parser, PM_BINDING_POWER_MODIFIER, context, &then_keyword, (uint16_t) (depth + 1)); pm_statements_node_t *statements = NULL; if (!match3(parser, PM_TOKEN_KEYWORD_ELSIF, PM_TOKEN_KEYWORD_ELSE, PM_TOKEN_KEYWORD_END)) { pm_accepts_block_stack_push(parser, true); - statements = parse_statements(parser, context); + statements = parse_statements(parser, context, (uint16_t) (depth + 1)); pm_accepts_block_stack_pop(parser); accept2(parser, PM_TOKEN_NEWLINE, PM_TOKEN_SEMICOLON); } @@ -15702,14 +15804,14 @@ parse_conditional(pm_parser_t *parser, pm_context_t context, size_t opening_newl PM_PARSER_WARN_TOKEN_FORMAT_CONTENT(parser, parser->current, PM_WARN_KEYWORD_EOL); } - parser_warn_indentation_mismatch(parser, opening_newline_index, &keyword, false); + parser_warn_indentation_mismatch(parser, opening_newline_index, &keyword, false, false); pm_token_t elsif_keyword = parser->current; parser_lex(parser); - pm_node_t *predicate = parse_predicate(parser, PM_BINDING_POWER_MODIFIER, PM_CONTEXT_ELSIF, &then_keyword); + pm_node_t *predicate = parse_predicate(parser, PM_BINDING_POWER_MODIFIER, PM_CONTEXT_ELSIF, &then_keyword, (uint16_t) (depth + 1)); pm_accepts_block_stack_push(parser, true); - pm_statements_node_t *statements = parse_statements(parser, PM_CONTEXT_ELSIF); + pm_statements_node_t *statements = parse_statements(parser, PM_CONTEXT_ELSIF, (uint16_t) (depth + 1)); pm_accepts_block_stack_pop(parser); accept2(parser, PM_TOKEN_NEWLINE, PM_TOKEN_SEMICOLON); @@ -15720,18 +15822,18 @@ parse_conditional(pm_parser_t *parser, pm_context_t context, size_t opening_newl } if (match1(parser, PM_TOKEN_KEYWORD_ELSE)) { - parser_warn_indentation_mismatch(parser, opening_newline_index, &keyword, false); + parser_warn_indentation_mismatch(parser, opening_newline_index, &keyword, false, false); opening_newline_index = token_newline_index(parser); parser_lex(parser); pm_token_t else_keyword = parser->previous; pm_accepts_block_stack_push(parser, true); - pm_statements_node_t *else_statements = parse_statements(parser, PM_CONTEXT_ELSE); + pm_statements_node_t *else_statements = parse_statements(parser, PM_CONTEXT_ELSE, (uint16_t) (depth + 1)); pm_accepts_block_stack_pop(parser); accept2(parser, PM_TOKEN_NEWLINE, PM_TOKEN_SEMICOLON); - parser_warn_indentation_mismatch(parser, opening_newline_index, &else_keyword, false); + parser_warn_indentation_mismatch(parser, opening_newline_index, &else_keyword, false, false); expect1(parser, PM_TOKEN_KEYWORD_END, PM_ERR_CONDITIONAL_TERM_ELSE); pm_else_node_t *else_node = pm_else_node_create(parser, &else_keyword, else_statements, &parser->previous); @@ -15748,7 +15850,7 @@ parse_conditional(pm_parser_t *parser, pm_context_t context, size_t opening_newl break; } } else { - parser_warn_indentation_mismatch(parser, opening_newline_index, &keyword, if_after_else); + parser_warn_indentation_mismatch(parser, opening_newline_index, &keyword, if_after_else, false); expect1(parser, PM_TOKEN_KEYWORD_END, PM_ERR_CONDITIONAL_TERM); } @@ -15884,7 +15986,7 @@ parse_unescaped_encoding(const pm_parser_t *parser) { * parsed as a string part, then NULL is returned. */ static pm_node_t * -parse_string_part(pm_parser_t *parser) { +parse_string_part(pm_parser_t *parser, uint16_t depth) { switch (parser->current.type) { // Here the lexer has returned to us plain string content. In this case // we'll create a string node that has no opening or closing and return that @@ -15925,7 +16027,7 @@ parse_string_part(pm_parser_t *parser) { if (!match1(parser, PM_TOKEN_EMBEXPR_END)) { pm_accepts_block_stack_push(parser, true); - statements = parse_statements(parser, PM_CONTEXT_EMBEXPR); + statements = parse_statements(parser, PM_CONTEXT_EMBEXPR, (uint16_t) (depth + 1)); pm_accepts_block_stack_pop(parser); } @@ -16050,7 +16152,7 @@ parse_operator_symbol(pm_parser_t *parser, const pm_token_t *opening, pm_lex_sta * symbols. */ static pm_node_t * -parse_symbol(pm_parser_t *parser, pm_lex_mode_t *lex_mode, pm_lex_state_t next_state) { +parse_symbol(pm_parser_t *parser, pm_lex_mode_t *lex_mode, pm_lex_state_t next_state, uint16_t depth) { const pm_token_t opening = parser->previous; if (lex_mode->mode != PM_LEX_STRING) { @@ -16096,7 +16198,7 @@ parse_symbol(pm_parser_t *parser, pm_lex_mode_t *lex_mode, pm_lex_state_t next_s } // Now we can parse the first part of the symbol. - pm_node_t *part = parse_string_part(parser); + pm_node_t *part = parse_string_part(parser, (uint16_t) (depth + 1)); // If we got a string part, then it's possible that we could transform // what looks like an interpolated symbol into a regular symbol. @@ -16111,7 +16213,7 @@ parse_symbol(pm_parser_t *parser, pm_lex_mode_t *lex_mode, pm_lex_state_t next_s if (part) pm_interpolated_symbol_node_append(symbol, part); while (!match2(parser, PM_TOKEN_STRING_END, PM_TOKEN_EOF)) { - if ((part = parse_string_part(parser)) != NULL) { + if ((part = parse_string_part(parser, (uint16_t) (depth + 1))) != NULL) { pm_interpolated_symbol_node_append(symbol, part); } } @@ -16187,7 +16289,7 @@ parse_symbol(pm_parser_t *parser, pm_lex_mode_t *lex_mode, pm_lex_state_t next_s * constant, or an interpolated symbol. */ static inline pm_node_t * -parse_undef_argument(pm_parser_t *parser) { +parse_undef_argument(pm_parser_t *parser, uint16_t depth) { switch (parser->current.type) { case PM_CASE_OPERATOR: { const pm_token_t opening = not_provided(parser); @@ -16212,7 +16314,7 @@ parse_undef_argument(pm_parser_t *parser) { pm_lex_mode_t lex_mode = *parser->lex_modes.current; parser_lex(parser); - return parse_symbol(parser, &lex_mode, PM_LEX_STATE_NONE); + return parse_symbol(parser, &lex_mode, PM_LEX_STATE_NONE, (uint16_t) (depth + 1)); } default: pm_parser_err_current(parser, PM_ERR_UNDEF_ARGUMENT); @@ -16227,7 +16329,7 @@ parse_undef_argument(pm_parser_t *parser) { * between the first and second arguments. */ static inline pm_node_t * -parse_alias_argument(pm_parser_t *parser, bool first) { +parse_alias_argument(pm_parser_t *parser, bool first, uint16_t depth) { switch (parser->current.type) { case PM_CASE_OPERATOR: { const pm_token_t opening = not_provided(parser); @@ -16253,7 +16355,7 @@ parse_alias_argument(pm_parser_t *parser, bool first) { pm_lex_mode_t lex_mode = *parser->lex_modes.current; parser_lex(parser); - return parse_symbol(parser, &lex_mode, first ? PM_LEX_STATE_FNAME | PM_LEX_STATE_FITEM : PM_LEX_STATE_NONE); + return parse_symbol(parser, &lex_mode, first ? PM_LEX_STATE_FNAME | PM_LEX_STATE_FITEM : PM_LEX_STATE_NONE, (uint16_t) (depth + 1)); } case PM_TOKEN_BACK_REFERENCE: parser_lex(parser); @@ -16453,11 +16555,9 @@ parse_strings_empty_content(const uint8_t *location) { * Parse a set of strings that could be concatenated together. */ static inline pm_node_t * -parse_strings(pm_parser_t *parser, pm_node_t *current) { +parse_strings(pm_parser_t *parser, pm_node_t *current, bool accepts_label, uint16_t depth) { assert(parser->current.type == PM_TOKEN_STRING_BEGIN); - bool concating = false; - bool state_is_arg_labeled = lex_state_arg_labeled_p(parser); while (match1(parser, PM_TOKEN_STRING_BEGIN)) { pm_node_t *node = NULL; @@ -16467,6 +16567,7 @@ parse_strings(pm_parser_t *parser, pm_node_t *current) { const pm_lex_mode_t *lex_mode = parser->lex_modes.current; assert(lex_mode->mode == PM_LEX_STRING); bool lex_interpolation = lex_mode->as.string.interpolation; + bool label_allowed = lex_mode->as.string.label_allowed && accepts_label; pm_token_t opening = parser->current; parser_lex(parser); @@ -16490,6 +16591,8 @@ parse_strings(pm_parser_t *parser, pm_node_t *current) { pm_string_shared_init(&symbol->unescaped, content.start, content.end); node = (pm_node_t *) symbol; + + if (!label_allowed) pm_parser_err_node(parser, node, PM_ERR_UNEXPECTED_LABEL); } else if (!lex_interpolation) { // If we don't accept interpolation then we expect the string to // start with a single string content node. @@ -16533,8 +16636,9 @@ parse_strings(pm_parser_t *parser, pm_node_t *current) { node = (pm_node_t *) pm_interpolated_string_node_create(parser, &opening, &parts, &parser->previous); pm_node_list_free(&parts); - } else if (accept1(parser, PM_TOKEN_LABEL_END) && !state_is_arg_labeled) { + } else if (accept1(parser, PM_TOKEN_LABEL_END)) { node = (pm_node_t *) pm_symbol_node_create_unescaped(parser, &opening, &content, &parser->previous, &unescaped, parse_symbol_encoding(parser, &content, &unescaped, true)); + if (!label_allowed) pm_parser_err_node(parser, node, PM_ERR_UNEXPECTED_LABEL); } else if (match1(parser, PM_TOKEN_EOF)) { pm_parser_err_token(parser, &opening, PM_ERR_STRING_LITERAL_EOF); node = (pm_node_t *) pm_string_node_create_unescaped(parser, &opening, &content, &parser->current, &unescaped); @@ -16573,6 +16677,7 @@ parse_strings(pm_parser_t *parser, pm_node_t *current) { } } else if (accept1(parser, PM_TOKEN_LABEL_END)) { node = (pm_node_t *) pm_symbol_node_create_unescaped(parser, &opening, &content, &parser->previous, &unescaped, parse_symbol_encoding(parser, &content, &unescaped, true)); + if (!label_allowed) pm_parser_err_node(parser, node, PM_ERR_UNEXPECTED_LABEL); } else { // If we get here, then we have interpolation so we'll need // to create a string or symbol node with interpolation. @@ -16585,13 +16690,14 @@ parse_strings(pm_parser_t *parser, pm_node_t *current) { pm_node_list_append(&parts, part); while (!match3(parser, PM_TOKEN_STRING_END, PM_TOKEN_LABEL_END, PM_TOKEN_EOF)) { - if ((part = parse_string_part(parser)) != NULL) { + if ((part = parse_string_part(parser, (uint16_t) (depth + 1))) != NULL) { pm_node_list_append(&parts, part); } } - if (accept1(parser, PM_TOKEN_LABEL_END) && !state_is_arg_labeled) { + if (accept1(parser, PM_TOKEN_LABEL_END)) { node = (pm_node_t *) pm_interpolated_symbol_node_create(parser, &opening, &parts, &parser->previous); + if (!label_allowed) pm_parser_err_node(parser, node, PM_ERR_UNEXPECTED_LABEL); } else if (match1(parser, PM_TOKEN_EOF)) { pm_parser_err_token(parser, &opening, PM_ERR_STRING_INTERPOLATED_TERM); node = (pm_node_t *) pm_interpolated_string_node_create(parser, &opening, &parts, &parser->current); @@ -16610,13 +16716,14 @@ parse_strings(pm_parser_t *parser, pm_node_t *current) { pm_node_t *part; while (!match3(parser, PM_TOKEN_STRING_END, PM_TOKEN_LABEL_END, PM_TOKEN_EOF)) { - if ((part = parse_string_part(parser)) != NULL) { + if ((part = parse_string_part(parser, (uint16_t) (depth + 1))) != NULL) { pm_node_list_append(&parts, part); } } if (accept1(parser, PM_TOKEN_LABEL_END)) { node = (pm_node_t *) pm_interpolated_symbol_node_create(parser, &opening, &parts, &parser->previous); + if (!label_allowed) pm_parser_err_node(parser, node, PM_ERR_UNEXPECTED_LABEL); } else if (match1(parser, PM_TOKEN_EOF)) { pm_parser_err_token(parser, &opening, PM_ERR_STRING_INTERPOLATED_TERM); node = (pm_node_t *) pm_interpolated_string_node_create(parser, &opening, &parts, &parser->current); @@ -16670,7 +16777,7 @@ parse_strings(pm_parser_t *parser, pm_node_t *current) { #define PM_PARSE_PATTERN_MULTI 2 static pm_node_t * -parse_pattern(pm_parser_t *parser, pm_constant_id_list_t *captures, uint8_t flags, pm_diagnostic_id_t diag_id); +parse_pattern(pm_parser_t *parser, pm_constant_id_list_t *captures, uint8_t flags, pm_diagnostic_id_t diag_id, uint16_t depth); /** * Add the newly created local to the list of captures for this pattern matching @@ -16693,7 +16800,7 @@ parse_pattern_capture(pm_parser_t *parser, pm_constant_id_list_t *captures, pm_c * Accept any number of constants joined by :: delimiters. */ static pm_node_t * -parse_pattern_constant_path(pm_parser_t *parser, pm_constant_id_list_t *captures, pm_node_t *node) { +parse_pattern_constant_path(pm_parser_t *parser, pm_constant_id_list_t *captures, pm_node_t *node, uint16_t depth) { // Now, if there are any :: operators that follow, parse them as constant // path nodes. while (accept1(parser, PM_TOKEN_COLON_COLON)) { @@ -16718,7 +16825,7 @@ parse_pattern_constant_path(pm_parser_t *parser, pm_constant_id_list_t *captures accept1(parser, PM_TOKEN_NEWLINE); if (!accept1(parser, PM_TOKEN_BRACKET_RIGHT)) { - inner = parse_pattern(parser, captures, PM_PARSE_PATTERN_TOP | PM_PARSE_PATTERN_MULTI, PM_ERR_PATTERN_EXPRESSION_AFTER_BRACKET); + inner = parse_pattern(parser, captures, PM_PARSE_PATTERN_TOP | PM_PARSE_PATTERN_MULTI, PM_ERR_PATTERN_EXPRESSION_AFTER_BRACKET, (uint16_t) (depth + 1)); accept1(parser, PM_TOKEN_NEWLINE); expect1(parser, PM_TOKEN_BRACKET_RIGHT, PM_ERR_PATTERN_TERM_BRACKET); } @@ -16730,7 +16837,7 @@ parse_pattern_constant_path(pm_parser_t *parser, pm_constant_id_list_t *captures accept1(parser, PM_TOKEN_NEWLINE); if (!accept1(parser, PM_TOKEN_PARENTHESIS_RIGHT)) { - inner = parse_pattern(parser, captures, PM_PARSE_PATTERN_TOP | PM_PARSE_PATTERN_MULTI, PM_ERR_PATTERN_EXPRESSION_AFTER_PAREN); + inner = parse_pattern(parser, captures, PM_PARSE_PATTERN_TOP | PM_PARSE_PATTERN_MULTI, PM_ERR_PATTERN_EXPRESSION_AFTER_PAREN, (uint16_t) (depth + 1)); accept1(parser, PM_TOKEN_NEWLINE); expect1(parser, PM_TOKEN_PARENTHESIS_RIGHT, PM_ERR_PATTERN_TERM_PAREN); } @@ -16956,7 +17063,7 @@ parse_pattern_hash_key(pm_parser_t *parser, pm_static_literals_t *keys, pm_node_ * Parse a hash pattern. */ static pm_hash_pattern_node_t * -parse_pattern_hash(pm_parser_t *parser, pm_constant_id_list_t *captures, pm_node_t *first_node) { +parse_pattern_hash(pm_parser_t *parser, pm_constant_id_list_t *captures, pm_node_t *first_node, uint16_t depth) { pm_node_list_t assocs = { 0 }; pm_static_literals_t keys = { 0 }; pm_node_t *rest = NULL; @@ -16971,14 +17078,14 @@ parse_pattern_hash(pm_parser_t *parser, pm_constant_id_list_t *captures, pm_node parse_pattern_hash_key(parser, &keys, first_node); pm_node_t *value; - if (match7(parser, PM_TOKEN_COMMA, PM_TOKEN_KEYWORD_THEN, PM_TOKEN_BRACE_RIGHT, PM_TOKEN_BRACKET_RIGHT, PM_TOKEN_PARENTHESIS_RIGHT, PM_TOKEN_NEWLINE, PM_TOKEN_SEMICOLON)) { + if (match8(parser, PM_TOKEN_COMMA, PM_TOKEN_KEYWORD_THEN, PM_TOKEN_BRACE_RIGHT, PM_TOKEN_BRACKET_RIGHT, PM_TOKEN_PARENTHESIS_RIGHT, PM_TOKEN_NEWLINE, PM_TOKEN_SEMICOLON, PM_TOKEN_EOF)) { // Otherwise, we will create an implicit local variable // target for the value. value = parse_pattern_hash_implicit_value(parser, captures, (pm_symbol_node_t *) first_node); } else { // Here we have a value for the first assoc in the list, so // we will parse it now. - value = parse_pattern(parser, captures, PM_PARSE_PATTERN_SINGLE, PM_ERR_PATTERN_EXPRESSION_AFTER_KEY); + value = parse_pattern(parser, captures, PM_PARSE_PATTERN_SINGLE, PM_ERR_PATTERN_EXPRESSION_AFTER_KEY, (uint16_t) (depth + 1)); } pm_token_t operator = not_provided(parser); @@ -17008,7 +17115,12 @@ parse_pattern_hash(pm_parser_t *parser, pm_constant_id_list_t *captures, pm_node // If there are any other assocs, then we'll parse them now. while (accept1(parser, PM_TOKEN_COMMA)) { // Here we need to break to support trailing commas. - if (match6(parser, PM_TOKEN_KEYWORD_THEN, PM_TOKEN_BRACE_RIGHT, PM_TOKEN_BRACKET_RIGHT, PM_TOKEN_PARENTHESIS_RIGHT, PM_TOKEN_NEWLINE, PM_TOKEN_SEMICOLON)) { + if (match7(parser, PM_TOKEN_KEYWORD_THEN, PM_TOKEN_BRACE_RIGHT, PM_TOKEN_BRACKET_RIGHT, PM_TOKEN_PARENTHESIS_RIGHT, PM_TOKEN_NEWLINE, PM_TOKEN_SEMICOLON, PM_TOKEN_EOF)) { + // Trailing commas are not allowed to follow a rest pattern. + if (rest != NULL) { + pm_parser_err_token(parser, &parser->current, PM_ERR_PATTERN_EXPRESSION_AFTER_REST); + } + break; } @@ -17025,7 +17137,7 @@ parse_pattern_hash(pm_parser_t *parser, pm_constant_id_list_t *captures, pm_node pm_node_t *key; if (match1(parser, PM_TOKEN_STRING_BEGIN)) { - key = parse_strings(parser, NULL); + key = parse_strings(parser, NULL, true, (uint16_t) (depth + 1)); if (PM_NODE_TYPE_P(key, PM_INTERPOLATED_SYMBOL_NODE)) { pm_parser_err_node(parser, key, PM_ERR_PATTERN_HASH_KEY_INTERPOLATED); @@ -17043,7 +17155,7 @@ parse_pattern_hash(pm_parser_t *parser, pm_constant_id_list_t *captures, pm_node if (match7(parser, PM_TOKEN_COMMA, PM_TOKEN_KEYWORD_THEN, PM_TOKEN_BRACE_RIGHT, PM_TOKEN_BRACKET_RIGHT, PM_TOKEN_PARENTHESIS_RIGHT, PM_TOKEN_NEWLINE, PM_TOKEN_SEMICOLON)) { value = parse_pattern_hash_implicit_value(parser, captures, (pm_symbol_node_t *) key); } else { - value = parse_pattern(parser, captures, PM_PARSE_PATTERN_SINGLE, PM_ERR_PATTERN_EXPRESSION_AFTER_KEY); + value = parse_pattern(parser, captures, PM_PARSE_PATTERN_SINGLE, PM_ERR_PATTERN_EXPRESSION_AFTER_KEY, (uint16_t) (depth + 1)); } pm_token_t operator = not_provided(parser); @@ -17068,7 +17180,7 @@ parse_pattern_hash(pm_parser_t *parser, pm_constant_id_list_t *captures, pm_node * Parse a pattern expression primitive. */ static pm_node_t * -parse_pattern_primitive(pm_parser_t *parser, pm_constant_id_list_t *captures, pm_diagnostic_id_t diag_id) { +parse_pattern_primitive(pm_parser_t *parser, pm_constant_id_list_t *captures, pm_diagnostic_id_t diag_id, uint16_t depth) { switch (parser->current.type) { case PM_TOKEN_IDENTIFIER: case PM_TOKEN_METHOD_NAME: { @@ -17100,7 +17212,7 @@ parse_pattern_primitive(pm_parser_t *parser, pm_constant_id_list_t *captures, pm // Otherwise, we'll parse the inner pattern, then deal with it depending // on the type it returns. - pm_node_t *inner = parse_pattern(parser, captures, PM_PARSE_PATTERN_MULTI, PM_ERR_PATTERN_EXPRESSION_AFTER_BRACKET); + pm_node_t *inner = parse_pattern(parser, captures, PM_PARSE_PATTERN_MULTI, PM_ERR_PATTERN_EXPRESSION_AFTER_BRACKET, (uint16_t) (depth + 1)); accept1(parser, PM_TOKEN_NEWLINE); expect1(parser, PM_TOKEN_BRACKET_RIGHT, PM_ERR_PATTERN_TERM_BRACKET); @@ -17167,7 +17279,7 @@ parse_pattern_primitive(pm_parser_t *parser, pm_constant_id_list_t *captures, pm first_node = parse_pattern_keyword_rest(parser, captures); break; case PM_TOKEN_STRING_BEGIN: - first_node = parse_expression(parser, PM_BINDING_POWER_MAX, false, PM_ERR_PATTERN_HASH_KEY_LABEL); + first_node = parse_expression(parser, PM_BINDING_POWER_MAX, false, true, PM_ERR_PATTERN_HASH_KEY_LABEL, (uint16_t) (depth + 1)); break; default: { PM_PARSER_ERR_TOKEN_FORMAT(parser, parser->current, PM_ERR_PATTERN_HASH_KEY, pm_token_type_human(parser->current.type)); @@ -17178,7 +17290,7 @@ parse_pattern_primitive(pm_parser_t *parser, pm_constant_id_list_t *captures, pm } } - node = parse_pattern_hash(parser, captures, first_node); + node = parse_pattern_hash(parser, captures, first_node, (uint16_t) (depth + 1)); accept1(parser, PM_TOKEN_NEWLINE); expect1(parser, PM_TOKEN_BRACE_RIGHT, PM_ERR_PATTERN_TERM_BRACE); @@ -17203,7 +17315,7 @@ parse_pattern_primitive(pm_parser_t *parser, pm_constant_id_list_t *captures, pm // expression as the right side of the range. switch (parser->current.type) { case PM_CASE_PRIMITIVE: { - pm_node_t *right = parse_expression(parser, PM_BINDING_POWER_MAX, false, PM_ERR_PATTERN_EXPRESSION_AFTER_RANGE); + pm_node_t *right = parse_expression(parser, PM_BINDING_POWER_MAX, false, false, PM_ERR_PATTERN_EXPRESSION_AFTER_RANGE, (uint16_t) (depth + 1)); return (pm_node_t *) pm_range_node_create(parser, NULL, &operator, right); } default: { @@ -17214,7 +17326,10 @@ parse_pattern_primitive(pm_parser_t *parser, pm_constant_id_list_t *captures, pm } } case PM_CASE_PRIMITIVE: { - pm_node_t *node = parse_expression(parser, PM_BINDING_POWER_MAX, false, diag_id); + pm_node_t *node = parse_expression(parser, PM_BINDING_POWER_MAX, false, true, diag_id, (uint16_t) (depth + 1)); + + // If we found a label, we need to immediately return to the caller. + if (pm_symbol_node_label_p(node)) return node; // Now that we have a primitive, we need to check if it's part of a range. if (accept2(parser, PM_TOKEN_DOT_DOT, PM_TOKEN_DOT_DOT_DOT)) { @@ -17225,7 +17340,7 @@ parse_pattern_primitive(pm_parser_t *parser, pm_constant_id_list_t *captures, pm // node. Otherwise, we'll create an endless range. switch (parser->current.type) { case PM_CASE_PRIMITIVE: { - pm_node_t *right = parse_expression(parser, PM_BINDING_POWER_MAX, false, PM_ERR_PATTERN_EXPRESSION_AFTER_RANGE); + pm_node_t *right = parse_expression(parser, PM_BINDING_POWER_MAX, false, false, PM_ERR_PATTERN_EXPRESSION_AFTER_RANGE, (uint16_t) (depth + 1)); return (pm_node_t *) pm_range_node_create(parser, node, &operator, right); } default: @@ -17290,7 +17405,7 @@ parse_pattern_primitive(pm_parser_t *parser, pm_constant_id_list_t *captures, pm pm_token_t lparen = parser->current; parser_lex(parser); - pm_node_t *expression = parse_value_expression(parser, PM_BINDING_POWER_STATEMENT, true, PM_ERR_PATTERN_EXPRESSION_AFTER_PIN); + pm_node_t *expression = parse_value_expression(parser, PM_BINDING_POWER_STATEMENT, true, false, PM_ERR_PATTERN_EXPRESSION_AFTER_PIN, (uint16_t) (depth + 1)); parser->pattern_matching_newlines = previous_pattern_matching_newlines; accept1(parser, PM_TOKEN_NEWLINE); @@ -17313,14 +17428,14 @@ parse_pattern_primitive(pm_parser_t *parser, pm_constant_id_list_t *captures, pm expect1(parser, PM_TOKEN_CONSTANT, PM_ERR_CONSTANT_PATH_COLON_COLON_CONSTANT); pm_constant_path_node_t *node = pm_constant_path_node_create(parser, NULL, &delimiter, &parser->previous); - return parse_pattern_constant_path(parser, captures, (pm_node_t *) node); + return parse_pattern_constant_path(parser, captures, (pm_node_t *) node, (uint16_t) (depth + 1)); } case PM_TOKEN_CONSTANT: { pm_token_t constant = parser->current; parser_lex(parser); pm_node_t *node = (pm_node_t *) pm_constant_read_node_create(parser, &constant); - return parse_pattern_constant_path(parser, captures, node); + return parse_pattern_constant_path(parser, captures, node, (uint16_t) (depth + 1)); } default: pm_parser_err_current(parser, diag_id); @@ -17333,10 +17448,10 @@ parse_pattern_primitive(pm_parser_t *parser, pm_constant_id_list_t *captures, pm * assignment. */ static pm_node_t * -parse_pattern_primitives(pm_parser_t *parser, pm_constant_id_list_t *captures, pm_diagnostic_id_t diag_id) { - pm_node_t *node = NULL; +parse_pattern_primitives(pm_parser_t *parser, pm_constant_id_list_t *captures, pm_node_t *first_node, pm_diagnostic_id_t diag_id, uint16_t depth) { + pm_node_t *node = first_node; - do { + while ((node == NULL) || accept1(parser, PM_TOKEN_PIPE)) { pm_token_t operator = parser->previous; switch (parser->current.type) { @@ -17350,9 +17465,9 @@ parse_pattern_primitives(pm_parser_t *parser, pm_constant_id_list_t *captures, p case PM_TOKEN_UDOT_DOT_DOT: case PM_CASE_PRIMITIVE: { if (node == NULL) { - node = parse_pattern_primitive(parser, captures, diag_id); + node = parse_pattern_primitive(parser, captures, diag_id, (uint16_t) (depth + 1)); } else { - pm_node_t *right = parse_pattern_primitive(parser, captures, PM_ERR_PATTERN_EXPRESSION_AFTER_PIPE); + pm_node_t *right = parse_pattern_primitive(parser, captures, PM_ERR_PATTERN_EXPRESSION_AFTER_PIPE, (uint16_t) (depth + 1)); node = (pm_node_t *) pm_alternation_pattern_node_create(parser, node, right, &operator); } @@ -17363,7 +17478,7 @@ parse_pattern_primitives(pm_parser_t *parser, pm_constant_id_list_t *captures, p pm_token_t opening = parser->current; parser_lex(parser); - pm_node_t *body = parse_pattern(parser, captures, PM_PARSE_PATTERN_SINGLE, PM_ERR_PATTERN_EXPRESSION_AFTER_PAREN); + pm_node_t *body = parse_pattern(parser, captures, PM_PARSE_PATTERN_SINGLE, PM_ERR_PATTERN_EXPRESSION_AFTER_PAREN, (uint16_t) (depth + 1)); accept1(parser, PM_TOKEN_NEWLINE); expect1(parser, PM_TOKEN_PARENTHESIS_RIGHT, PM_ERR_PATTERN_TERM_PAREN); pm_node_t *right = (pm_node_t *) pm_parentheses_node_create(parser, &opening, body, &parser->previous); @@ -17389,7 +17504,7 @@ parse_pattern_primitives(pm_parser_t *parser, pm_constant_id_list_t *captures, p break; } } - } while (accept1(parser, PM_TOKEN_PIPE)); + } // If we have an =>, then we are assigning this pattern to a variable. // In this case we should create an assignment node. @@ -17405,7 +17520,7 @@ parse_pattern_primitives(pm_parser_t *parser, pm_constant_id_list_t *captures, p } parse_pattern_capture(parser, captures, constant_id, &PM_LOCATION_TOKEN_VALUE(&parser->previous)); - pm_node_t *target = (pm_node_t *) pm_local_variable_target_node_create( + pm_local_variable_target_node_t *target = pm_local_variable_target_node_create( parser, &PM_LOCATION_TOKEN_VALUE(&parser->previous), constant_id, @@ -17422,7 +17537,7 @@ parse_pattern_primitives(pm_parser_t *parser, pm_constant_id_list_t *captures, p * Parse a pattern matching expression. */ static pm_node_t * -parse_pattern(pm_parser_t *parser, pm_constant_id_list_t *captures, uint8_t flags, pm_diagnostic_id_t diag_id) { +parse_pattern(pm_parser_t *parser, pm_constant_id_list_t *captures, uint8_t flags, pm_diagnostic_id_t diag_id, uint16_t depth) { pm_node_t *node = NULL; bool leading_rest = false; @@ -17432,7 +17547,7 @@ parse_pattern(pm_parser_t *parser, pm_constant_id_list_t *captures, uint8_t flag case PM_TOKEN_LABEL: { parser_lex(parser); pm_node_t *key = (pm_node_t *) pm_symbol_node_label_create(parser, &parser->previous); - node = (pm_node_t *) parse_pattern_hash(parser, captures, key); + node = (pm_node_t *) parse_pattern_hash(parser, captures, key, (uint16_t) (depth + 1)); if (!(flags & PM_PARSE_PATTERN_TOP)) { pm_parser_err_node(parser, node, PM_ERR_PATTERN_HASH_IMPLICIT); @@ -17442,7 +17557,7 @@ parse_pattern(pm_parser_t *parser, pm_constant_id_list_t *captures, uint8_t flag } case PM_TOKEN_USTAR_STAR: { node = parse_pattern_keyword_rest(parser, captures); - node = (pm_node_t *) parse_pattern_hash(parser, captures, node); + node = (pm_node_t *) parse_pattern_hash(parser, captures, node, (uint16_t) (depth + 1)); if (!(flags & PM_PARSE_PATTERN_TOP)) { pm_parser_err_node(parser, node, PM_ERR_PATTERN_HASH_IMPLICIT); @@ -17450,6 +17565,24 @@ parse_pattern(pm_parser_t *parser, pm_constant_id_list_t *captures, uint8_t flag return node; } + case PM_TOKEN_STRING_BEGIN: { + // We need special handling for string beginnings because they could + // be dynamic symbols leading to hash patterns. + node = parse_pattern_primitive(parser, captures, diag_id, (uint16_t) (depth + 1)); + + if (pm_symbol_node_label_p(node)) { + node = (pm_node_t *) parse_pattern_hash(parser, captures, node, (uint16_t) (depth + 1)); + + if (!(flags & PM_PARSE_PATTERN_TOP)) { + pm_parser_err_node(parser, node, PM_ERR_PATTERN_HASH_IMPLICIT); + } + + return node; + } + + node = parse_pattern_primitives(parser, captures, node, diag_id, (uint16_t) (depth + 1)); + break; + } case PM_TOKEN_USTAR: { if (flags & (PM_PARSE_PATTERN_TOP | PM_PARSE_PATTERN_MULTI)) { parser_lex(parser); @@ -17460,14 +17593,14 @@ parse_pattern(pm_parser_t *parser, pm_constant_id_list_t *captures, uint8_t flag } /* fallthrough */ default: - node = parse_pattern_primitives(parser, captures, diag_id); + node = parse_pattern_primitives(parser, captures, NULL, diag_id, (uint16_t) (depth + 1)); break; } // If we got a dynamic label symbol, then we need to treat it like the // beginning of a hash pattern. if (pm_symbol_node_label_p(node)) { - return (pm_node_t *) parse_pattern_hash(parser, captures, node); + return (pm_node_t *) parse_pattern_hash(parser, captures, node, (uint16_t) (depth + 1)); } if ((flags & PM_PARSE_PATTERN_MULTI) && match1(parser, PM_TOKEN_COMMA)) { @@ -17480,9 +17613,10 @@ parse_pattern(pm_parser_t *parser, pm_constant_id_list_t *captures, uint8_t flag // Gather up all of the patterns into the list. while (accept1(parser, PM_TOKEN_COMMA)) { // Break early here in case we have a trailing comma. - if (match6(parser, PM_TOKEN_KEYWORD_THEN, PM_TOKEN_BRACE_RIGHT, PM_TOKEN_BRACKET_RIGHT, PM_TOKEN_NEWLINE, PM_TOKEN_SEMICOLON, PM_TOKEN_EOF)) { + if (match6(parser, PM_TOKEN_KEYWORD_THEN, PM_TOKEN_BRACE_RIGHT, PM_TOKEN_BRACKET_RIGHT, PM_TOKEN_SEMICOLON, PM_TOKEN_NEWLINE, PM_TOKEN_EOF)) { node = (pm_node_t *) pm_implicit_rest_node_create(parser, &parser->previous); pm_node_list_append(&nodes, node); + trailing_rest = true; break; } @@ -17498,7 +17632,7 @@ parse_pattern(pm_parser_t *parser, pm_constant_id_list_t *captures, uint8_t flag trailing_rest = true; } else { - node = parse_pattern_primitives(parser, captures, PM_ERR_PATTERN_EXPRESSION_AFTER_COMMA); + node = parse_pattern_primitives(parser, captures, NULL, PM_ERR_PATTERN_EXPRESSION_AFTER_COMMA, (uint16_t) (depth + 1)); } pm_node_list_append(&nodes, node); @@ -17590,7 +17724,8 @@ pm_parser_err_prefix(pm_parser_t *parser, pm_diagnostic_id_t diag_id) { PM_PARSER_ERR_TOKEN_FORMAT(parser, parser->previous, diag_id, human, parser->previous.start[0]); break; } - case PM_ERR_UNARY_DISALLOWED: { + case PM_ERR_UNARY_DISALLOWED: + case PM_ERR_EXPECT_ARGUMENT: { PM_PARSER_ERR_TOKEN_FORMAT(parser, parser->current, diag_id, pm_token_type_human(parser->current.type)); break; } @@ -17605,7 +17740,12 @@ pm_parser_err_prefix(pm_parser_t *parser, pm_diagnostic_id_t diag_id) { */ static void parse_retry(pm_parser_t *parser, const pm_node_t *node) { +#define CONTEXT_NONE 0 +#define CONTEXT_THROUGH_ENSURE 1 +#define CONTEXT_THROUGH_ELSE 2 + pm_context_node_t *context_node = parser->current_context; + int context = CONTEXT_NONE; while (context_node != NULL) { switch (context_node->context) { @@ -17629,7 +17769,13 @@ parse_retry(pm_parser_t *parser, const pm_node_t *node) { case PM_CONTEXT_SCLASS: // These are the bad cases. We're not allowed to have a retry in // these contexts. - pm_parser_err_node(parser, node, PM_ERR_INVALID_RETRY_WITHOUT_RESCUE); + if (context == CONTEXT_NONE) { + pm_parser_err_node(parser, node, PM_ERR_INVALID_RETRY_WITHOUT_RESCUE); + } else if (context == CONTEXT_THROUGH_ENSURE) { + pm_parser_err_node(parser, node, PM_ERR_INVALID_RETRY_AFTER_ENSURE); + } else if (context == CONTEXT_THROUGH_ELSE) { + pm_parser_err_node(parser, node, PM_ERR_INVALID_RETRY_AFTER_ELSE); + } return; case PM_CONTEXT_BEGIN_ELSE: case PM_CONTEXT_BLOCK_ELSE: @@ -17640,8 +17786,8 @@ parse_retry(pm_parser_t *parser, const pm_node_t *node) { case PM_CONTEXT_SCLASS_ELSE: // These are also bad cases, but with a more specific error // message indicating the else. - pm_parser_err_node(parser, node, PM_ERR_INVALID_RETRY_AFTER_ELSE); - return; + context = CONTEXT_THROUGH_ELSE; + break; case PM_CONTEXT_BEGIN_ENSURE: case PM_CONTEXT_BLOCK_ENSURE: case PM_CONTEXT_CLASS_ENSURE: @@ -17651,8 +17797,8 @@ parse_retry(pm_parser_t *parser, const pm_node_t *node) { case PM_CONTEXT_SCLASS_ENSURE: // These are also bad cases, but with a more specific error // message indicating the ensure. - pm_parser_err_node(parser, node, PM_ERR_INVALID_RETRY_AFTER_ENSURE); - return; + context = CONTEXT_THROUGH_ENSURE; + break; case PM_CONTEXT_NONE: // This case should never happen. assert(false && "unreachable"); @@ -17672,6 +17818,7 @@ parse_retry(pm_parser_t *parser, const pm_node_t *node) { case PM_CONTEXT_LAMBDA_BRACES: case PM_CONTEXT_LAMBDA_DO_END: case PM_CONTEXT_LOOP_PREDICATE: + case PM_CONTEXT_MULTI_TARGET: case PM_CONTEXT_PARENS: case PM_CONTEXT_POSTEXE: case PM_CONTEXT_PREDICATE: @@ -17686,6 +17833,10 @@ parse_retry(pm_parser_t *parser, const pm_node_t *node) { context_node = context_node->prev; } + +#undef CONTEXT_NONE +#undef CONTEXT_ENSURE +#undef CONTEXT_ELSE } /** @@ -17751,6 +17902,7 @@ parse_yield(pm_parser_t *parser, const pm_node_t *node) { case PM_CONTEXT_LAMBDA_ENSURE: case PM_CONTEXT_LAMBDA_RESCUE: case PM_CONTEXT_LOOP_PREDICATE: + case PM_CONTEXT_MULTI_TARGET: case PM_CONTEXT_PARENS: case PM_CONTEXT_POSTEXE: case PM_CONTEXT_PREDICATE: @@ -17830,7 +17982,7 @@ parse_regular_expression_errors(pm_parser_t *parser, pm_regular_expression_node_ * Parse an expression that begins with the previous node that we just lexed. */ static inline pm_node_t * -parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, bool accepts_command_call, pm_diagnostic_id_t diag_id) { +parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, bool accepts_command_call, bool accepts_label, pm_diagnostic_id_t diag_id, uint16_t depth) { switch (parser->current.type) { case PM_TOKEN_BRACKET_LEFT_ARRAY: { parser_lex(parser); @@ -17840,19 +17992,31 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b bool parsed_bare_hash = false; while (!match2(parser, PM_TOKEN_BRACKET_RIGHT, PM_TOKEN_EOF)) { + bool accepted_newline = accept1(parser, PM_TOKEN_NEWLINE); + // Handle the case where we don't have a comma and we have a // newline followed by a right bracket. - if (accept1(parser, PM_TOKEN_NEWLINE) && match1(parser, PM_TOKEN_BRACKET_RIGHT)) { + if (accepted_newline && match1(parser, PM_TOKEN_BRACKET_RIGHT)) { break; } // Ensure that we have a comma between elements in the array. - if ((pm_array_node_size(array) != 0) && !accept1(parser, PM_TOKEN_COMMA)) { - const uint8_t *location = parser->previous.end; - PM_PARSER_ERR_FORMAT(parser, location, location, PM_ERR_ARRAY_SEPARATOR, pm_token_type_human(parser->current.type)); + if (array->elements.size > 0) { + if (accept1(parser, PM_TOKEN_COMMA)) { + // If there was a comma but we also accepts a newline, + // then this is a syntax error. + if (accepted_newline) { + pm_parser_err_previous(parser, PM_ERR_INVALID_COMMA); + } + } else { + // If there was no comma, then we need to add a syntax + // error. + const uint8_t *location = parser->previous.end; + PM_PARSER_ERR_FORMAT(parser, location, location, PM_ERR_ARRAY_SEPARATOR, pm_token_type_human(parser->current.type)); - parser->previous.start = location; - parser->previous.type = PM_TOKEN_MISSING; + parser->previous.start = location; + parser->previous.type = PM_TOKEN_MISSING; + } } // If we have a right bracket immediately following a comma, @@ -17869,7 +18033,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b if (match3(parser, PM_TOKEN_BRACKET_RIGHT, PM_TOKEN_COMMA, PM_TOKEN_EOF)) { pm_parser_scope_forwarding_positionals_check(parser, &operator); } else { - expression = parse_value_expression(parser, PM_BINDING_POWER_DEFINED, false, PM_ERR_ARRAY_EXPRESSION_AFTER_STAR); + expression = parse_value_expression(parser, PM_BINDING_POWER_DEFINED, false, false, PM_ERR_ARRAY_EXPRESSION_AFTER_STAR, (uint16_t) (depth + 1)); } element = (pm_node_t *) pm_splat_node_create(parser, &operator, expression); @@ -17882,13 +18046,13 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b pm_static_literals_t hash_keys = { 0 }; if (!match8(parser, PM_TOKEN_EOF, PM_TOKEN_NEWLINE, PM_TOKEN_SEMICOLON, PM_TOKEN_EOF, PM_TOKEN_BRACE_RIGHT, PM_TOKEN_BRACKET_RIGHT, PM_TOKEN_KEYWORD_DO, PM_TOKEN_PARENTHESIS_RIGHT)) { - parse_assocs(parser, &hash_keys, element); + parse_assocs(parser, &hash_keys, element, (uint16_t) (depth + 1)); } pm_static_literals_free(&hash_keys); parsed_bare_hash = true; } else { - element = parse_value_expression(parser, PM_BINDING_POWER_DEFINED, false, PM_ERR_ARRAY_EXPRESSION); + element = parse_value_expression(parser, PM_BINDING_POWER_DEFINED, false, true, PM_ERR_ARRAY_EXPRESSION, (uint16_t) (depth + 1)); if (pm_symbol_node_label_p(element) || accept1(parser, PM_TOKEN_EQUAL_GREATER)) { if (parsed_bare_hash) { @@ -17906,13 +18070,13 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b operator = not_provided(parser); } - pm_node_t *value = parse_value_expression(parser, PM_BINDING_POWER_DEFINED, false, PM_ERR_HASH_VALUE); + pm_node_t *value = parse_value_expression(parser, PM_BINDING_POWER_DEFINED, false, false, PM_ERR_HASH_VALUE, (uint16_t) (depth + 1)); pm_node_t *assoc = (pm_node_t *) pm_assoc_node_create(parser, element, &operator, value); pm_keyword_hash_node_elements_append(hash, assoc); element = (pm_node_t *) hash; if (accept1(parser, PM_TOKEN_COMMA) && !match1(parser, PM_TOKEN_BRACKET_RIGHT)) { - parse_assocs(parser, &hash_keys, element); + parse_assocs(parser, &hash_keys, element, (uint16_t) (depth + 1)); } pm_static_literals_free(&hash_keys); @@ -17925,7 +18089,13 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b } accept1(parser, PM_TOKEN_NEWLINE); - expect1(parser, PM_TOKEN_BRACKET_RIGHT, PM_ERR_ARRAY_TERM); + + if (!accept1(parser, PM_TOKEN_BRACKET_RIGHT)) { + PM_PARSER_ERR_TOKEN_FORMAT(parser, parser->current, PM_ERR_ARRAY_TERM, pm_token_type_human(parser->current.type)); + parser->previous.start = parser->previous.end; + parser->previous.type = PM_TOKEN_MISSING; + } + pm_array_node_close_set(array, &parser->previous); pm_accepts_block_stack_pop(parser); @@ -17956,7 +18126,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b // of statements within the parentheses. pm_accepts_block_stack_push(parser, true); context_push(parser, PM_CONTEXT_PARENS); - pm_node_t *statement = parse_expression(parser, PM_BINDING_POWER_STATEMENT, true, PM_ERR_CANNOT_PARSE_EXPRESSION); + pm_node_t *statement = parse_expression(parser, PM_BINDING_POWER_STATEMENT, true, false, PM_ERR_CANNOT_PARSE_EXPRESSION, (uint16_t) (depth + 1)); context_pop(parser); // Determine if this statement is followed by a terminator. In the @@ -18002,14 +18172,32 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b multi_target->base.location.start = lparen_loc.start; multi_target->base.location.end = rparen_loc.end; - if (match1(parser, PM_TOKEN_COMMA)) { - if (binding_power == PM_BINDING_POWER_STATEMENT) { - return parse_targets_validate(parser, (pm_node_t *) multi_target, PM_BINDING_POWER_INDEX); - } - return (pm_node_t *) multi_target; + pm_node_t *result; + if (match1(parser, PM_TOKEN_COMMA) && (binding_power == PM_BINDING_POWER_STATEMENT)) { + result = parse_targets(parser, (pm_node_t *) multi_target, PM_BINDING_POWER_INDEX, (uint16_t) (depth + 1)); + accept1(parser, PM_TOKEN_NEWLINE); + } else { + result = (pm_node_t *) multi_target; } - return parse_target_validate(parser, (pm_node_t *) multi_target, false); + if (context_p(parser, PM_CONTEXT_MULTI_TARGET)) { + // All set, this is explicitly allowed by the parent + // context. + } else if (context_p(parser, PM_CONTEXT_FOR_INDEX) && match1(parser, PM_TOKEN_KEYWORD_IN)) { + // All set, we're inside a for loop and we're parsing + // multiple targets. + } else if (binding_power != PM_BINDING_POWER_STATEMENT) { + // Multi targets are not allowed when it's not a + // statement level. + pm_parser_err_node(parser, result, PM_ERR_WRITE_TARGET_UNEXPECTED); + } else if (!match2(parser, PM_TOKEN_EQUAL, PM_TOKEN_PARENTHESIS_RIGHT)) { + // Multi targets must be followed by an equal sign in + // order to be valid (or a right parenthesis if they are + // nested). + pm_parser_err_node(parser, result, PM_ERR_WRITE_TARGET_UNEXPECTED); + } + + return result; } // If we have a single statement and are ending on a right parenthesis @@ -18036,7 +18224,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b // Parse each statement within the parentheses. while (true) { - pm_node_t *node = parse_expression(parser, PM_BINDING_POWER_STATEMENT, true, PM_ERR_CANNOT_PARSE_EXPRESSION); + pm_node_t *node = parse_expression(parser, PM_BINDING_POWER_STATEMENT, true, false, PM_ERR_CANNOT_PARSE_EXPRESSION, (uint16_t) (depth + 1)); pm_statements_node_body_append(parser, statements, node, true); // If we're recovering from a syntax error, then we need to stop @@ -18066,6 +18254,17 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b } } + // When we're parsing multi targets, we allow them to be followed by + // a right parenthesis if they are at the statement level. This is + // only possible if they are the final statement in a parentheses. + // We need to explicitly reject that here. + { + const pm_node_t *statement = statements->body.nodes[statements->body.size - 1]; + if (PM_NODE_TYPE_P(statement, PM_MULTI_TARGET_NODE)) { + pm_parser_err_node(parser, statement, PM_ERR_WRITE_TARGET_UNEXPECTED); + } + } + context_pop(parser); pm_accepts_block_stack_pop(parser); expect1(parser, PM_TOKEN_PARENTHESIS_RIGHT, PM_ERR_EXPECT_RPAREN); @@ -18094,10 +18293,10 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b if (!match2(parser, PM_TOKEN_BRACE_RIGHT, PM_TOKEN_EOF)) { if (current_hash_keys != NULL) { - parse_assocs(parser, current_hash_keys, (pm_node_t *) node); + parse_assocs(parser, current_hash_keys, (pm_node_t *) node, (uint16_t) (depth + 1)); } else { pm_static_literals_t hash_keys = { 0 }; - parse_assocs(parser, &hash_keys, (pm_node_t *) node); + parse_assocs(parser, &hash_keys, (pm_node_t *) node, (uint16_t) (depth + 1)); pm_static_literals_free(&hash_keys); } @@ -18128,7 +18327,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b // Characters can be followed by strings in which case they are // automatically concatenated. if (match1(parser, PM_TOKEN_STRING_BEGIN)) { - return parse_strings(parser, node); + return parse_strings(parser, node, false, (uint16_t) (depth + 1)); } return node; @@ -18138,7 +18337,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b pm_node_t *node = (pm_node_t *) pm_class_variable_read_node_create(parser, &parser->previous); if (binding_power == PM_BINDING_POWER_STATEMENT && match1(parser, PM_TOKEN_COMMA)) { - node = parse_targets_validate(parser, node, PM_BINDING_POWER_INDEX); + node = parse_targets_validate(parser, node, PM_BINDING_POWER_INDEX, (uint16_t) (depth + 1)); } return node; @@ -18156,7 +18355,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b match1(parser, PM_TOKEN_BRACE_LEFT) ) { pm_arguments_t arguments = { 0 }; - parse_arguments_list(parser, &arguments, true, accepts_command_call); + parse_arguments_list(parser, &arguments, true, accepts_command_call, (uint16_t) (depth + 1)); return (pm_node_t *) pm_call_node_fcall_create(parser, &constant, &arguments); } @@ -18165,7 +18364,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b if ((binding_power == PM_BINDING_POWER_STATEMENT) && match1(parser, PM_TOKEN_COMMA)) { // If we get here, then we have a comma immediately following a // constant, so we're going to parse this as a multiple assignment. - node = parse_targets_validate(parser, node, PM_BINDING_POWER_INDEX); + node = parse_targets_validate(parser, node, PM_BINDING_POWER_INDEX, (uint16_t) (depth + 1)); } return node; @@ -18178,7 +18377,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b pm_node_t *node = (pm_node_t *) pm_constant_path_node_create(parser, NULL, &delimiter, &parser->previous); if ((binding_power == PM_BINDING_POWER_STATEMENT) && match1(parser, PM_TOKEN_COMMA)) { - node = parse_targets_validate(parser, node, PM_BINDING_POWER_INDEX); + node = parse_targets_validate(parser, node, PM_BINDING_POWER_INDEX, (uint16_t) (depth + 1)); } return node; @@ -18188,7 +18387,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b pm_token_t operator = parser->current; parser_lex(parser); - pm_node_t *right = parse_expression(parser, pm_binding_powers[operator.type].left, false, PM_ERR_EXPECT_EXPRESSION_AFTER_OPERATOR); + pm_node_t *right = parse_expression(parser, pm_binding_powers[operator.type].left, false, false, PM_ERR_EXPECT_EXPRESSION_AFTER_OPERATOR, (uint16_t) (depth + 1)); // Unary .. and ... are special because these are non-associative // operators that can also be unary operators. In this case we need @@ -18217,7 +18416,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b pm_node_t *node = (pm_node_t *) pm_numbered_reference_read_node_create(parser, &parser->previous); if (binding_power == PM_BINDING_POWER_STATEMENT && match1(parser, PM_TOKEN_COMMA)) { - node = parse_targets_validate(parser, node, PM_BINDING_POWER_INDEX); + node = parse_targets_validate(parser, node, PM_BINDING_POWER_INDEX, (uint16_t) (depth + 1)); } return node; @@ -18227,7 +18426,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b pm_node_t *node = (pm_node_t *) pm_global_variable_read_node_create(parser, &parser->previous); if (binding_power == PM_BINDING_POWER_STATEMENT && match1(parser, PM_TOKEN_COMMA)) { - node = parse_targets_validate(parser, node, PM_BINDING_POWER_INDEX); + node = parse_targets_validate(parser, node, PM_BINDING_POWER_INDEX, (uint16_t) (depth + 1)); } return node; @@ -18237,7 +18436,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b pm_node_t *node = (pm_node_t *) pm_back_reference_read_node_create(parser, &parser->previous); if (binding_power == PM_BINDING_POWER_STATEMENT && match1(parser, PM_TOKEN_COMMA)) { - node = parse_targets_validate(parser, node, PM_BINDING_POWER_INDEX); + node = parse_targets_validate(parser, node, PM_BINDING_POWER_INDEX, (uint16_t) (depth + 1)); } return node; @@ -18256,7 +18455,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b pm_call_node_t *call = (pm_call_node_t *) node; pm_arguments_t arguments = { 0 }; - if (parse_arguments_list(parser, &arguments, true, accepts_command_call)) { + if (parse_arguments_list(parser, &arguments, true, accepts_command_call, (uint16_t) (depth + 1))) { // Since we found arguments, we need to turn off the // variable call bit in the flags. pm_node_flag_unset((pm_node_t *)call, PM_CALL_NODE_FLAGS_VARIABLE_CALL); @@ -18288,7 +18487,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b match1(parser, PM_TOKEN_BRACE_LEFT) ) { pm_arguments_t arguments = { 0 }; - parse_arguments_list(parser, &arguments, true, accepts_command_call); + parse_arguments_list(parser, &arguments, true, accepts_command_call, (uint16_t) (depth + 1)); pm_call_node_t *fcall = pm_call_node_fcall_create(parser, &identifier, &arguments); if (PM_NODE_TYPE_P(node, PM_IT_LOCAL_VARIABLE_READ_NODE)) { @@ -18317,7 +18516,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b } if ((binding_power == PM_BINDING_POWER_STATEMENT) && match1(parser, PM_TOKEN_COMMA)) { - node = parse_targets_validate(parser, node, PM_BINDING_POWER_INDEX); + node = parse_targets_validate(parser, node, PM_BINDING_POWER_INDEX, (uint16_t) (depth + 1)); } return node; @@ -18325,10 +18524,11 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b case PM_TOKEN_HEREDOC_START: { // Here we have found a heredoc. We'll parse it and add it to the // list of strings. - pm_lex_mode_t *lex_mode = parser->lex_modes.current; - assert(lex_mode->mode == PM_LEX_HEREDOC); - pm_heredoc_quote_t quote = lex_mode->as.heredoc.quote; - pm_heredoc_indent_t indent = lex_mode->as.heredoc.indent; + assert(parser->lex_modes.current->mode == PM_LEX_HEREDOC); + pm_heredoc_lex_mode_t lex_mode = parser->lex_modes.current->as.heredoc.base; + + size_t common_whitespace = (size_t) -1; + parser->lex_modes.current->as.heredoc.common_whitespace = &common_whitespace; parser_lex(parser); pm_token_t opening = parser->previous; @@ -18339,17 +18539,17 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b if (match2(parser, PM_TOKEN_HEREDOC_END, PM_TOKEN_EOF)) { // If we get here, then we have an empty heredoc. We'll create // an empty content token and return an empty string node. - expect1_heredoc_term(parser, lex_mode); + expect1_heredoc_term(parser, lex_mode.ident_start, lex_mode.ident_length); pm_token_t content = parse_strings_empty_content(parser->previous.start); - if (quote == PM_HEREDOC_QUOTE_BACKTICK) { + if (lex_mode.quote == PM_HEREDOC_QUOTE_BACKTICK) { node = (pm_node_t *) pm_xstring_node_create_unescaped(parser, &opening, &content, &parser->previous, &PM_STRING_EMPTY); } else { node = (pm_node_t *) pm_string_node_create_unescaped(parser, &opening, &content, &parser->previous, &PM_STRING_EMPTY); } node->location.end = opening.end; - } else if ((part = parse_string_part(parser)) == NULL) { + } else if ((part = parse_string_part(parser, (uint16_t) (depth + 1))) == NULL) { // If we get here, then we tried to find something in the // heredoc but couldn't actually parse anything, so we'll just // return a missing node. @@ -18369,18 +18569,17 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b cast->closing_loc = PM_LOCATION_TOKEN_VALUE(&parser->current); cast->base.location = cast->opening_loc; - if (quote == PM_HEREDOC_QUOTE_BACKTICK) { + if (lex_mode.quote == PM_HEREDOC_QUOTE_BACKTICK) { assert(sizeof(pm_string_node_t) == sizeof(pm_x_string_node_t)); cast->base.type = PM_X_STRING_NODE; } - size_t common_whitespace = lex_mode->as.heredoc.common_whitespace; - if (indent == PM_HEREDOC_INDENT_TILDE && (common_whitespace != (size_t) -1) && (common_whitespace != 0)) { + if (lex_mode.indent == PM_HEREDOC_INDENT_TILDE && (common_whitespace != (size_t) -1) && (common_whitespace != 0)) { parse_heredoc_dedent_string(&cast->unescaped, common_whitespace); } node = (pm_node_t *) cast; - expect1_heredoc_term(parser, lex_mode); + expect1_heredoc_term(parser, lex_mode.ident_start, lex_mode.ident_length); } else { // If we get here, then we have multiple parts in the heredoc, // so we'll need to create an interpolated string node to hold @@ -18389,20 +18588,18 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b pm_node_list_append(&parts, part); while (!match2(parser, PM_TOKEN_HEREDOC_END, PM_TOKEN_EOF)) { - if ((part = parse_string_part(parser)) != NULL) { + if ((part = parse_string_part(parser, (uint16_t) (depth + 1))) != NULL) { pm_node_list_append(&parts, part); } } - size_t common_whitespace = lex_mode->as.heredoc.common_whitespace; - // Now that we have all of the parts, create the correct type of // interpolated node. - if (quote == PM_HEREDOC_QUOTE_BACKTICK) { + if (lex_mode.quote == PM_HEREDOC_QUOTE_BACKTICK) { pm_interpolated_x_string_node_t *cast = pm_interpolated_xstring_node_create(parser, &opening, &opening); cast->parts = parts; - expect1_heredoc_term(parser, lex_mode); + expect1_heredoc_term(parser, lex_mode.ident_start, lex_mode.ident_length); pm_interpolated_xstring_node_closing_set(cast, &parser->previous); cast->base.location = cast->opening_loc; @@ -18411,7 +18608,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b pm_interpolated_string_node_t *cast = pm_interpolated_string_node_create(parser, &opening, &parts, &opening); pm_node_list_free(&parts); - expect1_heredoc_term(parser, lex_mode); + expect1_heredoc_term(parser, lex_mode.ident_start, lex_mode.ident_length); pm_interpolated_string_node_closing_set(cast, &parser->previous); cast->base.location = cast->opening_loc; @@ -18420,9 +18617,9 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b // If this is a heredoc that is indented with a ~, then we need // to dedent each line by the common leading whitespace. - if (indent == PM_HEREDOC_INDENT_TILDE && (common_whitespace != (size_t) -1) && (common_whitespace != 0)) { + if (lex_mode.indent == PM_HEREDOC_INDENT_TILDE && (common_whitespace != (size_t) -1) && (common_whitespace != 0)) { pm_node_list_t *nodes; - if (quote == PM_HEREDOC_QUOTE_BACKTICK) { + if (lex_mode.quote == PM_HEREDOC_QUOTE_BACKTICK) { nodes = &((pm_interpolated_x_string_node_t *) node)->parts; } else { nodes = &((pm_interpolated_string_node_t *) node)->parts; @@ -18433,7 +18630,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b } if (match1(parser, PM_TOKEN_STRING_BEGIN)) { - return parse_strings(parser, node); + return parse_strings(parser, node, false, (uint16_t) (depth + 1)); } return node; @@ -18443,7 +18640,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b pm_node_t *node = (pm_node_t *) pm_instance_variable_read_node_create(parser, &parser->previous); if (binding_power == PM_BINDING_POWER_STATEMENT && match1(parser, PM_TOKEN_COMMA)) { - node = parse_targets_validate(parser, node, PM_BINDING_POWER_INDEX); + node = parse_targets_validate(parser, node, PM_BINDING_POWER_INDEX, (uint16_t) (depth + 1)); } return node; @@ -18485,8 +18682,8 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b parser_lex(parser); pm_token_t keyword = parser->previous; - pm_node_t *new_name = parse_alias_argument(parser, true); - pm_node_t *old_name = parse_alias_argument(parser, false); + pm_node_t *new_name = parse_alias_argument(parser, true, (uint16_t) (depth + 1)); + pm_node_t *old_name = parse_alias_argument(parser, false, (uint16_t) (depth + 1)); switch (PM_NODE_TYPE(new_name)) { case PM_BACK_REFERENCE_READ_NODE: @@ -18531,12 +18728,12 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b } else if (!token_begins_expression_p(parser->current.type)) { predicate = NULL; } else { - predicate = parse_value_expression(parser, PM_BINDING_POWER_COMPOSITION, true, PM_ERR_CASE_EXPRESSION_AFTER_CASE); + predicate = parse_value_expression(parser, PM_BINDING_POWER_COMPOSITION, true, false, PM_ERR_CASE_EXPRESSION_AFTER_CASE, (uint16_t) (depth + 1)); while (accept2(parser, PM_TOKEN_NEWLINE, PM_TOKEN_SEMICOLON)); } if (match1(parser, PM_TOKEN_KEYWORD_END)) { - parser_warn_indentation_mismatch(parser, opening_newline_index, &case_keyword, false); + parser_warn_indentation_mismatch(parser, opening_newline_index, &case_keyword, false, false); parser_lex(parser); pop_block_exits(parser, previous_block_exits); @@ -18559,7 +18756,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b // case-when node. We will continue to parse the when nodes // until we hit the end of the list. while (match1(parser, PM_TOKEN_KEYWORD_WHEN)) { - parser_warn_indentation_mismatch(parser, opening_newline_index, &case_keyword, false); + parser_warn_indentation_mismatch(parser, opening_newline_index, &case_keyword, false, true); parser_lex(parser); pm_token_t when_keyword = parser->previous; @@ -18568,14 +18765,14 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b do { if (accept1(parser, PM_TOKEN_USTAR)) { pm_token_t operator = parser->previous; - pm_node_t *expression = parse_value_expression(parser, PM_BINDING_POWER_DEFINED, false, PM_ERR_EXPECT_EXPRESSION_AFTER_STAR); + pm_node_t *expression = parse_value_expression(parser, PM_BINDING_POWER_DEFINED, false, false, PM_ERR_EXPECT_EXPRESSION_AFTER_STAR, (uint16_t) (depth + 1)); pm_splat_node_t *splat_node = pm_splat_node_create(parser, &operator, expression); pm_when_node_conditions_append(when_node, (pm_node_t *) splat_node); if (PM_NODE_TYPE_P(expression, PM_MISSING_NODE)) break; } else { - pm_node_t *condition = parse_value_expression(parser, PM_BINDING_POWER_DEFINED, false, PM_ERR_CASE_EXPRESSION_AFTER_WHEN); + pm_node_t *condition = parse_value_expression(parser, PM_BINDING_POWER_DEFINED, false, false, PM_ERR_CASE_EXPRESSION_AFTER_WHEN, (uint16_t) (depth + 1)); pm_when_node_conditions_append(when_node, condition); // If we found a missing node, then this is a syntax @@ -18604,7 +18801,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b } if (!match3(parser, PM_TOKEN_KEYWORD_WHEN, PM_TOKEN_KEYWORD_ELSE, PM_TOKEN_KEYWORD_END)) { - pm_statements_node_t *statements = parse_statements(parser, PM_CONTEXT_CASE_WHEN); + pm_statements_node_t *statements = parse_statements(parser, PM_CONTEXT_CASE_WHEN, (uint16_t) (depth + 1)); if (statements != NULL) { pm_when_node_statements_set(when_node, statements); } @@ -18634,7 +18831,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b // will continue to parse the in nodes until we hit the end of // the list. while (match1(parser, PM_TOKEN_KEYWORD_IN)) { - parser_warn_indentation_mismatch(parser, opening_newline_index, &case_keyword, false); + parser_warn_indentation_mismatch(parser, opening_newline_index, &case_keyword, false, true); bool previous_pattern_matching_newlines = parser->pattern_matching_newlines; parser->pattern_matching_newlines = true; @@ -18646,7 +18843,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b pm_token_t in_keyword = parser->previous; pm_constant_id_list_t captures = { 0 }; - pm_node_t *pattern = parse_pattern(parser, &captures, PM_PARSE_PATTERN_TOP | PM_PARSE_PATTERN_MULTI, PM_ERR_PATTERN_EXPRESSION_AFTER_IN); + pm_node_t *pattern = parse_pattern(parser, &captures, PM_PARSE_PATTERN_TOP | PM_PARSE_PATTERN_MULTI, PM_ERR_PATTERN_EXPRESSION_AFTER_IN, (uint16_t) (depth + 1)); parser->pattern_matching_newlines = previous_pattern_matching_newlines; pm_constant_id_list_free(&captures); @@ -18656,11 +18853,11 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b // `unless` statements. if (accept1(parser, PM_TOKEN_KEYWORD_IF_MODIFIER)) { pm_token_t keyword = parser->previous; - pm_node_t *predicate = parse_value_expression(parser, PM_BINDING_POWER_COMPOSITION, true, PM_ERR_CONDITIONAL_IF_PREDICATE); + pm_node_t *predicate = parse_value_expression(parser, PM_BINDING_POWER_COMPOSITION, true, false, PM_ERR_CONDITIONAL_IF_PREDICATE, (uint16_t) (depth + 1)); pattern = (pm_node_t *) pm_if_node_modifier_create(parser, pattern, &keyword, predicate); } else if (accept1(parser, PM_TOKEN_KEYWORD_UNLESS_MODIFIER)) { pm_token_t keyword = parser->previous; - pm_node_t *predicate = parse_value_expression(parser, PM_BINDING_POWER_COMPOSITION, true, PM_ERR_CONDITIONAL_UNLESS_PREDICATE); + pm_node_t *predicate = parse_value_expression(parser, PM_BINDING_POWER_COMPOSITION, true, false, PM_ERR_CONDITIONAL_UNLESS_PREDICATE, (uint16_t) (depth + 1)); pattern = (pm_node_t *) pm_unless_node_modifier_create(parser, pattern, &keyword, predicate); } @@ -18685,7 +18882,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b if (match3(parser, PM_TOKEN_KEYWORD_IN, PM_TOKEN_KEYWORD_ELSE, PM_TOKEN_KEYWORD_END)) { statements = NULL; } else { - statements = parse_statements(parser, PM_CONTEXT_CASE_IN); + statements = parse_statements(parser, PM_CONTEXT_CASE_IN, (uint16_t) (depth + 1)); } // Now that we have the full pattern and statements, we can @@ -18709,7 +18906,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b pm_else_node_t *else_node; if (!match1(parser, PM_TOKEN_KEYWORD_END)) { - else_node = pm_else_node_create(parser, &else_keyword, parse_statements(parser, PM_CONTEXT_ELSE), &parser->current); + else_node = pm_else_node_create(parser, &else_keyword, parse_statements(parser, PM_CONTEXT_ELSE, (uint16_t) (depth + 1)), &parser->current); } else { else_node = pm_else_node_create(parser, &else_keyword, NULL, &parser->current); } @@ -18721,7 +18918,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b } } - parser_warn_indentation_mismatch(parser, opening_newline_index, &case_keyword, false); + parser_warn_indentation_mismatch(parser, opening_newline_index, &case_keyword, false, false); expect1(parser, PM_TOKEN_KEYWORD_END, PM_ERR_CASE_TERM); if (PM_NODE_TYPE_P(node, PM_CASE_NODE)) { @@ -18748,13 +18945,13 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b if (!match4(parser, PM_TOKEN_KEYWORD_RESCUE, PM_TOKEN_KEYWORD_ENSURE, PM_TOKEN_KEYWORD_ELSE, PM_TOKEN_KEYWORD_END)) { pm_accepts_block_stack_push(parser, true); - begin_statements = parse_statements(parser, PM_CONTEXT_BEGIN); + begin_statements = parse_statements(parser, PM_CONTEXT_BEGIN, (uint16_t) (depth + 1)); pm_accepts_block_stack_pop(parser); accept2(parser, PM_TOKEN_NEWLINE, PM_TOKEN_SEMICOLON); } pm_begin_node_t *begin_node = pm_begin_node_create(parser, &begin_keyword, begin_statements); - parse_rescues(parser, opening_newline_index, &begin_keyword, begin_node, PM_RESCUES_BEGIN); + parse_rescues(parser, opening_newline_index, &begin_keyword, begin_node, PM_RESCUES_BEGIN, (uint16_t) (depth + 1)); expect1(parser, PM_TOKEN_KEYWORD_END, PM_ERR_BEGIN_TERM); begin_node->base.location.end = parser->previous.end; @@ -18778,7 +18975,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b expect1(parser, PM_TOKEN_BRACE_LEFT, PM_ERR_BEGIN_UPCASE_BRACE); pm_token_t opening = parser->previous; - pm_statements_node_t *statements = parse_statements(parser, PM_CONTEXT_PREEXE); + pm_statements_node_t *statements = parse_statements(parser, PM_CONTEXT_PREEXE, (uint16_t) (depth + 1)); expect1(parser, PM_TOKEN_BRACE_RIGHT, PM_ERR_BEGIN_UPCASE_TERM); pm_context_t context = parser->current_context->context; @@ -18806,19 +19003,19 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b pm_binding_power_t binding_power = pm_binding_powers[parser->current.type].left; if (binding_power == PM_BINDING_POWER_UNSET || binding_power >= PM_BINDING_POWER_RANGE) { - parse_arguments(parser, &arguments, false, PM_TOKEN_EOF); + parse_arguments(parser, &arguments, false, PM_TOKEN_EOF, (uint16_t) (depth + 1)); } } switch (keyword.type) { case PM_TOKEN_KEYWORD_BREAK: { pm_node_t *node = (pm_node_t *) pm_break_node_create(parser, &keyword, arguments.arguments); - if (!parser->parsing_eval) parse_block_exit(parser, node); + if (!parser->partial_script) parse_block_exit(parser, node); return node; } case PM_TOKEN_KEYWORD_NEXT: { pm_node_t *node = (pm_node_t *) pm_next_node_create(parser, &keyword, arguments.arguments); - if (!parser->parsing_eval) parse_block_exit(parser, node); + if (!parser->partial_script) parse_block_exit(parser, node); return node; } case PM_TOKEN_KEYWORD_RETURN: { @@ -18836,7 +19033,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b pm_token_t keyword = parser->previous; pm_arguments_t arguments = { 0 }; - parse_arguments_list(parser, &arguments, true, accepts_command_call); + parse_arguments_list(parser, &arguments, true, accepts_command_call, (uint16_t) (depth + 1)); if ( arguments.opening_loc.start == NULL && @@ -18853,7 +19050,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b pm_token_t keyword = parser->previous; pm_arguments_t arguments = { 0 }; - parse_arguments_list(parser, &arguments, false, accepts_command_call); + parse_arguments_list(parser, &arguments, false, accepts_command_call, (uint16_t) (depth + 1)); // It's possible that we've parsed a block argument through our // call to parse_arguments_list. If we found one, we should mark it @@ -18866,7 +19063,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b } pm_node_t *node = (pm_node_t *) pm_yield_node_create(parser, &keyword, &arguments.opening_loc, arguments.arguments, &arguments.closing_loc); - if (!parser->parsing_eval) parse_yield(parser, node); + if (!parser->parsing_eval && !parser->partial_script) parse_yield(parser, node); return node; } @@ -18882,23 +19079,25 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b if (accept1(parser, PM_TOKEN_LESS_LESS)) { pm_token_t operator = parser->previous; - pm_node_t *expression = parse_value_expression(parser, PM_BINDING_POWER_COMPOSITION, true, PM_ERR_EXPECT_EXPRESSION_AFTER_LESS_LESS); + pm_node_t *expression = parse_value_expression(parser, PM_BINDING_POWER_COMPOSITION, true, false, PM_ERR_EXPECT_EXPRESSION_AFTER_LESS_LESS, (uint16_t) (depth + 1)); pm_parser_scope_push(parser, true); - accept2(parser, PM_TOKEN_NEWLINE, PM_TOKEN_SEMICOLON); + if (!match2(parser, PM_TOKEN_NEWLINE, PM_TOKEN_SEMICOLON)) { + PM_PARSER_ERR_TOKEN_FORMAT(parser, parser->current, PM_ERR_EXPECT_SINGLETON_CLASS_DELIMITER, pm_token_type_human(parser->current.type)); + } pm_node_t *statements = NULL; if (!match4(parser, PM_TOKEN_KEYWORD_RESCUE, PM_TOKEN_KEYWORD_ENSURE, PM_TOKEN_KEYWORD_ELSE, PM_TOKEN_KEYWORD_END)) { pm_accepts_block_stack_push(parser, true); - statements = (pm_node_t *) parse_statements(parser, PM_CONTEXT_SCLASS); + statements = (pm_node_t *) parse_statements(parser, PM_CONTEXT_SCLASS, (uint16_t) (depth + 1)); pm_accepts_block_stack_pop(parser); } if (match2(parser, PM_TOKEN_KEYWORD_RESCUE, PM_TOKEN_KEYWORD_ENSURE)) { assert(statements == NULL || PM_NODE_TYPE_P(statements, PM_STATEMENTS_NODE)); - statements = (pm_node_t *) parse_rescues_implicit_begin(parser, opening_newline_index, &class_keyword, class_keyword.start, (pm_statements_node_t *) statements, PM_RESCUES_SCLASS); + statements = (pm_node_t *) parse_rescues_implicit_begin(parser, opening_newline_index, &class_keyword, class_keyword.start, (pm_statements_node_t *) statements, PM_RESCUES_SCLASS, (uint16_t) (depth + 1)); } else { - parser_warn_indentation_mismatch(parser, opening_newline_index, &class_keyword, false); + parser_warn_indentation_mismatch(parser, opening_newline_index, &class_keyword, false, false); } expect1(parser, PM_TOKEN_KEYWORD_END, PM_ERR_CLASS_TERM); @@ -18915,7 +19114,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b return (pm_node_t *) pm_singleton_class_node_create(parser, &locals, &class_keyword, &operator, expression, statements, &parser->previous); } - pm_node_t *constant_path = parse_expression(parser, PM_BINDING_POWER_INDEX, false, PM_ERR_CLASS_NAME); + pm_node_t *constant_path = parse_expression(parser, PM_BINDING_POWER_INDEX, false, false, PM_ERR_CLASS_NAME, (uint16_t) (depth + 1)); pm_token_t name = parser->previous; if (name.type != PM_TOKEN_CONSTANT) { pm_parser_err_token(parser, &name, PM_ERR_CLASS_NAME); @@ -18931,7 +19130,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b parser->command_start = true; parser_lex(parser); - superclass = parse_value_expression(parser, PM_BINDING_POWER_COMPOSITION, true, PM_ERR_CLASS_SUPERCLASS); + superclass = parse_value_expression(parser, PM_BINDING_POWER_COMPOSITION, true, false, PM_ERR_CLASS_SUPERCLASS, (uint16_t) (depth + 1)); } else { inheritance_operator = not_provided(parser); superclass = NULL; @@ -18948,15 +19147,15 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b if (!match4(parser, PM_TOKEN_KEYWORD_RESCUE, PM_TOKEN_KEYWORD_ENSURE, PM_TOKEN_KEYWORD_ELSE, PM_TOKEN_KEYWORD_END)) { pm_accepts_block_stack_push(parser, true); - statements = (pm_node_t *) parse_statements(parser, PM_CONTEXT_CLASS); + statements = (pm_node_t *) parse_statements(parser, PM_CONTEXT_CLASS, (uint16_t) (depth + 1)); pm_accepts_block_stack_pop(parser); } if (match2(parser, PM_TOKEN_KEYWORD_RESCUE, PM_TOKEN_KEYWORD_ENSURE)) { assert(statements == NULL || PM_NODE_TYPE_P(statements, PM_STATEMENTS_NODE)); - statements = (pm_node_t *) parse_rescues_implicit_begin(parser, opening_newline_index, &class_keyword, class_keyword.start, (pm_statements_node_t *) statements, PM_RESCUES_CLASS); + statements = (pm_node_t *) parse_rescues_implicit_begin(parser, opening_newline_index, &class_keyword, class_keyword.start, (pm_statements_node_t *) statements, PM_RESCUES_CLASS, (uint16_t) (depth + 1)); } else { - parser_warn_indentation_mismatch(parser, opening_newline_index, &class_keyword, false); + parser_warn_indentation_mismatch(parser, opening_newline_index, &class_keyword, false, false); } expect1(parser, PM_TOKEN_KEYWORD_END, PM_ERR_CLASS_TERM); @@ -19100,7 +19299,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b parser_lex(parser); pm_token_t lparen = parser->previous; - pm_node_t *expression = parse_value_expression(parser, PM_BINDING_POWER_STATEMENT, true, PM_ERR_DEF_RECEIVER); + pm_node_t *expression = parse_value_expression(parser, PM_BINDING_POWER_COMPOSITION, true, false, PM_ERR_DEF_RECEIVER, (uint16_t) (depth + 1)); accept1(parser, PM_TOKEN_NEWLINE); expect1(parser, PM_TOKEN_PARENTHESIS_RIGHT, PM_ERR_EXPECT_RPAREN); @@ -19137,12 +19336,13 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b if (match1(parser, PM_TOKEN_PARENTHESIS_RIGHT)) { params = NULL; } else { - params = parse_parameters(parser, PM_BINDING_POWER_DEFINED, true, false, true); + params = parse_parameters(parser, PM_BINDING_POWER_DEFINED, true, false, true, true, (uint16_t) (depth + 1)); } lex_state_set(parser, PM_LEX_STATE_BEG); parser->command_start = true; + context_pop(parser); if (!accept1(parser, PM_TOKEN_PARENTHESIS_RIGHT)) { PM_PARSER_ERR_TOKEN_FORMAT(parser, parser->current, PM_ERR_DEF_PARAMS_TERM_PAREN, pm_token_type_human(parser->current.type)); parser->previous.start = parser->previous.end; @@ -19161,18 +19361,21 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b lparen = not_provided(parser); rparen = not_provided(parser); - params = parse_parameters(parser, PM_BINDING_POWER_DEFINED, false, false, true); + params = parse_parameters(parser, PM_BINDING_POWER_DEFINED, false, false, true, true, (uint16_t) (depth + 1)); + + context_pop(parser); break; } default: { lparen = not_provided(parser); rparen = not_provided(parser); params = NULL; + + context_pop(parser); break; } } - context_pop(parser); pm_node_t *statements = NULL; pm_token_t equal; pm_token_t end_keyword; @@ -19187,13 +19390,13 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b pm_do_loop_stack_push(parser, false); statements = (pm_node_t *) pm_statements_node_create(parser); - pm_node_t *statement = parse_expression(parser, PM_BINDING_POWER_DEFINED + 1, binding_power < PM_BINDING_POWER_COMPOSITION, PM_ERR_DEF_ENDLESS); + pm_node_t *statement = parse_expression(parser, PM_BINDING_POWER_DEFINED + 1, binding_power < PM_BINDING_POWER_COMPOSITION, false, PM_ERR_DEF_ENDLESS, (uint16_t) (depth + 1)); if (accept1(parser, PM_TOKEN_KEYWORD_RESCUE_MODIFIER)) { context_push(parser, PM_CONTEXT_RESCUE_MODIFIER); pm_token_t rescue_keyword = parser->previous; - pm_node_t *value = parse_expression(parser, binding_power, false, PM_ERR_RESCUE_MODIFIER_VALUE); + pm_node_t *value = parse_expression(parser, binding_power, false, false, PM_ERR_RESCUE_MODIFIER_VALUE, (uint16_t) (depth + 1)); context_pop(parser); statement = (pm_node_t *) pm_rescue_modifier_node_create(parser, statement, &rescue_keyword, value); @@ -19219,15 +19422,15 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b if (!match4(parser, PM_TOKEN_KEYWORD_RESCUE, PM_TOKEN_KEYWORD_ENSURE, PM_TOKEN_KEYWORD_ELSE, PM_TOKEN_KEYWORD_END)) { pm_accepts_block_stack_push(parser, true); - statements = (pm_node_t *) parse_statements(parser, PM_CONTEXT_DEF); + statements = (pm_node_t *) parse_statements(parser, PM_CONTEXT_DEF, (uint16_t) (depth + 1)); pm_accepts_block_stack_pop(parser); } if (match3(parser, PM_TOKEN_KEYWORD_RESCUE, PM_TOKEN_KEYWORD_ENSURE, PM_TOKEN_KEYWORD_ELSE)) { assert(statements == NULL || PM_NODE_TYPE_P(statements, PM_STATEMENTS_NODE)); - statements = (pm_node_t *) parse_rescues_implicit_begin(parser, opening_newline_index, &def_keyword, def_keyword.start, (pm_statements_node_t *) statements, PM_RESCUES_DEF); + statements = (pm_node_t *) parse_rescues_implicit_begin(parser, opening_newline_index, &def_keyword, def_keyword.start, (pm_statements_node_t *) statements, PM_RESCUES_DEF, (uint16_t) (depth + 1)); } else { - parser_warn_indentation_mismatch(parser, opening_newline_index, &def_keyword, false); + parser_warn_indentation_mismatch(parser, opening_newline_index, &def_keyword, false, false); } pm_accepts_block_stack_pop(parser); @@ -19278,7 +19481,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b if (accept1(parser, PM_TOKEN_PARENTHESIS_LEFT)) { lparen = parser->previous; - expression = parse_expression(parser, PM_BINDING_POWER_COMPOSITION, true, PM_ERR_DEFINED_EXPRESSION); + expression = parse_expression(parser, PM_BINDING_POWER_COMPOSITION, true, false, PM_ERR_DEFINED_EXPRESSION, (uint16_t) (depth + 1)); if (parser->recovering) { rparen = not_provided(parser); @@ -19290,7 +19493,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b } else { lparen = not_provided(parser); rparen = not_provided(parser); - expression = parse_expression(parser, PM_BINDING_POWER_DEFINED, false, PM_ERR_DEFINED_EXPRESSION); + expression = parse_expression(parser, PM_BINDING_POWER_DEFINED, false, false, PM_ERR_DEFINED_EXPRESSION, (uint16_t) (depth + 1)); } context_pop(parser); @@ -19316,7 +19519,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b expect1(parser, PM_TOKEN_BRACE_LEFT, PM_ERR_END_UPCASE_BRACE); pm_token_t opening = parser->previous; - pm_statements_node_t *statements = parse_statements(parser, PM_CONTEXT_POSTEXE); + pm_statements_node_t *statements = parse_statements(parser, PM_CONTEXT_POSTEXE, (uint16_t) (depth + 1)); expect1(parser, PM_TOKEN_BRACE_RIGHT, PM_ERR_END_UPCASE_TERM); return (pm_node_t *) pm_post_execution_node_create(parser, &keyword, &opening, statements, &parser->previous); @@ -19339,12 +19542,12 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b pm_node_t *name = NULL; if (token_begins_expression_p(parser->current.type)) { - name = parse_expression(parser, PM_BINDING_POWER_INDEX, false, PM_ERR_EXPECT_EXPRESSION_AFTER_STAR); + name = parse_expression(parser, PM_BINDING_POWER_INDEX, false, false, PM_ERR_EXPECT_EXPRESSION_AFTER_STAR, (uint16_t) (depth + 1)); } index = (pm_node_t *) pm_splat_node_create(parser, &star_operator, name); } else if (token_begins_expression_p(parser->current.type)) { - index = parse_expression(parser, PM_BINDING_POWER_INDEX, false, PM_ERR_EXPECT_EXPRESSION_AFTER_COMMA); + index = parse_expression(parser, PM_BINDING_POWER_INDEX, false, false, PM_ERR_EXPECT_EXPRESSION_AFTER_COMMA, (uint16_t) (depth + 1)); } else { pm_parser_err_token(parser, &for_keyword, PM_ERR_FOR_INDEX); index = (pm_node_t *) pm_missing_node_create(parser, for_keyword.start, for_keyword.end); @@ -19352,7 +19555,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b // Now, if there are multiple index expressions, parse them out. if (match1(parser, PM_TOKEN_COMMA)) { - index = parse_targets(parser, index, PM_BINDING_POWER_INDEX); + index = parse_targets(parser, index, PM_BINDING_POWER_INDEX, (uint16_t) (depth + 1)); } else { index = parse_target(parser, index, false, false); } @@ -19363,7 +19566,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b expect1(parser, PM_TOKEN_KEYWORD_IN, PM_ERR_FOR_IN); pm_token_t in_keyword = parser->previous; - pm_node_t *collection = parse_value_expression(parser, PM_BINDING_POWER_COMPOSITION, true, PM_ERR_FOR_COLLECTION); + pm_node_t *collection = parse_value_expression(parser, PM_BINDING_POWER_COMPOSITION, true, false, PM_ERR_FOR_COLLECTION, (uint16_t) (depth + 1)); pm_do_loop_stack_pop(parser); pm_token_t do_keyword; @@ -19371,16 +19574,17 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b do_keyword = parser->previous; } else { do_keyword = not_provided(parser); + if (!match2(parser, PM_TOKEN_SEMICOLON, PM_TOKEN_NEWLINE)) { + PM_PARSER_ERR_TOKEN_FORMAT(parser, parser->current, PM_ERR_EXPECT_FOR_DELIMITER, pm_token_type_human(parser->current.type)); + } } - accept2(parser, PM_TOKEN_SEMICOLON, PM_TOKEN_NEWLINE); - pm_statements_node_t *statements = NULL; if (!match1(parser, PM_TOKEN_KEYWORD_END)) { - statements = parse_statements(parser, PM_CONTEXT_FOR); + statements = parse_statements(parser, PM_CONTEXT_FOR, (uint16_t) (depth + 1)); } - parser_warn_indentation_mismatch(parser, opening_newline_index, &for_keyword, false); + parser_warn_indentation_mismatch(parser, opening_newline_index, &for_keyword, false, false); expect1(parser, PM_TOKEN_KEYWORD_END, PM_ERR_FOR_TERM); return (pm_node_t *) pm_for_node_create(parser, index, collection, statements, &for_keyword, &in_keyword, &do_keyword, &parser->previous); @@ -19394,7 +19598,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b bool if_after_else = parser->previous.type == PM_TOKEN_KEYWORD_ELSE; parser_lex(parser); - return parse_conditional(parser, PM_CONTEXT_IF, opening_newline_index, if_after_else); + return parse_conditional(parser, PM_CONTEXT_IF, opening_newline_index, if_after_else, (uint16_t) (depth + 1)); case PM_TOKEN_KEYWORD_UNDEF: { if (binding_power != PM_BINDING_POWER_STATEMENT) { pm_parser_err_current(parser, PM_ERR_STATEMENT_UNDEF); @@ -19402,7 +19606,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b parser_lex(parser); pm_undef_node_t *undef = pm_undef_node_create(parser, &parser->previous); - pm_node_t *name = parse_undef_argument(parser); + pm_node_t *name = parse_undef_argument(parser, (uint16_t) (depth + 1)); if (PM_NODE_TYPE_P(name, PM_MISSING_NODE)) { pm_node_destroy(parser, name); @@ -19412,7 +19616,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b while (match1(parser, PM_TOKEN_COMMA)) { lex_state_set(parser, PM_LEX_STATE_FNAME | PM_LEX_STATE_FITEM); parser_lex(parser); - name = parse_undef_argument(parser); + name = parse_undef_argument(parser, (uint16_t) (depth + 1)); if (PM_NODE_TYPE_P(name, PM_MISSING_NODE)) { pm_node_destroy(parser, name); @@ -19440,7 +19644,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b if (accept1(parser, PM_TOKEN_PARENTHESIS_RIGHT)) { arguments.closing_loc = PM_LOCATION_TOKEN_VALUE(&parser->previous); } else { - receiver = parse_expression(parser, PM_BINDING_POWER_COMPOSITION, true, PM_ERR_NOT_EXPRESSION); + receiver = parse_expression(parser, PM_BINDING_POWER_COMPOSITION, true, false, PM_ERR_NOT_EXPRESSION, (uint16_t) (depth + 1)); if (!parser->recovering) { accept1(parser, PM_TOKEN_NEWLINE); @@ -19449,7 +19653,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b } } } else { - receiver = parse_expression(parser, PM_BINDING_POWER_NOT, true, PM_ERR_NOT_EXPRESSION); + receiver = parse_expression(parser, PM_BINDING_POWER_NOT, true, false, PM_ERR_NOT_EXPRESSION, (uint16_t) (depth + 1)); } return (pm_node_t *) pm_call_node_not_create(parser, receiver, &message, &arguments); @@ -19458,7 +19662,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b size_t opening_newline_index = token_newline_index(parser); parser_lex(parser); - return parse_conditional(parser, PM_CONTEXT_UNLESS, opening_newline_index, false); + return parse_conditional(parser, PM_CONTEXT_UNLESS, opening_newline_index, false, (uint16_t) (depth + 1)); } case PM_TOKEN_KEYWORD_MODULE: { pm_node_list_t current_block_exits = { 0 }; @@ -19468,7 +19672,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b parser_lex(parser); pm_token_t module_keyword = parser->previous; - pm_node_t *constant_path = parse_expression(parser, PM_BINDING_POWER_INDEX, false, PM_ERR_MODULE_NAME); + pm_node_t *constant_path = parse_expression(parser, PM_BINDING_POWER_INDEX, false, false, PM_ERR_MODULE_NAME, (uint16_t) (depth + 1)); pm_token_t name; // If we can recover from a syntax error that occurred while parsing @@ -19502,15 +19706,15 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b if (!match4(parser, PM_TOKEN_KEYWORD_RESCUE, PM_TOKEN_KEYWORD_ENSURE, PM_TOKEN_KEYWORD_ELSE, PM_TOKEN_KEYWORD_END)) { pm_accepts_block_stack_push(parser, true); - statements = (pm_node_t *) parse_statements(parser, PM_CONTEXT_MODULE); + statements = (pm_node_t *) parse_statements(parser, PM_CONTEXT_MODULE, (uint16_t) (depth + 1)); pm_accepts_block_stack_pop(parser); } if (match3(parser, PM_TOKEN_KEYWORD_RESCUE, PM_TOKEN_KEYWORD_ENSURE, PM_TOKEN_KEYWORD_ELSE)) { assert(statements == NULL || PM_NODE_TYPE_P(statements, PM_STATEMENTS_NODE)); - statements = (pm_node_t *) parse_rescues_implicit_begin(parser, opening_newline_index, &module_keyword, module_keyword.start, (pm_statements_node_t *) statements, PM_RESCUES_MODULE); + statements = (pm_node_t *) parse_rescues_implicit_begin(parser, opening_newline_index, &module_keyword, module_keyword.start, (pm_statements_node_t *) statements, PM_RESCUES_MODULE, (uint16_t) (depth + 1)); } else { - parser_warn_indentation_mismatch(parser, opening_newline_index, &module_keyword, false); + parser_warn_indentation_mismatch(parser, opening_newline_index, &module_keyword, false, false); } pm_constant_id_list_t locals; @@ -19535,7 +19739,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b parser_lex(parser); pm_node_t *node = (pm_node_t *) pm_redo_node_create(parser, &parser->previous); - if (!parser->parsing_eval) parse_block_exit(parser, node); + if (!parser->partial_script) parse_block_exit(parser, node); return node; } @@ -19561,7 +19765,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b parser_lex(parser); pm_token_t keyword = parser->previous; - pm_node_t *predicate = parse_value_expression(parser, PM_BINDING_POWER_COMPOSITION, true, PM_ERR_CONDITIONAL_UNTIL_PREDICATE); + pm_node_t *predicate = parse_value_expression(parser, PM_BINDING_POWER_COMPOSITION, true, false, PM_ERR_CONDITIONAL_UNTIL_PREDICATE, (uint16_t) (depth + 1)); pm_do_loop_stack_pop(parser); context_pop(parser); @@ -19571,12 +19775,12 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b if (!match1(parser, PM_TOKEN_KEYWORD_END)) { pm_accepts_block_stack_push(parser, true); - statements = parse_statements(parser, PM_CONTEXT_UNTIL); + statements = parse_statements(parser, PM_CONTEXT_UNTIL, (uint16_t) (depth + 1)); pm_accepts_block_stack_pop(parser); accept2(parser, PM_TOKEN_NEWLINE, PM_TOKEN_SEMICOLON); } - parser_warn_indentation_mismatch(parser, opening_newline_index, &keyword, false); + parser_warn_indentation_mismatch(parser, opening_newline_index, &keyword, false, false); expect1(parser, PM_TOKEN_KEYWORD_END, PM_ERR_UNTIL_TERM); return (pm_node_t *) pm_until_node_create(parser, &keyword, &parser->previous, predicate, statements, 0); @@ -19589,7 +19793,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b parser_lex(parser); pm_token_t keyword = parser->previous; - pm_node_t *predicate = parse_value_expression(parser, PM_BINDING_POWER_COMPOSITION, true, PM_ERR_CONDITIONAL_WHILE_PREDICATE); + pm_node_t *predicate = parse_value_expression(parser, PM_BINDING_POWER_COMPOSITION, true, false, PM_ERR_CONDITIONAL_WHILE_PREDICATE, (uint16_t) (depth + 1)); pm_do_loop_stack_pop(parser); context_pop(parser); @@ -19599,12 +19803,12 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b if (!match1(parser, PM_TOKEN_KEYWORD_END)) { pm_accepts_block_stack_push(parser, true); - statements = parse_statements(parser, PM_CONTEXT_WHILE); + statements = parse_statements(parser, PM_CONTEXT_WHILE, (uint16_t) (depth + 1)); pm_accepts_block_stack_pop(parser); accept2(parser, PM_TOKEN_NEWLINE, PM_TOKEN_SEMICOLON); } - parser_warn_indentation_mismatch(parser, opening_newline_index, &keyword, false); + parser_warn_indentation_mismatch(parser, opening_newline_index, &keyword, false, false); expect1(parser, PM_TOKEN_KEYWORD_END, PM_ERR_WHILE_TERM); return (pm_node_t *) pm_while_node_create(parser, &keyword, &parser->previous, predicate, statements, 0); @@ -19732,7 +19936,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b // interpolated string, then we'll just add the embedded variable. } - pm_node_t *part = parse_string_part(parser); + pm_node_t *part = parse_string_part(parser, (uint16_t) (depth + 1)); pm_interpolated_symbol_node_append((pm_interpolated_symbol_node_t *) current, part); if (!start_location_set) { current->location.start = part->location.start; @@ -19769,7 +19973,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b assert(false && "unreachable"); } - pm_node_t *part = parse_string_part(parser); + pm_node_t *part = parse_string_part(parser, (uint16_t) (depth + 1)); pm_interpolated_symbol_node_append((pm_interpolated_symbol_node_t *) current, part); if (!start_location_set) { current->location.start = part->location.start; @@ -19922,7 +20126,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b // add the embedded variable. } - pm_node_t *part = parse_string_part(parser); + pm_node_t *part = parse_string_part(parser, (uint16_t) (depth + 1)); pm_interpolated_string_node_append((pm_interpolated_string_node_t *) current, part); break; } @@ -19953,7 +20157,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b assert(false && "unreachable"); } - pm_node_t *part = parse_string_part(parser); + pm_node_t *part = parse_string_part(parser, (uint16_t) (depth + 1)); pm_interpolated_string_node_append((pm_interpolated_string_node_t *) current, part); break; } @@ -20059,7 +20263,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b // parts into the list. pm_node_t *part; while (!match2(parser, PM_TOKEN_REGEXP_END, PM_TOKEN_EOF)) { - if ((part = parse_string_part(parser)) != NULL) { + if ((part = parse_string_part(parser, (uint16_t) (depth + 1))) != NULL) { pm_interpolated_regular_expression_node_append(interpolated, part); } } @@ -20136,7 +20340,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b pm_node_t *part; while (!match2(parser, PM_TOKEN_STRING_END, PM_TOKEN_EOF)) { - if ((part = parse_string_part(parser)) != NULL) { + if ((part = parse_string_part(parser, (uint16_t) (depth + 1))) != NULL) { pm_interpolated_xstring_node_append(node, part); } } @@ -20167,13 +20371,13 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b pm_node_t *name = NULL; if (token_begins_expression_p(parser->current.type)) { - name = parse_expression(parser, PM_BINDING_POWER_INDEX, false, PM_ERR_EXPECT_EXPRESSION_AFTER_STAR); + name = parse_expression(parser, PM_BINDING_POWER_INDEX, false, false, PM_ERR_EXPECT_EXPRESSION_AFTER_STAR, (uint16_t) (depth + 1)); } pm_node_t *splat = (pm_node_t *) pm_splat_node_create(parser, &operator, name); if (match1(parser, PM_TOKEN_COMMA)) { - return parse_targets_validate(parser, splat, PM_BINDING_POWER_INDEX); + return parse_targets_validate(parser, splat, PM_BINDING_POWER_INDEX, (uint16_t) (depth + 1)); } else { return parse_target_validate(parser, splat, true); } @@ -20186,7 +20390,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b parser_lex(parser); pm_token_t operator = parser->previous; - pm_node_t *receiver = parse_expression(parser, pm_binding_powers[parser->previous.type].right, binding_power < PM_BINDING_POWER_MATCH, PM_ERR_UNARY_RECEIVER); + pm_node_t *receiver = parse_expression(parser, pm_binding_powers[parser->previous.type].right, binding_power < PM_BINDING_POWER_MATCH, false, PM_ERR_UNARY_RECEIVER, (uint16_t) (depth + 1)); pm_call_node_t *node = pm_call_node_unary_create(parser, &operator, receiver, "!"); pm_conditional_predicate(parser, receiver, PM_CONDITIONAL_PREDICATE_TYPE_NOT); @@ -20199,7 +20403,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b parser_lex(parser); pm_token_t operator = parser->previous; - pm_node_t *receiver = parse_expression(parser, pm_binding_powers[parser->previous.type].right, false, PM_ERR_UNARY_RECEIVER); + pm_node_t *receiver = parse_expression(parser, pm_binding_powers[parser->previous.type].right, false, false, PM_ERR_UNARY_RECEIVER, (uint16_t) (depth + 1)); pm_call_node_t *node = pm_call_node_unary_create(parser, &operator, receiver, "~"); return (pm_node_t *) node; @@ -20211,7 +20415,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b parser_lex(parser); pm_token_t operator = parser->previous; - pm_node_t *receiver = parse_expression(parser, pm_binding_powers[parser->previous.type].right, false, PM_ERR_UNARY_RECEIVER); + pm_node_t *receiver = parse_expression(parser, pm_binding_powers[parser->previous.type].right, false, false, PM_ERR_UNARY_RECEIVER, (uint16_t) (depth + 1)); pm_call_node_t *node = pm_call_node_unary_create(parser, &operator, receiver, "-@"); return (pm_node_t *) node; @@ -20220,11 +20424,11 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b parser_lex(parser); pm_token_t operator = parser->previous; - pm_node_t *node = parse_expression(parser, pm_binding_powers[parser->previous.type].right, false, PM_ERR_UNARY_RECEIVER); + pm_node_t *node = parse_expression(parser, pm_binding_powers[parser->previous.type].right, false, false, PM_ERR_UNARY_RECEIVER, (uint16_t) (depth + 1)); if (accept1(parser, PM_TOKEN_STAR_STAR)) { pm_token_t exponent_operator = parser->previous; - pm_node_t *exponent = parse_expression(parser, pm_binding_powers[exponent_operator.type].right, false, PM_ERR_EXPECT_ARGUMENT); + pm_node_t *exponent = parse_expression(parser, pm_binding_powers[exponent_operator.type].right, false, false, PM_ERR_EXPECT_ARGUMENT, (uint16_t) (depth + 1)); node = (pm_node_t *) pm_call_node_binary_create(parser, node, &exponent_operator, exponent, 0); node = (pm_node_t *) pm_call_node_unary_create(parser, &operator, node, "-@"); } else { @@ -20264,7 +20468,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b if (match1(parser, PM_TOKEN_PARENTHESIS_RIGHT)) { block_parameters = pm_block_parameters_node_create(parser, NULL, &opening); } else { - block_parameters = parse_block_parameters(parser, false, &opening, true); + block_parameters = parse_block_parameters(parser, false, &opening, true, true, (uint16_t) (depth + 1)); } accept1(parser, PM_TOKEN_NEWLINE); @@ -20276,7 +20480,7 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b case PM_CASE_PARAMETER: { pm_accepts_block_stack_push(parser, false); pm_token_t opening = not_provided(parser); - block_parameters = parse_block_parameters(parser, false, &opening, true); + block_parameters = parse_block_parameters(parser, false, &opening, true, false, (uint16_t) (depth + 1)); pm_accepts_block_stack_pop(parser); break; } @@ -20294,10 +20498,10 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b opening = parser->previous; if (!match1(parser, PM_TOKEN_BRACE_RIGHT)) { - body = (pm_node_t *) parse_statements(parser, PM_CONTEXT_LAMBDA_BRACES); + body = (pm_node_t *) parse_statements(parser, PM_CONTEXT_LAMBDA_BRACES, (uint16_t) (depth + 1)); } - parser_warn_indentation_mismatch(parser, opening_newline_index, &operator, false); + parser_warn_indentation_mismatch(parser, opening_newline_index, &operator, false, false); expect1(parser, PM_TOKEN_BRACE_RIGHT, PM_ERR_LAMBDA_TERM_BRACE); } else { expect1(parser, PM_TOKEN_KEYWORD_DO, PM_ERR_LAMBDA_OPEN); @@ -20305,15 +20509,15 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b if (!match3(parser, PM_TOKEN_KEYWORD_END, PM_TOKEN_KEYWORD_RESCUE, PM_TOKEN_KEYWORD_ENSURE)) { pm_accepts_block_stack_push(parser, true); - body = (pm_node_t *) parse_statements(parser, PM_CONTEXT_LAMBDA_DO_END); + body = (pm_node_t *) parse_statements(parser, PM_CONTEXT_LAMBDA_DO_END, (uint16_t) (depth + 1)); pm_accepts_block_stack_pop(parser); } if (match2(parser, PM_TOKEN_KEYWORD_RESCUE, PM_TOKEN_KEYWORD_ENSURE)) { assert(body == NULL || PM_NODE_TYPE_P(body, PM_STATEMENTS_NODE)); - body = (pm_node_t *) parse_rescues_implicit_begin(parser, opening_newline_index, &operator, opening.start, (pm_statements_node_t *) body, PM_RESCUES_LAMBDA); + body = (pm_node_t *) parse_rescues_implicit_begin(parser, opening_newline_index, &operator, opening.start, (pm_statements_node_t *) body, PM_RESCUES_LAMBDA, (uint16_t) (depth + 1)); } else { - parser_warn_indentation_mismatch(parser, opening_newline_index, &operator, false); + parser_warn_indentation_mismatch(parser, opening_newline_index, &operator, false, false); } expect1(parser, PM_TOKEN_KEYWORD_END, PM_ERR_LAMBDA_TERM_END); @@ -20335,18 +20539,18 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b parser_lex(parser); pm_token_t operator = parser->previous; - pm_node_t *receiver = parse_expression(parser, pm_binding_powers[parser->previous.type].right, false, PM_ERR_UNARY_RECEIVER); + pm_node_t *receiver = parse_expression(parser, pm_binding_powers[parser->previous.type].right, false, false, PM_ERR_UNARY_RECEIVER, (uint16_t) (depth + 1)); pm_call_node_t *node = pm_call_node_unary_create(parser, &operator, receiver, "+@"); return (pm_node_t *) node; } case PM_TOKEN_STRING_BEGIN: - return parse_strings(parser, NULL); + return parse_strings(parser, NULL, accepts_label, (uint16_t) (depth + 1)); case PM_TOKEN_SYMBOL_BEGIN: { pm_lex_mode_t lex_mode = *parser->lex_modes.current; parser_lex(parser); - return parse_symbol(parser, &lex_mode, PM_LEX_STATE_END); + return parse_symbol(parser, &lex_mode, PM_LEX_STATE_END, (uint16_t) (depth + 1)); } default: { pm_context_t recoverable = context_recoverable(parser, &parser->current); @@ -20389,8 +20593,8 @@ parse_expression_prefix(pm_parser_t *parser, pm_binding_power_t binding_power, b * or any of the binary operators that can be written to a variable. */ static pm_node_t * -parse_assignment_value(pm_parser_t *parser, pm_binding_power_t previous_binding_power, pm_binding_power_t binding_power, bool accepts_command_call, pm_diagnostic_id_t diag_id) { - pm_node_t *value = parse_value_expression(parser, binding_power, previous_binding_power == PM_BINDING_POWER_ASSIGNMENT ? accepts_command_call : previous_binding_power < PM_BINDING_POWER_MATCH, diag_id); +parse_assignment_value(pm_parser_t *parser, pm_binding_power_t previous_binding_power, pm_binding_power_t binding_power, bool accepts_command_call, pm_diagnostic_id_t diag_id, uint16_t depth) { + pm_node_t *value = parse_value_expression(parser, binding_power, previous_binding_power == PM_BINDING_POWER_ASSIGNMENT ? accepts_command_call : previous_binding_power < PM_BINDING_POWER_MATCH, false, diag_id, (uint16_t) (depth + 1)); // Contradicting binding powers, the right-hand-side value of the assignment // allows the `rescue` modifier. @@ -20400,7 +20604,7 @@ parse_assignment_value(pm_parser_t *parser, pm_binding_power_t previous_binding_ pm_token_t rescue = parser->current; parser_lex(parser); - pm_node_t *right = parse_expression(parser, binding_power, false, PM_ERR_RESCUE_MODIFIER_VALUE); + pm_node_t *right = parse_expression(parser, binding_power, false, false, PM_ERR_RESCUE_MODIFIER_VALUE, (uint16_t) (depth + 1)); context_pop(parser); return (pm_node_t *) pm_rescue_modifier_node_create(parser, value, &rescue, right); @@ -20458,11 +20662,11 @@ parse_assignment_value_local(pm_parser_t *parser, const pm_node_t *node) { * operator that allows multiple values after it. */ static pm_node_t * -parse_assignment_values(pm_parser_t *parser, pm_binding_power_t previous_binding_power, pm_binding_power_t binding_power, bool accepts_command_call, pm_diagnostic_id_t diag_id) { +parse_assignment_values(pm_parser_t *parser, pm_binding_power_t previous_binding_power, pm_binding_power_t binding_power, bool accepts_command_call, pm_diagnostic_id_t diag_id, uint16_t depth) { bool permitted = true; if (previous_binding_power != PM_BINDING_POWER_STATEMENT && match1(parser, PM_TOKEN_USTAR)) permitted = false; - pm_node_t *value = parse_starred_expression(parser, binding_power, previous_binding_power == PM_BINDING_POWER_ASSIGNMENT ? accepts_command_call : previous_binding_power < PM_BINDING_POWER_MATCH, diag_id); + pm_node_t *value = parse_starred_expression(parser, binding_power, previous_binding_power == PM_BINDING_POWER_ASSIGNMENT ? accepts_command_call : previous_binding_power < PM_BINDING_POWER_MATCH, diag_id, (uint16_t) (depth + 1)); if (!permitted) pm_parser_err_node(parser, value, PM_ERR_UNEXPECTED_MULTI_WRITE); parse_assignment_value_local(parser, value); @@ -20478,7 +20682,7 @@ parse_assignment_values(pm_parser_t *parser, pm_binding_power_t previous_binding value = (pm_node_t *) array; while (accept1(parser, PM_TOKEN_COMMA)) { - pm_node_t *element = parse_starred_expression(parser, binding_power, false, PM_ERR_ARRAY_ELEMENT); + pm_node_t *element = parse_starred_expression(parser, binding_power, false, PM_ERR_ARRAY_ELEMENT, (uint16_t) (depth + 1)); pm_array_node_elements_append(array, element); if (PM_NODE_TYPE_P(element, PM_MISSING_NODE)) break; @@ -20506,7 +20710,7 @@ parse_assignment_values(pm_parser_t *parser, pm_binding_power_t previous_binding } } - pm_node_t *right = parse_expression(parser, binding_power, accepts_command_call_inner, PM_ERR_RESCUE_MODIFIER_VALUE); + pm_node_t *right = parse_expression(parser, binding_power, accepts_command_call_inner, false, PM_ERR_RESCUE_MODIFIER_VALUE, (uint16_t) (depth + 1)); context_pop(parser); return (pm_node_t *) pm_rescue_modifier_node_create(parser, value, &rescue, right); @@ -20661,7 +20865,7 @@ parse_regular_expression_named_captures(pm_parser_t *parser, const pm_string_t * } static inline pm_node_t * -parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t previous_binding_power, pm_binding_power_t binding_power, bool accepts_command_call) { +parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t previous_binding_power, pm_binding_power_t binding_power, bool accepts_command_call, uint16_t depth) { pm_token_t token = parser->current; switch (token.type) { @@ -20680,7 +20884,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t /* fallthrough */ case PM_CASE_WRITABLE: { parser_lex(parser); - pm_node_t *value = parse_assignment_values(parser, previous_binding_power, PM_NODE_TYPE_P(node, PM_MULTI_TARGET_NODE) ? PM_BINDING_POWER_MULTI_ASSIGNMENT + 1 : binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_EQUAL); + pm_node_t *value = parse_assignment_values(parser, previous_binding_power, PM_NODE_TYPE_P(node, PM_MULTI_TARGET_NODE) ? PM_BINDING_POWER_MULTI_ASSIGNMENT + 1 : binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_EQUAL, (uint16_t) (depth + 1)); if (PM_NODE_TYPE_P(node, PM_MULTI_TARGET_NODE) && previous_binding_power != PM_BINDING_POWER_STATEMENT) { pm_parser_err_node(parser, node, PM_ERR_UNEXPECTED_MULTI_WRITE); @@ -20693,7 +20897,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t pm_multi_target_node_targets_append(parser, multi_target, node); parser_lex(parser); - pm_node_t *value = parse_assignment_values(parser, previous_binding_power, PM_BINDING_POWER_MULTI_ASSIGNMENT + 1, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_EQUAL); + pm_node_t *value = parse_assignment_values(parser, previous_binding_power, PM_BINDING_POWER_MULTI_ASSIGNMENT + 1, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_EQUAL, (uint16_t) (depth + 1)); return parse_write(parser, (pm_node_t *) multi_target, &token, value); } case PM_SOURCE_ENCODING_NODE: @@ -20706,7 +20910,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t // In these special cases, we have specific error messages // and we will replace them with local variable writes. parser_lex(parser); - pm_node_t *value = parse_assignment_values(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_EQUAL); + pm_node_t *value = parse_assignment_values(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_EQUAL, (uint16_t) (depth + 1)); return parse_unwriteable_write(parser, node, &token, value); } default: @@ -20727,7 +20931,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t case PM_GLOBAL_VARIABLE_READ_NODE: { parser_lex(parser); - pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_AMPAMPEQ); + pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_AMPAMPEQ, (uint16_t) (depth + 1)); pm_node_t *result = (pm_node_t *) pm_global_variable_and_write_node_create(parser, node, &token, value); pm_node_destroy(parser, node); @@ -20736,7 +20940,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t case PM_CLASS_VARIABLE_READ_NODE: { parser_lex(parser); - pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_AMPAMPEQ); + pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_AMPAMPEQ, (uint16_t) (depth + 1)); pm_node_t *result = (pm_node_t *) pm_class_variable_and_write_node_create(parser, (pm_class_variable_read_node_t *) node, &token, value); pm_node_destroy(parser, node); @@ -20745,7 +20949,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t case PM_CONSTANT_PATH_NODE: { parser_lex(parser); - pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_AMPAMPEQ); + pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_AMPAMPEQ, (uint16_t) (depth + 1)); pm_node_t *write = (pm_node_t *) pm_constant_path_and_write_node_create(parser, (pm_constant_path_node_t *) node, &token, value); return parse_shareable_constant_write(parser, write); @@ -20753,7 +20957,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t case PM_CONSTANT_READ_NODE: { parser_lex(parser); - pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_AMPAMPEQ); + pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_AMPAMPEQ, (uint16_t) (depth + 1)); pm_node_t *write = (pm_node_t *) pm_constant_and_write_node_create(parser, (pm_constant_read_node_t *) node, &token, value); pm_node_destroy(parser, node); @@ -20762,7 +20966,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t case PM_INSTANCE_VARIABLE_READ_NODE: { parser_lex(parser); - pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_AMPAMPEQ); + pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_AMPAMPEQ, (uint16_t) (depth + 1)); pm_node_t *result = (pm_node_t *) pm_instance_variable_and_write_node_create(parser, (pm_instance_variable_read_node_t *) node, &token, value); pm_node_destroy(parser, node); @@ -20772,7 +20976,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t pm_local_variable_read_node_t *cast = (pm_local_variable_read_node_t *) node; parser_lex(parser); - pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_AMPAMPEQ); + pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_AMPAMPEQ, (uint16_t) (depth + 1)); pm_node_t *result = (pm_node_t *) pm_local_variable_and_write_node_create(parser, node, &token, value, cast->name, cast->depth); pm_node_destroy(parser, node); @@ -20791,7 +20995,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t pm_constant_id_t constant_id = pm_parser_local_add_location(parser, message_loc->start, message_loc->end, 1); parser_lex(parser); - pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_AMPAMPEQ); + pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_AMPAMPEQ, (uint16_t) (depth + 1)); pm_node_t *result = (pm_node_t *) pm_local_variable_and_write_node_create(parser, (pm_node_t *) cast, &token, value, constant_id, 0); pm_node_destroy(parser, (pm_node_t *) cast); @@ -20806,7 +21010,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t // this is an aref expression, and we can transform it into // an aset expression. if (PM_NODE_FLAG_P(cast, PM_CALL_NODE_FLAGS_INDEX)) { - pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_AMPAMPEQ); + pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_AMPAMPEQ, (uint16_t) (depth + 1)); return (pm_node_t *) pm_index_and_write_node_create(parser, cast, &token, value); } @@ -20818,7 +21022,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t } parse_call_operator_write(parser, cast, &token); - pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_AMPAMPEQ); + pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_AMPAMPEQ, (uint16_t) (depth + 1)); return (pm_node_t *) pm_call_and_write_node_create(parser, cast, &token, value); } case PM_MULTI_WRITE_NODE: { @@ -20845,7 +21049,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t case PM_GLOBAL_VARIABLE_READ_NODE: { parser_lex(parser); - pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_PIPEPIPEEQ); + pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_PIPEPIPEEQ, (uint16_t) (depth + 1)); pm_node_t *result = (pm_node_t *) pm_global_variable_or_write_node_create(parser, node, &token, value); pm_node_destroy(parser, node); @@ -20854,7 +21058,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t case PM_CLASS_VARIABLE_READ_NODE: { parser_lex(parser); - pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_PIPEPIPEEQ); + pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_PIPEPIPEEQ, (uint16_t) (depth + 1)); pm_node_t *result = (pm_node_t *) pm_class_variable_or_write_node_create(parser, (pm_class_variable_read_node_t *) node, &token, value); pm_node_destroy(parser, node); @@ -20863,7 +21067,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t case PM_CONSTANT_PATH_NODE: { parser_lex(parser); - pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_PIPEPIPEEQ); + pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_PIPEPIPEEQ, (uint16_t) (depth + 1)); pm_node_t *write = (pm_node_t *) pm_constant_path_or_write_node_create(parser, (pm_constant_path_node_t *) node, &token, value); return parse_shareable_constant_write(parser, write); @@ -20871,7 +21075,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t case PM_CONSTANT_READ_NODE: { parser_lex(parser); - pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_PIPEPIPEEQ); + pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_PIPEPIPEEQ, (uint16_t) (depth + 1)); pm_node_t *write = (pm_node_t *) pm_constant_or_write_node_create(parser, (pm_constant_read_node_t *) node, &token, value); pm_node_destroy(parser, node); @@ -20880,7 +21084,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t case PM_INSTANCE_VARIABLE_READ_NODE: { parser_lex(parser); - pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_PIPEPIPEEQ); + pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_PIPEPIPEEQ, (uint16_t) (depth + 1)); pm_node_t *result = (pm_node_t *) pm_instance_variable_or_write_node_create(parser, (pm_instance_variable_read_node_t *) node, &token, value); pm_node_destroy(parser, node); @@ -20890,7 +21094,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t pm_local_variable_read_node_t *cast = (pm_local_variable_read_node_t *) node; parser_lex(parser); - pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_PIPEPIPEEQ); + pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_PIPEPIPEEQ, (uint16_t) (depth + 1)); pm_node_t *result = (pm_node_t *) pm_local_variable_or_write_node_create(parser, node, &token, value, cast->name, cast->depth); pm_node_destroy(parser, node); @@ -20909,7 +21113,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t pm_constant_id_t constant_id = pm_parser_local_add_location(parser, message_loc->start, message_loc->end, 1); parser_lex(parser); - pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_PIPEPIPEEQ); + pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_PIPEPIPEEQ, (uint16_t) (depth + 1)); pm_node_t *result = (pm_node_t *) pm_local_variable_or_write_node_create(parser, (pm_node_t *) cast, &token, value, constant_id, 0); pm_node_destroy(parser, (pm_node_t *) cast); @@ -20924,7 +21128,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t // this is an aref expression, and we can transform it into // an aset expression. if (PM_NODE_FLAG_P(cast, PM_CALL_NODE_FLAGS_INDEX)) { - pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_PIPEPIPEEQ); + pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_PIPEPIPEEQ, (uint16_t) (depth + 1)); return (pm_node_t *) pm_index_or_write_node_create(parser, cast, &token, value); } @@ -20936,7 +21140,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t } parse_call_operator_write(parser, cast, &token); - pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_PIPEPIPEEQ); + pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_PIPEPIPEEQ, (uint16_t) (depth + 1)); return (pm_node_t *) pm_call_or_write_node_create(parser, cast, &token, value); } case PM_MULTI_WRITE_NODE: { @@ -20973,7 +21177,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t case PM_GLOBAL_VARIABLE_READ_NODE: { parser_lex(parser); - pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_OPERATOR); + pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_OPERATOR, (uint16_t) (depth + 1)); pm_node_t *result = (pm_node_t *) pm_global_variable_operator_write_node_create(parser, node, &token, value); pm_node_destroy(parser, node); @@ -20982,7 +21186,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t case PM_CLASS_VARIABLE_READ_NODE: { parser_lex(parser); - pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_OPERATOR); + pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_OPERATOR, (uint16_t) (depth + 1)); pm_node_t *result = (pm_node_t *) pm_class_variable_operator_write_node_create(parser, (pm_class_variable_read_node_t *) node, &token, value); pm_node_destroy(parser, node); @@ -20991,7 +21195,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t case PM_CONSTANT_PATH_NODE: { parser_lex(parser); - pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_OPERATOR); + pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_OPERATOR, (uint16_t) (depth + 1)); pm_node_t *write = (pm_node_t *) pm_constant_path_operator_write_node_create(parser, (pm_constant_path_node_t *) node, &token, value); return parse_shareable_constant_write(parser, write); @@ -20999,7 +21203,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t case PM_CONSTANT_READ_NODE: { parser_lex(parser); - pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_OPERATOR); + pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_OPERATOR, (uint16_t) (depth + 1)); pm_node_t *write = (pm_node_t *) pm_constant_operator_write_node_create(parser, (pm_constant_read_node_t *) node, &token, value); pm_node_destroy(parser, node); @@ -21008,7 +21212,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t case PM_INSTANCE_VARIABLE_READ_NODE: { parser_lex(parser); - pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_OPERATOR); + pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_OPERATOR, (uint16_t) (depth + 1)); pm_node_t *result = (pm_node_t *) pm_instance_variable_operator_write_node_create(parser, (pm_instance_variable_read_node_t *) node, &token, value); pm_node_destroy(parser, node); @@ -21018,7 +21222,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t pm_local_variable_read_node_t *cast = (pm_local_variable_read_node_t *) node; parser_lex(parser); - pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_OPERATOR); + pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_OPERATOR, (uint16_t) (depth + 1)); pm_node_t *result = (pm_node_t *) pm_local_variable_operator_write_node_create(parser, node, &token, value, cast->name, cast->depth); pm_node_destroy(parser, node); @@ -21036,7 +21240,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t pm_refute_numbered_parameter(parser, message_loc->start, message_loc->end); pm_constant_id_t constant_id = pm_parser_local_add_location(parser, message_loc->start, message_loc->end, 1); - pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_OPERATOR); + pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_OPERATOR, (uint16_t) (depth + 1)); pm_node_t *result = (pm_node_t *) pm_local_variable_operator_write_node_create(parser, (pm_node_t *) cast, &token, value, constant_id, 0); pm_node_destroy(parser, (pm_node_t *) cast); @@ -21047,7 +21251,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t // this is an aref expression, and we can transform it into // an aset expression. if (PM_NODE_FLAG_P(cast, PM_CALL_NODE_FLAGS_INDEX)) { - pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_OPERATOR); + pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_OPERATOR, (uint16_t) (depth + 1)); return (pm_node_t *) pm_index_operator_write_node_create(parser, cast, &token, value); } @@ -21059,7 +21263,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t } parse_call_operator_write(parser, cast, &token); - pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_OPERATOR); + pm_node_t *value = parse_assignment_value(parser, previous_binding_power, binding_power, accepts_command_call, PM_ERR_EXPECT_EXPRESSION_AFTER_OPERATOR, (uint16_t) (depth + 1)); return (pm_node_t *) pm_call_operator_write_node_create(parser, cast, &token, value); } case PM_MULTI_WRITE_NODE: { @@ -21081,14 +21285,14 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t case PM_TOKEN_KEYWORD_AND: { parser_lex(parser); - pm_node_t *right = parse_expression(parser, binding_power, parser->previous.type == PM_TOKEN_KEYWORD_AND, PM_ERR_EXPECT_EXPRESSION_AFTER_OPERATOR); + pm_node_t *right = parse_expression(parser, binding_power, parser->previous.type == PM_TOKEN_KEYWORD_AND, false, PM_ERR_EXPECT_EXPRESSION_AFTER_OPERATOR, (uint16_t) (depth + 1)); return (pm_node_t *) pm_and_node_create(parser, node, &token, right); } case PM_TOKEN_KEYWORD_OR: case PM_TOKEN_PIPE_PIPE: { parser_lex(parser); - pm_node_t *right = parse_expression(parser, binding_power, parser->previous.type == PM_TOKEN_KEYWORD_OR, PM_ERR_EXPECT_EXPRESSION_AFTER_OPERATOR); + pm_node_t *right = parse_expression(parser, binding_power, parser->previous.type == PM_TOKEN_KEYWORD_OR, false, PM_ERR_EXPECT_EXPRESSION_AFTER_OPERATOR, (uint16_t) (depth + 1)); return (pm_node_t *) pm_or_node_create(parser, node, &token, right); } case PM_TOKEN_EQUAL_TILDE: { @@ -21100,7 +21304,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t // // In this case, `foo` should be a method call and not a local yet. parser_lex(parser); - pm_node_t *argument = parse_expression(parser, binding_power, false, PM_ERR_EXPECT_EXPRESSION_AFTER_OPERATOR); + pm_node_t *argument = parse_expression(parser, binding_power, false, false, PM_ERR_EXPECT_EXPRESSION_AFTER_OPERATOR, (uint16_t) (depth + 1)); // By default, we're going to create a call node and then return it. pm_call_node_t *call = pm_call_node_binary_create(parser, node, &token, argument, 0); @@ -21179,7 +21383,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t case PM_TOKEN_STAR: case PM_TOKEN_STAR_STAR: { parser_lex(parser); - pm_node_t *argument = parse_expression(parser, binding_power, false, PM_ERR_EXPECT_EXPRESSION_AFTER_OPERATOR); + pm_node_t *argument = parse_expression(parser, binding_power, false, false, PM_ERR_EXPECT_EXPRESSION_AFTER_OPERATOR, (uint16_t) (depth + 1)); return (pm_node_t *) pm_call_node_binary_create(parser, node, &token, argument, 0); } case PM_TOKEN_GREATER: @@ -21191,7 +21395,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t } parser_lex(parser); - pm_node_t *argument = parse_expression(parser, binding_power, false, PM_ERR_EXPECT_EXPRESSION_AFTER_OPERATOR); + pm_node_t *argument = parse_expression(parser, binding_power, false, false, PM_ERR_EXPECT_EXPRESSION_AFTER_OPERATOR, (uint16_t) (depth + 1)); return (pm_node_t *) pm_call_node_binary_create(parser, node, &token, argument, PM_CALL_NODE_FLAGS_COMPARISON); } case PM_TOKEN_AMPERSAND_DOT: @@ -21202,7 +21406,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t // This if statement handles the foo.() syntax. if (match1(parser, PM_TOKEN_PARENTHESIS_LEFT)) { - parse_arguments_list(parser, &arguments, true, false); + parse_arguments_list(parser, &arguments, true, false, (uint16_t) (depth + 1)); return (pm_node_t *) pm_call_node_shorthand_create(parser, node, &operator, &arguments); } @@ -21224,7 +21428,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t } } - parse_arguments_list(parser, &arguments, true, accepts_command_call); + parse_arguments_list(parser, &arguments, true, accepts_command_call, (uint16_t) (depth + 1)); pm_call_node_t *call = pm_call_node_call_create(parser, node, &operator, &message, &arguments); if ( @@ -21233,7 +21437,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t arguments.opening_loc.start == NULL && match1(parser, PM_TOKEN_COMMA) ) { - return parse_targets_validate(parser, (pm_node_t *) call, PM_BINDING_POWER_INDEX); + return parse_targets_validate(parser, (pm_node_t *) call, PM_BINDING_POWER_INDEX, (uint16_t) (depth + 1)); } else { return (pm_node_t *) call; } @@ -21244,7 +21448,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t pm_node_t *right = NULL; if (token_begins_expression_p(parser->current.type)) { - right = parse_expression(parser, binding_power, false, PM_ERR_EXPECT_EXPRESSION_AFTER_OPERATOR); + right = parse_expression(parser, binding_power, false, false, PM_ERR_EXPECT_EXPRESSION_AFTER_OPERATOR, (uint16_t) (depth + 1)); } return (pm_node_t *) pm_range_node_create(parser, node, &token, right); @@ -21253,14 +21457,14 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t pm_token_t keyword = parser->current; parser_lex(parser); - pm_node_t *predicate = parse_value_expression(parser, binding_power, true, PM_ERR_CONDITIONAL_IF_PREDICATE); + pm_node_t *predicate = parse_value_expression(parser, binding_power, true, false, PM_ERR_CONDITIONAL_IF_PREDICATE, (uint16_t) (depth + 1)); return (pm_node_t *) pm_if_node_modifier_create(parser, node, &keyword, predicate); } case PM_TOKEN_KEYWORD_UNLESS_MODIFIER: { pm_token_t keyword = parser->current; parser_lex(parser); - pm_node_t *predicate = parse_value_expression(parser, binding_power, true, PM_ERR_CONDITIONAL_UNLESS_PREDICATE); + pm_node_t *predicate = parse_value_expression(parser, binding_power, true, false, PM_ERR_CONDITIONAL_UNLESS_PREDICATE, (uint16_t) (depth + 1)); return (pm_node_t *) pm_unless_node_modifier_create(parser, node, &keyword, predicate); } case PM_TOKEN_KEYWORD_UNTIL_MODIFIER: { @@ -21268,7 +21472,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t pm_statements_node_t *statements = pm_statements_node_create(parser); pm_statements_node_body_append(parser, statements, node, true); - pm_node_t *predicate = parse_value_expression(parser, binding_power, true, PM_ERR_CONDITIONAL_UNTIL_PREDICATE); + pm_node_t *predicate = parse_value_expression(parser, binding_power, true, false, PM_ERR_CONDITIONAL_UNTIL_PREDICATE, (uint16_t) (depth + 1)); return (pm_node_t *) pm_until_node_modifier_create(parser, &token, predicate, statements, PM_NODE_TYPE_P(node, PM_BEGIN_NODE) ? PM_LOOP_FLAGS_BEGIN_MODIFIER : 0); } case PM_TOKEN_KEYWORD_WHILE_MODIFIER: { @@ -21276,7 +21480,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t pm_statements_node_t *statements = pm_statements_node_create(parser); pm_statements_node_body_append(parser, statements, node, true); - pm_node_t *predicate = parse_value_expression(parser, binding_power, true, PM_ERR_CONDITIONAL_WHILE_PREDICATE); + pm_node_t *predicate = parse_value_expression(parser, binding_power, true, false, PM_ERR_CONDITIONAL_WHILE_PREDICATE, (uint16_t) (depth + 1)); return (pm_node_t *) pm_while_node_modifier_create(parser, &token, predicate, statements, PM_NODE_TYPE_P(node, PM_BEGIN_NODE) ? PM_LOOP_FLAGS_BEGIN_MODIFIER : 0); } case PM_TOKEN_QUESTION_MARK: { @@ -21287,7 +21491,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t pm_token_t qmark = parser->current; parser_lex(parser); - pm_node_t *true_expression = parse_expression(parser, PM_BINDING_POWER_DEFINED, false, PM_ERR_TERNARY_EXPRESSION_TRUE); + pm_node_t *true_expression = parse_expression(parser, PM_BINDING_POWER_DEFINED, false, false, PM_ERR_TERNARY_EXPRESSION_TRUE, (uint16_t) (depth + 1)); if (parser->recovering) { // If parsing the true expression of this ternary resulted in a syntax @@ -21310,7 +21514,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t expect1(parser, PM_TOKEN_COLON, PM_ERR_TERNARY_COLON); pm_token_t colon = parser->previous; - pm_node_t *false_expression = parse_expression(parser, PM_BINDING_POWER_DEFINED, false, PM_ERR_TERNARY_EXPRESSION_FALSE); + pm_node_t *false_expression = parse_expression(parser, PM_BINDING_POWER_DEFINED, false, false, PM_ERR_TERNARY_EXPRESSION_FALSE, (uint16_t) (depth + 1)); context_pop(parser); pop_block_exits(parser, previous_block_exits); @@ -21340,7 +21544,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t pm_token_t message = parser->previous; pm_arguments_t arguments = { 0 }; - parse_arguments_list(parser, &arguments, true, accepts_command_call); + parse_arguments_list(parser, &arguments, true, accepts_command_call, (uint16_t) (depth + 1)); path = (pm_node_t *) pm_call_node_call_create(parser, node, &delimiter, &message, &arguments); } else { // Otherwise, this is a constant path. That would look like Foo::Bar. @@ -21349,7 +21553,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t // If this is followed by a comma then it is a multiple assignment. if (previous_binding_power == PM_BINDING_POWER_STATEMENT && match1(parser, PM_TOKEN_COMMA)) { - return parse_targets_validate(parser, path, PM_BINDING_POWER_INDEX); + return parse_targets_validate(parser, path, PM_BINDING_POWER_INDEX, (uint16_t) (depth + 1)); } return path; @@ -21364,12 +21568,12 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t // If we have an identifier following a '::' operator, then it is for // sure a method call. pm_arguments_t arguments = { 0 }; - parse_arguments_list(parser, &arguments, true, accepts_command_call); + parse_arguments_list(parser, &arguments, true, accepts_command_call, (uint16_t) (depth + 1)); pm_call_node_t *call = pm_call_node_call_create(parser, node, &delimiter, &message, &arguments); // If this is followed by a comma then it is a multiple assignment. if (previous_binding_power == PM_BINDING_POWER_STATEMENT && match1(parser, PM_TOKEN_COMMA)) { - return parse_targets_validate(parser, (pm_node_t *) call, PM_BINDING_POWER_INDEX); + return parse_targets_validate(parser, (pm_node_t *) call, PM_BINDING_POWER_INDEX, (uint16_t) (depth + 1)); } return (pm_node_t *) call; @@ -21378,7 +21582,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t // If we have a parenthesis following a '::' operator, then it is the // method call shorthand. That would look like Foo::(bar). pm_arguments_t arguments = { 0 }; - parse_arguments_list(parser, &arguments, true, false); + parse_arguments_list(parser, &arguments, true, false, (uint16_t) (depth + 1)); return (pm_node_t *) pm_call_node_shorthand_create(parser, node, &delimiter, &arguments); } @@ -21393,7 +21597,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t parser_lex(parser); accept1(parser, PM_TOKEN_NEWLINE); - pm_node_t *value = parse_expression(parser, binding_power, true, PM_ERR_RESCUE_MODIFIER_VALUE); + pm_node_t *value = parse_expression(parser, binding_power, true, false, PM_ERR_RESCUE_MODIFIER_VALUE, (uint16_t) (depth + 1)); context_pop(parser); return (pm_node_t *) pm_rescue_modifier_node_create(parser, node, &token, value); @@ -21406,7 +21610,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t if (!accept1(parser, PM_TOKEN_BRACKET_RIGHT)) { pm_accepts_block_stack_push(parser, true); - parse_arguments(parser, &arguments, false, PM_TOKEN_BRACKET_RIGHT); + parse_arguments(parser, &arguments, false, PM_TOKEN_BRACKET_RIGHT, (uint16_t) (depth + 1)); pm_accepts_block_stack_pop(parser); expect1(parser, PM_TOKEN_BRACKET_RIGHT, PM_ERR_EXPECT_RBRACKET); } @@ -21417,7 +21621,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t // assignment and we should parse the targets. if (previous_binding_power == PM_BINDING_POWER_STATEMENT && match1(parser, PM_TOKEN_COMMA)) { pm_call_node_t *aref = pm_call_node_aref_create(parser, node, &arguments); - return parse_targets_validate(parser, (pm_node_t *) aref, PM_BINDING_POWER_INDEX); + return parse_targets_validate(parser, (pm_node_t *) aref, PM_BINDING_POWER_INDEX, (uint16_t) (depth + 1)); } // If we're at the end of the arguments, we can now check if there is a @@ -21425,10 +21629,10 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t // add it to the arguments. pm_block_node_t *block = NULL; if (accept1(parser, PM_TOKEN_BRACE_LEFT)) { - block = parse_block(parser); + block = parse_block(parser, (uint16_t) (depth + 1)); pm_arguments_validate_block(parser, &arguments, block); } else if (pm_accepts_block_stack_p(parser) && accept1(parser, PM_TOKEN_KEYWORD_DO)) { - block = parse_block(parser); + block = parse_block(parser, (uint16_t) (depth + 1)); } if (block != NULL) { @@ -21455,7 +21659,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t parser_lex(parser); pm_constant_id_list_t captures = { 0 }; - pm_node_t *pattern = parse_pattern(parser, &captures, PM_PARSE_PATTERN_TOP | PM_PARSE_PATTERN_MULTI, PM_ERR_PATTERN_EXPRESSION_AFTER_IN); + pm_node_t *pattern = parse_pattern(parser, &captures, PM_PARSE_PATTERN_TOP | PM_PARSE_PATTERN_MULTI, PM_ERR_PATTERN_EXPRESSION_AFTER_IN, (uint16_t) (depth + 1)); parser->pattern_matching_newlines = previous_pattern_matching_newlines; pm_constant_id_list_free(&captures); @@ -21472,7 +21676,7 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t parser_lex(parser); pm_constant_id_list_t captures = { 0 }; - pm_node_t *pattern = parse_pattern(parser, &captures, PM_PARSE_PATTERN_TOP | PM_PARSE_PATTERN_MULTI, PM_ERR_PATTERN_EXPRESSION_AFTER_HROCKET); + pm_node_t *pattern = parse_pattern(parser, &captures, PM_PARSE_PATTERN_TOP | PM_PARSE_PATTERN_MULTI, PM_ERR_PATTERN_EXPRESSION_AFTER_HROCKET, (uint16_t) (depth + 1)); parser->pattern_matching_newlines = previous_pattern_matching_newlines; pm_constant_id_list_free(&captures); @@ -21489,6 +21693,19 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t #undef PM_PARSE_PATTERN_TOP #undef PM_PARSE_PATTERN_MULTI +/** + * Determine if a given call node looks like a "command", which means it has + * arguments but does not have parentheses. + */ +static inline bool +pm_call_node_command_p(const pm_call_node_t *node) { + return ( + (node->opening_loc.start == NULL) && + (node->block == NULL || PM_NODE_TYPE_P(node->block, PM_BLOCK_ARGUMENT_NODE)) && + (node->arguments != NULL || node->block != NULL) + ); +} + /** * Parse an expression at the given point of the parser using the given binding * power to parse subsequent chains. If this function finds a syntax error, it @@ -21498,8 +21715,13 @@ parse_expression_infix(pm_parser_t *parser, pm_node_t *node, pm_binding_power_t * determine if they need to perform additional cleanup. */ static pm_node_t * -parse_expression(pm_parser_t *parser, pm_binding_power_t binding_power, bool accepts_command_call, pm_diagnostic_id_t diag_id) { - pm_node_t *node = parse_expression_prefix(parser, binding_power, accepts_command_call, diag_id); +parse_expression(pm_parser_t *parser, pm_binding_power_t binding_power, bool accepts_command_call, bool accepts_label, pm_diagnostic_id_t diag_id, uint16_t depth) { + if (PRISM_UNLIKELY(depth >= PRISM_DEPTH_MAXIMUM)) { + pm_parser_err_current(parser, PM_ERR_NESTING_TOO_DEEP); + return (pm_node_t *) pm_missing_node_create(parser, parser->current.start, parser->current.end); + } + + pm_node_t *node = parse_expression_prefix(parser, binding_power, accepts_command_call, accepts_label, diag_id, depth); switch (PM_NODE_TYPE(node)) { case PM_MISSING_NODE: @@ -21518,6 +21740,23 @@ parse_expression(pm_parser_t *parser, pm_binding_power_t binding_power, bool acc return node; } break; + case PM_CALL_NODE: + // If we have a call node, then we need to check if it looks like a + // method call without parentheses that contains arguments. If it + // does, then it has different rules for parsing infix operators, + // namely that it only accepts composition (and/or) and modifiers + // (if/unless/etc.). + if ((pm_binding_powers[parser->current.type].left > PM_BINDING_POWER_COMPOSITION) && pm_call_node_command_p((pm_call_node_t *) node)) { + return node; + } + break; + case PM_SYMBOL_NODE: + // If we have a symbol node that is being parsed as a label, then we + // need to immediately return, because there should never be an + // infix operator following this node. + if (pm_symbol_node_label_p(node)) { + return node; + } default: break; } @@ -21525,14 +21764,24 @@ parse_expression(pm_parser_t *parser, pm_binding_power_t binding_power, bool acc // Otherwise we'll look and see if the next token can be parsed as an infix // operator. If it can, then we'll parse it using parse_expression_infix. pm_binding_powers_t current_binding_powers; + pm_token_type_t current_token_type; + while ( - current_binding_powers = pm_binding_powers[parser->current.type], + current_token_type = parser->current.type, + current_binding_powers = pm_binding_powers[current_token_type], binding_power <= current_binding_powers.left && current_binding_powers.binary ) { - node = parse_expression_infix(parser, node, binding_power, current_binding_powers.right, accepts_command_call); + node = parse_expression_infix(parser, node, binding_power, current_binding_powers.right, accepts_command_call, (uint16_t) (depth + 1)); switch (PM_NODE_TYPE(node)) { + case PM_MULTI_WRITE_NODE: + // Multi-write nodes are statements, and cannot be followed by + // operators except modifiers. + if (pm_binding_powers[parser->current.type].left > PM_BINDING_POWER_MODIFIER) { + return node; + } + break; case PM_CLASS_VARIABLE_WRITE_NODE: case PM_CONSTANT_PATH_WRITE_NODE: case PM_CONSTANT_WRITE_NODE: @@ -21557,16 +21806,33 @@ parse_expression(pm_parser_t *parser, pm_binding_power_t binding_power, bool acc break; } + // If the operator is nonassoc and we should not be able to parse the + // upcoming infix operator, break. if (current_binding_powers.nonassoc) { - bool endless_range_p = PM_NODE_TYPE_P(node, PM_RANGE_NODE) && ((pm_range_node_t *) node)->right == NULL; - pm_binding_power_t left = endless_range_p ? PM_BINDING_POWER_TERM : current_binding_powers.left; - if ( - left <= pm_binding_powers[parser->current.type].left || - // Exceptionally to operator precedences, '1.. & 2' is rejected. - // '1.. || 2' is also an exception, but it is handled by the lexer. - // (Here, parser->current is PM_TOKEN_PIPE, not PM_TOKEN_PIPE_PIPE). - (endless_range_p && match1(parser, PM_TOKEN_AMPERSAND)) - ) { + // If this is a non-assoc operator and we are about to parse the + // exact same operator, then we need to add an error. + if (match1(parser, current_token_type)) { + PM_PARSER_ERR_TOKEN_FORMAT(parser, parser->current, PM_ERR_NON_ASSOCIATIVE_OPERATOR, pm_token_type_human(parser->current.type), pm_token_type_human(current_token_type)); + break; + } + + // If this is an endless range, then we need to reject a couple of + // additional operators because it violates the normal operator + // precedence rules. Those patterns are: + // + // 1.. & 2 + // 1.. * 2 + // + if (PM_NODE_TYPE_P(node, PM_RANGE_NODE) && ((pm_range_node_t *) node)->right == NULL) { + if (match4(parser, PM_TOKEN_UAMPERSAND, PM_TOKEN_USTAR, PM_TOKEN_DOT, PM_TOKEN_AMPERSAND_DOT)) { + PM_PARSER_ERR_TOKEN_FORMAT(parser, parser->current, PM_ERR_NON_ASSOCIATIVE_OPERATOR, pm_token_type_human(parser->current.type), pm_token_type_human(current_token_type)); + break; + } + + if (PM_BINDING_POWER_TERM <= pm_binding_powers[parser->current.type].left) { + break; + } + } else if (current_binding_powers.left <= pm_binding_powers[parser->current.type].left) { break; } } @@ -21681,6 +21947,7 @@ wrap_statements(pm_parser_t *parser, pm_statements_node_t *statements) { )); pm_arguments_node_arguments_append(arguments, (pm_node_t *) keywords); + pm_node_flag_set((pm_node_t *) arguments, PM_ARGUMENTS_NODE_FLAGS_CONTAINS_KEYWORDS); } pm_statements_node_t *wrapped_statements = pm_statements_node_create(parser); @@ -21712,7 +21979,7 @@ parse_program(pm_parser_t *parser) { pm_node_list_t *previous_block_exits = push_block_exits(parser, ¤t_block_exits); parser_lex(parser); - pm_statements_node_t *statements = parse_statements(parser, PM_CONTEXT_MAIN); + pm_statements_node_t *statements = parse_statements(parser, PM_CONTEXT_MAIN, 0); if (statements == NULL) { statements = pm_statements_node_create(parser); @@ -21771,6 +22038,9 @@ pm_strnstr(const char *big, const char *little, size_t big_length) { return NULL; } +#ifdef _WIN32 +#define pm_parser_warn_shebang_carriage_return(parser, start, length) ((void) 0) +#else /** * Potentially warn the user if the shebang that has been found to include * "ruby" has a carriage return at the end, as that can cause problems on some @@ -21782,6 +22052,7 @@ pm_parser_warn_shebang_carriage_return(pm_parser_t *parser, const uint8_t *start pm_parser_warn(parser, start, start + length, PM_WARN_SHEBANG_CARRIAGE_RETURN); } } +#endif /** * Process the shebang when initializing the parser. This function assumes that @@ -21856,6 +22127,7 @@ pm_parser_init(pm_parser_t *parser, const uint8_t *source, size_t size, const pm .explicit_encoding = NULL, .command_line = 0, .parsing_eval = false, + .partial_script = false, .command_start = true, .recovering = false, .encoding_locked = false, @@ -21919,8 +22191,12 @@ pm_parser_init(pm_parser_t *parser, const uint8_t *source, size_t size, const pm // version option parser->version = options->version; + // partial_script + parser->partial_script = options->partial_script; + // scopes option parser->parsing_eval = options->scopes_count > 0; + if (parser->parsing_eval) parser->warn_mismatched_indentation = false; for (size_t scope_index = 0; scope_index < options->scopes_count; scope_index++) { const pm_options_scope_t *scope = pm_options_scope_get(options, scope_index); @@ -21963,27 +22239,42 @@ pm_parser_init(pm_parser_t *parser, const uint8_t *source, size_t size, const pm // "ruby" and start parsing from there. bool search_shebang = PM_PARSER_COMMAND_LINE_OPTION_X(parser); - // If the first two bytes of the source are a shebang, then we'll indicate - // that the encoding comment is at the end of the shebang. + // If the first two bytes of the source are a shebang, then we will do a bit + // of extra processing. + // + // First, we'll indicate that the encoding comment is at the end of the + // shebang. This means that when a shebang is present the encoding comment + // can begin on the second line. + // + // Second, we will check if the shebang includes "ruby". If it does, then we + // we will start parsing from there. We will also potentially warning the + // user if there is a carriage return at the end of the shebang. We will + // also potentially call the shebang callback if this is the main script to + // allow the caller to parse the shebang and find any command-line options. + // If the shebang does not include "ruby" and this is the main script being + // parsed, then we will start searching the file for a shebang that does + // contain "ruby" as if -x were passed on the command line. const uint8_t *newline = next_newline(parser->start, parser->end - parser->start); size_t length = (size_t) ((newline != NULL ? newline : parser->end) - parser->start); if (length > 2 && parser->current.end[0] == '#' && parser->current.end[1] == '!') { const char *engine; + if ((engine = pm_strnstr((const char *) parser->start, "ruby", length)) != NULL) { if (newline != NULL) { - size_t length_including_newline = length + 1; - pm_parser_warn_shebang_carriage_return(parser, parser->start, length_including_newline); - parser->encoding_comment_start = newline + 1; + + if (options == NULL || options->main_script) { + pm_parser_warn_shebang_carriage_return(parser, parser->start, length + 1); + } } - if (options != NULL && options->shebang_callback != NULL) { + if (options != NULL && options->main_script && options->shebang_callback != NULL) { pm_parser_init_shebang(parser, options, engine, length - ((size_t) (engine - (const char *) parser->start))); } search_shebang = false; - } else if (!parser->parsing_eval) { + } else if (options->main_script && !parser->parsing_eval) { search_shebang = true; } } @@ -22014,10 +22305,9 @@ pm_parser_init(pm_parser_t *parser, const uint8_t *source, size_t size, const pm const char *engine; if ((engine = pm_strnstr((const char *) cursor, "ruby", length)) != NULL) { found_shebang = true; - if (newline != NULL) { - size_t length_including_newline = length + 1; - pm_parser_warn_shebang_carriage_return(parser, cursor, length_including_newline); + if (newline != NULL) { + pm_parser_warn_shebang_carriage_return(parser, cursor, length + 1); parser->encoding_comment_start = newline + 1; } diff --git a/prism/templates/include/prism/ast.h.erb b/prism/templates/include/prism/ast.h.erb index 088a99323f8ebd..751c0b43c2cb09 100644 --- a/prism/templates/include/prism/ast.h.erb +++ b/prism/templates/include/prism/ast.h.erb @@ -157,11 +157,11 @@ typedef struct pm_node { *<%= line %> <%- end -%> * - * Type: <%= node.type %> -<%- if (node_flags = node.flags) -%> - * Flags: + * Type: ::<%= node.type %> +<% if (node_flags = node.flags) %> + * Flags (#pm_<%= node_flags.human %>): <%- node_flags.values.each do |value| -%> - * PM_<%= node_flags.human.upcase %>_<%= value.name %> + * * ::PM_<%= node_flags.human.upcase %>_<%= value.name %> <%- end -%> <%- end -%> * @@ -170,6 +170,7 @@ typedef struct pm_node { typedef struct pm_<%= node.human %> { /** The embedded base node. */ pm_node_t base; + <%- node.fields.each do |field| -%> /** @@ -207,7 +208,7 @@ typedef enum pm_<%= flag.human %> { <%- flag.values.each_with_index do |value, index| -%> <%= "\n" if index > 0 -%> /** <%= value.comment %> */ - PM_<%= flag.human.upcase %>_<%= value.name %> = <%= 1 << (index + 2) %>, + PM_<%= flag.human.upcase %>_<%= value.name %> = <%= 1 << (index + Prism::Template::COMMON_FLAGS_COUNT) %>, <%- end -%> } pm_<%= flag.human %>_t; <%- end -%> @@ -218,6 +219,6 @@ typedef enum pm_<%= flag.human %> { * to specify that through the environment. It will never be true except for in * those build systems. */ -#define PRISM_SERIALIZE_ONLY_SEMANTICS_FIELDS <%= Prism::Template::SERIALIZE_ONLY_SEMANTICS_FIELDS %> +#define PRISM_SERIALIZE_ONLY_SEMANTICS_FIELDS <%= Prism::Template::SERIALIZE_ONLY_SEMANTICS_FIELDS ? 1 : 0 %> #endif diff --git a/prism/templates/lib/prism/dsl.rb.erb b/prism/templates/lib/prism/dsl.rb.erb index f0dac2a4f0daec..e16ebb71101921 100644 --- a/prism/templates/lib/prism/dsl.rb.erb +++ b/prism/templates/lib/prism/dsl.rb.erb @@ -70,10 +70,10 @@ module Prism def <%= node.human %>(<%= ["source: default_source", "node_id: 0", "location: default_location", "flags: 0", *node.fields.map { |field| case field when Prism::Template::NodeField - if !field.kind? + kind = field.specific_kind || field.union_kind&.first + if kind.nil? "#{field.name}: default_node(source, location)" else - kind = field.specific_kind || field.union_kind.first "#{field.name}: #{kind.gsub(/(?<=.)[A-Z]/, "_\\0").downcase}(source: source)" end when Prism::Template::ConstantField diff --git a/prism/templates/lib/prism/node.rb.erb b/prism/templates/lib/prism/node.rb.erb index 06a7212f61acc2..f033cdea9b16e4 100644 --- a/prism/templates/lib/prism/node.rb.erb +++ b/prism/templates/lib/prism/node.rb.erb @@ -225,7 +225,7 @@ module Prism @flags = flags <%- node.fields.each do |field| -%> <%- if Prism::Template::CHECK_FIELD_KIND && field.respond_to?(:check_field_kind) -%> - raise <%= field.name %>.inspect unless <%= field.check_field_kind %> + raise "<%= node.name %>#<%= field.name %> was of unexpected type:\n#{<%= field.name %>.inspect}" unless <%= field.check_field_kind %> <%- end -%> @<%= field.name %> = <%= field.name %> <%- end -%> @@ -389,13 +389,13 @@ module Prism end end <%- end -%> - <%- flags.each_with_index do |flag, flag_index| -%> + <%- flags.each do |flag| -%> # <%= flag.comment %> module <%= flag.name %> <%- flag.values.each_with_index do |value, index| -%> # <%= value.comment %> - <%= value.name %> = 1 << <%= (index + 2) %> + <%= value.name %> = 1 << <%= index + Prism::Template::COMMON_FLAGS_COUNT %> <%= "\n" if value != flag.values.last -%> <%- end -%> end diff --git a/prism/templates/lib/prism/serialize.rb.erb b/prism/templates/lib/prism/serialize.rb.erb index 62108ec28a34f0..1c1cf6e22d3d63 100644 --- a/prism/templates/lib/prism/serialize.rb.erb +++ b/prism/templates/lib/prism/serialize.rb.erb @@ -20,10 +20,21 @@ module Prism def self.load(input, serialized) input = input.dup source = Source.for(input) + loader = Loader.new(source, serialized) result = loader.load_result input.force_encoding(loader.encoding) + + # This is an extremely niche use-case where the file was marked as binary + # but it contained UTF-8-encoded characters. In that case we will actually + # put it back to UTF-8 to give the location APIs the best chance of being + # correct. + if !input.ascii_only? && input.encoding == Encoding::BINARY + input.force_encoding(Encoding::UTF_8) + input.force_encoding(Encoding::BINARY) unless input.valid_encoding? + end + result end diff --git a/prism/templates/src/diagnostic.c.erb b/prism/templates/src/diagnostic.c.erb index 7b63d2dd0f602e..c0ec69652f37c7 100644 --- a/prism/templates/src/diagnostic.c.erb +++ b/prism/templates/src/diagnostic.c.erb @@ -100,7 +100,6 @@ static const pm_diagnostic_data_t diagnostic_messages[PM_DIAGNOSTIC_ID_MAX] = { [PM_ERR_ARGUMENT_FORMAL_GLOBAL] = { "invalid formal argument; formal argument cannot be a global variable", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_ARGUMENT_FORMAL_IVAR] = { "invalid formal argument; formal argument cannot be an instance variable", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_ARGUMENT_FORWARDING_UNBOUND] = { "unexpected `...` in an non-parenthesized call", PM_ERROR_LEVEL_SYNTAX }, - [PM_ERR_ARGUMENT_IN] = { "unexpected `in` keyword in arguments", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_ARGUMENT_NO_FORWARDING_AMPERSAND] = { "unexpected `&`; no anonymous block parameter", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_ARGUMENT_NO_FORWARDING_ELLIPSES] = { "unexpected ... when the parent method is not forwarding", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_ARGUMENT_NO_FORWARDING_STAR] = { "unexpected `*`; no anonymous rest parameter", PM_ERROR_LEVEL_SYNTAX }, @@ -113,7 +112,7 @@ static const pm_diagnostic_data_t diagnostic_messages[PM_DIAGNOSTIC_ID_MAX] = { [PM_ERR_ARRAY_EXPRESSION] = { "expected an expression for the array element", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_ARRAY_EXPRESSION_AFTER_STAR] = { "expected an expression after `*` in the array", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_ARRAY_SEPARATOR] = { "unexpected %s; expected a `,` separator for the array elements", PM_ERROR_LEVEL_SYNTAX }, - [PM_ERR_ARRAY_TERM] = { "expected a `]` to close the array", PM_ERROR_LEVEL_SYNTAX }, + [PM_ERR_ARRAY_TERM] = { "unexpected %s; expected a `]` to close the array", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_BEGIN_LONELY_ELSE] = { "unexpected `else` in `begin` block; else without rescue is useless", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_BEGIN_TERM] = { "expected an `end` to close the `begin` statement", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_BEGIN_UPCASE_BRACE] = { "expected a `{` after `BEGIN`", PM_ERROR_LEVEL_SYNTAX }, @@ -170,7 +169,7 @@ static const pm_diagnostic_data_t diagnostic_messages[PM_DIAGNOSTIC_ID_MAX] = { [PM_ERR_ESCAPE_INVALID_UNICODE_LONG] = { "invalid Unicode escape sequence; maximum length is 6 digits", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_ESCAPE_INVALID_UNICODE_SHORT] = { "too short escape sequence: %.*s", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_ESCAPE_INVALID_UNICODE_TERM] = { "unterminated Unicode escape", PM_ERROR_LEVEL_SYNTAX }, - [PM_ERR_EXPECT_ARGUMENT] = { "expected an argument", PM_ERROR_LEVEL_SYNTAX }, + [PM_ERR_EXPECT_ARGUMENT] = { "unexpected %s; expected an argument", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_EXPECT_EOL_AFTER_STATEMENT] = { "unexpected %s, expecting end-of-input", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_EXPECT_EXPRESSION_AFTER_AMPAMPEQ] = { "expected an expression after `&&=`", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_EXPECT_EXPRESSION_AFTER_PIPEPIPEEQ] = { "expected an expression after `||=`", PM_ERROR_LEVEL_SYNTAX }, @@ -182,6 +181,7 @@ static const pm_diagnostic_data_t diagnostic_messages[PM_DIAGNOSTIC_ID_MAX] = { [PM_ERR_EXPECT_EXPRESSION_AFTER_SPLAT] = { "expected an expression after `*` splat in an argument", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_EXPECT_EXPRESSION_AFTER_SPLAT_HASH] = { "expected an expression after `**` in a hash", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_EXPECT_EXPRESSION_AFTER_STAR] = { "expected an expression after `*`", PM_ERROR_LEVEL_SYNTAX }, + [PM_ERR_EXPECT_FOR_DELIMITER] = { "unexpected %s; expected a 'do', newline, or ';' after the 'for' loop collection", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_EXPECT_IDENT_REQ_PARAMETER] = { "expected an identifier for the required parameter", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_EXPECT_IN_DELIMITER] = { "expected a delimiter after the patterns of an `in` clause", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_EXPECT_LPAREN_REQ_PARAMETER] = { "expected a `(` to start a required parameter", PM_ERROR_LEVEL_SYNTAX }, @@ -190,6 +190,7 @@ static const pm_diagnostic_data_t diagnostic_messages[PM_DIAGNOSTIC_ID_MAX] = { [PM_ERR_EXPECT_RPAREN] = { "expected a matching `)`", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_EXPECT_RPAREN_AFTER_MULTI] = { "expected a `)` after multiple assignment", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_EXPECT_RPAREN_REQ_PARAMETER] = { "expected a `)` to end a required parameter", PM_ERROR_LEVEL_SYNTAX }, + [PM_ERR_EXPECT_SINGLETON_CLASS_DELIMITER] = { "unexpected %s; expected a newline or a ';' after the singleton class", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_EXPECT_STRING_CONTENT] = { "expected string content after opening string delimiter", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_EXPECT_WHEN_DELIMITER] = { "expected a delimiter after the predicates of a `when` clause", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_EXPRESSION_BARE_HASH] = { "unexpected bare hash in expression", PM_ERROR_LEVEL_SYNTAX }, @@ -222,6 +223,7 @@ static const pm_diagnostic_data_t diagnostic_messages[PM_DIAGNOSTIC_ID_MAX] = { [PM_ERR_INCOMPLETE_VARIABLE_INSTANCE] = { "'%.*s' is not allowed as an instance variable name", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_INSTANCE_VARIABLE_BARE] = { "'@' without identifiers is not allowed as an instance variable name", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_INVALID_BLOCK_EXIT] = { "Invalid %s", PM_ERROR_LEVEL_SYNTAX }, + [PM_ERR_INVALID_COMMA] = { "invalid comma", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_INVALID_ESCAPE_CHARACTER] = { "Invalid escape character syntax", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_INVALID_FLOAT_EXPONENT] = { "invalid exponent", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_INVALID_LOCAL_VARIABLE_READ] = { "identifier %.*s is not valid to get", PM_ERROR_LEVEL_SYNTAX }, @@ -267,8 +269,10 @@ static const pm_diagnostic_data_t diagnostic_messages[PM_DIAGNOSTIC_ID_MAX] = { [PM_ERR_MODULE_TERM] = { "expected an `end` to close the `module` statement", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_MULTI_ASSIGN_MULTI_SPLATS] = { "multiple splats in multiple assignment", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_MULTI_ASSIGN_UNEXPECTED_REST] = { "unexpected '%.*s' resulting in multiple splats in multiple assignment", PM_ERROR_LEVEL_SYNTAX }, - [PM_ERR_NOT_EXPRESSION] = { "expected an expression after `not`", PM_ERROR_LEVEL_SYNTAX }, + [PM_ERR_NESTING_TOO_DEEP] = { "nesting too deep", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_NO_LOCAL_VARIABLE] = { "%.*s: no such local variable", PM_ERROR_LEVEL_SYNTAX }, + [PM_ERR_NON_ASSOCIATIVE_OPERATOR] = { "unexpected %s; %s is a non-associative operator", PM_ERROR_LEVEL_SYNTAX }, + [PM_ERR_NOT_EXPRESSION] = { "expected an expression after `not`", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_NUMBER_LITERAL_UNDERSCORE] = { "number literal ending with a `_`", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_NUMBERED_PARAMETER_INNER_BLOCK] = { "numbered parameter is already used in inner block", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_NUMBERED_PARAMETER_IT] = { "numbered parameters are not allowed when 'it' is already used", PM_ERROR_LEVEL_SYNTAX }, @@ -346,12 +350,13 @@ static const pm_diagnostic_data_t diagnostic_messages[PM_DIAGNOSTIC_ID_MAX] = { [PM_ERR_TERNARY_COLON] = { "expected a `:` after the true expression of a ternary operator", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_TERNARY_EXPRESSION_FALSE] = { "expected an expression after `:` in the ternary operator", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_TERNARY_EXPRESSION_TRUE] = { "expected an expression after `?` in the ternary operator", PM_ERROR_LEVEL_SYNTAX }, - [PM_ERR_UNDEF_ARGUMENT] = { "invalid argument being passed to `undef`; expected a bare word, constant, or symbol argument", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_UNARY_RECEIVER] = { "unexpected %s, expected a receiver for unary `%c`", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_UNARY_DISALLOWED] = { "unexpected %s; unary calls are not allowed in this context", PM_ERROR_LEVEL_SYNTAX }, + [PM_ERR_UNDEF_ARGUMENT] = { "invalid argument being passed to `undef`; expected a bare word, constant, or symbol argument", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_UNEXPECTED_BLOCK_ARGUMENT] = { "block argument should not be given", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_UNEXPECTED_INDEX_BLOCK] = { "unexpected block arg given in index assignment; blocks are not allowed in index assignment expressions", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_UNEXPECTED_INDEX_KEYWORDS] = { "unexpected keyword arg given in index assignment; keywords are not allowed in index assignment expressions", PM_ERROR_LEVEL_SYNTAX }, + [PM_ERR_UNEXPECTED_LABEL] = { "unexpected label", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_UNEXPECTED_MULTI_WRITE] = { "unexpected multiple assignment; multiple assignment is not allowed in this context", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_UNEXPECTED_RANGE_OPERATOR] = { "unexpected range operator; .. and ... are non-associative and cannot be chained", PM_ERROR_LEVEL_SYNTAX }, [PM_ERR_UNEXPECTED_SAFE_NAVIGATION] = { "&. inside multiple assignment destination", PM_ERROR_LEVEL_SYNTAX }, diff --git a/prism/templates/template.rb b/prism/templates/template.rb index 130e15d075b2a7..7068c098d311eb 100755 --- a/prism/templates/template.rb +++ b/prism/templates/template.rb @@ -1,5 +1,5 @@ #!/usr/bin/env ruby -# typed: false +# typed: ignore require "erb" require "fileutils" @@ -8,11 +8,14 @@ module Prism module Template SERIALIZE_ONLY_SEMANTICS_FIELDS = ENV.fetch("PRISM_SERIALIZE_ONLY_SEMANTICS_FIELDS", false) + REMOVE_ON_ERROR_TYPES = SERIALIZE_ONLY_SEMANTICS_FIELDS CHECK_FIELD_KIND = ENV.fetch("CHECK_FIELD_KIND", false) JAVA_BACKEND = ENV["PRISM_JAVA_BACKEND"] || "truffleruby" JAVA_STRING_TYPE = JAVA_BACKEND == "jruby" ? "org.jruby.RubySymbol" : "String" + COMMON_FLAGS_COUNT = 2 + class Error attr_reader :name @@ -93,8 +96,9 @@ def should_be_serialized? # Some node fields can be specialized if they point to a specific kind of # node and not just a generic node. class NodeKindField < Field - def kind? - options.key?(:kind) + def initialize(kind:, **options) + @kind = kind + super(**options) end def c_type @@ -115,18 +119,18 @@ def java_type def java_cast if specific_kind - "(Nodes.#{options[:kind]}) " + "(Nodes.#{@kind}) " else "" end end def specific_kind - options[:kind] unless options[:kind].is_a?(Array) + @kind unless @kind.is_a?(Array) end def union_kind - options[:kind] if options[:kind].is_a?(Array) + @kind if @kind.is_a?(Array) end end @@ -417,6 +421,34 @@ def initialize(config, flags) # changed to use fetch instead of delete. comment = options.delete(:comment) + if kinds = options[:kind] + kinds = [kinds] unless kinds.is_a?(Array) + kinds = kinds.map do |kind| + case kind + when "non-void expression" + # the actual list of types would be way too long + "Node" + when "pattern expression" + # the list of all possible types is too long with 37+ different classes + "Node" + when Hash + kind = kind.fetch("on error") + REMOVE_ON_ERROR_TYPES ? nil : kind + else + kind + end + end.compact + if kinds.size == 1 + kinds = kinds.first + kinds = nil if kinds == "Node" + end + options[:kind] = kinds + else + if type < NodeKindField + raise "Missing kind in config.yml for field #{@name}##{options.fetch(:name)}" + end + end + type.new(comment: comment, **options) end diff --git a/prism/util/pm_string.c b/prism/util/pm_string.c index 0a67accd866f7d..7e56dec9f7e9c2 100644 --- a/prism/util/pm_string.c +++ b/prism/util/pm_string.c @@ -47,6 +47,62 @@ pm_string_constant_init(pm_string_t *string, const char *source, size_t length) }; } +#ifdef _WIN32 +/** + * Represents a file handle on Windows, where the path will need to be freed + * when the file is closed. + */ +typedef struct { + /** The path to the file, which will become allocated memory. */ + WCHAR *path; + + /** The handle to the file, which will start as uninitialized memory. */ + HANDLE file; +} pm_string_file_handle_t; + +/** + * Open the file indicated by the filepath parameter for reading on Windows. + * Perform any kind of normalization that needs to happen on the filepath. + */ +static pm_string_init_result_t +pm_string_file_handle_open(pm_string_file_handle_t *handle, const char *filepath) { + int length = MultiByteToWideChar(CP_UTF8, 0, filepath, -1, NULL, 0); + if (length == 0) return PM_STRING_INIT_ERROR_GENERIC; + + handle->path = xmalloc(sizeof(WCHAR) * ((size_t) length)); + if ((handle->path == NULL) || (MultiByteToWideChar(CP_UTF8, 0, filepath, -1, handle->path, length) == 0)) { + xfree(handle->path); + return PM_STRING_INIT_ERROR_GENERIC; + } + + handle->file = CreateFileW(handle->path, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, NULL); + if (handle->file == INVALID_HANDLE_VALUE) { + pm_string_init_result_t result = PM_STRING_INIT_ERROR_GENERIC; + + if (GetLastError() == ERROR_ACCESS_DENIED) { + DWORD attributes = GetFileAttributesW(handle->path); + if ((attributes != INVALID_FILE_ATTRIBUTES) && (attributes & FILE_ATTRIBUTE_DIRECTORY)) { + result = PM_STRING_INIT_ERROR_DIRECTORY; + } + } + + xfree(handle->path); + return result; + } + + return PM_STRING_INIT_SUCCESS; +} + +/** + * Close the file handle and free the path. + */ +static void +pm_string_file_handle_close(pm_string_file_handle_t *handle) { + xfree(handle->path); + CloseHandle(handle->file); +} +#endif + /** * Read the file indicated by the filepath parameter into source and load its * contents and size into the given `pm_string_t`. The given `pm_string_t` @@ -58,69 +114,66 @@ pm_string_constant_init(pm_string_t *string, const char *source, size_t length) * `MapViewOfFile`, on POSIX systems that have access to `mmap` we'll use * `mmap`, and on other POSIX systems we'll use `read`. */ -PRISM_EXPORTED_FUNCTION bool +PRISM_EXPORTED_FUNCTION pm_string_init_result_t pm_string_mapped_init(pm_string_t *string, const char *filepath) { #ifdef _WIN32 // Open the file for reading. - HANDLE file = CreateFile(filepath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); - - if (file == INVALID_HANDLE_VALUE) { - return false; - } + pm_string_file_handle_t handle; + pm_string_init_result_t result = pm_string_file_handle_open(&handle, filepath); + if (result != PM_STRING_INIT_SUCCESS) return result; // Get the file size. - DWORD file_size = GetFileSize(file, NULL); + DWORD file_size = GetFileSize(handle.file, NULL); if (file_size == INVALID_FILE_SIZE) { - CloseHandle(file); - return false; + pm_string_file_handle_close(&handle); + return PM_STRING_INIT_ERROR_GENERIC; } // If the file is empty, then we don't need to do anything else, we'll set // the source to a constant empty string and return. if (file_size == 0) { - CloseHandle(file); + pm_string_file_handle_close(&handle); const uint8_t source[] = ""; *string = (pm_string_t) { .type = PM_STRING_CONSTANT, .source = source, .length = 0 }; - return true; + return PM_STRING_INIT_SUCCESS; } // Create a mapping of the file. - HANDLE mapping = CreateFileMapping(file, NULL, PAGE_READONLY, 0, 0, NULL); + HANDLE mapping = CreateFileMapping(handle.file, NULL, PAGE_READONLY, 0, 0, NULL); if (mapping == NULL) { - CloseHandle(file); - return false; + pm_string_file_handle_close(&handle); + return PM_STRING_INIT_ERROR_GENERIC; } // Map the file into memory. uint8_t *source = (uint8_t *) MapViewOfFile(mapping, FILE_MAP_READ, 0, 0, 0); CloseHandle(mapping); - CloseHandle(file); + pm_string_file_handle_close(&handle); if (source == NULL) { - return false; + return PM_STRING_INIT_ERROR_GENERIC; } *string = (pm_string_t) { .type = PM_STRING_MAPPED, .source = source, .length = (size_t) file_size }; - return true; + return PM_STRING_INIT_SUCCESS; #elif defined(_POSIX_MAPPED_FILES) // Open the file for reading int fd = open(filepath, O_RDONLY); if (fd == -1) { - return false; + return PM_STRING_INIT_ERROR_GENERIC; } // Stat the file to get the file size struct stat sb; if (fstat(fd, &sb) == -1) { close(fd); - return false; + return PM_STRING_INIT_ERROR_GENERIC; } // Ensure it is a file and not a directory if (S_ISDIR(sb.st_mode)) { - errno = EISDIR; close(fd); - return false; + return PM_STRING_INIT_ERROR_DIRECTORY; } // mmap the file descriptor to virtually get the contents @@ -131,17 +184,17 @@ pm_string_mapped_init(pm_string_t *string, const char *filepath) { close(fd); const uint8_t source[] = ""; *string = (pm_string_t) { .type = PM_STRING_CONSTANT, .source = source, .length = 0 }; - return true; + return PM_STRING_INIT_SUCCESS; } source = mmap(NULL, size, PROT_READ, MAP_PRIVATE, fd, 0); if (source == MAP_FAILED) { - return false; + return PM_STRING_INIT_ERROR_GENERIC; } close(fd); *string = (pm_string_t) { .type = PM_STRING_MAPPED, .source = source, .length = size }; - return true; + return PM_STRING_INIT_SUCCESS; #else return pm_string_file_init(string, filepath); #endif @@ -152,100 +205,105 @@ pm_string_mapped_init(pm_string_t *string, const char *filepath) { * contents and size into the given `pm_string_t`. The given `pm_string_t` * should be freed using `pm_string_free` when it is no longer used. */ -PRISM_EXPORTED_FUNCTION bool +PRISM_EXPORTED_FUNCTION pm_string_init_result_t pm_string_file_init(pm_string_t *string, const char *filepath) { #ifdef _WIN32 // Open the file for reading. - HANDLE file = CreateFile(filepath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); - - if (file == INVALID_HANDLE_VALUE) { - return false; - } + pm_string_file_handle_t handle; + pm_string_init_result_t result = pm_string_file_handle_open(&handle, filepath); + if (result != PM_STRING_INIT_SUCCESS) return result; // Get the file size. - DWORD file_size = GetFileSize(file, NULL); + DWORD file_size = GetFileSize(handle.file, NULL); if (file_size == INVALID_FILE_SIZE) { - CloseHandle(file); - return false; + pm_string_file_handle_close(&handle); + return PM_STRING_INIT_ERROR_GENERIC; } // If the file is empty, then we don't need to do anything else, we'll set // the source to a constant empty string and return. if (file_size == 0) { - CloseHandle(file); + pm_string_file_handle_close(&handle); const uint8_t source[] = ""; *string = (pm_string_t) { .type = PM_STRING_CONSTANT, .source = source, .length = 0 }; - return true; + return PM_STRING_INIT_SUCCESS; } // Create a buffer to read the file into. uint8_t *source = xmalloc(file_size); if (source == NULL) { - CloseHandle(file); - return false; + pm_string_file_handle_close(&handle); + return PM_STRING_INIT_ERROR_GENERIC; } // Read the contents of the file DWORD bytes_read; - if (!ReadFile(file, source, file_size, &bytes_read, NULL)) { - CloseHandle(file); - return false; + if (!ReadFile(handle.file, source, file_size, &bytes_read, NULL)) { + pm_string_file_handle_close(&handle); + return PM_STRING_INIT_ERROR_GENERIC; } // Check the number of bytes read if (bytes_read != file_size) { xfree(source); - CloseHandle(file); - return false; + pm_string_file_handle_close(&handle); + return PM_STRING_INIT_ERROR_GENERIC; } - CloseHandle(file); + pm_string_file_handle_close(&handle); *string = (pm_string_t) { .type = PM_STRING_OWNED, .source = source, .length = (size_t) file_size }; - return true; + return PM_STRING_INIT_SUCCESS; #elif defined(PRISM_HAS_FILESYSTEM) - FILE *file = fopen(filepath, "rb"); - if (file == NULL) { - return false; + // Open the file for reading + int fd = open(filepath, O_RDONLY); + if (fd == -1) { + return PM_STRING_INIT_ERROR_GENERIC; } - fseek(file, 0, SEEK_END); - long file_size = ftell(file); + // Stat the file to get the file size + struct stat sb; + if (fstat(fd, &sb) == -1) { + close(fd); + return PM_STRING_INIT_ERROR_GENERIC; + } - if (file_size == -1) { - fclose(file); - return false; + // Ensure it is a file and not a directory + if (S_ISDIR(sb.st_mode)) { + close(fd); + return PM_STRING_INIT_ERROR_DIRECTORY; } - if (file_size == 0) { - fclose(file); + // Check the size to see if it's empty + size_t size = (size_t) sb.st_size; + if (size == 0) { + close(fd); const uint8_t source[] = ""; *string = (pm_string_t) { .type = PM_STRING_CONSTANT, .source = source, .length = 0 }; - return true; + return PM_STRING_INIT_SUCCESS; } - size_t length = (size_t) file_size; + size_t length = (size_t) size; uint8_t *source = xmalloc(length); if (source == NULL) { - fclose(file); - return false; + close(fd); + return PM_STRING_INIT_ERROR_GENERIC; } - fseek(file, 0, SEEK_SET); - size_t bytes_read = fread(source, length, 1, file); - fclose(file); + long bytes_read = (long) read(fd, source, length); + close(fd); - if (bytes_read != 1) { + if (bytes_read == -1) { xfree(source); - return false; + return PM_STRING_INIT_ERROR_GENERIC; } *string = (pm_string_t) { .type = PM_STRING_OWNED, .source = source, .length = length }; - return true; + return PM_STRING_INIT_SUCCESS; #else (void) string; (void) filepath; perror("pm_string_file_init is not implemented for this platform"); - return false; + return PM_STRING_INIT_ERROR_GENERIC; #endif } diff --git a/prism/util/pm_string.h b/prism/util/pm_string.h index e4a20558d36e4f..f99f1abdf38c9b 100644 --- a/prism/util/pm_string.h +++ b/prism/util/pm_string.h @@ -22,6 +22,9 @@ #include #include #include +#elif defined(PRISM_HAS_FILESYSTEM) +#include +#include #endif /** @@ -93,6 +96,26 @@ void pm_string_owned_init(pm_string_t *string, uint8_t *source, size_t length); */ void pm_string_constant_init(pm_string_t *string, const char *source, size_t length); +/** + * Represents the result of calling pm_string_mapped_init or + * pm_string_file_init. We need this additional information because there is + * not a platform-agnostic way to indicate that the file that was attempted to + * be opened was a directory. + */ +typedef enum { + /** Indicates that the string was successfully initialized. */ + PM_STRING_INIT_SUCCESS = 0, + /** + * Indicates a generic error from a string_*_init function, where the type + * of error should be read from `errno` or `GetLastError()`. + */ + PM_STRING_INIT_ERROR_GENERIC = 1, + /** + * Indicates that the file that was attempted to be opened was a directory. + */ + PM_STRING_INIT_ERROR_DIRECTORY = 2 +} pm_string_init_result_t; + /** * Read the file indicated by the filepath parameter into source and load its * contents and size into the given `pm_string_t`. The given `pm_string_t` @@ -106,9 +129,9 @@ void pm_string_constant_init(pm_string_t *string, const char *source, size_t len * * @param string The string to initialize. * @param filepath The filepath to read. - * @return Whether or not the file was successfully mapped. + * @return The success of the read, indicated by the value of the enum. */ -PRISM_EXPORTED_FUNCTION bool pm_string_mapped_init(pm_string_t *string, const char *filepath); +PRISM_EXPORTED_FUNCTION pm_string_init_result_t pm_string_mapped_init(pm_string_t *string, const char *filepath); /** * Read the file indicated by the filepath parameter into source and load its @@ -117,9 +140,9 @@ PRISM_EXPORTED_FUNCTION bool pm_string_mapped_init(pm_string_t *string, const ch * * @param string The string to initialize. * @param filepath The filepath to read. - * @return Whether or not the file was successfully read. + * @return The success of the read, indicated by the value of the enum. */ -PRISM_EXPORTED_FUNCTION bool pm_string_file_init(pm_string_t *string, const char *filepath); +PRISM_EXPORTED_FUNCTION pm_string_init_result_t pm_string_file_init(pm_string_t *string, const char *filepath); /** * Ensure the string is owned. If it is not, then reinitialize it as owned and diff --git a/prism_compile.c b/prism_compile.c index 5bd02ed04f2bdf..aca358f8719989 100644 --- a/prism_compile.c +++ b/prism_compile.c @@ -3,7 +3,7 @@ /** * This compiler defines its own concept of the location of a node. We do this * because we want to pair line information with node identifier so that we can - * have reproducable parses. + * have reproducible parses. */ typedef struct { /** This is the line number of a node. */ @@ -643,19 +643,31 @@ pm_interpolated_node_compile(rb_iseq_t *iseq, const pm_node_list_t *parts, const encoding = scope_node->encoding; } - current_string = rb_enc_str_new(NULL, 0, encoding); + if (parts_size == 1) { + current_string = rb_enc_str_new(NULL, 0, encoding); + } + } + + if (RTEST(current_string)) { + VALUE operand = rb_fstring(current_string); + PUSH_INSN1(ret, current_location, putobject, operand); + stack_size++; } - PUSH_INSN1(ret, current_location, putobject, rb_fstring(current_string)); PM_COMPILE_NOT_POPPED(part); const pm_node_location_t current_location = PM_NODE_START_LOCATION(scope_node->parser, part); PUSH_INSN(ret, current_location, dup); - PUSH_INSN1(ret, current_location, objtostring, new_callinfo(iseq, idTo_s, 0, VM_CALL_FCALL | VM_CALL_ARGS_SIMPLE, NULL, FALSE)); + + { + const struct rb_callinfo *callinfo = new_callinfo(iseq, idTo_s, 0, VM_CALL_FCALL | VM_CALL_ARGS_SIMPLE, NULL, FALSE); + PUSH_INSN1(ret, current_location, objtostring, callinfo); + } + PUSH_INSN(ret, current_location, anytostring); current_string = Qnil; - stack_size += 2; + stack_size++; } } } @@ -891,7 +903,10 @@ pm_compile_flip_flop_bound(rb_iseq_t *iseq, const pm_node_t *node, LINK_ANCHOR * if (PM_NODE_TYPE_P(node, PM_INTEGER_NODE)) { PM_COMPILE_NOT_POPPED(node); - PUSH_INSN1(ret, location, getglobal, ID2SYM(rb_intern("$."))); + + VALUE operand = ID2SYM(rb_intern("$.")); + PUSH_INSN1(ret, location, getglobal, operand); + PUSH_SEND(ret, location, idEq, INT2FIX(1)); if (popped) PUSH_INSN(ret, location, pop); } @@ -994,15 +1009,16 @@ pm_compile_branch_condition(rb_iseq_t *iseq, LINK_ANCHOR *const ret, const pm_no pm_compile_node(iseq, cond, cond_seq, false, scope_node); if (LIST_INSN_SIZE_ONE(cond_seq)) { - INSN *insn = (INSN *)ELEM_FIRST_INSN(FIRST_ELEMENT(cond_seq)); + INSN *insn = (INSN *) ELEM_FIRST_INSN(FIRST_ELEMENT(cond_seq)); + if (insn->insn_id == BIN(putobject)) { if (RTEST(insn->operands[0])) { - ADD_INSNL(ret, cond, jump, then_label); + PUSH_INSNL(ret, location, jump, then_label); // maybe unreachable return; } else { - ADD_INSNL(ret, cond, jump, else_label); + PUSH_INSNL(ret, location, jump, else_label); return; } } @@ -1399,10 +1415,12 @@ pm_compile_hash_elements(rb_iseq_t *iseq, const pm_node_t *node, const pm_node_l switch (PM_NODE_TYPE(element)) { case PM_ASSOC_NODE: { // Pre-allocation check (this branch can be omitted). - if (PM_NODE_FLAG_P(element, PM_NODE_FLAG_STATIC_LITERAL) && ( - (!static_literal && ((index + min_tmp_hash_length) < elements->size)) || - (first_chunk && stack_length == 0) - )) { + if ( + PM_NODE_FLAG_P(element, PM_NODE_FLAG_STATIC_LITERAL) && ( + (!static_literal && ((index + min_tmp_hash_length) < elements->size)) || + (first_chunk && stack_length == 0) + ) + ) { // Count the elements that are statically-known. size_t count = 1; while (index + count < elements->size && PM_NODE_FLAG_P(elements->nodes[index + count], PM_NODE_FLAG_STATIC_LITERAL)) count++; @@ -1533,9 +1551,13 @@ pm_compile_hash_elements(rb_iseq_t *iseq, const pm_node_t *node, const pm_node_l #undef FLUSH_CHUNK } +#define SPLATARRAY_FALSE 0 +#define SPLATARRAY_TRUE 1 +#define DUP_SINGLE_KW_SPLAT 2 + // This is details. Users should call pm_setup_args() instead. static int -pm_setup_args_core(const pm_arguments_node_t *arguments_node, const pm_node_t *block, int *flags, const bool has_regular_blockarg, struct rb_callinfo_kwarg **kw_arg, VALUE *dup_rest, rb_iseq_t *iseq, LINK_ANCHOR *const ret, pm_scope_node_t *scope_node, const pm_node_location_t *node_location) +pm_setup_args_core(const pm_arguments_node_t *arguments_node, const pm_node_t *block, int *flags, const bool has_regular_blockarg, struct rb_callinfo_kwarg **kw_arg, int *dup_rest, rb_iseq_t *iseq, LINK_ANCHOR *const ret, pm_scope_node_t *scope_node, const pm_node_location_t *node_location) { const pm_node_location_t location = *node_location; @@ -1573,9 +1595,18 @@ pm_setup_args_core(const pm_arguments_node_t *arguments_node, const pm_node_t *b // in this case, so mark the method as passing mutable // keyword splat. *flags |= VM_CALL_KW_SPLAT_MUT; + pm_compile_hash_elements(iseq, argument, elements, true, ret, scope_node); + } + else if (*dup_rest & DUP_SINGLE_KW_SPLAT) { + *flags |= VM_CALL_KW_SPLAT_MUT; + PUSH_INSN1(ret, location, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE)); + PUSH_INSN1(ret, location, newhash, INT2FIX(0)); + pm_compile_hash_elements(iseq, argument, elements, true, ret, scope_node); + PUSH_SEND(ret, location, id_core_hash_merge_kwd, INT2FIX(2)); + } + else { + pm_compile_hash_elements(iseq, argument, elements, true, ret, scope_node); } - - pm_compile_hash_elements(iseq, argument, elements, true, ret, scope_node); } else { // We need to first figure out if all elements of the @@ -1681,8 +1712,8 @@ pm_setup_args_core(const pm_arguments_node_t *arguments_node, const pm_node_t *b // foo(a, *b, c) // ^^ if (index + 1 < arguments->size || has_regular_blockarg) { - PUSH_INSN1(ret, location, splatarray, *dup_rest); - if (*dup_rest == Qtrue) *dup_rest = Qfalse; + PUSH_INSN1(ret, location, splatarray, (*dup_rest & SPLATARRAY_TRUE) ? Qtrue : Qfalse); + if (*dup_rest & SPLATARRAY_TRUE) *dup_rest &= ~SPLATARRAY_TRUE; } // If this is the first spalt array seen and it's the last // parameter, we don't want splatarray to dup it. @@ -1708,7 +1739,7 @@ pm_setup_args_core(const pm_arguments_node_t *arguments_node, const pm_node_t *b break; } - case PM_FORWARDING_ARGUMENTS_NODE: { + case PM_FORWARDING_ARGUMENTS_NODE: { // not counted in argc return value if (ISEQ_BODY(ISEQ_BODY(iseq)->local_iseq)->param.flags.forwardable) { *flags |= VM_CALL_FORWARDING; @@ -1843,7 +1874,7 @@ pm_setup_args_dup_rest_p(const pm_node_t *node) static int pm_setup_args(const pm_arguments_node_t *arguments_node, const pm_node_t *block, int *flags, struct rb_callinfo_kwarg **kw_arg, rb_iseq_t *iseq, LINK_ANCHOR *const ret, pm_scope_node_t *scope_node, const pm_node_location_t *node_location) { - VALUE dup_rest = Qtrue; + int dup_rest = SPLATARRAY_TRUE; const pm_node_list_t *arguments; size_t arguments_size; @@ -1860,23 +1891,23 @@ pm_setup_args(const pm_arguments_node_t *arguments_node, const pm_node_t *block, // Start by assuming that dup_rest=false, then check each element of the // hash to ensure we don't need to flip it back to true (in case one of // the elements could potentially mutate the array). - dup_rest = Qfalse; + dup_rest = SPLATARRAY_FALSE; const pm_keyword_hash_node_t *keyword_hash = (const pm_keyword_hash_node_t *) arguments->nodes[arguments_size - 1]; const pm_node_list_t *elements = &keyword_hash->elements; - for (size_t index = 0; dup_rest == Qfalse && index < elements->size; index++) { + for (size_t index = 0; dup_rest == SPLATARRAY_FALSE && index < elements->size; index++) { const pm_node_t *element = elements->nodes[index]; switch (PM_NODE_TYPE(element)) { case PM_ASSOC_NODE: { const pm_assoc_node_t *assoc = (const pm_assoc_node_t *) element; - if (pm_setup_args_dup_rest_p(assoc->key) || pm_setup_args_dup_rest_p(assoc->value)) dup_rest = Qtrue; + if (pm_setup_args_dup_rest_p(assoc->key) || pm_setup_args_dup_rest_p(assoc->value)) dup_rest = SPLATARRAY_TRUE; break; } case PM_ASSOC_SPLAT_NODE: { const pm_assoc_splat_node_t *assoc = (const pm_assoc_splat_node_t *) element; - if (assoc->value != NULL && pm_setup_args_dup_rest_p(assoc->value)) dup_rest = Qtrue; + if (assoc->value != NULL && pm_setup_args_dup_rest_p(assoc->value)) dup_rest = SPLATARRAY_TRUE; break; } default: @@ -1885,7 +1916,7 @@ pm_setup_args(const pm_arguments_node_t *arguments_node, const pm_node_t *block, } } - VALUE initial_dup_rest = dup_rest; + int initial_dup_rest = dup_rest; int argc; if (block && PM_NODE_TYPE_P(block, PM_BLOCK_ARGUMENT_NODE)) { @@ -1893,6 +1924,12 @@ pm_setup_args(const pm_arguments_node_t *arguments_node, const pm_node_t *block, // since the nature of the expression influences whether splat should // duplicate the array. bool regular_block_arg = true; + const pm_node_t *block_expr = ((const pm_block_argument_node_t *)block)->expression; + + if (block_expr && pm_setup_args_dup_rest_p(block_expr)) { + dup_rest = SPLATARRAY_TRUE | DUP_SINGLE_KW_SPLAT; + initial_dup_rest = dup_rest; + } DECL_ANCHOR(block_arg); INIT_ANCHOR(block_arg); @@ -1955,7 +1992,7 @@ pm_compile_index_operator_write_node(rb_iseq_t *iseq, const pm_index_operator_wr int boff = (node->block == NULL ? 0 : 1); int flag = PM_NODE_TYPE_P(node->receiver, PM_SELF_NODE) ? VM_CALL_FCALL : 0; struct rb_callinfo_kwarg *keywords = NULL; - int argc = pm_setup_args(node->arguments, node->block, &flag, &keywords, iseq, ret, scope_node, node_location); + int argc = pm_setup_args(node->arguments, (const pm_node_t *) node->block, &flag, &keywords, iseq, ret, scope_node, node_location); if ((argc > 0 || boff) && (flag & VM_CALL_KW_SPLAT)) { if (boff) { @@ -2062,7 +2099,7 @@ pm_compile_index_operator_write_node(rb_iseq_t *iseq, const pm_index_operator_wr * []= method. */ static void -pm_compile_index_control_flow_write_node(rb_iseq_t *iseq, const pm_node_t *node, const pm_node_t *receiver, const pm_arguments_node_t *arguments, const pm_node_t *block, const pm_node_t *value, const pm_node_location_t *node_location, LINK_ANCHOR *const ret, bool popped, pm_scope_node_t *scope_node) +pm_compile_index_control_flow_write_node(rb_iseq_t *iseq, const pm_node_t *node, const pm_node_t *receiver, const pm_arguments_node_t *arguments, const pm_block_argument_node_t *block, const pm_node_t *value, const pm_node_location_t *node_location, LINK_ANCHOR *const ret, bool popped, pm_scope_node_t *scope_node) { const pm_node_location_t location = *node_location; if (!popped) PUSH_INSN(ret, location, putnil); @@ -2071,7 +2108,7 @@ pm_compile_index_control_flow_write_node(rb_iseq_t *iseq, const pm_node_t *node, int boff = (block == NULL ? 0 : 1); int flag = PM_NODE_TYPE_P(receiver, PM_SELF_NODE) ? VM_CALL_FCALL : 0; struct rb_callinfo_kwarg *keywords = NULL; - int argc = pm_setup_args(arguments, block, &flag, &keywords, iseq, ret, scope_node, node_location); + int argc = pm_setup_args(arguments, (const pm_node_t *) block, &flag, &keywords, iseq, ret, scope_node, node_location); if ((argc > 0 || boff) && (flag & VM_CALL_KW_SPLAT)) { if (boff) { @@ -2273,9 +2310,11 @@ pm_compile_pattern_eqq_error(rb_iseq_t *iseq, pm_scope_node_t *scope_node, const PUSH_INSN(ret, location, dup); PUSH_INSNL(ret, location, branchif, match_succeeded_label); - PUSH_INSN1(ret, location, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE)); - PUSH_INSN1(ret, location, putobject, rb_fstring_lit("%p === %p does not return true")); + + VALUE operand = rb_fstring_lit("%p === %p does not return true"); + PUSH_INSN1(ret, location, putobject, operand); + PUSH_INSN1(ret, location, topn, INT2FIX(3)); PUSH_INSN1(ret, location, topn, INT2FIX(5)); PUSH_SEND(ret, location, id_core_sprintf, INT2FIX(3)); @@ -2335,7 +2374,9 @@ pm_compile_pattern_deconstruct(rb_iseq_t *iseq, pm_scope_node_t *scope_node, con PUSH_LABEL(ret, deconstruct_label); PUSH_INSN(ret, location, dup); - PUSH_INSN1(ret, location, putobject, ID2SYM(rb_intern("deconstruct"))); + + VALUE operand = ID2SYM(rb_intern("deconstruct")); + PUSH_INSN1(ret, location, putobject, operand); PUSH_SEND(ret, location, idRespond_to, INT2FIX(1)); if (use_deconstructed_cache) { @@ -2407,7 +2448,12 @@ pm_compile_pattern_error_handler(rb_iseq_t *iseq, const pm_scope_node_t *scope_n PUSH_INSN1(ret, location, putobject, rb_eNoMatchingPatternError); PUSH_INSN1(ret, location, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE)); - PUSH_INSN1(ret, location, putobject, rb_fstring_lit("%p: %s")); + + { + VALUE operand = rb_fstring_lit("%p: %s"); + PUSH_INSN1(ret, location, putobject, operand); + } + PUSH_INSN1(ret, location, topn, INT2FIX(4)); PUSH_INSN1(ret, location, topn, INT2FIX(PM_PATTERN_BASE_INDEX_OFFSET_ERROR_STRING + 6)); PUSH_SEND(ret, location, id_core_sprintf, INT2FIX(3)); @@ -2417,7 +2463,12 @@ pm_compile_pattern_error_handler(rb_iseq_t *iseq, const pm_scope_node_t *scope_n PUSH_LABEL(ret, key_error_label); PUSH_INSN1(ret, location, putobject, rb_eNoMatchingPatternKeyError); PUSH_INSN1(ret, location, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE)); - PUSH_INSN1(ret, location, putobject, rb_fstring_lit("%p: %s")); + + { + VALUE operand = rb_fstring_lit("%p: %s"); + PUSH_INSN1(ret, location, putobject, operand); + } + PUSH_INSN1(ret, location, topn, INT2FIX(4)); PUSH_INSN1(ret, location, topn, INT2FIX(PM_PATTERN_BASE_INDEX_OFFSET_ERROR_STRING + 6)); PUSH_SEND(ret, location, id_core_sprintf, INT2FIX(3)); @@ -2548,7 +2599,12 @@ pm_compile_pattern(rb_iseq_t *iseq, pm_scope_node_t *scope_node, const pm_node_t PUSH_LABEL(ret, type_error_label); PUSH_INSN1(ret, location, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE)); PUSH_INSN1(ret, location, putobject, rb_eTypeError); - PUSH_INSN1(ret, location, putobject, rb_fstring_lit("deconstruct must return Array")); + + { + VALUE operand = rb_fstring_lit("deconstruct must return Array"); + PUSH_INSN1(ret, location, putobject, operand); + } + PUSH_SEND(ret, location, id_core_raise, INT2FIX(2)); PUSH_INSN(ret, location, pop); @@ -2626,8 +2682,7 @@ pm_compile_pattern(rb_iseq_t *iseq, pm_scope_node_t *scope_node, const pm_node_t CHECK(pm_compile_pattern_match(iseq, scope_node, cast->requireds.nodes[index], ret, next_loop_label, in_single_pattern, in_alternation_pattern, false, base_index + 4)); } - RUBY_ASSERT(PM_NODE_TYPE_P(cast->left, PM_SPLAT_NODE)); - const pm_splat_node_t *left = (const pm_splat_node_t *) cast->left; + const pm_splat_node_t *left = cast->left; if (left->expression != NULL) { PUSH_INSN1(ret, location, topn, INT2FIX(3)); @@ -2661,7 +2716,12 @@ pm_compile_pattern(rb_iseq_t *iseq, pm_scope_node_t *scope_node, const pm_node_t PUSH_INSN1(ret, location, adjuststack, INT2FIX(3)); if (in_single_pattern) { PUSH_INSN1(ret, location, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE)); - PUSH_INSN1(ret, location, putobject, rb_fstring_lit("%p does not match to find pattern")); + + { + VALUE operand = rb_fstring_lit("%p does not match to find pattern"); + PUSH_INSN1(ret, location, putobject, operand); + } + PUSH_INSN1(ret, location, topn, INT2FIX(2)); PUSH_SEND(ret, location, id_core_sprintf, INT2FIX(2)); PUSH_INSN1(ret, location, setn, INT2FIX(base_index + PM_PATTERN_BASE_INDEX_OFFSET_ERROR_STRING + 1)); @@ -2686,7 +2746,12 @@ pm_compile_pattern(rb_iseq_t *iseq, pm_scope_node_t *scope_node, const pm_node_t PUSH_LABEL(ret, type_error_label); PUSH_INSN1(ret, location, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE)); PUSH_INSN1(ret, location, putobject, rb_eTypeError); - PUSH_INSN1(ret, location, putobject, rb_fstring_lit("deconstruct must return Array")); + + { + VALUE operand = rb_fstring_lit("deconstruct must return Array"); + PUSH_INSN1(ret, location, putobject, operand); + } + PUSH_SEND(ret, location, id_core_raise, INT2FIX(2)); PUSH_INSN(ret, location, pop); @@ -2735,7 +2800,12 @@ pm_compile_pattern(rb_iseq_t *iseq, pm_scope_node_t *scope_node, const pm_node_t } PUSH_INSN(ret, location, dup); - PUSH_INSN1(ret, location, putobject, ID2SYM(rb_intern("deconstruct_keys"))); + + { + VALUE operand = ID2SYM(rb_intern("deconstruct_keys")); + PUSH_INSN1(ret, location, putobject, operand); + } + PUSH_SEND(ret, location, idRespond_to, INT2FIX(1)); if (in_single_pattern) { CHECK(pm_compile_pattern_generic_error(iseq, scope_node, node, ret, rb_fstring_lit("%p does not respond to #deconstruct_keys"), base_index + 1)); @@ -2782,7 +2852,11 @@ pm_compile_pattern(rb_iseq_t *iseq, pm_scope_node_t *scope_node, const pm_node_t PUSH_INSN(ret, location, dup); PUSH_INSNL(ret, location, branchif, match_succeeded_label); - PUSH_INSN1(ret, location, putobject, rb_str_freeze(rb_sprintf("key not found: %+"PRIsVALUE, symbol))); + { + VALUE operand = rb_str_freeze(rb_sprintf("key not found: %+"PRIsVALUE, symbol)); + PUSH_INSN1(ret, location, putobject, operand); + } + PUSH_INSN1(ret, location, setn, INT2FIX(base_index + PM_PATTERN_BASE_INDEX_OFFSET_ERROR_STRING + 2)); PUSH_INSN1(ret, location, putobject, Qtrue); PUSH_INSN1(ret, location, setn, INT2FIX(base_index + PM_PATTERN_BASE_INDEX_OFFSET_KEY_ERROR_P + 3)); @@ -2849,7 +2923,12 @@ pm_compile_pattern(rb_iseq_t *iseq, pm_scope_node_t *scope_node, const pm_node_t PUSH_LABEL(ret, type_error_label); PUSH_INSN1(ret, location, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE)); PUSH_INSN1(ret, location, putobject, rb_eTypeError); - PUSH_INSN1(ret, location, putobject, rb_fstring_lit("deconstruct_keys must return Hash")); + + { + VALUE operand = rb_fstring_lit("deconstruct_keys must return Hash"); + PUSH_INSN1(ret, location, putobject, operand); + } + PUSH_SEND(ret, location, id_core_raise, INT2FIX(2)); PUSH_INSN(ret, location, pop); @@ -2874,7 +2953,7 @@ pm_compile_pattern(rb_iseq_t *iseq, pm_scope_node_t *scope_node, const pm_node_t PUSH_INSN(ret, location, dup); CHECK(pm_compile_pattern_match(iseq, scope_node, cast->value, ret, match_failed_label, in_single_pattern, in_alternation_pattern, use_deconstructed_cache, base_index + 1)); - CHECK(pm_compile_pattern(iseq, scope_node, cast->target, ret, matched_label, match_failed_label, in_single_pattern, in_alternation_pattern, false, base_index)); + CHECK(pm_compile_pattern(iseq, scope_node, (const pm_node_t *) cast->target, ret, matched_label, match_failed_label, in_single_pattern, in_alternation_pattern, false, base_index)); PUSH_INSN(ret, location, putnil); PUSH_LABEL(ret, match_failed_label); @@ -3048,7 +3127,11 @@ pm_compile_pattern(rb_iseq_t *iseq, pm_scope_node_t *scope_node, const pm_node_t PUSH_INSNL(ret, location, branchunless, match_succeeded_label); } - PUSH_INSN1(ret, location, putobject, rb_fstring_lit("guard clause does not return true")); + { + VALUE operand = rb_fstring_lit("guard clause does not return true"); + PUSH_INSN1(ret, location, putobject, operand); + } + PUSH_INSN1(ret, location, setn, INT2FIX(base_index + PM_PATTERN_BASE_INDEX_OFFSET_ERROR_STRING + 1)); PUSH_INSN1(ret, location, putobject, Qfalse); PUSH_INSN1(ret, location, setn, INT2FIX(base_index + PM_PATTERN_BASE_INDEX_OFFSET_KEY_ERROR_P + 2)); @@ -3227,7 +3310,7 @@ pm_scope_node_destroy(pm_scope_node_t *scope_node) * Normally, "send" instruction is at the last. However, qcall under branch * coverage measurement adds some instructions after the "send". * - * Note that "invokesuper" appears instead of "send". + * Note that "invokesuper", "invokesuperforward" appears instead of "send". */ static void pm_compile_retry_end_label(rb_iseq_t *iseq, LINK_ANCHOR *const ret, LABEL *retry_end_l) @@ -3474,7 +3557,7 @@ retry:; if (cconst) { typedef VALUE(*builtin_func0)(void *, VALUE); - VALUE const_val = (*(builtin_func0)bf->func_ptr)(NULL, Qnil); + VALUE const_val = (*(builtin_func0)(uintptr_t)bf->func_ptr)(NULL, Qnil); PUSH_INSN1(ret, *node_location, putobject, const_val); return COMPILE_OK; } @@ -3886,6 +3969,12 @@ pm_compile_defined_expr0(rb_iseq_t *iseq, const pm_node_t *node, const pm_node_l } case PM_CALL_NODE: { const pm_call_node_t *cast = ((const pm_call_node_t *) node); + + if (cast->block != NULL && PM_NODE_TYPE_P(cast->block, PM_BLOCK_NODE)) { + dtype = DEFINED_EXPR; + break; + } + ID method_id = pm_constant_id_lookup(scope_node, cast->name); if (cast->receiver || cast->arguments) { @@ -4435,7 +4524,8 @@ pm_compile_target_node(rb_iseq_t *iseq, const pm_node_t *node, LINK_ANCHOR *cons const pm_class_variable_target_node_t *cast = (const pm_class_variable_target_node_t *) node; ID name = pm_constant_id_lookup(scope_node, cast->name); - PUSH_INSN2(writes, location, setclassvariable, ID2SYM(name), get_cvar_ic_value(iseq, name)); + VALUE operand = ID2SYM(name); + PUSH_INSN2(writes, location, setclassvariable, operand, get_cvar_ic_value(iseq, name)); break; } case PM_CONSTANT_TARGET_NODE: { @@ -4447,8 +4537,9 @@ pm_compile_target_node(rb_iseq_t *iseq, const pm_node_t *node, LINK_ANCHOR *cons const pm_constant_target_node_t *cast = (const pm_constant_target_node_t *) node; ID name = pm_constant_id_lookup(scope_node, cast->name); + VALUE operand = ID2SYM(name); PUSH_INSN1(writes, location, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_CONST_BASE)); - PUSH_INSN1(writes, location, setconstant, ID2SYM(name)); + PUSH_INSN1(writes, location, setconstant, operand); break; } case PM_GLOBAL_VARIABLE_TARGET_NODE: { @@ -4460,7 +4551,8 @@ pm_compile_target_node(rb_iseq_t *iseq, const pm_node_t *node, LINK_ANCHOR *cons const pm_global_variable_target_node_t *cast = (const pm_global_variable_target_node_t *) node; ID name = pm_constant_id_lookup(scope_node, cast->name); - PUSH_INSN1(writes, location, setglobal, ID2SYM(name)); + VALUE operand = ID2SYM(name); + PUSH_INSN1(writes, location, setglobal, operand); break; } case PM_INSTANCE_VARIABLE_TARGET_NODE: { @@ -4472,7 +4564,8 @@ pm_compile_target_node(rb_iseq_t *iseq, const pm_node_t *node, LINK_ANCHOR *cons const pm_instance_variable_target_node_t *cast = (const pm_instance_variable_target_node_t *) node; ID name = pm_constant_id_lookup(scope_node, cast->name); - PUSH_INSN2(writes, location, setinstancevariable, ID2SYM(name), get_ivar_ic_value(iseq, name)); + VALUE operand = ID2SYM(name); + PUSH_INSN2(writes, location, setinstancevariable, operand, get_ivar_ic_value(iseq, name)); break; } case PM_CONSTANT_PATH_TARGET_NODE: { @@ -4502,7 +4595,8 @@ pm_compile_target_node(rb_iseq_t *iseq, const pm_node_t *node, LINK_ANCHOR *cons pm_multi_target_state_push(state, (INSN *) LAST_ELEMENT(writes), 1); } - PUSH_INSN1(writes, location, setconstant, ID2SYM(name)); + VALUE operand = ID2SYM(name); + PUSH_INSN1(writes, location, setconstant, operand); if (state != NULL) { PUSH_INSN(cleanup, location, pop); @@ -4567,7 +4661,7 @@ pm_compile_target_node(rb_iseq_t *iseq, const pm_node_t *node, LINK_ANCHOR *cons int flags = 0; struct rb_callinfo_kwarg *kwargs = NULL; - int argc = pm_setup_args(cast->arguments, cast->block, &flags, &kwargs, iseq, parents, scope_node, &location); + int argc = pm_setup_args(cast->arguments, (const pm_node_t *) cast->block, &flags, &kwargs, iseq, parents, scope_node, &location); if (state != NULL) { PUSH_INSN1(writes, location, topn, INT2FIX(argc + 1)); @@ -5094,63 +5188,6 @@ pm_compile_constant_path(rb_iseq_t *iseq, const pm_node_t *node, LINK_ANCHOR *co } } -/** - * When we're compiling a case node, it's possible that we can speed it up using - * a dispatch hash, which will allow us to jump directly to the correct when - * clause body based on a hash lookup of the value. This can only happen when - * the conditions are literals that can be compiled into a hash key. - * - * This function accepts a dispatch hash and the condition of a when clause. It - * is responsible for compiling the condition into a hash key and then adding it - * to the dispatch hash. - * - * If the value can be successfully compiled into the hash, then this function - * returns the dispatch hash with the new key added. If the value cannot be - * compiled into the hash, then this function returns Qundef. In the case of - * Qundef, this function is signaling that the caller should abandon the - * optimization entirely. - */ -static VALUE -pm_compile_case_node_dispatch(rb_iseq_t *iseq, VALUE dispatch, const pm_node_t *node, LABEL *label, const pm_scope_node_t *scope_node) -{ - VALUE key = Qundef; - - switch (PM_NODE_TYPE(node)) { - case PM_FLOAT_NODE: { - key = pm_static_literal_value(iseq, node, scope_node); - double intptr; - - if (modf(RFLOAT_VALUE(key), &intptr) == 0.0) { - key = (FIXABLE(intptr) ? LONG2FIX((long) intptr) : rb_dbl2big(intptr)); - } - - break; - } - case PM_FALSE_NODE: - case PM_INTEGER_NODE: - case PM_NIL_NODE: - case PM_SOURCE_FILE_NODE: - case PM_SOURCE_LINE_NODE: - case PM_SYMBOL_NODE: - case PM_TRUE_NODE: - key = pm_static_literal_value(iseq, node, scope_node); - break; - case PM_STRING_NODE: { - const pm_string_node_t *cast = (const pm_string_node_t *) node; - key = parse_static_literal_string(iseq, scope_node, node, &cast->unescaped); - break; - } - default: - return Qundef; - } - - if (NIL_P(rb_hash_lookup(dispatch, key))) { - rb_hash_aset(dispatch, key, ((VALUE) label) | 1); - } - - return dispatch; -} - /** * Return the object that will be pushed onto the stack for the given node. */ @@ -5327,7 +5364,9 @@ pm_compile_constant_write_node(rb_iseq_t *iseq, const pm_constant_write_node_t * if (!popped) PUSH_INSN(ret, location, dup); PUSH_INSN1(ret, location, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_CONST_BASE)); - PUSH_INSN1(ret, location, setconstant, ID2SYM(name_id)); + + VALUE operand = ID2SYM(name_id); + PUSH_INSN1(ret, location, setconstant, operand); } /** @@ -5641,2025 +5680,2796 @@ pm_compile_constant_path_operator_write_node(rb_iseq_t *iseq, const pm_constant_ } /** - * Compiles a prism node into instruction sequences. - * - * iseq - The current instruction sequence object (used for locals) - * node - The prism node to compile - * ret - The linked list of instructions to append instructions onto - * popped - True if compiling something with no side effects, so instructions don't - * need to be added - * scope_node - Stores parser and local information + * Many nodes in Prism can be marked as a static literal, which means slightly + * different things depending on which node it is. Occasionally we need to omit + * container nodes from static literal checks, which is where this macro comes + * in. */ -static void -pm_compile_node(rb_iseq_t *iseq, const pm_node_t *node, LINK_ANCHOR *const ret, bool popped, pm_scope_node_t *scope_node) -{ - const pm_parser_t *parser = scope_node->parser; - const pm_node_location_t location = PM_NODE_START_LOCATION(parser, node); - int lineno = (int) location.line; - - if (PM_NODE_TYPE_P(node, PM_BEGIN_NODE) && (((const pm_begin_node_t *) node)->statements == NULL) && (((const pm_begin_node_t *) node)->rescue_clause != NULL)) { - // If this node is a begin node and it has empty statements and also - // has a rescue clause, then the other parser considers it as - // starting on the same line as the rescue, as opposed to the - // location of the begin keyword. We replicate that behavior here. - lineno = (int) PM_NODE_START_LINE_COLUMN(parser, ((const pm_begin_node_t *) node)->rescue_clause).line; - } +#define PM_CONTAINER_P(node) (PM_NODE_TYPE_P(node, PM_ARRAY_NODE) || PM_NODE_TYPE_P(node, PM_HASH_NODE) || PM_NODE_TYPE_P(node, PM_RANGE_NODE)) - if (PM_NODE_FLAG_P(node, PM_NODE_FLAG_NEWLINE) && ISEQ_COMPILE_DATA(iseq)->last_line != lineno) { - // If this node has the newline flag set and it is on a new line - // from the previous nodes that have been compiled for this ISEQ, - // then we need to emit a newline event. - int event = RUBY_EVENT_LINE; +/** + * Compile a scope node, which is a special kind of node that represents a new + * lexical scope, attached to a node in the AST. + */ +static inline void +pm_compile_scope_node(rb_iseq_t *iseq, pm_scope_node_t *scope_node, const pm_node_location_t *node_location, LINK_ANCHOR *const ret, bool popped) +{ + const pm_node_location_t location = *node_location; + struct rb_iseq_constant_body *body = ISEQ_BODY(iseq); - ISEQ_COMPILE_DATA(iseq)->last_line = lineno; - if (ISEQ_COVERAGE(iseq) && ISEQ_LINE_COVERAGE(iseq)) { - event |= RUBY_EVENT_COVERAGE_LINE; + pm_constant_id_list_t *locals = &scope_node->locals; + pm_parameters_node_t *parameters_node = NULL; + pm_node_list_t *keywords_list = NULL; + pm_node_list_t *optionals_list = NULL; + pm_node_list_t *posts_list = NULL; + pm_node_list_t *requireds_list = NULL; + pm_node_list_t *block_locals = NULL; + bool trailing_comma = false; + + if (PM_NODE_TYPE_P(scope_node->ast_node, PM_CLASS_NODE) || PM_NODE_TYPE_P(scope_node->ast_node, PM_MODULE_NODE)) { + PUSH_TRACE(ret, RUBY_EVENT_CLASS); + } + + if (scope_node->parameters != NULL) { + switch (PM_NODE_TYPE(scope_node->parameters)) { + case PM_BLOCK_PARAMETERS_NODE: { + pm_block_parameters_node_t *cast = (pm_block_parameters_node_t *) scope_node->parameters; + parameters_node = cast->parameters; + block_locals = &cast->locals; + + if (parameters_node) { + if (parameters_node->rest && PM_NODE_TYPE_P(parameters_node->rest, PM_IMPLICIT_REST_NODE)) { + trailing_comma = true; + } + } + break; + } + case PM_PARAMETERS_NODE: { + parameters_node = (pm_parameters_node_t *) scope_node->parameters; + break; + } + case PM_NUMBERED_PARAMETERS_NODE: { + uint32_t maximum = ((const pm_numbered_parameters_node_t *) scope_node->parameters)->maximum; + body->param.lead_num = maximum; + body->param.flags.ambiguous_param0 = maximum == 1; + break; + } + case PM_IT_PARAMETERS_NODE: + body->param.lead_num = 1; + body->param.flags.ambiguous_param0 = true; + break; + default: + rb_bug("Unexpected node type for parameters: %s", pm_node_type_to_str(PM_NODE_TYPE(scope_node->parameters))); } - PUSH_TRACE(ret, event); } - switch (PM_NODE_TYPE(node)) { - case PM_ALIAS_GLOBAL_VARIABLE_NODE: { - // alias $foo $bar - // ^^^^^^^^^^^^^^^ - const pm_alias_global_variable_node_t *cast = (const pm_alias_global_variable_node_t *) node; - PUSH_INSN1(ret, location, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE)); - - const pm_location_t *new_name_loc = &cast->new_name->location; - PUSH_INSN1(ret, location, putobject, ID2SYM(rb_intern3((const char *) new_name_loc->start, new_name_loc->end - new_name_loc->start, scope_node->encoding))); - - const pm_location_t *old_name_loc = &cast->old_name->location; - PUSH_INSN1(ret, location, putobject, ID2SYM(rb_intern3((const char *) old_name_loc->start, old_name_loc->end - old_name_loc->start, scope_node->encoding))); + struct rb_iseq_param_keyword *keyword = NULL; - PUSH_SEND(ret, location, id_core_set_variable_alias, INT2FIX(2)); - if (popped) PUSH_INSN(ret, location, pop); - - return; - } - case PM_ALIAS_METHOD_NODE: { - // alias foo bar - // ^^^^^^^^^^^^^ - const pm_alias_method_node_t *cast = (const pm_alias_method_node_t *) node; + if (parameters_node) { + optionals_list = ¶meters_node->optionals; + requireds_list = ¶meters_node->requireds; + keywords_list = ¶meters_node->keywords; + posts_list = ¶meters_node->posts; + } + else if (scope_node->parameters && (PM_NODE_TYPE_P(scope_node->parameters, PM_NUMBERED_PARAMETERS_NODE) || PM_NODE_TYPE_P(scope_node->parameters, PM_IT_PARAMETERS_NODE))) { + body->param.opt_num = 0; + } + else { + body->param.lead_num = 0; + body->param.opt_num = 0; + } - PUSH_INSN1(ret, location, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE)); - PUSH_INSN1(ret, location, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_CBASE)); - PM_COMPILE_NOT_POPPED(cast->new_name); - PM_COMPILE_NOT_POPPED(cast->old_name); + //********STEP 1********** + // Goal: calculate the table size for the locals, accounting for + // hidden variables and multi target nodes + size_t locals_size = locals->size; - PUSH_SEND(ret, location, id_core_set_method_alias, INT2FIX(3)); - if (popped) PUSH_INSN(ret, location, pop); + // Index lookup table buffer size is only the number of the locals + st_table *index_lookup_table = st_init_numtable(); - return; - } - case PM_AND_NODE: { - // a and b - // ^^^^^^^ - const pm_and_node_t *cast = (const pm_and_node_t *) node; - LABEL *end_label = NEW_LABEL(lineno); + int table_size = (int) locals_size; - PM_COMPILE_NOT_POPPED(cast->left); - if (!popped) PUSH_INSN(ret, location, dup); - PUSH_INSNL(ret, location, branchunless, end_label); + // For nodes have a hidden iteration variable. We add that to the local + // table size here. + if (PM_NODE_TYPE_P(scope_node->ast_node, PM_FOR_NODE)) table_size++; - if (!popped) PUSH_INSN(ret, location, pop); - PM_COMPILE(cast->right); - PUSH_LABEL(ret, end_label); + if (keywords_list && keywords_list->size) { + table_size++; + } - return; - } - case PM_ARGUMENTS_NODE: - // These are ArgumentsNodes that are not compiled directly by their - // parent call nodes, used in the cases of NextNodes, ReturnNodes, and - // BreakNodes. They can create an array like ArrayNode. - case PM_ARRAY_NODE: { - const pm_node_list_t *elements; + if (requireds_list) { + for (size_t i = 0; i < requireds_list->size; i++) { + // For each MultiTargetNode, we're going to have one + // additional anonymous local not represented in the locals table + // We want to account for this in our table size + pm_node_t *required = requireds_list->nodes[i]; + if (PM_NODE_TYPE_P(required, PM_MULTI_TARGET_NODE)) { + table_size++; + } + else if (PM_NODE_TYPE_P(required, PM_REQUIRED_PARAMETER_NODE)) { + if (PM_NODE_FLAG_P(required, PM_PARAMETER_FLAGS_REPEATED_PARAMETER)) { + table_size++; + } + } + } + } - if (PM_NODE_TYPE(node) == PM_ARGUMENTS_NODE) { - // break foo - // ^^^ - const pm_arguments_node_t *cast = (const pm_arguments_node_t *) node; - elements = &cast->arguments; + // If we have the `it` implicit local variable, we need to account for + // it in the local table size. + if (scope_node->parameters != NULL && PM_NODE_TYPE_P(scope_node->parameters, PM_IT_PARAMETERS_NODE)) { + table_size++; + } - // If we are only returning a single element through one of the jump - // nodes, then we will only compile that node directly. - if (elements->size == 1) { - PM_COMPILE(elements->nodes[0]); - return; + // Ensure there is enough room in the local table for any + // parameters that have been repeated + // ex: def underscore_parameters(_, _ = 1, _ = 2); _; end + // ^^^^^^^^^^^^ + if (optionals_list && optionals_list->size) { + for (size_t i = 0; i < optionals_list->size; i++) { + pm_node_t * node = optionals_list->nodes[i]; + if (PM_NODE_FLAG_P(node, PM_PARAMETER_FLAGS_REPEATED_PARAMETER)) { + table_size++; } } - else { - // [foo, bar, baz] - // ^^^^^^^^^^^^^^^ - const pm_array_node_t *cast = (const pm_array_node_t *) node; - elements = &cast->elements; + } + + // If we have an anonymous "rest" node, we'll need to increase the local + // table size to take it in to account. + // def m(foo, *, bar) + // ^ + if (parameters_node) { + if (parameters_node->rest) { + if (!(PM_NODE_TYPE_P(parameters_node->rest, PM_IMPLICIT_REST_NODE))) { + if (!((const pm_rest_parameter_node_t *) parameters_node->rest)->name || PM_NODE_FLAG_P(parameters_node->rest, PM_PARAMETER_FLAGS_REPEATED_PARAMETER)) { + table_size++; + } + } } - // If every node in the array is static, then we can compile the entire - // array now instead of later. - if (PM_NODE_FLAG_P(node, PM_NODE_FLAG_STATIC_LITERAL)) { - // We're only going to compile this node if it's not popped. If it - // is popped, then we know we don't need to do anything since it's - // statically known. - if (!popped) { - if (elements->size) { - VALUE value = pm_static_literal_value(iseq, node, scope_node); - PUSH_INSN1(ret, location, duparray, value); + // def foo(_, **_); _; end + // ^^^ + if (parameters_node->keyword_rest) { + // def foo(...); end + // ^^^ + // When we have a `...` as the keyword_rest, it's a forwarding_parameter_node and + // we need to leave space for 4 locals: *, **, &, ... + if (PM_NODE_TYPE_P(parameters_node->keyword_rest, PM_FORWARDING_PARAMETER_NODE)) { + // Only optimize specifically methods like this: `foo(...)` + if (requireds_list->size == 0 && optionals_list->size == 0 && keywords_list->size == 0) { + ISEQ_BODY(iseq)->param.flags.use_block = TRUE; + ISEQ_BODY(iseq)->param.flags.forwardable = TRUE; + table_size += 1; } else { - PUSH_INSN1(ret, location, newarray, INT2FIX(0)); + table_size += 4; + } + } + else { + const pm_keyword_rest_parameter_node_t *kw_rest = (const pm_keyword_rest_parameter_node_t *) parameters_node->keyword_rest; + + // If it's anonymous or repeated, then we need to allocate stack space + if (!kw_rest->name || PM_NODE_FLAG_P(kw_rest, PM_PARAMETER_FLAGS_REPEATED_PARAMETER)) { + table_size++; } } } - else { - // Here since we know there are possible side-effects inside the - // array contents, we're going to build it entirely at runtime. - // We'll do this by pushing all of the elements onto the stack and - // then combining them with newarray. - // - // If this array is popped, then this serves only to ensure we enact - // all side-effects (like method calls) that are contained within - // the array contents. - // - // We treat all sequences of non-splat elements as their - // own arrays, followed by a newarray, and then continually - // concat the arrays with the SplatNode nodes. - const int max_new_array_size = 0x100; - const unsigned int min_tmp_array_size = 0x40; - - int new_array_size = 0; - bool first_chunk = true; - - // This is an optimization wherein we keep track of whether or not - // the previous element was a static literal. If it was, then we do - // not attempt to check if we have a subarray that can be optimized. - // If it was not, then we do check. - bool static_literal = false; - - // Either create a new array, or push to the existing array. -#define FLUSH_CHUNK \ - if (new_array_size) { \ - if (first_chunk) PUSH_INSN1(ret, location, newarray, INT2FIX(new_array_size)); \ - else PUSH_INSN1(ret, location, pushtoarray, INT2FIX(new_array_size)); \ - first_chunk = false; \ - new_array_size = 0; \ + } + + if (posts_list) { + for (size_t i = 0; i < posts_list->size; i++) { + // For each MultiTargetNode, we're going to have one + // additional anonymous local not represented in the locals table + // We want to account for this in our table size + pm_node_t *required = posts_list->nodes[i]; + if (PM_NODE_TYPE_P(required, PM_MULTI_TARGET_NODE) || PM_NODE_FLAG_P(required, PM_PARAMETER_FLAGS_REPEATED_PARAMETER)) { + table_size++; } + } + } - for (size_t index = 0; index < elements->size; index++) { - const pm_node_t *element = elements->nodes[index]; + if (keywords_list && keywords_list->size) { + for (size_t i = 0; i < keywords_list->size; i++) { + pm_node_t *keyword_parameter_node = keywords_list->nodes[i]; + if (PM_NODE_FLAG_P(keyword_parameter_node, PM_PARAMETER_FLAGS_REPEATED_PARAMETER)) { + table_size++; + } + } + } - if (PM_NODE_TYPE_P(element, PM_SPLAT_NODE)) { - FLUSH_CHUNK; + if (parameters_node && parameters_node->block) { + const pm_block_parameter_node_t *block_node = (const pm_block_parameter_node_t *) parameters_node->block; - const pm_splat_node_t *splat_element = (const pm_splat_node_t *) element; - if (splat_element->expression) { - PM_COMPILE_NOT_POPPED(splat_element->expression); - } - else { - pm_local_index_t index = pm_lookup_local_index(iseq, scope_node, PM_CONSTANT_MULT, 0); - PUSH_GETLOCAL(ret, location, index.index, index.level); - } + if (PM_NODE_FLAG_P(block_node, PM_PARAMETER_FLAGS_REPEATED_PARAMETER) || !block_node->name) { + table_size++; + } + } - if (first_chunk) { - // If this is the first element of the array then we - // need to splatarray the elements into the list. - PUSH_INSN1(ret, location, splatarray, Qtrue); - first_chunk = false; - } - else { - PUSH_INSN(ret, location, concattoarray); - } - - static_literal = false; - } - else if (PM_NODE_TYPE_P(element, PM_KEYWORD_HASH_NODE)) { - if (new_array_size == 0 && first_chunk) { - PUSH_INSN1(ret, location, newarray, INT2FIX(0)); - first_chunk = false; - } - else { - FLUSH_CHUNK; - } + // We can create local_table_for_iseq with the correct size + VALUE idtmp = 0; + rb_ast_id_table_t *local_table_for_iseq = ALLOCV(idtmp, sizeof(rb_ast_id_table_t) + table_size * sizeof(ID)); + local_table_for_iseq->size = table_size; + + //********END OF STEP 1********** + + //********STEP 2********** + // Goal: populate iv index table as well as local table, keeping the + // layout of the local table consistent with the layout of the + // stack when calling the method + // + // Do a first pass on all of the parameters, setting their values in + // the local_table_for_iseq, _except_ for Multis who get a hidden + // variable in this step, and will get their names inserted in step 3 + + // local_index is a cursor that keeps track of the current + // index into local_table_for_iseq. The local table is actually a list, + // and the order of that list must match the order of the items pushed + // on the stack. We need to take in to account things pushed on the + // stack that _might not have a name_ (for example array destructuring). + // This index helps us know which item we're dealing with and also give + // those anonymous items temporary names (as below) + int local_index = 0; + + // Here we figure out local table indices and insert them in to the + // index lookup table and local tables. + // + // def foo(a, (b, *c, d), e = 1, *f, g, (h, *i, j), k:, l: 1, **m, &n) + // ^^^^^^^^^^^^^ + if (requireds_list && requireds_list->size) { + for (size_t i = 0; i < requireds_list->size; i++, local_index++) { + ID local; + + // For each MultiTargetNode, we're going to have one additional + // anonymous local not represented in the locals table. We want + // to account for this in our table size. + pm_node_t *required = requireds_list->nodes[i]; + + switch (PM_NODE_TYPE(required)) { + case PM_MULTI_TARGET_NODE: { + // def foo(a, (b, *c, d), e = 1, *f, g, (h, *i, j), k:, l: 1, **m, &n) + // ^^^^^^^^^^ + local = rb_make_temporary_id(local_index); + local_table_for_iseq->ids[local_index] = local; + break; + } + case PM_REQUIRED_PARAMETER_NODE: { + // def foo(a, (b, *c, d), e = 1, *f, g, (h, *i, j), k:, l: 1, **m, &n) + // ^ + const pm_required_parameter_node_t *param = (const pm_required_parameter_node_t *) required; - // If we get here, then this is the last element of the - // array/arguments, because it cannot be followed by - // anything else without a syntax error. This looks like: - // - // [foo, bar, baz: qux] - // ^^^^^^^^ - // - // [foo, bar, **baz] - // ^^^^^ - // - const pm_keyword_hash_node_t *keyword_hash = (const pm_keyword_hash_node_t *) element; - pm_compile_hash_elements(iseq, element, &keyword_hash->elements, false, ret, scope_node); - - // This boolean controls the manner in which we push the - // hash onto the array. If it's all keyword splats, then we - // can use the very specialized pushtoarraykwsplat - // instruction to check if it's empty before we push it. - size_t splats = 0; - while (splats < keyword_hash->elements.size && PM_NODE_TYPE_P(keyword_hash->elements.nodes[splats], PM_ASSOC_SPLAT_NODE)) splats++; - - if (keyword_hash->elements.size == splats) { - PUSH_INSN(ret, location, pushtoarraykwsplat); - } - else { - new_array_size++; - } + if (PM_NODE_FLAG_P(required, PM_PARAMETER_FLAGS_REPEATED_PARAMETER)) { + ID local = pm_constant_id_lookup(scope_node, param->name); + local_table_for_iseq->ids[local_index] = local; } - else if (PM_NODE_FLAG_P(element, PM_NODE_FLAG_STATIC_LITERAL) && !static_literal && ((index + min_tmp_array_size) < elements->size)) { - // If we have a static literal, then there's the potential - // to group a bunch of them together with a literal array - // and then concat them together. - size_t right_index = index + 1; - while (right_index < elements->size && PM_NODE_FLAG_P(elements->nodes[right_index], PM_NODE_FLAG_STATIC_LITERAL)) right_index++; - - size_t tmp_array_size = right_index - index; - if (tmp_array_size >= min_tmp_array_size) { - VALUE tmp_array = rb_ary_hidden_new(tmp_array_size); - - // Create the temporary array. - for (; tmp_array_size; tmp_array_size--) - rb_ary_push(tmp_array, pm_static_literal_value(iseq, elements->nodes[index++], scope_node)); - OBJ_FREEZE(tmp_array); - - // Emit the optimized code. - FLUSH_CHUNK; - if (first_chunk) { - PUSH_INSN1(ret, location, duparray, tmp_array); - first_chunk = false; - } - else { - PUSH_INSN1(ret, location, putobject, tmp_array); - PUSH_INSN(ret, location, concattoarray); - } - } - else { - PM_COMPILE_NOT_POPPED(element); - if (++new_array_size >= max_new_array_size) FLUSH_CHUNK; - static_literal = true; - } - } else { - PM_COMPILE_NOT_POPPED(element); - if (++new_array_size >= max_new_array_size) FLUSH_CHUNK; - static_literal = false; + else { + pm_insert_local_index(param->name, local_index, index_lookup_table, local_table_for_iseq, scope_node); } - } - FLUSH_CHUNK; - if (popped) PUSH_INSN(ret, location, pop); + break; + } + default: + rb_bug("Unsupported node in requireds in parameters %s", pm_node_type_to_str(PM_NODE_TYPE(required))); + } } -#undef FLUSH_CHUNK - return; - } - case PM_ASSOC_NODE: { - // { foo: 1 } - // ^^^^^^ - // - // foo(bar: 1) - // ^^^^^^ - const pm_assoc_node_t *cast = (const pm_assoc_node_t *) node; - - PM_COMPILE(cast->key); - PM_COMPILE(cast->value); + body->param.lead_num = (int) requireds_list->size; + body->param.flags.has_lead = true; + } - return; - } - case PM_ASSOC_SPLAT_NODE: { - // { **foo } - // ^^^^^ - // - // def foo(**); bar(**); end - // ^^ - const pm_assoc_splat_node_t *cast = (const pm_assoc_splat_node_t *) node; + if (scope_node->parameters != NULL && PM_NODE_TYPE_P(scope_node->parameters, PM_IT_PARAMETERS_NODE)) { + ID local = rb_make_temporary_id(local_index); + local_table_for_iseq->ids[local_index++] = local; + } - if (cast->value != NULL) { - PM_COMPILE(cast->value); - } - else if (!popped) { - pm_local_index_t index = pm_lookup_local_index(iseq, scope_node, PM_CONSTANT_POW, 0); - PUSH_GETLOCAL(ret, location, index.index, index.level); - } + // def foo(a, (b, *c, d), e = 1, *f, g, (h, *i, j), k:, l: 1, **m, &n) + // ^^^^^ + if (optionals_list && optionals_list->size) { + body->param.opt_num = (int) optionals_list->size; + body->param.flags.has_opt = true; - return; - } - case PM_BACK_REFERENCE_READ_NODE: { - // $+ - // ^^ - if (!popped) { - // Since a back reference is `$`, ruby represents the ID as the - // an rb_intern on the value after the `$`. - char *char_ptr = (char *)(node->location.start) + 1; - ID backref_val = INT2FIX(rb_intern2(char_ptr, 1)) << 1 | 1; - PUSH_INSN2(ret, location, getspecial, INT2FIX(1), backref_val); - } - return; - } - case PM_BEGIN_NODE: { - // begin end - // ^^^^^^^^^ - const pm_begin_node_t *cast = (const pm_begin_node_t *) node; + for (size_t i = 0; i < optionals_list->size; i++, local_index++) { + pm_node_t * node = optionals_list->nodes[i]; + pm_constant_id_t name = ((const pm_optional_parameter_node_t *) node)->name; - if (cast->ensure_clause) { - // Compiling the ensure clause will compile the rescue clause (if - // there is one), which will compile the begin statements. - pm_compile_ensure(iseq, cast, &location, ret, popped, scope_node); - } - else if (cast->rescue_clause) { - // Compiling rescue will compile begin statements (if applicable). - pm_compile_rescue(iseq, cast, &location, ret, popped, scope_node); - } - else { - // If there is neither ensure or rescue, the just compile the - // statements. - if (cast->statements != NULL) { - PM_COMPILE((const pm_node_t *) cast->statements); + if (PM_NODE_FLAG_P(node, PM_PARAMETER_FLAGS_REPEATED_PARAMETER)) { + ID local = pm_constant_id_lookup(scope_node, name); + local_table_for_iseq->ids[local_index] = local; } - else if (!popped) { - PUSH_SYNTHETIC_PUTNIL(ret, iseq); + else { + pm_insert_local_index(name, local_index, index_lookup_table, local_table_for_iseq, scope_node); } } - return; - } - case PM_BLOCK_ARGUMENT_NODE: { - // foo(&bar) - // ^^^^ - const pm_block_argument_node_t *cast = (const pm_block_argument_node_t *) node; + } - if (cast->expression != NULL) { - PM_COMPILE(cast->expression); - } - else { - // If there's no expression, this must be block forwarding. - pm_local_index_t local_index = pm_lookup_local_index(iseq, scope_node, PM_CONSTANT_AND, 0); - PUSH_INSN2(ret, location, getblockparamproxy, INT2FIX(local_index.index + VM_ENV_DATA_SIZE - 1), INT2FIX(local_index.level)); - } - return; - } - case PM_BREAK_NODE: { - // break - // ^^^^^ - // - // break foo - // ^^^^^^^^^ - const pm_break_node_t *cast = (const pm_break_node_t *) node; - unsigned long throw_flag = 0; + // def foo(a, (b, *c, d), e = 1, *f, g, (h, *i, j), k:, l: 1, **m, &n) + // ^^ + if (parameters_node && parameters_node->rest) { + body->param.rest_start = local_index; - if (ISEQ_COMPILE_DATA(iseq)->redo_label != 0 && can_add_ensure_iseq(iseq)) { - /* while/until */ - LABEL *splabel = NEW_LABEL(0); - PUSH_LABEL(ret, splabel); - PUSH_ADJUST(ret, location, ISEQ_COMPILE_DATA(iseq)->redo_label); + // If there's a trailing comma, we'll have an implicit rest node, + // and we don't want it to impact the rest variables on param + if (!(PM_NODE_TYPE_P(parameters_node->rest, PM_IMPLICIT_REST_NODE))) { + body->param.flags.has_rest = true; + RUBY_ASSERT(body->param.rest_start != -1); - if (cast->arguments != NULL) { - PM_COMPILE_NOT_POPPED((const pm_node_t *) cast->arguments); + pm_constant_id_t name = ((const pm_rest_parameter_node_t *) parameters_node->rest)->name; + + if (name) { + // def foo(a, (b, *c, d), e = 1, *f, g, (h, *i, j), k:, l: 1, **m, &n) + // ^^ + if (PM_NODE_FLAG_P(parameters_node->rest, PM_PARAMETER_FLAGS_REPEATED_PARAMETER)) { + ID local = pm_constant_id_lookup(scope_node, name); + local_table_for_iseq->ids[local_index] = local; + } + else { + pm_insert_local_index(name, local_index, index_lookup_table, local_table_for_iseq, scope_node); + } } else { - PUSH_INSN(ret, location, putnil); + // def foo(a, (b, *c, d), e = 1, *, g, (h, *i, j), k:, l: 1, **m, &n) + // ^ + body->param.flags.anon_rest = true; + pm_insert_local_special(idMULT, local_index, index_lookup_table, local_table_for_iseq); } - pm_add_ensure_iseq(ret, iseq, 0, scope_node); - PUSH_INSNL(ret, location, jump, ISEQ_COMPILE_DATA(iseq)->end_label); - PUSH_ADJUST_RESTORE(ret, splabel); - if (!popped) PUSH_INSN(ret, location, putnil); + local_index++; } - else { - const rb_iseq_t *ip = iseq; + } - while (ip) { - if (!ISEQ_COMPILE_DATA(ip)) { - ip = 0; - break; - } + // def foo(a, (b, *c, d), e = 1, *f, g, (h, *i, j), k:, l: 1, **m, &n) + // ^^^^^^^^^^^^^ + if (posts_list && posts_list->size) { + body->param.post_num = (int) posts_list->size; + body->param.post_start = local_index; + body->param.flags.has_post = true; + + for (size_t i = 0; i < posts_list->size; i++, local_index++) { + ID local; + + // For each MultiTargetNode, we're going to have one additional + // anonymous local not represented in the locals table. We want + // to account for this in our table size. + const pm_node_t *post_node = posts_list->nodes[i]; + + switch (PM_NODE_TYPE(post_node)) { + case PM_MULTI_TARGET_NODE: { + // def foo(a, (b, *c, d), e = 1, *f, g, (h, *i, j), k:, l: 1, **m, &n) + // ^^^^^^^^^^ + local = rb_make_temporary_id(local_index); + local_table_for_iseq->ids[local_index] = local; + break; + } + case PM_REQUIRED_PARAMETER_NODE: { + // def foo(a, (b, *c, d), e = 1, *f, g, (h, *i, j), k:, l: 1, **m, &n) + // ^ + const pm_required_parameter_node_t *param = (const pm_required_parameter_node_t *) post_node; - if (ISEQ_COMPILE_DATA(ip)->redo_label != 0) { - throw_flag = VM_THROW_NO_ESCAPE_FLAG; + if (PM_NODE_FLAG_P(param, PM_PARAMETER_FLAGS_REPEATED_PARAMETER)) { + ID local = pm_constant_id_lookup(scope_node, param->name); + local_table_for_iseq->ids[local_index] = local; } - else if (ISEQ_BODY(ip)->type == ISEQ_TYPE_BLOCK) { - throw_flag = 0; + else { + pm_insert_local_index(param->name, local_index, index_lookup_table, local_table_for_iseq, scope_node); } - else if (ISEQ_BODY(ip)->type == ISEQ_TYPE_EVAL) { - COMPILE_ERROR(iseq, location.line, "Can't escape from eval with break"); - return; + break; + } + default: + rb_bug("Unsupported node in posts in parameters %s", pm_node_type_to_str(PM_NODE_TYPE(post_node))); + } + } + } + + // def foo(a, (b, *c, d), e = 1, *f, g, (h, *i, j), k:, l: 1, **m, &n) + // ^^^^^^^^ + // Keywords create an internal variable on the parse tree + if (keywords_list && keywords_list->size) { + body->param.keyword = keyword = ZALLOC_N(struct rb_iseq_param_keyword, 1); + keyword->num = (int) keywords_list->size; + + body->param.flags.has_kw = true; + const VALUE default_values = rb_ary_hidden_new(1); + const VALUE complex_mark = rb_str_tmp_new(0); + + ID *ids = xcalloc(keywords_list->size, sizeof(ID)); + + size_t kw_index = 0; + + for (size_t i = 0; i < keywords_list->size; i++) { + pm_node_t *keyword_parameter_node = keywords_list->nodes[i]; + pm_constant_id_t name; + + // def foo(a, (b, *c, d), e = 1, *f, g, (h, *i, j), k:, l: 1, **m, &n) + // ^^ + if (PM_NODE_TYPE_P(keyword_parameter_node, PM_REQUIRED_KEYWORD_PARAMETER_NODE)) { + name = ((const pm_required_keyword_parameter_node_t *) keyword_parameter_node)->name; + keyword->required_num++; + ID local = pm_constant_id_lookup(scope_node, name); + + if (PM_NODE_FLAG_P(keyword_parameter_node, PM_PARAMETER_FLAGS_REPEATED_PARAMETER)) { + local_table_for_iseq->ids[local_index] = local; } else { - ip = ISEQ_BODY(ip)->parent_iseq; - continue; + pm_insert_local_index(name, local_index, index_lookup_table, local_table_for_iseq, scope_node); } + local_index++; + ids[kw_index++] = local; + } + } + + for (size_t i = 0; i < keywords_list->size; i++) { + pm_node_t *keyword_parameter_node = keywords_list->nodes[i]; + pm_constant_id_t name; - /* escape from block */ - if (cast->arguments != NULL) { - PM_COMPILE_NOT_POPPED((const pm_node_t *) cast->arguments); + // def foo(a, (b, *c, d), e = 1, *f, g, (h, *i, j), k:, l: 1, **m, &n) + // ^^^^ + if (PM_NODE_TYPE_P(keyword_parameter_node, PM_OPTIONAL_KEYWORD_PARAMETER_NODE)) { + const pm_optional_keyword_parameter_node_t *cast = ((const pm_optional_keyword_parameter_node_t *) keyword_parameter_node); + + pm_node_t *value = cast->value; + name = cast->name; + + if (PM_NODE_FLAG_P(value, PM_NODE_FLAG_STATIC_LITERAL) && !PM_CONTAINER_P(value)) { + rb_ary_push(default_values, pm_static_literal_value(iseq, value, scope_node)); } else { - PUSH_INSN(ret, location, putnil); + rb_ary_push(default_values, complex_mark); } - PUSH_INSN1(ret, location, throw, INT2FIX(throw_flag | TAG_BREAK)); - if (popped) PUSH_INSN(ret, location, pop); - - return; + ID local = pm_constant_id_lookup(scope_node, name); + if (PM_NODE_FLAG_P(keyword_parameter_node, PM_PARAMETER_FLAGS_REPEATED_PARAMETER)) { + local_table_for_iseq->ids[local_index] = local; + } + else { + pm_insert_local_index(name, local_index, index_lookup_table, local_table_for_iseq, scope_node); + } + ids[kw_index++] = local; + local_index++; } - COMPILE_ERROR(iseq, location.line, "Invalid break"); } - return; - } - case PM_CALL_NODE: { - // foo - // ^^^ - // - // foo.bar - // ^^^^^^^ - // - // foo.bar() {} - // ^^^^^^^^^^^^ - const pm_call_node_t *cast = (const pm_call_node_t *) node; - ID method_id = pm_constant_id_lookup(scope_node, cast->name); - const pm_location_t *message_loc = &cast->message_loc; - if (message_loc->start == NULL) message_loc = &cast->base.location; + keyword->bits_start = local_index; + keyword->table = ids; - const pm_node_location_t location = PM_LOCATION_START_LOCATION(scope_node->parser, message_loc, cast->base.node_id); - const char *builtin_func; + if (RARRAY_LEN(default_values)) { + VALUE *dvs = ALLOC_N(VALUE, RARRAY_LEN(default_values)); - if (UNLIKELY(iseq_has_builtin_function_table(iseq)) && (builtin_func = pm_iseq_builtin_function_name(scope_node, cast->receiver, method_id)) != NULL) { - pm_compile_builtin_function_call(iseq, ret, scope_node, cast, &location, popped, ISEQ_COMPILE_DATA(iseq)->current_block, builtin_func); - return; + for (int i = 0; i < RARRAY_LEN(default_values); i++) { + VALUE dv = RARRAY_AREF(default_values, i); + if (dv == complex_mark) dv = Qundef; + RB_OBJ_WRITE(iseq, &dvs[i], dv); + } + + keyword->default_values = dvs; } - LABEL *start = NEW_LABEL(location.line); - if (cast->block) PUSH_LABEL(ret, start); + // Hidden local for keyword arguments + ID local = rb_make_temporary_id(local_index); + local_table_for_iseq->ids[local_index] = local; + local_index++; + } - switch (method_id) { - case idUMinus: { - if (pm_opt_str_freeze_p(iseq, cast)) { - VALUE value = parse_static_literal_string(iseq, scope_node, cast->receiver, &((const pm_string_node_t * ) cast->receiver)->unescaped); - PUSH_INSN2(ret, location, opt_str_uminus, value, new_callinfo(iseq, idUMinus, 0, 0, NULL, FALSE)); - return; - } - break; - } - case idFreeze: { - if (pm_opt_str_freeze_p(iseq, cast)) { - VALUE value = parse_static_literal_string(iseq, scope_node, cast->receiver, &((const pm_string_node_t * ) cast->receiver)->unescaped); - PUSH_INSN2(ret, location, opt_str_freeze, value, new_callinfo(iseq, idFreeze, 0, 0, NULL, FALSE)); - return; - } - break; - } - case idAREF: { - if (pm_opt_aref_with_p(iseq, cast)) { - const pm_string_node_t *string = (const pm_string_node_t *) ((const pm_arguments_node_t *) cast->arguments)->arguments.nodes[0]; - VALUE value = parse_static_literal_string(iseq, scope_node, (const pm_node_t *) string, &string->unescaped); + if (body->type == ISEQ_TYPE_BLOCK && local_index == 1 && requireds_list && requireds_list->size == 1 && !trailing_comma) { + body->param.flags.ambiguous_param0 = true; + } + + if (parameters_node) { + // def foo(a, (b, *c, d), e = 1, *f, g, (h, *i, j), k:, l: 1, **m, &n) + // ^^^ + if (parameters_node->keyword_rest) { + switch (PM_NODE_TYPE(parameters_node->keyword_rest)) { + case PM_NO_KEYWORDS_PARAMETER_NODE: { + // def foo(a, (b, *c, d), e = 1, *f, g, (h, *i, j), k:, l: 1, **nil, &n) + // ^^^^^ + body->param.flags.accepts_no_kwarg = true; + break; + } + case PM_KEYWORD_REST_PARAMETER_NODE: { + // def foo(a, (b, *c, d), e = 1, *f, g, (h, *i, j), k:, l: 1, **m, &n) + // ^^^ + const pm_keyword_rest_parameter_node_t *kw_rest_node = (const pm_keyword_rest_parameter_node_t *) parameters_node->keyword_rest; + if (!body->param.flags.has_kw) { + body->param.keyword = keyword = ZALLOC_N(struct rb_iseq_param_keyword, 1); + } - PM_COMPILE_NOT_POPPED(cast->receiver); - PUSH_INSN2(ret, location, opt_aref_with, value, new_callinfo(iseq, idAREF, 1, 0, NULL, FALSE)); + keyword->rest_start = local_index; + body->param.flags.has_kwrest = true; - if (popped) { - PUSH_INSN(ret, location, pop); + pm_constant_id_t constant_id = kw_rest_node->name; + if (constant_id) { + if (PM_NODE_FLAG_P(kw_rest_node, PM_PARAMETER_FLAGS_REPEATED_PARAMETER)) { + ID local = pm_constant_id_lookup(scope_node, constant_id); + local_table_for_iseq->ids[local_index] = local; + } + else { + pm_insert_local_index(constant_id, local_index, index_lookup_table, local_table_for_iseq, scope_node); + } + } + else { + body->param.flags.anon_kwrest = true; + pm_insert_local_special(idPow, local_index, index_lookup_table, local_table_for_iseq); } - return; - } - break; - } - case idASET: { - if (pm_opt_aset_with_p(iseq, cast)) { - const pm_string_node_t *string = (const pm_string_node_t *) ((const pm_arguments_node_t *) cast->arguments)->arguments.nodes[0]; - VALUE value = parse_static_literal_string(iseq, scope_node, (const pm_node_t *) string, &string->unescaped); + local_index++; + break; + } + case PM_FORWARDING_PARAMETER_NODE: { + // def foo(...) + // ^^^ + if (!ISEQ_BODY(iseq)->param.flags.forwardable) { + // Add the anonymous * + body->param.rest_start = local_index; + body->param.flags.has_rest = true; + body->param.flags.anon_rest = true; + pm_insert_local_special(idMULT, local_index++, index_lookup_table, local_table_for_iseq); - PM_COMPILE_NOT_POPPED(cast->receiver); - PM_COMPILE_NOT_POPPED(((const pm_arguments_node_t *) cast->arguments)->arguments.nodes[1]); + // Add the anonymous ** + RUBY_ASSERT(!body->param.flags.has_kw); + body->param.flags.has_kw = false; + body->param.flags.has_kwrest = true; + body->param.flags.anon_kwrest = true; + body->param.keyword = keyword = ZALLOC_N(struct rb_iseq_param_keyword, 1); + keyword->rest_start = local_index; + pm_insert_local_special(idPow, local_index++, index_lookup_table, local_table_for_iseq); - if (!popped) { - PUSH_INSN(ret, location, swap); - PUSH_INSN1(ret, location, topn, INT2FIX(1)); + // Add the anonymous & + body->param.block_start = local_index; + body->param.flags.has_block = true; + pm_insert_local_special(idAnd, local_index++, index_lookup_table, local_table_for_iseq); } - PUSH_INSN2(ret, location, opt_aset_with, value, new_callinfo(iseq, idASET, 2, 0, NULL, FALSE)); - PUSH_INSN(ret, location, pop); - return; + // Add the ... + pm_insert_local_special(idDot3, local_index++, index_lookup_table, local_table_for_iseq); + break; + } + default: + rb_bug("node type %s not expected as keyword_rest", pm_node_type_to_str(PM_NODE_TYPE(parameters_node->keyword_rest))); } - break; - } - } - - if (PM_NODE_FLAG_P(cast, PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE) && !popped) { - PUSH_INSN(ret, location, putnil); } - if (cast->receiver == NULL) { - PUSH_INSN(ret, location, putself); - } - else { - if (method_id == idCall && PM_NODE_TYPE_P(cast->receiver, PM_LOCAL_VARIABLE_READ_NODE)) { - const pm_local_variable_read_node_t *read_node_cast = (const pm_local_variable_read_node_t *) cast->receiver; - uint32_t node_id = cast->receiver->node_id; - int idx, level; + // def foo(a, (b, *c, d), e = 1, *f, g, (h, *i, j), k:, l: 1, **m, &n) + // ^^ + if (parameters_node->block) { + body->param.block_start = local_index; + body->param.flags.has_block = true; + iseq_set_use_block(iseq); - if (iseq_block_param_id_p(iseq, pm_constant_id_lookup(scope_node, read_node_cast->name), &idx, &level)) { - ADD_ELEM(ret, (LINK_ELEMENT *) new_insn_body(iseq, location.line, node_id, BIN(getblockparamproxy), 2, INT2FIX((idx) + VM_ENV_DATA_SIZE - 1), INT2FIX(level))); - } - else { - PM_COMPILE_NOT_POPPED(cast->receiver); - } - } - else { - PM_COMPILE_NOT_POPPED(cast->receiver); - } - } + pm_constant_id_t name = ((const pm_block_parameter_node_t *) parameters_node->block)->name; - pm_compile_call(iseq, cast, ret, popped, scope_node, method_id, start); - return; - } - case PM_CALL_AND_WRITE_NODE: { - // foo.bar &&= baz - // ^^^^^^^^^^^^^^^ - const pm_call_and_write_node_t *cast = (const pm_call_and_write_node_t *) node; - pm_compile_call_and_or_write_node(iseq, true, cast->receiver, cast->value, cast->write_name, cast->read_name, PM_NODE_FLAG_P(cast, PM_CALL_NODE_FLAGS_SAFE_NAVIGATION), &location, ret, popped, scope_node); - return; - } - case PM_CALL_OR_WRITE_NODE: { - // foo.bar ||= baz - // ^^^^^^^^^^^^^^^ - const pm_call_or_write_node_t *cast = (const pm_call_or_write_node_t *) node; - pm_compile_call_and_or_write_node(iseq, false, cast->receiver, cast->value, cast->write_name, cast->read_name, PM_NODE_FLAG_P(cast, PM_CALL_NODE_FLAGS_SAFE_NAVIGATION), &location, ret, popped, scope_node); - return; - } - case PM_CALL_OPERATOR_WRITE_NODE: { - // foo.bar += baz - // ^^^^^^^^^^^^^^^ - // - // Call operator writes occur when you have a call node on the left-hand - // side of a write operator that is not `=`. As an example, - // `foo.bar *= 1`. This breaks down to caching the receiver on the - // stack and then performing three method calls, one to read the value, - // one to compute the result, and one to write the result back to the - // receiver. - const pm_call_operator_write_node_t *cast = (const pm_call_operator_write_node_t *) node; - int flag = 0; + if (name) { + if (PM_NODE_FLAG_P(parameters_node->block, PM_PARAMETER_FLAGS_REPEATED_PARAMETER)) { + ID local = pm_constant_id_lookup(scope_node, name); + local_table_for_iseq->ids[local_index] = local; + } + else { + pm_insert_local_index(name, local_index, index_lookup_table, local_table_for_iseq, scope_node); + } + } + else { + pm_insert_local_special(idAnd, local_index, index_lookup_table, local_table_for_iseq); + } - if (PM_NODE_FLAG_P(cast, PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY)) { - flag = VM_CALL_FCALL; + local_index++; } + } - PM_COMPILE_NOT_POPPED(cast->receiver); + //********END OF STEP 2********** + // The local table is now consistent with expected + // stack layout - LABEL *safe_label = NULL; - if (PM_NODE_FLAG_P(cast, PM_CALL_NODE_FLAGS_SAFE_NAVIGATION)) { - safe_label = NEW_LABEL(location.line); - PUSH_INSN(ret, location, dup); - PUSH_INSNL(ret, location, branchnil, safe_label); - } + // If there's only one required element in the parameters + // CRuby needs to recognize it as an ambiguous parameter - PUSH_INSN(ret, location, dup); + //********STEP 3********** + // Goal: fill in the names of the parameters in MultiTargetNodes + // + // Go through requireds again to set the multis - ID id_read_name = pm_constant_id_lookup(scope_node, cast->read_name); - PUSH_SEND_WITH_FLAG(ret, location, id_read_name, INT2FIX(0), INT2FIX(flag)); + if (requireds_list && requireds_list->size) { + for (size_t i = 0; i < requireds_list->size; i++) { + // For each MultiTargetNode, we're going to have one + // additional anonymous local not represented in the locals table + // We want to account for this in our table size + const pm_node_t *required = requireds_list->nodes[i]; - PM_COMPILE_NOT_POPPED(cast->value); - ID id_operator = pm_constant_id_lookup(scope_node, cast->binary_operator); - PUSH_SEND(ret, location, id_operator, INT2FIX(1)); + if (PM_NODE_TYPE_P(required, PM_MULTI_TARGET_NODE)) { + local_index = pm_compile_destructured_param_locals((const pm_multi_target_node_t *) required, index_lookup_table, local_table_for_iseq, scope_node, local_index); + } + } + } - if (!popped) { - PUSH_INSN(ret, location, swap); - PUSH_INSN1(ret, location, topn, INT2FIX(1)); + // Go through posts again to set the multis + if (posts_list && posts_list->size) { + for (size_t i = 0; i < posts_list->size; i++) { + // For each MultiTargetNode, we're going to have one + // additional anonymous local not represented in the locals table + // We want to account for this in our table size + const pm_node_t *post = posts_list->nodes[i]; + + if (PM_NODE_TYPE_P(post, PM_MULTI_TARGET_NODE)) { + local_index = pm_compile_destructured_param_locals((const pm_multi_target_node_t *) post, index_lookup_table, local_table_for_iseq, scope_node, local_index); + } } + } - ID id_write_name = pm_constant_id_lookup(scope_node, cast->write_name); - PUSH_SEND_WITH_FLAG(ret, location, id_write_name, INT2FIX(1), INT2FIX(flag)); + // Set any anonymous locals for the for node + if (PM_NODE_TYPE_P(scope_node->ast_node, PM_FOR_NODE)) { + if (PM_NODE_TYPE_P(((const pm_for_node_t *) scope_node->ast_node)->index, PM_LOCAL_VARIABLE_TARGET_NODE)) { + body->param.lead_num++; + } + else { + body->param.rest_start = local_index; + body->param.flags.has_rest = true; + } - if (safe_label != NULL && popped) PUSH_LABEL(ret, safe_label); - PUSH_INSN(ret, location, pop); - if (safe_label != NULL && !popped) PUSH_LABEL(ret, safe_label); + ID local = rb_make_temporary_id(local_index); + local_table_for_iseq->ids[local_index] = local; + local_index++; + } - return; - } - case PM_CASE_NODE: { - // case foo; when bar; end - // ^^^^^^^^^^^^^^^^^^^^^^^ - const pm_case_node_t *cast = (const pm_case_node_t *) node; - const pm_node_list_t *conditions = &cast->conditions; + // Fill in any NumberedParameters, if they exist + if (scope_node->parameters && PM_NODE_TYPE_P(scope_node->parameters, PM_NUMBERED_PARAMETERS_NODE)) { + int maximum = ((const pm_numbered_parameters_node_t *) scope_node->parameters)->maximum; + RUBY_ASSERT(0 < maximum && maximum <= 9); + for (int i = 0; i < maximum; i++, local_index++) { + const uint8_t param_name[] = { '_', '1' + i }; + pm_constant_id_t constant_id = pm_constant_pool_find(&scope_node->parser->constant_pool, param_name, 2); + RUBY_ASSERT(constant_id && "parser should fill in any gaps in numbered parameters"); + pm_insert_local_index(constant_id, local_index, index_lookup_table, local_table_for_iseq, scope_node); + } + body->param.lead_num = maximum; + body->param.flags.has_lead = true; + } - // This is the anchor that we will compile the conditions of the various - // `when` nodes into. If a match is found, they will need to jump into - // the body_seq anchor to the correct spot. - DECL_ANCHOR(cond_seq); - INIT_ANCHOR(cond_seq); + //********END OF STEP 3********** - // This is the anchor that we will compile the bodies of the various - // `when` nodes into. We'll make sure that the clauses that are compiled - // jump into the correct spots within this anchor. - DECL_ANCHOR(body_seq); - INIT_ANCHOR(body_seq); + //********STEP 4********** + // Goal: fill in the method body locals + // To be explicit, these are the non-parameter locals + // We fill in the block_locals, if they exist + // lambda { |x; y| y } + // ^ + if (block_locals && block_locals->size) { + for (size_t i = 0; i < block_locals->size; i++, local_index++) { + pm_constant_id_t constant_id = ((const pm_block_local_variable_node_t *) block_locals->nodes[i])->name; + pm_insert_local_index(constant_id, local_index, index_lookup_table, local_table_for_iseq, scope_node); + } + } - // This is the label where all of the when clauses will jump to if they - // have matched and are done executing their bodies. - LABEL *end_label = NEW_LABEL(location.line); + // Fill in any locals we missed + if (scope_node->locals.size) { + for (size_t i = 0; i < scope_node->locals.size; i++) { + pm_constant_id_t constant_id = locals->ids[i]; + if (constant_id) { + struct pm_local_table_insert_ctx ctx; + ctx.scope_node = scope_node; + ctx.local_table_for_iseq = local_table_for_iseq; + ctx.local_index = local_index; - // If we have a predicate on this case statement, then it's going to - // compare all of the various when clauses to the predicate. If we - // don't, then it's basically an if-elsif-else chain. - if (cast->predicate == NULL) { - // Establish branch coverage for the case node. - VALUE branches = Qfalse; - rb_code_location_t case_location = { 0 }; - int branch_id = 0; + st_update(index_lookup_table, (st_data_t)constant_id, pm_local_table_insert_func, (st_data_t)&ctx); - if (PM_BRANCH_COVERAGE_P(iseq)) { - case_location = pm_code_location(scope_node, (const pm_node_t *) cast); - branches = decl_branch_base(iseq, PTR2NUM(cast), &case_location, "case"); + local_index = ctx.local_index; } + } + } - // Loop through each clauses in the case node and compile each of - // the conditions within them into cond_seq. If they match, they - // should jump into their respective bodies in body_seq. - for (size_t clause_index = 0; clause_index < conditions->size; clause_index++) { - const pm_when_node_t *clause = (const pm_when_node_t *) conditions->nodes[clause_index]; - const pm_node_list_t *conditions = &clause->conditions; + //********END OF STEP 4********** - int clause_lineno = pm_node_line_number(parser, (const pm_node_t *) clause); - LABEL *label = NEW_LABEL(clause_lineno); - PUSH_LABEL(body_seq, label); + // We set the index_lookup_table on the scope node so we can + // refer to the parameters correctly + if (scope_node->index_lookup_table) { + st_free_table(scope_node->index_lookup_table); + } + scope_node->index_lookup_table = index_lookup_table; + iseq_calc_param_size(iseq); - // Establish branch coverage for the when clause. - if (PM_BRANCH_COVERAGE_P(iseq)) { - rb_code_location_t branch_location = pm_code_location(scope_node, clause->statements != NULL ? ((const pm_node_t *) clause->statements) : ((const pm_node_t *) clause)); - add_trace_branch_coverage(iseq, body_seq, &branch_location, branch_location.beg_pos.column, branch_id++, "when", branches); - } + if (ISEQ_BODY(iseq)->param.flags.forwardable) { + // We're treating `...` as a parameter so that frame + // pushing won't clobber it. + ISEQ_BODY(iseq)->param.size += 1; + } - if (clause->statements != NULL) { - pm_compile_node(iseq, (const pm_node_t *) clause->statements, body_seq, popped, scope_node); - } - else if (!popped) { - PUSH_SYNTHETIC_PUTNIL(body_seq, iseq); - } + // FIXME: args? + iseq_set_local_table(iseq, local_table_for_iseq, 0); + scope_node->local_table_for_iseq_size = local_table_for_iseq->size; - PUSH_INSNL(body_seq, location, jump, end_label); + //********STEP 5************ + // Goal: compile anything that needed to be compiled + if (optionals_list && optionals_list->size) { + LABEL **opt_table = (LABEL **) ALLOC_N(VALUE, optionals_list->size + 1); + LABEL *label; - // Compile each of the conditions for the when clause into the - // cond_seq. Each one should have a unique condition and should - // jump to the subsequent one if it doesn't match. - for (size_t condition_index = 0; condition_index < conditions->size; condition_index++) { - const pm_node_t *condition = conditions->nodes[condition_index]; + // TODO: Should we make an api for NEW_LABEL where you can pass + // a pointer to the label it should fill out? We already + // have a list of labels allocated above so it seems wasteful + // to do the copies. + for (size_t i = 0; i < optionals_list->size; i++) { + label = NEW_LABEL(location.line); + opt_table[i] = label; + PUSH_LABEL(ret, label); + pm_node_t *optional_node = optionals_list->nodes[i]; + PM_COMPILE_NOT_POPPED(optional_node); + } - if (PM_NODE_TYPE_P(condition, PM_SPLAT_NODE)) { - pm_node_location_t cond_location = PM_NODE_START_LOCATION(parser, condition); - PUSH_INSN(cond_seq, cond_location, putnil); - pm_compile_node(iseq, condition, cond_seq, false, scope_node); - PUSH_INSN1(cond_seq, cond_location, checkmatch, INT2FIX(VM_CHECKMATCH_TYPE_WHEN | VM_CHECKMATCH_ARRAY)); - PUSH_INSNL(cond_seq, cond_location, branchif, label); - } - else { - LABEL *next_label = NEW_LABEL(pm_node_line_number(parser, condition)); - pm_compile_branch_condition(iseq, cond_seq, condition, label, next_label, false, scope_node); - PUSH_LABEL(cond_seq, next_label); - } - } - } + // Set the last label + label = NEW_LABEL(location.line); + opt_table[optionals_list->size] = label; + PUSH_LABEL(ret, label); - // Establish branch coverage for the else clause (implicit or - // explicit). - if (PM_BRANCH_COVERAGE_P(iseq)) { - rb_code_location_t branch_location; + body->param.opt_table = (const VALUE *) opt_table; + } - if (cast->else_clause == NULL) { - branch_location = case_location; - } else if (cast->else_clause->statements == NULL) { - branch_location = pm_code_location(scope_node, (const pm_node_t *) cast->else_clause); - } else { - branch_location = pm_code_location(scope_node, (const pm_node_t *) cast->else_clause->statements); - } + if (keywords_list && keywords_list->size) { + size_t optional_index = 0; + for (size_t i = 0; i < keywords_list->size; i++) { + pm_node_t *keyword_parameter_node = keywords_list->nodes[i]; + pm_constant_id_t name; - add_trace_branch_coverage(iseq, cond_seq, &branch_location, branch_location.beg_pos.column, branch_id, "else", branches); - } + switch (PM_NODE_TYPE(keyword_parameter_node)) { + case PM_OPTIONAL_KEYWORD_PARAMETER_NODE: { + // def foo(a, (b, *c, d), e = 1, *f, g, (h, *i, j), k:, l: 1, **m, &n) + // ^^^^ + const pm_optional_keyword_parameter_node_t *cast = ((const pm_optional_keyword_parameter_node_t *) keyword_parameter_node); - // Compile the else clause if there is one. - if (cast->else_clause != NULL) { - pm_compile_node(iseq, (const pm_node_t *) cast->else_clause, cond_seq, popped, scope_node); - } - else if (!popped) { - PUSH_SYNTHETIC_PUTNIL(cond_seq, iseq); - } + pm_node_t *value = cast->value; + name = cast->name; + + if (!PM_NODE_FLAG_P(value, PM_NODE_FLAG_STATIC_LITERAL) || PM_CONTAINER_P(value)) { + LABEL *end_label = NEW_LABEL(location.line); - // Finally, jump to the end label if none of the other conditions - // have matched. - PUSH_INSNL(cond_seq, location, jump, end_label); - PUSH_SEQ(ret, cond_seq); + pm_local_index_t index = pm_lookup_local_index(iseq, scope_node, name, 0); + int kw_bits_idx = table_size - body->param.keyword->bits_start; + PUSH_INSN2(ret, location, checkkeyword, INT2FIX(kw_bits_idx + VM_ENV_DATA_SIZE - 1), INT2FIX(optional_index)); + PUSH_INSNL(ret, location, branchif, end_label); + PM_COMPILE(value); + PUSH_SETLOCAL(ret, location, index.index, index.level); + PUSH_LABEL(ret, end_label); + } + optional_index++; + break; + } + case PM_REQUIRED_KEYWORD_PARAMETER_NODE: + // def foo(a, (b, *c, d), e = 1, *f, g, (h, *i, j), k:, l: 1, **m, &n) + // ^^ + break; + default: + rb_bug("Unexpected keyword parameter node type %s", pm_node_type_to_str(PM_NODE_TYPE(keyword_parameter_node))); + } } - else { - // Establish branch coverage for the case node. - VALUE branches = Qfalse; - rb_code_location_t case_location = { 0 }; - int branch_id = 0; + } - if (PM_BRANCH_COVERAGE_P(iseq)) { - case_location = pm_code_location(scope_node, (const pm_node_t *) cast); - branches = decl_branch_base(iseq, PTR2NUM(cast), &case_location, "case"); + if (requireds_list && requireds_list->size) { + for (size_t i = 0; i < requireds_list->size; i++) { + // For each MultiTargetNode, we're going to have one additional + // anonymous local not represented in the locals table. We want + // to account for this in our table size. + const pm_node_t *required = requireds_list->nodes[i]; + + if (PM_NODE_TYPE_P(required, PM_MULTI_TARGET_NODE)) { + PUSH_GETLOCAL(ret, location, table_size - (int)i, 0); + pm_compile_destructured_param_writes(iseq, (const pm_multi_target_node_t *) required, ret, scope_node); } + } + } - // This is the label where everything will fall into if none of the - // conditions matched. - LABEL *else_label = NEW_LABEL(location.line); + if (posts_list && posts_list->size) { + for (size_t i = 0; i < posts_list->size; i++) { + // For each MultiTargetNode, we're going to have one additional + // anonymous local not represented in the locals table. We want + // to account for this in our table size. + const pm_node_t *post = posts_list->nodes[i]; - // It's possible for us to speed up the case node by using a - // dispatch hash. This is a hash that maps the conditions of the - // various when clauses to the labels of their bodies. If we can - // compile the conditions into a hash key, then we can use a hash - // lookup to jump directly to the correct when clause body. - VALUE dispatch = Qundef; - if (ISEQ_COMPILE_DATA(iseq)->option->specialized_instruction) { - dispatch = rb_hash_new(); - RHASH_TBL_RAW(dispatch)->type = &cdhash_type; + if (PM_NODE_TYPE_P(post, PM_MULTI_TARGET_NODE)) { + PUSH_GETLOCAL(ret, location, table_size - body->param.post_start - (int) i, 0); + pm_compile_destructured_param_writes(iseq, (const pm_multi_target_node_t *) post, ret, scope_node); } + } + } - // We're going to loop through each of the conditions in the case - // node and compile each of their contents into both the cond_seq - // and the body_seq. Each condition will use its own label to jump - // from its conditions into its body. - // - // Note that none of the code in the loop below should be adding - // anything to ret, as we're going to be laying out the entire case - // node instructions later. - for (size_t clause_index = 0; clause_index < conditions->size; clause_index++) { - const pm_when_node_t *clause = (const pm_when_node_t *) conditions->nodes[clause_index]; - pm_node_location_t clause_location = PM_NODE_START_LOCATION(parser, (const pm_node_t *) clause); - - const pm_node_list_t *conditions = &clause->conditions; - LABEL *label = NEW_LABEL(clause_location.line); - - // Compile each of the conditions for the when clause into the - // cond_seq. Each one should have a unique comparison that then - // jumps into the body if it matches. - for (size_t condition_index = 0; condition_index < conditions->size; condition_index++) { - const pm_node_t *condition = conditions->nodes[condition_index]; - const pm_node_location_t condition_location = PM_NODE_START_LOCATION(parser, condition); - - // If we haven't already abandoned the optimization, then - // we're going to try to compile the condition into the - // dispatch hash. - if (dispatch != Qundef) { - dispatch = pm_compile_case_node_dispatch(iseq, dispatch, condition, label, scope_node); - } + switch (body->type) { + case ISEQ_TYPE_PLAIN: { + RUBY_ASSERT(PM_NODE_TYPE_P(scope_node->ast_node, PM_INTERPOLATED_REGULAR_EXPRESSION_NODE)); - if (PM_NODE_TYPE_P(condition, PM_SPLAT_NODE)) { - PUSH_INSN(cond_seq, condition_location, dup); - pm_compile_node(iseq, condition, cond_seq, false, scope_node); - PUSH_INSN1(cond_seq, condition_location, checkmatch, INT2FIX(VM_CHECKMATCH_TYPE_CASE | VM_CHECKMATCH_ARRAY)); - } - else { - if (PM_NODE_TYPE_P(condition, PM_STRING_NODE)) { - const pm_string_node_t *string = (const pm_string_node_t *) condition; - VALUE value = parse_static_literal_string(iseq, scope_node, condition, &string->unescaped); - PUSH_INSN1(cond_seq, condition_location, putobject, value); - } - else { - pm_compile_node(iseq, condition, cond_seq, false, scope_node); - } + const pm_interpolated_regular_expression_node_t *cast = (const pm_interpolated_regular_expression_node_t *) scope_node->ast_node; + pm_compile_regexp_dynamic(iseq, (const pm_node_t *) cast, &cast->parts, &location, ret, popped, scope_node); - PUSH_INSN1(cond_seq, condition_location, topn, INT2FIX(1)); - PUSH_SEND_WITH_FLAG(cond_seq, condition_location, idEqq, INT2NUM(1), INT2FIX(VM_CALL_FCALL | VM_CALL_ARGS_SIMPLE)); - } + break; + } + case ISEQ_TYPE_BLOCK: { + LABEL *start = ISEQ_COMPILE_DATA(iseq)->start_label = NEW_LABEL(0); + LABEL *end = ISEQ_COMPILE_DATA(iseq)->end_label = NEW_LABEL(0); + const pm_node_location_t block_location = { .line = body->location.first_lineno, .node_id = -1 }; - PUSH_INSNL(cond_seq, condition_location, branchif, label); - } + start->rescued = LABEL_RESCUE_BEG; + end->rescued = LABEL_RESCUE_END; - // Now, add the label to the body and compile the body of the - // when clause. This involves popping the predicate, compiling - // the statements to be executed, and then compiling a jump to - // the end of the case node. - PUSH_LABEL(body_seq, label); - PUSH_INSN(body_seq, clause_location, pop); - - // Establish branch coverage for the when clause. - if (PM_BRANCH_COVERAGE_P(iseq)) { - rb_code_location_t branch_location = pm_code_location(scope_node, clause->statements != NULL ? ((const pm_node_t *) clause->statements) : ((const pm_node_t *) clause)); - add_trace_branch_coverage(iseq, body_seq, &branch_location, branch_location.beg_pos.column, branch_id++, "when", branches); - } + // For nodes automatically assign the iteration variable to whatever + // index variable. We need to handle that write here because it has + // to happen in the context of the block. Note that this happens + // before the B_CALL tracepoint event. + if (PM_NODE_TYPE_P(scope_node->ast_node, PM_FOR_NODE)) { + pm_compile_for_node_index(iseq, ((const pm_for_node_t *) scope_node->ast_node)->index, ret, scope_node); + } - if (clause->statements != NULL) { - pm_compile_node(iseq, (const pm_node_t *) clause->statements, body_seq, popped, scope_node); - } - else if (!popped) { - PUSH_SYNTHETIC_PUTNIL(body_seq, iseq); - } + PUSH_TRACE(ret, RUBY_EVENT_B_CALL); + PUSH_INSN(ret, block_location, nop); + PUSH_LABEL(ret, start); - PUSH_INSNL(body_seq, clause_location, jump, end_label); - } + if (scope_node->body != NULL) { + switch (PM_NODE_TYPE(scope_node->ast_node)) { + case PM_POST_EXECUTION_NODE: { + const pm_post_execution_node_t *cast = (const pm_post_execution_node_t *) scope_node->ast_node; + PUSH_INSN1(ret, block_location, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE)); - // Now that we have compiled the conditions and the bodies of the - // various when clauses, we can compile the predicate, lay out the - // conditions, compile the fallback subsequent if there is one, and - // finally put in the bodies of the when clauses. - PM_COMPILE_NOT_POPPED(cast->predicate); + // We create another ScopeNode from the statements within the PostExecutionNode + pm_scope_node_t next_scope_node; + pm_scope_node_init((const pm_node_t *) cast->statements, &next_scope_node, scope_node); - // If we have a dispatch hash, then we'll use it here to create the - // optimization. - if (dispatch != Qundef) { - PUSH_INSN(ret, location, dup); - PUSH_INSN2(ret, location, opt_case_dispatch, dispatch, else_label); - LABEL_REF(else_label); + const rb_iseq_t *block = NEW_CHILD_ISEQ(&next_scope_node, make_name_for_block(body->parent_iseq), ISEQ_TYPE_BLOCK, location.line); + pm_scope_node_destroy(&next_scope_node); + + PUSH_CALL_WITH_BLOCK(ret, block_location, id_core_set_postexe, INT2FIX(0), block); + break; + } + case PM_INTERPOLATED_REGULAR_EXPRESSION_NODE: { + const pm_interpolated_regular_expression_node_t *cast = (const pm_interpolated_regular_expression_node_t *) scope_node->ast_node; + pm_compile_regexp_dynamic(iseq, (const pm_node_t *) cast, &cast->parts, &location, ret, popped, scope_node); + break; + } + default: + pm_compile_node(iseq, scope_node->body, ret, popped, scope_node); + break; } + } + else { + PUSH_INSN(ret, block_location, putnil); + } - PUSH_SEQ(ret, cond_seq); + PUSH_LABEL(ret, end); + PUSH_TRACE(ret, RUBY_EVENT_B_RETURN); + ISEQ_COMPILE_DATA(iseq)->last_line = body->location.code_location.end_pos.lineno; - // Compile either the explicit else clause or an implicit else - // clause. - PUSH_LABEL(ret, else_label); + /* wide range catch handler must put at last */ + PUSH_CATCH_ENTRY(CATCH_TYPE_REDO, start, end, NULL, start); + PUSH_CATCH_ENTRY(CATCH_TYPE_NEXT, start, end, NULL, end); + break; + } + case ISEQ_TYPE_ENSURE: { + const pm_node_location_t statements_location = (scope_node->body != NULL ? PM_NODE_START_LOCATION(scope_node->parser, scope_node->body) : location); + iseq_set_exception_local_table(iseq); - if (cast->else_clause != NULL) { - pm_node_location_t else_location = PM_NODE_START_LOCATION(parser, cast->else_clause->statements != NULL ? ((const pm_node_t *) cast->else_clause->statements) : ((const pm_node_t *) cast->else_clause)); - PUSH_INSN(ret, else_location, pop); + if (scope_node->body != NULL) { + PM_COMPILE_POPPED((const pm_node_t *) scope_node->body); + } - // Establish branch coverage for the else clause. - if (PM_BRANCH_COVERAGE_P(iseq)) { - rb_code_location_t branch_location = pm_code_location(scope_node, cast->else_clause->statements != NULL ? ((const pm_node_t *) cast->else_clause->statements) : ((const pm_node_t *) cast->else_clause)); - add_trace_branch_coverage(iseq, ret, &branch_location, branch_location.beg_pos.column, branch_id, "else", branches); - } + PUSH_GETLOCAL(ret, statements_location, 1, 0); + PUSH_INSN1(ret, statements_location, throw, INT2FIX(0)); + return; + } + case ISEQ_TYPE_METHOD: { + ISEQ_COMPILE_DATA(iseq)->root_node = (const void *) scope_node->body; + PUSH_TRACE(ret, RUBY_EVENT_CALL); - PM_COMPILE((const pm_node_t *) cast->else_clause); - PUSH_INSNL(ret, else_location, jump, end_label); - } - else { - PUSH_INSN(ret, location, pop); + if (scope_node->body) { + PM_COMPILE((const pm_node_t *) scope_node->body); + } + else { + PUSH_INSN(ret, location, putnil); + } - // Establish branch coverage for the implicit else clause. - if (PM_BRANCH_COVERAGE_P(iseq)) { - add_trace_branch_coverage(iseq, ret, &case_location, case_location.beg_pos.column, branch_id, "else", branches); - } + ISEQ_COMPILE_DATA(iseq)->root_node = (const void *) scope_node->body; + PUSH_TRACE(ret, RUBY_EVENT_RETURN); - if (!popped) PUSH_INSN(ret, location, putnil); - PUSH_INSNL(ret, location, jump, end_label); - } + ISEQ_COMPILE_DATA(iseq)->last_line = body->location.code_location.end_pos.lineno; + break; + } + case ISEQ_TYPE_RESCUE: { + iseq_set_exception_local_table(iseq); + if (PM_NODE_TYPE_P(scope_node->ast_node, PM_RESCUE_MODIFIER_NODE)) { + LABEL *lab = NEW_LABEL(location.line); + LABEL *rescue_end = NEW_LABEL(location.line); + PUSH_GETLOCAL(ret, location, LVAR_ERRINFO, 0); + PUSH_INSN1(ret, location, putobject, rb_eStandardError); + PUSH_INSN1(ret, location, checkmatch, INT2FIX(VM_CHECKMATCH_TYPE_RESCUE)); + PUSH_INSNL(ret, location, branchif, lab); + PUSH_INSNL(ret, location, jump, rescue_end); + PUSH_LABEL(ret, lab); + PUSH_TRACE(ret, RUBY_EVENT_RESCUE); + PM_COMPILE((const pm_node_t *) scope_node->body); + PUSH_INSN(ret, location, leave); + PUSH_LABEL(ret, rescue_end); + PUSH_GETLOCAL(ret, location, LVAR_ERRINFO, 0); } - - PUSH_SEQ(ret, body_seq); - PUSH_LABEL(ret, end_label); + else { + PM_COMPILE((const pm_node_t *) scope_node->ast_node); + } + PUSH_INSN1(ret, location, throw, INT2FIX(0)); return; } - case PM_CASE_MATCH_NODE: { - // case foo; in bar; end - // ^^^^^^^^^^^^^^^^^^^^^ - // - // If you use the `case` keyword to create a case match node, it will - // match against all of the `in` clauses until it finds one that - // matches. If it doesn't find one, it can optionally fall back to an - // `else` clause. If none is present and a match wasn't found, it will - // raise an appropriate error. - const pm_case_match_node_t *cast = (const pm_case_match_node_t *) node; + default: + if (scope_node->body) { + PM_COMPILE((const pm_node_t *) scope_node->body); + } + else { + PUSH_INSN(ret, location, putnil); + } + break; + } - // This is the anchor that we will compile the bodies of the various - // `in` nodes into. We'll make sure that the patterns that are compiled - // jump into the correct spots within this anchor. - DECL_ANCHOR(body_seq); - INIT_ANCHOR(body_seq); + if (PM_NODE_TYPE_P(scope_node->ast_node, PM_CLASS_NODE) || PM_NODE_TYPE_P(scope_node->ast_node, PM_MODULE_NODE)) { + const pm_node_location_t end_location = PM_NODE_END_LOCATION(scope_node->parser, scope_node->ast_node); + PUSH_TRACE(ret, RUBY_EVENT_END); + ISEQ_COMPILE_DATA(iseq)->last_line = end_location.line; + } - // This is the anchor that we will compile the patterns of the various - // `in` nodes into. If a match is found, they will need to jump into the - // body_seq anchor to the correct spot. - DECL_ANCHOR(cond_seq); - INIT_ANCHOR(cond_seq); + if (!PM_NODE_TYPE_P(scope_node->ast_node, PM_ENSURE_NODE)) { + const pm_node_location_t location = { .line = ISEQ_COMPILE_DATA(iseq)->last_line, .node_id = -1 }; + PUSH_INSN(ret, location, leave); + } +} - // This label is used to indicate the end of the entire node. It is - // jumped to after the entire stack is cleaned up. - LABEL *end_label = NEW_LABEL(location.line); +static inline void +pm_compile_alias_global_variable_node(rb_iseq_t *iseq, const pm_alias_global_variable_node_t *node, const pm_node_location_t *location, LINK_ANCHOR *const ret, bool popped, pm_scope_node_t *scope_node) +{ + // alias $foo $bar + // ^^^^^^^^^^^^^^^ + PUSH_INSN1(ret, *location, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE)); - // This label is used as the fallback for the case match. If no match is - // found, then we jump to this label. This is either an `else` clause or - // an error handler. - LABEL *else_label = NEW_LABEL(location.line); + { + const pm_location_t *name_loc = &node->new_name->location; + VALUE operand = ID2SYM(rb_intern3((const char *) name_loc->start, name_loc->end - name_loc->start, scope_node->encoding)); + PUSH_INSN1(ret, *location, putobject, operand); + } - // We're going to use this to uniquely identify each branch so that we - // can track coverage information. - rb_code_location_t case_location = { 0 }; - VALUE branches = Qfalse; - int branch_id = 0; + { + const pm_location_t *name_loc = &node->old_name->location; + VALUE operand = ID2SYM(rb_intern3((const char *) name_loc->start, name_loc->end - name_loc->start, scope_node->encoding)); + PUSH_INSN1(ret, *location, putobject, operand); + } - if (PM_BRANCH_COVERAGE_P(iseq)) { - case_location = pm_code_location(scope_node, (const pm_node_t *) cast); - branches = decl_branch_base(iseq, PTR2NUM(cast), &case_location, "case"); - } + PUSH_SEND(ret, *location, id_core_set_variable_alias, INT2FIX(2)); + if (popped) PUSH_INSN(ret, *location, pop); +} - // If there is only one pattern, then the behavior changes a bit. It - // effectively gets treated as a match required node (this is how it is - // represented in the other parser). - bool in_single_pattern = cast->else_clause == NULL && cast->conditions.size == 1; +static inline void +pm_compile_alias_method_node(rb_iseq_t *iseq, const pm_alias_method_node_t *node, const pm_node_location_t *location, LINK_ANCHOR *const ret, bool popped, pm_scope_node_t *scope_node) +{ + PUSH_INSN1(ret, *location, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE)); + PUSH_INSN1(ret, *location, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_CBASE)); + PM_COMPILE_NOT_POPPED(node->new_name); + PM_COMPILE_NOT_POPPED(node->old_name); - // First, we're going to push a bunch of stuff onto the stack that is - // going to serve as our scratch space. - if (in_single_pattern) { - PUSH_INSN(ret, location, putnil); // key error key - PUSH_INSN(ret, location, putnil); // key error matchee - PUSH_INSN1(ret, location, putobject, Qfalse); // key error? - PUSH_INSN(ret, location, putnil); // error string - } + PUSH_SEND(ret, *location, id_core_set_method_alias, INT2FIX(3)); + if (popped) PUSH_INSN(ret, *location, pop); +} - // Now we're going to compile the value to match against. - PUSH_INSN(ret, location, putnil); // deconstruct cache - PM_COMPILE_NOT_POPPED(cast->predicate); +static inline void +pm_compile_and_node(rb_iseq_t *iseq, const pm_and_node_t *node, const pm_node_location_t *location, LINK_ANCHOR *const ret, bool popped, pm_scope_node_t *scope_node) +{ + LABEL *end_label = NEW_LABEL(location->line); - // Next, we'll loop through every in clause and compile its body into - // the body_seq anchor and its pattern into the cond_seq anchor. We'll - // make sure the pattern knows how to jump correctly into the body if it - // finds a match. - for (size_t index = 0; index < cast->conditions.size; index++) { - const pm_node_t *condition = cast->conditions.nodes[index]; - RUBY_ASSERT(PM_NODE_TYPE_P(condition, PM_IN_NODE)); + PM_COMPILE_NOT_POPPED(node->left); + if (!popped) PUSH_INSN(ret, *location, dup); + PUSH_INSNL(ret, *location, branchunless, end_label); - const pm_in_node_t *in_node = (const pm_in_node_t *) condition; - const pm_node_location_t in_location = PM_NODE_START_LOCATION(parser, in_node); - const pm_node_location_t pattern_location = PM_NODE_START_LOCATION(parser, in_node->pattern); + if (!popped) PUSH_INSN(ret, *location, pop); + PM_COMPILE(node->right); + PUSH_LABEL(ret, end_label); +} - if (branch_id) { - PUSH_INSN(body_seq, in_location, putnil); +static inline void +pm_compile_array_node(rb_iseq_t *iseq, const pm_node_t *node, const pm_node_list_t *elements, const pm_node_location_t *location, LINK_ANCHOR *const ret, bool popped, pm_scope_node_t *scope_node) +{ + // If every node in the array is static, then we can compile the entire + // array now instead of later. + if (PM_NODE_FLAG_P(node, PM_NODE_FLAG_STATIC_LITERAL)) { + // We're only going to compile this node if it's not popped. If it + // is popped, then we know we don't need to do anything since it's + // statically known. + if (!popped) { + if (elements->size) { + VALUE value = pm_static_literal_value(iseq, node, scope_node); + PUSH_INSN1(ret, *location, duparray, value); + } + else { + PUSH_INSN1(ret, *location, newarray, INT2FIX(0)); } + } + return; + } - LABEL *body_label = NEW_LABEL(in_location.line); - PUSH_LABEL(body_seq, body_label); - PUSH_INSN1(body_seq, in_location, adjuststack, INT2FIX(in_single_pattern ? 6 : 2)); + // Here since we know there are possible side-effects inside the + // array contents, we're going to build it entirely at runtime. + // We'll do this by pushing all of the elements onto the stack and + // then combining them with newarray. + // + // If this array is popped, then this serves only to ensure we enact + // all side-effects (like method calls) that are contained within + // the array contents. + // + // We treat all sequences of non-splat elements as their + // own arrays, followed by a newarray, and then continually + // concat the arrays with the SplatNode nodes. + const int max_new_array_size = 0x100; + const unsigned int min_tmp_array_size = 0x40; - // Establish branch coverage for the in clause. - if (PM_BRANCH_COVERAGE_P(iseq)) { - rb_code_location_t branch_location = pm_code_location(scope_node, in_node->statements != NULL ? ((const pm_node_t *) in_node->statements) : ((const pm_node_t *) in_node)); - add_trace_branch_coverage(iseq, body_seq, &branch_location, branch_location.beg_pos.column, branch_id++, "in", branches); - } + int new_array_size = 0; + bool first_chunk = true; - if (in_node->statements != NULL) { - PM_COMPILE_INTO_ANCHOR(body_seq, (const pm_node_t *) in_node->statements); - } - else if (!popped) { - PUSH_SYNTHETIC_PUTNIL(body_seq, iseq); - } + // This is an optimization wherein we keep track of whether or not + // the previous element was a static literal. If it was, then we do + // not attempt to check if we have a subarray that can be optimized. + // If it was not, then we do check. + bool static_literal = false; - PUSH_INSNL(body_seq, in_location, jump, end_label); - LABEL *next_pattern_label = NEW_LABEL(pattern_location.line); + // Either create a new array, or push to the existing array. +#define FLUSH_CHUNK \ + if (new_array_size) { \ + if (first_chunk) PUSH_INSN1(ret, *location, newarray, INT2FIX(new_array_size)); \ + else PUSH_INSN1(ret, *location, pushtoarray, INT2FIX(new_array_size)); \ + first_chunk = false; \ + new_array_size = 0; \ + } - PUSH_INSN(cond_seq, pattern_location, dup); - pm_compile_pattern(iseq, scope_node, in_node->pattern, cond_seq, body_label, next_pattern_label, in_single_pattern, false, true, 2); - PUSH_LABEL(cond_seq, next_pattern_label); - LABEL_UNREMOVABLE(next_pattern_label); - } + for (size_t index = 0; index < elements->size; index++) { + const pm_node_t *element = elements->nodes[index]; - if (cast->else_clause != NULL) { - // If we have an `else` clause, then this becomes our fallback (and - // there is no need to compile in code to potentially raise an - // error). - const pm_else_node_t *else_node = cast->else_clause; + if (PM_NODE_TYPE_P(element, PM_SPLAT_NODE)) { + FLUSH_CHUNK; - PUSH_LABEL(cond_seq, else_label); - PUSH_INSN(cond_seq, location, pop); - PUSH_INSN(cond_seq, location, pop); + const pm_splat_node_t *splat_element = (const pm_splat_node_t *) element; + if (splat_element->expression) { + PM_COMPILE_NOT_POPPED(splat_element->expression); + } + else { + pm_local_index_t index = pm_lookup_local_index(iseq, scope_node, PM_CONSTANT_MULT, 0); + PUSH_GETLOCAL(ret, *location, index.index, index.level); + } - // Establish branch coverage for the else clause. - if (PM_BRANCH_COVERAGE_P(iseq)) { - rb_code_location_t branch_location = pm_code_location(scope_node, else_node->statements != NULL ? ((const pm_node_t *) else_node->statements) : ((const pm_node_t *) else_node)); - add_trace_branch_coverage(iseq, cond_seq, &branch_location, branch_location.beg_pos.column, branch_id, "else", branches); + if (first_chunk) { + // If this is the first element of the array then we + // need to splatarray the elements into the list. + PUSH_INSN1(ret, *location, splatarray, Qtrue); + first_chunk = false; + } + else { + PUSH_INSN(ret, *location, concattoarray); } - PM_COMPILE_INTO_ANCHOR(cond_seq, (const pm_node_t *) else_node); - PUSH_INSNL(cond_seq, location, jump, end_label); - PUSH_INSN(cond_seq, location, putnil); - if (popped) PUSH_INSN(cond_seq, location, putnil); + static_literal = false; } - else { - // Otherwise, if we do not have an `else` clause, we will compile in - // the code to handle raising an appropriate error. - PUSH_LABEL(cond_seq, else_label); - - // Establish branch coverage for the implicit else clause. - add_trace_branch_coverage(iseq, cond_seq, &case_location, case_location.beg_pos.column, branch_id, "else", branches); - - if (in_single_pattern) { - pm_compile_pattern_error_handler(iseq, scope_node, node, cond_seq, end_label, popped); + else if (PM_NODE_TYPE_P(element, PM_KEYWORD_HASH_NODE)) { + if (new_array_size == 0 && first_chunk) { + PUSH_INSN1(ret, *location, newarray, INT2FIX(0)); + first_chunk = false; } else { - PUSH_INSN1(cond_seq, location, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE)); - PUSH_INSN1(cond_seq, location, putobject, rb_eNoMatchingPatternError); - PUSH_INSN1(cond_seq, location, topn, INT2FIX(2)); - PUSH_SEND(cond_seq, location, id_core_raise, INT2FIX(2)); - - PUSH_INSN1(cond_seq, location, adjuststack, INT2FIX(3)); - if (!popped) PUSH_INSN(cond_seq, location, putnil); - PUSH_INSNL(cond_seq, location, jump, end_label); - PUSH_INSN1(cond_seq, location, dupn, INT2FIX(1)); - if (popped) PUSH_INSN(cond_seq, location, putnil); + FLUSH_CHUNK; } - } - // At the end of all of this compilation, we will add the code for the - // conditions first, then the various bodies, then mark the end of the - // entire sequence with the end label. - PUSH_SEQ(ret, cond_seq); - PUSH_SEQ(ret, body_seq); - PUSH_LABEL(ret, end_label); + // If we get here, then this is the last element of the + // array/arguments, because it cannot be followed by + // anything else without a syntax error. This looks like: + // + // [foo, bar, baz: qux] + // ^^^^^^^^ + // + // [foo, bar, **baz] + // ^^^^^ + // + const pm_keyword_hash_node_t *keyword_hash = (const pm_keyword_hash_node_t *) element; + pm_compile_hash_elements(iseq, element, &keyword_hash->elements, false, ret, scope_node); - return; - } - case PM_CLASS_NODE: { - // class Foo; end - // ^^^^^^^^^^^^^^ - const pm_class_node_t *cast = (const pm_class_node_t *) node; + // This boolean controls the manner in which we push the + // hash onto the array. If it's all keyword splats, then we + // can use the very specialized pushtoarraykwsplat + // instruction to check if it's empty before we push it. + size_t splats = 0; + while (splats < keyword_hash->elements.size && PM_NODE_TYPE_P(keyword_hash->elements.nodes[splats], PM_ASSOC_SPLAT_NODE)) splats++; - ID class_id = pm_constant_id_lookup(scope_node, cast->name); - VALUE class_name = rb_str_freeze(rb_sprintf("", rb_id2str(class_id))); + if (keyword_hash->elements.size == splats) { + PUSH_INSN(ret, *location, pushtoarraykwsplat); + } + else { + new_array_size++; + } + } + else if ( + PM_NODE_FLAG_P(element, PM_NODE_FLAG_STATIC_LITERAL) && + !PM_CONTAINER_P(element) && + !static_literal && + ((index + min_tmp_array_size) < elements->size) + ) { + // If we have a static literal, then there's the potential + // to group a bunch of them together with a literal array + // and then concat them together. + size_t right_index = index + 1; + while ( + right_index < elements->size && + PM_NODE_FLAG_P(elements->nodes[right_index], PM_NODE_FLAG_STATIC_LITERAL) && + !PM_CONTAINER_P(elements->nodes[right_index]) + ) right_index++; + + size_t tmp_array_size = right_index - index; + if (tmp_array_size >= min_tmp_array_size) { + VALUE tmp_array = rb_ary_hidden_new(tmp_array_size); + + // Create the temporary array. + for (; tmp_array_size; tmp_array_size--) + rb_ary_push(tmp_array, pm_static_literal_value(iseq, elements->nodes[index++], scope_node)); + + index--; // about to be incremented by for loop + OBJ_FREEZE(tmp_array); + + // Emit the optimized code. + FLUSH_CHUNK; + if (first_chunk) { + PUSH_INSN1(ret, *location, duparray, tmp_array); + first_chunk = false; + } + else { + PUSH_INSN1(ret, *location, putobject, tmp_array); + PUSH_INSN(ret, *location, concattoarray); + } + } + else { + PM_COMPILE_NOT_POPPED(element); + if (++new_array_size >= max_new_array_size) FLUSH_CHUNK; + static_literal = true; + } + } else { + PM_COMPILE_NOT_POPPED(element); + if (++new_array_size >= max_new_array_size) FLUSH_CHUNK; + static_literal = false; + } + } - pm_scope_node_t next_scope_node; - pm_scope_node_init((const pm_node_t *) cast, &next_scope_node, scope_node); + FLUSH_CHUNK; + if (popped) PUSH_INSN(ret, *location, pop); - const rb_iseq_t *class_iseq = NEW_CHILD_ISEQ(&next_scope_node, class_name, ISEQ_TYPE_CLASS, location.line); - pm_scope_node_destroy(&next_scope_node); +#undef FLUSH_CHUNK +} - // TODO: Once we merge constant path nodes correctly, fix this flag - const int flags = VM_DEFINECLASS_TYPE_CLASS | - (cast->superclass ? VM_DEFINECLASS_FLAG_HAS_SUPERCLASS : 0) | - pm_compile_class_path(iseq, cast->constant_path, &location, ret, false, scope_node); +static inline void +pm_compile_break_node(rb_iseq_t *iseq, const pm_break_node_t *node, const pm_node_location_t *location, LINK_ANCHOR *const ret, bool popped, pm_scope_node_t *scope_node) +{ + unsigned long throw_flag = 0; - if (cast->superclass) { - PM_COMPILE_NOT_POPPED(cast->superclass); + if (ISEQ_COMPILE_DATA(iseq)->redo_label != 0 && can_add_ensure_iseq(iseq)) { + /* while/until */ + LABEL *splabel = NEW_LABEL(0); + PUSH_LABEL(ret, splabel); + PUSH_ADJUST(ret, *location, ISEQ_COMPILE_DATA(iseq)->redo_label); + + if (node->arguments != NULL) { + PM_COMPILE_NOT_POPPED((const pm_node_t *) node->arguments); } else { - PUSH_INSN(ret, location, putnil); + PUSH_INSN(ret, *location, putnil); } - PUSH_INSN3(ret, location, defineclass, ID2SYM(class_id), class_iseq, INT2FIX(flags)); - RB_OBJ_WRITTEN(iseq, Qundef, (VALUE)class_iseq); + pm_add_ensure_iseq(ret, iseq, 0, scope_node); + PUSH_INSNL(ret, *location, jump, ISEQ_COMPILE_DATA(iseq)->end_label); + PUSH_ADJUST_RESTORE(ret, splabel); + if (!popped) PUSH_INSN(ret, *location, putnil); + } + else { + const rb_iseq_t *ip = iseq; - if (popped) PUSH_INSN(ret, location, pop); - return; - } - case PM_CLASS_VARIABLE_AND_WRITE_NODE: { - // @@foo &&= bar - // ^^^^^^^^^^^^^ - const pm_class_variable_and_write_node_t *cast = (const pm_class_variable_and_write_node_t *) node; - LABEL *end_label = NEW_LABEL(location.line); + while (ip) { + if (!ISEQ_COMPILE_DATA(ip)) { + ip = 0; + break; + } - ID name_id = pm_constant_id_lookup(scope_node, cast->name); - VALUE name = ID2SYM(name_id); + if (ISEQ_COMPILE_DATA(ip)->redo_label != 0) { + throw_flag = VM_THROW_NO_ESCAPE_FLAG; + } + else if (ISEQ_BODY(ip)->type == ISEQ_TYPE_BLOCK) { + throw_flag = 0; + } + else if (ISEQ_BODY(ip)->type == ISEQ_TYPE_EVAL) { + COMPILE_ERROR(iseq, location->line, "Invalid break"); + return; + } + else { + ip = ISEQ_BODY(ip)->parent_iseq; + continue; + } - PUSH_INSN2(ret, location, getclassvariable, name, get_cvar_ic_value(iseq, name_id)); - if (!popped) PUSH_INSN(ret, location, dup); + /* escape from block */ + if (node->arguments != NULL) { + PM_COMPILE_NOT_POPPED((const pm_node_t *) node->arguments); + } + else { + PUSH_INSN(ret, *location, putnil); + } - PUSH_INSNL(ret, location, branchunless, end_label); - if (!popped) PUSH_INSN(ret, location, pop); + PUSH_INSN1(ret, *location, throw, INT2FIX(throw_flag | TAG_BREAK)); + if (popped) PUSH_INSN(ret, *location, pop); - PM_COMPILE_NOT_POPPED(cast->value); - if (!popped) PUSH_INSN(ret, location, dup); + return; + } - PUSH_INSN2(ret, location, setclassvariable, name, get_cvar_ic_value(iseq, name_id)); - PUSH_LABEL(ret, end_label); + COMPILE_ERROR(iseq, location->line, "Invalid break"); + } +} - return; - } - case PM_CLASS_VARIABLE_OPERATOR_WRITE_NODE: { - // @@foo += bar - // ^^^^^^^^^^^^ - const pm_class_variable_operator_write_node_t *cast = (const pm_class_variable_operator_write_node_t *) node; +static inline void +pm_compile_call_node(rb_iseq_t *iseq, const pm_call_node_t *node, LINK_ANCHOR *const ret, bool popped, pm_scope_node_t *scope_node) +{ + ID method_id = pm_constant_id_lookup(scope_node, node->name); - ID name_id = pm_constant_id_lookup(scope_node, cast->name); - VALUE name = ID2SYM(name_id); + const pm_location_t *message_loc = &node->message_loc; + if (message_loc->start == NULL) message_loc = &node->base.location; - PUSH_INSN2(ret, location, getclassvariable, name, get_cvar_ic_value(iseq, name_id)); - PM_COMPILE_NOT_POPPED(cast->value); + const pm_node_location_t location = PM_LOCATION_START_LOCATION(scope_node->parser, message_loc, node->base.node_id); + const char *builtin_func; - ID method_id = pm_constant_id_lookup(scope_node, cast->binary_operator); - int flags = VM_CALL_ARGS_SIMPLE; - PUSH_SEND_WITH_FLAG(ret, location, method_id, INT2NUM(1), INT2FIX(flags)); + if (UNLIKELY(iseq_has_builtin_function_table(iseq)) && (builtin_func = pm_iseq_builtin_function_name(scope_node, node->receiver, method_id)) != NULL) { + pm_compile_builtin_function_call(iseq, ret, scope_node, node, &location, popped, ISEQ_COMPILE_DATA(iseq)->current_block, builtin_func); + return; + } - if (!popped) PUSH_INSN(ret, location, dup); - PUSH_INSN2(ret, location, setclassvariable, name, get_cvar_ic_value(iseq, name_id)); + LABEL *start = NEW_LABEL(location.line); + if (node->block) PUSH_LABEL(ret, start); - return; + switch (method_id) { + case idUMinus: { + if (pm_opt_str_freeze_p(iseq, node)) { + VALUE value = parse_static_literal_string(iseq, scope_node, node->receiver, &((const pm_string_node_t * ) node->receiver)->unescaped); + const struct rb_callinfo *callinfo = new_callinfo(iseq, idUMinus, 0, 0, NULL, FALSE); + PUSH_INSN2(ret, location, opt_str_uminus, value, callinfo); + return; + } + break; } - case PM_CLASS_VARIABLE_OR_WRITE_NODE: { - // @@foo ||= bar - // ^^^^^^^^^^^^^ - const pm_class_variable_or_write_node_t *cast = (const pm_class_variable_or_write_node_t *) node; - LABEL *end_label = NEW_LABEL(location.line); - LABEL *start_label = NEW_LABEL(location.line); + case idFreeze: { + if (pm_opt_str_freeze_p(iseq, node)) { + VALUE value = parse_static_literal_string(iseq, scope_node, node->receiver, &((const pm_string_node_t * ) node->receiver)->unescaped); + const struct rb_callinfo *callinfo = new_callinfo(iseq, idFreeze, 0, 0, NULL, FALSE); + PUSH_INSN2(ret, location, opt_str_freeze, value, callinfo); + return; + } + break; + } + case idAREF: { + if (pm_opt_aref_with_p(iseq, node)) { + const pm_string_node_t *string = (const pm_string_node_t *) ((const pm_arguments_node_t *) node->arguments)->arguments.nodes[0]; + VALUE value = parse_static_literal_string(iseq, scope_node, (const pm_node_t *) string, &string->unescaped); - ID name_id = pm_constant_id_lookup(scope_node, cast->name); - VALUE name = ID2SYM(name_id); + PM_COMPILE_NOT_POPPED(node->receiver); - PUSH_INSN(ret, location, putnil); - PUSH_INSN3(ret, location, defined, INT2FIX(DEFINED_CVAR), name, Qtrue); - PUSH_INSNL(ret, location, branchunless, start_label); + const struct rb_callinfo *callinfo = new_callinfo(iseq, idAREF, 1, 0, NULL, FALSE); + PUSH_INSN2(ret, location, opt_aref_with, value, callinfo); - PUSH_INSN2(ret, location, getclassvariable, name, get_cvar_ic_value(iseq, name_id)); - if (!popped) PUSH_INSN(ret, location, dup); + if (popped) { + PUSH_INSN(ret, location, pop); + } - PUSH_INSNL(ret, location, branchif, end_label); - if (!popped) PUSH_INSN(ret, location, pop); + return; + } + break; + } + case idASET: { + if (pm_opt_aset_with_p(iseq, node)) { + const pm_string_node_t *string = (const pm_string_node_t *) ((const pm_arguments_node_t *) node->arguments)->arguments.nodes[0]; + VALUE value = parse_static_literal_string(iseq, scope_node, (const pm_node_t *) string, &string->unescaped); - PUSH_LABEL(ret, start_label); - PM_COMPILE_NOT_POPPED(cast->value); - if (!popped) PUSH_INSN(ret, location, dup); + PM_COMPILE_NOT_POPPED(node->receiver); + PM_COMPILE_NOT_POPPED(((const pm_arguments_node_t *) node->arguments)->arguments.nodes[1]); - PUSH_INSN2(ret, location, setclassvariable, name, get_cvar_ic_value(iseq, name_id)); - PUSH_LABEL(ret, end_label); + if (!popped) { + PUSH_INSN(ret, location, swap); + PUSH_INSN1(ret, location, topn, INT2FIX(1)); + } - return; - } - case PM_CLASS_VARIABLE_READ_NODE: { - // @@foo - // ^^^^^ - if (!popped) { - const pm_class_variable_read_node_t *cast = (const pm_class_variable_read_node_t *) node; - ID name = pm_constant_id_lookup(scope_node, cast->name); - PUSH_INSN2(ret, location, getclassvariable, ID2SYM(name), get_cvar_ic_value(iseq, name)); + const struct rb_callinfo *callinfo = new_callinfo(iseq, idASET, 2, 0, NULL, FALSE); + PUSH_INSN2(ret, location, opt_aset_with, value, callinfo); + PUSH_INSN(ret, location, pop); + return; } - return; + break; } - case PM_CLASS_VARIABLE_WRITE_NODE: { - // @@foo = 1 - // ^^^^^^^^^ - const pm_class_variable_write_node_t *cast = (const pm_class_variable_write_node_t *) node; - PM_COMPILE_NOT_POPPED(cast->value); - if (!popped) PUSH_INSN(ret, location, dup); + } - ID name = pm_constant_id_lookup(scope_node, cast->name); - PUSH_INSN2(ret, location, setclassvariable, ID2SYM(name), get_cvar_ic_value(iseq, name)); + if (PM_NODE_FLAG_P(node, PM_CALL_NODE_FLAGS_ATTRIBUTE_WRITE) && !popped) { + PUSH_INSN(ret, location, putnil); + } - return; - } - case PM_CONSTANT_PATH_NODE: { - // Foo::Bar - // ^^^^^^^^ - VALUE parts; + if (node->receiver == NULL) { + PUSH_INSN(ret, location, putself); + } + else { + if (method_id == idCall && PM_NODE_TYPE_P(node->receiver, PM_LOCAL_VARIABLE_READ_NODE)) { + const pm_local_variable_read_node_t *read_node_cast = (const pm_local_variable_read_node_t *) node->receiver; + uint32_t node_id = node->receiver->node_id; + int idx, level; - if (ISEQ_COMPILE_DATA(iseq)->option->inline_const_cache && ((parts = pm_constant_path_parts(node, scope_node)) != Qnil)) { - ISEQ_BODY(iseq)->ic_size++; - PUSH_INSN1(ret, location, opt_getconstant_path, parts); + if (iseq_block_param_id_p(iseq, pm_constant_id_lookup(scope_node, read_node_cast->name), &idx, &level)) { + ADD_ELEM(ret, (LINK_ELEMENT *) new_insn_body(iseq, location.line, node_id, BIN(getblockparamproxy), 2, INT2FIX((idx) + VM_ENV_DATA_SIZE - 1), INT2FIX(level))); + } + else { + PM_COMPILE_NOT_POPPED(node->receiver); + } } else { - DECL_ANCHOR(prefix); - INIT_ANCHOR(prefix); + PM_COMPILE_NOT_POPPED(node->receiver); + } + } - DECL_ANCHOR(body); - INIT_ANCHOR(body); + pm_compile_call(iseq, node, ret, popped, scope_node, method_id, start); + return; +} - pm_compile_constant_path(iseq, node, prefix, body, popped, scope_node); - if (LIST_INSN_SIZE_ZERO(prefix)) { - PUSH_INSN(ret, location, putnil); - } - else { - PUSH_SEQ(ret, prefix); - } +static inline void +pm_compile_call_operator_write_node(rb_iseq_t *iseq, const pm_call_operator_write_node_t *node, const pm_node_location_t *location, LINK_ANCHOR *const ret, bool popped, pm_scope_node_t *scope_node) +{ + int flag = 0; - PUSH_SEQ(ret, body); - } + if (PM_NODE_FLAG_P(node, PM_CALL_NODE_FLAGS_IGNORE_VISIBILITY)) { + flag = VM_CALL_FCALL; + } - if (popped) PUSH_INSN(ret, location, pop); - return; - } - case PM_CONSTANT_PATH_AND_WRITE_NODE: { - // Foo::Bar &&= baz - // ^^^^^^^^^^^^^^^^ - const pm_constant_path_and_write_node_t *cast = (const pm_constant_path_and_write_node_t *) node; - pm_compile_constant_path_and_write_node(iseq, cast, 0, &location, ret, popped, scope_node); - return; - } - case PM_CONSTANT_PATH_OR_WRITE_NODE: { - // Foo::Bar ||= baz - // ^^^^^^^^^^^^^^^^ - const pm_constant_path_or_write_node_t *cast = (const pm_constant_path_or_write_node_t *) node; - pm_compile_constant_path_or_write_node(iseq, cast, 0, &location, ret, popped, scope_node); - return; - } - case PM_CONSTANT_PATH_OPERATOR_WRITE_NODE: { - // Foo::Bar += baz - // ^^^^^^^^^^^^^^^ - const pm_constant_path_operator_write_node_t *cast = (const pm_constant_path_operator_write_node_t *) node; - pm_compile_constant_path_operator_write_node(iseq, cast, 0, &location, ret, popped, scope_node); - return; - } - case PM_CONSTANT_PATH_WRITE_NODE: { - // Foo::Bar = 1 - // ^^^^^^^^^^^^ - const pm_constant_path_write_node_t *cast = (const pm_constant_path_write_node_t *) node; - pm_compile_constant_path_write_node(iseq, cast, 0, &location, ret, popped, scope_node); - return; - } - case PM_CONSTANT_READ_NODE: { - // Foo - // ^^^ - const pm_constant_read_node_t *cast = (const pm_constant_read_node_t *) node; - VALUE name = ID2SYM(pm_constant_id_lookup(scope_node, cast->name)); + PM_COMPILE_NOT_POPPED(node->receiver); - pm_compile_constant_read(iseq, name, &cast->base.location, location.node_id, ret, scope_node); - if (popped) PUSH_INSN(ret, location, pop); + LABEL *safe_label = NULL; + if (PM_NODE_FLAG_P(node, PM_CALL_NODE_FLAGS_SAFE_NAVIGATION)) { + safe_label = NEW_LABEL(location->line); + PUSH_INSN(ret, *location, dup); + PUSH_INSNL(ret, *location, branchnil, safe_label); + } - return; - } - case PM_CONSTANT_AND_WRITE_NODE: { - // Foo &&= bar - // ^^^^^^^^^^^ - const pm_constant_and_write_node_t *cast = (const pm_constant_and_write_node_t *) node; - pm_compile_constant_and_write_node(iseq, cast, 0, &location, ret, popped, scope_node); - return; - } - case PM_CONSTANT_OR_WRITE_NODE: { - // Foo ||= bar - // ^^^^^^^^^^^ - const pm_constant_or_write_node_t *cast = (const pm_constant_or_write_node_t *) node; - pm_compile_constant_or_write_node(iseq, cast, 0, &location, ret, popped, scope_node); - return; - } - case PM_CONSTANT_OPERATOR_WRITE_NODE: { - // Foo += bar - // ^^^^^^^^^^ - const pm_constant_operator_write_node_t *cast = (const pm_constant_operator_write_node_t *) node; - pm_compile_constant_operator_write_node(iseq, cast, 0, &location, ret, popped, scope_node); - return; - } - case PM_CONSTANT_WRITE_NODE: { - // Foo = 1 - // ^^^^^^^ - const pm_constant_write_node_t *cast = (const pm_constant_write_node_t *) node; - pm_compile_constant_write_node(iseq, cast, 0, &location, ret, popped, scope_node); - return; - } - case PM_DEF_NODE: { - // def foo; end - // ^^^^^^^^^^^^ - // - // def self.foo; end - // ^^^^^^^^^^^^^^^^^ - const pm_def_node_t *cast = (const pm_def_node_t *) node; - ID method_name = pm_constant_id_lookup(scope_node, cast->name); + PUSH_INSN(ret, *location, dup); - pm_scope_node_t next_scope_node; - pm_scope_node_init((const pm_node_t *) cast, &next_scope_node, scope_node); + ID id_read_name = pm_constant_id_lookup(scope_node, node->read_name); + PUSH_SEND_WITH_FLAG(ret, *location, id_read_name, INT2FIX(0), INT2FIX(flag)); - rb_iseq_t *method_iseq = NEW_ISEQ(&next_scope_node, rb_id2str(method_name), ISEQ_TYPE_METHOD, location.line); - pm_scope_node_destroy(&next_scope_node); + PM_COMPILE_NOT_POPPED(node->value); + ID id_operator = pm_constant_id_lookup(scope_node, node->binary_operator); + PUSH_SEND(ret, *location, id_operator, INT2FIX(1)); - if (cast->receiver) { - PM_COMPILE_NOT_POPPED(cast->receiver); - PUSH_INSN2(ret, location, definesmethod, ID2SYM(method_name), method_iseq); - } - else { - PUSH_INSN2(ret, location, definemethod, ID2SYM(method_name), method_iseq); - } - RB_OBJ_WRITTEN(iseq, Qundef, (VALUE) method_iseq); + if (!popped) { + PUSH_INSN(ret, *location, swap); + PUSH_INSN1(ret, *location, topn, INT2FIX(1)); + } - if (!popped) { - PUSH_INSN1(ret, location, putobject, ID2SYM(method_name)); - } + ID id_write_name = pm_constant_id_lookup(scope_node, node->write_name); + PUSH_SEND_WITH_FLAG(ret, *location, id_write_name, INT2FIX(1), INT2FIX(flag)); - return; - } - case PM_DEFINED_NODE: { - // defined?(a) - // ^^^^^^^^^^^ - const pm_defined_node_t *cast = (const pm_defined_node_t *) node; - pm_compile_defined_expr(iseq, cast->value, &location, ret, popped, scope_node, false); - return; - } - case PM_EMBEDDED_STATEMENTS_NODE: { - // "foo #{bar}" - // ^^^^^^ - const pm_embedded_statements_node_t *cast = (const pm_embedded_statements_node_t *) node; + if (safe_label != NULL && popped) PUSH_LABEL(ret, safe_label); + PUSH_INSN(ret, *location, pop); + if (safe_label != NULL && !popped) PUSH_LABEL(ret, safe_label); +} - if (cast->statements != NULL) { - PM_COMPILE((const pm_node_t *) (cast->statements)); - } - else { - PUSH_SYNTHETIC_PUTNIL(ret, iseq); +/** + * When we're compiling a case node, it's possible that we can speed it up using + * a dispatch hash, which will allow us to jump directly to the correct when + * clause body based on a hash lookup of the value. This can only happen when + * the conditions are literals that can be compiled into a hash key. + * + * This function accepts a dispatch hash and the condition of a when clause. It + * is responsible for compiling the condition into a hash key and then adding it + * to the dispatch hash. + * + * If the value can be successfully compiled into the hash, then this function + * returns the dispatch hash with the new key added. If the value cannot be + * compiled into the hash, then this function returns Qundef. In the case of + * Qundef, this function is signaling that the caller should abandon the + * optimization entirely. + */ +static VALUE +pm_compile_case_node_dispatch(rb_iseq_t *iseq, VALUE dispatch, const pm_node_t *node, LABEL *label, const pm_scope_node_t *scope_node) +{ + VALUE key = Qundef; + + switch (PM_NODE_TYPE(node)) { + case PM_FLOAT_NODE: { + key = pm_static_literal_value(iseq, node, scope_node); + double intptr; + + if (modf(RFLOAT_VALUE(key), &intptr) == 0.0) { + key = (FIXABLE(intptr) ? LONG2FIX((long) intptr) : rb_dbl2big(intptr)); } - if (popped) PUSH_INSN(ret, location, pop); - return; - } - case PM_EMBEDDED_VARIABLE_NODE: { - // "foo #@bar" - // ^^^^^ - const pm_embedded_variable_node_t *cast = (const pm_embedded_variable_node_t *) node; - PM_COMPILE(cast->variable); - return; + break; } - case PM_FALSE_NODE: { - // false - // ^^^^^ - if (!popped) { - PUSH_INSN1(ret, location, putobject, Qfalse); - } - return; + case PM_FALSE_NODE: + case PM_INTEGER_NODE: + case PM_NIL_NODE: + case PM_SOURCE_FILE_NODE: + case PM_SOURCE_LINE_NODE: + case PM_SYMBOL_NODE: + case PM_TRUE_NODE: + key = pm_static_literal_value(iseq, node, scope_node); + break; + case PM_STRING_NODE: { + const pm_string_node_t *cast = (const pm_string_node_t *) node; + key = parse_static_literal_string(iseq, scope_node, node, &cast->unescaped); + break; } - case PM_ENSURE_NODE: { - const pm_ensure_node_t *cast = (const pm_ensure_node_t *) node; - - if (cast->statements != NULL) { - LABEL *start = NEW_LABEL(location.line); - LABEL *end = NEW_LABEL(location.line); - PUSH_LABEL(ret, start); - - LABEL *prev_end_label = ISEQ_COMPILE_DATA(iseq)->end_label; - ISEQ_COMPILE_DATA(iseq)->end_label = end; + default: + return Qundef; + } - PM_COMPILE((const pm_node_t *) cast->statements); - ISEQ_COMPILE_DATA(iseq)->end_label = prev_end_label; - PUSH_LABEL(ret, end); - } + if (NIL_P(rb_hash_lookup(dispatch, key))) { + rb_hash_aset(dispatch, key, ((VALUE) label) | 1); + } - return; - } - case PM_ELSE_NODE: { - // if foo then bar else baz end - // ^^^^^^^^^^^^ - const pm_else_node_t *cast = (const pm_else_node_t *) node; + return dispatch; +} - if (cast->statements != NULL) { - PM_COMPILE((const pm_node_t *) cast->statements); - } - else if (!popped) { - PUSH_SYNTHETIC_PUTNIL(ret, iseq); - } +/** + * Compile a case node, representing a case statement with when clauses. + */ +static inline void +pm_compile_case_node(rb_iseq_t *iseq, const pm_case_node_t *cast, const pm_node_location_t *node_location, LINK_ANCHOR *const ret, bool popped, pm_scope_node_t *scope_node) +{ + const pm_parser_t *parser = scope_node->parser; + const pm_node_location_t location = *node_location; + const pm_node_list_t *conditions = &cast->conditions; - return; - } - case PM_FLIP_FLOP_NODE: { - // if foo .. bar; end - // ^^^^^^^^^^ - const pm_flip_flop_node_t *cast = (const pm_flip_flop_node_t *) node; + // This is the anchor that we will compile the conditions of the various + // `when` nodes into. If a match is found, they will need to jump into + // the body_seq anchor to the correct spot. + DECL_ANCHOR(cond_seq); + INIT_ANCHOR(cond_seq); - LABEL *final_label = NEW_LABEL(location.line); - LABEL *then_label = NEW_LABEL(location.line); - LABEL *else_label = NEW_LABEL(location.line); + // This is the anchor that we will compile the bodies of the various + // `when` nodes into. We'll make sure that the clauses that are compiled + // jump into the correct spots within this anchor. + DECL_ANCHOR(body_seq); + INIT_ANCHOR(body_seq); - pm_compile_flip_flop(cast, else_label, then_label, iseq, location.line, ret, popped, scope_node); + // This is the label where all of the when clauses will jump to if they + // have matched and are done executing their bodies. + LABEL *end_label = NEW_LABEL(location.line); - PUSH_LABEL(ret, then_label); - PUSH_INSN1(ret, location, putobject, Qtrue); - PUSH_INSNL(ret, location, jump, final_label); - PUSH_LABEL(ret, else_label); - PUSH_INSN1(ret, location, putobject, Qfalse); - PUSH_LABEL(ret, final_label); + // If we have a predicate on this case statement, then it's going to + // compare all of the various when clauses to the predicate. If we + // don't, then it's basically an if-elsif-else chain. + if (cast->predicate == NULL) { + // Establish branch coverage for the case node. + VALUE branches = Qfalse; + rb_code_location_t case_location = { 0 }; + int branch_id = 0; - return; - } - case PM_FLOAT_NODE: { - // 1.0 - // ^^^ - if (!popped) { - PUSH_INSN1(ret, location, putobject, parse_float((const pm_float_node_t *) node)); + if (PM_BRANCH_COVERAGE_P(iseq)) { + case_location = pm_code_location(scope_node, (const pm_node_t *) cast); + branches = decl_branch_base(iseq, PTR2NUM(cast), &case_location, "case"); } - return; - } - case PM_FOR_NODE: { - // for foo in bar do end - // ^^^^^^^^^^^^^^^^^^^^^ - const pm_for_node_t *cast = (const pm_for_node_t *) node; - LABEL *retry_label = NEW_LABEL(location.line); - LABEL *retry_end_l = NEW_LABEL(location.line); + // Loop through each clauses in the case node and compile each of + // the conditions within them into cond_seq. If they match, they + // should jump into their respective bodies in body_seq. + for (size_t clause_index = 0; clause_index < conditions->size; clause_index++) { + const pm_when_node_t *clause = (const pm_when_node_t *) conditions->nodes[clause_index]; + const pm_node_list_t *conditions = &clause->conditions; - // First, compile the collection that we're going to be iterating over. - PUSH_LABEL(ret, retry_label); - PM_COMPILE_NOT_POPPED(cast->collection); + int clause_lineno = pm_node_line_number(parser, (const pm_node_t *) clause); + LABEL *label = NEW_LABEL(clause_lineno); + PUSH_LABEL(body_seq, label); - // Next, create the new scope that is going to contain the block that - // will be passed to the each method. - pm_scope_node_t next_scope_node; - pm_scope_node_init((const pm_node_t *) cast, &next_scope_node, scope_node); + // Establish branch coverage for the when clause. + if (PM_BRANCH_COVERAGE_P(iseq)) { + rb_code_location_t branch_location = pm_code_location(scope_node, clause->statements != NULL ? ((const pm_node_t *) clause->statements) : ((const pm_node_t *) clause)); + add_trace_branch_coverage(iseq, body_seq, &branch_location, branch_location.beg_pos.column, branch_id++, "when", branches); + } - const rb_iseq_t *child_iseq = NEW_CHILD_ISEQ(&next_scope_node, make_name_for_block(iseq), ISEQ_TYPE_BLOCK, location.line); - pm_scope_node_destroy(&next_scope_node); + if (clause->statements != NULL) { + pm_compile_node(iseq, (const pm_node_t *) clause->statements, body_seq, popped, scope_node); + } + else if (!popped) { + PUSH_SYNTHETIC_PUTNIL(body_seq, iseq); + } - const rb_iseq_t *prev_block = ISEQ_COMPILE_DATA(iseq)->current_block; - ISEQ_COMPILE_DATA(iseq)->current_block = child_iseq; + PUSH_INSNL(body_seq, location, jump, end_label); - // Now, create the method call to each that will be used to iterate over - // the collection, and pass the newly created iseq as the block. - PUSH_SEND_WITH_BLOCK(ret, location, idEach, INT2FIX(0), child_iseq); - pm_compile_retry_end_label(iseq, ret, retry_end_l); + // Compile each of the conditions for the when clause into the + // cond_seq. Each one should have a unique condition and should + // jump to the subsequent one if it doesn't match. + for (size_t condition_index = 0; condition_index < conditions->size; condition_index++) { + const pm_node_t *condition = conditions->nodes[condition_index]; - if (popped) PUSH_INSN(ret, location, pop); - ISEQ_COMPILE_DATA(iseq)->current_block = prev_block; - PUSH_CATCH_ENTRY(CATCH_TYPE_BREAK, retry_label, retry_end_l, child_iseq, retry_end_l); - return; - } - case PM_FORWARDING_ARGUMENTS_NODE: { - rb_bug("Cannot compile a ForwardingArgumentsNode directly\n"); - return; - } - case PM_FORWARDING_SUPER_NODE: { - // super - // ^^^^^ - // - // super {} - // ^^^^^^^^ - const pm_forwarding_super_node_t *cast = (const pm_forwarding_super_node_t *) node; - const rb_iseq_t *block = NULL; + if (PM_NODE_TYPE_P(condition, PM_SPLAT_NODE)) { + pm_node_location_t cond_location = PM_NODE_START_LOCATION(parser, condition); + PUSH_INSN(cond_seq, cond_location, putnil); + pm_compile_node(iseq, condition, cond_seq, false, scope_node); + PUSH_INSN1(cond_seq, cond_location, checkmatch, INT2FIX(VM_CHECKMATCH_TYPE_WHEN | VM_CHECKMATCH_ARRAY)); + PUSH_INSNL(cond_seq, cond_location, branchif, label); + } + else { + LABEL *next_label = NEW_LABEL(pm_node_line_number(parser, condition)); + pm_compile_branch_condition(iseq, cond_seq, condition, label, next_label, false, scope_node); + PUSH_LABEL(cond_seq, next_label); + } + } + } - const rb_iseq_t *previous_block = NULL; - LABEL *retry_label = NULL; - LABEL *retry_end_l = NULL; + // Establish branch coverage for the else clause (implicit or + // explicit). + if (PM_BRANCH_COVERAGE_P(iseq)) { + rb_code_location_t branch_location; - if (cast->block != NULL) { - previous_block = ISEQ_COMPILE_DATA(iseq)->current_block; - ISEQ_COMPILE_DATA(iseq)->current_block = NULL; + if (cast->else_clause == NULL) { + branch_location = case_location; + } else if (cast->else_clause->statements == NULL) { + branch_location = pm_code_location(scope_node, (const pm_node_t *) cast->else_clause); + } else { + branch_location = pm_code_location(scope_node, (const pm_node_t *) cast->else_clause->statements); + } - retry_label = NEW_LABEL(location.line); - retry_end_l = NEW_LABEL(location.line); + add_trace_branch_coverage(iseq, cond_seq, &branch_location, branch_location.beg_pos.column, branch_id, "else", branches); + } - PUSH_LABEL(ret, retry_label); + // Compile the else clause if there is one. + if (cast->else_clause != NULL) { + pm_compile_node(iseq, (const pm_node_t *) cast->else_clause, cond_seq, popped, scope_node); } - else { - iseq_set_use_block(ISEQ_BODY(iseq)->local_iseq); + else if (!popped) { + PUSH_SYNTHETIC_PUTNIL(cond_seq, iseq); } - PUSH_INSN(ret, location, putself); - int flag = VM_CALL_ZSUPER | VM_CALL_SUPER | VM_CALL_FCALL; - - if (cast->block != NULL) { - pm_scope_node_t next_scope_node; - pm_scope_node_init((const pm_node_t *) cast->block, &next_scope_node, scope_node); + // Finally, jump to the end label if none of the other conditions + // have matched. + PUSH_INSNL(cond_seq, location, jump, end_label); + PUSH_SEQ(ret, cond_seq); + } + else { + // Establish branch coverage for the case node. + VALUE branches = Qfalse; + rb_code_location_t case_location = { 0 }; + int branch_id = 0; - ISEQ_COMPILE_DATA(iseq)->current_block = block = NEW_CHILD_ISEQ(&next_scope_node, make_name_for_block(iseq), ISEQ_TYPE_BLOCK, location.line); - pm_scope_node_destroy(&next_scope_node); - RB_OBJ_WRITTEN(iseq, Qundef, (VALUE) block); + if (PM_BRANCH_COVERAGE_P(iseq)) { + case_location = pm_code_location(scope_node, (const pm_node_t *) cast); + branches = decl_branch_base(iseq, PTR2NUM(cast), &case_location, "case"); } - DECL_ANCHOR(args); - INIT_ANCHOR(args); - - struct rb_iseq_constant_body *const body = ISEQ_BODY(iseq); - const rb_iseq_t *local_iseq = body->local_iseq; - const struct rb_iseq_constant_body *const local_body = ISEQ_BODY(local_iseq); + // This is the label where everything will fall into if none of the + // conditions matched. + LABEL *else_label = NEW_LABEL(location.line); - int argc = 0; - int depth = get_lvar_level(iseq); + // It's possible for us to speed up the case node by using a + // dispatch hash. This is a hash that maps the conditions of the + // various when clauses to the labels of their bodies. If we can + // compile the conditions into a hash key, then we can use a hash + // lookup to jump directly to the correct when clause body. + VALUE dispatch = Qundef; + if (ISEQ_COMPILE_DATA(iseq)->option->specialized_instruction) { + dispatch = rb_hash_new(); + RHASH_TBL_RAW(dispatch)->type = &cdhash_type; + } + + // We're going to loop through each of the conditions in the case + // node and compile each of their contents into both the cond_seq + // and the body_seq. Each condition will use its own label to jump + // from its conditions into its body. + // + // Note that none of the code in the loop below should be adding + // anything to ret, as we're going to be laying out the entire case + // node instructions later. + for (size_t clause_index = 0; clause_index < conditions->size; clause_index++) { + const pm_when_node_t *clause = (const pm_when_node_t *) conditions->nodes[clause_index]; + pm_node_location_t clause_location = PM_NODE_START_LOCATION(parser, (const pm_node_t *) clause); + + const pm_node_list_t *conditions = &clause->conditions; + LABEL *label = NEW_LABEL(clause_location.line); + + // Compile each of the conditions for the when clause into the + // cond_seq. Each one should have a unique comparison that then + // jumps into the body if it matches. + for (size_t condition_index = 0; condition_index < conditions->size; condition_index++) { + const pm_node_t *condition = conditions->nodes[condition_index]; + const pm_node_location_t condition_location = PM_NODE_START_LOCATION(parser, condition); + + // If we haven't already abandoned the optimization, then + // we're going to try to compile the condition into the + // dispatch hash. + if (dispatch != Qundef) { + dispatch = pm_compile_case_node_dispatch(iseq, dispatch, condition, label, scope_node); + } - if (ISEQ_BODY(ISEQ_BODY(iseq)->local_iseq)->param.flags.forwardable) { - flag |= VM_CALL_FORWARDING; - pm_local_index_t mult_local = pm_lookup_local_index(iseq, scope_node, PM_CONSTANT_DOT3, 0); - PUSH_GETLOCAL(ret, location, mult_local.index, mult_local.level); - PUSH_INSN2(ret, location, invokesuperforward, new_callinfo(iseq, 0, 0, flag, NULL, block != NULL), block); - if (popped) PUSH_INSN(ret, location, pop); - return; - } + if (PM_NODE_TYPE_P(condition, PM_SPLAT_NODE)) { + PUSH_INSN(cond_seq, condition_location, dup); + pm_compile_node(iseq, condition, cond_seq, false, scope_node); + PUSH_INSN1(cond_seq, condition_location, checkmatch, INT2FIX(VM_CHECKMATCH_TYPE_CASE | VM_CHECKMATCH_ARRAY)); + } + else { + if (PM_NODE_TYPE_P(condition, PM_STRING_NODE)) { + const pm_string_node_t *string = (const pm_string_node_t *) condition; + VALUE value = parse_static_literal_string(iseq, scope_node, condition, &string->unescaped); + PUSH_INSN1(cond_seq, condition_location, putobject, value); + } + else { + pm_compile_node(iseq, condition, cond_seq, false, scope_node); + } + + PUSH_INSN1(cond_seq, condition_location, topn, INT2FIX(1)); + PUSH_SEND_WITH_FLAG(cond_seq, condition_location, idEqq, INT2NUM(1), INT2FIX(VM_CALL_FCALL | VM_CALL_ARGS_SIMPLE)); + } - if (local_body->param.flags.has_lead) { - /* required arguments */ - for (int i = 0; i < local_body->param.lead_num; i++) { - int idx = local_body->local_table_size - i; - PUSH_GETLOCAL(args, location, idx, depth); + PUSH_INSNL(cond_seq, condition_location, branchif, label); + } + + // Now, add the label to the body and compile the body of the + // when clause. This involves popping the predicate, compiling + // the statements to be executed, and then compiling a jump to + // the end of the case node. + PUSH_LABEL(body_seq, label); + PUSH_INSN(body_seq, clause_location, pop); + + // Establish branch coverage for the when clause. + if (PM_BRANCH_COVERAGE_P(iseq)) { + rb_code_location_t branch_location = pm_code_location(scope_node, clause->statements != NULL ? ((const pm_node_t *) clause->statements) : ((const pm_node_t *) clause)); + add_trace_branch_coverage(iseq, body_seq, &branch_location, branch_location.beg_pos.column, branch_id++, "when", branches); } - argc += local_body->param.lead_num; - } - if (local_body->param.flags.has_opt) { - /* optional arguments */ - for (int j = 0; j < local_body->param.opt_num; j++) { - int idx = local_body->local_table_size - (argc + j); - PUSH_GETLOCAL(args, location, idx, depth); + if (clause->statements != NULL) { + pm_compile_node(iseq, (const pm_node_t *) clause->statements, body_seq, popped, scope_node); + } + else if (!popped) { + PUSH_SYNTHETIC_PUTNIL(body_seq, iseq); } - argc += local_body->param.opt_num; + + PUSH_INSNL(body_seq, clause_location, jump, end_label); } - if (local_body->param.flags.has_rest) { - /* rest argument */ - int idx = local_body->local_table_size - local_body->param.rest_start; - PUSH_GETLOCAL(args, location, idx, depth); - PUSH_INSN1(args, location, splatarray, Qfalse); + // Now that we have compiled the conditions and the bodies of the + // various when clauses, we can compile the predicate, lay out the + // conditions, compile the fallback subsequent if there is one, and + // finally put in the bodies of the when clauses. + PM_COMPILE_NOT_POPPED(cast->predicate); - argc = local_body->param.rest_start + 1; - flag |= VM_CALL_ARGS_SPLAT; + // If we have a dispatch hash, then we'll use it here to create the + // optimization. + if (dispatch != Qundef) { + PUSH_INSN(ret, location, dup); + PUSH_INSN2(ret, location, opt_case_dispatch, dispatch, else_label); + LABEL_REF(else_label); } - if (local_body->param.flags.has_post) { - /* post arguments */ - int post_len = local_body->param.post_num; - int post_start = local_body->param.post_start; + PUSH_SEQ(ret, cond_seq); - int j = 0; - for (; j < post_len; j++) { - int idx = local_body->local_table_size - (post_start + j); - PUSH_GETLOCAL(args, location, idx, depth); - } + // Compile either the explicit else clause or an implicit else + // clause. + PUSH_LABEL(ret, else_label); - if (local_body->param.flags.has_rest) { - // argc remains unchanged from rest branch - PUSH_INSN1(args, location, newarray, INT2FIX(j)); - PUSH_INSN(args, location, concatarray); + if (cast->else_clause != NULL) { + pm_node_location_t else_location = PM_NODE_START_LOCATION(parser, cast->else_clause->statements != NULL ? ((const pm_node_t *) cast->else_clause->statements) : ((const pm_node_t *) cast->else_clause)); + PUSH_INSN(ret, else_location, pop); + + // Establish branch coverage for the else clause. + if (PM_BRANCH_COVERAGE_P(iseq)) { + rb_code_location_t branch_location = pm_code_location(scope_node, cast->else_clause->statements != NULL ? ((const pm_node_t *) cast->else_clause->statements) : ((const pm_node_t *) cast->else_clause)); + add_trace_branch_coverage(iseq, ret, &branch_location, branch_location.beg_pos.column, branch_id, "else", branches); } - else { - argc = post_len + post_start; + + PM_COMPILE((const pm_node_t *) cast->else_clause); + PUSH_INSNL(ret, else_location, jump, end_label); + } + else { + PUSH_INSN(ret, location, pop); + + // Establish branch coverage for the implicit else clause. + if (PM_BRANCH_COVERAGE_P(iseq)) { + add_trace_branch_coverage(iseq, ret, &case_location, case_location.beg_pos.column, branch_id, "else", branches); } + + if (!popped) PUSH_INSN(ret, location, putnil); + PUSH_INSNL(ret, location, jump, end_label); } + } + + PUSH_SEQ(ret, body_seq); + PUSH_LABEL(ret, end_label); +} + +static inline void +pm_compile_case_match_node(rb_iseq_t *iseq, const pm_case_match_node_t *node, const pm_node_location_t *location, LINK_ANCHOR *const ret, bool popped, pm_scope_node_t *scope_node) +{ + // This is the anchor that we will compile the bodies of the various + // `in` nodes into. We'll make sure that the patterns that are compiled + // jump into the correct spots within this anchor. + DECL_ANCHOR(body_seq); + INIT_ANCHOR(body_seq); + + // This is the anchor that we will compile the patterns of the various + // `in` nodes into. If a match is found, they will need to jump into the + // body_seq anchor to the correct spot. + DECL_ANCHOR(cond_seq); + INIT_ANCHOR(cond_seq); - const struct rb_iseq_param_keyword *const local_keyword = local_body->param.keyword; - if (local_body->param.flags.has_kw) { - int local_size = local_body->local_table_size; - argc++; + // This label is used to indicate the end of the entire node. It is + // jumped to after the entire stack is cleaned up. + LABEL *end_label = NEW_LABEL(location->line); - PUSH_INSN1(args, location, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE)); + // This label is used as the fallback for the case match. If no match is + // found, then we jump to this label. This is either an `else` clause or + // an error handler. + LABEL *else_label = NEW_LABEL(location->line); - if (local_body->param.flags.has_kwrest) { - int idx = local_body->local_table_size - local_keyword->rest_start; - PUSH_GETLOCAL(args, location, idx, depth); - RUBY_ASSERT(local_keyword->num > 0); - PUSH_SEND(args, location, rb_intern("dup"), INT2FIX(0)); - } - else { - PUSH_INSN1(args, location, newhash, INT2FIX(0)); - } - int i = 0; - for (; i < local_keyword->num; ++i) { - ID id = local_keyword->table[i]; - int idx = local_size - get_local_var_idx(local_iseq, id); - PUSH_INSN1(args, location, putobject, ID2SYM(id)); - PUSH_GETLOCAL(args, location, idx, depth); - } + // We're going to use this to uniquely identify each branch so that we + // can track coverage information. + rb_code_location_t case_location = { 0 }; + VALUE branches = Qfalse; + int branch_id = 0; + + if (PM_BRANCH_COVERAGE_P(iseq)) { + case_location = pm_code_location(scope_node, (const pm_node_t *) node); + branches = decl_branch_base(iseq, PTR2NUM(node), &case_location, "case"); + } + + // If there is only one pattern, then the behavior changes a bit. It + // effectively gets treated as a match required node (this is how it is + // represented in the other parser). + bool in_single_pattern = node->else_clause == NULL && node->conditions.size == 1; + + // First, we're going to push a bunch of stuff onto the stack that is + // going to serve as our scratch space. + if (in_single_pattern) { + PUSH_INSN(ret, *location, putnil); // key error key + PUSH_INSN(ret, *location, putnil); // key error matchee + PUSH_INSN1(ret, *location, putobject, Qfalse); // key error? + PUSH_INSN(ret, *location, putnil); // error string + } + + // Now we're going to compile the value to match against. + PUSH_INSN(ret, *location, putnil); // deconstruct cache + PM_COMPILE_NOT_POPPED(node->predicate); - PUSH_SEND(args, location, id_core_hash_merge_ptr, INT2FIX(i * 2 + 1)); - flag |= VM_CALL_KW_SPLAT| VM_CALL_KW_SPLAT_MUT; + // Next, we'll loop through every in clause and compile its body into + // the body_seq anchor and its pattern into the cond_seq anchor. We'll + // make sure the pattern knows how to jump correctly into the body if it + // finds a match. + for (size_t index = 0; index < node->conditions.size; index++) { + const pm_node_t *condition = node->conditions.nodes[index]; + RUBY_ASSERT(PM_NODE_TYPE_P(condition, PM_IN_NODE)); + + const pm_in_node_t *in_node = (const pm_in_node_t *) condition; + const pm_node_location_t in_location = PM_NODE_START_LOCATION(scope_node->parser, in_node); + const pm_node_location_t pattern_location = PM_NODE_START_LOCATION(scope_node->parser, in_node->pattern); + + if (branch_id) { + PUSH_INSN(body_seq, in_location, putnil); } - else if (local_body->param.flags.has_kwrest) { - int idx = local_body->local_table_size - local_keyword->rest_start; - PUSH_GETLOCAL(args, location, idx, depth); - argc++; - flag |= VM_CALL_KW_SPLAT; + + LABEL *body_label = NEW_LABEL(in_location.line); + PUSH_LABEL(body_seq, body_label); + PUSH_INSN1(body_seq, in_location, adjuststack, INT2FIX(in_single_pattern ? 6 : 2)); + + // Establish branch coverage for the in clause. + if (PM_BRANCH_COVERAGE_P(iseq)) { + rb_code_location_t branch_location = pm_code_location(scope_node, in_node->statements != NULL ? ((const pm_node_t *) in_node->statements) : ((const pm_node_t *) in_node)); + add_trace_branch_coverage(iseq, body_seq, &branch_location, branch_location.beg_pos.column, branch_id++, "in", branches); + } + + if (in_node->statements != NULL) { + PM_COMPILE_INTO_ANCHOR(body_seq, (const pm_node_t *) in_node->statements); + } + else if (!popped) { + PUSH_SYNTHETIC_PUTNIL(body_seq, iseq); } - PUSH_SEQ(ret, args); - PUSH_INSN2(ret, location, invokesuper, new_callinfo(iseq, 0, argc, flag, NULL, block != NULL), block); + PUSH_INSNL(body_seq, in_location, jump, end_label); + LABEL *next_pattern_label = NEW_LABEL(pattern_location.line); - if (cast->block != NULL) { - pm_compile_retry_end_label(iseq, ret, retry_end_l); - PUSH_CATCH_ENTRY(CATCH_TYPE_BREAK, retry_label, retry_end_l, block, retry_end_l); - ISEQ_COMPILE_DATA(iseq)->current_block = previous_block; + PUSH_INSN(cond_seq, pattern_location, dup); + pm_compile_pattern(iseq, scope_node, in_node->pattern, cond_seq, body_label, next_pattern_label, in_single_pattern, false, true, 2); + PUSH_LABEL(cond_seq, next_pattern_label); + LABEL_UNREMOVABLE(next_pattern_label); + } + + if (node->else_clause != NULL) { + // If we have an `else` clause, then this becomes our fallback (and + // there is no need to compile in code to potentially raise an + // error). + const pm_else_node_t *else_node = node->else_clause; + + PUSH_LABEL(cond_seq, else_label); + PUSH_INSN(cond_seq, *location, pop); + PUSH_INSN(cond_seq, *location, pop); + + // Establish branch coverage for the else clause. + if (PM_BRANCH_COVERAGE_P(iseq)) { + rb_code_location_t branch_location = pm_code_location(scope_node, else_node->statements != NULL ? ((const pm_node_t *) else_node->statements) : ((const pm_node_t *) else_node)); + add_trace_branch_coverage(iseq, cond_seq, &branch_location, branch_location.beg_pos.column, branch_id, "else", branches); } - if (popped) PUSH_INSN(ret, location, pop); - return; - } - case PM_GLOBAL_VARIABLE_AND_WRITE_NODE: { - // $foo &&= bar - // ^^^^^^^^^^^^ - const pm_global_variable_and_write_node_t *cast = (const pm_global_variable_and_write_node_t *) node; - LABEL *end_label = NEW_LABEL(location.line); + PM_COMPILE_INTO_ANCHOR(cond_seq, (const pm_node_t *) else_node); + PUSH_INSNL(cond_seq, *location, jump, end_label); + PUSH_INSN(cond_seq, *location, putnil); + if (popped) PUSH_INSN(cond_seq, *location, putnil); + } + else { + // Otherwise, if we do not have an `else` clause, we will compile in + // the code to handle raising an appropriate error. + PUSH_LABEL(cond_seq, else_label); - VALUE name = ID2SYM(pm_constant_id_lookup(scope_node, cast->name)); - PUSH_INSN1(ret, location, getglobal, name); - if (!popped) PUSH_INSN(ret, location, dup); + // Establish branch coverage for the implicit else clause. + add_trace_branch_coverage(iseq, cond_seq, &case_location, case_location.beg_pos.column, branch_id, "else", branches); - PUSH_INSNL(ret, location, branchunless, end_label); - if (!popped) PUSH_INSN(ret, location, pop); + if (in_single_pattern) { + pm_compile_pattern_error_handler(iseq, scope_node, (const pm_node_t *) node, cond_seq, end_label, popped); + } + else { + PUSH_INSN1(cond_seq, *location, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE)); + PUSH_INSN1(cond_seq, *location, putobject, rb_eNoMatchingPatternError); + PUSH_INSN1(cond_seq, *location, topn, INT2FIX(2)); + PUSH_SEND(cond_seq, *location, id_core_raise, INT2FIX(2)); - PM_COMPILE_NOT_POPPED(cast->value); - if (!popped) PUSH_INSN(ret, location, dup); + PUSH_INSN1(cond_seq, *location, adjuststack, INT2FIX(3)); + if (!popped) PUSH_INSN(cond_seq, *location, putnil); + PUSH_INSNL(cond_seq, *location, jump, end_label); + PUSH_INSN1(cond_seq, *location, dupn, INT2FIX(1)); + if (popped) PUSH_INSN(cond_seq, *location, putnil); + } + } - PUSH_INSN1(ret, location, setglobal, name); - PUSH_LABEL(ret, end_label); + // At the end of all of this compilation, we will add the code for the + // conditions first, then the various bodies, then mark the end of the + // entire sequence with the end label. + PUSH_SEQ(ret, cond_seq); + PUSH_SEQ(ret, body_seq); + PUSH_LABEL(ret, end_label); +} - return; - } - case PM_GLOBAL_VARIABLE_OPERATOR_WRITE_NODE: { - // $foo += bar - // ^^^^^^^^^^^ - const pm_global_variable_operator_write_node_t *cast = (const pm_global_variable_operator_write_node_t *) node; +static inline void +pm_compile_forwarding_super_node(rb_iseq_t *iseq, const pm_forwarding_super_node_t *node, const pm_node_location_t *location, LINK_ANCHOR *const ret, bool popped, pm_scope_node_t *scope_node) +{ + const rb_iseq_t *block = NULL; + const rb_iseq_t *previous_block = NULL; + LABEL *retry_label = NULL; + LABEL *retry_end_l = NULL; - VALUE name = ID2SYM(pm_constant_id_lookup(scope_node, cast->name)); - PUSH_INSN1(ret, location, getglobal, name); - PM_COMPILE_NOT_POPPED(cast->value); + if (node->block != NULL) { + previous_block = ISEQ_COMPILE_DATA(iseq)->current_block; + ISEQ_COMPILE_DATA(iseq)->current_block = NULL; - ID method_id = pm_constant_id_lookup(scope_node, cast->binary_operator); - int flags = VM_CALL_ARGS_SIMPLE; - PUSH_SEND_WITH_FLAG(ret, location, method_id, INT2NUM(1), INT2FIX(flags)); + retry_label = NEW_LABEL(location->line); + retry_end_l = NEW_LABEL(location->line); - if (!popped) PUSH_INSN(ret, location, dup); - PUSH_INSN1(ret, location, setglobal, name); + PUSH_LABEL(ret, retry_label); + } + else { + iseq_set_use_block(ISEQ_BODY(iseq)->local_iseq); + } - return; - } - case PM_GLOBAL_VARIABLE_OR_WRITE_NODE: { - // $foo ||= bar - // ^^^^^^^^^^^^ - const pm_global_variable_or_write_node_t *cast = (const pm_global_variable_or_write_node_t *) node; - LABEL *set_label = NEW_LABEL(location.line); - LABEL *end_label = NEW_LABEL(location.line); + PUSH_INSN(ret, *location, putself); + int flag = VM_CALL_ZSUPER | VM_CALL_SUPER | VM_CALL_FCALL; - PUSH_INSN(ret, location, putnil); - VALUE name = ID2SYM(pm_constant_id_lookup(scope_node, cast->name)); + if (node->block != NULL) { + pm_scope_node_t next_scope_node; + pm_scope_node_init((const pm_node_t *) node->block, &next_scope_node, scope_node); - PUSH_INSN3(ret, location, defined, INT2FIX(DEFINED_GVAR), name, Qtrue); - PUSH_INSNL(ret, location, branchunless, set_label); + ISEQ_COMPILE_DATA(iseq)->current_block = block = NEW_CHILD_ISEQ(&next_scope_node, make_name_for_block(iseq), ISEQ_TYPE_BLOCK, location->line); + pm_scope_node_destroy(&next_scope_node); + RB_OBJ_WRITTEN(iseq, Qundef, (VALUE) block); + } - PUSH_INSN1(ret, location, getglobal, name); - if (!popped) PUSH_INSN(ret, location, dup); + DECL_ANCHOR(args); + INIT_ANCHOR(args); - PUSH_INSNL(ret, location, branchif, end_label); - if (!popped) PUSH_INSN(ret, location, pop); + struct rb_iseq_constant_body *const body = ISEQ_BODY(iseq); + const rb_iseq_t *local_iseq = body->local_iseq; + const struct rb_iseq_constant_body *const local_body = ISEQ_BODY(local_iseq); - PUSH_LABEL(ret, set_label); - PM_COMPILE_NOT_POPPED(cast->value); - if (!popped) PUSH_INSN(ret, location, dup); + int argc = 0; + int depth = get_lvar_level(iseq); - PUSH_INSN1(ret, location, setglobal, name); - PUSH_LABEL(ret, end_label); + if (ISEQ_BODY(ISEQ_BODY(iseq)->local_iseq)->param.flags.forwardable) { + flag |= VM_CALL_FORWARDING; + pm_local_index_t mult_local = pm_lookup_local_index(iseq, scope_node, PM_CONSTANT_DOT3, 0); + PUSH_GETLOCAL(ret, *location, mult_local.index, mult_local.level); + + const struct rb_callinfo *callinfo = new_callinfo(iseq, 0, 0, flag, NULL, block != NULL); + PUSH_INSN2(ret, *location, invokesuperforward, callinfo, block); + if (popped) PUSH_INSN(ret, *location, pop); + if (node->block) { + ISEQ_COMPILE_DATA(iseq)->current_block = previous_block; + } return; - } - case PM_GLOBAL_VARIABLE_READ_NODE: { - // $foo - // ^^^^ - const pm_global_variable_read_node_t *cast = (const pm_global_variable_read_node_t *) node; - VALUE name = ID2SYM(pm_constant_id_lookup(scope_node, cast->name)); + } - PUSH_INSN1(ret, location, getglobal, name); - if (popped) PUSH_INSN(ret, location, pop); + if (local_body->param.flags.has_lead) { + /* required arguments */ + for (int i = 0; i < local_body->param.lead_num; i++) { + int idx = local_body->local_table_size - i; + PUSH_GETLOCAL(args, *location, idx, depth); + } + argc += local_body->param.lead_num; + } - return; - } - case PM_GLOBAL_VARIABLE_WRITE_NODE: { - // $foo = 1 - // ^^^^^^^^ - const pm_global_variable_write_node_t *cast = (const pm_global_variable_write_node_t *) node; - PM_COMPILE_NOT_POPPED(cast->value); - if (!popped) PUSH_INSN(ret, location, dup); + if (local_body->param.flags.has_opt) { + /* optional arguments */ + for (int j = 0; j < local_body->param.opt_num; j++) { + int idx = local_body->local_table_size - (argc + j); + PUSH_GETLOCAL(args, *location, idx, depth); + } + argc += local_body->param.opt_num; + } - ID name = pm_constant_id_lookup(scope_node, cast->name); - PUSH_INSN1(ret, location, setglobal, ID2SYM(name)); + if (local_body->param.flags.has_rest) { + /* rest argument */ + int idx = local_body->local_table_size - local_body->param.rest_start; + PUSH_GETLOCAL(args, *location, idx, depth); + PUSH_INSN1(args, *location, splatarray, Qfalse); - return; - } - case PM_HASH_NODE: { - // {} - // ^^ - // - // If every node in the hash is static, then we can compile the entire - // hash now instead of later. - if (PM_NODE_FLAG_P(node, PM_NODE_FLAG_STATIC_LITERAL)) { - // We're only going to compile this node if it's not popped. If it - // is popped, then we know we don't need to do anything since it's - // statically known. - if (!popped) { - const pm_hash_node_t *cast = (const pm_hash_node_t *) node; + argc = local_body->param.rest_start + 1; + flag |= VM_CALL_ARGS_SPLAT; + } - if (cast->elements.size == 0) { - PUSH_INSN1(ret, location, newhash, INT2FIX(0)); - } - else { - VALUE value = pm_static_literal_value(iseq, node, scope_node); - PUSH_INSN1(ret, location, duphash, value); - RB_OBJ_WRITTEN(iseq, Qundef, value); - } - } + if (local_body->param.flags.has_post) { + /* post arguments */ + int post_len = local_body->param.post_num; + int post_start = local_body->param.post_start; + + int j = 0; + for (; j < post_len; j++) { + int idx = local_body->local_table_size - (post_start + j); + PUSH_GETLOCAL(args, *location, idx, depth); + } + + if (local_body->param.flags.has_rest) { + // argc remains unchanged from rest branch + PUSH_INSN1(args, *location, newarray, INT2FIX(j)); + PUSH_INSN(args, *location, concatarray); } else { - // Here since we know there are possible side-effects inside the - // hash contents, we're going to build it entirely at runtime. We'll - // do this by pushing all of the key-value pairs onto the stack and - // then combining them with newhash. - // - // If this hash is popped, then this serves only to ensure we enact - // all side-effects (like method calls) that are contained within - // the hash contents. - const pm_hash_node_t *cast = (const pm_hash_node_t *) node; - const pm_node_list_t *elements = &cast->elements; + argc = post_len + post_start; + } + } - if (popped) { - // If this hash is popped, then we can iterate through each - // element and compile it. The result of each compilation will - // only include the side effects of the element itself. - for (size_t index = 0; index < elements->size; index++) { - PM_COMPILE_POPPED(elements->nodes[index]); - } - } - else { - pm_compile_hash_elements(iseq, node, elements, false, ret, scope_node); - } + const struct rb_iseq_param_keyword *const local_keyword = local_body->param.keyword; + if (local_body->param.flags.has_kw) { + int local_size = local_body->local_table_size; + argc++; + + PUSH_INSN1(args, *location, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE)); + + if (local_body->param.flags.has_kwrest) { + int idx = local_body->local_table_size - local_keyword->rest_start; + PUSH_GETLOCAL(args, *location, idx, depth); + RUBY_ASSERT(local_keyword->num > 0); + PUSH_SEND(args, *location, rb_intern("dup"), INT2FIX(0)); + } + else { + PUSH_INSN1(args, *location, newhash, INT2FIX(0)); } + int i = 0; + for (; i < local_keyword->num; ++i) { + ID id = local_keyword->table[i]; + int idx = local_size - get_local_var_idx(local_iseq, id); - return; - } - case PM_IF_NODE: { - // if foo then bar end - // ^^^^^^^^^^^^^^^^^^^ - // - // bar if foo - // ^^^^^^^^^^ - // - // foo ? bar : baz - // ^^^^^^^^^^^^^^^ - const pm_if_node_t *cast = (const pm_if_node_t *) node; - pm_compile_conditional(iseq, &location, PM_IF_NODE, (const pm_node_t *) cast, cast->statements, cast->subsequent, cast->predicate, ret, popped, scope_node); - return; - } - case PM_IMAGINARY_NODE: { - // 1i - // ^^ - if (!popped) { - PUSH_INSN1(ret, location, putobject, parse_imaginary((const pm_imaginary_node_t *) node)); + { + VALUE operand = ID2SYM(id); + PUSH_INSN1(args, *location, putobject, operand); + } + + PUSH_GETLOCAL(args, *location, idx, depth); } - return; - } - case PM_IMPLICIT_NODE: { - // Implicit nodes mark places in the syntax tree where explicit syntax - // was omitted, but implied. For example, - // - // { foo: } - // - // In this case a method call/local variable read is implied by virtue - // of the missing value. To compile these nodes, we simply compile the - // value that is implied, which is helpfully supplied by the parser. - const pm_implicit_node_t *cast = (const pm_implicit_node_t *) node; - PM_COMPILE(cast->value); - return; - } - case PM_IN_NODE: { - // In nodes are handled by the case match node directly, so we should - // never end up hitting them through this path. - rb_bug("Should not ever enter an in node directly"); - return; - } - case PM_INDEX_OPERATOR_WRITE_NODE: { - // foo[bar] += baz - // ^^^^^^^^^^^^^^^ - const pm_index_operator_write_node_t *cast = (const pm_index_operator_write_node_t *) node; - pm_compile_index_operator_write_node(iseq, cast, &location, ret, popped, scope_node); - return; - } - case PM_INDEX_AND_WRITE_NODE: { - // foo[bar] &&= baz - // ^^^^^^^^^^^^^^^^ - const pm_index_and_write_node_t *cast = (const pm_index_and_write_node_t *) node; - pm_compile_index_control_flow_write_node(iseq, node, cast->receiver, cast->arguments, cast->block, cast->value, &location, ret, popped, scope_node); - return; - } - case PM_INDEX_OR_WRITE_NODE: { - // foo[bar] ||= baz - // ^^^^^^^^^^^^^^^^ - const pm_index_or_write_node_t *cast = (const pm_index_or_write_node_t *) node; - pm_compile_index_control_flow_write_node(iseq, node, cast->receiver, cast->arguments, cast->block, cast->value, &location, ret, popped, scope_node); - return; - } - case PM_INSTANCE_VARIABLE_AND_WRITE_NODE: { - // @foo &&= bar - // ^^^^^^^^^^^^ - const pm_instance_variable_and_write_node_t *cast = (const pm_instance_variable_and_write_node_t *) node; - LABEL *end_label = NEW_LABEL(location.line); - ID name_id = pm_constant_id_lookup(scope_node, cast->name); - VALUE name = ID2SYM(name_id); + PUSH_SEND(args, *location, id_core_hash_merge_ptr, INT2FIX(i * 2 + 1)); + flag |= VM_CALL_KW_SPLAT| VM_CALL_KW_SPLAT_MUT; + } + else if (local_body->param.flags.has_kwrest) { + int idx = local_body->local_table_size - local_keyword->rest_start; + PUSH_GETLOCAL(args, *location, idx, depth); + argc++; + flag |= VM_CALL_KW_SPLAT; + } - PUSH_INSN2(ret, location, getinstancevariable, name, get_ivar_ic_value(iseq, name_id)); - if (!popped) PUSH_INSN(ret, location, dup); + PUSH_SEQ(ret, args); - PUSH_INSNL(ret, location, branchunless, end_label); - if (!popped) PUSH_INSN(ret, location, pop); + { + const struct rb_callinfo *callinfo = new_callinfo(iseq, 0, argc, flag, NULL, block != NULL); + PUSH_INSN2(ret, *location, invokesuper, callinfo, block); + } - PM_COMPILE_NOT_POPPED(cast->value); - if (!popped) PUSH_INSN(ret, location, dup); + if (node->block != NULL) { + pm_compile_retry_end_label(iseq, ret, retry_end_l); + PUSH_CATCH_ENTRY(CATCH_TYPE_BREAK, retry_label, retry_end_l, block, retry_end_l); + ISEQ_COMPILE_DATA(iseq)->current_block = previous_block; + } - PUSH_INSN2(ret, location, setinstancevariable, name, get_ivar_ic_value(iseq, name_id)); - PUSH_LABEL(ret, end_label); + if (popped) PUSH_INSN(ret, *location, pop); +} - return; - } - case PM_INSTANCE_VARIABLE_OPERATOR_WRITE_NODE: { - // @foo += bar - // ^^^^^^^^^^^ - const pm_instance_variable_operator_write_node_t *cast = (const pm_instance_variable_operator_write_node_t *) node; +static inline void +pm_compile_match_required_node(rb_iseq_t *iseq, const pm_match_required_node_t *node, const pm_node_location_t *location, LINK_ANCHOR *const ret, bool popped, pm_scope_node_t *scope_node) +{ + LABEL *matched_label = NEW_LABEL(location->line); + LABEL *unmatched_label = NEW_LABEL(location->line); + LABEL *done_label = NEW_LABEL(location->line); + + // First, we're going to push a bunch of stuff onto the stack that is + // going to serve as our scratch space. + PUSH_INSN(ret, *location, putnil); // key error key + PUSH_INSN(ret, *location, putnil); // key error matchee + PUSH_INSN1(ret, *location, putobject, Qfalse); // key error? + PUSH_INSN(ret, *location, putnil); // error string + PUSH_INSN(ret, *location, putnil); // deconstruct cache + + // Next we're going to compile the value expression such that it's on + // the stack. + PM_COMPILE_NOT_POPPED(node->value); - ID name_id = pm_constant_id_lookup(scope_node, cast->name); - VALUE name = ID2SYM(name_id); + // Here we'll dup it so that it can be used for comparison, but also be + // used for error handling. + PUSH_INSN(ret, *location, dup); + + // Next we'll compile the pattern. We indicate to the pm_compile_pattern + // function that this is the only pattern that will be matched against + // through the in_single_pattern parameter. We also indicate that the + // value to compare against is 2 slots from the top of the stack (the + // base_index parameter). + pm_compile_pattern(iseq, scope_node, node->pattern, ret, matched_label, unmatched_label, true, false, true, 2); + + // If the pattern did not match the value, then we're going to compile + // in our error handler code. This will determine which error to raise + // and raise it. + PUSH_LABEL(ret, unmatched_label); + pm_compile_pattern_error_handler(iseq, scope_node, (const pm_node_t *) node, ret, done_label, popped); + + // If the pattern did match, we'll clean up the values we've pushed onto + // the stack and then push nil onto the stack if it's not popped. + PUSH_LABEL(ret, matched_label); + PUSH_INSN1(ret, *location, adjuststack, INT2FIX(6)); + if (!popped) PUSH_INSN(ret, *location, putnil); + PUSH_INSNL(ret, *location, jump, done_label); - PUSH_INSN2(ret, location, getinstancevariable, name, get_ivar_ic_value(iseq, name_id)); - PM_COMPILE_NOT_POPPED(cast->value); + PUSH_LABEL(ret, done_label); +} - ID method_id = pm_constant_id_lookup(scope_node, cast->binary_operator); - int flags = VM_CALL_ARGS_SIMPLE; - PUSH_SEND_WITH_FLAG(ret, location, method_id, INT2NUM(1), INT2FIX(flags)); +static inline void +pm_compile_match_write_node(rb_iseq_t *iseq, const pm_match_write_node_t *node, const pm_node_location_t *location, LINK_ANCHOR *const ret, bool popped, pm_scope_node_t *scope_node) +{ + LABEL *fail_label = NEW_LABEL(location->line); + LABEL *end_label = NEW_LABEL(location->line); - if (!popped) PUSH_INSN(ret, location, dup); - PUSH_INSN2(ret, location, setinstancevariable, name, get_ivar_ic_value(iseq, name_id)); + // First, we'll compile the call so that all of its instructions are + // present. Then we'll compile all of the local variable targets. + PM_COMPILE_NOT_POPPED((const pm_node_t *) node->call); - return; - } - case PM_INSTANCE_VARIABLE_OR_WRITE_NODE: { - // @foo ||= bar - // ^^^^^^^^^^^^ - const pm_instance_variable_or_write_node_t *cast = (const pm_instance_variable_or_write_node_t *) node; - LABEL *end_label = NEW_LABEL(location.line); + // Now, check if the match was successful. If it was, then we'll + // continue on and assign local variables. Otherwise we'll skip over the + // assignment code. + { + VALUE operand = rb_id2sym(idBACKREF); + PUSH_INSN1(ret, *location, getglobal, operand); + } - ID name_id = pm_constant_id_lookup(scope_node, cast->name); - VALUE name = ID2SYM(name_id); + PUSH_INSN(ret, *location, dup); + PUSH_INSNL(ret, *location, branchunless, fail_label); - PUSH_INSN2(ret, location, getinstancevariable, name, get_ivar_ic_value(iseq, name_id)); - if (!popped) PUSH_INSN(ret, location, dup); + // If there's only a single local variable target, we can skip some of + // the bookkeeping, so we'll put a special branch here. + size_t targets_count = node->targets.size; - PUSH_INSNL(ret, location, branchif, end_label); - if (!popped) PUSH_INSN(ret, location, pop); + if (targets_count == 1) { + const pm_node_t *target = node->targets.nodes[0]; + RUBY_ASSERT(PM_NODE_TYPE_P(target, PM_LOCAL_VARIABLE_TARGET_NODE)); - PM_COMPILE_NOT_POPPED(cast->value); - if (!popped) PUSH_INSN(ret, location, dup); + const pm_local_variable_target_node_t *local_target = (const pm_local_variable_target_node_t *) target; + pm_local_index_t index = pm_lookup_local_index(iseq, scope_node, local_target->name, local_target->depth); - PUSH_INSN2(ret, location, setinstancevariable, name, get_ivar_ic_value(iseq, name_id)); - PUSH_LABEL(ret, end_label); + { + VALUE operand = rb_id2sym(pm_constant_id_lookup(scope_node, local_target->name)); + PUSH_INSN1(ret, *location, putobject, operand); + } + PUSH_SEND(ret, *location, idAREF, INT2FIX(1)); + PUSH_LABEL(ret, fail_label); + PUSH_SETLOCAL(ret, *location, index.index, index.level); + if (popped) PUSH_INSN(ret, *location, pop); return; - } - case PM_INSTANCE_VARIABLE_READ_NODE: { - // @foo - // ^^^^ - if (!popped) { - const pm_instance_variable_read_node_t *cast = (const pm_instance_variable_read_node_t *) node; - ID name = pm_constant_id_lookup(scope_node, cast->name); - PUSH_INSN2(ret, location, getinstancevariable, ID2SYM(name), get_ivar_ic_value(iseq, name)); + } + + DECL_ANCHOR(fail_anchor); + INIT_ANCHOR(fail_anchor); + + // Otherwise there is more than one local variable target, so we'll need + // to do some bookkeeping. + for (size_t targets_index = 0; targets_index < targets_count; targets_index++) { + const pm_node_t *target = node->targets.nodes[targets_index]; + RUBY_ASSERT(PM_NODE_TYPE_P(target, PM_LOCAL_VARIABLE_TARGET_NODE)); + + const pm_local_variable_target_node_t *local_target = (const pm_local_variable_target_node_t *) target; + pm_local_index_t index = pm_lookup_local_index(iseq, scope_node, local_target->name, local_target->depth); + + if (((size_t) targets_index) < (targets_count - 1)) { + PUSH_INSN(ret, *location, dup); } - return; - } - case PM_INSTANCE_VARIABLE_WRITE_NODE: { - // @foo = 1 - // ^^^^^^^^ - const pm_instance_variable_write_node_t *cast = (const pm_instance_variable_write_node_t *) node; - PM_COMPILE_NOT_POPPED(cast->value); - if (!popped) PUSH_INSN(ret, location, dup); - ID name = pm_constant_id_lookup(scope_node, cast->name); - PUSH_INSN2(ret, location, setinstancevariable, ID2SYM(name), get_ivar_ic_value(iseq, name)); + { + VALUE operand = rb_id2sym(pm_constant_id_lookup(scope_node, local_target->name)); + PUSH_INSN1(ret, *location, putobject, operand); + } - return; - } - case PM_INTEGER_NODE: { - // 1 - // ^ - if (!popped) { - PUSH_INSN1(ret, location, putobject, parse_integer((const pm_integer_node_t *) node)); + PUSH_SEND(ret, *location, idAREF, INT2FIX(1)); + PUSH_SETLOCAL(ret, *location, index.index, index.level); + + PUSH_INSN(fail_anchor, *location, putnil); + PUSH_SETLOCAL(fail_anchor, *location, index.index, index.level); + } + + // Since we matched successfully, now we'll jump to the end. + PUSH_INSNL(ret, *location, jump, end_label); + + // In the case that the match failed, we'll loop through each local + // variable target and set all of them to `nil`. + PUSH_LABEL(ret, fail_label); + PUSH_INSN(ret, *location, pop); + PUSH_SEQ(ret, fail_anchor); + + // Finally, we can push the end label for either case. + PUSH_LABEL(ret, end_label); + if (popped) PUSH_INSN(ret, *location, pop); +} + +static inline void +pm_compile_next_node(rb_iseq_t *iseq, const pm_next_node_t *node, const pm_node_location_t *location, LINK_ANCHOR *const ret, bool popped, pm_scope_node_t *scope_node) +{ + if (ISEQ_COMPILE_DATA(iseq)->redo_label != 0 && can_add_ensure_iseq(iseq)) { + LABEL *splabel = NEW_LABEL(0); + PUSH_LABEL(ret, splabel); + + if (node->arguments) { + PM_COMPILE_NOT_POPPED((const pm_node_t *) node->arguments); } - return; - } - case PM_INTERPOLATED_MATCH_LAST_LINE_NODE: { - // if /foo #{bar}/ then end - // ^^^^^^^^^^^^ - if (PM_NODE_FLAG_P(node, PM_NODE_FLAG_STATIC_LITERAL)) { - if (!popped) { - VALUE regexp = pm_static_literal_value(iseq, node, scope_node); - PUSH_INSN1(ret, location, putobject, regexp); + else { + PUSH_INSN(ret, *location, putnil); + } + pm_add_ensure_iseq(ret, iseq, 0, scope_node); + + PUSH_ADJUST(ret, *location, ISEQ_COMPILE_DATA(iseq)->redo_label); + PUSH_INSNL(ret, *location, jump, ISEQ_COMPILE_DATA(iseq)->start_label); + + PUSH_ADJUST_RESTORE(ret, splabel); + if (!popped) PUSH_INSN(ret, *location, putnil); + } + else if (ISEQ_COMPILE_DATA(iseq)->end_label && can_add_ensure_iseq(iseq)) { + LABEL *splabel = NEW_LABEL(0); + + PUSH_LABEL(ret, splabel); + PUSH_ADJUST(ret, *location, ISEQ_COMPILE_DATA(iseq)->start_label); + + if (node->arguments != NULL) { + PM_COMPILE_NOT_POPPED((const pm_node_t *) node->arguments); + } + else { + PUSH_INSN(ret, *location, putnil); + } + + pm_add_ensure_iseq(ret, iseq, 0, scope_node); + PUSH_INSNL(ret, *location, jump, ISEQ_COMPILE_DATA(iseq)->end_label); + PUSH_ADJUST_RESTORE(ret, splabel); + splabel->unremovable = FALSE; + + if (!popped) PUSH_INSN(ret, *location, putnil); + } + else { + const rb_iseq_t *ip = iseq; + unsigned long throw_flag = 0; + + while (ip) { + if (!ISEQ_COMPILE_DATA(ip)) { + ip = 0; + break; + } + + throw_flag = VM_THROW_NO_ESCAPE_FLAG; + if (ISEQ_COMPILE_DATA(ip)->redo_label != 0) { + /* while loop */ + break; + } + else if (ISEQ_BODY(ip)->type == ISEQ_TYPE_BLOCK) { + break; + } + else if (ISEQ_BODY(ip)->type == ISEQ_TYPE_EVAL) { + COMPILE_ERROR(iseq, location->line, "Invalid next"); + return; + } + + ip = ISEQ_BODY(ip)->parent_iseq; + } + + if (ip != 0) { + if (node->arguments) { + PM_COMPILE_NOT_POPPED((const pm_node_t *) node->arguments); } + else { + PUSH_INSN(ret, *location, putnil); + } + + PUSH_INSN1(ret, *location, throw, INT2FIX(throw_flag | TAG_NEXT)); + if (popped) PUSH_INSN(ret, *location, pop); } else { - pm_compile_regexp_dynamic(iseq, node, &((const pm_interpolated_match_last_line_node_t *) node)->parts, &location, ret, popped, scope_node); + COMPILE_ERROR(iseq, location->line, "Invalid next"); } + } +} - PUSH_INSN1(ret, location, getglobal, rb_id2sym(idLASTLINE)); - PUSH_SEND(ret, location, idEqTilde, INT2NUM(1)); - if (popped) PUSH_INSN(ret, location, pop); +static inline void +pm_compile_redo_node(rb_iseq_t *iseq, const pm_node_location_t *location, LINK_ANCHOR *const ret, bool popped, pm_scope_node_t *scope_node) +{ + if (ISEQ_COMPILE_DATA(iseq)->redo_label && can_add_ensure_iseq(iseq)) { + LABEL *splabel = NEW_LABEL(0); + + PUSH_LABEL(ret, splabel); + PUSH_ADJUST(ret, *location, ISEQ_COMPILE_DATA(iseq)->redo_label); + pm_add_ensure_iseq(ret, iseq, 0, scope_node); + PUSH_INSNL(ret, *location, jump, ISEQ_COMPILE_DATA(iseq)->redo_label); + PUSH_ADJUST_RESTORE(ret, splabel); + if (!popped) PUSH_INSN(ret, *location, putnil); + } + else if (ISEQ_BODY(iseq)->type != ISEQ_TYPE_EVAL && ISEQ_COMPILE_DATA(iseq)->start_label && can_add_ensure_iseq(iseq)) { + LABEL *splabel = NEW_LABEL(0); + + PUSH_LABEL(ret, splabel); + pm_add_ensure_iseq(ret, iseq, 0, scope_node); + PUSH_ADJUST(ret, *location, ISEQ_COMPILE_DATA(iseq)->start_label); + + PUSH_INSNL(ret, *location, jump, ISEQ_COMPILE_DATA(iseq)->start_label); + PUSH_ADJUST_RESTORE(ret, splabel); + if (!popped) PUSH_INSN(ret, *location, putnil); + } + else { + const rb_iseq_t *ip = iseq; + + while (ip) { + if (!ISEQ_COMPILE_DATA(ip)) { + ip = 0; + break; + } + + if (ISEQ_COMPILE_DATA(ip)->redo_label != 0) { + break; + } + else if (ISEQ_BODY(ip)->type == ISEQ_TYPE_BLOCK) { + break; + } + else if (ISEQ_BODY(ip)->type == ISEQ_TYPE_EVAL) { + COMPILE_ERROR(iseq, location->line, "Invalid redo"); + return; + } + + ip = ISEQ_BODY(ip)->parent_iseq; + } + + if (ip != 0) { + PUSH_INSN(ret, *location, putnil); + PUSH_INSN1(ret, *location, throw, INT2FIX(VM_THROW_NO_ESCAPE_FLAG | TAG_REDO)); + if (popped) PUSH_INSN(ret, *location, pop); + } + else { + COMPILE_ERROR(iseq, location->line, "Invalid redo"); + } + } +} + +static inline void +pm_compile_rescue_node(rb_iseq_t *iseq, const pm_rescue_node_t *node, const pm_node_location_t *location, LINK_ANCHOR *const ret, bool popped, pm_scope_node_t *scope_node) +{ + iseq_set_exception_local_table(iseq); + + // First, establish the labels that we need to be able to jump to within + // this compilation block. + LABEL *exception_match_label = NEW_LABEL(location->line); + LABEL *rescue_end_label = NEW_LABEL(location->line); + + // Next, compile each of the exceptions that we're going to be + // handling. For each one, we'll add instructions to check if the + // exception matches the raised one, and if it does then jump to the + // exception_match_label label. Otherwise it will fall through to the + // subsequent check. If there are no exceptions, we'll only check + // StandardError. + const pm_node_list_t *exceptions = &node->exceptions; + + if (exceptions->size > 0) { + for (size_t index = 0; index < exceptions->size; index++) { + PUSH_GETLOCAL(ret, *location, LVAR_ERRINFO, 0); + PM_COMPILE(exceptions->nodes[index]); + int checkmatch_flags = VM_CHECKMATCH_TYPE_RESCUE; + if (PM_NODE_TYPE_P(exceptions->nodes[index], PM_SPLAT_NODE)) { + checkmatch_flags |= VM_CHECKMATCH_ARRAY; + } + PUSH_INSN1(ret, *location, checkmatch, INT2FIX(checkmatch_flags)); + PUSH_INSNL(ret, *location, branchif, exception_match_label); + } + } + else { + PUSH_GETLOCAL(ret, *location, LVAR_ERRINFO, 0); + PUSH_INSN1(ret, *location, putobject, rb_eStandardError); + PUSH_INSN1(ret, *location, checkmatch, INT2FIX(VM_CHECKMATCH_TYPE_RESCUE)); + PUSH_INSNL(ret, *location, branchif, exception_match_label); + } + + // If none of the exceptions that we are matching against matched, then + // we'll jump straight to the rescue_end_label label. + PUSH_INSNL(ret, *location, jump, rescue_end_label); + + // Here we have the exception_match_label, which is where the + // control-flow goes in the case that one of the exceptions matched. + // Here we will compile the instructions to handle the exception. + PUSH_LABEL(ret, exception_match_label); + PUSH_TRACE(ret, RUBY_EVENT_RESCUE); + + // If we have a reference to the exception, then we'll compile the write + // into the instruction sequence. This can look quite different + // depending on the kind of write being performed. + if (node->reference) { + DECL_ANCHOR(writes); + INIT_ANCHOR(writes); + + DECL_ANCHOR(cleanup); + INIT_ANCHOR(cleanup); + + pm_compile_target_node(iseq, node->reference, ret, writes, cleanup, scope_node, NULL); + PUSH_GETLOCAL(ret, *location, LVAR_ERRINFO, 0); + + PUSH_SEQ(ret, writes); + PUSH_SEQ(ret, cleanup); + } + + // If we have statements to execute, we'll compile them here. Otherwise + // we'll push nil onto the stack. + if (node->statements != NULL) { + // We'll temporarily remove the end_label location from the iseq + // when compiling the statements so that next/redo statements + // inside the body will throw to the correct place instead of + // jumping straight to the end of this iseq + LABEL *prev_end = ISEQ_COMPILE_DATA(iseq)->end_label; + ISEQ_COMPILE_DATA(iseq)->end_label = NULL; + + PM_COMPILE((const pm_node_t *) node->statements); + + // Now restore the end_label + ISEQ_COMPILE_DATA(iseq)->end_label = prev_end; + } + else { + PUSH_INSN(ret, *location, putnil); + } + + PUSH_INSN(ret, *location, leave); + + // Here we'll insert the rescue_end_label label, which is jumped to if + // none of the exceptions matched. It will cause the control-flow to + // either jump to the next rescue clause or it will fall through to the + // subsequent instruction returning the raised error. + PUSH_LABEL(ret, rescue_end_label); + if (node->subsequent != NULL) { + PM_COMPILE((const pm_node_t *) node->subsequent); + } + else { + PUSH_GETLOCAL(ret, *location, 1, 0); + } +} + +static inline void +pm_compile_return_node(rb_iseq_t *iseq, const pm_return_node_t *node, const pm_node_location_t *location, LINK_ANCHOR *const ret, bool popped, pm_scope_node_t *scope_node) +{ + const pm_arguments_node_t *arguments = node->arguments; + enum rb_iseq_type type = ISEQ_BODY(iseq)->type; + LABEL *splabel = 0; + + const rb_iseq_t *parent_iseq = iseq; + enum rb_iseq_type parent_type = ISEQ_BODY(parent_iseq)->type; + while (parent_type == ISEQ_TYPE_RESCUE || parent_type == ISEQ_TYPE_ENSURE) { + if (!(parent_iseq = ISEQ_BODY(parent_iseq)->parent_iseq)) break; + parent_type = ISEQ_BODY(parent_iseq)->type; + } + + switch (parent_type) { + case ISEQ_TYPE_TOP: + case ISEQ_TYPE_MAIN: + if (arguments) { + rb_warn("argument of top-level return is ignored"); + } + if (parent_iseq == iseq) { + type = ISEQ_TYPE_METHOD; + } + break; + default: + break; + } + + if (type == ISEQ_TYPE_METHOD) { + splabel = NEW_LABEL(0); + PUSH_LABEL(ret, splabel); + PUSH_ADJUST(ret, *location, 0); + } + + if (arguments != NULL) { + PM_COMPILE_NOT_POPPED((const pm_node_t *) arguments); + } + else { + PUSH_INSN(ret, *location, putnil); + } + + if (type == ISEQ_TYPE_METHOD && can_add_ensure_iseq(iseq)) { + pm_add_ensure_iseq(ret, iseq, 1, scope_node); + PUSH_TRACE(ret, RUBY_EVENT_RETURN); + PUSH_INSN(ret, *location, leave); + PUSH_ADJUST_RESTORE(ret, splabel); + if (!popped) PUSH_INSN(ret, *location, putnil); + } + else { + PUSH_INSN1(ret, *location, throw, INT2FIX(TAG_RETURN)); + if (popped) PUSH_INSN(ret, *location, pop); + } +} + +static inline void +pm_compile_super_node(rb_iseq_t *iseq, const pm_super_node_t *node, const pm_node_location_t *location, LINK_ANCHOR *const ret, bool popped, pm_scope_node_t *scope_node) +{ + DECL_ANCHOR(args); + INIT_ANCHOR(args); + + LABEL *retry_label = NEW_LABEL(location->line); + LABEL *retry_end_l = NEW_LABEL(location->line); + + const rb_iseq_t *previous_block = ISEQ_COMPILE_DATA(iseq)->current_block; + const rb_iseq_t *current_block; + ISEQ_COMPILE_DATA(iseq)->current_block = current_block = NULL; + + PUSH_LABEL(ret, retry_label); + PUSH_INSN(ret, *location, putself); + + int flags = 0; + struct rb_callinfo_kwarg *keywords = NULL; + int argc = pm_setup_args(node->arguments, node->block, &flags, &keywords, iseq, ret, scope_node, location); + bool is_forwardable = (node->arguments != NULL) && PM_NODE_FLAG_P(node->arguments, PM_ARGUMENTS_NODE_FLAGS_CONTAINS_FORWARDING); + flags |= VM_CALL_SUPER | VM_CALL_FCALL; + + if (node->block && PM_NODE_TYPE_P(node->block, PM_BLOCK_NODE)) { + pm_scope_node_t next_scope_node; + pm_scope_node_init(node->block, &next_scope_node, scope_node); + + ISEQ_COMPILE_DATA(iseq)->current_block = current_block = NEW_CHILD_ISEQ(&next_scope_node, make_name_for_block(iseq), ISEQ_TYPE_BLOCK, location->line); + pm_scope_node_destroy(&next_scope_node); + } + + if (!node->block) { + iseq_set_use_block(ISEQ_BODY(iseq)->local_iseq); + } + + if ((flags & VM_CALL_ARGS_BLOCKARG) && (flags & VM_CALL_KW_SPLAT) && !(flags & VM_CALL_KW_SPLAT_MUT)) { + PUSH_INSN(args, *location, splatkw); + } + + PUSH_SEQ(ret, args); + if (is_forwardable && ISEQ_BODY(ISEQ_BODY(iseq)->local_iseq)->param.flags.forwardable) { + flags |= VM_CALL_FORWARDING; + + { + const struct rb_callinfo *callinfo = new_callinfo(iseq, 0, argc, flags, keywords, current_block != NULL); + PUSH_INSN2(ret, *location, invokesuperforward, callinfo, current_block); + } + } + else { + { + const struct rb_callinfo *callinfo = new_callinfo(iseq, 0, argc, flags, keywords, current_block != NULL); + PUSH_INSN2(ret, *location, invokesuper, callinfo, current_block); + } + + } + + pm_compile_retry_end_label(iseq, ret, retry_end_l); + + if (popped) PUSH_INSN(ret, *location, pop); + ISEQ_COMPILE_DATA(iseq)->current_block = previous_block; + PUSH_CATCH_ENTRY(CATCH_TYPE_BREAK, retry_label, retry_end_l, current_block, retry_end_l); +} + +static inline void +pm_compile_yield_node(rb_iseq_t *iseq, const pm_yield_node_t *node, const pm_node_location_t *location, LINK_ANCHOR *const ret, bool popped, pm_scope_node_t *scope_node) +{ + switch (ISEQ_BODY(ISEQ_BODY(iseq)->local_iseq)->type) { + case ISEQ_TYPE_TOP: + case ISEQ_TYPE_MAIN: + case ISEQ_TYPE_CLASS: + COMPILE_ERROR(iseq, location->line, "Invalid yield"); + return; + default: /* valid */; + } + + int argc = 0; + int flags = 0; + struct rb_callinfo_kwarg *keywords = NULL; + + if (node->arguments) { + argc = pm_setup_args(node->arguments, NULL, &flags, &keywords, iseq, ret, scope_node, location); + } + + const struct rb_callinfo *callinfo = new_callinfo(iseq, 0, argc, flags, keywords, FALSE); + PUSH_INSN1(ret, *location, invokeblock, callinfo); + + iseq_set_use_block(ISEQ_BODY(iseq)->local_iseq); + if (popped) PUSH_INSN(ret, *location, pop); + + int level = 0; + for (const rb_iseq_t *tmp_iseq = iseq; tmp_iseq != ISEQ_BODY(iseq)->local_iseq; level++) { + tmp_iseq = ISEQ_BODY(tmp_iseq)->parent_iseq; + } + + if (level > 0) access_outer_variables(iseq, level, rb_intern("yield"), true); +} + +/** + * Compiles a prism node into instruction sequences. + * + * iseq - The current instruction sequence object (used for locals) + * node - The prism node to compile + * ret - The linked list of instructions to append instructions onto + * popped - True if compiling something with no side effects, so instructions don't + * need to be added + * scope_node - Stores parser and local information + */ +static void +pm_compile_node(rb_iseq_t *iseq, const pm_node_t *node, LINK_ANCHOR *const ret, bool popped, pm_scope_node_t *scope_node) +{ + const pm_parser_t *parser = scope_node->parser; + const pm_node_location_t location = PM_NODE_START_LOCATION(parser, node); + int lineno = (int) location.line; + + if (PM_NODE_TYPE_P(node, PM_BEGIN_NODE) && (((const pm_begin_node_t *) node)->statements == NULL) && (((const pm_begin_node_t *) node)->rescue_clause != NULL)) { + // If this node is a begin node and it has empty statements and also + // has a rescue clause, then the other parser considers it as + // starting on the same line as the rescue, as opposed to the + // location of the begin keyword. We replicate that behavior here. + lineno = (int) PM_NODE_START_LINE_COLUMN(parser, ((const pm_begin_node_t *) node)->rescue_clause).line; + } + + if (PM_NODE_FLAG_P(node, PM_NODE_FLAG_NEWLINE) && ISEQ_COMPILE_DATA(iseq)->last_line != lineno) { + // If this node has the newline flag set and it is on a new line + // from the previous nodes that have been compiled for this ISEQ, + // then we need to emit a newline event. + int event = RUBY_EVENT_LINE; + + ISEQ_COMPILE_DATA(iseq)->last_line = lineno; + if (ISEQ_COVERAGE(iseq) && ISEQ_LINE_COVERAGE(iseq)) { + event |= RUBY_EVENT_COVERAGE_LINE; + } + PUSH_TRACE(ret, event); + } + + switch (PM_NODE_TYPE(node)) { + case PM_ALIAS_GLOBAL_VARIABLE_NODE: + // alias $foo $bar + // ^^^^^^^^^^^^^^^ + pm_compile_alias_global_variable_node(iseq, (const pm_alias_global_variable_node_t *) node, &location, ret, popped, scope_node); + return; + case PM_ALIAS_METHOD_NODE: + // alias foo bar + // ^^^^^^^^^^^^^ + pm_compile_alias_method_node(iseq, (const pm_alias_method_node_t *) node, &location, ret, popped, scope_node); + return; + case PM_AND_NODE: + // a and b + // ^^^^^^^ + pm_compile_and_node(iseq, (const pm_and_node_t *) node, &location, ret, popped, scope_node); + return; + case PM_ARGUMENTS_NODE: { + // break foo + // ^^^ + // + // These are ArgumentsNodes that are not compiled directly by their + // parent call nodes, used in the cases of NextNodes, ReturnNodes, and + // BreakNodes. They can create an array like ArrayNode. + const pm_arguments_node_t *cast = (const pm_arguments_node_t *) node; + const pm_node_list_t *elements = &cast->arguments; + + if (elements->size == 1) { + // If we are only returning a single element through one of the jump + // nodes, then we will only compile that node directly. + PM_COMPILE(elements->nodes[0]); + } + else { + pm_compile_array_node(iseq, (const pm_node_t *) cast, elements, &location, ret, popped, scope_node); + } + return; + } + case PM_ARRAY_NODE: { + // [foo, bar, baz] + // ^^^^^^^^^^^^^^^ + const pm_array_node_t *cast = (const pm_array_node_t *) node; + pm_compile_array_node(iseq, (const pm_node_t *) cast, &cast->elements, &location, ret, popped, scope_node); return; } - case PM_INTERPOLATED_REGULAR_EXPRESSION_NODE: { - // /foo #{bar}/ - // ^^^^^^^^^^^^ - if (PM_NODE_FLAG_P(node, PM_REGULAR_EXPRESSION_FLAGS_ONCE)) { - const rb_iseq_t *prevblock = ISEQ_COMPILE_DATA(iseq)->current_block; - const rb_iseq_t *block_iseq = NULL; - int ise_index = ISEQ_BODY(iseq)->ise_size++; - - pm_scope_node_t next_scope_node; - pm_scope_node_init(node, &next_scope_node, scope_node); - - block_iseq = NEW_CHILD_ISEQ(&next_scope_node, make_name_for_block(iseq), ISEQ_TYPE_BLOCK, location.line); - pm_scope_node_destroy(&next_scope_node); + case PM_ASSOC_NODE: { + // { foo: 1 } + // ^^^^^^ + // + // foo(bar: 1) + // ^^^^^^ + const pm_assoc_node_t *cast = (const pm_assoc_node_t *) node; - ISEQ_COMPILE_DATA(iseq)->current_block = block_iseq; - PUSH_INSN2(ret, location, once, block_iseq, INT2FIX(ise_index)); - ISEQ_COMPILE_DATA(iseq)->current_block = prevblock; + PM_COMPILE(cast->key); + PM_COMPILE(cast->value); - if (popped) PUSH_INSN(ret, location, pop); - return; - } + return; + } + case PM_ASSOC_SPLAT_NODE: { + // { **foo } + // ^^^^^ + // + // def foo(**); bar(**); end + // ^^ + const pm_assoc_splat_node_t *cast = (const pm_assoc_splat_node_t *) node; - if (PM_NODE_FLAG_P(node, PM_NODE_FLAG_STATIC_LITERAL)) { - if (!popped) { - VALUE regexp = pm_static_literal_value(iseq, node, scope_node); - PUSH_INSN1(ret, location, putobject, regexp); - } + if (cast->value != NULL) { + PM_COMPILE(cast->value); } - else { - pm_compile_regexp_dynamic(iseq, node, &((const pm_interpolated_regular_expression_node_t *) node)->parts, &location, ret, popped, scope_node); - if (popped) PUSH_INSN(ret, location, pop); + else if (!popped) { + pm_local_index_t index = pm_lookup_local_index(iseq, scope_node, PM_CONSTANT_POW, 0); + PUSH_GETLOCAL(ret, location, index.index, index.level); } return; } - case PM_INTERPOLATED_STRING_NODE: { - // "foo #{bar}" - // ^^^^^^^^^^^^ - if (PM_NODE_FLAG_P(node, PM_NODE_FLAG_STATIC_LITERAL)) { - if (!popped) { - VALUE string = pm_static_literal_value(iseq, node, scope_node); + case PM_BACK_REFERENCE_READ_NODE: { + // $+ + // ^^ + if (!popped) { + // Since a back reference is `$`, ruby represents the ID as the + // an rb_intern on the value after the `$`. + char *char_ptr = (char *)(node->location.start) + 1; + ID backref_val = INT2FIX(rb_intern2(char_ptr, 1)) << 1 | 1; + PUSH_INSN2(ret, location, getspecial, INT2FIX(1), backref_val); + } + return; + } + case PM_BEGIN_NODE: { + // begin end + // ^^^^^^^^^ + const pm_begin_node_t *cast = (const pm_begin_node_t *) node; - if (PM_NODE_FLAG_P(node, PM_INTERPOLATED_STRING_NODE_FLAGS_FROZEN)) { - PUSH_INSN1(ret, location, putobject, string); - } - else if (PM_NODE_FLAG_P(node, PM_INTERPOLATED_STRING_NODE_FLAGS_MUTABLE)) { - PUSH_INSN1(ret, location, putstring, string); - } - else { - PUSH_INSN1(ret, location, putchilledstring, string); - } - } + if (cast->ensure_clause) { + // Compiling the ensure clause will compile the rescue clause (if + // there is one), which will compile the begin statements. + pm_compile_ensure(iseq, cast, &location, ret, popped, scope_node); + } + else if (cast->rescue_clause) { + // Compiling rescue will compile begin statements (if applicable). + pm_compile_rescue(iseq, cast, &location, ret, popped, scope_node); } else { - const pm_interpolated_string_node_t *cast = (const pm_interpolated_string_node_t *) node; - int length = pm_interpolated_node_compile(iseq, &cast->parts, &location, ret, popped, scope_node, NULL, NULL); - if (length > 1) PUSH_INSN1(ret, location, concatstrings, INT2FIX(length)); - if (popped) PUSH_INSN(ret, location, pop); + // If there is neither ensure or rescue, the just compile the + // statements. + if (cast->statements != NULL) { + PM_COMPILE((const pm_node_t *) cast->statements); + } + else if (!popped) { + PUSH_SYNTHETIC_PUTNIL(ret, iseq); + } } - return; } - case PM_INTERPOLATED_SYMBOL_NODE: { - // :"foo #{bar}" - // ^^^^^^^^^^^^^ - const pm_interpolated_symbol_node_t *cast = (const pm_interpolated_symbol_node_t *) node; - int length = pm_interpolated_node_compile(iseq, &cast->parts, &location, ret, popped, scope_node, NULL, NULL); - - if (length > 1) { - PUSH_INSN1(ret, location, concatstrings, INT2FIX(length)); - } + case PM_BLOCK_ARGUMENT_NODE: { + // foo(&bar) + // ^^^^ + const pm_block_argument_node_t *cast = (const pm_block_argument_node_t *) node; - if (!popped) { - PUSH_INSN(ret, location, intern); + if (cast->expression != NULL) { + PM_COMPILE(cast->expression); } else { - PUSH_INSN(ret, location, pop); + // If there's no expression, this must be block forwarding. + pm_local_index_t local_index = pm_lookup_local_index(iseq, scope_node, PM_CONSTANT_AND, 0); + PUSH_INSN2(ret, location, getblockparamproxy, INT2FIX(local_index.index + VM_ENV_DATA_SIZE - 1), INT2FIX(local_index.level)); } - return; } - case PM_INTERPOLATED_X_STRING_NODE: { - // `foo #{bar}` + case PM_BREAK_NODE: + // break + // ^^^^^ + // + // break foo + // ^^^^^^^^^ + pm_compile_break_node(iseq, (const pm_break_node_t *) node, &location, ret, popped, scope_node); + return; + case PM_CALL_NODE: + // foo + // ^^^ + // + // foo.bar + // ^^^^^^^ + // + // foo.bar() {} // ^^^^^^^^^^^^ - const pm_interpolated_x_string_node_t *cast = (const pm_interpolated_x_string_node_t *) node; - - PUSH_INSN(ret, location, putself); - - int length = pm_interpolated_node_compile(iseq, &cast->parts, &location, ret, false, scope_node, NULL, NULL); - if (length > 1) PUSH_INSN1(ret, location, concatstrings, INT2FIX(length)); - - PUSH_SEND_WITH_FLAG(ret, location, idBackquote, INT2NUM(1), INT2FIX(VM_CALL_FCALL | VM_CALL_ARGS_SIMPLE)); - if (popped) PUSH_INSN(ret, location, pop); - + pm_compile_call_node(iseq, (const pm_call_node_t *) node, ret, popped, scope_node); return; - } - case PM_IT_LOCAL_VARIABLE_READ_NODE: { - // -> { it } - // ^^ - if (!popped) { - PUSH_GETLOCAL(ret, location, scope_node->local_table_for_iseq_size, 0); - } - + case PM_CALL_AND_WRITE_NODE: { + // foo.bar &&= baz + // ^^^^^^^^^^^^^^^ + const pm_call_and_write_node_t *cast = (const pm_call_and_write_node_t *) node; + pm_compile_call_and_or_write_node(iseq, true, cast->receiver, cast->value, cast->write_name, cast->read_name, PM_NODE_FLAG_P(cast, PM_CALL_NODE_FLAGS_SAFE_NAVIGATION), &location, ret, popped, scope_node); return; } - case PM_KEYWORD_HASH_NODE: { - // foo(bar: baz) - // ^^^^^^^^ - const pm_keyword_hash_node_t *cast = (const pm_keyword_hash_node_t *) node; - const pm_node_list_t *elements = &cast->elements; - - const pm_node_t *element; - PM_NODE_LIST_FOREACH(elements, index, element) { - PM_COMPILE(element); - } - - if (!popped) PUSH_INSN1(ret, location, newhash, INT2FIX(elements->size * 2)); + case PM_CALL_OR_WRITE_NODE: { + // foo.bar ||= baz + // ^^^^^^^^^^^^^^^ + const pm_call_or_write_node_t *cast = (const pm_call_or_write_node_t *) node; + pm_compile_call_and_or_write_node(iseq, false, cast->receiver, cast->value, cast->write_name, cast->read_name, PM_NODE_FLAG_P(cast, PM_CALL_NODE_FLAGS_SAFE_NAVIGATION), &location, ret, popped, scope_node); return; } - case PM_LAMBDA_NODE: { - // -> {} - // ^^^^^ - const pm_lambda_node_t *cast = (const pm_lambda_node_t *) node; + case PM_CALL_OPERATOR_WRITE_NODE: + // foo.bar += baz + // ^^^^^^^^^^^^^^^ + // + // Call operator writes occur when you have a call node on the left-hand + // side of a write operator that is not `=`. As an example, + // `foo.bar *= 1`. This breaks down to caching the receiver on the + // stack and then performing three method calls, one to read the value, + // one to compute the result, and one to write the result back to the + // receiver. + pm_compile_call_operator_write_node(iseq, (const pm_call_operator_write_node_t *) node, &location, ret, popped, scope_node); + return; + case PM_CASE_NODE: + // case foo; when bar; end + // ^^^^^^^^^^^^^^^^^^^^^^^ + pm_compile_case_node(iseq, (const pm_case_node_t *) node, &location, ret, popped, scope_node); + return; + case PM_CASE_MATCH_NODE: + // case foo; in bar; end + // ^^^^^^^^^^^^^^^^^^^^^ + // + // If you use the `case` keyword to create a case match node, it will + // match against all of the `in` clauses until it finds one that + // matches. If it doesn't find one, it can optionally fall back to an + // `else` clause. If none is present and a match wasn't found, it will + // raise an appropriate error. + pm_compile_case_match_node(iseq, (const pm_case_match_node_t *) node, &location, ret, popped, scope_node); + return; + case PM_CLASS_NODE: { + // class Foo; end + // ^^^^^^^^^^^^^^ + const pm_class_node_t *cast = (const pm_class_node_t *) node; + + ID class_id = pm_constant_id_lookup(scope_node, cast->name); + VALUE class_name = rb_str_freeze(rb_sprintf("", rb_id2str(class_id))); pm_scope_node_t next_scope_node; - pm_scope_node_init(node, &next_scope_node, scope_node); + pm_scope_node_init((const pm_node_t *) cast, &next_scope_node, scope_node); - int opening_lineno = pm_location_line_number(parser, &cast->opening_loc); - const rb_iseq_t *block = NEW_CHILD_ISEQ(&next_scope_node, make_name_for_block(iseq), ISEQ_TYPE_BLOCK, opening_lineno); + const rb_iseq_t *class_iseq = NEW_CHILD_ISEQ(&next_scope_node, class_name, ISEQ_TYPE_CLASS, location.line); pm_scope_node_destroy(&next_scope_node); - VALUE argc = INT2FIX(0); - PUSH_INSN1(ret, location, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE)); - PUSH_CALL_WITH_BLOCK(ret, location, idLambda, argc, block); - RB_OBJ_WRITTEN(iseq, Qundef, (VALUE) block); + // TODO: Once we merge constant path nodes correctly, fix this flag + const int flags = VM_DEFINECLASS_TYPE_CLASS | + (cast->superclass ? VM_DEFINECLASS_FLAG_HAS_SUPERCLASS : 0) | + pm_compile_class_path(iseq, cast->constant_path, &location, ret, false, scope_node); + + if (cast->superclass) { + PM_COMPILE_NOT_POPPED(cast->superclass); + } + else { + PUSH_INSN(ret, location, putnil); + } + + { + VALUE operand = ID2SYM(class_id); + PUSH_INSN3(ret, location, defineclass, operand, class_iseq, INT2FIX(flags)); + } + RB_OBJ_WRITTEN(iseq, Qundef, (VALUE)class_iseq); if (popped) PUSH_INSN(ret, location, pop); return; } - case PM_LOCAL_VARIABLE_AND_WRITE_NODE: { - // foo &&= bar - // ^^^^^^^^^^^ - const pm_local_variable_and_write_node_t *cast = (const pm_local_variable_and_write_node_t *) node; + case PM_CLASS_VARIABLE_AND_WRITE_NODE: { + // @@foo &&= bar + // ^^^^^^^^^^^^^ + const pm_class_variable_and_write_node_t *cast = (const pm_class_variable_and_write_node_t *) node; LABEL *end_label = NEW_LABEL(location.line); - pm_local_index_t local_index = pm_lookup_local_index(iseq, scope_node, cast->name, cast->depth); - PUSH_GETLOCAL(ret, location, local_index.index, local_index.level); + ID name_id = pm_constant_id_lookup(scope_node, cast->name); + VALUE name = ID2SYM(name_id); + + PUSH_INSN2(ret, location, getclassvariable, name, get_cvar_ic_value(iseq, name_id)); if (!popped) PUSH_INSN(ret, location, dup); PUSH_INSNL(ret, location, branchunless, end_label); @@ -7668,1813 +8478,1320 @@ pm_compile_node(rb_iseq_t *iseq, const pm_node_t *node, LINK_ANCHOR *const ret, PM_COMPILE_NOT_POPPED(cast->value); if (!popped) PUSH_INSN(ret, location, dup); - PUSH_SETLOCAL(ret, location, local_index.index, local_index.level); + PUSH_INSN2(ret, location, setclassvariable, name, get_cvar_ic_value(iseq, name_id)); PUSH_LABEL(ret, end_label); return; } - case PM_LOCAL_VARIABLE_OPERATOR_WRITE_NODE: { - // foo += bar - // ^^^^^^^^^^ - const pm_local_variable_operator_write_node_t *cast = (const pm_local_variable_operator_write_node_t *) node; + case PM_CLASS_VARIABLE_OPERATOR_WRITE_NODE: { + // @@foo += bar + // ^^^^^^^^^^^^ + const pm_class_variable_operator_write_node_t *cast = (const pm_class_variable_operator_write_node_t *) node; - pm_local_index_t local_index = pm_lookup_local_index(iseq, scope_node, cast->name, cast->depth); - PUSH_GETLOCAL(ret, location, local_index.index, local_index.level); + ID name_id = pm_constant_id_lookup(scope_node, cast->name); + VALUE name = ID2SYM(name_id); + PUSH_INSN2(ret, location, getclassvariable, name, get_cvar_ic_value(iseq, name_id)); PM_COMPILE_NOT_POPPED(cast->value); ID method_id = pm_constant_id_lookup(scope_node, cast->binary_operator); - PUSH_SEND_WITH_FLAG(ret, location, method_id, INT2NUM(1), INT2FIX(VM_CALL_ARGS_SIMPLE)); + int flags = VM_CALL_ARGS_SIMPLE; + PUSH_SEND_WITH_FLAG(ret, location, method_id, INT2NUM(1), INT2FIX(flags)); if (!popped) PUSH_INSN(ret, location, dup); - PUSH_SETLOCAL(ret, location, local_index.index, local_index.level); + PUSH_INSN2(ret, location, setclassvariable, name, get_cvar_ic_value(iseq, name_id)); return; } - case PM_LOCAL_VARIABLE_OR_WRITE_NODE: { - // foo ||= bar - // ^^^^^^^^^^^ - const pm_local_variable_or_write_node_t *cast = (const pm_local_variable_or_write_node_t *) node; - - LABEL *set_label = NEW_LABEL(location.line); + case PM_CLASS_VARIABLE_OR_WRITE_NODE: { + // @@foo ||= bar + // ^^^^^^^^^^^^^ + const pm_class_variable_or_write_node_t *cast = (const pm_class_variable_or_write_node_t *) node; LABEL *end_label = NEW_LABEL(location.line); + LABEL *start_label = NEW_LABEL(location.line); - PUSH_INSN1(ret, location, putobject, Qtrue); - PUSH_INSNL(ret, location, branchunless, set_label); + ID name_id = pm_constant_id_lookup(scope_node, cast->name); + VALUE name = ID2SYM(name_id); - pm_local_index_t local_index = pm_lookup_local_index(iseq, scope_node, cast->name, cast->depth); - PUSH_GETLOCAL(ret, location, local_index.index, local_index.level); + PUSH_INSN(ret, location, putnil); + PUSH_INSN3(ret, location, defined, INT2FIX(DEFINED_CVAR), name, Qtrue); + PUSH_INSNL(ret, location, branchunless, start_label); + + PUSH_INSN2(ret, location, getclassvariable, name, get_cvar_ic_value(iseq, name_id)); if (!popped) PUSH_INSN(ret, location, dup); PUSH_INSNL(ret, location, branchif, end_label); if (!popped) PUSH_INSN(ret, location, pop); - PUSH_LABEL(ret, set_label); + PUSH_LABEL(ret, start_label); PM_COMPILE_NOT_POPPED(cast->value); if (!popped) PUSH_INSN(ret, location, dup); - PUSH_SETLOCAL(ret, location, local_index.index, local_index.level); + PUSH_INSN2(ret, location, setclassvariable, name, get_cvar_ic_value(iseq, name_id)); PUSH_LABEL(ret, end_label); return; } - case PM_LOCAL_VARIABLE_READ_NODE: { - // foo - // ^^^ + case PM_CLASS_VARIABLE_READ_NODE: { + // @@foo + // ^^^^^ if (!popped) { - const pm_local_variable_read_node_t *cast = (const pm_local_variable_read_node_t *) node; - pm_local_index_t index = pm_lookup_local_index(iseq, scope_node, cast->name, cast->depth); - PUSH_GETLOCAL(ret, location, index.index, index.level); + const pm_class_variable_read_node_t *cast = (const pm_class_variable_read_node_t *) node; + ID name = pm_constant_id_lookup(scope_node, cast->name); + PUSH_INSN2(ret, location, getclassvariable, ID2SYM(name), get_cvar_ic_value(iseq, name)); } - return; } - case PM_LOCAL_VARIABLE_WRITE_NODE: { - // foo = 1 - // ^^^^^^^ - const pm_local_variable_write_node_t *cast = (const pm_local_variable_write_node_t *) node; + case PM_CLASS_VARIABLE_WRITE_NODE: { + // @@foo = 1 + // ^^^^^^^^^ + const pm_class_variable_write_node_t *cast = (const pm_class_variable_write_node_t *) node; PM_COMPILE_NOT_POPPED(cast->value); if (!popped) PUSH_INSN(ret, location, dup); - pm_local_index_t index = pm_lookup_local_index(iseq, scope_node, cast->name, cast->depth); - PUSH_SETLOCAL(ret, location, index.index, index.level); - return; - } - case PM_MATCH_LAST_LINE_NODE: { - // if /foo/ then end - // ^^^^^ - VALUE regexp = pm_static_literal_value(iseq, node, scope_node); - - PUSH_INSN1(ret, location, putobject, regexp); - PUSH_INSN2(ret, location, getspecial, INT2FIX(0), INT2FIX(0)); - PUSH_SEND(ret, location, idEqTilde, INT2NUM(1)); - if (popped) PUSH_INSN(ret, location, pop); + ID name = pm_constant_id_lookup(scope_node, cast->name); + PUSH_INSN2(ret, location, setclassvariable, ID2SYM(name), get_cvar_ic_value(iseq, name)); return; } - case PM_MATCH_PREDICATE_NODE: { - // foo in bar - // ^^^^^^^^^^ - const pm_match_predicate_node_t *cast = (const pm_match_predicate_node_t *) node; + case PM_CONSTANT_PATH_NODE: { + // Foo::Bar + // ^^^^^^^^ + VALUE parts; - // First, allocate some stack space for the cached return value of any - // calls to #deconstruct. - PUSH_INSN(ret, location, putnil); + if (ISEQ_COMPILE_DATA(iseq)->option->inline_const_cache && ((parts = pm_constant_path_parts(node, scope_node)) != Qnil)) { + ISEQ_BODY(iseq)->ic_size++; + PUSH_INSN1(ret, location, opt_getconstant_path, parts); + } + else { + DECL_ANCHOR(prefix); + INIT_ANCHOR(prefix); - // Next, compile the expression that we're going to match against. - PM_COMPILE_NOT_POPPED(cast->value); - PUSH_INSN(ret, location, dup); + DECL_ANCHOR(body); + INIT_ANCHOR(body); - // Now compile the pattern that is going to be used to match against the - // expression. - LABEL *matched_label = NEW_LABEL(location.line); - LABEL *unmatched_label = NEW_LABEL(location.line); - LABEL *done_label = NEW_LABEL(location.line); - pm_compile_pattern(iseq, scope_node, cast->pattern, ret, matched_label, unmatched_label, false, false, true, 2); + pm_compile_constant_path(iseq, node, prefix, body, popped, scope_node); + if (LIST_INSN_SIZE_ZERO(prefix)) { + PUSH_INSN(ret, location, putnil); + } + else { + PUSH_SEQ(ret, prefix); + } - // If the pattern did not match, then compile the necessary instructions - // to handle pushing false onto the stack, then jump to the end. - PUSH_LABEL(ret, unmatched_label); - PUSH_INSN(ret, location, pop); - PUSH_INSN(ret, location, pop); + PUSH_SEQ(ret, body); + } - if (!popped) PUSH_INSN1(ret, location, putobject, Qfalse); - PUSH_INSNL(ret, location, jump, done_label); - PUSH_INSN(ret, location, putnil); + if (popped) PUSH_INSN(ret, location, pop); + return; + } + case PM_CONSTANT_PATH_AND_WRITE_NODE: { + // Foo::Bar &&= baz + // ^^^^^^^^^^^^^^^^ + const pm_constant_path_and_write_node_t *cast = (const pm_constant_path_and_write_node_t *) node; + pm_compile_constant_path_and_write_node(iseq, cast, 0, &location, ret, popped, scope_node); + return; + } + case PM_CONSTANT_PATH_OR_WRITE_NODE: { + // Foo::Bar ||= baz + // ^^^^^^^^^^^^^^^^ + const pm_constant_path_or_write_node_t *cast = (const pm_constant_path_or_write_node_t *) node; + pm_compile_constant_path_or_write_node(iseq, cast, 0, &location, ret, popped, scope_node); + return; + } + case PM_CONSTANT_PATH_OPERATOR_WRITE_NODE: { + // Foo::Bar += baz + // ^^^^^^^^^^^^^^^ + const pm_constant_path_operator_write_node_t *cast = (const pm_constant_path_operator_write_node_t *) node; + pm_compile_constant_path_operator_write_node(iseq, cast, 0, &location, ret, popped, scope_node); + return; + } + case PM_CONSTANT_PATH_WRITE_NODE: { + // Foo::Bar = 1 + // ^^^^^^^^^^^^ + const pm_constant_path_write_node_t *cast = (const pm_constant_path_write_node_t *) node; + pm_compile_constant_path_write_node(iseq, cast, 0, &location, ret, popped, scope_node); + return; + } + case PM_CONSTANT_READ_NODE: { + // Foo + // ^^^ + const pm_constant_read_node_t *cast = (const pm_constant_read_node_t *) node; + VALUE name = ID2SYM(pm_constant_id_lookup(scope_node, cast->name)); - // If the pattern did match, then compile the necessary instructions to - // handle pushing true onto the stack, then jump to the end. - PUSH_LABEL(ret, matched_label); - PUSH_INSN1(ret, location, adjuststack, INT2FIX(2)); - if (!popped) PUSH_INSN1(ret, location, putobject, Qtrue); - PUSH_INSNL(ret, location, jump, done_label); + pm_compile_constant_read(iseq, name, &cast->base.location, location.node_id, ret, scope_node); + if (popped) PUSH_INSN(ret, location, pop); - PUSH_LABEL(ret, done_label); return; } - case PM_MATCH_REQUIRED_NODE: { - // foo => bar + case PM_CONSTANT_AND_WRITE_NODE: { + // Foo &&= bar + // ^^^^^^^^^^^ + const pm_constant_and_write_node_t *cast = (const pm_constant_and_write_node_t *) node; + pm_compile_constant_and_write_node(iseq, cast, 0, &location, ret, popped, scope_node); + return; + } + case PM_CONSTANT_OR_WRITE_NODE: { + // Foo ||= bar + // ^^^^^^^^^^^ + const pm_constant_or_write_node_t *cast = (const pm_constant_or_write_node_t *) node; + pm_compile_constant_or_write_node(iseq, cast, 0, &location, ret, popped, scope_node); + return; + } + case PM_CONSTANT_OPERATOR_WRITE_NODE: { + // Foo += bar // ^^^^^^^^^^ - // - // A match required node represents pattern matching against a single - // pattern using the => operator. For example, - // - // foo => bar - // - // This is somewhat analogous to compiling a case match statement with a - // single pattern. In both cases, if the pattern fails it should - // immediately raise an error. - const pm_match_required_node_t *cast = (const pm_match_required_node_t *) node; - - LABEL *matched_label = NEW_LABEL(location.line); - LABEL *unmatched_label = NEW_LABEL(location.line); - LABEL *done_label = NEW_LABEL(location.line); - - // First, we're going to push a bunch of stuff onto the stack that is - // going to serve as our scratch space. - PUSH_INSN(ret, location, putnil); // key error key - PUSH_INSN(ret, location, putnil); // key error matchee - PUSH_INSN1(ret, location, putobject, Qfalse); // key error? - PUSH_INSN(ret, location, putnil); // error string - PUSH_INSN(ret, location, putnil); // deconstruct cache - - // Next we're going to compile the value expression such that it's on - // the stack. - PM_COMPILE_NOT_POPPED(cast->value); - - // Here we'll dup it so that it can be used for comparison, but also be - // used for error handling. - PUSH_INSN(ret, location, dup); - - // Next we'll compile the pattern. We indicate to the pm_compile_pattern - // function that this is the only pattern that will be matched against - // through the in_single_pattern parameter. We also indicate that the - // value to compare against is 2 slots from the top of the stack (the - // base_index parameter). - pm_compile_pattern(iseq, scope_node, cast->pattern, ret, matched_label, unmatched_label, true, false, true, 2); - - // If the pattern did not match the value, then we're going to compile - // in our error handler code. This will determine which error to raise - // and raise it. - PUSH_LABEL(ret, unmatched_label); - pm_compile_pattern_error_handler(iseq, scope_node, node, ret, done_label, popped); - - // If the pattern did match, we'll clean up the values we've pushed onto - // the stack and then push nil onto the stack if it's not popped. - PUSH_LABEL(ret, matched_label); - PUSH_INSN1(ret, location, adjuststack, INT2FIX(6)); - if (!popped) PUSH_INSN(ret, location, putnil); - PUSH_INSNL(ret, location, jump, done_label); - - PUSH_LABEL(ret, done_label); + const pm_constant_operator_write_node_t *cast = (const pm_constant_operator_write_node_t *) node; + pm_compile_constant_operator_write_node(iseq, cast, 0, &location, ret, popped, scope_node); return; } - case PM_MATCH_WRITE_NODE: { - // /(?foo)/ =~ bar - // ^^^^^^^^^^^^^^^^^^^^ + case PM_CONSTANT_WRITE_NODE: { + // Foo = 1 + // ^^^^^^^ + const pm_constant_write_node_t *cast = (const pm_constant_write_node_t *) node; + pm_compile_constant_write_node(iseq, cast, 0, &location, ret, popped, scope_node); + return; + } + case PM_DEF_NODE: { + // def foo; end + // ^^^^^^^^^^^^ // - // Match write nodes are specialized call nodes that have a regular - // expression with valid named capture groups on the left, the =~ - // operator, and some value on the right. The nodes themselves simply - // wrap the call with the local variable targets that will be written - // when the call is executed. - const pm_match_write_node_t *cast = (const pm_match_write_node_t *) node; - LABEL *fail_label = NEW_LABEL(location.line); - LABEL *end_label = NEW_LABEL(location.line); - - // First, we'll compile the call so that all of its instructions are - // present. Then we'll compile all of the local variable targets. - PM_COMPILE_NOT_POPPED((const pm_node_t *) cast->call); - - // Now, check if the match was successful. If it was, then we'll - // continue on and assign local variables. Otherwise we'll skip over the - // assignment code. - PUSH_INSN1(ret, location, getglobal, rb_id2sym(idBACKREF)); - PUSH_INSN(ret, location, dup); - PUSH_INSNL(ret, location, branchunless, fail_label); - - // If there's only a single local variable target, we can skip some of - // the bookkeeping, so we'll put a special branch here. - size_t targets_count = cast->targets.size; - - if (targets_count == 1) { - const pm_node_t *target = cast->targets.nodes[0]; - RUBY_ASSERT(PM_NODE_TYPE_P(target, PM_LOCAL_VARIABLE_TARGET_NODE)); - - const pm_local_variable_target_node_t *local_target = (const pm_local_variable_target_node_t *) target; - pm_local_index_t index = pm_lookup_local_index(iseq, scope_node, local_target->name, local_target->depth); - - PUSH_INSN1(ret, location, putobject, rb_id2sym(pm_constant_id_lookup(scope_node, local_target->name))); - PUSH_SEND(ret, location, idAREF, INT2FIX(1)); - PUSH_LABEL(ret, fail_label); - PUSH_SETLOCAL(ret, location, index.index, index.level); - if (popped) PUSH_INSN(ret, location, pop); - return; - } - - DECL_ANCHOR(fail_anchor); - INIT_ANCHOR(fail_anchor); - - // Otherwise there is more than one local variable target, so we'll need - // to do some bookkeeping. - for (size_t targets_index = 0; targets_index < targets_count; targets_index++) { - const pm_node_t *target = cast->targets.nodes[targets_index]; - RUBY_ASSERT(PM_NODE_TYPE_P(target, PM_LOCAL_VARIABLE_TARGET_NODE)); + // def self.foo; end + // ^^^^^^^^^^^^^^^^^ + const pm_def_node_t *cast = (const pm_def_node_t *) node; + ID method_name = pm_constant_id_lookup(scope_node, cast->name); - const pm_local_variable_target_node_t *local_target = (const pm_local_variable_target_node_t *) target; - pm_local_index_t index = pm_lookup_local_index(iseq, scope_node, local_target->name, local_target->depth); + pm_scope_node_t next_scope_node; + pm_scope_node_init((const pm_node_t *) cast, &next_scope_node, scope_node); - if (((size_t) targets_index) < (targets_count - 1)) { - PUSH_INSN(ret, location, dup); - } - PUSH_INSN1(ret, location, putobject, rb_id2sym(pm_constant_id_lookup(scope_node, local_target->name))); - PUSH_SEND(ret, location, idAREF, INT2FIX(1)); - PUSH_SETLOCAL(ret, location, index.index, index.level); + rb_iseq_t *method_iseq = NEW_ISEQ(&next_scope_node, rb_id2str(method_name), ISEQ_TYPE_METHOD, location.line); + pm_scope_node_destroy(&next_scope_node); - PUSH_INSN(fail_anchor, location, putnil); - PUSH_SETLOCAL(fail_anchor, location, index.index, index.level); + if (cast->receiver) { + PM_COMPILE_NOT_POPPED(cast->receiver); + PUSH_INSN2(ret, location, definesmethod, ID2SYM(method_name), method_iseq); } + else { + PUSH_INSN2(ret, location, definemethod, ID2SYM(method_name), method_iseq); + } + RB_OBJ_WRITTEN(iseq, Qundef, (VALUE) method_iseq); - // Since we matched successfully, now we'll jump to the end. - PUSH_INSNL(ret, location, jump, end_label); - - // In the case that the match failed, we'll loop through each local - // variable target and set all of them to `nil`. - PUSH_LABEL(ret, fail_label); - PUSH_INSN(ret, location, pop); - PUSH_SEQ(ret, fail_anchor); + if (!popped) { + PUSH_INSN1(ret, location, putobject, ID2SYM(method_name)); + } - // Finally, we can push the end label for either case. - PUSH_LABEL(ret, end_label); - if (popped) PUSH_INSN(ret, location, pop); return; } - case PM_MISSING_NODE: { - rb_bug("A pm_missing_node_t should not exist in prism's AST."); + case PM_DEFINED_NODE: { + // defined?(a) + // ^^^^^^^^^^^ + const pm_defined_node_t *cast = (const pm_defined_node_t *) node; + pm_compile_defined_expr(iseq, cast->value, &location, ret, popped, scope_node, false); return; } - case PM_MODULE_NODE: { - // module Foo; end - // ^^^^^^^^^^^^^^^ - const pm_module_node_t *cast = (const pm_module_node_t *) node; - - ID module_id = pm_constant_id_lookup(scope_node, cast->name); - VALUE module_name = rb_str_freeze(rb_sprintf("", rb_id2str(module_id))); - - pm_scope_node_t next_scope_node; - pm_scope_node_init((const pm_node_t *) cast, &next_scope_node, scope_node); - - const rb_iseq_t *module_iseq = NEW_CHILD_ISEQ(&next_scope_node, module_name, ISEQ_TYPE_CLASS, location.line); - pm_scope_node_destroy(&next_scope_node); + case PM_EMBEDDED_STATEMENTS_NODE: { + // "foo #{bar}" + // ^^^^^^ + const pm_embedded_statements_node_t *cast = (const pm_embedded_statements_node_t *) node; - const int flags = VM_DEFINECLASS_TYPE_MODULE | pm_compile_class_path(iseq, cast->constant_path, &location, ret, false, scope_node); - PUSH_INSN(ret, location, putnil); - PUSH_INSN3(ret, location, defineclass, ID2SYM(module_id), module_iseq, INT2FIX(flags)); - RB_OBJ_WRITTEN(iseq, Qundef, (VALUE) module_iseq); + if (cast->statements != NULL) { + PM_COMPILE((const pm_node_t *) (cast->statements)); + } + else { + PUSH_SYNTHETIC_PUTNIL(ret, iseq); + } if (popped) PUSH_INSN(ret, location, pop); return; } - case PM_REQUIRED_PARAMETER_NODE: { - // def foo(bar); end - // ^^^ - const pm_required_parameter_node_t *cast = (const pm_required_parameter_node_t *) node; - pm_local_index_t index = pm_lookup_local_index(iseq, scope_node, cast->name, 0); - - PUSH_SETLOCAL(ret, location, index.index, index.level); + case PM_EMBEDDED_VARIABLE_NODE: { + // "foo #@bar" + // ^^^^^ + const pm_embedded_variable_node_t *cast = (const pm_embedded_variable_node_t *) node; + PM_COMPILE(cast->variable); return; } - case PM_MULTI_WRITE_NODE: { - // foo, bar = baz - // ^^^^^^^^^^^^^^ - // - // A multi write node represents writing to multiple values using an = - // operator. Importantly these nodes are only parsed when the left-hand - // side of the operator has multiple targets. The right-hand side of the - // operator having multiple targets represents an implicit array - // instead. - const pm_multi_write_node_t *cast = (const pm_multi_write_node_t *) node; - - DECL_ANCHOR(writes); - INIT_ANCHOR(writes); - - DECL_ANCHOR(cleanup); - INIT_ANCHOR(cleanup); - - pm_multi_target_state_t state = { 0 }; - state.position = popped ? 0 : 1; - pm_compile_multi_target_node(iseq, node, ret, writes, cleanup, scope_node, &state); - - PM_COMPILE_NOT_POPPED(cast->value); - if (!popped) PUSH_INSN(ret, location, dup); - - PUSH_SEQ(ret, writes); - if (!popped && state.stack_size >= 1) { - // Make sure the value on the right-hand side of the = operator is - // being returned before we pop the parent expressions. - PUSH_INSN1(ret, location, setn, INT2FIX(state.stack_size)); + case PM_FALSE_NODE: { + // false + // ^^^^^ + if (!popped) { + PUSH_INSN1(ret, location, putobject, Qfalse); } - - // Now, we need to go back and modify the topn instructions in order to - // ensure they can correctly retrieve the parent expressions. - pm_multi_target_state_update(&state); - - PUSH_SEQ(ret, cleanup); return; } - case PM_NEXT_NODE: { - // next - // ^^^^ - // - // next foo - // ^^^^^^^^ - const pm_next_node_t *cast = (const pm_next_node_t *) node; - - if (ISEQ_COMPILE_DATA(iseq)->redo_label != 0 && can_add_ensure_iseq(iseq)) { - LABEL *splabel = NEW_LABEL(0); - PUSH_LABEL(ret, splabel); + case PM_ENSURE_NODE: { + const pm_ensure_node_t *cast = (const pm_ensure_node_t *) node; - if (cast->arguments) { - PM_COMPILE_NOT_POPPED((const pm_node_t *) cast->arguments); - } - else { - PUSH_INSN(ret, location, putnil); - } - pm_add_ensure_iseq(ret, iseq, 0, scope_node); + if (cast->statements != NULL) { + LABEL *start = NEW_LABEL(location.line); + LABEL *end = NEW_LABEL(location.line); + PUSH_LABEL(ret, start); - PUSH_ADJUST(ret, location, ISEQ_COMPILE_DATA(iseq)->redo_label); - PUSH_INSNL(ret, location, jump, ISEQ_COMPILE_DATA(iseq)->start_label); + LABEL *prev_end_label = ISEQ_COMPILE_DATA(iseq)->end_label; + ISEQ_COMPILE_DATA(iseq)->end_label = end; - PUSH_ADJUST_RESTORE(ret, splabel); - if (!popped) PUSH_INSN(ret, location, putnil); + PM_COMPILE((const pm_node_t *) cast->statements); + ISEQ_COMPILE_DATA(iseq)->end_label = prev_end_label; + PUSH_LABEL(ret, end); } - else if (ISEQ_COMPILE_DATA(iseq)->end_label && can_add_ensure_iseq(iseq)) { - LABEL *splabel = NEW_LABEL(0); - - PUSH_LABEL(ret, splabel); - PUSH_ADJUST(ret, location, ISEQ_COMPILE_DATA(iseq)->start_label); - - if (cast->arguments != NULL) { - PM_COMPILE_NOT_POPPED((const pm_node_t *) cast->arguments); - } - else { - PUSH_INSN(ret, location, putnil); - } - pm_add_ensure_iseq(ret, iseq, 0, scope_node); - PUSH_INSNL(ret, location, jump, ISEQ_COMPILE_DATA(iseq)->end_label); - PUSH_ADJUST_RESTORE(ret, splabel); - splabel->unremovable = FALSE; + return; + } + case PM_ELSE_NODE: { + // if foo then bar else baz end + // ^^^^^^^^^^^^ + const pm_else_node_t *cast = (const pm_else_node_t *) node; - if (!popped) PUSH_INSN(ret, location, putnil); + if (cast->statements != NULL) { + PM_COMPILE((const pm_node_t *) cast->statements); + } + else if (!popped) { + PUSH_SYNTHETIC_PUTNIL(ret, iseq); } - else { - const rb_iseq_t *ip = iseq; - unsigned long throw_flag = 0; - while (ip) { - if (!ISEQ_COMPILE_DATA(ip)) { - ip = 0; - break; - } + return; + } + case PM_FLIP_FLOP_NODE: { + // if foo .. bar; end + // ^^^^^^^^^^ + const pm_flip_flop_node_t *cast = (const pm_flip_flop_node_t *) node; - throw_flag = VM_THROW_NO_ESCAPE_FLAG; - if (ISEQ_COMPILE_DATA(ip)->redo_label != 0) { - /* while loop */ - break; - } - else if (ISEQ_BODY(ip)->type == ISEQ_TYPE_BLOCK) { - break; - } - else if (ISEQ_BODY(ip)->type == ISEQ_TYPE_EVAL) { - COMPILE_ERROR(iseq, location.line, "Can't escape from eval with next"); - return; - } + LABEL *final_label = NEW_LABEL(location.line); + LABEL *then_label = NEW_LABEL(location.line); + LABEL *else_label = NEW_LABEL(location.line); - ip = ISEQ_BODY(ip)->parent_iseq; - } - if (ip != 0) { - if (cast->arguments) { - PM_COMPILE_NOT_POPPED((const pm_node_t *) cast->arguments); - } - else { - PUSH_INSN(ret, location, putnil); - } + pm_compile_flip_flop(cast, else_label, then_label, iseq, location.line, ret, popped, scope_node); - PUSH_INSN1(ret, location, throw, INT2FIX(throw_flag | TAG_NEXT)); - if (popped) PUSH_INSN(ret, location, pop); - } - else { - COMPILE_ERROR(iseq, location.line, "Invalid next"); - return; - } - } + PUSH_LABEL(ret, then_label); + PUSH_INSN1(ret, location, putobject, Qtrue); + PUSH_INSNL(ret, location, jump, final_label); + PUSH_LABEL(ret, else_label); + PUSH_INSN1(ret, location, putobject, Qfalse); + PUSH_LABEL(ret, final_label); return; } - case PM_NIL_NODE: { - // nil + case PM_FLOAT_NODE: { + // 1.0 // ^^^ if (!popped) { - PUSH_INSN(ret, location, putnil); + VALUE operand = parse_float((const pm_float_node_t *) node); + PUSH_INSN1(ret, location, putobject, operand); } - - return; - } - case PM_NO_KEYWORDS_PARAMETER_NODE: { - // def foo(**nil); end - // ^^^^^ - ISEQ_BODY(iseq)->param.flags.accepts_no_kwarg = TRUE; return; } - case PM_NUMBERED_REFERENCE_READ_NODE: { - // $1 - // ^^ - if (!popped) { - uint32_t reference_number = ((const pm_numbered_reference_read_node_t *) node)->number; + case PM_FOR_NODE: { + // for foo in bar do end + // ^^^^^^^^^^^^^^^^^^^^^ + const pm_for_node_t *cast = (const pm_for_node_t *) node; - if (reference_number > 0) { - PUSH_INSN2(ret, location, getspecial, INT2FIX(1), INT2FIX(reference_number << 1)); - } - else { - PUSH_INSN(ret, location, putnil); - } - } + LABEL *retry_label = NEW_LABEL(location.line); + LABEL *retry_end_l = NEW_LABEL(location.line); + + // First, compile the collection that we're going to be iterating over. + PUSH_LABEL(ret, retry_label); + PM_COMPILE_NOT_POPPED(cast->collection); + + // Next, create the new scope that is going to contain the block that + // will be passed to the each method. + pm_scope_node_t next_scope_node; + pm_scope_node_init((const pm_node_t *) cast, &next_scope_node, scope_node); + + const rb_iseq_t *child_iseq = NEW_CHILD_ISEQ(&next_scope_node, make_name_for_block(iseq), ISEQ_TYPE_BLOCK, location.line); + pm_scope_node_destroy(&next_scope_node); + + const rb_iseq_t *prev_block = ISEQ_COMPILE_DATA(iseq)->current_block; + ISEQ_COMPILE_DATA(iseq)->current_block = child_iseq; + + // Now, create the method call to each that will be used to iterate over + // the collection, and pass the newly created iseq as the block. + PUSH_SEND_WITH_BLOCK(ret, location, idEach, INT2FIX(0), child_iseq); + pm_compile_retry_end_label(iseq, ret, retry_end_l); + if (popped) PUSH_INSN(ret, location, pop); + ISEQ_COMPILE_DATA(iseq)->current_block = prev_block; + PUSH_CATCH_ENTRY(CATCH_TYPE_BREAK, retry_label, retry_end_l, child_iseq, retry_end_l); return; } - case PM_OR_NODE: { - // a or b - // ^^^^^^ - const pm_or_node_t *cast = (const pm_or_node_t *) node; - + case PM_FORWARDING_ARGUMENTS_NODE: + rb_bug("Cannot compile a ForwardingArgumentsNode directly\n"); + return; + case PM_FORWARDING_SUPER_NODE: + // super + // ^^^^^ + // + // super {} + // ^^^^^^^^ + pm_compile_forwarding_super_node(iseq, (const pm_forwarding_super_node_t *) node, &location, ret, popped, scope_node); + return; + case PM_GLOBAL_VARIABLE_AND_WRITE_NODE: { + // $foo &&= bar + // ^^^^^^^^^^^^ + const pm_global_variable_and_write_node_t *cast = (const pm_global_variable_and_write_node_t *) node; LABEL *end_label = NEW_LABEL(location.line); - PM_COMPILE_NOT_POPPED(cast->left); + VALUE name = ID2SYM(pm_constant_id_lookup(scope_node, cast->name)); + PUSH_INSN1(ret, location, getglobal, name); if (!popped) PUSH_INSN(ret, location, dup); - PUSH_INSNL(ret, location, branchif, end_label); + PUSH_INSNL(ret, location, branchunless, end_label); if (!popped) PUSH_INSN(ret, location, pop); - PM_COMPILE(cast->right); - PUSH_LABEL(ret, end_label); - return; - } - case PM_OPTIONAL_PARAMETER_NODE: { - // def foo(bar = 1); end - // ^^^^^^^ - const pm_optional_parameter_node_t *cast = (const pm_optional_parameter_node_t *) node; PM_COMPILE_NOT_POPPED(cast->value); + if (!popped) PUSH_INSN(ret, location, dup); - pm_local_index_t index = pm_lookup_local_index(iseq, scope_node, cast->name, 0); - PUSH_SETLOCAL(ret, location, index.index, index.level); + PUSH_INSN1(ret, location, setglobal, name); + PUSH_LABEL(ret, end_label); return; } - case PM_PARENTHESES_NODE: { - // () - // ^^ - // - // (1) - // ^^^ - const pm_parentheses_node_t *cast = (const pm_parentheses_node_t *) node; + case PM_GLOBAL_VARIABLE_OPERATOR_WRITE_NODE: { + // $foo += bar + // ^^^^^^^^^^^ + const pm_global_variable_operator_write_node_t *cast = (const pm_global_variable_operator_write_node_t *) node; - if (cast->body != NULL) { - PM_COMPILE(cast->body); - } - else if (!popped) { - PUSH_INSN(ret, location, putnil); - } + VALUE name = ID2SYM(pm_constant_id_lookup(scope_node, cast->name)); + PUSH_INSN1(ret, location, getglobal, name); + PM_COMPILE_NOT_POPPED(cast->value); + + ID method_id = pm_constant_id_lookup(scope_node, cast->binary_operator); + int flags = VM_CALL_ARGS_SIMPLE; + PUSH_SEND_WITH_FLAG(ret, location, method_id, INT2NUM(1), INT2FIX(flags)); + + if (!popped) PUSH_INSN(ret, location, dup); + PUSH_INSN1(ret, location, setglobal, name); return; } - case PM_PRE_EXECUTION_NODE: { - // BEGIN {} - // ^^^^^^^^ - const pm_pre_execution_node_t *cast = (const pm_pre_execution_node_t *) node; - - LINK_ANCHOR *outer_pre = scope_node->pre_execution_anchor; - RUBY_ASSERT(outer_pre != NULL); + case PM_GLOBAL_VARIABLE_OR_WRITE_NODE: { + // $foo ||= bar + // ^^^^^^^^^^^^ + const pm_global_variable_or_write_node_t *cast = (const pm_global_variable_or_write_node_t *) node; + LABEL *set_label = NEW_LABEL(location.line); + LABEL *end_label = NEW_LABEL(location.line); - // BEGIN{} nodes can be nested, so here we're going to do the same thing - // that we did for the top-level compilation where we create two - // anchors and then join them in the correct order into the resulting - // anchor. - DECL_ANCHOR(inner_pre); - INIT_ANCHOR(inner_pre); - scope_node->pre_execution_anchor = inner_pre; + PUSH_INSN(ret, location, putnil); + VALUE name = ID2SYM(pm_constant_id_lookup(scope_node, cast->name)); - DECL_ANCHOR(inner_body); - INIT_ANCHOR(inner_body); + PUSH_INSN3(ret, location, defined, INT2FIX(DEFINED_GVAR), name, Qtrue); + PUSH_INSNL(ret, location, branchunless, set_label); - if (cast->statements != NULL) { - const pm_node_list_t *body = &cast->statements->body; + PUSH_INSN1(ret, location, getglobal, name); + if (!popped) PUSH_INSN(ret, location, dup); - for (size_t index = 0; index < body->size; index++) { - pm_compile_node(iseq, body->nodes[index], inner_body, true, scope_node); - } - } + PUSH_INSNL(ret, location, branchif, end_label); + if (!popped) PUSH_INSN(ret, location, pop); - if (!popped) { - PUSH_INSN(inner_body, location, putnil); - } + PUSH_LABEL(ret, set_label); + PM_COMPILE_NOT_POPPED(cast->value); + if (!popped) PUSH_INSN(ret, location, dup); - // Now that everything has been compiled, join both anchors together - // into the correct outer pre execution anchor, and reset the value so - // that subsequent BEGIN{} nodes can be compiled correctly. - PUSH_SEQ(outer_pre, inner_pre); - PUSH_SEQ(outer_pre, inner_body); - scope_node->pre_execution_anchor = outer_pre; + PUSH_INSN1(ret, location, setglobal, name); + PUSH_LABEL(ret, end_label); return; } - case PM_POST_EXECUTION_NODE: { - // END {} - // ^^^^^^ - const rb_iseq_t *child_iseq; - const rb_iseq_t *prevblock = ISEQ_COMPILE_DATA(iseq)->current_block; - - pm_scope_node_t next_scope_node; - pm_scope_node_init(node, &next_scope_node, scope_node); - child_iseq = NEW_CHILD_ISEQ(&next_scope_node, make_name_for_block(iseq), ISEQ_TYPE_BLOCK, lineno); - pm_scope_node_destroy(&next_scope_node); - - ISEQ_COMPILE_DATA(iseq)->current_block = child_iseq; + case PM_GLOBAL_VARIABLE_READ_NODE: { + // $foo + // ^^^^ + const pm_global_variable_read_node_t *cast = (const pm_global_variable_read_node_t *) node; + VALUE name = ID2SYM(pm_constant_id_lookup(scope_node, cast->name)); - int is_index = ISEQ_BODY(iseq)->ise_size++; - PUSH_INSN2(ret, location, once, child_iseq, INT2FIX(is_index)); - RB_OBJ_WRITTEN(iseq, Qundef, (VALUE) child_iseq); + PUSH_INSN1(ret, location, getglobal, name); if (popped) PUSH_INSN(ret, location, pop); - ISEQ_COMPILE_DATA(iseq)->current_block = prevblock; - return; } - case PM_RANGE_NODE: { - // 0..5 - // ^^^^ - const pm_range_node_t *cast = (const pm_range_node_t *) node; - bool exclude_end = PM_NODE_FLAG_P(cast, PM_RANGE_FLAGS_EXCLUDE_END); + case PM_GLOBAL_VARIABLE_WRITE_NODE: { + // $foo = 1 + // ^^^^^^^^ + const pm_global_variable_write_node_t *cast = (const pm_global_variable_write_node_t *) node; + PM_COMPILE_NOT_POPPED(cast->value); + if (!popped) PUSH_INSN(ret, location, dup); - if (pm_optimizable_range_item_p(cast->left) && pm_optimizable_range_item_p(cast->right)) { - if (!popped) { - const pm_node_t *left = cast->left; - const pm_node_t *right = cast->right; + ID name = pm_constant_id_lookup(scope_node, cast->name); + PUSH_INSN1(ret, location, setglobal, ID2SYM(name)); - VALUE val = rb_range_new( - (left && PM_NODE_TYPE_P(left, PM_INTEGER_NODE)) ? parse_integer((const pm_integer_node_t *) left) : Qnil, - (right && PM_NODE_TYPE_P(right, PM_INTEGER_NODE)) ? parse_integer((const pm_integer_node_t *) right) : Qnil, - exclude_end - ); + return; + } + case PM_HASH_NODE: { + // {} + // ^^ + // + // If every node in the hash is static, then we can compile the entire + // hash now instead of later. + if (PM_NODE_FLAG_P(node, PM_NODE_FLAG_STATIC_LITERAL)) { + // We're only going to compile this node if it's not popped. If it + // is popped, then we know we don't need to do anything since it's + // statically known. + if (!popped) { + const pm_hash_node_t *cast = (const pm_hash_node_t *) node; - PUSH_INSN1(ret, location, putobject, val); + if (cast->elements.size == 0) { + PUSH_INSN1(ret, location, newhash, INT2FIX(0)); + } + else { + VALUE value = pm_static_literal_value(iseq, node, scope_node); + PUSH_INSN1(ret, location, duphash, value); + RB_OBJ_WRITTEN(iseq, Qundef, value); + } } } else { - if (cast->left == NULL) { - PUSH_INSN(ret, location, putnil); - } - else { - PM_COMPILE(cast->left); - } + // Here since we know there are possible side-effects inside the + // hash contents, we're going to build it entirely at runtime. We'll + // do this by pushing all of the key-value pairs onto the stack and + // then combining them with newhash. + // + // If this hash is popped, then this serves only to ensure we enact + // all side-effects (like method calls) that are contained within + // the hash contents. + const pm_hash_node_t *cast = (const pm_hash_node_t *) node; + const pm_node_list_t *elements = &cast->elements; - if (cast->right == NULL) { - PUSH_INSN(ret, location, putnil); + if (popped) { + // If this hash is popped, then we can iterate through each + // element and compile it. The result of each compilation will + // only include the side effects of the element itself. + for (size_t index = 0; index < elements->size; index++) { + PM_COMPILE_POPPED(elements->nodes[index]); + } } else { - PM_COMPILE(cast->right); - } - - if (!popped) { - PUSH_INSN1(ret, location, newrange, INT2FIX(exclude_end ? 1 : 0)); + pm_compile_hash_elements(iseq, node, elements, false, ret, scope_node); } } + return; } - case PM_RATIONAL_NODE: { - // 1r + case PM_IF_NODE: { + // if foo then bar end + // ^^^^^^^^^^^^^^^^^^^ + // + // bar if foo + // ^^^^^^^^^^ + // + // foo ? bar : baz + // ^^^^^^^^^^^^^^^ + const pm_if_node_t *cast = (const pm_if_node_t *) node; + pm_compile_conditional(iseq, &location, PM_IF_NODE, (const pm_node_t *) cast, cast->statements, cast->subsequent, cast->predicate, ret, popped, scope_node); + return; + } + case PM_IMAGINARY_NODE: { + // 1i // ^^ if (!popped) { - PUSH_INSN1(ret, location, putobject, parse_rational((const pm_rational_node_t *) node)); + VALUE operand = parse_imaginary((const pm_imaginary_node_t *) node); + PUSH_INSN1(ret, location, putobject, operand); } return; } - case PM_REDO_NODE: { - // redo - // ^^^^ - if (ISEQ_COMPILE_DATA(iseq)->redo_label && can_add_ensure_iseq(iseq)) { - LABEL *splabel = NEW_LABEL(0); - - PUSH_LABEL(ret, splabel); - PUSH_ADJUST(ret, location, ISEQ_COMPILE_DATA(iseq)->redo_label); - pm_add_ensure_iseq(ret, iseq, 0, scope_node); - - PUSH_INSNL(ret, location, jump, ISEQ_COMPILE_DATA(iseq)->redo_label); - PUSH_ADJUST_RESTORE(ret, splabel); - if (!popped) PUSH_INSN(ret, location, putnil); - } - else if (ISEQ_BODY(iseq)->type != ISEQ_TYPE_EVAL && ISEQ_COMPILE_DATA(iseq)->start_label && can_add_ensure_iseq(iseq)) { - LABEL *splabel = NEW_LABEL(0); - - PUSH_LABEL(ret, splabel); - pm_add_ensure_iseq(ret, iseq, 0, scope_node); - PUSH_ADJUST(ret, location, ISEQ_COMPILE_DATA(iseq)->start_label); - - PUSH_INSNL(ret, location, jump, ISEQ_COMPILE_DATA(iseq)->start_label); - PUSH_ADJUST_RESTORE(ret, splabel); - if (!popped) PUSH_INSN(ret, location, putnil); - } - else { - const rb_iseq_t *ip = iseq; - - while (ip) { - if (!ISEQ_COMPILE_DATA(ip)) { - ip = 0; - break; - } - - if (ISEQ_COMPILE_DATA(ip)->redo_label != 0) { - break; - } - else if (ISEQ_BODY(ip)->type == ISEQ_TYPE_BLOCK) { - break; - } - else if (ISEQ_BODY(ip)->type == ISEQ_TYPE_EVAL) { - COMPILE_ERROR(iseq, location.line, "Can't escape from eval with redo"); - return; - } - - ip = ISEQ_BODY(ip)->parent_iseq; - } - - if (ip != 0) { - PUSH_INSN(ret, location, putnil); - PUSH_INSN1(ret, location, throw, INT2FIX(VM_THROW_NO_ESCAPE_FLAG | TAG_REDO)); - if (popped) PUSH_INSN(ret, location, pop); - } - else { - COMPILE_ERROR(iseq, location.line, "Invalid redo"); - return; - } - } + case PM_IMPLICIT_NODE: { + // Implicit nodes mark places in the syntax tree where explicit syntax + // was omitted, but implied. For example, + // + // { foo: } + // + // In this case a method call/local variable read is implied by virtue + // of the missing value. To compile these nodes, we simply compile the + // value that is implied, which is helpfully supplied by the parser. + const pm_implicit_node_t *cast = (const pm_implicit_node_t *) node; + PM_COMPILE(cast->value); + return; + } + case PM_IN_NODE: { + // In nodes are handled by the case match node directly, so we should + // never end up hitting them through this path. + rb_bug("Should not ever enter an in node directly"); return; } - case PM_REGULAR_EXPRESSION_NODE: { - // /foo/ - // ^^^^^ - if (!popped) { - VALUE regexp = pm_static_literal_value(iseq, node, scope_node); - PUSH_INSN1(ret, location, putobject, regexp); - } + case PM_INDEX_OPERATOR_WRITE_NODE: { + // foo[bar] += baz + // ^^^^^^^^^^^^^^^ + const pm_index_operator_write_node_t *cast = (const pm_index_operator_write_node_t *) node; + pm_compile_index_operator_write_node(iseq, cast, &location, ret, popped, scope_node); return; } - case PM_RESCUE_NODE: { - // begin; rescue; end - // ^^^^^^^ - const pm_rescue_node_t *cast = (const pm_rescue_node_t *) node; - iseq_set_exception_local_table(iseq); - - // First, establish the labels that we need to be able to jump to within - // this compilation block. - LABEL *exception_match_label = NEW_LABEL(location.line); - LABEL *rescue_end_label = NEW_LABEL(location.line); - - // Next, compile each of the exceptions that we're going to be - // handling. For each one, we'll add instructions to check if the - // exception matches the raised one, and if it does then jump to the - // exception_match_label label. Otherwise it will fall through to the - // subsequent check. If there are no exceptions, we'll only check - // StandardError. - const pm_node_list_t *exceptions = &cast->exceptions; - - if (exceptions->size > 0) { - for (size_t index = 0; index < exceptions->size; index++) { - PUSH_GETLOCAL(ret, location, LVAR_ERRINFO, 0); - PM_COMPILE(exceptions->nodes[index]); - int checkmatch_flags = VM_CHECKMATCH_TYPE_RESCUE; - if (PM_NODE_TYPE_P(exceptions->nodes[index], PM_SPLAT_NODE)) { - checkmatch_flags |= VM_CHECKMATCH_ARRAY; - } - PUSH_INSN1(ret, location, checkmatch, INT2FIX(checkmatch_flags)); - PUSH_INSNL(ret, location, branchif, exception_match_label); - } - } - else { - PUSH_GETLOCAL(ret, location, LVAR_ERRINFO, 0); - PUSH_INSN1(ret, location, putobject, rb_eStandardError); - PUSH_INSN1(ret, location, checkmatch, INT2FIX(VM_CHECKMATCH_TYPE_RESCUE)); - PUSH_INSNL(ret, location, branchif, exception_match_label); - } - - // If none of the exceptions that we are matching against matched, then - // we'll jump straight to the rescue_end_label label. - PUSH_INSNL(ret, location, jump, rescue_end_label); + case PM_INDEX_AND_WRITE_NODE: { + // foo[bar] &&= baz + // ^^^^^^^^^^^^^^^^ + const pm_index_and_write_node_t *cast = (const pm_index_and_write_node_t *) node; + pm_compile_index_control_flow_write_node(iseq, node, cast->receiver, cast->arguments, cast->block, cast->value, &location, ret, popped, scope_node); + return; + } + case PM_INDEX_OR_WRITE_NODE: { + // foo[bar] ||= baz + // ^^^^^^^^^^^^^^^^ + const pm_index_or_write_node_t *cast = (const pm_index_or_write_node_t *) node; + pm_compile_index_control_flow_write_node(iseq, node, cast->receiver, cast->arguments, cast->block, cast->value, &location, ret, popped, scope_node); + return; + } + case PM_INSTANCE_VARIABLE_AND_WRITE_NODE: { + // @foo &&= bar + // ^^^^^^^^^^^^ + const pm_instance_variable_and_write_node_t *cast = (const pm_instance_variable_and_write_node_t *) node; + LABEL *end_label = NEW_LABEL(location.line); - // Here we have the exception_match_label, which is where the - // control-flow goes in the case that one of the exceptions matched. - // Here we will compile the instructions to handle the exception. - PUSH_LABEL(ret, exception_match_label); - PUSH_TRACE(ret, RUBY_EVENT_RESCUE); + ID name_id = pm_constant_id_lookup(scope_node, cast->name); + VALUE name = ID2SYM(name_id); - // If we have a reference to the exception, then we'll compile the write - // into the instruction sequence. This can look quite different - // depending on the kind of write being performed. - if (cast->reference) { - DECL_ANCHOR(writes); - INIT_ANCHOR(writes); + PUSH_INSN2(ret, location, getinstancevariable, name, get_ivar_ic_value(iseq, name_id)); + if (!popped) PUSH_INSN(ret, location, dup); - DECL_ANCHOR(cleanup); - INIT_ANCHOR(cleanup); + PUSH_INSNL(ret, location, branchunless, end_label); + if (!popped) PUSH_INSN(ret, location, pop); - pm_compile_target_node(iseq, cast->reference, ret, writes, cleanup, scope_node, NULL); - PUSH_GETLOCAL(ret, location, LVAR_ERRINFO, 0); + PM_COMPILE_NOT_POPPED(cast->value); + if (!popped) PUSH_INSN(ret, location, dup); - PUSH_SEQ(ret, writes); - PUSH_SEQ(ret, cleanup); - } + PUSH_INSN2(ret, location, setinstancevariable, name, get_ivar_ic_value(iseq, name_id)); + PUSH_LABEL(ret, end_label); - // If we have statements to execute, we'll compile them here. Otherwise - // we'll push nil onto the stack. - if (cast->statements) { - // We'll temporarily remove the end_label location from the iseq - // when compiling the statements so that next/redo statements - // inside the body will throw to the correct place instead of - // jumping straight to the end of this iseq - LABEL *prev_end = ISEQ_COMPILE_DATA(iseq)->end_label; - ISEQ_COMPILE_DATA(iseq)->end_label = NULL; + return; + } + case PM_INSTANCE_VARIABLE_OPERATOR_WRITE_NODE: { + // @foo += bar + // ^^^^^^^^^^^ + const pm_instance_variable_operator_write_node_t *cast = (const pm_instance_variable_operator_write_node_t *) node; - PM_COMPILE((const pm_node_t *) cast->statements); + ID name_id = pm_constant_id_lookup(scope_node, cast->name); + VALUE name = ID2SYM(name_id); - // Now restore the end_label - ISEQ_COMPILE_DATA(iseq)->end_label = prev_end; - } - else { - PUSH_INSN(ret, location, putnil); - } + PUSH_INSN2(ret, location, getinstancevariable, name, get_ivar_ic_value(iseq, name_id)); + PM_COMPILE_NOT_POPPED(cast->value); - PUSH_INSN(ret, location, leave); + ID method_id = pm_constant_id_lookup(scope_node, cast->binary_operator); + int flags = VM_CALL_ARGS_SIMPLE; + PUSH_SEND_WITH_FLAG(ret, location, method_id, INT2NUM(1), INT2FIX(flags)); - // Here we'll insert the rescue_end_label label, which is jumped to if - // none of the exceptions matched. It will cause the control-flow to - // either jump to the next rescue clause or it will fall through to the - // subsequent instruction returning the raised error. - PUSH_LABEL(ret, rescue_end_label); - if (cast->subsequent) { - PM_COMPILE((const pm_node_t *) cast->subsequent); - } - else { - PUSH_GETLOCAL(ret, location, 1, 0); - } + if (!popped) PUSH_INSN(ret, location, dup); + PUSH_INSN2(ret, location, setinstancevariable, name, get_ivar_ic_value(iseq, name_id)); return; } - case PM_RESCUE_MODIFIER_NODE: { - // foo rescue bar - // ^^^^^^^^^^^^^^ - const pm_rescue_modifier_node_t *cast = (const pm_rescue_modifier_node_t *) node; - - pm_scope_node_t rescue_scope_node; - pm_scope_node_init((const pm_node_t *) cast, &rescue_scope_node, scope_node); - - rb_iseq_t *rescue_iseq = NEW_CHILD_ISEQ( - &rescue_scope_node, - rb_str_concat(rb_str_new2("rescue in "), ISEQ_BODY(iseq)->location.label), - ISEQ_TYPE_RESCUE, - pm_node_line_number(parser, cast->rescue_expression) - ); + case PM_INSTANCE_VARIABLE_OR_WRITE_NODE: { + // @foo ||= bar + // ^^^^^^^^^^^^ + const pm_instance_variable_or_write_node_t *cast = (const pm_instance_variable_or_write_node_t *) node; + LABEL *end_label = NEW_LABEL(location.line); - pm_scope_node_destroy(&rescue_scope_node); + ID name_id = pm_constant_id_lookup(scope_node, cast->name); + VALUE name = ID2SYM(name_id); - LABEL *lstart = NEW_LABEL(location.line); - LABEL *lend = NEW_LABEL(location.line); - LABEL *lcont = NEW_LABEL(location.line); + PUSH_INSN2(ret, location, getinstancevariable, name, get_ivar_ic_value(iseq, name_id)); + if (!popped) PUSH_INSN(ret, location, dup); - lstart->rescued = LABEL_RESCUE_BEG; - lend->rescued = LABEL_RESCUE_END; + PUSH_INSNL(ret, location, branchif, end_label); + if (!popped) PUSH_INSN(ret, location, pop); - PUSH_LABEL(ret, lstart); - PM_COMPILE_NOT_POPPED(cast->expression); - PUSH_LABEL(ret, lend); + PM_COMPILE_NOT_POPPED(cast->value); + if (!popped) PUSH_INSN(ret, location, dup); - PUSH_INSN(ret, location, nop); - PUSH_LABEL(ret, lcont); - if (popped) PUSH_INSN(ret, location, pop); + PUSH_INSN2(ret, location, setinstancevariable, name, get_ivar_ic_value(iseq, name_id)); + PUSH_LABEL(ret, end_label); - PUSH_CATCH_ENTRY(CATCH_TYPE_RESCUE, lstart, lend, rescue_iseq, lcont); - PUSH_CATCH_ENTRY(CATCH_TYPE_RETRY, lend, lcont, NULL, lstart); return; } - case PM_RETURN_NODE: { - // return - // ^^^^^^ - // - // return 1 + case PM_INSTANCE_VARIABLE_READ_NODE: { + // @foo + // ^^^^ + if (!popped) { + const pm_instance_variable_read_node_t *cast = (const pm_instance_variable_read_node_t *) node; + ID name = pm_constant_id_lookup(scope_node, cast->name); + PUSH_INSN2(ret, location, getinstancevariable, ID2SYM(name), get_ivar_ic_value(iseq, name)); + } + return; + } + case PM_INSTANCE_VARIABLE_WRITE_NODE: { + // @foo = 1 // ^^^^^^^^ - const pm_return_node_t *cast = (const pm_return_node_t *) node; - const pm_arguments_node_t *arguments = cast->arguments; + const pm_instance_variable_write_node_t *cast = (const pm_instance_variable_write_node_t *) node; + PM_COMPILE_NOT_POPPED(cast->value); + if (!popped) PUSH_INSN(ret, location, dup); - enum rb_iseq_type type = ISEQ_BODY(iseq)->type; - LABEL *splabel = 0; + ID name = pm_constant_id_lookup(scope_node, cast->name); + PUSH_INSN2(ret, location, setinstancevariable, ID2SYM(name), get_ivar_ic_value(iseq, name)); - const rb_iseq_t *parent_iseq = iseq; - enum rb_iseq_type parent_type = ISEQ_BODY(parent_iseq)->type; - while (parent_type == ISEQ_TYPE_RESCUE || parent_type == ISEQ_TYPE_ENSURE) { - if (!(parent_iseq = ISEQ_BODY(parent_iseq)->parent_iseq)) break; - parent_type = ISEQ_BODY(parent_iseq)->type; + return; + } + case PM_INTEGER_NODE: { + // 1 + // ^ + if (!popped) { + VALUE operand = parse_integer((const pm_integer_node_t *) node); + PUSH_INSN1(ret, location, putobject, operand); } - - switch (parent_type) { - case ISEQ_TYPE_TOP: - case ISEQ_TYPE_MAIN: - if (arguments) { - rb_warn("argument of top-level return is ignored"); - } - if (parent_iseq == iseq) { - type = ISEQ_TYPE_METHOD; + return; + } + case PM_INTERPOLATED_MATCH_LAST_LINE_NODE: { + // if /foo #{bar}/ then end + // ^^^^^^^^^^^^ + if (PM_NODE_FLAG_P(node, PM_NODE_FLAG_STATIC_LITERAL)) { + if (!popped) { + VALUE regexp = pm_static_literal_value(iseq, node, scope_node); + PUSH_INSN1(ret, location, putobject, regexp); } - break; - default: - break; - } - - if (type == ISEQ_TYPE_METHOD) { - splabel = NEW_LABEL(0); - PUSH_LABEL(ret, splabel); - PUSH_ADJUST(ret, location, 0); - } - - if (arguments) { - PM_COMPILE_NOT_POPPED((const pm_node_t *) arguments); } else { - PUSH_INSN(ret, location, putnil); + pm_compile_regexp_dynamic(iseq, node, &((const pm_interpolated_match_last_line_node_t *) node)->parts, &location, ret, popped, scope_node); } - if (type == ISEQ_TYPE_METHOD && can_add_ensure_iseq(iseq)) { - pm_add_ensure_iseq(ret, iseq, 1, scope_node); - PUSH_TRACE(ret, RUBY_EVENT_RETURN); - PUSH_INSN(ret, location, leave); - PUSH_ADJUST_RESTORE(ret, splabel); - if (!popped) PUSH_INSN(ret, location, putnil); - } - else { - PUSH_INSN1(ret, location, throw, INT2FIX(TAG_RETURN)); - if (popped) PUSH_INSN(ret, location, pop); - } + PUSH_INSN1(ret, location, getglobal, rb_id2sym(idLASTLINE)); + PUSH_SEND(ret, location, idEqTilde, INT2NUM(1)); + if (popped) PUSH_INSN(ret, location, pop); return; } - case PM_RETRY_NODE: { - // retry - // ^^^^^ - if (ISEQ_BODY(iseq)->type == ISEQ_TYPE_RESCUE) { - PUSH_INSN(ret, location, putnil); - PUSH_INSN1(ret, location, throw, INT2FIX(TAG_RETRY)); - if (popped) PUSH_INSN(ret, location, pop); - } - else { - COMPILE_ERROR(iseq, location.line, "Invalid retry"); - return; - } - return; - } - case PM_SCOPE_NODE: { - pm_scope_node_t *scope_node = (pm_scope_node_t *) node; - pm_constant_id_list_t *locals = &scope_node->locals; - - pm_parameters_node_t *parameters_node = NULL; - pm_node_list_t *keywords_list = NULL; - pm_node_list_t *optionals_list = NULL; - pm_node_list_t *posts_list = NULL; - pm_node_list_t *requireds_list = NULL; - pm_node_list_t *block_locals = NULL; - bool trailing_comma = false; + case PM_INTERPOLATED_REGULAR_EXPRESSION_NODE: { + // /foo #{bar}/ + // ^^^^^^^^^^^^ + if (PM_NODE_FLAG_P(node, PM_REGULAR_EXPRESSION_FLAGS_ONCE)) { + const rb_iseq_t *prevblock = ISEQ_COMPILE_DATA(iseq)->current_block; + const rb_iseq_t *block_iseq = NULL; + int ise_index = ISEQ_BODY(iseq)->ise_size++; - struct rb_iseq_constant_body *body = ISEQ_BODY(iseq); + pm_scope_node_t next_scope_node; + pm_scope_node_init(node, &next_scope_node, scope_node); - if (PM_NODE_TYPE_P(scope_node->ast_node, PM_CLASS_NODE) || PM_NODE_TYPE_P(scope_node->ast_node, PM_MODULE_NODE)) { - ADD_TRACE(ret, RUBY_EVENT_CLASS); - } + block_iseq = NEW_CHILD_ISEQ(&next_scope_node, make_name_for_block(iseq), ISEQ_TYPE_PLAIN, location.line); + pm_scope_node_destroy(&next_scope_node); - if (scope_node->parameters) { - switch (PM_NODE_TYPE(scope_node->parameters)) { - case PM_BLOCK_PARAMETERS_NODE: { - pm_block_parameters_node_t *cast = (pm_block_parameters_node_t *) scope_node->parameters; - parameters_node = cast->parameters; - block_locals = &cast->locals; + ISEQ_COMPILE_DATA(iseq)->current_block = block_iseq; + PUSH_INSN2(ret, location, once, block_iseq, INT2FIX(ise_index)); + ISEQ_COMPILE_DATA(iseq)->current_block = prevblock; - if (parameters_node) { - if (parameters_node->rest && PM_NODE_TYPE_P(parameters_node->rest, PM_IMPLICIT_REST_NODE)) { - trailing_comma = true; - } - } - break; - } - case PM_PARAMETERS_NODE: { - parameters_node = (pm_parameters_node_t *) scope_node->parameters; - break; - } - case PM_NUMBERED_PARAMETERS_NODE: { - uint32_t maximum = ((const pm_numbered_parameters_node_t *) scope_node->parameters)->maximum; - body->param.lead_num = maximum; - body->param.flags.ambiguous_param0 = maximum == 1; - break; - } - case PM_IT_PARAMETERS_NODE: - body->param.lead_num = 1; - body->param.flags.ambiguous_param0 = true; - break; - default: - rb_bug("Unexpected node type for parameters: %s", pm_node_type_to_str(PM_NODE_TYPE(node))); - } + if (popped) PUSH_INSN(ret, location, pop); + return; } - struct rb_iseq_param_keyword *keyword = NULL; - - if (parameters_node) { - optionals_list = ¶meters_node->optionals; - requireds_list = ¶meters_node->requireds; - keywords_list = ¶meters_node->keywords; - posts_list = ¶meters_node->posts; - } - else if (scope_node->parameters && (PM_NODE_TYPE_P(scope_node->parameters, PM_NUMBERED_PARAMETERS_NODE) || PM_NODE_TYPE_P(scope_node->parameters, PM_IT_PARAMETERS_NODE))) { - body->param.opt_num = 0; + if (PM_NODE_FLAG_P(node, PM_NODE_FLAG_STATIC_LITERAL)) { + if (!popped) { + VALUE regexp = pm_static_literal_value(iseq, node, scope_node); + PUSH_INSN1(ret, location, putobject, regexp); + } } else { - body->param.lead_num = 0; - body->param.opt_num = 0; + pm_compile_regexp_dynamic(iseq, node, &((const pm_interpolated_regular_expression_node_t *) node)->parts, &location, ret, popped, scope_node); + if (popped) PUSH_INSN(ret, location, pop); } - //********STEP 1********** - // Goal: calculate the table size for the locals, accounting for - // hidden variables and multi target nodes - size_t locals_size = locals->size; - - // Index lookup table buffer size is only the number of the locals - st_table *index_lookup_table = st_init_numtable(); - - int table_size = (int) locals_size; - - // For nodes have a hidden iteration variable. We add that to the local - // table size here. - if (PM_NODE_TYPE_P(scope_node->ast_node, PM_FOR_NODE)) table_size++; - - if (keywords_list && keywords_list->size) { - table_size++; - } + return; + } + case PM_INTERPOLATED_STRING_NODE: { + // "foo #{bar}" + // ^^^^^^^^^^^^ + if (PM_NODE_FLAG_P(node, PM_NODE_FLAG_STATIC_LITERAL)) { + if (!popped) { + VALUE string = pm_static_literal_value(iseq, node, scope_node); - if (requireds_list) { - for (size_t i = 0; i < requireds_list->size; i++) { - // For each MultiTargetNode, we're going to have one - // additional anonymous local not represented in the locals table - // We want to account for this in our table size - pm_node_t *required = requireds_list->nodes[i]; - if (PM_NODE_TYPE_P(required, PM_MULTI_TARGET_NODE)) { - table_size++; + if (PM_NODE_FLAG_P(node, PM_INTERPOLATED_STRING_NODE_FLAGS_FROZEN)) { + PUSH_INSN1(ret, location, putobject, string); } - else if (PM_NODE_TYPE_P(required, PM_REQUIRED_PARAMETER_NODE)) { - if (PM_NODE_FLAG_P(required, PM_PARAMETER_FLAGS_REPEATED_PARAMETER)) { - table_size++; - } + else if (PM_NODE_FLAG_P(node, PM_INTERPOLATED_STRING_NODE_FLAGS_MUTABLE)) { + PUSH_INSN1(ret, location, putstring, string); + } + else { + PUSH_INSN1(ret, location, putchilledstring, string); } } } + else { + const pm_interpolated_string_node_t *cast = (const pm_interpolated_string_node_t *) node; + int length = pm_interpolated_node_compile(iseq, &cast->parts, &location, ret, popped, scope_node, NULL, NULL); + if (length > 1) PUSH_INSN1(ret, location, concatstrings, INT2FIX(length)); + if (popped) PUSH_INSN(ret, location, pop); + } - // If we have the `it` implicit local variable, we need to account for - // it in the local table size. - if (scope_node->parameters != NULL && PM_NODE_TYPE_P(scope_node->parameters, PM_IT_PARAMETERS_NODE)) { - table_size++; + return; + } + case PM_INTERPOLATED_SYMBOL_NODE: { + // :"foo #{bar}" + // ^^^^^^^^^^^^^ + const pm_interpolated_symbol_node_t *cast = (const pm_interpolated_symbol_node_t *) node; + int length = pm_interpolated_node_compile(iseq, &cast->parts, &location, ret, popped, scope_node, NULL, NULL); + + if (length > 1) { + PUSH_INSN1(ret, location, concatstrings, INT2FIX(length)); } - // Ensure there is enough room in the local table for any - // parameters that have been repeated - // ex: def underscore_parameters(_, _ = 1, _ = 2); _; end - // ^^^^^^^^^^^^ - if (optionals_list && optionals_list->size) { - for (size_t i = 0; i < optionals_list->size; i++) { - pm_node_t * node = optionals_list->nodes[i]; - if (PM_NODE_FLAG_P(node, PM_PARAMETER_FLAGS_REPEATED_PARAMETER)) { - table_size++; - } - } + if (!popped) { + PUSH_INSN(ret, location, intern); + } + else { + PUSH_INSN(ret, location, pop); } - // If we have an anonymous "rest" node, we'll need to increase the local - // table size to take it in to account. - // def m(foo, *, bar) - // ^ - if (parameters_node) { - if (parameters_node->rest) { - if (!(PM_NODE_TYPE_P(parameters_node->rest, PM_IMPLICIT_REST_NODE))) { - if (!((const pm_rest_parameter_node_t *) parameters_node->rest)->name || PM_NODE_FLAG_P(parameters_node->rest, PM_PARAMETER_FLAGS_REPEATED_PARAMETER)) { - table_size++; - } - } - } + return; + } + case PM_INTERPOLATED_X_STRING_NODE: { + // `foo #{bar}` + // ^^^^^^^^^^^^ + const pm_interpolated_x_string_node_t *cast = (const pm_interpolated_x_string_node_t *) node; - // def foo(_, **_); _; end - // ^^^ - if (parameters_node->keyword_rest) { - // def foo(...); end - // ^^^ - // When we have a `...` as the keyword_rest, it's a forwarding_parameter_node and - // we need to leave space for 4 locals: *, **, &, ... - if (PM_NODE_TYPE_P(parameters_node->keyword_rest, PM_FORWARDING_PARAMETER_NODE)) { - // Only optimize specifically methods like this: `foo(...)` - if (requireds_list->size == 0 && optionals_list->size == 0 && keywords_list->size == 0) { - ISEQ_BODY(iseq)->param.flags.use_block = TRUE; - ISEQ_BODY(iseq)->param.flags.forwardable = TRUE; - table_size += 1; - } - else { - table_size += 4; - } - } - else { - const pm_keyword_rest_parameter_node_t *kw_rest = (const pm_keyword_rest_parameter_node_t *) parameters_node->keyword_rest; + PUSH_INSN(ret, location, putself); - // If it's anonymous or repeated, then we need to allocate stack space - if (!kw_rest->name || PM_NODE_FLAG_P(kw_rest, PM_PARAMETER_FLAGS_REPEATED_PARAMETER)) { - table_size++; - } - } - } - } + int length = pm_interpolated_node_compile(iseq, &cast->parts, &location, ret, false, scope_node, NULL, NULL); + if (length > 1) PUSH_INSN1(ret, location, concatstrings, INT2FIX(length)); - if (posts_list) { - for (size_t i = 0; i < posts_list->size; i++) { - // For each MultiTargetNode, we're going to have one - // additional anonymous local not represented in the locals table - // We want to account for this in our table size - pm_node_t *required = posts_list->nodes[i]; - if (PM_NODE_TYPE_P(required, PM_MULTI_TARGET_NODE) || PM_NODE_FLAG_P(required, PM_PARAMETER_FLAGS_REPEATED_PARAMETER)) { - table_size++; - } - } - } + PUSH_SEND_WITH_FLAG(ret, location, idBackquote, INT2NUM(1), INT2FIX(VM_CALL_FCALL | VM_CALL_ARGS_SIMPLE)); + if (popped) PUSH_INSN(ret, location, pop); - if (keywords_list && keywords_list->size) { - for (size_t i = 0; i < keywords_list->size; i++) { - pm_node_t *keyword_parameter_node = keywords_list->nodes[i]; - if (PM_NODE_FLAG_P(keyword_parameter_node, PM_PARAMETER_FLAGS_REPEATED_PARAMETER)) { - table_size++; - } - } + return; + } + case PM_IT_LOCAL_VARIABLE_READ_NODE: { + // -> { it } + // ^^ + if (!popped) { + PUSH_GETLOCAL(ret, location, scope_node->local_table_for_iseq_size, 0); } - if (parameters_node && parameters_node->block) { - const pm_block_parameter_node_t *block_node = (const pm_block_parameter_node_t *) parameters_node->block; + return; + } + case PM_KEYWORD_HASH_NODE: { + // foo(bar: baz) + // ^^^^^^^^ + const pm_keyword_hash_node_t *cast = (const pm_keyword_hash_node_t *) node; + const pm_node_list_t *elements = &cast->elements; - if (PM_NODE_FLAG_P(block_node, PM_PARAMETER_FLAGS_REPEATED_PARAMETER) || !block_node->name) { - table_size++; - } + const pm_node_t *element; + PM_NODE_LIST_FOREACH(elements, index, element) { + PM_COMPILE(element); } - // We can create local_table_for_iseq with the correct size - VALUE idtmp = 0; - rb_ast_id_table_t *local_table_for_iseq = ALLOCV(idtmp, sizeof(rb_ast_id_table_t) + table_size * sizeof(ID)); - local_table_for_iseq->size = table_size; + if (!popped) PUSH_INSN1(ret, location, newhash, INT2FIX(elements->size * 2)); + return; + } + case PM_LAMBDA_NODE: { + // -> {} + // ^^^^^ + const pm_lambda_node_t *cast = (const pm_lambda_node_t *) node; - //********END OF STEP 1********** + pm_scope_node_t next_scope_node; + pm_scope_node_init(node, &next_scope_node, scope_node); - //********STEP 2********** - // Goal: populate iv index table as well as local table, keeping the - // layout of the local table consistent with the layout of the - // stack when calling the method - // - // Do a first pass on all of the parameters, setting their values in - // the local_table_for_iseq, _except_ for Multis who get a hidden - // variable in this step, and will get their names inserted in step 3 - - // local_index is a cursor that keeps track of the current - // index into local_table_for_iseq. The local table is actually a list, - // and the order of that list must match the order of the items pushed - // on the stack. We need to take in to account things pushed on the - // stack that _might not have a name_ (for example array destructuring). - // This index helps us know which item we're dealing with and also give - // those anonymous items temporary names (as below) - int local_index = 0; - - // Here we figure out local table indices and insert them in to the - // index lookup table and local tables. - // - // def foo(a, (b, *c, d), e = 1, *f, g, (h, *i, j), k:, l: 1, **m, &n) - // ^^^^^^^^^^^^^ - if (requireds_list && requireds_list->size) { - for (size_t i = 0; i < requireds_list->size; i++, local_index++) { - ID local; - - // For each MultiTargetNode, we're going to have one additional - // anonymous local not represented in the locals table. We want - // to account for this in our table size. - pm_node_t *required = requireds_list->nodes[i]; - - switch (PM_NODE_TYPE(required)) { - // def foo(a, (b, *c, d), e = 1, *f, g, (h, *i, j), k:, l: 1, **m, &n) - // ^^^^^^^^^^ - case PM_MULTI_TARGET_NODE: { - local = rb_make_temporary_id(local_index); - local_table_for_iseq->ids[local_index] = local; - break; - } - // def foo(a, (b, *c, d), e = 1, *f, g, (h, *i, j), k:, l: 1, **m, &n) - // ^ - case PM_REQUIRED_PARAMETER_NODE: { - const pm_required_parameter_node_t *param = (const pm_required_parameter_node_t *) required; - - if (PM_NODE_FLAG_P(required, PM_PARAMETER_FLAGS_REPEATED_PARAMETER)) { - ID local = pm_constant_id_lookup(scope_node, param->name); - local_table_for_iseq->ids[local_index] = local; - } - else { - pm_insert_local_index(param->name, local_index, index_lookup_table, local_table_for_iseq, scope_node); - } + int opening_lineno = pm_location_line_number(parser, &cast->opening_loc); + const rb_iseq_t *block = NEW_CHILD_ISEQ(&next_scope_node, make_name_for_block(iseq), ISEQ_TYPE_BLOCK, opening_lineno); + pm_scope_node_destroy(&next_scope_node); - break; - } - default: { - rb_bug("Unsupported node in requireds in parameters %s", pm_node_type_to_str(PM_NODE_TYPE(node))); - } - } - } + VALUE argc = INT2FIX(0); + PUSH_INSN1(ret, location, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE)); + PUSH_CALL_WITH_BLOCK(ret, location, idLambda, argc, block); + RB_OBJ_WRITTEN(iseq, Qundef, (VALUE) block); - body->param.lead_num = (int) requireds_list->size; - body->param.flags.has_lead = true; - } + if (popped) PUSH_INSN(ret, location, pop); + return; + } + case PM_LOCAL_VARIABLE_AND_WRITE_NODE: { + // foo &&= bar + // ^^^^^^^^^^^ + const pm_local_variable_and_write_node_t *cast = (const pm_local_variable_and_write_node_t *) node; + LABEL *end_label = NEW_LABEL(location.line); - if (scope_node->parameters != NULL && PM_NODE_TYPE_P(scope_node->parameters, PM_IT_PARAMETERS_NODE)) { - ID local = rb_make_temporary_id(local_index); - local_table_for_iseq->ids[local_index++] = local; - } + pm_local_index_t local_index = pm_lookup_local_index(iseq, scope_node, cast->name, cast->depth); + PUSH_GETLOCAL(ret, location, local_index.index, local_index.level); + if (!popped) PUSH_INSN(ret, location, dup); - // def foo(a, (b, *c, d), e = 1, *f, g, (h, *i, j), k:, l: 1, **m, &n) - // ^^^^^ - if (optionals_list && optionals_list->size) { - body->param.opt_num = (int) optionals_list->size; - body->param.flags.has_opt = true; + PUSH_INSNL(ret, location, branchunless, end_label); + if (!popped) PUSH_INSN(ret, location, pop); - for (size_t i = 0; i < optionals_list->size; i++, local_index++) { - pm_node_t * node = optionals_list->nodes[i]; - pm_constant_id_t name = ((const pm_optional_parameter_node_t *) node)->name; + PM_COMPILE_NOT_POPPED(cast->value); + if (!popped) PUSH_INSN(ret, location, dup); - if (PM_NODE_FLAG_P(node, PM_PARAMETER_FLAGS_REPEATED_PARAMETER)) { - ID local = pm_constant_id_lookup(scope_node, name); - local_table_for_iseq->ids[local_index] = local; - } - else { - pm_insert_local_index(name, local_index, index_lookup_table, local_table_for_iseq, scope_node); - } - } - } + PUSH_SETLOCAL(ret, location, local_index.index, local_index.level); + PUSH_LABEL(ret, end_label); - // def foo(a, (b, *c, d), e = 1, *f, g, (h, *i, j), k:, l: 1, **m, &n) - // ^^ - if (parameters_node && parameters_node->rest) { - body->param.rest_start = local_index; + return; + } + case PM_LOCAL_VARIABLE_OPERATOR_WRITE_NODE: { + // foo += bar + // ^^^^^^^^^^ + const pm_local_variable_operator_write_node_t *cast = (const pm_local_variable_operator_write_node_t *) node; - // If there's a trailing comma, we'll have an implicit rest node, - // and we don't want it to impact the rest variables on param - if (!(PM_NODE_TYPE_P(parameters_node->rest, PM_IMPLICIT_REST_NODE))) { - body->param.flags.has_rest = true; - RUBY_ASSERT(body->param.rest_start != -1); + pm_local_index_t local_index = pm_lookup_local_index(iseq, scope_node, cast->name, cast->depth); + PUSH_GETLOCAL(ret, location, local_index.index, local_index.level); - pm_constant_id_t name = ((const pm_rest_parameter_node_t *) parameters_node->rest)->name; + PM_COMPILE_NOT_POPPED(cast->value); - if (name) { - // def foo(a, (b, *c, d), e = 1, *f, g, (h, *i, j), k:, l: 1, **m, &n) - // ^^ - if (PM_NODE_FLAG_P(parameters_node->rest, PM_PARAMETER_FLAGS_REPEATED_PARAMETER)) { - ID local = pm_constant_id_lookup(scope_node, name); - local_table_for_iseq->ids[local_index] = local; - } - else { - pm_insert_local_index(name, local_index, index_lookup_table, local_table_for_iseq, scope_node); - } - } - else { - // def foo(a, (b, *c, d), e = 1, *, g, (h, *i, j), k:, l: 1, **m, &n) - // ^ - body->param.flags.anon_rest = true; - pm_insert_local_special(idMULT, local_index, index_lookup_table, local_table_for_iseq); - } + ID method_id = pm_constant_id_lookup(scope_node, cast->binary_operator); + PUSH_SEND_WITH_FLAG(ret, location, method_id, INT2NUM(1), INT2FIX(VM_CALL_ARGS_SIMPLE)); - local_index++; - } - } + if (!popped) PUSH_INSN(ret, location, dup); + PUSH_SETLOCAL(ret, location, local_index.index, local_index.level); - // def foo(a, (b, *c, d), e = 1, *f, g, (h, *i, j), k:, l: 1, **m, &n) - // ^^^^^^^^^^^^^ - if (posts_list && posts_list->size) { - body->param.post_num = (int) posts_list->size; - body->param.post_start = local_index; - body->param.flags.has_post = true; - - for (size_t i = 0; i < posts_list->size; i++, local_index++) { - ID local; - - // For each MultiTargetNode, we're going to have one additional - // anonymous local not represented in the locals table. We want - // to account for this in our table size. - const pm_node_t *post_node = posts_list->nodes[i]; - - switch (PM_NODE_TYPE(post_node)) { - // def foo(a, (b, *c, d), e = 1, *f, g, (h, *i, j), k:, l: 1, **m, &n) - // ^^^^^^^^^^ - case PM_MULTI_TARGET_NODE: { - local = rb_make_temporary_id(local_index); - local_table_for_iseq->ids[local_index] = local; - break; - } - // def foo(a, (b, *c, d), e = 1, *f, g, (h, *i, j), k:, l: 1, **m, &n) - // ^ - case PM_REQUIRED_PARAMETER_NODE: { - const pm_required_parameter_node_t *param = (const pm_required_parameter_node_t *) post_node; - - if (PM_NODE_FLAG_P(param, PM_PARAMETER_FLAGS_REPEATED_PARAMETER)) { - ID local = pm_constant_id_lookup(scope_node, param->name); - local_table_for_iseq->ids[local_index] = local; - } - else { - pm_insert_local_index(param->name, local_index, index_lookup_table, local_table_for_iseq, scope_node); - } - break; - } - default: { - rb_bug("Unsupported node in posts in parameters %s", pm_node_type_to_str(PM_NODE_TYPE(node))); - } - } - } - } + return; + } + case PM_LOCAL_VARIABLE_OR_WRITE_NODE: { + // foo ||= bar + // ^^^^^^^^^^^ + const pm_local_variable_or_write_node_t *cast = (const pm_local_variable_or_write_node_t *) node; - // def foo(a, (b, *c, d), e = 1, *f, g, (h, *i, j), k:, l: 1, **m, &n) - // ^^^^^^^^ - // Keywords create an internal variable on the parse tree - if (keywords_list && keywords_list->size) { - body->param.keyword = keyword = ZALLOC_N(struct rb_iseq_param_keyword, 1); - keyword->num = (int) keywords_list->size; + LABEL *set_label = NEW_LABEL(location.line); + LABEL *end_label = NEW_LABEL(location.line); - body->param.flags.has_kw = true; - const VALUE default_values = rb_ary_hidden_new(1); - const VALUE complex_mark = rb_str_tmp_new(0); + PUSH_INSN1(ret, location, putobject, Qtrue); + PUSH_INSNL(ret, location, branchunless, set_label); - ID *ids = xcalloc(keywords_list->size, sizeof(ID)); + pm_local_index_t local_index = pm_lookup_local_index(iseq, scope_node, cast->name, cast->depth); + PUSH_GETLOCAL(ret, location, local_index.index, local_index.level); + if (!popped) PUSH_INSN(ret, location, dup); - size_t kw_index = 0; + PUSH_INSNL(ret, location, branchif, end_label); + if (!popped) PUSH_INSN(ret, location, pop); - for (size_t i = 0; i < keywords_list->size; i++) { - pm_node_t *keyword_parameter_node = keywords_list->nodes[i]; - pm_constant_id_t name; + PUSH_LABEL(ret, set_label); + PM_COMPILE_NOT_POPPED(cast->value); + if (!popped) PUSH_INSN(ret, location, dup); - // def foo(a, (b, *c, d), e = 1, *f, g, (h, *i, j), k:, l: 1, **m, &n) - // ^^ - if (PM_NODE_TYPE_P(keyword_parameter_node, PM_REQUIRED_KEYWORD_PARAMETER_NODE)) { - name = ((const pm_required_keyword_parameter_node_t *) keyword_parameter_node)->name; - keyword->required_num++; - ID local = pm_constant_id_lookup(scope_node, name); + PUSH_SETLOCAL(ret, location, local_index.index, local_index.level); + PUSH_LABEL(ret, end_label); - if (PM_NODE_FLAG_P(keyword_parameter_node, PM_PARAMETER_FLAGS_REPEATED_PARAMETER)) { - local_table_for_iseq->ids[local_index] = local; - } - else { - pm_insert_local_index(name, local_index, index_lookup_table, local_table_for_iseq, scope_node); - } - local_index++; - ids[kw_index++] = local; - } - } + return; + } + case PM_LOCAL_VARIABLE_READ_NODE: { + // foo + // ^^^ + if (!popped) { + const pm_local_variable_read_node_t *cast = (const pm_local_variable_read_node_t *) node; + pm_local_index_t index = pm_lookup_local_index(iseq, scope_node, cast->name, cast->depth); + PUSH_GETLOCAL(ret, location, index.index, index.level); + } - for (size_t i = 0; i < keywords_list->size; i++) { - pm_node_t *keyword_parameter_node = keywords_list->nodes[i]; - pm_constant_id_t name; + return; + } + case PM_LOCAL_VARIABLE_WRITE_NODE: { + // foo = 1 + // ^^^^^^^ + const pm_local_variable_write_node_t *cast = (const pm_local_variable_write_node_t *) node; + PM_COMPILE_NOT_POPPED(cast->value); + if (!popped) PUSH_INSN(ret, location, dup); - // def foo(a, (b, *c, d), e = 1, *f, g, (h, *i, j), k:, l: 1, **m, &n) - // ^^^^ - if (PM_NODE_TYPE_P(keyword_parameter_node, PM_OPTIONAL_KEYWORD_PARAMETER_NODE)) { - const pm_optional_keyword_parameter_node_t *cast = ((const pm_optional_keyword_parameter_node_t *) keyword_parameter_node); + pm_local_index_t index = pm_lookup_local_index(iseq, scope_node, cast->name, cast->depth); + PUSH_SETLOCAL(ret, location, index.index, index.level); + return; + } + case PM_MATCH_LAST_LINE_NODE: { + // if /foo/ then end + // ^^^^^ + VALUE regexp = pm_static_literal_value(iseq, node, scope_node); - pm_node_t *value = cast->value; - name = cast->name; + PUSH_INSN1(ret, location, putobject, regexp); + PUSH_INSN2(ret, location, getspecial, INT2FIX(0), INT2FIX(0)); + PUSH_SEND(ret, location, idEqTilde, INT2NUM(1)); + if (popped) PUSH_INSN(ret, location, pop); - if (PM_NODE_FLAG_P(value, PM_NODE_FLAG_STATIC_LITERAL) && !(PM_NODE_TYPE_P(value, PM_ARRAY_NODE) || PM_NODE_TYPE_P(value, PM_HASH_NODE) || PM_NODE_TYPE_P(value, PM_RANGE_NODE))) { - rb_ary_push(default_values, pm_static_literal_value(iseq, value, scope_node)); - } - else { - rb_ary_push(default_values, complex_mark); - } + return; + } + case PM_MATCH_PREDICATE_NODE: { + // foo in bar + // ^^^^^^^^^^ + const pm_match_predicate_node_t *cast = (const pm_match_predicate_node_t *) node; - ID local = pm_constant_id_lookup(scope_node, name); - if (PM_NODE_FLAG_P(keyword_parameter_node, PM_PARAMETER_FLAGS_REPEATED_PARAMETER)) { - local_table_for_iseq->ids[local_index] = local; - } - else { - pm_insert_local_index(name, local_index, index_lookup_table, local_table_for_iseq, scope_node); - } - ids[kw_index++] = local; - local_index++; - } + // First, allocate some stack space for the cached return value of any + // calls to #deconstruct. + PUSH_INSN(ret, location, putnil); + + // Next, compile the expression that we're going to match against. + PM_COMPILE_NOT_POPPED(cast->value); + PUSH_INSN(ret, location, dup); - } + // Now compile the pattern that is going to be used to match against the + // expression. + LABEL *matched_label = NEW_LABEL(location.line); + LABEL *unmatched_label = NEW_LABEL(location.line); + LABEL *done_label = NEW_LABEL(location.line); + pm_compile_pattern(iseq, scope_node, cast->pattern, ret, matched_label, unmatched_label, false, false, true, 2); - keyword->bits_start = local_index; - keyword->table = ids; + // If the pattern did not match, then compile the necessary instructions + // to handle pushing false onto the stack, then jump to the end. + PUSH_LABEL(ret, unmatched_label); + PUSH_INSN(ret, location, pop); + PUSH_INSN(ret, location, pop); - if (RARRAY_LEN(default_values)) { - VALUE *dvs = ALLOC_N(VALUE, RARRAY_LEN(default_values)); + if (!popped) PUSH_INSN1(ret, location, putobject, Qfalse); + PUSH_INSNL(ret, location, jump, done_label); + PUSH_INSN(ret, location, putnil); - for (int i = 0; i < RARRAY_LEN(default_values); i++) { - VALUE dv = RARRAY_AREF(default_values, i); - if (dv == complex_mark) dv = Qundef; - if (!SPECIAL_CONST_P(dv)) { - RB_OBJ_WRITTEN(iseq, Qundef, dv); - } - dvs[i] = dv; - } + // If the pattern did match, then compile the necessary instructions to + // handle pushing true onto the stack, then jump to the end. + PUSH_LABEL(ret, matched_label); + PUSH_INSN1(ret, location, adjuststack, INT2FIX(2)); + if (!popped) PUSH_INSN1(ret, location, putobject, Qtrue); + PUSH_INSNL(ret, location, jump, done_label); - keyword->default_values = dvs; - } + PUSH_LABEL(ret, done_label); + return; + } + case PM_MATCH_REQUIRED_NODE: + // foo => bar + // ^^^^^^^^^^ + // + // A match required node represents pattern matching against a single + // pattern using the => operator. For example, + // + // foo => bar + // + // This is somewhat analogous to compiling a case match statement with a + // single pattern. In both cases, if the pattern fails it should + // immediately raise an error. + pm_compile_match_required_node(iseq, (const pm_match_required_node_t *) node, &location, ret, popped, scope_node); + return; + case PM_MATCH_WRITE_NODE: + // /(?foo)/ =~ bar + // ^^^^^^^^^^^^^^^^^^^^ + // + // Match write nodes are specialized call nodes that have a regular + // expression with valid named capture groups on the left, the =~ + // operator, and some value on the right. The nodes themselves simply + // wrap the call with the local variable targets that will be written + // when the call is executed. + pm_compile_match_write_node(iseq, (const pm_match_write_node_t *) node, &location, ret, popped, scope_node); + return; + case PM_MISSING_NODE: + rb_bug("A pm_missing_node_t should not exist in prism's AST."); + return; + case PM_MODULE_NODE: { + // module Foo; end + // ^^^^^^^^^^^^^^^ + const pm_module_node_t *cast = (const pm_module_node_t *) node; - // Hidden local for keyword arguments - ID local = rb_make_temporary_id(local_index); - local_table_for_iseq->ids[local_index] = local; - local_index++; - } + ID module_id = pm_constant_id_lookup(scope_node, cast->name); + VALUE module_name = rb_str_freeze(rb_sprintf("", rb_id2str(module_id))); - if (body->type == ISEQ_TYPE_BLOCK && local_index == 1 && requireds_list && requireds_list->size == 1 && !trailing_comma) { - body->param.flags.ambiguous_param0 = true; - } + pm_scope_node_t next_scope_node; + pm_scope_node_init((const pm_node_t *) cast, &next_scope_node, scope_node); - if (parameters_node) { - // def foo(a, (b, *c, d), e = 1, *f, g, (h, *i, j), k:, l: 1, **m, &n) - // ^^^ - if (parameters_node->keyword_rest) { - switch (PM_NODE_TYPE(parameters_node->keyword_rest)) { - // def foo(a, (b, *c, d), e = 1, *f, g, (h, *i, j), k:, l: 1, **nil, &n) - // ^^^^^ - case PM_NO_KEYWORDS_PARAMETER_NODE: { - body->param.flags.accepts_no_kwarg = true; - break; - } - // def foo(a, (b, *c, d), e = 1, *f, g, (h, *i, j), k:, l: 1, **m, &n) - // ^^^ - case PM_KEYWORD_REST_PARAMETER_NODE: { - const pm_keyword_rest_parameter_node_t *kw_rest_node = (const pm_keyword_rest_parameter_node_t *) parameters_node->keyword_rest; - if (!body->param.flags.has_kw) { - body->param.keyword = keyword = ZALLOC_N(struct rb_iseq_param_keyword, 1); - } + const rb_iseq_t *module_iseq = NEW_CHILD_ISEQ(&next_scope_node, module_name, ISEQ_TYPE_CLASS, location.line); + pm_scope_node_destroy(&next_scope_node); - keyword->rest_start = local_index; - body->param.flags.has_kwrest = true; + const int flags = VM_DEFINECLASS_TYPE_MODULE | pm_compile_class_path(iseq, cast->constant_path, &location, ret, false, scope_node); + PUSH_INSN(ret, location, putnil); + PUSH_INSN3(ret, location, defineclass, ID2SYM(module_id), module_iseq, INT2FIX(flags)); + RB_OBJ_WRITTEN(iseq, Qundef, (VALUE) module_iseq); - pm_constant_id_t constant_id = kw_rest_node->name; - if (constant_id) { - if (PM_NODE_FLAG_P(kw_rest_node, PM_PARAMETER_FLAGS_REPEATED_PARAMETER)) { - ID local = pm_constant_id_lookup(scope_node, constant_id); - local_table_for_iseq->ids[local_index] = local; - } - else { - pm_insert_local_index(constant_id, local_index, index_lookup_table, local_table_for_iseq, scope_node); - } - } - else { - body->param.flags.anon_kwrest = true; - pm_insert_local_special(idPow, local_index, index_lookup_table, local_table_for_iseq); - } + if (popped) PUSH_INSN(ret, location, pop); + return; + } + case PM_REQUIRED_PARAMETER_NODE: { + // def foo(bar); end + // ^^^ + const pm_required_parameter_node_t *cast = (const pm_required_parameter_node_t *) node; + pm_local_index_t index = pm_lookup_local_index(iseq, scope_node, cast->name, 0); - local_index++; - break; - } - // def foo(...) - // ^^^ - case PM_FORWARDING_PARAMETER_NODE: { - if (!ISEQ_BODY(iseq)->param.flags.forwardable) { - // Add the anonymous * - body->param.rest_start = local_index; - body->param.flags.has_rest = true; - body->param.flags.anon_rest = true; - pm_insert_local_special(idMULT, local_index++, index_lookup_table, local_table_for_iseq); - - // Add the anonymous ** - RUBY_ASSERT(!body->param.flags.has_kw); - body->param.flags.has_kw = false; - body->param.flags.has_kwrest = true; - body->param.flags.anon_kwrest = true; - body->param.keyword = keyword = ZALLOC_N(struct rb_iseq_param_keyword, 1); - keyword->rest_start = local_index; - pm_insert_local_special(idPow, local_index++, index_lookup_table, local_table_for_iseq); - - // Add the anonymous & - body->param.block_start = local_index; - body->param.flags.has_block = true; - pm_insert_local_special(idAnd, local_index++, index_lookup_table, local_table_for_iseq); - } + PUSH_SETLOCAL(ret, location, index.index, index.level); + return; + } + case PM_MULTI_WRITE_NODE: { + // foo, bar = baz + // ^^^^^^^^^^^^^^ + // + // A multi write node represents writing to multiple values using an = + // operator. Importantly these nodes are only parsed when the left-hand + // side of the operator has multiple targets. The right-hand side of the + // operator having multiple targets represents an implicit array + // instead. + const pm_multi_write_node_t *cast = (const pm_multi_write_node_t *) node; - // Add the ... - pm_insert_local_special(idDot3, local_index++, index_lookup_table, local_table_for_iseq); - break; - } - default: { - rb_bug("node type %s not expected as keyword_rest", pm_node_type_to_str(PM_NODE_TYPE(parameters_node->keyword_rest))); - } - } - } + DECL_ANCHOR(writes); + INIT_ANCHOR(writes); - // def foo(a, (b, *c, d), e = 1, *f, g, (h, *i, j), k:, l: 1, **m, &n) - // ^^ - if (parameters_node->block) { - body->param.block_start = local_index; - body->param.flags.has_block = true; - iseq_set_use_block(iseq); + DECL_ANCHOR(cleanup); + INIT_ANCHOR(cleanup); - pm_constant_id_t name = ((const pm_block_parameter_node_t *) parameters_node->block)->name; + pm_multi_target_state_t state = { 0 }; + state.position = popped ? 0 : 1; + pm_compile_multi_target_node(iseq, node, ret, writes, cleanup, scope_node, &state); - if (name) { - if (PM_NODE_FLAG_P(parameters_node->block, PM_PARAMETER_FLAGS_REPEATED_PARAMETER)) { - ID local = pm_constant_id_lookup(scope_node, name); - local_table_for_iseq->ids[local_index] = local; - } - else { - pm_insert_local_index(name, local_index, index_lookup_table, local_table_for_iseq, scope_node); - } - } - else { - pm_insert_local_special(idAnd, local_index, index_lookup_table, local_table_for_iseq); - } + PM_COMPILE_NOT_POPPED(cast->value); + if (!popped) PUSH_INSN(ret, location, dup); - local_index++; - } + PUSH_SEQ(ret, writes); + if (!popped && state.stack_size >= 1) { + // Make sure the value on the right-hand side of the = operator is + // being returned before we pop the parent expressions. + PUSH_INSN1(ret, location, setn, INT2FIX(state.stack_size)); } - //********END OF STEP 2********** - // The local table is now consistent with expected - // stack layout - - // If there's only one required element in the parameters - // CRuby needs to recognize it as an ambiguous parameter + // Now, we need to go back and modify the topn instructions in order to + // ensure they can correctly retrieve the parent expressions. + pm_multi_target_state_update(&state); - //********STEP 3********** - // Goal: fill in the names of the parameters in MultiTargetNodes + PUSH_SEQ(ret, cleanup); + return; + } + case PM_NEXT_NODE: + // next + // ^^^^ // - // Go through requireds again to set the multis - - if (requireds_list && requireds_list->size) { - for (size_t i = 0; i < requireds_list->size; i++) { - // For each MultiTargetNode, we're going to have one - // additional anonymous local not represented in the locals table - // We want to account for this in our table size - const pm_node_t *required = requireds_list->nodes[i]; - - if (PM_NODE_TYPE_P(required, PM_MULTI_TARGET_NODE)) { - local_index = pm_compile_destructured_param_locals((const pm_multi_target_node_t *) required, index_lookup_table, local_table_for_iseq, scope_node, local_index); - } - } + // next foo + // ^^^^^^^^ + pm_compile_next_node(iseq, (const pm_next_node_t *) node, &location, ret, popped, scope_node); + return; + case PM_NIL_NODE: { + // nil + // ^^^ + if (!popped) { + PUSH_INSN(ret, location, putnil); } - // Go through posts again to set the multis - if (posts_list && posts_list->size) { - for (size_t i = 0; i < posts_list->size; i++) { - // For each MultiTargetNode, we're going to have one - // additional anonymous local not represented in the locals table - // We want to account for this in our table size - const pm_node_t *post = posts_list->nodes[i]; - - if (PM_NODE_TYPE_P(post, PM_MULTI_TARGET_NODE)) { - local_index = pm_compile_destructured_param_locals((const pm_multi_target_node_t *) post, index_lookup_table, local_table_for_iseq, scope_node, local_index); - } - } - } + return; + } + case PM_NO_KEYWORDS_PARAMETER_NODE: { + // def foo(**nil); end + // ^^^^^ + ISEQ_BODY(iseq)->param.flags.accepts_no_kwarg = TRUE; + return; + } + case PM_NUMBERED_REFERENCE_READ_NODE: { + // $1 + // ^^ + if (!popped) { + uint32_t reference_number = ((const pm_numbered_reference_read_node_t *) node)->number; - // Set any anonymous locals for the for node - if (PM_NODE_TYPE_P(scope_node->ast_node, PM_FOR_NODE)) { - if (PM_NODE_TYPE_P(((const pm_for_node_t *) scope_node->ast_node)->index, PM_LOCAL_VARIABLE_TARGET_NODE)) { - body->param.lead_num++; + if (reference_number > 0) { + PUSH_INSN2(ret, location, getspecial, INT2FIX(1), INT2FIX(reference_number << 1)); } else { - body->param.rest_start = local_index; - body->param.flags.has_rest = true; - } - - ID local = rb_make_temporary_id(local_index); - local_table_for_iseq->ids[local_index] = local; - local_index++; - } - - // Fill in any NumberedParameters, if they exist - if (scope_node->parameters && PM_NODE_TYPE_P(scope_node->parameters, PM_NUMBERED_PARAMETERS_NODE)) { - int maximum = ((const pm_numbered_parameters_node_t *) scope_node->parameters)->maximum; - RUBY_ASSERT(0 < maximum && maximum <= 9); - for (int i = 0; i < maximum; i++, local_index++) { - const uint8_t param_name[] = { '_', '1' + i }; - pm_constant_id_t constant_id = pm_constant_pool_find(&parser->constant_pool, param_name, 2); - RUBY_ASSERT(constant_id && "parser should fill in any gaps in numbered parameters"); - pm_insert_local_index(constant_id, local_index, index_lookup_table, local_table_for_iseq, scope_node); + PUSH_INSN(ret, location, putnil); } - body->param.lead_num = maximum; - body->param.flags.has_lead = true; } - //********END OF STEP 3********** + return; + } + case PM_OR_NODE: { + // a or b + // ^^^^^^ + const pm_or_node_t *cast = (const pm_or_node_t *) node; - //********STEP 4********** - // Goal: fill in the method body locals - // To be explicit, these are the non-parameter locals - // We fill in the block_locals, if they exist - // lambda { |x; y| y } - // ^ - if (block_locals && block_locals->size) { - for (size_t i = 0; i < block_locals->size; i++, local_index++) { - pm_constant_id_t constant_id = ((const pm_block_local_variable_node_t *) block_locals->nodes[i])->name; - pm_insert_local_index(constant_id, local_index, index_lookup_table, local_table_for_iseq, scope_node); - } - } + LABEL *end_label = NEW_LABEL(location.line); + PM_COMPILE_NOT_POPPED(cast->left); - // Fill in any locals we missed - if (scope_node->locals.size) { - for (size_t i = 0; i < scope_node->locals.size; i++) { - pm_constant_id_t constant_id = locals->ids[i]; - if (constant_id) { - struct pm_local_table_insert_ctx ctx; - ctx.scope_node = scope_node; - ctx.local_table_for_iseq = local_table_for_iseq; - ctx.local_index = local_index; + if (!popped) PUSH_INSN(ret, location, dup); + PUSH_INSNL(ret, location, branchif, end_label); - st_update(index_lookup_table, (st_data_t)constant_id, pm_local_table_insert_func, (st_data_t)&ctx); + if (!popped) PUSH_INSN(ret, location, pop); + PM_COMPILE(cast->right); + PUSH_LABEL(ret, end_label); - local_index = ctx.local_index; - } - } - } + return; + } + case PM_OPTIONAL_PARAMETER_NODE: { + // def foo(bar = 1); end + // ^^^^^^^ + const pm_optional_parameter_node_t *cast = (const pm_optional_parameter_node_t *) node; + PM_COMPILE_NOT_POPPED(cast->value); - //********END OF STEP 4********** + pm_local_index_t index = pm_lookup_local_index(iseq, scope_node, cast->name, 0); + PUSH_SETLOCAL(ret, location, index.index, index.level); - // We set the index_lookup_table on the scope node so we can - // refer to the parameters correctly - if (scope_node->index_lookup_table) { - st_free_table(scope_node->index_lookup_table); - } - scope_node->index_lookup_table = index_lookup_table; - iseq_calc_param_size(iseq); + return; + } + case PM_PARENTHESES_NODE: { + // () + // ^^ + // + // (1) + // ^^^ + const pm_parentheses_node_t *cast = (const pm_parentheses_node_t *) node; - if (ISEQ_BODY(iseq)->param.flags.forwardable) { - // We're treating `...` as a parameter so that frame - // pushing won't clobber it. - ISEQ_BODY(iseq)->param.size += 1; + if (cast->body != NULL) { + PM_COMPILE(cast->body); } - - // FIXME: args? - iseq_set_local_table(iseq, local_table_for_iseq, 0); - scope_node->local_table_for_iseq_size = local_table_for_iseq->size; - - //********STEP 5************ - // Goal: compile anything that needed to be compiled - if (optionals_list && optionals_list->size) { - LABEL **opt_table = (LABEL **) ALLOC_N(VALUE, optionals_list->size + 1); - LABEL *label; - - // TODO: Should we make an api for NEW_LABEL where you can pass - // a pointer to the label it should fill out? We already - // have a list of labels allocated above so it seems wasteful - // to do the copies. - for (size_t i = 0; i < optionals_list->size; i++) { - label = NEW_LABEL(lineno); - opt_table[i] = label; - PUSH_LABEL(ret, label); - pm_node_t *optional_node = optionals_list->nodes[i]; - PM_COMPILE_NOT_POPPED(optional_node); - } - - // Set the last label - label = NEW_LABEL(lineno); - opt_table[optionals_list->size] = label; - PUSH_LABEL(ret, label); - - body->param.opt_table = (const VALUE *) opt_table; + else if (!popped) { + PUSH_INSN(ret, location, putnil); } - if (keywords_list && keywords_list->size) { - size_t optional_index = 0; - for (size_t i = 0; i < keywords_list->size; i++) { - pm_node_t *keyword_parameter_node = keywords_list->nodes[i]; - pm_constant_id_t name; - - switch (PM_NODE_TYPE(keyword_parameter_node)) { - // def foo(a, (b, *c, d), e = 1, *f, g, (h, *i, j), k:, l: 1, **m, &n) - // ^^^^ - case PM_OPTIONAL_KEYWORD_PARAMETER_NODE: { - const pm_optional_keyword_parameter_node_t *cast = ((const pm_optional_keyword_parameter_node_t *) keyword_parameter_node); - - pm_node_t *value = cast->value; - name = cast->name; - - if (!PM_NODE_FLAG_P(value, PM_NODE_FLAG_STATIC_LITERAL) || PM_NODE_TYPE_P(value, PM_ARRAY_NODE) || PM_NODE_TYPE_P(value, PM_HASH_NODE) || PM_NODE_TYPE_P(value, PM_RANGE_NODE)) { - LABEL *end_label = NEW_LABEL(location.line); + return; + } + case PM_PRE_EXECUTION_NODE: { + // BEGIN {} + // ^^^^^^^^ + const pm_pre_execution_node_t *cast = (const pm_pre_execution_node_t *) node; - pm_local_index_t index = pm_lookup_local_index(iseq, scope_node, name, 0); - int kw_bits_idx = table_size - body->param.keyword->bits_start; - PUSH_INSN2(ret, location, checkkeyword, INT2FIX(kw_bits_idx + VM_ENV_DATA_SIZE - 1), INT2FIX(optional_index)); - PUSH_INSNL(ret, location, branchif, end_label); - PM_COMPILE(value); - PUSH_SETLOCAL(ret, location, index.index, index.level); - PUSH_LABEL(ret, end_label); - } - optional_index++; - break; - } - // def foo(a, (b, *c, d), e = 1, *f, g, (h, *i, j), k:, l: 1, **m, &n) - // ^^ - case PM_REQUIRED_KEYWORD_PARAMETER_NODE: { - break; - } - default: { - rb_bug("Unexpected keyword parameter node type %s", pm_node_type_to_str(PM_NODE_TYPE(keyword_parameter_node))); - } - } - } - } + LINK_ANCHOR *outer_pre = scope_node->pre_execution_anchor; + RUBY_ASSERT(outer_pre != NULL); - if (requireds_list && requireds_list->size) { - for (size_t i = 0; i < requireds_list->size; i++) { - // For each MultiTargetNode, we're going to have one additional - // anonymous local not represented in the locals table. We want - // to account for this in our table size. - const pm_node_t *required = requireds_list->nodes[i]; + // BEGIN{} nodes can be nested, so here we're going to do the same thing + // that we did for the top-level compilation where we create two + // anchors and then join them in the correct order into the resulting + // anchor. + DECL_ANCHOR(inner_pre); + INIT_ANCHOR(inner_pre); + scope_node->pre_execution_anchor = inner_pre; - if (PM_NODE_TYPE_P(required, PM_MULTI_TARGET_NODE)) { - PUSH_GETLOCAL(ret, location, table_size - (int)i, 0); - pm_compile_destructured_param_writes(iseq, (const pm_multi_target_node_t *) required, ret, scope_node); - } - } - } + DECL_ANCHOR(inner_body); + INIT_ANCHOR(inner_body); - if (posts_list && posts_list->size) { - for (size_t i = 0; i < posts_list->size; i++) { - // For each MultiTargetNode, we're going to have one additional - // anonymous local not represented in the locals table. We want - // to account for this in our table size. - const pm_node_t *post = posts_list->nodes[i]; + if (cast->statements != NULL) { + const pm_node_list_t *body = &cast->statements->body; - if (PM_NODE_TYPE_P(post, PM_MULTI_TARGET_NODE)) { - PUSH_GETLOCAL(ret, location, table_size - body->param.post_start - (int) i, 0); - pm_compile_destructured_param_writes(iseq, (const pm_multi_target_node_t *) post, ret, scope_node); - } + for (size_t index = 0; index < body->size; index++) { + pm_compile_node(iseq, body->nodes[index], inner_body, true, scope_node); } } - switch (body->type) { - case ISEQ_TYPE_BLOCK: { - LABEL *start = ISEQ_COMPILE_DATA(iseq)->start_label = NEW_LABEL(0); - LABEL *end = ISEQ_COMPILE_DATA(iseq)->end_label = NEW_LABEL(0); - const pm_node_location_t block_location = { .line = body->location.first_lineno, .node_id = -1 }; + if (!popped) { + PUSH_INSN(inner_body, location, putnil); + } - start->rescued = LABEL_RESCUE_BEG; - end->rescued = LABEL_RESCUE_END; + // Now that everything has been compiled, join both anchors together + // into the correct outer pre execution anchor, and reset the value so + // that subsequent BEGIN{} nodes can be compiled correctly. + PUSH_SEQ(outer_pre, inner_pre); + PUSH_SEQ(outer_pre, inner_body); + scope_node->pre_execution_anchor = outer_pre; - // For nodes automatically assign the iteration variable to whatever - // index variable. We need to handle that write here because it has - // to happen in the context of the block. Note that this happens - // before the B_CALL tracepoint event. - if (PM_NODE_TYPE_P(scope_node->ast_node, PM_FOR_NODE)) { - pm_compile_for_node_index(iseq, ((const pm_for_node_t *) scope_node->ast_node)->index, ret, scope_node); - } + return; + } + case PM_POST_EXECUTION_NODE: { + // END {} + // ^^^^^^ + const rb_iseq_t *child_iseq; + const rb_iseq_t *prevblock = ISEQ_COMPILE_DATA(iseq)->current_block; - PUSH_TRACE(ret, RUBY_EVENT_B_CALL); - PUSH_INSN(ret, block_location, nop); - PUSH_LABEL(ret, start); + pm_scope_node_t next_scope_node; + pm_scope_node_init(node, &next_scope_node, scope_node); + child_iseq = NEW_CHILD_ISEQ(&next_scope_node, make_name_for_block(iseq), ISEQ_TYPE_BLOCK, lineno); + pm_scope_node_destroy(&next_scope_node); - if (scope_node->body != NULL) { - switch (PM_NODE_TYPE(scope_node->ast_node)) { - case PM_POST_EXECUTION_NODE: { - const pm_post_execution_node_t *cast = (const pm_post_execution_node_t *) scope_node->ast_node; - PUSH_INSN1(ret, block_location, putspecialobject, INT2FIX(VM_SPECIAL_OBJECT_VMCORE)); + ISEQ_COMPILE_DATA(iseq)->current_block = child_iseq; - // We create another ScopeNode from the statements within the PostExecutionNode - pm_scope_node_t next_scope_node; - pm_scope_node_init((const pm_node_t *) cast->statements, &next_scope_node, scope_node); + int is_index = ISEQ_BODY(iseq)->ise_size++; + PUSH_INSN2(ret, location, once, child_iseq, INT2FIX(is_index)); + RB_OBJ_WRITTEN(iseq, Qundef, (VALUE) child_iseq); + if (popped) PUSH_INSN(ret, location, pop); - const rb_iseq_t *block = NEW_CHILD_ISEQ(&next_scope_node, make_name_for_block(body->parent_iseq), ISEQ_TYPE_BLOCK, location.line); - pm_scope_node_destroy(&next_scope_node); + ISEQ_COMPILE_DATA(iseq)->current_block = prevblock; - PUSH_CALL_WITH_BLOCK(ret, block_location, id_core_set_postexe, INT2FIX(0), block); - break; - } - case PM_INTERPOLATED_REGULAR_EXPRESSION_NODE: { - const pm_interpolated_regular_expression_node_t *cast = (const pm_interpolated_regular_expression_node_t *) scope_node->ast_node; - pm_compile_regexp_dynamic(iseq, (const pm_node_t *) cast, &cast->parts, &location, ret, popped, scope_node); - break; - } - default: - pm_compile_node(iseq, scope_node->body, ret, popped, scope_node); - break; - } - } - else { - PUSH_INSN(ret, block_location, putnil); - } + return; + } + case PM_RANGE_NODE: { + // 0..5 + // ^^^^ + const pm_range_node_t *cast = (const pm_range_node_t *) node; + bool exclude_end = PM_NODE_FLAG_P(cast, PM_RANGE_FLAGS_EXCLUDE_END); - PUSH_LABEL(ret, end); - PUSH_TRACE(ret, RUBY_EVENT_B_RETURN); - ISEQ_COMPILE_DATA(iseq)->last_line = body->location.code_location.end_pos.lineno; + if (pm_optimizable_range_item_p(cast->left) && pm_optimizable_range_item_p(cast->right)) { + if (!popped) { + const pm_node_t *left = cast->left; + const pm_node_t *right = cast->right; - /* wide range catch handler must put at last */ - PUSH_CATCH_ENTRY(CATCH_TYPE_REDO, start, end, NULL, start); - PUSH_CATCH_ENTRY(CATCH_TYPE_NEXT, start, end, NULL, end); - break; - } - case ISEQ_TYPE_ENSURE: { - const pm_node_location_t statements_location = (scope_node->body != NULL ? PM_NODE_START_LOCATION(scope_node->parser, scope_node->body) : location); - iseq_set_exception_local_table(iseq); + VALUE val = rb_range_new( + (left && PM_NODE_TYPE_P(left, PM_INTEGER_NODE)) ? parse_integer((const pm_integer_node_t *) left) : Qnil, + (right && PM_NODE_TYPE_P(right, PM_INTEGER_NODE)) ? parse_integer((const pm_integer_node_t *) right) : Qnil, + exclude_end + ); - if (scope_node->body != NULL) { - PM_COMPILE_POPPED((const pm_node_t *) scope_node->body); + PUSH_INSN1(ret, location, putobject, val); } - - PUSH_GETLOCAL(ret, statements_location, 1, 0); - PUSH_INSN1(ret, statements_location, throw, INT2FIX(0)); - return; - } - case ISEQ_TYPE_METHOD: { - ISEQ_COMPILE_DATA(iseq)->root_node = (const void *) scope_node->body; - PUSH_TRACE(ret, RUBY_EVENT_CALL); - - if (scope_node->body) { - PM_COMPILE((const pm_node_t *) scope_node->body); + } + else { + if (cast->left != NULL) { + PM_COMPILE(cast->left); } - else { + else if (!popped) { PUSH_INSN(ret, location, putnil); } - ISEQ_COMPILE_DATA(iseq)->root_node = (const void *) scope_node->body; - PUSH_TRACE(ret, RUBY_EVENT_RETURN); - - ISEQ_COMPILE_DATA(iseq)->last_line = body->location.code_location.end_pos.lineno; - break; - } - case ISEQ_TYPE_RESCUE: { - iseq_set_exception_local_table(iseq); - if (PM_NODE_TYPE_P(scope_node->ast_node, PM_RESCUE_MODIFIER_NODE)) { - LABEL *lab = NEW_LABEL(lineno); - LABEL *rescue_end = NEW_LABEL(lineno); - PUSH_GETLOCAL(ret, location, LVAR_ERRINFO, 0); - PUSH_INSN1(ret, location, putobject, rb_eStandardError); - PUSH_INSN1(ret, location, checkmatch, INT2FIX(VM_CHECKMATCH_TYPE_RESCUE)); - PUSH_INSNL(ret, location, branchif, lab); - PUSH_INSNL(ret, location, jump, rescue_end); - PUSH_LABEL(ret, lab); - PUSH_TRACE(ret, RUBY_EVENT_RESCUE); - PM_COMPILE((const pm_node_t *) scope_node->body); - PUSH_INSN(ret, location, leave); - PUSH_LABEL(ret, rescue_end); - PUSH_GETLOCAL(ret, location, LVAR_ERRINFO, 0); + if (cast->right != NULL) { + PM_COMPILE(cast->right); } - else { - PM_COMPILE((const pm_node_t *) scope_node->ast_node); + else if (!popped) { + PUSH_INSN(ret, location, putnil); } - PUSH_INSN1(ret, location, throw, INT2FIX(0)); - return; - } - default: - if (scope_node->body) { - PM_COMPILE((const pm_node_t *) scope_node->body); - } - else { - PUSH_INSN(ret, location, putnil); + if (!popped) { + PUSH_INSN1(ret, location, newrange, INT2FIX(exclude_end ? 1 : 0)); } - break; } - - if (PM_NODE_TYPE_P(scope_node->ast_node, PM_CLASS_NODE) || PM_NODE_TYPE_P(scope_node->ast_node, PM_MODULE_NODE)) { - const pm_node_location_t end_location = PM_NODE_END_LOCATION(scope_node->parser, scope_node->ast_node); - ADD_TRACE(ret, RUBY_EVENT_END); - ISEQ_COMPILE_DATA(iseq)->last_line = end_location.line; + return; + } + case PM_RATIONAL_NODE: { + // 1r + // ^^ + if (!popped) { + PUSH_INSN1(ret, location, putobject, parse_rational((const pm_rational_node_t *) node)); } - - if (!PM_NODE_TYPE_P(scope_node->ast_node, PM_ENSURE_NODE)) { - const pm_node_location_t location = { .line = ISEQ_COMPILE_DATA(iseq)->last_line, .node_id = -1 }; - PUSH_INSN(ret, location, leave); + return; + } + case PM_REDO_NODE: + // redo + // ^^^^ + pm_compile_redo_node(iseq, &location, ret, popped, scope_node); + return; + case PM_REGULAR_EXPRESSION_NODE: { + // /foo/ + // ^^^^^ + if (!popped) { + VALUE regexp = pm_static_literal_value(iseq, node, scope_node); + PUSH_INSN1(ret, location, putobject, regexp); } + return; + } + case PM_RESCUE_NODE: + // begin; rescue; end + // ^^^^^^^ + pm_compile_rescue_node(iseq, (const pm_rescue_node_t *) node, &location, ret, popped, scope_node); + return; + case PM_RESCUE_MODIFIER_NODE: { + // foo rescue bar + // ^^^^^^^^^^^^^^ + const pm_rescue_modifier_node_t *cast = (const pm_rescue_modifier_node_t *) node; + + pm_scope_node_t rescue_scope_node; + pm_scope_node_init((const pm_node_t *) cast, &rescue_scope_node, scope_node); + + rb_iseq_t *rescue_iseq = NEW_CHILD_ISEQ( + &rescue_scope_node, + rb_str_concat(rb_str_new2("rescue in "), ISEQ_BODY(iseq)->location.label), + ISEQ_TYPE_RESCUE, + pm_node_line_number(parser, cast->rescue_expression) + ); + pm_scope_node_destroy(&rescue_scope_node); + + LABEL *lstart = NEW_LABEL(location.line); + LABEL *lend = NEW_LABEL(location.line); + LABEL *lcont = NEW_LABEL(location.line); + + lstart->rescued = LABEL_RESCUE_BEG; + lend->rescued = LABEL_RESCUE_END; + + PUSH_LABEL(ret, lstart); + PM_COMPILE_NOT_POPPED(cast->expression); + PUSH_LABEL(ret, lend); + + PUSH_INSN(ret, location, nop); + PUSH_LABEL(ret, lcont); + if (popped) PUSH_INSN(ret, location, pop); + + PUSH_CATCH_ENTRY(CATCH_TYPE_RESCUE, lstart, lend, rescue_iseq, lcont); + PUSH_CATCH_ENTRY(CATCH_TYPE_RETRY, lend, lcont, NULL, lstart); + return; + } + case PM_RETURN_NODE: + // return + // ^^^^^^ + // + // return 1 + // ^^^^^^^^ + pm_compile_return_node(iseq, (const pm_return_node_t *) node, &location, ret, popped, scope_node); + return; + case PM_RETRY_NODE: { + // retry + // ^^^^^ + if (ISEQ_BODY(iseq)->type == ISEQ_TYPE_RESCUE) { + PUSH_INSN(ret, location, putnil); + PUSH_INSN1(ret, location, throw, INT2FIX(TAG_RETRY)); + if (popped) PUSH_INSN(ret, location, pop); + } + else { + COMPILE_ERROR(iseq, location.line, "Invalid retry"); + return; + } return; } + case PM_SCOPE_NODE: + pm_compile_scope_node(iseq, (pm_scope_node_t *) node, &location, ret, popped); + return; case PM_SELF_NODE: { // self // ^^^^ @@ -9628,61 +9945,12 @@ pm_compile_node(rb_iseq_t *iseq, const pm_node_t *node, LINK_ANCHOR *const ret, } return; } - case PM_SUPER_NODE: { + case PM_SUPER_NODE: + // super() // super(foo) - // ^^^^^^^^^^ - const pm_super_node_t *cast = (const pm_super_node_t *) node; - - DECL_ANCHOR(args); - INIT_ANCHOR(args); - - LABEL *retry_label = NEW_LABEL(location.line); - LABEL *retry_end_l = NEW_LABEL(location.line); - - const rb_iseq_t *previous_block = ISEQ_COMPILE_DATA(iseq)->current_block; - const rb_iseq_t *current_block; - ISEQ_COMPILE_DATA(iseq)->current_block = current_block = NULL; - - PUSH_LABEL(ret, retry_label); - PUSH_INSN(ret, location, putself); - - int flags = 0; - struct rb_callinfo_kwarg *keywords = NULL; - int argc = pm_setup_args(cast->arguments, cast->block, &flags, &keywords, iseq, ret, scope_node, &location); - flags |= VM_CALL_SUPER | VM_CALL_FCALL; - - if (cast->block && PM_NODE_TYPE_P(cast->block, PM_BLOCK_NODE)) { - pm_scope_node_t next_scope_node; - pm_scope_node_init(cast->block, &next_scope_node, scope_node); - - ISEQ_COMPILE_DATA(iseq)->current_block = current_block = NEW_CHILD_ISEQ(&next_scope_node, make_name_for_block(iseq), ISEQ_TYPE_BLOCK, lineno); - pm_scope_node_destroy(&next_scope_node); - } - - if (!cast->block) { - iseq_set_use_block(ISEQ_BODY(iseq)->local_iseq); - } - - if ((flags & VM_CALL_ARGS_BLOCKARG) && (flags & VM_CALL_KW_SPLAT) && !(flags & VM_CALL_KW_SPLAT_MUT)) { - PUSH_INSN(args, location, splatkw); - } - - PUSH_SEQ(ret, args); - if (ISEQ_BODY(ISEQ_BODY(iseq)->local_iseq)->param.flags.forwardable) { - flags |= VM_CALL_FORWARDING; - PUSH_INSN2(ret, location, invokesuperforward, new_callinfo(iseq, 0, argc, flags, keywords, current_block != NULL), current_block); - } - else { - PUSH_INSN2(ret, location, invokesuper, new_callinfo(iseq, 0, argc, flags, keywords, current_block != NULL), current_block); - pm_compile_retry_end_label(iseq, ret, retry_end_l); - } - - if (popped) PUSH_INSN(ret, location, pop); - ISEQ_COMPILE_DATA(iseq)->current_block = previous_block; - PUSH_CATCH_ENTRY(CATCH_TYPE_BREAK, retry_label, retry_end_l, current_block, retry_end_l); - + // super(...) + pm_compile_super_node(iseq, (const pm_super_node_t *) node, &location, ret, popped, scope_node); return; - } case PM_SYMBOL_NODE: { // :foo // ^^^^ @@ -9769,50 +10037,22 @@ pm_compile_node(rb_iseq_t *iseq, const pm_node_t *node, LINK_ANCHOR *const ret, return; } - case PM_YIELD_NODE: { + case PM_YIELD_NODE: // yield // ^^^^^ // // yield 1 // ^^^^^^^ - const pm_yield_node_t *cast = (const pm_yield_node_t *) node; - - switch (ISEQ_BODY(ISEQ_BODY(iseq)->local_iseq)->type) { - case ISEQ_TYPE_TOP: - case ISEQ_TYPE_MAIN: - case ISEQ_TYPE_CLASS: - COMPILE_ERROR(iseq, location.line, "Invalid yield"); - return; - default: /* valid */; - } - - int argc = 0; - int flags = 0; - struct rb_callinfo_kwarg *keywords = NULL; - - if (cast->arguments) { - argc = pm_setup_args(cast->arguments, NULL, &flags, &keywords, iseq, ret, scope_node, &location); - } - - PUSH_INSN1(ret, location, invokeblock, new_callinfo(iseq, 0, argc, flags, keywords, FALSE)); - iseq_set_use_block(ISEQ_BODY(iseq)->local_iseq); - if (popped) PUSH_INSN(ret, location, pop); - - int level = 0; - for (const rb_iseq_t *tmp_iseq = iseq; tmp_iseq != ISEQ_BODY(iseq)->local_iseq; level++) { - tmp_iseq = ISEQ_BODY(tmp_iseq)->parent_iseq; - } - - if (level > 0) access_outer_variables(iseq, level, rb_intern("yield"), true); + pm_compile_yield_node(iseq, (const pm_yield_node_t *) node, &location, ret, popped, scope_node); return; - } - default: { + default: rb_raise(rb_eNotImpError, "node type %s not implemented", pm_node_type_to_str(PM_NODE_TYPE(node))); return; - } } } +#undef PM_CONTAINER_P + /** True if the given iseq can have pre execution blocks. */ static inline bool pm_iseq_pre_execution_p(rb_iseq_t *iseq) @@ -10405,7 +10645,7 @@ pm_parse_process(pm_parse_result_t *result, pm_node_t *node, VALUE *script_lines for (size_t index = 0; index < parser->newline_list.size; index++) { size_t offset = parser->newline_list.offsets[index]; - size_t length = index == parser->newline_list.size - 1 ? (parser->end - (parser->start + offset)) : (parser->newline_list.offsets[index + 1] - offset); + size_t length = index == parser->newline_list.size - 1 ? ((size_t) (parser->end - (parser->start + offset))) : (parser->newline_list.offsets[index + 1] - offset); rb_ary_push(*script_lines, rb_enc_str_new((const char *) parser->start + offset, length, scope_node->encoding)); } @@ -10520,71 +10760,92 @@ pm_parse_file_script_lines(const pm_scope_node_t *scope_node, const pm_parser_t // This is essentially pm_string_mapped_init(), preferring to memory map the // file, with additional handling for files that require blocking to properly // read (e.g. pipes). -static bool -read_entire_file(pm_string_t *string, const char *filepath) +static pm_string_init_result_t +pm_read_file(pm_string_t *string, const char *filepath) { #ifdef _WIN32 // Open the file for reading. - HANDLE file = CreateFile(filepath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + int length = MultiByteToWideChar(CP_UTF8, 0, filepath, -1, NULL, 0); + if (length == 0) return PM_STRING_INIT_ERROR_GENERIC; + WCHAR *wfilepath = xmalloc(sizeof(WCHAR) * ((size_t) length)); + if ((wfilepath == NULL) || (MultiByteToWideChar(CP_UTF8, 0, filepath, -1, wfilepath, length) == 0)) { + xfree(wfilepath); + return PM_STRING_INIT_ERROR_GENERIC; + } + + HANDLE file = CreateFileW(wfilepath, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, NULL); if (file == INVALID_HANDLE_VALUE) { - return false; + pm_string_init_result_t result = PM_STRING_INIT_ERROR_GENERIC; + + if (GetLastError() == ERROR_ACCESS_DENIED) { + DWORD attributes = GetFileAttributesW(wfilepath); + if ((attributes != INVALID_FILE_ATTRIBUTES) && (attributes & FILE_ATTRIBUTE_DIRECTORY)) { + result = PM_STRING_INIT_ERROR_DIRECTORY; + } + } + + xfree(wfilepath); + return result; } // Get the file size. DWORD file_size = GetFileSize(file, NULL); if (file_size == INVALID_FILE_SIZE) { CloseHandle(file); - return false; + xfree(wfilepath); + return PM_STRING_INIT_ERROR_GENERIC; } // If the file is empty, then we don't need to do anything else, we'll set // the source to a constant empty string and return. if (file_size == 0) { CloseHandle(file); + xfree(wfilepath); const uint8_t source[] = ""; *string = (pm_string_t) { .type = PM_STRING_CONSTANT, .source = source, .length = 0 }; - return true; + return PM_STRING_INIT_SUCCESS; } // Create a mapping of the file. HANDLE mapping = CreateFileMapping(file, NULL, PAGE_READONLY, 0, 0, NULL); if (mapping == NULL) { CloseHandle(file); - return false; + xfree(wfilepath); + return PM_STRING_INIT_ERROR_GENERIC; } // Map the file into memory. uint8_t *source = (uint8_t *) MapViewOfFile(mapping, FILE_MAP_READ, 0, 0, 0); CloseHandle(mapping); CloseHandle(file); + xfree(wfilepath); if (source == NULL) { - return false; + return PM_STRING_INIT_ERROR_GENERIC; } *string = (pm_string_t) { .type = PM_STRING_MAPPED, .source = source, .length = (size_t) file_size }; - return true; + return PM_STRING_INIT_SUCCESS; #elif defined(_POSIX_MAPPED_FILES) // Open the file for reading const int open_mode = O_RDONLY | O_NONBLOCK; int fd = open(filepath, open_mode); if (fd == -1) { - return false; + return PM_STRING_INIT_ERROR_GENERIC; } // Stat the file to get the file size struct stat sb; if (fstat(fd, &sb) == -1) { close(fd); - return false; + return PM_STRING_INIT_ERROR_GENERIC; } // Ensure it is a file and not a directory if (S_ISDIR(sb.st_mode)) { close(fd); - errno = EISDIR; - return false; + return PM_STRING_INIT_ERROR_DIRECTORY; } // We need to wait for data first before reading from pipes and character @@ -10596,20 +10857,20 @@ read_entire_file(pm_string_t *string, const char *filepath) VALUE contents = rb_funcall(io, rb_intern("read"), 0); if (!RB_TYPE_P(contents, T_STRING)) { - return false; + return PM_STRING_INIT_ERROR_GENERIC; } long len = RSTRING_LEN(contents); if (len < 0) { - return false; + return PM_STRING_INIT_ERROR_GENERIC; } - size_t length = (size_t) len; + size_t length = (size_t) len; uint8_t *source = xmalloc(length); memcpy(source, RSTRING_PTR(contents), length); *string = (pm_string_t) { .type = PM_STRING_OWNED, .source = source, .length = length }; - return true; + return PM_STRING_INIT_SUCCESS; } // mmap the file descriptor to virtually get the contents @@ -10620,17 +10881,17 @@ read_entire_file(pm_string_t *string, const char *filepath) close(fd); const uint8_t source[] = ""; *string = (pm_string_t) { .type = PM_STRING_CONSTANT, .source = source, .length = 0 }; - return true; + return PM_STRING_INIT_SUCCESS; } source = mmap(NULL, size, PROT_READ, MAP_PRIVATE, fd, 0); if (source == MAP_FAILED) { - return false; + return PM_STRING_INIT_ERROR_GENERIC; } close(fd); *string = (pm_string_t) { .type = PM_STRING_MAPPED, .source = source, .length = size }; - return true; + return PM_STRING_INIT_SUCCESS; #else return pm_string_file_init(string, filepath); #endif @@ -10643,32 +10904,38 @@ read_entire_file(pm_string_t *string, const char *filepath) VALUE pm_load_file(pm_parse_result_t *result, VALUE filepath, bool load_error) { - if (!read_entire_file(&result->input, RSTRING_PTR(filepath))) { + pm_string_init_result_t init_result = pm_read_file(&result->input, RSTRING_PTR(filepath)); + + if (init_result == PM_STRING_INIT_SUCCESS) { + pm_options_frozen_string_literal_init(&result->options); + return Qnil; + } + + int err; + if (init_result == PM_STRING_INIT_ERROR_DIRECTORY) { + err = EISDIR; + } else { #ifdef _WIN32 - int e = rb_w32_map_errno(GetLastError()); + err = rb_w32_map_errno(GetLastError()); #else - int e = errno; + err = errno; #endif + } - VALUE error; - - if (load_error) { - VALUE message = rb_str_buf_new_cstr(strerror(e)); - rb_str_cat2(message, " -- "); - rb_str_append(message, filepath); - - error = rb_exc_new3(rb_eLoadError, message); - rb_ivar_set(error, rb_intern_const("@path"), filepath); - } else { - error = rb_syserr_new(e, RSTRING_PTR(filepath)); - RB_GC_GUARD(filepath); - } + VALUE error; + if (load_error) { + VALUE message = rb_str_buf_new_cstr(strerror(err)); + rb_str_cat2(message, " -- "); + rb_str_append(message, filepath); - return error; + error = rb_exc_new3(rb_eLoadError, message); + rb_ivar_set(error, rb_intern_const("@path"), filepath); + } else { + error = rb_syserr_new(err, RSTRING_PTR(filepath)); + RB_GC_GUARD(filepath); } - pm_options_frozen_string_literal_init(&result->options); - return Qnil; + return error; } /** diff --git a/prism_compile.h b/prism_compile.h index 28f32cfbe98907..4015091fc17394 100644 --- a/prism_compile.h +++ b/prism_compile.h @@ -65,7 +65,6 @@ typedef struct pm_scope_node { void pm_scope_node_init(const pm_node_t *node, pm_scope_node_t *scope, pm_scope_node_t *previous); void pm_scope_node_destroy(pm_scope_node_t *scope_node); -bool *rb_ruby_prism_ptr(void); typedef struct { /** The parser that will do the actual parsing. */ diff --git a/proc.c b/proc.c index fd1edb2bdc3d0a..8e82c13720ab78 100644 --- a/proc.c +++ b/proc.c @@ -840,7 +840,7 @@ f_lambda_filter_non_literal(void) VALUE block_handler = rb_vm_frame_block_handler(cfp); if (block_handler == VM_BLOCK_HANDLER_NONE) { - // no block erorr raised else where + // no block error raised else where return; } @@ -2046,6 +2046,19 @@ rb_obj_public_method(VALUE obj, VALUE vid) return obj_method(obj, vid, TRUE); } +static VALUE +rb_obj_singleton_method_lookup(VALUE arg) +{ + VALUE *args = (VALUE *)arg; + return rb_obj_method(args[0], args[1]); +} + +static VALUE +rb_obj_singleton_method_lookup_fail(VALUE arg1, VALUE arg2) +{ + return Qfalse; +} + /* * call-seq: * obj.singleton_method(sym) -> method @@ -2073,11 +2086,12 @@ rb_obj_public_method(VALUE obj, VALUE vid) VALUE rb_obj_singleton_method(VALUE obj, VALUE vid) { - VALUE klass = rb_singleton_class_get(obj); + VALUE sc = rb_singleton_class_get(obj); + VALUE klass; ID id = rb_check_id(&vid); - if (NIL_P(klass) || - NIL_P(klass = RCLASS_ORIGIN(klass)) || + if (NIL_P(sc) || + NIL_P(klass = RCLASS_ORIGIN(sc)) || !NIL_P(rb_special_singleton_class(obj))) { /* goto undef; */ } @@ -2087,21 +2101,26 @@ rb_obj_singleton_method(VALUE obj, VALUE vid) /* else goto undef; */ } else { - const rb_method_entry_t *me = rb_method_entry_at(klass, id); - vid = ID2SYM(id); - - if (UNDEFINED_METHOD_ENTRY_P(me)) { - /* goto undef; */ - } - else if (UNDEFINED_REFINED_METHOD_P(me->def)) { - /* goto undef; */ - } - else { - return mnew_from_me(me, klass, klass, obj, id, rb_cMethod, FALSE); + VALUE args[2] = {obj, vid}; + VALUE ruby_method = rb_rescue(rb_obj_singleton_method_lookup, (VALUE)args, rb_obj_singleton_method_lookup_fail, Qfalse); + if (ruby_method) { + struct METHOD *method = (struct METHOD *)RTYPEDDATA_GET_DATA(ruby_method); + VALUE lookup_class = RBASIC_CLASS(obj); + VALUE stop_class = rb_class_superclass(sc); + VALUE method_class = method->iclass; + + /* Determine if method is in singleton class, or module included in or prepended to it */ + do { + if (lookup_class == method_class) { + return ruby_method; + } + lookup_class = RCLASS_SUPER(lookup_class); + } while (lookup_class && lookup_class != stop_class); } } /* undef: */ + vid = ID2SYM(id); rb_name_err_raise("undefined singleton method '%1$s' for '%2$s'", obj, vid); UNREACHABLE_RETURN(Qundef); diff --git a/process.c b/process.c index 9370eae57ac709..8215c04b34f299 100644 --- a/process.c +++ b/process.c @@ -4237,12 +4237,23 @@ rb_fork_ruby(int *status) prefork(); before_fork_ruby(); + rb_thread_acquire_fork_lock(); disable_child_handler_before_fork(&old); child.pid = pid = rb_fork(); child.error = err = errno; disable_child_handler_fork_parent(&old); /* yes, bad name */ + if ( +#if defined(__FreeBSD__) + pid != 0 && +#endif + true) { + rb_thread_release_fork_lock(); + } + if (pid == 0) { + rb_thread_reset_fork_lock(); + } after_fork_ruby(pid); /* repeat while fork failed but retryable */ @@ -5710,6 +5721,12 @@ check_gid_switch(void) #if defined(HAVE_PWD_H) +static inline bool +login_not_found(int err) +{ + return (err == ENOTTY || err == ENXIO || err == ENOENT); +} + /** * Best-effort attempt to obtain the name of the login user, if any, * associated with the process. Processes not descended from login(1) (or @@ -5718,18 +5735,18 @@ check_gid_switch(void) VALUE rb_getlogin(void) { -#if ( !defined(USE_GETLOGIN_R) && !defined(USE_GETLOGIN) ) +# if !defined(USE_GETLOGIN_R) && !defined(USE_GETLOGIN) return Qnil; -#else +# else char MAYBE_UNUSED(*login) = NULL; # ifdef USE_GETLOGIN_R -#if defined(__FreeBSD__) +# if defined(__FreeBSD__) typedef int getlogin_r_size_t; -#else +# else typedef size_t getlogin_r_size_t; -#endif +# endif long loginsize = GETLOGIN_R_SIZE_INIT; /* maybe -1 */ @@ -5743,10 +5760,8 @@ rb_getlogin(void) rb_str_set_len(maybe_result, loginsize); int gle; - errno = 0; while ((gle = getlogin_r(login, (getlogin_r_size_t)loginsize)) != 0) { - - if (gle == ENOTTY || gle == ENXIO || gle == ENOENT) { + if (login_not_found(gle)) { rb_str_resize(maybe_result, 0); return Qnil; } @@ -5766,17 +5781,19 @@ rb_getlogin(void) return Qnil; } + rb_str_set_len(maybe_result, strlen(login)); return maybe_result; -# elif USE_GETLOGIN +# elif defined(USE_GETLOGIN) errno = 0; login = getlogin(); - if (errno) { - if (errno == ENOTTY || errno == ENXIO || errno == ENOENT) { + int err = errno; + if (err) { + if (login_not_found(err)) { return Qnil; } - rb_syserr_fail(errno, "getlogin"); + rb_syserr_fail(err, "getlogin"); } return login ? rb_str_new_cstr(login) : Qnil; @@ -5785,10 +5802,46 @@ rb_getlogin(void) #endif } +/* avoid treating as errors errno values that indicate "not found" */ +static inline bool +pwd_not_found(int err) +{ + switch (err) { + case 0: + case ENOENT: + case ESRCH: + case EBADF: + case EPERM: + return true; + default: + return false; + } +} + +# if defined(USE_GETPWNAM_R) +struct getpwnam_r_args { + const char *login; + char *buf; + size_t bufsize; + struct passwd *result; + struct passwd pwstore; +}; + +# define GETPWNAM_R_ARGS(login_, buf_, bufsize_) (struct getpwnam_r_args) \ + {.login = login_, .buf = buf_, .bufsize = bufsize_, .result = NULL} + +static void * +nogvl_getpwnam_r(void *args) +{ + struct getpwnam_r_args *arg = args; + return (void *)(VALUE)getpwnam_r(arg->login, &arg->pwstore, arg->buf, arg->bufsize, &arg->result); +} +# endif + VALUE rb_getpwdirnam_for_login(VALUE login_name) { -#if ( !defined(USE_GETPWNAM_R) && !defined(USE_GETPWNAM) ) +#if !defined(USE_GETPWNAM_R) && !defined(USE_GETPWNAM) return Qnil; #else @@ -5797,13 +5850,11 @@ rb_getpwdirnam_for_login(VALUE login_name) return Qnil; } - char *login = RSTRING_PTR(login_name); + const char *login = RSTRING_PTR(login_name); - struct passwd *pwptr; # ifdef USE_GETPWNAM_R - struct passwd pwdnm; char *bufnm; long bufsizenm = GETPW_R_SIZE_INIT; /* maybe -1 */ @@ -5815,58 +5866,77 @@ rb_getpwdirnam_for_login(VALUE login_name) bufnm = RSTRING_PTR(getpwnm_tmp); bufsizenm = rb_str_capacity(getpwnm_tmp); rb_str_set_len(getpwnm_tmp, bufsizenm); + struct getpwnam_r_args args = GETPWNAM_R_ARGS(login, bufnm, (size_t)bufsizenm); int enm; - errno = 0; - while ((enm = getpwnam_r(login, &pwdnm, bufnm, bufsizenm, &pwptr)) != 0) { - - if (enm == ENOENT || enm== ESRCH || enm == EBADF || enm == EPERM) { - /* not found; non-errors */ + while ((enm = IO_WITHOUT_GVL_INT(nogvl_getpwnam_r, &args)) != 0) { + if (pwd_not_found(enm)) { rb_str_resize(getpwnm_tmp, 0); return Qnil; } - if (enm != ERANGE || bufsizenm >= GETPW_R_SIZE_LIMIT) { + if (enm != ERANGE || args.bufsize >= GETPW_R_SIZE_LIMIT) { rb_str_resize(getpwnm_tmp, 0); rb_syserr_fail(enm, "getpwnam_r"); } - rb_str_modify_expand(getpwnm_tmp, bufsizenm); - bufnm = RSTRING_PTR(getpwnm_tmp); - bufsizenm = rb_str_capacity(getpwnm_tmp); + rb_str_modify_expand(getpwnm_tmp, (long)args.bufsize); + args.buf = RSTRING_PTR(getpwnm_tmp); + args.bufsize = (size_t)rb_str_capacity(getpwnm_tmp); } - if (pwptr == NULL) { + if (args.result == NULL) { /* no record in the password database for the login name */ rb_str_resize(getpwnm_tmp, 0); return Qnil; } /* found it */ - VALUE result = rb_str_new_cstr(pwptr->pw_dir); + VALUE result = rb_str_new_cstr(args.result->pw_dir); rb_str_resize(getpwnm_tmp, 0); return result; -# elif USE_GETPWNAM +# elif defined(USE_GETPWNAM) + struct passwd *pwptr; errno = 0; - pwptr = getpwnam(login); - if (pwptr) { - /* found it */ - return rb_str_new_cstr(pwptr->pw_dir); - } - if (errno - /* avoid treating as errors errno values that indicate "not found" */ - && ( errno != ENOENT && errno != ESRCH && errno != EBADF && errno != EPERM)) { - rb_syserr_fail(errno, "getpwnam"); + if (!(pwptr = getpwnam(login))) { + int err = errno; + + if (pwd_not_found(err)) { + return Qnil; + } + + rb_syserr_fail(err, "getpwnam"); } - return Qnil; /* not found */ + /* found it */ + return rb_str_new_cstr(pwptr->pw_dir); # endif #endif } +# if defined(USE_GETPWUID_R) +struct getpwuid_r_args { + uid_t uid; + char *buf; + size_t bufsize; + struct passwd *result; + struct passwd pwstore; +}; + +# define GETPWUID_R_ARGS(uid_, buf_, bufsize_) (struct getpwuid_r_args) \ + {.uid = uid_, .buf = buf_, .bufsize = bufsize_, .result = NULL} + +static void * +nogvl_getpwuid_r(void *args) +{ + struct getpwuid_r_args *arg = args; + return (void *)(VALUE)getpwuid_r(arg->uid, &arg->pwstore, arg->buf, arg->bufsize, &arg->result); +} +# endif + /** * Look up the user's dflt home dir in the password db, by uid. */ @@ -5879,11 +5949,8 @@ rb_getpwdiruid(void) # else uid_t ruid = getuid(); - struct passwd *pwptr; - # ifdef USE_GETPWUID_R - struct passwd pwdid; char *bufid; long bufsizeid = GETPW_R_SIZE_INIT; /* maybe -1 */ @@ -5895,53 +5962,52 @@ rb_getpwdiruid(void) bufid = RSTRING_PTR(getpwid_tmp); bufsizeid = rb_str_capacity(getpwid_tmp); rb_str_set_len(getpwid_tmp, bufsizeid); + struct getpwuid_r_args args = GETPWUID_R_ARGS(ruid, bufid, (size_t)bufsizeid); int eid; - errno = 0; - while ((eid = getpwuid_r(ruid, &pwdid, bufid, bufsizeid, &pwptr)) != 0) { - - if (eid == ENOENT || eid== ESRCH || eid == EBADF || eid == EPERM) { - /* not found; non-errors */ + while ((eid = IO_WITHOUT_GVL_INT(nogvl_getpwuid_r, &args)) != 0) { + if (pwd_not_found(eid)) { rb_str_resize(getpwid_tmp, 0); return Qnil; } - if (eid != ERANGE || bufsizeid >= GETPW_R_SIZE_LIMIT) { + if (eid != ERANGE || args.bufsize >= GETPW_R_SIZE_LIMIT) { rb_str_resize(getpwid_tmp, 0); rb_syserr_fail(eid, "getpwuid_r"); } - rb_str_modify_expand(getpwid_tmp, bufsizeid); - bufid = RSTRING_PTR(getpwid_tmp); - bufsizeid = rb_str_capacity(getpwid_tmp); + rb_str_modify_expand(getpwid_tmp, (long)args.bufsize); + args.buf = RSTRING_PTR(getpwid_tmp); + args.bufsize = (size_t)rb_str_capacity(getpwid_tmp); } - if (pwptr == NULL) { + if (args.result == NULL) { /* no record in the password database for the uid */ rb_str_resize(getpwid_tmp, 0); return Qnil; } /* found it */ - VALUE result = rb_str_new_cstr(pwptr->pw_dir); + VALUE result = rb_str_new_cstr(args.result->pw_dir); rb_str_resize(getpwid_tmp, 0); return result; # elif defined(USE_GETPWUID) + struct passwd *pwptr; errno = 0; - pwptr = getpwuid(ruid); - if (pwptr) { - /* found it */ - return rb_str_new_cstr(pwptr->pw_dir); - } - if (errno - /* avoid treating as errors errno values that indicate "not found" */ - && ( errno == ENOENT || errno == ESRCH || errno == EBADF || errno == EPERM)) { - rb_syserr_fail(errno, "getpwuid"); + if (!(pwptr = getpwuid(ruid))) { + int err = errno; + + if (pwd_not_found(err)) { + return Qnil; + } + + rb_syserr_fail(err, "getpwuid"); } - return Qnil; /* not found */ + /* found it */ + return rb_str_new_cstr(pwptr->pw_dir); # endif #endif /* !defined(USE_GETPWUID_R) && !defined(USE_GETPWUID) */ @@ -5977,7 +6043,6 @@ obj2uid(VALUE id const char *usrname = StringValueCStr(id); struct passwd *pwptr; #ifdef USE_GETPWNAM_R - struct passwd pwbuf; char *getpw_buf; long getpw_buf_len; int e; @@ -5990,15 +6055,18 @@ obj2uid(VALUE id getpw_buf_len = rb_str_capacity(*getpw_tmp); rb_str_set_len(*getpw_tmp, getpw_buf_len); errno = 0; - while ((e = getpwnam_r(usrname, &pwbuf, getpw_buf, getpw_buf_len, &pwptr)) != 0) { - if (e != ERANGE || getpw_buf_len >= GETPW_R_SIZE_LIMIT) { + struct getpwnam_r_args args = GETPWNAM_R_ARGS((char *)usrname, getpw_buf, (size_t)getpw_buf_len); + + while ((e = IO_WITHOUT_GVL_INT(nogvl_getpwnam_r, &args)) != 0) { + if (e != ERANGE || args.bufsize >= GETPW_R_SIZE_LIMIT) { rb_str_resize(*getpw_tmp, 0); rb_syserr_fail(e, "getpwnam_r"); } - rb_str_modify_expand(*getpw_tmp, getpw_buf_len); - getpw_buf = RSTRING_PTR(*getpw_tmp); - getpw_buf_len = rb_str_capacity(*getpw_tmp); + rb_str_modify_expand(*getpw_tmp, (long)args.bufsize); + args.buf = RSTRING_PTR(*getpw_tmp); + args.bufsize = (size_t)rb_str_capacity(*getpw_tmp); } + pwptr = args.result; #else pwptr = getpwnam(usrname); #endif @@ -6037,6 +6105,26 @@ p_uid_from_name(VALUE self, VALUE id) #endif #if defined(HAVE_GRP_H) +# if defined(USE_GETGRNAM_R) +struct getgrnam_r_args { + const char *name; + char *buf; + size_t bufsize; + struct group *result; + struct group grp; +}; + +# define GETGRNAM_R_ARGS(name_, buf_, bufsize_) (struct getgrnam_r_args) \ + {.name = name_, .buf = buf_, .bufsize = bufsize_, .result = NULL} + +static void * +nogvl_getgrnam_r(void *args) +{ + struct getgrnam_r_args *arg = args; + return (void *)(VALUE)getgrnam_r(arg->name, &arg->grp, arg->buf, arg->bufsize, &arg->result); +} +# endif + static rb_gid_t obj2gid(VALUE id # ifdef USE_GETGRNAM_R @@ -6054,7 +6142,6 @@ obj2gid(VALUE id const char *grpname = StringValueCStr(id); struct group *grptr; #ifdef USE_GETGRNAM_R - struct group grbuf; char *getgr_buf; long getgr_buf_len; int e; @@ -6067,15 +6154,18 @@ obj2gid(VALUE id getgr_buf_len = rb_str_capacity(*getgr_tmp); rb_str_set_len(*getgr_tmp, getgr_buf_len); errno = 0; - while ((e = getgrnam_r(grpname, &grbuf, getgr_buf, getgr_buf_len, &grptr)) != 0) { - if (e != ERANGE || getgr_buf_len >= GETGR_R_SIZE_LIMIT) { + struct getgrnam_r_args args = GETGRNAM_R_ARGS(grpname, getgr_buf, (size_t)getgr_buf_len); + + while ((e = IO_WITHOUT_GVL_INT(nogvl_getgrnam_r, &args)) != 0) { + if (e != ERANGE || args.bufsize >= GETGR_R_SIZE_LIMIT) { rb_str_resize(*getgr_tmp, 0); rb_syserr_fail(e, "getgrnam_r"); } - rb_str_modify_expand(*getgr_tmp, getgr_buf_len); - getgr_buf = RSTRING_PTR(*getgr_tmp); - getgr_buf_len = rb_str_capacity(*getgr_tmp); + rb_str_modify_expand(*getgr_tmp, (long)args.bufsize); + args.buf = RSTRING_PTR(*getgr_tmp); + args.bufsize = (size_t)rb_str_capacity(*getgr_tmp); } + grptr = args.result; #elif defined(HAVE_GETGRNAM) grptr = getgrnam(grpname); #else diff --git a/ractor_core.h b/ractor_core.h index e35be2f21c10d8..fd3cba3a1f409b 100644 --- a/ractor_core.h +++ b/ractor_core.h @@ -188,12 +188,6 @@ struct rb_ractor_struct { VALUE debug; void *newobj_cache; - - // gc.c rb_objspace_reachable_objects_from - struct gc_mark_func_data_struct { - void *data; - void (*mark_func)(VALUE v, void *data); - } *mfd; }; // rb_ractor_t is defined in vm_core.h diff --git a/range.c b/range.c index 536568ba765f49..7ddb9908f6e55b 100644 --- a/range.c +++ b/range.c @@ -309,6 +309,43 @@ range_each_func(VALUE range, int (*func)(VALUE, VALUE), VALUE arg) } } +// NB: Two functions below (step_i_iter, sym_step_i and step_i) are used only to maintain the +// backward-compatible behavior for string and symbol ranges with integer steps. If that branch +// will be removed from range_step, these two can go, too. +static bool +step_i_iter(VALUE arg) +{ + VALUE *iter = (VALUE *)arg; + + if (FIXNUM_P(iter[0])) { + iter[0] -= INT2FIX(1) & ~FIXNUM_FLAG; + } + else { + iter[0] = rb_funcall(iter[0], '-', 1, INT2FIX(1)); + } + if (iter[0] != INT2FIX(0)) return false; + iter[0] = iter[1]; + return true; +} + +static int +sym_step_i(VALUE i, VALUE arg) +{ + if (step_i_iter(arg)) { + rb_yield(rb_str_intern(i)); + } + return 0; +} + +static int +step_i(VALUE i, VALUE arg) +{ + if (step_i_iter(arg)) { + rb_yield(i); + } + return 0; +} + static int discrete_object_p(VALUE obj) { @@ -430,9 +467,18 @@ range_step_size(VALUE range, VALUE args, VALUE eobj) * * For non-Numeric ranges, step absence is an error: * - * ('a'..'z').step { p _1 } + * (Time.utc(2022, 3, 1)..Time.utc(2022, 2, 24)).step { p _1 } * # raises: step is required for non-numeric ranges (ArgumentError) * + * For backward compatibility reasons, String ranges support the iteration both with + * string step and with integer step. In the latter case, the iteration is performed + * by calculating the next values with String#succ: + * + * ('a'..'e').step(2) { p _1 } + * # Prints: a, c, e + * ('a'..'e').step { p _1 } + * # Default step 1; prints: a, b, c, d, e + * */ static VALUE range_step(int argc, VALUE *argv, VALUE range) @@ -445,11 +491,16 @@ range_step(int argc, VALUE *argv, VALUE range) const VALUE b_num_p = rb_obj_is_kind_of(b, rb_cNumeric); const VALUE e_num_p = rb_obj_is_kind_of(e, rb_cNumeric); + // For backward compatibility reasons (conforming to behavior before 3.4), String/Symbol + // supports both old behavior ('a'..).step(1) and new behavior ('a'..).step('a') + // Hence the additional conversion/additional checks. + const VALUE str_b = rb_check_string_type(b); + const VALUE sym_b = SYMBOL_P(b) ? rb_sym2str(b) : Qnil; if (rb_check_arity(argc, 0, 1)) step = argv[0]; else { - if (b_num_p || (NIL_P(b) && e_num_p)) + if (b_num_p || !NIL_P(str_b) || !NIL_P(sym_b) || (NIL_P(b) && e_num_p)) step = INT2FIX(1); else rb_raise(rb_eArgError, "step is required for non-numeric ranges"); @@ -520,8 +571,30 @@ range_step(int argc, VALUE *argv, VALUE range) } else if (b_num_p && step_num_p && ruby_float_step(b, e, step, EXCL(range), TRUE)) { /* done */ - } - else { + } else if (!NIL_P(str_b) && FIXNUM_P(step)) { + // backwards compatibility behavior for String only, when no step/Integer step is passed + // See discussion in https://bugs.ruby-lang.org/issues/18368 + + VALUE iter[2] = {INT2FIX(1), step}; + + if (NIL_P(e)) { + rb_str_upto_endless_each(str_b, step_i, (VALUE)iter); + } + else { + rb_str_upto_each(str_b, e, EXCL(range), step_i, (VALUE)iter); + } + } else if (!NIL_P(sym_b) && FIXNUM_P(step)) { + // same as above: backward compatibility for symbols + + VALUE iter[2] = {INT2FIX(1), step}; + + if (NIL_P(e)) { + rb_str_upto_endless_each(sym_b, sym_step_i, (VALUE)iter); + } + else { + rb_str_upto_each(sym_b, rb_sym2str(e), EXCL(range), sym_step_i, (VALUE)iter); + } + } else { v = b; if (!NIL_P(e)) { if (b_num_p && step_num_p && r_less(step, INT2FIX(0)) < 0) { @@ -1398,7 +1471,7 @@ range_last(int argc, VALUE *argv, VALUE range) * min(n) {|a, b| ... } -> array * * Returns the minimum value in +self+, - * using method <=> or a given block for comparison. + * using method #<=> or a given block for comparison. * * With no argument and no block given, * returns the minimum-valued element of +self+. @@ -1506,7 +1579,7 @@ range_min(int argc, VALUE *argv, VALUE range) * max(n) {|a, b| ... } -> array * * Returns the maximum value in +self+, - * using method <=> or a given block for comparison. + * using method #<=> or a given block for comparison. * * With no argument and no block given, * returns the maximum-valued element of +self+. @@ -1625,10 +1698,10 @@ range_max(int argc, VALUE *argv, VALUE range) * minmax {|a, b| ... } -> [object, object] * * Returns a 2-element array containing the minimum and maximum value in +self+, - * either according to comparison method <=> or a given block. + * either according to comparison method #<=> or a given block. * * With no block given, returns the minimum and maximum values, - * using <=> for comparison: + * using #<=> for comparison: * * (1..4).minmax # => [1, 4] * (1...4).minmax # => [1, 3] @@ -2078,7 +2151,7 @@ static int r_cover_range_p(VALUE range, VALUE beg, VALUE end, VALUE val); * Returns +false+ if either: * * - The begin value of +self+ is larger than its end value. - * - An internal call to <=> returns +nil+; + * - An internal call to #<=> returns +nil+; * that is, the operands are not comparable. * * Beginless ranges cover all values of the same type before the end, @@ -2326,7 +2399,7 @@ empty_region_p(VALUE beg, VALUE end, int excl) * * (1..3).overlap?(1) # TypeError * - * Returns +false+ if an internal call to <=> returns +nil+; + * Returns +false+ if an internal call to #<=> returns +nil+; * that is, the operands are not comparable. * * (1..3).overlap?('a'..'d') # => false @@ -2404,7 +2477,7 @@ range_overlap(VALUE range, VALUE other) /* if both begin values are equal, no more comparisons needed */ if (rb_cmpint(cmp, self_beg, other_beg) == 0) return Qtrue; } - else if (NIL_P(self_beg) && NIL_P(other_beg)) { + else if (NIL_P(self_beg) && !NIL_P(self_end) && NIL_P(other_beg)) { VALUE cmp = rb_funcall(self_end, id_cmp, 1, other_end); return RBOOL(!NIL_P(cmp)); } @@ -2429,7 +2502,7 @@ range_overlap(VALUE range, VALUE other) * (1...4).to_a # => [1, 2, 3] * ('a'...'d').to_a # => ["a", "b", "c"] * - * A range may be created using method Range.new: + * - Method Range.new: * * # Ranges that by default include the given end value. * Range.new(1, 4).to_a # => [1, 2, 3, 4] @@ -2516,7 +2589,7 @@ range_overlap(VALUE range, VALUE other) * == Ranges and Other Classes * * An object may be put into a range if its class implements - * instance method <=>. + * instance method #<=>. * Ruby core classes that do so include Array, Complex, File::Stat, * Float, Integer, Kernel, Module, Numeric, Rational, String, Symbol, and Time. * @@ -2548,15 +2621,15 @@ range_overlap(VALUE range, VALUE other) * == Ranges and User-Defined Classes * * A user-defined class that is to be used in a range - * must implement instance <=>; + * must implement instance method #<=>; * see Integer#<=>. * To make iteration available, it must also implement * instance method +succ+; see Integer#succ. * - * The class below implements both <=> and +succ+, + * The class below implements both #<=> and +succ+, * and so can be used both to construct ranges and to iterate over them. * Note that the Comparable module is included - * so the == method is defined in terms of <=>. + * so the == method is defined in terms of #<=>. * * # Represent a string of 'X' characters. * class Xs diff --git a/regexec.c b/regexec.c index a786d19f5ae12f..fd99b553546e66 100644 --- a/regexec.c +++ b/regexec.c @@ -4240,7 +4240,7 @@ match_at(regex_t* reg, const UChar* str, const UChar* end, size_t length = (end - str) + 1; size_t num_match_cache_points = (size_t)msa->num_cache_points * length; #ifdef ONIG_DEBUG_MATCH_CACHE - fprintf(stderr, "MATCH CACHE: #match cache points = %ld (length = %zu)\n", num_match_cache_points, length); + fprintf(stderr, "MATCH CACHE: #match cache points = %zu (length = %zu)\n", num_match_cache_points, length); #endif /* Overflow check */ if (num_match_cache_points / length != (size_t)msa->num_cache_points) { diff --git a/regparse.c b/regparse.c index 33815f24456f7a..6f1fbf81911f92 100644 --- a/regparse.c +++ b/regparse.c @@ -6682,7 +6682,10 @@ parse_subexp(Node** top, OnigToken* tok, int term, headp = &(NCDR(*top)); while (r == TK_ALT) { r = fetch_token(tok, src, end, env); - if (r < 0) return r; + if (r < 0) { + onig_node_free(node); + return r; + } r = parse_branch(&node, tok, term, src, end, env); if (r < 0) { onig_node_free(node); diff --git a/rjit_c.c b/rjit_c.c index e9863129a1c767..50eb263559d594 100644 --- a/rjit_c.c +++ b/rjit_c.c @@ -66,7 +66,7 @@ rjit_reserve_addr_space(uint32_t mem_size) // On Linux #if defined(MAP_FIXED_NOREPLACE) && defined(_SC_PAGESIZE) uint32_t const page_size = (uint32_t)sysconf(_SC_PAGESIZE); - uint8_t *const cfunc_sample_addr = (void *)&rjit_reserve_addr_space; + uint8_t *const cfunc_sample_addr = (void *)(uintptr_t)&rjit_reserve_addr_space; uint8_t *const probe_region_end = cfunc_sample_addr + INT32_MAX; // Align the requested address to page size uint8_t *req_addr = align_ptr(cfunc_sample_addr, page_size); diff --git a/rjit_c.rb b/rjit_c.rb index d2142e99633e4c..422b7f8e3de912 100644 --- a/rjit_c.rb +++ b/rjit_c.rb @@ -1446,7 +1446,7 @@ def C.rb_shape next_iv_index: [self.attr_index_t, Primitive.cexpr!("OFFSETOF((*((struct rb_shape *)NULL)), next_iv_index)")], capacity: [CType::Immediate.parse("uint32_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_shape *)NULL)), capacity)")], type: [CType::Immediate.parse("uint8_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_shape *)NULL)), type)")], - size_pool_index: [CType::Immediate.parse("uint8_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_shape *)NULL)), size_pool_index)")], + heap_index: [CType::Immediate.parse("uint8_t"), Primitive.cexpr!("OFFSETOF((*((struct rb_shape *)NULL)), heap_index)")], parent_id: [self.shape_id_t, Primitive.cexpr!("OFFSETOF((*((struct rb_shape *)NULL)), parent_id)")], ancestor_index: [CType::Pointer.new { self.redblack_node_t }, Primitive.cexpr!("OFFSETOF((*((struct rb_shape *)NULL)), ancestor_index)")], ) diff --git a/ruby.c b/ruby.c index 4e6b3934de8850..22ee46a0c6c25f 100644 --- a/ruby.c +++ b/ruby.c @@ -1457,10 +1457,10 @@ proc_long_options(ruby_cmdline_options_t *opt, const char *s, long argc, char ** } else if (is_option_with_arg("parser", Qfalse, Qtrue)) { if (strcmp("prism", s) == 0) { - *rb_ruby_prism_ptr() = true; + rb_ruby_default_parser_set(RB_DEFAULT_PARSER_PRISM); } else if (strcmp("parse.y", s) == 0) { - *rb_ruby_prism_ptr() = false; + rb_ruby_default_parser_set(RB_DEFAULT_PARSER_PARSE_Y); } else { rb_raise(rb_eRuntimeError, "unknown parser %s", s); @@ -2192,6 +2192,8 @@ prism_script(ruby_cmdline_options_t *opt, pm_parse_result_t *result) pm_options_t *options = &result->options; pm_options_line_set(options, 1); + pm_options_main_script_set(options, true); + const bool read_stdin = (strcmp(opt->script, "-") == 0); if (read_stdin) { @@ -2228,10 +2230,12 @@ prism_script(ruby_cmdline_options_t *opt, pm_parse_result_t *result) error = pm_parse_string(result, opt->e_script, rb_str_new2("-e"), NULL); } else { + VALUE script_name = rb_str_encode_ospath(opt->script_name); + pm_options_command_line_set(options, command_line); pm_options_shebang_callback_set(options, prism_script_shebang_callback, (void *) opt); - error = pm_load_file(result, opt->script_name, true); + error = pm_load_file(result, script_name, true); // If reading the file did not error, at that point we load the command // line options. We do it in this order so that if the main script fails @@ -2252,7 +2256,7 @@ prism_script(ruby_cmdline_options_t *opt, pm_parse_result_t *result) // contents after the marker. if (NIL_P(error) && result->parser.data_loc.start != NULL) { int xflag = opt->xflag; - VALUE file = open_load_file(opt->script_name, &xflag); + VALUE file = open_load_file(script_name, &xflag); const pm_parser_t *parser = &result->parser; size_t offset = parser->data_loc.start - parser->start + 7; @@ -2559,7 +2563,7 @@ process_options(int argc, char **argv, ruby_cmdline_options_t *opt) rb_enc_associate(opt->e_script, eenc); } - if (!(*rb_ruby_prism_ptr())) { + if (!rb_ruby_prism_p()) { ast_value = process_script(opt); if (!(result.ast = rb_ruby_ast_data_get(ast_value))) return Qfalse; } diff --git a/ruby_parser.c b/ruby_parser.c index 8e68493de1f35c..314890c0af9a17 100644 --- a/ruby_parser.c +++ b/ruby_parser.c @@ -34,12 +34,6 @@ #define parser_encoding const void -static int -is_ascii_string2(VALUE str) -{ - return is_ascii_string(str); -} - RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 6, 0) static VALUE syntax_error_append(VALUE exc, VALUE file, int line, int column, @@ -371,19 +365,14 @@ static const rb_parser_config_t rb_global_parser_config = { .str_catf = rb_str_catf, .str_cat_cstr = rb_str_cat_cstr, - .str_modify = rb_str_modify, - .str_set_len = rb_str_set_len, - .str_cat = rb_str_cat, .str_resize = rb_str_resize, .str_new = rb_str_new, .str_new_cstr = rb_str_new_cstr, .str_to_interned_str = rb_str_to_interned_str, - .is_ascii_string = is_ascii_string2, .enc_str_new = enc_str_new, .str_vcatf = rb_str_vcatf, .rb_sprintf = rb_sprintf, .rstring_ptr = RSTRING_PTR, - .rstring_end = RSTRING_END, .rstring_len = RSTRING_LEN, .obj_as_string = rb_obj_as_string, diff --git a/rubyparser.h b/rubyparser.h index 0af019850050c1..08111a88980aca 100644 --- a/rubyparser.h +++ b/rubyparser.h @@ -283,6 +283,8 @@ typedef struct RNode_CASE { struct RNode *nd_head; struct RNode *nd_body; + rb_code_location_t case_keyword_loc; + rb_code_location_t end_keyword_loc; } rb_node_case_t; typedef struct RNode_CASE2 { @@ -290,6 +292,8 @@ typedef struct RNode_CASE2 { struct RNode *nd_head; struct RNode *nd_body; + rb_code_location_t case_keyword_loc; + rb_code_location_t end_keyword_loc; } rb_node_case2_t; typedef struct RNode_CASE3 { @@ -297,6 +301,8 @@ typedef struct RNode_CASE3 { struct RNode *nd_head; struct RNode *nd_body; + rb_code_location_t case_keyword_loc; + rb_code_location_t end_keyword_loc; } rb_node_case3_t; typedef struct RNode_WHEN { @@ -305,6 +311,8 @@ typedef struct RNode_WHEN { struct RNode *nd_head; struct RNode *nd_body; struct RNode *nd_next; + rb_code_location_t keyword_loc; + rb_code_location_t then_keyword_loc; } rb_node_when_t; typedef struct RNode_IN { @@ -321,6 +329,8 @@ typedef struct RNode_LOOP { struct RNode *nd_cond; struct RNode *nd_body; long nd_state; + rb_code_location_t keyword_loc; + rb_code_location_t closing_loc; } rb_node_while_t, rb_node_until_t; typedef struct RNode_ITER { @@ -341,6 +351,7 @@ typedef struct RNode_EXITS { struct RNode *nd_chain; struct RNode *nd_stts; + rb_code_location_t keyword_loc; } rb_node_exits_t, rb_node_break_t, rb_node_next_t, rb_node_redo_t; typedef struct RNode_RETRY { @@ -382,6 +393,7 @@ typedef struct { struct RNode *nd_1st; struct RNode *nd_2nd; + rb_code_location_t operator_loc; } rb_node_and_t, rb_node_or_t; typedef struct RNode_MASGN { @@ -443,6 +455,10 @@ typedef struct RNode_OP_ASGN1 { ID nd_mid; struct RNode *nd_index; struct RNode *nd_rvalue; + rb_code_location_t call_operator_loc; + rb_code_location_t opening_loc; + rb_code_location_t closing_loc; + rb_code_location_t binary_operator_loc; } rb_node_op_asgn1_t; typedef struct RNode_OP_ASGN2 { @@ -453,6 +469,9 @@ typedef struct RNode_OP_ASGN2 { ID nd_vid; ID nd_mid; bool nd_aid; + rb_code_location_t call_operator_loc; + rb_code_location_t message_loc; + rb_code_location_t binary_operator_loc; } rb_node_op_asgn2_t; typedef struct RNode_OP_ASGN_AND { @@ -561,6 +580,7 @@ typedef struct RNode_RETURN { NODE node; struct RNode *nd_stts; + rb_code_location_t keyword_loc; } rb_node_return_t; typedef struct RNode_YIELD { @@ -790,6 +810,7 @@ typedef struct RNode_SPLAT { NODE node; struct RNode *nd_head; + rb_code_location_t operator_loc; } rb_node_splat_t; typedef struct RNode_BLOCK_PASS { @@ -798,6 +819,7 @@ typedef struct RNode_BLOCK_PASS { struct RNode *nd_head; struct RNode *nd_body; unsigned int forwarding: 1; + rb_code_location_t operator_loc; } rb_node_block_pass_t; typedef struct RNode_DEFN { @@ -820,6 +842,7 @@ typedef struct RNode_ALIAS { struct RNode *nd_1st; struct RNode *nd_2nd; + rb_code_location_t keyword_loc; } rb_node_alias_t; typedef struct RNode_VALIAS { @@ -827,12 +850,14 @@ typedef struct RNode_VALIAS { ID nd_alias; ID nd_orig; + rb_code_location_t keyword_loc; } rb_node_valias_t; typedef struct RNode_UNDEF { NODE node; rb_parser_ary_t *nd_undefs; + rb_code_location_t keyword_loc; } rb_node_undef_t; typedef struct RNode_CLASS { @@ -1196,21 +1221,16 @@ typedef struct rb_parser_config_struct { RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 2, 3) VALUE (*str_catf)(VALUE str, const char *format, ...); VALUE (*str_cat_cstr)(VALUE str, const char *ptr); - void (*str_modify)(VALUE str); - void (*str_set_len)(VALUE str, long len); - VALUE (*str_cat)(VALUE str, const char *ptr, long len); VALUE (*str_resize)(VALUE str, long len); VALUE (*str_new)(const char *ptr, long len); VALUE (*str_new_cstr)(const char *ptr); VALUE (*str_to_interned_str)(VALUE); - int (*is_ascii_string)(VALUE str); VALUE (*enc_str_new)(const char *ptr, long len, rb_encoding *enc); RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 2, 0) VALUE (*str_vcatf)(VALUE str, const char *fmt, va_list ap); RBIMPL_ATTR_FORMAT(RBIMPL_PRINTF_FORMAT, 1, 2) VALUE (*rb_sprintf)(const char *format, ...); char *(*rstring_ptr)(VALUE str); - char *(*rstring_end)(VALUE str); long (*rstring_len)(VALUE str); VALUE (*obj_as_string)(VALUE); diff --git a/shape.c b/shape.c index cfb6bae969d24e..b0e886692814ee 100644 --- a/shape.c +++ b/shape.c @@ -418,7 +418,7 @@ rb_shape_alloc(ID edge_name, rb_shape_t * parent, enum shape_type type) { rb_shape_t * shape = rb_shape_alloc_with_parent_id(edge_name, rb_shape_id(parent)); shape->type = (uint8_t)type; - shape->size_pool_index = parent->size_pool_index; + shape->heap_index = parent->heap_index; shape->capacity = parent->capacity; shape->edges = 0; return shape; @@ -1059,7 +1059,7 @@ rb_shape_t_to_rb_cShape(rb_shape_t *shape) INT2NUM(shape->parent_id), rb_shape_edge_name(shape), INT2NUM(shape->next_iv_index), - INT2NUM(shape->size_pool_index), + INT2NUM(shape->heap_index), INT2NUM(shape->type), INT2NUM(shape->capacity)); rb_obj_freeze(obj); @@ -1266,7 +1266,7 @@ Init_default_shapes(void) rb_shape_t *root = rb_shape_alloc_with_parent_id(0, INVALID_SHAPE_ID); root->capacity = 0; root->type = SHAPE_ROOT; - root->size_pool_index = 0; + root->heap_index = 0; GET_SHAPE_TREE()->root_shape = root; RUBY_ASSERT(rb_shape_id(GET_SHAPE_TREE()->root_shape) == ROOT_SHAPE_ID); @@ -1282,16 +1282,16 @@ Init_default_shapes(void) rb_shape_t *too_complex_shape = rb_shape_alloc_with_parent_id(0, ROOT_SHAPE_ID); too_complex_shape->type = SHAPE_OBJ_TOO_COMPLEX; - too_complex_shape->size_pool_index = 0; + too_complex_shape->heap_index = 0; RUBY_ASSERT(OBJ_TOO_COMPLEX_SHAPE_ID == (GET_SHAPE_TREE()->next_shape_id - 1)); RUBY_ASSERT(rb_shape_id(too_complex_shape) == OBJ_TOO_COMPLEX_SHAPE_ID); // Make shapes for T_OBJECT - size_t *sizes = rb_gc_size_pool_sizes(); + size_t *sizes = rb_gc_heap_sizes(); for (int i = 0; sizes[i] > 0; i++) { rb_shape_t *t_object_shape = rb_shape_alloc_with_parent_id(0, INVALID_SHAPE_ID); t_object_shape->type = SHAPE_T_OBJECT; - t_object_shape->size_pool_index = i; + t_object_shape->heap_index = i; t_object_shape->capacity = (uint32_t)((sizes[i] - offsetof(struct RObject, as.ary)) / sizeof(VALUE)); t_object_shape->edges = rb_id_table_create(0); t_object_shape->ancestor_index = LEAF; @@ -1308,7 +1308,7 @@ Init_shape(void) "parent_id", "edge_name", "next_iv_index", - "size_pool_index", + "heap_index", "type", "capacity", NULL); diff --git a/shape.h b/shape.h index d02613d714467a..3fdbc34a397efa 100644 --- a/shape.h +++ b/shape.h @@ -47,7 +47,7 @@ struct rb_shape { attr_index_t next_iv_index; uint32_t capacity; // Total capacity of the object with this shape uint8_t type; - uint8_t size_pool_index; + uint8_t heap_index; shape_id_t parent_id; redblack_node_t * ancestor_index; }; diff --git a/signal.c b/signal.c index 1c8f8c112b73ba..2f7796c127712d 100644 --- a/signal.c +++ b/signal.c @@ -803,7 +803,8 @@ check_stack_overflow(int sig, const uintptr_t addr, const ucontext_t *ctx) const greg_t bp = mctx->gregs[REG_EBP]; # endif # elif defined __APPLE__ -# if __DARWIN_UNIX03 +# include +# if defined(MAC_OS_X_VERSION_10_5) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5 # define MCTX_SS_REG(reg) __ss.__##reg # else # define MCTX_SS_REG(reg) ss.reg diff --git a/spec/bundler/bundler/endpoint_specification_spec.rb b/spec/bundler/bundler/endpoint_specification_spec.rb index e7e10730cfde10..6518f125ba5e52 100644 --- a/spec/bundler/bundler/endpoint_specification_spec.rb +++ b/spec/bundler/bundler/endpoint_specification_spec.rb @@ -42,7 +42,7 @@ expect { subject }.to raise_error( Bundler::GemspecError, a_string_including("There was an error parsing the metadata for the gem foo (1.0.0)"). - and(a_string_including('The metadata was {"rubygems"=>">\n"}')) + and(a_string_including("The metadata was #{{ "rubygems" => ">\n" }.inspect}")) ) end end diff --git a/spec/bundler/bundler/installer/gem_installer_spec.rb b/spec/bundler/bundler/installer/gem_installer_spec.rb index ea506c36c8bf67..6583bd8181b143 100644 --- a/spec/bundler/bundler/installer/gem_installer_spec.rb +++ b/spec/bundler/bundler/installer/gem_installer_spec.rb @@ -7,6 +7,7 @@ let(:installer) { instance_double("Installer", definition: definition) } let(:spec_source) { instance_double("SpecSource") } let(:spec) { instance_double("Specification", name: "dummy", version: "0.0.1", loaded_from: "dummy", source: spec_source) } + let(:base_options) { { force: false, local: false, previous_spec: nil } } subject { described_class.new(spec, installer) } @@ -14,7 +15,7 @@ it "invokes install method with empty build_args" do allow(spec_source).to receive(:install).with( spec, - { force: false, build_args: [], previous_spec: nil } + base_options.merge(build_args: []) ) subject.install_from_spec end @@ -28,7 +29,7 @@ allow(Bundler.settings).to receive(:[]).with("build.dummy").and_return("--with-dummy-config=dummy") expect(spec_source).to receive(:install).with( spec, - { force: false, build_args: ["--with-dummy-config=dummy"], previous_spec: nil } + base_options.merge(build_args: ["--with-dummy-config=dummy"]) ) subject.install_from_spec end @@ -42,7 +43,7 @@ allow(Bundler.settings).to receive(:[]).with("build.dummy").and_return("--with-dummy-config=dummy --with-another-dummy-config") expect(spec_source).to receive(:install).with( spec, - { force: false, build_args: ["--with-dummy-config=dummy", "--with-another-dummy-config"], previous_spec: nil } + base_options.merge(build_args: ["--with-dummy-config=dummy", "--with-another-dummy-config"]) ) subject.install_from_spec end diff --git a/spec/bundler/bundler/ruby_dsl_spec.rb b/spec/bundler/bundler/ruby_dsl_spec.rb index 384ac4b8b23a2b..c5ebbdf4dba62c 100644 --- a/spec/bundler/bundler/ruby_dsl_spec.rb +++ b/spec/bundler/bundler/ruby_dsl_spec.rb @@ -80,7 +80,7 @@ class MockDSL context "with two requirements in the same string" do let(:ruby_version) { ">= 2.0.0, < 3.0" } it "raises an error" do - expect { subject }.to raise_error(ArgumentError) + expect { subject }.to raise_error(Bundler::InvalidArgumentError) end end @@ -168,7 +168,7 @@ class MockDSL let(:file_content) { "ruby-#{version}@gemset\n" } it "raises an error" do - expect { subject }.to raise_error(Gem::Requirement::BadRequirementError, "Illformed requirement [\"#{version}@gemset\"]") + expect { subject }.to raise_error(Bundler::InvalidArgumentError, "2.0.0@gemset is not a valid requirement on the Ruby version") end end diff --git a/spec/bundler/bundler/specifications/foo.gemspec b/spec/bundler/bundler/specifications/foo.gemspec index 46eb068cd177bf..81b77d0c86f3be 100644 --- a/spec/bundler/bundler/specifications/foo.gemspec +++ b/spec/bundler/bundler/specifications/foo.gemspec @@ -8,6 +8,6 @@ Gem::Specification.new do |s| s.version = "1.0.0" s.loaded_from = __FILE__ s.extensions = "ext/foo" - s.required_ruby_version = ">= 3.0.0" + s.required_ruby_version = ">= 3.1.0" end # rubocop:enable Style/FrozenStringLiteralComment diff --git a/spec/bundler/bundler/stub_specification_spec.rb b/spec/bundler/bundler/stub_specification_spec.rb index dae9f3cfba9f40..beb966b3ce8b56 100644 --- a/spec/bundler/bundler/stub_specification_spec.rb +++ b/spec/bundler/bundler/stub_specification_spec.rb @@ -55,4 +55,24 @@ expect(stub.missing_extensions?).to be true end end + + describe "#activated?" do + it "returns true after activation" do + stub = described_class.from_stub(with_bundler_stub_spec) + + expect(stub.activated?).to be_falsey + stub.activated = true + expect(stub.activated?).to be true + end + + it "returns true after activation if the underlying stub is a `Gem::StubSpecification`" do + spec_path = File.join(File.dirname(__FILE__), "specifications", "foo.gemspec") + gem_stub = Gem::StubSpecification.new(spec_path, File.dirname(__FILE__),"","") + stub = described_class.from_stub(gem_stub) + + expect(stub.activated?).to be_falsey + stub.activated = true + expect(stub.activated?).to be true + end + end end diff --git a/spec/bundler/cache/gems_spec.rb b/spec/bundler/cache/gems_spec.rb index 8f81d2d45e9e35..a694df27001556 100644 --- a/spec/bundler/cache/gems_spec.rb +++ b/spec/bundler/cache/gems_spec.rb @@ -103,12 +103,16 @@ end end - it "uses remote gems when installing to system gems" do - bundle "config set path.system true" + it "uses remote gems when installing" do install_gemfile %(source "https://gem.repo2"; gem 'json', '#{default_json_version}'), verbose: true expect(out).to include("Installing json #{default_json_version}") end + it "does not use remote gems when installing with --local flag" do + install_gemfile %(source "https://gem.repo2"; gem 'json', '#{default_json_version}'), verbose: true, local: true + expect(out).to include("Using json #{default_json_version}") + end + it "caches remote and builtin gems" do install_gemfile <<-G source "https://gem.repo2" @@ -134,9 +138,7 @@ end it "doesn't make remote request after caching the gem" do - build_gem "builtin_gem_2", "1.0.2", path: bundled_app("vendor/cache") do |s| - s.summary = "This builtin_gem is bundled with Ruby" - end + build_gem "builtin_gem_2", "1.0.2", path: bundled_app("vendor/cache"), default: true install_gemfile <<-G source "https://gem.repo2" @@ -149,9 +151,10 @@ end context "when a remote gem is not available for caching" do - it "uses builtin gems when installing to system gems" do + it "warns, but uses builtin gems when installing to system gems" do bundle "config set path.system true" install_gemfile %(source "https://gem.repo1"; gem 'json', '#{default_json_version}'), verbose: true + expect(err).to include("json-#{default_json_version} is built in to Ruby, and can't be cached") expect(out).to include("Using json #{default_json_version}") end diff --git a/spec/bundler/cache/git_spec.rb b/spec/bundler/cache/git_spec.rb index 8958916fecf3bc..ea91829003320c 100644 --- a/spec/bundler/cache/git_spec.rb +++ b/spec/bundler/cache/git_spec.rb @@ -27,6 +27,7 @@ expect(bundled_app("vendor/cache/foo-1.0-#{ref}")).to exist expect(bundled_app("vendor/cache/foo-1.0-#{ref}/.git")).not_to exist expect(bundled_app("vendor/cache/foo-1.0-#{ref}/.bundlecache")).to be_file + expect(Dir.glob(bundled_app("vendor/cache/foo-1.0-#{ref}/hooks/*.sample"))).to be_empty FileUtils.rm_rf lib_path("foo-1.0") expect(the_bundle).to include_gems "foo 1.0" @@ -211,6 +212,34 @@ expect(the_bundle).to include_gem "foo 1.0" end + it "can install after bundle cache without cloning remote repositories with only git tracked files" do + build_git "foo" + + gemfile <<-G + source "https://gem.repo1" + gem "foo", :git => '#{lib_path("foo-1.0")}' + G + bundle "config set cache_all true" + bundle :cache, "all-platforms" => true + FileUtils.rm_rf Dir.glob(default_bundle_path("bundler/gems/extensions/**/foo-1.0-*")).first.to_s + FileUtils.rm_rf Dir.glob(default_bundle_path("bundler/gems/foo-1.0-*")).first.to_s + + simulate_new_machine + bundle "config set frozen true" + FileUtils.rm_rf "#{default_bundle_path}/cache/bundler/git/foo-1.0-*" + + # Remove untracked files (including the empty refs dir in the cache) + Dir.chdir(bundled_app) do + system(*%W[git init --quiet]) + system(*%W[git add --all]) + system(*%W[git clean -d --force --quiet]) + end + + bundle "install --local --verbose" + expect(out).to_not include("Fetching") + expect(the_bundle).to include_gem "foo 1.0" + end + it "copies repository to vendor cache" do # CVE-2022-39253: https://lore.kernel.org/lkml/xmqq4jw1uku5.fsf@gitster.g/ system(*%W[git config --global protocol.file.allow always]) @@ -294,8 +323,6 @@ FileUtils.mkdir_p bundled_app("vendor/cache") FileUtils.cp_r git_path, bundled_app("vendor/cache/foo-1.0-#{path_revision}") FileUtils.rm_rf bundled_app("vendor/cache/foo-1.0-#{path_revision}/.git") - # bundle install with git repo needs to be run under the git environment. - Dir.chdir(bundled_app) { system(*%W[git init --quiet]) } bundle :install, env: { "BUNDLE_DEPLOYMENT" => "true", "BUNDLE_CACHE_ALL" => "true" } end diff --git a/spec/bundler/commands/add_spec.rb b/spec/bundler/commands/add_spec.rb index 9eb9c876ca79b8..0a0d4c004653bd 100644 --- a/spec/bundler/commands/add_spec.rb +++ b/spec/bundler/commands/add_spec.rb @@ -304,7 +304,7 @@ it "throws error" do bundle "add 'foo' --strict --optimistic", raise_on_error: false - expect(err).to include("You can not specify `--strict` and `--optimistic` at the same time") + expect(err).to include("You cannot specify `--strict` and `--optimistic` at the same time") end end diff --git a/spec/bundler/commands/binstubs_spec.rb b/spec/bundler/commands/binstubs_spec.rb index 74582226f8890a..87a68a9cf17ee3 100644 --- a/spec/bundler/commands/binstubs_spec.rb +++ b/spec/bundler/commands/binstubs_spec.rb @@ -115,7 +115,8 @@ build_gem "prints_loaded_gems", "1.0" do |s| s.executables = "print_loaded_gems" s.bindir = "exe" - s.write "exe/print_loaded_gems", <<-R + s.write "exe/print_loaded_gems", <<~R + #!/usr/bin/env ruby specs = Gem.loaded_specs.values.reject {|s| s.default_gem? } puts specs.map(&:full_name).sort.inspect R diff --git a/spec/bundler/commands/exec_spec.rb b/spec/bundler/commands/exec_spec.rb index ca8ef26344b977..4f87f3c38dbb17 100644 --- a/spec/bundler/commands/exec_spec.rb +++ b/spec/bundler/commands/exec_spec.rb @@ -616,10 +616,6 @@ end it "loads the correct optparse when `auto_install` is set, and optparse is a dependency" do - if Gem.rubygems_version < Gem::Version.new("3.3.0.a") - skip "optparse is a default gem, and rubygems loads it during install" - end - build_repo4 do build_gem "fastlane", "2.192.0" do |s| s.executables = "fastlane" diff --git a/spec/bundler/commands/install_spec.rb b/spec/bundler/commands/install_spec.rb index c89ed0c870563b..19711045c20fd4 100644 --- a/spec/bundler/commands/install_spec.rb +++ b/spec/bundler/commands/install_spec.rb @@ -1055,7 +1055,35 @@ def run bundle "install --redownload", raise_on_error: false - expect(err).to include("The installation path is insecure. Bundler cannot continue.") + expect(err).to include("Bundler cannot reinstall foo-1.0.0 because there's a previous installation of it at #{gems_path}/foo-1.0.0 that is unsafe to remove") + end + end + + describe "when gems path is world writable (no sticky bit set), but previous install is just an empty dir (like it happens with default gems)", :permissions do + let(:gems_path) { bundled_app("vendor/#{Bundler.ruby_scope}/gems") } + let(:full_path) { gems_path.join("foo-1.0.0") } + + before do + build_repo4 do + build_gem "foo", "1.0.0" do |s| + s.write "CHANGELOG.md", "foo" + end + end + + gemfile <<-G + source "https://gem.repo4" + gem 'foo' + G + end + + it "does not try to remove the directory and thus don't abort with an error about unsafe directory removal" do + bundle "config set --local path vendor" + + FileUtils.mkdir_p(gems_path) + FileUtils.chmod(0o777, gems_path) + Dir.mkdir(full_path) + + bundle "install" end end @@ -1563,4 +1591,17 @@ def run expect(err).to include("The running version of Bundler (9.99.9) does not match the version of the specification installed for it (9.99.8)") end end + + it "only installs executable files in bin" do + bundle "config set --local path vendor/bundle" + + install_gemfile <<~G + source "https://gem.repo1" + gem "myrack" + G + + expected_executables = [vendored_gems("bin/myrackup").to_s] + expected_executables << vendored_gems("bin/myrackup.bat").to_s if Gem.win_platform? + expect(Dir.glob(vendored_gems("bin/*"))).to eq(expected_executables) + end end diff --git a/spec/bundler/commands/newgem_spec.rb b/spec/bundler/commands/newgem_spec.rb index aa96c331f8ace1..668bc0f95e9c05 100644 --- a/spec/bundler/commands/newgem_spec.rb +++ b/spec/bundler/commands/newgem_spec.rb @@ -681,6 +681,9 @@ def create_temporary_dir(dir) it "builds exe skeleton" do expect(bundled_app("#{gem_name}/exe/#{gem_name}")).to exist + unless Gem.win_platform? + expect(bundled_app("#{gem_name}/exe/#{gem_name}")).to be_executable + end end it "requires the main file" do diff --git a/spec/bundler/commands/outdated_spec.rb b/spec/bundler/commands/outdated_spec.rb index 55706df0d6791e..449fba5935ff37 100644 --- a/spec/bundler/commands/outdated_spec.rb +++ b/spec/bundler/commands/outdated_spec.rb @@ -251,6 +251,14 @@ def test_group_option(group) expect(out).to end_with("Bundle up to date!") end + it "works when only out of date gems are not in given group" do + update_repo2 do + build_gem "terranova", "9" + end + bundle "outdated --group development" + expect(out).to end_with("Bundle up to date!") + end + it "returns a sorted list of outdated gems from one group => 'default'" do test_group_option("default") @@ -438,19 +446,40 @@ def test_group_option(group) G end - it "outputs a sorted list of outdated gems with a more minimal format" do + it "outputs a sorted list of outdated gems with a more minimal format to stdout" do minimal_output = "activesupport (newest 3.0, installed 2.3.5, requested = 2.3.5)\n" \ "weakling (newest 0.2, installed 0.0.3, requested ~> 0.0.1)" subject expect(out).to eq(minimal_output) end + + it "outputs progress to stderr" do + subject + expect(err).to include("Fetching gem metadata") + end end context "and no gems are outdated" do - it "has empty output" do + before do + build_repo2 do + build_gem "activesupport", "3.0" + end + + install_gemfile <<-G + source "https://gem.repo2" + gem "activesupport", "3.0" + G + end + + it "does not output to stdout" do subject expect(out).to be_empty end + + it "outputs progress to stderr" do + subject + expect(err).to include("Fetching gem metadata") + end end end diff --git a/spec/bundler/commands/platform_spec.rb b/spec/bundler/commands/platform_spec.rb index 370cc601c0d117..6e0a02bcf007be 100644 --- a/spec/bundler/commands/platform_spec.rb +++ b/spec/bundler/commands/platform_spec.rb @@ -915,16 +915,16 @@ def should_be_patchlevel_fixnum should_be_engine_incorrect end - # it "fails when the engine version doesn't match", :jruby_only do - # gemfile <<-G - # gem "myrack", "0.9.1" - # - # #{engine_version_incorrect} - # G - # - # bundle "exec myrackup" - # should_be_engine_version_incorrect - # end + it "fails when the engine version doesn't match", :jruby_only do + gemfile <<-G + gem "myrack", "0.9.1" + + #{engine_version_incorrect} + G + + bundle "exec myrackup", raise_on_error: false + should_be_engine_version_incorrect + end it "fails when patchlevel doesn't match" do gemfile <<-G diff --git a/spec/bundler/commands/update_spec.rb b/spec/bundler/commands/update_spec.rb index 3760d49d7f0cb4..2d66c0e550d32c 100644 --- a/spec/bundler/commands/update_spec.rb +++ b/spec/bundler/commands/update_spec.rb @@ -1202,10 +1202,10 @@ before do build_repo2 do build_gem "rails", "3.0.1" do |s| - s.add_dependency "bundler", Bundler::VERSION.succ + s.add_dependency "bundler", "9.9.9" end - build_gem "bundler", Bundler::VERSION.succ + build_gem "bundler", "9.9.9" end gemfile <<-G @@ -1218,7 +1218,7 @@ bundle "update", all: true, raise_on_error: false expect(last_command.stdboth).not_to match(/in snapshot/i) expect(err).to match(/current Bundler version/i). - and match(/Install the necessary version with `gem install bundler:#{Bundler::VERSION.succ}`/i) + and match(/Install the necessary version with `gem install bundler:9\.9\.9`/i) end end @@ -1469,38 +1469,28 @@ bundle :update, bundler: true, verbose: true, preserve_ruby_flags: true - # Only updates properly on modern RubyGems. - - if Gem.rubygems_version >= Gem::Version.new("3.3.0.dev") - expect(out).to include("Updating bundler to 999.0.0") - expect(out).to include("Running `bundle update --bundler \"> 0.a\" --verbose` with bundler 999.0.0") - expect(out).not_to include("Installing Bundler 2.99.9 and restarting using that version.") + expect(out).to include("Updating bundler to 999.0.0") + expect(out).to include("Running `bundle update --bundler \"> 0.a\" --verbose` with bundler 999.0.0") + expect(out).not_to include("Installing Bundler 2.99.9 and restarting using that version.") - expect(lockfile).to eq <<~L - GEM - remote: https://gem.repo4/ - specs: - myrack (1.0) + expect(lockfile).to eq <<~L + GEM + remote: https://gem.repo4/ + specs: + myrack (1.0) - PLATFORMS - #{lockfile_platforms} + PLATFORMS + #{lockfile_platforms} - DEPENDENCIES - myrack + DEPENDENCIES + myrack - BUNDLED WITH - 999.0.0 - L + BUNDLED WITH + 999.0.0 + L - expect(the_bundle).to include_gems "bundler 999.0.0" - expect(the_bundle).to include_gems "myrack 1.0" - else - # Old RubyGems versions do not trampoline but they still change BUNDLED - # WITH to the latest bundler version. This means the below check fails - # because it tries to use bundler 999.0.0 which did not get installed. - # Workaround the bug by forcing the version we know is installed. - expect(the_bundle).to include_gems "myrack 1.0", env: { "BUNDLER_VERSION" => "2.99.9" } - end + expect(the_bundle).to include_gems "bundler 999.0.0" + expect(the_bundle).to include_gems "myrack 1.0" end it "does not claim to update to Bundler version to a wrong version when cached gems are present" do @@ -1535,32 +1525,35 @@ bundle :cache, verbose: true - bundle :update, bundler: true, artifice: "compact_index", verbose: true, env: { "BUNDLER_SPEC_GEM_REPO" => gem_repo4.to_s } + bundle :update, bundler: true, verbose: true expect(out).not_to include("Updating bundler to") end it "does not update the bundler version in the lockfile if the latest version is not compatible with current ruby", :ruby_repo do - pristine_system_gems "bundler-2.3.9" + pristine_system_gems "bundler-9.9.9" build_repo4 do build_gem "myrack", "1.0" - build_bundler "2.3.9" + build_bundler "9.9.9" build_bundler "999.0.0" do |s| s.required_ruby_version = "> #{Gem.ruby_version}" end end - install_gemfile <<-G, env: { "BUNDLER_IGNORE_DEFAULT_GEM" => "true" } + checksums = checksums_section do |c| + c.checksum(gem_repo4, "myrack", "1.0") + end + + install_gemfile <<-G source "https://gem.repo4" gem "myrack" G - lockfile lockfile.sub(/(^\s*)#{Bundler::VERSION}($)/, "2.3.9") - bundle :update, bundler: true, artifice: "compact_index", verbose: true, env: { "BUNDLER_SPEC_GEM_REPO" => gem_repo4.to_s, "BUNDLER_IGNORE_DEFAULT_GEM" => "true" } + bundle :update, bundler: true, verbose: true - expect(out).to include("Using bundler 2.3.9") + expect(out).to include("Using bundler 9.9.9") expect(lockfile).to eq <<~L GEM @@ -1573,36 +1566,31 @@ DEPENDENCIES myrack - + #{checksums} BUNDLED WITH - 2.3.9 + 9.9.9 L - expect(the_bundle).to include_gems "bundler 2.3.9" + expect(the_bundle).to include_gems "bundler 9.9.9" expect(the_bundle).to include_gems "myrack 1.0" end it "errors if the explicit target version does not exist" do - pristine_system_gems "bundler-2.3.9" + pristine_system_gems "bundler-9.9.9" build_repo4 do build_gem "myrack", "1.0" end - install_gemfile <<-G, env: { "BUNDLER_IGNORE_DEFAULT_GEM" => "true" } + install_gemfile <<-G source "https://gem.repo4" gem "myrack" G - lockfile lockfile.sub(/(^\s*)#{Bundler::VERSION}($)/, "2.3.9") - bundle :update, bundler: "999.999.999", artifice: "compact_index", raise_on_error: false + bundle :update, bundler: "999.999.999", raise_on_error: false - # Only gives a meaningful error message on modern RubyGems. - - if Gem.rubygems_version >= Gem::Version.new("3.3.0.dev") - expect(last_command).to be_failure - expect(err).to include("The `bundle update --bundler` target version (999.999.999) does not exist") - end + expect(last_command).to be_failure + expect(err).to eq("The `bundle update --bundler` target version (999.999.999) does not exist") end it "allows updating to development versions if already installed locally" do @@ -1619,13 +1607,11 @@ bundle :update, bundler: "2.3.0.dev", verbose: "true" - # Only updates properly on modern RubyGems. - if Gem.rubygems_version >= Gem::Version.new("3.3.0.dev") - checksums = checksums_section_when_enabled do |c| - c.checksum(gem_repo4, "myrack", "1.0") - end + checksums = checksums_section_when_enabled do |c| + c.checksum(gem_repo4, "myrack", "1.0") + end - expect(lockfile).to eq <<~L + expect(lockfile).to eq <<~L GEM remote: https://gem.repo4/ specs: @@ -1641,8 +1627,7 @@ 2.3.0.dev L - expect(out).to include("Using bundler 2.3.0.dev") - end + expect(out).to include("Using bundler 2.3.0.dev") end it "does not touch the network if not necessary" do @@ -1666,8 +1651,7 @@ c.checksum(gem_repo4, "myrack", "1.0") end - if Gem.rubygems_version >= Gem::Version.new("3.3.0.dev") - expect(lockfile).to eq <<~L + expect(lockfile).to eq <<~L GEM remote: https://gem.repo4/ specs: @@ -1683,8 +1667,7 @@ 2.3.9 L - expect(out).to include("Using bundler 2.3.9") - end + expect(out).to include("Using bundler 2.3.9") end it "prints an error when trying to update bundler in frozen mode" do diff --git a/spec/bundler/install/bundler_spec.rb b/spec/bundler/install/bundler_spec.rb index 95edf7859d27ef..56f843118166ac 100644 --- a/spec/bundler/install/bundler_spec.rb +++ b/spec/bundler/install/bundler_spec.rb @@ -5,7 +5,7 @@ before(:each) do build_repo2 do build_gem "rails", "3.0" do |s| - s.add_dependency "bundler", ">= 0.9.0.pre" + s.add_dependency "bundler", ">= 0.9.0" end build_gem "bundler", "0.9.1" build_gem "bundler", Bundler::VERSION @@ -59,8 +59,8 @@ nice_error = <<~E.strip Could not find compatible versions - Because rails >= 3.0 depends on bundler >= 0.9.0.pre - and the current Bundler version (#{Bundler::VERSION}) does not satisfy bundler >= 0.9.0.pre, < 1.A, + Because rails >= 3.0 depends on bundler >= 0.9.0 + and the current Bundler version (#{Bundler::VERSION}) does not satisfy bundler >= 0.9.0, < 1.A, rails >= 3.0 requires bundler >= 1.A. So, because Gemfile depends on rails = 3.0 and Gemfile depends on bundler ~> 0.8, diff --git a/spec/bundler/install/deploy_spec.rb b/spec/bundler/install/deploy_spec.rb index 7b6e775b4cd6b8..bd39ac5cc1d4ae 100644 --- a/spec/bundler/install/deploy_spec.rb +++ b/spec/bundler/install/deploy_spec.rb @@ -438,7 +438,7 @@ expect(err).to include("You have changed in the Gemfile:\n* myrack from `no specified source` to `git://hubz.com`") end - it "explodes if you change a source" do + it "explodes if you change a source from git to the default" do build_git "myrack" install_gemfile <<-G @@ -459,7 +459,7 @@ expect(err).to include("You have changed in the Gemfile:\n* myrack from `#{lib_path("myrack-1.0")}` to `no specified source`") end - it "explodes if you change a source" do + it "explodes if you change a source from git to the default, in presence of other git sources" do build_lib "foo", path: lib_path("myrack/foo") build_git "myrack", path: lib_path("myrack") @@ -483,6 +483,27 @@ expect(err).not_to include("You have deleted from the Gemfile") end + it "explodes if you change a source from path to git" do + build_git "myrack", path: lib_path("myrack") + + install_gemfile <<-G + source "https://gem.repo1" + gem "myrack", :path => "#{lib_path("myrack")}" + G + + gemfile <<-G + source "https://gem.repo1" + gem "myrack", :git => "https:/my-git-repo-for-myrack" + G + + bundle "config set --local frozen true" + bundle :install, raise_on_error: false + expect(err).to include("frozen mode") + expect(err).to include("You have changed in the Gemfile:\n* myrack from `#{lib_path("myrack")}` to `https:/my-git-repo-for-myrack`") + expect(err).not_to include("You have added to the Gemfile") + expect(err).not_to include("You have deleted from the Gemfile") + end + it "remembers that the bundle is frozen at runtime" do bundle :lock diff --git a/spec/bundler/install/gemfile/force_ruby_platform_spec.rb b/spec/bundler/install/gemfile/force_ruby_platform_spec.rb index f5d993adacaf1e..926e7527e667ef 100644 --- a/spec/bundler/install/gemfile/force_ruby_platform_spec.rb +++ b/spec/bundler/install/gemfile/force_ruby_platform_spec.rb @@ -102,6 +102,8 @@ end it "reinstalls the ruby variant when a platform specific variant is already installed, the lockile has only ruby platform, and :force_ruby_platform is used in the Gemfile" do + skip "Can't simulate platform reliably on JRuby, installing a platform specific gem fails to activate io-wait because only the -java version is present, and we're simulating a different platform" if RUBY_ENGINE == "jruby" + lockfile <<-L GEM remote: https://gem.repo4 diff --git a/spec/bundler/install/gemfile/gemspec_spec.rb b/spec/bundler/install/gemfile/gemspec_spec.rb index 5610a6f05b83d1..be0694cb55ac87 100644 --- a/spec/bundler/install/gemfile/gemspec_spec.rb +++ b/spec/bundler/install/gemfile/gemspec_spec.rb @@ -10,11 +10,9 @@ let(:x64_mingw_archs) do if RUBY_PLATFORM == "x64-mingw-ucrt" - if Gem.rubygems_version >= Gem::Version.new("3.2.28") - ["x64-mingw-ucrt", "x64-mingw32"] - else - ["x64-mingw32", "x64-unknown"] - end + + ["x64-mingw-ucrt", "x64-mingw32"] + else ["x64-mingw32"] end diff --git a/spec/bundler/install/gemfile/git_spec.rb b/spec/bundler/install/gemfile/git_spec.rb index d76a33f07607f5..83b3c06cbe82f2 100644 --- a/spec/bundler/install/gemfile/git_spec.rb +++ b/spec/bundler/install/gemfile/git_spec.rb @@ -836,6 +836,32 @@ expect(the_bundle).to include_gems "rails 2.3.2" end + it "runs the gemspec in the context of its parent directory, when using local overrides" do + build_git "foo", path: lib_path("foo"), gemspec: false do |s| + s.write lib_path("foo/lib/foo/version.rb"), %(FOO_VERSION = '1.0') + s.write "foo.gemspec", <<-G + $:.unshift Dir.pwd + require 'lib/foo/version' + Gem::Specification.new do |s| + s.name = 'foo' + s.author = 'no one' + s.version = FOO_VERSION + s.summary = 'Foo' + s.files = Dir["lib/**/*.rb"] + end + G + end + + gemfile <<-G + source "https://gem.repo1" + gem "foo", :git => "https://github.com/gems/foo", branch: "main" + G + + bundle %(config set local.foo #{lib_path("foo")}) + + expect(the_bundle).to include_gems "foo 1.0" + end + it "installs from git even if a rubygems gem is present" do build_gem "foo", "1.0", path: lib_path("fake_foo"), to_system: true do |s| s.write "lib/foo.rb", "raise 'FAIL'" @@ -1107,6 +1133,25 @@ run "require 'new_file'" expect(out).to eq("USING GIT") end + + it "doesn't explode when removing an explicit exact version from a git gem with dependencies" do + build_lib "activesupport", "7.1.4", path: lib_path("rails/activesupport") + build_git "rails", "7.1.4", path: lib_path("rails") do |s| + s.add_dependency "activesupport", "= 7.1.4" + end + + install_gemfile <<-G + source "https://gem.repo1" + gem "rails", "7.1.4", :git => "#{lib_path("rails")}" + G + + install_gemfile <<-G + source "https://gem.repo1" + gem "rails", :git => "#{lib_path("rails")}" + G + + expect(the_bundle).to include_gem "rails 7.1.4", "activesupport 7.1.4" + end end describe "bundle install after the remote has been updated" do diff --git a/spec/bundler/install/gemfile_spec.rb b/spec/bundler/install/gemfile_spec.rb index 0539733d5dfe5a..96ed174e9bf7f9 100644 --- a/spec/bundler/install/gemfile_spec.rb +++ b/spec/bundler/install/gemfile_spec.rb @@ -66,6 +66,31 @@ end end + context "when an internal error happens" do + let(:bundler_bug) do + create_file("bundler_bug.rb", <<~RUBY) + require "bundler" + + module Bundler + class Dsl + def source(source, *args, &blk) + nil.name + end + end + end + RUBY + + bundled_app("bundler_bug.rb").to_s + end + + it "shows culprit file and line" do + skip "ruby-core test setup has always \"lib\" in $LOAD_PATH so `require \"bundler\"` always activates the local version rather than using RubyGems gem activation stuff, causing conflicts" if ruby_core? + + install_gemfile "source 'https://gem.repo1'", requires: [bundler_bug], artifice: nil, raise_on_error: false + expect(err).to include("bundler_bug.rb:6") + end + end + context "with engine specified in symbol", :jruby_only do it "does not raise any error parsing Gemfile" do install_gemfile <<-G diff --git a/spec/bundler/install/gems/compact_index_spec.rb b/spec/bundler/install/gems/compact_index_spec.rb index 39064e3b80b219..4653ce6d871726 100644 --- a/spec/bundler/install/gems/compact_index_spec.rb +++ b/spec/bundler/install/gems/compact_index_spec.rb @@ -173,7 +173,7 @@ bundle :install, verbose: true, artifice: "compact_index_checksum_mismatch" expect(out).to include("Fetching gem metadata from #{source_uri}") expect(out).to include("The checksum of /versions does not match the checksum provided by the server!") - expect(out).to include('Calculated checksums {"sha-256"=>"8KfZiM/fszVkqhP/m5s9lvE6M9xKu4I1bU4Izddp5Ms="} did not match expected {"sha-256"=>"ungWv48Bz+pBQUDeXa4iI7ADYaOWF3qctBD/YfIAFa0="}') + expect(out).to include("Calculated checksums #{{ "sha-256" => "8KfZiM/fszVkqhP/m5s9lvE6M9xKu4I1bU4Izddp5Ms=" }.inspect} did not match expected #{{ "sha-256" => "ungWv48Bz+pBQUDeXa4iI7ADYaOWF3qctBD/YfIAFa0=" }.inspect}") expect(the_bundle).to include_gems "myrack 1.0.0" end diff --git a/spec/bundler/install/gems/dependency_api_fallback_spec.rb b/spec/bundler/install/gems/dependency_api_fallback_spec.rb index 5e700ea9760953..107da15d671a8e 100644 --- a/spec/bundler/install/gems/dependency_api_fallback_spec.rb +++ b/spec/bundler/install/gems/dependency_api_fallback_spec.rb @@ -15,13 +15,15 @@ # mustermann depends on URI::RFC2396_PARSER behavior URI.parser = URI::RFC2396_PARSER if URI.respond_to?(:parser=) + require "rackup/server" + @t = Thread.new do - server = Rack::Server.start(app: EndpointTimeout, - Host: "0.0.0.0", - Port: port, - server: "webrick", - AccessLog: [], - Logger: Spec::SilentLogger.new) + server = Rackup::Server.start(app: EndpointTimeout, + Host: "0.0.0.0", + Port: port, + server: "webrick", + AccessLog: [], + Logger: Spec::SilentLogger.new) server.start end @t.run diff --git a/spec/bundler/install/gems/standalone_spec.rb b/spec/bundler/install/gems/standalone_spec.rb index ee8d9c6d3a8cfb..65b14ea4259b8f 100644 --- a/spec/bundler/install/gems/standalone_spec.rb +++ b/spec/bundler/install/gems/standalone_spec.rb @@ -141,16 +141,13 @@ describe "with default gems and a lockfile", :ruby_repo do before do - skip "Does not work on old Windows Rubies" if Gem.ruby_version < Gem::Version.new("3.2") && Gem.win_platform? - necessary_system_gems = ["tsort --version 0.1.0"] - necessary_system_gems += ["etc --version 1.4.3"] if Gem.ruby_version >= Gem::Version.new("3.3.2") && Gem.win_platform? + necessary_system_gems += ["etc --version 1.4.3"] realworld_system_gems(*necessary_system_gems) end it "works and points to the vendored copies, not to the default copies" do necessary_gems_in_bundle_path = ["optparse --version 0.1.1", "psych --version 3.3.2", "logger --version 1.4.3", "etc --version 1.4.3", "stringio --version 3.1.0"] - necessary_gems_in_bundle_path += ["shellwords --version 0.2.0", "base64 --version 0.1.0", "resolv --version 0.2.1"] if Gem.rubygems_version < Gem::Version.new("3.3.a") necessary_gems_in_bundle_path += ["yaml --version 0.1.1"] if Gem.rubygems_version < Gem::Version.new("3.4.a") realworld_system_gems(*necessary_gems_in_bundle_path, path: scoped_gem_path(bundled_app("bundle"))) @@ -188,7 +185,6 @@ it "works for gems with extensions and points to the vendored copies, not to the default copies" do necessary_gems_in_bundle_path = ["optparse --version 0.1.1", "psych --version 3.3.2", "logger --version 1.4.3", "etc --version 1.4.3", "stringio --version 3.1.0", "shellwords --version 0.2.0", "open3 --version 0.2.1"] - necessary_gems_in_bundle_path += ["base64 --version 0.1.0", "resolv --version 0.2.1"] if Gem.rubygems_version < Gem::Version.new("3.3.a") necessary_gems_in_bundle_path += ["yaml --version 0.1.1"] if Gem.rubygems_version < Gem::Version.new("3.4.a") realworld_system_gems(*necessary_gems_in_bundle_path, path: scoped_gem_path(bundled_app("bundle"))) diff --git a/spec/bundler/install/git_spec.rb b/spec/bundler/install/git_spec.rb index caed4571e5ebb0..d1f6b7a7ca7538 100644 --- a/spec/bundler/install/git_spec.rb +++ b/spec/bundler/install/git_spec.rb @@ -63,7 +63,7 @@ expect(the_bundle).to include_gems "foo 2.0", source: "git@#{lib_path("foo")}" end - it "should allows git repos that are missing but not being installed" do + it "allows git repos that are missing but not being installed" do revision = build_git("foo").ref_for("HEAD") gemfile <<-G diff --git a/spec/bundler/realworld/edgecases_spec.rb b/spec/bundler/realworld/edgecases_spec.rb index dc15c56c795243..fb434aba7069b9 100644 --- a/spec/bundler/realworld/edgecases_spec.rb +++ b/spec/bundler/realworld/edgecases_spec.rb @@ -207,166 +207,4 @@ def rubygems_version(name, requirement) G expect(err).to include("resque-scheduler 2.2.0 includes a gemspec with `require_paths` set to an array of arrays. Newer versions of this gem might've already fixed this").once end - - it "doesn't hang on nix gemfile" do - skip "Only for ruby 3.0" unless RUBY_VERSION.start_with?("3.0") - - gemfile <<~G - source "https://rubygems.org" - - gem "addressable" - gem "atk" - gem "awesome_print" - gem "bacon" - gem "byebug" - gem "cairo" - gem "cairo-gobject" - gem "camping" - gem "charlock_holmes" - gem "cld3" - gem "cocoapods" - gem "cocoapods-acknowledgements" - gem "cocoapods-art" - gem "cocoapods-bin" - gem "cocoapods-browser" - gem "cocoapods-bugsnag" - gem "cocoapods-check" - gem "cocoapods-clean" - gem "cocoapods-clean_build_phases_scripts" - gem "cocoapods-core" - gem "cocoapods-coverage" - gem "cocoapods-deintegrate" - gem "cocoapods-dependencies" - gem "cocoapods-deploy" - gem "cocoapods-downloader" - gem "cocoapods-expert-difficulty" - gem "cocoapods-fix-react-native" - gem "cocoapods-generate" - gem "cocoapods-git_url_rewriter" - gem "cocoapods-keys" - gem "cocoapods-no-dev-schemes" - gem "cocoapods-open" - gem "cocoapods-packager" - gem "cocoapods-playgrounds" - gem "cocoapods-plugins" - gem "cocoapods-prune-localizations" - gem "cocoapods-rome" - gem "cocoapods-search" - gem "cocoapods-sorted-search" - gem "cocoapods-static-swift-framework" - gem "cocoapods-stats" - gem "cocoapods-tdfire-binary" - gem "cocoapods-testing" - gem "cocoapods-trunk" - gem "cocoapods-try" - gem "cocoapods-try-release-fix" - gem "cocoapods-update-if-you-dare" - gem "cocoapods-whitelist" - gem "cocoapods-wholemodule" - gem "coderay" - gem "concurrent-ruby" - gem "curb" - gem "curses" - gem "daemons" - gem "dep-selector-libgecode" - gem "digest-sha3" - gem "domain_name" - gem "do_sqlite3" - gem "ethon" - gem "eventmachine" - gem "excon" - gem "faraday" - gem "ffi" - gem "ffi-rzmq-core" - gem "fog-dnsimple" - gem "gdk_pixbuf2" - gem "gio2" - gem "gitlab-markup" - gem "glib2" - gem "gpgme" - gem "gtk2" - gem "hashie" - gem "highline" - gem "hike" - gem "hitimes" - gem "hpricot" - gem "httpclient" - gem "http-cookie" - gem "iconv" - gem "idn-ruby" - gem "jbuilder" - gem "jekyll" - gem "jmespath" - gem "jwt" - gem "libv8" - gem "libxml-ruby" - gem "magic" - gem "markaby" - gem "method_source" - gem "mini_magick" - gem "msgpack" - gem "mysql2" - gem "ncursesw" - gem "netrc" - gem "net-scp" - gem "net-ssh" - gem "nokogiri" - gem "opus-ruby" - gem "ovirt-engine-sdk" - gem "pango" - gem "patron" - gem "pcaprub" - gem "pg" - gem "pry" - gem "pry-byebug" - gem "pry-doc" - gem "public_suffix" - gem "puma" - gem "rails" - gem "rainbow" - gem "rbnacl" - gem "rb-readline" - gem "re2" - gem "redis" - gem "redis-rack" - gem "rest-client" - gem "rmagick" - gem "rpam2" - gem "rspec" - gem "rubocop" - gem "rubocop-performance" - gem "ruby-libvirt" - gem "ruby-lxc" - gem "ruby-progressbar" - gem "ruby-terminfo" - gem "ruby-vips" - gem "rubyzip" - gem "rugged" - gem "sassc" - gem "scrypt" - gem "semian" - gem "sequel" - gem "sequel_pg" - gem "simplecov" - gem "sinatra" - gem "slop" - gem "snappy" - gem "sqlite3" - gem "taglib-ruby" - gem "thrift" - gem "tilt" - gem "tiny_tds" - gem "treetop" - gem "typhoeus" - gem "tzinfo" - gem "unf_ext" - gem "uuid4r" - gem "whois" - gem "zookeeper" - G - - bundle :lock, env: { "DEBUG_RESOLVER" => "1" } - - expect(out).to include("Solution found after 4 attempts") - end end diff --git a/spec/bundler/realworld/fixtures/warbler/Gemfile b/spec/bundler/realworld/fixtures/warbler/Gemfile index a8dbb4911cf2f6..e4d3e8ea963cf7 100644 --- a/spec/bundler/realworld/fixtures/warbler/Gemfile +++ b/spec/bundler/realworld/fixtures/warbler/Gemfile @@ -3,5 +3,5 @@ source "https://rubygems.org" gem "demo", path: "./demo" -gem "jruby-jars", "~> 9.2" +gem "jruby-jars", "~> 9.4" gem "warbler", "~> 2.0" diff --git a/spec/bundler/realworld/fixtures/warbler/Gemfile.lock b/spec/bundler/realworld/fixtures/warbler/Gemfile.lock index 5b476f8df27e8a..b8171d28cef528 100644 --- a/spec/bundler/realworld/fixtures/warbler/Gemfile.lock +++ b/spec/bundler/realworld/fixtures/warbler/Gemfile.lock @@ -6,7 +6,7 @@ PATH GEM remote: https://rubygems.org/ specs: - jruby-jars (9.2.16.0) + jruby-jars (9.4.8.0) jruby-rack (1.1.21) rake (13.0.1) rubyzip (1.3.0) @@ -23,8 +23,8 @@ PLATFORMS DEPENDENCIES demo! - jruby-jars (~> 9.2) + jruby-jars (~> 9.4) warbler (~> 2.0) BUNDLED WITH - 2.5.0.dev + 2.6.0.dev diff --git a/spec/bundler/realworld/gemfile_source_header_spec.rb b/spec/bundler/realworld/gemfile_source_header_spec.rb index 45f5d0fd227da6..f47ba3a855a430 100644 --- a/spec/bundler/realworld/gemfile_source_header_spec.rb +++ b/spec/bundler/realworld/gemfile_source_header_spec.rb @@ -39,13 +39,15 @@ def setup_server require_relative "../support/artifice/endpoint_mirror_source" + require "rackup/server" + @t = Thread.new do - Rack::Server.start(app: EndpointMirrorSource, - Host: "0.0.0.0", - Port: @port, - server: "webrick", - AccessLog: [], - Logger: Spec::SilentLogger.new) + Rackup::Server.start(app: EndpointMirrorSource, + Host: "0.0.0.0", + Port: @port, + server: "webrick", + AccessLog: [], + Logger: Spec::SilentLogger.new) end.run wait_for_server("127.0.0.1", @port) diff --git a/spec/bundler/realworld/mirror_probe_spec.rb b/spec/bundler/realworld/mirror_probe_spec.rb index fc97f92375d45e..61312860d18b27 100644 --- a/spec/bundler/realworld/mirror_probe_spec.rb +++ b/spec/bundler/realworld/mirror_probe_spec.rb @@ -112,13 +112,15 @@ def setup_server require_relative "../support/artifice/endpoint" + require "rackup/server" + @server_thread = Thread.new do - Rack::Server.start(app: Endpoint, - Host: host, - Port: @server_port, - server: "webrick", - AccessLog: [], - Logger: Spec::SilentLogger.new) + Rackup::Server.start(app: Endpoint, + Host: host, + Port: @server_port, + server: "webrick", + AccessLog: [], + Logger: Spec::SilentLogger.new) end.run wait_for_server(host, @server_port) diff --git a/spec/bundler/resolver/platform_spec.rb b/spec/bundler/resolver/platform_spec.rb index 3e959aeb893286..8e51911bbdb2a9 100644 --- a/spec/bundler/resolver/platform_spec.rb +++ b/spec/bundler/resolver/platform_spec.rb @@ -381,20 +381,16 @@ should_resolve_as %w[win32-api-1.5.1-universal-mingw32] end - if Gem.rubygems_version >= Gem::Version.new("3.2.28") - it "finds x64-mingw-ucrt gems" do - platforms "x64-mingw-ucrt" - dep "thin" - should_resolve_as %w[thin-1.2.7-x64-mingw-ucrt] - end + it "finds x64-mingw-ucrt gems" do + platforms "x64-mingw-ucrt" + dep "thin" + should_resolve_as %w[thin-1.2.7-x64-mingw-ucrt] end - if Gem.rubygems_version >= Gem::Version.new("3.3.18") - it "finds universal-mingw gems on x64-mingw-ucrt" do - platform "x64-mingw-ucrt" - dep "win32-api" - should_resolve_as %w[win32-api-1.5.1-universal-mingw32] - end + it "finds universal-mingw gems on x64-mingw-ucrt", rubygems: ">= 3.3.18" do + platform "x64-mingw-ucrt" + dep "win32-api" + should_resolve_as %w[win32-api-1.5.1-universal-mingw32] end end diff --git a/spec/bundler/runtime/with_unbundled_env_spec.rb b/spec/bundler/runtime/env_helpers_spec.rb similarity index 95% rename from spec/bundler/runtime/with_unbundled_env_spec.rb rename to spec/bundler/runtime/env_helpers_spec.rb index 8c3582f7acb156..a1607cd057a751 100644 --- a/spec/bundler/runtime/with_unbundled_env_spec.rb +++ b/spec/bundler/runtime/env_helpers_spec.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -RSpec.describe "Bundler.with_env helpers" do +RSpec.describe "env helpers" do def bundle_exec_ruby(args, options = {}) build_bundler_context options.dup bundle "exec '#{Gem.ruby}' #{args}", options @@ -103,6 +103,15 @@ def run_bundler_script(env, script) expect(last_command.stdboth).not_to include("-rbundler/setup") end + it "should delete BUNDLER_SETUP even if it was present in original env" do + create_file("source.rb", <<-RUBY) + print #{modified_env}.has_key?('BUNDLER_SETUP') + RUBY + ENV["BUNDLER_ORIG_BUNDLER_SETUP"] = system_gem_path("gems/bundler-#{Bundler::VERSION}/lib/bundler/setup").to_s + bundle_exec_ruby bundled_app("source.rb") + expect(last_command.stdboth).to include "false" + end + it "should restore RUBYLIB", :ruby_repo do create_file("source.rb", <<-RUBY) print #{modified_env}['RUBYLIB'] diff --git a/spec/bundler/runtime/gem_tasks_spec.rb b/spec/bundler/runtime/gem_tasks_spec.rb index 1dffbd5c92354f..046300391b26cc 100644 --- a/spec/bundler/runtime/gem_tasks_spec.rb +++ b/spec/bundler/runtime/gem_tasks_spec.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true RSpec.describe "require 'bundler/gem_tasks'" do - before :each do + let(:define_local_gem_using_gem_tasks) do bundled_app("foo.gemspec").open("w") do |f| f.write <<-GEMSPEC Gem::Specification.new do |s| @@ -26,7 +26,46 @@ G end + let(:define_local_gem_with_extensions_using_gem_tasks_and_gemspec_dsl) do + bundled_app("foo.gemspec").open("w") do |f| + f.write <<-GEMSPEC + Gem::Specification.new do |s| + s.name = "foo" + s.version = "1.0" + s.summary = "dummy" + s.author = "Perry Mason" + s.extensions = "ext/extconf.rb" + end + GEMSPEC + end + + bundled_app("Rakefile").open("w") do |f| + f.write <<-RAKEFILE + require "bundler/gem_tasks" + RAKEFILE + end + + Dir.mkdir bundled_app("ext") + + bundled_app("ext/extconf.rb").open("w") do |f| + f.write <<-EXTCONF + require "mkmf" + File.write("Makefile", dummy_makefile($srcdir).join) + EXTCONF + end + + install_gemfile <<-G + source "https://gem.repo1" + + gemspec + + gem "rake" + G + end + it "includes the relevant tasks" do + define_local_gem_using_gem_tasks + with_gem_path_as(base_system_gem_path.to_s) do sys_exec "#{rake} -T", env: { "GEM_HOME" => system_gem_path.to_s } end @@ -44,6 +83,8 @@ end it "defines a working `rake install` task", :ruby_repo do + define_local_gem_using_gem_tasks + with_gem_path_as(base_system_gem_path.to_s) do sys_exec "#{rake} install", env: { "GEM_HOME" => system_gem_path.to_s } end @@ -55,8 +96,18 @@ expect(err).to be_empty end + it "defines a working `rake install` task for local gems with extensions", :ruby_repo do + define_local_gem_with_extensions_using_gem_tasks_and_gemspec_dsl + + bundle "exec rake install" + + expect(err).to be_empty + end + context "rake build when path has spaces", :ruby_repo do before do + define_local_gem_using_gem_tasks + spaced_bundled_app = tmp("bundled app") FileUtils.cp_r bundled_app, spaced_bundled_app bundle "exec rake build", dir: spaced_bundled_app @@ -69,6 +120,8 @@ context "rake build when path has brackets", :ruby_repo do before do + define_local_gem_using_gem_tasks + bracketed_bundled_app = tmp("bundled[app") FileUtils.cp_r bundled_app, bracketed_bundled_app bundle "exec rake build", dir: bracketed_bundled_app @@ -81,6 +134,8 @@ context "bundle path configured locally" do before do + define_local_gem_using_gem_tasks + bundle "config set path vendor/bundle" end @@ -98,6 +153,8 @@ end it "adds 'pkg' to rake/clean's CLOBBER" do + define_local_gem_using_gem_tasks + with_gem_path_as(base_system_gem_path.to_s) do sys_exec %(#{rake} -e 'load "Rakefile"; puts CLOBBER.inspect'), env: { "GEM_HOME" => system_gem_path.to_s } end diff --git a/spec/bundler/runtime/inline_spec.rb b/spec/bundler/runtime/inline_spec.rb index f85eaf132d6fb6..5be6eef7bd8801 100644 --- a/spec/bundler/runtime/inline_spec.rb +++ b/spec/bundler/runtime/inline_spec.rb @@ -655,4 +655,78 @@ def confirm(msg, newline = nil) expect(out).to include("before: [\"Test_Variable\"]") expect(out).to include("after: [\"Test_Variable\"]") end + + it "does not create a lockfile" do + script <<-RUBY + require 'bundler/inline' + + gemfile do + source "https://gem.repo1" + end + + puts Dir.glob("Gemfile.lock") + RUBY + + expect(out).to be_empty + end + + it "does not reset ENV" do + script <<-RUBY + require 'bundler/inline' + + gemfile do + source "https://gem.repo1" + + ENV['FOO'] = 'bar' + end + + puts ENV['FOO'] + RUBY + + expect(out).to eq("bar") + end + + it "does not load specified version of psych and stringio", :ruby_repo do + build_repo4 do + build_gem "psych", "999" + build_gem "stringio", "999" + end + + script <<-RUBY, env: { "BUNDLER_SPEC_GEM_REPO" => gem_repo4.to_s } + require "bundler/inline" + + gemfile(true) do + source "https://gem.repo4" + + gem "psych" + gem "stringio" + end + RUBY + + expect(out).to include("Installing psych 999") + expect(out).to include("Installing stringio 999") + expect(out).to include("The psych gem was resolved to 999") + expect(out).to include("The stringio gem was resolved to 999") + end + + it "leaves a lockfile in the same directory as the inline script alone" do + install_gemfile <<~G + source "https://gem.repo1" + gem "foo" + G + + original_lockfile = lockfile + + script <<-RUBY, env: { "BUNDLER_SPEC_GEM_REPO" => gem_repo1.to_s } + require "bundler/inline" + + gemfile(true) do + source "https://gem.repo1" + + gem "myrack" + end + RUBY + + expect(lockfile).to eq(original_lockfile) + end end diff --git a/spec/bundler/runtime/self_management_spec.rb b/spec/bundler/runtime/self_management_spec.rb index d2472dece295d7..c6910e95c005ba 100644 --- a/spec/bundler/runtime/self_management_spec.rb +++ b/spec/bundler/runtime/self_management_spec.rb @@ -131,6 +131,17 @@ expect(out).to eq(Bundler::VERSION[0] == "2" ? "Bundler version #{Bundler::VERSION}" : Bundler::VERSION) end + it "does not try to install when --local is passed" do + lockfile_bundled_with(previous_minor) + system_gems "myrack-1.0.0", path: default_bundle_path + + bundle "install --local" + expect(out).not_to match(/Installing Bundler/) + + bundle "-v" + expect(out).to eq(Bundler::VERSION[0] == "2" ? "Bundler version #{Bundler::VERSION}" : Bundler::VERSION) + end + it "shows a discrete message if locked bundler does not exist" do missing_minor = "#{Bundler::VERSION[0]}.999.999" @@ -165,6 +176,17 @@ expect(out).to eq(Bundler::VERSION[0] == "2" ? "Bundler version #{Bundler::VERSION}" : Bundler::VERSION) end + it "does not try to install when using bundle config version " do + lockfile_bundled_with(previous_minor) + + bundle "config set version #{previous_minor}.dev" + bundle "install" + expect(out).not_to match(/restarting using that version/) + + bundle "-v" + expect(out).to eq(Bundler::VERSION[0] == "2" ? "Bundler version #{Bundler::VERSION}" : Bundler::VERSION) + end + it "ignores malformed lockfile version" do lockfile_bundled_with("2.3.") diff --git a/spec/bundler/runtime/setup_spec.rb b/spec/bundler/runtime/setup_spec.rb index ededaab410a018..58f22931096a23 100644 --- a/spec/bundler/runtime/setup_spec.rb +++ b/spec/bundler/runtime/setup_spec.rb @@ -706,6 +706,21 @@ def clean_load_path(lp) expect(out).to be_empty end + it "has gem_dir pointing to local repo" do + build_lib "foo", "1.0", path: bundled_app + + install_gemfile <<-G + source "https://gem.repo1" + gemspec + G + + run <<-R + puts Gem.loaded_specs['foo'].gem_dir + R + + expect(out).to eq(bundled_app.to_s) + end + it "does not load all gemspecs" do install_gemfile <<-G source "https://gem.repo1" @@ -1377,20 +1392,21 @@ def lock_with(ruby_version = nil) end it "activates default gems when they are part of the bundle, but not installed explicitly", :ruby_repo do - default_json_version = ruby "gem 'json'; require 'json'; puts JSON::VERSION" + default_delegate_version = ruby "gem 'delegate'; require 'delegate'; puts Delegator::VERSION" build_repo2 do - build_gem "json", default_json_version + build_gem "delegate", default_delegate_version end - gemfile "source \"https://gem.repo2\"; gem 'json'" + gemfile "source \"https://gem.repo2\"; gem 'delegate'" ruby <<-RUBY require "bundler/setup" - require "json" - puts defined?(::JSON) ? "JSON defined" : "JSON undefined" + require "delegate" + puts defined?(::Delegator) ? "Delegator defined" : "Delegator undefined" RUBY + expect(out).to eq("Delegator defined") expect(err).to be_empty end @@ -1398,8 +1414,6 @@ def lock_with(ruby_version = nil) let(:exemptions) do exempts = %w[did_you_mean bundler uri pathname] exempts << "etc" if (Gem.ruby_version < Gem::Version.new("3.2") || Gem.ruby_version >= Gem::Version.new("3.3.2")) && Gem.win_platform? - exempts << "set" unless Gem.rubygems_version >= Gem::Version.new("3.2.6") - exempts << "tsort" unless Gem.rubygems_version >= Gem::Version.new("3.2.31") exempts << "error_highlight" # added in Ruby 3.1 as a default gem exempts << "ruby2_keywords" # added in Ruby 3.1 as a default gem exempts << "syntax_suggest" # added in Ruby 3.2 as a default gem diff --git a/spec/bundler/support/builders.rb b/spec/bundler/support/builders.rb index a0b94004f25764..a187d2ae4841c8 100644 --- a/spec/bundler/support/builders.rb +++ b/spec/bundler/support/builders.rb @@ -153,7 +153,7 @@ def build_repo1 build_gem "bundler", "0.9" do |s| s.executables = "bundle" - s.write "bin/bundle", "puts 'FAIL'" + s.write "bin/bundle", "#!/usr/bin/env ruby\nputs 'FAIL'" end # The bundler 0.8 gem has a rubygems plugin that always loads :( @@ -456,6 +456,7 @@ def initialize(context, name, version) s.email = "foo@bar.baz" s.homepage = "http://example.com" s.license = "MIT" + s.required_ruby_version = ">= 3.0" end @files = {} end @@ -472,11 +473,7 @@ def executables=(val) @spec.executables = Array(val) @spec.executables.each do |file| executable = "#{@spec.bindir}/#{file}" - shebang = if Bundler.current_ruby.jruby? - "#!/usr/bin/env jruby\n" - else - "#!/usr/bin/env ruby\n" - end + shebang = "#!/usr/bin/env ruby\n" @spec.files << executable write executable, "#{shebang}require_relative '../lib/#{@name}' ; puts #{Builders.constantize(@name)}" end @@ -537,10 +534,10 @@ def @spec.validate(*); end end @files.each do |file, source| - file = Pathname.new(path).join(file) - FileUtils.mkdir_p(file.dirname) - File.open(file, "w") {|f| f.puts source } - File.chmod("+x", file) if @spec.executables.map {|exe| "#{@spec.bindir}/#{exe}" }.include?(file) + full_path = Pathname.new(path).join(file) + FileUtils.mkdir_p(full_path.dirname) + File.open(full_path, "w") {|f| f.puts source } + FileUtils.chmod("+x", full_path) if @spec.executables.map {|exe| "#{@spec.bindir}/#{exe}" }.include?(file) end path end diff --git a/spec/bundler/support/env.rb b/spec/bundler/support/env.rb index 4d99c892cd48c0..2d13c449fe9d83 100644 --- a/spec/bundler/support/env.rb +++ b/spec/bundler/support/env.rb @@ -3,7 +3,7 @@ module Spec module Env def ruby_core? - !ENV["GEM_COMMAND"].nil? + File.exist?(File.expand_path("../../../lib/bundler/bundler.gemspec", __dir__)) end end end diff --git a/spec/bundler/support/hax.rb b/spec/bundler/support/hax.rb index c7fe3637cc5ecb..492c6ca8ed5e6e 100644 --- a/spec/bundler/support/hax.rb +++ b/spec/bundler/support/hax.rb @@ -36,18 +36,4 @@ class Platform if ENV["BUNDLER_SPEC_GEM_SOURCES"] self.sources = [ENV["BUNDLER_SPEC_GEM_SOURCES"]] end - - if ENV["BUNDLER_IGNORE_DEFAULT_GEM"] - module RemoveDefaultBundlerStub - def default_stubs(pattern = "*") - super.delete_if {|stub| stub.name == "bundler" } - end - end - - class Specification - class << self - prepend RemoveDefaultBundlerStub - end - end - end end diff --git a/spec/bundler/support/helpers.rb b/spec/bundler/support/helpers.rb index df3ce0b2bb4674..411d634bbf0303 100644 --- a/spec/bundler/support/helpers.rb +++ b/spec/bundler/support/helpers.rb @@ -170,12 +170,8 @@ def build_ruby_cmd(options = {}) requires << "#{Path.spec_dir}/support/artifice/#{artifice}.rb" end - hax_path = "#{Path.spec_dir}/support/hax.rb" + requires << "#{Path.spec_dir}/support/hax.rb" - # For specs that need to ignore the default Bundler gem, load hax before - # anything else since other stuff may actually load bundler and not skip - # the default version - env.include?("BUNDLER_IGNORE_DEFAULT_GEM") ? requires.prepend(hax_path) : requires.append(hax_path) require_option = requires.map {|r| "-r#{r}" } [env, [Gem.ruby, *lib_option, *require_option].compact.join(" ")] @@ -190,7 +186,16 @@ def gem_command(command, options = {}) env = options[:env] || {} env["RUBYOPT"] = opt_add(opt_add("-r#{spec_dir}/support/hax.rb", env["RUBYOPT"]), ENV["RUBYOPT"]) options[:env] = env - sys_exec("#{Path.gem_bin} #{command}", options) + + # Sometimes `gem install` commands hang at dns resolution, which has a + # default timeout of 60 seconds. When that happens, the timeout for a + # command is expired too. So give `gem install` commands a bit more time. + options[:timeout] = 120 + + output = sys_exec("#{Path.gem_bin} #{command}", options) + stderr = last_command.stderr + raise stderr if stderr.include?("WARNING") && !allowed_rubygems_warning?(stderr) + output end def rake @@ -291,18 +296,16 @@ def system_gems(*gems) options = gems.last.is_a?(Hash) ? gems.pop : {} install_dir = options.fetch(:path, system_gem_path) default = options.fetch(:default, false) - with_gem_path_as(install_dir) do - gem_repo = options.fetch(:gem_repo, gem_repo1) - gems.each do |g| - gem_name = g.to_s - if gem_name.start_with?("bundler") - version = gem_name.match(/\Abundler-(?.*)\z/)[:version] if gem_name != "bundler" - with_built_bundler(version) {|gem_path| install_gem(gem_path, install_dir, default) } - elsif %r{\A(?:[a-zA-Z]:)?/.*\.gem\z}.match?(gem_name) - install_gem(gem_name, install_dir, default) - else - install_gem("#{gem_repo}/gems/#{gem_name}.gem", install_dir, default) - end + gems.each do |g| + gem_name = g.to_s + if gem_name.start_with?("bundler") + version = gem_name.match(/\Abundler-(?.*)\z/)[:version] if gem_name != "bundler" + with_built_bundler(version) {|gem_path| install_gem(gem_path, install_dir, default) } + elsif %r{\A(?:[a-zA-Z]:)?/.*\.gem\z}.match?(gem_name) + install_gem(gem_name, install_dir, default) + else + gem_repo = options.fetch(:gem_repo, gem_repo1) + install_gem("#{gem_repo}/gems/#{gem_name}.gem", install_dir, default) end end end @@ -389,10 +392,8 @@ def realworld_system_gems(*gems) opts = gems.last.is_a?(Hash) ? gems.pop : {} path = opts.fetch(:path, system_gem_path) - with_gem_path_as(path) do - gems.each do |gem| - gem_command "install --no-document #{gem}" - end + gems.each do |gem| + gem_command "install --no-document --verbose --install-dir #{path} #{gem}" end end @@ -546,6 +547,10 @@ def exit_status_for_signal(signal_number) private + def allowed_rubygems_warning?(text) + text.include?("open-ended") || text.include?("is a symlink") || text.include?("rake based") || text.include?("expected RubyGems version") + end + def match_source(contents) match = /source ["']?(?http[^"']+)["']?/.match(contents) return unless match diff --git a/spec/bundler/support/rubygems_ext.rb b/spec/bundler/support/rubygems_ext.rb index 1fc5aa16c01bcb..5dfc2591b766a2 100644 --- a/spec/bundler/support/rubygems_ext.rb +++ b/spec/bundler/support/rubygems_ext.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -abort "RubyGems only supports Ruby 3.0 or higher" if RUBY_VERSION < "3.0.0" +abort "RubyGems only supports Ruby 3.1 or higher" if RUBY_VERSION < "3.1.0" require_relative "path" @@ -125,14 +125,7 @@ def gem_load_activate_and_possibly_install(gem_name, bin_container) def gem_activate_and_possibly_install(gem_name) gem_activate(gem_name) rescue Gem::LoadError => e - # Windows 3.0 puts a Windows stub script as `rake` while it should be - # named `rake.bat`. RubyGems does not like that and avoids overwriting it - # unless explicitly instructed to do so with `force`. - if RUBY_VERSION.start_with?("3.0") && Gem.win_platform? - Gem.install(gem_name, e.requirement, force: true) - else - Gem.install(gem_name, e.requirement) - end + Gem.install(gem_name, e.requirement) retry end diff --git a/spec/bundler/support/subprocess.rb b/spec/bundler/support/subprocess.rb index ade18e7805f77b..a4842166b98269 100644 --- a/spec/bundler/support/subprocess.rb +++ b/spec/bundler/support/subprocess.rb @@ -34,7 +34,7 @@ def sh(cmd, options = {}) dir = options[:dir] env = options[:env] || {} - command_execution = CommandExecution.new(cmd.to_s, working_directory: dir, timeout: 60) + command_execution = CommandExecution.new(cmd.to_s, working_directory: dir, timeout: options[:timeout] || 60) require "open3" require "shellwords" diff --git a/spec/default.mspec b/spec/default.mspec index 57142d6deca6d5..ecd3f3afe92579 100644 --- a/spec/default.mspec +++ b/spec/default.mspec @@ -90,7 +90,7 @@ require 'mspec/runner/formatters/dotted' class DottedFormatter prepend Module.new { BASE = __dir__ + "/ruby/" unless defined?(BASE) - COUNT_WIDTH = 6 + COUNT_WIDTH = 6 unless defined?(COUNT_WIDTH) def initialize(out = nil) super diff --git a/spec/ruby/.mspec.constants b/spec/ruby/.mspec.constants index 6e09a44362df22..4da36337152b0e 100644 --- a/spec/ruby/.mspec.constants +++ b/spec/ruby/.mspec.constants @@ -146,6 +146,7 @@ Prime Private ProcFromMethod Psych +RactorLocalSingleton REXML RUBY_SIGNALS RbReadline diff --git a/spec/ruby/core/array/fetch_values_spec.rb b/spec/ruby/core/array/fetch_values_spec.rb new file mode 100644 index 00000000000000..559b6c2b2fc948 --- /dev/null +++ b/spec/ruby/core/array/fetch_values_spec.rb @@ -0,0 +1,48 @@ +require_relative '../../spec_helper' +require_relative 'fixtures/classes' + +describe "Array#fetch_values" do + before :each do + @array = [:a, :b, :c] + end + + ruby_version_is "3.4" do + describe "with matched indexes" do + it "returns the values for indexes" do + @array.fetch_values(0).should == [:a] + @array.fetch_values(0, 2).should == [:a, :c] + end + + it "returns the values for indexes ordered in the order of the requested indexes" do + @array.fetch_values(2, 0).should == [:c, :a] + end + end + + describe "with unmatched indexes" do + it "raises a index error if no block is provided" do + -> { @array.fetch_values(0, 1, 44) }.should raise_error(IndexError) + end + + it "returns the default value from block" do + @array.fetch_values(44) { |index| "`#{index}' is not found" }.should == ["`44' is not found"] + @array.fetch_values(0, 44) { |index| "`#{index}' is not found" }.should == [:a, "`44' is not found"] + end + end + + describe "without keys" do + it "returns an empty Array" do + @array.fetch_values.should == [] + end + end + + it "tries to convert the passed argument to an Integer using #to_int" do + obj = mock('to_int') + obj.should_receive(:to_int).and_return(2) + @array.fetch_values(obj).should == [:c] + end + + it "raises a TypeError when the passed argument can't be coerced to Integer" do + -> { [].fetch_values("cat") }.should raise_error(TypeError) + end + end +end diff --git a/spec/ruby/core/hash/shared/to_s.rb b/spec/ruby/core/hash/shared/to_s.rb index 7864d7cd4c6985..5f0a8f97fdb5f5 100644 --- a/spec/ruby/core/hash/shared/to_s.rb +++ b/spec/ruby/core/hash/shared/to_s.rb @@ -4,14 +4,8 @@ describe :hash_to_s, shared: true do it "returns a string representation with same order as each()" do h = { a: [1, 2], b: -2, d: -6, nil => nil } - - pairs = [] - h.each do |key, value| - pairs << key.inspect + '=>' + value.inspect - end - - str = '{' + pairs.join(', ') + '}' - h.send(@method).should == str + expected = ruby_version_is("3.4") ? "{a: [1, 2], b: -2, d: -6, nil => nil}" : "{:a=>[1, 2], :b=>-2, :d=>-6, nil=>nil}" + h.send(@method).should == expected end it "calls #inspect on keys and values" do @@ -19,31 +13,31 @@ val = mock('val') key.should_receive(:inspect).and_return('key') val.should_receive(:inspect).and_return('val') - - { key => val }.send(@method).should == '{key=>val}' + expected = ruby_version_is("3.4") ? "{key => val}" : "{key=>val}" + { key => val }.send(@method).should == expected end it "does not call #to_s on a String returned from #inspect" do str = +"abc" str.should_not_receive(:to_s) - - { a: str }.send(@method).should == '{:a=>"abc"}' + expected = ruby_version_is("3.4") ? '{a: "abc"}' : '{:a=>"abc"}' + { a: str }.send(@method).should == expected end it "calls #to_s on the object returned from #inspect if the Object isn't a String" do obj = mock("Hash#inspect/to_s calls #to_s") obj.should_receive(:inspect).and_return(obj) obj.should_receive(:to_s).and_return("abc") - - { a: obj }.send(@method).should == "{:a=>abc}" + expected = ruby_version_is("3.4") ? "{a: abc}" : "{:a=>abc}" + { a: obj }.send(@method).should == expected end it "does not call #to_str on the object returned from #inspect when it is not a String" do obj = mock("Hash#inspect/to_s does not call #to_str") obj.should_receive(:inspect).and_return(obj) obj.should_not_receive(:to_str) - - { a: obj }.send(@method).should =~ /^\{:a=>#\}$/ + expected_pattern = ruby_version_is("3.4") ? /^\{a: #\}$/ : /^\{:a=>#\}$/ + { a: obj }.send(@method).should =~ expected_pattern end it "does not call #to_str on the object returned from #to_s when it is not a String" do @@ -51,8 +45,8 @@ obj.should_receive(:inspect).and_return(obj) obj.should_receive(:to_s).and_return(obj) obj.should_not_receive(:to_str) - - { a: obj }.send(@method).should =~ /^\{:a=>#\}$/ + expected_pattern = ruby_version_is("3.4") ? /^\{a: #\}$/ : /^\{:a=>#\}$/ + { a: obj }.send(@method).should =~ expected_pattern end it "does not swallow exceptions raised by #to_s" do @@ -66,24 +60,28 @@ it "handles hashes with recursive values" do x = {} x[0] = x - x.send(@method).should == '{0=>{...}}' + expected = ruby_version_is("3.4") ? '{0 => {...}}' : '{0=>{...}}' + x.send(@method).should == expected x = {} y = {} x[0] = y y[1] = x - x.send(@method).should == "{0=>{1=>{...}}}" - y.send(@method).should == "{1=>{0=>{...}}}" + expected_x = ruby_version_is("3.4") ? '{0 => {1 => {...}}}' : '{0=>{1=>{...}}}' + expected_y = ruby_version_is("3.4") ? '{1 => {0 => {...}}}' : '{1=>{0=>{...}}}' + x.send(@method).should == expected_x + y.send(@method).should == expected_y end it "does not raise if inspected result is not default external encoding" do utf_16be = mock("utf_16be") utf_16be.should_receive(:inspect).and_return(%<"utf_16be \u3042">.encode(Encoding::UTF_16BE)) - - {a: utf_16be}.send(@method).should == '{:a=>"utf_16be \u3042"}' + expected = ruby_version_is("3.4") ? '{a: "utf_16be \u3042"}' : '{:a=>"utf_16be \u3042"}' + {a: utf_16be}.send(@method).should == expected end it "works for keys and values whose #inspect return a frozen String" do - { true => false }.to_s.should == "{true=>false}" + expected = ruby_version_is("3.4") ? "{true => false}" : "{true=>false}" + { true => false }.to_s.should == expected end end diff --git a/spec/ruby/core/module/new_spec.rb b/spec/ruby/core/module/new_spec.rb index da7f3b87207435..ec521360bd7f84 100644 --- a/spec/ruby/core/module/new_spec.rb +++ b/spec/ruby/core/module/new_spec.rb @@ -6,6 +6,10 @@ Module.new.is_a?(Module).should == true end + it "creates a module without a name" do + Module.new.name.should be_nil + end + it "creates a new Module and passes it to the provided block" do test_mod = nil m = Module.new do |mod| diff --git a/spec/ruby/core/range/step_spec.rb b/spec/ruby/core/range/step_spec.rb index f858a6a6bb891f..31cfd400ccc965 100644 --- a/spec/ruby/core/range/step_spec.rb +++ b/spec/ruby/core/range/step_spec.rb @@ -175,21 +175,21 @@ end describe "and String values" do - ruby_version_is ""..."3.4" do - it "yields String values incremented by #succ and less than or equal to end when not passed a step" do - ("A".."E").step { |x| ScratchPad << x } - ScratchPad.recorded.should == ["A", "B", "C", "D", "E"] - end + it "yields String values incremented by #succ and less than or equal to end when not passed a step" do + ("A".."E").step { |x| ScratchPad << x } + ScratchPad.recorded.should == ["A", "B", "C", "D", "E"] + end - it "yields String values incremented by #succ called Integer step times" do - ("A".."G").step(2) { |x| ScratchPad << x } - ScratchPad.recorded.should == ["A", "C", "E", "G"] - end + it "yields String values incremented by #succ called Integer step times" do + ("A".."G").step(2) { |x| ScratchPad << x } + ScratchPad.recorded.should == ["A", "C", "E", "G"] + end - it "raises a TypeError when passed a Float step" do - -> { ("A".."G").step(2.0) { } }.should raise_error(TypeError) - end + it "raises a TypeError when passed a Float step" do + -> { ("A".."G").step(2.0) { } }.should raise_error(TypeError) + end + ruby_version_is ""..."3.4" do it "calls #succ on begin and each element returned by #succ" do obj = mock("Range#step String start") obj.should_receive(:<=>).exactly(3).times.and_return(-1, -1, -1, 0) @@ -201,17 +201,13 @@ end ruby_version_is "3.4" do - it "raises an ArgumentError when not passed a step" do - -> { ("A".."E").step { } }.should raise_error(ArgumentError) - end - it "yields String values adjusted by step and less than or equal to end" do ("A".."AAA").step("A") { |x| ScratchPad << x } ScratchPad.recorded.should == ["A", "AA", "AAA"] end it "raises a TypeError when passed an incompatible type step" do - -> { ("A".."G").step(2) { } }.should raise_error(TypeError) + -> { ("A".."G").step([]) { } }.should raise_error(TypeError) end it "calls #+ on begin and each element returned by #+" do @@ -397,17 +393,13 @@ end ruby_version_is "3.4" do - it "raises an ArgumentError when not passed a step" do - -> { ("A".."E").step { } }.should raise_error(ArgumentError) - end - it "yields String values adjusted by step and less than or equal to end" do ("A"..."AAA").step("A") { |x| ScratchPad << x } ScratchPad.recorded.should == ["A", "AA"] end it "raises a TypeError when passed an incompatible type step" do - -> { ("A".."G").step(2) { } }.should raise_error(TypeError) + -> { ("A".."G").step([]) { } }.should raise_error(TypeError) end end end @@ -482,36 +474,30 @@ end describe "and String values" do - ruby_version_is ""..."3.4" do - it "yields String values incremented by #succ and less than or equal to end when not passed a step" do - eval("('A'..)").step { |x| break if x > "D"; ScratchPad << x } - ScratchPad.recorded.should == ["A", "B", "C", "D"] + it "yields String values incremented by #succ and less than or equal to end when not passed a step" do + eval("('A'..)").step { |x| break if x > "D"; ScratchPad << x } + ScratchPad.recorded.should == ["A", "B", "C", "D"] - ScratchPad.record [] - eval("('A'...)").step { |x| break if x > "D"; ScratchPad << x } - ScratchPad.recorded.should == ["A", "B", "C", "D"] - end + ScratchPad.record [] + eval("('A'...)").step { |x| break if x > "D"; ScratchPad << x } + ScratchPad.recorded.should == ["A", "B", "C", "D"] + end - it "yields String values incremented by #succ called Integer step times" do - eval("('A'..)").step(2) { |x| break if x > "F"; ScratchPad << x } - ScratchPad.recorded.should == ["A", "C", "E"] + it "yields String values incremented by #succ called Integer step times" do + eval("('A'..)").step(2) { |x| break if x > "F"; ScratchPad << x } + ScratchPad.recorded.should == ["A", "C", "E"] - ScratchPad.record [] - eval("('A'...)").step(2) { |x| break if x > "F"; ScratchPad << x } - ScratchPad.recorded.should == ["A", "C", "E"] - end + ScratchPad.record [] + eval("('A'...)").step(2) { |x| break if x > "F"; ScratchPad << x } + ScratchPad.recorded.should == ["A", "C", "E"] + end - it "raises a TypeError when passed a Float step" do - -> { eval("('A'..)").step(2.0) { } }.should raise_error(TypeError) - -> { eval("('A'...)").step(2.0) { } }.should raise_error(TypeError) - end + it "raises a TypeError when passed a Float step" do + -> { eval("('A'..)").step(2.0) { } }.should raise_error(TypeError) + -> { eval("('A'...)").step(2.0) { } }.should raise_error(TypeError) end ruby_version_is "3.4" do - it "raises an ArgumentError when not passed a step" do - -> { ("A"..).step { } }.should raise_error(ArgumentError) - end - it "yields String values adjusted by step" do eval("('A'..)").step("A") { |x| break if x > "AAA"; ScratchPad << x } ScratchPad.recorded.should == ["A", "AA", "AAA"] @@ -522,8 +508,8 @@ end it "raises a TypeError when passed an incompatible type step" do - -> { eval("('A'..)").step(2) { } }.should raise_error(TypeError) - -> { eval("('A'...)").step(2) { } }.should raise_error(TypeError) + -> { eval("('A'..)").step([]) { } }.should raise_error(TypeError) + -> { eval("('A'...)").step([]) { } }.should raise_error(TypeError) end end end diff --git a/spec/ruby/core/string/append_as_bytes_spec.rb b/spec/ruby/core/string/append_as_bytes_spec.rb new file mode 100644 index 00000000000000..0e1d09558bd1f5 --- /dev/null +++ b/spec/ruby/core/string/append_as_bytes_spec.rb @@ -0,0 +1,46 @@ +require_relative '../../spec_helper' + +describe "String#append_bytes" do + ruby_version_is "3.4" do + it "doesn't allow to mutate frozen strings" do + str = "hello".freeze + -> { str.append_as_bytes("\xE2\x82") }.should raise_error(FrozenError) + end + + it "allows creating broken strings" do + str = +"hello" + str.append_as_bytes("\xE2\x82") + str.valid_encoding?.should == false + + str.append_as_bytes("\xAC") + str.valid_encoding?.should == true + + str = "abc".encode(Encoding::UTF_32LE) + str.append_as_bytes("def") + str.encoding.should == Encoding::UTF_32LE + str.valid_encoding?.should == false + end + + it "never changes the receiver encoding" do + str = "".b + str.append_as_bytes("€") + str.encoding.should == Encoding::BINARY + end + + it "accepts variadic String or Integer arguments" do + str = "hello".b + str.append_as_bytes("\xE2\x82", 12, 43, "\xAC") + str.encoding.should == Encoding::BINARY + str.should == "hello\xE2\x82\f+\xAC".b + end + + it "only accepts strings or integers, and doesn't attempt to cast with #to_str or #to_int" do + to_str = mock("to_str") + to_str.should_not_receive(:to_str) + to_str.should_not_receive(:to_int) + + str = +"hello" + -> { str.append_as_bytes(to_str) }.should raise_error(TypeError, "wrong argument type MockObject (expected String or Integer)") + end + end +end diff --git a/spec/ruby/core/string/modulo_spec.rb b/spec/ruby/core/string/modulo_spec.rb index 9045afa263a63d..8e3853551f36c1 100644 --- a/spec/ruby/core/string/modulo_spec.rb +++ b/spec/ruby/core/string/modulo_spec.rb @@ -570,7 +570,7 @@ def universal.to_f() 0.0 end ("%1$p" % [10, 5]).should == "10" ("%-22p" % 10).should == "10 " ("%*p" % [10, 10]).should == " 10" - ("%p" % {capture: 1}).should == "{:capture=>1}" + ("%p" % {capture: 1}).should == {capture: 1}.inspect ("%p" % "str").should == "\"str\"" end @@ -749,6 +749,9 @@ def obj.to_s() "obj" end (format % "-10.4e-20").should == (format % -10.4e-20) (format % ".5").should == (format % 0.5) (format % "-.5").should == (format % -0.5) + ruby_bug("#20705", ""..."3.4") do + (format % "10.").should == (format % 10) + end # Something's strange with this spec: # it works just fine in individual mode, but not when run as part of a group (format % "10_1_0.5_5_5").should == (format % 1010.555) @@ -758,7 +761,6 @@ def obj.to_s() "obj" end -> { format % "" }.should raise_error(ArgumentError) -> { format % "x" }.should raise_error(ArgumentError) -> { format % "." }.should raise_error(ArgumentError) - -> { format % "10." }.should raise_error(ArgumentError) -> { format % "5x" }.should raise_error(ArgumentError) -> { format % "0b1" }.should raise_error(ArgumentError) -> { format % "10e10.5" }.should raise_error(ArgumentError) diff --git a/spec/ruby/core/thread/thread_variable_get_spec.rb b/spec/ruby/core/thread/thread_variable_get_spec.rb index e8e03e3d18008e..1ea34cf2b31917 100644 --- a/spec/ruby/core/thread/thread_variable_get_spec.rb +++ b/spec/ruby/core/thread/thread_variable_get_spec.rb @@ -43,18 +43,18 @@ it "raises a TypeError if the key is neither Symbol nor String when thread variables are already set" do @t.thread_variable_set(:a, 49) - -> { @t.thread_variable_get(123) }.should raise_error(TypeError, "123 is not a symbol") + -> { @t.thread_variable_get(123) }.should raise_error(TypeError, /123 is not a symbol/) end ruby_version_is '3.4' do it "raises a TypeError if the key is neither Symbol nor String when no thread variables are set" do - -> { @t.thread_variable_get(123) }.should raise_error(TypeError, "123 is not a symbol") + -> { @t.thread_variable_get(123) }.should raise_error(TypeError, /123 is not a symbol/) end it "raises a TypeError if the key is neither Symbol nor String without calling #to_sym" do key = mock('key') key.should_not_receive(:to_sym) - -> { @t.thread_variable_get(key) }.should raise_error(TypeError, "#{key.inspect} is not a symbol") + -> { @t.thread_variable_get(key) }.should raise_error(TypeError, /#{Regexp.escape(key.inspect)} is not a symbol/) end end end diff --git a/spec/ruby/core/thread/thread_variable_set_spec.rb b/spec/ruby/core/thread/thread_variable_set_spec.rb index c262a6614eff7e..eadee76afba00d 100644 --- a/spec/ruby/core/thread/thread_variable_set_spec.rb +++ b/spec/ruby/core/thread/thread_variable_set_spec.rb @@ -51,12 +51,12 @@ end it "raises a TypeError if the key is neither Symbol nor String, nor responds to #to_str" do - -> { @t.thread_variable_set(123, 1) }.should raise_error(TypeError, '123 is not a symbol') + -> { @t.thread_variable_set(123, 1) }.should raise_error(TypeError, /123 is not a symbol/) end it "does not try to convert the key with #to_sym" do key = mock('key') key.should_not_receive(:to_sym) - -> { @t.thread_variable_set(key, 42) }.should raise_error(TypeError, "#{key.inspect} is not a symbol") + -> { @t.thread_variable_set(key, 42) }.should raise_error(TypeError, /#{Regexp.quote(key.inspect)} is not a symbol/) end end diff --git a/spec/ruby/core/thread/thread_variable_spec.rb b/spec/ruby/core/thread/thread_variable_spec.rb index 465b985365c722..1b021e94044d52 100644 --- a/spec/ruby/core/thread/thread_variable_spec.rb +++ b/spec/ruby/core/thread/thread_variable_spec.rb @@ -43,18 +43,18 @@ it "raises a TypeError if the key is neither Symbol nor String when thread variables are already set" do @t.thread_variable_set(:a, 49) - -> { @t.thread_variable?(123) }.should raise_error(TypeError, "123 is not a symbol") + -> { @t.thread_variable?(123) }.should raise_error(TypeError, /123 is not a symbol/) end ruby_version_is '3.4' do it "raises a TypeError if the key is neither Symbol nor String when no thread variables are set" do - -> { @t.thread_variable?(123) }.should raise_error(TypeError, "123 is not a symbol") + -> { @t.thread_variable?(123) }.should raise_error(TypeError, /123 is not a symbol/) end it "raises a TypeError if the key is neither Symbol nor String without calling #to_sym" do key = mock('key') key.should_not_receive(:to_sym) - -> { @t.thread_variable?(key) }.should raise_error(TypeError, "#{key.inspect} is not a symbol") + -> { @t.thread_variable?(key) }.should raise_error(TypeError, /#{Regexp.escape(key.inspect)} is not a symbol/) end end end diff --git a/spec/ruby/core/time/iso8601_spec.rb b/spec/ruby/core/time/iso8601_spec.rb new file mode 100644 index 00000000000000..ad60c3bb322100 --- /dev/null +++ b/spec/ruby/core/time/iso8601_spec.rb @@ -0,0 +1,6 @@ +require_relative '../../spec_helper' +require_relative 'shared/xmlschema' + +describe "Time#iso8601" do + it_behaves_like :time_xmlschema, :iso8601 +end diff --git a/spec/ruby/core/time/shared/xmlschema.rb b/spec/ruby/core/time/shared/xmlschema.rb new file mode 100644 index 00000000000000..d68c18df364b86 --- /dev/null +++ b/spec/ruby/core/time/shared/xmlschema.rb @@ -0,0 +1,31 @@ +describe :time_xmlschema, shared: true do + ruby_version_is "3.4" do + it "generates ISO-8601 strings in Z for UTC times" do + t = Time.utc(1985, 4, 12, 23, 20, 50, 521245) + t.send(@method).should == "1985-04-12T23:20:50Z" + t.send(@method, 2).should == "1985-04-12T23:20:50.52Z" + t.send(@method, 9).should == "1985-04-12T23:20:50.521245000Z" + end + + it "generates ISO-8601 string with timeone offset for non-UTC times" do + t = Time.new(1985, 4, 12, 23, 20, 50, "+02:00") + t.send(@method).should == "1985-04-12T23:20:50+02:00" + t.send(@method, 2).should == "1985-04-12T23:20:50.00+02:00" + end + + it "year is always at least 4 digits" do + t = Time.utc(12, 4, 12) + t.send(@method).should == "0012-04-12T00:00:00Z" + end + + it "year can be more than 4 digits" do + t = Time.utc(40_000, 4, 12) + t.send(@method).should == "40000-04-12T00:00:00Z" + end + + it "year can be negative" do + t = Time.utc(-2000, 4, 12) + t.send(@method).should == "-2000-04-12T00:00:00Z" + end + end +end diff --git a/spec/ruby/core/time/xmlschema_spec.rb b/spec/ruby/core/time/xmlschema_spec.rb new file mode 100644 index 00000000000000..bdf1dc7923eeaf --- /dev/null +++ b/spec/ruby/core/time/xmlschema_spec.rb @@ -0,0 +1,6 @@ +require_relative '../../spec_helper' +require_relative 'shared/xmlschema' + +describe "Time#xmlschema" do + it_behaves_like :time_xmlschema, :xmlschema +end diff --git a/spec/ruby/language/pattern_matching_spec.rb b/spec/ruby/language/pattern_matching_spec.rb index 52608b48bea4a7..94432b1fa0009b 100644 --- a/spec/ruby/language/pattern_matching_spec.rb +++ b/spec/ruby/language/pattern_matching_spec.rb @@ -232,11 +232,12 @@ end }.should raise_error(NoMatchingPatternError, /\[0, 1\]/) + error_pattern = ruby_version_is("3.4") ? /\{a: 0, b: 1\}/ : /\{:a=>0, :b=>1\}/ -> { case {a: 0, b: 1} in a: 1, b: 1 end - }.should raise_error(NoMatchingPatternError, /\{:a=>0, :b=>1\}/) + }.should raise_error(NoMatchingPatternError, error_pattern) end it "raises NoMatchingPatternError if no pattern matches and evaluates the expression only once" do diff --git a/spec/ruby/library/net-http/http/post_spec.rb b/spec/ruby/library/net-http/http/post_spec.rb index d7d94fec4a70b4..ac020bd6bed869 100644 --- a/spec/ruby/library/net-http/http/post_spec.rb +++ b/spec/ruby/library/net-http/http/post_spec.rb @@ -27,7 +27,7 @@ it "sends Content-Type: application/x-www-form-urlencoded by default" do response = Net::HTTP.post(URI("http://localhost:#{NetHTTPSpecs.port}/request/header"), "test=test") - response.body.should include('"Content-Type"=>"application/x-www-form-urlencoded"') + response.body.should include({ "Content-Type" => "application/x-www-form-urlencoded" }.inspect.delete("{}")) end it "does not support HTTP Basic Auth" do diff --git a/spec/ruby/library/net-http/http/send_request_spec.rb b/spec/ruby/library/net-http/http/send_request_spec.rb index e82b2a96a1875d..af35c068ceaeaf 100644 --- a/spec/ruby/library/net-http/http/send_request_spec.rb +++ b/spec/ruby/library/net-http/http/send_request_spec.rb @@ -54,7 +54,7 @@ @methods.each do |method| response = @http.send_request(method, "/request/header", "test=test", "referer" => referer) - response.body.should include('"Referer"=>"' + referer + '"') + response.body.should include({ "Referer" => referer }.inspect.delete("{}")) end end end diff --git a/spec/ruby/library/pp/pp_spec.rb b/spec/ruby/library/pp/pp_spec.rb index 243478efd967c7..e45a6bb94f67a3 100644 --- a/spec/ruby/library/pp/pp_spec.rb +++ b/spec/ruby/library/pp/pp_spec.rb @@ -25,6 +25,6 @@ hash = { 'key' => 42 } -> { PP.pp hash - }.should output('{"key"=>42}' + "\n") + }.should output("#{hash.inspect}\n") end end diff --git a/spec/ruby/library/stringscanner/check_until_spec.rb b/spec/ruby/library/stringscanner/check_until_spec.rb index ad222fd76b3e9d..1d89f88a25bfa1 100644 --- a/spec/ruby/library/stringscanner/check_until_spec.rb +++ b/spec/ruby/library/stringscanner/check_until_spec.rb @@ -13,9 +13,11 @@ @s.check_until(/test/).should == "This is a test" end - it "raises TypeError if given a String" do - -> { - @s.check_until('T') - }.should raise_error(TypeError, 'wrong argument type String (expected Regexp)') + ruby_version_is ""..."3.4" do + it "raises TypeError if given a String" do + -> { + @s.check_until('T') + }.should raise_error(TypeError, 'wrong argument type String (expected Regexp)') + end end end diff --git a/spec/ruby/library/stringscanner/exist_spec.rb b/spec/ruby/library/stringscanner/exist_spec.rb index ff860a0d3e35dc..a18f5ce35273a8 100644 --- a/spec/ruby/library/stringscanner/exist_spec.rb +++ b/spec/ruby/library/stringscanner/exist_spec.rb @@ -22,9 +22,11 @@ @s.exist?(/i/).should == nil end - it "raises TypeError if given a String" do - -> { - @s.exist?('T') - }.should raise_error(TypeError, 'wrong argument type String (expected Regexp)') + ruby_version_is ""..."3.4" do + it "raises TypeError if given a String" do + -> { + @s.exist?('T') + }.should raise_error(TypeError, 'wrong argument type String (expected Regexp)') + end end end diff --git a/spec/ruby/library/stringscanner/scan_until_spec.rb b/spec/ruby/library/stringscanner/scan_until_spec.rb index a8162f1f0399fb..1e318d053b923a 100644 --- a/spec/ruby/library/stringscanner/scan_until_spec.rb +++ b/spec/ruby/library/stringscanner/scan_until_spec.rb @@ -21,9 +21,11 @@ @s.scan_until(/^h/).should == "h" end - it "raises TypeError if given a String" do - -> { - @s.scan_until('T') - }.should raise_error(TypeError, 'wrong argument type String (expected Regexp)') + ruby_version_is ""..."3.4" do + it "raises TypeError if given a String" do + -> { + @s.scan_until('T') + }.should raise_error(TypeError, 'wrong argument type String (expected Regexp)') + end end end diff --git a/spec/ruby/library/stringscanner/search_full_spec.rb b/spec/ruby/library/stringscanner/search_full_spec.rb index 7d2a714fa56799..713ab00d22b2bc 100644 --- a/spec/ruby/library/stringscanner/search_full_spec.rb +++ b/spec/ruby/library/stringscanner/search_full_spec.rb @@ -28,9 +28,11 @@ @s.pos.should == 4 end - it "raises TypeError if given a String" do - -> { - @s.search_full('T', true, true) - }.should raise_error(TypeError, 'wrong argument type String (expected Regexp)') + ruby_version_is ""..."3.4" do + it "raises TypeError if given a String" do + -> { + @s.search_full('T', true, true) + }.should raise_error(TypeError, 'wrong argument type String (expected Regexp)') + end end end diff --git a/spec/ruby/library/stringscanner/skip_until_spec.rb b/spec/ruby/library/stringscanner/skip_until_spec.rb index 7b56f13e4f6ebc..b6a020f9ba8ffd 100644 --- a/spec/ruby/library/stringscanner/skip_until_spec.rb +++ b/spec/ruby/library/stringscanner/skip_until_spec.rb @@ -16,9 +16,11 @@ @s.skip_until(/d+/).should == nil end - it "raises TypeError if given a String" do - -> { - @s.skip_until('T') - }.should raise_error(TypeError, 'wrong argument type String (expected Regexp)') + ruby_version_is ""..."3.4" do + it "raises TypeError if given a String" do + -> { + @s.skip_until('T') + }.should raise_error(TypeError, 'wrong argument type String (expected Regexp)') + end end end diff --git a/spec/ruby/library/time/iso8601_spec.rb b/spec/ruby/library/time/iso8601_spec.rb index 4a9eb45613867e..9e2607fbd0b814 100644 --- a/spec/ruby/library/time/iso8601_spec.rb +++ b/spec/ruby/library/time/iso8601_spec.rb @@ -3,5 +3,5 @@ require 'time' describe "Time.xmlschema" do - it_behaves_like :time_xmlschema, :iso8601 + it_behaves_like :time_library_xmlschema, :iso8601 end diff --git a/spec/ruby/library/time/shared/xmlschema.rb b/spec/ruby/library/time/shared/xmlschema.rb index 44d33cda7e386a..831d8509a72725 100644 --- a/spec/ruby/library/time/shared/xmlschema.rb +++ b/spec/ruby/library/time/shared/xmlschema.rb @@ -1,4 +1,4 @@ -describe :time_xmlschema, shared: true do +describe :time_library_xmlschema, shared: true do it "parses ISO-8601 strings" do t = Time.utc(1985, 4, 12, 23, 20, 50, 520000) s = "1985-04-12T23:20:50.52Z" diff --git a/spec/ruby/library/time/xmlschema_spec.rb b/spec/ruby/library/time/xmlschema_spec.rb index 427931119971fe..ff3c864a02e85b 100644 --- a/spec/ruby/library/time/xmlschema_spec.rb +++ b/spec/ruby/library/time/xmlschema_spec.rb @@ -3,5 +3,5 @@ require 'time' describe "Time.xmlschema" do - it_behaves_like :time_xmlschema, :xmlschema + it_behaves_like :time_library_xmlschema, :xmlschema end diff --git a/spec/ruby/optional/capi/ext/io_spec.c b/spec/ruby/optional/capi/ext/io_spec.c index 1b4d4fccce4970..e0b1df0de7a2bf 100644 --- a/spec/ruby/optional/capi/ext/io_spec.c +++ b/spec/ruby/optional/capi/ext/io_spec.c @@ -143,7 +143,11 @@ VALUE io_spec_rb_io_wait_readable(VALUE self, VALUE io, VALUE read_p) { errno = saved_errno; } +#ifdef RUBY_VERSION_IS_3_1 + ret = rb_io_maybe_wait_readable(errno, io, Qnil); +#else ret = rb_io_wait_readable(fd); +#endif if (RTEST(read_p)) { ssize_t r = read(fd, buf, RB_IO_WAIT_READABLE_BUF); @@ -162,7 +166,11 @@ VALUE io_spec_rb_io_wait_readable(VALUE self, VALUE io, VALUE read_p) { } VALUE io_spec_rb_io_wait_writable(VALUE self, VALUE io) { +#ifdef RUBY_VERSION_IS_3_1 + int ret = rb_io_maybe_wait_writable(errno, io, Qnil); +#else int ret = rb_io_wait_writable(io_spec_get_fd(io)); +#endif return ret ? Qtrue : Qfalse; } @@ -230,13 +238,23 @@ VALUE io_spec_rb_thread_wait_fd(VALUE self, VALUE io) { } VALUE io_spec_rb_wait_for_single_fd(VALUE self, VALUE io, VALUE events, VALUE secs, VALUE usecs) { - int fd = io_spec_get_fd(io); +#ifdef RUBY_VERSION_IS_3_0 + VALUE timeout = Qnil; + if (!NIL_P(secs)) { + timeout = rb_float_new((double)FIX2INT(secs) + (0.000001f * FIX2INT(usecs))); + } + VALUE result = rb_io_wait(io, events, timeout); + if (result == Qfalse) return INT2FIX(0); + else return result; +#else struct timeval tv; if (!NIL_P(secs)) { tv.tv_sec = FIX2INT(secs); tv.tv_usec = FIX2INT(usecs); } + int fd = io_spec_get_fd(io); return INT2FIX(rb_wait_for_single_fd(fd, FIX2INT(events), NIL_P(secs) ? NULL : &tv)); +#endif } VALUE io_spec_rb_thread_fd_writable(VALUE self, VALUE io) { diff --git a/spec/ruby/optional/capi/io_spec.rb b/spec/ruby/optional/capi/io_spec.rb index bdec46f5e187bf..01588408e10c78 100644 --- a/spec/ruby/optional/capi/io_spec.rb +++ b/spec/ruby/optional/capi/io_spec.rb @@ -458,10 +458,6 @@ @o.rb_io_maybe_wait(Errno::EINTR::Errno, @w_io, IO::WRITABLE, nil).should == IO::WRITABLE end - it "returns false if there is no error condition" do - @o.rb_io_maybe_wait(0, @w_io, IO::WRITABLE, nil).should == false - end - it "raises an IOError if the IO is closed" do @w_io.close -> { @o.rb_io_maybe_wait(0, @w_io, IO::WRITABLE, nil) }.should raise_error(IOError, "closed stream") @@ -521,6 +517,14 @@ end end end + + ruby_version_is "3.4" do + describe "rb_io_maybe_wait" do + it "returns nil if there is no error condition" do + @o.rb_io_maybe_wait(0, @w_io, IO::WRITABLE, nil).should == nil + end + end + end end describe "rb_fd_fix_cloexec" do diff --git a/spec/ruby/optional/capi/string_spec.rb b/spec/ruby/optional/capi/string_spec.rb index a8edf998b54b25..43b4b3f09b12d8 100644 --- a/spec/ruby/optional/capi/string_spec.rb +++ b/spec/ruby/optional/capi/string_spec.rb @@ -1096,7 +1096,7 @@ def inspect end it "tries to convert the passed argument to a string by calling #to_s" do - @s.rb_String({"bar" => "foo"}).should == '{"bar"=>"foo"}' + @s.rb_String({"bar" => "foo"}).should == {"bar" => "foo"}.to_s end end diff --git a/sprintf.c b/sprintf.c index 4fa531d53e6659..1d3b3e0d07a36b 100644 --- a/sprintf.c +++ b/sprintf.c @@ -1165,7 +1165,9 @@ ruby_vsprintf0(VALUE result, char *p, const char *fmt, va_list ap) RBASIC_SET_CLASS_RAW(result, klass); p = RSTRING_PTR(result); long blen = (char *)f._p - p; - if (scanned < blen) { + + coderange = ENC_CODERANGE(result); + if (coderange != ENC_CODERANGE_UNKNOWN && scanned < blen) { rb_str_coderange_scan_restartable(p + scanned, p + blen, rb_enc_get(result), &coderange); ENC_CODERANGE_SET(result, coderange); } diff --git a/strftime.c b/strftime.c index 33e7d3fdb8c519..edaa9f02ced73c 100644 --- a/strftime.c +++ b/strftime.c @@ -171,7 +171,9 @@ resize_buffer(VALUE ftime, char *s, const char **start, const char **endp, ptrdiff_t n, size_t maxsize) { size_t len = s - *start; - size_t nlen = len + n * 2; + size_t need = len + n * 2; + size_t nlen = rb_str_capacity(ftime); + while (nlen < need) nlen <<= 1; if (nlen < len || nlen > maxsize) { return 0; @@ -930,6 +932,7 @@ rb_strftime(const char *format, size_t format_len, rb_encoding *enc, VALUE time, const struct vtm *vtm, VALUE timev, int gmt) { VALUE result = rb_enc_str_new(0, 0, enc); + ENC_CODERANGE_CLEAR(result); return rb_strftime_with_timespec(result, format, format_len, enc, time, vtm, timev, NULL, gmt, strftime_size_limit(format_len)); @@ -940,6 +943,7 @@ rb_strftime_timespec(const char *format, size_t format_len, rb_encoding *enc, VALUE time, const struct vtm *vtm, struct timespec *ts, int gmt) { VALUE result = rb_enc_str_new(0, 0, enc); + ENC_CODERANGE_CLEAR(result); return rb_strftime_with_timespec(result, format, format_len, enc, time, vtm, Qnil, ts, gmt, strftime_size_limit(format_len)); diff --git a/string.c b/string.c index 1e07af1b1caeeb..38d8d27ddc3bae 100644 --- a/string.c +++ b/string.c @@ -144,10 +144,10 @@ VALUE rb_cSymbol; } while (0) static inline bool -str_enc_fastpath(VALUE str) +str_encindex_fastpath(int encindex) { // The overwhelming majority of strings are in one of these 3 encodings. - switch (ENCODING_GET_INLINED(str)) { + switch (encindex) { case ENCINDEX_ASCII_8BIT: case ENCINDEX_UTF_8: case ENCINDEX_US_ASCII: @@ -157,6 +157,12 @@ str_enc_fastpath(VALUE str) } } +static inline bool +str_enc_fastpath(VALUE str) +{ + return str_encindex_fastpath(ENCODING_GET_INLINED(str)); +} + #define TERM_LEN(str) (str_enc_fastpath(str) ? 1 : rb_enc_mbminlen(rb_enc_from_index(ENCODING_GET(str)))) #define TERM_FILL(ptr, termlen) do {\ char *const term_fill_ptr = (ptr);\ @@ -1109,16 +1115,24 @@ rb_enc_str_coderange(VALUE str) return cr; } +static inline bool +rb_enc_str_asciicompat(VALUE str) +{ + int encindex = ENCODING_GET_INLINED(str); + return str_encindex_fastpath(encindex) || rb_enc_asciicompat(rb_enc_get_from_index(encindex)); +} + int rb_enc_str_asciionly_p(VALUE str) { - rb_encoding *enc = STR_ENC_GET(str); - - if (!rb_enc_asciicompat(enc)) - return FALSE; - else if (is_ascii_string(str)) - return TRUE; - return FALSE; + switch(ENC_CODERANGE(str)) { + case ENC_CODERANGE_UNKNOWN: + return rb_enc_str_asciicompat(str) && is_ascii_string(str); + case ENC_CODERANGE_7BIT: + return true; + default: + return false; + } } static inline void @@ -3762,6 +3776,32 @@ rb_str_resize(VALUE str, long len) return str; } +static void +str_ensure_available_capa(VALUE str, long len) +{ + str_modify_keep_cr(str); + + const int termlen = TERM_LEN(str); + long olen = RSTRING_LEN(str); + + if (RB_UNLIKELY(olen > LONG_MAX - len)) { + rb_raise(rb_eArgError, "string sizes too big"); + } + + long total = olen + len; + long capa = str_capacity(str, termlen); + + if (capa < total) { + if (total >= LONG_MAX / 2) { + capa = total; + } + while (total > capa) { + capa = 2 * capa + termlen; /* == 2*(capa+termlen)-termlen */ + } + RESIZE_CAPA_TERM(str, capa, termlen); + } +} + static VALUE str_buf_cat4(VALUE str, const char *ptr, long len, bool keep_cr) { @@ -4116,6 +4156,141 @@ rb_str_concat_multi(int argc, VALUE *argv, VALUE str) return str; } +/* + * call-seq: + * append_as_bytes(*objects) -> string + * + * Concatenates each object in +objects+ into +self+ without any encoding + * validation or conversion and returns +self+: + * + * s = 'foo' + * s.append_as_bytes(" \xE2\x82") # => "foo \xE2\x82" + * s.valid_encoding? # => false + * s.append_as_bytes("\xAC 12") + * s.valid_encoding? # => true + * + * For each given object +object+ that is an Integer, + * the value is considered a Byte. If the Integer is bigger + * than one byte, only the lower byte is considered, similar to String#setbyte: + * + * s = "" + * s.append_as_bytes(0, 257) # => "\u0000\u0001" + * + * Related: String#<<, String#concat, which do an encoding aware concatenation. + */ + +VALUE +rb_str_append_as_bytes(int argc, VALUE *argv, VALUE str) +{ + long needed_capacity = 0; + volatile VALUE t0; + enum ruby_value_type *types = ALLOCV_N(enum ruby_value_type, t0, argc); + + for (int index = 0; index < argc; index++) { + VALUE obj = argv[index]; + enum ruby_value_type type = types[index] = rb_type(obj); + switch (type) { + case T_FIXNUM: + case T_BIGNUM: + needed_capacity++; + break; + case T_STRING: + needed_capacity += RSTRING_LEN(obj); + break; + default: + rb_raise( + rb_eTypeError, + "wrong argument type %"PRIsVALUE" (expected String or Integer)", + rb_obj_class(obj) + ); + break; + } + } + + str_ensure_available_capa(str, needed_capacity); + char *sptr = RSTRING_END(str); + + for (int index = 0; index < argc; index++) { + VALUE obj = argv[index]; + enum ruby_value_type type = types[index]; + switch (type) { + case T_FIXNUM: + case T_BIGNUM: { + argv[index] = obj = rb_int_and(obj, INT2FIX(0xff)); + char byte = (char)(NUM2INT(obj) & 0xFF); + *sptr = byte; + sptr++; + break; + } + case T_STRING: { + const char *ptr; + long len; + RSTRING_GETMEM(obj, ptr, len); + memcpy(sptr, ptr, len); + sptr += len; + break; + } + default: + rb_bug("append_as_bytes arguments should have been validated"); + } + } + + STR_SET_LEN(str, RSTRING_LEN(str) + needed_capacity); + TERM_FILL(sptr, TERM_LEN(str)); /* sentinel */ + + int cr = ENC_CODERANGE(str); + switch (cr) { + case ENC_CODERANGE_7BIT: { + for (int index = 0; index < argc; index++) { + VALUE obj = argv[index]; + enum ruby_value_type type = types[index]; + switch (type) { + case T_FIXNUM: + case T_BIGNUM: { + if (!ISASCII(NUM2INT(obj))) { + goto clear_cr; + } + break; + } + case T_STRING: { + if (ENC_CODERANGE(obj) != ENC_CODERANGE_7BIT) { + goto clear_cr; + } + break; + } + default: + rb_bug("append_as_bytes arguments should have been validated"); + } + } + break; + } + case ENC_CODERANGE_VALID: + if (ENCODING_GET_INLINED(str) == ENCINDEX_ASCII_8BIT) { + goto keep_cr; + } + else { + goto clear_cr; + } + break; + default: + goto clear_cr; + break; + } + + RB_GC_GUARD(t0); + + clear_cr: + // If no fast path was hit, we clear the coderange. + // append_as_bytes is predominently meant to be used in + // buffering situation, hence it's likely the coderange + // will never be scanned, so it's not worth spending time + // precomputing the coderange except for simple and common + // situations. + ENC_CODERANGE_CLEAR(str); + keep_cr: + return str; +} + /* * call-seq: * string << object -> string @@ -4813,7 +4988,19 @@ rb_str_byteindex_m(int argc, VALUE *argv, VALUE str) return Qnil; } -#ifdef HAVE_MEMRCHR +#ifndef HAVE_MEMRCHR +static void* +memrchr(const char *search_str, int chr, long search_len) +{ + const char *ptr = search_str + search_len; + do { + if ((unsigned char)*(--ptr) == chr) return (void *)ptr; + } while (ptr >= search_str); + + return ((void *)0); +} +#endif + static long str_rindex(VALUE str, VALUE sub, const char *s, rb_encoding *enc) { @@ -4830,6 +5017,10 @@ str_rindex(VALUE str, VALUE sub, const char *s, rb_encoding *enc) c = *t & 0xff; searchlen = s - sbeg + 1; + if (memcmp(s, t, slen) == 0) { + return s - sbeg; + } + do { hit = memrchr(sbeg, c, searchlen); if (!hit) break; @@ -4845,29 +5036,6 @@ str_rindex(VALUE str, VALUE sub, const char *s, rb_encoding *enc) return -1; } -#else -static long -str_rindex(VALUE str, VALUE sub, const char *s, rb_encoding *enc) -{ - long slen; - char *sbeg, *e, *t; - - sbeg = RSTRING_PTR(str); - e = RSTRING_END(str); - t = RSTRING_PTR(sub); - slen = RSTRING_LEN(sub); - - while (s) { - if (memcmp(s, t, slen) == 0) { - return s - sbeg; - } - if (s <= sbeg) break; - s = rb_enc_prev_char(sbeg, s, e, enc); - } - - return -1; -} -#endif /* found index in byte */ static long @@ -4941,7 +5109,7 @@ rb_str_rindex(VALUE str, VALUE sub, long pos) * $~ #=> # * * Integer argument +offset+, if given and non-negative, specifies the maximum starting position in the - * string to _end_ the search: + * string to _end_ the search: * * 'foo'.rindex('o', 0) # => nil * 'foo'.rindex('o', 1) # => 1 @@ -5074,7 +5242,7 @@ rb_str_byterindex(VALUE str, VALUE sub, long pos) * $~ #=> # * * Integer argument +offset+, if given and non-negative, specifies the maximum starting byte-based position in the - * string to _end_ the search: + * string to _end_ the search: * * 'foo'.byterindex('o', 0) # => nil * 'foo'.byterindex('o', 1) # => 1 @@ -6397,8 +6565,8 @@ rb_pat_search(VALUE pat, VALUE str, long pos, int set_backref_str) * sub!(pattern, replacement) -> self or nil * sub!(pattern) {|match| ... } -> self or nil * - * Returns +self+ with only the first occurrence - * (not all occurrences) of the given +pattern+ replaced. + * Replaces the first occurrence (not all occurrences) of the given +pattern+ + * on +self+; returns +self+ if a replacement occurred, +nil+ otherwise. * * See {Substitution Methods}[rdoc-ref:String@Substitution+Methods]. * @@ -12738,7 +12906,7 @@ string_for_symbol(VALUE name) if (!RB_TYPE_P(name, T_STRING)) { VALUE tmp = rb_check_string_type(name); if (NIL_P(tmp)) { - rb_raise(rb_eTypeError, "%+"PRIsVALUE" is not a symbol", + rb_raise(rb_eTypeError, "%+"PRIsVALUE" is not a symbol nor a string", name); } name = tmp; @@ -12937,6 +13105,7 @@ Init_String(void) rb_define_method(rb_cString, "reverse", rb_str_reverse, 0); rb_define_method(rb_cString, "reverse!", rb_str_reverse_bang, 0); rb_define_method(rb_cString, "concat", rb_str_concat_multi, -1); + rb_define_method(rb_cString, "append_as_bytes", rb_str_append_as_bytes, -1); rb_define_method(rb_cString, "<<", rb_str_concat, 1); rb_define_method(rb_cString, "prepend", rb_str_prepend_multi, -1); rb_define_method(rb_cString, "crypt", rb_str_crypt, 1); diff --git a/string.rb b/string.rb index bec4e8cecfbf2c..941fda0c244b9f 100644 --- a/string.rb +++ b/string.rb @@ -29,9 +29,11 @@ # These methods perform substitutions: # # - String#sub: One substitution (or none); returns a new string. -# - String#sub!: One substitution (or none); returns +self+. +# - String#sub!: One substitution (or none); returns +self+ if any changes, +# +nil+ otherwise. # - String#gsub: Zero or more substitutions; returns a new string. -# - String#gsub!: Zero or more substitutions; returns +self+. +# - String#gsub!: Zero or more substitutions; returns +self+ if any changes, +# +nil+ otherwise. # # Each of these methods takes: # @@ -163,9 +165,9 @@ # # These instance methods make use of slicing: # -# - String#[] (also aliased as String#slice) returns a slice copied from +self+. -# - String#[]= returns a copy of +self+ with a slice replaced. -# - String#slice! returns +self+ with a slice removed. +# - String#[] (aliased as String#slice): returns a slice copied from +self+. +# - String#[]=: returns a copy of +self+ with a slice replaced. +# - String#slice!: returns +self+ with a slice removed. # # Each of the above methods takes arguments that determine the slice # to be copied or replaced. @@ -323,7 +325,7 @@ # # - #+@: Returns a string that is not frozen: +self+, if not frozen; # +self.dup+ otherwise. -# - #-@: Returns a string that is frozen: +self+, if already frozen; +# - #-@ (aliased as #dedup): Returns a string that is frozen: +self+, if already frozen; # +self.freeze+ otherwise. # - #freeze: Freezes +self+, if not already frozen; returns +self+. # @@ -331,7 +333,7 @@ # # _Counts_ # -# - #length, #size: Returns the count of characters (not bytes). +# - #length (aliased as #size): Returns the count of characters (not bytes). # - #empty?: Returns +true+ if +self.length+ is zero; +false+ otherwise. # - #bytesize: Returns the count of bytes. # - #count: Returns the count of substrings matching given strings. @@ -365,7 +367,7 @@ # # === Methods for Comparing # -# - #==, #===: Returns +true+ if a given other string has the same content as +self+. +# - #== (aliased as #===): Returns +true+ if a given other string has the same content as +self+. # - #eql?: Returns +true+ if the content is the same as the given other string. # - #<=>: Returns -1, 0, or 1 as a given other string is smaller than, # equal to, or larger than +self+. @@ -382,6 +384,8 @@ # # - #insert: Returns +self+ with a given string inserted at a given offset. # - #<<: Returns +self+ concatenated with a given string or integer. +# - #append_as_bytes: Returns +self+ concatenated with strings without performing any +# encoding validation or conversion. # # _Substitution_ # @@ -389,8 +393,8 @@ # returns +self+ if any changes, +nil+ otherwise. # - #gsub!: Replaces each substring that matches a given pattern with a given replacement string; # returns +self+ if any changes, +nil+ otherwise. -# - #succ!, #next!: Returns +self+ modified to become its own successor. -# - #replace: Returns +self+ with its entire content replaced by a given string. +# - #succ! (aliased as #next!): Returns +self+ modified to become its own successor. +# - #initialize_copy (aliased as #replace): Returns +self+ with its entire content replaced by a given string. # - #reverse!: Returns +self+ with its characters in reverse order. # - #setbyte: Sets the byte at a given integer offset to a given value; returns the argument. # - #tr!: Replaces specified characters in +self+ with specified replacement characters; @@ -460,7 +464,7 @@ # replaced with a given replacement string;. # - #gsub: Returns a copy of +self+ with each substring that matches a given pattern # replaced with a given replacement string. -# - #succ, #next: Returns the string that is the successor to +self+. +# - #succ (aliased as #next): Returns the string that is the successor to +self+. # - #reverse: Returns a copy of +self+ with its characters in reverse order. # - #tr: Returns a copy of +self+ with specified characters replaced with specified replacement characters. # - #tr_s: Returns a copy of +self+ with specified characters replaced with @@ -488,13 +492,13 @@ # - #chomp: Returns a copy of +self+ with a trailing record separator removed, if found. # - #chop: Returns a copy of +self+ with trailing newline characters or the last character removed. # - #squeeze: Returns a copy of +self+ with contiguous duplicate characters removed. -# - #[], #slice: Returns a substring determined by a given index, start/length, or range, or string. +# - #[] (aliased as #slice): Returns a substring determined by a given index, start/length, or range, or string. # - #byteslice: Returns a substring determined by a given index, start/length, or range. # - #chr: Returns the first character. # # _Duplication_ # -# - #to_s, $to_str: If +self+ is a subclass of +String+, returns +self+ copied into a +String+; +# - #to_s (aliased as #to_str): If +self+ is a subclass of +String+, returns +self+ copied into a +String+; # otherwise, returns +self+. # # === Methods for Converting to Non-+String+ @@ -537,7 +541,7 @@ # Strings and Symbols # # - #inspect: Returns copy of +self+, enclosed in double-quotes, with special characters escaped. -# - #to_sym, #intern: Returns the symbol corresponding to +self+. +# - #intern (aliased as #to_sym): Returns the symbol corresponding to +self+. # # === Methods for Iterating # diff --git a/struct.c b/struct.c index 544228f76b9582..1509a230514ff0 100644 --- a/struct.c +++ b/struct.c @@ -1640,7 +1640,7 @@ rb_struct_dig(int argc, VALUE *argv, VALUE self) * * * Note that member-less \Data is acceptable and might be a useful technique - * for defining several homogenous data classes, like + * for defining several homogeneous data classes, like * * class HTTPFetcher * Response = Data.define(:body) @@ -2131,7 +2131,7 @@ rb_data_inspect(VALUE s) * === Methods for Querying * * - #hash: Returns the integer hash code. - * - #length, #size: Returns the number of members. + * - #size (aliased as #length): Returns the number of members. * * === Methods for Comparing * @@ -2143,13 +2143,13 @@ rb_data_inspect(VALUE s) * === Methods for Fetching * * - #[]: Returns the value associated with a given member name. - * - #to_a, #values, #deconstruct: Returns the member values in +self+ as an array. + * - #to_a (aliased as #values, #deconstruct): Returns the member values in +self+ as an array. * - #deconstruct_keys: Returns a hash of the name/value pairs * for given member names. * - #dig: Returns the object in nested objects that is specified * by a given member name and additional arguments. * - #members: Returns an array of the member names. - * - #select, #filter: Returns an array of member values from +self+, + * - #select (aliased as #filter): Returns an array of member values from +self+, * as selected by the given block. * - #values_at: Returns an array containing values for given member names. * @@ -2164,7 +2164,7 @@ rb_data_inspect(VALUE s) * * === Methods for Converting * - * - #inspect, #to_s: Returns a string representation of +self+. + * - #inspect (aliased as #to_s): Returns a string representation of +self+. * - #to_h: Returns a hash of the member name/value pairs in +self+. * */ diff --git a/template/Makefile.in b/template/Makefile.in index c9dc768463d85a..d970827329902b 100644 --- a/template/Makefile.in +++ b/template/Makefile.in @@ -252,7 +252,6 @@ INSTALLED_LIST= .installed.list NEWLINE_C = enc/trans/newline.c MINIPRELUDE_C = miniprelude.c -GOLF_PRELUDE_C= golf_prelude.c RBCONFIG = .rbconfig.time MAINSRC = $(MAINOBJ:.$(OBJEXT)=.c) @@ -361,7 +360,7 @@ install-cross: $(arch)-fake.rb $(RBCONFIG) rbconfig.rb $(arch_hdrdir)/ruby/confi $(Q) sed '/^\$$:\.unshift/q' $(arch)-fake.rb > fake.rb $(Q) $(BASERUBY) -p \ -e '~/^\s*CONFIG\["LDFLAGS"\]/ and' \ - -e '$$_[/(?=\s*"$$)/] = %q[ #{(CONFIG["LIBPATHFLAG"]%File.dirname(__FILE__)).strip}]' \ + -e '$$_[/(?=\s*"$$)/] = %q[ #{CONFIG["LIBPATHFLAG"]%File.dirname(__FILE__)}]' \ rbconfig.rb > fake-rbconfig.rb $(INSTALL_SCRIPT) fake.rb $(XRUBY_RUBYLIBDIR)/$(arch)/fake.rb $(INSTALL_SCRIPT) fake-rbconfig.rb $(XRUBY_RUBYLIBDIR)/$(arch)/rbconfig.rb @@ -453,9 +452,11 @@ gc_impl.$(OBJEXT): gc/$(BUILTIN_GC).c probes.h @$(ECHO) compiling $< $(Q) $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -c $< +PREFIXED_SYMBOL = name +_PREFIXED_SYMBOL = TOKEN_PASTE($(SYMBOL_PREFIX),name) .$(ASMEXT).$(OBJEXT): @$(ECHO) assembling $< - $(Q) $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ -DSYMBOL_PREFIX=$(SYMBOL_PREFIX) -c $< + $(Q) $(CC) $(CFLAGS) $(XCFLAGS) $(CPPFLAGS) $(COUTFLAG)$@ "-DPREFIXED_SYMBOL(name)=$($(SYMBOL_PREFIX)PREFIXED_SYMBOL)" -c $< .c.$(ASMEXT): @$(ECHO) translating $< @@ -525,9 +526,9 @@ ext/realclean:: ext/realclean.sub .bundle/distclean:: .bundle/distclean.sub .bundle/realclean:: .bundle/realclean.sub -ext/clean.sub:: ext/clean.mk -ext/distclean.sub:: ext/distclean.mk -ext/realclean.sub:: ext/realclean.mk +.bundle/clean.sub:: ext/clean.mk +.bundle/distclean.sub:: ext/distclean.mk +.bundle/realclean.sub:: ext/realclean.mk ext/clean.sub ext/distclean.sub ext/realclean.sub \ .bundle/clean.sub .bundle/distclean.sub .bundle/realclean.sub:: diff --git a/template/exts.mk.tmpl b/template/exts.mk.tmpl index ac6b280188e39a..0abbca1f067c7f 100644 --- a/template/exts.mk.tmpl +++ b/template/exts.mk.tmpl @@ -22,14 +22,19 @@ end confexts &&= File.read(confexts).scan(/^(?:ext|gem)s: (.*\.mk)/).flatten rescue nil confexts ||= [] macros["old_extensions"] = [] +distclean = [] contpat = /(?>(?>[^\\\n]|\\.)*\\\n)*(?>[^\\\n]|\\.)*/ Dir.glob("{ext,.bundle/gems}/*/exts.mk") do |e| gem = e.start_with?(".bundle/gems/") + dir = File.dirname(e) s = File.read(e) s.scan(/^(extensions|SUBMAKEOPTS|EXT[A-Z]+|MFLAGS|MESSAGE_(?:BEGIN|END)|NOTE_[A-Z]+)[ \t]*=[ \t]*(#{contpat})$/o) do |n, v| v.gsub!(/\\\n[ \t]*/, ' ') - next if v.empty? + if v.empty? + distclean << dir if n == "extensions" + next + end n = "old_extensions" if n == "extensions" and !confexts.include?(e) v = v.split m = macros[n] ||= [] @@ -69,6 +74,10 @@ Dir.glob("{ext,.bundle/gems}/*/exts.mk") do |e| end end deps.uniq! +macros["cleandirs"] = distclean.map {|d| "#{d}/."} +deps.map! {|d| + /\A(?:dist|real)?clean(?=:)/ =~ d ? d + " $(cleandirs:/.=/#{$&})" : d +} # NOTE: Only if extensions are configured as static and dynamic heterogeneously # (e.g. --with-static-linked-ext=foo or ext/Setup can mix static and dynamic @@ -100,7 +109,6 @@ def self.column @erbout[/^.*\z/].scan(/\t|([^\t]+)/) {|s,| w += (s ? s.size : 8 - w % 8)} w end -targets = %w[all static install install-so install-rb clean distclean realclean] objext = RbConfig::CONFIG["OBJEXT"] if gnumake submake = "$(MAKE) -C $(@D)" @@ -145,23 +153,26 @@ ext/extinit.<%=objext%>: % exts = (macros["extensions"] + macros["old_extensions"]) % exts.map! {|e|e.chomp("/.")}.sort -% targets.each do |tgt| +% %w[all static install install-so install-rb].each do |tgt| % exts.each do |d| -% t = "#{d}/#{tgt}" -% if /^(dist|real)?clean$/ =~ tgt -% deps = exts.select {|e|e.start_with?("#{d}/")}.map {|e|"#{e}/#{tgt}"} -% pd = ' ' + deps.join(' ') unless deps.empty? -% else -% pext = File.dirname(d) -% pd = " #{pext}/#{tgt}" if exts.include?(pext) -% end -<%=t%>:<%=pd%> -% if /^(dist|real)clean$/ =~ tgt +% pext = File.dirname(d) +<%=d%>/<%=tgt%>:<% if exts.include?(pext) %> <%=pext%>/<%=tgt%><% end %> + $(Q)<%= submake %><%=mflags%> V=$(V) $(@F) +% end +% end +% distclean = exts | distclean +% %w[clean distclean realclean].each do |tgt| +% distclean.each do |d| +% deps = exts.select {|e|e.start_with?("#{d}/")}.map {|e|"#{e}/#{tgt}"} +<%=d%>/<%=tgt%>:<% unless deps.empty? %> <%=deps.join(' ')%><% end %> +% unless tgt == "clean" $(ECHO) $(@F)ing $(@D) % end +% if exts.include?(d) $(Q)<%= submake %><%=mflags%> V=$(V) $(@F) -% if /^(dist|real)clean$/ =~ tgt - $(Q)$(RM) <%=t[%r[\A(?:\.[^/]+/)?(?:[^/]+/){2}]]%>exts.mk +% end +% unless tgt == "clean" + $(Q)$(RM) <%=d[%r[\A(?:\.[^/]+/)?(?:[^/]+/)?[^/]+]]%>/exts.mk -$(Q)$(RMDIRS) $(@D) % end % end diff --git a/template/fake.rb.in b/template/fake.rb.in index 51d8b5a908375c..c4bd21af53596e 100644 --- a/template/fake.rb.in +++ b/template/fake.rb.in @@ -24,9 +24,8 @@ File.read(File.join(arg['srcdir'], 'version.c')). scan(/rb_define_global_const\("(RUBY_\w+)",[^;]*?\bMK(?:INT|(STR))\(([^()]*)\)/m) do |n, s, v| version[n] = arg[v] || src.value(v) || (s ? v : 0) end -arg['RUBY_DESCRIPTION_WITH_RJIT'] = src.value('description_with_rjit') || 'description_with_rjit' -arg['RUBY_DESCRIPTION_WITH_YJIT'] = src.value('description_with_yjit') || 'description_with_yjit' -%>baseruby="<%=arg['BASERUBY']%>" +-%> +baseruby="<%=arg['BASERUBY']%>" _\ =begin _= @@ -39,23 +38,14 @@ exec $ruby "$r" "$@" class Object remove_const :CROSS_COMPILING if defined?(CROSS_COMPILING) CROSS_COMPILING = RUBY_PLATFORM + options = remove_const(:RUBY_DESCRIPTION)[/( \+[^\[\]\+]+)*(?= \[\S+\]\z)/] constants.grep(/^RUBY_/) {|n| remove_const n} % arg['versions'].each {|n, v| - <%=n%> = <%if n=='RUBY_DESCRIPTION' %>case - when RubyVM.const_defined?(:RJIT) && RubyVM::RJIT.enabled? - <%=arg['RUBY_DESCRIPTION_WITH_RJIT'].inspect%> - when RubyVM.const_defined?(:YJIT) && RubyVM::YJIT.enabled? - <%=arg['RUBY_DESCRIPTION_WITH_YJIT'].inspect%> - else - <%=v.inspect%> - end.then do |v| - if defined?(GC::MMTk) && GC::MMTk.enabled? - insertion_point = v.rindex('[') || v.length - (v[...insertion_point] + "+MMTK(#{GC::MMTk.plan_name}) " + v[insertion_point...]).freeze - else - v - end - end<%else%><%=v.inspect%><%end%> + <%=n%> = <%if n=='RUBY_DESCRIPTION' + v1, v2 = v.split(/(?= \[\S+\]\z)/) + %><%=v1.dump.chomp('"')%>#{options}<%= + v2.dump[1..-1]%>.freeze<% + else%><%=v.inspect%><%end%> % } end builddir = File.dirname(File.expand_path(__FILE__)) diff --git a/template/limits.c.tmpl b/template/limits.c.tmpl index d1e5b44592e851..f7867ded9a1950 100644 --- a/template/limits.c.tmpl +++ b/template/limits.c.tmpl @@ -82,7 +82,7 @@ Init_limits(void) #define MAX2NUM(name) ULONG2NUM(name ## _MAX) #define MIN2NUM(name) LONG2NUM(name ## _MIN) #endif -#define DEFINE(k, v) rb_hash_aset(h, rb_str_new_cstr(#k), v) +#define DEFINE(k, v) rb_hash_aset(h, rb_usascii_str_new_lit(#k), v) % limits.each do |type| #ifdef <%= type %>_MAX diff --git a/template/prelude.c.tmpl b/template/prelude.c.tmpl index 125a2934234f21..675973b9133330 100644 --- a/template/prelude.c.tmpl +++ b/template/prelude.c.tmpl @@ -21,16 +21,11 @@ class Prelude def initialize(output, preludes, vpath) @output = output @vpath = vpath - @prelude_count = 0 @builtin_count = 0 @preludes = {} @mains = preludes.map do |filename| - if prelude = filename.end_with?("golf_prelude.rb") - @prelude_count += 1 - else - @builtin_count += 1 - end - translate(filename, (filename unless prelude))[0] + @builtin_count += 1 + translate(filename, filename)[0] end @preludes.delete_if {|_, (_, _, lines, sub)| sub && lines.empty?} end @@ -58,7 +53,7 @@ class Prelude if line.size > LINE_LIMIT raise "#{filename}:#{lines.size+1}: too long line" end - line.sub!(/require(_relative)?\s*\(?\s*(["'])(.*?)(?:\.rb)?\2\)?/) do + line.sub!(/require(_relative)?\s*\(?\s*([\"\'])(.*?)(?:\.rb)?\2\)?/) do orig, rel, path = $&, $2, $3 if rel path = File.join(File.dirname(filename), path) @@ -137,137 +132,38 @@ static const struct { COMPILER_WARNING_POP -% unless preludes.empty? #define PRELUDE_NAME(n) rb_usascii_str_new_static(prelude_name##n, sizeof(prelude_name##n)-1) #define PRELUDE_CODE(n) rb_utf8_str_new_static(prelude_code##n.L0, sizeof(prelude_code##n)) -static VALUE -prelude_ast_value(VALUE name, VALUE code, int line) -{ - rb_ast_t *ast; - VALUE ast_value = rb_parser_compile_string_path(rb_parser_new(), name, code, line); - ast = rb_ruby_ast_data_get(ast_value); - if (!ast || !ast->body.root) { - if (ast) rb_ast_dispose(ast); - rb_exc_raise(rb_errinfo()); - } - return ast_value; -} - -static void -pm_prelude_load(pm_parse_result_t *result, VALUE name, VALUE code, int line) -{ - pm_options_line_set(&result->options, line); - VALUE error = pm_parse_string(result, code, name, NULL); - - if (!NIL_P(error)) { - pm_parse_result_free(result); - rb_exc_raise(error); - } -} - % end % if @builtin_count > 0 -#define PRELUDE_VAST(n, name_str, start_line) \ +#define PRELUDE_MATCH(n) \ (((sizeof(prelude_name<%='##'%><%=%>n) - prefix_len - 2) == namelen) && \ - (strncmp(prelude_name<%='##'%><%=%>n + prefix_len, feature_name, namelen) == 0) ? \ - prelude_ast_value((name_str) = PRELUDE_NAME(n), PRELUDE_CODE(n), start_line) : Qnil) + (strncmp(prelude_name<%='##'%><%=%>n + prefix_len, feature_name, namelen) == 0)) VALUE -rb_builtin_ast_value(const char *feature_name, VALUE *name_str) +rb_builtin_find(const char *feature_name, VALUE *name_str, int *start_line) { const size_t prefix_len = rb_strlen_lit("<%=%>, *name_str, <%=start_line%>))) return ast_value; -% end -% end - return ast_value; -} - -bool -pm_builtin_ast_value(pm_parse_result_t *result, const char *feature_name, VALUE *name_str) -{ - const size_t prefix_len = rb_strlen_lit(") - prefix_len - 2 == namelen) && - (strncmp(prelude_name<%= i %> + prefix_len, feature_name, namelen) == 0) - ) { - *name_str = PRELUDE_NAME(<%= i %>); - pm_prelude_load(result, *name_str, PRELUDE_CODE(<%= i %>), <%= start_line %>); - return true; - } + if (PRELUDE_MATCH(<%=i%>)) return PRELUDE_FOUND(<%=i%>, <%=start_line%>); % end % end +#undef PRELUDE_FOUND - return false; + return Qnil; } -% end -% if @prelude_count > 0 -COMPILER_WARNING_PUSH -#if GCC_VERSION_SINCE(4, 2, 0) -COMPILER_WARNING_ERROR(-Wmissing-field-initializers) -#endif -static void -prelude_eval(VALUE code, VALUE name, int line) -{ - static const rb_compile_option_t optimization = { - TRUE, /* unsigned int inline_const_cache; */ - TRUE, /* unsigned int peephole_optimization; */ - FALSE,/* unsigned int tailcall_optimization; */ - TRUE, /* unsigned int specialized_instruction; */ - TRUE, /* unsigned int operands_unification; */ - TRUE, /* unsigned int instructions_unification; */ - TRUE, /* unsigned int frozen_string_literal; */ - FALSE, /* unsigned int debug_frozen_string_literal; */ - FALSE, /* unsigned int coverage_enabled; */ - 0, /* int debug_level; */ - }; - - if (*rb_ruby_prism_ptr()) { - pm_parse_result_t result = { 0 }; - pm_prelude_load(&result, name, code, line); - rb_iseq_eval(pm_iseq_new_with_opt(&result.node, name, name, Qnil, line, - NULL, 0, ISEQ_TYPE_TOP, &optimization)); - pm_parse_result_free(&result); - } - else { - rb_ast_t *ast; - VALUE ast_value = prelude_ast_value(name, code, line); - ast = rb_ruby_ast_data_get(ast_value); - rb_iseq_eval(rb_iseq_new_with_opt(ast_value, name, name, Qnil, line, - NULL, 0, ISEQ_TYPE_TOP, &optimization, - Qnil)); - rb_ast_dispose(ast); - } -} -COMPILER_WARNING_POP - -% end %end % init_name = @output && @output[/\w+(?=_prelude.c\b)/] || 'prelude' void Init_<%=init_name%><%=%>(void) { -%unless @prelude_count.zero? -% preludes.each do |i, prelude, lines, sub, start_line| -% next if sub - prelude_eval(PRELUDE_CODE(<%=i%><%=%>), PRELUDE_NAME(<%=i%><%=%>), <%=start_line%><%=%>); -% end - -#if 0 -% preludes.length.times {|i| - printf("%.*s", (int)sizeof(prelude_code<%=i%><%=%>), prelude_code<%=i%><%=%>.L0); -% } -#endif -%end } <%end -%> diff --git a/template/sizes.c.tmpl b/template/sizes.c.tmpl index 909902fd172ad7..abc3b5c90879f0 100644 --- a/template/sizes.c.tmpl +++ b/template/sizes.c.tmpl @@ -47,8 +47,8 @@ Init_sizeof(void) VALUE mRbConfig = rb_define_module("RbConfig"); rb_define_const(mRbConfig, "SIZEOF", s); -#define DEFINE(type, size) rb_hash_aset(s, rb_str_new_cstr(#type), INT2FIX(SIZEOF_##size)) -#define DEFINE_SIZE(type) rb_hash_aset(s, rb_str_new_cstr(#type), INT2FIX(sizeof(type))) +#define DEFINE(type, size) rb_hash_aset(s, rb_usascii_str_new_lit(#type), INT2FIX(SIZEOF_##size)) +#define DEFINE_SIZE(type) rb_hash_aset(s, rb_usascii_str_new_lit(#type), INT2FIX(sizeof(type))) % types.each do |type| % if sizes[type] diff --git a/test/-ext-/bug_reporter/test_bug_reporter.rb b/test/-ext-/bug_reporter/test_bug_reporter.rb index 8c810c27417581..c7b2a5b3703afd 100644 --- a/test/-ext-/bug_reporter/test_bug_reporter.rb +++ b/test/-ext-/bug_reporter/test_bug_reporter.rb @@ -6,7 +6,7 @@ class TestBugReporter < Test::Unit::TestCase def test_bug_reporter_add - pend "macOS 15 beta is not working with this test" if /darwin/ =~ RUBY_PLATFORM && /15/ =~ `sw_vers -productVersion` + pend "macOS 15 beta is not working with this test" if macos?(15) omit "flaky with RJIT" if JITSupport.rjit_enabled? description = RUBY_DESCRIPTION diff --git a/test/-ext-/tracepoint/test_tracepoint.rb b/test/-ext-/tracepoint/test_tracepoint.rb index 48ffe2605c1c34..bf66d8f10514ff 100644 --- a/test/-ext-/tracepoint/test_tracepoint.rb +++ b/test/-ext-/tracepoint/test_tracepoint.rb @@ -66,15 +66,15 @@ def test_after_gc_start_hook_with_GC_stress count = 0 hook = proc {count += 1} def run(hook) - stress, GC.stress = GC.stress, false - Bug.after_gc_start_hook = hook - begin - GC.stress = true - 3.times {Object.new} - ensure - GC.stress = stress - Bug.after_gc_start_hook = nil - end + stress, GC.stress = GC.stress, false + Bug.after_gc_start_hook = hook + begin + GC.stress = true + 3.times {Object.new} + ensure + GC.stress = stress + Bug.after_gc_start_hook = nil + end end run(hook) puts count diff --git a/test/.excludes-prism/TestM17N.rb b/test/.excludes-parsey/TestM17N.rb similarity index 100% rename from test/.excludes-prism/TestM17N.rb rename to test/.excludes-parsey/TestM17N.rb diff --git a/test/.excludes-prism/TestMixedUnicodeEscape.rb b/test/.excludes-parsey/TestMixedUnicodeEscape.rb similarity index 100% rename from test/.excludes-prism/TestMixedUnicodeEscape.rb rename to test/.excludes-parsey/TestMixedUnicodeEscape.rb diff --git a/test/.excludes-prism/TestRubyLiteral.rb b/test/.excludes-parsey/TestRubyLiteral.rb similarity index 100% rename from test/.excludes-prism/TestRubyLiteral.rb rename to test/.excludes-parsey/TestRubyLiteral.rb diff --git a/test/coverage/test_coverage.rb b/test/coverage/test_coverage.rb index 4773280cae0f49..2fe7f1b0b96c26 100644 --- a/test/coverage/test_coverage.rb +++ b/test/coverage/test_coverage.rb @@ -649,9 +649,9 @@ def test_clear_with_lines end exp = [ - "{:lines=>[1, 0, 0, nil, 0, nil, nil]}", - "{:lines=>[0, 1, 1, nil, 0, nil, nil]}", - "{:lines=>[0, 1, 0, nil, 1, nil, nil]}", + { lines: [1, 0, 0, nil, 0, nil, nil] }.inspect, + { lines: [0, 1, 1, nil, 0, nil, nil] }.inspect, + { lines: [0, 1, 0, nil, 1, nil, nil] }.inspect, ] assert_in_out_err(ARGV, <<-"end;", exp, []) Coverage.start(lines: true) @@ -682,10 +682,10 @@ def test_clear_with_branches end exp = [ - "{:branches=>{[:if, 0, 2, 2, 6, 5]=>{[:then, 1, 3, 4, 3, 8]=>0, [:else, 2, 5, 4, 5, 12]=>0}}}", - "{:branches=>{[:if, 0, 2, 2, 6, 5]=>{[:then, 1, 3, 4, 3, 8]=>1, [:else, 2, 5, 4, 5, 12]=>0}}}", - "{:branches=>{[:if, 0, 2, 2, 6, 5]=>{[:then, 1, 3, 4, 3, 8]=>0, [:else, 2, 5, 4, 5, 12]=>1}}}", - "{:branches=>{[:if, 0, 2, 2, 6, 5]=>{[:then, 1, 3, 4, 3, 8]=>0, [:else, 2, 5, 4, 5, 12]=>1}}}", + { branches: { [:if, 0, 2, 2, 6, 5] => { [:then, 1, 3, 4, 3, 8] => 0, [:else, 2, 5, 4, 5, 12] => 0 } } }.inspect, + { branches: { [:if, 0, 2, 2, 6, 5] => { [:then, 1, 3, 4, 3, 8] => 1, [:else, 2, 5, 4, 5, 12] => 0 } } }.inspect, + { branches: { [:if, 0, 2, 2, 6, 5] => { [:then, 1, 3, 4, 3, 8] => 0, [:else, 2, 5, 4, 5, 12] => 1 } } }.inspect, + { branches: { [:if, 0, 2, 2, 6, 5] => { [:then, 1, 3, 4, 3, 8] => 0, [:else, 2, 5, 4, 5, 12] => 1 } } }.inspect, ] assert_in_out_err(ARGV, <<-"end;", exp, []) Coverage.start(branches: true) @@ -718,10 +718,10 @@ def test_clear_with_methods end exp = [ - "{:methods=>{[Object, :foo, 1, 0, 7, 3]=>0}}", - "{:methods=>{[Object, :foo, 1, 0, 7, 3]=>1}}", - "{:methods=>{[Object, :foo, 1, 0, 7, 3]=>1}}", - "{:methods=>{[Object, :foo, 1, 0, 7, 3]=>1}}" + { methods: { [Object, :foo, 1, 0, 7, 3] => 0 } }.inspect, + { methods: { [Object, :foo, 1, 0, 7, 3] => 1 } }.inspect, + { methods: { [Object, :foo, 1, 0, 7, 3] => 1 } }.inspect, + { methods: { [Object, :foo, 1, 0, 7, 3] => 1 } }.inspect ] assert_in_out_err(ARGV, <<-"end;", exp, []) Coverage.start(methods: true) @@ -754,10 +754,10 @@ def test_clear_with_oneshot_lines end exp = [ - "{:oneshot_lines=>[1]}", - "{:oneshot_lines=>[2, 3]}", - "{:oneshot_lines=>[5]}", - "{:oneshot_lines=>[]}", + { oneshot_lines: [1] }.inspect, + { oneshot_lines: [2, 3] }.inspect, + { oneshot_lines: [5] }.inspect, + { oneshot_lines: [] }.inspect, ] assert_in_out_err(ARGV, <<-"end;", exp, []) Coverage.start(oneshot_lines: true) diff --git a/test/error_highlight/test_error_highlight.rb b/test/error_highlight/test_error_highlight.rb index 5f4c386990c76d..f0da5b5e62385d 100644 --- a/test/error_highlight/test_error_highlight.rb +++ b/test/error_highlight/test_error_highlight.rb @@ -197,6 +197,15 @@ def test_CALL_arg_6 end end + def test_CALL_arg_7 + assert_error_message(ArgumentError, <<~END) do +tried to create Proc object without a block (ArgumentError) + END + + Proc.new + end + end + def test_QCALL_1 assert_error_message(NoMethodError, <<~END) do undefined method `foo' for #{ ONE_RECV_MESSAGE } @@ -1232,7 +1241,7 @@ def custom_formatter.message_for(spot) assert_error_message(NoMethodError, <<~END) do undefined method `time' for #{ ONE_RECV_MESSAGE } -{:first_lineno=>#{ __LINE__ + 3 }, :first_column=>7, :last_lineno=>#{ __LINE__ + 3 }, :last_column=>12, :snippet=>" 1.time {}\\n"} +#{{ first_lineno: __LINE__ + 3, first_column: 7, last_lineno: __LINE__ + 3, last_column: 12, snippet: " 1.time {}\n" }.inspect} END 1.time {} diff --git a/test/fiber/test_io.rb b/test/fiber/test_io.rb index 0e3e086d5aee52..4891c607f7224d 100644 --- a/test/fiber/test_io.rb +++ b/test/fiber/test_io.rb @@ -234,4 +234,45 @@ def test_backquote assert_equal "ok\n", result end + + # Tests for https://bugs.ruby-lang.org/issues/20723 which would + # otherwise deadlock this test. + def test_close_while_reading_on_thread + # Windows has UNIXSocket, but only with VS 2019+ + omit "UNIXSocket is not defined!" unless defined?(UNIXSocket) + + i, o = Socket.pair(:UNIX, :STREAM) + if RUBY_PLATFORM=~/mswin|mingw/ + i.nonblock = true + o.nonblock = true + end + + reading_thread = Thread.new do + Thread.current.report_on_exception = false + i.wait_readable + end + + fs_thread = Thread.new do + # Wait until the reading thread is blocked on read: + Thread.pass until reading_thread.status == "sleep" + + scheduler = Scheduler.new + Fiber.set_scheduler scheduler + Fiber.schedule do + i.close + end + end + + assert_raise(IOError) { reading_thread.join } + refute_nil fs_thread.join(5), "expected thread to terminate within 5 seconds" + + assert_predicate(i, :closed?) + ensure + fs_thread&.kill + fs_thread&.join rescue nil + reading_thread&.kill + reading_thread&.join rescue nil + i&.close + o&.close + end end diff --git a/test/fiddle/helper.rb b/test/fiddle/helper.rb index e470f5a2764396..037768cdb42f26 100644 --- a/test/fiddle/helper.rb +++ b/test/fiddle/helper.rb @@ -4,11 +4,19 @@ require 'test/unit' require 'fiddle' +# puts("Fiddle::VERSION: #{Fiddle::VERSION}") + # FIXME: this is stolen from DL and needs to be refactored. libc_so = libm_so = nil -case RUBY_PLATFORM +if RUBY_ENGINE == "jruby" + # "jruby ... [x86_64-linux]" -> "x86_64-linux" + ruby_platform = RUBY_DESCRIPTION.split(" ").last[1..-2] +else + ruby_platform = RUBY_PLATFORM +end +case ruby_platform when /cygwin/ libc_so = "cygwin1.dll" libm_so = "cygwin1.dll" @@ -147,6 +155,7 @@ end if !libc_so || !libm_so + require "envutil" ruby = EnvUtil.rubybin # When the ruby binary is 32-bit and the host is 64-bit, # `ldd ruby` outputs "not a dynamic executable" message. diff --git a/test/fiddle/test_closure.rb b/test/fiddle/test_closure.rb index abb6bdbd32a90f..787a9b635a37a4 100644 --- a/test/fiddle/test_closure.rb +++ b/test/fiddle/test_closure.rb @@ -8,6 +8,8 @@ module Fiddle class TestClosure < Fiddle::TestCase def teardown super + # We can't use ObjectSpace with JRuby. + return if RUBY_ENGINE == "jruby" # Ensure freeing all closures. # See https://github.com/ruby/fiddle/issues/102#issuecomment-1241763091 . not_freed_closures = [] @@ -31,19 +33,6 @@ def test_argument_errors end end - def test_type_symbol - Closure.create(:int, [:void]) do |closure| - assert_equal([ - TYPE_INT, - [TYPE_VOID], - ], - [ - closure.instance_variable_get(:@ctype), - closure.instance_variable_get(:@args), - ]) - end - end - def test_call closure_class = Class.new(Closure) do def call @@ -69,6 +58,11 @@ def call thing end def test_const_string + if RUBY_ENGINE == "jruby" + omit("Closure with :const_string works but " + + "Function with :const_string doesn't work with JRuby") + end + closure_class = Class.new(Closure) do def call(string) @return_string = "Hello! #{string}" @@ -94,7 +88,12 @@ def call(bool) end def test_free - Closure.create(:int, [:void]) do |closure| + closure_class = Class.new(Closure) do + def call + 10 + end + end + closure_class.create(:int, [:void]) do |closure| assert(!closure.freed?) closure.free assert(closure.freed?) @@ -115,6 +114,10 @@ def test_block_caller end def test_memsize_ruby_dev_42480 + if RUBY_ENGINE == "jruby" + omit("We can't use ObjectSpace with JRuby") + end + require 'objspace' n = 10000 n.times do diff --git a/test/fiddle/test_fiddle.rb b/test/fiddle/test_fiddle.rb index 9bddb056c90c08..b247ae15cb9c84 100644 --- a/test/fiddle/test_fiddle.rb +++ b/test/fiddle/test_fiddle.rb @@ -6,6 +6,10 @@ class TestFiddle < Fiddle::TestCase def test_nil_true_etc + if RUBY_ENGINE == "jruby" + omit("Fiddle::Q* aren't supported with JRuby") + end + assert_equal Fiddle::Qtrue, Fiddle.dlwrap(true) assert_equal Fiddle::Qfalse, Fiddle.dlwrap(false) assert_equal Fiddle::Qnil, Fiddle.dlwrap(nil) diff --git a/test/fiddle/test_func.rb b/test/fiddle/test_func.rb index df79539e76c936..5d69cc5f11ad3d 100644 --- a/test/fiddle/test_func.rb +++ b/test/fiddle/test_func.rb @@ -26,6 +26,10 @@ def test_sin end def test_string + if RUBY_ENGINE == "jruby" + omit("Function that returns string doesn't work with JRuby") + end + under_gc_stress do f = Function.new(@libc['strcpy'], [TYPE_VOIDP, TYPE_VOIDP], TYPE_VOIDP) buff = +"000" @@ -82,6 +86,8 @@ def call(x, y) assert_equal("1349", buff, bug4929) end ensure + # We can't use ObjectSpace with JRuby. + return if RUBY_ENGINE == "jruby" # Ensure freeing all closures. # See https://github.com/ruby/fiddle/issues/102#issuecomment-1241763091 . not_freed_closures = [] @@ -113,37 +119,36 @@ def test_snprintf :variadic, ], :int) - output_buffer = " " * 1024 - output = Pointer[output_buffer] + Pointer.malloc(1024, Fiddle::RUBY_FREE) do |output| + written = snprintf.call(output, + output.size, + "int: %d, string: %.*s, const string: %s\n", + :int, -29, + :int, 4, + :voidp, "Hello", + :const_string, "World") + assert_equal("int: -29, string: Hell, const string: World\n", + output[0, written]) - written = snprintf.call(output, - output.size, - "int: %d, string: %.*s, const string: %s\n", - :int, -29, - :int, 4, - :voidp, "Hello", - :const_string, "World") - assert_equal("int: -29, string: Hell, const string: World\n", - output_buffer[0, written]) - - string_like_class = Class.new do - def initialize(string) - @string = string - end + string_like_class = Class.new do + def initialize(string) + @string = string + end - def to_str - @string + def to_str + @string + end end + written = snprintf.call(output, + output.size, + "string: %.*s, const string: %s, uint: %u\n", + :int, 2, + :voidp, "Hello", + :const_string, string_like_class.new("World"), + :int, 29) + assert_equal("string: He, const string: World, uint: 29\n", + output[0, written]) end - written = snprintf.call(output, - output.size, - "string: %.*s, const string: %s, uint: %u\n", - :int, 2, - :voidp, "Hello", - :const_string, string_like_class.new("World"), - :int, 29) - assert_equal("string: He, const string: World, uint: 29\n", - output_buffer[0, written]) end def test_rb_memory_view_available_p diff --git a/test/fiddle/test_function.rb b/test/fiddle/test_function.rb index 2bd67c9da1cdf7..b6ae8c14bcb514 100644 --- a/test/fiddle/test_function.rb +++ b/test/fiddle/test_function.rb @@ -16,6 +16,8 @@ def setup end def teardown + # We can't use ObjectSpace with JRuby. + return if RUBY_ENGINE == "jruby" # Ensure freeing all closures. # See https://github.com/ruby/fiddle/issues/102#issuecomment-1241763091 . not_freed_closures = [] @@ -36,6 +38,10 @@ def test_name end def test_need_gvl? + if RUBY_ENGINE == "jruby" + omit("rb_str_dup() doesn't exist in JRuby") + end + libruby = Fiddle.dlopen(nil) rb_str_dup = Function.new(libruby['rb_str_dup'], [:voidp], @@ -103,6 +109,10 @@ def call one end def test_last_error + if RUBY_ENGINE == "jruby" + omit("Fiddle.last_error doesn't work with JRuby") + end + func = Function.new(@libc['strcpy'], [TYPE_VOIDP, TYPE_VOIDP], TYPE_VOIDP) assert_nil Fiddle.last_error @@ -135,6 +145,10 @@ def test_win32_last_socket_error end def test_strcpy + if RUBY_ENGINE == "jruby" + omit("Function that returns string doesn't work with JRuby") + end + f = Function.new(@libc['strcpy'], [TYPE_VOIDP, TYPE_VOIDP], TYPE_VOIDP) buff = +"000" str = f.call(buff, "123") @@ -149,6 +163,10 @@ def call_proc(string_to_copy) end def test_function_as_proc + if RUBY_ENGINE == "jruby" + omit("Function that returns string doesn't work with JRuby") + end + f = Function.new(@libc['strcpy'], [TYPE_VOIDP, TYPE_VOIDP], TYPE_VOIDP) buff, str = call_proc("123", &f) assert_equal("123", buff) @@ -156,6 +174,10 @@ def test_function_as_proc end def test_function_as_method + if RUBY_ENGINE == "jruby" + omit("Function that returns string doesn't work with JRuby") + end + f = Function.new(@libc['strcpy'], [TYPE_VOIDP, TYPE_VOIDP], TYPE_VOIDP) klass = Class.new do define_singleton_method(:strcpy, &f) @@ -194,6 +216,10 @@ def test_nogvl_poll end def test_no_memory_leak + if RUBY_ENGINE == "jruby" + omit("rb_obj_frozen_p() doesn't exist in JRuby") + end + if respond_to?(:assert_nothing_leaked_memory) rb_obj_frozen_p_symbol = Fiddle.dlopen(nil)["rb_obj_frozen_p"] rb_obj_frozen_p = Fiddle::Function.new(rb_obj_frozen_p_symbol, diff --git a/test/fiddle/test_handle.rb b/test/fiddle/test_handle.rb index 412c10e09d4127..c952a7ef17f80c 100644 --- a/test/fiddle/test_handle.rb +++ b/test/fiddle/test_handle.rb @@ -9,11 +9,19 @@ class TestHandle < TestCase include Fiddle def test_to_i + if RUBY_ENGINE == "jruby" + omit("Fiddle::Handle#to_i is unavailable with JRuby") + end + handle = Fiddle::Handle.new(LIBC_SO) assert_kind_of Integer, handle.to_i end def test_to_ptr + if RUBY_ENGINE == "jruby" + omit("Fiddle::Handle#to_i is unavailable with JRuby") + end + handle = Fiddle::Handle.new(LIBC_SO) ptr = handle.to_ptr assert_equal ptr.to_i, handle.to_i @@ -26,6 +34,10 @@ def test_static_sym_unknown end def test_static_sym + if RUBY_ENGINE == "jruby" + omit("We can't assume static symbols with JRuby") + end + begin # Linux / Darwin / FreeBSD refute_nil Fiddle::Handle.sym('dlopen') @@ -90,6 +102,10 @@ def test_dlopen_returns_handle end def test_initialize_noargs + if RUBY_ENGINE == "jruby" + omit("rb_str_new() doesn't exist in JRuby") + end + handle = Handle.new refute_nil handle['rb_str_new'] end @@ -117,6 +133,10 @@ def test_disable_close end def test_file_name + if RUBY_ENGINE == "jruby" + omit("Fiddle::Handle#file_name doesn't exist in JRuby") + end + file_name = Handle.new(LIBC_SO).file_name if file_name assert_kind_of String, file_name @@ -135,6 +155,10 @@ def test_file_name end def test_NEXT + if RUBY_ENGINE == "jruby" + omit("Fiddle::Handle::NEXT doesn't exist in JRuby") + end + begin # Linux / Darwin # @@ -173,9 +197,13 @@ def test_NEXT end unless /mswin|mingw/ =~ RUBY_PLATFORM def test_DEFAULT + if Fiddle::WINDOWS + omit("Fiddle::Handle::DEFAULT doesn't have malloc() on Windows") + end + handle = Handle::DEFAULT refute_nil handle['malloc'] - end unless /mswin|mingw/ =~ RUBY_PLATFORM + end def test_dlerror # FreeBSD (at least 7.2 to 7.2) calls nsdispatch(3) when it calls @@ -191,22 +219,6 @@ def test_dlerror $VERBOSE = verbose end if /freebsd/=~ RUBY_PLATFORM - def test_no_memory_leak - # https://github.com/ruby/fiddle/actions/runs/3202406059/jobs/5231356410 - omit if RUBY_VERSION >= '3.2' - - if respond_to?(:assert_nothing_leaked_memory) - n_tries = 100_000 - assert_nothing_leaked_memory(SIZEOF_VOIDP * (n_tries / 100)) do - n_tries.times do - Fiddle::Handle.allocate - end - end - else - assert_no_memory_leak(%w[-W0 -rfiddle.so], '', '100_000.times {Fiddle::Handle.allocate}; GC.start', rss: true) - end - end - if /cygwin|mingw|mswin/ =~ RUBY_PLATFORM def test_fallback_to_ansi k = Fiddle::Handle.new("kernel32.dll") diff --git a/test/fiddle/test_import.rb b/test/fiddle/test_import.rb index 090ace620db863..26190325ecdfeb 100644 --- a/test/fiddle/test_import.rb +++ b/test/fiddle/test_import.rb @@ -149,11 +149,15 @@ def test_type_constants def test_unsigned_result() d = (2 ** 31) + 1 - r = LIBC.strtoul(d.to_s, 0, 0) + r = LIBC.strtoul(d.to_s, nil, 0) assert_equal(d, r) end def test_io() + if RUBY_ENGINE == "jruby" + omit("BUILD_RUBY_PLATFORM doesn't exist in JRuby") + end + if( RUBY_PLATFORM != BUILD_RUBY_PLATFORM ) || !defined?(LIBC.fprintf) return end @@ -329,11 +333,12 @@ def test_struct_nested_struct_replace_array_element_nil() def test_struct_nested_struct_replace_array_element_hash() LIBC::StructNestedStruct.malloc(Fiddle::RUBY_FREE) do |s| + s.vertices[0] = nil s.vertices[0] = { position: { x: 10, y: 100, - } + }, } assert_equal({ "position" => { @@ -450,7 +455,7 @@ def test_struct() s.buff = "012345\377" assert_equal([0,1,2,3,4], s.num) assert_equal(?a.ord, s.c) - assert_equal([?0.ord,?1.ord,?2.ord,?3.ord,?4.ord,?5.ord,?\377.ord], s.buff) + assert_equal([?0.ord,?1.ord,?2.ord,?3.ord,?4.ord,?5.ord,"\xFF".ord], s.buff) end end @@ -467,6 +472,10 @@ def test_gettimeofday() end def test_strcpy() + if RUBY_ENGINE == "jruby" + omit("Function that returns string doesn't work with JRuby") + end + buff = +"000" str = LIBC.strcpy(buff, "123") assert_equal("123", buff) diff --git a/test/fiddle/test_memory_view.rb b/test/fiddle/test_memory_view.rb index 240cda37df64e4..d44c42d2394528 100644 --- a/test/fiddle/test_memory_view.rb +++ b/test/fiddle/test_memory_view.rb @@ -34,18 +34,22 @@ def test_memory_view_from_pointer str = Marshal.load(Marshal.dump("hello world")) ptr = Pointer[str] mview = MemoryView.new(ptr) - assert_same(ptr, mview.obj) - assert_equal(str.bytesize, mview.byte_size) - assert_equal(true, mview.readonly?) - assert_equal(nil, mview.format) - assert_equal(1, mview.item_size) - assert_equal(1, mview.ndim) - assert_equal(nil, mview.shape) - assert_equal(nil, mview.strides) - assert_equal(nil, mview.sub_offsets) + begin + assert_same(ptr, mview.obj) + assert_equal(str.bytesize, mview.byte_size) + assert_equal(true, mview.readonly?) + assert_equal(nil, mview.format) + assert_equal(1, mview.item_size) + assert_equal(1, mview.ndim) + assert_equal(nil, mview.shape) + assert_equal(nil, mview.strides) + assert_equal(nil, mview.sub_offsets) - codes = str.codepoints - assert_equal(codes, (0...str.bytesize).map {|i| mview[i] }) + codes = str.codepoints + assert_equal(codes, (0...str.bytesize).map {|i| mview[i] }) + ensure + mview.release + end end def test_memory_view_multi_dimensional @@ -57,17 +61,21 @@ def test_memory_view_multi_dimensional shape = [3, 4] md = MemoryViewTestUtils::MultiDimensionalView.new(buf, "l!", shape, nil) mview = Fiddle::MemoryView.new(md) - assert_equal(buf.bytesize, mview.byte_size) - assert_equal("l!", mview.format) - assert_equal(Fiddle::SIZEOF_LONG, mview.item_size) - assert_equal(2, mview.ndim) - assert_equal(shape, mview.shape) - assert_equal([Fiddle::SIZEOF_LONG*4, Fiddle::SIZEOF_LONG], mview.strides) - assert_equal(nil, mview.sub_offsets) - assert_equal(1, mview[0, 0]) - assert_equal(4, mview[0, 3]) - assert_equal(6, mview[1, 1]) - assert_equal(10, mview[2, 1]) + begin + assert_equal(buf.bytesize, mview.byte_size) + assert_equal("l!", mview.format) + assert_equal(Fiddle::SIZEOF_LONG, mview.item_size) + assert_equal(2, mview.ndim) + assert_equal(shape, mview.shape) + assert_equal([Fiddle::SIZEOF_LONG*4, Fiddle::SIZEOF_LONG], mview.strides) + assert_equal(nil, mview.sub_offsets) + assert_equal(1, mview[0, 0]) + assert_equal(4, mview[0, 3]) + assert_equal(6, mview[1, 1]) + assert_equal(10, mview[2, 1]) + ensure + mview.release + end end def test_memory_view_multi_dimensional_with_strides @@ -79,17 +87,21 @@ def test_memory_view_multi_dimensional_with_strides strides = [4*Fiddle::SIZEOF_LONG*2, Fiddle::SIZEOF_LONG*2] md = MemoryViewTestUtils::MultiDimensionalView.new(buf, "l!", shape, strides) mview = Fiddle::MemoryView.new(md) - assert_equal("l!", mview.format) - assert_equal(Fiddle::SIZEOF_LONG, mview.item_size) - assert_equal(buf.bytesize, mview.byte_size) - assert_equal(2, mview.ndim) - assert_equal(shape, mview.shape) - assert_equal(strides, mview.strides) - assert_equal(nil, mview.sub_offsets) - assert_equal(1, mview[0, 0]) - assert_equal(5, mview[0, 2]) - assert_equal(9, mview[1, 0]) - assert_equal(15, mview[1, 3]) + begin + assert_equal("l!", mview.format) + assert_equal(Fiddle::SIZEOF_LONG, mview.item_size) + assert_equal(buf.bytesize, mview.byte_size) + assert_equal(2, mview.ndim) + assert_equal(shape, mview.shape) + assert_equal(strides, mview.strides) + assert_equal(nil, mview.sub_offsets) + assert_equal(1, mview[0, 0]) + assert_equal(5, mview[0, 2]) + assert_equal(9, mview[1, 0]) + assert_equal(15, mview[1, 3]) + ensure + mview.release + end end def test_memory_view_multi_dimensional_with_multiple_members @@ -101,17 +113,21 @@ def test_memory_view_multi_dimensional_with_multiple_members strides = [4*Fiddle::SIZEOF_SHORT*2, Fiddle::SIZEOF_SHORT*2] md = MemoryViewTestUtils::MultiDimensionalView.new(buf, "ss", shape, strides) mview = Fiddle::MemoryView.new(md) - assert_equal("ss", mview.format) - assert_equal(Fiddle::SIZEOF_SHORT*2, mview.item_size) - assert_equal(buf.bytesize, mview.byte_size) - assert_equal(2, mview.ndim) - assert_equal(shape, mview.shape) - assert_equal(strides, mview.strides) - assert_equal(nil, mview.sub_offsets) - assert_equal([1, 2], mview[0, 0]) - assert_equal([5, 6], mview[0, 2]) - assert_equal([-1, -2], mview[1, 0]) - assert_equal([-7, -8], mview[1, 3]) + begin + assert_equal("ss", mview.format) + assert_equal(Fiddle::SIZEOF_SHORT*2, mview.item_size) + assert_equal(buf.bytesize, mview.byte_size) + assert_equal(2, mview.ndim) + assert_equal(shape, mview.shape) + assert_equal(strides, mview.strides) + assert_equal(nil, mview.sub_offsets) + assert_equal([1, 2], mview[0, 0]) + assert_equal([5, 6], mview[0, 2]) + assert_equal([-1, -2], mview[1, 0]) + assert_equal([-7, -8], mview[1, 3]) + ensure + mview.release + end end def test_export @@ -135,9 +151,13 @@ def test_to_s data = "\u{3042}" ptr = Pointer[data] mview = MemoryView.new(ptr) - string = mview.to_s - assert_equal([data.b, true], - [string, string.frozen?]) + begin + string = mview.to_s + assert_equal([data.b, true], + [string, string.frozen?]) + ensure + mview.release + end end end end diff --git a/test/fiddle/test_pointer.rb b/test/fiddle/test_pointer.rb index f2c1d285ad5b0e..f17c8338f5e6cc 100644 --- a/test/fiddle/test_pointer.rb +++ b/test/fiddle/test_pointer.rb @@ -11,19 +11,22 @@ def dlwrap arg end def test_can_read_write_memory - # Allocate some memory - address = Fiddle.malloc(Fiddle::SIZEOF_VOIDP) + if RUBY_ENGINE == "jruby" + omit("Fiddle::Pointer.{read,write} don't exist in JRuby") + end - bytes_to_write = Fiddle::SIZEOF_VOIDP.times.to_a.pack("C*") + # Allocate some memory + Fiddle::Pointer.malloc(Fiddle::SIZEOF_VOIDP, Fiddle::RUBY_FREE) do |pointer| + address = pointer.to_i + bytes_to_write = Fiddle::SIZEOF_VOIDP.times.to_a.pack("C*") - # Write to the memory - Fiddle::Pointer.write(address, bytes_to_write) + # Write to the memory + Fiddle::Pointer.write(address, bytes_to_write) - # Read the bytes out again - bytes = Fiddle::Pointer.read(address, Fiddle::SIZEOF_VOIDP) - assert_equal bytes_to_write, bytes - ensure - Fiddle.free address + # Read the bytes out again + bytes = Fiddle::Pointer.read(address, Fiddle::SIZEOF_VOIDP) + assert_equal bytes_to_write, bytes + end end def test_cptr_to_int @@ -110,6 +113,10 @@ def test_plus end def test_inspect + if RUBY_ENGINE == "jruby" + omit("Fiddle::Pointer#inspect is incompatible on JRuby") + end + ptr = Pointer.new(0) inspect = ptr.inspect assert_match(/size=#{ptr.size}/, inspect) @@ -125,6 +132,10 @@ def test_to_ptr_string end def test_to_ptr_io + if RUBY_ENGINE == "jruby" + omit("Fiddle::Pointer.to_ptr(IO) isn't supported with JRuby") + end + Pointer.malloc(10, Fiddle::RUBY_FREE) do |buf| File.open(__FILE__, 'r') do |f| ptr = Pointer.to_ptr f @@ -172,6 +183,10 @@ def test_cmp end def test_ref_ptr + if RUBY_ENGINE == "jruby" + omit("Fiddle.dlwrap([]) isn't supported with JRuby") + end + ary = [0,1,2,4,5] addr = Pointer.new(dlwrap(ary)) assert_equal addr.to_i, addr.ref.ptr.to_i @@ -180,6 +195,10 @@ def test_ref_ptr end def test_to_value + if RUBY_ENGINE == "jruby" + omit("Fiddle.dlwrap([]) isn't supported with JRuby") + end + ary = [0,1,2,4,5] addr = Pointer.new(dlwrap(ary)) assert_equal ary, addr.to_value @@ -286,21 +305,5 @@ def test_null_pointer assert_raise(DLError) {nullpo[0]} assert_raise(DLError) {nullpo[0] = 1} end - - def test_no_memory_leak - # https://github.com/ruby/fiddle/actions/runs/3202406059/jobs/5231356410 - omit if RUBY_VERSION >= '3.2' - - if respond_to?(:assert_nothing_leaked_memory) - n_tries = 100_000 - assert_nothing_leaked_memory(SIZEOF_VOIDP * (n_tries / 100)) do - n_tries.times do - Fiddle::Pointer.allocate - end - end - else - assert_no_memory_leak(%w[-W0 -rfiddle.so], '', '100_000.times {Fiddle::Pointer.allocate}', rss: true) - end - end end end if defined?(Fiddle) diff --git a/test/io/console/test_ractor.rb b/test/io/console/test_ractor.rb new file mode 100644 index 00000000000000..b30988f47e0c11 --- /dev/null +++ b/test/io/console/test_ractor.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true +require 'test/unit' +require 'rbconfig' + +class TestIOConsoleInRactor < Test::Unit::TestCase + def test_ractor + ext = "/io/console.#{RbConfig::CONFIG['DLEXT']}" + path = $".find {|path| path.end_with?(ext)} + assert_in_out_err(%W[-r#{path}], "#{<<~"begin;"}\n#{<<~'end;'}", ["true"], []) + begin; + $VERBOSE = nil + r = Ractor.new do + $stdout.console_mode + rescue SystemCallError + true + rescue Ractor::UnsafeError + false + else + true # should not success + end + puts r.take + end; + + assert_in_out_err(%W[-r#{path}], "#{<<~"begin;"}\n#{<<~'end;'}", ["true"], []) + begin; + console = IO.console + $VERBOSE = nil + r = Ractor.new do + IO.console + end + puts console.class == r.take.class + end; + end +end if defined? Ractor diff --git a/test/irb/test_command.rb b/test/irb/test_command.rb index 567c3216ccec2f..69931e3e4f95a7 100644 --- a/test/irb/test_command.rb +++ b/test/irb/test_command.rb @@ -765,7 +765,7 @@ def test_show_doc ensure # this is the only way to reset the redefined method without coupling the test with its implementation EnvUtil.suppress_warning { load "irb/command/help.rb" } - end + end if defined?(RDoc) def test_show_doc_without_rdoc _, err = without_rdoc do diff --git a/test/irb/test_context.rb b/test/irb/test_context.rb index 7ad8fd2fc4a84a..9fa23cccef34f4 100644 --- a/test/irb/test_context.rb +++ b/test/irb/test_context.rb @@ -705,6 +705,8 @@ def test_irb_path_setter def test_build_completor verbose, $VERBOSE = $VERBOSE, nil original_completor = IRB.conf[:COMPLETOR] + IRB.conf[:COMPLETOR] = nil + assert_match /IRB::(Regexp|Type)Completor/, @context.send(:build_completor).class.name IRB.conf[:COMPLETOR] = :regexp assert_equal 'IRB::RegexpCompletor', @context.send(:build_completor).class.name IRB.conf[:COMPLETOR] = :unknown diff --git a/test/irb/test_debugger_integration.rb b/test/irb/test_debugger_integration.rb index 8b1bddea179e97..45ffb2a52e6d85 100644 --- a/test/irb/test_debugger_integration.rb +++ b/test/irb/test_debugger_integration.rb @@ -365,6 +365,23 @@ def bar assert_include(output, "InputMethod: RelineInputMethod") end + def test_irb_command_can_check_local_variables + write_ruby <<~'ruby' + binding.irb + ruby + + output = run_ruby_file do + type "debug" + type 'foobar = IRB' + type "show_source foobar.start" + type "show_source = 'Foo'" + type "show_source + 'Bar'" + type "continue" + end + assert_include(output, "def start(ap_path = nil)") + assert_include(output, '"FooBar"') + end + def test_help_command_is_delegated_to_the_debugger write_ruby <<~'ruby' binding.irb diff --git a/test/irb/test_helper_method.rb b/test/irb/test_helper_method.rb index 291278c16a80ca..a3e2c43b2fac1c 100644 --- a/test/irb/test_helper_method.rb +++ b/test/irb/test_helper_method.rb @@ -76,7 +76,8 @@ def execute( type "exit" end - assert_include(output, '["required", "optional", ["splat"], "required", "optional", {:a=>1, :b=>2}, "block"]') + optional = {a: 1, b: 2} + assert_include(output, %[["required", "optional", ["splat"], "required", "optional", #{optional.inspect}, "block"]]) end def test_helper_method_injection_can_happen_after_irb_require diff --git a/test/irb/test_history.rb b/test/irb/test_history.rb index 84f043892969d0..7a17491d891711 100644 --- a/test/irb/test_history.rb +++ b/test/irb/test_history.rb @@ -149,7 +149,7 @@ def test_history_concurrent_use_not_present def test_history_different_encodings IRB.conf[:SAVE_HISTORY] = 2 Encoding.default_external = Encoding::US_ASCII - locale = IRB::Locale.new("C") + locale = IRB::Locale.new("en_US.ASCII") assert_history(<<~EXPECTED_HISTORY.encode(Encoding::US_ASCII), <<~INITIAL_HISTORY.encode(Encoding::UTF_8), <<~INPUT, locale: locale) ???? exit diff --git a/test/irb/test_init.rb b/test/irb/test_init.rb index 3e8d01c5ce03eb..f7168e02feaff2 100644 --- a/test/irb/test_init.rb +++ b/test/irb/test_init.rb @@ -167,9 +167,10 @@ def test_completor_environment_variable orig_use_autocomplete_env = ENV['IRB_COMPLETOR'] orig_use_autocomplete_conf = IRB.conf[:COMPLETOR] + # Default value is nil: auto-detect ENV['IRB_COMPLETOR'] = nil IRB.setup(__FILE__) - assert_equal(:regexp, IRB.conf[:COMPLETOR]) + assert_equal(nil, IRB.conf[:COMPLETOR]) ENV['IRB_COMPLETOR'] = 'regexp' IRB.setup(__FILE__) @@ -193,10 +194,12 @@ def test_completor_environment_variable def test_completor_setup_with_argv orig_completor_conf = IRB.conf[:COMPLETOR] + orig_completor_env = ENV['IRB_COMPLETOR'] + ENV['IRB_COMPLETOR'] = nil - # Default is :regexp + # Default value is nil: auto-detect IRB.setup(__FILE__, argv: []) - assert_equal :regexp, IRB.conf[:COMPLETOR] + assert_equal nil, IRB.conf[:COMPLETOR] IRB.setup(__FILE__, argv: ['--type-completor']) assert_equal :type, IRB.conf[:COMPLETOR] @@ -205,6 +208,7 @@ def test_completor_setup_with_argv assert_equal :regexp, IRB.conf[:COMPLETOR] ensure IRB.conf[:COMPLETOR] = orig_completor_conf + ENV['IRB_COMPLETOR'] = orig_completor_env end def test_noscript diff --git a/test/irb/test_input_method.rb b/test/irb/test_input_method.rb index 9d0f393ce001c8..bd107551df4733 100644 --- a/test/irb/test_input_method.rb +++ b/test/irb/test_input_method.rb @@ -1,7 +1,10 @@ # frozen_string_literal: false require "irb" -require "rdoc" +begin + require "rdoc" +rescue LoadError +end require_relative "helper" module TestIRB @@ -67,6 +70,7 @@ def test_initialization_without_use_autocomplete end def test_initialization_with_use_autocomplete + omit 'This test requires RDoc' unless defined?(RDoc) original_show_doc_proc = Reline.dialog_proc(:show_doc)&.dialog_proc empty_proc = Proc.new {} Reline.add_dialog_proc(:show_doc, empty_proc) @@ -187,5 +191,5 @@ def test_perfect_matching_handles_nil_namespace def has_rdoc_content? File.exist?(RDoc::RI::Paths::BASE) end - end + end if defined?(RDoc) end diff --git a/test/irb/test_irb.rb b/test/irb/test_irb.rb index 2913f3d48ef3f4..617e9c9614b29c 100644 --- a/test/irb/test_irb.rb +++ b/test/irb/test_irb.rb @@ -155,8 +155,8 @@ def test_current_context_restore type 'exit' end - assert_include output, '{:context_changed=>true}' - assert_include output, '{:context_restored=>true}' + assert_include output, {context_changed: true}.inspect + assert_include output, {context_restored: true}.inspect end end diff --git a/test/irb/test_type_completor.rb b/test/irb/test_type_completor.rb index 412d7c696d62d5..3d0e25d19e026a 100644 --- a/test/irb/test_type_completor.rb +++ b/test/irb/test_type_completor.rb @@ -27,6 +27,22 @@ def empty_binding binding end + def test_build_completor + IRB.init_config(nil) + verbose, $VERBOSE = $VERBOSE, nil + original_completor = IRB.conf[:COMPLETOR] + workspace = IRB::WorkSpace.new(Object.new) + @context = IRB::Context.new(nil, workspace, TestInputMethod.new) + IRB.conf[:COMPLETOR] = nil + expected_default_completor = RUBY_VERSION >= '3.4' ? 'IRB::TypeCompletor' : 'IRB::RegexpCompletor' + assert_equal expected_default_completor, @context.send(:build_completor).class.name + IRB.conf[:COMPLETOR] = :type + assert_equal 'IRB::TypeCompletor', @context.send(:build_completor).class.name + ensure + $VERBOSE = verbose + IRB.conf[:COMPLETOR] = original_completor + end + def assert_completion(preposing, target, binding: empty_binding, include: nil, exclude: nil) raise ArgumentError if include.nil? && exclude.nil? candidates = @completor.completion_candidates(preposing, target, '', bind: binding) diff --git a/test/irb/yamatanooroti/test_rendering.rb b/test/irb/yamatanooroti/test_rendering.rb index 44e07a3a1232c1..834c501d5c6035 100644 --- a/test/irb/yamatanooroti/test_rendering.rb +++ b/test/irb/yamatanooroti/test_rendering.rb @@ -507,6 +507,28 @@ def test_debug_integration_doesnt_hint_non_debugger_commands File.unlink(script) if script end + def test_debug_integration_doesnt_hint_debugger_commands_in_nomultiline_mode + write_irbrc <<~'LINES' + IRB.conf[:USE_SINGLELINE] = true + LINES + script = Tempfile.create(["debug", ".rb"]) + script.write <<~RUBY + puts 'start IRB' + binding.irb + RUBY + script.close + start_terminal(40, 80, %W{ruby -I#{@pwd}/lib #{script.to_path}}, startup_message: 'start IRB') + write("debug\n") + write("pp 1") + close + + screen = result.join("\n").sub(/\n*\z/, "\n") + # submitted input shouldn't contain hint + assert_include(screen, "irb:rdbg(main):002> pp 1\n") + ensure + File.unlink(script) if script + end + private def write_irbrc(content) diff --git a/test/json/json_generator_test.rb b/test/json/json_generator_test.rb index 526bb8c1febd2c..fd70b02699a4ab 100755 --- a/test/json/json_generator_test.rb +++ b/test/json/json_generator_test.rb @@ -67,6 +67,25 @@ def test_dump_unenclosed_hash def test_dump_strict assert_equal '{}', dump({}, strict: true) + + assert_equal '{"array":[42,4.2,"forty-two",true,false,null]}', dump({ + "array" => [42, 4.2, "forty-two", true, false, nil] + }, strict: true) + + assert_equal '{"int":42,"float":4.2,"string":"forty-two","true":true,"false":false,"nil":null,"hash":{}}', dump({ + "int" => 42, + "float" => 4.2, + "string" => "forty-two", + "true" => true, + "false" => false, + "nil" => nil, + "hash" => {}, + }, strict: true) + + assert_equal '[]', dump([], strict: true) + + assert_equal '42', dump(42, strict: true) + assert_equal 'true', dump(true, strict: true) end def test_generate_pretty @@ -243,7 +262,7 @@ def test_buffer_initial_length def test_gc if respond_to?(:assert_in_out_err) && !(RUBY_PLATFORM =~ /java/) - assert_in_out_err(%w[-rjson], <<-EOS, [], []) + assert_in_out_err(%w[-rjson -Ilib -Iext], <<-EOS, [], []) bignum_too_long_to_embed_as_string = 1234567890123456789012345 expect = bignum_too_long_to_embed_as_string.to_s GC.stress = true @@ -419,6 +438,13 @@ def to_s; self; end end end + def test_invalid_encoding_string + error = assert_raise(JSON::GeneratorError) do + "\x82\xAC\xEF".to_json + end + assert_includes error.message, "source sequence is illegal/malformed utf-8" + end + if defined?(JSON::Ext::Generator) and RUBY_PLATFORM != "java" def test_string_ext_included_calls_super included = false diff --git a/test/json/json_parser_test.rb b/test/json/json_parser_test.rb index 49c7c8565db56d..610ea06f3f88d1 100644 --- a/test/json/json_parser_test.rb +++ b/test/json/json_parser_test.rb @@ -27,7 +27,6 @@ def test_argument_encoding end if defined?(Encoding::UTF_16) def test_error_message_encoding - # https://github.com/flori/json/actions/runs/6478148162/job/17589572890 pend if RUBY_ENGINE == 'truffleruby' bug10705 = '[ruby-core:67386] [Bug #10705]' diff --git a/test/net/http/utils.rb b/test/net/http/utils.rb index cb621da998fc96..1d43497af0da08 100644 --- a/test/net/http/utils.rb +++ b/test/net/http/utils.rb @@ -29,7 +29,7 @@ def start loop do socket = @ssl_server ? @ssl_server.accept : @server.accept run(socket) - rescue => e + rescue ensure socket.close if socket end @@ -58,7 +58,7 @@ def handle_request(socket) request_line = socket.gets return if request_line.nil? || request_line.strip.empty? - method, path, version = request_line.split + method, path, _version = request_line.split headers = {} while (line = socket.gets) break if line.strip.empty? @@ -121,10 +121,6 @@ def continue @socket.write "HTTP\/1.1 100 continue\r\n\r\n" end - def query - @query - end - def remote_ip @socket.peeraddr[3] end diff --git a/test/objspace/test_objspace.rb b/test/objspace/test_objspace.rb index 3f4a58e98d9c59..b54a4381325a06 100644 --- a/test/objspace/test_objspace.rb +++ b/test/objspace/test_objspace.rb @@ -244,39 +244,38 @@ def test_trace_object_allocations def test_trace_object_allocations_start_stop_clear ObjectSpace.trace_object_allocations_clear # clear object_table to get rid of erroneous detection for obj3 - GC.disable # suppress potential object reuse. see [Bug #11271] - begin - ObjectSpace.trace_object_allocations_start + EnvUtil.without_gc do # suppress potential object reuse. see [Bug #11271] begin ObjectSpace.trace_object_allocations_start begin ObjectSpace.trace_object_allocations_start - obj0 = Object.new + begin + ObjectSpace.trace_object_allocations_start + obj0 = Object.new + ensure + ObjectSpace.trace_object_allocations_stop + obj1 = Object.new + end ensure ObjectSpace.trace_object_allocations_stop - obj1 = Object.new + obj2 = Object.new end ensure ObjectSpace.trace_object_allocations_stop - obj2 = Object.new + obj3 = Object.new end - ensure - ObjectSpace.trace_object_allocations_stop - obj3 = Object.new - end - assert_equal(__FILE__, ObjectSpace.allocation_sourcefile(obj0)) - assert_equal(__FILE__, ObjectSpace.allocation_sourcefile(obj1)) - assert_equal(__FILE__, ObjectSpace.allocation_sourcefile(obj2)) - assert_equal(nil , ObjectSpace.allocation_sourcefile(obj3)) # after tracing + assert_equal(__FILE__, ObjectSpace.allocation_sourcefile(obj0)) + assert_equal(__FILE__, ObjectSpace.allocation_sourcefile(obj1)) + assert_equal(__FILE__, ObjectSpace.allocation_sourcefile(obj2)) + assert_equal(nil , ObjectSpace.allocation_sourcefile(obj3)) # after tracing - ObjectSpace.trace_object_allocations_clear - assert_equal(nil, ObjectSpace.allocation_sourcefile(obj0)) - assert_equal(nil, ObjectSpace.allocation_sourcefile(obj1)) - assert_equal(nil, ObjectSpace.allocation_sourcefile(obj2)) - assert_equal(nil, ObjectSpace.allocation_sourcefile(obj3)) - ensure - GC.enable + ObjectSpace.trace_object_allocations_clear + assert_equal(nil, ObjectSpace.allocation_sourcefile(obj0)) + assert_equal(nil, ObjectSpace.allocation_sourcefile(obj1)) + assert_equal(nil, ObjectSpace.allocation_sourcefile(obj2)) + assert_equal(nil, ObjectSpace.allocation_sourcefile(obj3)) + end end def test_trace_object_allocations_gc_stress diff --git a/test/open-uri/test_open-uri.rb b/test/open-uri/test_open-uri.rb index 9db6a8bb3be41e..0679180ce9fbfb 100644 --- a/test/open-uri/test_open-uri.rb +++ b/test/open-uri/test_open-uri.rb @@ -337,6 +337,66 @@ def test_redirect_auth_failure_r1 } end + def test_redirect_without_request_specific_fields_hash + authorization_header = nil + redirected_authorization_header = nil + with_http {|srv, url| + srv.mount_proc("/r1/", lambda {|req, res| res.status = 301; res["location"] = "#{url}/r2"; authorization_header = req["Authorization"]; } ) + srv.mount_proc("/r2/", lambda {|req, res| redirected_authorization_header = req["Authorization"]; } ) + URI.open("#{url}/r1/", "Authorization" => "dummy_token") {|f| + assert_equal("dummy_token", authorization_header) + assert_equal("#{url}/r2", f.base_uri.to_s) + assert_equal("dummy_token", redirected_authorization_header) + } + } + end + + def test_redirect_with_request_specific_fields_hash + authorization_header = nil + redirected_authorization_header = "exposed_dummy_token" + with_http {|srv, url| + srv.mount_proc("/r1/", lambda {|req, res| res.status = 301; res["location"] = "#{url}/r2"; authorization_header = req["Authorization"]; } ) + srv.mount_proc("/r2/", lambda {|req, res| redirected_authorization_header = req["Authorization"]; } ) + URI.open("#{url}/r1/", request_specific_fields: {"Authorization" => "dummy_token"}) {|f| + assert_equal("dummy_token", authorization_header) + assert_equal("#{url}/r2", f.base_uri.to_s) + assert_equal(nil, redirected_authorization_header) + } + } + end + + def test_redirect_with_request_specific_fields_proc + authorization_header = nil + redirected_authorization_header = nil + + modify_authorization_header = Proc.new do |uri| + authorization_token = if uri.to_s.include?("/r1") + "dummy_token" + else + "masked_dummy_token" + end + { "Authorization" => authorization_token } + end + + with_http {|srv, url| + srv.mount_proc("/r1/", lambda {|req, res| res.status = 301; res["location"] = "#{url}/r2"; authorization_header = req["Authorization"] } ) + srv.mount_proc("/r2/", lambda {|req, res| redirected_authorization_header = req["Authorization"]; } ) + URI.open("#{url}/r1/", request_specific_fields: modify_authorization_header) {|f| + assert_equal("dummy_token", authorization_header) + assert_equal("#{url}/r2", f.base_uri.to_s) + assert_equal("masked_dummy_token", redirected_authorization_header) + } + } + end + + def test_redirect_with_invalid_request_specific_fields_format + with_http {|srv, url| + srv.mount_proc("/r1/", lambda {|req, res| res.body = "r1" } ) + exc = assert_raise(ArgumentError) { URI.open("#{url}/r1/", request_specific_fields: "dummy_token") {} } + assert_equal('Invalid request_specific_fields option: "dummy_token"', exc.message) + } + end + def test_max_redirects_success with_http {|srv, url| srv.mount_proc("/r1/", lambda {|req, res| res.status = 301; res["location"] = "#{url}/r2"; res.body = "r1" } ) diff --git a/test/openssl/test_pkey_rsa.rb b/test/openssl/test_pkey_rsa.rb index 61c55c60b255d0..02693c277bd262 100644 --- a/test/openssl/test_pkey_rsa.rb +++ b/test/openssl/test_pkey_rsa.rb @@ -14,9 +14,7 @@ def test_no_private_exp end if !openssl?(3, 0, 0) # Impossible state in OpenSSL 3.0 def test_private - # Generated by key size and public exponent - key = OpenSSL::PKey::RSA.new(512, 3) - assert(key.private?) + key = Fixtures.pkey("rsa2048") # Generated by DER key2 = OpenSSL::PKey::RSA.new(key.to_der) @@ -46,55 +44,66 @@ def test_private end def test_new - key = OpenSSL::PKey::RSA.new(512) - assert_equal 512, key.n.num_bits + key = OpenSSL::PKey::RSA.new(2048) + assert_equal 2048, key.n.num_bits assert_equal 65537, key.e assert_not_nil key.d + assert(key.private?) + end + + def test_new_public_exponent + # At least 2024-bits RSA key are required in FIPS. + omit_on_fips # Specify public exponent - key2 = OpenSSL::PKey::RSA.new(512, 3) - assert_equal 512, key2.n.num_bits - assert_equal 3, key2.e - assert_not_nil key2.d + key = OpenSSL::PKey::RSA.new(512, 3) + assert_equal 512, key.n.num_bits + assert_equal 3, key.e end def test_s_generate - key1 = OpenSSL::PKey::RSA.generate(512) - assert_equal 512, key1.n.num_bits + key1 = OpenSSL::PKey::RSA.generate(2048) + assert_equal 2048, key1.n.num_bits assert_equal 65537, key1.e + end + + def test_s_generate_public_exponent + # At least 2024-bits RSA key are required in FIPS. + omit_on_fips # Specify public exponent - key2 = OpenSSL::PKey::RSA.generate(512, 3) - assert_equal 512, key2.n.num_bits - assert_equal 3, key2.e - assert_not_nil key2.d + key = OpenSSL::PKey::RSA.generate(512, 3) + assert_equal 512, key.n.num_bits + assert_equal 3, key.e end def test_new_break - assert_nil(OpenSSL::PKey::RSA.new(1024) { break }) + assert_nil(OpenSSL::PKey::RSA.new(2048) { break }) assert_raise(RuntimeError) do - OpenSSL::PKey::RSA.new(1024) { raise } + OpenSSL::PKey::RSA.new(2048) { raise } end end def test_sign_verify - rsa1024 = Fixtures.pkey("rsa1024") + rsa = Fixtures.pkey("rsa2048") data = "Sign me!" - signature = rsa1024.sign("SHA256", data) - assert_equal true, rsa1024.verify("SHA256", signature, data) + signature = rsa.sign("SHA256", data) + assert_equal true, rsa.verify("SHA256", signature, data) signature0 = (<<~'end;').unpack1("m") - oLCgbprPvfhM4pjFQiDTFeWI9Sk+Og7Nh9TmIZ/xSxf2CGXQrptlwo7NQ28+ - WA6YQo8jPH4hSuyWIM4Gz4qRYiYRkl5TDMUYob94zm8Si1HxEiS9354tzvqS - zS8MLW2BtNPuTubMxTItHGTnOzo9sUg0LAHVFt8kHG2NfKAw/gQ= + ooy49i8aeFtkDYUU0RPDsEugGiNw4lZxpbQPnIwtdftEkka945IqKZ/MY3YSw7wKsvBZeaTy8GqL + lSWLThsRFDV+UUS9zUBbQ9ygNIT8OjdV+tNL63ZpKGprczSnw4F05MQIpajNRud/8jiI9rf+Wysi + WwXecjMl2FlXlLJHY4PFQZU5TiametB4VCQRMcjLo1uf26u/yRpiGaYyqn5vxs0SqNtUDM1UL6x4 + NHCAdqLjuFRQPjYp1vGLD3eSl4061pS8x1NVap3YGbYfGUyzZO4VfwFwf1jPdhp/OX/uZw4dGB2H + gSK+q1JiDFwEE6yym5tdKovL1g1NhFYHF6gkZg== end; - assert_equal true, rsa1024.verify("SHA256", signature0, data) + assert_equal true, rsa.verify("SHA256", signature0, data) signature1 = signature0.succ - assert_equal false, rsa1024.verify("SHA256", signature1, data) + assert_equal false, rsa.verify("SHA256", signature1, data) end def test_sign_verify_options - key = Fixtures.pkey("rsa1024") + key = Fixtures.pkey("rsa2048") data = "Sign me!" pssopts = { "rsa_padding_mode" => "pss", @@ -102,7 +111,7 @@ def test_sign_verify_options "rsa_mgf1_md" => "SHA1" } sig_pss = key.sign("SHA256", data, pssopts) - assert_equal 128, sig_pss.bytesize + assert_equal 256, sig_pss.bytesize assert_equal true, key.verify("SHA256", sig_pss, data, pssopts) assert_equal true, key.verify_pss("SHA256", sig_pss, data, salt_length: 20, mgf1_hash: "SHA1") @@ -175,12 +184,12 @@ def test_verify_empty_rsa end def test_sign_verify_pss - key = Fixtures.pkey("rsa1024") + key = Fixtures.pkey("rsa2048") data = "Sign me!" invalid_data = "Sign me?" signature = key.sign_pss("SHA256", data, salt_length: 20, mgf1_hash: "SHA1") - assert_equal 128, signature.bytesize + assert_equal 256, signature.bytesize assert_equal true, key.verify_pss("SHA256", signature, data, salt_length: 20, mgf1_hash: "SHA1") assert_equal true, @@ -196,14 +205,26 @@ def test_sign_verify_pss assert_equal false, key.verify_pss("SHA256", signature, data, salt_length: 20, mgf1_hash: "SHA1") - signature = key.sign_pss("SHA256", data, salt_length: :max, mgf1_hash: "SHA1") - assert_equal true, - key.verify_pss("SHA256", signature, data, salt_length: 94, mgf1_hash: "SHA1") - assert_equal true, - key.verify_pss("SHA256", signature, data, salt_length: :auto, mgf1_hash: "SHA1") + # The sign_pss with `salt_length: :max` raises the "invalid salt length" + # error in FIPS. We need to skip the tests in FIPS. + # According to FIPS 186-5 section 5.4, the salt length shall be between zero + # and the output block length of the digest function (inclusive). + # + # FIPS 186-5 section 5.4 PKCS #1 + # https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-5.pdf + unless OpenSSL.fips_mode + signature = key.sign_pss("SHA256", data, salt_length: :max, mgf1_hash: "SHA1") + # Should verify on the following salt_length (sLen). + # sLen <= emLen (octat) - 2 - hLen (octet) = 2048 / 8 - 2 - 256 / 8 = 222 + # https://datatracker.ietf.org/doc/html/rfc8017#section-9.1.1 + assert_equal true, + key.verify_pss("SHA256", signature, data, salt_length: 222, mgf1_hash: "SHA1") + assert_equal true, + key.verify_pss("SHA256", signature, data, salt_length: :auto, mgf1_hash: "SHA1") + end assert_raise(OpenSSL::PKey::RSAError) { - key.sign_pss("SHA256", data, salt_length: 95, mgf1_hash: "SHA1") + key.sign_pss("SHA256", data, salt_length: 223, mgf1_hash: "SHA1") } end @@ -213,8 +234,13 @@ def test_encrypt_decrypt # Defaults to PKCS #1 v1.5 raw = "data" - enc = rsapub.encrypt(raw) - assert_equal raw, rsapriv.decrypt(enc) + # According to the NIST SP 800-131A Rev. 2 section 6, PKCS#1 v1.5 padding is + # not permitted for key agreement and key transport using RSA in FIPS. + # https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-131Ar2.pdf + unless OpenSSL.fips_mode + enc = rsapub.encrypt(raw) + assert_equal raw, rsapriv.decrypt(enc) + end # Invalid options assert_raise(OpenSSL::PKey::PKeyError) { @@ -227,11 +253,13 @@ def test_encrypt_decrypt_legacy rsapub = OpenSSL::PKey.read(rsapriv.public_to_der) # Defaults to PKCS #1 v1.5 - raw = "data" - enc_legacy = rsapub.public_encrypt(raw) - assert_equal raw, rsapriv.decrypt(enc_legacy) - enc_new = rsapub.encrypt(raw) - assert_equal raw, rsapriv.private_decrypt(enc_new) + unless OpenSSL.fips_mode + raw = "data" + enc_legacy = rsapub.public_encrypt(raw) + assert_equal raw, rsapriv.decrypt(enc_legacy) + enc_new = rsapub.encrypt(raw) + assert_equal raw, rsapriv.private_decrypt(enc_new) + end # OAEP with default parameters raw = "data" @@ -292,53 +320,67 @@ def test_to_der end def test_RSAPrivateKey - rsa1024 = Fixtures.pkey("rsa1024") + rsa = Fixtures.pkey("rsa2048") asn1 = OpenSSL::ASN1::Sequence([ OpenSSL::ASN1::Integer(0), - OpenSSL::ASN1::Integer(rsa1024.n), - OpenSSL::ASN1::Integer(rsa1024.e), - OpenSSL::ASN1::Integer(rsa1024.d), - OpenSSL::ASN1::Integer(rsa1024.p), - OpenSSL::ASN1::Integer(rsa1024.q), - OpenSSL::ASN1::Integer(rsa1024.dmp1), - OpenSSL::ASN1::Integer(rsa1024.dmq1), - OpenSSL::ASN1::Integer(rsa1024.iqmp) + OpenSSL::ASN1::Integer(rsa.n), + OpenSSL::ASN1::Integer(rsa.e), + OpenSSL::ASN1::Integer(rsa.d), + OpenSSL::ASN1::Integer(rsa.p), + OpenSSL::ASN1::Integer(rsa.q), + OpenSSL::ASN1::Integer(rsa.dmp1), + OpenSSL::ASN1::Integer(rsa.dmq1), + OpenSSL::ASN1::Integer(rsa.iqmp) ]) key = OpenSSL::PKey::RSA.new(asn1.to_der) assert_predicate key, :private? - assert_same_rsa rsa1024, key + assert_same_rsa rsa, key pem = <<~EOF -----BEGIN RSA PRIVATE KEY----- - MIICXgIBAAKBgQDLwsSw1ECnPtT+PkOgHhcGA71nwC2/nL85VBGnRqDxOqjVh7Cx - aKPERYHsk4BPCkE3brtThPWc9kjHEQQ7uf9Y1rbCz0layNqHyywQEVLFmp1cpIt/ - Q3geLv8ZD9pihowKJDyMDiN6ArYUmZczvW4976MU3+l54E6lF/JfFEU5hwIDAQAB - AoGBAKSl/MQarye1yOysqX6P8fDFQt68VvtXkNmlSiKOGuzyho0M+UVSFcs6k1L0 - maDE25AMZUiGzuWHyaU55d7RXDgeskDMakD1v6ZejYtxJkSXbETOTLDwUWTn618T - gnb17tU1jktUtU67xK/08i/XodlgnQhs6VoHTuCh3Hu77O6RAkEA7+gxqBuZR572 - 74/akiW/SuXm0SXPEviyO1MuSRwtI87B02D0qgV8D1UHRm4AhMnJ8MCs1809kMQE - JiQUCrp9mQJBANlt2ngBO14us6NnhuAseFDTBzCHXwUUu1YKHpMMmxpnGqaldGgX - sOZB3lgJsT9VlGf3YGYdkLTNVbogQKlKpB8CQQDiSwkb4vyQfDe8/NpU5Not0fII - 8jsDUCb+opWUTMmfbxWRR3FBNu8wnym/m19N4fFj8LqYzHX4KY0oVPu6qvJxAkEA - wa5snNekFcqONLIE4G5cosrIrb74sqL8GbGb+KuTAprzj5z1K8Bm0UW9lTjVDjDi - qRYgZfZSL+x1P/54+xTFSwJAY1FxA/N3QPCXCjPh5YqFxAMQs2VVYTfg+t0MEcJD - dPMQD5JX6g5HKnHFg2mZtoXQrWmJSn7p8GJK8yNTopEErA== + MIIEpAIBAAKCAQEAuV9ht9J7k4NBs38jOXvvTKY9gW8nLICSno5EETR1cuF7i4pN + s9I1QJGAFAX0BEO4KbzXmuOvfCpD3CU+Slp1enenfzq/t/e/1IRW0wkJUJUFQign + 4CtrkJL+P07yx18UjyPlBXb81ApEmAB5mrJVSrWmqbjs07JbuS4QQGGXLc+Su96D + kYKmSNVjBiLxVVSpyZfAY3hD37d60uG+X8xdW5v68JkRFIhdGlb6JL8fllf/A/bl + NwdJOhVr9mESHhwGjwfSeTDPfd8ZLE027E5lyAVX9KZYcU00mOX+fdxOSnGqS/8J + DRh0EPHDL15RcJjV2J6vZjPb0rOYGDoMcH+94wIDAQABAoIBAAzsamqfYQAqwXTb + I0CJtGg6msUgU7HVkOM+9d3hM2L791oGHV6xBAdpXW2H8LgvZHJ8eOeSghR8+dgq + PIqAffo4x1Oma+FOg3A0fb0evyiACyrOk+EcBdbBeLo/LcvahBtqnDfiUMQTpy6V + seSoFCwuN91TSCeGIsDpRjbG1vxZgtx+uI+oH5+ytqJOmfCksRDCkMglGkzyfcl0 + Xc5CUhIJ0my53xijEUQl19rtWdMnNnnkdbG8PT3LZlOta5Do86BElzUYka0C6dUc + VsBDQ0Nup0P6rEQgy7tephHoRlUGTYamsajGJaAo1F3IQVIrRSuagi7+YpSpCqsW + wORqorkCgYEA7RdX6MDVrbw7LePnhyuaqTiMK+055/R1TqhB1JvvxJ1CXk2rDL6G + 0TLHQ7oGofd5LYiemg4ZVtWdJe43BPZlVgT6lvL/iGo8JnrncB9Da6L7nrq/+Rvj + XGjf1qODCK+LmreZWEsaLPURIoR/Ewwxb9J2zd0CaMjeTwafJo1CZvcCgYEAyCgb + aqoWvUecX8VvARfuA593Lsi50t4MEArnOXXcd1RnXoZWhbx5rgO8/ATKfXr0BK/n + h2GF9PfKzHFm/4V6e82OL7gu/kLy2u9bXN74vOvWFL5NOrOKPM7Kg+9I131kNYOw + Ivnr/VtHE5s0dY7JChYWE1F3vArrOw3T00a4CXUCgYEA0SqY+dS2LvIzW4cHCe9k + IQqsT0yYm5TFsUEr4sA3xcPfe4cV8sZb9k/QEGYb1+SWWZ+AHPV3UW5fl8kTbSNb + v4ng8i8rVVQ0ANbJO9e5CUrepein2MPL0AkOATR8M7t7dGGpvYV0cFk8ZrFx0oId + U0PgYDotF/iueBWlbsOM430CgYEAqYI95dFyPI5/AiSkY5queeb8+mQH62sdcCCr + vd/w/CZA/K5sbAo4SoTj8dLk4evU6HtIa0DOP63y071eaxvRpTNqLUOgmLh+D6gS + Cc7TfLuFrD+WDBatBd5jZ+SoHccVrLR/4L8jeodo5FPW05A+9gnKXEXsTxY4LOUC + 9bS4e1kCgYAqVXZh63JsMwoaxCYmQ66eJojKa47VNrOeIZDZvd2BPVf30glBOT41 + gBoDG3WMPZoQj9pb7uMcrnvs4APj2FIhMU8U15LcPAj59cD6S6rWnAxO8NFK7HQG + 4Jxg3JNNf8ErQoCHb1B3oVdXJkmbJkARoDpBKmTCgKtP8ADYLmVPQw== -----END RSA PRIVATE KEY----- EOF key = OpenSSL::PKey::RSA.new(pem) - assert_same_rsa rsa1024, key + assert_same_rsa rsa, key - assert_equal asn1.to_der, rsa1024.to_der - assert_equal pem, rsa1024.export + assert_equal asn1.to_der, rsa.to_der + assert_equal pem, rsa.export # Unknown PEM prepended - cert = issue_cert(OpenSSL::X509::Name.new([["CN", "nobody"]]), rsa1024, 1, [], nil, nil) - str = cert.to_text + cert.to_pem + rsa1024.to_pem + cert = issue_cert(OpenSSL::X509::Name.new([["CN", "nobody"]]), rsa, 1, [], nil, nil) + str = cert.to_text + cert.to_pem + rsa.to_pem key = OpenSSL::PKey::RSA.new(str) - assert_same_rsa rsa1024, key + assert_same_rsa rsa, key end def test_RSAPrivateKey_encrypted + omit_on_fips + rsa1024 = Fixtures.pkey("rsa1024") # key = abcdef pem = <<~EOF @@ -438,6 +480,8 @@ def test_PUBKEY end def test_pem_passwd + omit_on_fips + key = Fixtures.pkey("rsa1024") pem3c = key.to_pem("aes-128-cbc", "key") assert_match (/ENCRYPTED/), pem3c @@ -484,41 +528,54 @@ def test_private_encoding end def test_private_encoding_encrypted - rsa1024 = Fixtures.pkey("rsa1024") - encoded = rsa1024.private_to_der("aes-128-cbc", "abcdef") + rsa = Fixtures.pkey("rsa2048") + encoded = rsa.private_to_der("aes-128-cbc", "abcdef") asn1 = OpenSSL::ASN1.decode(encoded) # PKCS #8 EncryptedPrivateKeyInfo assert_kind_of OpenSSL::ASN1::Sequence, asn1 assert_equal 2, asn1.value.size - assert_not_equal rsa1024.private_to_der, encoded - assert_same_rsa rsa1024, OpenSSL::PKey.read(encoded, "abcdef") - assert_same_rsa rsa1024, OpenSSL::PKey.read(encoded) { "abcdef" } + assert_not_equal rsa.private_to_der, encoded + assert_same_rsa rsa, OpenSSL::PKey.read(encoded, "abcdef") + assert_same_rsa rsa, OpenSSL::PKey.read(encoded) { "abcdef" } assert_raise(OpenSSL::PKey::PKeyError) { OpenSSL::PKey.read(encoded, "abcxyz") } - encoded = rsa1024.private_to_pem("aes-128-cbc", "abcdef") + encoded = rsa.private_to_pem("aes-128-cbc", "abcdef") assert_match (/BEGIN ENCRYPTED PRIVATE KEY/), encoded.lines[0] - assert_same_rsa rsa1024, OpenSSL::PKey.read(encoded, "abcdef") + assert_same_rsa rsa, OpenSSL::PKey.read(encoded, "abcdef") - # certtool --load-privkey=test/fixtures/pkey/rsa1024.pem --to-p8 --password=abcdef + # certtool --load-privkey=test/openssl/fixtures/pkey/rsa2048.pem --to-p8 --password=abcdef pem = <<~EOF -----BEGIN ENCRYPTED PRIVATE KEY----- - MIICojAcBgoqhkiG9w0BDAEDMA4ECLqajUdSNfzwAgIEkQSCAoCDWhxr1HUrKLXA - FsFGGQfPT0aKH4gZipaSXXQRl0KwifHwHoDtfo/mAkJVZMnUVOm1AQ4LTFS3EdTy - JUwICGEQHb7QAiokIRoi0K2yHhOxVO8qgbnWuisWpiT6Ru1jCqTs/wcqlqF7z2jM - oXDk/vuekKst1DDXDcHrzhDkwhCQWj6jt1r2Vwaryy0FyeqsWAgBDiK2LsnCgkGD - 21uhNZ/iWMG6tvY9hB8MDdiBJ41YdSG/AKLulAxQ1ibJz0Tasu66TmwFvWhBlME+ - QbqfgmkgWg5buu53SvDfCA47zXihclbtdfW+U3CJ9OJkx0535TVdZbuC1QgKXvG7 - 4iKGFRMWYJqZvZM3GL4xbC75AxjXZsdCfV81VjZxjeU6ung/NRzCuCUcmBOQzo1D - Vv6COwAa6ttQWM0Ti8oIQHdu5Qi+nuOEHDLxCxD962M37H99sEO5cESjmrGVxhEo - 373L4+11geGSCajdp0yiAGnXQfwaKta8cL693bRObN+b1Y+vqtDKH26N9a4R3qgg - 2XwgQ5GH5CODoXZpi0wxncXO+3YuuhGeArtzKSXLNxHzIMlY7wZX+0e9UU03zfV/ - aOe4/q5DpkNxgHePt0oEpamSKY5W3jzVi1dlFWsRjud1p/Grt2zjSWTYClBlJqG1 - A/3IeDZCu+acaePJjFyv5dFffIj2l4bAYB+LFrZlSu3F/EimO/dCDWJ9JGlMK0aF - l9brh7786Mo+YfyklaqMMEHBbbR2Es7PR6Gt7lrcIXmzy9XSsxT6IiD1rG9KKR3i - CQxTup6JAx9w1q+adL+Ypikoy3gGD/ccUY6TtPoCmkQwSCS+JqQnFlCiThDJbu+V - eqqUNkZq + MIIFOTBjBgkqhkiG9w0BBQ0wVjA1BgkqhkiG9w0BBQwwKAQSsTIsinrhNMr4owUz + cwYGgB0lAgMJJ8ACARAwCgYIKoZIhvcNAgkwHQYJYIZIAWUDBAECBBDtDYqmQOLV + Nh0T0DslWgovBIIE0ESbJey2Pjf9brTp9/41CPnI9Ev78CGSv8Ihyuynu6G7oj7N + G7jUB1pVMQ7ivebF5DmM0qHAix6fDqJetB3WCnRQpMLyIdq5VrnKwFNhwGYduWA5 + IyaAc4DHj02e6YLyBTIKpu79OSFxLrnLCRaTbvZIUQaGhyd6pB7iAhqz5YBC0rpa + iMK5TRlNGPYG9n2eGFOhvUsbJ4T8VDzjpVWw0VNRaukXtg4xiR6o1f0qSXqAb5d9 + REq5DfaQfoOKTV9j7KJHDRrBQG81vkU4K+xILrCBfbcYb82aCoinwSep9LC30HaH + LZ0hYQOuD/k/UbgjToS2wyMnkz75MN5ZNhDMZl/mACQdsMMtIxG37Mpo1Ca33uZi + 71TCOEKIblZS11L1YhIni9Af8pOuHJBWwezP2zN2nPwV6OhgL7Jlax7ICQOPC6L/ + yRGgC5eT4lDDAuTy0IdUhr0r5XrFzZR0/5Vgsq9cGfk9QkXOoETRhQVkEfUDdCs6 + 6CK+SwUR9qh5824ShODFG0SQpsqBPIVtkGrypBSUJtICmGMOAsclB7RDN7/opJwp + qv/iRJ5dhWrhRgQ/DfYifvO5On7RgC2hm48gF3Pt6XCA857ryyYxLYeMY42tAUqp + Hmc9HL7bMYF/jl3cJ32+gLvI3PBVvrvyeAhRo6z7MFVe9I04OywV6BHUx1Us6ybF + qkYnSpcJZdu7HyvzXm7XWLFmt7K5BlAgnFsa/8+cI1BGPgQRc1j0SWepXsSwFZX6 + JkNQ0dewq4uRJXbGyQgfh5I5ETpqDhSt2JfBwAoze6cx3DPC711PUamxyWMiejs+ + mYdia4p62NxaUvyXWmCGIEOzajRwywEhf9OLAmfqTN41TIrEL4BUxqtzDyw8Nl8T + KB7nJEC366jFASfumNQkXXyH5yBIF+XwwSKUOObRZVn2rUzFToo51hHu9efxHoXa + jZlpfglWijkmOuwoIGlGHOq8gUn76oq9WbV+YO+fWm/mf4S3ECzmYzxb6a1uCTy/ + Itkm2qOe3yTM1t+oCqZ0/MeTZ84ALQaWv5reQfjronPZ1jeNtxrYz28tJ4KwBn0U + bJReXbOLsHAymipncxlmaevbx4GPTduu/lbpxefoN95w+SpEdyTmVWrfaCTgAbad + EzcRl60my3xOMQ7CaUbRgGiwohqHDvuXzeqoZ96u6CwfAoEfy4jETmKLRH6uTtj7 + 4jdTyoqyizjpvaM8LPspBS+oqFwLxBjpseQuScrZO1BjPxrImLy2/VRqwJ+CF4FB + iijEgDgDc1EMIGe5YmOAV+i22n9RqX+2IvkYp7CWXrB9/lmirLFukd7hT8DLPUGq + AvSZwTPbDPoZKG3DAebC3DbiC7A3x0KZp24doNRLamZ/MyKHo2Rzl0UhkzDU0ly2 + eAnyNYsOAQck+C6L+ieD95Gksm9YJWurwttm5JragbIJwMCrsBQd4bXDkKdRhxS2 + JpS0dT/aoDmgTzoG07x4cZk0rjBkfX1ta0j0b1lz7/PZXl9AbRvFdq5sJpmv4Ryz + S+OERqo4IEfJJq2WJ92WR+HLGV3Gvsdb7znZTEF1tp4pWOLAt83Pry282UJxO7Pe + ySf/868TEmXams06GYvH+7cMiIT2m9Dc+EFgNaPmm0uMmJ+ZjqHKSOLzrL7C -----END ENCRYPTED PRIVATE KEY----- EOF - assert_same_rsa rsa1024, OpenSSL::PKey.read(pem, "abcdef") + assert_same_rsa rsa, OpenSSL::PKey.read(pem, "abcdef") end def test_dup diff --git a/test/openssl/test_provider.rb b/test/openssl/test_provider.rb index b0ffae9ce72b83..6f85c00c988204 100644 --- a/test/openssl/test_provider.rb +++ b/test/openssl/test_provider.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true require_relative 'utils' -if defined?(OpenSSL) && defined?(OpenSSL::Provider) && !OpenSSL.fips_mode +if defined?(OpenSSL) && defined?(OpenSSL::Provider) class OpenSSL::TestProvider < OpenSSL::TestCase def test_openssl_provider_name_inspect @@ -12,14 +12,22 @@ def test_openssl_provider_name_inspect end def test_openssl_provider_names + # We expect the following providers are loaded in the cases: + # * Non-FIPS: default + # * FIPS: fips, base + # Use the null provider to test the added provider. + # See provider(7) - OPENSSL PROVIDERS to see the list of providers, and + # OSSL_PROVIDER-null(7) to check the details of the null provider. with_openssl <<-'end;' - base_provider = OpenSSL::Provider.load("base") - assert_equal(2, OpenSSL::Provider.provider_names.size) - assert_includes(OpenSSL::Provider.provider_names, "base") + num = OpenSSL::Provider.provider_names.size - assert_equal(true, base_provider.unload) - assert_equal(1, OpenSSL::Provider.provider_names.size) - assert_not_includes(OpenSSL::Provider.provider_names, "base") + added_provider = OpenSSL::Provider.load("null") + assert_equal(num + 1, OpenSSL::Provider.provider_names.size) + assert_includes(OpenSSL::Provider.provider_names, "null") + + assert_equal(true, added_provider.unload) + assert_equal(num, OpenSSL::Provider.provider_names.size) + assert_not_includes(OpenSSL::Provider.provider_names, "null") end; end @@ -33,6 +41,9 @@ def test_unloaded_openssl_provider end def test_openssl_legacy_provider + # The legacy provider is not supported on FIPS. + omit_on_fips + with_openssl(<<-'end;') begin OpenSSL::Provider.load("legacy") diff --git a/test/pathname/test_pathname.rb b/test/pathname/test_pathname.rb index a23dc21ae36f84..6a4bb784bd0d66 100644 --- a/test/pathname/test_pathname.rb +++ b/test/pathname/test_pathname.rb @@ -1333,6 +1333,14 @@ def test_s_glob_3args } end + def test_mktmpdir + Pathname.mktmpdir do |dir| + assert_equal Pathname(dir), dir + assert dir.directory? + assert dir.exist? + end + end + def test_s_getwd wd = Pathname.getwd assert_kind_of(Pathname, wd) @@ -1467,7 +1475,8 @@ def assert_mode(val, mask, path, mesg = nil) def test_mkpath with_tmpchdir('rubytest-pathname') {|dir| - Pathname("a/b/c/d").mkpath + path = Pathname("a/b/c/d") + assert_equal(path, path.mkpath) assert_file.directory?("a/b/c/d") unless File.stat(dir).world_readable? # mktmpdir should make unreadable @@ -1483,7 +1492,8 @@ def test_rmtree with_tmpchdir('rubytest-pathname') {|dir| Pathname("a/b/c/d").mkpath assert_file.exist?("a/b/c/d") - Pathname("a").rmtree + path = Pathname("a") + assert_equal(path, path.rmtree) assert_file.not_exist?("a") } end diff --git a/test/prism/api/command_line_test.rb b/test/prism/api/command_line_test.rb index a313845ead7777..e53d18703a4dff 100644 --- a/test/prism/api/command_line_test.rb +++ b/test/prism/api/command_line_test.rb @@ -52,6 +52,9 @@ def test_command_line_l assert_kind_of CallNode, predicate assert_equal :gets, predicate.name + arguments = predicate.arguments + assert arguments.contains_keywords? + arguments = predicate.arguments.arguments assert_equal 2, arguments.length assert_equal :$/, arguments.first.name @@ -67,7 +70,7 @@ def test_command_line_e end def test_command_line_x_implicit - result = Prism.parse_statement(<<~RUBY) + result = Prism.parse_statement(<<~RUBY, main_script: true) #!/bin/bash exit 1 @@ -90,7 +93,7 @@ def test_command_line_x_explicit end def test_command_line_x_implicit_fail - result = Prism.parse(<<~RUBY) + result = Prism.parse(<<~RUBY, main_script: true) #!/bin/bash exit 1 RUBY diff --git a/test/prism/api/parse_test.rb b/test/prism/api/parse_test.rb index dda0d6959ce51c..ee8061c98c5dc3 100644 --- a/test/prism/api/parse_test.rb +++ b/test/prism/api/parse_test.rb @@ -61,6 +61,82 @@ def test_parse_file end end + def test_parse_tempfile + Tempfile.create(["test_parse_tempfile", ".rb"]) do |t| + t.puts ["begin\n", " end\n"] + t.flush + Prism.parse_file(t.path) + end + end + + if RUBY_ENGINE != "truffleruby" + def test_parse_nonascii + Dir.mktmpdir do |dir| + path = File.join(dir, "\u{3042 3044 3046 3048 304a}.rb".encode(Encoding::Windows_31J)) + File.write(path, "ok") + Prism.parse_file(path) + end + end + end + + def test_parse_directory + error = nil + + begin + Prism.parse_file(__dir__) + rescue SystemCallError => error + end + + assert_kind_of Errno::EISDIR, error + end + + def test_partial_script + assert Prism.parse_failure?("break") + assert Prism.parse_success?("break", partial_script: true) + + assert Prism.parse_failure?("next") + assert Prism.parse_success?("next", partial_script: true) + + assert Prism.parse_failure?("redo") + assert Prism.parse_success?("redo", partial_script: true) + + assert Prism.parse_failure?("yield") + assert Prism.parse_success?("yield", partial_script: true) + end + + def test_version + assert Prism.parse_success?("1 + 1", version: "3.3") + assert Prism.parse_success?("1 + 1", version: "3.3.0") + assert Prism.parse_success?("1 + 1", version: "3.3.1") + assert Prism.parse_success?("1 + 1", version: "3.3.9") + assert Prism.parse_success?("1 + 1", version: "3.3.10") + + assert Prism.parse_success?("1 + 1", version: "3.4") + assert Prism.parse_success?("1 + 1", version: "3.4.0") + assert Prism.parse_success?("1 + 1", version: "3.4.9") + assert Prism.parse_success?("1 + 1", version: "3.4.10") + + assert Prism.parse_success?("1 + 1", version: "latest") + + # Test edge case + error = assert_raise(ArgumentError) { Prism.parse("1 + 1", version: "latest2") } + assert_equal "invalid version: latest2", error.message + + assert_raise ArgumentError do + Prism.parse("1 + 1", version: "3.3.a") + end + + # Not supported version (too old) + assert_raise ArgumentError do + Prism.parse("1 + 1", version: "3.2.0") + end + + # Not supported version (too new) + assert_raise ArgumentError do + Prism.parse("1 + 1", version: "3.5.0") + end + end + private def find_source_file_node(program) diff --git a/test/prism/errors/amperand_dot_after_endless_range.txt b/test/prism/errors/amperand_dot_after_endless_range.txt new file mode 100644 index 00000000000000..ab8c8ccc4d4d10 --- /dev/null +++ b/test/prism/errors/amperand_dot_after_endless_range.txt @@ -0,0 +1,3 @@ +0 if true...&.abs + ^~ unexpected '&.'; ... is a non-associative operator + diff --git a/test/prism/errors/arguments_invalid_comma.txt b/test/prism/errors/arguments_invalid_comma.txt new file mode 100644 index 00000000000000..4e1360580c4982 --- /dev/null +++ b/test/prism/errors/arguments_invalid_comma.txt @@ -0,0 +1,4 @@ +p(a,b +,) +^ invalid comma + diff --git a/test/prism/errors/array_invalid_comma.txt b/test/prism/errors/array_invalid_comma.txt new file mode 100644 index 00000000000000..2f52a253e0fbe9 --- /dev/null +++ b/test/prism/errors/array_invalid_comma.txt @@ -0,0 +1,4 @@ +[a +,] +^ invalid comma + diff --git a/test/prism/errors/binary_range_with_left_unary_range.txt b/test/prism/errors/binary_range_with_left_unary_range.txt index 37e41f397179b9..85cf55fb8064cf 100644 --- a/test/prism/errors/binary_range_with_left_unary_range.txt +++ b/test/prism/errors/binary_range_with_left_unary_range.txt @@ -2,6 +2,7 @@ ^~ unexpected range operator; .. and ... are non-associative and cannot be chained ...1.. ^~ unexpected range operator; .. and ... are non-associative and cannot be chained + ^~ unexpected ..; .. is a non-associative operator ^~ unexpected .., expecting end-of-input ^~ unexpected .., ignoring it diff --git a/test/prism/errors/break_1.txt b/test/prism/errors/break_1.txt index e7b26ad3a01ee9..5d74e7bde0f1af 100644 --- a/test/prism/errors/break_1.txt +++ b/test/prism/errors/break_1.txt @@ -1,4 +1,4 @@ break 1,; - ^ expected an argument + ^ unexpected ';'; expected an argument ^~~~~~~~ Invalid break diff --git a/test/prism/errors/command_call_in.txt b/test/prism/errors/command_call_in.txt index a4357028c67768..2fdcf0973897b7 100644 --- a/test/prism/errors/command_call_in.txt +++ b/test/prism/errors/command_call_in.txt @@ -1,7 +1,5 @@ foo 1 in a - ^ unexpected `in` keyword in arguments - ^ unexpected local variable or method, expecting end-of-input + ^~ unexpected 'in', expecting end-of-input + ^~ unexpected 'in', ignoring it a = foo 2 in b - ^ unexpected `in` keyword in arguments - ^ unexpected local variable or method, expecting end-of-input diff --git a/test/prism/errors/dynamic_label_pattern.txt b/test/prism/errors/dynamic_label_pattern.txt new file mode 100644 index 00000000000000..b8d1012e45bc55 --- /dev/null +++ b/test/prism/errors/dynamic_label_pattern.txt @@ -0,0 +1,3 @@ +:a => 'a': | 1 + ^ expected a pattern expression after the key + diff --git a/test/prism/errors/for_loop_delimiter.txt b/test/prism/errors/for_loop_delimiter.txt new file mode 100644 index 00000000000000..07002d9d0645a2 --- /dev/null +++ b/test/prism/errors/for_loop_delimiter.txt @@ -0,0 +1,3 @@ +for a in b end + ^~~ unexpected 'end'; expected a 'do', newline, or ';' after the 'for' loop collection + diff --git a/test/prism/errors/for_loops_only_end.txt b/test/prism/errors/for_loops_only_end.txt index 94cc5270b56dd7..a8eaf0b8ab32d9 100644 --- a/test/prism/errors/for_loops_only_end.txt +++ b/test/prism/errors/for_loops_only_end.txt @@ -2,4 +2,5 @@ for end ^~~ expected an index after `for` ^ expected an `in` after the index in a `for` statement ^ expected a collection after the `in` in a `for` statement + ^~~ unexpected 'end'; expected a 'do', newline, or ';' after the 'for' loop collection diff --git a/test/prism/errors/heredoc_unterminated.txt b/test/prism/errors/heredoc_unterminated.txt new file mode 100644 index 00000000000000..3c6aeaeb81fdb5 --- /dev/null +++ b/test/prism/errors/heredoc_unterminated.txt @@ -0,0 +1,9 @@ +a=>{< 1 } + ^ unexpected '.'; expected a value in the hash literal + ^ expected a `}` to close the hash literal + ^ unexpected '}', expecting end-of-input + ^ unexpected '}', ignoring it + diff --git a/test/prism/errors/label_in_parentheses.txt b/test/prism/errors/label_in_parentheses.txt new file mode 100644 index 00000000000000..4f6e3e9e36ddf2 --- /dev/null +++ b/test/prism/errors/label_in_parentheses.txt @@ -0,0 +1,3 @@ +("a":) + ^~~~ unexpected label + diff --git a/test/prism/errors/multi_target_parens.txt b/test/prism/errors/multi_target_parens.txt new file mode 100644 index 00000000000000..fe1b9a4b180e32 --- /dev/null +++ b/test/prism/errors/multi_target_parens.txt @@ -0,0 +1,19 @@ +( + ( * ) ) + ^~~~~ unexpected write target +( a ( * ) ) + ^~~~~ unexpected write target +( 1 + ( * ) ) + ^~~~~ unexpected write target +( .. ( * ) ) + ^~~~~ unexpected write target +( a = ( * ) ) + ^~~~~ unexpected write target +( * = ( * ) ) + ^~~~~ unexpected write target +( a if ( * ) ) + ^~~~~ unexpected write target +( 1; ( * ) ) + ^~~~~ unexpected write target +( def f() = ( * ) ) + ^~~~~ unexpected write target + diff --git a/test/prism/errors/multi_target_star.txt b/test/prism/errors/multi_target_star.txt new file mode 100644 index 00000000000000..3d6d7f42867adb --- /dev/null +++ b/test/prism/errors/multi_target_star.txt @@ -0,0 +1,17 @@ +[(*),] + ^~~ unexpected write target +[1,(a,*b,(c,d)),1] + ^~~~~~~~~~~~ unexpected write target +{a:(*),} + ^~~ unexpected write target +[1+(*),] + ^~~ unexpected write target +x=(*),1 + ^~~ unexpected write target +p((*),) + ^~~ unexpected write target +p (*),1 + ^~~ unexpected write target +x = def f = (*),1 + ^~~ unexpected write target + diff --git a/test/prism/errors/next_1.txt b/test/prism/errors/next_1.txt index b56b7f6ae634b3..83ce038ebbde36 100644 --- a/test/prism/errors/next_1.txt +++ b/test/prism/errors/next_1.txt @@ -1,4 +1,4 @@ next 1,; - ^ expected an argument + ^ unexpected ';'; expected an argument ^~~~~~~ Invalid next diff --git a/test/prism/errors/non_assoc_equality.txt b/test/prism/errors/non_assoc_equality.txt index 6ce8da88d6a72c..9b3f13754913a9 100644 --- a/test/prism/errors/non_assoc_equality.txt +++ b/test/prism/errors/non_assoc_equality.txt @@ -1,19 +1,25 @@ 1 == 2 == 3 + ^~ unexpected '=='; '==' is a non-associative operator ^~ unexpected '==', expecting end-of-input ^~ unexpected '==', ignoring it 1 != 2 != 3 + ^~ unexpected '!='; '!=' is a non-associative operator ^~ unexpected '!=', expecting end-of-input ^~ unexpected '!=', ignoring it 1 === 2 === 3 + ^~~ unexpected '==='; '===' is a non-associative operator ^~~ unexpected '===', expecting end-of-input ^~~ unexpected '===', ignoring it 1 =~ 2 =~ 3 + ^~ unexpected '=~'; '=~' is a non-associative operator ^~ unexpected '=~', expecting end-of-input ^~ unexpected '=~', ignoring it 1 !~ 2 !~ 3 + ^~ unexpected '!~'; '!~' is a non-associative operator ^~ unexpected '!~', expecting end-of-input ^~ unexpected '!~', ignoring it 1 <=> 2 <=> 3 + ^~~ unexpected '<=>'; '<=>' is a non-associative operator ^~~ unexpected '<=>', expecting end-of-input ^~~ unexpected '<=>', ignoring it diff --git a/test/prism/errors/non_assoc_range.txt b/test/prism/errors/non_assoc_range.txt index 072cf6d3c6e19e..12eec105940a71 100644 --- a/test/prism/errors/non_assoc_range.txt +++ b/test/prism/errors/non_assoc_range.txt @@ -1,4 +1,5 @@ 1....2 + ^ unexpected '.'; ... is a non-associative operator ^ unexpected '.', expecting end-of-input ^ unexpected '.', ignoring it diff --git a/test/prism/errors/parameters_invalid_comma.txt b/test/prism/errors/parameters_invalid_comma.txt new file mode 100644 index 00000000000000..2d22f7ca76e6dc --- /dev/null +++ b/test/prism/errors/parameters_invalid_comma.txt @@ -0,0 +1,4 @@ +def f(a +,b);end +^ invalid comma + diff --git a/test/prism/errors/range_and_bin_op.txt b/test/prism/errors/range_and_bin_op.txt index 4a7a396d0d649d..55928c409b8a9d 100644 --- a/test/prism/errors/range_and_bin_op.txt +++ b/test/prism/errors/range_and_bin_op.txt @@ -1,4 +1,5 @@ 1..2..3 + ^~ unexpected ..; .. is a non-associative operator ^~ unexpected .., expecting end-of-input ^~ unexpected .., ignoring it diff --git a/test/prism/errors/range_and_bin_op_2.txt b/test/prism/errors/range_and_bin_op_2.txt index f2a31dcf82cf6e..6ca91a26eb97b7 100644 --- a/test/prism/errors/range_and_bin_op_2.txt +++ b/test/prism/errors/range_and_bin_op_2.txt @@ -1,4 +1,5 @@ 1..2.. + ^~ unexpected ..; .. is a non-associative operator ^~ unexpected .., expecting end-of-input ^~ unexpected .., ignoring it diff --git a/test/prism/errors/range_and_bin_op_4.txt b/test/prism/errors/range_and_bin_op_4.txt index 56226480cfcfe0..ce6e79e5ff59cc 100644 --- a/test/prism/errors/range_and_bin_op_4.txt +++ b/test/prism/errors/range_and_bin_op_4.txt @@ -1,4 +1,5 @@ 1.. & 2 + ^ unexpected '&'; .. is a non-associative operator ^ unexpected '&', expecting end-of-input ^ unexpected '&', ignoring it diff --git a/test/prism/errors/range_and_bin_op_5.txt b/test/prism/errors/range_and_bin_op_5.txt index bc8b46791474b5..4ed91e1052031c 100644 --- a/test/prism/errors/range_and_bin_op_5.txt +++ b/test/prism/errors/range_and_bin_op_5.txt @@ -1,4 +1,5 @@ 1.. * 2 + ^ unexpected *; .. is a non-associative operator ^ unexpected *, expecting end-of-input ^ unexpected write target ^~~ unexpected write target diff --git a/test/prism/errors/range_doubled.txt b/test/prism/errors/range_doubled.txt new file mode 100644 index 00000000000000..ef63d1bedea27e --- /dev/null +++ b/test/prism/errors/range_doubled.txt @@ -0,0 +1,3 @@ +p(...1...) + ^~~ unexpected range operator; .. and ... are non-associative and cannot be chained + diff --git a/test/prism/errors/return_1.txt b/test/prism/errors/return_1.txt index b4ce8f1f2a66bd..ca3c3494d23a01 100644 --- a/test/prism/errors/return_1.txt +++ b/test/prism/errors/return_1.txt @@ -1,3 +1,3 @@ return 1,; - ^ expected an argument + ^ unexpected ';'; expected an argument diff --git a/test/prism/errors/singleton_class_delimiter.txt b/test/prism/errors/singleton_class_delimiter.txt new file mode 100644 index 00000000000000..6a0232cb400665 --- /dev/null +++ b/test/prism/errors/singleton_class_delimiter.txt @@ -0,0 +1,3 @@ +class < *bar, baz, qux foo => bar, *baz, qux foo => bar, baz, *qux foo => *bar, baz, *qux - -foo => bar, - -; # end the previous pattern for ParseTest#test_filepath_patterns.txt which parses the whole file at once +foo => bar,; foo => [] foo => [[[[[]]]]] @@ -127,10 +124,7 @@ foo in __FILE__ foo in __LINE__ foo in __ENCODING__ foo in -> { bar } - -foo in bar, - -; # end the previous pattern for ParseTest#test_filepath_patterns.txt which parses the whole file at once +foo in bar,; case foo; in bar then end case foo; in 1 then end diff --git a/test/prism/fixtures/range_beginless.txt b/test/prism/fixtures/range_beginless.txt new file mode 100644 index 00000000000000..a55b9b57e77b12 --- /dev/null +++ b/test/prism/fixtures/range_beginless.txt @@ -0,0 +1,5 @@ +def f(x = ...?a); end + +def f(x: ...?a); end + +def f() ...:a; end diff --git a/test/prism/fixtures/regex_escape_encoding.txt b/test/prism/fixtures/regex_escape_encoding.txt new file mode 100644 index 00000000000000..74e1647d675025 --- /dev/null +++ b/test/prism/fixtures/regex_escape_encoding.txt @@ -0,0 +1,3 @@ +# encoding: US-ASCII +str = "hello \xFC" +str =~ /hello \u{fc}/ diff --git a/test/prism/fixtures/unparser/corpus/literal/unary.txt b/test/prism/fixtures/unparser/corpus/literal/unary.txt index 77685cb71d080a..6992d86bb02dbe 100644 --- a/test/prism/fixtures/unparser/corpus/literal/unary.txt +++ b/test/prism/fixtures/unparser/corpus/literal/unary.txt @@ -6,3 +6,4 @@ -a +a -(-a).foo ++(+a).foo diff --git a/test/prism/locals_test.rb b/test/prism/locals_test.rb index ea61fd94996ec3..2c0036289cdabf 100644 --- a/test/prism/locals_test.rb +++ b/test/prism/locals_test.rb @@ -9,6 +9,10 @@ # to test on the most recent versions. return if !defined?(RubyVM::InstructionSequence) || RUBY_VERSION < "3.4.0" +# If we're on Ruby 3.4.0 and the default parser is Prism, then there is no point +# in comparing the locals because they will be the same. +return if RubyVM::InstructionSequence.compile("").to_a[4][:parser] == :prism + # In Ruby 3.4.0, the local table for method forwarding changed. But 3.4.0 can # refer to the dev version, so while 3.4.0 still isn't released, we need to # check if we have a high enough revision. diff --git a/test/prism/magic_comment_test.rb b/test/prism/magic_comment_test.rb index 14653fb0f861c8..ab4b5f56e5169b 100644 --- a/test/prism/magic_comment_test.rb +++ b/test/prism/magic_comment_test.rb @@ -87,7 +87,14 @@ def assert_magic_encoding(expected, line) # Compare against Ruby's expectation. if defined?(RubyVM::InstructionSequence) - expected = RubyVM::InstructionSequence.compile(source).eval.encoding + previous = $VERBOSE + expected = + begin + $VERBOSE = nil + RubyVM::InstructionSequence.compile(source).eval.encoding + ensure + $VERBOSE = previous + end assert_equal expected, actual end end diff --git a/test/prism/result/warnings_test.rb b/test/prism/result/warnings_test.rb index aeac7f80e64704..5cff2d2d2b8f9e 100644 --- a/test/prism/result/warnings_test.rb +++ b/test/prism/result/warnings_test.rb @@ -22,6 +22,15 @@ def test_ambiguous_regexp assert_warning("a /b/", "wrap regexp in parentheses") end + def test_ambiguous_ampersand + assert_warning("a &b", "argument prefix") + assert_warning("a &:+", "argument prefix") + + refute_warning("a &:b") + refute_warning("a &:'b'") + refute_warning("a &:\"b\"") + end + def test_binary_operator [ [:**, "argument prefix"], @@ -115,6 +124,9 @@ def test_indentation_mismatch assert_warning("case 1; when 2\n end", "mismatched indentations at 'end' with 'case'") assert_warning("case 1; in 2\n end", "mismatched indentations at 'end' with 'case'") + assert_warning(" case 1\nwhen 2\n end", "mismatched indentations at 'when' with 'case'") + refute_warning("case 1\n when 2\n when 3\nend") # case/when allows more indentation + assert_warning("-> {\n }", "mismatched indentations at '}' with '->'") assert_warning("-> do\n end", "mismatched indentations at 'end' with '->'") assert_warning("-> do\n rescue\nend", "mismatched indentations at 'rescue' with '->'") @@ -174,6 +186,10 @@ def test_keyword_eol assert_warning("if true\nelsif\nfalse; end", "end of line") end + def test_numbered_reference + assert_warning("_ = _ = $999999999999999999999", "too big for a number variable, always nil") + end + def test_shareable_constant_value assert_warning("foo # shareable_constant_value: none", "ignored") assert_warning("\v # shareable_constant_value: none", "ignored") @@ -321,42 +337,49 @@ def test_unreachable_statement assert_warning("tap { redo; foo }", "statement not reached") end - def test_shebang_ending_with_carriage_return - msg = "shebang line ending with \\r may cause problems" - - assert_warning(<<~RUBY, msg, compare: false) - #!ruby\r - p(123) - RUBY - - assert_warning(<<~RUBY, msg, compare: false) - #!ruby \r - p(123) - RUBY - - assert_warning(<<~RUBY, msg, compare: false) - #!ruby -Eutf-8\r - p(123) - RUBY - - # Used with the `-x` object, to ignore the script up until the first shebang that mentioned "ruby". - assert_warning(<<~SCRIPT, msg, compare: false) - #!/usr/bin/env bash - # Some initial shell script or other content - # that Ruby should ignore - echo "This is shell script part" - exit 0 - - #! /usr/bin/env ruby -Eutf-8\r - # Ruby script starts here - puts "Hello from Ruby!" - SCRIPT - - refute_warning("#ruby not_a_shebang\r\n", compare: false) - - # CRuby doesn't emit the warning if a malformed file only has `\r` and not `\n`. - # https://bugs.ruby-lang.org/issues/20700 - refute_warning("#!ruby\r", compare: false) + if RbConfig::CONFIG["host_os"].match?(/bccwin|cygwin|djgpp|mingw|mswin|wince/i) + def test_shebang_ending_with_carriage_return + refute_warning("#!ruby\r\np(123)\n", compare: false) + end + else + def test_shebang_ending_with_carriage_return + msg = "shebang line ending with \\r may cause problems" + + assert_warning(<<~RUBY, msg, compare: false, main_script: true) + #!ruby\r + p(123) + RUBY + + assert_warning(<<~RUBY, msg, compare: false, main_script: true) + #!ruby \r + p(123) + RUBY + + assert_warning(<<~RUBY, msg, compare: false, main_script: true) + #!ruby -Eutf-8\r + p(123) + RUBY + + # Used with the `-x` object, to ignore the script up until the first + # shebang that mentioned "ruby". + assert_warning(<<~SCRIPT, msg, compare: false, main_script: true) + #!/usr/bin/env bash + # Some initial shell script or other content + # that Ruby should ignore + echo "This is shell script part" + exit 0 + + #! /usr/bin/env ruby -Eutf-8\r + # Ruby script starts here + puts "Hello from Ruby!" + SCRIPT + + refute_warning("#ruby not_a_shebang\r\n", compare: false, main_script: true) + + # CRuby doesn't emit the warning if a malformed file only has `\r` and + # not `\n`. https://bugs.ruby-lang.org/issues/20700. + refute_warning("#!ruby\r", compare: false, main_script: true) + end end def test_warnings_verbosity @@ -371,8 +394,8 @@ def test_warnings_verbosity private - def assert_warning(source, *messages, compare: true) - warnings = Prism.parse(source).warnings + def assert_warning(source, *messages, compare: true, **options) + warnings = Prism.parse(source, **options).warnings assert_equal messages.length, warnings.length, "Expected #{messages.length} warning(s) in #{source.inspect}, got #{warnings.map(&:message).inspect}" warnings.zip(messages).each do |warning, message| diff --git a/test/prism/ruby/location_test.rb b/test/prism/ruby/location_test.rb index fc80a5b875d7c2..3d3e7dd5623ef4 100644 --- a/test/prism/ruby/location_test.rb +++ b/test/prism/ruby/location_test.rb @@ -140,6 +140,38 @@ def test_code_units assert_equal 7, location.end_code_units_column(Encoding::UTF_32LE) end + def test_code_units_binary_valid_utf8 + program = Prism.parse(<<~RUBY).value + # -*- encoding: binary -*- + + 😀 + 😀 + RUBY + + receiver = program.statements.body.first.receiver + assert_equal "😀".b.to_sym, receiver.name + + location = receiver.location + assert_equal 1, location.end_code_units_column(Encoding::UTF_8) + assert_equal 2, location.end_code_units_column(Encoding::UTF_16LE) + assert_equal 1, location.end_code_units_column(Encoding::UTF_32LE) + end + + def test_code_units_binary_invalid_utf8 + program = Prism.parse(<<~RUBY).value + # -*- encoding: binary -*- + + \x90 + \x90 + RUBY + + receiver = program.statements.body.first.receiver + assert_equal "\x90".b.to_sym, receiver.name + + location = receiver.location + assert_equal 1, location.end_code_units_column(Encoding::UTF_8) + assert_equal 1, location.end_code_units_column(Encoding::UTF_16LE) + assert_equal 1, location.end_code_units_column(Encoding::UTF_32LE) + end + def test_chop location = Prism.parse("foo").value.location diff --git a/test/prism/ruby/parser_test.rb b/test/prism/ruby/parser_test.rb index b60ccf9320970b..606a0e54f64c03 100644 --- a/test/prism/ruby/parser_test.rb +++ b/test/prism/ruby/parser_test.rb @@ -268,13 +268,8 @@ def assert_equal_tokens(expected_tokens, actual_tokens) # There are a lot of tokens that have very specific meaning according # to the context of the parser. We don't expose that information in # prism, so we need to normalize these tokens a bit. - case actual_token[0] - when :kDO - actual_token[0] = expected_token[0] if %i[kDO_BLOCK kDO_LAMBDA].include?(expected_token[0]) - when :tLPAREN - actual_token[0] = expected_token[0] if expected_token[0] == :tLPAREN2 - when :tPOW - actual_token[0] = expected_token[0] if expected_token[0] == :tDSTAR + if expected_token[0] == :kDO_BLOCK && actual_token[0] == :kDO + actual_token[0] = expected_token[0] end # Now we can assert that the tokens are actually equal. diff --git a/test/prism/snapshots/alias.txt b/test/prism/snapshots/alias.txt deleted file mode 100644 index 0d52c14f1a851f..00000000000000 --- a/test/prism/snapshots/alias.txt +++ /dev/null @@ -1,215 +0,0 @@ -@ ProgramNode (location: (1,0)-(23,11)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(23,11)) - ├── flags: ∅ - └── body: (length: 12) - ├── @ AliasMethodNode (location: (1,0)-(1,15)) - │ ├── flags: newline - │ ├── new_name: - │ │ @ SymbolNode (location: (1,6)-(1,10)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (1,6)-(1,7) = ":" - │ │ ├── value_loc: (1,7)-(1,10) = "foo" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "foo" - │ ├── old_name: - │ │ @ SymbolNode (location: (1,11)-(1,15)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (1,11)-(1,12) = ":" - │ │ ├── value_loc: (1,12)-(1,15) = "bar" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "bar" - │ └── keyword_loc: (1,0)-(1,5) = "alias" - ├── @ AliasMethodNode (location: (3,0)-(3,21)) - │ ├── flags: newline - │ ├── new_name: - │ │ @ SymbolNode (location: (3,6)-(3,13)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (3,6)-(3,9) = "%s[" - │ │ ├── value_loc: (3,9)-(3,12) = "abc" - │ │ ├── closing_loc: (3,12)-(3,13) = "]" - │ │ └── unescaped: "abc" - │ ├── old_name: - │ │ @ SymbolNode (location: (3,14)-(3,21)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (3,14)-(3,17) = "%s[" - │ │ ├── value_loc: (3,17)-(3,20) = "def" - │ │ ├── closing_loc: (3,20)-(3,21) = "]" - │ │ └── unescaped: "def" - │ └── keyword_loc: (3,0)-(3,5) = "alias" - ├── @ AliasMethodNode (location: (5,0)-(5,19)) - │ ├── flags: newline - │ ├── new_name: - │ │ @ SymbolNode (location: (5,6)-(5,12)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (5,6)-(5,8) = ":'" - │ │ ├── value_loc: (5,8)-(5,11) = "abc" - │ │ ├── closing_loc: (5,11)-(5,12) = "'" - │ │ └── unescaped: "abc" - │ ├── old_name: - │ │ @ SymbolNode (location: (5,13)-(5,19)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (5,13)-(5,15) = ":'" - │ │ ├── value_loc: (5,15)-(5,18) = "def" - │ │ ├── closing_loc: (5,18)-(5,19) = "'" - │ │ └── unescaped: "def" - │ └── keyword_loc: (5,0)-(5,5) = "alias" - ├── @ AliasMethodNode (location: (7,0)-(7,23)) - │ ├── flags: newline - │ ├── new_name: - │ │ @ InterpolatedSymbolNode (location: (7,6)-(7,16)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (7,6)-(7,8) = ":\"" - │ │ ├── parts: (length: 2) - │ │ │ ├── @ StringNode (location: (7,8)-(7,11)) - │ │ │ │ ├── flags: static_literal, frozen - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── content_loc: (7,8)-(7,11) = "abc" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "abc" - │ │ │ └── @ EmbeddedStatementsNode (location: (7,11)-(7,15)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (7,11)-(7,13) = "\#{" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (7,13)-(7,14)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ IntegerNode (location: (7,13)-(7,14)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ └── closing_loc: (7,14)-(7,15) = "}" - │ │ └── closing_loc: (7,15)-(7,16) = "\"" - │ ├── old_name: - │ │ @ SymbolNode (location: (7,17)-(7,23)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (7,17)-(7,19) = ":'" - │ │ ├── value_loc: (7,19)-(7,22) = "def" - │ │ ├── closing_loc: (7,22)-(7,23) = "'" - │ │ └── unescaped: "def" - │ └── keyword_loc: (7,0)-(7,5) = "alias" - ├── @ AliasGlobalVariableNode (location: (9,0)-(9,11)) - │ ├── flags: newline - │ ├── new_name: - │ │ @ GlobalVariableReadNode (location: (9,6)-(9,8)) - │ │ ├── flags: ∅ - │ │ └── name: :$a - │ ├── old_name: - │ │ @ BackReferenceReadNode (location: (9,9)-(9,11)) - │ │ ├── flags: ∅ - │ │ └── name: :$' - │ └── keyword_loc: (9,0)-(9,5) = "alias" - ├── @ AliasMethodNode (location: (11,0)-(11,13)) - │ ├── flags: newline - │ ├── new_name: - │ │ @ SymbolNode (location: (11,6)-(11,9)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: ∅ - │ │ ├── value_loc: (11,6)-(11,9) = "foo" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "foo" - │ ├── old_name: - │ │ @ SymbolNode (location: (11,10)-(11,13)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: ∅ - │ │ ├── value_loc: (11,10)-(11,13) = "bar" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "bar" - │ └── keyword_loc: (11,0)-(11,5) = "alias" - ├── @ AliasGlobalVariableNode (location: (13,0)-(13,15)) - │ ├── flags: newline - │ ├── new_name: - │ │ @ GlobalVariableReadNode (location: (13,6)-(13,10)) - │ │ ├── flags: ∅ - │ │ └── name: :$foo - │ ├── old_name: - │ │ @ GlobalVariableReadNode (location: (13,11)-(13,15)) - │ │ ├── flags: ∅ - │ │ └── name: :$bar - │ └── keyword_loc: (13,0)-(13,5) = "alias" - ├── @ AliasMethodNode (location: (15,0)-(15,12)) - │ ├── flags: newline - │ ├── new_name: - │ │ @ SymbolNode (location: (15,6)-(15,9)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: ∅ - │ │ ├── value_loc: (15,6)-(15,9) = "foo" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "foo" - │ ├── old_name: - │ │ @ SymbolNode (location: (15,10)-(15,12)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: ∅ - │ │ ├── value_loc: (15,10)-(15,12) = "if" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "if" - │ └── keyword_loc: (15,0)-(15,5) = "alias" - ├── @ AliasMethodNode (location: (17,0)-(17,13)) - │ ├── flags: newline - │ ├── new_name: - │ │ @ SymbolNode (location: (17,6)-(17,9)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: ∅ - │ │ ├── value_loc: (17,6)-(17,9) = "foo" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "foo" - │ ├── old_name: - │ │ @ SymbolNode (location: (17,10)-(17,13)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: ∅ - │ │ ├── value_loc: (17,10)-(17,13) = "<=>" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "<=>" - │ └── keyword_loc: (17,0)-(17,5) = "alias" - ├── @ AliasMethodNode (location: (19,0)-(19,15)) - │ ├── flags: newline - │ ├── new_name: - │ │ @ SymbolNode (location: (19,6)-(19,9)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (19,6)-(19,7) = ":" - │ │ ├── value_loc: (19,7)-(19,9) = "==" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "==" - │ ├── old_name: - │ │ @ SymbolNode (location: (19,10)-(19,15)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (19,10)-(19,11) = ":" - │ │ ├── value_loc: (19,11)-(19,15) = "eql?" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "eql?" - │ └── keyword_loc: (19,0)-(19,5) = "alias" - ├── @ AliasMethodNode (location: (21,0)-(21,9)) - │ ├── flags: newline - │ ├── new_name: - │ │ @ SymbolNode (location: (21,6)-(21,7)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: ∅ - │ │ ├── value_loc: (21,6)-(21,7) = "A" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "A" - │ ├── old_name: - │ │ @ SymbolNode (location: (21,8)-(21,9)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: ∅ - │ │ ├── value_loc: (21,8)-(21,9) = "B" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "B" - │ └── keyword_loc: (21,0)-(21,5) = "alias" - └── @ AliasMethodNode (location: (23,0)-(23,11)) - ├── flags: newline - ├── new_name: - │ @ SymbolNode (location: (23,6)-(23,8)) - │ ├── flags: static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (23,6)-(23,7) = ":" - │ ├── value_loc: (23,7)-(23,8) = "A" - │ ├── closing_loc: ∅ - │ └── unescaped: "A" - ├── old_name: - │ @ SymbolNode (location: (23,9)-(23,11)) - │ ├── flags: static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (23,9)-(23,10) = ":" - │ ├── value_loc: (23,10)-(23,11) = "B" - │ ├── closing_loc: ∅ - │ └── unescaped: "B" - └── keyword_loc: (23,0)-(23,5) = "alias" diff --git a/test/prism/snapshots/arithmetic.txt b/test/prism/snapshots/arithmetic.txt deleted file mode 100644 index 963080e0d96b14..00000000000000 --- a/test/prism/snapshots/arithmetic.txt +++ /dev/null @@ -1,257 +0,0 @@ -@ ProgramNode (location: (1,0)-(13,8)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(13,8)) - ├── flags: ∅ - └── body: (length: 7) - ├── @ CallNode (location: (1,0)-(1,8)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (1,0)-(1,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,4)-(1,8)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (1,4)-(1,8)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ CallNode (location: (1,5)-(1,8)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (1,5)-(1,8) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :! - │ │ ├── message_loc: (1,4)-(1,5) = "!" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (3,0)-(3,8)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (3,0)-(3,4)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ CallNode (location: (3,1)-(3,4)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (3,1)-(3,4) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :-@ - │ │ ├── message_loc: (3,0)-(3,1) = "-" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :* - │ ├── message_loc: (3,4)-(3,5) = "*" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (3,5)-(3,8)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (3,5)-(3,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (3,5)-(3,8) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (5,0)-(5,9)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (5,0)-(5,4)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ CallNode (location: (5,1)-(5,4)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (5,1)-(5,4) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :+@ - │ │ ├── message_loc: (5,0)-(5,1) = "+" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :** - │ ├── message_loc: (5,4)-(5,6) = "**" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (5,6)-(5,9)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (5,6)-(5,9)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (5,6)-(5,9) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (7,0)-(7,8)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (7,0)-(7,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (7,4)-(7,8)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (7,4)-(7,8)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ CallNode (location: (7,5)-(7,8)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (7,5)-(7,8) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :~ - │ │ ├── message_loc: (7,4)-(7,5) = "~" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (9,0)-(9,17)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (9,0)-(9,10)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ CallNode (location: (9,0)-(9,3)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (9,0)-(9,3) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :<< - │ │ ├── message_loc: (9,4)-(9,6) = "<<" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (9,7)-(9,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ CallNode (location: (9,7)-(9,10)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (9,7)-(9,10) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :<< - │ ├── message_loc: (9,11)-(9,13) = "<<" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (9,14)-(9,17)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (9,14)-(9,17)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :baz - │ │ ├── message_loc: (9,14)-(9,17) = "baz" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (11,0)-(11,5)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (11,1)-(11,5)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ IntegerNode (location: (11,1)-(11,2)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :** - │ │ ├── message_loc: (11,2)-(11,4) = "**" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (11,4)-(11,5)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (11,4)-(11,5)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :-@ - │ ├── message_loc: (11,0)-(11,1) = "-" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── @ CallNode (location: (13,0)-(13,8)) - ├── flags: newline - ├── receiver: - │ @ IntegerNode (location: (13,0)-(13,2)) - │ ├── flags: static_literal, decimal - │ └── value: -1 - ├── call_operator_loc: (13,2)-(13,3) = "." - ├── name: :zero? - ├── message_loc: (13,3)-(13,8) = "zero?" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/arrays.txt b/test/prism/snapshots/arrays.txt deleted file mode 100644 index f34ee1395c42be..00000000000000 --- a/test/prism/snapshots/arrays.txt +++ /dev/null @@ -1,1886 +0,0 @@ -@ ProgramNode (location: (1,0)-(122,32)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(122,32)) - ├── flags: ∅ - └── body: (length: 50) - ├── @ ArrayNode (location: (1,0)-(1,4)) - │ ├── flags: newline, contains_splat - │ ├── elements: (length: 1) - │ │ └── @ SplatNode (location: (1,1)-(1,3)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (1,1)-(1,2) = "*" - │ │ └── expression: - │ │ @ CallNode (location: (1,2)-(1,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (1,2)-(1,3) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── opening_loc: (1,0)-(1,1) = "[" - │ └── closing_loc: (1,3)-(1,4) = "]" - ├── @ CallNode (location: (3,0)-(3,23)) - │ ├── flags: newline, attribute_write - │ ├── receiver: - │ │ @ CallNode (location: (3,0)-(3,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (3,0)-(3,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :[]= - │ ├── message_loc: (3,3)-(3,13) = "[bar, baz]" - │ ├── opening_loc: (3,3)-(3,4) = "[" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (3,4)-(3,23)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 3) - │ │ ├── @ CallNode (location: (3,4)-(3,7)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (3,4)-(3,7) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── @ CallNode (location: (3,9)-(3,12)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :baz - │ │ │ ├── message_loc: (3,9)-(3,12) = "baz" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── @ ArrayNode (location: (3,16)-(3,23)) - │ │ ├── flags: static_literal - │ │ ├── elements: (length: 3) - │ │ │ ├── @ IntegerNode (location: (3,16)-(3,17)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ ├── @ IntegerNode (location: (3,19)-(3,20)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 2 - │ │ │ └── @ IntegerNode (location: (3,22)-(3,23)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 3 - │ │ ├── opening_loc: ∅ - │ │ └── closing_loc: ∅ - │ ├── closing_loc: (3,12)-(3,13) = "]" - │ └── block: ∅ - ├── @ ArrayNode (location: (5,0)-(5,13)) - │ ├── flags: newline - │ ├── elements: (length: 1) - │ │ └── @ KeywordHashNode (location: (5,1)-(5,12)) - │ │ ├── flags: symbol_keys - │ │ └── elements: (length: 1) - │ │ └── @ AssocNode (location: (5,1)-(5,12)) - │ │ ├── flags: ∅ - │ │ ├── key: - │ │ │ @ SymbolNode (location: (5,1)-(5,3)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (5,1)-(5,2) = "a" - │ │ │ ├── closing_loc: (5,2)-(5,3) = ":" - │ │ │ └── unescaped: "a" - │ │ ├── value: - │ │ │ @ ArrayNode (location: (5,4)-(5,12)) - │ │ │ ├── flags: static_literal - │ │ │ ├── elements: (length: 2) - │ │ │ │ ├── @ SymbolNode (location: (5,5)-(5,7)) - │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ │ ├── opening_loc: (5,5)-(5,6) = ":" - │ │ │ │ │ ├── value_loc: (5,6)-(5,7) = "b" - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── unescaped: "b" - │ │ │ │ └── @ SymbolNode (location: (5,9)-(5,11)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: (5,9)-(5,10) = ":" - │ │ │ │ ├── value_loc: (5,10)-(5,11) = "c" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "c" - │ │ │ ├── opening_loc: (5,4)-(5,5) = "[" - │ │ │ └── closing_loc: (5,11)-(5,12) = "]" - │ │ └── operator_loc: ∅ - │ ├── opening_loc: (5,0)-(5,1) = "[" - │ └── closing_loc: (5,12)-(5,13) = "]" - ├── @ ArrayNode (location: (9,0)-(15,1)) - │ ├── flags: newline, static_literal - │ ├── elements: (length: 5) - │ │ ├── @ SymbolNode (location: (9,1)-(9,3)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (9,1)-(9,2) = ":" - │ │ │ ├── value_loc: (9,2)-(9,3) = "a" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "a" - │ │ ├── @ SymbolNode (location: (9,5)-(9,7)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (9,5)-(9,6) = ":" - │ │ │ ├── value_loc: (9,6)-(9,7) = "b" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "b" - │ │ ├── @ SymbolNode (location: (10,0)-(10,2)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (10,0)-(10,1) = ":" - │ │ │ ├── value_loc: (10,1)-(10,2) = "c" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "c" - │ │ ├── @ IntegerNode (location: (10,3)-(10,4)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── @ SymbolNode (location: (14,0)-(14,2)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (14,0)-(14,1) = ":" - │ │ ├── value_loc: (14,1)-(14,2) = "d" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "d" - │ ├── opening_loc: (9,0)-(9,1) = "[" - │ └── closing_loc: (15,0)-(15,1) = "]" - ├── @ ArrayNode (location: (18,0)-(26,1)) - │ ├── flags: newline, static_literal - │ ├── elements: (length: 5) - │ │ ├── @ SymbolNode (location: (18,1)-(18,3)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (18,1)-(18,2) = ":" - │ │ │ ├── value_loc: (18,2)-(18,3) = "a" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "a" - │ │ ├── @ SymbolNode (location: (18,5)-(18,7)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (18,5)-(18,6) = ":" - │ │ │ ├── value_loc: (18,6)-(18,7) = "b" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "b" - │ │ ├── @ SymbolNode (location: (19,0)-(19,2)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (19,0)-(19,1) = ":" - │ │ │ ├── value_loc: (19,1)-(19,2) = "c" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "c" - │ │ ├── @ IntegerNode (location: (19,3)-(19,4)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── @ SymbolNode (location: (23,0)-(23,2)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (23,0)-(23,1) = ":" - │ │ ├── value_loc: (23,1)-(23,2) = "d" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "d" - │ ├── opening_loc: (18,0)-(18,1) = "[" - │ └── closing_loc: (26,0)-(26,1) = "]" - ├── @ ArrayNode (location: (28,0)-(28,12)) - │ ├── flags: newline - │ ├── elements: (length: 1) - │ │ └── @ KeywordHashNode (location: (28,1)-(28,11)) - │ │ ├── flags: ∅ - │ │ └── elements: (length: 1) - │ │ └── @ AssocNode (location: (28,1)-(28,11)) - │ │ ├── flags: ∅ - │ │ ├── key: - │ │ │ @ CallNode (location: (28,1)-(28,4)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (28,1)-(28,4) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── value: - │ │ │ @ CallNode (location: (28,8)-(28,11)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (28,8)-(28,11) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: (28,5)-(28,7) = "=>" - │ ├── opening_loc: (28,0)-(28,1) = "[" - │ └── closing_loc: (28,11)-(28,12) = "]" - ├── @ CallNode (location: (30,0)-(30,19)) - │ ├── flags: newline, attribute_write - │ ├── receiver: - │ │ @ CallNode (location: (30,0)-(30,8)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ CallNode (location: (30,0)-(30,3)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (30,0)-(30,3) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :[] - │ │ ├── message_loc: (30,3)-(30,8) = "[bar]" - │ │ ├── opening_loc: (30,3)-(30,4) = "[" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (30,4)-(30,7)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ CallNode (location: (30,4)-(30,7)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (30,4)-(30,7) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── closing_loc: (30,7)-(30,8) = "]" - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :[]= - │ ├── message_loc: (30,8)-(30,13) = "[baz]" - │ ├── opening_loc: (30,8)-(30,9) = "[" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (30,9)-(30,19)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (30,9)-(30,12)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :baz - │ │ │ ├── message_loc: (30,9)-(30,12) = "baz" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── @ CallNode (location: (30,16)-(30,19)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :qux - │ │ ├── message_loc: (30,16)-(30,19) = "qux" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (30,12)-(30,13) = "]" - │ └── block: ∅ - ├── @ CallNode (location: (32,0)-(32,13)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (32,0)-(32,8)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ CallNode (location: (32,0)-(32,3)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (32,0)-(32,3) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :[] - │ │ ├── message_loc: (32,3)-(32,8) = "[bar]" - │ │ ├── opening_loc: (32,3)-(32,4) = "[" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (32,4)-(32,7)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ CallNode (location: (32,4)-(32,7)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (32,4)-(32,7) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── closing_loc: (32,7)-(32,8) = "]" - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :[] - │ ├── message_loc: (32,8)-(32,13) = "[baz]" - │ ├── opening_loc: (32,8)-(32,9) = "[" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (32,9)-(32,12)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (32,9)-(32,12)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :baz - │ │ ├── message_loc: (32,9)-(32,12) = "baz" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (32,12)-(32,13) = "]" - │ └── block: ∅ - ├── @ ArrayNode (location: (34,0)-(35,1)) - │ ├── flags: newline, static_literal - │ ├── elements: (length: 0) - │ ├── opening_loc: (34,0)-(34,1) = "[" - │ └── closing_loc: (35,0)-(35,1) = "]" - ├── @ CallNode (location: (37,0)-(37,13)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (37,0)-(37,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (37,0)-(37,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :[] - │ ├── message_loc: (37,3)-(37,13) = "[bar, baz]" - │ ├── opening_loc: (37,3)-(37,4) = "[" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (37,4)-(37,12)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (37,4)-(37,7)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (37,4)-(37,7) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── @ CallNode (location: (37,9)-(37,12)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :baz - │ │ ├── message_loc: (37,9)-(37,12) = "baz" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (37,12)-(37,13) = "]" - │ └── block: ∅ - ├── @ CallNode (location: (39,0)-(39,19)) - │ ├── flags: newline, attribute_write - │ ├── receiver: - │ │ @ CallNode (location: (39,0)-(39,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (39,0)-(39,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :[]= - │ ├── message_loc: (39,3)-(39,13) = "[bar, baz]" - │ ├── opening_loc: (39,3)-(39,4) = "[" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (39,4)-(39,19)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 3) - │ │ ├── @ CallNode (location: (39,4)-(39,7)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (39,4)-(39,7) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── @ CallNode (location: (39,9)-(39,12)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :baz - │ │ │ ├── message_loc: (39,9)-(39,12) = "baz" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── @ CallNode (location: (39,16)-(39,19)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :qux - │ │ ├── message_loc: (39,16)-(39,19) = "qux" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (39,12)-(39,13) = "]" - │ └── block: ∅ - ├── @ MultiWriteNode (location: (41,0)-(41,21)) - │ ├── flags: newline - │ ├── lefts: (length: 2) - │ │ ├── @ IndexTargetNode (location: (41,0)-(41,6)) - │ │ │ ├── flags: attribute_write - │ │ │ ├── receiver: - │ │ │ │ @ CallNode (location: (41,0)-(41,3)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :foo - │ │ │ │ ├── message_loc: (41,0)-(41,3) = "foo" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── opening_loc: (41,3)-(41,4) = "[" - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (41,4)-(41,5)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ IntegerNode (location: (41,4)-(41,5)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 0 - │ │ │ ├── closing_loc: (41,5)-(41,6) = "]" - │ │ │ └── block: ∅ - │ │ └── @ IndexTargetNode (location: (41,8)-(41,14)) - │ │ ├── flags: attribute_write - │ │ ├── receiver: - │ │ │ @ CallNode (location: (41,8)-(41,11)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (41,8)-(41,11) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── opening_loc: (41,11)-(41,12) = "[" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (41,12)-(41,13)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (41,12)-(41,13)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 0 - │ │ ├── closing_loc: (41,13)-(41,14) = "]" - │ │ └── block: ∅ - │ ├── rest: ∅ - │ ├── rights: (length: 0) - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── operator_loc: (41,15)-(41,16) = "=" - │ └── value: - │ @ ArrayNode (location: (41,17)-(41,21)) - │ ├── flags: static_literal - │ ├── elements: (length: 2) - │ │ ├── @ IntegerNode (location: (41,17)-(41,18)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── @ IntegerNode (location: (41,20)-(41,21)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── opening_loc: ∅ - │ └── closing_loc: ∅ - ├── @ CallNode (location: (43,0)-(43,19)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (43,0)-(43,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (43,0)-(43,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :[] - │ ├── message_loc: (43,3)-(43,19) = "[bar[baz] = qux]" - │ ├── opening_loc: (43,3)-(43,4) = "[" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (43,4)-(43,18)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (43,4)-(43,18)) - │ │ ├── flags: attribute_write - │ │ ├── receiver: - │ │ │ @ CallNode (location: (43,4)-(43,7)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (43,4)-(43,7) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :[]= - │ │ ├── message_loc: (43,7)-(43,12) = "[baz]" - │ │ ├── opening_loc: (43,7)-(43,8) = "[" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (43,8)-(43,18)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 2) - │ │ │ ├── @ CallNode (location: (43,8)-(43,11)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ ├── message_loc: (43,8)-(43,11) = "baz" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── @ CallNode (location: (43,15)-(43,18)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :qux - │ │ │ ├── message_loc: (43,15)-(43,18) = "qux" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── closing_loc: (43,11)-(43,12) = "]" - │ │ └── block: ∅ - │ ├── closing_loc: (43,18)-(43,19) = "]" - │ └── block: ∅ - ├── @ CallNode (location: (45,0)-(45,8)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (45,0)-(45,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (45,0)-(45,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :[] - │ ├── message_loc: (45,3)-(45,8) = "[bar]" - │ ├── opening_loc: (45,3)-(45,4) = "[" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (45,4)-(45,7)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (45,4)-(45,7)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (45,4)-(45,7) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (45,7)-(45,8) = "]" - │ └── block: ∅ - ├── @ CallNode (location: (47,0)-(47,14)) - │ ├── flags: newline, attribute_write - │ ├── receiver: - │ │ @ CallNode (location: (47,0)-(47,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (47,0)-(47,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :[]= - │ ├── message_loc: (47,3)-(47,8) = "[bar]" - │ ├── opening_loc: (47,3)-(47,4) = "[" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (47,4)-(47,14)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (47,4)-(47,7)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (47,4)-(47,7) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── @ CallNode (location: (47,11)-(47,14)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :baz - │ │ ├── message_loc: (47,11)-(47,14) = "baz" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (47,7)-(47,8) = "]" - │ └── block: ∅ - ├── @ ArrayNode (location: (49,0)-(49,6)) - │ ├── flags: newline - │ ├── elements: (length: 1) - │ │ └── @ KeywordHashNode (location: (49,1)-(49,5)) - │ │ ├── flags: ∅ - │ │ └── elements: (length: 1) - │ │ └── @ AssocSplatNode (location: (49,1)-(49,5)) - │ │ ├── flags: ∅ - │ │ ├── value: - │ │ │ @ HashNode (location: (49,3)-(49,5)) - │ │ │ ├── flags: static_literal - │ │ │ ├── opening_loc: (49,3)-(49,4) = "{" - │ │ │ ├── elements: (length: 0) - │ │ │ └── closing_loc: (49,4)-(49,5) = "}" - │ │ └── operator_loc: (49,1)-(49,3) = "**" - │ ├── opening_loc: (49,0)-(49,1) = "[" - │ └── closing_loc: (49,5)-(49,6) = "]" - ├── @ ArrayNode (location: (51,0)-(51,6)) - │ ├── flags: newline - │ ├── elements: (length: 1) - │ │ └── @ KeywordHashNode (location: (51,1)-(51,5)) - │ │ ├── flags: ∅ - │ │ └── elements: (length: 1) - │ │ └── @ AssocSplatNode (location: (51,1)-(51,5)) - │ │ ├── flags: ∅ - │ │ ├── value: - │ │ │ @ CallNode (location: (51,3)-(51,5)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :kw - │ │ │ ├── message_loc: (51,3)-(51,5) = "kw" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: (51,1)-(51,3) = "**" - │ ├── opening_loc: (51,0)-(51,1) = "[" - │ └── closing_loc: (51,5)-(51,6) = "]" - ├── @ ArrayNode (location: (53,0)-(53,9)) - │ ├── flags: newline - │ ├── elements: (length: 2) - │ │ ├── @ IntegerNode (location: (53,1)-(53,2)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── @ KeywordHashNode (location: (53,4)-(53,8)) - │ │ ├── flags: ∅ - │ │ └── elements: (length: 1) - │ │ └── @ AssocSplatNode (location: (53,4)-(53,8)) - │ │ ├── flags: ∅ - │ │ ├── value: - │ │ │ @ CallNode (location: (53,6)-(53,8)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :kw - │ │ │ ├── message_loc: (53,6)-(53,8) = "kw" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: (53,4)-(53,6) = "**" - │ ├── opening_loc: (53,0)-(53,1) = "[" - │ └── closing_loc: (53,8)-(53,9) = "]" - ├── @ ArrayNode (location: (55,0)-(55,21)) - │ ├── flags: newline - │ ├── elements: (length: 2) - │ │ ├── @ IntegerNode (location: (55,1)-(55,2)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── @ KeywordHashNode (location: (55,4)-(55,20)) - │ │ ├── flags: ∅ - │ │ └── elements: (length: 3) - │ │ ├── @ AssocSplatNode (location: (55,4)-(55,8)) - │ │ │ ├── flags: ∅ - │ │ │ ├── value: - │ │ │ │ @ CallNode (location: (55,6)-(55,8)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :kw - │ │ │ │ ├── message_loc: (55,6)-(55,8) = "kw" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── operator_loc: (55,4)-(55,6) = "**" - │ │ ├── @ AssocSplatNode (location: (55,10)-(55,14)) - │ │ │ ├── flags: ∅ - │ │ │ ├── value: - │ │ │ │ @ HashNode (location: (55,12)-(55,14)) - │ │ │ │ ├── flags: static_literal - │ │ │ │ ├── opening_loc: (55,12)-(55,13) = "{" - │ │ │ │ ├── elements: (length: 0) - │ │ │ │ └── closing_loc: (55,13)-(55,14) = "}" - │ │ │ └── operator_loc: (55,10)-(55,12) = "**" - │ │ └── @ AssocSplatNode (location: (55,16)-(55,20)) - │ │ ├── flags: ∅ - │ │ ├── value: - │ │ │ @ CallNode (location: (55,18)-(55,20)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :kw - │ │ │ ├── message_loc: (55,18)-(55,20) = "kw" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: (55,16)-(55,18) = "**" - │ ├── opening_loc: (55,0)-(55,1) = "[" - │ └── closing_loc: (55,20)-(55,21) = "]" - ├── @ ArrayNode (location: (57,0)-(59,1)) - │ ├── flags: newline - │ ├── elements: (length: 1) - │ │ └── @ KeywordHashNode (location: (58,2)-(58,12)) - │ │ ├── flags: ∅ - │ │ └── elements: (length: 1) - │ │ └── @ AssocNode (location: (58,2)-(58,12)) - │ │ ├── flags: ∅ - │ │ ├── key: - │ │ │ @ CallNode (location: (58,2)-(58,5)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (58,2)-(58,5) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── value: - │ │ │ @ CallNode (location: (58,9)-(58,12)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (58,9)-(58,12) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: (58,6)-(58,8) = "=>" - │ ├── opening_loc: (57,0)-(57,1) = "[" - │ └── closing_loc: (59,0)-(59,1) = "]" - ├── @ ArrayNode (location: (62,0)-(62,17)) - │ ├── flags: newline, static_literal - │ ├── elements: (length: 3) - │ │ ├── @ SymbolNode (location: (62,3)-(62,6)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (62,3)-(62,6) = "one" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "one" - │ │ ├── @ SymbolNode (location: (62,7)-(62,10)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (62,7)-(62,10) = "two" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "two" - │ │ └── @ SymbolNode (location: (62,11)-(62,16)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: ∅ - │ │ ├── value_loc: (62,11)-(62,16) = "three" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "three" - │ ├── opening_loc: (62,0)-(62,3) = "%i#" - │ └── closing_loc: (62,16)-(62,17) = "#" - ├── @ ArrayNode (location: (64,0)-(64,17)) - │ ├── flags: newline - │ ├── elements: (length: 3) - │ │ ├── @ StringNode (location: (64,3)-(64,6)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (64,3)-(64,6) = "one" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "one" - │ │ ├── @ StringNode (location: (64,7)-(64,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (64,7)-(64,10) = "two" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "two" - │ │ └── @ StringNode (location: (64,11)-(64,16)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (64,11)-(64,16) = "three" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "three" - │ ├── opening_loc: (64,0)-(64,3) = "%w#" - │ └── closing_loc: (64,16)-(64,17) = "#" - ├── @ XStringNode (location: (66,0)-(66,17)) - │ ├── flags: newline - │ ├── opening_loc: (66,0)-(66,3) = "%x#" - │ ├── content_loc: (66,3)-(66,16) = "one two three" - │ ├── closing_loc: (66,16)-(66,17) = "#" - │ └── unescaped: "one two three" - ├── @ ArrayNode (location: (69,0)-(69,17)) - │ ├── flags: newline, static_literal - │ ├── elements: (length: 3) - │ │ ├── @ SymbolNode (location: (69,3)-(69,6)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (69,3)-(69,6) = "one" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "one" - │ │ ├── @ SymbolNode (location: (69,7)-(69,10)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (69,7)-(69,10) = "two" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "two" - │ │ └── @ SymbolNode (location: (69,11)-(69,16)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: ∅ - │ │ ├── value_loc: (69,11)-(69,16) = "three" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "three" - │ ├── opening_loc: (69,0)-(69,3) = "%i@" - │ └── closing_loc: (69,16)-(69,17) = "@" - ├── @ ArrayNode (location: (71,0)-(71,17)) - │ ├── flags: newline - │ ├── elements: (length: 3) - │ │ ├── @ StringNode (location: (71,3)-(71,6)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (71,3)-(71,6) = "one" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "one" - │ │ ├── @ StringNode (location: (71,7)-(71,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (71,7)-(71,10) = "two" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "two" - │ │ └── @ StringNode (location: (71,11)-(71,16)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (71,11)-(71,16) = "three" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "three" - │ ├── opening_loc: (71,0)-(71,3) = "%w@" - │ └── closing_loc: (71,16)-(71,17) = "@" - ├── @ XStringNode (location: (73,0)-(73,17)) - │ ├── flags: newline - │ ├── opening_loc: (73,0)-(73,3) = "%x@" - │ ├── content_loc: (73,3)-(73,16) = "one two three" - │ ├── closing_loc: (73,16)-(73,17) = "@" - │ └── unescaped: "one two three" - ├── @ ArrayNode (location: (76,0)-(76,17)) - │ ├── flags: newline, static_literal - │ ├── elements: (length: 3) - │ │ ├── @ SymbolNode (location: (76,3)-(76,6)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (76,3)-(76,6) = "one" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "one" - │ │ ├── @ SymbolNode (location: (76,7)-(76,10)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (76,7)-(76,10) = "two" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "two" - │ │ └── @ SymbolNode (location: (76,11)-(76,16)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: ∅ - │ │ ├── value_loc: (76,11)-(76,16) = "three" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "three" - │ ├── opening_loc: (76,0)-(76,3) = "%i{" - │ └── closing_loc: (76,16)-(76,17) = "}" - ├── @ ArrayNode (location: (78,0)-(78,17)) - │ ├── flags: newline - │ ├── elements: (length: 3) - │ │ ├── @ StringNode (location: (78,3)-(78,6)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (78,3)-(78,6) = "one" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "one" - │ │ ├── @ StringNode (location: (78,7)-(78,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (78,7)-(78,10) = "two" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "two" - │ │ └── @ StringNode (location: (78,11)-(78,16)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (78,11)-(78,16) = "three" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "three" - │ ├── opening_loc: (78,0)-(78,3) = "%w{" - │ └── closing_loc: (78,16)-(78,17) = "}" - ├── @ XStringNode (location: (80,0)-(80,17)) - │ ├── flags: newline - │ ├── opening_loc: (80,0)-(80,3) = "%x{" - │ ├── content_loc: (80,3)-(80,16) = "one two three" - │ ├── closing_loc: (80,16)-(80,17) = "}" - │ └── unescaped: "one two three" - ├── @ ArrayNode (location: (82,0)-(82,7)) - │ ├── flags: newline - │ ├── elements: (length: 1) - │ │ └── @ StringNode (location: (82,3)-(82,6)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (82,3)-(82,6) = "\\C:" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "\\C:" - │ ├── opening_loc: (82,0)-(82,3) = "%w[" - │ └── closing_loc: (82,6)-(82,7) = "]" - ├── @ IndexOperatorWriteNode (location: (84,0)-(84,10)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (84,0)-(84,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (84,0)-(84,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── opening_loc: (84,3)-(84,4) = "[" - │ ├── arguments: ∅ - │ ├── closing_loc: (84,4)-(84,5) = "]" - │ ├── block: ∅ - │ ├── binary_operator: :+ - │ ├── binary_operator_loc: (84,6)-(84,8) = "+=" - │ └── value: - │ @ IntegerNode (location: (84,9)-(84,10)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── @ IndexOrWriteNode (location: (86,0)-(86,11)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (86,0)-(86,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (86,0)-(86,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── opening_loc: (86,3)-(86,4) = "[" - │ ├── arguments: ∅ - │ ├── closing_loc: (86,4)-(86,5) = "]" - │ ├── block: ∅ - │ ├── operator_loc: (86,6)-(86,9) = "||=" - │ └── value: - │ @ IntegerNode (location: (86,10)-(86,11)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── @ IndexAndWriteNode (location: (88,0)-(88,11)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (88,0)-(88,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (88,0)-(88,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── opening_loc: (88,3)-(88,4) = "[" - │ ├── arguments: ∅ - │ ├── closing_loc: (88,4)-(88,5) = "]" - │ ├── block: ∅ - │ ├── operator_loc: (88,6)-(88,9) = "&&=" - │ └── value: - │ @ IntegerNode (location: (88,10)-(88,11)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── @ IndexOperatorWriteNode (location: (90,0)-(90,14)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (90,0)-(90,7)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ CallNode (location: (90,0)-(90,3)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (90,0)-(90,3) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: (90,3)-(90,4) = "." - │ │ ├── name: :foo - │ │ ├── message_loc: (90,4)-(90,7) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── opening_loc: (90,7)-(90,8) = "[" - │ ├── arguments: ∅ - │ ├── closing_loc: (90,8)-(90,9) = "]" - │ ├── block: ∅ - │ ├── binary_operator: :+ - │ ├── binary_operator_loc: (90,10)-(90,12) = "+=" - │ └── value: - │ @ IntegerNode (location: (90,13)-(90,14)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── @ IndexOrWriteNode (location: (92,0)-(92,15)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (92,0)-(92,7)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ CallNode (location: (92,0)-(92,3)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (92,0)-(92,3) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: (92,3)-(92,4) = "." - │ │ ├── name: :foo - │ │ ├── message_loc: (92,4)-(92,7) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── opening_loc: (92,7)-(92,8) = "[" - │ ├── arguments: ∅ - │ ├── closing_loc: (92,8)-(92,9) = "]" - │ ├── block: ∅ - │ ├── operator_loc: (92,10)-(92,13) = "||=" - │ └── value: - │ @ IntegerNode (location: (92,14)-(92,15)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── @ IndexAndWriteNode (location: (94,0)-(94,15)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (94,0)-(94,7)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ CallNode (location: (94,0)-(94,3)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (94,0)-(94,3) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: (94,3)-(94,4) = "." - │ │ ├── name: :foo - │ │ ├── message_loc: (94,4)-(94,7) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── opening_loc: (94,7)-(94,8) = "[" - │ ├── arguments: ∅ - │ ├── closing_loc: (94,8)-(94,9) = "]" - │ ├── block: ∅ - │ ├── operator_loc: (94,10)-(94,13) = "&&=" - │ └── value: - │ @ IntegerNode (location: (94,14)-(94,15)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── @ IndexOperatorWriteNode (location: (96,0)-(96,13)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (96,0)-(96,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (96,0)-(96,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── opening_loc: (96,3)-(96,4) = "[" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (96,4)-(96,7)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (96,4)-(96,7)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (96,4)-(96,7) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (96,7)-(96,8) = "]" - │ ├── block: ∅ - │ ├── binary_operator: :+ - │ ├── binary_operator_loc: (96,9)-(96,11) = "+=" - │ └── value: - │ @ IntegerNode (location: (96,12)-(96,13)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── @ IndexOrWriteNode (location: (98,0)-(98,14)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (98,0)-(98,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (98,0)-(98,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── opening_loc: (98,3)-(98,4) = "[" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (98,4)-(98,7)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (98,4)-(98,7)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (98,4)-(98,7) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (98,7)-(98,8) = "]" - │ ├── block: ∅ - │ ├── operator_loc: (98,9)-(98,12) = "||=" - │ └── value: - │ @ IntegerNode (location: (98,13)-(98,14)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── @ IndexAndWriteNode (location: (100,0)-(100,14)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (100,0)-(100,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (100,0)-(100,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── opening_loc: (100,3)-(100,4) = "[" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (100,4)-(100,7)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (100,4)-(100,7)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (100,4)-(100,7) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (100,7)-(100,8) = "]" - │ ├── block: ∅ - │ ├── operator_loc: (100,9)-(100,12) = "&&=" - │ └── value: - │ @ IntegerNode (location: (100,13)-(100,14)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── @ IndexOperatorWriteNode (location: (102,0)-(102,17)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (102,0)-(102,7)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ CallNode (location: (102,0)-(102,3)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (102,0)-(102,3) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: (102,3)-(102,4) = "." - │ │ ├── name: :foo - │ │ ├── message_loc: (102,4)-(102,7) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── opening_loc: (102,7)-(102,8) = "[" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (102,8)-(102,11)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (102,8)-(102,11)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (102,8)-(102,11) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (102,11)-(102,12) = "]" - │ ├── block: ∅ - │ ├── binary_operator: :+ - │ ├── binary_operator_loc: (102,13)-(102,15) = "+=" - │ └── value: - │ @ IntegerNode (location: (102,16)-(102,17)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── @ IndexOrWriteNode (location: (104,0)-(104,18)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (104,0)-(104,7)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ CallNode (location: (104,0)-(104,3)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (104,0)-(104,3) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: (104,3)-(104,4) = "." - │ │ ├── name: :foo - │ │ ├── message_loc: (104,4)-(104,7) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── opening_loc: (104,7)-(104,8) = "[" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (104,8)-(104,11)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (104,8)-(104,11)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (104,8)-(104,11) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (104,11)-(104,12) = "]" - │ ├── block: ∅ - │ ├── operator_loc: (104,13)-(104,16) = "||=" - │ └── value: - │ @ IntegerNode (location: (104,17)-(104,18)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── @ IndexAndWriteNode (location: (106,0)-(106,18)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (106,0)-(106,7)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ CallNode (location: (106,0)-(106,3)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (106,0)-(106,3) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: (106,3)-(106,4) = "." - │ │ ├── name: :foo - │ │ ├── message_loc: (106,4)-(106,7) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── opening_loc: (106,7)-(106,8) = "[" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (106,8)-(106,11)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (106,8)-(106,11)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (106,8)-(106,11) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (106,11)-(106,12) = "]" - │ ├── block: ∅ - │ ├── operator_loc: (106,13)-(106,16) = "&&=" - │ └── value: - │ @ IntegerNode (location: (106,17)-(106,18)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── @ DefNode (location: (108,0)-(108,19)) - │ ├── flags: newline - │ ├── name: :f - │ ├── name_loc: (108,4)-(108,5) = "f" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (108,6)-(108,7)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: - │ │ │ @ RestParameterNode (location: (108,6)-(108,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: ∅ - │ │ │ ├── name_loc: ∅ - │ │ │ └── operator_loc: (108,6)-(108,7) = "*" - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (108,10)-(108,14)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (108,10)-(108,14)) - │ │ ├── flags: newline - │ │ ├── receiver: - │ │ │ @ CallNode (location: (108,10)-(108,11)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :a - │ │ │ ├── message_loc: (108,10)-(108,11) = "a" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :[] - │ │ ├── message_loc: (108,11)-(108,14) = "[*]" - │ │ ├── opening_loc: (108,11)-(108,12) = "[" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (108,12)-(108,13)) - │ │ │ ├── flags: contains_splat - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ SplatNode (location: (108,12)-(108,13)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (108,12)-(108,13) = "*" - │ │ │ └── expression: ∅ - │ │ ├── closing_loc: (108,13)-(108,14) = "]" - │ │ └── block: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (108,0)-(108,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (108,5)-(108,6) = "(" - │ ├── rparen_loc: (108,7)-(108,8) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (108,16)-(108,19) = "end" - ├── @ DefNode (location: (110,0)-(110,22)) - │ ├── flags: newline - │ ├── name: :f - │ ├── name_loc: (110,4)-(110,5) = "f" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (110,6)-(110,7)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: - │ │ │ @ RestParameterNode (location: (110,6)-(110,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: ∅ - │ │ │ ├── name_loc: ∅ - │ │ │ └── operator_loc: (110,6)-(110,7) = "*" - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (110,10)-(110,17)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (110,10)-(110,17)) - │ │ ├── flags: newline - │ │ ├── receiver: - │ │ │ @ CallNode (location: (110,10)-(110,11)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :a - │ │ │ ├── message_loc: (110,10)-(110,11) = "a" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :[] - │ │ ├── message_loc: (110,11)-(110,17) = "[1, *]" - │ │ ├── opening_loc: (110,11)-(110,12) = "[" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (110,12)-(110,16)) - │ │ │ ├── flags: contains_splat - │ │ │ └── arguments: (length: 2) - │ │ │ ├── @ IntegerNode (location: (110,12)-(110,13)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ └── @ SplatNode (location: (110,15)-(110,16)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (110,15)-(110,16) = "*" - │ │ │ └── expression: ∅ - │ │ ├── closing_loc: (110,16)-(110,17) = "]" - │ │ └── block: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (110,0)-(110,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (110,5)-(110,6) = "(" - │ ├── rparen_loc: (110,7)-(110,8) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (110,19)-(110,22) = "end" - ├── @ DefNode (location: (112,0)-(112,23)) - │ ├── flags: newline - │ ├── name: :f - │ ├── name_loc: (112,4)-(112,5) = "f" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (112,6)-(112,7)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: - │ │ │ @ RestParameterNode (location: (112,6)-(112,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: ∅ - │ │ │ ├── name_loc: ∅ - │ │ │ └── operator_loc: (112,6)-(112,7) = "*" - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (112,10)-(112,18)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (112,10)-(112,18)) - │ │ ├── flags: newline, attribute_write - │ │ ├── receiver: - │ │ │ @ CallNode (location: (112,10)-(112,11)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :a - │ │ │ ├── message_loc: (112,10)-(112,11) = "a" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :[]= - │ │ ├── message_loc: (112,11)-(112,14) = "[*]" - │ │ ├── opening_loc: (112,11)-(112,12) = "[" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (112,12)-(112,18)) - │ │ │ ├── flags: contains_splat - │ │ │ └── arguments: (length: 2) - │ │ │ ├── @ SplatNode (location: (112,12)-(112,13)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── operator_loc: (112,12)-(112,13) = "*" - │ │ │ │ └── expression: ∅ - │ │ │ └── @ IntegerNode (location: (112,17)-(112,18)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── closing_loc: (112,13)-(112,14) = "]" - │ │ └── block: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (112,0)-(112,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (112,5)-(112,6) = "(" - │ ├── rparen_loc: (112,7)-(112,8) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (112,20)-(112,23) = "end" - ├── @ DefNode (location: (114,0)-(114,26)) - │ ├── flags: newline - │ ├── name: :f - │ ├── name_loc: (114,4)-(114,5) = "f" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (114,6)-(114,7)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: - │ │ │ @ RestParameterNode (location: (114,6)-(114,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: ∅ - │ │ │ ├── name_loc: ∅ - │ │ │ └── operator_loc: (114,6)-(114,7) = "*" - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (114,10)-(114,21)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (114,10)-(114,21)) - │ │ ├── flags: newline, attribute_write - │ │ ├── receiver: - │ │ │ @ CallNode (location: (114,10)-(114,11)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :a - │ │ │ ├── message_loc: (114,10)-(114,11) = "a" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :[]= - │ │ ├── message_loc: (114,11)-(114,17) = "[1, *]" - │ │ ├── opening_loc: (114,11)-(114,12) = "[" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (114,12)-(114,21)) - │ │ │ ├── flags: contains_splat - │ │ │ └── arguments: (length: 3) - │ │ │ ├── @ IntegerNode (location: (114,12)-(114,13)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ ├── @ SplatNode (location: (114,15)-(114,16)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── operator_loc: (114,15)-(114,16) = "*" - │ │ │ │ └── expression: ∅ - │ │ │ └── @ IntegerNode (location: (114,20)-(114,21)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── closing_loc: (114,16)-(114,17) = "]" - │ │ └── block: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (114,0)-(114,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (114,5)-(114,6) = "(" - │ ├── rparen_loc: (114,7)-(114,8) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (114,23)-(114,26) = "end" - ├── @ DefNode (location: (116,0)-(116,24)) - │ ├── flags: newline - │ ├── name: :f - │ ├── name_loc: (116,4)-(116,5) = "f" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (116,6)-(116,7)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: - │ │ │ @ RestParameterNode (location: (116,6)-(116,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: ∅ - │ │ │ ├── name_loc: ∅ - │ │ │ └── operator_loc: (116,6)-(116,7) = "*" - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (116,10)-(116,19)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ IndexOperatorWriteNode (location: (116,10)-(116,19)) - │ │ ├── flags: newline - │ │ ├── receiver: - │ │ │ @ CallNode (location: (116,10)-(116,11)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :a - │ │ │ ├── message_loc: (116,10)-(116,11) = "a" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── opening_loc: (116,11)-(116,12) = "[" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (116,12)-(116,13)) - │ │ │ ├── flags: contains_splat - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ SplatNode (location: (116,12)-(116,13)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (116,12)-(116,13) = "*" - │ │ │ └── expression: ∅ - │ │ ├── closing_loc: (116,13)-(116,14) = "]" - │ │ ├── block: ∅ - │ │ ├── binary_operator: :+ - │ │ ├── binary_operator_loc: (116,15)-(116,17) = "+=" - │ │ └── value: - │ │ @ IntegerNode (location: (116,18)-(116,19)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── locals: [] - │ ├── def_keyword_loc: (116,0)-(116,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (116,5)-(116,6) = "(" - │ ├── rparen_loc: (116,7)-(116,8) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (116,21)-(116,24) = "end" - ├── @ DefNode (location: (118,0)-(118,28)) - │ ├── flags: newline - │ ├── name: :f - │ ├── name_loc: (118,4)-(118,5) = "f" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (118,6)-(118,7)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: - │ │ │ @ RestParameterNode (location: (118,6)-(118,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: ∅ - │ │ │ ├── name_loc: ∅ - │ │ │ └── operator_loc: (118,6)-(118,7) = "*" - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (118,10)-(118,23)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ IndexAndWriteNode (location: (118,10)-(118,23)) - │ │ ├── flags: newline - │ │ ├── receiver: - │ │ │ @ CallNode (location: (118,10)-(118,11)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :a - │ │ │ ├── message_loc: (118,10)-(118,11) = "a" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── opening_loc: (118,11)-(118,12) = "[" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (118,12)-(118,16)) - │ │ │ ├── flags: contains_splat - │ │ │ └── arguments: (length: 2) - │ │ │ ├── @ IntegerNode (location: (118,12)-(118,13)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ └── @ SplatNode (location: (118,15)-(118,16)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (118,15)-(118,16) = "*" - │ │ │ └── expression: ∅ - │ │ ├── closing_loc: (118,16)-(118,17) = "]" - │ │ ├── block: ∅ - │ │ ├── operator_loc: (118,18)-(118,21) = "&&=" - │ │ └── value: - │ │ @ IntegerNode (location: (118,22)-(118,23)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── locals: [] - │ ├── def_keyword_loc: (118,0)-(118,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (118,5)-(118,6) = "(" - │ ├── rparen_loc: (118,7)-(118,8) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (118,25)-(118,28) = "end" - ├── @ DefNode (location: (120,0)-(120,29)) - │ ├── flags: newline - │ ├── name: :f - │ ├── name_loc: (120,4)-(120,5) = "f" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (120,6)-(120,7)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: - │ │ │ @ RestParameterNode (location: (120,6)-(120,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: ∅ - │ │ │ ├── name_loc: ∅ - │ │ │ └── operator_loc: (120,6)-(120,7) = "*" - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ BeginNode (location: (120,0)-(120,29)) - │ │ ├── flags: ∅ - │ │ ├── begin_keyword_loc: ∅ - │ │ ├── statements: ∅ - │ │ ├── rescue_clause: - │ │ │ @ RescueNode (location: (120,10)-(120,24)) - │ │ │ ├── flags: ∅ - │ │ │ ├── keyword_loc: (120,10)-(120,16) = "rescue" - │ │ │ ├── exceptions: (length: 0) - │ │ │ ├── operator_loc: (120,17)-(120,19) = "=>" - │ │ │ ├── reference: - │ │ │ │ @ IndexTargetNode (location: (120,20)-(120,24)) - │ │ │ │ ├── flags: attribute_write - │ │ │ │ ├── receiver: - │ │ │ │ │ @ CallNode (location: (120,20)-(120,21)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :a - │ │ │ │ │ ├── message_loc: (120,20)-(120,21) = "a" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── opening_loc: (120,21)-(120,22) = "[" - │ │ │ │ ├── arguments: - │ │ │ │ │ @ ArgumentsNode (location: (120,22)-(120,23)) - │ │ │ │ │ ├── flags: contains_splat - │ │ │ │ │ └── arguments: (length: 1) - │ │ │ │ │ └── @ SplatNode (location: (120,22)-(120,23)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── operator_loc: (120,22)-(120,23) = "*" - │ │ │ │ │ └── expression: ∅ - │ │ │ │ ├── closing_loc: (120,23)-(120,24) = "]" - │ │ │ │ └── block: ∅ - │ │ │ ├── statements: ∅ - │ │ │ └── subsequent: ∅ - │ │ ├── else_clause: ∅ - │ │ ├── ensure_clause: ∅ - │ │ └── end_keyword_loc: (120,26)-(120,29) = "end" - │ ├── locals: [] - │ ├── def_keyword_loc: (120,0)-(120,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (120,5)-(120,6) = "(" - │ ├── rparen_loc: (120,7)-(120,8) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (120,26)-(120,29) = "end" - └── @ DefNode (location: (122,0)-(122,32)) - ├── flags: newline - ├── name: :f - ├── name_loc: (122,4)-(122,5) = "f" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (122,6)-(122,7)) - │ ├── flags: ∅ - │ ├── requireds: (length: 0) - │ ├── optionals: (length: 0) - │ ├── rest: - │ │ @ RestParameterNode (location: (122,6)-(122,7)) - │ │ ├── flags: ∅ - │ │ ├── name: ∅ - │ │ ├── name_loc: ∅ - │ │ └── operator_loc: (122,6)-(122,7) = "*" - │ ├── posts: (length: 0) - │ ├── keywords: (length: 0) - │ ├── keyword_rest: ∅ - │ └── block: ∅ - ├── body: - │ @ BeginNode (location: (122,0)-(122,32)) - │ ├── flags: ∅ - │ ├── begin_keyword_loc: ∅ - │ ├── statements: ∅ - │ ├── rescue_clause: - │ │ @ RescueNode (location: (122,10)-(122,27)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (122,10)-(122,16) = "rescue" - │ │ ├── exceptions: (length: 0) - │ │ ├── operator_loc: (122,17)-(122,19) = "=>" - │ │ ├── reference: - │ │ │ @ IndexTargetNode (location: (122,20)-(122,27)) - │ │ │ ├── flags: attribute_write - │ │ │ ├── receiver: - │ │ │ │ @ CallNode (location: (122,20)-(122,21)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :a - │ │ │ │ ├── message_loc: (122,20)-(122,21) = "a" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── opening_loc: (122,21)-(122,22) = "[" - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (122,22)-(122,26)) - │ │ │ │ ├── flags: contains_splat - │ │ │ │ └── arguments: (length: 2) - │ │ │ │ ├── @ IntegerNode (location: (122,22)-(122,23)) - │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ └── value: 1 - │ │ │ │ └── @ SplatNode (location: (122,25)-(122,26)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── operator_loc: (122,25)-(122,26) = "*" - │ │ │ │ └── expression: ∅ - │ │ │ ├── closing_loc: (122,26)-(122,27) = "]" - │ │ │ └── block: ∅ - │ │ ├── statements: ∅ - │ │ └── subsequent: ∅ - │ ├── else_clause: ∅ - │ ├── ensure_clause: ∅ - │ └── end_keyword_loc: (122,29)-(122,32) = "end" - ├── locals: [] - ├── def_keyword_loc: (122,0)-(122,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: (122,5)-(122,6) = "(" - ├── rparen_loc: (122,7)-(122,8) = ")" - ├── equal_loc: ∅ - └── end_keyword_loc: (122,29)-(122,32) = "end" diff --git a/test/prism/snapshots/begin_ensure.txt b/test/prism/snapshots/begin_ensure.txt deleted file mode 100644 index 2f127cd11f8e75..00000000000000 --- a/test/prism/snapshots/begin_ensure.txt +++ /dev/null @@ -1,286 +0,0 @@ -@ ProgramNode (location: (1,0)-(21,15)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(21,15)) - ├── flags: ∅ - └── body: (length: 5) - ├── @ BeginNode (location: (1,0)-(5,3)) - │ ├── flags: newline - │ ├── begin_keyword_loc: (1,0)-(1,5) = "begin" - │ ├── statements: - │ │ @ StatementsNode (location: (2,0)-(2,1)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (2,0)-(2,1)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (2,0)-(2,1) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── rescue_clause: ∅ - │ ├── else_clause: ∅ - │ ├── ensure_clause: - │ │ @ EnsureNode (location: (3,0)-(5,3)) - │ │ ├── flags: ∅ - │ │ ├── ensure_keyword_loc: (3,0)-(3,6) = "ensure" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (4,0)-(4,1)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (4,0)-(4,1)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (4,0)-(4,1) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── end_keyword_loc: (5,0)-(5,3) = "end" - │ └── end_keyword_loc: (5,0)-(5,3) = "end" - ├── @ BeginNode (location: (7,0)-(7,24)) - │ ├── flags: newline - │ ├── begin_keyword_loc: (7,0)-(7,5) = "begin" - │ ├── statements: - │ │ @ StatementsNode (location: (7,7)-(7,8)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (7,7)-(7,8)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (7,7)-(7,8) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── rescue_clause: ∅ - │ ├── else_clause: ∅ - │ ├── ensure_clause: - │ │ @ EnsureNode (location: (7,10)-(7,24)) - │ │ ├── flags: ∅ - │ │ ├── ensure_keyword_loc: (7,10)-(7,16) = "ensure" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (7,18)-(7,19)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (7,18)-(7,19)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (7,18)-(7,19) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── end_keyword_loc: (7,21)-(7,24) = "end" - │ └── end_keyword_loc: (7,21)-(7,24) = "end" - ├── @ BeginNode (location: (9,0)-(11,4)) - │ ├── flags: newline - │ ├── begin_keyword_loc: (9,0)-(9,5) = "begin" - │ ├── statements: - │ │ @ StatementsNode (location: (9,6)-(9,7)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (9,6)-(9,7)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (9,6)-(9,7) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── rescue_clause: ∅ - │ ├── else_clause: ∅ - │ ├── ensure_clause: - │ │ @ EnsureNode (location: (10,1)-(11,4)) - │ │ ├── flags: ∅ - │ │ ├── ensure_keyword_loc: (10,1)-(10,7) = "ensure" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (10,8)-(10,9)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (10,8)-(10,9)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (10,8)-(10,9) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── end_keyword_loc: (11,1)-(11,4) = "end" - │ └── end_keyword_loc: (11,1)-(11,4) = "end" - ├── @ BeginNode (location: (13,0)-(13,22)) - │ ├── flags: newline - │ ├── begin_keyword_loc: (13,0)-(13,5) = "begin" - │ ├── statements: - │ │ @ StatementsNode (location: (13,6)-(13,7)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (13,6)-(13,7)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (13,6)-(13,7) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── rescue_clause: ∅ - │ ├── else_clause: ∅ - │ ├── ensure_clause: - │ │ @ EnsureNode (location: (13,9)-(13,22)) - │ │ ├── flags: ∅ - │ │ ├── ensure_keyword_loc: (13,9)-(13,15) = "ensure" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (13,16)-(13,17)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (13,16)-(13,17)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (13,16)-(13,17) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── end_keyword_loc: (13,19)-(13,22) = "end" - │ └── end_keyword_loc: (13,19)-(13,22) = "end" - └── @ BeginNode (location: (15,0)-(21,15)) - ├── flags: newline - ├── begin_keyword_loc: (15,0)-(15,5) = "begin" - ├── statements: - │ @ StatementsNode (location: (15,6)-(21,11)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ BeginNode (location: (15,6)-(21,11)) - │ ├── flags: newline - │ ├── begin_keyword_loc: (15,6)-(15,11) = "begin" - │ ├── statements: - │ │ @ StatementsNode (location: (15,11)-(21,7)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (15,11)-(21,7)) - │ │ ├── flags: newline - │ │ ├── receiver: - │ │ │ @ SymbolNode (location: (15,11)-(15,13)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (15,11)-(15,12) = ":" - │ │ │ ├── value_loc: (15,12)-(15,13) = "s" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "s" - │ │ ├── call_operator_loc: (15,13)-(15,14) = "." - │ │ ├── name: :l - │ │ ├── message_loc: (15,14)-(15,15) = "l" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (15,16)-(21,7)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ BeginNode (location: (15,16)-(21,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── begin_keyword_loc: (15,16)-(15,21) = "begin" - │ │ │ ├── statements: ∅ - │ │ │ ├── rescue_clause: ∅ - │ │ │ ├── else_clause: ∅ - │ │ │ ├── ensure_clause: - │ │ │ │ @ EnsureNode (location: (15,22)-(21,7)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── ensure_keyword_loc: (15,22)-(15,28) = "ensure" - │ │ │ │ ├── statements: - │ │ │ │ │ @ StatementsNode (location: (15,29)-(21,3)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── body: (length: 1) - │ │ │ │ │ └── @ CallNode (location: (15,29)-(21,3)) - │ │ │ │ │ ├── flags: newline - │ │ │ │ │ ├── receiver: - │ │ │ │ │ │ @ ConstantReadNode (location: (15,29)-(15,35)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ └── name: :Module - │ │ │ │ │ ├── call_operator_loc: (15,35)-(15,36) = "." - │ │ │ │ │ ├── name: :new - │ │ │ │ │ ├── message_loc: (15,36)-(15,39) = "new" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: - │ │ │ │ │ @ BlockNode (location: (15,40)-(21,3)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── locals: [] - │ │ │ │ │ ├── parameters: ∅ - │ │ │ │ │ ├── body: - │ │ │ │ │ │ @ StatementsNode (location: (16,2)-(20,5)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ └── body: (length: 1) - │ │ │ │ │ │ └── @ BeginNode (location: (16,2)-(20,5)) - │ │ │ │ │ │ ├── flags: newline - │ │ │ │ │ │ ├── begin_keyword_loc: (16,2)-(16,7) = "begin" - │ │ │ │ │ │ ├── statements: - │ │ │ │ │ │ │ @ StatementsNode (location: (17,4)-(17,9)) - │ │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ │ └── body: (length: 1) - │ │ │ │ │ │ │ └── @ BreakNode (location: (17,4)-(17,9)) - │ │ │ │ │ │ │ ├── flags: newline - │ │ │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ │ │ └── keyword_loc: (17,4)-(17,9) = "break" - │ │ │ │ │ │ ├── rescue_clause: ∅ - │ │ │ │ │ │ ├── else_clause: ∅ - │ │ │ │ │ │ ├── ensure_clause: - │ │ │ │ │ │ │ @ EnsureNode (location: (18,4)-(20,5)) - │ │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ │ ├── ensure_keyword_loc: (18,4)-(18,10) = "ensure" - │ │ │ │ │ │ │ ├── statements: - │ │ │ │ │ │ │ │ @ StatementsNode (location: (18,11)-(19,7)) - │ │ │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ │ │ └── body: (length: 1) - │ │ │ │ │ │ │ │ └── @ CallNode (location: (18,11)-(19,7)) - │ │ │ │ │ │ │ │ ├── flags: newline - │ │ │ │ │ │ │ │ ├── receiver: - │ │ │ │ │ │ │ │ │ @ ConstantReadNode (location: (18,11)-(18,17)) - │ │ │ │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ │ │ │ └── name: :Module - │ │ │ │ │ │ │ │ ├── call_operator_loc: (18,17)-(18,18) = "." - │ │ │ │ │ │ │ │ ├── name: :new - │ │ │ │ │ │ │ │ ├── message_loc: (18,18)-(18,21) = "new" - │ │ │ │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ │ │ │ └── block: - │ │ │ │ │ │ │ │ @ BlockNode (location: (18,22)-(19,7)) - │ │ │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ │ │ ├── locals: [] - │ │ │ │ │ │ │ │ ├── parameters: ∅ - │ │ │ │ │ │ │ │ ├── body: ∅ - │ │ │ │ │ │ │ │ ├── opening_loc: (18,22)-(18,24) = "do" - │ │ │ │ │ │ │ │ └── closing_loc: (19,4)-(19,7) = "end" - │ │ │ │ │ │ │ └── end_keyword_loc: (20,2)-(20,5) = "end" - │ │ │ │ │ │ └── end_keyword_loc: (20,2)-(20,5) = "end" - │ │ │ │ │ ├── opening_loc: (15,40)-(15,42) = "do" - │ │ │ │ │ └── closing_loc: (21,0)-(21,3) = "end" - │ │ │ │ └── end_keyword_loc: (21,4)-(21,7) = "end" - │ │ │ └── end_keyword_loc: (21,4)-(21,7) = "end" - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── rescue_clause: ∅ - │ ├── else_clause: ∅ - │ ├── ensure_clause: ∅ - │ └── end_keyword_loc: (21,8)-(21,11) = "end" - ├── rescue_clause: ∅ - ├── else_clause: ∅ - ├── ensure_clause: ∅ - └── end_keyword_loc: (21,12)-(21,15) = "end" diff --git a/test/prism/snapshots/begin_rescue.txt b/test/prism/snapshots/begin_rescue.txt deleted file mode 100644 index a3f78ec5f74454..00000000000000 --- a/test/prism/snapshots/begin_rescue.txt +++ /dev/null @@ -1,786 +0,0 @@ -@ ProgramNode (location: (1,0)-(78,3)) -├── flags: ∅ -├── locals: [:ex] -└── statements: - @ StatementsNode (location: (1,0)-(78,3)) - ├── flags: ∅ - └── body: (length: 17) - ├── @ BeginNode (location: (1,0)-(1,33)) - │ ├── flags: newline - │ ├── begin_keyword_loc: (1,0)-(1,5) = "begin" - │ ├── statements: - │ │ @ StatementsNode (location: (1,7)-(1,8)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (1,7)-(1,8)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (1,7)-(1,8) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── rescue_clause: - │ │ @ RescueNode (location: (1,10)-(1,19)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (1,10)-(1,16) = "rescue" - │ │ ├── exceptions: (length: 0) - │ │ ├── operator_loc: ∅ - │ │ ├── reference: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (1,18)-(1,19)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (1,18)-(1,19)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (1,18)-(1,19) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── subsequent: ∅ - │ ├── else_clause: - │ │ @ ElseNode (location: (1,21)-(1,33)) - │ │ ├── flags: ∅ - │ │ ├── else_keyword_loc: (1,21)-(1,25) = "else" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (1,27)-(1,28)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (1,27)-(1,28)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :c - │ │ │ ├── message_loc: (1,27)-(1,28) = "c" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── end_keyword_loc: (1,30)-(1,33) = "end" - │ ├── ensure_clause: ∅ - │ └── end_keyword_loc: (1,30)-(1,33) = "end" - ├── @ BeginNode (location: (3,0)-(3,44)) - │ ├── flags: newline - │ ├── begin_keyword_loc: (3,0)-(3,5) = "begin" - │ ├── statements: - │ │ @ StatementsNode (location: (3,7)-(3,8)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (3,7)-(3,8)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (3,7)-(3,8) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── rescue_clause: - │ │ @ RescueNode (location: (3,10)-(3,19)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (3,10)-(3,16) = "rescue" - │ │ ├── exceptions: (length: 0) - │ │ ├── operator_loc: ∅ - │ │ ├── reference: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (3,18)-(3,19)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (3,18)-(3,19)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (3,18)-(3,19) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── subsequent: ∅ - │ ├── else_clause: - │ │ @ ElseNode (location: (3,21)-(3,36)) - │ │ ├── flags: ∅ - │ │ ├── else_keyword_loc: (3,21)-(3,25) = "else" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (3,27)-(3,28)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (3,27)-(3,28)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :c - │ │ │ ├── message_loc: (3,27)-(3,28) = "c" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── end_keyword_loc: (3,30)-(3,36) = "ensure" - │ ├── ensure_clause: - │ │ @ EnsureNode (location: (3,30)-(3,44)) - │ │ ├── flags: ∅ - │ │ ├── ensure_keyword_loc: (3,30)-(3,36) = "ensure" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (3,38)-(3,39)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (3,38)-(3,39)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :d - │ │ │ ├── message_loc: (3,38)-(3,39) = "d" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── end_keyword_loc: (3,41)-(3,44) = "end" - │ └── end_keyword_loc: (3,41)-(3,44) = "end" - ├── @ BeginNode (location: (5,0)-(7,3)) - │ ├── flags: newline - │ ├── begin_keyword_loc: (5,0)-(5,5) = "begin" - │ ├── statements: - │ │ @ StatementsNode (location: (6,0)-(6,1)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (6,0)-(6,1)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (6,0)-(6,1) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── rescue_clause: ∅ - │ ├── else_clause: ∅ - │ ├── ensure_clause: ∅ - │ └── end_keyword_loc: (7,0)-(7,3) = "end" - ├── @ BeginNode (location: (9,0)-(9,13)) - │ ├── flags: newline - │ ├── begin_keyword_loc: (9,0)-(9,5) = "begin" - │ ├── statements: - │ │ @ StatementsNode (location: (9,7)-(9,8)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (9,7)-(9,8)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (9,7)-(9,8) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── rescue_clause: ∅ - │ ├── else_clause: ∅ - │ ├── ensure_clause: ∅ - │ └── end_keyword_loc: (9,10)-(9,13) = "end" - ├── @ BeginNode (location: (11,0)-(12,4)) - │ ├── flags: newline - │ ├── begin_keyword_loc: (11,0)-(11,5) = "begin" - │ ├── statements: - │ │ @ StatementsNode (location: (11,6)-(11,7)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (11,6)-(11,7)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (11,6)-(11,7) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── rescue_clause: ∅ - │ ├── else_clause: ∅ - │ ├── ensure_clause: ∅ - │ └── end_keyword_loc: (12,1)-(12,4) = "end" - ├── @ BeginNode (location: (14,0)-(14,12)) - │ ├── flags: newline - │ ├── begin_keyword_loc: (14,0)-(14,5) = "begin" - │ ├── statements: - │ │ @ StatementsNode (location: (14,6)-(14,7)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (14,6)-(14,7)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (14,6)-(14,7) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── rescue_clause: ∅ - │ ├── else_clause: ∅ - │ ├── ensure_clause: ∅ - │ └── end_keyword_loc: (14,9)-(14,12) = "end" - ├── @ BeginNode (location: (16,0)-(24,3)) - │ ├── flags: newline - │ ├── begin_keyword_loc: (16,0)-(16,5) = "begin" - │ ├── statements: - │ │ @ StatementsNode (location: (17,0)-(17,1)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (17,0)-(17,1)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (17,0)-(17,1) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── rescue_clause: - │ │ @ RescueNode (location: (18,0)-(23,1)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (18,0)-(18,6) = "rescue" - │ │ ├── exceptions: (length: 0) - │ │ ├── operator_loc: ∅ - │ │ ├── reference: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (19,0)-(19,1)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (19,0)-(19,1)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (19,0)-(19,1) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── subsequent: - │ │ @ RescueNode (location: (20,0)-(23,1)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (20,0)-(20,6) = "rescue" - │ │ ├── exceptions: (length: 0) - │ │ ├── operator_loc: ∅ - │ │ ├── reference: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (21,0)-(21,1)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (21,0)-(21,1)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :c - │ │ │ ├── message_loc: (21,0)-(21,1) = "c" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── subsequent: - │ │ @ RescueNode (location: (22,0)-(23,1)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (22,0)-(22,6) = "rescue" - │ │ ├── exceptions: (length: 0) - │ │ ├── operator_loc: ∅ - │ │ ├── reference: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (23,0)-(23,1)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (23,0)-(23,1)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :d - │ │ │ ├── message_loc: (23,0)-(23,1) = "d" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── subsequent: ∅ - │ ├── else_clause: ∅ - │ ├── ensure_clause: ∅ - │ └── end_keyword_loc: (24,0)-(24,3) = "end" - ├── @ BeginNode (location: (26,0)-(32,3)) - │ ├── flags: newline - │ ├── begin_keyword_loc: (26,0)-(26,5) = "begin" - │ ├── statements: - │ │ @ StatementsNode (location: (27,2)-(27,3)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (27,2)-(27,3)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (27,2)-(27,3) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── rescue_clause: - │ │ @ RescueNode (location: (28,0)-(31,3)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (28,0)-(28,6) = "rescue" - │ │ ├── exceptions: (length: 1) - │ │ │ └── @ ConstantReadNode (location: (28,7)-(28,16)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :Exception - │ │ ├── operator_loc: (28,17)-(28,19) = "=>" - │ │ ├── reference: - │ │ │ @ LocalVariableTargetNode (location: (28,20)-(28,22)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :ex - │ │ │ └── depth: 0 - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (29,2)-(29,3)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (29,2)-(29,3)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (29,2)-(29,3) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── subsequent: - │ │ @ RescueNode (location: (30,0)-(31,3)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (30,0)-(30,6) = "rescue" - │ │ ├── exceptions: (length: 2) - │ │ │ ├── @ ConstantReadNode (location: (30,7)-(30,23)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :AnotherException - │ │ │ └── @ ConstantReadNode (location: (30,25)-(30,41)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :OneMoreException - │ │ ├── operator_loc: (30,42)-(30,44) = "=>" - │ │ ├── reference: - │ │ │ @ LocalVariableTargetNode (location: (30,45)-(30,47)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :ex - │ │ │ └── depth: 0 - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (31,2)-(31,3)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (31,2)-(31,3)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :c - │ │ │ ├── message_loc: (31,2)-(31,3) = "c" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── subsequent: ∅ - │ ├── else_clause: ∅ - │ ├── ensure_clause: ∅ - │ └── end_keyword_loc: (32,0)-(32,3) = "end" - ├── @ BeginNode (location: (34,0)-(40,3)) - │ ├── flags: newline - │ ├── begin_keyword_loc: (34,0)-(34,5) = "begin" - │ ├── statements: - │ │ @ StatementsNode (location: (35,2)-(35,3)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (35,2)-(35,3)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (35,2)-(35,3) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── rescue_clause: - │ │ @ RescueNode (location: (36,0)-(37,3)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (36,0)-(36,6) = "rescue" - │ │ ├── exceptions: (length: 1) - │ │ │ └── @ ConstantReadNode (location: (36,7)-(36,16)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :Exception - │ │ ├── operator_loc: (36,17)-(36,19) = "=>" - │ │ ├── reference: - │ │ │ @ LocalVariableTargetNode (location: (36,20)-(36,22)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :ex - │ │ │ └── depth: 0 - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (37,2)-(37,3)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (37,2)-(37,3)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (37,2)-(37,3) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── subsequent: ∅ - │ ├── else_clause: ∅ - │ ├── ensure_clause: - │ │ @ EnsureNode (location: (38,0)-(40,3)) - │ │ ├── flags: ∅ - │ │ ├── ensure_keyword_loc: (38,0)-(38,6) = "ensure" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (39,2)-(39,3)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (39,2)-(39,3)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (39,2)-(39,3) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── end_keyword_loc: (40,0)-(40,3) = "end" - │ └── end_keyword_loc: (40,0)-(40,3) = "end" - ├── @ StringNode (location: (42,0)-(42,6)) - │ ├── flags: newline - │ ├── opening_loc: (42,0)-(42,2) = "%!" - │ ├── content_loc: (42,2)-(42,5) = "abc" - │ ├── closing_loc: (42,5)-(42,6) = "!" - │ └── unescaped: "abc" - ├── @ BeginNode (location: (44,0)-(48,3)) - │ ├── flags: newline - │ ├── begin_keyword_loc: (44,0)-(44,5) = "begin" - │ ├── statements: - │ │ @ StatementsNode (location: (45,0)-(45,1)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (45,0)-(45,1)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (45,0)-(45,1) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── rescue_clause: - │ │ @ RescueNode (location: (46,0)-(47,1)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (46,0)-(46,6) = "rescue" - │ │ ├── exceptions: (length: 0) - │ │ ├── operator_loc: ∅ - │ │ ├── reference: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (47,0)-(47,1)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (47,0)-(47,1)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (47,0)-(47,1) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── subsequent: ∅ - │ ├── else_clause: ∅ - │ ├── ensure_clause: ∅ - │ └── end_keyword_loc: (48,0)-(48,3) = "end" - ├── @ BeginNode (location: (50,0)-(50,20)) - │ ├── flags: newline - │ ├── begin_keyword_loc: (50,0)-(50,5) = "begin" - │ ├── statements: - │ │ @ StatementsNode (location: (50,6)-(50,7)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (50,6)-(50,7)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (50,6)-(50,7) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── rescue_clause: - │ │ @ RescueNode (location: (50,8)-(50,16)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (50,8)-(50,14) = "rescue" - │ │ ├── exceptions: (length: 0) - │ │ ├── operator_loc: ∅ - │ │ ├── reference: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (50,15)-(50,16)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (50,15)-(50,16)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (50,15)-(50,16) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── subsequent: ∅ - │ ├── else_clause: ∅ - │ ├── ensure_clause: ∅ - │ └── end_keyword_loc: (50,17)-(50,20) = "end" - ├── @ BeginNode (location: (52,0)-(54,5)) - │ ├── flags: newline - │ ├── begin_keyword_loc: (52,0)-(52,5) = "begin" - │ ├── statements: - │ │ @ StatementsNode (location: (53,0)-(53,1)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (53,0)-(53,1)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (53,0)-(53,1) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── rescue_clause: - │ │ @ RescueNode (location: (53,2)-(54,1)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (53,2)-(53,8) = "rescue" - │ │ ├── exceptions: (length: 0) - │ │ ├── operator_loc: ∅ - │ │ ├── reference: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (54,0)-(54,1)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (54,0)-(54,1)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (54,0)-(54,1) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── subsequent: ∅ - │ ├── else_clause: ∅ - │ ├── ensure_clause: ∅ - │ └── end_keyword_loc: (54,2)-(54,5) = "end" - ├── @ BeginNode (location: (56,0)-(60,3)) - │ ├── flags: newline - │ ├── begin_keyword_loc: (56,0)-(56,5) = "begin" - │ ├── statements: - │ │ @ StatementsNode (location: (57,0)-(57,1)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (57,0)-(57,1)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (57,0)-(57,1) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── rescue_clause: - │ │ @ RescueNode (location: (58,0)-(59,1)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (58,0)-(58,6) = "rescue" - │ │ ├── exceptions: (length: 1) - │ │ │ └── @ ConstantReadNode (location: (58,7)-(58,16)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :Exception - │ │ ├── operator_loc: ∅ - │ │ ├── reference: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (59,0)-(59,1)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (59,0)-(59,1)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (59,0)-(59,1) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── subsequent: ∅ - │ ├── else_clause: ∅ - │ ├── ensure_clause: ∅ - │ └── end_keyword_loc: (60,0)-(60,3) = "end" - ├── @ BeginNode (location: (62,0)-(66,3)) - │ ├── flags: newline - │ ├── begin_keyword_loc: (62,0)-(62,5) = "begin" - │ ├── statements: - │ │ @ StatementsNode (location: (63,0)-(63,1)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (63,0)-(63,1)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (63,0)-(63,1) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── rescue_clause: - │ │ @ RescueNode (location: (64,0)-(65,1)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (64,0)-(64,6) = "rescue" - │ │ ├── exceptions: (length: 2) - │ │ │ ├── @ ConstantReadNode (location: (64,7)-(64,16)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :Exception - │ │ │ └── @ ConstantReadNode (location: (64,18)-(64,33)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :CustomException - │ │ ├── operator_loc: ∅ - │ │ ├── reference: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (65,0)-(65,1)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (65,0)-(65,1)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (65,0)-(65,1) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── subsequent: ∅ - │ ├── else_clause: ∅ - │ ├── ensure_clause: ∅ - │ └── end_keyword_loc: (66,0)-(66,3) = "end" - ├── @ BeginNode (location: (68,0)-(72,3)) - │ ├── flags: newline - │ ├── begin_keyword_loc: (68,0)-(68,5) = "begin" - │ ├── statements: - │ │ @ StatementsNode (location: (69,2)-(69,3)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (69,2)-(69,3)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (69,2)-(69,3) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── rescue_clause: - │ │ @ RescueNode (location: (70,0)-(71,3)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (70,0)-(70,6) = "rescue" - │ │ ├── exceptions: (length: 2) - │ │ │ ├── @ ConstantReadNode (location: (70,7)-(70,16)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :Exception - │ │ │ └── @ ConstantReadNode (location: (70,18)-(70,33)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :CustomException - │ │ ├── operator_loc: (70,34)-(70,36) = "=>" - │ │ ├── reference: - │ │ │ @ LocalVariableTargetNode (location: (70,37)-(70,39)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :ex - │ │ │ └── depth: 0 - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (71,2)-(71,3)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (71,2)-(71,3)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (71,2)-(71,3) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── subsequent: ∅ - │ ├── else_clause: ∅ - │ ├── ensure_clause: ∅ - │ └── end_keyword_loc: (72,0)-(72,3) = "end" - └── @ BeginNode (location: (74,0)-(78,3)) - ├── flags: newline - ├── begin_keyword_loc: (74,0)-(74,5) = "begin" - ├── statements: - │ @ StatementsNode (location: (75,2)-(75,3)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (75,2)-(75,3)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (75,2)-(75,3) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── rescue_clause: - │ @ RescueNode (location: (76,0)-(77,3)) - │ ├── flags: ∅ - │ ├── keyword_loc: (76,0)-(76,6) = "rescue" - │ ├── exceptions: (length: 1) - │ │ └── @ ConstantReadNode (location: (76,7)-(76,16)) - │ │ ├── flags: ∅ - │ │ └── name: :Exception - │ ├── operator_loc: (76,17)-(76,19) = "=>" - │ ├── reference: - │ │ @ LocalVariableTargetNode (location: (76,20)-(76,22)) - │ │ ├── flags: ∅ - │ │ ├── name: :ex - │ │ └── depth: 0 - │ ├── statements: - │ │ @ StatementsNode (location: (77,2)-(77,3)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (77,2)-(77,3)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :b - │ │ ├── message_loc: (77,2)-(77,3) = "b" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── subsequent: ∅ - ├── else_clause: ∅ - ├── ensure_clause: ∅ - └── end_keyword_loc: (78,0)-(78,3) = "end" diff --git a/test/prism/snapshots/blocks.txt b/test/prism/snapshots/blocks.txt deleted file mode 100644 index 761e3bb0515444..00000000000000 --- a/test/prism/snapshots/blocks.txt +++ /dev/null @@ -1,829 +0,0 @@ -@ ProgramNode (location: (1,0)-(54,17)) -├── flags: ∅ -├── locals: [:fork] -└── statements: - @ StatementsNode (location: (1,0)-(54,17)) - ├── flags: ∅ - └── body: (length: 20) - ├── @ CallNode (location: (1,0)-(1,16)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (1,0)-(1,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (1,0)-(1,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :[] - │ ├── message_loc: (1,3)-(1,8) = "[bar]" - │ ├── opening_loc: (1,3)-(1,4) = "[" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,4)-(1,7)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (1,4)-(1,7)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (1,4)-(1,7) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (1,7)-(1,8) = "]" - │ └── block: - │ @ BlockNode (location: (1,9)-(1,16)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (1,11)-(1,14)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (1,11)-(1,14)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :baz - │ │ ├── message_loc: (1,11)-(1,14) = "baz" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── opening_loc: (1,9)-(1,10) = "{" - │ └── closing_loc: (1,15)-(1,16) = "}" - ├── @ CallNode (location: (3,0)-(5,3)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (3,0)-(3,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (3,0)-(3,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :[] - │ ├── message_loc: (3,3)-(3,8) = "[bar]" - │ ├── opening_loc: (3,3)-(3,4) = "[" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (3,4)-(3,7)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (3,4)-(3,7)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (3,4)-(3,7) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (3,7)-(3,8) = "]" - │ └── block: - │ @ BlockNode (location: (3,9)-(5,3)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (4,0)-(4,3)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (4,0)-(4,3)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :baz - │ │ ├── message_loc: (4,0)-(4,3) = "baz" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── opening_loc: (3,9)-(3,11) = "do" - │ └── closing_loc: (5,0)-(5,3) = "end" - ├── @ CallNode (location: (7,0)-(7,35)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (7,0)-(7,1)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :x - │ │ ├── message_loc: (7,0)-(7,1) = "x" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (7,1)-(7,2) = "." - │ ├── name: :reduce - │ ├── message_loc: (7,2)-(7,8) = "reduce" - │ ├── opening_loc: (7,8)-(7,9) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (7,9)-(7,10)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (7,9)-(7,10)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 0 - │ ├── closing_loc: (7,10)-(7,11) = ")" - │ └── block: - │ @ BlockNode (location: (7,12)-(7,35)) - │ ├── flags: ∅ - │ ├── locals: [:x, :memo] - │ ├── parameters: - │ │ @ BlockParametersNode (location: (7,14)-(7,23)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (7,15)-(7,22)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 2) - │ │ │ │ ├── @ RequiredParameterNode (location: (7,15)-(7,16)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── name: :x - │ │ │ │ └── @ RequiredParameterNode (location: (7,18)-(7,22)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :memo - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: (7,14)-(7,15) = "|" - │ │ └── closing_loc: (7,22)-(7,23) = "|" - │ ├── body: - │ │ @ StatementsNode (location: (7,24)-(7,33)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ LocalVariableOperatorWriteNode (location: (7,24)-(7,33)) - │ │ ├── flags: newline - │ │ ├── name_loc: (7,24)-(7,28) = "memo" - │ │ ├── binary_operator_loc: (7,29)-(7,31) = "+=" - │ │ ├── value: - │ │ │ @ LocalVariableReadNode (location: (7,32)-(7,33)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :x - │ │ │ └── depth: 0 - │ │ ├── name: :memo - │ │ ├── binary_operator: :+ - │ │ └── depth: 0 - │ ├── opening_loc: (7,12)-(7,13) = "{" - │ └── closing_loc: (7,34)-(7,35) = "}" - ├── @ CallNode (location: (9,0)-(9,10)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (9,0)-(9,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (9,4)-(9,10)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (9,4)-(9,6) = "do" - │ └── closing_loc: (9,7)-(9,10) = "end" - ├── @ CallNode (location: (11,0)-(11,21)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (11,0)-(11,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (11,4)-(11,21)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (11,4)-(11,7)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (11,4)-(11,7) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── @ ParenthesesNode (location: (11,9)-(11,21)) - │ │ ├── flags: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (11,10)-(11,20)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (11,10)-(11,20)) - │ │ │ ├── flags: newline, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :baz - │ │ │ ├── message_loc: (11,10)-(11,13) = "baz" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: - │ │ │ @ BlockNode (location: (11,14)-(11,20)) - │ │ │ ├── flags: ∅ - │ │ │ ├── locals: [] - │ │ │ ├── parameters: ∅ - │ │ │ ├── body: ∅ - │ │ │ ├── opening_loc: (11,14)-(11,16) = "do" - │ │ │ └── closing_loc: (11,17)-(11,20) = "end" - │ │ ├── opening_loc: (11,9)-(11,10) = "(" - │ │ └── closing_loc: (11,20)-(11,21) = ")" - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (13,0)-(13,14)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (13,0)-(13,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (13,4)-(13,7)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (13,4)-(13,7)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (13,4)-(13,7) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (13,8)-(13,14)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (13,8)-(13,10) = "do" - │ └── closing_loc: (13,11)-(13,14) = "end" - ├── @ CallNode (location: (15,0)-(15,18)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (15,0)-(15,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (15,4)-(15,11)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (15,4)-(15,11)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (15,4)-(15,7) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (15,8)-(15,11)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ CallNode (location: (15,8)-(15,11)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :baz - │ │ │ ├── message_loc: (15,8)-(15,11) = "baz" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (15,12)-(15,18)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (15,12)-(15,14) = "do" - │ └── closing_loc: (15,15)-(15,18) = "end" - ├── @ CallNode (location: (17,0)-(18,3)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (17,0)-(17,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (17,4)-(18,3)) - │ ├── flags: ∅ - │ ├── locals: [:a] - │ ├── parameters: - │ │ @ BlockParametersNode (location: (17,7)-(17,17)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (17,8)-(17,16)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 0) - │ │ │ ├── optionals: (length: 1) - │ │ │ │ └── @ OptionalParameterNode (location: (17,8)-(17,16)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :a - │ │ │ │ ├── name_loc: (17,8)-(17,9) = "a" - │ │ │ │ ├── operator_loc: (17,10)-(17,11) = "=" - │ │ │ │ └── value: - │ │ │ │ @ CallNode (location: (17,12)-(17,16)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── receiver: - │ │ │ │ │ @ CallNode (location: (17,12)-(17,13)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :b - │ │ │ │ │ ├── message_loc: (17,12)-(17,13) = "b" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :[] - │ │ │ │ ├── message_loc: (17,13)-(17,16) = "[1]" - │ │ │ │ ├── opening_loc: (17,13)-(17,14) = "[" - │ │ │ │ ├── arguments: - │ │ │ │ │ @ ArgumentsNode (location: (17,14)-(17,15)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── arguments: (length: 1) - │ │ │ │ │ └── @ IntegerNode (location: (17,14)-(17,15)) - │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ └── value: 1 - │ │ │ │ ├── closing_loc: (17,15)-(17,16) = "]" - │ │ │ │ └── block: ∅ - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: (17,7)-(17,8) = "|" - │ │ └── closing_loc: (17,16)-(17,17) = "|" - │ ├── body: ∅ - │ ├── opening_loc: (17,4)-(17,6) = "do" - │ └── closing_loc: (18,0)-(18,3) = "end" - ├── @ CallNode (location: (20,0)-(22,3)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (20,0)-(20,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (20,4)-(22,3)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ BeginNode (location: (20,4)-(22,3)) - │ │ ├── flags: ∅ - │ │ ├── begin_keyword_loc: ∅ - │ │ ├── statements: ∅ - │ │ ├── rescue_clause: - │ │ │ @ RescueNode (location: (21,0)-(21,6)) - │ │ │ ├── flags: ∅ - │ │ │ ├── keyword_loc: (21,0)-(21,6) = "rescue" - │ │ │ ├── exceptions: (length: 0) - │ │ │ ├── operator_loc: ∅ - │ │ │ ├── reference: ∅ - │ │ │ ├── statements: ∅ - │ │ │ └── subsequent: ∅ - │ │ ├── else_clause: ∅ - │ │ ├── ensure_clause: ∅ - │ │ └── end_keyword_loc: (22,0)-(22,3) = "end" - │ ├── opening_loc: (20,4)-(20,6) = "do" - │ └── closing_loc: (22,0)-(22,3) = "end" - ├── @ CallNode (location: (24,0)-(29,3)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (24,0)-(24,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (24,4)-(29,3)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (25,2)-(28,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (25,2)-(28,5)) - │ │ ├── flags: newline, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (25,2)-(25,5) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: - │ │ @ BlockNode (location: (25,6)-(28,5)) - │ │ ├── flags: ∅ - │ │ ├── locals: [] - │ │ ├── parameters: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (26,4)-(27,7)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (26,4)-(27,7)) - │ │ │ ├── flags: newline, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :baz - │ │ │ ├── message_loc: (26,4)-(26,7) = "baz" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: - │ │ │ @ BlockNode (location: (26,8)-(27,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── locals: [] - │ │ │ ├── parameters: ∅ - │ │ │ ├── body: ∅ - │ │ │ ├── opening_loc: (26,8)-(26,10) = "do" - │ │ │ └── closing_loc: (27,4)-(27,7) = "end" - │ │ ├── opening_loc: (25,6)-(25,8) = "do" - │ │ └── closing_loc: (28,2)-(28,5) = "end" - │ ├── opening_loc: (24,4)-(24,6) = "do" - │ └── closing_loc: (29,0)-(29,3) = "end" - ├── @ CallNode (location: (31,0)-(31,16)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (31,0)-(31,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (31,0)-(31,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :[] - │ ├── message_loc: (31,3)-(31,8) = "[bar]" - │ ├── opening_loc: (31,3)-(31,4) = "[" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (31,4)-(31,7)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (31,4)-(31,7)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (31,4)-(31,7) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (31,7)-(31,8) = "]" - │ └── block: - │ @ BlockNode (location: (31,9)-(31,16)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (31,11)-(31,14)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (31,11)-(31,14)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :baz - │ │ ├── message_loc: (31,11)-(31,14) = "baz" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── opening_loc: (31,9)-(31,10) = "{" - │ └── closing_loc: (31,15)-(31,16) = "}" - ├── @ CallNode (location: (33,0)-(33,24)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (33,0)-(33,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (33,4)-(33,24)) - │ ├── flags: ∅ - │ ├── locals: [:x, :y, :z] - │ ├── parameters: - │ │ @ BlockParametersNode (location: (33,6)-(33,20)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (33,7)-(33,19)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (33,7)-(33,8)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :x - │ │ │ ├── optionals: (length: 1) - │ │ │ │ └── @ OptionalParameterNode (location: (33,10)-(33,15)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :y - │ │ │ │ ├── name_loc: (33,10)-(33,11) = "y" - │ │ │ │ ├── operator_loc: (33,12)-(33,13) = "=" - │ │ │ │ └── value: - │ │ │ │ @ IntegerNode (location: (33,14)-(33,15)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 2 - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 1) - │ │ │ │ └── @ RequiredKeywordParameterNode (location: (33,17)-(33,19)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :z - │ │ │ │ └── name_loc: (33,17)-(33,19) = "z:" - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: (33,6)-(33,7) = "|" - │ │ └── closing_loc: (33,19)-(33,20) = "|" - │ ├── body: - │ │ @ StatementsNode (location: (33,21)-(33,22)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ LocalVariableReadNode (location: (33,21)-(33,22)) - │ │ ├── flags: newline - │ │ ├── name: :x - │ │ └── depth: 0 - │ ├── opening_loc: (33,4)-(33,5) = "{" - │ └── closing_loc: (33,23)-(33,24) = "}" - ├── @ CallNode (location: (35,0)-(35,11)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (35,0)-(35,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (35,4)-(35,11)) - │ ├── flags: ∅ - │ ├── locals: [:x] - │ ├── parameters: - │ │ @ BlockParametersNode (location: (35,6)-(35,9)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (35,7)-(35,8)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (35,7)-(35,8)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :x - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: (35,6)-(35,7) = "|" - │ │ └── closing_loc: (35,8)-(35,9) = "|" - │ ├── body: ∅ - │ ├── opening_loc: (35,4)-(35,5) = "{" - │ └── closing_loc: (35,10)-(35,11) = "}" - ├── @ LocalVariableWriteNode (location: (37,0)-(37,8)) - │ ├── flags: newline - │ ├── name: :fork - │ ├── depth: 0 - │ ├── name_loc: (37,0)-(37,4) = "fork" - │ ├── value: - │ │ @ IntegerNode (location: (37,7)-(37,8)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ └── operator_loc: (37,5)-(37,6) = "=" - ├── @ CallNode (location: (38,0)-(39,3)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :fork - │ ├── message_loc: (38,0)-(38,4) = "fork" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (38,5)-(39,3)) - │ ├── flags: ∅ - │ ├── locals: [:a] - │ ├── parameters: - │ │ @ BlockParametersNode (location: (38,8)-(38,11)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (38,9)-(38,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (38,9)-(38,10)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :a - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: (38,8)-(38,9) = "|" - │ │ └── closing_loc: (38,10)-(38,11) = "|" - │ ├── body: ∅ - │ ├── opening_loc: (38,5)-(38,7) = "do" - │ └── closing_loc: (39,0)-(39,3) = "end" - ├── @ CallNode (location: (41,0)-(41,12)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :fork - │ ├── message_loc: (41,0)-(41,4) = "fork" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (41,5)-(41,12)) - │ ├── flags: ∅ - │ ├── locals: [:a] - │ ├── parameters: - │ │ @ BlockParametersNode (location: (41,7)-(41,10)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (41,8)-(41,9)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (41,8)-(41,9)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :a - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: (41,7)-(41,8) = "|" - │ │ └── closing_loc: (41,9)-(41,10) = "|" - │ ├── body: ∅ - │ ├── opening_loc: (41,5)-(41,6) = "{" - │ └── closing_loc: (41,11)-(41,12) = "}" - ├── @ CallNode (location: (43,0)-(44,3)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :C - │ ├── message_loc: (43,0)-(43,1) = "C" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (43,2)-(44,3)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (43,2)-(43,4) = "do" - │ └── closing_loc: (44,0)-(44,3) = "end" - ├── @ CallNode (location: (46,0)-(46,4)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :C - │ ├── message_loc: (46,0)-(46,1) = "C" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (46,2)-(46,4)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (46,2)-(46,3) = "{" - │ └── closing_loc: (46,3)-(46,4) = "}" - ├── @ CallNode (location: (48,0)-(52,1)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (48,0)-(48,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (48,4)-(52,1)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (48,4)-(52,1)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :lambda - │ │ ├── message_loc: (48,4)-(48,10) = "lambda" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: - │ │ @ BlockNode (location: (48,11)-(52,1)) - │ │ ├── flags: ∅ - │ │ ├── locals: [:a, :b] - │ │ ├── parameters: - │ │ │ @ BlockParametersNode (location: (48,13)-(51,3)) - │ │ │ ├── flags: ∅ - │ │ │ ├── parameters: - │ │ │ │ @ ParametersNode (location: (49,2)-(50,6)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── requireds: (length: 0) - │ │ │ │ ├── optionals: (length: 0) - │ │ │ │ ├── rest: ∅ - │ │ │ │ ├── posts: (length: 0) - │ │ │ │ ├── keywords: (length: 2) - │ │ │ │ │ ├── @ OptionalKeywordParameterNode (location: (49,2)-(49,6)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ ├── name: :a - │ │ │ │ │ │ ├── name_loc: (49,2)-(49,4) = "a:" - │ │ │ │ │ │ └── value: - │ │ │ │ │ │ @ IntegerNode (location: (49,5)-(49,6)) - │ │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ │ └── value: 1 - │ │ │ │ │ └── @ OptionalKeywordParameterNode (location: (50,2)-(50,6)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── name: :b - │ │ │ │ │ ├── name_loc: (50,2)-(50,4) = "b:" - │ │ │ │ │ └── value: - │ │ │ │ │ @ IntegerNode (location: (50,5)-(50,6)) - │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ └── value: 2 - │ │ │ │ ├── keyword_rest: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── locals: (length: 0) - │ │ │ ├── opening_loc: (48,13)-(48,14) = "|" - │ │ │ └── closing_loc: (51,2)-(51,3) = "|" - │ │ ├── body: ∅ - │ │ ├── opening_loc: (48,11)-(48,12) = "{" - │ │ └── closing_loc: (52,0)-(52,1) = "}" - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── @ CallNode (location: (54,0)-(54,17)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :foo - ├── message_loc: (54,0)-(54,3) = "foo" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (54,4)-(54,17)) - ├── flags: ∅ - ├── locals: [:bar] - ├── parameters: - │ @ BlockParametersNode (location: (54,7)-(54,13)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (54,8)-(54,12)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (54,8)-(54,11)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :bar - │ │ ├── optionals: (length: 0) - │ │ ├── rest: - │ │ │ @ ImplicitRestNode (location: (54,11)-(54,12)) - │ │ │ └── flags: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (54,7)-(54,8) = "|" - │ └── closing_loc: (54,12)-(54,13) = "|" - ├── body: ∅ - ├── opening_loc: (54,4)-(54,6) = "do" - └── closing_loc: (54,14)-(54,17) = "end" diff --git a/test/prism/snapshots/boolean_operators.txt b/test/prism/snapshots/boolean_operators.txt deleted file mode 100644 index bde70d650901f1..00000000000000 --- a/test/prism/snapshots/boolean_operators.txt +++ /dev/null @@ -1,59 +0,0 @@ -@ ProgramNode (location: (1,0)-(5,7)) -├── flags: ∅ -├── locals: [:a] -└── statements: - @ StatementsNode (location: (1,0)-(5,7)) - ├── flags: ∅ - └── body: (length: 3) - ├── @ LocalVariableAndWriteNode (location: (1,0)-(1,7)) - │ ├── flags: newline - │ ├── name_loc: (1,0)-(1,1) = "a" - │ ├── operator_loc: (1,2)-(1,5) = "&&=" - │ ├── value: - │ │ @ CallNode (location: (1,6)-(1,7)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :b - │ │ ├── message_loc: (1,6)-(1,7) = "b" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── name: :a - │ └── depth: 0 - ├── @ LocalVariableOperatorWriteNode (location: (3,0)-(3,6)) - │ ├── flags: newline - │ ├── name_loc: (3,0)-(3,1) = "a" - │ ├── binary_operator_loc: (3,2)-(3,4) = "+=" - │ ├── value: - │ │ @ CallNode (location: (3,5)-(3,6)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :b - │ │ ├── message_loc: (3,5)-(3,6) = "b" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── name: :a - │ ├── binary_operator: :+ - │ └── depth: 0 - └── @ LocalVariableOrWriteNode (location: (5,0)-(5,7)) - ├── flags: newline - ├── name_loc: (5,0)-(5,1) = "a" - ├── operator_loc: (5,2)-(5,5) = "||=" - ├── value: - │ @ CallNode (location: (5,6)-(5,7)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :b - │ ├── message_loc: (5,6)-(5,7) = "b" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── name: :a - └── depth: 0 diff --git a/test/prism/snapshots/booleans.txt b/test/prism/snapshots/booleans.txt deleted file mode 100644 index 47ce80217a06cc..00000000000000 --- a/test/prism/snapshots/booleans.txt +++ /dev/null @@ -1,11 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,4)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,4)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ FalseNode (location: (1,0)-(1,5)) - │ └── flags: newline, static_literal - └── @ TrueNode (location: (3,0)-(3,4)) - └── flags: newline, static_literal diff --git a/test/prism/snapshots/break.txt b/test/prism/snapshots/break.txt deleted file mode 100644 index 469b603f849f21..00000000000000 --- a/test/prism/snapshots/break.txt +++ /dev/null @@ -1,499 +0,0 @@ -@ ProgramNode (location: (1,0)-(29,21)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(29,21)) - ├── flags: ∅ - └── body: (length: 13) - ├── @ CallNode (location: (1,0)-(1,13)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :tap - │ ├── message_loc: (1,0)-(1,3) = "tap" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (1,4)-(1,13)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (1,6)-(1,11)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ BreakNode (location: (1,6)-(1,11)) - │ │ ├── flags: newline - │ │ ├── arguments: ∅ - │ │ └── keyword_loc: (1,6)-(1,11) = "break" - │ ├── opening_loc: (1,4)-(1,5) = "{" - │ └── closing_loc: (1,12)-(1,13) = "}" - ├── @ CallNode (location: (3,0)-(3,27)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :tap - │ ├── message_loc: (3,0)-(3,3) = "tap" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (3,4)-(3,27)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (3,6)-(3,25)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ BreakNode (location: (3,6)-(3,25)) - │ │ ├── flags: newline - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (3,12)-(3,25)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 3) - │ │ │ ├── @ ParenthesesNode (location: (3,12)-(3,15)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── body: - │ │ │ │ │ @ StatementsNode (location: (3,13)-(3,14)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── body: (length: 1) - │ │ │ │ │ └── @ IntegerNode (location: (3,13)-(3,14)) - │ │ │ │ │ ├── flags: newline, static_literal, decimal - │ │ │ │ │ └── value: 1 - │ │ │ │ ├── opening_loc: (3,12)-(3,13) = "(" - │ │ │ │ └── closing_loc: (3,14)-(3,15) = ")" - │ │ │ ├── @ ParenthesesNode (location: (3,17)-(3,20)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── body: - │ │ │ │ │ @ StatementsNode (location: (3,18)-(3,19)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── body: (length: 1) - │ │ │ │ │ └── @ IntegerNode (location: (3,18)-(3,19)) - │ │ │ │ │ ├── flags: newline, static_literal, decimal - │ │ │ │ │ └── value: 2 - │ │ │ │ ├── opening_loc: (3,17)-(3,18) = "(" - │ │ │ │ └── closing_loc: (3,19)-(3,20) = ")" - │ │ │ └── @ ParenthesesNode (location: (3,22)-(3,25)) - │ │ │ ├── flags: ∅ - │ │ │ ├── body: - │ │ │ │ @ StatementsNode (location: (3,23)-(3,24)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ IntegerNode (location: (3,23)-(3,24)) - │ │ │ │ ├── flags: newline, static_literal, decimal - │ │ │ │ └── value: 3 - │ │ │ ├── opening_loc: (3,22)-(3,23) = "(" - │ │ │ └── closing_loc: (3,24)-(3,25) = ")" - │ │ └── keyword_loc: (3,6)-(3,11) = "break" - │ ├── opening_loc: (3,4)-(3,5) = "{" - │ └── closing_loc: (3,26)-(3,27) = "}" - ├── @ CallNode (location: (5,0)-(5,15)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :tap - │ ├── message_loc: (5,0)-(5,3) = "tap" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (5,4)-(5,15)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (5,6)-(5,13)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ BreakNode (location: (5,6)-(5,13)) - │ │ ├── flags: newline - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (5,12)-(5,13)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (5,12)-(5,13)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── keyword_loc: (5,6)-(5,11) = "break" - │ ├── opening_loc: (5,4)-(5,5) = "{" - │ └── closing_loc: (5,14)-(5,15) = "}" - ├── @ CallNode (location: (7,0)-(8,3)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :tap - │ ├── message_loc: (7,0)-(7,3) = "tap" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (7,4)-(8,3)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (7,6)-(8,1)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ BreakNode (location: (7,6)-(8,1)) - │ │ ├── flags: newline - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (7,12)-(8,1)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 3) - │ │ │ ├── @ IntegerNode (location: (7,12)-(7,13)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ ├── @ IntegerNode (location: (7,15)-(7,16)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 2 - │ │ │ └── @ IntegerNode (location: (8,0)-(8,1)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 3 - │ │ └── keyword_loc: (7,6)-(7,11) = "break" - │ ├── opening_loc: (7,4)-(7,5) = "{" - │ └── closing_loc: (8,2)-(8,3) = "}" - ├── @ CallNode (location: (10,0)-(10,21)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :tap - │ ├── message_loc: (10,0)-(10,3) = "tap" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (10,4)-(10,21)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (10,6)-(10,19)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ BreakNode (location: (10,6)-(10,19)) - │ │ ├── flags: newline - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (10,12)-(10,19)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 3) - │ │ │ ├── @ IntegerNode (location: (10,12)-(10,13)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ ├── @ IntegerNode (location: (10,15)-(10,16)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 2 - │ │ │ └── @ IntegerNode (location: (10,18)-(10,19)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 3 - │ │ └── keyword_loc: (10,6)-(10,11) = "break" - │ ├── opening_loc: (10,4)-(10,5) = "{" - │ └── closing_loc: (10,20)-(10,21) = "}" - ├── @ CallNode (location: (12,0)-(12,23)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :tap - │ ├── message_loc: (12,0)-(12,3) = "tap" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (12,4)-(12,23)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (12,6)-(12,21)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ BreakNode (location: (12,6)-(12,21)) - │ │ ├── flags: newline - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (12,12)-(12,21)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ ArrayNode (location: (12,12)-(12,21)) - │ │ │ ├── flags: static_literal - │ │ │ ├── elements: (length: 3) - │ │ │ │ ├── @ IntegerNode (location: (12,13)-(12,14)) - │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ └── value: 1 - │ │ │ │ ├── @ IntegerNode (location: (12,16)-(12,17)) - │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ └── value: 2 - │ │ │ │ └── @ IntegerNode (location: (12,19)-(12,20)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 3 - │ │ │ ├── opening_loc: (12,12)-(12,13) = "[" - │ │ │ └── closing_loc: (12,20)-(12,21) = "]" - │ │ └── keyword_loc: (12,6)-(12,11) = "break" - │ ├── opening_loc: (12,4)-(12,5) = "{" - │ └── closing_loc: (12,22)-(12,23) = "}" - ├── @ CallNode (location: (14,0)-(17,3)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :tap - │ ├── message_loc: (14,0)-(14,3) = "tap" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (14,4)-(17,3)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (14,6)-(17,1)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ BreakNode (location: (14,6)-(17,1)) - │ │ ├── flags: newline - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (14,11)-(17,1)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ ParenthesesNode (location: (14,11)-(17,1)) - │ │ │ ├── flags: ∅ - │ │ │ ├── body: - │ │ │ │ @ StatementsNode (location: (15,2)-(16,3)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 2) - │ │ │ │ ├── @ IntegerNode (location: (15,2)-(15,3)) - │ │ │ │ │ ├── flags: newline, static_literal, decimal - │ │ │ │ │ └── value: 1 - │ │ │ │ └── @ IntegerNode (location: (16,2)-(16,3)) - │ │ │ │ ├── flags: newline, static_literal, decimal - │ │ │ │ └── value: 2 - │ │ │ ├── opening_loc: (14,11)-(14,12) = "(" - │ │ │ └── closing_loc: (17,0)-(17,1) = ")" - │ │ └── keyword_loc: (14,6)-(14,11) = "break" - │ ├── opening_loc: (14,4)-(14,5) = "{" - │ └── closing_loc: (17,2)-(17,3) = "}" - ├── @ CallNode (location: (19,0)-(19,15)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :tap - │ ├── message_loc: (19,0)-(19,3) = "tap" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (19,4)-(19,15)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (19,6)-(19,13)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ BreakNode (location: (19,6)-(19,13)) - │ │ ├── flags: newline - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (19,11)-(19,13)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ ParenthesesNode (location: (19,11)-(19,13)) - │ │ │ ├── flags: ∅ - │ │ │ ├── body: ∅ - │ │ │ ├── opening_loc: (19,11)-(19,12) = "(" - │ │ │ └── closing_loc: (19,12)-(19,13) = ")" - │ │ └── keyword_loc: (19,6)-(19,11) = "break" - │ ├── opening_loc: (19,4)-(19,5) = "{" - │ └── closing_loc: (19,14)-(19,15) = "}" - ├── @ CallNode (location: (21,0)-(21,16)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :tap - │ ├── message_loc: (21,0)-(21,3) = "tap" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (21,4)-(21,16)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (21,6)-(21,14)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ BreakNode (location: (21,6)-(21,14)) - │ │ ├── flags: newline - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (21,11)-(21,14)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ ParenthesesNode (location: (21,11)-(21,14)) - │ │ │ ├── flags: ∅ - │ │ │ ├── body: - │ │ │ │ @ StatementsNode (location: (21,12)-(21,13)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ IntegerNode (location: (21,12)-(21,13)) - │ │ │ │ ├── flags: newline, static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ ├── opening_loc: (21,11)-(21,12) = "(" - │ │ │ └── closing_loc: (21,13)-(21,14) = ")" - │ │ └── keyword_loc: (21,6)-(21,11) = "break" - │ ├── opening_loc: (21,4)-(21,5) = "{" - │ └── closing_loc: (21,15)-(21,16) = "}" - ├── @ CallNode (location: (23,0)-(23,22)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (23,0)-(23,16)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (23,0)-(23,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: - │ │ @ BlockNode (location: (23,4)-(23,16)) - │ │ ├── flags: ∅ - │ │ ├── locals: [] - │ │ ├── parameters: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (23,6)-(23,14)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ BreakNode (location: (23,6)-(23,14)) - │ │ │ ├── flags: newline - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (23,12)-(23,14)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ IntegerNode (location: (23,12)-(23,14)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 42 - │ │ │ └── keyword_loc: (23,6)-(23,11) = "break" - │ │ ├── opening_loc: (23,4)-(23,5) = "{" - │ │ └── closing_loc: (23,15)-(23,16) = "}" - │ ├── call_operator_loc: ∅ - │ ├── name: :== - │ ├── message_loc: (23,17)-(23,19) = "==" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (23,20)-(23,22)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (23,20)-(23,22)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 42 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (25,0)-(25,23)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (25,0)-(25,17)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (25,0)-(25,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: - │ │ @ BlockNode (location: (25,4)-(25,17)) - │ │ ├── flags: ∅ - │ │ ├── locals: [:a] - │ │ ├── parameters: - │ │ │ @ BlockParametersNode (location: (25,6)-(25,9)) - │ │ │ ├── flags: ∅ - │ │ │ ├── parameters: - │ │ │ │ @ ParametersNode (location: (25,7)-(25,8)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── requireds: (length: 1) - │ │ │ │ │ └── @ RequiredParameterNode (location: (25,7)-(25,8)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── name: :a - │ │ │ │ ├── optionals: (length: 0) - │ │ │ │ ├── rest: ∅ - │ │ │ │ ├── posts: (length: 0) - │ │ │ │ ├── keywords: (length: 0) - │ │ │ │ ├── keyword_rest: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── locals: (length: 0) - │ │ │ ├── opening_loc: (25,6)-(25,7) = "|" - │ │ │ └── closing_loc: (25,8)-(25,9) = "|" - │ │ ├── body: - │ │ │ @ StatementsNode (location: (25,10)-(25,15)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ BreakNode (location: (25,10)-(25,15)) - │ │ │ ├── flags: newline - │ │ │ ├── arguments: ∅ - │ │ │ └── keyword_loc: (25,10)-(25,15) = "break" - │ │ ├── opening_loc: (25,4)-(25,5) = "{" - │ │ └── closing_loc: (25,16)-(25,17) = "}" - │ ├── call_operator_loc: ∅ - │ ├── name: :== - │ ├── message_loc: (25,18)-(25,20) = "==" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (25,21)-(25,23)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (25,21)-(25,23)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 42 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ WhileNode (location: (27,0)-(27,21)) - │ ├── flags: newline - │ ├── keyword_loc: (27,0)-(27,5) = "while" - │ ├── closing_loc: (27,18)-(27,21) = "end" - │ ├── predicate: - │ │ @ AndNode (location: (27,6)-(27,16)) - │ │ ├── flags: ∅ - │ │ ├── left: - │ │ │ @ CallNode (location: (27,6)-(27,7)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :_ - │ │ │ ├── message_loc: (27,6)-(27,7) = "_" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── right: - │ │ │ @ BreakNode (location: (27,11)-(27,16)) - │ │ │ ├── flags: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ └── keyword_loc: (27,11)-(27,16) = "break" - │ │ └── operator_loc: (27,8)-(27,10) = "&&" - │ └── statements: ∅ - └── @ UntilNode (location: (29,0)-(29,21)) - ├── flags: newline - ├── keyword_loc: (29,0)-(29,5) = "until" - ├── closing_loc: (29,18)-(29,21) = "end" - ├── predicate: - │ @ AndNode (location: (29,6)-(29,16)) - │ ├── flags: ∅ - │ ├── left: - │ │ @ CallNode (location: (29,6)-(29,7)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :_ - │ │ ├── message_loc: (29,6)-(29,7) = "_" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── right: - │ │ @ BreakNode (location: (29,11)-(29,16)) - │ │ ├── flags: ∅ - │ │ ├── arguments: ∅ - │ │ └── keyword_loc: (29,11)-(29,16) = "break" - │ └── operator_loc: (29,8)-(29,10) = "&&" - └── statements: ∅ diff --git a/test/prism/snapshots/case.txt b/test/prism/snapshots/case.txt deleted file mode 100644 index 3afc25826c8d78..00000000000000 --- a/test/prism/snapshots/case.txt +++ /dev/null @@ -1,554 +0,0 @@ -@ ProgramNode (location: (1,0)-(55,3)) -├── flags: ∅ -├── locals: [:b] -└── statements: - @ StatementsNode (location: (1,0)-(55,3)) - ├── flags: ∅ - └── body: (length: 15) - ├── @ CaseNode (location: (1,0)-(3,3)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ SymbolNode (location: (1,5)-(1,8)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (1,5)-(1,6) = ":" - │ │ ├── value_loc: (1,6)-(1,8) = "hi" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "hi" - │ ├── conditions: (length: 1) - │ │ └── @ WhenNode (location: (2,0)-(2,8)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (2,0)-(2,4) = "when" - │ │ ├── conditions: (length: 1) - │ │ │ └── @ SymbolNode (location: (2,5)-(2,8)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (2,5)-(2,6) = ":" - │ │ │ ├── value_loc: (2,6)-(2,8) = "hi" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "hi" - │ │ ├── then_keyword_loc: ∅ - │ │ └── statements: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (1,0)-(1,4) = "case" - │ └── end_keyword_loc: (3,0)-(3,3) = "end" - ├── @ CaseNode (location: (5,0)-(5,58)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ TrueNode (location: (5,5)-(5,9)) - │ │ └── flags: static_literal - │ ├── conditions: (length: 2) - │ │ ├── @ WhenNode (location: (5,11)-(5,30)) - │ │ │ ├── flags: ∅ - │ │ │ ├── keyword_loc: (5,11)-(5,15) = "when" - │ │ │ ├── conditions: (length: 1) - │ │ │ │ └── @ TrueNode (location: (5,16)-(5,20)) - │ │ │ │ └── flags: static_literal - │ │ │ ├── then_keyword_loc: ∅ - │ │ │ └── statements: - │ │ │ @ StatementsNode (location: (5,22)-(5,30)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (5,22)-(5,30)) - │ │ │ ├── flags: newline, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :puts - │ │ │ ├── message_loc: (5,22)-(5,26) = "puts" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (5,27)-(5,30)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ SymbolNode (location: (5,27)-(5,30)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: (5,27)-(5,28) = ":" - │ │ │ │ ├── value_loc: (5,28)-(5,30) = "hi" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "hi" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── @ WhenNode (location: (5,32)-(5,53)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (5,32)-(5,36) = "when" - │ │ ├── conditions: (length: 1) - │ │ │ └── @ FalseNode (location: (5,37)-(5,42)) - │ │ │ └── flags: static_literal - │ │ ├── then_keyword_loc: ∅ - │ │ └── statements: - │ │ @ StatementsNode (location: (5,44)-(5,53)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (5,44)-(5,53)) - │ │ ├── flags: newline, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :puts - │ │ ├── message_loc: (5,44)-(5,48) = "puts" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (5,49)-(5,53)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ SymbolNode (location: (5,49)-(5,53)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (5,49)-(5,50) = ":" - │ │ │ ├── value_loc: (5,50)-(5,53) = "bye" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "bye" - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (5,0)-(5,4) = "case" - │ └── end_keyword_loc: (5,55)-(5,58) = "end" - ├── @ CaseNode (location: (7,0)-(7,20)) - │ ├── flags: newline - │ ├── predicate: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ WhenNode (location: (7,6)-(7,15)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (7,6)-(7,10) = "when" - │ │ ├── conditions: (length: 1) - │ │ │ └── @ SplatNode (location: (7,11)-(7,15)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (7,11)-(7,12) = "*" - │ │ │ └── expression: - │ │ │ @ CallNode (location: (7,12)-(7,15)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (7,12)-(7,15) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── then_keyword_loc: ∅ - │ │ └── statements: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (7,0)-(7,4) = "case" - │ └── end_keyword_loc: (7,17)-(7,20) = "end" - ├── @ CaseNode (location: (9,0)-(13,3)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ SymbolNode (location: (9,5)-(9,8)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (9,5)-(9,6) = ":" - │ │ ├── value_loc: (9,6)-(9,8) = "hi" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "hi" - │ ├── conditions: (length: 1) - │ │ └── @ WhenNode (location: (10,0)-(10,8)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (10,0)-(10,4) = "when" - │ │ ├── conditions: (length: 1) - │ │ │ └── @ SymbolNode (location: (10,5)-(10,8)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (10,5)-(10,6) = ":" - │ │ │ ├── value_loc: (10,6)-(10,8) = "hi" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "hi" - │ │ ├── then_keyword_loc: ∅ - │ │ └── statements: ∅ - │ ├── else_clause: - │ │ @ ElseNode (location: (11,0)-(13,3)) - │ │ ├── flags: ∅ - │ │ ├── else_keyword_loc: (11,0)-(11,4) = "else" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (12,0)-(12,2)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ SymbolNode (location: (12,0)-(12,2)) - │ │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (12,0)-(12,1) = ":" - │ │ │ ├── value_loc: (12,1)-(12,2) = "b" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "b" - │ │ └── end_keyword_loc: (13,0)-(13,3) = "end" - │ ├── case_keyword_loc: (9,0)-(9,4) = "case" - │ └── end_keyword_loc: (13,0)-(13,3) = "end" - ├── @ CaseNode (location: (15,0)-(15,36)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (15,5)-(15,9)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :this - │ │ ├── message_loc: (15,5)-(15,9) = "this" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ WhenNode (location: (15,11)-(15,31)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (15,11)-(15,15) = "when" - │ │ ├── conditions: (length: 2) - │ │ │ ├── @ ConstantReadNode (location: (15,16)-(15,22)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :FooBar - │ │ │ └── @ ConstantReadNode (location: (15,24)-(15,31)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :BazBonk - │ │ ├── then_keyword_loc: ∅ - │ │ └── statements: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (15,0)-(15,4) = "case" - │ └── end_keyword_loc: (15,33)-(15,36) = "end" - ├── @ CaseNode (location: (17,0)-(19,3)) - │ ├── flags: newline - │ ├── predicate: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ WhenNode (location: (18,0)-(18,15)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (18,0)-(18,4) = "when" - │ │ ├── conditions: (length: 1) - │ │ │ └── @ CallNode (location: (18,5)-(18,15)) - │ │ │ ├── flags: ∅ - │ │ │ ├── receiver: - │ │ │ │ @ CallNode (location: (18,5)-(18,8)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :foo - │ │ │ │ ├── message_loc: (18,5)-(18,8) = "foo" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :== - │ │ │ ├── message_loc: (18,9)-(18,11) = "==" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (18,12)-(18,15)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ CallNode (location: (18,12)-(18,15)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :bar - │ │ │ │ ├── message_loc: (18,12)-(18,15) = "bar" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── then_keyword_loc: ∅ - │ │ └── statements: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (17,0)-(17,4) = "case" - │ └── end_keyword_loc: (19,0)-(19,3) = "end" - ├── @ CaseNode (location: (21,0)-(25,3)) - │ ├── flags: newline - │ ├── predicate: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ WhenNode (location: (22,0)-(22,6)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (22,0)-(22,4) = "when" - │ │ ├── conditions: (length: 1) - │ │ │ └── @ CallNode (location: (22,5)-(22,6)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :a - │ │ │ ├── message_loc: (22,5)-(22,6) = "a" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── then_keyword_loc: ∅ - │ │ └── statements: ∅ - │ ├── else_clause: - │ │ @ ElseNode (location: (23,0)-(25,3)) - │ │ ├── flags: ∅ - │ │ ├── else_keyword_loc: (23,0)-(23,4) = "else" - │ │ ├── statements: ∅ - │ │ └── end_keyword_loc: (25,0)-(25,3) = "end" - │ ├── case_keyword_loc: (21,0)-(21,4) = "case" - │ └── end_keyword_loc: (25,0)-(25,3) = "end" - ├── @ CaseNode (location: (27,0)-(30,6)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (27,5)-(27,9)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :type - │ │ ├── message_loc: (27,5)-(27,9) = "type" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ WhenNode (location: (28,3)-(28,10)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (28,3)-(28,7) = "when" - │ │ ├── conditions: (length: 1) - │ │ │ └── @ SymbolNode (location: (28,8)-(28,10)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (28,8)-(28,9) = ":" - │ │ │ ├── value_loc: (28,9)-(28,10) = "b" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "b" - │ │ ├── then_keyword_loc: ∅ - │ │ └── statements: ∅ - │ ├── else_clause: - │ │ @ ElseNode (location: (29,5)-(30,6)) - │ │ ├── flags: ∅ - │ │ ├── else_keyword_loc: (29,5)-(29,9) = "else" - │ │ ├── statements: ∅ - │ │ └── end_keyword_loc: (30,3)-(30,6) = "end" - │ ├── case_keyword_loc: (27,0)-(27,4) = "case" - │ └── end_keyword_loc: (30,3)-(30,6) = "end" - ├── @ CaseNode (location: (32,0)-(32,25)) - │ ├── flags: newline - │ ├── predicate: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ WhenNode (location: (32,14)-(32,20)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (32,14)-(32,18) = "when" - │ │ ├── conditions: (length: 1) - │ │ │ └── @ IntegerNode (location: (32,19)-(32,20)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── then_keyword_loc: ∅ - │ │ └── statements: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (32,0)-(32,4) = "case" - │ └── end_keyword_loc: (32,22)-(32,25) = "end" - ├── @ CaseNode (location: (34,0)-(36,3)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ MatchPredicateNode (location: (34,5)-(34,11)) - │ │ ├── flags: ∅ - │ │ ├── value: - │ │ │ @ IntegerNode (location: (34,5)-(34,6)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── pattern: - │ │ │ @ IntegerNode (location: (34,10)-(34,11)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ └── operator_loc: (34,7)-(34,9) = "in" - │ ├── conditions: (length: 1) - │ │ └── @ WhenNode (location: (35,0)-(35,6)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (35,0)-(35,4) = "when" - │ │ ├── conditions: (length: 1) - │ │ │ └── @ IntegerNode (location: (35,5)-(35,6)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 3 - │ │ ├── then_keyword_loc: ∅ - │ │ └── statements: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (34,0)-(34,4) = "case" - │ └── end_keyword_loc: (36,0)-(36,3) = "end" - ├── @ CaseNode (location: (38,0)-(38,24)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ MatchPredicateNode (location: (38,5)-(38,11)) - │ │ ├── flags: ∅ - │ │ ├── value: - │ │ │ @ IntegerNode (location: (38,5)-(38,6)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── pattern: - │ │ │ @ IntegerNode (location: (38,10)-(38,11)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ └── operator_loc: (38,7)-(38,9) = "in" - │ ├── conditions: (length: 1) - │ │ └── @ WhenNode (location: (38,13)-(38,19)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (38,13)-(38,17) = "when" - │ │ ├── conditions: (length: 1) - │ │ │ └── @ IntegerNode (location: (38,18)-(38,19)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 3 - │ │ ├── then_keyword_loc: ∅ - │ │ └── statements: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (38,0)-(38,4) = "case" - │ └── end_keyword_loc: (38,21)-(38,24) = "end" - ├── @ CaseMatchNode (location: (40,0)-(42,3)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ MatchPredicateNode (location: (40,5)-(40,11)) - │ │ ├── flags: ∅ - │ │ ├── value: - │ │ │ @ IntegerNode (location: (40,5)-(40,6)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── pattern: - │ │ │ @ IntegerNode (location: (40,10)-(40,11)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ └── operator_loc: (40,7)-(40,9) = "in" - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (41,0)-(41,4)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ IntegerNode (location: (41,3)-(41,4)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 3 - │ │ ├── statements: ∅ - │ │ ├── in_loc: (41,0)-(41,2) = "in" - │ │ └── then_loc: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (40,0)-(40,4) = "case" - │ └── end_keyword_loc: (42,0)-(42,3) = "end" - ├── @ CaseMatchNode (location: (44,0)-(44,22)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ MatchPredicateNode (location: (44,5)-(44,11)) - │ │ ├── flags: ∅ - │ │ ├── value: - │ │ │ @ IntegerNode (location: (44,5)-(44,6)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── pattern: - │ │ │ @ IntegerNode (location: (44,10)-(44,11)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ └── operator_loc: (44,7)-(44,9) = "in" - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (44,13)-(44,17)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ IntegerNode (location: (44,16)-(44,17)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 3 - │ │ ├── statements: ∅ - │ │ ├── in_loc: (44,13)-(44,15) = "in" - │ │ └── then_loc: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (44,0)-(44,4) = "case" - │ └── end_keyword_loc: (44,19)-(44,22) = "end" - ├── @ CaseMatchNode (location: (46,0)-(49,3)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (46,5)-(46,6)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (46,5)-(46,6) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (47,0)-(48,3)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ IfNode (location: (47,3)-(47,15)) - │ │ │ ├── flags: newline - │ │ │ ├── if_keyword_loc: (47,5)-(47,7) = "if" - │ │ │ ├── predicate: - │ │ │ │ @ AndNode (location: (47,8)-(47,15)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── left: - │ │ │ │ │ @ CallNode (location: (47,8)-(47,9)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :c - │ │ │ │ │ ├── message_loc: (47,8)-(47,9) = "c" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── right: - │ │ │ │ │ @ CallNode (location: (47,14)-(47,15)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :d - │ │ │ │ │ ├── message_loc: (47,14)-(47,15) = "d" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ └── operator_loc: (47,10)-(47,13) = "and" - │ │ │ ├── then_keyword_loc: ∅ - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (47,3)-(47,4)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ LocalVariableTargetNode (location: (47,3)-(47,4)) - │ │ │ │ ├── flags: newline - │ │ │ │ ├── name: :b - │ │ │ │ └── depth: 0 - │ │ │ ├── subsequent: ∅ - │ │ │ └── end_keyword_loc: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (48,2)-(48,3)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (48,2)-(48,3)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :e - │ │ │ ├── message_loc: (48,2)-(48,3) = "e" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── in_loc: (47,0)-(47,2) = "in" - │ │ └── then_loc: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (46,0)-(46,4) = "case" - │ └── end_keyword_loc: (49,0)-(49,3) = "end" - └── @ CallNode (location: (51,0)-(55,3)) - ├── flags: newline - ├── receiver: - │ @ IntegerNode (location: (51,0)-(51,1)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── call_operator_loc: (51,1)-(51,2) = "." - ├── name: :then - ├── message_loc: (51,2)-(51,6) = "then" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (51,7)-(55,3)) - ├── flags: ∅ - ├── locals: [:_1] - ├── parameters: - │ @ NumberedParametersNode (location: (51,7)-(55,3)) - │ ├── flags: ∅ - │ └── maximum: 1 - ├── body: - │ @ StatementsNode (location: (52,2)-(54,5)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CaseMatchNode (location: (52,2)-(54,5)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ IntegerNode (location: (52,7)-(52,8)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (53,2)-(53,8)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ PinnedVariableNode (location: (53,5)-(53,8)) - │ │ │ ├── flags: ∅ - │ │ │ ├── variable: - │ │ │ │ @ LocalVariableReadNode (location: (53,6)-(53,8)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :_1 - │ │ │ │ └── depth: 0 - │ │ │ └── operator_loc: (53,5)-(53,6) = "^" - │ │ ├── statements: ∅ - │ │ ├── in_loc: (53,2)-(53,4) = "in" - │ │ └── then_loc: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (52,2)-(52,6) = "case" - │ └── end_keyword_loc: (54,2)-(54,5) = "end" - ├── opening_loc: (51,7)-(51,9) = "do" - └── closing_loc: (55,0)-(55,3) = "end" diff --git a/test/prism/snapshots/classes.txt b/test/prism/snapshots/classes.txt deleted file mode 100644 index 11ba921df5e83e..00000000000000 --- a/test/prism/snapshots/classes.txt +++ /dev/null @@ -1,418 +0,0 @@ -@ ProgramNode (location: (1,0)-(35,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(35,3)) - ├── flags: ∅ - └── body: (length: 14) - ├── @ ClassNode (location: (1,0)-(1,17)) - │ ├── flags: newline - │ ├── locals: [:a] - │ ├── class_keyword_loc: (1,0)-(1,5) = "class" - │ ├── constant_path: - │ │ @ ConstantReadNode (location: (1,6)-(1,7)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── inheritance_operator_loc: ∅ - │ ├── superclass: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (1,8)-(1,13)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ LocalVariableWriteNode (location: (1,8)-(1,13)) - │ │ ├── flags: newline - │ │ ├── name: :a - │ │ ├── depth: 0 - │ │ ├── name_loc: (1,8)-(1,9) = "a" - │ │ ├── value: - │ │ │ @ IntegerNode (location: (1,12)-(1,13)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── operator_loc: (1,10)-(1,11) = "=" - │ ├── end_keyword_loc: (1,14)-(1,17) = "end" - │ └── name: :A - ├── @ ClassNode (location: (3,0)-(3,20)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── class_keyword_loc: (3,0)-(3,5) = "class" - │ ├── constant_path: - │ │ @ ConstantReadNode (location: (3,6)-(3,7)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── inheritance_operator_loc: ∅ - │ ├── superclass: ∅ - │ ├── body: - │ │ @ BeginNode (location: (3,0)-(3,20)) - │ │ ├── flags: ∅ - │ │ ├── begin_keyword_loc: ∅ - │ │ ├── statements: ∅ - │ │ ├── rescue_clause: ∅ - │ │ ├── else_clause: ∅ - │ │ ├── ensure_clause: - │ │ │ @ EnsureNode (location: (3,9)-(3,20)) - │ │ │ ├── flags: ∅ - │ │ │ ├── ensure_keyword_loc: (3,9)-(3,15) = "ensure" - │ │ │ ├── statements: ∅ - │ │ │ └── end_keyword_loc: (3,17)-(3,20) = "end" - │ │ └── end_keyword_loc: (3,17)-(3,20) = "end" - │ ├── end_keyword_loc: (3,17)-(3,20) = "end" - │ └── name: :A - ├── @ ClassNode (location: (5,0)-(5,34)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── class_keyword_loc: (5,0)-(5,5) = "class" - │ ├── constant_path: - │ │ @ ConstantReadNode (location: (5,6)-(5,7)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── inheritance_operator_loc: ∅ - │ ├── superclass: ∅ - │ ├── body: - │ │ @ BeginNode (location: (5,0)-(5,34)) - │ │ ├── flags: ∅ - │ │ ├── begin_keyword_loc: ∅ - │ │ ├── statements: ∅ - │ │ ├── rescue_clause: - │ │ │ @ RescueNode (location: (5,9)-(5,15)) - │ │ │ ├── flags: ∅ - │ │ │ ├── keyword_loc: (5,9)-(5,15) = "rescue" - │ │ │ ├── exceptions: (length: 0) - │ │ │ ├── operator_loc: ∅ - │ │ │ ├── reference: ∅ - │ │ │ ├── statements: ∅ - │ │ │ └── subsequent: ∅ - │ │ ├── else_clause: - │ │ │ @ ElseNode (location: (5,17)-(5,29)) - │ │ │ ├── flags: ∅ - │ │ │ ├── else_keyword_loc: (5,17)-(5,21) = "else" - │ │ │ ├── statements: ∅ - │ │ │ └── end_keyword_loc: (5,23)-(5,29) = "ensure" - │ │ ├── ensure_clause: - │ │ │ @ EnsureNode (location: (5,23)-(5,34)) - │ │ │ ├── flags: ∅ - │ │ │ ├── ensure_keyword_loc: (5,23)-(5,29) = "ensure" - │ │ │ ├── statements: ∅ - │ │ │ └── end_keyword_loc: (5,31)-(5,34) = "end" - │ │ └── end_keyword_loc: (5,31)-(5,34) = "end" - │ ├── end_keyword_loc: (5,31)-(5,34) = "end" - │ └── name: :A - ├── @ ClassNode (location: (7,0)-(9,3)) - │ ├── flags: newline - │ ├── locals: [:a] - │ ├── class_keyword_loc: (7,0)-(7,5) = "class" - │ ├── constant_path: - │ │ @ ConstantReadNode (location: (7,6)-(7,7)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── inheritance_operator_loc: (7,8)-(7,9) = "<" - │ ├── superclass: - │ │ @ ConstantReadNode (location: (7,10)-(7,11)) - │ │ ├── flags: ∅ - │ │ └── name: :B - │ ├── body: - │ │ @ StatementsNode (location: (8,0)-(8,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ LocalVariableWriteNode (location: (8,0)-(8,5)) - │ │ ├── flags: newline - │ │ ├── name: :a - │ │ ├── depth: 0 - │ │ ├── name_loc: (8,0)-(8,1) = "a" - │ │ ├── value: - │ │ │ @ IntegerNode (location: (8,4)-(8,5)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── operator_loc: (8,2)-(8,3) = "=" - │ ├── end_keyword_loc: (9,0)-(9,3) = "end" - │ └── name: :A - ├── @ SingletonClassNode (location: (11,0)-(12,3)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── class_keyword_loc: (11,0)-(11,5) = "class" - │ ├── operator_loc: (11,6)-(11,8) = "<<" - │ ├── expression: - │ │ @ CallNode (location: (11,9)-(11,16)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ CallNode (location: (11,13)-(11,16)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (11,13)-(11,16) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :! - │ │ ├── message_loc: (11,9)-(11,12) = "not" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ └── end_keyword_loc: (12,0)-(12,3) = "end" - ├── @ ClassNode (location: (14,0)-(14,40)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── class_keyword_loc: (14,0)-(14,5) = "class" - │ ├── constant_path: - │ │ @ ConstantReadNode (location: (14,6)-(14,7)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── inheritance_operator_loc: ∅ - │ ├── superclass: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (14,9)-(14,35)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ SingletonClassNode (location: (14,9)-(14,35)) - │ │ ├── flags: newline - │ │ ├── locals: [] - │ │ ├── class_keyword_loc: (14,9)-(14,14) = "class" - │ │ ├── operator_loc: (14,15)-(14,17) = "<<" - │ │ ├── expression: - │ │ │ @ SelfNode (location: (14,18)-(14,22)) - │ │ │ └── flags: ∅ - │ │ ├── body: - │ │ │ @ BeginNode (location: (14,9)-(14,35)) - │ │ │ ├── flags: ∅ - │ │ │ ├── begin_keyword_loc: ∅ - │ │ │ ├── statements: ∅ - │ │ │ ├── rescue_clause: ∅ - │ │ │ ├── else_clause: ∅ - │ │ │ ├── ensure_clause: - │ │ │ │ @ EnsureNode (location: (14,24)-(14,35)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── ensure_keyword_loc: (14,24)-(14,30) = "ensure" - │ │ │ │ ├── statements: ∅ - │ │ │ │ └── end_keyword_loc: (14,32)-(14,35) = "end" - │ │ │ └── end_keyword_loc: (14,32)-(14,35) = "end" - │ │ └── end_keyword_loc: (14,32)-(14,35) = "end" - │ ├── end_keyword_loc: (14,37)-(14,40) = "end" - │ └── name: :A - ├── @ ClassNode (location: (16,0)-(16,54)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── class_keyword_loc: (16,0)-(16,5) = "class" - │ ├── constant_path: - │ │ @ ConstantReadNode (location: (16,6)-(16,7)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── inheritance_operator_loc: ∅ - │ ├── superclass: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (16,9)-(16,49)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ SingletonClassNode (location: (16,9)-(16,49)) - │ │ ├── flags: newline - │ │ ├── locals: [] - │ │ ├── class_keyword_loc: (16,9)-(16,14) = "class" - │ │ ├── operator_loc: (16,15)-(16,17) = "<<" - │ │ ├── expression: - │ │ │ @ SelfNode (location: (16,18)-(16,22)) - │ │ │ └── flags: ∅ - │ │ ├── body: - │ │ │ @ BeginNode (location: (16,9)-(16,49)) - │ │ │ ├── flags: ∅ - │ │ │ ├── begin_keyword_loc: ∅ - │ │ │ ├── statements: ∅ - │ │ │ ├── rescue_clause: - │ │ │ │ @ RescueNode (location: (16,24)-(16,30)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── keyword_loc: (16,24)-(16,30) = "rescue" - │ │ │ │ ├── exceptions: (length: 0) - │ │ │ │ ├── operator_loc: ∅ - │ │ │ │ ├── reference: ∅ - │ │ │ │ ├── statements: ∅ - │ │ │ │ └── subsequent: ∅ - │ │ │ ├── else_clause: - │ │ │ │ @ ElseNode (location: (16,32)-(16,44)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── else_keyword_loc: (16,32)-(16,36) = "else" - │ │ │ │ ├── statements: ∅ - │ │ │ │ └── end_keyword_loc: (16,38)-(16,44) = "ensure" - │ │ │ ├── ensure_clause: - │ │ │ │ @ EnsureNode (location: (16,38)-(16,49)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── ensure_keyword_loc: (16,38)-(16,44) = "ensure" - │ │ │ │ ├── statements: ∅ - │ │ │ │ └── end_keyword_loc: (16,46)-(16,49) = "end" - │ │ │ └── end_keyword_loc: (16,46)-(16,49) = "end" - │ │ └── end_keyword_loc: (16,46)-(16,49) = "end" - │ ├── end_keyword_loc: (16,51)-(16,54) = "end" - │ └── name: :A - ├── @ SingletonClassNode (location: (18,0)-(19,3)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── class_keyword_loc: (18,0)-(18,5) = "class" - │ ├── operator_loc: (18,6)-(18,8) = "<<" - │ ├── expression: - │ │ @ CallNode (location: (18,9)-(18,16)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ CallNode (location: (18,9)-(18,12)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (18,9)-(18,12) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: (18,12)-(18,13) = "." - │ │ ├── name: :bar - │ │ ├── message_loc: (18,13)-(18,16) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ └── end_keyword_loc: (19,0)-(19,3) = "end" - ├── @ SingletonClassNode (location: (21,0)-(21,20)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── class_keyword_loc: (21,0)-(21,5) = "class" - │ ├── operator_loc: (21,6)-(21,8) = "<<" - │ ├── expression: - │ │ @ CallNode (location: (21,9)-(21,16)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ CallNode (location: (21,9)-(21,12)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (21,9)-(21,12) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: (21,12)-(21,13) = "." - │ │ ├── name: :bar - │ │ ├── message_loc: (21,13)-(21,16) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ └── end_keyword_loc: (21,17)-(21,20) = "end" - ├── @ SingletonClassNode (location: (23,0)-(24,3)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── class_keyword_loc: (23,0)-(23,5) = "class" - │ ├── operator_loc: (23,6)-(23,8) = "<<" - │ ├── expression: - │ │ @ SelfNode (location: (23,9)-(23,13)) - │ │ └── flags: ∅ - │ ├── body: ∅ - │ └── end_keyword_loc: (24,0)-(24,3) = "end" - ├── @ SingletonClassNode (location: (26,0)-(26,17)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── class_keyword_loc: (26,0)-(26,5) = "class" - │ ├── operator_loc: (26,6)-(26,8) = "<<" - │ ├── expression: - │ │ @ SelfNode (location: (26,9)-(26,13)) - │ │ └── flags: ∅ - │ ├── body: ∅ - │ └── end_keyword_loc: (26,14)-(26,17) = "end" - ├── @ SingletonClassNode (location: (28,0)-(30,3)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── class_keyword_loc: (28,0)-(28,5) = "class" - │ ├── operator_loc: (28,6)-(28,8) = "<<" - │ ├── expression: - │ │ @ SelfNode (location: (28,9)-(28,13)) - │ │ └── flags: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (29,0)-(29,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (29,0)-(29,5)) - │ │ ├── flags: newline - │ │ ├── receiver: - │ │ │ @ IntegerNode (location: (29,0)-(29,1)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :+ - │ │ ├── message_loc: (29,2)-(29,3) = "+" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (29,4)-(29,5)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (29,4)-(29,5)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── end_keyword_loc: (30,0)-(30,3) = "end" - ├── @ SingletonClassNode (location: (32,0)-(32,23)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── class_keyword_loc: (32,0)-(32,5) = "class" - │ ├── operator_loc: (32,6)-(32,8) = "<<" - │ ├── expression: - │ │ @ SelfNode (location: (32,9)-(32,13)) - │ │ └── flags: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (32,14)-(32,19)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (32,14)-(32,19)) - │ │ ├── flags: newline - │ │ ├── receiver: - │ │ │ @ IntegerNode (location: (32,14)-(32,15)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :+ - │ │ ├── message_loc: (32,16)-(32,17) = "+" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (32,18)-(32,19)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (32,18)-(32,19)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── end_keyword_loc: (32,20)-(32,23) = "end" - └── @ ClassNode (location: (34,0)-(35,3)) - ├── flags: newline - ├── locals: [] - ├── class_keyword_loc: (34,0)-(34,5) = "class" - ├── constant_path: - │ @ ConstantReadNode (location: (34,6)-(34,7)) - │ ├── flags: ∅ - │ └── name: :A - ├── inheritance_operator_loc: (34,8)-(34,9) = "<" - ├── superclass: - │ @ CallNode (location: (34,10)-(34,14)) - │ ├── flags: ∅ - │ ├── receiver: - │ │ @ ConstantReadNode (location: (34,10)-(34,11)) - │ │ ├── flags: ∅ - │ │ └── name: :B - │ ├── call_operator_loc: ∅ - │ ├── name: :[] - │ ├── message_loc: (34,11)-(34,14) = "[1]" - │ ├── opening_loc: (34,11)-(34,12) = "[" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (34,12)-(34,13)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (34,12)-(34,13)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── closing_loc: (34,13)-(34,14) = "]" - │ └── block: ∅ - ├── body: ∅ - ├── end_keyword_loc: (35,0)-(35,3) = "end" - └── name: :A diff --git a/test/prism/snapshots/command_method_call.txt b/test/prism/snapshots/command_method_call.txt deleted file mode 100644 index ab48ee480e2d21..00000000000000 --- a/test/prism/snapshots/command_method_call.txt +++ /dev/null @@ -1,773 +0,0 @@ -@ ProgramNode (location: (1,0)-(41,10)) -├── flags: ∅ -├── locals: [:foo, :bar] -└── statements: - @ StatementsNode (location: (1,0)-(41,10)) - ├── flags: ∅ - └── body: (length: 21) - ├── @ CallNode (location: (1,0)-(1,5)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (1,0)-(1,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,4)-(1,5)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (1,4)-(1,5)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (3,0)-(3,9)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (3,0)-(3,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (3,4)-(3,9)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (3,4)-(3,9)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (3,4)-(3,7) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (3,8)-(3,9)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (3,8)-(3,9)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ IfNode (location: (5,0)-(5,14)) - │ ├── flags: newline - │ ├── if_keyword_loc: (5,6)-(5,8) = "if" - │ ├── predicate: - │ │ @ CallNode (location: (5,9)-(5,14)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (5,9)-(5,12) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (5,13)-(5,14)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (5,13)-(5,14)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── then_keyword_loc: ∅ - │ ├── statements: - │ │ @ StatementsNode (location: (5,0)-(5,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (5,0)-(5,5)) - │ │ ├── flags: newline, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (5,0)-(5,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (5,4)-(5,5)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (5,4)-(5,5)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── subsequent: ∅ - │ └── end_keyword_loc: ∅ - ├── @ UnlessNode (location: (7,0)-(7,18)) - │ ├── flags: newline - │ ├── keyword_loc: (7,6)-(7,12) = "unless" - │ ├── predicate: - │ │ @ CallNode (location: (7,13)-(7,18)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (7,13)-(7,16) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (7,17)-(7,18)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (7,17)-(7,18)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── then_keyword_loc: ∅ - │ ├── statements: - │ │ @ StatementsNode (location: (7,0)-(7,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (7,0)-(7,5)) - │ │ ├── flags: newline, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (7,0)-(7,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (7,4)-(7,5)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (7,4)-(7,5)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── else_clause: ∅ - │ └── end_keyword_loc: ∅ - ├── @ WhileNode (location: (9,0)-(9,17)) - │ ├── flags: newline - │ ├── keyword_loc: (9,6)-(9,11) = "while" - │ ├── closing_loc: ∅ - │ ├── predicate: - │ │ @ CallNode (location: (9,12)-(9,17)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (9,12)-(9,15) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (9,16)-(9,17)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (9,16)-(9,17)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── statements: - │ @ StatementsNode (location: (9,0)-(9,5)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (9,0)-(9,5)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (9,0)-(9,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (9,4)-(9,5)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (9,4)-(9,5)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ UntilNode (location: (11,0)-(11,17)) - │ ├── flags: newline - │ ├── keyword_loc: (11,6)-(11,11) = "until" - │ ├── closing_loc: ∅ - │ ├── predicate: - │ │ @ CallNode (location: (11,12)-(11,17)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (11,12)-(11,15) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (11,16)-(11,17)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (11,16)-(11,17)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── statements: - │ @ StatementsNode (location: (11,0)-(11,5)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (11,0)-(11,5)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (11,0)-(11,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (11,4)-(11,5)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (11,4)-(11,5)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ RescueModifierNode (location: (13,0)-(13,18)) - │ ├── flags: newline - │ ├── expression: - │ │ @ CallNode (location: (13,0)-(13,5)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (13,0)-(13,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (13,4)-(13,5)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (13,4)-(13,5)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── keyword_loc: (13,6)-(13,12) = "rescue" - │ └── rescue_expression: - │ @ CallNode (location: (13,13)-(13,18)) - │ ├── flags: ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :bar - │ ├── message_loc: (13,13)-(13,16) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (13,17)-(13,18)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (13,17)-(13,18)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (15,0)-(15,10)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (15,0)-(15,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (15,0)-(15,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :[] - │ ├── message_loc: (15,3)-(15,10) = "[bar 1]" - │ ├── opening_loc: (15,3)-(15,4) = "[" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (15,4)-(15,9)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (15,4)-(15,9)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (15,4)-(15,7) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (15,8)-(15,9)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (15,8)-(15,9)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (15,9)-(15,10) = "]" - │ └── block: ∅ - ├── @ AndNode (location: (17,0)-(17,15)) - │ ├── flags: newline - │ ├── left: - │ │ @ CallNode (location: (17,0)-(17,5)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (17,0)-(17,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (17,4)-(17,5)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (17,4)-(17,5)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── right: - │ │ @ CallNode (location: (17,10)-(17,15)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (17,10)-(17,13) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (17,14)-(17,15)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (17,14)-(17,15)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── operator_loc: (17,6)-(17,9) = "and" - ├── @ OrNode (location: (19,0)-(19,14)) - │ ├── flags: newline - │ ├── left: - │ │ @ CallNode (location: (19,0)-(19,5)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (19,0)-(19,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (19,4)-(19,5)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (19,4)-(19,5)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── right: - │ │ @ CallNode (location: (19,9)-(19,14)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (19,9)-(19,12) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (19,13)-(19,14)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (19,13)-(19,14)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── operator_loc: (19,6)-(19,8) = "or" - ├── @ CallNode (location: (21,0)-(21,9)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (21,4)-(21,9)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (21,4)-(21,7) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (21,8)-(21,9)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (21,8)-(21,9)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :! - │ ├── message_loc: (21,0)-(21,3) = "not" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ LocalVariableWriteNode (location: (23,0)-(23,17)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── depth: 0 - │ ├── name_loc: (23,0)-(23,3) = "foo" - │ ├── value: - │ │ @ LocalVariableWriteNode (location: (23,6)-(23,17)) - │ │ ├── flags: ∅ - │ │ ├── name: :bar - │ │ ├── depth: 0 - │ │ ├── name_loc: (23,6)-(23,9) = "bar" - │ │ ├── value: - │ │ │ @ CallNode (location: (23,12)-(23,17)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :baz - │ │ │ ├── message_loc: (23,12)-(23,15) = "baz" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (23,16)-(23,17)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ IntegerNode (location: (23,16)-(23,17)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: (23,10)-(23,11) = "=" - │ └── operator_loc: (23,4)-(23,5) = "=" - ├── @ DefNode (location: (25,0)-(25,15)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (25,4)-(25,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (25,10)-(25,15)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (25,10)-(25,15)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (25,10)-(25,13) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (25,14)-(25,15)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (25,14)-(25,15)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (25,0)-(25,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: (25,8)-(25,9) = "=" - │ └── end_keyword_loc: ∅ - ├── @ CallNode (location: (27,0)-(27,7)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ IntegerNode (location: (27,0)-(27,1)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── call_operator_loc: (27,1)-(27,2) = "." - │ ├── name: :foo - │ ├── message_loc: (27,2)-(27,5) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (27,6)-(27,7)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (27,6)-(27,7)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (29,0)-(29,11)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (29,0)-(29,5)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ IntegerNode (location: (29,0)-(29,1)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── call_operator_loc: (29,1)-(29,2) = "." - │ │ ├── name: :foo - │ │ ├── message_loc: (29,2)-(29,5) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (29,5)-(29,6) = "." - │ ├── name: :bar - │ ├── message_loc: (29,6)-(29,9) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (29,10)-(29,11)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (29,10)-(29,11)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (31,0)-(31,14)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (31,0)-(31,8)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ CallNode (location: (31,0)-(31,5)) - │ │ │ ├── flags: ∅ - │ │ │ ├── receiver: - │ │ │ │ @ IntegerNode (location: (31,0)-(31,1)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ ├── call_operator_loc: (31,1)-(31,2) = "." - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (31,2)-(31,5) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :[] - │ │ ├── message_loc: (31,5)-(31,8) = "[2]" - │ │ ├── opening_loc: (31,5)-(31,6) = "[" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (31,6)-(31,7)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (31,6)-(31,7)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ ├── closing_loc: (31,7)-(31,8) = "]" - │ │ └── block: ∅ - │ ├── call_operator_loc: (31,8)-(31,9) = "." - │ ├── name: :bar - │ ├── message_loc: (31,9)-(31,12) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (31,13)-(31,14)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (31,13)-(31,14)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 3 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (33,0)-(33,14)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (33,0)-(33,8)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ IntegerNode (location: (33,0)-(33,1)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── call_operator_loc: (33,1)-(33,2) = "." - │ │ ├── name: :foo - │ │ ├── message_loc: (33,2)-(33,5) = "foo" - │ │ ├── opening_loc: (33,5)-(33,6) = "(" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (33,6)-(33,7)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (33,6)-(33,7)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ ├── closing_loc: (33,7)-(33,8) = ")" - │ │ └── block: ∅ - │ ├── call_operator_loc: (33,8)-(33,9) = "." - │ ├── name: :bar - │ ├── message_loc: (33,9)-(33,12) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (33,13)-(33,14)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (33,13)-(33,14)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 3 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (35,0)-(35,15)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (35,0)-(35,9)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ IntegerNode (location: (35,0)-(35,1)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── call_operator_loc: (35,1)-(35,2) = "." - │ │ ├── name: :foo - │ │ ├── message_loc: (35,2)-(35,5) = "foo" - │ │ ├── opening_loc: (35,5)-(35,6) = "(" - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: (35,8)-(35,9) = ")" - │ │ └── block: - │ │ @ BlockArgumentNode (location: (35,6)-(35,8)) - │ │ ├── flags: ∅ - │ │ ├── expression: - │ │ │ @ IntegerNode (location: (35,7)-(35,8)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ └── operator_loc: (35,6)-(35,7) = "&" - │ ├── call_operator_loc: (35,9)-(35,10) = "." - │ ├── name: :bar - │ ├── message_loc: (35,10)-(35,13) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (35,14)-(35,15)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (35,14)-(35,15)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 3 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ AndNode (location: (37,0)-(37,17)) - │ ├── flags: newline - │ ├── left: - │ │ @ CallNode (location: (37,0)-(37,6)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ CallNode (location: (37,1)-(37,6)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (37,1)-(37,4) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (37,5)-(37,6)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ IntegerNode (location: (37,5)-(37,6)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :! - │ │ ├── message_loc: (37,0)-(37,1) = "!" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── right: - │ │ @ CallNode (location: (37,11)-(37,17)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ CallNode (location: (37,12)-(37,17)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (37,12)-(37,15) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (37,16)-(37,17)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ IntegerNode (location: (37,16)-(37,17)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 2 - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :! - │ │ ├── message_loc: (37,11)-(37,12) = "!" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── operator_loc: (37,7)-(37,10) = "and" - ├── @ OrNode (location: (39,0)-(39,16)) - │ ├── flags: newline - │ ├── left: - │ │ @ CallNode (location: (39,0)-(39,6)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ CallNode (location: (39,1)-(39,6)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (39,1)-(39,4) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (39,5)-(39,6)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ IntegerNode (location: (39,5)-(39,6)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :! - │ │ ├── message_loc: (39,0)-(39,1) = "!" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── right: - │ │ @ CallNode (location: (39,10)-(39,16)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ CallNode (location: (39,11)-(39,16)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (39,11)-(39,14) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (39,15)-(39,16)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ IntegerNode (location: (39,15)-(39,16)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 2 - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :! - │ │ ├── message_loc: (39,10)-(39,11) = "!" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── operator_loc: (39,7)-(39,9) = "or" - └── @ CallNode (location: (41,0)-(41,10)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (41,4)-(41,10)) - │ ├── flags: ∅ - │ ├── receiver: - │ │ @ CallNode (location: (41,5)-(41,10)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (41,5)-(41,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (41,9)-(41,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (41,9)-(41,10)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :! - │ ├── message_loc: (41,4)-(41,5) = "!" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: ∅ - ├── name: :! - ├── message_loc: (41,0)-(41,3) = "not" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/comments.txt b/test/prism/snapshots/comments.txt deleted file mode 100644 index 66869bc2a99a54..00000000000000 --- a/test/prism/snapshots/comments.txt +++ /dev/null @@ -1,147 +0,0 @@ -@ ProgramNode (location: (1,0)-(24,5)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(24,5)) - ├── flags: ∅ - └── body: (length: 9) - ├── @ CallNode (location: (1,0)-(1,1)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (1,0)-(1,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (3,0)-(3,1)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :b - │ ├── message_loc: (3,0)-(3,1) = "b" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (5,0)-(5,1)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :c - │ ├── message_loc: (5,0)-(5,1) = "c" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (6,0)-(6,1)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :d - │ ├── message_loc: (6,0)-(6,1) = "d" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (8,0)-(10,4)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (8,0)-(8,1)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :e - │ │ ├── message_loc: (8,0)-(8,1) = "e" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (10,2)-(10,3) = "." - │ ├── name: :f - │ ├── message_loc: (10,3)-(10,4) = "f" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (12,0)-(14,2)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (12,0)-(12,1)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :g - │ │ ├── message_loc: (12,0)-(12,1) = "g" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (14,0)-(14,1) = "." - │ ├── name: :h - │ ├── message_loc: (14,1)-(14,2) = "h" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (16,0)-(17,2)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (16,0)-(16,1)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :i - │ │ ├── message_loc: (16,0)-(16,1) = "i" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (17,0)-(17,1) = "." - │ ├── name: :j - │ ├── message_loc: (17,1)-(17,2) = "j" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (19,0)-(20,4)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (19,0)-(19,1)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :k - │ │ ├── message_loc: (19,0)-(19,1) = "k" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (20,2)-(20,3) = "." - │ ├── name: :l - │ ├── message_loc: (20,3)-(20,4) = "l" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── @ CallNode (location: (22,0)-(24,5)) - ├── flags: newline, safe_navigation - ├── receiver: - │ @ CallNode (location: (22,0)-(22,1)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :m - │ ├── message_loc: (22,0)-(22,1) = "m" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: (24,2)-(24,4) = "&." - ├── name: :n - ├── message_loc: (24,4)-(24,5) = "n" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/constants.txt b/test/prism/snapshots/constants.txt deleted file mode 100644 index e1aada8e96fd5a..00000000000000 --- a/test/prism/snapshots/constants.txt +++ /dev/null @@ -1,1336 +0,0 @@ -@ ProgramNode (location: (1,0)-(184,10)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(184,10)) - ├── flags: ∅ - └── body: (length: 90) - ├── @ ConstantPathNode (location: (1,0)-(1,4)) - │ ├── flags: newline - │ ├── parent: - │ │ @ ConstantReadNode (location: (1,0)-(1,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── name: :B - │ ├── delimiter_loc: (1,1)-(1,3) = "::" - │ └── name_loc: (1,3)-(1,4) = "B" - ├── @ ConstantPathNode (location: (3,0)-(3,7)) - │ ├── flags: newline - │ ├── parent: - │ │ @ ConstantPathNode (location: (3,0)-(3,4)) - │ │ ├── flags: ∅ - │ │ ├── parent: - │ │ │ @ ConstantReadNode (location: (3,0)-(3,1)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :A - │ │ ├── name: :B - │ │ ├── delimiter_loc: (3,1)-(3,3) = "::" - │ │ └── name_loc: (3,3)-(3,4) = "B" - │ ├── name: :C - │ ├── delimiter_loc: (3,4)-(3,6) = "::" - │ └── name_loc: (3,6)-(3,7) = "C" - ├── @ ConstantPathNode (location: (5,0)-(5,4)) - │ ├── flags: newline - │ ├── parent: - │ │ @ CallNode (location: (5,0)-(5,1)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (5,0)-(5,1) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── name: :B - │ ├── delimiter_loc: (5,1)-(5,3) = "::" - │ └── name_loc: (5,3)-(5,4) = "B" - ├── @ ConstantPathWriteNode (location: (7,0)-(7,8)) - │ ├── flags: newline - │ ├── target: - │ │ @ ConstantPathNode (location: (7,0)-(7,4)) - │ │ ├── flags: ∅ - │ │ ├── parent: - │ │ │ @ ConstantReadNode (location: (7,0)-(7,1)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :A - │ │ ├── name: :B - │ │ ├── delimiter_loc: (7,1)-(7,3) = "::" - │ │ └── name_loc: (7,3)-(7,4) = "B" - │ ├── operator_loc: (7,5)-(7,6) = "=" - │ └── value: - │ @ IntegerNode (location: (7,7)-(7,8)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── @ ConstantWriteNode (location: (9,0)-(9,5)) - │ ├── flags: newline - │ ├── name: :A - │ ├── name_loc: (9,0)-(9,1) = "A" - │ ├── value: - │ │ @ IntegerNode (location: (9,4)-(9,5)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ └── operator_loc: (9,2)-(9,3) = "=" - ├── @ ConstantReadNode (location: (11,0)-(11,3)) - │ ├── flags: newline - │ └── name: :ABC - ├── @ CallNode (location: (13,0)-(13,5)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :Foo - │ ├── message_loc: (13,0)-(13,3) = "Foo" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (13,4)-(13,5)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (13,4)-(13,5)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (15,0)-(15,8)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :Foo - │ ├── message_loc: (15,0)-(15,3) = "Foo" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (15,4)-(15,8)) - │ │ ├── flags: contains_splat - │ │ └── arguments: (length: 1) - │ │ └── @ SplatNode (location: (15,4)-(15,8)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (15,4)-(15,5) = "*" - │ │ └── expression: - │ │ @ CallNode (location: (15,5)-(15,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (15,5)-(15,8) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (17,0)-(17,9)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :Foo - │ ├── message_loc: (17,0)-(17,3) = "Foo" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (17,4)-(17,9)) - │ │ ├── flags: contains_keywords, contains_keyword_splat - │ │ └── arguments: (length: 1) - │ │ └── @ KeywordHashNode (location: (17,4)-(17,9)) - │ │ ├── flags: ∅ - │ │ └── elements: (length: 1) - │ │ └── @ AssocSplatNode (location: (17,4)-(17,9)) - │ │ ├── flags: ∅ - │ │ ├── value: - │ │ │ @ CallNode (location: (17,6)-(17,9)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (17,6)-(17,9) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: (17,4)-(17,6) = "**" - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (19,0)-(19,8)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :Foo - │ ├── message_loc: (19,0)-(19,3) = "Foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockArgumentNode (location: (19,4)-(19,8)) - │ ├── flags: ∅ - │ ├── expression: - │ │ @ CallNode (location: (19,5)-(19,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (19,5)-(19,8) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── operator_loc: (19,4)-(19,5) = "&" - ├── @ CallNode (location: (21,0)-(21,13)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (21,0)-(21,3)) - │ │ ├── flags: ∅ - │ │ └── name: :Foo - │ ├── call_operator_loc: (21,3)-(21,5) = "::" - │ ├── name: :Bar - │ ├── message_loc: (21,5)-(21,8) = "Bar" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (21,9)-(21,13)) - │ │ ├── flags: contains_splat - │ │ └── arguments: (length: 1) - │ │ └── @ SplatNode (location: (21,9)-(21,13)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (21,9)-(21,10) = "*" - │ │ └── expression: - │ │ @ CallNode (location: (21,10)-(21,13)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :baz - │ │ ├── message_loc: (21,10)-(21,13) = "baz" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (23,0)-(23,14)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (23,0)-(23,3)) - │ │ ├── flags: ∅ - │ │ └── name: :Foo - │ ├── call_operator_loc: (23,3)-(23,5) = "::" - │ ├── name: :Bar - │ ├── message_loc: (23,5)-(23,8) = "Bar" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (23,9)-(23,14)) - │ │ ├── flags: contains_keywords, contains_keyword_splat - │ │ └── arguments: (length: 1) - │ │ └── @ KeywordHashNode (location: (23,9)-(23,14)) - │ │ ├── flags: ∅ - │ │ └── elements: (length: 1) - │ │ └── @ AssocSplatNode (location: (23,9)-(23,14)) - │ │ ├── flags: ∅ - │ │ ├── value: - │ │ │ @ CallNode (location: (23,11)-(23,14)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :baz - │ │ │ ├── message_loc: (23,11)-(23,14) = "baz" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: (23,9)-(23,11) = "**" - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (25,0)-(25,13)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (25,0)-(25,3)) - │ │ ├── flags: ∅ - │ │ └── name: :Foo - │ ├── call_operator_loc: (25,3)-(25,5) = "::" - │ ├── name: :Bar - │ ├── message_loc: (25,5)-(25,8) = "Bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockArgumentNode (location: (25,9)-(25,13)) - │ ├── flags: ∅ - │ ├── expression: - │ │ @ CallNode (location: (25,10)-(25,13)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :baz - │ │ ├── message_loc: (25,10)-(25,13) = "baz" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── operator_loc: (25,9)-(25,10) = "&" - ├── @ CallNode (location: (27,0)-(27,8)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantPathNode (location: (27,0)-(27,3)) - │ │ ├── flags: ∅ - │ │ ├── parent: ∅ - │ │ ├── name: :A - │ │ ├── delimiter_loc: (27,0)-(27,2) = "::" - │ │ └── name_loc: (27,2)-(27,3) = "A" - │ ├── call_operator_loc: (27,3)-(27,5) = "::" - │ ├── name: :foo - │ ├── message_loc: (27,5)-(27,8) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ ConstantPathWriteNode (location: (29,0)-(29,7)) - │ ├── flags: newline - │ ├── target: - │ │ @ ConstantPathNode (location: (29,0)-(29,3)) - │ │ ├── flags: ∅ - │ │ ├── parent: ∅ - │ │ ├── name: :A - │ │ ├── delimiter_loc: (29,0)-(29,2) = "::" - │ │ └── name_loc: (29,2)-(29,3) = "A" - │ ├── operator_loc: (29,4)-(29,5) = "=" - │ └── value: - │ @ IntegerNode (location: (29,6)-(29,7)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── @ ConstantPathWriteNode (location: (31,0)-(31,10)) - │ ├── flags: newline - │ ├── target: - │ │ @ ConstantPathNode (location: (31,0)-(31,6)) - │ │ ├── flags: ∅ - │ │ ├── parent: - │ │ │ @ ConstantPathNode (location: (31,0)-(31,3)) - │ │ │ ├── flags: ∅ - │ │ │ ├── parent: ∅ - │ │ │ ├── name: :A - │ │ │ ├── delimiter_loc: (31,0)-(31,2) = "::" - │ │ │ └── name_loc: (31,2)-(31,3) = "A" - │ │ ├── name: :B - │ │ ├── delimiter_loc: (31,3)-(31,5) = "::" - │ │ └── name_loc: (31,5)-(31,6) = "B" - │ ├── operator_loc: (31,7)-(31,8) = "=" - │ └── value: - │ @ IntegerNode (location: (31,9)-(31,10)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── @ ConstantPathNode (location: (33,0)-(33,6)) - │ ├── flags: newline - │ ├── parent: - │ │ @ ConstantPathNode (location: (33,0)-(33,3)) - │ │ ├── flags: ∅ - │ │ ├── parent: ∅ - │ │ ├── name: :A - │ │ ├── delimiter_loc: (33,0)-(33,2) = "::" - │ │ └── name_loc: (33,2)-(33,3) = "A" - │ ├── name: :B - │ ├── delimiter_loc: (33,3)-(33,5) = "::" - │ └── name_loc: (33,5)-(33,6) = "B" - ├── @ ConstantPathNode (location: (35,0)-(35,3)) - │ ├── flags: newline - │ ├── parent: ∅ - │ ├── name: :A - │ ├── delimiter_loc: (35,0)-(35,2) = "::" - │ └── name_loc: (35,2)-(35,3) = "A" - ├── @ CallNode (location: (37,0)-(37,8)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (37,0)-(37,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (37,1)-(37,3) = "::" - │ ├── name: :false - │ ├── message_loc: (37,3)-(37,8) = "false" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (39,0)-(39,10)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantPathNode (location: (39,0)-(39,4)) - │ │ ├── flags: ∅ - │ │ ├── parent: - │ │ │ @ ConstantReadNode (location: (39,0)-(39,1)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :A - │ │ ├── name: :B - │ │ ├── delimiter_loc: (39,1)-(39,3) = "::" - │ │ └── name_loc: (39,3)-(39,4) = "B" - │ ├── call_operator_loc: (39,4)-(39,6) = "::" - │ ├── name: :true - │ ├── message_loc: (39,6)-(39,10) = "true" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (41,0)-(41,4)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (41,0)-(41,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (41,1)-(41,3) = "::" - │ ├── name: :& - │ ├── message_loc: (41,3)-(41,4) = "&" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (43,0)-(43,4)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (43,0)-(43,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (43,1)-(43,3) = "::" - │ ├── name: :` - │ ├── message_loc: (43,3)-(43,4) = "`" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (45,0)-(45,4)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (45,0)-(45,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (45,1)-(45,3) = "::" - │ ├── name: :! - │ ├── message_loc: (45,3)-(45,4) = "!" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (47,0)-(47,5)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (47,0)-(47,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (47,1)-(47,3) = "::" - │ ├── name: :!= - │ ├── message_loc: (47,3)-(47,5) = "!=" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (49,0)-(49,4)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (49,0)-(49,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (49,1)-(49,3) = "::" - │ ├── name: :^ - │ ├── message_loc: (49,3)-(49,4) = "^" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (51,0)-(51,5)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (51,0)-(51,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (51,1)-(51,3) = "::" - │ ├── name: :== - │ ├── message_loc: (51,3)-(51,5) = "==" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (53,0)-(53,6)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (53,0)-(53,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (53,1)-(53,3) = "::" - │ ├── name: :=== - │ ├── message_loc: (53,3)-(53,6) = "===" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (55,0)-(55,5)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (55,0)-(55,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (55,1)-(55,3) = "::" - │ ├── name: :=~ - │ ├── message_loc: (55,3)-(55,5) = "=~" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (57,0)-(57,4)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (57,0)-(57,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (57,1)-(57,3) = "::" - │ ├── name: :> - │ ├── message_loc: (57,3)-(57,4) = ">" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (59,0)-(59,5)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (59,0)-(59,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (59,1)-(59,3) = "::" - │ ├── name: :>= - │ ├── message_loc: (59,3)-(59,5) = ">=" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (61,0)-(61,5)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (61,0)-(61,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (61,1)-(61,3) = "::" - │ ├── name: :>> - │ ├── message_loc: (61,3)-(61,5) = ">>" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (63,0)-(63,5)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (63,0)-(63,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (63,1)-(63,3) = "::" - │ ├── name: :<< - │ ├── message_loc: (63,3)-(63,5) = "<<" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ ConstantPathNode (location: (65,0)-(67,1)) - │ ├── flags: newline - │ ├── parent: - │ │ @ ConstantReadNode (location: (65,0)-(65,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── name: :C - │ ├── delimiter_loc: (65,1)-(65,3) = "::" - │ └── name_loc: (67,0)-(67,1) = "C" - ├── @ CallNode (location: (69,0)-(69,8)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (69,0)-(69,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (69,1)-(69,3) = "::" - │ ├── name: :alias - │ ├── message_loc: (69,3)-(69,8) = "alias" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (71,0)-(71,6)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (71,0)-(71,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (71,1)-(71,3) = "::" - │ ├── name: :and - │ ├── message_loc: (71,3)-(71,6) = "and" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (73,0)-(73,8)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (73,0)-(73,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (73,1)-(73,3) = "::" - │ ├── name: :begin - │ ├── message_loc: (73,3)-(73,8) = "begin" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ ConstantPathNode (location: (75,0)-(75,8)) - │ ├── flags: newline - │ ├── parent: - │ │ @ ConstantReadNode (location: (75,0)-(75,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── name: :BEGIN - │ ├── delimiter_loc: (75,1)-(75,3) = "::" - │ └── name_loc: (75,3)-(75,8) = "BEGIN" - ├── @ CallNode (location: (77,0)-(77,8)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (77,0)-(77,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (77,1)-(77,3) = "::" - │ ├── name: :break - │ ├── message_loc: (77,3)-(77,8) = "break" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (79,0)-(79,8)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (79,0)-(79,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (79,1)-(79,3) = "::" - │ ├── name: :class - │ ├── message_loc: (79,3)-(79,8) = "class" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (81,0)-(81,6)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (81,0)-(81,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (81,1)-(81,3) = "::" - │ ├── name: :def - │ ├── message_loc: (81,3)-(81,6) = "def" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (83,0)-(83,10)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (83,0)-(83,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (83,1)-(83,3) = "::" - │ ├── name: :defined - │ ├── message_loc: (83,3)-(83,10) = "defined" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (85,0)-(85,5)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (85,0)-(85,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (85,1)-(85,3) = "::" - │ ├── name: :do - │ ├── message_loc: (85,3)-(85,5) = "do" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (87,0)-(87,7)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (87,0)-(87,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (87,1)-(87,3) = "::" - │ ├── name: :else - │ ├── message_loc: (87,3)-(87,7) = "else" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (89,0)-(89,8)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (89,0)-(89,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (89,1)-(89,3) = "::" - │ ├── name: :elsif - │ ├── message_loc: (89,3)-(89,8) = "elsif" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (91,0)-(91,6)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (91,0)-(91,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (91,1)-(91,3) = "::" - │ ├── name: :end - │ ├── message_loc: (91,3)-(91,6) = "end" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ ConstantPathNode (location: (93,0)-(93,6)) - │ ├── flags: newline - │ ├── parent: - │ │ @ ConstantReadNode (location: (93,0)-(93,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── name: :END - │ ├── delimiter_loc: (93,1)-(93,3) = "::" - │ └── name_loc: (93,3)-(93,6) = "END" - ├── @ CallNode (location: (95,0)-(95,9)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (95,0)-(95,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (95,1)-(95,3) = "::" - │ ├── name: :ensure - │ ├── message_loc: (95,3)-(95,9) = "ensure" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (97,0)-(97,8)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (97,0)-(97,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (97,1)-(97,3) = "::" - │ ├── name: :false - │ ├── message_loc: (97,3)-(97,8) = "false" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (99,0)-(99,6)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (99,0)-(99,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (99,1)-(99,3) = "::" - │ ├── name: :for - │ ├── message_loc: (99,3)-(99,6) = "for" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (101,0)-(101,5)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (101,0)-(101,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (101,1)-(101,3) = "::" - │ ├── name: :if - │ ├── message_loc: (101,3)-(101,5) = "if" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (103,0)-(103,5)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (103,0)-(103,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (103,1)-(103,3) = "::" - │ ├── name: :in - │ ├── message_loc: (103,3)-(103,5) = "in" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (105,0)-(105,7)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (105,0)-(105,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (105,1)-(105,3) = "::" - │ ├── name: :next - │ ├── message_loc: (105,3)-(105,7) = "next" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (107,0)-(107,6)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (107,0)-(107,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (107,1)-(107,3) = "::" - │ ├── name: :nil - │ ├── message_loc: (107,3)-(107,6) = "nil" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (109,0)-(109,6)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (109,0)-(109,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (109,1)-(109,3) = "::" - │ ├── name: :not - │ ├── message_loc: (109,3)-(109,6) = "not" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (111,0)-(111,5)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (111,0)-(111,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (111,1)-(111,3) = "::" - │ ├── name: :or - │ ├── message_loc: (111,3)-(111,5) = "or" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (113,0)-(113,7)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (113,0)-(113,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (113,1)-(113,3) = "::" - │ ├── name: :redo - │ ├── message_loc: (113,3)-(113,7) = "redo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (115,0)-(115,9)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (115,0)-(115,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (115,1)-(115,3) = "::" - │ ├── name: :rescue - │ ├── message_loc: (115,3)-(115,9) = "rescue" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (117,0)-(117,8)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (117,0)-(117,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (117,1)-(117,3) = "::" - │ ├── name: :retry - │ ├── message_loc: (117,3)-(117,8) = "retry" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (119,0)-(119,9)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (119,0)-(119,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (119,1)-(119,3) = "::" - │ ├── name: :return - │ ├── message_loc: (119,3)-(119,9) = "return" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (121,0)-(121,7)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (121,0)-(121,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (121,1)-(121,3) = "::" - │ ├── name: :self - │ ├── message_loc: (121,3)-(121,7) = "self" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (123,0)-(123,8)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (123,0)-(123,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (123,1)-(123,3) = "::" - │ ├── name: :super - │ ├── message_loc: (123,3)-(123,8) = "super" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (125,0)-(125,7)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (125,0)-(125,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (125,1)-(125,3) = "::" - │ ├── name: :then - │ ├── message_loc: (125,3)-(125,7) = "then" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (127,0)-(127,7)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (127,0)-(127,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (127,1)-(127,3) = "::" - │ ├── name: :true - │ ├── message_loc: (127,3)-(127,7) = "true" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (129,0)-(129,8)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (129,0)-(129,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (129,1)-(129,3) = "::" - │ ├── name: :undef - │ ├── message_loc: (129,3)-(129,8) = "undef" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (131,0)-(131,9)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (131,0)-(131,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (131,1)-(131,3) = "::" - │ ├── name: :unless - │ ├── message_loc: (131,3)-(131,9) = "unless" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (133,0)-(133,8)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (133,0)-(133,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (133,1)-(133,3) = "::" - │ ├── name: :until - │ ├── message_loc: (133,3)-(133,8) = "until" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (135,0)-(135,7)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (135,0)-(135,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (135,1)-(135,3) = "::" - │ ├── name: :when - │ ├── message_loc: (135,3)-(135,7) = "when" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (137,0)-(137,8)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (137,0)-(137,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (137,1)-(137,3) = "::" - │ ├── name: :while - │ ├── message_loc: (137,3)-(137,8) = "while" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (139,0)-(139,8)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (139,0)-(139,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (139,1)-(139,3) = "::" - │ ├── name: :yield - │ ├── message_loc: (139,3)-(139,8) = "yield" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (141,0)-(141,15)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (141,0)-(141,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (141,1)-(141,3) = "::" - │ ├── name: :__ENCODING__ - │ ├── message_loc: (141,3)-(141,15) = "__ENCODING__" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (143,0)-(143,11)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (143,0)-(143,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (143,1)-(143,3) = "::" - │ ├── name: :__FILE__ - │ ├── message_loc: (143,3)-(143,11) = "__FILE__" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (145,0)-(145,11)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (145,0)-(145,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (145,1)-(145,3) = "::" - │ ├── name: :__LINE__ - │ ├── message_loc: (145,3)-(145,11) = "__LINE__" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (147,0)-(147,4)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (147,0)-(147,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (147,1)-(147,3) = "::" - │ ├── name: :< - │ ├── message_loc: (147,3)-(147,4) = "<" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (149,0)-(149,6)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (149,0)-(149,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (149,1)-(149,3) = "::" - │ ├── name: :<=> - │ ├── message_loc: (149,3)-(149,6) = "<=>" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (151,0)-(151,5)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (151,0)-(151,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (151,1)-(151,3) = "::" - │ ├── name: :<< - │ ├── message_loc: (151,3)-(151,5) = "<<" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (153,0)-(153,4)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (153,0)-(153,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (153,1)-(153,3) = "::" - │ ├── name: :- - │ ├── message_loc: (153,3)-(153,4) = "-" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (155,0)-(155,4)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (155,0)-(155,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (155,1)-(155,3) = "::" - │ ├── name: :% - │ ├── message_loc: (155,3)-(155,4) = "%" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (157,0)-(157,5)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (157,0)-(157,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (157,1)-(157,3) = "::" - │ ├── name: :% - │ ├── message_loc: (157,3)-(157,4) = "%" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (157,4)-(157,5)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (157,4)-(157,5)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :i - │ │ ├── message_loc: (157,4)-(157,5) = "i" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (159,0)-(159,5)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (159,0)-(159,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (159,1)-(159,3) = "::" - │ ├── name: :% - │ ├── message_loc: (159,3)-(159,4) = "%" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (159,4)-(159,5)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (159,4)-(159,5)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :w - │ │ ├── message_loc: (159,4)-(159,5) = "w" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (161,0)-(161,5)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (161,0)-(161,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (161,1)-(161,3) = "::" - │ ├── name: :% - │ ├── message_loc: (161,3)-(161,4) = "%" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (161,4)-(161,5)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (161,4)-(161,5)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :x - │ │ ├── message_loc: (161,4)-(161,5) = "x" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (163,0)-(163,5)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (163,0)-(163,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (163,1)-(163,3) = "::" - │ ├── name: :% - │ ├── message_loc: (163,3)-(163,4) = "%" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (163,4)-(163,5)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ ConstantReadNode (location: (163,4)-(163,5)) - │ │ ├── flags: ∅ - │ │ └── name: :I - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (165,0)-(165,5)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (165,0)-(165,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (165,1)-(165,3) = "::" - │ ├── name: :% - │ ├── message_loc: (165,3)-(165,4) = "%" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (165,4)-(165,5)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ ConstantReadNode (location: (165,4)-(165,5)) - │ │ ├── flags: ∅ - │ │ └── name: :W - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (167,0)-(167,4)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (167,0)-(167,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (167,1)-(167,3) = "::" - │ ├── name: :| - │ ├── message_loc: (167,3)-(167,4) = "|" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (169,0)-(169,4)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (169,0)-(169,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (169,1)-(169,3) = "::" - │ ├── name: :+ - │ ├── message_loc: (169,3)-(169,4) = "+" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (171,0)-(171,4)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (171,0)-(171,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (171,1)-(171,3) = "::" - │ ├── name: :/ - │ ├── message_loc: (171,3)-(171,4) = "/" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (173,0)-(173,4)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (173,0)-(173,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (173,1)-(173,3) = "::" - │ ├── name: :* - │ ├── message_loc: (173,3)-(173,4) = "*" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (175,0)-(175,5)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (175,0)-(175,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (175,1)-(175,3) = "::" - │ ├── name: :** - │ ├── message_loc: (175,3)-(175,5) = "**" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (177,0)-(177,4)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (177,0)-(177,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (177,1)-(177,3) = "::" - │ ├── name: :~ - │ ├── message_loc: (177,3)-(177,4) = "~" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ ConstantPathNode (location: (179,0)-(180,1)) - │ ├── flags: newline - │ ├── parent: - │ │ @ CallNode (location: (179,0)-(179,4)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ ConstantReadNode (location: (179,0)-(179,1)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :A - │ │ ├── call_operator_loc: (179,1)-(179,3) = "::" - │ │ ├── name: :_ - │ │ ├── message_loc: (179,3)-(179,4) = "_" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── name: :C - │ ├── delimiter_loc: (179,4)-(179,6) = "::" - │ └── name_loc: (180,0)-(180,1) = "C" - └── @ RangeNode (location: (182,0)-(184,10)) - ├── flags: newline - ├── left: - │ @ CallNode (location: (182,0)-(182,4)) - │ ├── flags: ∅ - │ ├── receiver: - │ │ @ ConstantReadNode (location: (182,0)-(182,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (182,1)-(182,3) = "::" - │ ├── name: :_ - │ ├── message_loc: (182,3)-(182,4) = "_" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── right: - │ @ CallNode (location: (184,0)-(184,10)) - │ ├── flags: ∅ - │ ├── receiver: - │ │ @ ConstantReadNode (location: (184,0)-(184,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (184,1)-(184,3) = "::" - │ ├── name: :__END__ - │ ├── message_loc: (184,3)-(184,10) = "__END__" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── operator_loc: (182,4)-(182,6) = ".." diff --git a/test/prism/snapshots/dash_heredocs.txt b/test/prism/snapshots/dash_heredocs.txt deleted file mode 100644 index 1ca8b4f73dcdbb..00000000000000 --- a/test/prism/snapshots/dash_heredocs.txt +++ /dev/null @@ -1,273 +0,0 @@ -@ ProgramNode (location: (1,0)-(57,11)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(57,11)) - ├── flags: ∅ - └── body: (length: 13) - ├── @ StringNode (location: (1,0)-(1,6)) - │ ├── flags: newline - │ ├── opening_loc: (1,0)-(1,6) = "<<-EOF" - │ ├── content_loc: (2,0)-(3,0) = " a\n" - │ ├── closing_loc: (3,0)-(4,0) = "EOF\n" - │ └── unescaped: " a\n" - ├── @ CallNode (location: (5,0)-(5,20)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ StringNode (location: (5,0)-(5,8)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (5,0)-(5,8) = "<<-FIRST" - │ │ ├── content_loc: (6,0)-(7,0) = " a\n" - │ │ ├── closing_loc: (7,0)-(8,0) = "FIRST\n" - │ │ └── unescaped: " a\n" - │ ├── call_operator_loc: ∅ - │ ├── name: :+ - │ ├── message_loc: (5,9)-(5,10) = "+" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (5,11)-(5,20)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ StringNode (location: (5,11)-(5,20)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (5,11)-(5,20) = "<<-SECOND" - │ │ ├── content_loc: (8,0)-(9,0) = " b\n" - │ │ ├── closing_loc: (9,0)-(10,0) = "SECOND\n" - │ │ └── unescaped: " b\n" - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ InterpolatedXStringNode (location: (11,0)-(11,8)) - │ ├── flags: newline - │ ├── opening_loc: (11,0)-(11,8) = "<<-`EOF`" - │ ├── parts: (length: 3) - │ │ ├── @ StringNode (location: (12,0)-(13,0)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (12,0)-(13,0) = " a\n" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: " a\n" - │ │ ├── @ EmbeddedStatementsNode (location: (13,0)-(13,4)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (13,0)-(13,2) = "\#{" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (13,2)-(13,3)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (13,2)-(13,3)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :b - │ │ │ │ ├── message_loc: (13,2)-(13,3) = "b" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── closing_loc: (13,3)-(13,4) = "}" - │ │ └── @ StringNode (location: (13,4)-(14,0)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (13,4)-(14,0) = "\n" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "\n" - │ └── closing_loc: (14,0)-(15,0) = "EOF\n" - ├── @ StringNode (location: (16,0)-(16,6)) - │ ├── flags: newline - │ ├── opening_loc: (16,0)-(16,6) = "<<-EOF" - │ ├── content_loc: (17,0)-(18,0) = " a\n" - │ ├── closing_loc: (18,0)-(19,0) = "EOF\n" - │ └── unescaped: " a\n" - ├── @ StringNode (location: (20,0)-(20,6)) - │ ├── flags: newline - │ ├── opening_loc: (20,0)-(20,6) = "<<-EOF" - │ ├── content_loc: (21,0)-(23,0) = " a\n b\n" - │ ├── closing_loc: (23,0)-(24,0) = " EOF\n" - │ └── unescaped: " a\n b\n" - ├── @ InterpolatedStringNode (location: (25,0)-(25,8)) - │ ├── flags: newline - │ ├── opening_loc: (25,0)-(25,8) = "<<-\"EOF\"" - │ ├── parts: (length: 3) - │ │ ├── @ StringNode (location: (26,0)-(27,0)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (26,0)-(27,0) = " a\n" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: " a\n" - │ │ ├── @ EmbeddedStatementsNode (location: (27,0)-(27,4)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (27,0)-(27,2) = "\#{" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (27,2)-(27,3)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (27,2)-(27,3)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :b - │ │ │ │ ├── message_loc: (27,2)-(27,3) = "b" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── closing_loc: (27,3)-(27,4) = "}" - │ │ └── @ StringNode (location: (27,4)-(28,0)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (27,4)-(28,0) = "\n" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "\n" - │ └── closing_loc: (28,0)-(29,0) = "EOF\n" - ├── @ InterpolatedStringNode (location: (30,0)-(30,6)) - │ ├── flags: newline - │ ├── opening_loc: (30,0)-(30,6) = "<<-EOF" - │ ├── parts: (length: 3) - │ │ ├── @ StringNode (location: (31,0)-(32,0)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (31,0)-(32,0) = " a\n" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: " a\n" - │ │ ├── @ EmbeddedStatementsNode (location: (32,0)-(32,4)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (32,0)-(32,2) = "\#{" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (32,2)-(32,3)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (32,2)-(32,3)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :b - │ │ │ │ ├── message_loc: (32,2)-(32,3) = "b" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── closing_loc: (32,3)-(32,4) = "}" - │ │ └── @ StringNode (location: (32,4)-(33,0)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (32,4)-(33,0) = "\n" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "\n" - │ └── closing_loc: (33,0)-(34,0) = "EOF\n" - ├── @ StringNode (location: (35,0)-(35,6)) - │ ├── flags: newline - │ ├── opening_loc: (35,0)-(35,2) = "%#" - │ ├── content_loc: (35,2)-(35,5) = "abc" - │ ├── closing_loc: (35,5)-(35,6) = "#" - │ └── unescaped: "abc" - ├── @ StringNode (location: (37,0)-(37,6)) - │ ├── flags: newline - │ ├── opening_loc: (37,0)-(37,6) = "<<-EOF" - │ ├── content_loc: (38,0)-(40,0) = " a\n b\n" - │ ├── closing_loc: (40,0)-(41,0) = "EOF\n" - │ └── unescaped: " a\n b\n" - ├── @ StringNode (location: (42,0)-(42,5)) - │ ├── flags: newline - │ ├── opening_loc: (42,0)-(42,5) = "<<-''" - │ ├── content_loc: (43,0)-(43,0) = "" - │ ├── closing_loc: (43,0)-(44,0) = "\n" - │ └── unescaped: "" - ├── @ StringNode (location: (45,0)-(45,8)) - │ ├── flags: newline - │ ├── opening_loc: (45,0)-(45,8) = "<<-'EOF'" - │ ├── content_loc: (46,0)-(47,0) = " a \#{1}\n" - │ ├── closing_loc: (47,0)-(48,0) = "EOF\n" - │ └── unescaped: " a \#{1}\n" - ├── @ CallNode (location: (49,0)-(49,11)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ StringNode (location: (49,0)-(49,4)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (49,0)-(49,4) = "<<-A" - │ │ ├── content_loc: (50,0)-(51,0) = " a\n" - │ │ ├── closing_loc: (51,0)-(52,0) = "A\n" - │ │ └── unescaped: " a\n" - │ ├── call_operator_loc: ∅ - │ ├── name: :+ - │ ├── message_loc: (49,5)-(49,6) = "+" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (49,7)-(49,11)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ InterpolatedStringNode (location: (49,7)-(49,11)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (49,7)-(49,11) = "<<-B" - │ │ ├── parts: (length: 3) - │ │ │ ├── @ StringNode (location: (52,0)-(53,2)) - │ │ │ │ ├── flags: static_literal, frozen - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── content_loc: (52,0)-(53,2) = " b\n " - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: " b\n " - │ │ │ ├── @ EmbeddedStatementsNode (location: (53,2)-(54,3)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── opening_loc: (53,2)-(53,4) = "\#{" - │ │ │ │ ├── statements: - │ │ │ │ │ @ StatementsNode (location: (53,4)-(53,5)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── body: (length: 1) - │ │ │ │ │ └── @ IntegerNode (location: (53,4)-(53,5)) - │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ └── value: 2 - │ │ │ │ └── closing_loc: (54,2)-(54,3) = "}" - │ │ │ └── @ StringNode (location: (54,3)-(55,0)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (54,3)-(55,0) = "\n" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "\n" - │ │ └── closing_loc: (55,0)-(56,0) = "B\n" - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── @ CallNode (location: (57,0)-(57,11)) - ├── flags: newline - ├── receiver: - │ @ StringNode (location: (57,0)-(57,4)) - │ ├── flags: ∅ - │ ├── opening_loc: (57,0)-(57,4) = "<<-A" - │ ├── content_loc: (58,0)-(59,0) = " a\n" - │ ├── closing_loc: (59,0)-(60,0) = "A\n" - │ └── unescaped: " a\n" - ├── call_operator_loc: ∅ - ├── name: :+ - ├── message_loc: (57,5)-(57,6) = "+" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (57,7)-(57,11)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ InterpolatedStringNode (location: (57,7)-(57,11)) - │ ├── flags: ∅ - │ ├── opening_loc: (57,7)-(57,11) = "<<-B" - │ ├── parts: (length: 3) - │ │ ├── @ StringNode (location: (60,0)-(61,2)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (60,0)-(61,2) = " b\n " - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: " b\n " - │ │ ├── @ EmbeddedStatementsNode (location: (61,2)-(62,4)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (61,2)-(61,4) = "\#{" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (62,2)-(62,3)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ IntegerNode (location: (62,2)-(62,3)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 2 - │ │ │ └── closing_loc: (62,3)-(62,4) = "}" - │ │ └── @ StringNode (location: (62,4)-(63,0)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (62,4)-(63,0) = "\n" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "\n" - │ └── closing_loc: (63,0)-(64,0) = "B\n" - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/defined.txt b/test/prism/snapshots/defined.txt deleted file mode 100644 index 761c7b2ce79a99..00000000000000 --- a/test/prism/snapshots/defined.txt +++ /dev/null @@ -1,99 +0,0 @@ -@ ProgramNode (location: (1,0)-(10,1)) -├── flags: ∅ -├── locals: [:x] -└── statements: - @ StatementsNode (location: (1,0)-(10,1)) - ├── flags: ∅ - └── body: (length: 5) - ├── @ AndNode (location: (1,0)-(1,25)) - │ ├── flags: newline - │ ├── left: - │ │ @ DefinedNode (location: (1,0)-(1,10)) - │ │ ├── flags: ∅ - │ │ ├── lparen_loc: ∅ - │ │ ├── value: - │ │ │ @ IntegerNode (location: (1,9)-(1,10)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── rparen_loc: ∅ - │ │ └── keyword_loc: (1,0)-(1,8) = "defined?" - │ ├── right: - │ │ @ DefinedNode (location: (1,15)-(1,25)) - │ │ ├── flags: ∅ - │ │ ├── lparen_loc: ∅ - │ │ ├── value: - │ │ │ @ IntegerNode (location: (1,24)-(1,25)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ ├── rparen_loc: ∅ - │ │ └── keyword_loc: (1,15)-(1,23) = "defined?" - │ └── operator_loc: (1,11)-(1,14) = "and" - ├── @ DefinedNode (location: (3,0)-(3,16)) - │ ├── flags: newline - │ ├── lparen_loc: (3,8)-(3,9) = "(" - │ ├── value: - │ │ @ LocalVariableOperatorWriteNode (location: (3,9)-(3,15)) - │ │ ├── flags: ∅ - │ │ ├── name_loc: (3,9)-(3,10) = "x" - │ │ ├── binary_operator_loc: (3,11)-(3,13) = "%=" - │ │ ├── value: - │ │ │ @ IntegerNode (location: (3,14)-(3,15)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ ├── name: :x - │ │ ├── binary_operator: :% - │ │ └── depth: 0 - │ ├── rparen_loc: (3,15)-(3,16) = ")" - │ └── keyword_loc: (3,0)-(3,8) = "defined?" - ├── @ DefinedNode (location: (5,0)-(5,21)) - │ ├── flags: newline - │ ├── lparen_loc: (5,8)-(5,9) = "(" - │ ├── value: - │ │ @ AndNode (location: (5,9)-(5,20)) - │ │ ├── flags: ∅ - │ │ ├── left: - │ │ │ @ CallNode (location: (5,9)-(5,12)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (5,9)-(5,12) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── right: - │ │ │ @ CallNode (location: (5,17)-(5,20)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (5,17)-(5,20) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: (5,13)-(5,16) = "and" - │ ├── rparen_loc: (5,20)-(5,21) = ")" - │ └── keyword_loc: (5,0)-(5,8) = "defined?" - ├── @ DefinedNode (location: (7,0)-(7,10)) - │ ├── flags: newline - │ ├── lparen_loc: ∅ - │ ├── value: - │ │ @ IntegerNode (location: (7,9)-(7,10)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── rparen_loc: ∅ - │ └── keyword_loc: (7,0)-(7,8) = "defined?" - └── @ DefinedNode (location: (9,0)-(10,1)) - ├── flags: newline - ├── lparen_loc: (9,8)-(9,9) = "(" - ├── value: - │ @ StringNode (location: (9,9)-(9,14)) - │ ├── flags: ∅ - │ ├── opening_loc: (9,9)-(9,10) = "\"" - │ ├── content_loc: (9,10)-(9,13) = "foo" - │ ├── closing_loc: (9,13)-(9,14) = "\"" - │ └── unescaped: "foo" - ├── rparen_loc: (10,0)-(10,1) = ")" - └── keyword_loc: (9,0)-(9,8) = "defined?" diff --git a/test/prism/snapshots/dos_endings.txt b/test/prism/snapshots/dos_endings.txt deleted file mode 100644 index 69d6b7cd7e5f2b..00000000000000 --- a/test/prism/snapshots/dos_endings.txt +++ /dev/null @@ -1,114 +0,0 @@ -@ ProgramNode (location: (1,0)-(17,20)) -├── flags: ∅ -├── locals: [:x, :a] -└── statements: - @ StatementsNode (location: (1,0)-(17,20)) - ├── flags: ∅ - └── body: (length: 5) - ├── @ CallNode (location: (1,0)-(2,12)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :puts - │ ├── message_loc: (1,0)-(1,4) = "puts" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,5)-(2,12)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ InterpolatedStringNode (location: (1,5)-(2,12)) - │ │ ├── flags: static_literal - │ │ ├── opening_loc: ∅ - │ │ ├── parts: (length: 2) - │ │ │ ├── @ StringNode (location: (1,5)-(1,9)) - │ │ │ │ ├── flags: static_literal, frozen - │ │ │ │ ├── opening_loc: (1,5)-(1,6) = "\"" - │ │ │ │ ├── content_loc: (1,6)-(1,8) = "hi" - │ │ │ │ ├── closing_loc: (1,8)-(1,9) = "\"" - │ │ │ │ └── unescaped: "hi" - │ │ │ └── @ StringNode (location: (2,5)-(2,12)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: (2,5)-(2,6) = "\"" - │ │ │ ├── content_loc: (2,6)-(2,11) = "there" - │ │ │ ├── closing_loc: (2,11)-(2,12) = "\"" - │ │ │ └── unescaped: "there" - │ │ └── closing_loc: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ ArrayNode (location: (4,0)-(5,2)) - │ ├── flags: newline, static_literal - │ ├── elements: (length: 1) - │ │ └── @ SymbolNode (location: (4,3)-(5,1)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: ∅ - │ │ ├── value_loc: (4,3)-(5,1) = "a\\\r\nb" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "a\nb" - │ ├── opening_loc: (4,0)-(4,3) = "%I{" - │ └── closing_loc: (5,1)-(5,2) = "}" - ├── @ StringNode (location: (7,0)-(7,4)) - │ ├── flags: newline - │ ├── opening_loc: (7,0)-(7,4) = "<<-E" - │ ├── content_loc: (8,0)-(11,0) = " 1 \\\r\n 2\r\n 3\r\n" - │ ├── closing_loc: (11,0)-(12,0) = "E\r\n" - │ └── unescaped: " 1 2\n 3\n" - ├── @ LocalVariableWriteNode (location: (13,0)-(15,0)) - │ ├── flags: newline - │ ├── name: :x - │ ├── depth: 0 - │ ├── name_loc: (13,0)-(13,1) = "x" - │ ├── value: - │ │ @ StringNode (location: (13,4)-(15,0)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (13,4)-(14,0) = "%\r\n" - │ │ ├── content_loc: (14,0)-(14,0) = "" - │ │ ├── closing_loc: (14,0)-(15,0) = "\r\n" - │ │ └── unescaped: "" - │ └── operator_loc: (13,2)-(13,3) = "=" - └── @ LocalVariableWriteNode (location: (17,0)-(17,20)) - ├── flags: newline - ├── name: :a - ├── depth: 0 - ├── name_loc: (17,0)-(17,1) = "a" - ├── value: - │ @ CallNode (location: (17,4)-(17,20)) - │ ├── flags: ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (17,4)-(17,7) = "foo" - │ ├── opening_loc: (17,7)-(17,8) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (17,8)-(17,19)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (17,8)-(17,19)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ InterpolatedStringNode (location: (17,8)-(17,14)) - │ │ │ ├── flags: static_literal - │ │ │ ├── opening_loc: (17,8)-(17,14) = "<<~EOF" - │ │ │ ├── parts: (length: 2) - │ │ │ │ ├── @ StringNode (location: (18,0)-(19,0)) - │ │ │ │ │ ├── flags: static_literal, frozen - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── content_loc: (18,0)-(19,0) = "\r\n" - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── unescaped: "\n" - │ │ │ │ └── @ StringNode (location: (19,0)-(20,0)) - │ │ │ │ ├── flags: static_literal, frozen - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── content_loc: (19,0)-(20,0) = " baz\r\n" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "baz\n" - │ │ │ └── closing_loc: (20,0)-(21,0) = " EOF\r\n" - │ │ ├── call_operator_loc: (17,14)-(17,15) = "." - │ │ ├── name: :chop - │ │ ├── message_loc: (17,15)-(17,19) = "chop" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (17,19)-(17,20) = ")" - │ └── block: ∅ - └── operator_loc: (17,2)-(17,3) = "=" diff --git a/test/prism/snapshots/dstring.txt b/test/prism/snapshots/dstring.txt deleted file mode 100644 index b3ece4051372b4..00000000000000 --- a/test/prism/snapshots/dstring.txt +++ /dev/null @@ -1,89 +0,0 @@ -@ ProgramNode (location: (1,0)-(29,1)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(29,1)) - ├── flags: ∅ - └── body: (length: 8) - ├── @ StringNode (location: (1,0)-(2,6)) - │ ├── flags: newline - │ ├── opening_loc: (1,0)-(1,1) = "\"" - │ ├── content_loc: (1,1)-(2,5) = "foo\n bar" - │ ├── closing_loc: (2,5)-(2,6) = "\"" - │ └── unescaped: "foo\n bar" - ├── @ InterpolatedStringNode (location: (4,0)-(5,9)) - │ ├── flags: newline - │ ├── opening_loc: (4,0)-(4,1) = "\"" - │ ├── parts: (length: 2) - │ │ ├── @ StringNode (location: (4,1)-(5,2)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (4,1)-(5,2) = "foo\n " - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "foo\n " - │ │ └── @ EmbeddedStatementsNode (location: (5,2)-(5,8)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (5,2)-(5,4) = "\#{" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (5,4)-(5,7)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (5,4)-(5,7)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (5,4)-(5,7) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── closing_loc: (5,7)-(5,8) = "}" - │ └── closing_loc: (5,8)-(5,9) = "\"" - ├── @ InterpolatedStringNode (location: (7,0)-(9,2)) - │ ├── flags: newline, static_literal - │ ├── opening_loc: ∅ - │ ├── parts: (length: 2) - │ │ ├── @ StringNode (location: (7,0)-(8,2)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: (7,0)-(7,1) = "\"" - │ │ │ ├── content_loc: (7,1)-(8,1) = "fo\no" - │ │ │ ├── closing_loc: (8,1)-(8,2) = "\"" - │ │ │ └── unescaped: "fo\no" - │ │ └── @ StringNode (location: (8,3)-(9,2)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: (8,3)-(8,4) = "\"" - │ │ ├── content_loc: (8,4)-(9,1) = "ba\nr" - │ │ ├── closing_loc: (9,1)-(9,2) = "\"" - │ │ └── unescaped: "ba\nr" - │ └── closing_loc: ∅ - ├── @ StringNode (location: (11,0)-(13,1)) - │ ├── flags: newline - │ ├── opening_loc: (11,0)-(11,1) = "\"" - │ ├── content_loc: (11,1)-(13,0) = "\nfoo\\\n" - │ ├── closing_loc: (13,0)-(13,1) = "\"" - │ └── unescaped: "\nfoo" - ├── @ StringNode (location: (15,0)-(17,1)) - │ ├── flags: newline - │ ├── opening_loc: (15,0)-(15,1) = "\"" - │ ├── content_loc: (15,1)-(17,0) = "\nfoo\\\\\n" - │ ├── closing_loc: (17,0)-(17,1) = "\"" - │ └── unescaped: "\nfoo\\\n" - ├── @ StringNode (location: (19,0)-(21,1)) - │ ├── flags: newline - │ ├── opening_loc: (19,0)-(19,1) = "\"" - │ ├── content_loc: (19,1)-(21,0) = "\nfoo\\\\\\\n" - │ ├── closing_loc: (21,0)-(21,1) = "\"" - │ └── unescaped: "\nfoo\\" - ├── @ StringNode (location: (23,0)-(25,1)) - │ ├── flags: newline - │ ├── opening_loc: (23,0)-(23,1) = "\"" - │ ├── content_loc: (23,1)-(25,0) = "\nfoo\\\\\\\\\n" - │ ├── closing_loc: (25,0)-(25,1) = "\"" - │ └── unescaped: "\nfoo\\\\\n" - └── @ StringNode (location: (27,0)-(29,1)) - ├── flags: newline - ├── opening_loc: (27,0)-(27,1) = "\"" - ├── content_loc: (27,1)-(29,0) = "\nfoo\\\\\\\\\\\n" - ├── closing_loc: (29,0)-(29,1) = "\"" - └── unescaped: "\nfoo\\\\" diff --git a/test/prism/snapshots/dsym_str.txt b/test/prism/snapshots/dsym_str.txt deleted file mode 100644 index 835cbbdc8a753e..00000000000000 --- a/test/prism/snapshots/dsym_str.txt +++ /dev/null @@ -1,13 +0,0 @@ -@ ProgramNode (location: (1,0)-(2,6)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(2,6)) - ├── flags: ∅ - └── body: (length: 1) - └── @ SymbolNode (location: (1,0)-(2,6)) - ├── flags: newline, static_literal, forced_us_ascii_encoding - ├── opening_loc: (1,0)-(1,2) = ":\"" - ├── value_loc: (1,2)-(2,5) = "foo\n bar" - ├── closing_loc: (2,5)-(2,6) = "\"" - └── unescaped: "foo\n bar" diff --git a/test/prism/snapshots/embdoc_no_newline_at_end.txt b/test/prism/snapshots/embdoc_no_newline_at_end.txt deleted file mode 100644 index 5756285aaf2bd2..00000000000000 --- a/test/prism/snapshots/embdoc_no_newline_at_end.txt +++ /dev/null @@ -1,7 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,0)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,0)) - ├── flags: ∅ - └── body: (length: 0) diff --git a/test/prism/snapshots/emoji_method_calls.txt b/test/prism/snapshots/emoji_method_calls.txt deleted file mode 100644 index f6f1bc4162aca6..00000000000000 --- a/test/prism/snapshots/emoji_method_calls.txt +++ /dev/null @@ -1,33 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,12)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,12)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,12)) - ├── flags: newline, attribute_write - ├── receiver: - │ @ CallNode (location: (1,0)-(1,3)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (1,0)-(1,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: (1,3)-(1,4) = "." - ├── name: :🌊= - ├── message_loc: (1,4)-(1,8) = "🌊" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,11)-(1,12)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ IntegerNode (location: (1,11)-(1,12)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/endless_methods.txt b/test/prism/snapshots/endless_methods.txt deleted file mode 100644 index 29f701ed173c8f..00000000000000 --- a/test/prism/snapshots/endless_methods.txt +++ /dev/null @@ -1,115 +0,0 @@ -@ ProgramNode (location: (1,0)-(5,22)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(5,22)) - ├── flags: ∅ - └── body: (length: 3) - ├── @ DefNode (location: (1,0)-(1,11)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (1,4)-(1,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (1,10)-(1,11)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ IntegerNode (location: (1,10)-(1,11)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── locals: [] - │ ├── def_keyword_loc: (1,0)-(1,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: (1,8)-(1,9) = "=" - │ └── end_keyword_loc: ∅ - ├── @ DefNode (location: (3,0)-(3,14)) - │ ├── flags: newline - │ ├── name: :bar - │ ├── name_loc: (3,4)-(3,7) = "bar" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (3,10)-(3,14)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (3,10)-(3,14)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :A - │ │ ├── message_loc: (3,10)-(3,11) = "A" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (3,12)-(3,14)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ StringNode (location: (3,12)-(3,14)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (3,12)-(3,13) = "\"" - │ │ │ ├── content_loc: (3,13)-(3,13) = "" - │ │ │ ├── closing_loc: (3,13)-(3,14) = "\"" - │ │ │ └── unescaped: "" - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (3,0)-(3,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: (3,8)-(3,9) = "=" - │ └── end_keyword_loc: ∅ - └── @ DefNode (location: (5,0)-(5,22)) - ├── flags: newline - ├── name: :method - ├── name_loc: (5,4)-(5,10) = "method" - ├── receiver: ∅ - ├── parameters: ∅ - ├── body: - │ @ StatementsNode (location: (5,13)-(5,22)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (5,13)-(5,22)) - │ ├── flags: ∅ - │ ├── receiver: - │ │ @ CallNode (location: (5,13)-(5,18)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ IntegerNode (location: (5,13)-(5,14)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :+ - │ │ ├── message_loc: (5,15)-(5,16) = "+" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (5,17)-(5,18)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (5,17)-(5,18)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :+ - │ ├── message_loc: (5,19)-(5,20) = "+" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (5,21)-(5,22)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (5,21)-(5,22)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 3 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── locals: [] - ├── def_keyword_loc: (5,0)-(5,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: ∅ - ├── rparen_loc: ∅ - ├── equal_loc: (5,11)-(5,12) = "=" - └── end_keyword_loc: ∅ diff --git a/test/prism/snapshots/endless_range_in_conditional.txt b/test/prism/snapshots/endless_range_in_conditional.txt deleted file mode 100644 index e3b0df740803da..00000000000000 --- a/test/prism/snapshots/endless_range_in_conditional.txt +++ /dev/null @@ -1,58 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,12)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,12)) - ├── flags: ∅ - └── body: (length: 3) - ├── @ IfNode (location: (1,0)-(1,13)) - │ ├── flags: newline - │ ├── if_keyword_loc: (1,0)-(1,2) = "if" - │ ├── predicate: - │ │ @ FlipFlopNode (location: (1,3)-(1,7)) - │ │ ├── flags: static_literal - │ │ ├── left: - │ │ │ @ IntegerNode (location: (1,3)-(1,4)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── right: - │ │ │ @ IntegerNode (location: (1,6)-(1,7)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ └── operator_loc: (1,4)-(1,6) = ".." - │ ├── then_keyword_loc: ∅ - │ ├── statements: ∅ - │ ├── subsequent: ∅ - │ └── end_keyword_loc: (1,10)-(1,13) = "end" - ├── @ IfNode (location: (2,0)-(2,12)) - │ ├── flags: newline - │ ├── if_keyword_loc: (2,0)-(2,2) = "if" - │ ├── predicate: - │ │ @ FlipFlopNode (location: (2,3)-(2,6)) - │ │ ├── flags: static_literal - │ │ ├── left: ∅ - │ │ ├── right: - │ │ │ @ IntegerNode (location: (2,5)-(2,6)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── operator_loc: (2,3)-(2,5) = ".." - │ ├── then_keyword_loc: ∅ - │ ├── statements: ∅ - │ ├── subsequent: ∅ - │ └── end_keyword_loc: (2,9)-(2,12) = "end" - └── @ IfNode (location: (3,0)-(3,12)) - ├── flags: newline - ├── if_keyword_loc: (3,0)-(3,2) = "if" - ├── predicate: - │ @ FlipFlopNode (location: (3,3)-(3,6)) - │ ├── flags: static_literal - │ ├── left: - │ │ @ IntegerNode (location: (3,3)-(3,4)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── right: ∅ - │ └── operator_loc: (3,4)-(3,6) = ".." - ├── then_keyword_loc: ∅ - ├── statements: ∅ - ├── subsequent: ∅ - └── end_keyword_loc: (3,9)-(3,12) = "end" diff --git a/test/prism/snapshots/for.txt b/test/prism/snapshots/for.txt deleted file mode 100644 index 5558209826f117..00000000000000 --- a/test/prism/snapshots/for.txt +++ /dev/null @@ -1,219 +0,0 @@ -@ ProgramNode (location: (1,0)-(19,22)) -├── flags: ∅ -├── locals: [:i, :j, :k] -└── statements: - @ StatementsNode (location: (1,0)-(19,22)) - ├── flags: ∅ - └── body: (length: 6) - ├── @ ForNode (location: (1,0)-(3,3)) - │ ├── flags: newline - │ ├── index: - │ │ @ LocalVariableTargetNode (location: (1,4)-(1,5)) - │ │ ├── flags: ∅ - │ │ ├── name: :i - │ │ └── depth: 0 - │ ├── collection: - │ │ @ RangeNode (location: (1,9)-(1,14)) - │ │ ├── flags: static_literal - │ │ ├── left: - │ │ │ @ IntegerNode (location: (1,9)-(1,10)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── right: - │ │ │ @ IntegerNode (location: (1,12)-(1,14)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 10 - │ │ └── operator_loc: (1,10)-(1,12) = ".." - │ ├── statements: - │ │ @ StatementsNode (location: (2,0)-(2,1)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ LocalVariableReadNode (location: (2,0)-(2,1)) - │ │ ├── flags: newline - │ │ ├── name: :i - │ │ └── depth: 0 - │ ├── for_keyword_loc: (1,0)-(1,3) = "for" - │ ├── in_keyword_loc: (1,6)-(1,8) = "in" - │ ├── do_keyword_loc: ∅ - │ └── end_keyword_loc: (3,0)-(3,3) = "end" - ├── @ ForNode (location: (5,0)-(5,22)) - │ ├── flags: newline - │ ├── index: - │ │ @ LocalVariableTargetNode (location: (5,4)-(5,5)) - │ │ ├── flags: ∅ - │ │ ├── name: :i - │ │ └── depth: 0 - │ ├── collection: - │ │ @ RangeNode (location: (5,9)-(5,14)) - │ │ ├── flags: static_literal - │ │ ├── left: - │ │ │ @ IntegerNode (location: (5,9)-(5,10)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── right: - │ │ │ @ IntegerNode (location: (5,12)-(5,14)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 10 - │ │ └── operator_loc: (5,10)-(5,12) = ".." - │ ├── statements: - │ │ @ StatementsNode (location: (5,16)-(5,17)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ LocalVariableReadNode (location: (5,16)-(5,17)) - │ │ ├── flags: newline - │ │ ├── name: :i - │ │ └── depth: 0 - │ ├── for_keyword_loc: (5,0)-(5,3) = "for" - │ ├── in_keyword_loc: (5,6)-(5,8) = "in" - │ ├── do_keyword_loc: ∅ - │ └── end_keyword_loc: (5,19)-(5,22) = "end" - ├── @ ForNode (location: (7,0)-(9,3)) - │ ├── flags: newline - │ ├── index: - │ │ @ MultiTargetNode (location: (7,4)-(7,7)) - │ │ ├── flags: ∅ - │ │ ├── lefts: (length: 2) - │ │ │ ├── @ LocalVariableTargetNode (location: (7,4)-(7,5)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :i - │ │ │ │ └── depth: 0 - │ │ │ └── @ LocalVariableTargetNode (location: (7,6)-(7,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :j - │ │ │ └── depth: 0 - │ │ ├── rest: ∅ - │ │ ├── rights: (length: 0) - │ │ ├── lparen_loc: ∅ - │ │ └── rparen_loc: ∅ - │ ├── collection: - │ │ @ RangeNode (location: (7,11)-(7,16)) - │ │ ├── flags: static_literal - │ │ ├── left: - │ │ │ @ IntegerNode (location: (7,11)-(7,12)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── right: - │ │ │ @ IntegerNode (location: (7,14)-(7,16)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 10 - │ │ └── operator_loc: (7,12)-(7,14) = ".." - │ ├── statements: - │ │ @ StatementsNode (location: (8,0)-(8,1)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ LocalVariableReadNode (location: (8,0)-(8,1)) - │ │ ├── flags: newline - │ │ ├── name: :i - │ │ └── depth: 0 - │ ├── for_keyword_loc: (7,0)-(7,3) = "for" - │ ├── in_keyword_loc: (7,8)-(7,10) = "in" - │ ├── do_keyword_loc: ∅ - │ └── end_keyword_loc: (9,0)-(9,3) = "end" - ├── @ ForNode (location: (11,0)-(13,3)) - │ ├── flags: newline - │ ├── index: - │ │ @ MultiTargetNode (location: (11,4)-(11,9)) - │ │ ├── flags: ∅ - │ │ ├── lefts: (length: 3) - │ │ │ ├── @ LocalVariableTargetNode (location: (11,4)-(11,5)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :i - │ │ │ │ └── depth: 0 - │ │ │ ├── @ LocalVariableTargetNode (location: (11,6)-(11,7)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :j - │ │ │ │ └── depth: 0 - │ │ │ └── @ LocalVariableTargetNode (location: (11,8)-(11,9)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :k - │ │ │ └── depth: 0 - │ │ ├── rest: ∅ - │ │ ├── rights: (length: 0) - │ │ ├── lparen_loc: ∅ - │ │ └── rparen_loc: ∅ - │ ├── collection: - │ │ @ RangeNode (location: (11,13)-(11,18)) - │ │ ├── flags: static_literal - │ │ ├── left: - │ │ │ @ IntegerNode (location: (11,13)-(11,14)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── right: - │ │ │ @ IntegerNode (location: (11,16)-(11,18)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 10 - │ │ └── operator_loc: (11,14)-(11,16) = ".." - │ ├── statements: - │ │ @ StatementsNode (location: (12,0)-(12,1)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ LocalVariableReadNode (location: (12,0)-(12,1)) - │ │ ├── flags: newline - │ │ ├── name: :i - │ │ └── depth: 0 - │ ├── for_keyword_loc: (11,0)-(11,3) = "for" - │ ├── in_keyword_loc: (11,10)-(11,12) = "in" - │ ├── do_keyword_loc: ∅ - │ └── end_keyword_loc: (13,0)-(13,3) = "end" - ├── @ ForNode (location: (15,0)-(17,3)) - │ ├── flags: newline - │ ├── index: - │ │ @ LocalVariableTargetNode (location: (15,4)-(15,5)) - │ │ ├── flags: ∅ - │ │ ├── name: :i - │ │ └── depth: 0 - │ ├── collection: - │ │ @ RangeNode (location: (15,9)-(15,14)) - │ │ ├── flags: static_literal - │ │ ├── left: - │ │ │ @ IntegerNode (location: (15,9)-(15,10)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── right: - │ │ │ @ IntegerNode (location: (15,12)-(15,14)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 10 - │ │ └── operator_loc: (15,10)-(15,12) = ".." - │ ├── statements: - │ │ @ StatementsNode (location: (16,0)-(16,1)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ LocalVariableReadNode (location: (16,0)-(16,1)) - │ │ ├── flags: newline - │ │ ├── name: :i - │ │ └── depth: 0 - │ ├── for_keyword_loc: (15,0)-(15,3) = "for" - │ ├── in_keyword_loc: (15,6)-(15,8) = "in" - │ ├── do_keyword_loc: (15,15)-(15,17) = "do" - │ └── end_keyword_loc: (17,0)-(17,3) = "end" - └── @ ForNode (location: (19,0)-(19,22)) - ├── flags: newline - ├── index: - │ @ LocalVariableTargetNode (location: (19,4)-(19,5)) - │ ├── flags: ∅ - │ ├── name: :i - │ └── depth: 0 - ├── collection: - │ @ RangeNode (location: (19,9)-(19,14)) - │ ├── flags: static_literal - │ ├── left: - │ │ @ IntegerNode (location: (19,9)-(19,10)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── right: - │ │ @ IntegerNode (location: (19,12)-(19,14)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 10 - │ └── operator_loc: (19,10)-(19,12) = ".." - ├── statements: - │ @ StatementsNode (location: (19,16)-(19,17)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ LocalVariableReadNode (location: (19,16)-(19,17)) - │ ├── flags: newline - │ ├── name: :i - │ └── depth: 0 - ├── for_keyword_loc: (19,0)-(19,3) = "for" - ├── in_keyword_loc: (19,6)-(19,8) = "in" - ├── do_keyword_loc: ∅ - └── end_keyword_loc: (19,19)-(19,22) = "end" diff --git a/test/prism/snapshots/global_variables.txt b/test/prism/snapshots/global_variables.txt deleted file mode 100644 index 17b7728a32d3c2..00000000000000 --- a/test/prism/snapshots/global_variables.txt +++ /dev/null @@ -1,217 +0,0 @@ -@ ProgramNode (location: (1,0)-(93,4)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(93,4)) - ├── flags: ∅ - └── body: (length: 47) - ├── @ GlobalVariableReadNode (location: (1,0)-(1,16)) - │ ├── flags: newline - │ └── name: :$global_variable - ├── @ GlobalVariableReadNode (location: (3,0)-(3,2)) - │ ├── flags: newline - │ └── name: :$_ - ├── @ GlobalVariableReadNode (location: (5,0)-(5,3)) - │ ├── flags: newline - │ └── name: :$-w - ├── @ GlobalVariableReadNode (location: (7,0)-(7,10)) - │ ├── flags: newline - │ └── name: :$LOAD_PATH - ├── @ GlobalVariableReadNode (location: (9,0)-(9,6)) - │ ├── flags: newline - │ └── name: :$stdin - ├── @ GlobalVariableReadNode (location: (11,0)-(11,7)) - │ ├── flags: newline - │ └── name: :$stdout - ├── @ GlobalVariableReadNode (location: (13,0)-(13,7)) - │ ├── flags: newline - │ └── name: :$stderr - ├── @ GlobalVariableReadNode (location: (15,0)-(15,2)) - │ ├── flags: newline - │ └── name: :$! - ├── @ GlobalVariableReadNode (location: (17,0)-(17,2)) - │ ├── flags: newline - │ └── name: :$? - ├── @ GlobalVariableReadNode (location: (19,0)-(19,2)) - │ ├── flags: newline - │ └── name: :$~ - ├── @ BackReferenceReadNode (location: (21,0)-(21,2)) - │ ├── flags: newline - │ └── name: :$& - ├── @ BackReferenceReadNode (location: (23,0)-(23,2)) - │ ├── flags: newline - │ └── name: :$` - ├── @ BackReferenceReadNode (location: (25,0)-(25,2)) - │ ├── flags: newline - │ └── name: :$' - ├── @ BackReferenceReadNode (location: (27,0)-(27,2)) - │ ├── flags: newline - │ └── name: :$+ - ├── @ GlobalVariableReadNode (location: (29,0)-(29,2)) - │ ├── flags: newline - │ └── name: :$: - ├── @ GlobalVariableReadNode (location: (31,0)-(31,2)) - │ ├── flags: newline - │ └── name: :$; - ├── @ GlobalVariableReadNode (location: (33,0)-(33,2)) - │ ├── flags: newline - │ └── name: :$, - ├── @ GlobalVariableReadNode (location: (35,0)-(35,6)) - │ ├── flags: newline - │ └── name: :$DEBUG - ├── @ GlobalVariableReadNode (location: (37,0)-(37,9)) - │ ├── flags: newline - │ └── name: :$FILENAME - ├── @ GlobalVariableReadNode (location: (39,0)-(39,2)) - │ ├── flags: newline - │ └── name: :$0 - ├── @ GlobalVariableReadNode (location: (41,0)-(41,3)) - │ ├── flags: newline - │ └── name: :$-0 - ├── @ GlobalVariableReadNode (location: (43,0)-(43,16)) - │ ├── flags: newline - │ └── name: :$LOADED_FEATURES - ├── @ GlobalVariableReadNode (location: (45,0)-(45,8)) - │ ├── flags: newline - │ └── name: :$VERBOSE - ├── @ GlobalVariableReadNode (location: (47,0)-(47,3)) - │ ├── flags: newline - │ └── name: :$-K - ├── @ SymbolNode (location: (49,0)-(49,17)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (49,0)-(49,1) = ":" - │ ├── value_loc: (49,1)-(49,17) = "$global_variable" - │ ├── closing_loc: ∅ - │ └── unescaped: "$global_variable" - ├── @ SymbolNode (location: (51,0)-(51,3)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (51,0)-(51,1) = ":" - │ ├── value_loc: (51,1)-(51,3) = "$_" - │ ├── closing_loc: ∅ - │ └── unescaped: "$_" - ├── @ SymbolNode (location: (53,0)-(53,4)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (53,0)-(53,1) = ":" - │ ├── value_loc: (53,1)-(53,4) = "$-w" - │ ├── closing_loc: ∅ - │ └── unescaped: "$-w" - ├── @ SymbolNode (location: (55,0)-(55,11)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (55,0)-(55,1) = ":" - │ ├── value_loc: (55,1)-(55,11) = "$LOAD_PATH" - │ ├── closing_loc: ∅ - │ └── unescaped: "$LOAD_PATH" - ├── @ SymbolNode (location: (57,0)-(57,7)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (57,0)-(57,1) = ":" - │ ├── value_loc: (57,1)-(57,7) = "$stdin" - │ ├── closing_loc: ∅ - │ └── unescaped: "$stdin" - ├── @ SymbolNode (location: (59,0)-(59,8)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (59,0)-(59,1) = ":" - │ ├── value_loc: (59,1)-(59,8) = "$stdout" - │ ├── closing_loc: ∅ - │ └── unescaped: "$stdout" - ├── @ SymbolNode (location: (61,0)-(61,8)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (61,0)-(61,1) = ":" - │ ├── value_loc: (61,1)-(61,8) = "$stderr" - │ ├── closing_loc: ∅ - │ └── unescaped: "$stderr" - ├── @ SymbolNode (location: (63,0)-(63,3)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (63,0)-(63,1) = ":" - │ ├── value_loc: (63,1)-(63,3) = "$!" - │ ├── closing_loc: ∅ - │ └── unescaped: "$!" - ├── @ SymbolNode (location: (65,0)-(65,3)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (65,0)-(65,1) = ":" - │ ├── value_loc: (65,1)-(65,3) = "$?" - │ ├── closing_loc: ∅ - │ └── unescaped: "$?" - ├── @ SymbolNode (location: (67,0)-(67,3)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (67,0)-(67,1) = ":" - │ ├── value_loc: (67,1)-(67,3) = "$~" - │ ├── closing_loc: ∅ - │ └── unescaped: "$~" - ├── @ SymbolNode (location: (69,0)-(69,3)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (69,0)-(69,1) = ":" - │ ├── value_loc: (69,1)-(69,3) = "$&" - │ ├── closing_loc: ∅ - │ └── unescaped: "$&" - ├── @ SymbolNode (location: (71,0)-(71,3)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (71,0)-(71,1) = ":" - │ ├── value_loc: (71,1)-(71,3) = "$`" - │ ├── closing_loc: ∅ - │ └── unescaped: "$`" - ├── @ SymbolNode (location: (73,0)-(73,3)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (73,0)-(73,1) = ":" - │ ├── value_loc: (73,1)-(73,3) = "$'" - │ ├── closing_loc: ∅ - │ └── unescaped: "$'" - ├── @ SymbolNode (location: (75,0)-(75,3)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (75,0)-(75,1) = ":" - │ ├── value_loc: (75,1)-(75,3) = "$+" - │ ├── closing_loc: ∅ - │ └── unescaped: "$+" - ├── @ SymbolNode (location: (77,0)-(77,3)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (77,0)-(77,1) = ":" - │ ├── value_loc: (77,1)-(77,3) = "$:" - │ ├── closing_loc: ∅ - │ └── unescaped: "$:" - ├── @ SymbolNode (location: (79,0)-(79,3)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (79,0)-(79,1) = ":" - │ ├── value_loc: (79,1)-(79,3) = "$;" - │ ├── closing_loc: ∅ - │ └── unescaped: "$;" - ├── @ SymbolNode (location: (81,0)-(81,7)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (81,0)-(81,1) = ":" - │ ├── value_loc: (81,1)-(81,7) = "$DEBUG" - │ ├── closing_loc: ∅ - │ └── unescaped: "$DEBUG" - ├── @ SymbolNode (location: (83,0)-(83,10)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (83,0)-(83,1) = ":" - │ ├── value_loc: (83,1)-(83,10) = "$FILENAME" - │ ├── closing_loc: ∅ - │ └── unescaped: "$FILENAME" - ├── @ SymbolNode (location: (85,0)-(85,3)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (85,0)-(85,1) = ":" - │ ├── value_loc: (85,1)-(85,3) = "$0" - │ ├── closing_loc: ∅ - │ └── unescaped: "$0" - ├── @ SymbolNode (location: (87,0)-(87,4)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (87,0)-(87,1) = ":" - │ ├── value_loc: (87,1)-(87,4) = "$-0" - │ ├── closing_loc: ∅ - │ └── unescaped: "$-0" - ├── @ SymbolNode (location: (89,0)-(89,17)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (89,0)-(89,1) = ":" - │ ├── value_loc: (89,1)-(89,17) = "$LOADED_FEATURES" - │ ├── closing_loc: ∅ - │ └── unescaped: "$LOADED_FEATURES" - ├── @ SymbolNode (location: (91,0)-(91,9)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (91,0)-(91,1) = ":" - │ ├── value_loc: (91,1)-(91,9) = "$VERBOSE" - │ ├── closing_loc: ∅ - │ └── unescaped: "$VERBOSE" - └── @ SymbolNode (location: (93,0)-(93,4)) - ├── flags: newline, static_literal, forced_us_ascii_encoding - ├── opening_loc: (93,0)-(93,1) = ":" - ├── value_loc: (93,1)-(93,4) = "$-K" - ├── closing_loc: ∅ - └── unescaped: "$-K" diff --git a/test/prism/snapshots/hashes.txt b/test/prism/snapshots/hashes.txt deleted file mode 100644 index 8462c28994ee46..00000000000000 --- a/test/prism/snapshots/hashes.txt +++ /dev/null @@ -1,422 +0,0 @@ -@ ProgramNode (location: (1,0)-(28,9)) -├── flags: ∅ -├── locals: [:a] -└── statements: - @ StatementsNode (location: (1,0)-(28,9)) - ├── flags: ∅ - └── body: (length: 10) - ├── @ HashNode (location: (1,0)-(1,2)) - │ ├── flags: newline, static_literal - │ ├── opening_loc: (1,0)-(1,1) = "{" - │ ├── elements: (length: 0) - │ └── closing_loc: (1,1)-(1,2) = "}" - ├── @ HashNode (location: (3,0)-(4,1)) - │ ├── flags: newline, static_literal - │ ├── opening_loc: (3,0)-(3,1) = "{" - │ ├── elements: (length: 0) - │ └── closing_loc: (4,0)-(4,1) = "}" - ├── @ HashNode (location: (6,0)-(6,18)) - │ ├── flags: newline - │ ├── opening_loc: (6,0)-(6,1) = "{" - │ ├── elements: (length: 2) - │ │ ├── @ AssocNode (location: (6,2)-(6,8)) - │ │ │ ├── flags: ∅ - │ │ │ ├── key: - │ │ │ │ @ CallNode (location: (6,2)-(6,3)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :a - │ │ │ │ ├── message_loc: (6,2)-(6,3) = "a" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── value: - │ │ │ │ @ CallNode (location: (6,7)-(6,8)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :b - │ │ │ │ ├── message_loc: (6,7)-(6,8) = "b" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── operator_loc: (6,4)-(6,6) = "=>" - │ │ └── @ AssocNode (location: (6,10)-(6,16)) - │ │ ├── flags: ∅ - │ │ ├── key: - │ │ │ @ CallNode (location: (6,10)-(6,11)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :c - │ │ │ ├── message_loc: (6,10)-(6,11) = "c" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── value: - │ │ │ @ CallNode (location: (6,15)-(6,16)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :d - │ │ │ ├── message_loc: (6,15)-(6,16) = "d" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: (6,12)-(6,14) = "=>" - │ └── closing_loc: (6,17)-(6,18) = "}" - ├── @ HashNode (location: (8,0)-(8,15)) - │ ├── flags: newline - │ ├── opening_loc: (8,0)-(8,1) = "{" - │ ├── elements: (length: 2) - │ │ ├── @ AssocNode (location: (8,2)-(8,8)) - │ │ │ ├── flags: ∅ - │ │ │ ├── key: - │ │ │ │ @ CallNode (location: (8,2)-(8,3)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :a - │ │ │ │ ├── message_loc: (8,2)-(8,3) = "a" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── value: - │ │ │ │ @ CallNode (location: (8,7)-(8,8)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :b - │ │ │ │ ├── message_loc: (8,7)-(8,8) = "b" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── operator_loc: (8,4)-(8,6) = "=>" - │ │ └── @ AssocSplatNode (location: (8,10)-(8,13)) - │ │ ├── flags: ∅ - │ │ ├── value: - │ │ │ @ CallNode (location: (8,12)-(8,13)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :c - │ │ │ ├── message_loc: (8,12)-(8,13) = "c" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: (8,10)-(8,12) = "**" - │ └── closing_loc: (8,14)-(8,15) = "}" - ├── @ HashNode (location: (10,0)-(16,5)) - │ ├── flags: newline - │ ├── opening_loc: (10,0)-(10,1) = "{" - │ ├── elements: (length: 2) - │ │ ├── @ AssocNode (location: (11,6)-(11,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── key: - │ │ │ │ @ SymbolNode (location: (11,6)-(11,8)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── value_loc: (11,6)-(11,7) = "a" - │ │ │ │ ├── closing_loc: (11,7)-(11,8) = ":" - │ │ │ │ └── unescaped: "a" - │ │ │ ├── value: - │ │ │ │ @ CallNode (location: (11,9)-(11,10)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :b - │ │ │ │ ├── message_loc: (11,9)-(11,10) = "b" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── operator_loc: ∅ - │ │ └── @ AssocNode (location: (12,6)-(12,10)) - │ │ ├── flags: ∅ - │ │ ├── key: - │ │ │ @ SymbolNode (location: (12,6)-(12,8)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (12,6)-(12,7) = "c" - │ │ │ ├── closing_loc: (12,7)-(12,8) = ":" - │ │ │ └── unescaped: "c" - │ │ ├── value: - │ │ │ @ CallNode (location: (12,9)-(12,10)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :d - │ │ │ ├── message_loc: (12,9)-(12,10) = "d" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: ∅ - │ └── closing_loc: (16,4)-(16,5) = "}" - ├── @ HashNode (location: (18,0)-(18,25)) - │ ├── flags: newline - │ ├── opening_loc: (18,0)-(18,1) = "{" - │ ├── elements: (length: 4) - │ │ ├── @ AssocNode (location: (18,2)-(18,6)) - │ │ │ ├── flags: ∅ - │ │ │ ├── key: - │ │ │ │ @ SymbolNode (location: (18,2)-(18,4)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── value_loc: (18,2)-(18,3) = "a" - │ │ │ │ ├── closing_loc: (18,3)-(18,4) = ":" - │ │ │ │ └── unescaped: "a" - │ │ │ ├── value: - │ │ │ │ @ CallNode (location: (18,5)-(18,6)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :b - │ │ │ │ ├── message_loc: (18,5)-(18,6) = "b" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── operator_loc: ∅ - │ │ ├── @ AssocNode (location: (18,8)-(18,12)) - │ │ │ ├── flags: ∅ - │ │ │ ├── key: - │ │ │ │ @ SymbolNode (location: (18,8)-(18,10)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── value_loc: (18,8)-(18,9) = "c" - │ │ │ │ ├── closing_loc: (18,9)-(18,10) = ":" - │ │ │ │ └── unescaped: "c" - │ │ │ ├── value: - │ │ │ │ @ CallNode (location: (18,11)-(18,12)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :d - │ │ │ │ ├── message_loc: (18,11)-(18,12) = "d" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── operator_loc: ∅ - │ │ ├── @ AssocSplatNode (location: (18,14)-(18,17)) - │ │ │ ├── flags: ∅ - │ │ │ ├── value: - │ │ │ │ @ CallNode (location: (18,16)-(18,17)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :e - │ │ │ │ ├── message_loc: (18,16)-(18,17) = "e" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── operator_loc: (18,14)-(18,16) = "**" - │ │ └── @ AssocNode (location: (18,19)-(18,23)) - │ │ ├── flags: ∅ - │ │ ├── key: - │ │ │ @ SymbolNode (location: (18,19)-(18,21)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (18,19)-(18,20) = "f" - │ │ │ ├── closing_loc: (18,20)-(18,21) = ":" - │ │ │ └── unescaped: "f" - │ │ ├── value: - │ │ │ @ CallNode (location: (18,22)-(18,23)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :g - │ │ │ ├── message_loc: (18,22)-(18,23) = "g" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: ∅ - │ └── closing_loc: (18,24)-(18,25) = "}" - ├── @ HashNode (location: (20,0)-(20,12)) - │ ├── flags: newline - │ ├── opening_loc: (20,0)-(20,1) = "{" - │ ├── elements: (length: 1) - │ │ └── @ AssocNode (location: (20,2)-(20,10)) - │ │ ├── flags: ∅ - │ │ ├── key: - │ │ │ @ SymbolNode (location: (20,2)-(20,6)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (20,2)-(20,3) = "\"" - │ │ │ ├── value_loc: (20,3)-(20,4) = "a" - │ │ │ ├── closing_loc: (20,4)-(20,6) = "\":" - │ │ │ └── unescaped: "a" - │ │ ├── value: - │ │ │ @ CallNode (location: (20,7)-(20,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── receiver: - │ │ │ │ @ CallNode (location: (20,8)-(20,10)) - │ │ │ │ ├── flags: ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :b? - │ │ │ │ ├── message_loc: (20,8)-(20,10) = "b?" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :! - │ │ │ ├── message_loc: (20,7)-(20,8) = "!" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: ∅ - │ └── closing_loc: (20,11)-(20,12) = "}" - ├── @ LocalVariableWriteNode (location: (22,0)-(22,5)) - │ ├── flags: newline - │ ├── name: :a - │ ├── depth: 0 - │ ├── name_loc: (22,0)-(22,1) = "a" - │ ├── value: - │ │ @ IntegerNode (location: (22,4)-(22,5)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ └── operator_loc: (22,2)-(22,3) = "=" - ├── @ CallNode (location: (23,0)-(26,3)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :tap - │ ├── message_loc: (23,0)-(23,3) = "tap" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (23,4)-(26,3)) - │ ├── flags: ∅ - │ ├── locals: [:b] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (24,2)-(25,20)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 2) - │ │ ├── @ LocalVariableWriteNode (location: (24,2)-(24,7)) - │ │ │ ├── flags: newline - │ │ │ ├── name: :b - │ │ │ ├── depth: 0 - │ │ │ ├── name_loc: (24,2)-(24,3) = "b" - │ │ │ ├── value: - │ │ │ │ @ IntegerNode (location: (24,6)-(24,7)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ └── operator_loc: (24,4)-(24,5) = "=" - │ │ └── @ HashNode (location: (25,2)-(25,20)) - │ │ ├── flags: newline - │ │ ├── opening_loc: (25,2)-(25,3) = "{" - │ │ ├── elements: (length: 4) - │ │ │ ├── @ AssocNode (location: (25,4)-(25,6)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── key: - │ │ │ │ │ @ SymbolNode (location: (25,4)-(25,6)) - │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── value_loc: (25,4)-(25,5) = "a" - │ │ │ │ │ ├── closing_loc: (25,5)-(25,6) = ":" - │ │ │ │ │ └── unescaped: "a" - │ │ │ │ ├── value: - │ │ │ │ │ @ ImplicitNode (location: (25,4)-(25,6)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── value: - │ │ │ │ │ @ LocalVariableReadNode (location: (25,4)-(25,6)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── name: :a - │ │ │ │ │ └── depth: 1 - │ │ │ │ └── operator_loc: ∅ - │ │ │ ├── @ AssocNode (location: (25,8)-(25,10)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── key: - │ │ │ │ │ @ SymbolNode (location: (25,8)-(25,10)) - │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── value_loc: (25,8)-(25,9) = "b" - │ │ │ │ │ ├── closing_loc: (25,9)-(25,10) = ":" - │ │ │ │ │ └── unescaped: "b" - │ │ │ │ ├── value: - │ │ │ │ │ @ ImplicitNode (location: (25,8)-(25,10)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── value: - │ │ │ │ │ @ LocalVariableReadNode (location: (25,8)-(25,10)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── name: :b - │ │ │ │ │ └── depth: 0 - │ │ │ │ └── operator_loc: ∅ - │ │ │ ├── @ AssocNode (location: (25,12)-(25,14)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── key: - │ │ │ │ │ @ SymbolNode (location: (25,12)-(25,14)) - │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── value_loc: (25,12)-(25,13) = "c" - │ │ │ │ │ ├── closing_loc: (25,13)-(25,14) = ":" - │ │ │ │ │ └── unescaped: "c" - │ │ │ │ ├── value: - │ │ │ │ │ @ ImplicitNode (location: (25,12)-(25,14)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── value: - │ │ │ │ │ @ CallNode (location: (25,12)-(25,14)) - │ │ │ │ │ ├── flags: ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :c - │ │ │ │ │ ├── message_loc: (25,12)-(25,13) = "c" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ └── operator_loc: ∅ - │ │ │ └── @ AssocNode (location: (25,16)-(25,18)) - │ │ │ ├── flags: ∅ - │ │ │ ├── key: - │ │ │ │ @ SymbolNode (location: (25,16)-(25,18)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── value_loc: (25,16)-(25,17) = "D" - │ │ │ │ ├── closing_loc: (25,17)-(25,18) = ":" - │ │ │ │ └── unescaped: "D" - │ │ │ ├── value: - │ │ │ │ @ ImplicitNode (location: (25,16)-(25,18)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── value: - │ │ │ │ @ ConstantReadNode (location: (25,16)-(25,18)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :D - │ │ │ └── operator_loc: ∅ - │ │ └── closing_loc: (25,19)-(25,20) = "}" - │ ├── opening_loc: (23,4)-(23,6) = "do" - │ └── closing_loc: (26,0)-(26,3) = "end" - └── @ HashNode (location: (28,0)-(28,9)) - ├── flags: newline, static_literal - ├── opening_loc: (28,0)-(28,1) = "{" - ├── elements: (length: 1) - │ └── @ AssocNode (location: (28,2)-(28,7)) - │ ├── flags: static_literal - │ ├── key: - │ │ @ SymbolNode (location: (28,2)-(28,4)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: ∅ - │ │ ├── value_loc: (28,2)-(28,3) = "a" - │ │ ├── closing_loc: (28,3)-(28,4) = ":" - │ │ └── unescaped: "a" - │ ├── value: - │ │ @ IntegerNode (location: (28,5)-(28,7)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: -1 - │ └── operator_loc: ∅ - └── closing_loc: (28,8)-(28,9) = "}" diff --git a/test/prism/snapshots/heredoc.txt b/test/prism/snapshots/heredoc.txt deleted file mode 100644 index 7145f0f7527c27..00000000000000 --- a/test/prism/snapshots/heredoc.txt +++ /dev/null @@ -1,13 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,6)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,6)) - ├── flags: ∅ - └── body: (length: 1) - └── @ StringNode (location: (1,0)-(1,6)) - ├── flags: newline - ├── opening_loc: (1,0)-(1,6) = "< - │ ├── message_loc: (31,2)-(31,5) = "<=>" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (31,6)-(31,7)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (31,6)-(31,7)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (33,0)-(33,6)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ IntegerNode (location: (33,0)-(33,1)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── call_operator_loc: ∅ - │ ├── name: :== - │ ├── message_loc: (33,2)-(33,4) = "==" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (33,5)-(33,6)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (33,5)-(33,6)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (35,0)-(35,7)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ IntegerNode (location: (35,0)-(35,1)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── call_operator_loc: ∅ - │ ├── name: :=== - │ ├── message_loc: (35,2)-(35,5) = "===" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (35,6)-(35,7)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (35,6)-(35,7)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (37,0)-(37,6)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ IntegerNode (location: (37,0)-(37,1)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── call_operator_loc: ∅ - │ ├── name: :=~ - │ ├── message_loc: (37,2)-(37,4) = "=~" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (37,5)-(37,6)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (37,5)-(37,6)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (39,0)-(39,5)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ IntegerNode (location: (39,0)-(39,1)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── call_operator_loc: ∅ - │ ├── name: :> - │ ├── message_loc: (39,2)-(39,3) = ">" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (39,4)-(39,5)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (39,4)-(39,5)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (41,0)-(41,6)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ IntegerNode (location: (41,0)-(41,1)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── call_operator_loc: ∅ - │ ├── name: :>= - │ ├── message_loc: (41,2)-(41,4) = ">=" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (41,5)-(41,6)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (41,5)-(41,6)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (43,0)-(43,6)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ IntegerNode (location: (43,0)-(43,1)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── call_operator_loc: ∅ - │ ├── name: :>> - │ ├── message_loc: (43,2)-(43,4) = ">>" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (43,5)-(43,6)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (43,5)-(43,6)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (45,0)-(45,5)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ IntegerNode (location: (45,0)-(45,1)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── call_operator_loc: ∅ - │ ├── name: :^ - │ ├── message_loc: (45,2)-(45,3) = "^" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (45,4)-(45,5)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (45,4)-(45,5)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (47,0)-(47,5)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ IntegerNode (location: (47,0)-(47,1)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── call_operator_loc: ∅ - │ ├── name: :| - │ ├── message_loc: (47,2)-(47,3) = "|" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (47,4)-(47,5)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (47,4)-(47,5)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ AndNode (location: (49,0)-(49,6)) - │ ├── flags: newline - │ ├── left: - │ │ @ IntegerNode (location: (49,0)-(49,1)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── right: - │ │ @ IntegerNode (location: (49,5)-(49,6)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ └── operator_loc: (49,2)-(49,4) = "&&" - ├── @ AndNode (location: (51,0)-(51,7)) - │ ├── flags: newline - │ ├── left: - │ │ @ IntegerNode (location: (51,0)-(51,1)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── right: - │ │ @ IntegerNode (location: (51,6)-(51,7)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ └── operator_loc: (51,2)-(51,5) = "and" - ├── @ CallNode (location: (53,0)-(53,10)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ IntegerNode (location: (53,0)-(53,1)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── call_operator_loc: ∅ - │ ├── name: :* - │ ├── message_loc: (53,2)-(53,3) = "*" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (53,4)-(53,10)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (53,4)-(53,10)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ IntegerNode (location: (53,4)-(53,5)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :** - │ │ ├── message_loc: (53,6)-(53,8) = "**" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (53,9)-(53,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (53,9)-(53,10)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 3 - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (55,0)-(55,9)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (55,0)-(55,5)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ IntegerNode (location: (55,0)-(55,1)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :* - │ │ ├── message_loc: (55,2)-(55,3) = "*" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (55,4)-(55,5)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (55,4)-(55,5)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :+ - │ ├── message_loc: (55,6)-(55,7) = "+" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (55,8)-(55,9)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (55,8)-(55,9)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 3 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ OrNode (location: (57,0)-(57,6)) - │ ├── flags: newline - │ ├── left: - │ │ @ IntegerNode (location: (57,0)-(57,1)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── right: - │ │ @ IntegerNode (location: (57,5)-(57,6)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ └── operator_loc: (57,2)-(57,4) = "or" - ├── @ OrNode (location: (59,0)-(59,6)) - │ ├── flags: newline - │ ├── left: - │ │ @ IntegerNode (location: (59,0)-(59,1)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── right: - │ │ @ IntegerNode (location: (59,5)-(59,6)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ └── operator_loc: (59,2)-(59,4) = "||" - ├── @ CallNode (location: (61,0)-(61,9)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ IntegerNode (location: (61,0)-(61,1)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── call_operator_loc: ∅ - │ ├── name: :+ - │ ├── message_loc: (61,2)-(61,3) = "+" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (61,4)-(61,9)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (61,4)-(61,9)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ IntegerNode (location: (61,4)-(61,5)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :* - │ │ ├── message_loc: (61,6)-(61,7) = "*" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (61,8)-(61,9)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (61,8)-(61,9)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 3 - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── @ ParenthesesNode (location: (63,0)-(63,7)) - ├── flags: newline - ├── body: - │ @ StatementsNode (location: (63,1)-(63,6)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (63,1)-(63,6)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ IntegerNode (location: (63,1)-(63,2)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── call_operator_loc: ∅ - │ ├── name: :+ - │ ├── message_loc: (63,3)-(63,4) = "+" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (63,5)-(63,6)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (63,5)-(63,6)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── opening_loc: (63,0)-(63,1) = "(" - └── closing_loc: (63,6)-(63,7) = ")" diff --git a/test/prism/snapshots/keyword_method_names.txt b/test/prism/snapshots/keyword_method_names.txt deleted file mode 100644 index 6bb4d970845292..00000000000000 --- a/test/prism/snapshots/keyword_method_names.txt +++ /dev/null @@ -1,191 +0,0 @@ -@ ProgramNode (location: (1,0)-(29,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(29,3)) - ├── flags: ∅ - └── body: (length: 10) - ├── @ DefNode (location: (1,0)-(2,3)) - │ ├── flags: newline - │ ├── name: :def - │ ├── name_loc: (1,4)-(1,7) = "def" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (1,0)-(1,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (2,0)-(2,3) = "end" - ├── @ DefNode (location: (4,0)-(5,3)) - │ ├── flags: newline - │ ├── name: :ensure - │ ├── name_loc: (4,9)-(4,15) = "ensure" - │ ├── receiver: - │ │ @ SelfNode (location: (4,4)-(4,8)) - │ │ └── flags: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (4,0)-(4,3) = "def" - │ ├── operator_loc: (4,8)-(4,9) = "." - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (5,0)-(5,3) = "end" - ├── @ CallNode (location: (7,0)-(10,3)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :private - │ ├── message_loc: (7,0)-(7,7) = "private" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (7,8)-(10,3)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ DefNode (location: (7,8)-(10,3)) - │ │ ├── flags: ∅ - │ │ ├── name: :foo - │ │ ├── name_loc: (7,12)-(7,15) = "foo" - │ │ ├── receiver: ∅ - │ │ ├── parameters: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (8,2)-(9,5)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (8,2)-(9,5)) - │ │ │ ├── flags: newline, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (8,2)-(8,5) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: - │ │ │ @ BlockNode (location: (8,6)-(9,5)) - │ │ │ ├── flags: ∅ - │ │ │ ├── locals: [] - │ │ │ ├── parameters: ∅ - │ │ │ ├── body: ∅ - │ │ │ ├── opening_loc: (8,6)-(8,8) = "do" - │ │ │ └── closing_loc: (9,2)-(9,5) = "end" - │ │ ├── locals: [] - │ │ ├── def_keyword_loc: (7,8)-(7,11) = "def" - │ │ ├── operator_loc: ∅ - │ │ ├── lparen_loc: ∅ - │ │ ├── rparen_loc: ∅ - │ │ ├── equal_loc: ∅ - │ │ └── end_keyword_loc: (10,0)-(10,3) = "end" - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ DefNode (location: (12,0)-(13,3)) - │ ├── flags: newline - │ ├── name: :m - │ ├── name_loc: (12,4)-(12,5) = "m" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (12,6)-(12,14)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (12,6)-(12,7)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :a - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: - │ │ │ @ NoKeywordsParameterNode (location: (12,9)-(12,14)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (12,9)-(12,11) = "**" - │ │ │ └── keyword_loc: (12,11)-(12,14) = "nil" - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:a] - │ ├── def_keyword_loc: (12,0)-(12,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (12,5)-(12,6) = "(" - │ ├── rparen_loc: (12,14)-(12,15) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (13,0)-(13,3) = "end" - ├── @ DefNode (location: (15,0)-(16,3)) - │ ├── flags: newline - │ ├── name: :a - │ ├── name_loc: (15,17)-(15,18) = "a" - │ ├── receiver: - │ │ @ SourceEncodingNode (location: (15,4)-(15,16)) - │ │ └── flags: static_literal - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (15,0)-(15,3) = "def" - │ ├── operator_loc: (15,16)-(15,17) = "." - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (16,0)-(16,3) = "end" - ├── @ StringNode (location: (18,0)-(18,6)) - │ ├── flags: newline - │ ├── opening_loc: (18,0)-(18,2) = "%{" - │ ├── content_loc: (18,2)-(18,5) = "abc" - │ ├── closing_loc: (18,5)-(18,6) = "}" - │ └── unescaped: "abc" - ├── @ StringNode (location: (20,0)-(20,6)) - │ ├── flags: newline - │ ├── opening_loc: (20,0)-(20,2) = "%\"" - │ ├── content_loc: (20,2)-(20,5) = "abc" - │ ├── closing_loc: (20,5)-(20,6) = "\"" - │ └── unescaped: "abc" - ├── @ DefNode (location: (22,0)-(23,3)) - │ ├── flags: newline - │ ├── name: :a - │ ├── name_loc: (22,13)-(22,14) = "a" - │ ├── receiver: - │ │ @ SourceFileNode (location: (22,4)-(22,12)) - │ │ ├── flags: ∅ - │ │ └── filepath: "keyword_method_names.txt" - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (22,0)-(22,3) = "def" - │ ├── operator_loc: (22,12)-(22,13) = "." - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (23,0)-(23,3) = "end" - ├── @ DefNode (location: (25,0)-(26,3)) - │ ├── flags: newline - │ ├── name: :a - │ ├── name_loc: (25,13)-(25,14) = "a" - │ ├── receiver: - │ │ @ SourceLineNode (location: (25,4)-(25,12)) - │ │ └── flags: static_literal - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (25,0)-(25,3) = "def" - │ ├── operator_loc: (25,12)-(25,13) = "." - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (26,0)-(26,3) = "end" - └── @ DefNode (location: (28,0)-(29,3)) - ├── flags: newline - ├── name: :a - ├── name_loc: (28,9)-(28,10) = "a" - ├── receiver: - │ @ NilNode (location: (28,4)-(28,7)) - │ └── flags: static_literal - ├── parameters: ∅ - ├── body: ∅ - ├── locals: [] - ├── def_keyword_loc: (28,0)-(28,3) = "def" - ├── operator_loc: (28,7)-(28,9) = "::" - ├── lparen_loc: ∅ - ├── rparen_loc: ∅ - ├── equal_loc: ∅ - └── end_keyword_loc: (29,0)-(29,3) = "end" diff --git a/test/prism/snapshots/keywords.txt b/test/prism/snapshots/keywords.txt deleted file mode 100644 index f7f0b8df09b4aa..00000000000000 --- a/test/prism/snapshots/keywords.txt +++ /dev/null @@ -1,59 +0,0 @@ -@ ProgramNode (location: (1,0)-(11,8)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(11,8)) - ├── flags: ∅ - └── body: (length: 6) - ├── @ CallNode (location: (1,0)-(1,12)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :tap - │ ├── message_loc: (1,0)-(1,3) = "tap" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (1,4)-(1,12)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (1,6)-(1,10)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ RedoNode (location: (1,6)-(1,10)) - │ │ └── flags: newline - │ ├── opening_loc: (1,4)-(1,5) = "{" - │ └── closing_loc: (1,11)-(1,12) = "}" - ├── @ BeginNode (location: (3,0)-(3,25)) - │ ├── flags: newline - │ ├── begin_keyword_loc: (3,0)-(3,5) = "begin" - │ ├── statements: ∅ - │ ├── rescue_clause: - │ │ @ RescueNode (location: (3,7)-(3,20)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (3,7)-(3,13) = "rescue" - │ │ ├── exceptions: (length: 0) - │ │ ├── operator_loc: ∅ - │ │ ├── reference: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (3,15)-(3,20)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ RetryNode (location: (3,15)-(3,20)) - │ │ │ └── flags: newline - │ │ └── subsequent: ∅ - │ ├── else_clause: ∅ - │ ├── ensure_clause: ∅ - │ └── end_keyword_loc: (3,22)-(3,25) = "end" - ├── @ SelfNode (location: (5,0)-(5,4)) - │ └── flags: newline - ├── @ SourceEncodingNode (location: (7,0)-(7,12)) - │ └── flags: newline, static_literal - ├── @ SourceFileNode (location: (9,0)-(9,8)) - │ ├── flags: newline - │ └── filepath: "keywords.txt" - └── @ SourceLineNode (location: (11,0)-(11,8)) - └── flags: newline, static_literal diff --git a/test/prism/snapshots/lambda.txt b/test/prism/snapshots/lambda.txt deleted file mode 100644 index 90b0b523aa9e83..00000000000000 --- a/test/prism/snapshots/lambda.txt +++ /dev/null @@ -1,221 +0,0 @@ -@ ProgramNode (location: (1,0)-(11,18)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(11,18)) - ├── flags: ∅ - └── body: (length: 5) - ├── @ LambdaNode (location: (1,0)-(3,4)) - │ ├── flags: newline - │ ├── locals: [:foo] - │ ├── operator_loc: (1,0)-(1,2) = "->" - │ ├── opening_loc: (3,2)-(3,3) = "{" - │ ├── closing_loc: (3,3)-(3,4) = "}" - │ ├── parameters: - │ │ @ BlockParametersNode (location: (1,2)-(3,1)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (2,2)-(2,5)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (2,2)-(2,5)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :foo - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: (1,2)-(1,3) = "(" - │ │ └── closing_loc: (3,0)-(3,1) = ")" - │ └── body: ∅ - ├── @ LambdaNode (location: (5,0)-(5,18)) - │ ├── flags: newline - │ ├── locals: [:x] - │ ├── operator_loc: (5,0)-(5,2) = "->" - │ ├── opening_loc: (5,15)-(5,16) = "{" - │ ├── closing_loc: (5,17)-(5,18) = "}" - │ ├── parameters: - │ │ @ BlockParametersNode (location: (5,2)-(5,14)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (5,3)-(5,13)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 0) - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 1) - │ │ │ │ └── @ OptionalKeywordParameterNode (location: (5,3)-(5,13)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :x - │ │ │ │ ├── name_loc: (5,3)-(5,5) = "x:" - │ │ │ │ └── value: - │ │ │ │ @ InterpolatedStringNode (location: (5,6)-(5,13)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── opening_loc: (5,6)-(5,7) = "\"" - │ │ │ │ ├── parts: (length: 2) - │ │ │ │ │ ├── @ StringNode (location: (5,7)-(5,8)) - │ │ │ │ │ │ ├── flags: static_literal, frozen - │ │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ │ ├── content_loc: (5,7)-(5,8) = "b" - │ │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ │ └── unescaped: "b" - │ │ │ │ │ └── @ EmbeddedStatementsNode (location: (5,8)-(5,12)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── opening_loc: (5,8)-(5,10) = "\#{" - │ │ │ │ │ ├── statements: - │ │ │ │ │ │ @ StatementsNode (location: (5,10)-(5,11)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ └── body: (length: 1) - │ │ │ │ │ │ └── @ CallNode (location: (5,10)-(5,11)) - │ │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ │ ├── name: :a - │ │ │ │ │ │ ├── message_loc: (5,10)-(5,11) = "a" - │ │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ │ └── block: ∅ - │ │ │ │ │ └── closing_loc: (5,11)-(5,12) = "}" - │ │ │ │ └── closing_loc: (5,12)-(5,13) = "\"" - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: (5,2)-(5,3) = "(" - │ │ └── closing_loc: (5,13)-(5,14) = ")" - │ └── body: ∅ - ├── @ LambdaNode (location: (7,0)-(7,15)) - │ ├── flags: newline - │ ├── locals: [:a] - │ ├── operator_loc: (7,0)-(7,2) = "->" - │ ├── opening_loc: (7,13)-(7,14) = "{" - │ ├── closing_loc: (7,14)-(7,15) = "}" - │ ├── parameters: - │ │ @ BlockParametersNode (location: (7,2)-(7,12)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (7,3)-(7,11)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 0) - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 1) - │ │ │ │ └── @ OptionalKeywordParameterNode (location: (7,3)-(7,11)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :a - │ │ │ │ ├── name_loc: (7,3)-(7,5) = "a:" - │ │ │ │ └── value: - │ │ │ │ @ CallNode (location: (7,6)-(7,11)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── receiver: - │ │ │ │ │ @ CallNode (location: (7,6)-(7,7)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :b - │ │ │ │ │ ├── message_loc: (7,6)-(7,7) = "b" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :* - │ │ │ │ ├── message_loc: (7,8)-(7,9) = "*" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: - │ │ │ │ │ @ ArgumentsNode (location: (7,10)-(7,11)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── arguments: (length: 1) - │ │ │ │ │ └── @ IntegerNode (location: (7,10)-(7,11)) - │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ └── value: 3 - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: (7,2)-(7,3) = "(" - │ │ └── closing_loc: (7,11)-(7,12) = ")" - │ └── body: ∅ - ├── @ LambdaNode (location: (9,0)-(9,19)) - │ ├── flags: newline - │ ├── locals: [:foo] - │ ├── operator_loc: (9,0)-(9,2) = "->" - │ ├── opening_loc: (9,13)-(9,15) = "do" - │ ├── closing_loc: (9,16)-(9,19) = "end" - │ ├── parameters: - │ │ @ BlockParametersNode (location: (9,3)-(9,12)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (9,3)-(9,12)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 0) - │ │ │ ├── optionals: (length: 1) - │ │ │ │ └── @ OptionalParameterNode (location: (9,3)-(9,12)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :foo - │ │ │ │ ├── name_loc: (9,3)-(9,6) = "foo" - │ │ │ │ ├── operator_loc: (9,7)-(9,8) = "=" - │ │ │ │ └── value: - │ │ │ │ @ CallNode (location: (9,9)-(9,12)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :bar - │ │ │ │ ├── message_loc: (9,9)-(9,12) = "bar" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: ∅ - │ │ └── closing_loc: ∅ - │ └── body: ∅ - └── @ LambdaNode (location: (11,0)-(11,18)) - ├── flags: newline - ├── locals: [:foo] - ├── operator_loc: (11,0)-(11,2) = "->" - ├── opening_loc: (11,12)-(11,14) = "do" - ├── closing_loc: (11,15)-(11,18) = "end" - ├── parameters: - │ @ BlockParametersNode (location: (11,3)-(11,11)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (11,3)-(11,11)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 1) - │ │ │ └── @ OptionalKeywordParameterNode (location: (11,3)-(11,11)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── name_loc: (11,3)-(11,7) = "foo:" - │ │ │ └── value: - │ │ │ @ CallNode (location: (11,8)-(11,11)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (11,8)-(11,11) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: ∅ - │ └── closing_loc: ∅ - └── body: ∅ diff --git a/test/prism/snapshots/method_calls.txt b/test/prism/snapshots/method_calls.txt deleted file mode 100644 index dbd8c3172fdb39..00000000000000 --- a/test/prism/snapshots/method_calls.txt +++ /dev/null @@ -1,2592 +0,0 @@ -@ ProgramNode (location: (1,0)-(156,19)) -├── flags: ∅ -├── locals: [:foo] -└── statements: - @ StatementsNode (location: (1,0)-(156,19)) - ├── flags: ∅ - └── body: (length: 67) - ├── @ CallNode (location: (1,0)-(1,14)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (1,0)-(1,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (1,0)-(1,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (1,3)-(1,4) = "." - │ ├── name: :bar - │ ├── message_loc: (1,4)-(1,7) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,8)-(1,14)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ StringNode (location: (1,8)-(1,14)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (1,8)-(1,10) = "%{" - │ │ ├── content_loc: (1,10)-(1,13) = "baz" - │ │ ├── closing_loc: (1,13)-(1,14) = "}" - │ │ └── unescaped: "baz" - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (3,0)-(3,9)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (3,0)-(3,1)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (3,0)-(3,1) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (3,1)-(3,2) = "." - │ ├── name: :b - │ ├── message_loc: (3,2)-(3,3) = "b" - │ ├── opening_loc: (3,3)-(3,4) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (3,4)-(3,8)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (3,4)-(3,5)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :c - │ │ │ ├── message_loc: (3,4)-(3,5) = "c" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── @ CallNode (location: (3,7)-(3,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :d - │ │ ├── message_loc: (3,7)-(3,8) = "d" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (3,8)-(3,9) = ")" - │ └── block: ∅ - ├── @ CallNode (location: (5,0)-(5,5)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (5,0)-(5,1)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (5,0)-(5,1) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (5,1)-(5,2) = "." - │ ├── name: :b - │ ├── message_loc: (5,2)-(5,3) = "b" - │ ├── opening_loc: (5,3)-(5,4) = "(" - │ ├── arguments: ∅ - │ ├── closing_loc: (5,4)-(5,5) = ")" - │ └── block: ∅ - ├── @ CallNode (location: (7,0)-(9,7)) - │ ├── flags: newline, safe_navigation - │ ├── receiver: - │ │ @ CallNode (location: (7,0)-(8,6)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ CallNode (location: (7,0)-(7,3)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (7,0)-(7,3) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: (8,2)-(8,3) = "." - │ │ ├── name: :bar - │ │ ├── message_loc: (8,3)-(8,6) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (9,2)-(9,4) = "&." - │ ├── name: :baz - │ ├── message_loc: (9,4)-(9,7) = "baz" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (11,0)-(11,2)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a! - │ ├── message_loc: (11,0)-(11,2) = "a!" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (13,0)-(13,4)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (13,0)-(13,1)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (13,0)-(13,1) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (13,1)-(13,2) = "." - │ ├── name: :call - │ ├── message_loc: ∅ - │ ├── opening_loc: (13,2)-(13,3) = "(" - │ ├── arguments: ∅ - │ ├── closing_loc: (13,3)-(13,4) = ")" - │ └── block: ∅ - ├── @ CallNode (location: (15,0)-(15,11)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (15,0)-(15,1)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (15,0)-(15,1) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (15,1)-(15,2) = "." - │ ├── name: :call - │ ├── message_loc: ∅ - │ ├── opening_loc: (15,2)-(15,3) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (15,3)-(15,10)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 3) - │ │ ├── @ IntegerNode (location: (15,3)-(15,4)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── @ IntegerNode (location: (15,6)-(15,7)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ └── @ IntegerNode (location: (15,9)-(15,10)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 3 - │ ├── closing_loc: (15,10)-(15,11) = ")" - │ └── block: ∅ - ├── @ CallNode (location: (17,0)-(17,4)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (17,0)-(17,1)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (17,0)-(17,1) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (17,1)-(17,3) = "::" - │ ├── name: :b - │ ├── message_loc: (17,3)-(17,4) = "b" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (19,0)-(19,6)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (19,0)-(19,1)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (19,0)-(19,1) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (19,1)-(19,3) = "::" - │ ├── name: :b - │ ├── message_loc: (19,3)-(19,4) = "b" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (19,5)-(19,6)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (19,5)-(19,6)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :c - │ │ ├── message_loc: (19,5)-(19,6) = "c" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (21,0)-(21,11)) - │ ├── flags: newline, attribute_write - │ ├── receiver: - │ │ @ CallNode (location: (21,0)-(21,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (21,0)-(21,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (21,3)-(21,4) = "." - │ ├── name: :bar= - │ ├── message_loc: (21,4)-(21,7) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (21,10)-(21,11)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (21,10)-(21,11)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (23,0)-(23,2)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a? - │ ├── message_loc: (23,0)-(23,2) = "a?" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (25,0)-(25,8)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (25,0)-(25,1) = "a" - │ ├── opening_loc: (25,1)-(25,2) = "(" - │ ├── arguments: ∅ - │ ├── closing_loc: (25,8)-(25,9) = ")" - │ └── block: - │ @ BlockArgumentNode (location: (25,2)-(25,8)) - │ ├── flags: ∅ - │ ├── expression: - │ │ @ CallNode (location: (25,3)-(25,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :block - │ │ ├── message_loc: (25,3)-(25,8) = "block" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── operator_loc: (25,2)-(25,3) = "&" - ├── @ CallNode (location: (27,0)-(27,11)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (27,0)-(27,1) = "a" - │ ├── opening_loc: (27,1)-(27,2) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (27,2)-(27,10)) - │ │ ├── flags: contains_keywords, contains_keyword_splat - │ │ └── arguments: (length: 1) - │ │ └── @ KeywordHashNode (location: (27,2)-(27,10)) - │ │ ├── flags: ∅ - │ │ └── elements: (length: 1) - │ │ └── @ AssocSplatNode (location: (27,2)-(27,10)) - │ │ ├── flags: ∅ - │ │ ├── value: - │ │ │ @ CallNode (location: (27,4)-(27,10)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :kwargs - │ │ │ ├── message_loc: (27,4)-(27,10) = "kwargs" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: (27,2)-(27,4) = "**" - │ ├── closing_loc: (27,10)-(27,11) = ")" - │ └── block: ∅ - ├── @ CallNode (location: (29,0)-(29,5)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (29,0)-(29,3)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ CallNode (location: (29,0)-(29,1)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :a - │ │ │ ├── message_loc: (29,0)-(29,1) = "a" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: (29,1)-(29,2) = "." - │ │ ├── name: :b - │ │ ├── message_loc: (29,2)-(29,3) = "b" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (29,3)-(29,4) = "." - │ ├── name: :c - │ ├── message_loc: (29,4)-(29,5) = "c" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (31,0)-(31,7)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (31,0)-(31,1) = "a" - │ ├── opening_loc: (31,1)-(31,2) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (31,2)-(31,6)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (31,2)-(31,3)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (31,2)-(31,3) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── @ CallNode (location: (31,5)-(31,6)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :c - │ │ ├── message_loc: (31,5)-(31,6) = "c" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (31,6)-(31,7) = ")" - │ └── block: ∅ - ├── @ CallNode (location: (33,0)-(33,3)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (33,0)-(33,1) = "a" - │ ├── opening_loc: (33,1)-(33,2) = "(" - │ ├── arguments: ∅ - │ ├── closing_loc: (33,2)-(33,3) = ")" - │ └── block: ∅ - ├── @ CallNode (location: (35,0)-(35,8)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (35,0)-(35,1) = "a" - │ ├── opening_loc: (35,1)-(35,2) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (35,2)-(35,7)) - │ │ ├── flags: contains_splat - │ │ └── arguments: (length: 1) - │ │ └── @ SplatNode (location: (35,2)-(35,7)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (35,2)-(35,3) = "*" - │ │ └── expression: - │ │ @ CallNode (location: (35,3)-(35,7)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :args - │ │ ├── message_loc: (35,3)-(35,7) = "args" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (35,7)-(35,8) = ")" - │ └── block: ∅ - ├── @ CallNode (location: (37,0)-(37,6)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (37,0)-(37,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (37,2)-(37,6)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (37,2)-(37,3)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (37,2)-(37,3) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── @ CallNode (location: (37,5)-(37,6)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :c - │ │ ├── message_loc: (37,5)-(37,6) = "c" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (39,0)-(39,8)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (39,0)-(39,1)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (39,0)-(39,1) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (39,1)-(39,2) = "." - │ ├── name: :b - │ ├── message_loc: (39,2)-(39,3) = "b" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (39,4)-(39,8)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (39,4)-(39,5)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :c - │ │ │ ├── message_loc: (39,4)-(39,5) = "c" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── @ CallNode (location: (39,7)-(39,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :d - │ │ ├── message_loc: (39,7)-(39,8) = "d" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ MultiWriteNode (location: (41,0)-(41,23)) - │ ├── flags: newline - │ ├── lefts: (length: 2) - │ │ ├── @ CallTargetNode (location: (41,0)-(41,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── receiver: - │ │ │ │ @ CallNode (location: (41,0)-(41,3)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :foo - │ │ │ │ ├── message_loc: (41,0)-(41,3) = "foo" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── call_operator_loc: (41,3)-(41,4) = "." - │ │ │ ├── name: :foo= - │ │ │ └── message_loc: (41,4)-(41,7) = "foo" - │ │ └── @ CallTargetNode (location: (41,9)-(41,16)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ CallNode (location: (41,9)-(41,12)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (41,9)-(41,12) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: (41,12)-(41,13) = "." - │ │ ├── name: :bar= - │ │ └── message_loc: (41,13)-(41,16) = "bar" - │ ├── rest: ∅ - │ ├── rights: (length: 0) - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── operator_loc: (41,17)-(41,18) = "=" - │ └── value: - │ @ ArrayNode (location: (41,19)-(41,23)) - │ ├── flags: static_literal - │ ├── elements: (length: 2) - │ │ ├── @ IntegerNode (location: (41,19)-(41,20)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── @ IntegerNode (location: (41,22)-(41,23)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── opening_loc: ∅ - │ └── closing_loc: ∅ - ├── @ CallNode (location: (43,0)-(43,4)) - │ ├── flags: newline, safe_navigation - │ ├── receiver: - │ │ @ CallNode (location: (43,0)-(43,1)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (43,0)-(43,1) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (43,1)-(43,3) = "&." - │ ├── name: :b - │ ├── message_loc: (43,3)-(43,4) = "b" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (45,0)-(45,5)) - │ ├── flags: newline, safe_navigation - │ ├── receiver: - │ │ @ CallNode (location: (45,0)-(45,1)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (45,0)-(45,1) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (45,1)-(45,3) = "&." - │ ├── name: :call - │ ├── message_loc: ∅ - │ ├── opening_loc: (45,3)-(45,4) = "(" - │ ├── arguments: ∅ - │ ├── closing_loc: (45,4)-(45,5) = ")" - │ └── block: ∅ - ├── @ CallNode (location: (47,0)-(47,7)) - │ ├── flags: newline, safe_navigation - │ ├── receiver: - │ │ @ CallNode (location: (47,0)-(47,1)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (47,0)-(47,1) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (47,1)-(47,3) = "&." - │ ├── name: :b - │ ├── message_loc: (47,3)-(47,4) = "b" - │ ├── opening_loc: (47,4)-(47,5) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (47,5)-(47,6)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (47,5)-(47,6)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :c - │ │ ├── message_loc: (47,5)-(47,6) = "c" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (47,6)-(47,7) = ")" - │ └── block: ∅ - ├── @ CallNode (location: (49,0)-(49,6)) - │ ├── flags: newline, safe_navigation - │ ├── receiver: - │ │ @ CallNode (location: (49,0)-(49,1)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (49,0)-(49,1) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (49,1)-(49,3) = "&." - │ ├── name: :b - │ ├── message_loc: (49,3)-(49,4) = "b" - │ ├── opening_loc: (49,4)-(49,5) = "(" - │ ├── arguments: ∅ - │ ├── closing_loc: (49,5)-(49,6) = ")" - │ └── block: ∅ - ├── @ IfNode (location: (51,0)-(51,33)) - │ ├── flags: newline - │ ├── if_keyword_loc: (51,11)-(51,13) = "if" - │ ├── predicate: - │ │ @ AndNode (location: (51,14)-(51,33)) - │ │ ├── flags: ∅ - │ │ ├── left: - │ │ │ @ OrNode (location: (51,14)-(51,25)) - │ │ │ ├── flags: ∅ - │ │ │ ├── left: - │ │ │ │ @ CallNode (location: (51,14)-(51,18)) - │ │ │ │ ├── flags: ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :bar? - │ │ │ │ ├── message_loc: (51,14)-(51,18) = "bar?" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── right: - │ │ │ │ @ CallNode (location: (51,22)-(51,25)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ ├── message_loc: (51,22)-(51,25) = "baz" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── operator_loc: (51,19)-(51,21) = "or" - │ │ ├── right: - │ │ │ @ CallNode (location: (51,30)-(51,33)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :qux - │ │ │ ├── message_loc: (51,30)-(51,33) = "qux" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: (51,26)-(51,29) = "and" - │ ├── then_keyword_loc: ∅ - │ ├── statements: - │ │ @ StatementsNode (location: (51,0)-(51,10)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (51,0)-(51,10)) - │ │ ├── flags: newline, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (51,0)-(51,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (51,4)-(51,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 2) - │ │ │ ├── @ SymbolNode (location: (51,4)-(51,6)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: (51,4)-(51,5) = ":" - │ │ │ │ ├── value_loc: (51,5)-(51,6) = "a" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "a" - │ │ │ └── @ SymbolNode (location: (51,8)-(51,10)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (51,8)-(51,9) = ":" - │ │ │ ├── value_loc: (51,9)-(51,10) = "b" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "b" - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── subsequent: ∅ - │ └── end_keyword_loc: ∅ - ├── @ CallNode (location: (53,0)-(56,1)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (53,0)-(53,3) = "foo" - │ ├── opening_loc: (53,3)-(53,4) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (53,4)-(55,4)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ SymbolNode (location: (53,4)-(53,6)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (53,4)-(53,5) = ":" - │ │ │ ├── value_loc: (53,5)-(53,6) = "a" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "a" - │ │ └── @ SymbolNode (location: (55,2)-(55,4)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (55,2)-(55,3) = ":" - │ │ ├── value_loc: (55,3)-(55,4) = "b" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "b" - │ ├── closing_loc: (56,0)-(56,1) = ")" - │ └── block: ∅ - ├── @ CallNode (location: (58,0)-(58,10)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (58,0)-(58,3) = "foo" - │ ├── opening_loc: (58,3)-(58,4) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (58,4)-(58,9)) - │ │ ├── flags: contains_splat - │ │ └── arguments: (length: 1) - │ │ └── @ SplatNode (location: (58,4)-(58,9)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (58,4)-(58,5) = "*" - │ │ └── expression: - │ │ @ CallNode (location: (58,5)-(58,9)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :rest - │ │ ├── message_loc: (58,5)-(58,9) = "rest" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (58,9)-(58,10) = ")" - │ └── block: ∅ - ├── @ CallNode (location: (60,0)-(60,39)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (60,0)-(60,3) = "foo" - │ ├── opening_loc: (60,3)-(60,4) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (60,4)-(60,32)) - │ │ ├── flags: contains_keywords - │ │ └── arguments: (length: 2) - │ │ ├── @ SymbolNode (location: (60,4)-(60,6)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (60,4)-(60,5) = ":" - │ │ │ ├── value_loc: (60,5)-(60,6) = "a" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "a" - │ │ └── @ KeywordHashNode (location: (60,8)-(60,32)) - │ │ ├── flags: symbol_keys - │ │ └── elements: (length: 2) - │ │ ├── @ AssocNode (location: (60,8)-(60,22)) - │ │ │ ├── flags: ∅ - │ │ │ ├── key: - │ │ │ │ @ SymbolNode (location: (60,8)-(60,10)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: (60,8)-(60,9) = ":" - │ │ │ │ ├── value_loc: (60,9)-(60,10) = "h" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "h" - │ │ │ ├── value: - │ │ │ │ @ ArrayNode (location: (60,14)-(60,22)) - │ │ │ │ ├── flags: static_literal - │ │ │ │ ├── elements: (length: 2) - │ │ │ │ │ ├── @ SymbolNode (location: (60,15)-(60,17)) - │ │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ │ │ ├── opening_loc: (60,15)-(60,16) = ":" - │ │ │ │ │ │ ├── value_loc: (60,16)-(60,17) = "x" - │ │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ │ └── unescaped: "x" - │ │ │ │ │ └── @ SymbolNode (location: (60,19)-(60,21)) - │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ │ ├── opening_loc: (60,19)-(60,20) = ":" - │ │ │ │ │ ├── value_loc: (60,20)-(60,21) = "y" - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── unescaped: "y" - │ │ │ │ ├── opening_loc: (60,14)-(60,15) = "[" - │ │ │ │ └── closing_loc: (60,21)-(60,22) = "]" - │ │ │ └── operator_loc: (60,11)-(60,13) = "=>" - │ │ └── @ AssocNode (location: (60,24)-(60,32)) - │ │ ├── flags: static_literal - │ │ ├── key: - │ │ │ @ SymbolNode (location: (60,24)-(60,26)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (60,24)-(60,25) = ":" - │ │ │ ├── value_loc: (60,25)-(60,26) = "a" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "a" - │ │ ├── value: - │ │ │ @ SymbolNode (location: (60,30)-(60,32)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (60,30)-(60,31) = ":" - │ │ │ ├── value_loc: (60,31)-(60,32) = "b" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "b" - │ │ └── operator_loc: (60,27)-(60,29) = "=>" - │ ├── closing_loc: (60,39)-(60,40) = ")" - │ └── block: - │ @ BlockArgumentNode (location: (60,34)-(60,39)) - │ ├── flags: ∅ - │ ├── expression: - │ │ @ SymbolNode (location: (60,35)-(60,39)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (60,35)-(60,36) = ":" - │ │ ├── value_loc: (60,36)-(60,39) = "bar" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "bar" - │ └── operator_loc: (60,34)-(60,35) = "&" - ├── @ CallNode (location: (62,0)-(62,49)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :hi - │ ├── message_loc: (62,0)-(62,2) = "hi" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (62,3)-(62,49)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ IntegerNode (location: (62,3)-(62,6)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 123 - │ │ └── @ HashNode (location: (62,8)-(62,49)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (62,8)-(62,9) = "{" - │ │ ├── elements: (length: 3) - │ │ │ ├── @ AssocNode (location: (62,10)-(62,27)) - │ │ │ │ ├── flags: static_literal - │ │ │ │ ├── key: - │ │ │ │ │ @ SymbolNode (location: (62,10)-(62,16)) - │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ │ ├── opening_loc: (62,10)-(62,11) = ":" - │ │ │ │ │ ├── value_loc: (62,11)-(62,16) = "there" - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── unescaped: "there" - │ │ │ │ ├── value: - │ │ │ │ │ @ SymbolNode (location: (62,20)-(62,27)) - │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ │ ├── opening_loc: (62,20)-(62,21) = ":" - │ │ │ │ │ ├── value_loc: (62,21)-(62,27) = "friend" - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── unescaped: "friend" - │ │ │ │ └── operator_loc: (62,17)-(62,19) = "=>" - │ │ │ ├── @ AssocSplatNode (location: (62,29)-(62,33)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── value: - │ │ │ │ │ @ HashNode (location: (62,31)-(62,33)) - │ │ │ │ │ ├── flags: static_literal - │ │ │ │ │ ├── opening_loc: (62,31)-(62,32) = "{" - │ │ │ │ │ ├── elements: (length: 0) - │ │ │ │ │ └── closing_loc: (62,32)-(62,33) = "}" - │ │ │ │ └── operator_loc: (62,29)-(62,31) = "**" - │ │ │ └── @ AssocNode (location: (62,35)-(62,47)) - │ │ │ ├── flags: static_literal - │ │ │ ├── key: - │ │ │ │ @ SymbolNode (location: (62,35)-(62,42)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── value_loc: (62,35)-(62,41) = "whatup" - │ │ │ │ ├── closing_loc: (62,41)-(62,42) = ":" - │ │ │ │ └── unescaped: "whatup" - │ │ │ ├── value: - │ │ │ │ @ SymbolNode (location: (62,43)-(62,47)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: (62,43)-(62,44) = ":" - │ │ │ │ ├── value_loc: (62,44)-(62,47) = "dog" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "dog" - │ │ │ └── operator_loc: ∅ - │ │ └── closing_loc: (62,48)-(62,49) = "}" - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (64,0)-(64,36)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (64,0)-(64,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (64,4)-(64,15)) - │ │ ├── flags: contains_keywords - │ │ └── arguments: (length: 2) - │ │ ├── @ SymbolNode (location: (64,4)-(64,6)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (64,4)-(64,5) = ":" - │ │ │ ├── value_loc: (64,5)-(64,6) = "a" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "a" - │ │ └── @ KeywordHashNode (location: (64,8)-(64,15)) - │ │ ├── flags: symbol_keys - │ │ └── elements: (length: 1) - │ │ └── @ AssocNode (location: (64,8)-(64,15)) - │ │ ├── flags: static_literal - │ │ ├── key: - │ │ │ @ SymbolNode (location: (64,8)-(64,10)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (64,8)-(64,9) = "b" - │ │ │ ├── closing_loc: (64,9)-(64,10) = ":" - │ │ │ └── unescaped: "b" - │ │ ├── value: - │ │ │ @ TrueNode (location: (64,11)-(64,15)) - │ │ │ └── flags: static_literal - │ │ └── operator_loc: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (64,16)-(64,36)) - │ ├── flags: ∅ - │ ├── locals: [:a, :b] - │ ├── parameters: - │ │ @ BlockParametersNode (location: (64,19)-(64,25)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (64,20)-(64,24)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 2) - │ │ │ │ ├── @ RequiredParameterNode (location: (64,20)-(64,21)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── name: :a - │ │ │ │ └── @ RequiredParameterNode (location: (64,23)-(64,24)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :b - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: (64,19)-(64,20) = "|" - │ │ └── closing_loc: (64,24)-(64,25) = "|" - │ ├── body: - │ │ @ StatementsNode (location: (64,26)-(64,32)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (64,26)-(64,32)) - │ │ ├── flags: newline, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :puts - │ │ ├── message_loc: (64,26)-(64,30) = "puts" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (64,31)-(64,32)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ LocalVariableReadNode (location: (64,31)-(64,32)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :a - │ │ │ └── depth: 0 - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── opening_loc: (64,16)-(64,18) = "do" - │ └── closing_loc: (64,33)-(64,36) = "end" - ├── @ CallNode (location: (66,0)-(66,17)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :hi - │ ├── message_loc: (66,0)-(66,2) = "hi" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (66,3)-(66,17)) - │ │ ├── flags: contains_keywords - │ │ └── arguments: (length: 1) - │ │ └── @ KeywordHashNode (location: (66,3)-(66,17)) - │ │ ├── flags: symbol_keys - │ │ └── elements: (length: 1) - │ │ └── @ AssocNode (location: (66,3)-(66,17)) - │ │ ├── flags: static_literal - │ │ ├── key: - │ │ │ @ SymbolNode (location: (66,3)-(66,9)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (66,3)-(66,8) = "there" - │ │ │ ├── closing_loc: (66,8)-(66,9) = ":" - │ │ │ └── unescaped: "there" - │ │ ├── value: - │ │ │ @ SymbolNode (location: (66,10)-(66,17)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (66,10)-(66,11) = ":" - │ │ │ ├── value_loc: (66,11)-(66,17) = "friend" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "friend" - │ │ └── operator_loc: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (68,0)-(68,40)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :hi - │ ├── message_loc: (68,0)-(68,2) = "hi" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (68,3)-(68,40)) - │ │ ├── flags: contains_keywords, contains_keyword_splat - │ │ └── arguments: (length: 1) - │ │ └── @ KeywordHashNode (location: (68,3)-(68,40)) - │ │ ├── flags: ∅ - │ │ └── elements: (length: 3) - │ │ ├── @ AssocNode (location: (68,3)-(68,20)) - │ │ │ ├── flags: static_literal - │ │ │ ├── key: - │ │ │ │ @ SymbolNode (location: (68,3)-(68,9)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: (68,3)-(68,4) = ":" - │ │ │ │ ├── value_loc: (68,4)-(68,9) = "there" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "there" - │ │ │ ├── value: - │ │ │ │ @ SymbolNode (location: (68,13)-(68,20)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: (68,13)-(68,14) = ":" - │ │ │ │ ├── value_loc: (68,14)-(68,20) = "friend" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "friend" - │ │ │ └── operator_loc: (68,10)-(68,12) = "=>" - │ │ ├── @ AssocSplatNode (location: (68,22)-(68,26)) - │ │ │ ├── flags: ∅ - │ │ │ ├── value: - │ │ │ │ @ HashNode (location: (68,24)-(68,26)) - │ │ │ │ ├── flags: static_literal - │ │ │ │ ├── opening_loc: (68,24)-(68,25) = "{" - │ │ │ │ ├── elements: (length: 0) - │ │ │ │ └── closing_loc: (68,25)-(68,26) = "}" - │ │ │ └── operator_loc: (68,22)-(68,24) = "**" - │ │ └── @ AssocNode (location: (68,28)-(68,40)) - │ │ ├── flags: static_literal - │ │ ├── key: - │ │ │ @ SymbolNode (location: (68,28)-(68,35)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (68,28)-(68,34) = "whatup" - │ │ │ ├── closing_loc: (68,34)-(68,35) = ":" - │ │ │ └── unescaped: "whatup" - │ │ ├── value: - │ │ │ @ SymbolNode (location: (68,36)-(68,40)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (68,36)-(68,37) = ":" - │ │ │ ├── value_loc: (68,37)-(68,40) = "dog" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "dog" - │ │ └── operator_loc: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (70,0)-(70,41)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :hi - │ ├── message_loc: (70,0)-(70,2) = "hi" - │ ├── opening_loc: (70,2)-(70,3) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (70,3)-(70,40)) - │ │ ├── flags: contains_keywords, contains_keyword_splat - │ │ └── arguments: (length: 1) - │ │ └── @ KeywordHashNode (location: (70,3)-(70,40)) - │ │ ├── flags: ∅ - │ │ └── elements: (length: 3) - │ │ ├── @ AssocNode (location: (70,3)-(70,20)) - │ │ │ ├── flags: static_literal - │ │ │ ├── key: - │ │ │ │ @ SymbolNode (location: (70,3)-(70,9)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: (70,3)-(70,4) = ":" - │ │ │ │ ├── value_loc: (70,4)-(70,9) = "there" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "there" - │ │ │ ├── value: - │ │ │ │ @ SymbolNode (location: (70,13)-(70,20)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: (70,13)-(70,14) = ":" - │ │ │ │ ├── value_loc: (70,14)-(70,20) = "friend" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "friend" - │ │ │ └── operator_loc: (70,10)-(70,12) = "=>" - │ │ ├── @ AssocSplatNode (location: (70,22)-(70,26)) - │ │ │ ├── flags: ∅ - │ │ │ ├── value: - │ │ │ │ @ HashNode (location: (70,24)-(70,26)) - │ │ │ │ ├── flags: static_literal - │ │ │ │ ├── opening_loc: (70,24)-(70,25) = "{" - │ │ │ │ ├── elements: (length: 0) - │ │ │ │ └── closing_loc: (70,25)-(70,26) = "}" - │ │ │ └── operator_loc: (70,22)-(70,24) = "**" - │ │ └── @ AssocNode (location: (70,28)-(70,40)) - │ │ ├── flags: static_literal - │ │ ├── key: - │ │ │ @ SymbolNode (location: (70,28)-(70,35)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (70,28)-(70,34) = "whatup" - │ │ │ ├── closing_loc: (70,34)-(70,35) = ":" - │ │ │ └── unescaped: "whatup" - │ │ ├── value: - │ │ │ @ SymbolNode (location: (70,36)-(70,40)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (70,36)-(70,37) = ":" - │ │ │ ├── value_loc: (70,37)-(70,40) = "dog" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "dog" - │ │ └── operator_loc: ∅ - │ ├── closing_loc: (70,40)-(70,41) = ")" - │ └── block: ∅ - ├── @ CallNode (location: (72,0)-(72,35)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (72,0)-(72,3) = "foo" - │ ├── opening_loc: (72,3)-(72,4) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (72,4)-(72,26)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ HashNode (location: (72,4)-(72,26)) - │ │ ├── flags: static_literal - │ │ ├── opening_loc: (72,4)-(72,5) = "{" - │ │ ├── elements: (length: 2) - │ │ │ ├── @ AssocNode (location: (72,6)-(72,13)) - │ │ │ │ ├── flags: static_literal - │ │ │ │ ├── key: - │ │ │ │ │ @ SymbolNode (location: (72,6)-(72,8)) - │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── value_loc: (72,6)-(72,7) = "a" - │ │ │ │ │ ├── closing_loc: (72,7)-(72,8) = ":" - │ │ │ │ │ └── unescaped: "a" - │ │ │ │ ├── value: - │ │ │ │ │ @ TrueNode (location: (72,9)-(72,13)) - │ │ │ │ │ └── flags: static_literal - │ │ │ │ └── operator_loc: ∅ - │ │ │ └── @ AssocNode (location: (72,15)-(72,23)) - │ │ │ ├── flags: static_literal - │ │ │ ├── key: - │ │ │ │ @ SymbolNode (location: (72,15)-(72,17)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── value_loc: (72,15)-(72,16) = "b" - │ │ │ │ ├── closing_loc: (72,16)-(72,17) = ":" - │ │ │ │ └── unescaped: "b" - │ │ │ ├── value: - │ │ │ │ @ FalseNode (location: (72,18)-(72,23)) - │ │ │ │ └── flags: static_literal - │ │ │ └── operator_loc: ∅ - │ │ └── closing_loc: (72,25)-(72,26) = "}" - │ ├── closing_loc: (72,35)-(72,36) = ")" - │ └── block: - │ @ BlockArgumentNode (location: (72,28)-(72,35)) - │ ├── flags: ∅ - │ ├── expression: - │ │ @ SymbolNode (location: (72,29)-(72,35)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (72,29)-(72,30) = ":" - │ │ ├── value_loc: (72,30)-(72,35) = "block" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "block" - │ └── operator_loc: (72,28)-(72,29) = "&" - ├── @ CallNode (location: (74,0)-(74,20)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :hi - │ ├── message_loc: (74,0)-(74,2) = "hi" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (74,3)-(74,20)) - │ │ ├── flags: contains_keywords - │ │ └── arguments: (length: 1) - │ │ └── @ KeywordHashNode (location: (74,3)-(74,20)) - │ │ ├── flags: symbol_keys - │ │ └── elements: (length: 1) - │ │ └── @ AssocNode (location: (74,3)-(74,20)) - │ │ ├── flags: static_literal - │ │ ├── key: - │ │ │ @ SymbolNode (location: (74,3)-(74,9)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (74,3)-(74,4) = ":" - │ │ │ ├── value_loc: (74,4)-(74,9) = "there" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "there" - │ │ ├── value: - │ │ │ @ SymbolNode (location: (74,13)-(74,20)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (74,13)-(74,14) = ":" - │ │ │ ├── value_loc: (74,14)-(74,20) = "friend" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "friend" - │ │ └── operator_loc: (74,10)-(74,12) = "=>" - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (76,0)-(78,1)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (76,0)-(76,3) = "foo" - │ ├── opening_loc: (76,3)-(76,4) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (76,4)-(77,2)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ SymbolNode (location: (76,4)-(76,6)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (76,4)-(76,5) = ":" - │ │ │ ├── value_loc: (76,5)-(76,6) = "a" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "a" - │ │ └── @ SymbolNode (location: (77,0)-(77,2)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (77,0)-(77,1) = ":" - │ │ ├── value_loc: (77,1)-(77,2) = "b" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "b" - │ ├── closing_loc: (78,0)-(78,1) = ")" - │ └── block: ∅ - ├── @ CallNode (location: (80,0)-(83,1)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (80,0)-(80,3) = "foo" - │ ├── opening_loc: (80,3)-(80,4) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (81,0)-(82,5)) - │ │ ├── flags: contains_keywords - │ │ └── arguments: (length: 2) - │ │ ├── @ SymbolNode (location: (81,0)-(81,2)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (81,0)-(81,1) = ":" - │ │ │ ├── value_loc: (81,1)-(81,2) = "a" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "a" - │ │ └── @ KeywordHashNode (location: (82,0)-(82,5)) - │ │ ├── flags: symbol_keys - │ │ └── elements: (length: 1) - │ │ └── @ AssocNode (location: (82,0)-(82,5)) - │ │ ├── flags: static_literal - │ │ ├── key: - │ │ │ @ SymbolNode (location: (82,0)-(82,2)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (82,0)-(82,1) = "b" - │ │ │ ├── closing_loc: (82,1)-(82,2) = ":" - │ │ │ └── unescaped: "b" - │ │ ├── value: - │ │ │ @ SymbolNode (location: (82,3)-(82,5)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (82,3)-(82,4) = ":" - │ │ │ ├── value_loc: (82,4)-(82,5) = "c" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "c" - │ │ └── operator_loc: ∅ - │ ├── closing_loc: (83,0)-(83,1) = ")" - │ └── block: ∅ - ├── @ CallNode (location: (85,0)-(85,11)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (85,0)-(85,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockArgumentNode (location: (85,4)-(85,11)) - │ ├── flags: ∅ - │ ├── expression: - │ │ @ SymbolNode (location: (85,5)-(85,11)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (85,5)-(85,6) = ":" - │ │ ├── value_loc: (85,6)-(85,11) = "block" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "block" - │ └── operator_loc: (85,4)-(85,5) = "&" - ├── @ CallNode (location: (87,0)-(87,30)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (87,0)-(87,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (87,4)-(87,21)) - │ │ ├── flags: contains_keywords - │ │ └── arguments: (length: 1) - │ │ └── @ KeywordHashNode (location: (87,4)-(87,21)) - │ │ ├── flags: symbol_keys - │ │ └── elements: (length: 2) - │ │ ├── @ AssocNode (location: (87,4)-(87,11)) - │ │ │ ├── flags: static_literal - │ │ │ ├── key: - │ │ │ │ @ SymbolNode (location: (87,4)-(87,6)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── value_loc: (87,4)-(87,5) = "a" - │ │ │ │ ├── closing_loc: (87,5)-(87,6) = ":" - │ │ │ │ └── unescaped: "a" - │ │ │ ├── value: - │ │ │ │ @ TrueNode (location: (87,7)-(87,11)) - │ │ │ │ └── flags: static_literal - │ │ │ └── operator_loc: ∅ - │ │ └── @ AssocNode (location: (87,13)-(87,21)) - │ │ ├── flags: static_literal - │ │ ├── key: - │ │ │ @ SymbolNode (location: (87,13)-(87,15)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (87,13)-(87,14) = "b" - │ │ │ ├── closing_loc: (87,14)-(87,15) = ":" - │ │ │ └── unescaped: "b" - │ │ ├── value: - │ │ │ @ FalseNode (location: (87,16)-(87,21)) - │ │ │ └── flags: static_literal - │ │ └── operator_loc: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockArgumentNode (location: (87,23)-(87,30)) - │ ├── flags: ∅ - │ ├── expression: - │ │ @ SymbolNode (location: (87,24)-(87,30)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (87,24)-(87,25) = ":" - │ │ ├── value_loc: (87,25)-(87,30) = "block" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "block" - │ └── operator_loc: (87,23)-(87,24) = "&" - ├── @ CallNode (location: (89,0)-(89,21)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :some_func - │ ├── message_loc: (89,0)-(89,9) = "some_func" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (89,10)-(89,21)) - │ │ ├── flags: contains_keywords - │ │ └── arguments: (length: 2) - │ │ ├── @ IntegerNode (location: (89,10)-(89,11)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── @ KeywordHashNode (location: (89,13)-(89,21)) - │ │ ├── flags: symbol_keys - │ │ └── elements: (length: 1) - │ │ └── @ AssocNode (location: (89,13)-(89,21)) - │ │ ├── flags: static_literal - │ │ ├── key: - │ │ │ @ SymbolNode (location: (89,13)-(89,19)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (89,13)-(89,18) = "kwarg" - │ │ │ ├── closing_loc: (89,18)-(89,19) = ":" - │ │ │ └── unescaped: "kwarg" - │ │ ├── value: - │ │ │ @ IntegerNode (location: (89,20)-(89,21)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ └── operator_loc: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (91,0)-(91,18)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (91,0)-(91,6)) - │ │ ├── flags: ∅ - │ │ └── name: :Kernel - │ ├── call_operator_loc: (91,6)-(91,7) = "." - │ ├── name: :Integer - │ ├── message_loc: (91,7)-(91,14) = "Integer" - │ ├── opening_loc: (91,14)-(91,15) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (91,15)-(91,17)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (91,15)-(91,17)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 10 - │ ├── closing_loc: (91,17)-(91,18) = ")" - │ └── block: ∅ - ├── @ CallNode (location: (93,0)-(93,10)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (93,0)-(93,1)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :x - │ │ ├── message_loc: (93,0)-(93,1) = "x" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (93,1)-(93,2) = "." - │ ├── name: :each - │ ├── message_loc: (93,2)-(93,6) = "each" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (93,7)-(93,10)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (93,7)-(93,8) = "{" - │ └── closing_loc: (93,9)-(93,10) = "}" - ├── @ CallNode (location: (95,0)-(95,14)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (95,0)-(95,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (95,0)-(95,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (95,3)-(95,4) = "." - │ ├── name: :map - │ ├── message_loc: (95,4)-(95,7) = "map" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (95,8)-(95,14)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (95,10)-(95,12)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ BackReferenceReadNode (location: (95,10)-(95,12)) - │ │ ├── flags: newline - │ │ └── name: :$& - │ ├── opening_loc: (95,8)-(95,9) = "{" - │ └── closing_loc: (95,13)-(95,14) = "}" - ├── @ CallNode (location: (97,0)-(97,12)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantPathNode (location: (97,0)-(97,4)) - │ │ ├── flags: ∅ - │ │ ├── parent: - │ │ │ @ ConstantReadNode (location: (97,0)-(97,1)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :A - │ │ ├── name: :B - │ │ ├── delimiter_loc: (97,1)-(97,3) = "::" - │ │ └── name_loc: (97,3)-(97,4) = "B" - │ ├── call_operator_loc: (97,4)-(97,6) = "::" - │ ├── name: :C - │ ├── message_loc: (97,6)-(97,7) = "C" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (97,8)-(97,12)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ SymbolNode (location: (97,8)-(97,12)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (97,8)-(97,9) = ":" - │ │ ├── value_loc: (97,9)-(97,12) = "foo" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "foo" - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (99,0)-(99,13)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantPathNode (location: (99,0)-(99,4)) - │ │ ├── flags: ∅ - │ │ ├── parent: - │ │ │ @ ConstantReadNode (location: (99,0)-(99,1)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :A - │ │ ├── name: :B - │ │ ├── delimiter_loc: (99,1)-(99,3) = "::" - │ │ └── name_loc: (99,3)-(99,4) = "B" - │ ├── call_operator_loc: (99,4)-(99,6) = "::" - │ ├── name: :C - │ ├── message_loc: (99,6)-(99,7) = "C" - │ ├── opening_loc: (99,7)-(99,8) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (99,8)-(99,12)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ SymbolNode (location: (99,8)-(99,12)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (99,8)-(99,9) = ":" - │ │ ├── value_loc: (99,9)-(99,12) = "foo" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "foo" - │ ├── closing_loc: (99,12)-(99,13) = ")" - │ └── block: ∅ - ├── @ CallNode (location: (101,0)-(101,17)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantPathNode (location: (101,0)-(101,4)) - │ │ ├── flags: ∅ - │ │ ├── parent: - │ │ │ @ ConstantReadNode (location: (101,0)-(101,1)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :A - │ │ ├── name: :B - │ │ ├── delimiter_loc: (101,1)-(101,3) = "::" - │ │ └── name_loc: (101,3)-(101,4) = "B" - │ ├── call_operator_loc: (101,4)-(101,6) = "::" - │ ├── name: :C - │ ├── message_loc: (101,6)-(101,7) = "C" - │ ├── opening_loc: (101,7)-(101,8) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (101,8)-(101,12)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ SymbolNode (location: (101,8)-(101,12)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (101,8)-(101,9) = ":" - │ │ ├── value_loc: (101,9)-(101,12) = "foo" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "foo" - │ ├── closing_loc: (101,12)-(101,13) = ")" - │ └── block: - │ @ BlockNode (location: (101,14)-(101,17)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (101,14)-(101,15) = "{" - │ └── closing_loc: (101,16)-(101,17) = "}" - ├── @ CallNode (location: (103,0)-(103,12)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (103,0)-(103,3) = "foo" - │ ├── opening_loc: (103,3)-(103,4) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (103,4)-(103,11)) - │ │ ├── flags: contains_keywords - │ │ └── arguments: (length: 1) - │ │ └── @ KeywordHashNode (location: (103,4)-(103,11)) - │ │ ├── flags: symbol_keys - │ │ └── elements: (length: 1) - │ │ └── @ AssocNode (location: (103,4)-(103,11)) - │ │ ├── flags: static_literal - │ │ ├── key: - │ │ │ @ SymbolNode (location: (103,4)-(103,8)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (103,4)-(103,5) = "\"" - │ │ │ ├── value_loc: (103,5)-(103,6) = "a" - │ │ │ ├── closing_loc: (103,6)-(103,8) = "\":" - │ │ │ └── unescaped: "a" - │ │ ├── value: - │ │ │ @ IntegerNode (location: (103,9)-(103,11)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: -1 - │ │ └── operator_loc: ∅ - │ ├── closing_loc: (103,11)-(103,12) = ")" - │ └── block: ∅ - ├── @ CallNode (location: (105,0)-(105,28)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (105,0)-(105,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (105,4)-(105,28)) - │ │ ├── flags: contains_keywords - │ │ └── arguments: (length: 1) - │ │ └── @ KeywordHashNode (location: (105,4)-(105,28)) - │ │ ├── flags: symbol_keys - │ │ └── elements: (length: 1) - │ │ └── @ AssocNode (location: (105,4)-(105,28)) - │ │ ├── flags: ∅ - │ │ ├── key: - │ │ │ @ SymbolNode (location: (105,4)-(105,8)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (105,4)-(105,7) = "bar" - │ │ │ ├── closing_loc: (105,7)-(105,8) = ":" - │ │ │ └── unescaped: "bar" - │ │ ├── value: - │ │ │ @ HashNode (location: (105,9)-(105,28)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (105,9)-(105,10) = "{" - │ │ │ ├── elements: (length: 1) - │ │ │ │ └── @ AssocNode (location: (105,11)-(105,26)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── key: - │ │ │ │ │ @ SymbolNode (location: (105,11)-(105,15)) - │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── value_loc: (105,11)-(105,14) = "baz" - │ │ │ │ │ ├── closing_loc: (105,14)-(105,15) = ":" - │ │ │ │ │ └── unescaped: "baz" - │ │ │ │ ├── value: - │ │ │ │ │ @ CallNode (location: (105,16)-(105,26)) - │ │ │ │ │ ├── flags: ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :qux - │ │ │ │ │ ├── message_loc: (105,16)-(105,19) = "qux" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: - │ │ │ │ │ @ BlockNode (location: (105,20)-(105,26)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── locals: [] - │ │ │ │ │ ├── parameters: ∅ - │ │ │ │ │ ├── body: ∅ - │ │ │ │ │ ├── opening_loc: (105,20)-(105,22) = "do" - │ │ │ │ │ └── closing_loc: (105,23)-(105,26) = "end" - │ │ │ │ └── operator_loc: ∅ - │ │ │ └── closing_loc: (105,27)-(105,28) = "}" - │ │ └── operator_loc: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (107,0)-(107,24)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (107,0)-(107,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (107,4)-(107,24)) - │ │ ├── flags: contains_keywords - │ │ └── arguments: (length: 1) - │ │ └── @ KeywordHashNode (location: (107,4)-(107,24)) - │ │ ├── flags: symbol_keys - │ │ └── elements: (length: 1) - │ │ └── @ AssocNode (location: (107,4)-(107,24)) - │ │ ├── flags: ∅ - │ │ ├── key: - │ │ │ @ SymbolNode (location: (107,4)-(107,8)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (107,4)-(107,7) = "bar" - │ │ │ ├── closing_loc: (107,7)-(107,8) = ":" - │ │ │ └── unescaped: "bar" - │ │ ├── value: - │ │ │ @ HashNode (location: (107,9)-(107,24)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (107,9)-(107,10) = "{" - │ │ │ ├── elements: (length: 1) - │ │ │ │ └── @ AssocSplatNode (location: (107,11)-(107,22)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── value: - │ │ │ │ │ @ CallNode (location: (107,13)-(107,22)) - │ │ │ │ │ ├── flags: ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :kw - │ │ │ │ │ ├── message_loc: (107,13)-(107,15) = "kw" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: - │ │ │ │ │ @ BlockNode (location: (107,16)-(107,22)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── locals: [] - │ │ │ │ │ ├── parameters: ∅ - │ │ │ │ │ ├── body: ∅ - │ │ │ │ │ ├── opening_loc: (107,16)-(107,18) = "do" - │ │ │ │ │ └── closing_loc: (107,19)-(107,22) = "end" - │ │ │ │ └── operator_loc: (107,11)-(107,13) = "**" - │ │ │ └── closing_loc: (107,23)-(107,24) = "}" - │ │ └── operator_loc: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (109,0)-(109,36)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (109,0)-(109,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (109,4)-(109,29)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ InterpolatedStringNode (location: (109,4)-(109,29)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (109,4)-(109,5) = "\"" - │ │ ├── parts: (length: 1) - │ │ │ └── @ EmbeddedStatementsNode (location: (109,5)-(109,28)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (109,5)-(109,7) = "\#{" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (109,7)-(109,27)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (109,7)-(109,27)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── receiver: - │ │ │ │ │ @ CallNode (location: (109,7)-(109,10)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :bar - │ │ │ │ │ ├── message_loc: (109,7)-(109,10) = "bar" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── call_operator_loc: (109,10)-(109,11) = "." - │ │ │ │ ├── name: :map - │ │ │ │ ├── message_loc: (109,11)-(109,14) = "map" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: - │ │ │ │ @ BlockNode (location: (109,15)-(109,27)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── locals: [] - │ │ │ │ ├── parameters: ∅ - │ │ │ │ ├── body: - │ │ │ │ │ @ StatementsNode (location: (109,18)-(109,23)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── body: (length: 1) - │ │ │ │ │ └── @ StringNode (location: (109,18)-(109,23)) - │ │ │ │ │ ├── flags: newline - │ │ │ │ │ ├── opening_loc: (109,18)-(109,19) = "\"" - │ │ │ │ │ ├── content_loc: (109,19)-(109,22) = "baz" - │ │ │ │ │ ├── closing_loc: (109,22)-(109,23) = "\"" - │ │ │ │ │ └── unescaped: "baz" - │ │ │ │ ├── opening_loc: (109,15)-(109,17) = "do" - │ │ │ │ └── closing_loc: (109,24)-(109,27) = "end" - │ │ │ └── closing_loc: (109,27)-(109,28) = "}" - │ │ └── closing_loc: (109,28)-(109,29) = "\"" - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (109,30)-(109,36)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (109,30)-(109,32) = "do" - │ └── closing_loc: (109,33)-(109,36) = "end" - ├── @ CallNode (location: (111,0)-(111,28)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (111,0)-(111,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (111,4)-(111,28)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ ClassNode (location: (111,4)-(111,28)) - │ │ ├── flags: ∅ - │ │ ├── locals: [] - │ │ ├── class_keyword_loc: (111,4)-(111,9) = "class" - │ │ ├── constant_path: - │ │ │ @ ConstantReadNode (location: (111,10)-(111,13)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :Bar - │ │ ├── inheritance_operator_loc: ∅ - │ │ ├── superclass: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (111,14)-(111,24)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (111,14)-(111,24)) - │ │ │ ├── flags: newline, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :baz - │ │ │ ├── message_loc: (111,14)-(111,17) = "baz" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: - │ │ │ @ BlockNode (location: (111,18)-(111,24)) - │ │ │ ├── flags: ∅ - │ │ │ ├── locals: [] - │ │ │ ├── parameters: ∅ - │ │ │ ├── body: ∅ - │ │ │ ├── opening_loc: (111,18)-(111,20) = "do" - │ │ │ └── closing_loc: (111,21)-(111,24) = "end" - │ │ ├── end_keyword_loc: (111,25)-(111,28) = "end" - │ │ └── name: :Bar - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (113,0)-(113,29)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (113,0)-(113,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (113,4)-(113,29)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ ModuleNode (location: (113,4)-(113,29)) - │ │ ├── flags: ∅ - │ │ ├── locals: [] - │ │ ├── module_keyword_loc: (113,4)-(113,10) = "module" - │ │ ├── constant_path: - │ │ │ @ ConstantReadNode (location: (113,11)-(113,14)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :Bar - │ │ ├── body: - │ │ │ @ StatementsNode (location: (113,15)-(113,25)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (113,15)-(113,25)) - │ │ │ ├── flags: newline, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :baz - │ │ │ ├── message_loc: (113,15)-(113,18) = "baz" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: - │ │ │ @ BlockNode (location: (113,19)-(113,25)) - │ │ │ ├── flags: ∅ - │ │ │ ├── locals: [] - │ │ │ ├── parameters: ∅ - │ │ │ ├── body: ∅ - │ │ │ ├── opening_loc: (113,19)-(113,21) = "do" - │ │ │ └── closing_loc: (113,22)-(113,25) = "end" - │ │ ├── end_keyword_loc: (113,26)-(113,29) = "end" - │ │ └── name: :Bar - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (115,0)-(115,16)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (115,0)-(115,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (115,4)-(115,16)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ ArrayNode (location: (115,4)-(115,16)) - │ │ ├── flags: ∅ - │ │ ├── elements: (length: 1) - │ │ │ └── @ CallNode (location: (115,5)-(115,15)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :baz - │ │ │ ├── message_loc: (115,5)-(115,8) = "baz" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: - │ │ │ @ BlockNode (location: (115,9)-(115,15)) - │ │ │ ├── flags: ∅ - │ │ │ ├── locals: [] - │ │ │ ├── parameters: ∅ - │ │ │ ├── body: ∅ - │ │ │ ├── opening_loc: (115,9)-(115,11) = "do" - │ │ │ └── closing_loc: (115,12)-(115,15) = "end" - │ │ ├── opening_loc: (115,4)-(115,5) = "[" - │ │ └── closing_loc: (115,15)-(115,16) = "]" - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (117,0)-(117,28)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :p - │ ├── message_loc: (117,0)-(117,1) = "p" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (117,2)-(117,28)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ BeginNode (location: (117,2)-(117,28)) - │ │ ├── flags: ∅ - │ │ ├── begin_keyword_loc: (117,2)-(117,7) = "begin" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (117,8)-(117,24)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (117,8)-(117,24)) - │ │ │ ├── flags: newline - │ │ │ ├── receiver: - │ │ │ │ @ IntegerNode (location: (117,8)-(117,9)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ ├── call_operator_loc: (117,9)-(117,10) = "." - │ │ │ ├── name: :times - │ │ │ ├── message_loc: (117,10)-(117,15) = "times" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: - │ │ │ @ BlockNode (location: (117,16)-(117,24)) - │ │ │ ├── flags: ∅ - │ │ │ ├── locals: [] - │ │ │ ├── parameters: ∅ - │ │ │ ├── body: - │ │ │ │ @ StatementsNode (location: (117,19)-(117,20)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ IntegerNode (location: (117,19)-(117,20)) - │ │ │ │ ├── flags: newline, static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ ├── opening_loc: (117,16)-(117,18) = "do" - │ │ │ └── closing_loc: (117,21)-(117,24) = "end" - │ │ ├── rescue_clause: ∅ - │ │ ├── else_clause: ∅ - │ │ ├── ensure_clause: ∅ - │ │ └── end_keyword_loc: (117,25)-(117,28) = "end" - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (119,0)-(124,5)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (119,0)-(119,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (119,4)-(124,5)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ SymbolNode (location: (119,4)-(119,6)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (119,4)-(119,5) = ":" - │ │ │ ├── value_loc: (119,5)-(119,6) = "a" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "a" - │ │ └── @ IfNode (location: (120,2)-(124,5)) - │ │ ├── flags: newline - │ │ ├── if_keyword_loc: (120,2)-(120,4) = "if" - │ │ ├── predicate: - │ │ │ @ CallNode (location: (120,5)-(120,6)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :x - │ │ │ ├── message_loc: (120,5)-(120,6) = "x" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── then_keyword_loc: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (121,4)-(123,7)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (121,4)-(123,7)) - │ │ │ ├── flags: newline, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (121,4)-(121,7) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: - │ │ │ @ BlockNode (location: (121,8)-(123,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── locals: [:a] - │ │ │ ├── parameters: - │ │ │ │ @ BlockParametersNode (location: (121,11)-(121,14)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── parameters: - │ │ │ │ │ @ ParametersNode (location: (121,12)-(121,13)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── requireds: (length: 1) - │ │ │ │ │ │ └── @ RequiredParameterNode (location: (121,12)-(121,13)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ └── name: :a - │ │ │ │ │ ├── optionals: (length: 0) - │ │ │ │ │ ├── rest: ∅ - │ │ │ │ │ ├── posts: (length: 0) - │ │ │ │ │ ├── keywords: (length: 0) - │ │ │ │ │ ├── keyword_rest: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── locals: (length: 0) - │ │ │ │ ├── opening_loc: (121,11)-(121,12) = "|" - │ │ │ │ └── closing_loc: (121,13)-(121,14) = "|" - │ │ │ ├── body: - │ │ │ │ @ StatementsNode (location: (122,6)-(122,7)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ LocalVariableReadNode (location: (122,6)-(122,7)) - │ │ │ │ ├── flags: newline - │ │ │ │ ├── name: :a - │ │ │ │ └── depth: 0 - │ │ │ ├── opening_loc: (121,8)-(121,10) = "do" - │ │ │ └── closing_loc: (123,4)-(123,7) = "end" - │ │ ├── subsequent: ∅ - │ │ └── end_keyword_loc: (124,2)-(124,5) = "end" - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (126,0)-(135,5)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (126,0)-(126,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (126,4)-(135,5)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 3) - │ │ ├── @ SymbolNode (location: (126,4)-(126,6)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (126,4)-(126,5) = ":" - │ │ │ ├── value_loc: (126,5)-(126,6) = "a" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "a" - │ │ ├── @ WhileNode (location: (127,2)-(131,5)) - │ │ │ ├── flags: ∅ - │ │ │ ├── keyword_loc: (127,2)-(127,7) = "while" - │ │ │ ├── closing_loc: (131,2)-(131,5) = "end" - │ │ │ ├── predicate: - │ │ │ │ @ CallNode (location: (127,8)-(127,9)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :x - │ │ │ │ ├── message_loc: (127,8)-(127,9) = "x" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── statements: - │ │ │ @ StatementsNode (location: (128,4)-(130,7)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (128,4)-(130,7)) - │ │ │ ├── flags: newline, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (128,4)-(128,7) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: - │ │ │ @ BlockNode (location: (128,8)-(130,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── locals: [:a] - │ │ │ ├── parameters: - │ │ │ │ @ BlockParametersNode (location: (128,11)-(128,14)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── parameters: - │ │ │ │ │ @ ParametersNode (location: (128,12)-(128,13)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── requireds: (length: 1) - │ │ │ │ │ │ └── @ RequiredParameterNode (location: (128,12)-(128,13)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ └── name: :a - │ │ │ │ │ ├── optionals: (length: 0) - │ │ │ │ │ ├── rest: ∅ - │ │ │ │ │ ├── posts: (length: 0) - │ │ │ │ │ ├── keywords: (length: 0) - │ │ │ │ │ ├── keyword_rest: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── locals: (length: 0) - │ │ │ │ ├── opening_loc: (128,11)-(128,12) = "|" - │ │ │ │ └── closing_loc: (128,13)-(128,14) = "|" - │ │ │ ├── body: - │ │ │ │ @ StatementsNode (location: (129,6)-(129,7)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ LocalVariableReadNode (location: (129,6)-(129,7)) - │ │ │ │ ├── flags: newline - │ │ │ │ ├── name: :a - │ │ │ │ └── depth: 0 - │ │ │ ├── opening_loc: (128,8)-(128,10) = "do" - │ │ │ └── closing_loc: (130,4)-(130,7) = "end" - │ │ └── @ UntilNode (location: (132,2)-(135,5)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (132,2)-(132,7) = "until" - │ │ ├── closing_loc: (135,2)-(135,5) = "end" - │ │ ├── predicate: - │ │ │ @ CallNode (location: (132,8)-(132,9)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :x - │ │ │ ├── message_loc: (132,8)-(132,9) = "x" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── statements: - │ │ @ StatementsNode (location: (133,4)-(134,7)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (133,4)-(134,7)) - │ │ ├── flags: newline, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :baz - │ │ ├── message_loc: (133,4)-(133,7) = "baz" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: - │ │ @ BlockNode (location: (133,8)-(134,7)) - │ │ ├── flags: ∅ - │ │ ├── locals: [] - │ │ ├── parameters: ∅ - │ │ ├── body: ∅ - │ │ ├── opening_loc: (133,8)-(133,10) = "do" - │ │ └── closing_loc: (134,4)-(134,7) = "end" - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (137,0)-(137,9)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ HashNode (location: (137,0)-(137,2)) - │ │ ├── flags: static_literal - │ │ ├── opening_loc: (137,0)-(137,1) = "{" - │ │ ├── elements: (length: 0) - │ │ └── closing_loc: (137,1)-(137,2) = "}" - │ ├── call_operator_loc: ∅ - │ ├── name: :+ - │ ├── message_loc: (137,3)-(137,4) = "+" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (137,5)-(137,9)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (137,5)-(137,9)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :A - │ │ ├── message_loc: (137,5)-(137,6) = "A" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: - │ │ @ BlockNode (location: (137,7)-(137,9)) - │ │ ├── flags: ∅ - │ │ ├── locals: [] - │ │ ├── parameters: ∅ - │ │ ├── body: ∅ - │ │ ├── opening_loc: (137,7)-(137,8) = "{" - │ │ └── closing_loc: (137,8)-(137,9) = "}" - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (139,0)-(139,16)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ HashNode (location: (139,0)-(139,2)) - │ │ ├── flags: static_literal - │ │ ├── opening_loc: (139,0)-(139,1) = "{" - │ │ ├── elements: (length: 0) - │ │ └── closing_loc: (139,1)-(139,2) = "}" - │ ├── call_operator_loc: ∅ - │ ├── name: :+ - │ ├── message_loc: (139,3)-(139,4) = "+" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (139,5)-(139,16)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (139,5)-(139,16)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :A - │ │ ├── message_loc: (139,5)-(139,6) = "A" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: - │ │ @ BlockNode (location: (139,7)-(139,16)) - │ │ ├── flags: ∅ - │ │ ├── locals: [:a] - │ │ ├── parameters: - │ │ │ @ BlockParametersNode (location: (139,9)-(139,12)) - │ │ │ ├── flags: ∅ - │ │ │ ├── parameters: - │ │ │ │ @ ParametersNode (location: (139,10)-(139,11)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── requireds: (length: 1) - │ │ │ │ │ └── @ RequiredParameterNode (location: (139,10)-(139,11)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── name: :a - │ │ │ │ ├── optionals: (length: 0) - │ │ │ │ ├── rest: ∅ - │ │ │ │ ├── posts: (length: 0) - │ │ │ │ ├── keywords: (length: 0) - │ │ │ │ ├── keyword_rest: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── locals: (length: 0) - │ │ │ ├── opening_loc: (139,9)-(139,10) = "|" - │ │ │ └── closing_loc: (139,11)-(139,12) = "|" - │ │ ├── body: - │ │ │ @ StatementsNode (location: (139,13)-(139,14)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ LocalVariableReadNode (location: (139,13)-(139,14)) - │ │ │ ├── flags: newline - │ │ │ ├── name: :a - │ │ │ └── depth: 0 - │ │ ├── opening_loc: (139,7)-(139,8) = "{" - │ │ └── closing_loc: (139,15)-(139,16) = "}" - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (141,0)-(141,11)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (141,0)-(141,4)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :A - │ │ ├── message_loc: (141,0)-(141,1) = "A" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: - │ │ @ BlockNode (location: (141,2)-(141,4)) - │ │ ├── flags: ∅ - │ │ ├── locals: [] - │ │ ├── parameters: ∅ - │ │ ├── body: ∅ - │ │ ├── opening_loc: (141,2)-(141,3) = "{" - │ │ └── closing_loc: (141,3)-(141,4) = "}" - │ ├── call_operator_loc: ∅ - │ ├── name: :+ - │ ├── message_loc: (141,5)-(141,6) = "+" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (141,7)-(141,11)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (141,7)-(141,11)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :A - │ │ ├── message_loc: (141,7)-(141,8) = "A" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: - │ │ @ BlockNode (location: (141,9)-(141,11)) - │ │ ├── flags: ∅ - │ │ ├── locals: [] - │ │ ├── parameters: ∅ - │ │ ├── body: ∅ - │ │ ├── opening_loc: (141,9)-(141,10) = "{" - │ │ └── closing_loc: (141,10)-(141,11) = "}" - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (143,0)-(143,11)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (143,0)-(143,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :lst - │ │ ├── message_loc: (143,0)-(143,3) = "lst" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :<< - │ ├── message_loc: (143,4)-(143,6) = "<<" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (143,7)-(143,11)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (143,7)-(143,11)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :A - │ │ ├── message_loc: (143,7)-(143,8) = "A" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: - │ │ @ BlockNode (location: (143,9)-(143,11)) - │ │ ├── flags: ∅ - │ │ ├── locals: [] - │ │ ├── parameters: ∅ - │ │ ├── body: ∅ - │ │ ├── opening_loc: (143,9)-(143,10) = "{" - │ │ └── closing_loc: (143,10)-(143,11) = "}" - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ InterpolatedStringNode (location: (145,0)-(145,17)) - │ ├── flags: newline - │ ├── opening_loc: (145,0)-(145,1) = "\"" - │ ├── parts: (length: 1) - │ │ └── @ EmbeddedStatementsNode (location: (145,1)-(145,16)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (145,1)-(145,3) = "\#{" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (145,4)-(145,14)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (145,4)-(145,14)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :join - │ │ │ ├── message_loc: (145,4)-(145,8) = "join" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (145,9)-(145,14)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ ParenthesesNode (location: (145,9)-(145,14)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── body: - │ │ │ │ │ @ StatementsNode (location: (145,10)-(145,13)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── body: (length: 1) - │ │ │ │ │ └── @ StringNode (location: (145,10)-(145,13)) - │ │ │ │ │ ├── flags: newline - │ │ │ │ │ ├── opening_loc: (145,10)-(145,11) = "\"" - │ │ │ │ │ ├── content_loc: (145,11)-(145,12) = " " - │ │ │ │ │ ├── closing_loc: (145,12)-(145,13) = "\"" - │ │ │ │ │ └── unescaped: " " - │ │ │ │ ├── opening_loc: (145,9)-(145,10) = "(" - │ │ │ │ └── closing_loc: (145,13)-(145,14) = ")" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── closing_loc: (145,15)-(145,16) = "}" - │ └── closing_loc: (145,16)-(145,17) = "\"" - ├── @ InterpolatedStringNode (location: (147,0)-(147,8)) - │ ├── flags: newline - │ ├── opening_loc: (147,0)-(147,1) = "\"" - │ ├── parts: (length: 1) - │ │ └── @ EmbeddedStatementsNode (location: (147,1)-(147,7)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (147,1)-(147,3) = "\#{" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (147,3)-(147,6)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ ParenthesesNode (location: (147,3)-(147,6)) - │ │ │ ├── flags: ∅ - │ │ │ ├── body: - │ │ │ │ @ StatementsNode (location: (147,4)-(147,5)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (147,4)-(147,5)) - │ │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :v - │ │ │ │ ├── message_loc: (147,4)-(147,5) = "v" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── opening_loc: (147,3)-(147,4) = "(" - │ │ │ └── closing_loc: (147,5)-(147,6) = ")" - │ │ └── closing_loc: (147,6)-(147,7) = "}" - │ └── closing_loc: (147,7)-(147,8) = "\"" - ├── @ DefNode (location: (149,0)-(149,18)) - │ ├── flags: newline - │ ├── name: :f - │ ├── name_loc: (149,4)-(149,5) = "f" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (149,6)-(149,7)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: - │ │ │ @ RestParameterNode (location: (149,6)-(149,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: ∅ - │ │ │ ├── name_loc: ∅ - │ │ │ └── operator_loc: (149,6)-(149,7) = "*" - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (149,10)-(149,13)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (149,10)-(149,13)) - │ │ ├── flags: newline, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :p - │ │ ├── message_loc: (149,10)-(149,11) = "p" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (149,12)-(149,13)) - │ │ │ ├── flags: contains_splat - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ SplatNode (location: (149,12)-(149,13)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (149,12)-(149,13) = "*" - │ │ │ └── expression: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (149,0)-(149,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (149,5)-(149,6) = "(" - │ ├── rparen_loc: (149,7)-(149,8) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (149,15)-(149,18) = "end" - ├── @ CallNode (location: (151,0)-(151,16)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (151,0)-(151,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (151,4)-(151,16)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ IntegerNode (location: (151,4)-(151,5)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── @ CallNode (location: (151,7)-(151,16)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :Bar - │ │ ├── message_loc: (151,7)-(151,10) = "Bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: - │ │ @ BlockNode (location: (151,11)-(151,16)) - │ │ ├── flags: ∅ - │ │ ├── locals: [] - │ │ ├── parameters: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (151,13)-(151,14)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ IntegerNode (location: (151,13)-(151,14)) - │ │ │ ├── flags: newline, static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── opening_loc: (151,11)-(151,12) = "{" - │ │ └── closing_loc: (151,15)-(151,16) = "}" - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ LocalVariableWriteNode (location: (153,0)-(153,7)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── depth: 0 - │ ├── name_loc: (153,0)-(153,3) = "foo" - │ ├── value: - │ │ @ IntegerNode (location: (153,6)-(153,7)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ └── operator_loc: (153,4)-(153,5) = "=" - ├── @ CallNode (location: (154,0)-(154,6)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (154,0)-(154,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (154,4)-(154,6)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (154,4)-(154,5) = "{" - │ └── closing_loc: (154,5)-(154,6) = "}" - └── @ CallNode (location: (156,0)-(156,19)) - ├── flags: newline - ├── receiver: - │ @ InstanceVariableReadNode (location: (156,0)-(156,2)) - │ ├── flags: ∅ - │ └── name: :@a - ├── call_operator_loc: (156,2)-(156,3) = "." - ├── name: :b - ├── message_loc: (156,3)-(156,4) = "b" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (156,5)-(156,19)) - │ ├── flags: contains_keywords - │ └── arguments: (length: 1) - │ └── @ KeywordHashNode (location: (156,5)-(156,19)) - │ ├── flags: ∅ - │ └── elements: (length: 1) - │ └── @ AssocNode (location: (156,5)-(156,19)) - │ ├── flags: ∅ - │ ├── key: - │ │ @ InterpolatedSymbolNode (location: (156,5)-(156,16)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (156,5)-(156,6) = "\"" - │ │ ├── parts: (length: 2) - │ │ │ ├── @ StringNode (location: (156,6)-(156,7)) - │ │ │ │ ├── flags: static_literal, frozen - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── content_loc: (156,6)-(156,7) = "c" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "c" - │ │ │ └── @ EmbeddedStatementsNode (location: (156,7)-(156,14)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (156,7)-(156,9) = "\#{" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (156,9)-(156,13)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (156,9)-(156,13)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :name - │ │ │ │ ├── message_loc: (156,9)-(156,13) = "name" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── closing_loc: (156,13)-(156,14) = "}" - │ │ └── closing_loc: (156,14)-(156,16) = "\":" - │ ├── value: - │ │ @ IntegerNode (location: (156,17)-(156,19)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 42 - │ └── operator_loc: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/methods.txt b/test/prism/snapshots/methods.txt deleted file mode 100644 index af2defcb9744a1..00000000000000 --- a/test/prism/snapshots/methods.txt +++ /dev/null @@ -1,2245 +0,0 @@ -@ ProgramNode (location: (1,0)-(183,37)) -├── flags: ∅ -├── locals: [:a, :c, :foo] -└── statements: - @ StatementsNode (location: (1,0)-(183,37)) - ├── flags: ∅ - └── body: (length: 69) - ├── @ DefNode (location: (1,0)-(2,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (1,4)-(1,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,8)-(1,18)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ MultiTargetNode (location: (1,8)-(1,18)) - │ │ │ ├── flags: ∅ - │ │ │ ├── lefts: (length: 2) - │ │ │ │ ├── @ RequiredParameterNode (location: (1,9)-(1,12)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── name: :bar - │ │ │ │ └── @ RequiredParameterNode (location: (1,14)-(1,17)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :baz - │ │ │ ├── rest: ∅ - │ │ │ ├── rights: (length: 0) - │ │ │ ├── lparen_loc: (1,8)-(1,9) = "(" - │ │ │ └── rparen_loc: (1,17)-(1,18) = ")" - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:bar, :baz] - │ ├── def_keyword_loc: (1,0)-(1,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (1,7)-(1,8) = "(" - │ ├── rparen_loc: (1,18)-(1,19) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (2,0)-(2,3) = "end" - ├── @ DefNode (location: (4,0)-(5,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (4,4)-(4,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (4,8)-(4,44)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ MultiTargetNode (location: (4,8)-(4,18)) - │ │ │ ├── flags: ∅ - │ │ │ ├── lefts: (length: 2) - │ │ │ │ ├── @ RequiredParameterNode (location: (4,9)-(4,12)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── name: :bar - │ │ │ │ └── @ RequiredParameterNode (location: (4,14)-(4,17)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :baz - │ │ │ ├── rest: ∅ - │ │ │ ├── rights: (length: 0) - │ │ │ ├── lparen_loc: (4,8)-(4,9) = "(" - │ │ │ └── rparen_loc: (4,17)-(4,18) = ")" - │ │ ├── optionals: (length: 1) - │ │ │ └── @ OptionalParameterNode (location: (4,20)-(4,32)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :optional - │ │ │ ├── name_loc: (4,20)-(4,28) = "optional" - │ │ │ ├── operator_loc: (4,29)-(4,30) = "=" - │ │ │ └── value: - │ │ │ @ IntegerNode (location: (4,31)-(4,32)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 1) - │ │ │ └── @ MultiTargetNode (location: (4,34)-(4,44)) - │ │ │ ├── flags: ∅ - │ │ │ ├── lefts: (length: 2) - │ │ │ │ ├── @ RequiredParameterNode (location: (4,35)-(4,38)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── name: :bin - │ │ │ │ └── @ RequiredParameterNode (location: (4,40)-(4,43)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :bag - │ │ │ ├── rest: ∅ - │ │ │ ├── rights: (length: 0) - │ │ │ ├── lparen_loc: (4,34)-(4,35) = "(" - │ │ │ └── rparen_loc: (4,43)-(4,44) = ")" - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:bar, :baz, :optional, :bin, :bag] - │ ├── def_keyword_loc: (4,0)-(4,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (4,7)-(4,8) = "(" - │ ├── rparen_loc: (4,44)-(4,45) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (5,0)-(5,3) = "end" - ├── @ DefNode (location: (8,0)-(8,18)) - │ ├── flags: newline - │ ├── name: :a - │ ├── name_loc: (8,4)-(8,5) = "a" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ BeginNode (location: (8,0)-(8,18)) - │ │ ├── flags: ∅ - │ │ ├── begin_keyword_loc: ∅ - │ │ ├── statements: ∅ - │ │ ├── rescue_clause: ∅ - │ │ ├── else_clause: ∅ - │ │ ├── ensure_clause: - │ │ │ @ EnsureNode (location: (8,7)-(8,18)) - │ │ │ ├── flags: ∅ - │ │ │ ├── ensure_keyword_loc: (8,7)-(8,13) = "ensure" - │ │ │ ├── statements: ∅ - │ │ │ └── end_keyword_loc: (8,15)-(8,18) = "end" - │ │ └── end_keyword_loc: (8,15)-(8,18) = "end" - │ ├── locals: [] - │ ├── def_keyword_loc: (8,0)-(8,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (8,15)-(8,18) = "end" - ├── @ DefNode (location: (10,0)-(11,3)) - │ ├── flags: newline - │ ├── name: :a - │ ├── name_loc: (10,8)-(10,9) = "a" - │ ├── receiver: - │ │ @ ParenthesesNode (location: (10,4)-(10,7)) - │ │ ├── flags: ∅ - │ │ ├── body: - │ │ │ @ CallNode (location: (10,5)-(10,6)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (10,5)-(10,6) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── opening_loc: (10,4)-(10,5) = "(" - │ │ └── closing_loc: (10,6)-(10,7) = ")" - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (10,0)-(10,3) = "def" - │ ├── operator_loc: (10,7)-(10,8) = "." - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (11,0)-(11,3) = "end" - ├── @ DefNode (location: (13,0)-(14,3)) - │ ├── flags: newline - │ ├── name: :b - │ ├── name_loc: (13,9)-(13,10) = "b" - │ ├── receiver: - │ │ @ ParenthesesNode (location: (13,4)-(13,7)) - │ │ ├── flags: ∅ - │ │ ├── body: - │ │ │ @ CallNode (location: (13,5)-(13,6)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :a - │ │ │ ├── message_loc: (13,5)-(13,6) = "a" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── opening_loc: (13,4)-(13,5) = "(" - │ │ └── closing_loc: (13,6)-(13,7) = ")" - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (13,0)-(13,3) = "def" - │ ├── operator_loc: (13,7)-(13,9) = "::" - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (14,0)-(14,3) = "end" - ├── @ DefNode (location: (16,0)-(17,3)) - │ ├── flags: newline - │ ├── name: :a - │ ├── name_loc: (16,10)-(16,11) = "a" - │ ├── receiver: - │ │ @ FalseNode (location: (16,4)-(16,9)) - │ │ └── flags: static_literal - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (16,0)-(16,3) = "def" - │ ├── operator_loc: (16,9)-(16,10) = "." - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (17,0)-(17,3) = "end" - ├── @ DefNode (location: (19,0)-(20,3)) - │ ├── flags: newline - │ ├── name: :a - │ ├── name_loc: (19,4)-(19,5) = "a" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (19,6)-(19,9)) - │ â”‚ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: - │ │ │ @ ForwardingParameterNode (location: (19,6)-(19,9)) - │ │ │ └── flags: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (19,0)-(19,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (19,5)-(19,6) = "(" - │ ├── rparen_loc: (19,9)-(19,10) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (20,0)-(20,3) = "end" - ├── @ DefNode (location: (22,0)-(23,3)) - │ ├── flags: newline - │ ├── name: :a - │ ├── name_loc: (22,9)-(22,10) = "a" - │ ├── receiver: - │ │ @ GlobalVariableReadNode (location: (22,4)-(22,8)) - │ │ ├── flags: ∅ - │ │ └── name: :$var - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (22,0)-(22,3) = "def" - │ ├── operator_loc: (22,8)-(22,9) = "." - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (23,0)-(23,3) = "end" - ├── @ DefNode (location: (25,0)-(26,3)) - │ ├── flags: newline - │ ├── name: :b - │ ├── name_loc: (25,6)-(25,7) = "b" - │ ├── receiver: - │ │ @ CallNode (location: (25,4)-(25,5)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (25,4)-(25,5) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (25,0)-(25,3) = "def" - │ ├── operator_loc: (25,5)-(25,6) = "." - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (26,0)-(26,3) = "end" - ├── @ DefNode (location: (28,0)-(29,3)) - │ ├── flags: newline - │ ├── name: :a - │ ├── name_loc: (28,9)-(28,10) = "a" - │ ├── receiver: - │ │ @ InstanceVariableReadNode (location: (28,4)-(28,8)) - │ │ ├── flags: ∅ - │ │ └── name: :@var - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (28,0)-(28,3) = "def" - │ ├── operator_loc: (28,8)-(28,9) = "." - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (29,0)-(29,3) = "end" - ├── @ DefNode (location: (31,0)-(31,13)) - │ ├── flags: newline - │ ├── name: :a - │ ├── name_loc: (31,4)-(31,5) = "a" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (31,6)-(31,8)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 1) - │ │ │ └── @ RequiredKeywordParameterNode (location: (31,6)-(31,8)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :b - │ │ │ └── name_loc: (31,6)-(31,8) = "b:" - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:b] - │ ├── def_keyword_loc: (31,0)-(31,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (31,10)-(31,13) = "end" - ├── @ StringNode (location: (33,0)-(33,6)) - │ ├── flags: newline - │ ├── opening_loc: (33,0)-(33,2) = "%," - │ ├── content_loc: (33,2)-(33,5) = "abc" - │ ├── closing_loc: (33,5)-(33,6) = "," - │ └── unescaped: "abc" - ├── @ DefNode (location: (35,0)-(36,3)) - │ ├── flags: newline - │ ├── name: :a - │ ├── name_loc: (35,4)-(35,5) = "a" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (35,6)-(35,8)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 1) - │ │ │ └── @ RequiredKeywordParameterNode (location: (35,6)-(35,8)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :b - │ │ │ └── name_loc: (35,6)-(35,8) = "b:" - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:b] - │ ├── def_keyword_loc: (35,0)-(35,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (35,5)-(35,6) = "(" - │ ├── rparen_loc: (35,8)-(35,9) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (36,0)-(36,3) = "end" - ├── @ DefNode (location: (38,0)-(39,3)) - │ ├── flags: newline - │ ├── name: :a - │ ├── name_loc: (38,4)-(38,5) = "a" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (38,6)-(38,9)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: - │ │ │ @ KeywordRestParameterNode (location: (38,6)-(38,9)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :b - │ │ │ ├── name_loc: (38,8)-(38,9) = "b" - │ │ │ └── operator_loc: (38,6)-(38,8) = "**" - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:b] - │ ├── def_keyword_loc: (38,0)-(38,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (38,5)-(38,6) = "(" - │ ├── rparen_loc: (38,9)-(38,10) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (39,0)-(39,3) = "end" - ├── @ DefNode (location: (41,0)-(42,3)) - │ ├── flags: newline - │ ├── name: :a - │ ├── name_loc: (41,4)-(41,5) = "a" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (41,6)-(41,8)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: - │ │ │ @ KeywordRestParameterNode (location: (41,6)-(41,8)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: ∅ - │ │ │ ├── name_loc: ∅ - │ │ │ └── operator_loc: (41,6)-(41,8) = "**" - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (41,0)-(41,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (41,5)-(41,6) = "(" - │ ├── rparen_loc: (41,8)-(41,9) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (42,0)-(42,3) = "end" - ├── @ LocalVariableWriteNode (location: (44,0)-(44,5)) - │ ├── flags: newline - │ ├── name: :a - │ ├── depth: 0 - │ ├── name_loc: (44,0)-(44,1) = "a" - │ ├── value: - │ │ @ IntegerNode (location: (44,4)-(44,5)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ └── operator_loc: (44,2)-(44,3) = "=" - ├── @ DefNode (location: (44,7)-(45,3)) - │ ├── flags: newline - │ ├── name: :a - │ ├── name_loc: (44,11)-(44,12) = "a" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (44,7)-(44,10) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (45,0)-(45,3) = "end" - ├── @ DefNode (location: (47,0)-(48,3)) - │ ├── flags: newline - │ ├── name: :a - │ ├── name_loc: (47,4)-(47,5) = "a" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (47,6)-(47,13)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 3) - │ │ │ ├── @ RequiredParameterNode (location: (47,6)-(47,7)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :b - │ │ │ ├── @ RequiredParameterNode (location: (47,9)-(47,10)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :c - │ │ │ └── @ RequiredParameterNode (location: (47,12)-(47,13)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :d - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:b, :c, :d] - │ ├── def_keyword_loc: (47,0)-(47,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (48,0)-(48,3) = "end" - ├── @ DefNode (location: (50,0)-(51,3)) - │ ├── flags: newline - │ ├── name: :a - │ ├── name_loc: (50,8)-(50,9) = "a" - │ ├── receiver: - │ │ @ NilNode (location: (50,4)-(50,7)) - │ │ └── flags: static_literal - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (50,0)-(50,3) = "def" - │ ├── operator_loc: (50,7)-(50,8) = "." - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (51,0)-(51,3) = "end" - ├── @ DefNode (location: (53,0)-(54,3)) - │ ├── flags: newline - │ ├── name: :a - │ ├── name_loc: (53,4)-(53,5) = "a" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (53,6)-(53,14)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 2) - │ │ │ ├── @ RequiredKeywordParameterNode (location: (53,6)-(53,8)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :b - │ │ │ │ └── name_loc: (53,6)-(53,8) = "b:" - │ │ │ └── @ OptionalKeywordParameterNode (location: (53,10)-(53,14)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :c - │ │ │ ├── name_loc: (53,10)-(53,12) = "c:" - │ │ │ └── value: - │ │ │ @ IntegerNode (location: (53,13)-(53,14)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:b, :c] - │ ├── def_keyword_loc: (53,0)-(53,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (54,0)-(54,3) = "end" - ├── @ DefNode (location: (56,0)-(57,3)) - │ ├── flags: newline - │ ├── name: :a - │ ├── name_loc: (56,4)-(56,5) = "a" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (56,6)-(56,14)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 2) - │ │ │ ├── @ RequiredKeywordParameterNode (location: (56,6)-(56,8)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :b - │ │ │ │ └── name_loc: (56,6)-(56,8) = "b:" - │ │ │ └── @ OptionalKeywordParameterNode (location: (56,10)-(56,14)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :c - │ │ │ ├── name_loc: (56,10)-(56,12) = "c:" - │ │ │ └── value: - │ │ │ @ IntegerNode (location: (56,13)-(56,14)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:b, :c] - │ ├── def_keyword_loc: (56,0)-(56,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (56,5)-(56,6) = "(" - │ ├── rparen_loc: (56,14)-(56,15) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (57,0)-(57,3) = "end" - ├── @ DefNode (location: (59,0)-(61,3)) - │ ├── flags: newline - │ ├── name: :a - │ ├── name_loc: (59,4)-(59,5) = "a" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (59,6)-(60,7)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 2) - │ │ │ ├── @ OptionalKeywordParameterNode (location: (59,6)-(60,3)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :b - │ │ │ │ ├── name_loc: (59,6)-(59,8) = "b:" - │ │ │ │ └── value: - │ │ │ │ @ IntegerNode (location: (60,2)-(60,3)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ └── @ RequiredKeywordParameterNode (location: (60,5)-(60,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :c - │ │ │ └── name_loc: (60,5)-(60,7) = "c:" - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:b, :c] - │ ├── def_keyword_loc: (59,0)-(59,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (59,5)-(59,6) = "(" - │ ├── rparen_loc: (60,7)-(60,8) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (61,0)-(61,3) = "end" - ├── @ StringNode (location: (63,0)-(63,6)) - │ ├── flags: newline - │ ├── opening_loc: (63,0)-(63,2) = "%." - │ ├── content_loc: (63,2)-(63,5) = "abc" - │ ├── closing_loc: (63,5)-(63,6) = "." - │ └── unescaped: "abc" - ├── @ DefNode (location: (65,0)-(66,3)) - │ ├── flags: newline - │ ├── name: :a - │ ├── name_loc: (65,4)-(65,5) = "a" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (65,6)-(65,18)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 2) - │ │ │ ├── @ OptionalParameterNode (location: (65,6)-(65,11)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :b - │ │ │ │ ├── name_loc: (65,6)-(65,7) = "b" - │ │ │ │ ├── operator_loc: (65,8)-(65,9) = "=" - │ │ │ │ └── value: - │ │ │ │ @ IntegerNode (location: (65,10)-(65,11)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ └── @ OptionalParameterNode (location: (65,13)-(65,18)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :c - │ │ │ ├── name_loc: (65,13)-(65,14) = "c" - │ │ │ ├── operator_loc: (65,15)-(65,16) = "=" - │ │ │ └── value: - │ │ │ @ IntegerNode (location: (65,17)-(65,18)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:b, :c] - │ ├── def_keyword_loc: (65,0)-(65,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (66,0)-(66,3) = "end" - ├── @ DefNode (location: (68,0)-(69,3)) - │ ├── flags: newline - │ ├── name: :a - │ ├── name_loc: (68,4)-(68,5) = "a" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (68,0)-(68,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (68,5)-(68,6) = "(" - │ ├── rparen_loc: (68,6)-(68,7) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (69,0)-(69,3) = "end" - ├── @ DefNode (location: (71,0)-(72,3)) - │ ├── flags: newline - │ ├── name: :a - │ ├── name_loc: (71,4)-(71,5) = "a" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (71,6)-(71,14)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (71,6)-(71,7)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :b - │ │ ├── optionals: (length: 1) - │ │ │ └── @ OptionalParameterNode (location: (71,9)-(71,14)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :c - │ │ │ ├── name_loc: (71,9)-(71,10) = "c" - │ │ │ ├── operator_loc: (71,11)-(71,12) = "=" - │ │ │ └── value: - │ │ │ @ IntegerNode (location: (71,13)-(71,14)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:b, :c] - │ ├── def_keyword_loc: (71,0)-(71,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (72,0)-(72,3) = "end" - ├── @ DefNode (location: (74,0)-(75,3)) - │ ├── flags: newline - │ ├── name: :a - │ ├── name_loc: (74,4)-(74,5) = "a" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (74,6)-(74,7)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (74,6)-(74,7)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :b - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:b] - │ ├── def_keyword_loc: (74,0)-(74,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (75,0)-(75,3) = "end" - ├── @ DefNode (location: (77,0)-(77,32)) - │ ├── flags: newline - │ ├── name: :a - │ ├── name_loc: (77,4)-(77,5) = "a" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ BeginNode (location: (77,0)-(77,32)) - │ │ ├── flags: ∅ - │ │ ├── begin_keyword_loc: ∅ - │ │ ├── statements: ∅ - │ │ ├── rescue_clause: - │ │ │ @ RescueNode (location: (77,7)-(77,13)) - │ │ │ ├── flags: ∅ - │ │ │ ├── keyword_loc: (77,7)-(77,13) = "rescue" - │ │ │ ├── exceptions: (length: 0) - │ │ │ ├── operator_loc: ∅ - │ │ │ ├── reference: ∅ - │ │ │ ├── statements: ∅ - │ │ │ └── subsequent: ∅ - │ │ ├── else_clause: - │ │ │ @ ElseNode (location: (77,15)-(77,27)) - │ │ │ ├── flags: ∅ - │ │ │ ├── else_keyword_loc: (77,15)-(77,19) = "else" - │ │ │ ├── statements: ∅ - │ │ │ └── end_keyword_loc: (77,21)-(77,27) = "ensure" - │ │ ├── ensure_clause: - │ │ │ @ EnsureNode (location: (77,21)-(77,32)) - │ │ │ ├── flags: ∅ - │ │ │ ├── ensure_keyword_loc: (77,21)-(77,27) = "ensure" - │ │ │ ├── statements: ∅ - │ │ │ └── end_keyword_loc: (77,29)-(77,32) = "end" - │ │ └── end_keyword_loc: (77,29)-(77,32) = "end" - │ ├── locals: [] - │ ├── def_keyword_loc: (77,0)-(77,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (77,29)-(77,32) = "end" - ├── @ DefNode (location: (79,0)-(80,3)) - │ ├── flags: newline - │ ├── name: :a - │ ├── name_loc: (79,4)-(79,5) = "a" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (79,6)-(79,8)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: - │ │ │ @ RestParameterNode (location: (79,6)-(79,8)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :b - │ │ │ ├── name_loc: (79,7)-(79,8) = "b" - │ │ │ └── operator_loc: (79,6)-(79,7) = "*" - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:b] - │ ├── def_keyword_loc: (79,0)-(79,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (80,0)-(80,3) = "end" - ├── @ DefNode (location: (82,0)-(83,3)) - │ ├── flags: newline - │ ├── name: :a - │ ├── name_loc: (82,4)-(82,5) = "a" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (82,6)-(82,7)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: - │ │ │ @ RestParameterNode (location: (82,6)-(82,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: ∅ - │ │ │ ├── name_loc: ∅ - │ │ │ └── operator_loc: (82,6)-(82,7) = "*" - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (82,0)-(82,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (82,5)-(82,6) = "(" - │ ├── rparen_loc: (82,7)-(82,8) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (83,0)-(83,3) = "end" - ├── @ DefNode (location: (85,0)-(87,3)) - │ ├── flags: newline - │ ├── name: :a - │ ├── name_loc: (85,4)-(85,5) = "a" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (86,0)-(86,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ LocalVariableWriteNode (location: (86,0)-(86,5)) - │ │ ├── flags: newline - │ │ ├── name: :b - │ │ ├── depth: 0 - │ │ ├── name_loc: (86,0)-(86,1) = "b" - │ │ ├── value: - │ │ │ @ IntegerNode (location: (86,4)-(86,5)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── operator_loc: (86,2)-(86,3) = "=" - │ ├── locals: [:b] - │ ├── def_keyword_loc: (85,0)-(85,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (87,0)-(87,3) = "end" - ├── @ DefNode (location: (89,0)-(90,3)) - │ ├── flags: newline - │ ├── name: :a - │ ├── name_loc: (89,9)-(89,10) = "a" - │ ├── receiver: - │ │ @ SelfNode (location: (89,4)-(89,8)) - │ │ └── flags: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (89,0)-(89,3) = "def" - │ ├── operator_loc: (89,8)-(89,9) = "." - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (90,0)-(90,3) = "end" - ├── @ DefNode (location: (92,0)-(93,3)) - │ ├── flags: newline - │ ├── name: :a - │ ├── name_loc: (92,9)-(92,10) = "a" - │ ├── receiver: - │ │ @ TrueNode (location: (92,4)-(92,8)) - │ │ └── flags: static_literal - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (92,0)-(92,3) = "def" - │ ├── operator_loc: (92,8)-(92,9) = "." - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (93,0)-(93,3) = "end" - ├── @ DefNode (location: (95,0)-(96,3)) - │ ├── flags: newline - │ ├── name: :a - │ ├── name_loc: (95,4)-(95,5) = "a" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (95,0)-(95,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (96,0)-(96,3) = "end" - ├── @ DefNode (location: (98,0)-(101,3)) - │ ├── flags: newline - │ ├── name: :hi - │ ├── name_loc: (98,4)-(98,6) = "hi" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (99,0)-(100,4)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 2) - │ │ ├── @ IfNode (location: (99,0)-(99,18)) - │ │ │ ├── flags: newline - │ │ │ ├── if_keyword_loc: (99,11)-(99,13) = "if" - │ │ │ ├── predicate: - │ │ │ │ @ TrueNode (location: (99,14)-(99,18)) - │ │ │ │ └── flags: static_literal - │ │ │ ├── then_keyword_loc: ∅ - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (99,0)-(99,10)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ ReturnNode (location: (99,0)-(99,10)) - │ │ │ │ ├── flags: newline - │ │ │ │ ├── keyword_loc: (99,0)-(99,6) = "return" - │ │ │ │ └── arguments: - │ │ │ │ @ ArgumentsNode (location: (99,7)-(99,10)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ SymbolNode (location: (99,7)-(99,10)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: (99,7)-(99,8) = ":" - │ │ │ │ ├── value_loc: (99,8)-(99,10) = "hi" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "hi" - │ │ │ ├── subsequent: ∅ - │ │ │ └── end_keyword_loc: ∅ - │ │ └── @ SymbolNode (location: (100,0)-(100,4)) - │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (100,0)-(100,1) = ":" - │ │ ├── value_loc: (100,1)-(100,4) = "bye" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "bye" - │ ├── locals: [] - │ ├── def_keyword_loc: (98,0)-(98,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (101,0)-(101,3) = "end" - ├── @ DefNode (location: (103,0)-(103,11)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (103,4)-(103,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (103,10)-(103,11)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ IntegerNode (location: (103,10)-(103,11)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── locals: [] - │ ├── def_keyword_loc: (103,0)-(103,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: (103,8)-(103,9) = "=" - │ └── end_keyword_loc: ∅ - ├── @ DefNode (location: (104,0)-(104,11)) - │ ├── flags: newline - │ ├── name: :bar - │ ├── name_loc: (104,4)-(104,7) = "bar" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (104,10)-(104,11)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ IntegerNode (location: (104,10)-(104,11)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── locals: [] - │ ├── def_keyword_loc: (104,0)-(104,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: (104,8)-(104,9) = "=" - │ └── end_keyword_loc: ∅ - ├── @ DefNode (location: (106,0)-(106,18)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (106,4)-(106,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (106,8)-(106,11)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (106,8)-(106,11)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :bar - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (106,15)-(106,18)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ IntegerNode (location: (106,15)-(106,18)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 123 - │ ├── locals: [:bar] - │ ├── def_keyword_loc: (106,0)-(106,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (106,7)-(106,8) = "(" - │ ├── rparen_loc: (106,11)-(106,12) = ")" - │ ├── equal_loc: (106,13)-(106,14) = "=" - │ └── end_keyword_loc: ∅ - ├── @ DefNode (location: (108,0)-(108,13)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (108,4)-(108,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (108,10)-(108,13)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ IntegerNode (location: (108,10)-(108,13)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 123 - │ ├── locals: [] - │ ├── def_keyword_loc: (108,0)-(108,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: (108,8)-(108,9) = "=" - │ └── end_keyword_loc: ∅ - ├── @ DefNode (location: (110,0)-(110,19)) - │ ├── flags: newline - │ ├── name: :a - │ ├── name_loc: (110,4)-(110,5) = "a" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (110,6)-(110,7)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: - │ │ │ @ RestParameterNode (location: (110,6)-(110,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: ∅ - │ │ │ ├── name_loc: ∅ - │ │ │ └── operator_loc: (110,6)-(110,7) = "*" - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (110,10)-(110,14)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (110,10)-(110,14)) - │ │ ├── flags: newline, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :b - │ │ ├── message_loc: (110,10)-(110,11) = "b" - │ │ ├── opening_loc: (110,11)-(110,12) = "(" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (110,12)-(110,13)) - │ │ │ ├── flags: contains_splat - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ SplatNode (location: (110,12)-(110,13)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (110,12)-(110,13) = "*" - │ │ │ └── expression: ∅ - │ │ ├── closing_loc: (110,13)-(110,14) = ")" - │ │ └── block: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (110,0)-(110,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (110,5)-(110,6) = "(" - │ ├── rparen_loc: (110,7)-(110,8) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (110,16)-(110,19) = "end" - ├── @ DefNode (location: (112,0)-(112,23)) - │ ├── flags: newline - │ ├── name: :a - │ ├── name_loc: (112,4)-(112,5) = "a" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (112,6)-(112,9)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: - │ │ │ @ ForwardingParameterNode (location: (112,6)-(112,9)) - │ │ │ └── flags: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (112,12)-(112,18)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (112,12)-(112,18)) - │ │ ├── flags: newline, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :b - │ │ ├── message_loc: (112,12)-(112,13) = "b" - │ │ ├── opening_loc: (112,13)-(112,14) = "(" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (112,14)-(112,17)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ ForwardingArgumentsNode (location: (112,14)-(112,17)) - │ │ │ └── flags: ∅ - │ │ ├── closing_loc: (112,17)-(112,18) = ")" - │ │ └── block: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (112,0)-(112,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (112,5)-(112,6) = "(" - │ ├── rparen_loc: (112,9)-(112,10) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (112,20)-(112,23) = "end" - ├── @ DefNode (location: (114,0)-(114,29)) - │ ├── flags: newline - │ ├── name: :a - │ ├── name_loc: (114,4)-(114,5) = "a" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (114,6)-(114,9)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: - │ │ │ @ ForwardingParameterNode (location: (114,6)-(114,9)) - │ │ │ └── flags: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (114,12)-(114,24)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (114,12)-(114,24)) - │ │ ├── flags: newline, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :b - │ │ ├── message_loc: (114,12)-(114,13) = "b" - │ │ ├── opening_loc: (114,13)-(114,14) = "(" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (114,14)-(114,23)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 3) - │ │ │ ├── @ IntegerNode (location: (114,14)-(114,15)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ ├── @ IntegerNode (location: (114,17)-(114,18)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 2 - │ │ │ └── @ ForwardingArgumentsNode (location: (114,20)-(114,23)) - │ │ │ └── flags: ∅ - │ │ ├── closing_loc: (114,23)-(114,24) = ")" - │ │ └── block: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (114,0)-(114,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (114,5)-(114,6) = "(" - │ ├── rparen_loc: (114,9)-(114,10) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (114,26)-(114,29) = "end" - ├── @ DefNode (location: (116,0)-(117,3)) - │ ├── flags: newline - │ ├── name: :a - │ ├── name_loc: (116,12)-(116,13) = "a" - │ ├── receiver: - │ │ @ ParenthesesNode (location: (116,4)-(116,11)) - │ │ ├── flags: ∅ - │ │ ├── body: - │ │ │ @ LocalVariableWriteNode (location: (116,5)-(116,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :c - │ │ │ ├── depth: 0 - │ │ │ ├── name_loc: (116,5)-(116,6) = "c" - │ │ │ ├── value: - │ │ │ │ @ CallNode (location: (116,9)-(116,10)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :b - │ │ │ │ ├── message_loc: (116,9)-(116,10) = "b" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── operator_loc: (116,7)-(116,8) = "=" - │ │ ├── opening_loc: (116,4)-(116,5) = "(" - │ │ └── closing_loc: (116,10)-(116,11) = ")" - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (116,0)-(116,3) = "def" - │ ├── operator_loc: (116,11)-(116,12) = "." - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (117,0)-(117,3) = "end" - ├── @ DefNode (location: (119,0)-(120,3)) - │ ├── flags: newline - │ ├── name: :a - │ ├── name_loc: (119,4)-(119,5) = "a" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (119,6)-(119,8)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: - │ │ @ BlockParameterNode (location: (119,6)-(119,8)) - │ │ ├── flags: ∅ - │ │ ├── name: :b - │ │ ├── name_loc: (119,7)-(119,8) = "b" - │ │ └── operator_loc: (119,6)-(119,7) = "&" - │ ├── body: ∅ - │ ├── locals: [:b] - │ ├── def_keyword_loc: (119,0)-(119,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (120,0)-(120,3) = "end" - ├── @ DefNode (location: (122,0)-(123,3)) - │ ├── flags: newline - │ ├── name: :a - │ ├── name_loc: (122,4)-(122,5) = "a" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (122,6)-(122,7)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: - │ │ @ BlockParameterNode (location: (122,6)-(122,7)) - │ │ ├── flags: ∅ - │ │ ├── name: ∅ - │ │ ├── name_loc: ∅ - │ │ └── operator_loc: (122,6)-(122,7) = "&" - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (122,0)-(122,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (122,5)-(122,6) = "(" - │ ├── rparen_loc: (122,7)-(122,8) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (123,0)-(123,3) = "end" - ├── @ DefNode (location: (125,0)-(126,3)) - │ ├── flags: newline - │ ├── name: :a - │ ├── name_loc: (125,10)-(125,11) = "a" - │ ├── receiver: - │ │ @ ClassVariableReadNode (location: (125,4)-(125,9)) - │ │ ├── flags: ∅ - │ │ └── name: :@@var - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (125,0)-(125,3) = "def" - │ ├── operator_loc: (125,9)-(125,10) = "." - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (126,0)-(126,3) = "end" - ├── @ DefNode (location: (128,0)-(129,3)) - │ ├── flags: newline - │ ├── name: :C - │ ├── name_loc: (128,12)-(128,13) = "C" - │ ├── receiver: - │ │ @ ParenthesesNode (location: (128,4)-(128,11)) - │ │ ├── flags: ∅ - │ │ ├── body: - │ │ │ @ LocalVariableWriteNode (location: (128,5)-(128,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :a - │ │ │ ├── depth: 0 - │ │ │ ├── name_loc: (128,5)-(128,6) = "a" - │ │ │ ├── value: - │ │ │ │ @ CallNode (location: (128,9)-(128,10)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :b - │ │ │ │ ├── message_loc: (128,9)-(128,10) = "b" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── operator_loc: (128,7)-(128,8) = "=" - │ │ ├── opening_loc: (128,4)-(128,5) = "(" - │ │ └── closing_loc: (128,10)-(128,11) = ")" - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (128,0)-(128,3) = "def" - │ ├── operator_loc: (128,11)-(128,12) = "." - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (129,0)-(129,3) = "end" - ├── @ DefNode (location: (131,0)-(131,28)) - │ ├── flags: newline - │ ├── name: :Array_function - │ ├── name_loc: (131,9)-(131,23) = "Array_function" - │ ├── receiver: - │ │ @ SelfNode (location: (131,4)-(131,8)) - │ │ └── flags: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (131,0)-(131,3) = "def" - │ ├── operator_loc: (131,8)-(131,9) = "." - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (131,25)-(131,28) = "end" - ├── @ ConstantWriteNode (location: (133,0)-(133,9)) - │ ├── flags: newline - │ ├── name: :Const - │ ├── name_loc: (133,0)-(133,5) = "Const" - │ ├── value: - │ │ @ IntegerNode (location: (133,8)-(133,9)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ └── operator_loc: (133,6)-(133,7) = "=" - ├── @ DefNode (location: (133,11)-(134,3)) - │ ├── flags: newline - │ ├── name: :a - │ ├── name_loc: (133,21)-(133,22) = "a" - │ ├── receiver: - │ │ @ ConstantReadNode (location: (133,15)-(133,20)) - │ │ ├── flags: ∅ - │ │ └── name: :Const - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (133,11)-(133,14) = "def" - │ ├── operator_loc: (133,20)-(133,21) = "." - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (134,0)-(134,3) = "end" - ├── @ DefNode (location: (136,0)-(136,31)) - │ ├── flags: newline - │ ├── name: :a - │ ├── name_loc: (136,4)-(136,5) = "a" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (136,6)-(136,9)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: - │ │ │ @ ForwardingParameterNode (location: (136,6)-(136,9)) - │ │ │ └── flags: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (136,12)-(136,26)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ InterpolatedStringNode (location: (136,12)-(136,26)) - │ │ ├── flags: newline - │ │ ├── opening_loc: (136,12)-(136,13) = "\"" - │ │ ├── parts: (length: 2) - │ │ │ ├── @ StringNode (location: (136,13)-(136,16)) - │ │ │ │ ├── flags: static_literal, frozen - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── content_loc: (136,13)-(136,16) = "foo" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "foo" - │ │ │ └── @ EmbeddedStatementsNode (location: (136,16)-(136,25)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (136,16)-(136,18) = "\#{" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (136,18)-(136,24)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (136,18)-(136,24)) - │ │ │ │ ├── flags: ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :b - │ │ │ │ ├── message_loc: (136,18)-(136,19) = "b" - │ │ │ │ ├── opening_loc: (136,19)-(136,20) = "(" - │ │ │ │ ├── arguments: - │ │ │ │ │ @ ArgumentsNode (location: (136,20)-(136,23)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── arguments: (length: 1) - │ │ │ │ │ └── @ ForwardingArgumentsNode (location: (136,20)-(136,23)) - │ │ │ │ │ └── flags: ∅ - │ │ │ │ ├── closing_loc: (136,23)-(136,24) = ")" - │ │ │ │ └── block: ∅ - │ │ │ └── closing_loc: (136,24)-(136,25) = "}" - │ │ └── closing_loc: (136,25)-(136,26) = "\"" - │ ├── locals: [] - │ ├── def_keyword_loc: (136,0)-(136,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (136,5)-(136,6) = "(" - │ ├── rparen_loc: (136,9)-(136,10) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (136,28)-(136,31) = "end" - ├── @ DefNode (location: (138,0)-(140,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (138,4)-(138,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (139,2)-(139,30)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (139,2)-(139,30)) - │ │ ├── flags: newline - │ │ ├── receiver: - │ │ │ @ HashNode (location: (139,2)-(139,4)) - │ │ │ ├── flags: static_literal - │ │ │ ├── opening_loc: (139,2)-(139,3) = "{" - │ │ │ ├── elements: (length: 0) - │ │ │ └── closing_loc: (139,3)-(139,4) = "}" - │ │ ├── call_operator_loc: (139,4)-(139,5) = "." - │ │ ├── name: :merge - │ │ ├── message_loc: (139,5)-(139,10) = "merge" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (139,11)-(139,30)) - │ │ │ ├── flags: contains_keywords, contains_keyword_splat - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ KeywordHashNode (location: (139,11)-(139,30)) - │ │ │ ├── flags: ∅ - │ │ │ └── elements: (length: 3) - │ │ │ ├── @ AssocSplatNode (location: (139,11)-(139,16)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── value: - │ │ │ │ │ @ CallNode (location: (139,13)-(139,16)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :bar - │ │ │ │ │ ├── message_loc: (139,13)-(139,16) = "bar" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ └── operator_loc: (139,11)-(139,13) = "**" - │ │ │ ├── @ AssocSplatNode (location: (139,18)-(139,23)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── value: - │ │ │ │ │ @ CallNode (location: (139,20)-(139,23)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :baz - │ │ │ │ │ ├── message_loc: (139,20)-(139,23) = "baz" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ └── operator_loc: (139,18)-(139,20) = "**" - │ │ │ └── @ AssocSplatNode (location: (139,25)-(139,30)) - │ │ │ ├── flags: ∅ - │ │ │ ├── value: - │ │ │ │ @ CallNode (location: (139,27)-(139,30)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :qux - │ │ │ │ ├── message_loc: (139,27)-(139,30) = "qux" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── operator_loc: (139,25)-(139,27) = "**" - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (138,0)-(138,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (140,0)-(140,3) = "end" - ├── @ DefNode (location: (142,0)-(143,3)) - │ ├── flags: newline - │ ├── name: :bar - │ ├── name_loc: (142,4)-(142,7) = "bar" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (142,8)-(142,19)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 1) - │ │ │ └── @ OptionalKeywordParameterNode (location: (142,8)-(142,19)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :a - │ │ │ ├── name_loc: (142,8)-(142,10) = "a:" - │ │ │ └── value: - │ │ │ @ ParenthesesNode (location: (142,11)-(142,19)) - │ │ │ ├── flags: ∅ - │ │ │ ├── body: - │ │ │ │ @ StatementsNode (location: (142,12)-(142,18)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ RangeNode (location: (142,12)-(142,18)) - │ │ │ │ ├── flags: newline, static_literal, exclude_end - │ │ │ │ ├── left: - │ │ │ │ │ @ IntegerNode (location: (142,12)-(142,13)) - │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ └── value: 1 - │ │ │ │ ├── right: - │ │ │ │ │ @ IntegerNode (location: (142,16)-(142,18)) - │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ └── value: 10 - │ │ │ │ └── operator_loc: (142,13)-(142,16) = "..." - │ │ │ ├── opening_loc: (142,11)-(142,12) = "(" - │ │ │ └── closing_loc: (142,18)-(142,19) = ")" - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:a] - │ ├── def_keyword_loc: (142,0)-(142,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (142,7)-(142,8) = "(" - │ ├── rparen_loc: (142,19)-(142,20) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (143,0)-(143,3) = "end" - ├── @ DefNode (location: (145,0)-(146,3)) - │ ├── flags: newline - │ ├── name: :bar - │ ├── name_loc: (145,4)-(145,7) = "bar" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (145,8)-(145,18)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 1) - │ │ │ └── @ OptionalKeywordParameterNode (location: (145,8)-(145,18)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :a - │ │ │ ├── name_loc: (145,8)-(145,10) = "a:" - │ │ │ └── value: - │ │ │ @ ParenthesesNode (location: (145,11)-(145,18)) - │ │ │ ├── flags: ∅ - │ │ │ ├── body: - │ │ │ │ @ StatementsNode (location: (145,12)-(145,17)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ RangeNode (location: (145,12)-(145,17)) - │ │ │ │ ├── flags: newline, static_literal, exclude_end - │ │ │ │ ├── left: ∅ - │ │ │ │ ├── right: - │ │ │ │ │ @ IntegerNode (location: (145,15)-(145,17)) - │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ └── value: 10 - │ │ │ │ └── operator_loc: (145,12)-(145,15) = "..." - │ │ │ ├── opening_loc: (145,11)-(145,12) = "(" - │ │ │ └── closing_loc: (145,17)-(145,18) = ")" - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:a] - │ ├── def_keyword_loc: (145,0)-(145,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (145,7)-(145,8) = "(" - │ ├── rparen_loc: (145,18)-(145,19) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (146,0)-(146,3) = "end" - ├── @ DefNode (location: (148,0)-(149,3)) - │ ├── flags: newline - │ ├── name: :bar - │ ├── name_loc: (148,4)-(148,7) = "bar" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (148,8)-(148,17)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 1) - │ │ │ └── @ OptionalKeywordParameterNode (location: (148,8)-(148,17)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :a - │ │ │ ├── name_loc: (148,8)-(148,10) = "a:" - │ │ │ └── value: - │ │ │ @ ParenthesesNode (location: (148,11)-(148,17)) - │ │ │ ├── flags: ∅ - │ │ │ ├── body: - │ │ │ │ @ StatementsNode (location: (148,12)-(148,16)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ RangeNode (location: (148,12)-(148,16)) - │ │ │ │ ├── flags: newline, static_literal, exclude_end - │ │ │ │ ├── left: - │ │ │ │ │ @ IntegerNode (location: (148,12)-(148,13)) - │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ └── value: 1 - │ │ │ │ ├── right: ∅ - │ │ │ │ └── operator_loc: (148,13)-(148,16) = "..." - │ │ │ ├── opening_loc: (148,11)-(148,12) = "(" - │ │ │ └── closing_loc: (148,16)-(148,17) = ")" - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:a] - │ ├── def_keyword_loc: (148,0)-(148,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (148,7)-(148,8) = "(" - │ ├── rparen_loc: (148,17)-(148,18) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (149,0)-(149,3) = "end" - ├── @ DefNode (location: (151,0)-(152,3)) - │ ├── flags: newline - │ ├── name: :bar - │ ├── name_loc: (151,4)-(151,7) = "bar" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (151,8)-(151,20)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 1) - │ │ │ └── @ OptionalParameterNode (location: (151,8)-(151,20)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :a - │ │ │ ├── name_loc: (151,8)-(151,9) = "a" - │ │ │ ├── operator_loc: (151,10)-(151,11) = "=" - │ │ │ └── value: - │ │ │ @ ParenthesesNode (location: (151,12)-(151,20)) - │ │ │ ├── flags: ∅ - │ │ │ ├── body: - │ │ │ │ @ StatementsNode (location: (151,13)-(151,19)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ RangeNode (location: (151,13)-(151,19)) - │ │ │ │ ├── flags: newline, static_literal, exclude_end - │ │ │ │ ├── left: - │ │ │ │ │ @ IntegerNode (location: (151,13)-(151,14)) - │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ └── value: 1 - │ │ │ │ ├── right: - │ │ │ │ │ @ IntegerNode (location: (151,17)-(151,19)) - │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ └── value: 10 - │ │ │ │ └── operator_loc: (151,14)-(151,17) = "..." - │ │ │ ├── opening_loc: (151,12)-(151,13) = "(" - │ │ │ └── closing_loc: (151,19)-(151,20) = ")" - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:a] - │ ├── def_keyword_loc: (151,0)-(151,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (151,7)-(151,8) = "(" - │ ├── rparen_loc: (151,20)-(151,21) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (152,0)-(152,3) = "end" - ├── @ DefNode (location: (154,0)-(155,3)) - │ ├── flags: newline - │ ├── name: :bar - │ ├── name_loc: (154,4)-(154,7) = "bar" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (154,8)-(154,19)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 1) - │ │ │ └── @ OptionalParameterNode (location: (154,8)-(154,19)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :a - │ │ │ ├── name_loc: (154,8)-(154,9) = "a" - │ │ │ ├── operator_loc: (154,10)-(154,11) = "=" - │ │ │ └── value: - │ │ │ @ ParenthesesNode (location: (154,12)-(154,19)) - │ │ │ ├── flags: ∅ - │ │ │ ├── body: - │ │ │ │ @ StatementsNode (location: (154,13)-(154,18)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ RangeNode (location: (154,13)-(154,18)) - │ │ │ │ ├── flags: newline, static_literal, exclude_end - │ │ │ │ ├── left: ∅ - │ │ │ │ ├── right: - │ │ │ │ │ @ IntegerNode (location: (154,16)-(154,18)) - │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ └── value: 10 - │ │ │ │ └── operator_loc: (154,13)-(154,16) = "..." - │ │ │ ├── opening_loc: (154,12)-(154,13) = "(" - │ │ │ └── closing_loc: (154,18)-(154,19) = ")" - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:a] - │ ├── def_keyword_loc: (154,0)-(154,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (154,7)-(154,8) = "(" - │ ├── rparen_loc: (154,19)-(154,20) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (155,0)-(155,3) = "end" - ├── @ DefNode (location: (157,0)-(158,3)) - │ ├── flags: newline - │ ├── name: :bar - │ ├── name_loc: (157,4)-(157,7) = "bar" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (157,8)-(157,18)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 1) - │ │ │ └── @ OptionalParameterNode (location: (157,8)-(157,18)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :a - │ │ │ ├── name_loc: (157,8)-(157,9) = "a" - │ │ │ ├── operator_loc: (157,10)-(157,11) = "=" - │ │ │ └── value: - │ │ │ @ ParenthesesNode (location: (157,12)-(157,18)) - │ │ │ ├── flags: ∅ - │ │ │ ├── body: - │ │ │ │ @ StatementsNode (location: (157,13)-(157,17)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ RangeNode (location: (157,13)-(157,17)) - │ │ │ │ ├── flags: newline, static_literal, exclude_end - │ │ │ │ ├── left: - │ │ │ │ │ @ IntegerNode (location: (157,13)-(157,14)) - │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ └── value: 1 - │ │ │ │ ├── right: ∅ - │ │ │ │ └── operator_loc: (157,14)-(157,17) = "..." - │ │ │ ├── opening_loc: (157,12)-(157,13) = "(" - │ │ │ └── closing_loc: (157,17)-(157,18) = ")" - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:a] - │ ├── def_keyword_loc: (157,0)-(157,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (157,7)-(157,8) = "(" - │ ├── rparen_loc: (157,18)-(157,19) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (158,0)-(158,3) = "end" - ├── @ DefNode (location: (160,0)-(162,3)) - │ ├── flags: newline - │ ├── name: :method - │ ├── name_loc: (160,4)-(160,10) = "method" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (160,11)-(160,12)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (160,11)-(160,12)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :a - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (161,2)-(161,14)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (161,2)-(161,14)) - │ │ ├── flags: newline - │ │ ├── receiver: - │ │ │ @ CallNode (location: (161,2)-(161,6)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :item - │ │ │ ├── message_loc: (161,2)-(161,6) = "item" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :>> - │ │ ├── message_loc: (161,7)-(161,9) = ">>" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (161,10)-(161,14)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ CallNode (location: (161,10)-(161,14)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :a - │ │ │ ├── message_loc: (161,10)-(161,11) = "a" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: - │ │ │ @ BlockNode (location: (161,12)-(161,14)) - │ │ │ ├── flags: ∅ - │ │ │ ├── locals: [] - │ │ │ ├── parameters: ∅ - │ │ │ ├── body: ∅ - │ │ │ ├── opening_loc: (161,12)-(161,13) = "{" - │ │ │ └── closing_loc: (161,13)-(161,14) = "}" - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── locals: [:a] - │ ├── def_keyword_loc: (160,0)-(160,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (160,10)-(160,11) = "(" - │ ├── rparen_loc: (160,12)-(160,13) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (162,0)-(162,3) = "end" - ├── @ LocalVariableWriteNode (location: (164,0)-(164,7)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── depth: 0 - │ ├── name_loc: (164,0)-(164,3) = "foo" - │ ├── value: - │ │ @ IntegerNode (location: (164,6)-(164,7)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ └── operator_loc: (164,4)-(164,5) = "=" - ├── @ DefNode (location: (165,0)-(165,16)) - │ ├── flags: newline - │ ├── name: :bar - │ ├── name_loc: (165,8)-(165,11) = "bar" - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (165,4)-(165,7)) - │ │ ├── flags: ∅ - │ │ ├── name: :foo - │ │ └── depth: 0 - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (165,0)-(165,3) = "def" - │ ├── operator_loc: (165,7)-(165,8) = "." - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (165,13)-(165,16) = "end" - ├── @ DefNode (location: (167,0)-(167,18)) - │ ├── flags: newline - │ ├── name: :f - │ ├── name_loc: (167,4)-(167,5) = "f" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (167,6)-(167,7)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: - │ │ │ @ RestParameterNode (location: (167,6)-(167,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: ∅ - │ │ │ ├── name_loc: ∅ - │ │ │ └── operator_loc: (167,6)-(167,7) = "*" - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (167,10)-(167,13)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ ArrayNode (location: (167,10)-(167,13)) - │ │ ├── flags: newline, contains_splat - │ │ ├── elements: (length: 1) - │ │ │ └── @ SplatNode (location: (167,11)-(167,12)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (167,11)-(167,12) = "*" - │ │ │ └── expression: ∅ - │ │ ├── opening_loc: (167,10)-(167,11) = "[" - │ │ └── closing_loc: (167,12)-(167,13) = "]" - │ ├── locals: [] - │ ├── def_keyword_loc: (167,0)-(167,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (167,5)-(167,6) = "(" - │ ├── rparen_loc: (167,7)-(167,8) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (167,15)-(167,18) = "end" - ├── @ DefNode (location: (169,0)-(169,15)) - │ ├── flags: newline - │ ├── name: :f - │ ├── name_loc: (169,4)-(169,5) = "f" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (169,6)-(169,10)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 1) - │ │ │ └── @ OptionalKeywordParameterNode (location: (169,6)-(169,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :x - │ │ │ ├── name_loc: (169,6)-(169,8) = "x:" - │ │ │ └── value: - │ │ │ @ CallNode (location: (169,8)-(169,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── receiver: - │ │ │ │ @ CallNode (location: (169,9)-(169,10)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :a - │ │ │ │ ├── message_loc: (169,9)-(169,10) = "a" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :-@ - │ │ │ ├── message_loc: (169,8)-(169,9) = "-" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:x] - │ ├── def_keyword_loc: (169,0)-(169,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (169,12)-(169,15) = "end" - ├── @ DefNode (location: (171,0)-(171,15)) - │ ├── flags: newline - │ ├── name: :f - │ ├── name_loc: (171,4)-(171,5) = "f" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (171,6)-(171,10)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 1) - │ │ │ └── @ OptionalKeywordParameterNode (location: (171,6)-(171,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :x - │ │ │ ├── name_loc: (171,6)-(171,8) = "x:" - │ │ │ └── value: - │ │ │ @ CallNode (location: (171,8)-(171,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── receiver: - │ │ │ │ @ CallNode (location: (171,9)-(171,10)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :a - │ │ │ │ ├── message_loc: (171,9)-(171,10) = "a" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :+@ - │ │ │ ├── message_loc: (171,8)-(171,9) = "+" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:x] - │ ├── def_keyword_loc: (171,0)-(171,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (171,12)-(171,15) = "end" - ├── @ DefNode (location: (173,0)-(173,15)) - │ ├── flags: newline - │ ├── name: :f - │ ├── name_loc: (173,4)-(173,5) = "f" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (173,6)-(173,10)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 1) - │ │ │ └── @ OptionalKeywordParameterNode (location: (173,6)-(173,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :x - │ │ │ ├── name_loc: (173,6)-(173,8) = "x:" - │ │ │ └── value: - │ │ │ @ CallNode (location: (173,8)-(173,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── receiver: - │ │ │ │ @ CallNode (location: (173,9)-(173,10)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :a - │ │ │ │ ├── message_loc: (173,9)-(173,10) = "a" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :! - │ │ │ ├── message_loc: (173,8)-(173,9) = "!" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:x] - │ ├── def_keyword_loc: (173,0)-(173,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (173,12)-(173,15) = "end" - ├── @ DefNode (location: (175,0)-(175,20)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (175,4)-(175,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (175,8)-(175,15)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 1) - │ │ │ └── @ OptionalKeywordParameterNode (location: (175,8)-(175,15)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :x - │ │ │ ├── name_loc: (175,8)-(175,10) = "x:" - │ │ │ └── value: - │ │ │ @ StringNode (location: (175,10)-(175,15)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (175,10)-(175,12) = "%(" - │ │ │ ├── content_loc: (175,12)-(175,14) = "xx" - │ │ │ ├── closing_loc: (175,14)-(175,15) = ")" - │ │ │ └── unescaped: "xx" - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:x] - │ ├── def_keyword_loc: (175,0)-(175,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (175,17)-(175,20) = "end" - ├── @ DefNode (location: (177,0)-(179,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (177,4)-(177,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (177,8)-(177,11)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: - │ │ │ @ ForwardingParameterNode (location: (177,8)-(177,11)) - │ │ │ └── flags: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (178,2)-(178,10)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (178,2)-(178,10)) - │ │ ├── flags: newline, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (178,2)-(178,5) = "bar" - │ │ ├── opening_loc: (178,5)-(178,6) = "(" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (178,6)-(178,9)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ ForwardingArgumentsNode (location: (178,6)-(178,9)) - │ │ │ └── flags: ∅ - │ │ ├── closing_loc: (178,9)-(178,10) = ")" - │ │ └── block: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (177,0)-(177,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (177,7)-(177,8) = "(" - │ ├── rparen_loc: (177,11)-(177,12) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (179,0)-(179,3) = "end" - ├── @ DefNode (location: (181,0)-(181,42)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (181,4)-(181,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (181,8)-(181,37)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 1) - │ │ │ └── @ OptionalParameterNode (location: (181,8)-(181,37)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── name_loc: (181,8)-(181,11) = "bar" - │ │ │ ├── operator_loc: (181,12)-(181,13) = "=" - │ │ │ └── value: - │ │ │ @ ParenthesesNode (location: (181,14)-(181,37)) - │ │ │ ├── flags: ∅ - │ │ │ ├── body: - │ │ │ │ @ StatementsNode (location: (181,15)-(181,36)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 2) - │ │ │ │ ├── @ DefNode (location: (181,15)-(181,33)) - │ │ │ │ │ ├── flags: newline - │ │ │ │ │ ├── name: :baz - │ │ │ │ │ ├── name_loc: (181,19)-(181,22) = "baz" - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── parameters: - │ │ │ │ │ │ @ ParametersNode (location: (181,23)-(181,26)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ ├── requireds: (length: 1) - │ │ │ │ │ │ │ └── @ RequiredParameterNode (location: (181,23)-(181,26)) - │ │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ │ └── name: :bar - │ │ │ │ │ │ ├── optionals: (length: 0) - │ │ │ │ │ │ ├── rest: ∅ - │ │ │ │ │ │ ├── posts: (length: 0) - │ │ │ │ │ │ ├── keywords: (length: 0) - │ │ │ │ │ │ ├── keyword_rest: ∅ - │ │ │ │ │ │ └── block: ∅ - │ │ │ │ │ ├── body: - │ │ │ │ │ │ @ StatementsNode (location: (181,30)-(181,33)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ └── body: (length: 1) - │ │ │ │ │ │ └── @ LocalVariableReadNode (location: (181,30)-(181,33)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ ├── name: :bar - │ │ │ │ │ │ └── depth: 0 - │ │ │ │ │ ├── locals: [:bar] - │ │ │ │ │ ├── def_keyword_loc: (181,15)-(181,18) = "def" - │ │ │ │ │ ├── operator_loc: ∅ - │ │ │ │ │ ├── lparen_loc: (181,22)-(181,23) = "(" - │ │ │ │ │ ├── rparen_loc: (181,26)-(181,27) = ")" - │ │ │ │ │ ├── equal_loc: (181,28)-(181,29) = "=" - │ │ │ │ │ └── end_keyword_loc: ∅ - │ │ │ │ └── @ IntegerNode (location: (181,35)-(181,36)) - │ │ │ │ ├── flags: newline, static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ ├── opening_loc: (181,14)-(181,15) = "(" - │ │ │ └── closing_loc: (181,36)-(181,37) = ")" - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (181,41)-(181,42)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ IntegerNode (location: (181,41)-(181,42)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── locals: [:bar] - │ ├── def_keyword_loc: (181,0)-(181,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (181,7)-(181,8) = "(" - │ ├── rparen_loc: (181,37)-(181,38) = ")" - │ ├── equal_loc: (181,39)-(181,40) = "=" - │ └── end_keyword_loc: ∅ - └── @ DefNode (location: (183,0)-(183,37)) - ├── flags: newline - ├── name: :foo - ├── name_loc: (183,21)-(183,24) = "foo" - ├── receiver: - │ @ ParenthesesNode (location: (183,4)-(183,20)) - │ ├── flags: ∅ - │ ├── body: - │ │ @ ClassNode (location: (183,5)-(183,19)) - │ │ ├── flags: ∅ - │ │ ├── locals: [] - │ │ ├── class_keyword_loc: (183,5)-(183,10) = "class" - │ │ ├── constant_path: - │ │ │ @ ConstantReadNode (location: (183,11)-(183,14)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :Foo - │ │ ├── inheritance_operator_loc: ∅ - │ │ ├── superclass: ∅ - │ │ ├── body: ∅ - │ │ ├── end_keyword_loc: (183,16)-(183,19) = "end" - │ │ └── name: :Foo - │ ├── opening_loc: (183,4)-(183,5) = "(" - │ └── closing_loc: (183,19)-(183,20) = ")" - ├── parameters: - │ @ ParametersNode (location: (183,25)-(183,32)) - │ ├── flags: ∅ - │ ├── requireds: (length: 0) - │ ├── optionals: (length: 1) - │ │ └── @ OptionalParameterNode (location: (183,25)-(183,32)) - │ │ ├── flags: ∅ - │ │ ├── name: :bar - │ │ ├── name_loc: (183,25)-(183,28) = "bar" - │ │ ├── operator_loc: (183,29)-(183,30) = "=" - │ │ └── value: - │ │ @ IntegerNode (location: (183,31)-(183,32)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── rest: ∅ - │ ├── posts: (length: 0) - │ ├── keywords: (length: 0) - │ ├── keyword_rest: ∅ - │ └── block: ∅ - ├── body: - │ @ StatementsNode (location: (183,36)-(183,37)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ IntegerNode (location: (183,36)-(183,37)) - │ ├── flags: static_literal, decimal - │ └── value: 2 - ├── locals: [:bar] - ├── def_keyword_loc: (183,0)-(183,3) = "def" - ├── operator_loc: (183,20)-(183,21) = "." - ├── lparen_loc: (183,24)-(183,25) = "(" - ├── rparen_loc: (183,32)-(183,33) = ")" - ├── equal_loc: (183,34)-(183,35) = "=" - └── end_keyword_loc: ∅ diff --git a/test/prism/snapshots/modules.txt b/test/prism/snapshots/modules.txt deleted file mode 100644 index 5e001229014f1f..00000000000000 --- a/test/prism/snapshots/modules.txt +++ /dev/null @@ -1,204 +0,0 @@ -@ ProgramNode (location: (1,0)-(18,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(18,3)) - ├── flags: ∅ - └── body: (length: 7) - ├── @ ModuleNode (location: (1,0)-(1,18)) - │ ├── flags: newline - │ ├── locals: [:a] - │ ├── module_keyword_loc: (1,0)-(1,6) = "module" - │ ├── constant_path: - │ │ @ ConstantReadNode (location: (1,7)-(1,8)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── body: - │ │ @ StatementsNode (location: (1,9)-(1,14)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ LocalVariableWriteNode (location: (1,9)-(1,14)) - │ │ ├── flags: newline - │ │ ├── name: :a - │ │ ├── depth: 0 - │ │ ├── name_loc: (1,9)-(1,10) = "a" - │ │ ├── value: - │ │ │ @ IntegerNode (location: (1,13)-(1,14)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── operator_loc: (1,11)-(1,12) = "=" - │ ├── end_keyword_loc: (1,15)-(1,18) = "end" - │ └── name: :A - ├── @ InterpolatedStringNode (location: (3,0)-(3,18)) - │ ├── flags: newline - │ ├── opening_loc: (3,0)-(3,3) = "%Q{" - │ ├── parts: (length: 3) - │ │ ├── @ StringNode (location: (3,3)-(3,7)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (3,3)-(3,7) = "aaa " - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "aaa " - │ │ ├── @ EmbeddedStatementsNode (location: (3,7)-(3,13)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (3,7)-(3,9) = "\#{" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (3,9)-(3,12)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (3,9)-(3,12)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :bbb - │ │ │ │ ├── message_loc: (3,9)-(3,12) = "bbb" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── closing_loc: (3,12)-(3,13) = "}" - │ │ └── @ StringNode (location: (3,13)-(3,17)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (3,13)-(3,17) = " ccc" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: " ccc" - │ └── closing_loc: (3,17)-(3,18) = "}" - ├── @ ModuleNode (location: (5,0)-(6,3)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── module_keyword_loc: (5,0)-(5,6) = "module" - │ ├── constant_path: - │ │ @ ConstantPathNode (location: (5,7)-(5,11)) - │ │ ├── flags: ∅ - │ │ ├── parent: - │ │ │ @ CallNode (location: (5,7)-(5,8)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :m - │ │ │ ├── message_loc: (5,7)-(5,8) = "m" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── name: :M - │ │ ├── delimiter_loc: (5,8)-(5,10) = "::" - │ │ └── name_loc: (5,10)-(5,11) = "M" - │ ├── body: ∅ - │ ├── end_keyword_loc: (6,0)-(6,3) = "end" - │ └── name: :M - ├── @ ModuleNode (location: (8,0)-(9,19)) - │ ├── flags: newline - │ ├── locals: [:x] - │ ├── module_keyword_loc: (8,0)-(8,6) = "module" - │ ├── constant_path: - │ │ @ ConstantReadNode (location: (8,7)-(8,8)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── body: - │ │ @ BeginNode (location: (8,0)-(9,19)) - │ │ ├── flags: ∅ - │ │ ├── begin_keyword_loc: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (9,1)-(9,6)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ LocalVariableWriteNode (location: (9,1)-(9,6)) - │ │ │ ├── flags: newline - │ │ │ ├── name: :x - │ │ │ ├── depth: 0 - │ │ │ ├── name_loc: (9,1)-(9,2) = "x" - │ │ │ ├── value: - │ │ │ │ @ IntegerNode (location: (9,5)-(9,6)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ └── operator_loc: (9,3)-(9,4) = "=" - │ │ ├── rescue_clause: - │ │ │ @ RescueNode (location: (9,8)-(9,14)) - │ │ │ ├── flags: ∅ - │ │ │ ├── keyword_loc: (9,8)-(9,14) = "rescue" - │ │ │ ├── exceptions: (length: 0) - │ │ │ ├── operator_loc: ∅ - │ │ │ ├── reference: ∅ - │ │ │ ├── statements: ∅ - │ │ │ └── subsequent: ∅ - │ │ ├── else_clause: ∅ - │ │ ├── ensure_clause: ∅ - │ │ └── end_keyword_loc: (9,16)-(9,19) = "end" - │ ├── end_keyword_loc: (9,16)-(9,19) = "end" - │ └── name: :A - ├── @ ModuleNode (location: (11,0)-(12,3)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── module_keyword_loc: (11,0)-(11,6) = "module" - │ ├── constant_path: - │ │ @ ConstantPathNode (location: (11,7)-(11,10)) - │ │ ├── flags: ∅ - │ │ ├── parent: ∅ - │ │ ├── name: :A - │ │ ├── delimiter_loc: (11,7)-(11,9) = "::" - │ │ └── name_loc: (11,9)-(11,10) = "A" - │ ├── body: ∅ - │ ├── end_keyword_loc: (12,0)-(12,3) = "end" - │ └── name: :A - ├── @ ModuleNode (location: (14,0)-(15,3)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── module_keyword_loc: (14,0)-(14,6) = "module" - │ ├── constant_path: - │ │ @ ConstantPathNode (location: (14,7)-(14,13)) - │ │ ├── flags: ∅ - │ │ ├── parent: - │ │ │ @ CallNode (location: (14,7)-(14,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── receiver: - │ │ │ │ @ ConstantReadNode (location: (14,7)-(14,8)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :A - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :[] - │ │ │ ├── message_loc: (14,8)-(14,10) = "[]" - │ │ │ ├── opening_loc: (14,8)-(14,9) = "[" - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: (14,9)-(14,10) = "]" - │ │ │ └── block: ∅ - │ │ ├── name: :B - │ │ ├── delimiter_loc: (14,10)-(14,12) = "::" - │ │ └── name_loc: (14,12)-(14,13) = "B" - │ ├── body: ∅ - │ ├── end_keyword_loc: (15,0)-(15,3) = "end" - │ └── name: :B - └── @ ModuleNode (location: (17,0)-(18,3)) - ├── flags: newline - ├── locals: [] - ├── module_keyword_loc: (17,0)-(17,6) = "module" - ├── constant_path: - │ @ ConstantPathNode (location: (17,7)-(17,14)) - │ ├── flags: ∅ - │ ├── parent: - │ │ @ CallNode (location: (17,7)-(17,11)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ ConstantReadNode (location: (17,7)-(17,8)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :A - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :[] - │ │ ├── message_loc: (17,8)-(17,11) = "[1]" - │ │ ├── opening_loc: (17,8)-(17,9) = "[" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (17,9)-(17,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (17,9)-(17,10)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── closing_loc: (17,10)-(17,11) = "]" - │ │ └── block: ∅ - │ ├── name: :B - │ ├── delimiter_loc: (17,11)-(17,13) = "::" - │ └── name_loc: (17,13)-(17,14) = "B" - ├── body: ∅ - ├── end_keyword_loc: (18,0)-(18,3) = "end" - └── name: :B diff --git a/test/prism/snapshots/multi_write.txt b/test/prism/snapshots/multi_write.txt deleted file mode 100644 index fa36f50423f762..00000000000000 --- a/test/prism/snapshots/multi_write.txt +++ /dev/null @@ -1,111 +0,0 @@ -@ ProgramNode (location: (1,0)-(4,26)) -├── flags: ∅ -├── locals: [:foo, :bar] -└── statements: - @ StatementsNode (location: (1,0)-(4,26)) - ├── flags: ∅ - └── body: (length: 4) - ├── @ LocalVariableWriteNode (location: (1,0)-(1,18)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── depth: 0 - │ ├── name_loc: (1,0)-(1,3) = "foo" - │ ├── value: - │ │ @ RescueModifierNode (location: (1,6)-(1,18)) - │ │ ├── flags: ∅ - │ │ ├── expression: - │ │ │ @ IntegerNode (location: (1,6)-(1,7)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── keyword_loc: (1,8)-(1,14) = "rescue" - │ │ └── rescue_expression: - │ │ @ NilNode (location: (1,15)-(1,18)) - │ │ └── flags: static_literal - │ └── operator_loc: (1,4)-(1,5) = "=" - ├── @ MultiWriteNode (location: (2,0)-(2,23)) - │ ├── flags: newline - │ ├── lefts: (length: 2) - │ │ ├── @ LocalVariableTargetNode (location: (2,0)-(2,3)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :foo - │ │ │ └── depth: 0 - │ │ └── @ LocalVariableTargetNode (location: (2,5)-(2,8)) - │ │ ├── flags: ∅ - │ │ ├── name: :bar - │ │ └── depth: 0 - │ ├── rest: ∅ - │ ├── rights: (length: 0) - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── operator_loc: (2,9)-(2,10) = "=" - │ └── value: - │ @ RescueModifierNode (location: (2,11)-(2,23)) - │ ├── flags: ∅ - │ ├── expression: - │ │ @ IntegerNode (location: (2,11)-(2,12)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── keyword_loc: (2,13)-(2,19) = "rescue" - │ └── rescue_expression: - │ @ NilNode (location: (2,20)-(2,23)) - │ └── flags: static_literal - ├── @ RescueModifierNode (location: (3,0)-(3,21)) - │ ├── flags: newline - │ ├── expression: - │ │ @ LocalVariableWriteNode (location: (3,0)-(3,10)) - │ │ ├── flags: ∅ - │ │ ├── name: :foo - │ │ ├── depth: 0 - │ │ ├── name_loc: (3,0)-(3,3) = "foo" - │ │ ├── value: - │ │ │ @ ArrayNode (location: (3,6)-(3,10)) - │ │ │ ├── flags: static_literal - │ │ │ ├── elements: (length: 2) - │ │ │ │ ├── @ IntegerNode (location: (3,6)-(3,7)) - │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ └── value: 1 - │ │ │ │ └── @ IntegerNode (location: (3,9)-(3,10)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 2 - │ │ │ ├── opening_loc: ∅ - │ │ │ └── closing_loc: ∅ - │ │ └── operator_loc: (3,4)-(3,5) = "=" - │ ├── keyword_loc: (3,11)-(3,17) = "rescue" - │ └── rescue_expression: - │ @ NilNode (location: (3,18)-(3,21)) - │ └── flags: static_literal - └── @ MultiWriteNode (location: (4,0)-(4,26)) - ├── flags: newline - ├── lefts: (length: 2) - │ ├── @ LocalVariableTargetNode (location: (4,0)-(4,3)) - │ │ ├── flags: ∅ - │ │ ├── name: :foo - │ │ └── depth: 0 - │ └── @ LocalVariableTargetNode (location: (4,5)-(4,8)) - │ ├── flags: ∅ - │ ├── name: :bar - │ └── depth: 0 - ├── rest: ∅ - ├── rights: (length: 0) - ├── lparen_loc: ∅ - ├── rparen_loc: ∅ - ├── operator_loc: (4,9)-(4,10) = "=" - └── value: - @ RescueModifierNode (location: (4,11)-(4,26)) - ├── flags: ∅ - ├── expression: - │ @ ArrayNode (location: (4,11)-(4,15)) - │ ├── flags: static_literal - │ ├── elements: (length: 2) - │ │ ├── @ IntegerNode (location: (4,11)-(4,12)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── @ IntegerNode (location: (4,14)-(4,15)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── opening_loc: ∅ - │ └── closing_loc: ∅ - ├── keyword_loc: (4,16)-(4,22) = "rescue" - └── rescue_expression: - @ NilNode (location: (4,23)-(4,26)) - └── flags: static_literal diff --git a/test/prism/snapshots/newline_terminated.txt b/test/prism/snapshots/newline_terminated.txt deleted file mode 100644 index 85e996fa5a2377..00000000000000 --- a/test/prism/snapshots/newline_terminated.txt +++ /dev/null @@ -1,109 +0,0 @@ -@ ProgramNode (location: (3,0)-(41,0)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (3,0)-(41,0)) - ├── flags: ∅ - └── body: (length: 17) - ├── @ StringNode (location: (3,0)-(3,6)) - │ ├── flags: newline - │ ├── opening_loc: (3,0)-(3,2) = "% " - │ ├── content_loc: (3,2)-(3,5) = "abc" - │ ├── closing_loc: (3,5)-(3,6) = " " - │ └── unescaped: "abc" - ├── @ StringNode (location: (4,0)-(4,6)) - │ ├── flags: newline - │ ├── opening_loc: (4,0)-(4,2) = "%\t" - │ ├── content_loc: (4,2)-(4,5) = "abc" - │ ├── closing_loc: (4,5)-(4,6) = "\t" - │ └── unescaped: "abc" - ├── @ StringNode (location: (5,0)-(5,6)) - │ ├── flags: newline - │ ├── opening_loc: (5,0)-(5,2) = "%\v" - │ ├── content_loc: (5,2)-(5,5) = "abc" - │ ├── closing_loc: (5,5)-(5,6) = "\v" - │ └── unescaped: "abc" - ├── @ StringNode (location: (6,0)-(6,6)) - │ ├── flags: newline - │ ├── opening_loc: (6,0)-(6,2) = "%\r" - │ ├── content_loc: (6,2)-(6,5) = "abc" - │ ├── closing_loc: (6,5)-(6,6) = "\r" - │ └── unescaped: "abc" - ├── @ StringNode (location: (7,0)-(9,0)) - │ ├── flags: newline - │ ├── opening_loc: (7,0)-(8,0) = "%\n" - │ ├── content_loc: (8,0)-(8,3) = "abc" - │ ├── closing_loc: (8,3)-(9,0) = "\n" - │ └── unescaped: "abc" - ├── @ StringNode (location: (10,0)-(10,6)) - │ ├── flags: newline - │ ├── opening_loc: (10,0)-(10,2) = "%\u0000" - │ ├── content_loc: (10,2)-(10,5) = "abc" - │ ├── closing_loc: (10,5)-(10,6) = "\u0000" - │ └── unescaped: "abc" - ├── @ StringNode (location: (11,0)-(13,0)) - │ ├── flags: newline - │ ├── opening_loc: (11,0)-(12,0) = "%\n" - │ ├── content_loc: (12,0)-(12,3) = "abc" - │ ├── closing_loc: (12,3)-(13,0) = "\n" - │ └── unescaped: "abc" - ├── @ StringNode (location: (14,0)-(16,0)) - │ ├── flags: newline - │ ├── opening_loc: (14,0)-(15,0) = "%\n" - │ ├── content_loc: (15,0)-(15,4) = "\rabc" - │ ├── closing_loc: (15,4)-(16,0) = "\n" - │ └── unescaped: "\rabc" - ├── @ StringNode (location: (17,0)-(19,0)) - │ ├── flags: newline - │ ├── opening_loc: (17,0)-(18,0) = "%\n" - │ ├── content_loc: (18,0)-(18,4) = "\rabc" - │ ├── closing_loc: (18,4)-(19,0) = "\n" - │ └── unescaped: "\rabc" - ├── @ StringNode (location: (20,0)-(22,0)) - │ ├── flags: newline - │ ├── opening_loc: (20,0)-(21,0) = "%\n" - │ ├── content_loc: (21,0)-(21,3) = "abc" - │ ├── closing_loc: (21,3)-(22,0) = "\n" - │ └── unescaped: "abc" - ├── @ StringNode (location: (23,0)-(23,6)) - │ ├── flags: newline - │ ├── opening_loc: (23,0)-(23,2) = "%\r" - │ ├── content_loc: (23,2)-(23,5) = "abc" - │ ├── closing_loc: (23,5)-(23,6) = "\r" - │ └── unescaped: "abc" - ├── @ StringNode (location: (24,0)-(26,0)) - │ ├── flags: newline - │ ├── opening_loc: (24,0)-(25,0) = "%\n" - │ ├── content_loc: (25,0)-(25,3) = "abc" - │ ├── closing_loc: (25,3)-(26,0) = "\n" - │ └── unescaped: "abc" - ├── @ StringNode (location: (27,0)-(29,0)) - │ ├── flags: newline - │ ├── opening_loc: (27,0)-(28,0) = "%\n" - │ ├── content_loc: (28,0)-(28,3) = "abc" - │ ├── closing_loc: (28,3)-(29,0) = "\n" - │ └── unescaped: "abc" - ├── @ StringNode (location: (30,0)-(32,0)) - │ ├── flags: newline - │ ├── opening_loc: (30,0)-(31,0) = "%\n" - │ ├── content_loc: (31,0)-(31,3) = "foo" - │ ├── closing_loc: (31,3)-(32,0) = "\n" - │ └── unescaped: "foo" - ├── @ StringNode (location: (33,0)-(35,0)) - │ ├── flags: newline - │ ├── opening_loc: (33,0)-(34,0) = "%q\n" - │ ├── content_loc: (34,0)-(34,3) = "foo" - │ ├── closing_loc: (34,3)-(35,0) = "\n" - │ └── unescaped: "foo" - ├── @ StringNode (location: (36,0)-(38,0)) - │ ├── flags: newline - │ ├── opening_loc: (36,0)-(37,0) = "%Q\n" - │ ├── content_loc: (37,0)-(37,3) = "foo" - │ ├── closing_loc: (37,3)-(38,0) = "\n" - │ └── unescaped: "foo" - └── @ RegularExpressionNode (location: (39,0)-(41,0)) - ├── flags: newline, static_literal, forced_us_ascii_encoding - ├── opening_loc: (39,0)-(40,0) = "%r\n" - ├── content_loc: (40,0)-(40,3) = "foo" - ├── closing_loc: (40,3)-(41,0) = "\n" - └── unescaped: "foo" diff --git a/test/prism/snapshots/next.txt b/test/prism/snapshots/next.txt deleted file mode 100644 index 5b0becea1c81dd..00000000000000 --- a/test/prism/snapshots/next.txt +++ /dev/null @@ -1,372 +0,0 @@ -@ ProgramNode (location: (1,0)-(24,15)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(24,15)) - ├── flags: ∅ - └── body: (length: 10) - ├── @ CallNode (location: (1,0)-(1,12)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :tap - │ ├── message_loc: (1,0)-(1,3) = "tap" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (1,4)-(1,12)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (1,6)-(1,10)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ NextNode (location: (1,6)-(1,10)) - │ │ ├── flags: newline - │ │ ├── arguments: ∅ - │ │ └── keyword_loc: (1,6)-(1,10) = "next" - │ ├── opening_loc: (1,4)-(1,5) = "{" - │ └── closing_loc: (1,11)-(1,12) = "}" - ├── @ CallNode (location: (3,0)-(3,26)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :tap - │ ├── message_loc: (3,0)-(3,3) = "tap" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (3,4)-(3,26)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (3,6)-(3,24)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ NextNode (location: (3,6)-(3,24)) - │ │ ├── flags: newline - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (3,11)-(3,24)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 3) - │ │ │ ├── @ ParenthesesNode (location: (3,11)-(3,14)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── body: - │ │ │ │ │ @ StatementsNode (location: (3,12)-(3,13)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── body: (length: 1) - │ │ │ │ │ └── @ IntegerNode (location: (3,12)-(3,13)) - │ │ │ │ │ ├── flags: newline, static_literal, decimal - │ │ │ │ │ └── value: 1 - │ │ │ │ ├── opening_loc: (3,11)-(3,12) = "(" - │ │ │ │ └── closing_loc: (3,13)-(3,14) = ")" - │ │ │ ├── @ ParenthesesNode (location: (3,16)-(3,19)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── body: - │ │ │ │ │ @ StatementsNode (location: (3,17)-(3,18)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── body: (length: 1) - │ │ │ │ │ └── @ IntegerNode (location: (3,17)-(3,18)) - │ │ │ │ │ ├── flags: newline, static_literal, decimal - │ │ │ │ │ └── value: 2 - │ │ │ │ ├── opening_loc: (3,16)-(3,17) = "(" - │ │ │ │ └── closing_loc: (3,18)-(3,19) = ")" - │ │ │ └── @ ParenthesesNode (location: (3,21)-(3,24)) - │ │ │ ├── flags: ∅ - │ │ │ ├── body: - │ │ │ │ @ StatementsNode (location: (3,22)-(3,23)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ IntegerNode (location: (3,22)-(3,23)) - │ │ │ │ ├── flags: newline, static_literal, decimal - │ │ │ │ └── value: 3 - │ │ │ ├── opening_loc: (3,21)-(3,22) = "(" - │ │ │ └── closing_loc: (3,23)-(3,24) = ")" - │ │ └── keyword_loc: (3,6)-(3,10) = "next" - │ ├── opening_loc: (3,4)-(3,5) = "{" - │ └── closing_loc: (3,25)-(3,26) = "}" - ├── @ CallNode (location: (5,0)-(5,14)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :tap - │ ├── message_loc: (5,0)-(5,3) = "tap" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (5,4)-(5,14)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (5,6)-(5,12)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ NextNode (location: (5,6)-(5,12)) - │ │ ├── flags: newline - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (5,11)-(5,12)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (5,11)-(5,12)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── keyword_loc: (5,6)-(5,10) = "next" - │ ├── opening_loc: (5,4)-(5,5) = "{" - │ └── closing_loc: (5,13)-(5,14) = "}" - ├── @ CallNode (location: (7,0)-(8,3)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :tap - │ ├── message_loc: (7,0)-(7,3) = "tap" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (7,4)-(8,3)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (7,6)-(8,1)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ NextNode (location: (7,6)-(8,1)) - │ │ ├── flags: newline - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (7,11)-(8,1)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 3) - │ │ │ ├── @ IntegerNode (location: (7,11)-(7,12)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ ├── @ IntegerNode (location: (7,14)-(7,15)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 2 - │ │ │ └── @ IntegerNode (location: (8,0)-(8,1)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 3 - │ │ └── keyword_loc: (7,6)-(7,10) = "next" - │ ├── opening_loc: (7,4)-(7,5) = "{" - │ └── closing_loc: (8,2)-(8,3) = "}" - ├── @ CallNode (location: (10,0)-(10,20)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :tap - │ ├── message_loc: (10,0)-(10,3) = "tap" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (10,4)-(10,20)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (10,6)-(10,18)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ NextNode (location: (10,6)-(10,18)) - │ │ ├── flags: newline - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (10,11)-(10,18)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 3) - │ │ │ ├── @ IntegerNode (location: (10,11)-(10,12)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ ├── @ IntegerNode (location: (10,14)-(10,15)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 2 - │ │ │ └── @ IntegerNode (location: (10,17)-(10,18)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 3 - │ │ └── keyword_loc: (10,6)-(10,10) = "next" - │ ├── opening_loc: (10,4)-(10,5) = "{" - │ └── closing_loc: (10,19)-(10,20) = "}" - ├── @ CallNode (location: (12,0)-(12,22)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :tap - │ ├── message_loc: (12,0)-(12,3) = "tap" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (12,4)-(12,22)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (12,6)-(12,20)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ NextNode (location: (12,6)-(12,20)) - │ │ ├── flags: newline - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (12,11)-(12,20)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ ArrayNode (location: (12,11)-(12,20)) - │ │ │ ├── flags: static_literal - │ │ │ ├── elements: (length: 3) - │ │ │ │ ├── @ IntegerNode (location: (12,12)-(12,13)) - │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ └── value: 1 - │ │ │ │ ├── @ IntegerNode (location: (12,15)-(12,16)) - │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ └── value: 2 - │ │ │ │ └── @ IntegerNode (location: (12,18)-(12,19)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 3 - │ │ │ ├── opening_loc: (12,11)-(12,12) = "[" - │ │ │ └── closing_loc: (12,19)-(12,20) = "]" - │ │ └── keyword_loc: (12,6)-(12,10) = "next" - │ ├── opening_loc: (12,4)-(12,5) = "{" - │ └── closing_loc: (12,21)-(12,22) = "}" - ├── @ CallNode (location: (14,0)-(17,3)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :tap - │ ├── message_loc: (14,0)-(14,3) = "tap" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (14,4)-(17,3)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (14,6)-(17,1)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ NextNode (location: (14,6)-(17,1)) - │ │ ├── flags: newline - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (14,10)-(17,1)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ ParenthesesNode (location: (14,10)-(17,1)) - │ │ │ ├── flags: ∅ - │ │ │ ├── body: - │ │ │ │ @ StatementsNode (location: (15,2)-(16,3)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 2) - │ │ │ │ ├── @ IntegerNode (location: (15,2)-(15,3)) - │ │ │ │ │ ├── flags: newline, static_literal, decimal - │ │ │ │ │ └── value: 1 - │ │ │ │ └── @ IntegerNode (location: (16,2)-(16,3)) - │ │ │ │ ├── flags: newline, static_literal, decimal - │ │ │ │ └── value: 2 - │ │ │ ├── opening_loc: (14,10)-(14,11) = "(" - │ │ │ └── closing_loc: (17,0)-(17,1) = ")" - │ │ └── keyword_loc: (14,6)-(14,10) = "next" - │ ├── opening_loc: (14,4)-(14,5) = "{" - │ └── closing_loc: (17,2)-(17,3) = "}" - ├── @ CallNode (location: (19,0)-(20,3)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :tap - │ ├── message_loc: (19,0)-(19,3) = "tap" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (19,4)-(20,3)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (19,6)-(20,1)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 2) - │ │ ├── @ NextNode (location: (19,6)-(19,10)) - │ │ │ ├── flags: newline - │ │ │ ├── arguments: ∅ - │ │ │ └── keyword_loc: (19,6)-(19,10) = "next" - │ │ └── @ IntegerNode (location: (20,0)-(20,1)) - │ │ ├── flags: newline, static_literal, decimal - │ │ └── value: 1 - │ ├── opening_loc: (19,4)-(19,5) = "{" - │ └── closing_loc: (20,2)-(20,3) = "}" - ├── @ CallNode (location: (22,0)-(22,14)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :tap - │ ├── message_loc: (22,0)-(22,3) = "tap" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (22,4)-(22,14)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (22,6)-(22,12)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ NextNode (location: (22,6)-(22,12)) - │ │ ├── flags: newline - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (22,10)-(22,12)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ ParenthesesNode (location: (22,10)-(22,12)) - │ │ │ ├── flags: ∅ - │ │ │ ├── body: ∅ - │ │ │ ├── opening_loc: (22,10)-(22,11) = "(" - │ │ │ └── closing_loc: (22,11)-(22,12) = ")" - │ │ └── keyword_loc: (22,6)-(22,10) = "next" - │ ├── opening_loc: (22,4)-(22,5) = "{" - │ └── closing_loc: (22,13)-(22,14) = "}" - └── @ CallNode (location: (24,0)-(24,15)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :tap - ├── message_loc: (24,0)-(24,3) = "tap" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (24,4)-(24,15)) - ├── flags: ∅ - ├── locals: [] - ├── parameters: ∅ - ├── body: - │ @ StatementsNode (location: (24,6)-(24,13)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ NextNode (location: (24,6)-(24,13)) - │ ├── flags: newline - │ ├── arguments: - │ │ @ ArgumentsNode (location: (24,10)-(24,13)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ ParenthesesNode (location: (24,10)-(24,13)) - │ │ ├── flags: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (24,11)-(24,12)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ IntegerNode (location: (24,11)-(24,12)) - │ │ │ ├── flags: newline, static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── opening_loc: (24,10)-(24,11) = "(" - │ │ └── closing_loc: (24,12)-(24,13) = ")" - │ └── keyword_loc: (24,6)-(24,10) = "next" - ├── opening_loc: (24,4)-(24,5) = "{" - └── closing_loc: (24,14)-(24,15) = "}" diff --git a/test/prism/snapshots/nils.txt b/test/prism/snapshots/nils.txt deleted file mode 100644 index 275bc373a534c7..00000000000000 --- a/test/prism/snapshots/nils.txt +++ /dev/null @@ -1,43 +0,0 @@ -@ ProgramNode (location: (1,0)-(12,11)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(12,11)) - ├── flags: ∅ - └── body: (length: 5) - ├── @ NilNode (location: (1,0)-(1,3)) - │ └── flags: newline, static_literal - ├── @ ParenthesesNode (location: (3,0)-(3,2)) - │ ├── flags: newline - │ ├── body: ∅ - │ ├── opening_loc: (3,0)-(3,1) = "(" - │ └── closing_loc: (3,1)-(3,2) = ")" - ├── @ ParenthesesNode (location: (5,0)-(8,1)) - │ ├── flags: newline - │ ├── body: ∅ - │ ├── opening_loc: (5,0)-(5,1) = "(" - │ └── closing_loc: (8,0)-(8,1) = ")" - ├── @ PostExecutionNode (location: (10,0)-(10,9)) - │ ├── flags: newline - │ ├── statements: - │ │ @ StatementsNode (location: (10,6)-(10,7)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ IntegerNode (location: (10,6)-(10,7)) - │ │ ├── flags: newline, static_literal, decimal - │ │ └── value: 1 - │ ├── keyword_loc: (10,0)-(10,3) = "END" - │ ├── opening_loc: (10,4)-(10,5) = "{" - │ └── closing_loc: (10,8)-(10,9) = "}" - └── @ PreExecutionNode (location: (12,0)-(12,11)) - ├── flags: newline - ├── statements: - │ @ StatementsNode (location: (12,8)-(12,9)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ IntegerNode (location: (12,8)-(12,9)) - │ ├── flags: newline, static_literal, decimal - │ └── value: 1 - ├── keyword_loc: (12,0)-(12,5) = "BEGIN" - ├── opening_loc: (12,6)-(12,7) = "{" - └── closing_loc: (12,10)-(12,11) = "}" diff --git a/test/prism/snapshots/non_alphanumeric_methods.txt b/test/prism/snapshots/non_alphanumeric_methods.txt deleted file mode 100644 index 2d29d365e467a8..00000000000000 --- a/test/prism/snapshots/non_alphanumeric_methods.txt +++ /dev/null @@ -1,545 +0,0 @@ -@ ProgramNode (location: (1,0)-(105,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(105,3)) - ├── flags: ∅ - └── body: (length: 36) - ├── @ DefNode (location: (1,0)-(2,3)) - │ ├── flags: newline - │ ├── name: :! - │ ├── name_loc: (1,4)-(1,5) = "!" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (1,0)-(1,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (2,0)-(2,3) = "end" - ├── @ DefNode (location: (4,0)-(5,3)) - │ ├── flags: newline - │ ├── name: :!= - │ ├── name_loc: (4,4)-(4,6) = "!=" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (4,0)-(4,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (5,0)-(5,3) = "end" - ├── @ DefNode (location: (7,0)-(8,3)) - │ ├── flags: newline - │ ├── name: :!~ - │ ├── name_loc: (7,4)-(7,6) = "!~" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (7,0)-(7,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (8,0)-(8,3) = "end" - ├── @ DefNode (location: (10,0)-(11,3)) - │ ├── flags: newline - │ ├── name: :% - │ ├── name_loc: (10,4)-(10,5) = "%" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (10,0)-(10,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (11,0)-(11,3) = "end" - ├── @ DefNode (location: (13,0)-(14,3)) - │ ├── flags: newline - │ ├── name: :+ - │ ├── name_loc: (13,9)-(13,10) = "+" - │ ├── receiver: - │ │ @ SelfNode (location: (13,4)-(13,8)) - │ │ └── flags: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (13,0)-(13,3) = "def" - │ ├── operator_loc: (13,8)-(13,9) = "." - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (14,0)-(14,3) = "end" - ├── @ DefNode (location: (16,0)-(17,3)) - │ ├── flags: newline - │ ├── name: :& - │ ├── name_loc: (16,4)-(16,5) = "&" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (16,0)-(16,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (17,0)-(17,3) = "end" - ├── @ DefNode (location: (19,0)-(20,3)) - │ ├── flags: newline - │ ├── name: :* - │ ├── name_loc: (19,4)-(19,5) = "*" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (19,0)-(19,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (20,0)-(20,3) = "end" - ├── @ DefNode (location: (22,0)-(23,3)) - │ ├── flags: newline - │ ├── name: :** - │ ├── name_loc: (22,4)-(22,6) = "**" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (22,0)-(22,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (23,0)-(23,3) = "end" - ├── @ StringNode (location: (25,0)-(25,6)) - │ ├── flags: newline - │ ├── opening_loc: (25,0)-(25,2) = "%|" - │ ├── content_loc: (25,2)-(25,5) = "abc" - │ ├── closing_loc: (25,5)-(25,6) = "|" - │ └── unescaped: "abc" - ├── @ DefNode (location: (27,0)-(28,3)) - │ ├── flags: newline - │ ├── name: :+ - │ ├── name_loc: (27,4)-(27,5) = "+" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (27,6)-(27,9)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: - │ │ │ @ KeywordRestParameterNode (location: (27,6)-(27,9)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :b - │ │ │ ├── name_loc: (27,8)-(27,9) = "b" - │ │ │ └── operator_loc: (27,6)-(27,8) = "**" - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:b] - │ ├── def_keyword_loc: (27,0)-(27,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (28,0)-(28,3) = "end" - ├── @ DefNode (location: (30,0)-(31,3)) - │ ├── flags: newline - │ ├── name: :+ - │ ├── name_loc: (30,4)-(30,5) = "+" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (30,0)-(30,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (30,5)-(30,6) = "(" - │ ├── rparen_loc: (30,6)-(30,7) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (31,0)-(31,3) = "end" - ├── @ DefNode (location: (33,0)-(34,3)) - │ ├── flags: newline - │ ├── name: :+ - │ ├── name_loc: (33,4)-(33,5) = "+" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (33,6)-(33,7)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (33,6)-(33,7)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :b - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:b] - │ ├── def_keyword_loc: (33,0)-(33,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (34,0)-(34,3) = "end" - ├── @ DefNode (location: (36,0)-(37,3)) - │ ├── flags: newline - │ ├── name: :+ - │ ├── name_loc: (36,9)-(36,10) = "+" - │ ├── receiver: - │ │ @ SelfNode (location: (36,4)-(36,8)) - │ │ └── flags: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (36,0)-(36,3) = "def" - │ ├── operator_loc: (36,8)-(36,9) = "." - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (37,0)-(37,3) = "end" - ├── @ DefNode (location: (39,0)-(40,3)) - │ ├── flags: newline - │ ├── name: :+ - │ ├── name_loc: (39,4)-(39,5) = "+" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (39,0)-(39,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (40,0)-(40,3) = "end" - ├── @ DefNode (location: (42,0)-(43,3)) - │ ├── flags: newline - │ ├── name: :+@ - │ ├── name_loc: (42,4)-(42,6) = "+@" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (42,0)-(42,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (43,0)-(43,3) = "end" - ├── @ DefNode (location: (45,0)-(46,3)) - │ ├── flags: newline - │ ├── name: :- - │ ├── name_loc: (45,4)-(45,5) = "-" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (45,0)-(45,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (46,0)-(46,3) = "end" - ├── @ DefNode (location: (48,0)-(48,11)) - │ ├── flags: newline - │ ├── name: :- - │ ├── name_loc: (48,6)-(48,7) = "-" - │ ├── receiver: - │ │ @ CallNode (location: (48,4)-(48,5)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (48,4)-(48,5) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (48,0)-(48,3) = "def" - │ ├── operator_loc: (48,5)-(48,6) = "." - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (48,8)-(48,11) = "end" - ├── @ DefNode (location: (50,0)-(51,3)) - │ ├── flags: newline - │ ├── name: :-@ - │ ├── name_loc: (50,4)-(50,6) = "-@" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (50,0)-(50,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (51,0)-(51,3) = "end" - ├── @ DefNode (location: (53,0)-(54,3)) - │ ├── flags: newline - │ ├── name: :/ - │ ├── name_loc: (53,4)-(53,5) = "/" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (53,0)-(53,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (54,0)-(54,3) = "end" - ├── @ DefNode (location: (56,0)-(57,3)) - │ ├── flags: newline - │ ├── name: :< - │ ├── name_loc: (56,4)-(56,5) = "<" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (56,0)-(56,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (57,0)-(57,3) = "end" - ├── @ DefNode (location: (59,0)-(60,3)) - │ ├── flags: newline - │ ├── name: :<< - │ ├── name_loc: (59,4)-(59,6) = "<<" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (59,0)-(59,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (60,0)-(60,3) = "end" - ├── @ DefNode (location: (62,0)-(63,3)) - │ ├── flags: newline - │ ├── name: :<= - │ ├── name_loc: (62,4)-(62,6) = "<=" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (62,0)-(62,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (63,0)-(63,3) = "end" - ├── @ DefNode (location: (65,0)-(66,3)) - │ ├── flags: newline - │ ├── name: :<=> - │ ├── name_loc: (65,4)-(65,7) = "<=>" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (65,0)-(65,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (66,0)-(66,3) = "end" - ├── @ DefNode (location: (68,0)-(69,3)) - │ ├── flags: newline - │ ├── name: :== - │ ├── name_loc: (68,4)-(68,6) = "==" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (68,0)-(68,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (69,0)-(69,3) = "end" - ├── @ DefNode (location: (71,0)-(72,3)) - │ ├── flags: newline - │ ├── name: :=== - │ ├── name_loc: (71,4)-(71,7) = "===" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (71,0)-(71,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (72,0)-(72,3) = "end" - ├── @ DefNode (location: (74,0)-(75,3)) - │ ├── flags: newline - │ ├── name: :=~ - │ ├── name_loc: (74,4)-(74,6) = "=~" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (74,0)-(74,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (75,0)-(75,3) = "end" - ├── @ DefNode (location: (77,0)-(78,3)) - │ ├── flags: newline - │ ├── name: :> - │ ├── name_loc: (77,4)-(77,5) = ">" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (77,0)-(77,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (78,0)-(78,3) = "end" - ├── @ DefNode (location: (80,0)-(81,3)) - │ ├── flags: newline - │ ├── name: :>= - │ ├── name_loc: (80,4)-(80,6) = ">=" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (80,0)-(80,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (81,0)-(81,3) = "end" - ├── @ DefNode (location: (83,0)-(84,3)) - │ ├── flags: newline - │ ├── name: :>> - │ ├── name_loc: (83,4)-(83,6) = ">>" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (83,0)-(83,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (84,0)-(84,3) = "end" - ├── @ DefNode (location: (86,0)-(87,3)) - │ ├── flags: newline - │ ├── name: :[] - │ ├── name_loc: (86,4)-(86,6) = "[]" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (86,0)-(86,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (87,0)-(87,3) = "end" - ├── @ DefNode (location: (89,0)-(90,3)) - │ ├── flags: newline - │ ├── name: :[]= - │ ├── name_loc: (89,4)-(89,7) = "[]=" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (89,0)-(89,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (90,0)-(90,3) = "end" - ├── @ DefNode (location: (92,0)-(93,3)) - │ ├── flags: newline - │ ├── name: :^ - │ ├── name_loc: (92,4)-(92,5) = "^" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (92,0)-(92,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (93,0)-(93,3) = "end" - ├── @ DefNode (location: (95,0)-(96,3)) - │ ├── flags: newline - │ ├── name: :` - │ ├── name_loc: (95,4)-(95,5) = "`" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (95,0)-(95,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (96,0)-(96,3) = "end" - ├── @ DefNode (location: (98,0)-(99,3)) - │ ├── flags: newline - │ ├── name: :` - │ ├── name_loc: (98,9)-(98,10) = "`" - │ ├── receiver: - │ │ @ SelfNode (location: (98,4)-(98,8)) - │ │ └── flags: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (98,0)-(98,3) = "def" - │ ├── operator_loc: (98,8)-(98,9) = "." - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (99,0)-(99,3) = "end" - ├── @ DefNode (location: (101,0)-(102,3)) - │ ├── flags: newline - │ ├── name: :| - │ ├── name_loc: (101,4)-(101,5) = "|" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (101,0)-(101,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (102,0)-(102,3) = "end" - └── @ DefNode (location: (104,0)-(105,3)) - ├── flags: newline - ├── name: :~ - ├── name_loc: (104,4)-(104,5) = "~" - ├── receiver: ∅ - ├── parameters: ∅ - ├── body: ∅ - ├── locals: [] - ├── def_keyword_loc: (104,0)-(104,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: ∅ - ├── rparen_loc: ∅ - ├── equal_loc: ∅ - └── end_keyword_loc: (105,0)-(105,3) = "end" diff --git a/test/prism/snapshots/not.txt b/test/prism/snapshots/not.txt deleted file mode 100644 index e164b18813a44d..00000000000000 --- a/test/prism/snapshots/not.txt +++ /dev/null @@ -1,360 +0,0 @@ -@ ProgramNode (location: (1,0)-(37,16)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(37,16)) - ├── flags: ∅ - └── body: (length: 10) - ├── @ AndNode (location: (1,0)-(1,19)) - │ ├── flags: newline - │ ├── left: - │ │ @ CallNode (location: (1,0)-(1,7)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ CallNode (location: (1,4)-(1,7)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (1,4)-(1,7) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :! - │ │ ├── message_loc: (1,0)-(1,3) = "not" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── right: - │ │ @ CallNode (location: (1,12)-(1,19)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ CallNode (location: (1,16)-(1,19)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (1,16)-(1,19) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :! - │ │ ├── message_loc: (1,12)-(1,15) = "not" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── operator_loc: (1,8)-(1,11) = "and" - ├── @ CallNode (location: (3,0)-(3,16)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ AndNode (location: (3,4)-(3,15)) - │ │ ├── flags: ∅ - │ │ ├── left: - │ │ │ @ CallNode (location: (3,4)-(3,7)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (3,4)-(3,7) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── right: - │ │ │ @ CallNode (location: (3,12)-(3,15)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (3,12)-(3,15) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: (3,8)-(3,11) = "and" - │ ├── call_operator_loc: ∅ - │ ├── name: :! - │ ├── message_loc: (3,0)-(3,3) = "not" - │ ├── opening_loc: (3,3)-(3,4) = "(" - │ ├── arguments: ∅ - │ ├── closing_loc: (3,15)-(3,16) = ")" - │ └── block: ∅ - ├── @ CallNode (location: (5,0)-(5,7)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (5,4)-(5,7)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (5,4)-(5,7) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :! - │ ├── message_loc: (5,0)-(5,3) = "not" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ AndNode (location: (7,0)-(8,5)) - │ ├── flags: newline - │ ├── left: - │ │ @ CallNode (location: (7,0)-(7,7)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ CallNode (location: (7,4)-(7,7)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (7,4)-(7,7) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :! - │ │ ├── message_loc: (7,0)-(7,3) = "not" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── right: - │ │ @ CallNode (location: (7,12)-(8,5)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ CallNode (location: (8,2)-(8,5)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (8,2)-(8,5) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :! - │ │ ├── message_loc: (7,12)-(7,15) = "not" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── operator_loc: (7,8)-(7,11) = "and" - ├── @ AndNode (location: (11,0)-(13,5)) - │ ├── flags: newline - │ ├── left: - │ │ @ CallNode (location: (11,0)-(11,7)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ CallNode (location: (11,4)-(11,7)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (11,4)-(11,7) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :! - │ │ ├── message_loc: (11,0)-(11,3) = "not" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── right: - │ │ @ CallNode (location: (12,4)-(13,5)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ CallNode (location: (13,2)-(13,5)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (13,2)-(13,5) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :! - │ │ ├── message_loc: (12,4)-(12,7) = "not" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── operator_loc: (11,8)-(11,11) = "and" - ├── @ AndNode (location: (16,0)-(20,5)) - │ ├── flags: newline - │ ├── left: - │ │ @ CallNode (location: (16,0)-(16,7)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ CallNode (location: (16,4)-(16,7)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (16,4)-(16,7) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :! - │ │ ├── message_loc: (16,0)-(16,3) = "not" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── right: - │ │ @ CallNode (location: (17,2)-(20,5)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ CallNode (location: (20,2)-(20,5)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (20,2)-(20,5) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :! - │ │ ├── message_loc: (17,2)-(17,5) = "not" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── operator_loc: (16,8)-(16,11) = "and" - ├── @ CallNode (location: (22,0)-(25,1)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (22,4)-(22,7)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (22,4)-(22,7) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :! - │ ├── message_loc: (22,0)-(22,3) = "not" - │ ├── opening_loc: (22,3)-(22,4) = "(" - │ ├── arguments: ∅ - │ ├── closing_loc: (25,0)-(25,1) = ")" - │ └── block: ∅ - ├── @ CallNode (location: (27,0)-(33,3)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (30,0)-(30,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (30,0)-(30,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :! - │ ├── message_loc: (27,0)-(27,3) = "not" - │ ├── opening_loc: (27,3)-(27,4) = "(" - │ ├── arguments: ∅ - │ ├── closing_loc: (33,2)-(33,3) = ")" - │ └── block: ∅ - ├── @ CallNode (location: (35,0)-(35,14)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ FlipFlopNode (location: (35,4)-(35,14)) - │ │ ├── flags: ∅ - │ │ ├── left: - │ │ │ @ CallNode (location: (35,4)-(35,7)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (35,4)-(35,7) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── right: - │ │ │ @ CallNode (location: (35,11)-(35,14)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (35,11)-(35,14) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: (35,8)-(35,10) = ".." - │ ├── call_operator_loc: ∅ - │ ├── name: :! - │ ├── message_loc: (35,0)-(35,3) = "not" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── @ CallNode (location: (37,0)-(37,16)) - ├── flags: newline - ├── receiver: - │ @ ParenthesesNode (location: (37,4)-(37,16)) - │ ├── flags: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (37,5)-(37,15)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ FlipFlopNode (location: (37,5)-(37,15)) - │ │ ├── flags: newline - │ │ ├── left: - │ │ │ @ CallNode (location: (37,5)-(37,8)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (37,5)-(37,8) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── right: - │ │ │ @ CallNode (location: (37,12)-(37,15)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (37,12)-(37,15) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: (37,9)-(37,11) = ".." - │ ├── opening_loc: (37,4)-(37,5) = "(" - │ └── closing_loc: (37,15)-(37,16) = ")" - ├── call_operator_loc: ∅ - ├── name: :! - ├── message_loc: (37,0)-(37,3) = "not" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/numbers.txt b/test/prism/snapshots/numbers.txt deleted file mode 100644 index 4512427ef320ad..00000000000000 --- a/test/prism/snapshots/numbers.txt +++ /dev/null @@ -1,147 +0,0 @@ -@ ProgramNode (location: (1,0)-(67,5)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(67,5)) - ├── flags: ∅ - └── body: (length: 34) - ├── @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: newline, static_literal, decimal - │ └── value: 0 - ├── @ IntegerNode (location: (3,0)-(3,1)) - │ ├── flags: newline, static_literal, decimal - │ └── value: 1 - ├── @ FloatNode (location: (5,0)-(5,3)) - │ ├── flags: newline, static_literal - │ └── value: 1.0 - ├── @ IntegerNode (location: (7,0)-(7,1)) - │ ├── flags: newline, static_literal, decimal - │ └── value: 2 - ├── @ IntegerNode (location: (9,0)-(9,3)) - │ ├── flags: newline, static_literal, binary - │ └── value: 0 - ├── @ IntegerNode (location: (11,0)-(11,3)) - │ ├── flags: newline, static_literal, binary - │ └── value: 1 - ├── @ IntegerNode (location: (13,0)-(13,4)) - │ ├── flags: newline, static_literal, binary - │ └── value: 2 - ├── @ IntegerNode (location: (15,0)-(15,3)) - │ ├── flags: newline, static_literal, decimal - │ └── value: 0 - ├── @ IntegerNode (location: (17,0)-(17,3)) - │ ├── flags: newline, static_literal, decimal - │ └── value: 1 - ├── @ IntegerNode (location: (19,0)-(19,3)) - │ ├── flags: newline, static_literal, decimal - │ └── value: 2 - ├── @ IntegerNode (location: (21,0)-(21,2)) - │ ├── flags: newline, static_literal, octal - │ └── value: 0 - ├── @ IntegerNode (location: (23,0)-(23,2)) - │ ├── flags: newline, static_literal, octal - │ └── value: 1 - ├── @ IntegerNode (location: (25,0)-(25,2)) - │ ├── flags: newline, static_literal, octal - │ └── value: 2 - ├── @ IntegerNode (location: (27,0)-(27,3)) - │ ├── flags: newline, static_literal, octal - │ └── value: 0 - ├── @ IntegerNode (location: (29,0)-(29,3)) - │ ├── flags: newline, static_literal, octal - │ └── value: 1 - ├── @ IntegerNode (location: (31,0)-(31,3)) - │ ├── flags: newline, static_literal, octal - │ └── value: 2 - ├── @ IntegerNode (location: (33,0)-(33,3)) - │ ├── flags: newline, static_literal, hexadecimal - │ └── value: 0 - ├── @ IntegerNode (location: (35,0)-(35,3)) - │ ├── flags: newline, static_literal, hexadecimal - │ └── value: 1 - ├── @ IntegerNode (location: (37,0)-(37,3)) - │ ├── flags: newline, static_literal, hexadecimal - │ └── value: 2 - ├── @ ImaginaryNode (location: (39,0)-(39,2)) - │ ├── flags: newline, static_literal - │ └── numeric: - │ @ IntegerNode (location: (39,0)-(39,1)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── @ RationalNode (location: (41,0)-(41,2)) - │ ├── flags: newline, static_literal, decimal - │ ├── numerator: 1 - │ └── denominator: 1 - ├── @ IntegerNode (location: (43,0)-(43,2)) - │ ├── flags: newline, static_literal, decimal - │ └── value: -1 - ├── @ ImaginaryNode (location: (45,0)-(45,3)) - │ ├── flags: newline, static_literal - │ └── numeric: - │ @ RationalNode (location: (45,0)-(45,2)) - │ ├── flags: static_literal, decimal - │ ├── numerator: 1 - │ └── denominator: 1 - ├── @ RationalNode (location: (47,0)-(47,4)) - │ ├── flags: newline, static_literal, decimal - │ ├── numerator: 6 - │ └── denominator: 5 - ├── @ ImaginaryNode (location: (49,0)-(49,5)) - │ ├── flags: newline, static_literal - │ └── numeric: - │ @ RationalNode (location: (49,0)-(49,4)) - │ ├── flags: static_literal, decimal - │ ├── numerator: 6 - │ └── denominator: 5 - ├── @ ImaginaryNode (location: (51,0)-(51,4)) - │ ├── flags: newline, static_literal - │ └── numeric: - │ @ RationalNode (location: (51,0)-(51,3)) - │ ├── flags: static_literal, decimal - │ ├── numerator: -1 - │ └── denominator: 1 - ├── @ RationalNode (location: (53,0)-(53,5)) - │ ├── flags: newline, static_literal, decimal - │ ├── numerator: -6 - │ └── denominator: 5 - ├── @ ImaginaryNode (location: (55,0)-(55,6)) - │ ├── flags: newline, static_literal - │ └── numeric: - │ @ RationalNode (location: (55,0)-(55,5)) - │ ├── flags: static_literal, decimal - │ ├── numerator: -6 - │ └── denominator: 5 - ├── @ RationalNode (location: (57,0)-(57,4)) - │ ├── flags: newline, static_literal, octal - │ ├── numerator: 1 - │ └── denominator: 1 - ├── @ ImaginaryNode (location: (59,0)-(59,4)) - │ ├── flags: newline, static_literal - │ └── numeric: - │ @ IntegerNode (location: (59,0)-(59,3)) - │ ├── flags: static_literal, octal - │ └── value: 1 - ├── @ ImaginaryNode (location: (61,0)-(61,5)) - │ ├── flags: newline, static_literal - │ └── numeric: - │ @ RationalNode (location: (61,0)-(61,4)) - │ ├── flags: static_literal, octal - │ ├── numerator: 1 - │ └── denominator: 1 - ├── @ RationalNode (location: (63,0)-(63,4)) - │ ├── flags: newline, static_literal, decimal - │ ├── numerator: 1 - │ └── denominator: 1 - ├── @ ImaginaryNode (location: (65,0)-(65,4)) - │ ├── flags: newline, static_literal - │ └── numeric: - │ @ IntegerNode (location: (65,0)-(65,3)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - └── @ ImaginaryNode (location: (67,0)-(67,5)) - ├── flags: newline, static_literal - └── numeric: - @ RationalNode (location: (67,0)-(67,4)) - ├── flags: static_literal, binary - ├── numerator: 1 - └── denominator: 1 diff --git a/test/prism/snapshots/patterns.txt b/test/prism/snapshots/patterns.txt deleted file mode 100644 index 1857bcd21c3358..00000000000000 --- a/test/prism/snapshots/patterns.txt +++ /dev/null @@ -1,5570 +0,0 @@ -@ ProgramNode (location: (1,0)-(220,31)) -├── flags: ∅ -├── locals: [:bar, :baz, :qux, :b, :a, :foo, :x, :_a] -└── statements: - @ StatementsNode (location: (1,0)-(220,31)) - ├── flags: ∅ - └── body: (length: 182) - ├── @ MatchRequiredNode (location: (1,0)-(1,10)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (1,0)-(1,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (1,0)-(1,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ LocalVariableTargetNode (location: (1,7)-(1,10)) - │ │ ├── flags: ∅ - │ │ ├── name: :bar - │ │ └── depth: 0 - │ └── operator_loc: (1,4)-(1,6) = "=>" - ├── @ MatchRequiredNode (location: (2,0)-(2,8)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (2,0)-(2,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (2,0)-(2,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ IntegerNode (location: (2,7)-(2,8)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ └── operator_loc: (2,4)-(2,6) = "=>" - ├── @ MatchRequiredNode (location: (3,0)-(3,10)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (3,0)-(3,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (3,0)-(3,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ FloatNode (location: (3,7)-(3,10)) - │ │ ├── flags: static_literal - │ │ └── value: 1.0 - │ └── operator_loc: (3,4)-(3,6) = "=>" - ├── @ MatchRequiredNode (location: (4,0)-(4,9)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (4,0)-(4,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (4,0)-(4,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ ImaginaryNode (location: (4,7)-(4,9)) - │ │ ├── flags: static_literal - │ │ └── numeric: - │ │ @ IntegerNode (location: (4,7)-(4,8)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ └── operator_loc: (4,4)-(4,6) = "=>" - ├── @ MatchRequiredNode (location: (5,0)-(5,9)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (5,0)-(5,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (5,0)-(5,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ RationalNode (location: (5,7)-(5,9)) - │ │ ├── flags: static_literal, decimal - │ │ ├── numerator: 1 - │ │ └── denominator: 1 - │ └── operator_loc: (5,4)-(5,6) = "=>" - ├── @ MatchRequiredNode (location: (6,0)-(6,11)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (6,0)-(6,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (6,0)-(6,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ SymbolNode (location: (6,7)-(6,11)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (6,7)-(6,8) = ":" - │ │ ├── value_loc: (6,8)-(6,11) = "foo" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "foo" - │ └── operator_loc: (6,4)-(6,6) = "=>" - ├── @ MatchRequiredNode (location: (7,0)-(7,14)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (7,0)-(7,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (7,0)-(7,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ SymbolNode (location: (7,7)-(7,14)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (7,7)-(7,10) = "%s[" - │ │ ├── value_loc: (7,10)-(7,13) = "foo" - │ │ ├── closing_loc: (7,13)-(7,14) = "]" - │ │ └── unescaped: "foo" - │ └── operator_loc: (7,4)-(7,6) = "=>" - ├── @ MatchRequiredNode (location: (8,0)-(8,13)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (8,0)-(8,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (8,0)-(8,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ SymbolNode (location: (8,7)-(8,13)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (8,7)-(8,9) = ":\"" - │ │ ├── value_loc: (8,9)-(8,12) = "foo" - │ │ ├── closing_loc: (8,12)-(8,13) = "\"" - │ │ └── unescaped: "foo" - │ └── operator_loc: (8,4)-(8,6) = "=>" - ├── @ MatchRequiredNode (location: (9,0)-(9,12)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (9,0)-(9,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (9,0)-(9,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ RegularExpressionNode (location: (9,7)-(9,12)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (9,7)-(9,8) = "/" - │ │ ├── content_loc: (9,8)-(9,11) = "foo" - │ │ ├── closing_loc: (9,11)-(9,12) = "/" - │ │ └── unescaped: "foo" - │ └── operator_loc: (9,4)-(9,6) = "=>" - ├── @ MatchRequiredNode (location: (10,0)-(10,12)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (10,0)-(10,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (10,0)-(10,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ XStringNode (location: (10,7)-(10,12)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (10,7)-(10,8) = "`" - │ │ ├── content_loc: (10,8)-(10,11) = "foo" - │ │ ├── closing_loc: (10,11)-(10,12) = "`" - │ │ └── unescaped: "foo" - │ └── operator_loc: (10,4)-(10,6) = "=>" - ├── @ MatchRequiredNode (location: (11,0)-(11,14)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (11,0)-(11,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (11,0)-(11,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ XStringNode (location: (11,7)-(11,14)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (11,7)-(11,10) = "%x[" - │ │ ├── content_loc: (11,10)-(11,13) = "foo" - │ │ ├── closing_loc: (11,13)-(11,14) = "]" - │ │ └── unescaped: "foo" - │ └── operator_loc: (11,4)-(11,6) = "=>" - ├── @ MatchRequiredNode (location: (12,0)-(12,14)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (12,0)-(12,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (12,0)-(12,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ ArrayNode (location: (12,7)-(12,14)) - │ │ ├── flags: static_literal - │ │ ├── elements: (length: 1) - │ │ │ └── @ SymbolNode (location: (12,10)-(12,13)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (12,10)-(12,13) = "foo" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "foo" - │ │ ├── opening_loc: (12,7)-(12,10) = "%i[" - │ │ └── closing_loc: (12,13)-(12,14) = "]" - │ └── operator_loc: (12,4)-(12,6) = "=>" - ├── @ MatchRequiredNode (location: (13,0)-(13,14)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (13,0)-(13,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (13,0)-(13,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ ArrayNode (location: (13,7)-(13,14)) - │ │ ├── flags: static_literal - │ │ ├── elements: (length: 1) - │ │ │ └── @ SymbolNode (location: (13,10)-(13,13)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (13,10)-(13,13) = "foo" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "foo" - │ │ ├── opening_loc: (13,7)-(13,10) = "%I[" - │ │ └── closing_loc: (13,13)-(13,14) = "]" - │ └── operator_loc: (13,4)-(13,6) = "=>" - ├── @ MatchRequiredNode (location: (14,0)-(14,14)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (14,0)-(14,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (14,0)-(14,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ ArrayNode (location: (14,7)-(14,14)) - │ │ ├── flags: ∅ - │ │ ├── elements: (length: 1) - │ │ │ └── @ StringNode (location: (14,10)-(14,13)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (14,10)-(14,13) = "foo" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "foo" - │ │ ├── opening_loc: (14,7)-(14,10) = "%w[" - │ │ └── closing_loc: (14,13)-(14,14) = "]" - │ └── operator_loc: (14,4)-(14,6) = "=>" - ├── @ MatchRequiredNode (location: (15,0)-(15,14)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (15,0)-(15,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (15,0)-(15,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ ArrayNode (location: (15,7)-(15,14)) - │ │ ├── flags: ∅ - │ │ ├── elements: (length: 1) - │ │ │ └── @ StringNode (location: (15,10)-(15,13)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (15,10)-(15,13) = "foo" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "foo" - │ │ ├── opening_loc: (15,7)-(15,10) = "%W[" - │ │ └── closing_loc: (15,13)-(15,14) = "]" - │ └── operator_loc: (15,4)-(15,6) = "=>" - ├── @ MatchRequiredNode (location: (16,0)-(16,14)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (16,0)-(16,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (16,0)-(16,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ StringNode (location: (16,7)-(16,14)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (16,7)-(16,10) = "%q[" - │ │ ├── content_loc: (16,10)-(16,13) = "foo" - │ │ ├── closing_loc: (16,13)-(16,14) = "]" - │ │ └── unescaped: "foo" - │ └── operator_loc: (16,4)-(16,6) = "=>" - ├── @ MatchRequiredNode (location: (17,0)-(17,14)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (17,0)-(17,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (17,0)-(17,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ StringNode (location: (17,7)-(17,14)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (17,7)-(17,10) = "%Q[" - │ │ ├── content_loc: (17,10)-(17,13) = "foo" - │ │ ├── closing_loc: (17,13)-(17,14) = "]" - │ │ └── unescaped: "foo" - │ └── operator_loc: (17,4)-(17,6) = "=>" - ├── @ MatchRequiredNode (location: (18,0)-(18,12)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (18,0)-(18,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (18,0)-(18,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ StringNode (location: (18,7)-(18,12)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (18,7)-(18,8) = "\"" - │ │ ├── content_loc: (18,8)-(18,11) = "foo" - │ │ ├── closing_loc: (18,11)-(18,12) = "\"" - │ │ └── unescaped: "foo" - │ └── operator_loc: (18,4)-(18,6) = "=>" - ├── @ MatchRequiredNode (location: (19,0)-(19,10)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (19,0)-(19,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (19,0)-(19,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ NilNode (location: (19,7)-(19,10)) - │ │ └── flags: static_literal - │ └── operator_loc: (19,4)-(19,6) = "=>" - ├── @ MatchRequiredNode (location: (20,0)-(20,11)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (20,0)-(20,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (20,0)-(20,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ SelfNode (location: (20,7)-(20,11)) - │ │ └── flags: ∅ - │ └── operator_loc: (20,4)-(20,6) = "=>" - ├── @ MatchRequiredNode (location: (21,0)-(21,11)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (21,0)-(21,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (21,0)-(21,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ TrueNode (location: (21,7)-(21,11)) - │ │ └── flags: static_literal - │ └── operator_loc: (21,4)-(21,6) = "=>" - ├── @ MatchRequiredNode (location: (22,0)-(22,12)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (22,0)-(22,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (22,0)-(22,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ FalseNode (location: (22,7)-(22,12)) - │ │ └── flags: static_literal - │ └── operator_loc: (22,4)-(22,6) = "=>" - ├── @ MatchRequiredNode (location: (23,0)-(23,15)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (23,0)-(23,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (23,0)-(23,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ SourceFileNode (location: (23,7)-(23,15)) - │ │ ├── flags: ∅ - │ │ └── filepath: "patterns.txt" - │ └── operator_loc: (23,4)-(23,6) = "=>" - ├── @ MatchRequiredNode (location: (24,0)-(24,15)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (24,0)-(24,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (24,0)-(24,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ SourceLineNode (location: (24,7)-(24,15)) - │ │ └── flags: static_literal - │ └── operator_loc: (24,4)-(24,6) = "=>" - ├── @ MatchRequiredNode (location: (25,0)-(25,19)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (25,0)-(25,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (25,0)-(25,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ SourceEncodingNode (location: (25,7)-(25,19)) - │ │ └── flags: static_literal - │ └── operator_loc: (25,4)-(25,6) = "=>" - ├── @ MatchRequiredNode (location: (26,0)-(26,17)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (26,0)-(26,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (26,0)-(26,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ LambdaNode (location: (26,7)-(26,17)) - │ │ ├── flags: ∅ - │ │ ├── locals: [] - │ │ ├── operator_loc: (26,7)-(26,9) = "->" - │ │ ├── opening_loc: (26,10)-(26,11) = "{" - │ │ ├── closing_loc: (26,16)-(26,17) = "}" - │ │ ├── parameters: ∅ - │ │ └── body: - │ │ @ StatementsNode (location: (26,12)-(26,15)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ LocalVariableReadNode (location: (26,12)-(26,15)) - │ │ ├── flags: newline - │ │ ├── name: :bar - │ │ └── depth: 1 - │ └── operator_loc: (26,4)-(26,6) = "=>" - ├── @ MatchRequiredNode (location: (28,0)-(28,13)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (28,0)-(28,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (28,0)-(28,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ RangeNode (location: (28,7)-(28,13)) - │ │ ├── flags: static_literal - │ │ ├── left: - │ │ │ @ IntegerNode (location: (28,7)-(28,8)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── right: - │ │ │ @ IntegerNode (location: (28,12)-(28,13)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── operator_loc: (28,9)-(28,11) = ".." - │ └── operator_loc: (28,4)-(28,6) = "=>" - ├── @ MatchRequiredNode (location: (29,0)-(29,17)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (29,0)-(29,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (29,0)-(29,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ RangeNode (location: (29,7)-(29,17)) - │ │ ├── flags: ∅ - │ │ ├── left: - │ │ │ @ FloatNode (location: (29,7)-(29,10)) - │ │ │ ├── flags: static_literal - │ │ │ └── value: 1.0 - │ │ ├── right: - │ │ │ @ FloatNode (location: (29,14)-(29,17)) - │ │ │ ├── flags: static_literal - │ │ │ └── value: 1.0 - │ │ └── operator_loc: (29,11)-(29,13) = ".." - │ └── operator_loc: (29,4)-(29,6) = "=>" - ├── @ MatchRequiredNode (location: (30,0)-(30,15)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (30,0)-(30,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (30,0)-(30,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ RangeNode (location: (30,7)-(30,15)) - │ │ ├── flags: ∅ - │ │ ├── left: - │ │ │ @ ImaginaryNode (location: (30,7)-(30,9)) - │ │ │ ├── flags: static_literal - │ │ │ └── numeric: - │ │ │ @ IntegerNode (location: (30,7)-(30,8)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── right: - │ │ │ @ ImaginaryNode (location: (30,13)-(30,15)) - │ │ │ ├── flags: static_literal - │ │ │ └── numeric: - │ │ │ @ IntegerNode (location: (30,13)-(30,14)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── operator_loc: (30,10)-(30,12) = ".." - │ └── operator_loc: (30,4)-(30,6) = "=>" - ├── @ MatchRequiredNode (location: (31,0)-(31,15)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (31,0)-(31,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (31,0)-(31,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ RangeNode (location: (31,7)-(31,15)) - │ │ ├── flags: ∅ - │ │ ├── left: - │ │ │ @ RationalNode (location: (31,7)-(31,9)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ ├── numerator: 1 - │ │ │ └── denominator: 1 - │ │ ├── right: - │ │ │ @ RationalNode (location: (31,13)-(31,15)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ ├── numerator: 1 - │ │ │ └── denominator: 1 - │ │ └── operator_loc: (31,10)-(31,12) = ".." - │ └── operator_loc: (31,4)-(31,6) = "=>" - ├── @ MatchRequiredNode (location: (32,0)-(32,19)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (32,0)-(32,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (32,0)-(32,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ RangeNode (location: (32,7)-(32,19)) - │ │ ├── flags: ∅ - │ │ ├── left: - │ │ │ @ SymbolNode (location: (32,7)-(32,11)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (32,7)-(32,8) = ":" - │ │ │ ├── value_loc: (32,8)-(32,11) = "foo" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "foo" - │ │ ├── right: - │ │ │ @ SymbolNode (location: (32,15)-(32,19)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (32,15)-(32,16) = ":" - │ │ │ ├── value_loc: (32,16)-(32,19) = "foo" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "foo" - │ │ └── operator_loc: (32,12)-(32,14) = ".." - │ └── operator_loc: (32,4)-(32,6) = "=>" - ├── @ MatchRequiredNode (location: (33,0)-(33,25)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (33,0)-(33,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (33,0)-(33,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ RangeNode (location: (33,7)-(33,25)) - │ │ ├── flags: ∅ - │ │ ├── left: - │ │ │ @ SymbolNode (location: (33,7)-(33,14)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (33,7)-(33,10) = "%s[" - │ │ │ ├── value_loc: (33,10)-(33,13) = "foo" - │ │ │ ├── closing_loc: (33,13)-(33,14) = "]" - │ │ │ └── unescaped: "foo" - │ │ ├── right: - │ │ │ @ SymbolNode (location: (33,18)-(33,25)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (33,18)-(33,21) = "%s[" - │ │ │ ├── value_loc: (33,21)-(33,24) = "foo" - │ │ │ ├── closing_loc: (33,24)-(33,25) = "]" - │ │ │ └── unescaped: "foo" - │ │ └── operator_loc: (33,15)-(33,17) = ".." - │ └── operator_loc: (33,4)-(33,6) = "=>" - ├── @ MatchRequiredNode (location: (34,0)-(34,23)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (34,0)-(34,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (34,0)-(34,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ RangeNode (location: (34,7)-(34,23)) - │ │ ├── flags: ∅ - │ │ ├── left: - │ │ │ @ SymbolNode (location: (34,7)-(34,13)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (34,7)-(34,9) = ":\"" - │ │ │ ├── value_loc: (34,9)-(34,12) = "foo" - │ │ │ ├── closing_loc: (34,12)-(34,13) = "\"" - │ │ │ └── unescaped: "foo" - │ │ ├── right: - │ │ │ @ SymbolNode (location: (34,17)-(34,23)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (34,17)-(34,19) = ":\"" - │ │ │ ├── value_loc: (34,19)-(34,22) = "foo" - │ │ │ ├── closing_loc: (34,22)-(34,23) = "\"" - │ │ │ └── unescaped: "foo" - │ │ └── operator_loc: (34,14)-(34,16) = ".." - │ └── operator_loc: (34,4)-(34,6) = "=>" - ├── @ MatchRequiredNode (location: (35,0)-(35,21)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (35,0)-(35,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (35,0)-(35,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ RangeNode (location: (35,7)-(35,21)) - │ │ ├── flags: ∅ - │ │ ├── left: - │ │ │ @ RegularExpressionNode (location: (35,7)-(35,12)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (35,7)-(35,8) = "/" - │ │ │ ├── content_loc: (35,8)-(35,11) = "foo" - │ │ │ ├── closing_loc: (35,11)-(35,12) = "/" - │ │ │ └── unescaped: "foo" - │ │ ├── right: - │ │ │ @ RegularExpressionNode (location: (35,16)-(35,21)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (35,16)-(35,17) = "/" - │ │ │ ├── content_loc: (35,17)-(35,20) = "foo" - │ │ │ ├── closing_loc: (35,20)-(35,21) = "/" - │ │ │ └── unescaped: "foo" - │ │ └── operator_loc: (35,13)-(35,15) = ".." - │ └── operator_loc: (35,4)-(35,6) = "=>" - ├── @ MatchRequiredNode (location: (36,0)-(36,21)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (36,0)-(36,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (36,0)-(36,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ RangeNode (location: (36,7)-(36,21)) - │ │ ├── flags: ∅ - │ │ ├── left: - │ │ │ @ XStringNode (location: (36,7)-(36,12)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (36,7)-(36,8) = "`" - │ │ │ ├── content_loc: (36,8)-(36,11) = "foo" - │ │ │ ├── closing_loc: (36,11)-(36,12) = "`" - │ │ │ └── unescaped: "foo" - │ │ ├── right: - │ │ │ @ XStringNode (location: (36,16)-(36,21)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (36,16)-(36,17) = "`" - │ │ │ ├── content_loc: (36,17)-(36,20) = "foo" - │ │ │ ├── closing_loc: (36,20)-(36,21) = "`" - │ │ │ └── unescaped: "foo" - │ │ └── operator_loc: (36,13)-(36,15) = ".." - │ └── operator_loc: (36,4)-(36,6) = "=>" - ├── @ MatchRequiredNode (location: (37,0)-(37,25)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (37,0)-(37,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (37,0)-(37,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ RangeNode (location: (37,7)-(37,25)) - │ │ ├── flags: ∅ - │ │ ├── left: - │ │ │ @ XStringNode (location: (37,7)-(37,14)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (37,7)-(37,10) = "%x[" - │ │ │ ├── content_loc: (37,10)-(37,13) = "foo" - │ │ │ ├── closing_loc: (37,13)-(37,14) = "]" - │ │ │ └── unescaped: "foo" - │ │ ├── right: - │ │ │ @ XStringNode (location: (37,18)-(37,25)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (37,18)-(37,21) = "%x[" - │ │ │ ├── content_loc: (37,21)-(37,24) = "foo" - │ │ │ ├── closing_loc: (37,24)-(37,25) = "]" - │ │ │ └── unescaped: "foo" - │ │ └── operator_loc: (37,15)-(37,17) = ".." - │ └── operator_loc: (37,4)-(37,6) = "=>" - ├── @ MatchRequiredNode (location: (38,0)-(38,25)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (38,0)-(38,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (38,0)-(38,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ RangeNode (location: (38,7)-(38,25)) - │ │ ├── flags: ∅ - │ │ ├── left: - │ │ │ @ ArrayNode (location: (38,7)-(38,14)) - │ │ │ ├── flags: static_literal - │ │ │ ├── elements: (length: 1) - │ │ │ │ └── @ SymbolNode (location: (38,10)-(38,13)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── value_loc: (38,10)-(38,13) = "foo" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "foo" - │ │ │ ├── opening_loc: (38,7)-(38,10) = "%i[" - │ │ │ └── closing_loc: (38,13)-(38,14) = "]" - │ │ ├── right: - │ │ │ @ ArrayNode (location: (38,18)-(38,25)) - │ │ │ ├── flags: static_literal - │ │ │ ├── elements: (length: 1) - │ │ │ │ └── @ SymbolNode (location: (38,21)-(38,24)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── value_loc: (38,21)-(38,24) = "foo" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "foo" - │ │ │ ├── opening_loc: (38,18)-(38,21) = "%i[" - │ │ │ └── closing_loc: (38,24)-(38,25) = "]" - │ │ └── operator_loc: (38,15)-(38,17) = ".." - │ └── operator_loc: (38,4)-(38,6) = "=>" - ├── @ MatchRequiredNode (location: (39,0)-(39,25)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (39,0)-(39,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (39,0)-(39,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ RangeNode (location: (39,7)-(39,25)) - │ │ ├── flags: ∅ - │ │ ├── left: - │ │ │ @ ArrayNode (location: (39,7)-(39,14)) - │ │ │ ├── flags: static_literal - │ │ │ ├── elements: (length: 1) - │ │ │ │ └── @ SymbolNode (location: (39,10)-(39,13)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── value_loc: (39,10)-(39,13) = "foo" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "foo" - │ │ │ ├── opening_loc: (39,7)-(39,10) = "%I[" - │ │ │ └── closing_loc: (39,13)-(39,14) = "]" - │ │ ├── right: - │ │ │ @ ArrayNode (location: (39,18)-(39,25)) - │ │ │ ├── flags: static_literal - │ │ │ ├── elements: (length: 1) - │ │ │ │ └── @ SymbolNode (location: (39,21)-(39,24)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── value_loc: (39,21)-(39,24) = "foo" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "foo" - │ │ │ ├── opening_loc: (39,18)-(39,21) = "%I[" - │ │ │ └── closing_loc: (39,24)-(39,25) = "]" - │ │ └── operator_loc: (39,15)-(39,17) = ".." - │ └── operator_loc: (39,4)-(39,6) = "=>" - ├── @ MatchRequiredNode (location: (40,0)-(40,25)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (40,0)-(40,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (40,0)-(40,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ RangeNode (location: (40,7)-(40,25)) - │ │ ├── flags: ∅ - │ │ ├── left: - │ │ │ @ ArrayNode (location: (40,7)-(40,14)) - │ │ │ ├── flags: ∅ - │ │ │ ├── elements: (length: 1) - │ │ │ │ └── @ StringNode (location: (40,10)-(40,13)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── content_loc: (40,10)-(40,13) = "foo" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "foo" - │ │ │ ├── opening_loc: (40,7)-(40,10) = "%w[" - │ │ │ └── closing_loc: (40,13)-(40,14) = "]" - │ │ ├── right: - │ │ │ @ ArrayNode (location: (40,18)-(40,25)) - │ │ │ ├── flags: ∅ - │ │ │ ├── elements: (length: 1) - │ │ │ │ └── @ StringNode (location: (40,21)-(40,24)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── content_loc: (40,21)-(40,24) = "foo" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "foo" - │ │ │ ├── opening_loc: (40,18)-(40,21) = "%w[" - │ │ │ └── closing_loc: (40,24)-(40,25) = "]" - │ │ └── operator_loc: (40,15)-(40,17) = ".." - │ └── operator_loc: (40,4)-(40,6) = "=>" - ├── @ MatchRequiredNode (location: (41,0)-(41,25)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (41,0)-(41,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (41,0)-(41,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ RangeNode (location: (41,7)-(41,25)) - │ │ ├── flags: ∅ - │ │ ├── left: - │ │ │ @ ArrayNode (location: (41,7)-(41,14)) - │ │ │ ├── flags: ∅ - │ │ │ ├── elements: (length: 1) - │ │ │ │ └── @ StringNode (location: (41,10)-(41,13)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── content_loc: (41,10)-(41,13) = "foo" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "foo" - │ │ │ ├── opening_loc: (41,7)-(41,10) = "%W[" - │ │ │ └── closing_loc: (41,13)-(41,14) = "]" - │ │ ├── right: - │ │ │ @ ArrayNode (location: (41,18)-(41,25)) - │ │ │ ├── flags: ∅ - │ │ │ ├── elements: (length: 1) - │ │ │ │ └── @ StringNode (location: (41,21)-(41,24)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── content_loc: (41,21)-(41,24) = "foo" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "foo" - │ │ │ ├── opening_loc: (41,18)-(41,21) = "%W[" - │ │ │ └── closing_loc: (41,24)-(41,25) = "]" - │ │ └── operator_loc: (41,15)-(41,17) = ".." - │ └── operator_loc: (41,4)-(41,6) = "=>" - ├── @ MatchRequiredNode (location: (42,0)-(42,25)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (42,0)-(42,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (42,0)-(42,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ RangeNode (location: (42,7)-(42,25)) - │ │ ├── flags: ∅ - │ │ ├── left: - │ │ │ @ StringNode (location: (42,7)-(42,14)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (42,7)-(42,10) = "%q[" - │ │ │ ├── content_loc: (42,10)-(42,13) = "foo" - │ │ │ ├── closing_loc: (42,13)-(42,14) = "]" - │ │ │ └── unescaped: "foo" - │ │ ├── right: - │ │ │ @ StringNode (location: (42,18)-(42,25)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (42,18)-(42,21) = "%q[" - │ │ │ ├── content_loc: (42,21)-(42,24) = "foo" - │ │ │ ├── closing_loc: (42,24)-(42,25) = "]" - │ │ │ └── unescaped: "foo" - │ │ └── operator_loc: (42,15)-(42,17) = ".." - │ └── operator_loc: (42,4)-(42,6) = "=>" - ├── @ MatchRequiredNode (location: (43,0)-(43,25)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (43,0)-(43,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (43,0)-(43,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ RangeNode (location: (43,7)-(43,25)) - │ │ ├── flags: ∅ - │ │ ├── left: - │ │ │ @ StringNode (location: (43,7)-(43,14)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (43,7)-(43,10) = "%Q[" - │ │ │ ├── content_loc: (43,10)-(43,13) = "foo" - │ │ │ ├── closing_loc: (43,13)-(43,14) = "]" - │ │ │ └── unescaped: "foo" - │ │ ├── right: - │ │ │ @ StringNode (location: (43,18)-(43,25)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (43,18)-(43,21) = "%Q[" - │ │ │ ├── content_loc: (43,21)-(43,24) = "foo" - │ │ │ ├── closing_loc: (43,24)-(43,25) = "]" - │ │ │ └── unescaped: "foo" - │ │ └── operator_loc: (43,15)-(43,17) = ".." - │ └── operator_loc: (43,4)-(43,6) = "=>" - ├── @ MatchRequiredNode (location: (44,0)-(44,21)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (44,0)-(44,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (44,0)-(44,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ RangeNode (location: (44,7)-(44,21)) - │ │ ├── flags: ∅ - │ │ ├── left: - │ │ │ @ StringNode (location: (44,7)-(44,12)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (44,7)-(44,8) = "\"" - │ │ │ ├── content_loc: (44,8)-(44,11) = "foo" - │ │ │ ├── closing_loc: (44,11)-(44,12) = "\"" - │ │ │ └── unescaped: "foo" - │ │ ├── right: - │ │ │ @ StringNode (location: (44,16)-(44,21)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (44,16)-(44,17) = "\"" - │ │ │ ├── content_loc: (44,17)-(44,20) = "foo" - │ │ │ ├── closing_loc: (44,20)-(44,21) = "\"" - │ │ │ └── unescaped: "foo" - │ │ └── operator_loc: (44,13)-(44,15) = ".." - │ └── operator_loc: (44,4)-(44,6) = "=>" - ├── @ MatchRequiredNode (location: (45,0)-(45,17)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (45,0)-(45,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (45,0)-(45,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ RangeNode (location: (45,7)-(45,17)) - │ │ ├── flags: static_literal - │ │ ├── left: - │ │ │ @ NilNode (location: (45,7)-(45,10)) - │ │ │ └── flags: static_literal - │ │ ├── right: - │ │ │ @ NilNode (location: (45,14)-(45,17)) - │ │ │ └── flags: static_literal - │ │ └── operator_loc: (45,11)-(45,13) = ".." - │ └── operator_loc: (45,4)-(45,6) = "=>" - ├── @ MatchRequiredNode (location: (46,0)-(46,19)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (46,0)-(46,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (46,0)-(46,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ RangeNode (location: (46,7)-(46,19)) - │ │ ├── flags: ∅ - │ │ ├── left: - │ │ │ @ SelfNode (location: (46,7)-(46,11)) - │ │ │ └── flags: ∅ - │ │ ├── right: - │ │ │ @ SelfNode (location: (46,15)-(46,19)) - │ │ │ └── flags: ∅ - │ │ └── operator_loc: (46,12)-(46,14) = ".." - │ └── operator_loc: (46,4)-(46,6) = "=>" - ├── @ MatchRequiredNode (location: (47,0)-(47,19)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (47,0)-(47,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (47,0)-(47,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ RangeNode (location: (47,7)-(47,19)) - │ │ ├── flags: ∅ - │ │ ├── left: - │ │ │ @ TrueNode (location: (47,7)-(47,11)) - │ │ │ └── flags: static_literal - │ │ ├── right: - │ │ │ @ TrueNode (location: (47,15)-(47,19)) - │ │ │ └── flags: static_literal - │ │ └── operator_loc: (47,12)-(47,14) = ".." - │ └── operator_loc: (47,4)-(47,6) = "=>" - ├── @ MatchRequiredNode (location: (48,0)-(48,21)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (48,0)-(48,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (48,0)-(48,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ RangeNode (location: (48,7)-(48,21)) - │ │ ├── flags: ∅ - │ │ ├── left: - │ │ │ @ FalseNode (location: (48,7)-(48,12)) - │ │ │ └── flags: static_literal - │ │ ├── right: - │ │ │ @ FalseNode (location: (48,16)-(48,21)) - │ │ │ └── flags: static_literal - │ │ └── operator_loc: (48,13)-(48,15) = ".." - │ └── operator_loc: (48,4)-(48,6) = "=>" - ├── @ MatchRequiredNode (location: (49,0)-(49,27)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (49,0)-(49,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (49,0)-(49,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ RangeNode (location: (49,7)-(49,27)) - │ │ ├── flags: ∅ - │ │ ├── left: - │ │ │ @ SourceFileNode (location: (49,7)-(49,15)) - │ │ │ ├── flags: ∅ - │ │ │ └── filepath: "patterns.txt" - │ │ ├── right: - │ │ │ @ SourceFileNode (location: (49,19)-(49,27)) - │ │ │ ├── flags: ∅ - │ │ │ └── filepath: "patterns.txt" - │ │ └── operator_loc: (49,16)-(49,18) = ".." - │ └── operator_loc: (49,4)-(49,6) = "=>" - ├── @ MatchRequiredNode (location: (50,0)-(50,27)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (50,0)-(50,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (50,0)-(50,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ RangeNode (location: (50,7)-(50,27)) - │ │ ├── flags: ∅ - │ │ ├── left: - │ │ │ @ SourceLineNode (location: (50,7)-(50,15)) - │ │ │ └── flags: static_literal - │ │ ├── right: - │ │ │ @ SourceLineNode (location: (50,19)-(50,27)) - │ │ │ └── flags: static_literal - │ │ └── operator_loc: (50,16)-(50,18) = ".." - │ └── operator_loc: (50,4)-(50,6) = "=>" - ├── @ MatchRequiredNode (location: (51,0)-(51,35)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (51,0)-(51,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (51,0)-(51,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ RangeNode (location: (51,7)-(51,35)) - │ │ ├── flags: ∅ - │ │ ├── left: - │ │ │ @ SourceEncodingNode (location: (51,7)-(51,19)) - │ │ │ └── flags: static_literal - │ │ ├── right: - │ │ │ @ SourceEncodingNode (location: (51,23)-(51,35)) - │ │ │ └── flags: static_literal - │ │ └── operator_loc: (51,20)-(51,22) = ".." - │ └── operator_loc: (51,4)-(51,6) = "=>" - ├── @ MatchRequiredNode (location: (52,0)-(52,31)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (52,0)-(52,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (52,0)-(52,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ RangeNode (location: (52,7)-(52,31)) - │ │ ├── flags: ∅ - │ │ ├── left: - │ │ │ @ LambdaNode (location: (52,7)-(52,17)) - │ │ │ ├── flags: ∅ - │ │ │ ├── locals: [] - │ │ │ ├── operator_loc: (52,7)-(52,9) = "->" - │ │ │ ├── opening_loc: (52,10)-(52,11) = "{" - │ │ │ ├── closing_loc: (52,16)-(52,17) = "}" - │ │ │ ├── parameters: ∅ - │ │ │ └── body: - │ │ │ @ StatementsNode (location: (52,12)-(52,15)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ LocalVariableReadNode (location: (52,12)-(52,15)) - │ │ │ ├── flags: newline - │ │ │ ├── name: :bar - │ │ │ └── depth: 1 - │ │ ├── right: - │ │ │ @ LambdaNode (location: (52,21)-(52,31)) - │ │ │ ├── flags: ∅ - │ │ │ ├── locals: [] - │ │ │ ├── operator_loc: (52,21)-(52,23) = "->" - │ │ │ ├── opening_loc: (52,24)-(52,25) = "{" - │ │ │ ├── closing_loc: (52,30)-(52,31) = "}" - │ │ │ ├── parameters: ∅ - │ │ │ └── body: - │ │ │ @ StatementsNode (location: (52,26)-(52,29)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ LocalVariableReadNode (location: (52,26)-(52,29)) - │ │ │ ├── flags: newline - │ │ │ ├── name: :bar - │ │ │ └── depth: 1 - │ │ └── operator_loc: (52,18)-(52,20) = ".." - │ └── operator_loc: (52,4)-(52,6) = "=>" - ├── @ LocalVariableWriteNode (location: (54,0)-(54,7)) - │ ├── flags: newline - │ ├── name: :bar - │ ├── depth: 0 - │ ├── name_loc: (54,0)-(54,3) = "bar" - │ ├── value: - │ │ @ IntegerNode (location: (54,6)-(54,7)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ └── operator_loc: (54,4)-(54,5) = "=" - ├── @ MatchRequiredNode (location: (54,9)-(54,20)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (54,9)-(54,12)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (54,9)-(54,12) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ PinnedVariableNode (location: (54,16)-(54,20)) - │ │ ├── flags: ∅ - │ │ ├── variable: - │ │ │ @ LocalVariableReadNode (location: (54,17)-(54,20)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :bar - │ │ │ └── depth: 0 - │ │ └── operator_loc: (54,16)-(54,17) = "^" - │ └── operator_loc: (54,13)-(54,15) = "=>" - ├── @ MatchRequiredNode (location: (55,0)-(55,12)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (55,0)-(55,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (55,0)-(55,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ PinnedVariableNode (location: (55,7)-(55,12)) - │ │ ├── flags: ∅ - │ │ ├── variable: - │ │ │ @ InstanceVariableReadNode (location: (55,8)-(55,12)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :@bar - │ │ └── operator_loc: (55,7)-(55,8) = "^" - │ └── operator_loc: (55,4)-(55,6) = "=>" - ├── @ MatchRequiredNode (location: (56,0)-(56,13)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (56,0)-(56,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (56,0)-(56,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ PinnedVariableNode (location: (56,7)-(56,13)) - │ │ ├── flags: ∅ - │ │ ├── variable: - │ │ │ @ ClassVariableReadNode (location: (56,8)-(56,13)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :@@bar - │ │ └── operator_loc: (56,7)-(56,8) = "^" - │ └── operator_loc: (56,4)-(56,6) = "=>" - ├── @ MatchRequiredNode (location: (57,0)-(57,12)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (57,0)-(57,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (57,0)-(57,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ PinnedVariableNode (location: (57,7)-(57,12)) - │ │ ├── flags: ∅ - │ │ ├── variable: - │ │ │ @ GlobalVariableReadNode (location: (57,8)-(57,12)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :$bar - │ │ └── operator_loc: (57,7)-(57,8) = "^" - │ └── operator_loc: (57,4)-(57,6) = "=>" - ├── @ MatchRequiredNode (location: (59,0)-(59,11)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (59,0)-(59,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (59,0)-(59,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ PinnedExpressionNode (location: (59,7)-(59,11)) - │ │ ├── flags: ∅ - │ │ ├── expression: - │ │ │ @ IntegerNode (location: (59,9)-(59,10)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── operator_loc: (59,7)-(59,8) = "^" - │ │ ├── lparen_loc: (59,8)-(59,9) = "(" - │ │ └── rparen_loc: (59,10)-(59,11) = ")" - │ └── operator_loc: (59,4)-(59,6) = "=>" - ├── @ MatchRequiredNode (location: (60,0)-(60,13)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (60,0)-(60,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (60,0)-(60,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ PinnedExpressionNode (location: (60,7)-(60,13)) - │ │ ├── flags: ∅ - │ │ ├── expression: - │ │ │ @ NilNode (location: (60,9)-(60,12)) - │ │ │ └── flags: static_literal - │ │ ├── operator_loc: (60,7)-(60,8) = "^" - │ │ ├── lparen_loc: (60,8)-(60,9) = "(" - │ │ └── rparen_loc: (60,12)-(60,13) = ")" - │ └── operator_loc: (60,4)-(60,6) = "=>" - ├── @ MatchRequiredNode (location: (61,0)-(61,23)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (61,0)-(61,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (61,0)-(61,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ PinnedExpressionNode (location: (61,7)-(61,23)) - │ │ ├── flags: ∅ - │ │ ├── expression: - │ │ │ @ CallNode (location: (61,9)-(61,22)) - │ │ │ ├── flags: ∅ - │ │ │ ├── receiver: - │ │ │ │ @ StringNode (location: (61,9)-(61,14)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── opening_loc: (61,9)-(61,10) = "\"" - │ │ │ │ ├── content_loc: (61,10)-(61,13) = "bar" - │ │ │ │ ├── closing_loc: (61,13)-(61,14) = "\"" - │ │ │ │ └── unescaped: "bar" - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :+ - │ │ │ ├── message_loc: (61,15)-(61,16) = "+" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (61,17)-(61,22)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ StringNode (location: (61,17)-(61,22)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── opening_loc: (61,17)-(61,18) = "\"" - │ │ │ │ ├── content_loc: (61,18)-(61,21) = "baz" - │ │ │ │ ├── closing_loc: (61,21)-(61,22) = "\"" - │ │ │ │ └── unescaped: "baz" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── operator_loc: (61,7)-(61,8) = "^" - │ │ ├── lparen_loc: (61,8)-(61,9) = "(" - │ │ └── rparen_loc: (61,22)-(61,23) = ")" - │ └── operator_loc: (61,4)-(61,6) = "=>" - ├── @ MatchRequiredNode (location: (63,0)-(63,10)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (63,0)-(63,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (63,0)-(63,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ ConstantReadNode (location: (63,7)-(63,10)) - │ │ ├── flags: ∅ - │ │ └── name: :Foo - │ └── operator_loc: (63,4)-(63,6) = "=>" - ├── @ MatchRequiredNode (location: (64,0)-(64,20)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (64,0)-(64,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (64,0)-(64,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ ConstantPathNode (location: (64,7)-(64,20)) - │ │ ├── flags: ∅ - │ │ ├── parent: - │ │ │ @ ConstantPathNode (location: (64,7)-(64,15)) - │ │ │ ├── flags: ∅ - │ │ │ ├── parent: - │ │ │ │ @ ConstantReadNode (location: (64,7)-(64,10)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :Foo - │ │ │ ├── name: :Bar - │ │ │ ├── delimiter_loc: (64,10)-(64,12) = "::" - │ │ │ └── name_loc: (64,12)-(64,15) = "Bar" - │ │ ├── name: :Baz - │ │ ├── delimiter_loc: (64,15)-(64,17) = "::" - │ │ └── name_loc: (64,17)-(64,20) = "Baz" - │ └── operator_loc: (64,4)-(64,6) = "=>" - ├── @ MatchRequiredNode (location: (65,0)-(65,12)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (65,0)-(65,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (65,0)-(65,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ ConstantPathNode (location: (65,7)-(65,12)) - │ │ ├── flags: ∅ - │ │ ├── parent: ∅ - │ │ ├── name: :Foo - │ │ ├── delimiter_loc: (65,7)-(65,9) = "::" - │ │ └── name_loc: (65,9)-(65,12) = "Foo" - │ └── operator_loc: (65,4)-(65,6) = "=>" - ├── @ MatchRequiredNode (location: (66,0)-(66,22)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (66,0)-(66,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (66,0)-(66,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ ConstantPathNode (location: (66,7)-(66,22)) - │ │ ├── flags: ∅ - │ │ ├── parent: - │ │ │ @ ConstantPathNode (location: (66,7)-(66,17)) - │ │ │ ├── flags: ∅ - │ │ │ ├── parent: - │ │ │ │ @ ConstantPathNode (location: (66,7)-(66,12)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── parent: ∅ - │ │ │ │ ├── name: :Foo - │ │ │ │ ├── delimiter_loc: (66,7)-(66,9) = "::" - │ │ │ │ └── name_loc: (66,9)-(66,12) = "Foo" - │ │ │ ├── name: :Bar - │ │ │ ├── delimiter_loc: (66,12)-(66,14) = "::" - │ │ │ └── name_loc: (66,14)-(66,17) = "Bar" - │ │ ├── name: :Baz - │ │ ├── delimiter_loc: (66,17)-(66,19) = "::" - │ │ └── name_loc: (66,19)-(66,22) = "Baz" - │ └── operator_loc: (66,4)-(66,6) = "=>" - ├── @ MatchRequiredNode (location: (68,0)-(68,12)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (68,0)-(68,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (68,0)-(68,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (68,7)-(68,12)) - │ │ ├── flags: ∅ - │ │ ├── constant: - │ │ │ @ ConstantReadNode (location: (68,7)-(68,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :Foo - │ │ ├── requireds: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── opening_loc: (68,10)-(68,11) = "(" - │ │ └── closing_loc: (68,11)-(68,12) = ")" - │ └── operator_loc: (68,4)-(68,6) = "=>" - ├── @ MatchRequiredNode (location: (69,0)-(69,13)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (69,0)-(69,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (69,0)-(69,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (69,7)-(69,13)) - │ │ ├── flags: ∅ - │ │ ├── constant: - │ │ │ @ ConstantReadNode (location: (69,7)-(69,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :Foo - │ │ ├── requireds: (length: 1) - │ │ │ └── @ IntegerNode (location: (69,11)-(69,12)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── opening_loc: (69,10)-(69,11) = "(" - │ │ └── closing_loc: (69,12)-(69,13) = ")" - │ └── operator_loc: (69,4)-(69,6) = "=>" - ├── @ MatchRequiredNode (location: (70,0)-(70,19)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (70,0)-(70,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (70,0)-(70,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (70,7)-(70,19)) - │ │ ├── flags: ∅ - │ │ ├── constant: - │ │ │ @ ConstantReadNode (location: (70,7)-(70,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :Foo - │ │ ├── requireds: (length: 3) - │ │ │ ├── @ IntegerNode (location: (70,11)-(70,12)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ ├── @ IntegerNode (location: (70,14)-(70,15)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 2 - │ │ │ └── @ IntegerNode (location: (70,17)-(70,18)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 3 - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── opening_loc: (70,10)-(70,11) = "(" - │ │ └── closing_loc: (70,18)-(70,19) = ")" - │ └── operator_loc: (70,4)-(70,6) = "=>" - ├── @ MatchRequiredNode (location: (71,0)-(71,15)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (71,0)-(71,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (71,0)-(71,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (71,7)-(71,15)) - │ │ ├── flags: ∅ - │ │ ├── constant: - │ │ │ @ ConstantReadNode (location: (71,7)-(71,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :Foo - │ │ ├── requireds: (length: 1) - │ │ │ └── @ LocalVariableTargetNode (location: (71,11)-(71,14)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :bar - │ │ │ └── depth: 0 - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── opening_loc: (71,10)-(71,11) = "(" - │ │ └── closing_loc: (71,14)-(71,15) = ")" - │ └── operator_loc: (71,4)-(71,6) = "=>" - ├── @ MatchRequiredNode (location: (72,0)-(72,21)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (72,0)-(72,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (72,0)-(72,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (72,7)-(72,21)) - │ │ ├── flags: ∅ - │ │ ├── constant: - │ │ │ @ ConstantReadNode (location: (72,7)-(72,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :Foo - │ │ ├── requireds: (length: 0) - │ │ ├── rest: - │ │ │ @ SplatNode (location: (72,11)-(72,15)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (72,11)-(72,12) = "*" - │ │ │ └── expression: - │ │ │ @ LocalVariableTargetNode (location: (72,12)-(72,15)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :bar - │ │ │ └── depth: 0 - │ │ ├── posts: (length: 1) - │ │ │ └── @ LocalVariableTargetNode (location: (72,17)-(72,20)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :baz - │ │ │ └── depth: 0 - │ │ ├── opening_loc: (72,10)-(72,11) = "(" - │ │ └── closing_loc: (72,20)-(72,21) = ")" - │ └── operator_loc: (72,4)-(72,6) = "=>" - ├── @ MatchRequiredNode (location: (73,0)-(73,21)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (73,0)-(73,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (73,0)-(73,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (73,7)-(73,21)) - │ │ ├── flags: ∅ - │ │ ├── constant: - │ │ │ @ ConstantReadNode (location: (73,7)-(73,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :Foo - │ │ ├── requireds: (length: 1) - │ │ │ └── @ LocalVariableTargetNode (location: (73,11)-(73,14)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :bar - │ │ │ └── depth: 0 - │ │ ├── rest: - │ │ │ @ SplatNode (location: (73,16)-(73,20)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (73,16)-(73,17) = "*" - │ │ │ └── expression: - │ │ │ @ LocalVariableTargetNode (location: (73,17)-(73,20)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :baz - │ │ │ └── depth: 0 - │ │ ├── posts: (length: 0) - │ │ ├── opening_loc: (73,10)-(73,11) = "(" - │ │ └── closing_loc: (73,20)-(73,21) = ")" - │ └── operator_loc: (73,4)-(73,6) = "=>" - ├── @ MatchRequiredNode (location: (74,0)-(74,27)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (74,0)-(74,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (74,0)-(74,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ FindPatternNode (location: (74,7)-(74,27)) - │ │ ├── flags: ∅ - │ │ ├── constant: - │ │ │ @ ConstantReadNode (location: (74,7)-(74,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :Foo - │ │ ├── left: - │ │ │ @ SplatNode (location: (74,11)-(74,15)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (74,11)-(74,12) = "*" - │ │ │ └── expression: - │ │ │ @ LocalVariableTargetNode (location: (74,12)-(74,15)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :bar - │ │ │ └── depth: 0 - │ │ ├── requireds: (length: 1) - │ │ │ └── @ LocalVariableTargetNode (location: (74,17)-(74,20)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :baz - │ │ │ └── depth: 0 - │ │ ├── right: - │ │ │ @ SplatNode (location: (74,22)-(74,26)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (74,22)-(74,23) = "*" - │ │ │ └── expression: - │ │ │ @ LocalVariableTargetNode (location: (74,23)-(74,26)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :qux - │ │ │ └── depth: 0 - │ │ ├── opening_loc: (74,10)-(74,11) = "(" - │ │ └── closing_loc: (74,26)-(74,27) = ")" - │ └── operator_loc: (74,4)-(74,6) = "=>" - ├── @ MatchRequiredNode (location: (76,0)-(76,12)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (76,0)-(76,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (76,0)-(76,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (76,7)-(76,12)) - │ │ ├── flags: ∅ - │ │ ├── constant: - │ │ │ @ ConstantReadNode (location: (76,7)-(76,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :Foo - │ │ ├── requireds: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── opening_loc: (76,10)-(76,11) = "[" - │ │ └── closing_loc: (76,11)-(76,12) = "]" - │ └── operator_loc: (76,4)-(76,6) = "=>" - ├── @ MatchRequiredNode (location: (77,0)-(77,13)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (77,0)-(77,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (77,0)-(77,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (77,7)-(77,13)) - │ │ ├── flags: ∅ - │ │ ├── constant: - │ │ │ @ ConstantReadNode (location: (77,7)-(77,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :Foo - │ │ ├── requireds: (length: 1) - │ │ │ └── @ IntegerNode (location: (77,11)-(77,12)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── opening_loc: (77,10)-(77,11) = "[" - │ │ └── closing_loc: (77,12)-(77,13) = "]" - │ └── operator_loc: (77,4)-(77,6) = "=>" - ├── @ MatchRequiredNode (location: (78,0)-(78,19)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (78,0)-(78,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (78,0)-(78,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (78,7)-(78,19)) - │ │ ├── flags: ∅ - │ │ ├── constant: - │ │ │ @ ConstantReadNode (location: (78,7)-(78,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :Foo - │ │ ├── requireds: (length: 3) - │ │ │ ├── @ IntegerNode (location: (78,11)-(78,12)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ ├── @ IntegerNode (location: (78,14)-(78,15)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 2 - │ │ │ └── @ IntegerNode (location: (78,17)-(78,18)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 3 - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── opening_loc: (78,10)-(78,11) = "[" - │ │ └── closing_loc: (78,18)-(78,19) = "]" - │ └── operator_loc: (78,4)-(78,6) = "=>" - ├── @ MatchRequiredNode (location: (79,0)-(79,17)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (79,0)-(79,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (79,0)-(79,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (79,7)-(79,17)) - │ │ ├── flags: ∅ - │ │ ├── constant: - │ │ │ @ ConstantReadNode (location: (79,7)-(79,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :Foo - │ │ ├── requireds: (length: 1) - │ │ │ └── @ ArrayPatternNode (location: (79,11)-(79,16)) - │ │ │ ├── flags: ∅ - │ │ │ ├── constant: - │ │ │ │ @ ConstantReadNode (location: (79,11)-(79,14)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :Foo - │ │ │ ├── requireds: (length: 0) - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── opening_loc: (79,14)-(79,15) = "[" - │ │ │ └── closing_loc: (79,15)-(79,16) = "]" - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── opening_loc: (79,10)-(79,11) = "[" - │ │ └── closing_loc: (79,16)-(79,17) = "]" - │ └── operator_loc: (79,4)-(79,6) = "=>" - ├── @ MatchRequiredNode (location: (80,0)-(80,15)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (80,0)-(80,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (80,0)-(80,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (80,7)-(80,15)) - │ │ ├── flags: ∅ - │ │ ├── constant: - │ │ │ @ ConstantReadNode (location: (80,7)-(80,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :Foo - │ │ ├── requireds: (length: 1) - │ │ │ └── @ LocalVariableTargetNode (location: (80,11)-(80,14)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :bar - │ │ │ └── depth: 0 - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── opening_loc: (80,10)-(80,11) = "[" - │ │ └── closing_loc: (80,14)-(80,15) = "]" - │ └── operator_loc: (80,4)-(80,6) = "=>" - ├── @ MatchRequiredNode (location: (81,0)-(81,21)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (81,0)-(81,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (81,0)-(81,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (81,7)-(81,21)) - │ │ ├── flags: ∅ - │ │ ├── constant: - │ │ │ @ ConstantReadNode (location: (81,7)-(81,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :Foo - │ │ ├── requireds: (length: 0) - │ │ ├── rest: - │ │ │ @ SplatNode (location: (81,11)-(81,15)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (81,11)-(81,12) = "*" - │ │ │ └── expression: - │ │ │ @ LocalVariableTargetNode (location: (81,12)-(81,15)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :bar - │ │ │ └── depth: 0 - │ │ ├── posts: (length: 1) - │ │ │ └── @ LocalVariableTargetNode (location: (81,17)-(81,20)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :baz - │ │ │ └── depth: 0 - │ │ ├── opening_loc: (81,10)-(81,11) = "[" - │ │ └── closing_loc: (81,20)-(81,21) = "]" - │ └── operator_loc: (81,4)-(81,6) = "=>" - ├── @ MatchRequiredNode (location: (82,0)-(82,21)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (82,0)-(82,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (82,0)-(82,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (82,7)-(82,21)) - │ │ ├── flags: ∅ - │ │ ├── constant: - │ │ │ @ ConstantReadNode (location: (82,7)-(82,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :Foo - │ │ ├── requireds: (length: 1) - │ │ │ └── @ LocalVariableTargetNode (location: (82,11)-(82,14)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :bar - │ │ │ └── depth: 0 - │ │ ├── rest: - │ │ │ @ SplatNode (location: (82,16)-(82,20)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (82,16)-(82,17) = "*" - │ │ │ └── expression: - │ │ │ @ LocalVariableTargetNode (location: (82,17)-(82,20)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :baz - │ │ │ └── depth: 0 - │ │ ├── posts: (length: 0) - │ │ ├── opening_loc: (82,10)-(82,11) = "[" - │ │ └── closing_loc: (82,20)-(82,21) = "]" - │ └── operator_loc: (82,4)-(82,6) = "=>" - ├── @ MatchRequiredNode (location: (83,0)-(83,27)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (83,0)-(83,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (83,0)-(83,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ FindPatternNode (location: (83,7)-(83,27)) - │ │ ├── flags: ∅ - │ │ ├── constant: - │ │ │ @ ConstantReadNode (location: (83,7)-(83,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :Foo - │ │ ├── left: - │ │ │ @ SplatNode (location: (83,11)-(83,15)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (83,11)-(83,12) = "*" - │ │ │ └── expression: - │ │ │ @ LocalVariableTargetNode (location: (83,12)-(83,15)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :bar - │ │ │ └── depth: 0 - │ │ ├── requireds: (length: 1) - │ │ │ └── @ LocalVariableTargetNode (location: (83,17)-(83,20)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :baz - │ │ │ └── depth: 0 - │ │ ├── right: - │ │ │ @ SplatNode (location: (83,22)-(83,26)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (83,22)-(83,23) = "*" - │ │ │ └── expression: - │ │ │ @ LocalVariableTargetNode (location: (83,23)-(83,26)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :qux - │ │ │ └── depth: 0 - │ │ ├── opening_loc: (83,10)-(83,11) = "[" - │ │ └── closing_loc: (83,26)-(83,27) = "]" - │ └── operator_loc: (83,4)-(83,6) = "=>" - ├── @ MatchRequiredNode (location: (85,0)-(85,11)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (85,0)-(85,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (85,0)-(85,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (85,7)-(85,11)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── rest: - │ │ │ @ SplatNode (location: (85,7)-(85,11)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (85,7)-(85,8) = "*" - │ │ │ └── expression: - │ │ │ @ LocalVariableTargetNode (location: (85,8)-(85,11)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :bar - │ │ │ └── depth: 0 - │ │ ├── posts: (length: 0) - │ │ ├── opening_loc: ∅ - │ │ └── closing_loc: ∅ - │ └── operator_loc: (85,4)-(85,6) = "=>" - ├── @ MatchRequiredNode (location: (86,0)-(86,21)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (86,0)-(86,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (86,0)-(86,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (86,7)-(86,21)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── rest: - │ │ │ @ SplatNode (location: (86,7)-(86,11)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (86,7)-(86,8) = "*" - │ │ │ └── expression: - │ │ │ @ LocalVariableTargetNode (location: (86,8)-(86,11)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :bar - │ │ │ └── depth: 0 - │ │ ├── posts: (length: 2) - │ │ │ ├── @ LocalVariableTargetNode (location: (86,13)-(86,16)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ └── depth: 0 - │ │ │ └── @ LocalVariableTargetNode (location: (86,18)-(86,21)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :qux - │ │ │ └── depth: 0 - │ │ ├── opening_loc: ∅ - │ │ └── closing_loc: ∅ - │ └── operator_loc: (86,4)-(86,6) = "=>" - ├── @ MatchRequiredNode (location: (87,0)-(87,21)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (87,0)-(87,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (87,0)-(87,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (87,7)-(87,21)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ LocalVariableTargetNode (location: (87,7)-(87,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :bar - │ │ │ └── depth: 0 - │ │ ├── rest: - │ │ │ @ SplatNode (location: (87,12)-(87,16)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (87,12)-(87,13) = "*" - │ │ │ └── expression: - │ │ │ @ LocalVariableTargetNode (location: (87,13)-(87,16)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :baz - │ │ │ └── depth: 0 - │ │ ├── posts: (length: 1) - │ │ │ └── @ LocalVariableTargetNode (location: (87,18)-(87,21)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :qux - │ │ │ └── depth: 0 - │ │ ├── opening_loc: ∅ - │ │ └── closing_loc: ∅ - │ └── operator_loc: (87,4)-(87,6) = "=>" - ├── @ MatchRequiredNode (location: (88,0)-(88,21)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (88,0)-(88,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (88,0)-(88,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (88,7)-(88,21)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── requireds: (length: 2) - │ │ │ ├── @ LocalVariableTargetNode (location: (88,7)-(88,10)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :bar - │ │ │ │ └── depth: 0 - │ │ │ └── @ LocalVariableTargetNode (location: (88,12)-(88,15)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :baz - │ │ │ └── depth: 0 - │ │ ├── rest: - │ │ │ @ SplatNode (location: (88,17)-(88,21)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (88,17)-(88,18) = "*" - │ │ │ └── expression: - │ │ │ @ LocalVariableTargetNode (location: (88,18)-(88,21)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :qux - │ │ │ └── depth: 0 - │ │ ├── posts: (length: 0) - │ │ ├── opening_loc: ∅ - │ │ └── closing_loc: ∅ - │ └── operator_loc: (88,4)-(88,6) = "=>" - ├── @ MatchRequiredNode (location: (89,0)-(89,22)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (89,0)-(89,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (89,0)-(89,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ FindPatternNode (location: (89,7)-(89,22)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── left: - │ │ │ @ SplatNode (location: (89,7)-(89,11)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (89,7)-(89,8) = "*" - │ │ │ └── expression: - │ │ │ @ LocalVariableTargetNode (location: (89,8)-(89,11)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :bar - │ │ │ └── depth: 0 - │ │ ├── requireds: (length: 1) - │ │ │ └── @ LocalVariableTargetNode (location: (89,13)-(89,16)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :baz - │ │ │ └── depth: 0 - │ │ ├── right: - │ │ │ @ SplatNode (location: (89,18)-(89,22)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (89,18)-(89,19) = "*" - │ │ │ └── expression: - │ │ │ @ LocalVariableTargetNode (location: (89,19)-(89,22)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :qux - │ │ │ └── depth: 0 - │ │ ├── opening_loc: ∅ - │ │ └── closing_loc: ∅ - │ └── operator_loc: (89,4)-(89,6) = "=>" - ├── @ MatchRequiredNode (location: (91,0)-(91,11)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (91,0)-(91,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (91,0)-(91,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (91,7)-(91,11)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ LocalVariableTargetNode (location: (91,7)-(91,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :bar - │ │ │ └── depth: 0 - │ │ ├── rest: - │ │ │ @ ImplicitRestNode (location: (91,10)-(91,11)) - │ │ │ └── flags: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── opening_loc: ∅ - │ │ └── closing_loc: ∅ - │ └── operator_loc: (91,4)-(91,6) = "=>" - ├── @ MatchRequiredNode (location: (95,0)-(95,9)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (95,0)-(95,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (95,0)-(95,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (95,7)-(95,9)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── opening_loc: (95,7)-(95,8) = "[" - │ │ └── closing_loc: (95,8)-(95,9) = "]" - │ └── operator_loc: (95,4)-(95,6) = "=>" - ├── @ MatchRequiredNode (location: (96,0)-(96,17)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (96,0)-(96,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (96,0)-(96,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (96,7)-(96,17)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ ArrayPatternNode (location: (96,8)-(96,16)) - │ │ │ ├── flags: ∅ - │ │ │ ├── constant: ∅ - │ │ │ ├── requireds: (length: 1) - │ │ │ │ └── @ ArrayPatternNode (location: (96,9)-(96,15)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── constant: ∅ - │ │ │ │ ├── requireds: (length: 1) - │ │ │ │ │ └── @ ArrayPatternNode (location: (96,10)-(96,14)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── constant: ∅ - │ │ │ │ │ ├── requireds: (length: 1) - │ │ │ │ │ │ └── @ ArrayPatternNode (location: (96,11)-(96,13)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ ├── constant: ∅ - │ │ │ │ │ │ ├── requireds: (length: 0) - │ │ │ │ │ │ ├── rest: ∅ - │ │ │ │ │ │ ├── posts: (length: 0) - │ │ │ │ │ │ ├── opening_loc: (96,11)-(96,12) = "[" - │ │ │ │ │ │ └── closing_loc: (96,12)-(96,13) = "]" - │ │ │ │ │ ├── rest: ∅ - │ │ │ │ │ ├── posts: (length: 0) - │ │ │ │ │ ├── opening_loc: (96,10)-(96,11) = "[" - │ │ │ │ │ └── closing_loc: (96,13)-(96,14) = "]" - │ │ │ │ ├── rest: ∅ - │ │ │ │ ├── posts: (length: 0) - │ │ │ │ ├── opening_loc: (96,9)-(96,10) = "[" - │ │ │ │ └── closing_loc: (96,14)-(96,15) = "]" - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── opening_loc: (96,8)-(96,9) = "[" - │ │ │ └── closing_loc: (96,15)-(96,16) = "]" - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── opening_loc: (96,7)-(96,8) = "[" - │ │ └── closing_loc: (96,16)-(96,17) = "]" - │ └── operator_loc: (96,4)-(96,6) = "=>" - ├── @ MatchRequiredNode (location: (98,0)-(98,13)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (98,0)-(98,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (98,0)-(98,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (98,7)-(98,13)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── rest: - │ │ │ @ SplatNode (location: (98,8)-(98,12)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (98,8)-(98,9) = "*" - │ │ │ └── expression: - │ │ │ @ LocalVariableTargetNode (location: (98,9)-(98,12)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :bar - │ │ │ └── depth: 0 - │ │ ├── posts: (length: 0) - │ │ ├── opening_loc: (98,7)-(98,8) = "[" - │ │ └── closing_loc: (98,12)-(98,13) = "]" - │ └── operator_loc: (98,4)-(98,6) = "=>" - ├── @ MatchRequiredNode (location: (99,0)-(99,23)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (99,0)-(99,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (99,0)-(99,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (99,7)-(99,23)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── rest: - │ │ │ @ SplatNode (location: (99,8)-(99,12)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (99,8)-(99,9) = "*" - │ │ │ └── expression: - │ │ │ @ LocalVariableTargetNode (location: (99,9)-(99,12)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :bar - │ │ │ └── depth: 0 - │ │ ├── posts: (length: 2) - │ │ │ ├── @ LocalVariableTargetNode (location: (99,14)-(99,17)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ └── depth: 0 - │ │ │ └── @ LocalVariableTargetNode (location: (99,19)-(99,22)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :qux - │ │ │ └── depth: 0 - │ │ ├── opening_loc: (99,7)-(99,8) = "[" - │ │ └── closing_loc: (99,22)-(99,23) = "]" - │ └── operator_loc: (99,4)-(99,6) = "=>" - ├── @ MatchRequiredNode (location: (100,0)-(100,23)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (100,0)-(100,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (100,0)-(100,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (100,7)-(100,23)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ LocalVariableTargetNode (location: (100,8)-(100,11)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :bar - │ │ │ └── depth: 0 - │ │ ├── rest: - │ │ │ @ SplatNode (location: (100,13)-(100,17)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (100,13)-(100,14) = "*" - │ │ │ └── expression: - │ │ │ @ LocalVariableTargetNode (location: (100,14)-(100,17)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :baz - │ │ │ └── depth: 0 - │ │ ├── posts: (length: 1) - │ │ │ └── @ LocalVariableTargetNode (location: (100,19)-(100,22)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :qux - │ │ │ └── depth: 0 - │ │ ├── opening_loc: (100,7)-(100,8) = "[" - │ │ └── closing_loc: (100,22)-(100,23) = "]" - │ └── operator_loc: (100,4)-(100,6) = "=>" - ├── @ MatchRequiredNode (location: (101,0)-(101,23)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (101,0)-(101,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (101,0)-(101,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (101,7)-(101,23)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── requireds: (length: 2) - │ │ │ ├── @ LocalVariableTargetNode (location: (101,8)-(101,11)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :bar - │ │ │ │ └── depth: 0 - │ │ │ └── @ LocalVariableTargetNode (location: (101,13)-(101,16)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :baz - │ │ │ └── depth: 0 - │ │ ├── rest: - │ │ │ @ SplatNode (location: (101,18)-(101,22)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (101,18)-(101,19) = "*" - │ │ │ └── expression: - │ │ │ @ LocalVariableTargetNode (location: (101,19)-(101,22)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :qux - │ │ │ └── depth: 0 - │ │ ├── posts: (length: 0) - │ │ ├── opening_loc: (101,7)-(101,8) = "[" - │ │ └── closing_loc: (101,22)-(101,23) = "]" - │ └── operator_loc: (101,4)-(101,6) = "=>" - ├── @ MatchRequiredNode (location: (102,0)-(102,24)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (102,0)-(102,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (102,0)-(102,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ FindPatternNode (location: (102,7)-(102,24)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── left: - │ │ │ @ SplatNode (location: (102,8)-(102,12)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (102,8)-(102,9) = "*" - │ │ │ └── expression: - │ │ │ @ LocalVariableTargetNode (location: (102,9)-(102,12)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :bar - │ │ │ └── depth: 0 - │ │ ├── requireds: (length: 1) - │ │ │ └── @ LocalVariableTargetNode (location: (102,14)-(102,17)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :baz - │ │ │ └── depth: 0 - │ │ ├── right: - │ │ │ @ SplatNode (location: (102,19)-(102,23)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (102,19)-(102,20) = "*" - │ │ │ └── expression: - │ │ │ @ LocalVariableTargetNode (location: (102,20)-(102,23)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :qux - │ │ │ └── depth: 0 - │ │ ├── opening_loc: (102,7)-(102,8) = "[" - │ │ └── closing_loc: (102,23)-(102,24) = "]" - │ └── operator_loc: (102,4)-(102,6) = "=>" - ├── @ MatchPredicateNode (location: (104,0)-(104,10)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (104,0)-(104,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (104,0)-(104,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ LocalVariableTargetNode (location: (104,7)-(104,10)) - │ │ ├── flags: ∅ - │ │ ├── name: :bar - │ │ └── depth: 0 - │ └── operator_loc: (104,4)-(104,6) = "in" - ├── @ MatchPredicateNode (location: (105,0)-(105,8)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (105,0)-(105,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (105,0)-(105,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ IntegerNode (location: (105,7)-(105,8)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ └── operator_loc: (105,4)-(105,6) = "in" - ├── @ MatchPredicateNode (location: (106,0)-(106,10)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (106,0)-(106,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (106,0)-(106,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ FloatNode (location: (106,7)-(106,10)) - │ │ ├── flags: static_literal - │ │ └── value: 1.0 - │ └── operator_loc: (106,4)-(106,6) = "in" - ├── @ MatchPredicateNode (location: (107,0)-(107,9)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (107,0)-(107,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (107,0)-(107,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ ImaginaryNode (location: (107,7)-(107,9)) - │ │ ├── flags: static_literal - │ │ └── numeric: - │ │ @ IntegerNode (location: (107,7)-(107,8)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ └── operator_loc: (107,4)-(107,6) = "in" - ├── @ MatchPredicateNode (location: (108,0)-(108,9)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (108,0)-(108,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (108,0)-(108,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ RationalNode (location: (108,7)-(108,9)) - │ │ ├── flags: static_literal, decimal - │ │ ├── numerator: 1 - │ │ └── denominator: 1 - │ └── operator_loc: (108,4)-(108,6) = "in" - ├── @ MatchPredicateNode (location: (109,0)-(109,11)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (109,0)-(109,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (109,0)-(109,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ SymbolNode (location: (109,7)-(109,11)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (109,7)-(109,8) = ":" - │ │ ├── value_loc: (109,8)-(109,11) = "foo" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "foo" - │ └── operator_loc: (109,4)-(109,6) = "in" - ├── @ MatchPredicateNode (location: (110,0)-(110,14)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (110,0)-(110,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (110,0)-(110,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ SymbolNode (location: (110,7)-(110,14)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (110,7)-(110,10) = "%s[" - │ │ ├── value_loc: (110,10)-(110,13) = "foo" - │ │ ├── closing_loc: (110,13)-(110,14) = "]" - │ │ └── unescaped: "foo" - │ └── operator_loc: (110,4)-(110,6) = "in" - ├── @ MatchPredicateNode (location: (111,0)-(111,13)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (111,0)-(111,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (111,0)-(111,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ SymbolNode (location: (111,7)-(111,13)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (111,7)-(111,9) = ":\"" - │ │ ├── value_loc: (111,9)-(111,12) = "foo" - │ │ ├── closing_loc: (111,12)-(111,13) = "\"" - │ │ └── unescaped: "foo" - │ └── operator_loc: (111,4)-(111,6) = "in" - ├── @ MatchPredicateNode (location: (112,0)-(112,12)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (112,0)-(112,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (112,0)-(112,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ RegularExpressionNode (location: (112,7)-(112,12)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (112,7)-(112,8) = "/" - │ │ ├── content_loc: (112,8)-(112,11) = "foo" - │ │ ├── closing_loc: (112,11)-(112,12) = "/" - │ │ └── unescaped: "foo" - │ └── operator_loc: (112,4)-(112,6) = "in" - ├── @ MatchPredicateNode (location: (113,0)-(113,12)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (113,0)-(113,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (113,0)-(113,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ XStringNode (location: (113,7)-(113,12)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (113,7)-(113,8) = "`" - │ │ ├── content_loc: (113,8)-(113,11) = "foo" - │ │ ├── closing_loc: (113,11)-(113,12) = "`" - │ │ └── unescaped: "foo" - │ └── operator_loc: (113,4)-(113,6) = "in" - ├── @ MatchPredicateNode (location: (114,0)-(114,14)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (114,0)-(114,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (114,0)-(114,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ XStringNode (location: (114,7)-(114,14)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (114,7)-(114,10) = "%x[" - │ │ ├── content_loc: (114,10)-(114,13) = "foo" - │ │ ├── closing_loc: (114,13)-(114,14) = "]" - │ │ └── unescaped: "foo" - │ └── operator_loc: (114,4)-(114,6) = "in" - ├── @ MatchPredicateNode (location: (115,0)-(115,14)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (115,0)-(115,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (115,0)-(115,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ ArrayNode (location: (115,7)-(115,14)) - │ │ ├── flags: static_literal - │ │ ├── elements: (length: 1) - │ │ │ └── @ SymbolNode (location: (115,10)-(115,13)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (115,10)-(115,13) = "foo" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "foo" - │ │ ├── opening_loc: (115,7)-(115,10) = "%i[" - │ │ └── closing_loc: (115,13)-(115,14) = "]" - │ └── operator_loc: (115,4)-(115,6) = "in" - ├── @ MatchPredicateNode (location: (116,0)-(116,14)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (116,0)-(116,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (116,0)-(116,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ ArrayNode (location: (116,7)-(116,14)) - │ │ ├── flags: static_literal - │ │ ├── elements: (length: 1) - │ │ │ └── @ SymbolNode (location: (116,10)-(116,13)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (116,10)-(116,13) = "foo" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "foo" - │ │ ├── opening_loc: (116,7)-(116,10) = "%I[" - │ │ └── closing_loc: (116,13)-(116,14) = "]" - │ └── operator_loc: (116,4)-(116,6) = "in" - ├── @ MatchPredicateNode (location: (117,0)-(117,14)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (117,0)-(117,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (117,0)-(117,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ ArrayNode (location: (117,7)-(117,14)) - │ │ ├── flags: ∅ - │ │ ├── elements: (length: 1) - │ │ │ └── @ StringNode (location: (117,10)-(117,13)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (117,10)-(117,13) = "foo" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "foo" - │ │ ├── opening_loc: (117,7)-(117,10) = "%w[" - │ │ └── closing_loc: (117,13)-(117,14) = "]" - │ └── operator_loc: (117,4)-(117,6) = "in" - ├── @ MatchPredicateNode (location: (118,0)-(118,14)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (118,0)-(118,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (118,0)-(118,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ ArrayNode (location: (118,7)-(118,14)) - │ │ ├── flags: ∅ - │ │ ├── elements: (length: 1) - │ │ │ └── @ StringNode (location: (118,10)-(118,13)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (118,10)-(118,13) = "foo" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "foo" - │ │ ├── opening_loc: (118,7)-(118,10) = "%W[" - │ │ └── closing_loc: (118,13)-(118,14) = "]" - │ └── operator_loc: (118,4)-(118,6) = "in" - ├── @ MatchPredicateNode (location: (119,0)-(119,14)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (119,0)-(119,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (119,0)-(119,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ StringNode (location: (119,7)-(119,14)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (119,7)-(119,10) = "%q[" - │ │ ├── content_loc: (119,10)-(119,13) = "foo" - │ │ ├── closing_loc: (119,13)-(119,14) = "]" - │ │ └── unescaped: "foo" - │ └── operator_loc: (119,4)-(119,6) = "in" - ├── @ MatchPredicateNode (location: (120,0)-(120,14)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (120,0)-(120,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (120,0)-(120,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ StringNode (location: (120,7)-(120,14)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (120,7)-(120,10) = "%Q[" - │ │ ├── content_loc: (120,10)-(120,13) = "foo" - │ │ ├── closing_loc: (120,13)-(120,14) = "]" - │ │ └── unescaped: "foo" - │ └── operator_loc: (120,4)-(120,6) = "in" - ├── @ MatchPredicateNode (location: (121,0)-(121,12)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (121,0)-(121,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (121,0)-(121,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ StringNode (location: (121,7)-(121,12)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (121,7)-(121,8) = "\"" - │ │ ├── content_loc: (121,8)-(121,11) = "foo" - │ │ ├── closing_loc: (121,11)-(121,12) = "\"" - │ │ └── unescaped: "foo" - │ └── operator_loc: (121,4)-(121,6) = "in" - ├── @ MatchPredicateNode (location: (122,0)-(122,10)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (122,0)-(122,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (122,0)-(122,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ NilNode (location: (122,7)-(122,10)) - │ │ └── flags: static_literal - │ └── operator_loc: (122,4)-(122,6) = "in" - ├── @ MatchPredicateNode (location: (123,0)-(123,11)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (123,0)-(123,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (123,0)-(123,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ SelfNode (location: (123,7)-(123,11)) - │ │ └── flags: ∅ - │ └── operator_loc: (123,4)-(123,6) = "in" - ├── @ MatchPredicateNode (location: (124,0)-(124,11)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (124,0)-(124,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (124,0)-(124,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ TrueNode (location: (124,7)-(124,11)) - │ │ └── flags: static_literal - │ └── operator_loc: (124,4)-(124,6) = "in" - ├── @ MatchPredicateNode (location: (125,0)-(125,12)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (125,0)-(125,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (125,0)-(125,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ FalseNode (location: (125,7)-(125,12)) - │ │ └── flags: static_literal - │ └── operator_loc: (125,4)-(125,6) = "in" - ├── @ MatchPredicateNode (location: (126,0)-(126,15)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (126,0)-(126,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (126,0)-(126,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ SourceFileNode (location: (126,7)-(126,15)) - │ │ ├── flags: ∅ - │ │ └── filepath: "patterns.txt" - │ └── operator_loc: (126,4)-(126,6) = "in" - ├── @ MatchPredicateNode (location: (127,0)-(127,15)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (127,0)-(127,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (127,0)-(127,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ SourceLineNode (location: (127,7)-(127,15)) - │ │ └── flags: static_literal - │ └── operator_loc: (127,4)-(127,6) = "in" - ├── @ MatchPredicateNode (location: (128,0)-(128,19)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (128,0)-(128,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (128,0)-(128,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ SourceEncodingNode (location: (128,7)-(128,19)) - │ │ └── flags: static_literal - │ └── operator_loc: (128,4)-(128,6) = "in" - ├── @ MatchPredicateNode (location: (129,0)-(129,17)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (129,0)-(129,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (129,0)-(129,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ LambdaNode (location: (129,7)-(129,17)) - │ │ ├── flags: ∅ - │ │ ├── locals: [] - │ │ ├── operator_loc: (129,7)-(129,9) = "->" - │ │ ├── opening_loc: (129,10)-(129,11) = "{" - │ │ ├── closing_loc: (129,16)-(129,17) = "}" - │ │ ├── parameters: ∅ - │ │ └── body: - │ │ @ StatementsNode (location: (129,12)-(129,15)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ LocalVariableReadNode (location: (129,12)-(129,15)) - │ │ ├── flags: newline - │ │ ├── name: :bar - │ │ └── depth: 1 - │ └── operator_loc: (129,4)-(129,6) = "in" - ├── @ MatchPredicateNode (location: (131,0)-(131,11)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (131,0)-(131,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (131,0)-(131,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (131,7)-(131,11)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ LocalVariableTargetNode (location: (131,7)-(131,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :bar - │ │ │ └── depth: 0 - │ │ ├── rest: - │ │ │ @ ImplicitRestNode (location: (131,10)-(131,11)) - │ │ │ └── flags: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── opening_loc: ∅ - │ │ └── closing_loc: ∅ - │ └── operator_loc: (131,4)-(131,6) = "in" - ├── @ CaseMatchNode (location: (135,0)-(135,25)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (135,5)-(135,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (135,5)-(135,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (135,10)-(135,21)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ LocalVariableTargetNode (location: (135,13)-(135,16)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :bar - │ │ │ └── depth: 0 - │ │ ├── statements: ∅ - │ │ ├── in_loc: (135,10)-(135,12) = "in" - │ │ └── then_loc: (135,17)-(135,21) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (135,0)-(135,4) = "case" - │ └── end_keyword_loc: (135,22)-(135,25) = "end" - ├── @ CaseMatchNode (location: (136,0)-(136,23)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (136,5)-(136,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (136,5)-(136,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (136,10)-(136,19)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ IntegerNode (location: (136,13)-(136,14)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── statements: ∅ - │ │ ├── in_loc: (136,10)-(136,12) = "in" - │ │ └── then_loc: (136,15)-(136,19) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (136,0)-(136,4) = "case" - │ └── end_keyword_loc: (136,20)-(136,23) = "end" - ├── @ CaseMatchNode (location: (137,0)-(137,25)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (137,5)-(137,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (137,5)-(137,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (137,10)-(137,21)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ FloatNode (location: (137,13)-(137,16)) - │ │ │ ├── flags: static_literal - │ │ │ └── value: 1.0 - │ │ ├── statements: ∅ - │ │ ├── in_loc: (137,10)-(137,12) = "in" - │ │ └── then_loc: (137,17)-(137,21) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (137,0)-(137,4) = "case" - │ └── end_keyword_loc: (137,22)-(137,25) = "end" - ├── @ CaseMatchNode (location: (138,0)-(138,24)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (138,5)-(138,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (138,5)-(138,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (138,10)-(138,20)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ ImaginaryNode (location: (138,13)-(138,15)) - │ │ │ ├── flags: static_literal - │ │ │ └── numeric: - │ │ │ @ IntegerNode (location: (138,13)-(138,14)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── statements: ∅ - │ │ ├── in_loc: (138,10)-(138,12) = "in" - │ │ └── then_loc: (138,16)-(138,20) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (138,0)-(138,4) = "case" - │ └── end_keyword_loc: (138,21)-(138,24) = "end" - ├── @ CaseMatchNode (location: (139,0)-(139,24)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (139,5)-(139,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (139,5)-(139,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (139,10)-(139,20)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ RationalNode (location: (139,13)-(139,15)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ ├── numerator: 1 - │ │ │ └── denominator: 1 - │ │ ├── statements: ∅ - │ │ ├── in_loc: (139,10)-(139,12) = "in" - │ │ └── then_loc: (139,16)-(139,20) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (139,0)-(139,4) = "case" - │ └── end_keyword_loc: (139,21)-(139,24) = "end" - ├── @ CaseMatchNode (location: (140,0)-(140,26)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (140,5)-(140,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (140,5)-(140,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (140,10)-(140,22)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ SymbolNode (location: (140,13)-(140,17)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (140,13)-(140,14) = ":" - │ │ │ ├── value_loc: (140,14)-(140,17) = "foo" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "foo" - │ │ ├── statements: ∅ - │ │ ├── in_loc: (140,10)-(140,12) = "in" - │ │ └── then_loc: (140,18)-(140,22) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (140,0)-(140,4) = "case" - │ └── end_keyword_loc: (140,23)-(140,26) = "end" - ├── @ CaseMatchNode (location: (141,0)-(141,29)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (141,5)-(141,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (141,5)-(141,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (141,10)-(141,25)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ SymbolNode (location: (141,13)-(141,20)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (141,13)-(141,16) = "%s[" - │ │ │ ├── value_loc: (141,16)-(141,19) = "foo" - │ │ │ ├── closing_loc: (141,19)-(141,20) = "]" - │ │ │ └── unescaped: "foo" - │ │ ├── statements: ∅ - │ │ ├── in_loc: (141,10)-(141,12) = "in" - │ │ └── then_loc: (141,21)-(141,25) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (141,0)-(141,4) = "case" - │ └── end_keyword_loc: (141,26)-(141,29) = "end" - ├── @ CaseMatchNode (location: (142,0)-(142,28)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (142,5)-(142,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (142,5)-(142,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (142,10)-(142,24)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ SymbolNode (location: (142,13)-(142,19)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (142,13)-(142,15) = ":\"" - │ │ │ ├── value_loc: (142,15)-(142,18) = "foo" - │ │ │ ├── closing_loc: (142,18)-(142,19) = "\"" - │ │ │ └── unescaped: "foo" - │ │ ├── statements: ∅ - │ │ ├── in_loc: (142,10)-(142,12) = "in" - │ │ └── then_loc: (142,20)-(142,24) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (142,0)-(142,4) = "case" - │ └── end_keyword_loc: (142,25)-(142,28) = "end" - ├── @ CaseMatchNode (location: (143,0)-(143,27)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (143,5)-(143,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (143,5)-(143,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (143,10)-(143,23)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ RegularExpressionNode (location: (143,13)-(143,18)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (143,13)-(143,14) = "/" - │ │ │ ├── content_loc: (143,14)-(143,17) = "foo" - │ │ │ ├── closing_loc: (143,17)-(143,18) = "/" - │ │ │ └── unescaped: "foo" - │ │ ├── statements: ∅ - │ │ ├── in_loc: (143,10)-(143,12) = "in" - │ │ └── then_loc: (143,19)-(143,23) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (143,0)-(143,4) = "case" - │ └── end_keyword_loc: (143,24)-(143,27) = "end" - ├── @ CaseMatchNode (location: (144,0)-(144,27)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (144,5)-(144,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (144,5)-(144,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (144,10)-(144,23)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ XStringNode (location: (144,13)-(144,18)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (144,13)-(144,14) = "`" - │ │ │ ├── content_loc: (144,14)-(144,17) = "foo" - │ │ │ ├── closing_loc: (144,17)-(144,18) = "`" - │ │ │ └── unescaped: "foo" - │ │ ├── statements: ∅ - │ │ ├── in_loc: (144,10)-(144,12) = "in" - │ │ └── then_loc: (144,19)-(144,23) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (144,0)-(144,4) = "case" - │ └── end_keyword_loc: (144,24)-(144,27) = "end" - ├── @ CaseMatchNode (location: (145,0)-(145,29)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (145,5)-(145,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (145,5)-(145,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (145,10)-(145,25)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ XStringNode (location: (145,13)-(145,20)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (145,13)-(145,16) = "%x[" - │ │ │ ├── content_loc: (145,16)-(145,19) = "foo" - │ │ │ ├── closing_loc: (145,19)-(145,20) = "]" - │ │ │ └── unescaped: "foo" - │ │ ├── statements: ∅ - │ │ ├── in_loc: (145,10)-(145,12) = "in" - │ │ └── then_loc: (145,21)-(145,25) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (145,0)-(145,4) = "case" - │ └── end_keyword_loc: (145,26)-(145,29) = "end" - ├── @ CaseMatchNode (location: (146,0)-(146,29)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (146,5)-(146,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (146,5)-(146,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (146,10)-(146,25)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ ArrayNode (location: (146,13)-(146,20)) - │ │ │ ├── flags: static_literal - │ │ │ ├── elements: (length: 1) - │ │ │ │ └── @ SymbolNode (location: (146,16)-(146,19)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── value_loc: (146,16)-(146,19) = "foo" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "foo" - │ │ │ ├── opening_loc: (146,13)-(146,16) = "%i[" - │ │ │ └── closing_loc: (146,19)-(146,20) = "]" - │ │ ├── statements: ∅ - │ │ ├── in_loc: (146,10)-(146,12) = "in" - │ │ └── then_loc: (146,21)-(146,25) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (146,0)-(146,4) = "case" - │ └── end_keyword_loc: (146,26)-(146,29) = "end" - ├── @ CaseMatchNode (location: (147,0)-(147,29)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (147,5)-(147,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (147,5)-(147,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (147,10)-(147,25)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ ArrayNode (location: (147,13)-(147,20)) - │ │ │ ├── flags: static_literal - │ │ │ ├── elements: (length: 1) - │ │ │ │ └── @ SymbolNode (location: (147,16)-(147,19)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── value_loc: (147,16)-(147,19) = "foo" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "foo" - │ │ │ ├── opening_loc: (147,13)-(147,16) = "%I[" - │ │ │ └── closing_loc: (147,19)-(147,20) = "]" - │ │ ├── statements: ∅ - │ │ ├── in_loc: (147,10)-(147,12) = "in" - │ │ └── then_loc: (147,21)-(147,25) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (147,0)-(147,4) = "case" - │ └── end_keyword_loc: (147,26)-(147,29) = "end" - ├── @ CaseMatchNode (location: (148,0)-(148,29)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (148,5)-(148,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (148,5)-(148,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (148,10)-(148,25)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ ArrayNode (location: (148,13)-(148,20)) - │ │ │ ├── flags: ∅ - │ │ │ ├── elements: (length: 1) - │ │ │ │ └── @ StringNode (location: (148,16)-(148,19)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── content_loc: (148,16)-(148,19) = "foo" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "foo" - │ │ │ ├── opening_loc: (148,13)-(148,16) = "%w[" - │ │ │ └── closing_loc: (148,19)-(148,20) = "]" - │ │ ├── statements: ∅ - │ │ ├── in_loc: (148,10)-(148,12) = "in" - │ │ └── then_loc: (148,21)-(148,25) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (148,0)-(148,4) = "case" - │ └── end_keyword_loc: (148,26)-(148,29) = "end" - ├── @ CaseMatchNode (location: (149,0)-(149,29)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (149,5)-(149,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (149,5)-(149,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (149,10)-(149,25)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ ArrayNode (location: (149,13)-(149,20)) - │ │ │ ├── flags: ∅ - │ │ │ ├── elements: (length: 1) - │ │ │ │ └── @ StringNode (location: (149,16)-(149,19)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── content_loc: (149,16)-(149,19) = "foo" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "foo" - │ │ │ ├── opening_loc: (149,13)-(149,16) = "%W[" - │ │ │ └── closing_loc: (149,19)-(149,20) = "]" - │ │ ├── statements: ∅ - │ │ ├── in_loc: (149,10)-(149,12) = "in" - │ │ └── then_loc: (149,21)-(149,25) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (149,0)-(149,4) = "case" - │ └── end_keyword_loc: (149,26)-(149,29) = "end" - ├── @ CaseMatchNode (location: (150,0)-(150,29)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (150,5)-(150,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (150,5)-(150,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (150,10)-(150,25)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ StringNode (location: (150,13)-(150,20)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (150,13)-(150,16) = "%q[" - │ │ │ ├── content_loc: (150,16)-(150,19) = "foo" - │ │ │ ├── closing_loc: (150,19)-(150,20) = "]" - │ │ │ └── unescaped: "foo" - │ │ ├── statements: ∅ - │ │ ├── in_loc: (150,10)-(150,12) = "in" - │ │ └── then_loc: (150,21)-(150,25) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (150,0)-(150,4) = "case" - │ └── end_keyword_loc: (150,26)-(150,29) = "end" - ├── @ CaseMatchNode (location: (151,0)-(151,29)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (151,5)-(151,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (151,5)-(151,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (151,10)-(151,25)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ StringNode (location: (151,13)-(151,20)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (151,13)-(151,16) = "%Q[" - │ │ │ ├── content_loc: (151,16)-(151,19) = "foo" - │ │ │ ├── closing_loc: (151,19)-(151,20) = "]" - │ │ │ └── unescaped: "foo" - │ │ ├── statements: ∅ - │ │ ├── in_loc: (151,10)-(151,12) = "in" - │ │ └── then_loc: (151,21)-(151,25) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (151,0)-(151,4) = "case" - │ └── end_keyword_loc: (151,26)-(151,29) = "end" - ├── @ CaseMatchNode (location: (152,0)-(152,27)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (152,5)-(152,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (152,5)-(152,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (152,10)-(152,23)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ StringNode (location: (152,13)-(152,18)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (152,13)-(152,14) = "\"" - │ │ │ ├── content_loc: (152,14)-(152,17) = "foo" - │ │ │ ├── closing_loc: (152,17)-(152,18) = "\"" - │ │ │ └── unescaped: "foo" - │ │ ├── statements: ∅ - │ │ ├── in_loc: (152,10)-(152,12) = "in" - │ │ └── then_loc: (152,19)-(152,23) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (152,0)-(152,4) = "case" - │ └── end_keyword_loc: (152,24)-(152,27) = "end" - ├── @ CaseMatchNode (location: (153,0)-(153,25)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (153,5)-(153,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (153,5)-(153,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (153,10)-(153,21)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ NilNode (location: (153,13)-(153,16)) - │ │ │ └── flags: static_literal - │ │ ├── statements: ∅ - │ │ ├── in_loc: (153,10)-(153,12) = "in" - │ │ └── then_loc: (153,17)-(153,21) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (153,0)-(153,4) = "case" - │ └── end_keyword_loc: (153,22)-(153,25) = "end" - ├── @ CaseMatchNode (location: (154,0)-(154,26)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (154,5)-(154,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (154,5)-(154,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (154,10)-(154,22)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ SelfNode (location: (154,13)-(154,17)) - │ │ │ └── flags: ∅ - │ │ ├── statements: ∅ - │ │ ├── in_loc: (154,10)-(154,12) = "in" - │ │ └── then_loc: (154,18)-(154,22) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (154,0)-(154,4) = "case" - │ └── end_keyword_loc: (154,23)-(154,26) = "end" - ├── @ CaseMatchNode (location: (155,0)-(155,26)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (155,5)-(155,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (155,5)-(155,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (155,10)-(155,22)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ TrueNode (location: (155,13)-(155,17)) - │ │ │ └── flags: static_literal - │ │ ├── statements: ∅ - │ │ ├── in_loc: (155,10)-(155,12) = "in" - │ │ └── then_loc: (155,18)-(155,22) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (155,0)-(155,4) = "case" - │ └── end_keyword_loc: (155,23)-(155,26) = "end" - ├── @ CaseMatchNode (location: (156,0)-(156,27)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (156,5)-(156,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (156,5)-(156,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (156,10)-(156,23)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ FalseNode (location: (156,13)-(156,18)) - │ │ │ └── flags: static_literal - │ │ ├── statements: ∅ - │ │ ├── in_loc: (156,10)-(156,12) = "in" - │ │ └── then_loc: (156,19)-(156,23) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (156,0)-(156,4) = "case" - │ └── end_keyword_loc: (156,24)-(156,27) = "end" - ├── @ CaseMatchNode (location: (157,0)-(157,30)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (157,5)-(157,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (157,5)-(157,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (157,10)-(157,26)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ SourceFileNode (location: (157,13)-(157,21)) - │ │ │ ├── flags: ∅ - │ │ │ └── filepath: "patterns.txt" - │ │ ├── statements: ∅ - │ │ ├── in_loc: (157,10)-(157,12) = "in" - │ │ └── then_loc: (157,22)-(157,26) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (157,0)-(157,4) = "case" - │ └── end_keyword_loc: (157,27)-(157,30) = "end" - ├── @ CaseMatchNode (location: (158,0)-(158,30)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (158,5)-(158,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (158,5)-(158,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (158,10)-(158,26)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ SourceLineNode (location: (158,13)-(158,21)) - │ │ │ └── flags: static_literal - │ │ ├── statements: ∅ - │ │ ├── in_loc: (158,10)-(158,12) = "in" - │ │ └── then_loc: (158,22)-(158,26) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (158,0)-(158,4) = "case" - │ └── end_keyword_loc: (158,27)-(158,30) = "end" - ├── @ CaseMatchNode (location: (159,0)-(159,34)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (159,5)-(159,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (159,5)-(159,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (159,10)-(159,30)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ SourceEncodingNode (location: (159,13)-(159,25)) - │ │ │ └── flags: static_literal - │ │ ├── statements: ∅ - │ │ ├── in_loc: (159,10)-(159,12) = "in" - │ │ └── then_loc: (159,26)-(159,30) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (159,0)-(159,4) = "case" - │ └── end_keyword_loc: (159,31)-(159,34) = "end" - ├── @ CaseMatchNode (location: (160,0)-(160,32)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (160,5)-(160,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (160,5)-(160,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (160,10)-(160,28)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ LambdaNode (location: (160,13)-(160,23)) - │ │ │ ├── flags: ∅ - │ │ │ ├── locals: [] - │ │ │ ├── operator_loc: (160,13)-(160,15) = "->" - │ │ │ ├── opening_loc: (160,16)-(160,17) = "{" - │ │ │ ├── closing_loc: (160,22)-(160,23) = "}" - │ │ │ ├── parameters: ∅ - │ │ │ └── body: - │ │ │ @ StatementsNode (location: (160,18)-(160,21)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ LocalVariableReadNode (location: (160,18)-(160,21)) - │ │ │ ├── flags: newline - │ │ │ ├── name: :bar - │ │ │ └── depth: 1 - │ │ ├── statements: ∅ - │ │ ├── in_loc: (160,10)-(160,12) = "in" - │ │ └── then_loc: (160,24)-(160,28) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (160,0)-(160,4) = "case" - │ └── end_keyword_loc: (160,29)-(160,32) = "end" - ├── @ CaseMatchNode (location: (162,0)-(162,32)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (162,5)-(162,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (162,5)-(162,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (162,10)-(162,28)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ IfNode (location: (162,13)-(162,23)) - │ │ │ ├── flags: newline - │ │ │ ├── if_keyword_loc: (162,17)-(162,19) = "if" - │ │ │ ├── predicate: - │ │ │ │ @ LocalVariableReadNode (location: (162,20)-(162,23)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ └── depth: 0 - │ │ │ ├── then_keyword_loc: ∅ - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (162,13)-(162,16)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ LocalVariableTargetNode (location: (162,13)-(162,16)) - │ │ │ │ ├── flags: newline - │ │ │ │ ├── name: :bar - │ │ │ │ └── depth: 0 - │ │ │ ├── subsequent: ∅ - │ │ │ └── end_keyword_loc: ∅ - │ │ ├── statements: ∅ - │ │ ├── in_loc: (162,10)-(162,12) = "in" - │ │ └── then_loc: (162,24)-(162,28) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (162,0)-(162,4) = "case" - │ └── end_keyword_loc: (162,29)-(162,32) = "end" - ├── @ CaseMatchNode (location: (163,0)-(163,30)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (163,5)-(163,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (163,5)-(163,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (163,10)-(163,26)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ IfNode (location: (163,13)-(163,21)) - │ │ │ ├── flags: newline - │ │ │ ├── if_keyword_loc: (163,15)-(163,17) = "if" - │ │ │ ├── predicate: - │ │ │ │ @ LocalVariableReadNode (location: (163,18)-(163,21)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ └── depth: 0 - │ │ │ ├── then_keyword_loc: ∅ - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (163,13)-(163,14)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ IntegerNode (location: (163,13)-(163,14)) - │ │ │ │ ├── flags: newline, static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ ├── subsequent: ∅ - │ │ │ └── end_keyword_loc: ∅ - │ │ ├── statements: ∅ - │ │ ├── in_loc: (163,10)-(163,12) = "in" - │ │ └── then_loc: (163,22)-(163,26) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (163,0)-(163,4) = "case" - │ └── end_keyword_loc: (163,27)-(163,30) = "end" - ├── @ CaseMatchNode (location: (164,0)-(164,32)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (164,5)-(164,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (164,5)-(164,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (164,10)-(164,28)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ IfNode (location: (164,13)-(164,23)) - │ │ │ ├── flags: newline - │ │ │ ├── if_keyword_loc: (164,17)-(164,19) = "if" - │ │ │ ├── predicate: - │ │ │ │ @ LocalVariableReadNode (location: (164,20)-(164,23)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ └── depth: 0 - │ │ │ ├── then_keyword_loc: ∅ - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (164,13)-(164,16)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ FloatNode (location: (164,13)-(164,16)) - │ │ │ │ ├── flags: newline, static_literal - │ │ │ │ └── value: 1.0 - │ │ │ ├── subsequent: ∅ - │ │ │ └── end_keyword_loc: ∅ - │ │ ├── statements: ∅ - │ │ ├── in_loc: (164,10)-(164,12) = "in" - │ │ └── then_loc: (164,24)-(164,28) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (164,0)-(164,4) = "case" - │ └── end_keyword_loc: (164,29)-(164,32) = "end" - ├── @ CaseMatchNode (location: (165,0)-(165,31)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (165,5)-(165,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (165,5)-(165,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (165,10)-(165,27)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ IfNode (location: (165,13)-(165,22)) - │ │ │ ├── flags: newline - │ │ │ ├── if_keyword_loc: (165,16)-(165,18) = "if" - │ │ │ ├── predicate: - │ │ │ │ @ LocalVariableReadNode (location: (165,19)-(165,22)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ └── depth: 0 - │ │ │ ├── then_keyword_loc: ∅ - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (165,13)-(165,15)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ ImaginaryNode (location: (165,13)-(165,15)) - │ │ │ │ ├── flags: newline, static_literal - │ │ │ │ └── numeric: - │ │ │ │ @ IntegerNode (location: (165,13)-(165,14)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ ├── subsequent: ∅ - │ │ │ └── end_keyword_loc: ∅ - │ │ ├── statements: ∅ - │ │ ├── in_loc: (165,10)-(165,12) = "in" - │ │ └── then_loc: (165,23)-(165,27) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (165,0)-(165,4) = "case" - │ └── end_keyword_loc: (165,28)-(165,31) = "end" - ├── @ CaseMatchNode (location: (166,0)-(166,31)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (166,5)-(166,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (166,5)-(166,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (166,10)-(166,27)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ IfNode (location: (166,13)-(166,22)) - │ │ │ ├── flags: newline - │ │ │ ├── if_keyword_loc: (166,16)-(166,18) = "if" - │ │ │ ├── predicate: - │ │ │ │ @ LocalVariableReadNode (location: (166,19)-(166,22)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ └── depth: 0 - │ │ │ ├── then_keyword_loc: ∅ - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (166,13)-(166,15)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ RationalNode (location: (166,13)-(166,15)) - │ │ │ │ ├── flags: newline, static_literal, decimal - │ │ │ │ ├── numerator: 1 - │ │ │ │ └── denominator: 1 - │ │ │ ├── subsequent: ∅ - │ │ │ └── end_keyword_loc: ∅ - │ │ ├── statements: ∅ - │ │ ├── in_loc: (166,10)-(166,12) = "in" - │ │ └── then_loc: (166,23)-(166,27) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (166,0)-(166,4) = "case" - │ └── end_keyword_loc: (166,28)-(166,31) = "end" - ├── @ CaseMatchNode (location: (167,0)-(167,33)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (167,5)-(167,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (167,5)-(167,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (167,10)-(167,29)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ IfNode (location: (167,13)-(167,24)) - │ │ │ ├── flags: newline - │ │ │ ├── if_keyword_loc: (167,18)-(167,20) = "if" - │ │ │ ├── predicate: - │ │ │ │ @ LocalVariableReadNode (location: (167,21)-(167,24)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ └── depth: 0 - │ │ │ ├── then_keyword_loc: ∅ - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (167,13)-(167,17)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ SymbolNode (location: (167,13)-(167,17)) - │ │ │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: (167,13)-(167,14) = ":" - │ │ │ │ ├── value_loc: (167,14)-(167,17) = "foo" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "foo" - │ │ │ ├── subsequent: ∅ - │ │ │ └── end_keyword_loc: ∅ - │ │ ├── statements: ∅ - │ │ ├── in_loc: (167,10)-(167,12) = "in" - │ │ └── then_loc: (167,25)-(167,29) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (167,0)-(167,4) = "case" - │ └── end_keyword_loc: (167,30)-(167,33) = "end" - ├── @ CaseMatchNode (location: (168,0)-(168,36)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (168,5)-(168,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (168,5)-(168,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (168,10)-(168,32)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ IfNode (location: (168,13)-(168,27)) - │ │ │ ├── flags: newline - │ │ │ ├── if_keyword_loc: (168,21)-(168,23) = "if" - │ │ │ ├── predicate: - │ │ │ │ @ LocalVariableReadNode (location: (168,24)-(168,27)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ └── depth: 0 - │ │ │ ├── then_keyword_loc: ∅ - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (168,13)-(168,20)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ SymbolNode (location: (168,13)-(168,20)) - │ │ │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: (168,13)-(168,16) = "%s[" - │ │ │ │ ├── value_loc: (168,16)-(168,19) = "foo" - │ │ │ │ ├── closing_loc: (168,19)-(168,20) = "]" - │ │ │ │ └── unescaped: "foo" - │ │ │ ├── subsequent: ∅ - │ │ │ └── end_keyword_loc: ∅ - │ │ ├── statements: ∅ - │ │ ├── in_loc: (168,10)-(168,12) = "in" - │ │ └── then_loc: (168,28)-(168,32) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (168,0)-(168,4) = "case" - │ └── end_keyword_loc: (168,33)-(168,36) = "end" - ├── @ CaseMatchNode (location: (169,0)-(169,35)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (169,5)-(169,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (169,5)-(169,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (169,10)-(169,31)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ IfNode (location: (169,13)-(169,26)) - │ │ │ ├── flags: newline - │ │ │ ├── if_keyword_loc: (169,20)-(169,22) = "if" - │ │ │ ├── predicate: - │ │ │ │ @ LocalVariableReadNode (location: (169,23)-(169,26)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ └── depth: 0 - │ │ │ ├── then_keyword_loc: ∅ - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (169,13)-(169,19)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ SymbolNode (location: (169,13)-(169,19)) - │ │ │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: (169,13)-(169,15) = ":\"" - │ │ │ │ ├── value_loc: (169,15)-(169,18) = "foo" - │ │ │ │ ├── closing_loc: (169,18)-(169,19) = "\"" - │ │ │ │ └── unescaped: "foo" - │ │ │ ├── subsequent: ∅ - │ │ │ └── end_keyword_loc: ∅ - │ │ ├── statements: ∅ - │ │ ├── in_loc: (169,10)-(169,12) = "in" - │ │ └── then_loc: (169,27)-(169,31) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (169,0)-(169,4) = "case" - │ └── end_keyword_loc: (169,32)-(169,35) = "end" - ├── @ CaseMatchNode (location: (170,0)-(170,34)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (170,5)-(170,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (170,5)-(170,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (170,10)-(170,30)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ IfNode (location: (170,13)-(170,25)) - │ │ │ ├── flags: newline - │ │ │ ├── if_keyword_loc: (170,19)-(170,21) = "if" - │ │ │ ├── predicate: - │ │ │ │ @ LocalVariableReadNode (location: (170,22)-(170,25)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ └── depth: 0 - │ │ │ ├── then_keyword_loc: ∅ - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (170,13)-(170,18)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ RegularExpressionNode (location: (170,13)-(170,18)) - │ │ │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: (170,13)-(170,14) = "/" - │ │ │ │ ├── content_loc: (170,14)-(170,17) = "foo" - │ │ │ │ ├── closing_loc: (170,17)-(170,18) = "/" - │ │ │ │ └── unescaped: "foo" - │ │ │ ├── subsequent: ∅ - │ │ │ └── end_keyword_loc: ∅ - │ │ ├── statements: ∅ - │ │ ├── in_loc: (170,10)-(170,12) = "in" - │ │ └── then_loc: (170,26)-(170,30) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (170,0)-(170,4) = "case" - │ └── end_keyword_loc: (170,31)-(170,34) = "end" - ├── @ CaseMatchNode (location: (171,0)-(171,34)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (171,5)-(171,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (171,5)-(171,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (171,10)-(171,30)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ IfNode (location: (171,13)-(171,25)) - │ │ │ ├── flags: newline - │ │ │ ├── if_keyword_loc: (171,19)-(171,21) = "if" - │ │ │ ├── predicate: - │ │ │ │ @ LocalVariableReadNode (location: (171,22)-(171,25)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ └── depth: 0 - │ │ │ ├── then_keyword_loc: ∅ - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (171,13)-(171,18)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ XStringNode (location: (171,13)-(171,18)) - │ │ │ │ ├── flags: newline - │ │ │ │ ├── opening_loc: (171,13)-(171,14) = "`" - │ │ │ │ ├── content_loc: (171,14)-(171,17) = "foo" - │ │ │ │ ├── closing_loc: (171,17)-(171,18) = "`" - │ │ │ │ └── unescaped: "foo" - │ │ │ ├── subsequent: ∅ - │ │ │ └── end_keyword_loc: ∅ - │ │ ├── statements: ∅ - │ │ ├── in_loc: (171,10)-(171,12) = "in" - │ │ └── then_loc: (171,26)-(171,30) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (171,0)-(171,4) = "case" - │ └── end_keyword_loc: (171,31)-(171,34) = "end" - ├── @ CaseMatchNode (location: (172,0)-(172,36)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (172,5)-(172,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (172,5)-(172,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (172,10)-(172,32)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ IfNode (location: (172,13)-(172,27)) - │ │ │ ├── flags: newline - │ │ │ ├── if_keyword_loc: (172,21)-(172,23) = "if" - │ │ │ ├── predicate: - │ │ │ │ @ LocalVariableReadNode (location: (172,24)-(172,27)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ └── depth: 0 - │ │ │ ├── then_keyword_loc: ∅ - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (172,13)-(172,20)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ XStringNode (location: (172,13)-(172,20)) - │ │ │ │ ├── flags: newline - │ │ │ │ ├── opening_loc: (172,13)-(172,16) = "%x[" - │ │ │ │ ├── content_loc: (172,16)-(172,19) = "foo" - │ │ │ │ ├── closing_loc: (172,19)-(172,20) = "]" - │ │ │ │ └── unescaped: "foo" - │ │ │ ├── subsequent: ∅ - │ │ │ └── end_keyword_loc: ∅ - │ │ ├── statements: ∅ - │ │ ├── in_loc: (172,10)-(172,12) = "in" - │ │ └── then_loc: (172,28)-(172,32) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (172,0)-(172,4) = "case" - │ └── end_keyword_loc: (172,33)-(172,36) = "end" - ├── @ CaseMatchNode (location: (173,0)-(173,36)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (173,5)-(173,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (173,5)-(173,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (173,10)-(173,32)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ IfNode (location: (173,13)-(173,27)) - │ │ │ ├── flags: newline - │ │ │ ├── if_keyword_loc: (173,21)-(173,23) = "if" - │ │ │ ├── predicate: - │ │ │ │ @ LocalVariableReadNode (location: (173,24)-(173,27)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ └── depth: 0 - │ │ │ ├── then_keyword_loc: ∅ - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (173,13)-(173,20)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ ArrayNode (location: (173,13)-(173,20)) - │ │ │ │ ├── flags: newline, static_literal - │ │ │ │ ├── elements: (length: 1) - │ │ │ │ │ └── @ SymbolNode (location: (173,16)-(173,19)) - │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── value_loc: (173,16)-(173,19) = "foo" - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── unescaped: "foo" - │ │ │ │ ├── opening_loc: (173,13)-(173,16) = "%i[" - │ │ │ │ └── closing_loc: (173,19)-(173,20) = "]" - │ │ │ ├── subsequent: ∅ - │ │ │ └── end_keyword_loc: ∅ - │ │ ├── statements: ∅ - │ │ ├── in_loc: (173,10)-(173,12) = "in" - │ │ └── then_loc: (173,28)-(173,32) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (173,0)-(173,4) = "case" - │ └── end_keyword_loc: (173,33)-(173,36) = "end" - ├── @ CaseMatchNode (location: (174,0)-(174,36)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (174,5)-(174,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (174,5)-(174,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (174,10)-(174,32)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ IfNode (location: (174,13)-(174,27)) - │ │ │ ├── flags: newline - │ │ │ ├── if_keyword_loc: (174,21)-(174,23) = "if" - │ │ │ ├── predicate: - │ │ │ │ @ LocalVariableReadNode (location: (174,24)-(174,27)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ └── depth: 0 - │ │ │ ├── then_keyword_loc: ∅ - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (174,13)-(174,20)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ ArrayNode (location: (174,13)-(174,20)) - │ │ │ │ ├── flags: newline, static_literal - │ │ │ │ ├── elements: (length: 1) - │ │ │ │ │ └── @ SymbolNode (location: (174,16)-(174,19)) - │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── value_loc: (174,16)-(174,19) = "foo" - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── unescaped: "foo" - │ │ │ │ ├── opening_loc: (174,13)-(174,16) = "%I[" - │ │ │ │ └── closing_loc: (174,19)-(174,20) = "]" - │ │ │ ├── subsequent: ∅ - │ │ │ └── end_keyword_loc: ∅ - │ │ ├── statements: ∅ - │ │ ├── in_loc: (174,10)-(174,12) = "in" - │ │ └── then_loc: (174,28)-(174,32) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (174,0)-(174,4) = "case" - │ └── end_keyword_loc: (174,33)-(174,36) = "end" - ├── @ CaseMatchNode (location: (175,0)-(175,36)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (175,5)-(175,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (175,5)-(175,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (175,10)-(175,32)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ IfNode (location: (175,13)-(175,27)) - │ │ │ ├── flags: newline - │ │ │ ├── if_keyword_loc: (175,21)-(175,23) = "if" - │ │ │ ├── predicate: - │ │ │ │ @ LocalVariableReadNode (location: (175,24)-(175,27)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ └── depth: 0 - │ │ │ ├── then_keyword_loc: ∅ - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (175,13)-(175,20)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ ArrayNode (location: (175,13)-(175,20)) - │ │ │ │ ├── flags: newline - │ │ │ │ ├── elements: (length: 1) - │ │ │ │ │ └── @ StringNode (location: (175,16)-(175,19)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── content_loc: (175,16)-(175,19) = "foo" - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── unescaped: "foo" - │ │ │ │ ├── opening_loc: (175,13)-(175,16) = "%w[" - │ │ │ │ └── closing_loc: (175,19)-(175,20) = "]" - │ │ │ ├── subsequent: ∅ - │ │ │ └── end_keyword_loc: ∅ - │ │ ├── statements: ∅ - │ │ ├── in_loc: (175,10)-(175,12) = "in" - │ │ └── then_loc: (175,28)-(175,32) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (175,0)-(175,4) = "case" - │ └── end_keyword_loc: (175,33)-(175,36) = "end" - ├── @ CaseMatchNode (location: (176,0)-(176,36)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (176,5)-(176,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (176,5)-(176,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (176,10)-(176,32)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ IfNode (location: (176,13)-(176,27)) - │ │ │ ├── flags: newline - │ │ │ ├── if_keyword_loc: (176,21)-(176,23) = "if" - │ │ │ ├── predicate: - │ │ │ │ @ LocalVariableReadNode (location: (176,24)-(176,27)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ └── depth: 0 - │ │ │ ├── then_keyword_loc: ∅ - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (176,13)-(176,20)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ ArrayNode (location: (176,13)-(176,20)) - │ │ │ │ ├── flags: newline - │ │ │ │ ├── elements: (length: 1) - │ │ │ │ │ └── @ StringNode (location: (176,16)-(176,19)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── content_loc: (176,16)-(176,19) = "foo" - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── unescaped: "foo" - │ │ │ │ ├── opening_loc: (176,13)-(176,16) = "%W[" - │ │ │ │ └── closing_loc: (176,19)-(176,20) = "]" - │ │ │ ├── subsequent: ∅ - │ │ │ └── end_keyword_loc: ∅ - │ │ ├── statements: ∅ - │ │ ├── in_loc: (176,10)-(176,12) = "in" - │ │ └── then_loc: (176,28)-(176,32) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (176,0)-(176,4) = "case" - │ └── end_keyword_loc: (176,33)-(176,36) = "end" - ├── @ CaseMatchNode (location: (177,0)-(177,36)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (177,5)-(177,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (177,5)-(177,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (177,10)-(177,32)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ IfNode (location: (177,13)-(177,27)) - │ │ │ ├── flags: newline - │ │ │ ├── if_keyword_loc: (177,21)-(177,23) = "if" - │ │ │ ├── predicate: - │ │ │ │ @ LocalVariableReadNode (location: (177,24)-(177,27)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ └── depth: 0 - │ │ │ ├── then_keyword_loc: ∅ - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (177,13)-(177,20)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ StringNode (location: (177,13)-(177,20)) - │ │ │ │ ├── flags: newline - │ │ │ │ ├── opening_loc: (177,13)-(177,16) = "%q[" - │ │ │ │ ├── content_loc: (177,16)-(177,19) = "foo" - │ │ │ │ ├── closing_loc: (177,19)-(177,20) = "]" - │ │ │ │ └── unescaped: "foo" - │ │ │ ├── subsequent: ∅ - │ │ │ └── end_keyword_loc: ∅ - │ │ ├── statements: ∅ - │ │ ├── in_loc: (177,10)-(177,12) = "in" - │ │ └── then_loc: (177,28)-(177,32) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (177,0)-(177,4) = "case" - │ └── end_keyword_loc: (177,33)-(177,36) = "end" - ├── @ CaseMatchNode (location: (178,0)-(178,36)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (178,5)-(178,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (178,5)-(178,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (178,10)-(178,32)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ IfNode (location: (178,13)-(178,27)) - │ │ │ ├── flags: newline - │ │ │ ├── if_keyword_loc: (178,21)-(178,23) = "if" - │ │ │ ├── predicate: - │ │ │ │ @ LocalVariableReadNode (location: (178,24)-(178,27)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ └── depth: 0 - │ │ │ ├── then_keyword_loc: ∅ - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (178,13)-(178,20)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ StringNode (location: (178,13)-(178,20)) - │ │ │ │ ├── flags: newline - │ │ │ │ ├── opening_loc: (178,13)-(178,16) = "%Q[" - │ │ │ │ ├── content_loc: (178,16)-(178,19) = "foo" - │ │ │ │ ├── closing_loc: (178,19)-(178,20) = "]" - │ │ │ │ └── unescaped: "foo" - │ │ │ ├── subsequent: ∅ - │ │ │ └── end_keyword_loc: ∅ - │ │ ├── statements: ∅ - │ │ ├── in_loc: (178,10)-(178,12) = "in" - │ │ └── then_loc: (178,28)-(178,32) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (178,0)-(178,4) = "case" - │ └── end_keyword_loc: (178,33)-(178,36) = "end" - ├── @ CaseMatchNode (location: (179,0)-(179,34)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (179,5)-(179,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (179,5)-(179,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (179,10)-(179,30)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ IfNode (location: (179,13)-(179,25)) - │ │ │ ├── flags: newline - │ │ │ ├── if_keyword_loc: (179,19)-(179,21) = "if" - │ │ │ ├── predicate: - │ │ │ │ @ LocalVariableReadNode (location: (179,22)-(179,25)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ └── depth: 0 - │ │ │ ├── then_keyword_loc: ∅ - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (179,13)-(179,18)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ StringNode (location: (179,13)-(179,18)) - │ │ │ │ ├── flags: newline - │ │ │ │ ├── opening_loc: (179,13)-(179,14) = "\"" - │ │ │ │ ├── content_loc: (179,14)-(179,17) = "foo" - │ │ │ │ ├── closing_loc: (179,17)-(179,18) = "\"" - │ │ │ │ └── unescaped: "foo" - │ │ │ ├── subsequent: ∅ - │ │ │ └── end_keyword_loc: ∅ - │ │ ├── statements: ∅ - │ │ ├── in_loc: (179,10)-(179,12) = "in" - │ │ └── then_loc: (179,26)-(179,30) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (179,0)-(179,4) = "case" - │ └── end_keyword_loc: (179,31)-(179,34) = "end" - ├── @ CaseMatchNode (location: (180,0)-(180,32)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (180,5)-(180,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (180,5)-(180,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (180,10)-(180,28)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ IfNode (location: (180,13)-(180,23)) - │ │ │ ├── flags: newline - │ │ │ ├── if_keyword_loc: (180,17)-(180,19) = "if" - │ │ │ ├── predicate: - │ │ │ │ @ LocalVariableReadNode (location: (180,20)-(180,23)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ └── depth: 0 - │ │ │ ├── then_keyword_loc: ∅ - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (180,13)-(180,16)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ NilNode (location: (180,13)-(180,16)) - │ │ │ │ └── flags: newline, static_literal - │ │ │ ├── subsequent: ∅ - │ │ │ └── end_keyword_loc: ∅ - │ │ ├── statements: ∅ - │ │ ├── in_loc: (180,10)-(180,12) = "in" - │ │ └── then_loc: (180,24)-(180,28) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (180,0)-(180,4) = "case" - │ └── end_keyword_loc: (180,29)-(180,32) = "end" - ├── @ CaseMatchNode (location: (181,0)-(181,33)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (181,5)-(181,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (181,5)-(181,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (181,10)-(181,29)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ IfNode (location: (181,13)-(181,24)) - │ │ │ ├── flags: newline - │ │ │ ├── if_keyword_loc: (181,18)-(181,20) = "if" - │ │ │ ├── predicate: - │ │ │ │ @ LocalVariableReadNode (location: (181,21)-(181,24)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ └── depth: 0 - │ │ │ ├── then_keyword_loc: ∅ - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (181,13)-(181,17)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ SelfNode (location: (181,13)-(181,17)) - │ │ │ │ └── flags: newline - │ │ │ ├── subsequent: ∅ - │ │ │ └── end_keyword_loc: ∅ - │ │ ├── statements: ∅ - │ │ ├── in_loc: (181,10)-(181,12) = "in" - │ │ └── then_loc: (181,25)-(181,29) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (181,0)-(181,4) = "case" - │ └── end_keyword_loc: (181,30)-(181,33) = "end" - ├── @ CaseMatchNode (location: (182,0)-(182,33)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (182,5)-(182,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (182,5)-(182,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (182,10)-(182,29)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ IfNode (location: (182,13)-(182,24)) - │ │ │ ├── flags: newline - │ │ │ ├── if_keyword_loc: (182,18)-(182,20) = "if" - │ │ │ ├── predicate: - │ │ │ │ @ LocalVariableReadNode (location: (182,21)-(182,24)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ └── depth: 0 - │ │ │ ├── then_keyword_loc: ∅ - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (182,13)-(182,17)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ TrueNode (location: (182,13)-(182,17)) - │ │ │ │ └── flags: newline, static_literal - │ │ │ ├── subsequent: ∅ - │ │ │ └── end_keyword_loc: ∅ - │ │ ├── statements: ∅ - │ │ ├── in_loc: (182,10)-(182,12) = "in" - │ │ └── then_loc: (182,25)-(182,29) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (182,0)-(182,4) = "case" - │ └── end_keyword_loc: (182,30)-(182,33) = "end" - ├── @ CaseMatchNode (location: (183,0)-(183,34)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (183,5)-(183,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (183,5)-(183,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (183,10)-(183,30)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ IfNode (location: (183,13)-(183,25)) - │ │ │ ├── flags: newline - │ │ │ ├── if_keyword_loc: (183,19)-(183,21) = "if" - │ │ │ ├── predicate: - │ │ │ │ @ LocalVariableReadNode (location: (183,22)-(183,25)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ └── depth: 0 - │ │ │ ├── then_keyword_loc: ∅ - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (183,13)-(183,18)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ FalseNode (location: (183,13)-(183,18)) - │ │ │ │ └── flags: newline, static_literal - │ │ │ ├── subsequent: ∅ - │ │ │ └── end_keyword_loc: ∅ - │ │ ├── statements: ∅ - │ │ ├── in_loc: (183,10)-(183,12) = "in" - │ │ └── then_loc: (183,26)-(183,30) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (183,0)-(183,4) = "case" - │ └── end_keyword_loc: (183,31)-(183,34) = "end" - ├── @ CaseMatchNode (location: (184,0)-(184,37)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (184,5)-(184,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (184,5)-(184,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (184,10)-(184,33)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ IfNode (location: (184,13)-(184,28)) - │ │ │ ├── flags: newline - │ │ │ ├── if_keyword_loc: (184,22)-(184,24) = "if" - │ │ │ ├── predicate: - │ │ │ │ @ LocalVariableReadNode (location: (184,25)-(184,28)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ └── depth: 0 - │ │ │ ├── then_keyword_loc: ∅ - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (184,13)-(184,21)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ SourceFileNode (location: (184,13)-(184,21)) - │ │ │ │ ├── flags: newline - │ │ │ │ └── filepath: "patterns.txt" - │ │ │ ├── subsequent: ∅ - │ │ │ └── end_keyword_loc: ∅ - │ │ ├── statements: ∅ - │ │ ├── in_loc: (184,10)-(184,12) = "in" - │ │ └── then_loc: (184,29)-(184,33) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (184,0)-(184,4) = "case" - │ └── end_keyword_loc: (184,34)-(184,37) = "end" - ├── @ CaseMatchNode (location: (185,0)-(185,37)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (185,5)-(185,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (185,5)-(185,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (185,10)-(185,33)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ IfNode (location: (185,13)-(185,28)) - │ │ │ ├── flags: newline - │ │ │ ├── if_keyword_loc: (185,22)-(185,24) = "if" - │ │ │ ├── predicate: - │ │ │ │ @ LocalVariableReadNode (location: (185,25)-(185,28)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ └── depth: 0 - │ │ │ ├── then_keyword_loc: ∅ - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (185,13)-(185,21)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ SourceLineNode (location: (185,13)-(185,21)) - │ │ │ │ └── flags: newline, static_literal - │ │ │ ├── subsequent: ∅ - │ │ │ └── end_keyword_loc: ∅ - │ │ ├── statements: ∅ - │ │ ├── in_loc: (185,10)-(185,12) = "in" - │ │ └── then_loc: (185,29)-(185,33) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (185,0)-(185,4) = "case" - │ └── end_keyword_loc: (185,34)-(185,37) = "end" - ├── @ CaseMatchNode (location: (186,0)-(186,41)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (186,5)-(186,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (186,5)-(186,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (186,10)-(186,37)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ IfNode (location: (186,13)-(186,32)) - │ │ │ ├── flags: newline - │ │ │ ├── if_keyword_loc: (186,26)-(186,28) = "if" - │ │ │ ├── predicate: - │ │ │ │ @ LocalVariableReadNode (location: (186,29)-(186,32)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ └── depth: 0 - │ │ │ ├── then_keyword_loc: ∅ - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (186,13)-(186,25)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ SourceEncodingNode (location: (186,13)-(186,25)) - │ │ │ │ └── flags: newline, static_literal - │ │ │ ├── subsequent: ∅ - │ │ │ └── end_keyword_loc: ∅ - │ │ ├── statements: ∅ - │ │ ├── in_loc: (186,10)-(186,12) = "in" - │ │ └── then_loc: (186,33)-(186,37) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (186,0)-(186,4) = "case" - │ └── end_keyword_loc: (186,38)-(186,41) = "end" - ├── @ CaseMatchNode (location: (187,0)-(187,39)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (187,5)-(187,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (187,5)-(187,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (187,10)-(187,35)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ IfNode (location: (187,13)-(187,30)) - │ │ │ ├── flags: newline - │ │ │ ├── if_keyword_loc: (187,24)-(187,26) = "if" - │ │ │ ├── predicate: - │ │ │ │ @ LocalVariableReadNode (location: (187,27)-(187,30)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ └── depth: 0 - │ │ │ ├── then_keyword_loc: ∅ - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (187,13)-(187,23)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ LambdaNode (location: (187,13)-(187,23)) - │ │ │ │ ├── flags: newline - │ │ │ │ ├── locals: [] - │ │ │ │ ├── operator_loc: (187,13)-(187,15) = "->" - │ │ │ │ ├── opening_loc: (187,16)-(187,17) = "{" - │ │ │ │ ├── closing_loc: (187,22)-(187,23) = "}" - │ │ │ │ ├── parameters: ∅ - │ │ │ │ └── body: - │ │ │ │ @ StatementsNode (location: (187,18)-(187,21)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ LocalVariableReadNode (location: (187,18)-(187,21)) - │ │ │ │ ├── flags: newline - │ │ │ │ ├── name: :bar - │ │ │ │ └── depth: 1 - │ │ │ ├── subsequent: ∅ - │ │ │ └── end_keyword_loc: ∅ - │ │ ├── statements: ∅ - │ │ ├── in_loc: (187,10)-(187,12) = "in" - │ │ └── then_loc: (187,31)-(187,35) = "then" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (187,0)-(187,4) = "case" - │ └── end_keyword_loc: (187,36)-(187,39) = "end" - ├── @ IfNode (location: (189,0)-(190,3)) - │ ├── flags: newline - │ ├── if_keyword_loc: (189,0)-(189,2) = "if" - │ ├── predicate: - │ │ @ MatchPredicateNode (location: (189,3)-(189,10)) - │ │ ├── flags: ∅ - │ │ ├── value: - │ │ │ @ CallNode (location: (189,3)-(189,4)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :a - │ │ │ ├── message_loc: (189,3)-(189,4) = "a" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── pattern: - │ │ │ @ ArrayPatternNode (location: (189,8)-(189,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── constant: ∅ - │ │ │ ├── requireds: (length: 0) - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── opening_loc: (189,8)-(189,9) = "[" - │ │ │ └── closing_loc: (189,9)-(189,10) = "]" - │ │ └── operator_loc: (189,5)-(189,7) = "in" - │ ├── then_keyword_loc: ∅ - │ ├── statements: ∅ - │ ├── subsequent: ∅ - │ └── end_keyword_loc: (190,0)-(190,3) = "end" - ├── @ MatchRequiredNode (location: (192,0)-(194,1)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (192,0)-(192,1)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (192,0)-(192,1) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (192,5)-(194,1)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ LocalVariableTargetNode (location: (193,2)-(193,3)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :b - │ │ │ └── depth: 0 - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── opening_loc: (192,5)-(192,6) = "[" - │ │ └── closing_loc: (194,0)-(194,1) = "]" - │ └── operator_loc: (192,2)-(192,4) = "=>" - ├── @ MatchPredicateNode (location: (196,0)-(200,1)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (196,0)-(196,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (196,0)-(196,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ HashPatternNode (location: (196,7)-(200,1)) - │ │ ├── flags: ∅ - │ │ ├── constant: - │ │ │ @ ConstantReadNode (location: (196,7)-(196,8)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :A - │ │ ├── elements: (length: 1) - │ │ │ └── @ AssocNode (location: (197,2)-(199,3)) - │ │ │ ├── flags: ∅ - │ │ │ ├── key: - │ │ │ │ @ SymbolNode (location: (197,2)-(197,6)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── value_loc: (197,2)-(197,5) = "bar" - │ │ │ │ ├── closing_loc: (197,5)-(197,6) = ":" - │ │ │ │ └── unescaped: "bar" - │ │ │ ├── value: - │ │ │ │ @ HashPatternNode (location: (197,7)-(199,3)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── constant: - │ │ │ │ │ @ ConstantReadNode (location: (197,7)-(197,8)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── name: :B - │ │ │ │ ├── elements: (length: 1) - │ │ │ │ │ └── @ AssocNode (location: (198,4)-(198,12)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── key: - │ │ │ │ │ │ @ SymbolNode (location: (198,4)-(198,10)) - │ │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ │ ├── value_loc: (198,4)-(198,9) = "value" - │ │ │ │ │ │ ├── closing_loc: (198,9)-(198,10) = ":" - │ │ │ │ │ │ └── unescaped: "value" - │ │ │ │ │ ├── value: - │ │ │ │ │ │ @ LocalVariableTargetNode (location: (198,11)-(198,12)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ ├── name: :a - │ │ │ │ │ │ └── depth: 0 - │ │ │ │ │ └── operator_loc: ∅ - │ │ │ │ ├── rest: ∅ - │ │ │ │ ├── opening_loc: (197,8)-(197,9) = "[" - │ │ │ │ └── closing_loc: (199,2)-(199,3) = "]" - │ │ │ └── operator_loc: ∅ - │ │ ├── rest: ∅ - │ │ ├── opening_loc: (196,8)-(196,9) = "[" - │ │ └── closing_loc: (200,0)-(200,1) = "]" - │ └── operator_loc: (196,4)-(196,6) = "in" - ├── @ MatchPredicateNode (location: (202,0)-(202,17)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (202,0)-(202,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (202,0)-(202,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ CapturePatternNode (location: (202,7)-(202,17)) - │ │ ├── flags: ∅ - │ │ ├── value: - │ │ │ @ LocalVariableTargetNode (location: (202,7)-(202,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :bar - │ │ │ └── depth: 0 - │ │ ├── target: - │ │ │ @ LocalVariableTargetNode (location: (202,14)-(202,17)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :baz - │ │ │ └── depth: 0 - │ │ └── operator_loc: (202,11)-(202,13) = "=>" - │ └── operator_loc: (202,4)-(202,6) = "in" - ├── @ MatchRequiredNode (location: (203,0)-(203,17)) - │ ├── flags: newline - │ ├── value: - │ │ @ CallNode (location: (203,0)-(203,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (203,0)-(203,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── pattern: - │ │ @ CapturePatternNode (location: (203,7)-(203,17)) - │ │ ├── flags: ∅ - │ │ ├── value: - │ │ │ @ LocalVariableTargetNode (location: (203,7)-(203,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :bar - │ │ │ └── depth: 0 - │ │ ├── target: - │ │ │ @ LocalVariableTargetNode (location: (203,14)-(203,17)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :baz - │ │ │ └── depth: 0 - │ │ └── operator_loc: (203,11)-(203,13) = "=>" - │ └── operator_loc: (203,4)-(203,6) = "=>" - ├── @ MultiWriteNode (location: (205,0)-(205,20)) - │ ├── flags: newline - │ ├── lefts: (length: 3) - │ │ ├── @ LocalVariableTargetNode (location: (205,0)-(205,3)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :foo - │ │ │ └── depth: 0 - │ │ ├── @ LocalVariableTargetNode (location: (205,5)-(205,8)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :bar - │ │ │ └── depth: 0 - │ │ └── @ LocalVariableTargetNode (location: (205,10)-(205,13)) - │ │ ├── flags: ∅ - │ │ ├── name: :baz - │ │ └── depth: 0 - │ ├── rest: ∅ - │ ├── rights: (length: 0) - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── operator_loc: (205,14)-(205,15) = "=" - │ └── value: - │ @ ArrayNode (location: (205,16)-(205,20)) - │ ├── flags: static_literal - │ ├── elements: (length: 2) - │ │ ├── @ IntegerNode (location: (205,16)-(205,17)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── @ IntegerNode (location: (205,19)-(205,20)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── opening_loc: ∅ - │ └── closing_loc: ∅ - ├── @ CallNode (location: (206,0)-(208,3)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (206,0)-(206,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (206,4)-(208,3)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (207,2)-(207,29)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ MatchRequiredNode (location: (207,2)-(207,29)) - │ │ ├── flags: newline - │ │ ├── value: - │ │ │ @ ArrayNode (location: (207,2)-(207,8)) - │ │ │ ├── flags: static_literal - │ │ │ ├── elements: (length: 2) - │ │ │ │ ├── @ IntegerNode (location: (207,3)-(207,4)) - │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ └── value: 1 - │ │ │ │ └── @ IntegerNode (location: (207,6)-(207,7)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 2 - │ │ │ ├── opening_loc: (207,2)-(207,3) = "[" - │ │ │ └── closing_loc: (207,7)-(207,8) = "]" - │ │ ├── pattern: - │ │ │ @ CapturePatternNode (location: (207,12)-(207,29)) - │ │ │ ├── flags: ∅ - │ │ │ ├── value: - │ │ │ │ @ ArrayPatternNode (location: (207,12)-(207,22)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── constant: ∅ - │ │ │ │ ├── requireds: (length: 2) - │ │ │ │ │ ├── @ LocalVariableTargetNode (location: (207,13)-(207,16)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ ├── name: :foo - │ │ │ │ │ │ └── depth: 1 - │ │ │ │ │ └── @ LocalVariableTargetNode (location: (207,18)-(207,21)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── name: :bar - │ │ │ │ │ └── depth: 1 - │ │ │ │ ├── rest: ∅ - │ │ │ │ ├── posts: (length: 0) - │ │ │ │ ├── opening_loc: (207,12)-(207,13) = "[" - │ │ │ │ └── closing_loc: (207,21)-(207,22) = "]" - │ │ │ ├── target: - │ │ │ │ @ LocalVariableTargetNode (location: (207,26)-(207,29)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ └── depth: 1 - │ │ │ └── operator_loc: (207,23)-(207,25) = "=>" - │ │ └── operator_loc: (207,9)-(207,11) = "=>" - │ ├── opening_loc: (206,4)-(206,6) = "do" - │ └── closing_loc: (208,0)-(208,3) = "end" - ├── @ MatchRequiredNode (location: (210,0)-(210,19)) - │ ├── flags: newline - │ ├── value: - │ │ @ LocalVariableReadNode (location: (210,0)-(210,3)) - │ │ ├── flags: ∅ - │ │ ├── name: :foo - │ │ └── depth: 0 - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (210,7)-(210,19)) - │ │ ├── flags: ∅ - │ │ ├── constant: - │ │ │ @ ConstantReadNode (location: (210,7)-(210,13)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :Object - │ │ ├── requireds: (length: 1) - │ │ │ └── @ HashPatternNode (location: (210,14)-(210,18)) - │ │ │ ├── flags: ∅ - │ │ │ ├── constant: ∅ - │ │ │ ├── elements: (length: 1) - │ │ │ │ └── @ AssocNode (location: (210,15)-(210,17)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── key: - │ │ │ │ │ @ SymbolNode (location: (210,15)-(210,17)) - │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── value_loc: (210,15)-(210,16) = "x" - │ │ │ │ │ ├── closing_loc: (210,16)-(210,17) = ":" - │ │ │ │ │ └── unescaped: "x" - │ │ │ │ ├── value: - │ │ │ │ │ @ ImplicitNode (location: (210,15)-(210,16)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── value: - │ │ │ │ │ @ LocalVariableTargetNode (location: (210,15)-(210,16)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── name: :x - │ │ │ │ │ └── depth: 0 - │ │ │ │ └── operator_loc: ∅ - │ │ │ ├── rest: ∅ - │ │ │ ├── opening_loc: (210,14)-(210,15) = "{" - │ │ │ └── closing_loc: (210,17)-(210,18) = "}" - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── opening_loc: (210,13)-(210,14) = "[" - │ │ └── closing_loc: (210,18)-(210,19) = "]" - │ └── operator_loc: (210,4)-(210,6) = "=>" - ├── @ CallNode (location: (212,0)-(212,19)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ IntegerNode (location: (212,0)-(212,1)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── call_operator_loc: (212,1)-(212,2) = "." - │ ├── name: :then - │ ├── message_loc: (212,2)-(212,6) = "then" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (212,7)-(212,19)) - │ ├── flags: ∅ - │ ├── locals: [:_1] - │ ├── parameters: - │ │ @ NumberedParametersNode (location: (212,7)-(212,19)) - │ │ ├── flags: ∅ - │ │ └── maximum: 1 - │ ├── body: - │ │ @ StatementsNode (location: (212,9)-(212,17)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ MatchPredicateNode (location: (212,9)-(212,17)) - │ │ ├── flags: newline - │ │ ├── value: - │ │ │ @ IntegerNode (location: (212,9)-(212,10)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── pattern: - │ │ │ @ PinnedVariableNode (location: (212,14)-(212,17)) - │ │ │ ├── flags: ∅ - │ │ │ ├── variable: - │ │ │ │ @ LocalVariableReadNode (location: (212,15)-(212,17)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :_1 - │ │ │ │ └── depth: 0 - │ │ │ └── operator_loc: (212,14)-(212,15) = "^" - │ │ └── operator_loc: (212,11)-(212,13) = "in" - │ ├── opening_loc: (212,7)-(212,8) = "{" - │ └── closing_loc: (212,18)-(212,19) = "}" - ├── @ MultiWriteNode (location: (214,0)-(217,5)) - │ ├── flags: newline - │ ├── lefts: (length: 2) - │ │ ├── @ LocalVariableTargetNode (location: (215,2)-(215,3)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :a - │ │ │ └── depth: 0 - │ │ └── @ LocalVariableTargetNode (location: (216,2)-(216,3)) - │ │ ├── flags: ∅ - │ │ ├── name: :b - │ │ └── depth: 0 - │ ├── rest: ∅ - │ ├── rights: (length: 0) - │ ├── lparen_loc: (214,0)-(214,1) = "(" - │ ├── rparen_loc: (217,0)-(217,1) = ")" - │ ├── operator_loc: (217,2)-(217,3) = "=" - │ └── value: - │ @ CallNode (location: (217,4)-(217,5)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :c - │ ├── message_loc: (217,4)-(217,5) = "c" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CaseMatchNode (location: (219,0)-(219,25)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ ParenthesesNode (location: (219,5)-(219,7)) - │ │ ├── flags: ∅ - │ │ ├── body: ∅ - │ │ ├── opening_loc: (219,5)-(219,6) = "(" - │ │ └── closing_loc: (219,6)-(219,7) = ")" - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (219,9)-(219,20)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ ArrayPatternNode (location: (219,12)-(219,20)) - │ │ │ ├── flags: ∅ - │ │ │ ├── constant: ∅ - │ │ │ ├── requireds: (length: 2) - │ │ │ │ ├── @ LocalVariableTargetNode (location: (219,13)-(219,15)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── name: :_a - │ │ │ │ │ └── depth: 0 - │ │ │ │ └── @ LocalVariableTargetNode (location: (219,17)-(219,19)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :_a - │ │ │ │ └── depth: 0 - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── opening_loc: (219,12)-(219,13) = "[" - │ │ │ └── closing_loc: (219,19)-(219,20) = "]" - │ │ ├── statements: ∅ - │ │ ├── in_loc: (219,9)-(219,11) = "in" - │ │ └── then_loc: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (219,0)-(219,4) = "case" - │ └── end_keyword_loc: (219,22)-(219,25) = "end" - └── @ CaseMatchNode (location: (220,0)-(220,31)) - ├── flags: newline - ├── predicate: - │ @ ParenthesesNode (location: (220,5)-(220,7)) - │ ├── flags: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (220,5)-(220,6) = "(" - │ └── closing_loc: (220,6)-(220,7) = ")" - ├── conditions: (length: 1) - │ └── @ InNode (location: (220,9)-(220,26)) - │ ├── flags: ∅ - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (220,12)-(220,26)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── requireds: (length: 2) - │ │ │ ├── @ HashPatternNode (location: (220,13)-(220,18)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── constant: ∅ - │ │ │ │ ├── elements: (length: 1) - │ │ │ │ │ └── @ AssocNode (location: (220,14)-(220,17)) - │ │ │ │ │ ├── flags: static_literal - │ │ │ │ │ ├── key: - │ │ │ │ │ │ @ SymbolNode (location: (220,14)-(220,16)) - │ │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ │ ├── value_loc: (220,14)-(220,15) = "a" - │ │ │ │ │ │ ├── closing_loc: (220,15)-(220,16) = ":" - │ │ │ │ │ │ └── unescaped: "a" - │ │ │ │ │ ├── value: - │ │ │ │ │ │ @ IntegerNode (location: (220,16)-(220,17)) - │ │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ │ └── value: 1 - │ │ │ │ │ └── operator_loc: ∅ - │ │ │ │ ├── rest: ∅ - │ │ │ │ ├── opening_loc: (220,13)-(220,14) = "{" - │ │ │ │ └── closing_loc: (220,17)-(220,18) = "}" - │ │ │ └── @ HashPatternNode (location: (220,20)-(220,25)) - │ │ │ ├── flags: ∅ - │ │ │ ├── constant: ∅ - │ │ │ ├── elements: (length: 1) - │ │ │ │ └── @ AssocNode (location: (220,21)-(220,24)) - │ │ │ │ ├── flags: static_literal - │ │ │ │ ├── key: - │ │ │ │ │ @ SymbolNode (location: (220,21)-(220,23)) - │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── value_loc: (220,21)-(220,22) = "a" - │ │ │ │ │ ├── closing_loc: (220,22)-(220,23) = ":" - │ │ │ │ │ └── unescaped: "a" - │ │ │ │ ├── value: - │ │ │ │ │ @ IntegerNode (location: (220,23)-(220,24)) - │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ └── value: 2 - │ │ │ │ └── operator_loc: ∅ - │ │ │ ├── rest: ∅ - │ │ │ ├── opening_loc: (220,20)-(220,21) = "{" - │ │ │ └── closing_loc: (220,24)-(220,25) = "}" - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── opening_loc: (220,12)-(220,13) = "[" - │ │ └── closing_loc: (220,25)-(220,26) = "]" - │ ├── statements: ∅ - │ ├── in_loc: (220,9)-(220,11) = "in" - │ └── then_loc: ∅ - ├── else_clause: ∅ - ├── case_keyword_loc: (220,0)-(220,4) = "case" - └── end_keyword_loc: (220,28)-(220,31) = "end" diff --git a/test/prism/snapshots/procs.txt b/test/prism/snapshots/procs.txt deleted file mode 100644 index 91a53e98f661f3..00000000000000 --- a/test/prism/snapshots/procs.txt +++ /dev/null @@ -1,451 +0,0 @@ -@ ProgramNode (location: (1,0)-(27,19)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(27,19)) - ├── flags: ∅ - └── body: (length: 10) - ├── @ LambdaNode (location: (1,0)-(1,21)) - │ ├── flags: newline - │ ├── locals: [:a, :b, :c, :d] - │ ├── operator_loc: (1,0)-(1,2) = "->" - │ ├── opening_loc: (1,16)-(1,17) = "{" - │ ├── closing_loc: (1,20)-(1,21) = "}" - │ ├── parameters: - │ │ @ BlockParametersNode (location: (1,3)-(1,15)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (1,4)-(1,5)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (1,4)-(1,5)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :a - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 3) - │ │ │ ├── @ BlockLocalVariableNode (location: (1,7)-(1,8)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :b - │ │ │ ├── @ BlockLocalVariableNode (location: (1,10)-(1,11)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :c - │ │ │ └── @ BlockLocalVariableNode (location: (1,13)-(1,14)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :d - │ │ ├── opening_loc: (1,3)-(1,4) = "(" - │ │ └── closing_loc: (1,14)-(1,15) = ")" - │ └── body: - │ @ StatementsNode (location: (1,18)-(1,19)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ LocalVariableReadNode (location: (1,18)-(1,19)) - │ ├── flags: newline - │ ├── name: :b - │ └── depth: 0 - ├── @ LambdaNode (location: (3,0)-(5,3)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── operator_loc: (3,0)-(3,2) = "->" - │ ├── opening_loc: (3,3)-(3,5) = "do" - │ ├── closing_loc: (5,0)-(5,3) = "end" - │ ├── parameters: ∅ - │ └── body: - │ @ BeginNode (location: (3,3)-(5,3)) - │ ├── flags: ∅ - │ ├── begin_keyword_loc: ∅ - │ ├── statements: ∅ - │ ├── rescue_clause: ∅ - │ ├── else_clause: ∅ - │ ├── ensure_clause: - │ │ @ EnsureNode (location: (4,0)-(5,3)) - │ │ ├── flags: ∅ - │ │ ├── ensure_keyword_loc: (4,0)-(4,6) = "ensure" - │ │ ├── statements: ∅ - │ │ └── end_keyword_loc: (5,0)-(5,3) = "end" - │ └── end_keyword_loc: (5,0)-(5,3) = "end" - ├── @ LambdaNode (location: (7,0)-(11,3)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── operator_loc: (7,0)-(7,2) = "->" - │ ├── opening_loc: (7,3)-(7,5) = "do" - │ ├── closing_loc: (11,0)-(11,3) = "end" - │ ├── parameters: ∅ - │ └── body: - │ @ BeginNode (location: (7,3)-(11,3)) - │ ├── flags: ∅ - │ ├── begin_keyword_loc: ∅ - │ ├── statements: ∅ - │ ├── rescue_clause: - │ │ @ RescueNode (location: (8,0)-(8,6)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (8,0)-(8,6) = "rescue" - │ │ ├── exceptions: (length: 0) - │ │ ├── operator_loc: ∅ - │ │ ├── reference: ∅ - │ │ ├── statements: ∅ - │ │ └── subsequent: ∅ - │ ├── else_clause: - │ │ @ ElseNode (location: (9,0)-(10,6)) - │ │ ├── flags: ∅ - │ │ ├── else_keyword_loc: (9,0)-(9,4) = "else" - │ │ ├── statements: ∅ - │ │ └── end_keyword_loc: (10,0)-(10,6) = "ensure" - │ ├── ensure_clause: - │ │ @ EnsureNode (location: (10,0)-(11,3)) - │ │ ├── flags: ∅ - │ │ ├── ensure_keyword_loc: (10,0)-(10,6) = "ensure" - │ │ ├── statements: ∅ - │ │ └── end_keyword_loc: (11,0)-(11,3) = "end" - │ └── end_keyword_loc: (11,0)-(11,3) = "end" - ├── @ LambdaNode (location: (13,0)-(13,10)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── operator_loc: (13,0)-(13,2) = "->" - │ ├── opening_loc: (13,3)-(13,4) = "{" - │ ├── closing_loc: (13,9)-(13,10) = "}" - │ ├── parameters: ∅ - │ └── body: - │ @ StatementsNode (location: (13,5)-(13,8)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (13,5)-(13,8)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (13,5)-(13,8) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ LambdaNode (location: (15,0)-(15,15)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── operator_loc: (15,0)-(15,2) = "->" - │ ├── opening_loc: (15,3)-(15,5) = "do" - │ ├── closing_loc: (15,12)-(15,15) = "end" - │ ├── parameters: ∅ - │ └── body: - │ @ StatementsNode (location: (15,7)-(15,10)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (15,7)-(15,10)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (15,7)-(15,10) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ LambdaNode (location: (17,0)-(17,29)) - │ ├── flags: newline - │ ├── locals: [:a, :b, :c, :d, :e] - │ ├── operator_loc: (17,0)-(17,2) = "->" - │ ├── opening_loc: (17,24)-(17,25) = "{" - │ ├── closing_loc: (17,28)-(17,29) = "}" - │ ├── parameters: - │ │ @ BlockParametersNode (location: (17,3)-(17,23)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (17,3)-(17,23)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (17,3)-(17,4)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :a - │ │ │ ├── optionals: (length: 1) - │ │ │ │ └── @ OptionalParameterNode (location: (17,6)-(17,11)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :b - │ │ │ │ ├── name_loc: (17,6)-(17,7) = "b" - │ │ │ │ ├── operator_loc: (17,8)-(17,9) = "=" - │ │ │ │ └── value: - │ │ │ │ @ IntegerNode (location: (17,10)-(17,11)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 2) - │ │ │ │ ├── @ RequiredKeywordParameterNode (location: (17,13)-(17,15)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── name: :c - │ │ │ │ │ └── name_loc: (17,13)-(17,15) = "c:" - │ │ │ │ └── @ RequiredKeywordParameterNode (location: (17,17)-(17,19)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :d - │ │ │ │ └── name_loc: (17,17)-(17,19) = "d:" - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: - │ │ │ @ BlockParameterNode (location: (17,21)-(17,23)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :e - │ │ │ ├── name_loc: (17,22)-(17,23) = "e" - │ │ │ └── operator_loc: (17,21)-(17,22) = "&" - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: ∅ - │ │ └── closing_loc: ∅ - │ └── body: - │ @ StatementsNode (location: (17,26)-(17,27)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ LocalVariableReadNode (location: (17,26)-(17,27)) - │ ├── flags: newline - │ ├── name: :a - │ └── depth: 0 - ├── @ LambdaNode (location: (19,0)-(19,40)) - │ ├── flags: newline - │ ├── locals: [:a, :b, :c, :d, :e, :f, :g] - │ ├── operator_loc: (19,0)-(19,2) = "->" - │ ├── opening_loc: (19,35)-(19,36) = "{" - │ ├── closing_loc: (19,39)-(19,40) = "}" - │ ├── parameters: - │ │ @ BlockParametersNode (location: (19,3)-(19,34)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (19,4)-(19,33)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (19,4)-(19,5)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :a - │ │ │ ├── optionals: (length: 1) - │ │ │ │ └── @ OptionalParameterNode (location: (19,7)-(19,12)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :b - │ │ │ │ ├── name_loc: (19,7)-(19,8) = "b" - │ │ │ │ ├── operator_loc: (19,9)-(19,10) = "=" - │ │ │ │ └── value: - │ │ │ │ @ IntegerNode (location: (19,11)-(19,12)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ ├── rest: - │ │ │ │ @ RestParameterNode (location: (19,14)-(19,16)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :c - │ │ │ │ ├── name_loc: (19,15)-(19,16) = "c" - │ │ │ │ └── operator_loc: (19,14)-(19,15) = "*" - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 2) - │ │ │ │ ├── @ RequiredKeywordParameterNode (location: (19,18)-(19,20)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── name: :d - │ │ │ │ │ └── name_loc: (19,18)-(19,20) = "d:" - │ │ │ │ └── @ RequiredKeywordParameterNode (location: (19,22)-(19,24)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :e - │ │ │ │ └── name_loc: (19,22)-(19,24) = "e:" - │ │ │ ├── keyword_rest: - │ │ │ │ @ KeywordRestParameterNode (location: (19,26)-(19,29)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :f - │ │ │ │ ├── name_loc: (19,28)-(19,29) = "f" - │ │ │ │ └── operator_loc: (19,26)-(19,28) = "**" - │ │ │ └── block: - │ │ │ @ BlockParameterNode (location: (19,31)-(19,33)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :g - │ │ │ ├── name_loc: (19,32)-(19,33) = "g" - │ │ │ └── operator_loc: (19,31)-(19,32) = "&" - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: (19,3)-(19,4) = "(" - │ │ └── closing_loc: (19,33)-(19,34) = ")" - │ └── body: - │ @ StatementsNode (location: (19,37)-(19,38)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ LocalVariableReadNode (location: (19,37)-(19,38)) - │ ├── flags: newline - │ ├── name: :a - │ └── depth: 0 - ├── @ LambdaNode (location: (21,0)-(23,3)) - │ ├── flags: newline - │ ├── locals: [:a, :b, :c, :d, :e, :f, :g] - │ ├── operator_loc: (21,0)-(21,2) = "->" - │ ├── opening_loc: (21,35)-(21,37) = "do" - │ ├── closing_loc: (23,0)-(23,3) = "end" - │ ├── parameters: - │ │ @ BlockParametersNode (location: (21,3)-(21,34)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (21,4)-(21,33)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (21,4)-(21,5)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :a - │ │ │ ├── optionals: (length: 1) - │ │ │ │ └── @ OptionalParameterNode (location: (21,7)-(21,12)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :b - │ │ │ │ ├── name_loc: (21,7)-(21,8) = "b" - │ │ │ │ ├── operator_loc: (21,9)-(21,10) = "=" - │ │ │ │ └── value: - │ │ │ │ @ IntegerNode (location: (21,11)-(21,12)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ ├── rest: - │ │ │ │ @ RestParameterNode (location: (21,14)-(21,16)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :c - │ │ │ │ ├── name_loc: (21,15)-(21,16) = "c" - │ │ │ │ └── operator_loc: (21,14)-(21,15) = "*" - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 2) - │ │ │ │ ├── @ RequiredKeywordParameterNode (location: (21,18)-(21,20)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── name: :d - │ │ │ │ │ └── name_loc: (21,18)-(21,20) = "d:" - │ │ │ │ └── @ RequiredKeywordParameterNode (location: (21,22)-(21,24)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :e - │ │ │ │ └── name_loc: (21,22)-(21,24) = "e:" - │ │ │ ├── keyword_rest: - │ │ │ │ @ KeywordRestParameterNode (location: (21,26)-(21,29)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :f - │ │ │ │ ├── name_loc: (21,28)-(21,29) = "f" - │ │ │ │ └── operator_loc: (21,26)-(21,28) = "**" - │ │ │ └── block: - │ │ │ @ BlockParameterNode (location: (21,31)-(21,33)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :g - │ │ │ ├── name_loc: (21,32)-(21,33) = "g" - │ │ │ └── operator_loc: (21,31)-(21,32) = "&" - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: (21,3)-(21,4) = "(" - │ │ └── closing_loc: (21,33)-(21,34) = ")" - │ └── body: - │ @ StatementsNode (location: (22,2)-(22,3)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ LocalVariableReadNode (location: (22,2)-(22,3)) - │ ├── flags: newline - │ ├── name: :a - │ └── depth: 0 - ├── @ LambdaNode (location: (25,0)-(25,25)) - │ ├── flags: newline - │ ├── locals: [:a] - │ ├── operator_loc: (25,0)-(25,2) = "->" - │ ├── opening_loc: (25,7)-(25,8) = "{" - │ ├── closing_loc: (25,24)-(25,25) = "}" - │ ├── parameters: - │ │ @ BlockParametersNode (location: (25,3)-(25,6)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (25,4)-(25,5)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (25,4)-(25,5)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :a - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: (25,3)-(25,4) = "(" - │ │ └── closing_loc: (25,5)-(25,6) = ")" - │ └── body: - │ @ StatementsNode (location: (25,9)-(25,23)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ LambdaNode (location: (25,9)-(25,23)) - │ ├── flags: newline - │ ├── locals: [:b] - │ ├── operator_loc: (25,9)-(25,11) = "->" - │ ├── opening_loc: (25,14)-(25,15) = "{" - │ ├── closing_loc: (25,22)-(25,23) = "}" - │ ├── parameters: - │ │ @ BlockParametersNode (location: (25,12)-(25,13)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (25,12)-(25,13)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (25,12)-(25,13)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :b - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: ∅ - │ │ └── closing_loc: ∅ - │ └── body: - │ @ StatementsNode (location: (25,16)-(25,21)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (25,16)-(25,21)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (25,16)-(25,17)) - │ │ ├── flags: ∅ - │ │ ├── name: :a - │ │ └── depth: 1 - │ ├── call_operator_loc: ∅ - │ ├── name: :* - │ ├── message_loc: (25,18)-(25,19) = "*" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (25,20)-(25,21)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ LocalVariableReadNode (location: (25,20)-(25,21)) - │ │ ├── flags: ∅ - │ │ ├── name: :b - │ │ └── depth: 0 - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── @ LambdaNode (location: (27,0)-(27,19)) - ├── flags: newline - ├── locals: [:a, :b, :c] - ├── operator_loc: (27,0)-(27,2) = "->" - ├── opening_loc: (27,16)-(27,17) = "{" - ├── closing_loc: (27,18)-(27,19) = "}" - ├── parameters: - │ @ BlockParametersNode (location: (27,3)-(27,15)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (27,4)-(27,14)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ MultiTargetNode (location: (27,4)-(27,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── lefts: (length: 2) - │ │ │ │ ├── @ RequiredParameterNode (location: (27,5)-(27,6)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── name: :a - │ │ │ │ └── @ RequiredParameterNode (location: (27,8)-(27,9)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :b - │ │ │ ├── rest: ∅ - │ │ │ ├── rights: (length: 0) - │ │ │ ├── lparen_loc: (27,4)-(27,5) = "(" - │ │ │ └── rparen_loc: (27,9)-(27,10) = ")" - │ │ ├── optionals: (length: 0) - │ │ ├── rest: - │ │ │ @ RestParameterNode (location: (27,12)-(27,14)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :c - │ │ │ ├── name_loc: (27,13)-(27,14) = "c" - │ │ │ └── operator_loc: (27,12)-(27,13) = "*" - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (27,3)-(27,4) = "(" - │ └── closing_loc: (27,14)-(27,15) = ")" - └── body: ∅ diff --git a/test/prism/snapshots/range_begin_open_exclusive.txt b/test/prism/snapshots/range_begin_open_exclusive.txt deleted file mode 100644 index e4ca315fc2b031..00000000000000 --- a/test/prism/snapshots/range_begin_open_exclusive.txt +++ /dev/null @@ -1,15 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,4)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,4)) - ├── flags: ∅ - └── body: (length: 1) - └── @ RangeNode (location: (1,0)-(1,4)) - ├── flags: newline, static_literal, exclude_end - ├── left: ∅ - ├── right: - │ @ IntegerNode (location: (1,3)-(1,4)) - │ ├── flags: static_literal, decimal - │ └── value: 2 - └── operator_loc: (1,0)-(1,3) = "..." diff --git a/test/prism/snapshots/range_begin_open_inclusive.txt b/test/prism/snapshots/range_begin_open_inclusive.txt deleted file mode 100644 index 45aa88a5d1007c..00000000000000 --- a/test/prism/snapshots/range_begin_open_inclusive.txt +++ /dev/null @@ -1,15 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ RangeNode (location: (1,0)-(1,3)) - ├── flags: newline, static_literal - ├── left: ∅ - ├── right: - │ @ IntegerNode (location: (1,2)-(1,3)) - │ ├── flags: static_literal, decimal - │ └── value: 2 - └── operator_loc: (1,0)-(1,2) = ".." diff --git a/test/prism/snapshots/range_beginless.txt b/test/prism/snapshots/range_beginless.txt new file mode 100644 index 00000000000000..800f087dc10583 --- /dev/null +++ b/test/prism/snapshots/range_beginless.txt @@ -0,0 +1,114 @@ +@ ProgramNode (location: (1,0)-(5,18)) +├── flags: ∅ +├── locals: [] +└── statements: + @ StatementsNode (location: (1,0)-(5,18)) + ├── flags: ∅ + └── body: (length: 3) + ├── @ DefNode (location: (1,0)-(1,21)) + │ ├── flags: newline + │ ├── name: :f + │ ├── name_loc: (1,4)-(1,5) = "f" + │ ├── receiver: ∅ + │ ├── parameters: + │ │ @ ParametersNode (location: (1,6)-(1,15)) + │ │ ├── flags: ∅ + │ │ ├── requireds: (length: 0) + │ │ ├── optionals: (length: 1) + │ │ │ └── @ OptionalParameterNode (location: (1,6)-(1,15)) + │ │ │ ├── flags: ∅ + │ │ │ ├── name: :x + │ │ │ ├── name_loc: (1,6)-(1,7) = "x" + │ │ │ ├── operator_loc: (1,8)-(1,9) = "=" + │ │ │ └── value: + │ │ │ @ RangeNode (location: (1,10)-(1,15)) + │ │ │ ├── flags: exclude_end + │ │ │ ├── left: ∅ + │ │ │ ├── right: + │ │ │ │ @ StringNode (location: (1,13)-(1,15)) + │ │ │ │ ├── flags: ∅ + │ │ │ │ ├── opening_loc: (1,13)-(1,14) = "?" + │ │ │ │ ├── content_loc: (1,14)-(1,15) = "a" + │ │ │ │ ├── closing_loc: ∅ + │ │ │ │ └── unescaped: "a" + │ │ │ └── operator_loc: (1,10)-(1,13) = "..." + │ │ ├── rest: ∅ + │ │ ├── posts: (length: 0) + │ │ ├── keywords: (length: 0) + │ │ ├── keyword_rest: ∅ + │ │ └── block: ∅ + │ ├── body: ∅ + │ ├── locals: [:x] + │ ├── def_keyword_loc: (1,0)-(1,3) = "def" + │ ├── operator_loc: ∅ + │ ├── lparen_loc: (1,5)-(1,6) = "(" + │ ├── rparen_loc: (1,15)-(1,16) = ")" + │ ├── equal_loc: ∅ + │ └── end_keyword_loc: (1,18)-(1,21) = "end" + ├── @ DefNode (location: (3,0)-(3,20)) + │ ├── flags: newline + │ ├── name: :f + │ ├── name_loc: (3,4)-(3,5) = "f" + │ ├── receiver: ∅ + │ ├── parameters: + │ │ @ ParametersNode (location: (3,6)-(3,14)) + │ │ ├── flags: ∅ + │ │ ├── requireds: (length: 0) + │ │ ├── optionals: (length: 0) + │ │ ├── rest: ∅ + │ │ ├── posts: (length: 0) + │ │ ├── keywords: (length: 1) + │ │ │ └── @ OptionalKeywordParameterNode (location: (3,6)-(3,14)) + │ │ │ ├── flags: ∅ + │ │ │ ├── name: :x + │ │ │ ├── name_loc: (3,6)-(3,8) = "x:" + │ │ │ └── value: + │ │ │ @ RangeNode (location: (3,9)-(3,14)) + │ │ │ ├── flags: exclude_end + │ │ │ ├── left: ∅ + │ │ │ ├── right: + │ │ │ │ @ StringNode (location: (3,12)-(3,14)) + │ │ │ │ ├── flags: ∅ + │ │ │ │ ├── opening_loc: (3,12)-(3,13) = "?" + │ │ │ │ ├── content_loc: (3,13)-(3,14) = "a" + │ │ │ │ ├── closing_loc: ∅ + │ │ │ │ └── unescaped: "a" + │ │ │ └── operator_loc: (3,9)-(3,12) = "..." + │ │ ├── keyword_rest: ∅ + │ │ └── block: ∅ + │ ├── body: ∅ + │ ├── locals: [:x] + │ ├── def_keyword_loc: (3,0)-(3,3) = "def" + │ ├── operator_loc: ∅ + │ ├── lparen_loc: (3,5)-(3,6) = "(" + │ ├── rparen_loc: (3,14)-(3,15) = ")" + │ ├── equal_loc: ∅ + │ └── end_keyword_loc: (3,17)-(3,20) = "end" + └── @ DefNode (location: (5,0)-(5,18)) + ├── flags: newline + ├── name: :f + ├── name_loc: (5,4)-(5,5) = "f" + ├── receiver: ∅ + ├── parameters: ∅ + ├── body: + │ @ StatementsNode (location: (5,8)-(5,13)) + │ ├── flags: ∅ + │ └── body: (length: 1) + │ └── @ RangeNode (location: (5,8)-(5,13)) + │ ├── flags: newline, exclude_end + │ ├── left: ∅ + │ ├── right: + │ │ @ SymbolNode (location: (5,11)-(5,13)) + │ │ ├── flags: static_literal, forced_us_ascii_encoding + │ │ ├── opening_loc: (5,11)-(5,12) = ":" + │ │ ├── value_loc: (5,12)-(5,13) = "a" + │ │ ├── closing_loc: ∅ + │ │ └── unescaped: "a" + │ └── operator_loc: (5,8)-(5,11) = "..." + ├── locals: [] + ├── def_keyword_loc: (5,0)-(5,3) = "def" + ├── operator_loc: ∅ + ├── lparen_loc: (5,5)-(5,6) = "(" + ├── rparen_loc: (5,6)-(5,7) = ")" + ├── equal_loc: ∅ + └── end_keyword_loc: (5,15)-(5,18) = "end" diff --git a/test/prism/snapshots/range_end_open_exclusive.txt b/test/prism/snapshots/range_end_open_exclusive.txt deleted file mode 100644 index d0d3f810a3718c..00000000000000 --- a/test/prism/snapshots/range_end_open_exclusive.txt +++ /dev/null @@ -1,15 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,4)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,4)) - ├── flags: ∅ - └── body: (length: 1) - └── @ RangeNode (location: (1,0)-(1,4)) - ├── flags: newline, static_literal, exclude_end - ├── left: - │ @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: static_literal, decimal - │ └── value: 2 - ├── right: ∅ - └── operator_loc: (1,1)-(1,4) = "..." diff --git a/test/prism/snapshots/range_end_open_inclusive.txt b/test/prism/snapshots/range_end_open_inclusive.txt deleted file mode 100644 index 8bfee649a3cd2e..00000000000000 --- a/test/prism/snapshots/range_end_open_inclusive.txt +++ /dev/null @@ -1,15 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ RangeNode (location: (1,0)-(1,3)) - ├── flags: newline, static_literal - ├── left: - │ @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: static_literal, decimal - │ └── value: 2 - ├── right: ∅ - └── operator_loc: (1,1)-(1,3) = ".." diff --git a/test/prism/snapshots/ranges.txt b/test/prism/snapshots/ranges.txt deleted file mode 100644 index 81dbe3d901d827..00000000000000 --- a/test/prism/snapshots/ranges.txt +++ /dev/null @@ -1,548 +0,0 @@ -@ ProgramNode (location: (1,0)-(49,7)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(49,7)) - ├── flags: ∅ - └── body: (length: 25) - ├── @ ParenthesesNode (location: (1,0)-(1,6)) - │ ├── flags: newline - │ ├── body: - │ │ @ StatementsNode (location: (1,1)-(1,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ RangeNode (location: (1,1)-(1,5)) - │ │ ├── flags: newline, static_literal, exclude_end - │ │ ├── left: ∅ - │ │ ├── right: - │ │ │ @ IntegerNode (location: (1,4)-(1,5)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ └── operator_loc: (1,1)-(1,4) = "..." - │ ├── opening_loc: (1,0)-(1,1) = "(" - │ └── closing_loc: (1,5)-(1,6) = ")" - ├── @ ParenthesesNode (location: (3,0)-(3,5)) - │ ├── flags: newline - │ ├── body: - │ │ @ StatementsNode (location: (3,1)-(3,4)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ RangeNode (location: (3,1)-(3,4)) - │ │ ├── flags: newline, static_literal - │ │ ├── left: ∅ - │ │ ├── right: - │ │ │ @ IntegerNode (location: (3,3)-(3,4)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ └── operator_loc: (3,1)-(3,3) = ".." - │ ├── opening_loc: (3,0)-(3,1) = "(" - │ └── closing_loc: (3,4)-(3,5) = ")" - ├── @ RangeNode (location: (5,0)-(5,5)) - │ ├── flags: newline, static_literal, exclude_end - │ ├── left: - │ │ @ IntegerNode (location: (5,0)-(5,1)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── right: - │ │ @ IntegerNode (location: (5,4)-(5,5)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ └── operator_loc: (5,1)-(5,4) = "..." - ├── @ CallNode (location: (7,0)-(7,9)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (7,0)-(7,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (7,0)-(7,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :[] - │ ├── message_loc: (7,3)-(7,9) = "[...2]" - │ ├── opening_loc: (7,3)-(7,4) = "[" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (7,4)-(7,8)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ RangeNode (location: (7,4)-(7,8)) - │ │ ├── flags: static_literal, exclude_end - │ │ ├── left: ∅ - │ │ ├── right: - │ │ │ @ IntegerNode (location: (7,7)-(7,8)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ └── operator_loc: (7,4)-(7,7) = "..." - │ ├── closing_loc: (7,8)-(7,9) = "]" - │ └── block: ∅ - ├── @ HashNode (location: (9,0)-(9,15)) - │ ├── flags: newline - │ ├── opening_loc: (9,0)-(9,1) = "{" - │ ├── elements: (length: 1) - │ │ └── @ AssocNode (location: (9,2)-(9,13)) - │ │ ├── flags: ∅ - │ │ ├── key: - │ │ │ @ SymbolNode (location: (9,2)-(9,6)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (9,2)-(9,5) = "foo" - │ │ │ ├── closing_loc: (9,5)-(9,6) = ":" - │ │ │ └── unescaped: "foo" - │ │ ├── value: - │ │ │ @ RangeNode (location: (9,7)-(9,13)) - │ │ │ ├── flags: exclude_end - │ │ │ ├── left: ∅ - │ │ │ ├── right: - │ │ │ │ @ CallNode (location: (9,10)-(9,13)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :bar - │ │ │ │ ├── message_loc: (9,10)-(9,13) = "bar" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── operator_loc: (9,7)-(9,10) = "..." - │ │ └── operator_loc: ∅ - │ └── closing_loc: (9,14)-(9,15) = "}" - ├── @ ParenthesesNode (location: (11,0)-(11,6)) - │ ├── flags: newline - │ ├── body: - │ │ @ StatementsNode (location: (11,1)-(11,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ RangeNode (location: (11,1)-(11,5)) - │ │ ├── flags: newline, static_literal, exclude_end - │ │ ├── left: - │ │ │ @ IntegerNode (location: (11,1)-(11,2)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── right: ∅ - │ │ └── operator_loc: (11,2)-(11,5) = "..." - │ ├── opening_loc: (11,0)-(11,1) = "(" - │ └── closing_loc: (11,5)-(11,6) = ")" - ├── @ RangeNode (location: (13,0)-(13,4)) - │ ├── flags: newline, static_literal - │ ├── left: - │ │ @ IntegerNode (location: (13,0)-(13,1)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── right: - │ │ @ IntegerNode (location: (13,3)-(13,4)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ └── operator_loc: (13,1)-(13,3) = ".." - ├── @ HashNode (location: (15,0)-(15,14)) - │ ├── flags: newline - │ ├── opening_loc: (15,0)-(15,1) = "{" - │ ├── elements: (length: 1) - │ │ └── @ AssocNode (location: (15,2)-(15,12)) - │ │ ├── flags: ∅ - │ │ ├── key: - │ │ │ @ SymbolNode (location: (15,2)-(15,6)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (15,2)-(15,5) = "foo" - │ │ │ ├── closing_loc: (15,5)-(15,6) = ":" - │ │ │ └── unescaped: "foo" - │ │ ├── value: - │ │ │ @ RangeNode (location: (15,7)-(15,12)) - │ │ │ ├── flags: ∅ - │ │ │ ├── left: ∅ - │ │ │ ├── right: - │ │ │ │ @ CallNode (location: (15,9)-(15,12)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :bar - │ │ │ │ ├── message_loc: (15,9)-(15,12) = "bar" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── operator_loc: (15,7)-(15,9) = ".." - │ │ └── operator_loc: ∅ - │ └── closing_loc: (15,13)-(15,14) = "}" - ├── @ ParenthesesNode (location: (17,0)-(17,5)) - │ ├── flags: newline - │ ├── body: - │ │ @ StatementsNode (location: (17,1)-(17,4)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ RangeNode (location: (17,1)-(17,4)) - │ │ ├── flags: newline, static_literal - │ │ ├── left: - │ │ │ @ IntegerNode (location: (17,1)-(17,2)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── right: ∅ - │ │ └── operator_loc: (17,2)-(17,4) = ".." - │ ├── opening_loc: (17,0)-(17,1) = "(" - │ └── closing_loc: (17,4)-(17,5) = ")" - ├── @ RangeNode (location: (19,0)-(19,8)) - │ ├── flags: newline - │ ├── left: - │ │ @ IntegerNode (location: (19,0)-(19,1)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── right: - │ │ @ RangeNode (location: (19,5)-(19,8)) - │ │ ├── flags: static_literal - │ │ ├── left: ∅ - │ │ ├── right: - │ │ │ @ IntegerNode (location: (19,7)-(19,8)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── operator_loc: (19,5)-(19,7) = ".." - │ └── operator_loc: (19,2)-(19,4) = ".." - ├── @ AndNode (location: (21,0)-(21,8)) - │ ├── flags: newline - │ ├── left: - │ │ @ RangeNode (location: (21,0)-(21,3)) - │ │ ├── flags: static_literal - │ │ ├── left: - │ │ │ @ IntegerNode (location: (21,0)-(21,1)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── right: ∅ - │ │ └── operator_loc: (21,1)-(21,3) = ".." - │ ├── right: - │ │ @ IntegerNode (location: (21,7)-(21,8)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ └── operator_loc: (21,4)-(21,6) = "&&" - ├── @ CallNode (location: (23,0)-(23,8)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ RangeNode (location: (23,0)-(23,3)) - │ │ ├── flags: static_literal - │ │ ├── left: - │ │ │ @ IntegerNode (location: (23,0)-(23,1)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── right: ∅ - │ │ └── operator_loc: (23,1)-(23,3) = ".." - │ ├── call_operator_loc: ∅ - │ ├── name: :== - │ ├── message_loc: (23,4)-(23,6) = "==" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (23,7)-(23,8)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (23,7)-(23,8)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (25,0)-(25,8)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ RangeNode (location: (25,0)-(25,3)) - │ │ ├── flags: static_literal - │ │ ├── left: - │ │ │ @ IntegerNode (location: (25,0)-(25,1)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── right: ∅ - │ │ └── operator_loc: (25,1)-(25,3) = ".." - │ ├── call_operator_loc: ∅ - │ ├── name: :!= - │ ├── message_loc: (25,4)-(25,6) = "!=" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (25,7)-(25,8)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (25,7)-(25,8)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (27,0)-(27,9)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ RangeNode (location: (27,0)-(27,3)) - │ │ ├── flags: static_literal - │ │ ├── left: - │ │ │ @ IntegerNode (location: (27,0)-(27,1)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── right: ∅ - │ │ └── operator_loc: (27,1)-(27,3) = ".." - │ ├── call_operator_loc: ∅ - │ ├── name: :=== - │ ├── message_loc: (27,4)-(27,7) = "===" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (27,8)-(27,9)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (27,8)-(27,9)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (29,0)-(29,9)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ RangeNode (location: (29,0)-(29,3)) - │ │ ├── flags: static_literal - │ │ ├── left: - │ │ │ @ IntegerNode (location: (29,0)-(29,1)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── right: ∅ - │ │ └── operator_loc: (29,1)-(29,3) = ".." - │ ├── call_operator_loc: ∅ - │ ├── name: :<=> - │ ├── message_loc: (29,4)-(29,7) = "<=>" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (29,8)-(29,9)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (29,8)-(29,9)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (31,0)-(31,8)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ RangeNode (location: (31,0)-(31,3)) - │ │ ├── flags: static_literal - │ │ ├── left: - │ │ │ @ IntegerNode (location: (31,0)-(31,1)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── right: ∅ - │ │ └── operator_loc: (31,1)-(31,3) = ".." - │ ├── call_operator_loc: ∅ - │ ├── name: :=~ - │ ├── message_loc: (31,4)-(31,6) = "=~" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (31,7)-(31,8)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (31,7)-(31,8)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (33,0)-(33,8)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ RangeNode (location: (33,0)-(33,3)) - │ │ ├── flags: static_literal - │ │ ├── left: - │ │ │ @ IntegerNode (location: (33,0)-(33,1)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── right: ∅ - │ │ └── operator_loc: (33,1)-(33,3) = ".." - │ ├── call_operator_loc: ∅ - │ ├── name: :!~ - │ ├── message_loc: (33,4)-(33,6) = "!~" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (33,7)-(33,8)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (33,7)-(33,8)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (35,0)-(35,7)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ RangeNode (location: (35,0)-(35,3)) - │ │ ├── flags: static_literal - │ │ ├── left: - │ │ │ @ IntegerNode (location: (35,0)-(35,1)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── right: ∅ - │ │ └── operator_loc: (35,1)-(35,3) = ".." - │ ├── call_operator_loc: ∅ - │ ├── name: :< - │ ├── message_loc: (35,4)-(35,5) = "<" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (35,6)-(35,7)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (35,6)-(35,7)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (37,0)-(37,7)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ RangeNode (location: (37,0)-(37,3)) - │ │ ├── flags: static_literal - │ │ ├── left: - │ │ │ @ IntegerNode (location: (37,0)-(37,1)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── right: ∅ - │ │ └── operator_loc: (37,1)-(37,3) = ".." - │ ├── call_operator_loc: ∅ - │ ├── name: :> - │ ├── message_loc: (37,4)-(37,5) = ">" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (37,6)-(37,7)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (37,6)-(37,7)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (39,0)-(39,8)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ RangeNode (location: (39,0)-(39,3)) - │ │ ├── flags: static_literal - │ │ ├── left: - │ │ │ @ IntegerNode (location: (39,0)-(39,1)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── right: ∅ - │ │ └── operator_loc: (39,1)-(39,3) = ".." - │ ├── call_operator_loc: ∅ - │ ├── name: :<= - │ ├── message_loc: (39,4)-(39,6) = "<=" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (39,7)-(39,8)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (39,7)-(39,8)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (41,0)-(41,8)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ RangeNode (location: (41,0)-(41,3)) - │ │ ├── flags: static_literal - │ │ ├── left: - │ │ │ @ IntegerNode (location: (41,0)-(41,1)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── right: ∅ - │ │ └── operator_loc: (41,1)-(41,3) = ".." - │ ├── call_operator_loc: ∅ - │ ├── name: :>= - │ ├── message_loc: (41,4)-(41,6) = ">=" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (41,7)-(41,8)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (41,7)-(41,8)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (43,0)-(43,8)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ RangeNode (location: (43,0)-(43,3)) - │ │ ├── flags: static_literal - │ │ ├── left: - │ │ │ @ IntegerNode (location: (43,0)-(43,1)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── right: ∅ - │ │ └── operator_loc: (43,1)-(43,3) = ".." - │ ├── call_operator_loc: ∅ - │ ├── name: :<< - │ ├── message_loc: (43,4)-(43,6) = "<<" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (43,7)-(43,8)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (43,7)-(43,8)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (45,0)-(45,8)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ RangeNode (location: (45,0)-(45,3)) - │ │ ├── flags: static_literal - │ │ ├── left: - │ │ │ @ IntegerNode (location: (45,0)-(45,1)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── right: ∅ - │ │ └── operator_loc: (45,1)-(45,3) = ".." - │ ├── call_operator_loc: ∅ - │ ├── name: :>> - │ ├── message_loc: (45,4)-(45,6) = ">>" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (45,7)-(45,8)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (45,7)-(45,8)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ RangeNode (location: (47,0)-(47,7)) - │ ├── flags: newline - │ ├── left: - │ │ @ IntegerNode (location: (47,0)-(47,1)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── right: - │ │ @ CallNode (location: (47,4)-(47,7)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ IntegerNode (location: (47,6)-(47,7)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :+@ - │ │ ├── message_loc: (47,4)-(47,5) = "+" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── operator_loc: (47,1)-(47,3) = ".." - └── @ RangeNode (location: (49,0)-(49,7)) - ├── flags: newline - ├── left: - │ @ IntegerNode (location: (49,0)-(49,1)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── right: - │ @ CallNode (location: (49,4)-(49,7)) - │ ├── flags: ∅ - │ ├── receiver: - │ │ @ IntegerNode (location: (49,6)-(49,7)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── call_operator_loc: ∅ - │ ├── name: :-@ - │ ├── message_loc: (49,4)-(49,5) = "-" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── operator_loc: (49,1)-(49,3) = ".." diff --git a/test/prism/snapshots/regex.txt b/test/prism/snapshots/regex.txt deleted file mode 100644 index c90e68976070a7..00000000000000 --- a/test/prism/snapshots/regex.txt +++ /dev/null @@ -1,545 +0,0 @@ -@ ProgramNode (location: (1,0)-(48,10)) -├── flags: ∅ -├── locals: [:foo, :ab, :abc, :a] -└── statements: - @ StatementsNode (location: (1,0)-(48,10)) - ├── flags: ∅ - └── body: (length: 26) - ├── @ CallNode (location: (1,0)-(1,9)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (1,0)-(1,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,4)-(1,9)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ RegularExpressionNode (location: (1,4)-(1,9)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (1,4)-(1,5) = "/" - │ │ ├── content_loc: (1,5)-(1,8) = "bar" - │ │ ├── closing_loc: (1,8)-(1,9) = "/" - │ │ └── unescaped: "bar" - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ RegularExpressionNode (location: (3,0)-(3,8)) - │ ├── flags: newline, static_literal, ignore_case, forced_us_ascii_encoding - │ ├── opening_loc: (3,0)-(3,3) = "%r{" - │ ├── content_loc: (3,3)-(3,6) = "abc" - │ ├── closing_loc: (3,6)-(3,8) = "}i" - │ └── unescaped: "abc" - ├── @ RegularExpressionNode (location: (5,0)-(5,5)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (5,0)-(5,1) = "/" - │ ├── content_loc: (5,1)-(5,4) = "a\\b" - │ ├── closing_loc: (5,4)-(5,5) = "/" - │ └── unescaped: "a\\b" - ├── @ InterpolatedRegularExpressionNode (location: (7,0)-(7,11)) - │ ├── flags: newline - │ ├── opening_loc: (7,0)-(7,1) = "/" - │ ├── parts: (length: 2) - │ │ ├── @ StringNode (location: (7,1)-(7,5)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (7,1)-(7,5) = "aaa " - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "aaa " - │ │ └── @ EmbeddedVariableNode (location: (7,5)-(7,10)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (7,5)-(7,6) = "#" - │ │ └── variable: - │ │ @ GlobalVariableReadNode (location: (7,6)-(7,10)) - │ │ ├── flags: ∅ - │ │ └── name: :$bbb - │ └── closing_loc: (7,10)-(7,11) = "/" - ├── @ InterpolatedRegularExpressionNode (location: (9,0)-(9,16)) - │ ├── flags: newline - │ ├── opening_loc: (9,0)-(9,1) = "/" - │ ├── parts: (length: 3) - │ │ ├── @ StringNode (location: (9,1)-(9,5)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (9,1)-(9,5) = "aaa " - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "aaa " - │ │ ├── @ EmbeddedStatementsNode (location: (9,5)-(9,11)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (9,5)-(9,7) = "\#{" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (9,7)-(9,10)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (9,7)-(9,10)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :bbb - │ │ │ │ ├── message_loc: (9,7)-(9,10) = "bbb" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── closing_loc: (9,10)-(9,11) = "}" - │ │ └── @ StringNode (location: (9,11)-(9,15)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (9,11)-(9,15) = " ccc" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: " ccc" - │ └── closing_loc: (9,15)-(9,16) = "/" - ├── @ ArrayNode (location: (11,0)-(11,27)) - │ ├── flags: newline - │ ├── elements: (length: 2) - │ │ ├── @ MatchWriteNode (location: (11,1)-(11,21)) - │ │ │ ├── flags: ∅ - │ │ │ ├── call: - │ │ │ │ @ CallNode (location: (11,1)-(11,21)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── receiver: - │ │ │ │ │ @ RegularExpressionNode (location: (11,1)-(11,14)) - │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ │ ├── opening_loc: (11,1)-(11,2) = "/" - │ │ │ │ │ ├── content_loc: (11,2)-(11,13) = "(?bar)" - │ │ │ │ │ ├── closing_loc: (11,13)-(11,14) = "/" - │ │ │ │ │ └── unescaped: "(?bar)" - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :=~ - │ │ │ │ ├── message_loc: (11,15)-(11,17) = "=~" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: - │ │ │ │ │ @ ArgumentsNode (location: (11,18)-(11,21)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── arguments: (length: 1) - │ │ │ │ │ └── @ CallNode (location: (11,18)-(11,21)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :baz - │ │ │ │ │ ├── message_loc: (11,18)-(11,21) = "baz" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── targets: (length: 1) - │ │ │ └── @ LocalVariableTargetNode (location: (11,5)-(11,8)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :foo - │ │ │ └── depth: 0 - │ │ └── @ LocalVariableReadNode (location: (11,23)-(11,26)) - │ │ ├── flags: ∅ - │ │ ├── name: :foo - │ │ └── depth: 0 - │ ├── opening_loc: (11,0)-(11,1) = "[" - │ └── closing_loc: (11,26)-(11,27) = "]" - ├── @ RegularExpressionNode (location: (13,0)-(13,6)) - │ ├── flags: newline, static_literal, ignore_case, forced_us_ascii_encoding - │ ├── opening_loc: (13,0)-(13,1) = "/" - │ ├── content_loc: (13,1)-(13,4) = "abc" - │ ├── closing_loc: (13,4)-(13,6) = "/i" - │ └── unescaped: "abc" - ├── @ RegularExpressionNode (location: (15,0)-(15,26)) - │ ├── flags: newline, static_literal, ignore_case, forced_us_ascii_encoding - │ ├── opening_loc: (15,0)-(15,3) = "%r/" - │ ├── content_loc: (15,3)-(15,24) = "[a-z$._?][\\w$.?\#@~]*:" - │ ├── closing_loc: (15,24)-(15,26) = "/i" - │ └── unescaped: "[a-z$._?][\\w$.?\#@~]*:" - ├── @ RegularExpressionNode (location: (17,0)-(17,37)) - │ ├── flags: newline, static_literal, ignore_case, forced_us_ascii_encoding - │ ├── opening_loc: (17,0)-(17,3) = "%r/" - │ ├── content_loc: (17,3)-(17,35) = "([a-z$._?][\\w$.?\#@~]*)(\\s+)(equ)" - │ ├── closing_loc: (17,35)-(17,37) = "/i" - │ └── unescaped: "([a-z$._?][\\w$.?\#@~]*)(\\s+)(equ)" - ├── @ RegularExpressionNode (location: (19,0)-(19,25)) - │ ├── flags: newline, static_literal, ignore_case, forced_us_ascii_encoding - │ ├── opening_loc: (19,0)-(19,3) = "%r/" - │ ├── content_loc: (19,3)-(19,23) = "[a-z$._?][\\w$.?\#@~]*" - │ ├── closing_loc: (19,23)-(19,25) = "/i" - │ └── unescaped: "[a-z$._?][\\w$.?\#@~]*" - ├── @ RegularExpressionNode (location: (21,0)-(24,1)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (21,0)-(21,3) = "%r(" - │ ├── content_loc: (21,3)-(24,0) = "\n(?:[\#$%_']|\\(\\)|\\(,\\)|\\[\\]|[0-9])*\n (?:[\#$%_']+)\n" - │ ├── closing_loc: (24,0)-(24,1) = ")" - │ └── unescaped: "\n(?:[\#$%_']|\\(\\)|\\(,\\)|\\[\\]|[0-9])*\n (?:[\#$%_']+)\n" - ├── @ CallNode (location: (26,0)-(26,16)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ RegularExpressionNode (location: (26,0)-(26,8)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (26,0)-(26,1) = "/" - │ │ ├── content_loc: (26,1)-(26,7) = "(?#\\))" - │ │ ├── closing_loc: (26,7)-(26,8) = "/" - │ │ └── unescaped: "(?#\\))" - │ ├── call_operator_loc: ∅ - │ ├── name: :=~ - │ ├── message_loc: (26,9)-(26,11) = "=~" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (26,12)-(26,16)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ StringNode (location: (26,12)-(26,16)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (26,12)-(26,13) = "\"" - │ │ ├── content_loc: (26,13)-(26,15) = "hi" - │ │ ├── closing_loc: (26,15)-(26,16) = "\"" - │ │ └── unescaped: "hi" - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ RegularExpressionNode (location: (28,0)-(28,9)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (28,0)-(28,3) = "%r#" - │ ├── content_loc: (28,3)-(28,8) = "pound" - │ ├── closing_loc: (28,8)-(28,9) = "#" - │ └── unescaped: "pound" - ├── @ InterpolatedRegularExpressionNode (location: (30,0)-(30,13)) - │ ├── flags: newline, once - │ ├── opening_loc: (30,0)-(30,1) = "/" - │ ├── parts: (length: 2) - │ │ ├── @ StringNode (location: (30,1)-(30,5)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (30,1)-(30,5) = "aaa " - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "aaa " - │ │ └── @ EmbeddedStatementsNode (location: (30,5)-(30,11)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (30,5)-(30,7) = "\#{" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (30,7)-(30,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (30,7)-(30,10)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bbb - │ │ │ ├── message_loc: (30,7)-(30,10) = "bbb" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── closing_loc: (30,10)-(30,11) = "}" - │ └── closing_loc: (30,11)-(30,13) = "/o" - ├── @ MatchWriteNode (location: (32,0)-(33,10)) - │ ├── flags: newline - │ ├── call: - │ │ @ CallNode (location: (32,0)-(33,10)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ RegularExpressionNode (location: (32,0)-(33,4)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (32,0)-(32,1) = "/" - │ │ │ ├── content_loc: (32,1)-(33,3) = "(?)" - │ │ │ ├── closing_loc: (33,3)-(33,4) = "/" - │ │ │ └── unescaped: "(?)" - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :=~ - │ │ ├── message_loc: (33,5)-(33,7) = "=~" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (33,8)-(33,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ StringNode (location: (33,8)-(33,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (33,8)-(33,9) = "\"" - │ │ │ ├── content_loc: (33,9)-(33,9) = "" - │ │ │ ├── closing_loc: (33,9)-(33,10) = "\"" - │ │ │ └── unescaped: "" - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── targets: (length: 1) - │ └── @ LocalVariableTargetNode (location: (32,0)-(33,4)) - │ ├── flags: ∅ - │ ├── name: :ab - │ └── depth: 0 - ├── @ LocalVariableReadNode (location: (33,12)-(33,14)) - │ ├── flags: newline - │ ├── name: :ab - │ └── depth: 0 - ├── @ MatchWriteNode (location: (35,0)-(35,24)) - │ ├── flags: newline - │ ├── call: - │ │ @ CallNode (location: (35,0)-(35,24)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ RegularExpressionNode (location: (35,0)-(35,18)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (35,0)-(35,1) = "/" - │ │ │ ├── content_loc: (35,1)-(35,17) = "(?)(?)" - │ │ │ ├── closing_loc: (35,17)-(35,18) = "/" - │ │ │ └── unescaped: "(?)(?)" - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :=~ - │ │ ├── message_loc: (35,19)-(35,21) = "=~" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (35,22)-(35,24)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ StringNode (location: (35,22)-(35,24)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (35,22)-(35,23) = "\"" - │ │ │ ├── content_loc: (35,23)-(35,23) = "" - │ │ │ ├── closing_loc: (35,23)-(35,24) = "\"" - │ │ │ └── unescaped: "" - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── targets: (length: 1) - │ └── @ LocalVariableTargetNode (location: (35,4)-(35,7)) - │ ├── flags: ∅ - │ ├── name: :abc - │ └── depth: 0 - ├── @ LocalVariableReadNode (location: (35,26)-(35,29)) - │ ├── flags: newline - │ ├── name: :abc - │ └── depth: 0 - ├── @ CallNode (location: (37,0)-(37,16)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ RegularExpressionNode (location: (37,0)-(37,10)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (37,0)-(37,1) = "/" - │ │ ├── content_loc: (37,1)-(37,9) = "(?)" - │ │ ├── closing_loc: (37,9)-(37,10) = "/" - │ │ └── unescaped: "(?)" - │ ├── call_operator_loc: ∅ - │ ├── name: :=~ - │ ├── message_loc: (37,11)-(37,13) = "=~" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (37,14)-(37,16)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ StringNode (location: (37,14)-(37,16)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (37,14)-(37,15) = "\"" - │ │ ├── content_loc: (37,15)-(37,15) = "" - │ │ ├── closing_loc: (37,15)-(37,16) = "\"" - │ │ └── unescaped: "" - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ LocalVariableWriteNode (location: (39,0)-(39,5)) - │ ├── flags: newline - │ ├── name: :a - │ ├── depth: 0 - │ ├── name_loc: (39,0)-(39,1) = "a" - │ ├── value: - │ │ @ IntegerNode (location: (39,4)-(39,5)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ └── operator_loc: (39,2)-(39,3) = "=" - ├── @ CallNode (location: (40,0)-(40,24)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :tap - │ ├── message_loc: (40,0)-(40,3) = "tap" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (40,4)-(40,24)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (40,6)-(40,22)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ MatchWriteNode (location: (40,6)-(40,22)) - │ │ ├── flags: newline - │ │ ├── call: - │ │ │ @ CallNode (location: (40,6)-(40,22)) - │ │ │ ├── flags: ∅ - │ │ │ ├── receiver: - │ │ │ │ @ RegularExpressionNode (location: (40,6)-(40,14)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: (40,6)-(40,7) = "/" - │ │ │ │ ├── content_loc: (40,7)-(40,13) = "(?)" - │ │ │ │ ├── closing_loc: (40,13)-(40,14) = "/" - │ │ │ │ └── unescaped: "(?)" - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :=~ - │ │ │ ├── message_loc: (40,15)-(40,17) = "=~" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (40,18)-(40,22)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ CallNode (location: (40,18)-(40,22)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :to_s - │ │ │ │ ├── message_loc: (40,18)-(40,22) = "to_s" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── targets: (length: 1) - │ │ └── @ LocalVariableTargetNode (location: (40,10)-(40,11)) - │ │ ├── flags: ∅ - │ │ ├── name: :a - │ │ └── depth: 1 - │ ├── opening_loc: (40,4)-(40,5) = "{" - │ └── closing_loc: (40,23)-(40,24) = "}" - ├── @ MatchWriteNode (location: (42,0)-(42,16)) - │ ├── flags: newline - │ ├── call: - │ │ @ CallNode (location: (42,0)-(42,16)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ RegularExpressionNode (location: (42,0)-(42,10)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (42,0)-(42,1) = "/" - │ │ │ ├── content_loc: (42,1)-(42,9) = "(?)" - │ │ │ ├── closing_loc: (42,9)-(42,10) = "/" - │ │ │ └── unescaped: "(?)" - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :=~ - │ │ ├── message_loc: (42,11)-(42,13) = "=~" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (42,14)-(42,16)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ StringNode (location: (42,14)-(42,16)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (42,14)-(42,15) = "\"" - │ │ │ ├── content_loc: (42,15)-(42,15) = "" - │ │ │ ├── closing_loc: (42,15)-(42,16) = "\"" - │ │ │ └── unescaped: "" - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── targets: (length: 1) - │ └── @ LocalVariableTargetNode (location: (42,4)-(42,7)) - │ ├── flags: ∅ - │ ├── name: :foo - │ └── depth: 0 - ├── @ CallNode (location: (43,0)-(43,16)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ RegularExpressionNode (location: (43,0)-(43,10)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (43,0)-(43,1) = "/" - │ │ ├── content_loc: (43,1)-(43,9) = "(?)" - │ │ ├── closing_loc: (43,9)-(43,10) = "/" - │ │ └── unescaped: "(?)" - │ ├── call_operator_loc: ∅ - │ ├── name: :=~ - │ ├── message_loc: (43,11)-(43,13) = "=~" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (43,14)-(43,16)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ StringNode (location: (43,14)-(43,16)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (43,14)-(43,15) = "\"" - │ │ ├── content_loc: (43,15)-(43,15) = "" - │ │ ├── closing_loc: (43,15)-(43,16) = "\"" - │ │ └── unescaped: "" - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (45,0)-(45,16)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ RegularExpressionNode (location: (45,0)-(45,10)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (45,0)-(45,1) = "/" - │ │ ├── content_loc: (45,1)-(45,9) = "(?)" - │ │ ├── closing_loc: (45,9)-(45,10) = "/" - │ │ └── unescaped: "(?)" - │ ├── call_operator_loc: ∅ - │ ├── name: :=~ - │ ├── message_loc: (45,11)-(45,13) = "=~" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (45,14)-(45,16)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ StringNode (location: (45,14)-(45,16)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (45,14)-(45,15) = "\"" - │ │ ├── content_loc: (45,15)-(45,15) = "" - │ │ ├── closing_loc: (45,15)-(45,16) = "\"" - │ │ └── unescaped: "" - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ DefNode (location: (46,0)-(46,32)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (46,4)-(46,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (46,8)-(46,12)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 1) - │ │ │ └── @ RequiredKeywordParameterNode (location: (46,8)-(46,12)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :nil - │ │ │ └── name_loc: (46,8)-(46,12) = "nil:" - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (46,16)-(46,32)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ MatchWriteNode (location: (46,16)-(46,32)) - │ │ ├── flags: ∅ - │ │ ├── call: - │ │ │ @ CallNode (location: (46,16)-(46,32)) - │ │ │ ├── flags: ∅ - │ │ │ ├── receiver: - │ │ │ │ @ RegularExpressionNode (location: (46,16)-(46,26)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: (46,16)-(46,17) = "/" - │ │ │ │ ├── content_loc: (46,17)-(46,25) = "(?)" - │ │ │ │ ├── closing_loc: (46,25)-(46,26) = "/" - │ │ │ │ └── unescaped: "(?)" - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :=~ - │ │ │ ├── message_loc: (46,27)-(46,29) = "=~" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (46,30)-(46,32)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ StringNode (location: (46,30)-(46,32)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── opening_loc: (46,30)-(46,31) = "\"" - │ │ │ │ ├── content_loc: (46,31)-(46,31) = "" - │ │ │ │ ├── closing_loc: (46,31)-(46,32) = "\"" - │ │ │ │ └── unescaped: "" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── targets: (length: 1) - │ │ └── @ LocalVariableTargetNode (location: (46,20)-(46,23)) - │ │ ├── flags: ∅ - │ │ ├── name: :nil - │ │ └── depth: 0 - │ ├── locals: [:nil] - │ ├── def_keyword_loc: (46,0)-(46,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (46,7)-(46,8) = "(" - │ ├── rparen_loc: (46,12)-(46,13) = ")" - │ ├── equal_loc: (46,14)-(46,15) = "=" - │ └── end_keyword_loc: ∅ - └── @ RegularExpressionNode (location: (48,0)-(48,10)) - ├── flags: newline, static_literal, extended, forced_us_ascii_encoding - ├── opening_loc: (48,0)-(48,1) = "/" - ├── content_loc: (48,1)-(48,8) = "(?-x:#)" - ├── closing_loc: (48,8)-(48,10) = "/x" - └── unescaped: "(?-x:#)" diff --git a/test/prism/snapshots/regex_char_width.txt b/test/prism/snapshots/regex_char_width.txt deleted file mode 100644 index 664e4e8850a254..00000000000000 --- a/test/prism/snapshots/regex_char_width.txt +++ /dev/null @@ -1,57 +0,0 @@ -@ ProgramNode (location: (2,0)-(3,6)) -├── flags: ∅ -├── locals: [:a, :b] -└── statements: - @ StatementsNode (location: (2,0)-(3,6)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ MatchWriteNode (location: (2,0)-(2,36)) - │ ├── flags: newline - │ ├── call: - │ │ @ CallNode (location: (2,0)-(2,36)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ RegularExpressionNode (location: (2,0)-(2,22)) - │ │ │ ├── flags: static_literal - │ │ │ ├── opening_loc: (2,0)-(2,1) = "/" - │ │ │ ├── content_loc: (2,1)-(2,21) = "\x{E285}\xA7(?.)\x{E285}\xA9(?.)" - │ │ │ ├── closing_loc: (2,21)-(2,22) = "/" - │ │ │ └── unescaped: "\x{E285}\xA7(?.)\x{E285}\xA9(?.)" - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :=~ - │ │ ├── message_loc: (2,23)-(2,25) = "=~" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (2,26)-(2,36)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ StringNode (location: (2,26)-(2,36)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (2,26)-(2,27) = "'" - │ │ │ ├── content_loc: (2,27)-(2,35) = "\x{E285}\xA7a\x{E285}\xA9b" - │ │ │ ├── closing_loc: (2,35)-(2,36) = "'" - │ │ │ └── unescaped: "\x{E285}\xA7a\x{E285}\xA9b" - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── targets: (length: 2) - │ ├── @ LocalVariableTargetNode (location: (2,7)-(2,8)) - │ │ ├── flags: ∅ - │ │ ├── name: :a - │ │ └── depth: 0 - │ └── @ LocalVariableTargetNode (location: (2,17)-(2,18)) - │ ├── flags: ∅ - │ ├── name: :b - │ └── depth: 0 - └── @ ArrayNode (location: (3,0)-(3,6)) - ├── flags: newline - ├── elements: (length: 2) - │ ├── @ LocalVariableReadNode (location: (3,1)-(3,2)) - │ │ ├── flags: ∅ - │ │ ├── name: :a - │ │ └── depth: 0 - │ └── @ LocalVariableReadNode (location: (3,4)-(3,5)) - │ ├── flags: ∅ - │ ├── name: :b - │ └── depth: 0 - ├── opening_loc: (3,0)-(3,1) = "[" - └── closing_loc: (3,5)-(3,6) = "]" diff --git a/test/prism/snapshots/repeat_parameters.txt b/test/prism/snapshots/repeat_parameters.txt deleted file mode 100644 index 1dbf120e9cbbac..00000000000000 --- a/test/prism/snapshots/repeat_parameters.txt +++ /dev/null @@ -1,509 +0,0 @@ -@ ProgramNode (location: (1,0)-(38,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(38,3)) - ├── flags: ∅ - └── body: (length: 13) - ├── @ DefNode (location: (1,0)-(2,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (1,4)-(1,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,8)-(1,12)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 2) - │ │ │ ├── @ RequiredParameterNode (location: (1,8)-(1,9)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :a - │ │ │ └── @ RequiredParameterNode (location: (1,11)-(1,12)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :_ - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:a, :_] - │ ├── def_keyword_loc: (1,0)-(1,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (1,7)-(1,8) = "(" - │ ├── rparen_loc: (1,12)-(1,13) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (2,0)-(2,3) = "end" - ├── @ DefNode (location: (4,0)-(5,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (4,4)-(4,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (4,8)-(4,15)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 3) - │ │ │ ├── @ RequiredParameterNode (location: (4,8)-(4,9)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :a - │ │ │ ├── @ RequiredParameterNode (location: (4,11)-(4,12)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :_ - │ │ │ └── @ RequiredParameterNode (location: (4,14)-(4,15)) - │ │ │ ├── flags: repeated_parameter - │ │ │ └── name: :_ - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:a, :_] - │ ├── def_keyword_loc: (4,0)-(4,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (4,7)-(4,8) = "(" - │ ├── rparen_loc: (4,15)-(4,16) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (5,0)-(5,3) = "end" - ├── @ DefNode (location: (7,0)-(8,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (7,4)-(7,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (7,8)-(7,19)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 4) - │ │ │ ├── @ RequiredParameterNode (location: (7,8)-(7,9)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :a - │ │ │ ├── @ RequiredParameterNode (location: (7,11)-(7,12)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :_ - │ │ │ ├── @ RequiredParameterNode (location: (7,14)-(7,15)) - │ │ │ │ ├── flags: repeated_parameter - │ │ │ │ └── name: :_ - │ │ │ └── @ RequiredParameterNode (location: (7,17)-(7,19)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :_b - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:a, :_, :_b] - │ ├── def_keyword_loc: (7,0)-(7,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (7,7)-(7,8) = "(" - │ ├── rparen_loc: (7,19)-(7,20) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (8,0)-(8,3) = "end" - ├── @ DefNode (location: (10,0)-(11,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (10,4)-(10,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (10,8)-(10,23)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 5) - │ │ │ ├── @ RequiredParameterNode (location: (10,8)-(10,9)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :a - │ │ │ ├── @ RequiredParameterNode (location: (10,11)-(10,12)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :_ - │ │ │ ├── @ RequiredParameterNode (location: (10,14)-(10,15)) - │ │ │ │ ├── flags: repeated_parameter - │ │ │ │ └── name: :_ - │ │ │ ├── @ RequiredParameterNode (location: (10,17)-(10,19)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :_b - │ │ │ └── @ RequiredParameterNode (location: (10,21)-(10,23)) - │ │ │ ├── flags: repeated_parameter - │ │ │ └── name: :_b - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:a, :_, :_b] - │ ├── def_keyword_loc: (10,0)-(10,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (10,7)-(10,8) = "(" - │ ├── rparen_loc: (10,23)-(10,24) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (11,0)-(11,3) = "end" - ├── @ DefNode (location: (13,0)-(14,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (13,4)-(13,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (13,8)-(13,35)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 3) - │ │ │ ├── @ RequiredParameterNode (location: (13,8)-(13,9)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :a - │ │ │ ├── @ MultiTargetNode (location: (13,11)-(13,22)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── lefts: (length: 1) - │ │ │ │ │ └── @ RequiredParameterNode (location: (13,12)-(13,13)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── name: :b - │ │ │ │ ├── rest: - │ │ │ │ │ @ SplatNode (location: (13,15)-(13,18)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── operator_loc: (13,15)-(13,16) = "*" - │ │ │ │ │ └── expression: - │ │ │ │ │ @ RequiredParameterNode (location: (13,16)-(13,18)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── name: :_c - │ │ │ │ ├── rights: (length: 1) - │ │ │ │ │ └── @ RequiredParameterNode (location: (13,20)-(13,21)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── name: :d - │ │ │ │ ├── lparen_loc: (13,11)-(13,12) = "(" - │ │ │ │ └── rparen_loc: (13,21)-(13,22) = ")" - │ │ │ └── @ MultiTargetNode (location: (13,24)-(13,35)) - │ │ │ ├── flags: ∅ - │ │ │ ├── lefts: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (13,25)-(13,26)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :e - │ │ │ ├── rest: - │ │ │ │ @ SplatNode (location: (13,28)-(13,31)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── operator_loc: (13,28)-(13,29) = "*" - │ │ │ │ └── expression: - │ │ │ │ @ RequiredParameterNode (location: (13,29)-(13,31)) - │ │ │ │ ├── flags: repeated_parameter - │ │ │ │ └── name: :_c - │ │ │ ├── rights: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (13,33)-(13,34)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :f - │ │ │ ├── lparen_loc: (13,24)-(13,25) = "(" - │ │ │ └── rparen_loc: (13,34)-(13,35) = ")" - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:a, :b, :_c, :d, :e, :f] - │ ├── def_keyword_loc: (13,0)-(13,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (13,7)-(13,8) = "(" - │ ├── rparen_loc: (13,35)-(13,36) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (14,0)-(14,3) = "end" - ├── @ DefNode (location: (16,0)-(17,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (16,4)-(16,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (16,8)-(16,20)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 4) - │ │ │ ├── @ RequiredParameterNode (location: (16,8)-(16,10)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :_a - │ │ │ ├── @ RequiredParameterNode (location: (16,12)-(16,14)) - │ │ │ │ ├── flags: repeated_parameter - │ │ │ │ └── name: :_a - │ │ │ ├── @ RequiredParameterNode (location: (16,16)-(16,17)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :b - │ │ │ └── @ RequiredParameterNode (location: (16,19)-(16,20)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :c - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:_a, :b, :c] - │ ├── def_keyword_loc: (16,0)-(16,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (16,7)-(16,8) = "(" - │ ├── rparen_loc: (16,20)-(16,21) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (17,0)-(17,3) = "end" - ├── @ DefNode (location: (19,0)-(20,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (19,4)-(19,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (19,8)-(19,32)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 2) - │ │ │ ├── @ MultiTargetNode (location: (19,8)-(19,19)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── lefts: (length: 1) - │ │ │ │ │ └── @ RequiredParameterNode (location: (19,9)-(19,10)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── name: :a - │ │ │ │ ├── rest: - │ │ │ │ │ @ SplatNode (location: (19,12)-(19,15)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── operator_loc: (19,12)-(19,13) = "*" - │ │ │ │ │ └── expression: - │ │ │ │ │ @ RequiredParameterNode (location: (19,13)-(19,15)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── name: :_b - │ │ │ │ ├── rights: (length: 1) - │ │ │ │ │ └── @ RequiredParameterNode (location: (19,17)-(19,18)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── name: :c - │ │ │ │ ├── lparen_loc: (19,8)-(19,9) = "(" - │ │ │ │ └── rparen_loc: (19,18)-(19,19) = ")" - │ │ │ └── @ MultiTargetNode (location: (19,21)-(19,32)) - │ │ │ ├── flags: ∅ - │ │ │ ├── lefts: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (19,22)-(19,23)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :d - │ │ │ ├── rest: - │ │ │ │ @ SplatNode (location: (19,25)-(19,28)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── operator_loc: (19,25)-(19,26) = "*" - │ │ │ │ └── expression: - │ │ │ │ @ RequiredParameterNode (location: (19,26)-(19,28)) - │ │ │ │ ├── flags: repeated_parameter - │ │ │ │ └── name: :_b - │ │ │ ├── rights: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (19,30)-(19,31)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :e - │ │ │ ├── lparen_loc: (19,21)-(19,22) = "(" - │ │ │ └── rparen_loc: (19,31)-(19,32) = ")" - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:a, :_b, :c, :d, :e] - │ ├── def_keyword_loc: (19,0)-(19,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (19,7)-(19,8) = "(" - │ ├── rparen_loc: (19,32)-(19,33) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (20,0)-(20,3) = "end" - ├── @ DefNode (location: (22,0)-(23,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (22,4)-(22,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (22,8)-(22,22)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 2) - │ │ │ ├── @ OptionalParameterNode (location: (22,8)-(22,14)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :_a - │ │ │ │ ├── name_loc: (22,8)-(22,10) = "_a" - │ │ │ │ ├── operator_loc: (22,11)-(22,12) = "=" - │ │ │ │ └── value: - │ │ │ │ @ IntegerNode (location: (22,13)-(22,14)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ └── @ OptionalParameterNode (location: (22,16)-(22,22)) - │ │ │ ├── flags: repeated_parameter - │ │ │ ├── name: :_a - │ │ │ ├── name_loc: (22,16)-(22,18) = "_a" - │ │ │ ├── operator_loc: (22,19)-(22,20) = "=" - │ │ │ └── value: - │ │ │ @ IntegerNode (location: (22,21)-(22,22)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:_a] - │ ├── def_keyword_loc: (22,0)-(22,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (22,7)-(22,8) = "(" - │ ├── rparen_loc: (22,22)-(22,23) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (23,0)-(23,3) = "end" - ├── @ DefNode (location: (25,0)-(26,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (25,4)-(25,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (25,8)-(25,16)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 2) - │ │ │ ├── @ RequiredKeywordParameterNode (location: (25,8)-(25,11)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :_a - │ │ │ │ └── name_loc: (25,8)-(25,11) = "_a:" - │ │ │ └── @ RequiredKeywordParameterNode (location: (25,13)-(25,16)) - │ │ │ ├── flags: repeated_parameter - │ │ │ ├── name: :_a - │ │ │ └── name_loc: (25,13)-(25,16) = "_a:" - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:_a] - │ ├── def_keyword_loc: (25,0)-(25,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (25,7)-(25,8) = "(" - │ ├── rparen_loc: (25,16)-(25,17) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (26,0)-(26,3) = "end" - ├── @ DefNode (location: (28,0)-(29,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (28,4)-(28,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (28,8)-(28,20)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 2) - │ │ │ ├── @ OptionalKeywordParameterNode (location: (28,8)-(28,13)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :_a - │ │ │ │ ├── name_loc: (28,8)-(28,11) = "_a:" - │ │ │ │ └── value: - │ │ │ │ @ IntegerNode (location: (28,12)-(28,13)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ └── @ OptionalKeywordParameterNode (location: (28,15)-(28,20)) - │ │ │ ├── flags: repeated_parameter - │ │ │ ├── name: :_a - │ │ │ ├── name_loc: (28,15)-(28,18) = "_a:" - │ │ │ └── value: - │ │ │ @ IntegerNode (location: (28,19)-(28,20)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:_a] - │ ├── def_keyword_loc: (28,0)-(28,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (28,7)-(28,8) = "(" - │ ├── rparen_loc: (28,20)-(28,21) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (29,0)-(29,3) = "end" - ├── @ DefNode (location: (31,0)-(32,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (31,4)-(31,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (31,8)-(31,16)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (31,8)-(31,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :_a - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: - │ │ │ @ KeywordRestParameterNode (location: (31,12)-(31,16)) - │ │ │ ├── flags: repeated_parameter - │ │ │ ├── name: :_a - │ │ │ ├── name_loc: (31,14)-(31,16) = "_a" - │ │ │ └── operator_loc: (31,12)-(31,14) = "**" - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:_a] - │ ├── def_keyword_loc: (31,0)-(31,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (31,7)-(31,8) = "(" - │ ├── rparen_loc: (31,16)-(31,17) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (32,0)-(32,3) = "end" - ├── @ DefNode (location: (34,0)-(35,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (34,4)-(34,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (34,8)-(34,15)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (34,8)-(34,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :_a - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: - │ │ @ BlockParameterNode (location: (34,12)-(34,15)) - │ │ ├── flags: repeated_parameter - │ │ ├── name: :_a - │ │ ├── name_loc: (34,13)-(34,15) = "_a" - │ │ └── operator_loc: (34,12)-(34,13) = "&" - │ ├── body: ∅ - │ ├── locals: [:_a] - │ ├── def_keyword_loc: (34,0)-(34,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (34,7)-(34,8) = "(" - │ ├── rparen_loc: (34,15)-(34,16) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (35,0)-(35,3) = "end" - └── @ DefNode (location: (37,0)-(38,3)) - ├── flags: newline - ├── name: :foo - ├── name_loc: (37,4)-(37,7) = "foo" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (37,8)-(37,15)) - │ ├── flags: ∅ - │ ├── requireds: (length: 1) - │ │ └── @ RequiredParameterNode (location: (37,8)-(37,10)) - │ │ ├── flags: ∅ - │ │ └── name: :_a - │ ├── optionals: (length: 0) - │ ├── rest: - │ │ @ RestParameterNode (location: (37,12)-(37,15)) - │ │ ├── flags: repeated_parameter - │ │ ├── name: :_a - │ │ ├── name_loc: (37,13)-(37,15) = "_a" - │ │ └── operator_loc: (37,12)-(37,13) = "*" - │ ├── posts: (length: 0) - │ ├── keywords: (length: 0) - │ ├── keyword_rest: ∅ - │ └── block: ∅ - ├── body: ∅ - ├── locals: [:_a] - ├── def_keyword_loc: (37,0)-(37,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: (37,7)-(37,8) = "(" - ├── rparen_loc: (37,15)-(37,16) = ")" - ├── equal_loc: ∅ - └── end_keyword_loc: (38,0)-(38,3) = "end" diff --git a/test/prism/snapshots/rescue.txt b/test/prism/snapshots/rescue.txt deleted file mode 100644 index 38f692bbeda415..00000000000000 --- a/test/prism/snapshots/rescue.txt +++ /dev/null @@ -1,584 +0,0 @@ -@ ProgramNode (location: (1,0)-(35,18)) -├── flags: ∅ -├── locals: [:a, :z] -└── statements: - @ StatementsNode (location: (1,0)-(35,18)) - ├── flags: ∅ - └── body: (length: 14) - ├── @ RescueModifierNode (location: (1,0)-(1,14)) - │ ├── flags: newline - │ ├── expression: - │ │ @ CallNode (location: (1,0)-(1,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (1,0)-(1,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── keyword_loc: (1,4)-(1,10) = "rescue" - │ └── rescue_expression: - │ @ NilNode (location: (1,11)-(1,14)) - │ └── flags: static_literal - ├── @ RescueModifierNode (location: (3,0)-(4,3)) - │ ├── flags: newline - │ ├── expression: - │ │ @ CallNode (location: (3,0)-(3,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (3,0)-(3,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── keyword_loc: (3,4)-(3,10) = "rescue" - │ └── rescue_expression: - │ @ NilNode (location: (4,0)-(4,3)) - │ └── flags: static_literal - ├── @ CallNode (location: (6,0)-(6,24)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :tap - │ ├── message_loc: (6,0)-(6,3) = "tap" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (6,4)-(6,24)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (6,6)-(6,22)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ RescueModifierNode (location: (6,6)-(6,22)) - │ │ ├── flags: newline - │ │ ├── expression: - │ │ │ @ BreakNode (location: (6,6)-(6,11)) - │ │ │ ├── flags: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ └── keyword_loc: (6,6)-(6,11) = "break" - │ │ ├── keyword_loc: (6,12)-(6,18) = "rescue" - │ │ └── rescue_expression: - │ │ @ NilNode (location: (6,19)-(6,22)) - │ │ └── flags: static_literal - │ ├── opening_loc: (6,4)-(6,5) = "{" - │ └── closing_loc: (6,23)-(6,24) = "}" - ├── @ CallNode (location: (8,0)-(8,23)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :tap - │ ├── message_loc: (8,0)-(8,3) = "tap" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (8,4)-(8,23)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (8,6)-(8,21)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ RescueModifierNode (location: (8,6)-(8,21)) - │ │ ├── flags: newline - │ │ ├── expression: - │ │ │ @ NextNode (location: (8,6)-(8,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ └── keyword_loc: (8,6)-(8,10) = "next" - │ │ ├── keyword_loc: (8,11)-(8,17) = "rescue" - │ │ └── rescue_expression: - │ │ @ NilNode (location: (8,18)-(8,21)) - │ │ └── flags: static_literal - │ ├── opening_loc: (8,4)-(8,5) = "{" - │ └── closing_loc: (8,22)-(8,23) = "}" - ├── @ RescueModifierNode (location: (10,0)-(10,17)) - │ ├── flags: newline - │ ├── expression: - │ │ @ ReturnNode (location: (10,0)-(10,6)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (10,0)-(10,6) = "return" - │ │ └── arguments: ∅ - │ ├── keyword_loc: (10,7)-(10,13) = "rescue" - │ └── rescue_expression: - │ @ NilNode (location: (10,14)-(10,17)) - │ └── flags: static_literal - ├── @ RescueModifierNode (location: (12,0)-(12,19)) - │ ├── flags: newline - │ ├── expression: - │ │ @ CallNode (location: (12,0)-(12,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (12,0)-(12,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── keyword_loc: (12,4)-(12,10) = "rescue" - │ └── rescue_expression: - │ @ OrNode (location: (12,11)-(12,19)) - │ ├── flags: ∅ - │ ├── left: - │ │ @ NilNode (location: (12,11)-(12,14)) - │ │ └── flags: static_literal - │ ├── right: - │ │ @ IntegerNode (location: (12,18)-(12,19)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ └── operator_loc: (12,15)-(12,17) = "||" - ├── @ RescueModifierNode (location: (14,0)-(14,22)) - │ ├── flags: newline - │ ├── expression: - │ │ @ CallNode (location: (14,0)-(14,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (14,0)-(14,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── keyword_loc: (14,4)-(14,10) = "rescue" - │ └── rescue_expression: - │ @ IfNode (location: (14,11)-(14,22)) - │ ├── flags: newline - │ ├── if_keyword_loc: ∅ - │ ├── predicate: - │ │ @ NilNode (location: (14,11)-(14,14)) - │ │ └── flags: static_literal - │ ├── then_keyword_loc: (14,15)-(14,16) = "?" - │ ├── statements: - │ │ @ StatementsNode (location: (14,17)-(14,18)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ IntegerNode (location: (14,17)-(14,18)) - │ │ ├── flags: newline, static_literal, decimal - │ │ └── value: 1 - │ ├── subsequent: - │ │ @ ElseNode (location: (14,19)-(14,22)) - │ │ ├── flags: ∅ - │ │ ├── else_keyword_loc: (14,19)-(14,20) = ":" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (14,21)-(14,22)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ IntegerNode (location: (14,21)-(14,22)) - │ │ │ ├── flags: newline, static_literal, decimal - │ │ │ └── value: 2 - │ │ └── end_keyword_loc: ∅ - │ └── end_keyword_loc: ∅ - ├── @ BeginNode (location: (16,0)-(16,24)) - │ ├── flags: newline - │ ├── begin_keyword_loc: (16,0)-(16,5) = "begin" - │ ├── statements: - │ │ @ StatementsNode (location: (16,7)-(16,8)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (16,7)-(16,8)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (16,7)-(16,8) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── rescue_clause: - │ │ @ RescueNode (location: (16,10)-(16,19)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (16,10)-(16,16) = "rescue" - │ │ ├── exceptions: (length: 1) - │ │ │ └── @ SplatNode (location: (16,17)-(16,19)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (16,17)-(16,18) = "*" - │ │ │ └── expression: - │ │ │ @ CallNode (location: (16,18)-(16,19)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (16,18)-(16,19) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── operator_loc: ∅ - │ │ ├── reference: ∅ - │ │ ├── statements: ∅ - │ │ └── subsequent: ∅ - │ ├── else_clause: ∅ - │ ├── ensure_clause: ∅ - │ └── end_keyword_loc: (16,21)-(16,24) = "end" - ├── @ CallNode (location: (18,0)-(20,3)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (18,0)-(18,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (18,4)-(20,3)) - │ ├── flags: ∅ - │ ├── locals: [:x] - │ ├── parameters: - │ │ @ BlockParametersNode (location: (18,7)-(18,10)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (18,8)-(18,9)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (18,8)-(18,9)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :x - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: (18,7)-(18,8) = "|" - │ │ └── closing_loc: (18,9)-(18,10) = "|" - │ ├── body: - │ │ @ StatementsNode (location: (19,2)-(19,40)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ RescueModifierNode (location: (19,2)-(19,40)) - │ │ ├── flags: newline - │ │ ├── expression: - │ │ │ @ CallNode (location: (19,2)-(19,8)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (19,2)-(19,5) = "bar" - │ │ │ ├── opening_loc: (19,5)-(19,6) = "(" - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (19,6)-(19,7)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ CallNode (location: (19,6)-(19,7)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :y - │ │ │ │ ├── message_loc: (19,6)-(19,7) = "y" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── closing_loc: (19,7)-(19,8) = ")" - │ │ │ └── block: ∅ - │ │ ├── keyword_loc: (19,9)-(19,15) = "rescue" - │ │ └── rescue_expression: - │ │ @ CallNode (location: (19,16)-(19,40)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :ArgumentError - │ │ ├── message_loc: (19,16)-(19,29) = "ArgumentError" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (19,30)-(19,40)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ CallNode (location: (19,30)-(19,40)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :fail - │ │ │ ├── message_loc: (19,30)-(19,34) = "fail" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (19,35)-(19,40)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ StringNode (location: (19,35)-(19,40)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── opening_loc: (19,35)-(19,36) = "\"" - │ │ │ │ ├── content_loc: (19,36)-(19,39) = "baz" - │ │ │ │ ├── closing_loc: (19,39)-(19,40) = "\"" - │ │ │ │ └── unescaped: "baz" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── opening_loc: (18,4)-(18,6) = "do" - │ └── closing_loc: (20,0)-(20,3) = "end" - ├── @ IfNode (location: (22,0)-(24,3)) - │ ├── flags: newline - │ ├── if_keyword_loc: (22,0)-(22,2) = "if" - │ ├── predicate: - │ │ @ LocalVariableWriteNode (location: (22,3)-(22,21)) - │ │ ├── flags: ∅ - │ │ ├── name: :a - │ │ ├── depth: 0 - │ │ ├── name_loc: (22,3)-(22,4) = "a" - │ │ ├── value: - │ │ │ @ RescueModifierNode (location: (22,7)-(22,21)) - │ │ │ ├── flags: ∅ - │ │ │ ├── expression: - │ │ │ │ @ CallNode (location: (22,7)-(22,10)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :foo - │ │ │ │ ├── message_loc: (22,7)-(22,10) = "foo" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── keyword_loc: (22,11)-(22,17) = "rescue" - │ │ │ └── rescue_expression: - │ │ │ @ NilNode (location: (22,18)-(22,21)) - │ │ │ └── flags: static_literal - │ │ └── operator_loc: (22,5)-(22,6) = "=" - │ ├── then_keyword_loc: ∅ - │ ├── statements: - │ │ @ StatementsNode (location: (23,2)-(23,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (23,2)-(23,5)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (23,2)-(23,5) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── subsequent: ∅ - │ └── end_keyword_loc: (24,0)-(24,3) = "end" - ├── @ DefNode (location: (26,0)-(26,44)) - │ ├── flags: newline - │ ├── name: :some_method - │ ├── name_loc: (26,4)-(26,15) = "some_method" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (26,18)-(26,44)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ RescueModifierNode (location: (26,18)-(26,44)) - │ │ ├── flags: ∅ - │ │ ├── expression: - │ │ │ @ CallNode (location: (26,18)-(26,33)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :other_method - │ │ │ ├── message_loc: (26,18)-(26,30) = "other_method" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (26,31)-(26,33)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ IntegerNode (location: (26,31)-(26,33)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 42 - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── keyword_loc: (26,34)-(26,40) = "rescue" - │ │ └── rescue_expression: - │ │ @ NilNode (location: (26,41)-(26,44)) - │ │ └── flags: static_literal - │ ├── locals: [] - │ ├── def_keyword_loc: (26,0)-(26,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: (26,16)-(26,17) = "=" - │ └── end_keyword_loc: ∅ - ├── @ DefNode (location: (28,0)-(31,3)) - │ ├── flags: newline - │ ├── name: :a - │ ├── name_loc: (28,4)-(28,5) = "a" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ BeginNode (location: (28,0)-(31,3)) - │ │ ├── flags: ∅ - │ │ ├── begin_keyword_loc: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (29,2)-(29,6)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (29,2)-(29,6)) - │ │ │ ├── flags: newline, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :a - │ │ │ ├── message_loc: (29,2)-(29,3) = "a" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (29,4)-(29,6)) - │ │ │ │ ├── flags: contains_keywords - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ KeywordHashNode (location: (29,4)-(29,6)) - │ │ │ │ ├── flags: symbol_keys - │ │ │ │ └── elements: (length: 1) - │ │ │ │ └── @ AssocNode (location: (29,4)-(29,6)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── key: - │ │ │ │ │ @ SymbolNode (location: (29,4)-(29,6)) - │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── value_loc: (29,4)-(29,5) = "b" - │ │ │ │ │ ├── closing_loc: (29,5)-(29,6) = ":" - │ │ │ │ │ └── unescaped: "b" - │ │ │ │ ├── value: - │ │ │ │ │ @ ImplicitNode (location: (29,4)-(29,6)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── value: - │ │ │ │ │ @ CallNode (location: (29,4)-(29,6)) - │ │ │ │ │ ├── flags: ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :b - │ │ │ │ │ ├── message_loc: (29,4)-(29,5) = "b" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ └── operator_loc: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── rescue_clause: - │ │ │ @ RescueNode (location: (30,0)-(30,6)) - │ │ │ ├── flags: ∅ - │ │ │ ├── keyword_loc: (30,0)-(30,6) = "rescue" - │ │ │ ├── exceptions: (length: 0) - │ │ │ ├── operator_loc: ∅ - │ │ │ ├── reference: ∅ - │ │ │ ├── statements: ∅ - │ │ │ └── subsequent: ∅ - │ │ ├── else_clause: ∅ - │ │ ├── ensure_clause: ∅ - │ │ └── end_keyword_loc: (31,0)-(31,3) = "end" - │ ├── locals: [] - │ ├── def_keyword_loc: (28,0)-(28,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (31,0)-(31,3) = "end" - ├── @ RescueModifierNode (location: (33,0)-(33,21)) - │ ├── flags: newline - │ ├── expression: - │ │ @ IfNode (location: (33,0)-(33,10)) - │ │ ├── flags: newline - │ │ ├── if_keyword_loc: (33,4)-(33,6) = "if" - │ │ ├── predicate: - │ │ │ @ CallNode (location: (33,7)-(33,10)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (33,7)-(33,10) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── then_keyword_loc: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (33,0)-(33,3)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (33,0)-(33,3)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (33,0)-(33,3) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── subsequent: ∅ - │ │ └── end_keyword_loc: ∅ - │ ├── keyword_loc: (33,11)-(33,17) = "rescue" - │ └── rescue_expression: - │ @ CallNode (location: (33,18)-(33,21)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :baz - │ ├── message_loc: (33,18)-(33,21) = "baz" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── @ LocalVariableWriteNode (location: (35,0)-(35,18)) - ├── flags: newline - ├── name: :z - ├── depth: 0 - ├── name_loc: (35,0)-(35,1) = "z" - ├── value: - │ @ RescueModifierNode (location: (35,4)-(35,18)) - │ ├── flags: ∅ - │ ├── expression: - │ │ @ CallNode (location: (35,4)-(35,7)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :x - │ │ ├── message_loc: (35,4)-(35,5) = "x" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (35,6)-(35,7)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ CallNode (location: (35,6)-(35,7)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :y - │ │ │ ├── message_loc: (35,6)-(35,7) = "y" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── keyword_loc: (35,8)-(35,14) = "rescue" - │ └── rescue_expression: - │ @ CallNode (location: (35,15)-(35,18)) - │ ├── flags: ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :c - │ ├── message_loc: (35,15)-(35,16) = "c" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (35,17)-(35,18)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (35,17)-(35,18)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :d - │ │ ├── message_loc: (35,17)-(35,18) = "d" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── operator_loc: (35,2)-(35,3) = "=" diff --git a/test/prism/snapshots/return.txt b/test/prism/snapshots/return.txt deleted file mode 100644 index fc2bd70fbc52d9..00000000000000 --- a/test/prism/snapshots/return.txt +++ /dev/null @@ -1,179 +0,0 @@ -@ ProgramNode (location: (1,0)-(23,9)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(23,9)) - ├── flags: ∅ - └── body: (length: 10) - ├── @ ReturnNode (location: (1,0)-(1,6)) - │ ├── flags: newline - │ ├── keyword_loc: (1,0)-(1,6) = "return" - │ └── arguments: ∅ - ├── @ ReturnNode (location: (3,0)-(3,20)) - │ ├── flags: newline - │ ├── keyword_loc: (3,0)-(3,6) = "return" - │ └── arguments: - │ @ ArgumentsNode (location: (3,7)-(3,20)) - │ ├── flags: ∅ - │ └── arguments: (length: 3) - │ ├── @ ParenthesesNode (location: (3,7)-(3,10)) - │ │ ├── flags: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (3,8)-(3,9)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ IntegerNode (location: (3,8)-(3,9)) - │ │ │ ├── flags: newline, static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── opening_loc: (3,7)-(3,8) = "(" - │ │ └── closing_loc: (3,9)-(3,10) = ")" - │ ├── @ ParenthesesNode (location: (3,12)-(3,15)) - │ │ ├── flags: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (3,13)-(3,14)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ IntegerNode (location: (3,13)-(3,14)) - │ │ │ ├── flags: newline, static_literal, decimal - │ │ │ └── value: 2 - │ │ ├── opening_loc: (3,12)-(3,13) = "(" - │ │ └── closing_loc: (3,14)-(3,15) = ")" - │ └── @ ParenthesesNode (location: (3,17)-(3,20)) - │ ├── flags: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (3,18)-(3,19)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ IntegerNode (location: (3,18)-(3,19)) - │ │ ├── flags: newline, static_literal, decimal - │ │ └── value: 3 - │ ├── opening_loc: (3,17)-(3,18) = "(" - │ └── closing_loc: (3,19)-(3,20) = ")" - ├── @ ReturnNode (location: (5,0)-(5,9)) - │ ├── flags: newline - │ ├── keyword_loc: (5,0)-(5,6) = "return" - │ └── arguments: - │ @ ArgumentsNode (location: (5,7)-(5,9)) - │ ├── flags: contains_splat - │ └── arguments: (length: 1) - │ └── @ SplatNode (location: (5,7)-(5,9)) - │ ├── flags: ∅ - │ ├── operator_loc: (5,7)-(5,8) = "*" - │ └── expression: - │ @ IntegerNode (location: (5,8)-(5,9)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── @ ReturnNode (location: (7,0)-(7,8)) - │ ├── flags: newline - │ ├── keyword_loc: (7,0)-(7,6) = "return" - │ └── arguments: - │ @ ArgumentsNode (location: (7,7)-(7,8)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ IntegerNode (location: (7,7)-(7,8)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── @ ReturnNode (location: (9,0)-(10,1)) - │ ├── flags: newline - │ ├── keyword_loc: (9,0)-(9,6) = "return" - │ └── arguments: - │ @ ArgumentsNode (location: (9,7)-(10,1)) - │ ├── flags: ∅ - │ └── arguments: (length: 3) - │ ├── @ IntegerNode (location: (9,7)-(9,8)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── @ IntegerNode (location: (9,10)-(9,11)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ └── @ IntegerNode (location: (10,0)-(10,1)) - │ ├── flags: static_literal, decimal - │ └── value: 3 - ├── @ ReturnNode (location: (12,0)-(12,14)) - │ ├── flags: newline - │ ├── keyword_loc: (12,0)-(12,6) = "return" - │ └── arguments: - │ @ ArgumentsNode (location: (12,7)-(12,14)) - │ ├── flags: ∅ - │ └── arguments: (length: 3) - │ ├── @ IntegerNode (location: (12,7)-(12,8)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── @ IntegerNode (location: (12,10)-(12,11)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ └── @ IntegerNode (location: (12,13)-(12,14)) - │ ├── flags: static_literal, decimal - │ └── value: 3 - ├── @ ReturnNode (location: (14,0)-(14,16)) - │ ├── flags: newline - │ ├── keyword_loc: (14,0)-(14,6) = "return" - │ └── arguments: - │ @ ArgumentsNode (location: (14,7)-(14,16)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ ArrayNode (location: (14,7)-(14,16)) - │ ├── flags: static_literal - │ ├── elements: (length: 3) - │ │ ├── @ IntegerNode (location: (14,8)-(14,9)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── @ IntegerNode (location: (14,11)-(14,12)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ └── @ IntegerNode (location: (14,14)-(14,15)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 3 - │ ├── opening_loc: (14,7)-(14,8) = "[" - │ └── closing_loc: (14,15)-(14,16) = "]" - ├── @ ReturnNode (location: (16,0)-(19,1)) - │ ├── flags: newline - │ ├── keyword_loc: (16,0)-(16,6) = "return" - │ └── arguments: - │ @ ArgumentsNode (location: (16,6)-(19,1)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ ParenthesesNode (location: (16,6)-(19,1)) - │ ├── flags: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (17,2)-(18,3)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 2) - │ │ ├── @ IntegerNode (location: (17,2)-(17,3)) - │ │ │ ├── flags: newline, static_literal, decimal - │ │ │ └── value: 1 - │ │ └── @ IntegerNode (location: (18,2)-(18,3)) - │ │ ├── flags: newline, static_literal, decimal - │ │ └── value: 2 - │ ├── opening_loc: (16,6)-(16,7) = "(" - │ └── closing_loc: (19,0)-(19,1) = ")" - ├── @ ReturnNode (location: (21,0)-(21,8)) - │ ├── flags: newline - │ ├── keyword_loc: (21,0)-(21,6) = "return" - │ └── arguments: - │ @ ArgumentsNode (location: (21,6)-(21,8)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ ParenthesesNode (location: (21,6)-(21,8)) - │ ├── flags: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (21,6)-(21,7) = "(" - │ └── closing_loc: (21,7)-(21,8) = ")" - └── @ ReturnNode (location: (23,0)-(23,9)) - ├── flags: newline - ├── keyword_loc: (23,0)-(23,6) = "return" - └── arguments: - @ ArgumentsNode (location: (23,6)-(23,9)) - ├── flags: ∅ - └── arguments: (length: 1) - └── @ ParenthesesNode (location: (23,6)-(23,9)) - ├── flags: ∅ - ├── body: - │ @ StatementsNode (location: (23,7)-(23,8)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ IntegerNode (location: (23,7)-(23,8)) - │ ├── flags: newline, static_literal, decimal - │ └── value: 1 - ├── opening_loc: (23,6)-(23,7) = "(" - └── closing_loc: (23,8)-(23,9) = ")" diff --git a/test/prism/snapshots/seattlerb/BEGIN.txt b/test/prism/snapshots/seattlerb/BEGIN.txt deleted file mode 100644 index a0d73a8039b91c..00000000000000 --- a/test/prism/snapshots/seattlerb/BEGIN.txt +++ /dev/null @@ -1,19 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,12)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,12)) - ├── flags: ∅ - └── body: (length: 1) - └── @ PreExecutionNode (location: (1,0)-(1,12)) - ├── flags: newline - ├── statements: - │ @ StatementsNode (location: (1,8)-(1,10)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ IntegerNode (location: (1,8)-(1,10)) - │ ├── flags: newline, static_literal, decimal - │ └── value: 42 - ├── keyword_loc: (1,0)-(1,5) = "BEGIN" - ├── opening_loc: (1,6)-(1,7) = "{" - └── closing_loc: (1,11)-(1,12) = "}" diff --git a/test/prism/snapshots/seattlerb/TestRubyParserShared.txt b/test/prism/snapshots/seattlerb/TestRubyParserShared.txt deleted file mode 100644 index 7a488a20aab3eb..00000000000000 --- a/test/prism/snapshots/seattlerb/TestRubyParserShared.txt +++ /dev/null @@ -1,398 +0,0 @@ -@ ProgramNode (location: (1,0)-(92,1)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(92,1)) - ├── flags: ∅ - └── body: (length: 16) - ├── @ ArrayNode (location: (1,0)-(4,1)) - │ ├── flags: newline, static_literal - │ ├── elements: (length: 0) - │ ├── opening_loc: (1,0)-(1,3) = "%I[" - │ └── closing_loc: (4,0)-(4,1) = "]" - ├── @ ArrayNode (location: (6,0)-(9,1)) - │ ├── flags: newline, static_literal - │ ├── elements: (length: 2) - │ │ ├── @ SymbolNode (location: (7,0)-(7,5)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (7,0)-(7,5) = "line2" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "line2" - │ │ └── @ SymbolNode (location: (8,0)-(8,5)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: ∅ - │ │ ├── value_loc: (8,0)-(8,5) = "line3" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "line3" - │ ├── opening_loc: (6,0)-(6,3) = "%I[" - │ └── closing_loc: (9,0)-(9,1) = "]" - ├── @ ArrayNode (location: (11,0)-(14,1)) - │ ├── flags: newline, static_literal - │ ├── elements: (length: 0) - │ ├── opening_loc: (11,0)-(11,3) = "%W[" - │ └── closing_loc: (14,0)-(14,1) = "]" - ├── @ ArrayNode (location: (16,0)-(19,1)) - │ ├── flags: newline - │ ├── elements: (length: 2) - │ │ ├── @ StringNode (location: (17,0)-(17,5)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (17,0)-(17,5) = "line2" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "line2" - │ │ └── @ StringNode (location: (18,0)-(18,5)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (18,0)-(18,5) = "line3" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "line3" - │ ├── opening_loc: (16,0)-(16,3) = "%W[" - │ └── closing_loc: (19,0)-(19,1) = "]" - ├── @ ArrayNode (location: (21,0)-(24,1)) - │ ├── flags: newline, static_literal - │ ├── elements: (length: 0) - │ ├── opening_loc: (21,0)-(21,3) = "%i[" - │ └── closing_loc: (24,0)-(24,1) = "]" - ├── @ ArrayNode (location: (26,0)-(29,1)) - │ ├── flags: newline, static_literal - │ ├── elements: (length: 2) - │ │ ├── @ SymbolNode (location: (27,0)-(27,5)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (27,0)-(27,5) = "line2" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "line2" - │ │ └── @ SymbolNode (location: (28,0)-(28,5)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: ∅ - │ │ ├── value_loc: (28,0)-(28,5) = "line3" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "line3" - │ ├── opening_loc: (26,0)-(26,3) = "%i[" - │ └── closing_loc: (29,0)-(29,1) = "]" - ├── @ RegularExpressionNode (location: (31,0)-(34,1)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (31,0)-(31,3) = "%r[" - │ ├── content_loc: (31,3)-(34,0) = "\n\n\n" - │ ├── closing_loc: (34,0)-(34,1) = "]" - │ └── unescaped: "\n\n\n" - ├── @ ArrayNode (location: (36,0)-(39,1)) - │ ├── flags: newline, static_literal - │ ├── elements: (length: 0) - │ ├── opening_loc: (36,0)-(36,3) = "%w[" - │ └── closing_loc: (39,0)-(39,1) = "]" - ├── @ ArrayNode (location: (41,0)-(44,1)) - │ ├── flags: newline - │ ├── elements: (length: 2) - │ │ ├── @ StringNode (location: (42,0)-(42,5)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (42,0)-(42,5) = "line2" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "line2" - │ │ └── @ StringNode (location: (43,0)-(43,5)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (43,0)-(43,5) = "line3" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "line3" - │ ├── opening_loc: (41,0)-(41,3) = "%w[" - │ └── closing_loc: (44,0)-(44,1) = "]" - ├── @ ArrayNode (location: (46,0)-(49,1)) - │ ├── flags: newline, static_literal - │ ├── elements: (length: 2) - │ │ ├── @ SymbolNode (location: (47,0)-(47,6)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (47,0)-(47,1) = ":" - │ │ │ ├── value_loc: (47,1)-(47,6) = "line2" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "line2" - │ │ └── @ SymbolNode (location: (48,0)-(48,6)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (48,0)-(48,1) = ":" - │ │ ├── value_loc: (48,1)-(48,6) = "line3" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "line3" - │ ├── opening_loc: (46,0)-(46,1) = "[" - │ └── closing_loc: (49,0)-(49,1) = "]" - ├── @ ClassNode (location: (51,0)-(56,3)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── class_keyword_loc: (51,0)-(51,5) = "class" - │ ├── constant_path: - │ │ @ ConstantReadNode (location: (51,6)-(51,7)) - │ │ ├── flags: ∅ - │ │ └── name: :X - │ ├── inheritance_operator_loc: ∅ - │ ├── superclass: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (52,2)-(55,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ DefNode (location: (52,2)-(55,5)) - │ │ ├── flags: newline - │ │ ├── name: :y - │ │ ├── name_loc: (52,11)-(52,12) = "y" - │ │ ├── receiver: - │ │ │ @ SelfNode (location: (52,6)-(52,10)) - │ │ │ └── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (52,13)-(53,9)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 2) - │ │ │ │ ├── @ RequiredParameterNode (location: (52,13)-(52,14)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── name: :a - │ │ │ │ └── @ RequiredParameterNode (location: (53,8)-(53,9)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :b - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (54,4)-(54,9)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (54,4)-(54,9)) - │ │ │ ├── flags: newline - │ │ │ ├── receiver: - │ │ │ │ @ LocalVariableReadNode (location: (54,4)-(54,5)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :a - │ │ │ │ └── depth: 0 - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :+ - │ │ │ ├── message_loc: (54,6)-(54,7) = "+" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (54,8)-(54,9)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ LocalVariableReadNode (location: (54,8)-(54,9)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :b - │ │ │ │ └── depth: 0 - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: [:a, :b] - │ │ ├── def_keyword_loc: (52,2)-(52,5) = "def" - │ │ ├── operator_loc: (52,10)-(52,11) = "." - │ │ ├── lparen_loc: (52,12)-(52,13) = "(" - │ │ ├── rparen_loc: (53,9)-(53,10) = ")" - │ │ ├── equal_loc: ∅ - │ │ └── end_keyword_loc: (55,2)-(55,5) = "end" - │ ├── end_keyword_loc: (56,0)-(56,3) = "end" - │ └── name: :X - ├── @ ClassNode (location: (59,0)-(63,3)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── class_keyword_loc: (59,0)-(59,5) = "class" - │ ├── constant_path: - │ │ @ ConstantReadNode (location: (59,6)-(59,7)) - │ │ ├── flags: ∅ - │ │ └── name: :X - │ ├── inheritance_operator_loc: ∅ - │ ├── superclass: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (60,2)-(62,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ ClassNode (location: (60,2)-(62,5)) - │ │ ├── flags: newline - │ │ ├── locals: [] - │ │ ├── class_keyword_loc: (60,2)-(60,7) = "class" - │ │ ├── constant_path: - │ │ │ @ ConstantReadNode (location: (60,8)-(60,9)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :Y - │ │ ├── inheritance_operator_loc: ∅ - │ │ ├── superclass: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (61,4)-(61,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ ConstantWriteNode (location: (61,4)-(61,10)) - │ │ │ ├── flags: newline - │ │ │ ├── name: :Z - │ │ │ ├── name_loc: (61,4)-(61,5) = "Z" - │ │ │ ├── value: - │ │ │ │ @ IntegerNode (location: (61,8)-(61,10)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 42 - │ │ │ └── operator_loc: (61,6)-(61,7) = "=" - │ │ ├── end_keyword_loc: (62,2)-(62,5) = "end" - │ │ └── name: :Y - │ ├── end_keyword_loc: (63,0)-(63,3) = "end" - │ └── name: :X - ├── @ ClassNode (location: (66,0)-(71,3)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── class_keyword_loc: (66,0)-(66,5) = "class" - │ ├── constant_path: - │ │ @ ConstantReadNode (location: (66,6)-(66,7)) - │ │ ├── flags: ∅ - │ │ └── name: :X - │ ├── inheritance_operator_loc: ∅ - │ ├── superclass: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (67,2)-(70,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ DefNode (location: (67,2)-(70,5)) - │ │ ├── flags: newline - │ │ ├── name: :y - │ │ ├── name_loc: (67,6)-(67,7) = "y" - │ │ ├── receiver: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (67,8)-(68,9)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 2) - │ │ │ │ ├── @ RequiredParameterNode (location: (67,8)-(67,9)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── name: :a - │ │ │ │ └── @ RequiredParameterNode (location: (68,8)-(68,9)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :b - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (69,4)-(69,9)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (69,4)-(69,9)) - │ │ │ ├── flags: newline - │ │ │ ├── receiver: - │ │ │ │ @ LocalVariableReadNode (location: (69,4)-(69,5)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :a - │ │ │ │ └── depth: 0 - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :+ - │ │ │ ├── message_loc: (69,6)-(69,7) = "+" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (69,8)-(69,9)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ LocalVariableReadNode (location: (69,8)-(69,9)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :b - │ │ │ │ └── depth: 0 - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: [:a, :b] - │ │ ├── def_keyword_loc: (67,2)-(67,5) = "def" - │ │ ├── operator_loc: ∅ - │ │ ├── lparen_loc: (67,7)-(67,8) = "(" - │ │ ├── rparen_loc: (68,9)-(68,10) = ")" - │ │ ├── equal_loc: ∅ - │ │ └── end_keyword_loc: (70,2)-(70,5) = "end" - │ ├── end_keyword_loc: (71,0)-(71,3) = "end" - │ └── name: :X - ├── @ ModuleNode (location: (74,0)-(79,3)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── module_keyword_loc: (74,0)-(74,6) = "module" - │ ├── constant_path: - │ │ @ ConstantReadNode (location: (74,7)-(74,8)) - │ │ ├── flags: ∅ - │ │ └── name: :X - │ ├── body: - │ │ @ StatementsNode (location: (75,2)-(78,3)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ ConstantWriteNode (location: (75,2)-(78,3)) - │ │ ├── flags: newline - │ │ ├── name: :X - │ │ ├── name_loc: (75,2)-(75,3) = "X" - │ │ ├── value: - │ │ │ @ ArrayNode (location: (75,6)-(78,3)) - │ │ │ ├── flags: static_literal - │ │ │ ├── elements: (length: 2) - │ │ │ │ ├── @ SymbolNode (location: (76,4)-(76,10)) - │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ │ ├── opening_loc: (76,4)-(76,5) = ":" - │ │ │ │ │ ├── value_loc: (76,5)-(76,10) = "line3" - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── unescaped: "line3" - │ │ │ │ └── @ SymbolNode (location: (77,4)-(77,10)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: (77,4)-(77,5) = ":" - │ │ │ │ ├── value_loc: (77,5)-(77,10) = "line4" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "line4" - │ │ │ ├── opening_loc: (75,6)-(75,7) = "[" - │ │ │ └── closing_loc: (78,2)-(78,3) = "]" - │ │ └── operator_loc: (75,4)-(75,5) = "=" - │ ├── end_keyword_loc: (79,0)-(79,3) = "end" - │ └── name: :X - ├── @ ModuleNode (location: (82,0)-(86,3)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── module_keyword_loc: (82,0)-(82,6) = "module" - │ ├── constant_path: - │ │ @ ConstantReadNode (location: (82,7)-(82,8)) - │ │ ├── flags: ∅ - │ │ └── name: :X - │ ├── body: - │ │ @ StatementsNode (location: (83,2)-(85,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ ModuleNode (location: (83,2)-(85,5)) - │ │ ├── flags: newline - │ │ ├── locals: [] - │ │ ├── module_keyword_loc: (83,2)-(83,8) = "module" - │ │ ├── constant_path: - │ │ │ @ ConstantReadNode (location: (83,9)-(83,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :Y - │ │ ├── body: - │ │ │ @ StatementsNode (location: (84,4)-(84,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ ConstantWriteNode (location: (84,4)-(84,10)) - │ │ │ ├── flags: newline - │ │ │ ├── name: :Z - │ │ │ ├── name_loc: (84,4)-(84,5) = "Z" - │ │ │ ├── value: - │ │ │ │ @ IntegerNode (location: (84,8)-(84,10)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 42 - │ │ │ └── operator_loc: (84,6)-(84,7) = "=" - │ │ ├── end_keyword_loc: (85,2)-(85,5) = "end" - │ │ └── name: :Y - │ ├── end_keyword_loc: (86,0)-(86,3) = "end" - │ └── name: :X - └── @ CallNode (location: (89,0)-(92,1)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :x - ├── message_loc: (89,0)-(89,1) = "x" - ├── opening_loc: (89,1)-(89,2) = "(" - ├── arguments: - │ @ ArgumentsNode (location: (90,0)-(91,6)) - │ ├── flags: ∅ - │ └── arguments: (length: 2) - │ ├── @ SymbolNode (location: (90,0)-(90,6)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (90,0)-(90,1) = ":" - │ │ ├── value_loc: (90,1)-(90,6) = "line2" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "line2" - │ └── @ SymbolNode (location: (91,0)-(91,6)) - │ ├── flags: static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (91,0)-(91,1) = ":" - │ ├── value_loc: (91,1)-(91,6) = "line3" - │ ├── closing_loc: ∅ - │ └── unescaped: "line3" - ├── closing_loc: (92,0)-(92,1) = ")" - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/__ENCODING__.txt b/test/prism/snapshots/seattlerb/__ENCODING__.txt deleted file mode 100644 index f04dfb6cb8694b..00000000000000 --- a/test/prism/snapshots/seattlerb/__ENCODING__.txt +++ /dev/null @@ -1,9 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,12)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,12)) - ├── flags: ∅ - └── body: (length: 1) - └── @ SourceEncodingNode (location: (1,0)-(1,12)) - └── flags: newline, static_literal diff --git a/test/prism/snapshots/seattlerb/alias_gvar_backref.txt b/test/prism/snapshots/seattlerb/alias_gvar_backref.txt deleted file mode 100644 index 47b0e80b6447c2..00000000000000 --- a/test/prism/snapshots/seattlerb/alias_gvar_backref.txt +++ /dev/null @@ -1,18 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,15)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,15)) - ├── flags: ∅ - └── body: (length: 1) - └── @ AliasGlobalVariableNode (location: (1,0)-(1,15)) - ├── flags: newline - ├── new_name: - │ @ GlobalVariableReadNode (location: (1,6)-(1,12)) - │ ├── flags: ∅ - │ └── name: :$MATCH - ├── old_name: - │ @ BackReferenceReadNode (location: (1,13)-(1,15)) - │ ├── flags: ∅ - │ └── name: :$& - └── keyword_loc: (1,0)-(1,5) = "alias" diff --git a/test/prism/snapshots/seattlerb/alias_resword.txt b/test/prism/snapshots/seattlerb/alias_resword.txt deleted file mode 100644 index 44a4727283eaa7..00000000000000 --- a/test/prism/snapshots/seattlerb/alias_resword.txt +++ /dev/null @@ -1,24 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,12)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,12)) - ├── flags: ∅ - └── body: (length: 1) - └── @ AliasMethodNode (location: (1,0)-(1,12)) - ├── flags: newline - ├── new_name: - │ @ SymbolNode (location: (1,6)-(1,8)) - │ ├── flags: static_literal, forced_us_ascii_encoding - │ ├── opening_loc: ∅ - │ ├── value_loc: (1,6)-(1,8) = "in" - │ ├── closing_loc: ∅ - │ └── unescaped: "in" - ├── old_name: - │ @ SymbolNode (location: (1,9)-(1,12)) - │ ├── flags: static_literal, forced_us_ascii_encoding - │ ├── opening_loc: ∅ - │ ├── value_loc: (1,9)-(1,12) = "out" - │ ├── closing_loc: ∅ - │ └── unescaped: "out" - └── keyword_loc: (1,0)-(1,5) = "alias" diff --git a/test/prism/snapshots/seattlerb/and_multi.txt b/test/prism/snapshots/seattlerb/and_multi.txt deleted file mode 100644 index f98ad67e1026b9..00000000000000 --- a/test/prism/snapshots/seattlerb/and_multi.txt +++ /dev/null @@ -1,33 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,4)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,4)) - ├── flags: ∅ - └── body: (length: 1) - └── @ AndNode (location: (1,0)-(3,4)) - ├── flags: newline - ├── left: - │ @ AndNode (location: (1,0)-(2,9)) - │ ├── flags: ∅ - │ ├── left: - │ │ @ TrueNode (location: (1,0)-(1,4)) - │ │ └── flags: static_literal - │ ├── right: - │ │ @ CallNode (location: (2,0)-(2,9)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ FalseNode (location: (2,4)-(2,9)) - │ │ │ └── flags: static_literal - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :! - │ │ ├── message_loc: (2,0)-(2,3) = "not" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── operator_loc: (1,5)-(1,8) = "and" - ├── right: - │ @ TrueNode (location: (3,0)-(3,4)) - │ └── flags: static_literal - └── operator_loc: (2,10)-(2,13) = "and" diff --git a/test/prism/snapshots/seattlerb/aref_args_assocs.txt b/test/prism/snapshots/seattlerb/aref_args_assocs.txt deleted file mode 100644 index cbd07920379988..00000000000000 --- a/test/prism/snapshots/seattlerb/aref_args_assocs.txt +++ /dev/null @@ -1,26 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,8)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,8)) - ├── flags: ∅ - └── body: (length: 1) - └── @ ArrayNode (location: (1,0)-(1,8)) - ├── flags: newline - ├── elements: (length: 1) - │ └── @ KeywordHashNode (location: (1,1)-(1,7)) - │ ├── flags: ∅ - │ └── elements: (length: 1) - │ └── @ AssocNode (location: (1,1)-(1,7)) - │ ├── flags: static_literal - │ ├── key: - │ │ @ IntegerNode (location: (1,1)-(1,2)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── value: - │ │ @ IntegerNode (location: (1,6)-(1,7)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ └── operator_loc: (1,3)-(1,5) = "=>" - ├── opening_loc: (1,0)-(1,1) = "[" - └── closing_loc: (1,7)-(1,8) = "]" diff --git a/test/prism/snapshots/seattlerb/aref_args_lit_assocs.txt b/test/prism/snapshots/seattlerb/aref_args_lit_assocs.txt deleted file mode 100644 index 7302f728e3beaa..00000000000000 --- a/test/prism/snapshots/seattlerb/aref_args_lit_assocs.txt +++ /dev/null @@ -1,29 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,11)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,11)) - ├── flags: ∅ - └── body: (length: 1) - └── @ ArrayNode (location: (1,0)-(1,11)) - ├── flags: newline - ├── elements: (length: 2) - │ ├── @ IntegerNode (location: (1,1)-(1,2)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ └── @ KeywordHashNode (location: (1,4)-(1,10)) - │ ├── flags: ∅ - │ └── elements: (length: 1) - │ └── @ AssocNode (location: (1,4)-(1,10)) - │ ├── flags: static_literal - │ ├── key: - │ │ @ IntegerNode (location: (1,4)-(1,5)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── value: - │ │ @ IntegerNode (location: (1,9)-(1,10)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 3 - │ └── operator_loc: (1,6)-(1,8) = "=>" - ├── opening_loc: (1,0)-(1,1) = "[" - └── closing_loc: (1,10)-(1,11) = "]" diff --git a/test/prism/snapshots/seattlerb/args_kw_block.txt b/test/prism/snapshots/seattlerb/args_kw_block.txt deleted file mode 100644 index 88081dfa1452d7..00000000000000 --- a/test/prism/snapshots/seattlerb/args_kw_block.txt +++ /dev/null @@ -1,43 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,20)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,20)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(1,20)) - ├── flags: newline - ├── name: :f - ├── name_loc: (1,4)-(1,5) = "f" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (1,6)-(1,14)) - │ ├── flags: ∅ - │ ├── requireds: (length: 0) - │ ├── optionals: (length: 0) - │ ├── rest: ∅ - │ ├── posts: (length: 0) - │ ├── keywords: (length: 1) - │ │ └── @ OptionalKeywordParameterNode (location: (1,6)-(1,10)) - │ │ ├── flags: ∅ - │ │ ├── name: :a - │ │ ├── name_loc: (1,6)-(1,8) = "a:" - │ │ └── value: - │ │ @ IntegerNode (location: (1,9)-(1,10)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── keyword_rest: ∅ - │ └── block: - │ @ BlockParameterNode (location: (1,12)-(1,14)) - │ ├── flags: ∅ - │ ├── name: :b - │ ├── name_loc: (1,13)-(1,14) = "b" - │ └── operator_loc: (1,12)-(1,13) = "&" - ├── body: ∅ - ├── locals: [:a, :b] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: (1,5)-(1,6) = "(" - ├── rparen_loc: (1,14)-(1,15) = ")" - ├── equal_loc: ∅ - └── end_keyword_loc: (1,17)-(1,20) = "end" diff --git a/test/prism/snapshots/seattlerb/array_line_breaks.txt b/test/prism/snapshots/seattlerb/array_line_breaks.txt deleted file mode 100644 index a2d21e90ad6f39..00000000000000 --- a/test/prism/snapshots/seattlerb/array_line_breaks.txt +++ /dev/null @@ -1,27 +0,0 @@ -@ ProgramNode (location: (1,0)-(4,1)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(4,1)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ ArrayNode (location: (1,0)-(3,4)) - │ ├── flags: newline - │ ├── elements: (length: 2) - │ │ ├── @ StringNode (location: (2,0)-(2,3)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (2,0)-(2,1) = "'" - │ │ │ ├── content_loc: (2,1)-(2,2) = "a" - │ │ │ ├── closing_loc: (2,2)-(2,3) = "'" - │ │ │ └── unescaped: "a" - │ │ └── @ StringNode (location: (3,0)-(3,3)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (3,0)-(3,1) = "'" - │ │ ├── content_loc: (3,1)-(3,2) = "b" - │ │ ├── closing_loc: (3,2)-(3,3) = "'" - │ │ └── unescaped: "b" - │ ├── opening_loc: (1,0)-(1,1) = "[" - │ └── closing_loc: (3,3)-(3,4) = "]" - └── @ IntegerNode (location: (4,0)-(4,1)) - ├── flags: newline, static_literal, decimal - └── value: 1 diff --git a/test/prism/snapshots/seattlerb/array_lits_trailing_calls.txt b/test/prism/snapshots/seattlerb/array_lits_trailing_calls.txt deleted file mode 100644 index 2de5a054a66695..00000000000000 --- a/test/prism/snapshots/seattlerb/array_lits_trailing_calls.txt +++ /dev/null @@ -1,37 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,4)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,4)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ CallNode (location: (1,0)-(1,6)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ArrayNode (location: (1,0)-(1,4)) - │ │ ├── flags: static_literal - │ │ ├── elements: (length: 0) - │ │ ├── opening_loc: (1,0)-(1,3) = "%w[" - │ │ └── closing_loc: (1,3)-(1,4) = "]" - │ ├── call_operator_loc: (1,4)-(1,5) = "." - │ ├── name: :b - │ ├── message_loc: (1,5)-(1,6) = "b" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── @ CallNode (location: (3,0)-(3,4)) - ├── flags: newline - ├── receiver: - │ @ ArrayNode (location: (3,0)-(3,2)) - │ ├── flags: static_literal - │ ├── elements: (length: 0) - │ ├── opening_loc: (3,0)-(3,1) = "[" - │ └── closing_loc: (3,1)-(3,2) = "]" - ├── call_operator_loc: (3,2)-(3,3) = "." - ├── name: :b - ├── message_loc: (3,3)-(3,4) = "b" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/assoc__bare.txt b/test/prism/snapshots/seattlerb/assoc__bare.txt deleted file mode 100644 index 530360ef66ff23..00000000000000 --- a/test/prism/snapshots/seattlerb/assoc__bare.txt +++ /dev/null @@ -1,36 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,6)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,6)) - ├── flags: ∅ - └── body: (length: 1) - └── @ HashNode (location: (1,0)-(1,6)) - ├── flags: newline - ├── opening_loc: (1,0)-(1,1) = "{" - ├── elements: (length: 1) - │ └── @ AssocNode (location: (1,2)-(1,4)) - │ ├── flags: ∅ - │ ├── key: - │ │ @ SymbolNode (location: (1,2)-(1,4)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: ∅ - │ │ ├── value_loc: (1,2)-(1,3) = "y" - │ │ ├── closing_loc: (1,3)-(1,4) = ":" - │ │ └── unescaped: "y" - │ ├── value: - │ │ @ ImplicitNode (location: (1,2)-(1,4)) - │ │ ├── flags: ∅ - │ │ └── value: - │ │ @ CallNode (location: (1,2)-(1,4)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :y - │ │ ├── message_loc: (1,2)-(1,3) = "y" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── operator_loc: ∅ - └── closing_loc: (1,5)-(1,6) = "}" diff --git a/test/prism/snapshots/seattlerb/assoc_label.txt b/test/prism/snapshots/seattlerb/assoc_label.txt deleted file mode 100644 index 91b94bbc1cc0a0..00000000000000 --- a/test/prism/snapshots/seattlerb/assoc_label.txt +++ /dev/null @@ -1,37 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,6)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,6)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,6)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :a - ├── message_loc: (1,0)-(1,1) = "a" - ├── opening_loc: (1,1)-(1,2) = "(" - ├── arguments: - │ @ ArgumentsNode (location: (1,2)-(1,5)) - │ ├── flags: contains_keywords - │ └── arguments: (length: 1) - │ └── @ KeywordHashNode (location: (1,2)-(1,5)) - │ ├── flags: symbol_keys - │ └── elements: (length: 1) - │ └── @ AssocNode (location: (1,2)-(1,5)) - │ ├── flags: static_literal - │ ├── key: - │ │ @ SymbolNode (location: (1,2)-(1,4)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: ∅ - │ │ ├── value_loc: (1,2)-(1,3) = "b" - │ │ ├── closing_loc: (1,3)-(1,4) = ":" - │ │ └── unescaped: "b" - │ ├── value: - │ │ @ IntegerNode (location: (1,4)-(1,5)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ └── operator_loc: ∅ - ├── closing_loc: (1,5)-(1,6) = ")" - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/attr_asgn_colon_id.txt b/test/prism/snapshots/seattlerb/attr_asgn_colon_id.txt deleted file mode 100644 index 67802fc8a4ea7f..00000000000000 --- a/test/prism/snapshots/seattlerb/attr_asgn_colon_id.txt +++ /dev/null @@ -1,26 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,8)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,8)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,8)) - ├── flags: newline, attribute_write - ├── receiver: - │ @ ConstantReadNode (location: (1,0)-(1,1)) - │ ├── flags: ∅ - │ └── name: :A - ├── call_operator_loc: (1,1)-(1,3) = "::" - ├── name: :b= - ├── message_loc: (1,3)-(1,4) = "b" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,7)-(1,8)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ IntegerNode (location: (1,7)-(1,8)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/attrasgn_array_arg.txt b/test/prism/snapshots/seattlerb/attrasgn_array_arg.txt deleted file mode 100644 index 43853b4ef91d11..00000000000000 --- a/test/prism/snapshots/seattlerb/attrasgn_array_arg.txt +++ /dev/null @@ -1,44 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,13)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,13)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,13)) - ├── flags: newline, attribute_write - ├── receiver: - │ @ CallNode (location: (1,0)-(1,1)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (1,0)-(1,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: ∅ - ├── name: :[]= - ├── message_loc: (1,1)-(1,9) = "[[1, 2]]" - ├── opening_loc: (1,1)-(1,2) = "[" - ├── arguments: - │ @ ArgumentsNode (location: (1,2)-(1,13)) - │ ├── flags: ∅ - │ └── arguments: (length: 2) - │ ├── @ ArrayNode (location: (1,2)-(1,8)) - │ │ ├── flags: static_literal - │ │ ├── elements: (length: 2) - │ │ │ ├── @ IntegerNode (location: (1,3)-(1,4)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ └── @ IntegerNode (location: (1,6)-(1,7)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ ├── opening_loc: (1,2)-(1,3) = "[" - │ │ └── closing_loc: (1,7)-(1,8) = "]" - │ └── @ IntegerNode (location: (1,12)-(1,13)) - │ ├── flags: static_literal, decimal - │ └── value: 3 - ├── closing_loc: (1,8)-(1,9) = "]" - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/attrasgn_array_lhs.txt b/test/prism/snapshots/seattlerb/attrasgn_array_lhs.txt deleted file mode 100644 index 5729407edc1f17..00000000000000 --- a/test/prism/snapshots/seattlerb/attrasgn_array_lhs.txt +++ /dev/null @@ -1,85 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,42)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,42)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,42)) - ├── flags: newline, attribute_write - ├── receiver: - │ @ ArrayNode (location: (1,0)-(1,12)) - │ ├── flags: static_literal - │ ├── elements: (length: 4) - │ │ ├── @ IntegerNode (location: (1,1)-(1,2)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── @ IntegerNode (location: (1,4)-(1,5)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ ├── @ IntegerNode (location: (1,7)-(1,8)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 3 - │ │ └── @ IntegerNode (location: (1,10)-(1,11)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 4 - │ ├── opening_loc: (1,0)-(1,1) = "[" - │ └── closing_loc: (1,11)-(1,12) = "]" - ├── call_operator_loc: ∅ - ├── name: :[]= - ├── message_loc: (1,12)-(1,24) = "[from .. to]" - ├── opening_loc: (1,12)-(1,13) = "[" - ├── arguments: - │ @ ArgumentsNode (location: (1,13)-(1,42)) - │ ├── flags: ∅ - │ └── arguments: (length: 2) - │ ├── @ RangeNode (location: (1,13)-(1,23)) - │ │ ├── flags: ∅ - │ │ ├── left: - │ │ │ @ CallNode (location: (1,13)-(1,17)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :from - │ │ │ ├── message_loc: (1,13)-(1,17) = "from" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── right: - │ │ │ @ CallNode (location: (1,21)-(1,23)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :to - │ │ │ ├── message_loc: (1,21)-(1,23) = "to" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: (1,18)-(1,20) = ".." - │ └── @ ArrayNode (location: (1,27)-(1,42)) - │ ├── flags: ∅ - │ ├── elements: (length: 3) - │ │ ├── @ StringNode (location: (1,28)-(1,31)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (1,28)-(1,29) = "\"" - │ │ │ ├── content_loc: (1,29)-(1,30) = "a" - │ │ │ ├── closing_loc: (1,30)-(1,31) = "\"" - │ │ │ └── unescaped: "a" - │ │ ├── @ StringNode (location: (1,33)-(1,36)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (1,33)-(1,34) = "\"" - │ │ │ ├── content_loc: (1,34)-(1,35) = "b" - │ │ │ ├── closing_loc: (1,35)-(1,36) = "\"" - │ │ │ └── unescaped: "b" - │ │ └── @ StringNode (location: (1,38)-(1,41)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (1,38)-(1,39) = "\"" - │ │ ├── content_loc: (1,39)-(1,40) = "c" - │ │ ├── closing_loc: (1,40)-(1,41) = "\"" - │ │ └── unescaped: "c" - │ ├── opening_loc: (1,27)-(1,28) = "[" - │ └── closing_loc: (1,41)-(1,42) = "]" - ├── closing_loc: (1,23)-(1,24) = "]" - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/attrasgn_primary_dot_constant.txt b/test/prism/snapshots/seattlerb/attrasgn_primary_dot_constant.txt deleted file mode 100644 index 2c06df2609b95d..00000000000000 --- a/test/prism/snapshots/seattlerb/attrasgn_primary_dot_constant.txt +++ /dev/null @@ -1,33 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,7)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,7)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,7)) - ├── flags: newline, attribute_write - ├── receiver: - │ @ CallNode (location: (1,0)-(1,1)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (1,0)-(1,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: (1,1)-(1,2) = "." - ├── name: :B= - ├── message_loc: (1,2)-(1,3) = "B" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,6)-(1,7)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ IntegerNode (location: (1,6)-(1,7)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/backticks_interpolation_line.txt b/test/prism/snapshots/seattlerb/backticks_interpolation_line.txt deleted file mode 100644 index 8c6a163c48a6c9..00000000000000 --- a/test/prism/snapshots/seattlerb/backticks_interpolation_line.txt +++ /dev/null @@ -1,43 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,8)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,8)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,8)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :x - ├── message_loc: (1,0)-(1,1) = "x" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,2)-(1,8)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ InterpolatedXStringNode (location: (1,2)-(1,8)) - │ ├── flags: ∅ - │ ├── opening_loc: (1,2)-(1,3) = "`" - │ ├── parts: (length: 1) - │ │ └── @ EmbeddedStatementsNode (location: (1,3)-(1,7)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (1,3)-(1,5) = "\#{" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (1,5)-(1,6)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (1,5)-(1,6)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :y - │ │ │ ├── message_loc: (1,5)-(1,6) = "y" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── closing_loc: (1,6)-(1,7) = "}" - │ └── closing_loc: (1,7)-(1,8) = "`" - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/bang_eq.txt b/test/prism/snapshots/seattlerb/bang_eq.txt deleted file mode 100644 index 6bbd4a6ea2205d..00000000000000 --- a/test/prism/snapshots/seattlerb/bang_eq.txt +++ /dev/null @@ -1,26 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,6)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,6)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,6)) - ├── flags: newline - ├── receiver: - │ @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── call_operator_loc: ∅ - ├── name: :!= - ├── message_loc: (1,2)-(1,4) = "!=" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,5)-(1,6)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ IntegerNode (location: (1,5)-(1,6)) - │ ├── flags: static_literal, decimal - │ └── value: 2 - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/bdot2.txt b/test/prism/snapshots/seattlerb/bdot2.txt deleted file mode 100644 index b1c05c0fc46e26..00000000000000 --- a/test/prism/snapshots/seattlerb/bdot2.txt +++ /dev/null @@ -1,40 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,3)) - ├── flags: ∅ - └── body: (length: 3) - ├── @ RangeNode (location: (1,0)-(1,4)) - │ ├── flags: newline, static_literal - │ ├── left: ∅ - │ ├── right: - │ │ @ IntegerNode (location: (1,2)-(1,4)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 10 - │ └── operator_loc: (1,0)-(1,2) = ".." - ├── @ RangeNode (location: (2,2)-(2,5)) - │ ├── flags: newline - │ ├── left: ∅ - │ ├── right: - │ │ @ CallNode (location: (2,4)-(2,5)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (2,4)-(2,5) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── operator_loc: (2,2)-(2,4) = ".." - └── @ CallNode (location: (3,2)-(3,3)) - ├── flags: newline, variable_call, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :c - ├── message_loc: (3,2)-(3,3) = "c" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/bdot3.txt b/test/prism/snapshots/seattlerb/bdot3.txt deleted file mode 100644 index 0b35268f19a2e8..00000000000000 --- a/test/prism/snapshots/seattlerb/bdot3.txt +++ /dev/null @@ -1,40 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,3)) - ├── flags: ∅ - └── body: (length: 3) - ├── @ RangeNode (location: (1,0)-(1,5)) - │ ├── flags: newline, static_literal, exclude_end - │ ├── left: ∅ - │ ├── right: - │ │ @ IntegerNode (location: (1,3)-(1,5)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 10 - │ └── operator_loc: (1,0)-(1,3) = "..." - ├── @ RangeNode (location: (2,2)-(2,6)) - │ ├── flags: newline, exclude_end - │ ├── left: ∅ - │ ├── right: - │ │ @ CallNode (location: (2,5)-(2,6)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (2,5)-(2,6) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── operator_loc: (2,2)-(2,5) = "..." - └── @ CallNode (location: (3,2)-(3,3)) - ├── flags: newline, variable_call, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :c - ├── message_loc: (3,2)-(3,3) = "c" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/begin_ensure_no_bodies.txt b/test/prism/snapshots/seattlerb/begin_ensure_no_bodies.txt deleted file mode 100644 index 6ebcc2e052736f..00000000000000 --- a/test/prism/snapshots/seattlerb/begin_ensure_no_bodies.txt +++ /dev/null @@ -1,20 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ BeginNode (location: (1,0)-(3,3)) - ├── flags: newline - ├── begin_keyword_loc: (1,0)-(1,5) = "begin" - ├── statements: ∅ - ├── rescue_clause: ∅ - ├── else_clause: ∅ - ├── ensure_clause: - │ @ EnsureNode (location: (2,0)-(3,3)) - │ ├── flags: ∅ - │ ├── ensure_keyword_loc: (2,0)-(2,6) = "ensure" - │ ├── statements: ∅ - │ └── end_keyword_loc: (3,0)-(3,3) = "end" - └── end_keyword_loc: (3,0)-(3,3) = "end" diff --git a/test/prism/snapshots/seattlerb/begin_rescue_else_ensure_bodies.txt b/test/prism/snapshots/seattlerb/begin_rescue_else_ensure_bodies.txt deleted file mode 100644 index 9fda6c10e60361..00000000000000 --- a/test/prism/snapshots/seattlerb/begin_rescue_else_ensure_bodies.txt +++ /dev/null @@ -1,57 +0,0 @@ -@ ProgramNode (location: (1,0)-(9,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(9,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ BeginNode (location: (1,0)-(9,3)) - ├── flags: newline - ├── begin_keyword_loc: (1,0)-(1,5) = "begin" - ├── statements: - │ @ StatementsNode (location: (2,2)-(2,3)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ IntegerNode (location: (2,2)-(2,3)) - │ ├── flags: newline, static_literal, decimal - │ └── value: 1 - ├── rescue_clause: - │ @ RescueNode (location: (3,0)-(4,3)) - │ ├── flags: ∅ - │ ├── keyword_loc: (3,0)-(3,6) = "rescue" - │ ├── exceptions: (length: 0) - │ ├── operator_loc: ∅ - │ ├── reference: ∅ - │ ├── statements: - │ │ @ StatementsNode (location: (4,2)-(4,3)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ IntegerNode (location: (4,2)-(4,3)) - │ │ ├── flags: newline, static_literal, decimal - │ │ └── value: 2 - │ └── subsequent: ∅ - ├── else_clause: - │ @ ElseNode (location: (5,0)-(7,6)) - │ ├── flags: ∅ - │ ├── else_keyword_loc: (5,0)-(5,4) = "else" - │ ├── statements: - │ │ @ StatementsNode (location: (6,2)-(6,3)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ IntegerNode (location: (6,2)-(6,3)) - │ │ ├── flags: newline, static_literal, decimal - │ │ └── value: 3 - │ └── end_keyword_loc: (7,0)-(7,6) = "ensure" - ├── ensure_clause: - │ @ EnsureNode (location: (7,0)-(9,3)) - │ ├── flags: ∅ - │ ├── ensure_keyword_loc: (7,0)-(7,6) = "ensure" - │ ├── statements: - │ │ @ StatementsNode (location: (8,2)-(8,3)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ IntegerNode (location: (8,2)-(8,3)) - │ │ ├── flags: newline, static_literal, decimal - │ │ └── value: 4 - │ └── end_keyword_loc: (9,0)-(9,3) = "end" - └── end_keyword_loc: (9,0)-(9,3) = "end" diff --git a/test/prism/snapshots/seattlerb/begin_rescue_else_ensure_no_bodies.txt b/test/prism/snapshots/seattlerb/begin_rescue_else_ensure_no_bodies.txt deleted file mode 100644 index 356d1ea9ab1f3b..00000000000000 --- a/test/prism/snapshots/seattlerb/begin_rescue_else_ensure_no_bodies.txt +++ /dev/null @@ -1,33 +0,0 @@ -@ ProgramNode (location: (1,0)-(9,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(9,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ BeginNode (location: (1,0)-(9,3)) - ├── flags: newline - ├── begin_keyword_loc: (1,0)-(1,5) = "begin" - ├── statements: ∅ - ├── rescue_clause: - │ @ RescueNode (location: (3,0)-(3,6)) - │ ├── flags: ∅ - │ ├── keyword_loc: (3,0)-(3,6) = "rescue" - │ ├── exceptions: (length: 0) - │ ├── operator_loc: ∅ - │ ├── reference: ∅ - │ ├── statements: ∅ - │ └── subsequent: ∅ - ├── else_clause: - │ @ ElseNode (location: (5,0)-(7,6)) - │ ├── flags: ∅ - │ ├── else_keyword_loc: (5,0)-(5,4) = "else" - │ ├── statements: ∅ - │ └── end_keyword_loc: (7,0)-(7,6) = "ensure" - ├── ensure_clause: - │ @ EnsureNode (location: (7,0)-(9,3)) - │ ├── flags: ∅ - │ ├── ensure_keyword_loc: (7,0)-(7,6) = "ensure" - │ ├── statements: ∅ - │ └── end_keyword_loc: (9,0)-(9,3) = "end" - └── end_keyword_loc: (9,0)-(9,3) = "end" diff --git a/test/prism/snapshots/seattlerb/begin_rescue_ensure_no_bodies.txt b/test/prism/snapshots/seattlerb/begin_rescue_ensure_no_bodies.txt deleted file mode 100644 index aa744870e79621..00000000000000 --- a/test/prism/snapshots/seattlerb/begin_rescue_ensure_no_bodies.txt +++ /dev/null @@ -1,28 +0,0 @@ -@ ProgramNode (location: (1,0)-(4,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(4,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ BeginNode (location: (1,0)-(4,3)) - ├── flags: newline - ├── begin_keyword_loc: (1,0)-(1,5) = "begin" - ├── statements: ∅ - ├── rescue_clause: - │ @ RescueNode (location: (2,0)-(2,6)) - │ ├── flags: ∅ - │ ├── keyword_loc: (2,0)-(2,6) = "rescue" - │ ├── exceptions: (length: 0) - │ ├── operator_loc: ∅ - │ ├── reference: ∅ - │ ├── statements: ∅ - │ └── subsequent: ∅ - ├── else_clause: ∅ - ├── ensure_clause: - │ @ EnsureNode (location: (3,0)-(4,3)) - │ ├── flags: ∅ - │ ├── ensure_keyword_loc: (3,0)-(3,6) = "ensure" - │ ├── statements: ∅ - │ └── end_keyword_loc: (4,0)-(4,3) = "end" - └── end_keyword_loc: (4,0)-(4,3) = "end" diff --git a/test/prism/snapshots/seattlerb/block_arg__bare.txt b/test/prism/snapshots/seattlerb/block_arg__bare.txt deleted file mode 100644 index ceafdcebbc57f4..00000000000000 --- a/test/prism/snapshots/seattlerb/block_arg__bare.txt +++ /dev/null @@ -1,35 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,13)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,13)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(1,13)) - ├── flags: newline - ├── name: :x - ├── name_loc: (1,4)-(1,5) = "x" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (1,6)-(1,7)) - │ ├── flags: ∅ - │ ├── requireds: (length: 0) - │ ├── optionals: (length: 0) - │ ├── rest: ∅ - │ ├── posts: (length: 0) - │ ├── keywords: (length: 0) - │ ├── keyword_rest: ∅ - │ └── block: - │ @ BlockParameterNode (location: (1,6)-(1,7)) - │ ├── flags: ∅ - │ ├── name: ∅ - │ ├── name_loc: ∅ - │ └── operator_loc: (1,6)-(1,7) = "&" - ├── body: ∅ - ├── locals: [] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: (1,5)-(1,6) = "(" - ├── rparen_loc: (1,7)-(1,8) = ")" - ├── equal_loc: ∅ - └── end_keyword_loc: (1,10)-(1,13) = "end" diff --git a/test/prism/snapshots/seattlerb/block_arg_kwsplat.txt b/test/prism/snapshots/seattlerb/block_arg_kwsplat.txt deleted file mode 100644 index 20756c8378ca46..00000000000000 --- a/test/prism/snapshots/seattlerb/block_arg_kwsplat.txt +++ /dev/null @@ -1,44 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,11)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,11)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,11)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :a - ├── message_loc: (1,0)-(1,1) = "a" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,2)-(1,11)) - ├── flags: ∅ - ├── locals: [:b] - ├── parameters: - │ @ BlockParametersNode (location: (1,4)-(1,9)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,5)-(1,8)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: - │ │ │ @ KeywordRestParameterNode (location: (1,5)-(1,8)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :b - │ │ │ ├── name_loc: (1,7)-(1,8) = "b" - │ │ │ └── operator_loc: (1,5)-(1,7) = "**" - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,4)-(1,5) = "|" - │ └── closing_loc: (1,8)-(1,9) = "|" - ├── body: ∅ - ├── opening_loc: (1,2)-(1,3) = "{" - └── closing_loc: (1,10)-(1,11) = "}" diff --git a/test/prism/snapshots/seattlerb/block_arg_opt_arg_block.txt b/test/prism/snapshots/seattlerb/block_arg_opt_arg_block.txt deleted file mode 100644 index dd89df907daad6..00000000000000 --- a/test/prism/snapshots/seattlerb/block_arg_opt_arg_block.txt +++ /dev/null @@ -1,59 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,21)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,21)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,21)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :a - ├── message_loc: (1,0)-(1,1) = "a" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,2)-(1,21)) - ├── flags: ∅ - ├── locals: [:b, :c, :d, :e] - ├── parameters: - │ @ BlockParametersNode (location: (1,4)-(1,19)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,5)-(1,18)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (1,5)-(1,6)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :b - │ │ ├── optionals: (length: 1) - │ │ │ └── @ OptionalParameterNode (location: (1,8)-(1,11)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :c - │ │ │ ├── name_loc: (1,8)-(1,9) = "c" - │ │ │ ├── operator_loc: (1,9)-(1,10) = "=" - │ │ │ └── value: - │ │ │ @ IntegerNode (location: (1,10)-(1,11)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (1,13)-(1,14)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :d - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: - │ │ @ BlockParameterNode (location: (1,16)-(1,18)) - │ │ ├── flags: ∅ - │ │ ├── name: :e - │ │ ├── name_loc: (1,17)-(1,18) = "e" - │ │ └── operator_loc: (1,16)-(1,17) = "&" - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,4)-(1,5) = "|" - │ └── closing_loc: (1,18)-(1,19) = "|" - ├── body: ∅ - ├── opening_loc: (1,2)-(1,3) = "{" - └── closing_loc: (1,20)-(1,21) = "}" diff --git a/test/prism/snapshots/seattlerb/block_arg_opt_splat.txt b/test/prism/snapshots/seattlerb/block_arg_opt_splat.txt deleted file mode 100644 index cefc1a85153b95..00000000000000 --- a/test/prism/snapshots/seattlerb/block_arg_opt_splat.txt +++ /dev/null @@ -1,56 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,20)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,20)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,20)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :a - ├── message_loc: (1,0)-(1,1) = "a" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,2)-(1,20)) - ├── flags: ∅ - ├── locals: [:b, :c, :d] - ├── parameters: - │ @ BlockParametersNode (location: (1,4)-(1,18)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,5)-(1,17)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (1,5)-(1,6)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :b - │ │ ├── optionals: (length: 1) - │ │ │ └── @ OptionalParameterNode (location: (1,8)-(1,13)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :c - │ │ │ ├── name_loc: (1,8)-(1,9) = "c" - │ │ │ ├── operator_loc: (1,10)-(1,11) = "=" - │ │ │ └── value: - │ │ │ @ IntegerNode (location: (1,12)-(1,13)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── rest: - │ │ │ @ RestParameterNode (location: (1,15)-(1,17)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :d - │ │ │ ├── name_loc: (1,16)-(1,17) = "d" - │ │ │ └── operator_loc: (1,15)-(1,16) = "*" - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,4)-(1,5) = "|" - │ └── closing_loc: (1,17)-(1,18) = "|" - ├── body: ∅ - ├── opening_loc: (1,2)-(1,3) = "{" - └── closing_loc: (1,19)-(1,20) = "}" diff --git a/test/prism/snapshots/seattlerb/block_arg_opt_splat_arg_block_omfg.txt b/test/prism/snapshots/seattlerb/block_arg_opt_splat_arg_block_omfg.txt deleted file mode 100644 index bf66e376fd7573..00000000000000 --- a/test/prism/snapshots/seattlerb/block_arg_opt_splat_arg_block_omfg.txt +++ /dev/null @@ -1,64 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,25)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,25)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,25)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :a - ├── message_loc: (1,0)-(1,1) = "a" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,2)-(1,25)) - ├── flags: ∅ - ├── locals: [:b, :c, :d, :e, :f] - ├── parameters: - │ @ BlockParametersNode (location: (1,4)-(1,23)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,5)-(1,22)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (1,5)-(1,6)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :b - │ │ ├── optionals: (length: 1) - │ │ │ └── @ OptionalParameterNode (location: (1,8)-(1,11)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :c - │ │ │ ├── name_loc: (1,8)-(1,9) = "c" - │ │ │ ├── operator_loc: (1,9)-(1,10) = "=" - │ │ │ └── value: - │ │ │ @ IntegerNode (location: (1,10)-(1,11)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── rest: - │ │ │ @ RestParameterNode (location: (1,13)-(1,15)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :d - │ │ │ ├── name_loc: (1,14)-(1,15) = "d" - │ │ │ └── operator_loc: (1,13)-(1,14) = "*" - │ │ ├── posts: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (1,17)-(1,18)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :e - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: - │ │ @ BlockParameterNode (location: (1,20)-(1,22)) - │ │ ├── flags: ∅ - │ │ ├── name: :f - │ │ ├── name_loc: (1,21)-(1,22) = "f" - │ │ └── operator_loc: (1,20)-(1,21) = "&" - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,4)-(1,5) = "|" - │ └── closing_loc: (1,22)-(1,23) = "|" - ├── body: ∅ - ├── opening_loc: (1,2)-(1,3) = "{" - └── closing_loc: (1,24)-(1,25) = "}" diff --git a/test/prism/snapshots/seattlerb/block_arg_optional.txt b/test/prism/snapshots/seattlerb/block_arg_optional.txt deleted file mode 100644 index 5fecfc31ab31a4..00000000000000 --- a/test/prism/snapshots/seattlerb/block_arg_optional.txt +++ /dev/null @@ -1,48 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,13)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,13)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,13)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :a - ├── message_loc: (1,0)-(1,1) = "a" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,2)-(1,13)) - ├── flags: ∅ - ├── locals: [:b] - ├── parameters: - │ @ BlockParametersNode (location: (1,4)-(1,11)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,5)-(1,10)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 1) - │ │ │ └── @ OptionalParameterNode (location: (1,5)-(1,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :b - │ │ │ ├── name_loc: (1,5)-(1,6) = "b" - │ │ │ ├── operator_loc: (1,7)-(1,8) = "=" - │ │ │ └── value: - │ │ │ @ IntegerNode (location: (1,9)-(1,10)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,4)-(1,5) = "|" - │ └── closing_loc: (1,10)-(1,11) = "|" - ├── body: ∅ - ├── opening_loc: (1,2)-(1,3) = "{" - └── closing_loc: (1,12)-(1,13) = "}" diff --git a/test/prism/snapshots/seattlerb/block_arg_scope.txt b/test/prism/snapshots/seattlerb/block_arg_scope.txt deleted file mode 100644 index e90d6445b2db06..00000000000000 --- a/test/prism/snapshots/seattlerb/block_arg_scope.txt +++ /dev/null @@ -1,45 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,12)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,12)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,12)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :a - ├── message_loc: (1,0)-(1,1) = "a" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,2)-(1,12)) - ├── flags: ∅ - ├── locals: [:b, :c] - ├── parameters: - │ @ BlockParametersNode (location: (1,4)-(1,10)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,5)-(1,6)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (1,5)-(1,6)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :b - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 1) - │ │ └── @ BlockLocalVariableNode (location: (1,8)-(1,9)) - │ │ ├── flags: ∅ - │ │ └── name: :c - │ ├── opening_loc: (1,4)-(1,5) = "|" - │ └── closing_loc: (1,9)-(1,10) = "|" - ├── body: ∅ - ├── opening_loc: (1,2)-(1,3) = "{" - └── closing_loc: (1,11)-(1,12) = "}" diff --git a/test/prism/snapshots/seattlerb/block_arg_scope2.txt b/test/prism/snapshots/seattlerb/block_arg_scope2.txt deleted file mode 100644 index c9f7242d8a77e8..00000000000000 --- a/test/prism/snapshots/seattlerb/block_arg_scope2.txt +++ /dev/null @@ -1,48 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,14)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,14)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,14)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :a - ├── message_loc: (1,0)-(1,1) = "a" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,2)-(1,14)) - ├── flags: ∅ - ├── locals: [:b, :c, :d] - ├── parameters: - │ @ BlockParametersNode (location: (1,3)-(1,12)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,4)-(1,5)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (1,4)-(1,5)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :b - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 2) - │ │ ├── @ BlockLocalVariableNode (location: (1,7)-(1,8)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :c - │ │ └── @ BlockLocalVariableNode (location: (1,10)-(1,11)) - │ │ ├── flags: ∅ - │ │ └── name: :d - │ ├── opening_loc: (1,3)-(1,4) = "|" - │ └── closing_loc: (1,11)-(1,12) = "|" - ├── body: ∅ - ├── opening_loc: (1,2)-(1,3) = "{" - └── closing_loc: (1,13)-(1,14) = "}" diff --git a/test/prism/snapshots/seattlerb/block_arg_splat_arg.txt b/test/prism/snapshots/seattlerb/block_arg_splat_arg.txt deleted file mode 100644 index 6ae1b1dade72d4..00000000000000 --- a/test/prism/snapshots/seattlerb/block_arg_splat_arg.txt +++ /dev/null @@ -1,50 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,16)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,16)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,16)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :a - ├── message_loc: (1,0)-(1,1) = "a" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,2)-(1,16)) - ├── flags: ∅ - ├── locals: [:b, :c, :d] - ├── parameters: - │ @ BlockParametersNode (location: (1,4)-(1,14)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,5)-(1,13)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (1,5)-(1,6)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :b - │ │ ├── optionals: (length: 0) - │ │ ├── rest: - │ │ │ @ RestParameterNode (location: (1,8)-(1,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :c - │ │ │ ├── name_loc: (1,9)-(1,10) = "c" - │ │ │ └── operator_loc: (1,8)-(1,9) = "*" - │ │ ├── posts: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (1,12)-(1,13)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :d - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,4)-(1,5) = "|" - │ └── closing_loc: (1,13)-(1,14) = "|" - ├── body: ∅ - ├── opening_loc: (1,2)-(1,3) = "{" - └── closing_loc: (1,15)-(1,16) = "}" diff --git a/test/prism/snapshots/seattlerb/block_args_kwargs.txt b/test/prism/snapshots/seattlerb/block_args_kwargs.txt deleted file mode 100644 index 45876c6dc129c9..00000000000000 --- a/test/prism/snapshots/seattlerb/block_args_kwargs.txt +++ /dev/null @@ -1,51 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,23)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,23)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,23)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :f - ├── message_loc: (1,0)-(1,1) = "f" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,2)-(1,23)) - ├── flags: ∅ - ├── locals: [:kwargs] - ├── parameters: - │ @ BlockParametersNode (location: (1,4)-(1,14)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,5)-(1,13)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: - │ │ │ @ KeywordRestParameterNode (location: (1,5)-(1,13)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :kwargs - │ │ │ ├── name_loc: (1,7)-(1,13) = "kwargs" - │ │ │ └── operator_loc: (1,5)-(1,7) = "**" - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,4)-(1,5) = "|" - │ └── closing_loc: (1,13)-(1,14) = "|" - ├── body: - │ @ StatementsNode (location: (1,15)-(1,21)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ LocalVariableReadNode (location: (1,15)-(1,21)) - │ ├── flags: newline - │ ├── name: :kwargs - │ └── depth: 0 - ├── opening_loc: (1,2)-(1,3) = "{" - └── closing_loc: (1,22)-(1,23) = "}" diff --git a/test/prism/snapshots/seattlerb/block_args_no_kwargs.txt b/test/prism/snapshots/seattlerb/block_args_no_kwargs.txt deleted file mode 100644 index 298bc26ce0ac30..00000000000000 --- a/test/prism/snapshots/seattlerb/block_args_no_kwargs.txt +++ /dev/null @@ -1,43 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,13)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,13)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,13)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :f - ├── message_loc: (1,0)-(1,1) = "f" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,2)-(1,13)) - ├── flags: ∅ - ├── locals: [] - ├── parameters: - │ @ BlockParametersNode (location: (1,4)-(1,11)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,5)-(1,10)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: - │ │ │ @ NoKeywordsParameterNode (location: (1,5)-(1,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (1,5)-(1,7) = "**" - │ │ │ └── keyword_loc: (1,7)-(1,10) = "nil" - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,4)-(1,5) = "|" - │ └── closing_loc: (1,10)-(1,11) = "|" - ├── body: ∅ - ├── opening_loc: (1,2)-(1,3) = "{" - └── closing_loc: (1,12)-(1,13) = "}" diff --git a/test/prism/snapshots/seattlerb/block_args_opt1.txt b/test/prism/snapshots/seattlerb/block_args_opt1.txt deleted file mode 100644 index d23bd5edce02c3..00000000000000 --- a/test/prism/snapshots/seattlerb/block_args_opt1.txt +++ /dev/null @@ -1,67 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,24)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,24)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,24)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :f - ├── message_loc: (1,0)-(1,1) = "f" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,2)-(1,24)) - ├── flags: ∅ - ├── locals: [:a, :b] - ├── parameters: - │ @ BlockParametersNode (location: (1,4)-(1,15)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,5)-(1,14)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (1,5)-(1,6)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :a - │ │ ├── optionals: (length: 1) - │ │ │ └── @ OptionalParameterNode (location: (1,8)-(1,14)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :b - │ │ │ ├── name_loc: (1,8)-(1,9) = "b" - │ │ │ ├── operator_loc: (1,10)-(1,11) = "=" - │ │ │ └── value: - │ │ │ @ IntegerNode (location: (1,12)-(1,14)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 42 - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,4)-(1,5) = "|" - │ └── closing_loc: (1,14)-(1,15) = "|" - ├── body: - │ @ StatementsNode (location: (1,16)-(1,22)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ ArrayNode (location: (1,16)-(1,22)) - │ ├── flags: newline - │ ├── elements: (length: 2) - │ │ ├── @ LocalVariableReadNode (location: (1,17)-(1,18)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :a - │ │ │ └── depth: 0 - │ │ └── @ LocalVariableReadNode (location: (1,20)-(1,21)) - │ │ ├── flags: ∅ - │ │ ├── name: :b - │ │ └── depth: 0 - │ ├── opening_loc: (1,16)-(1,17) = "[" - │ └── closing_loc: (1,21)-(1,22) = "]" - ├── opening_loc: (1,2)-(1,3) = "{" - └── closing_loc: (1,23)-(1,24) = "}" diff --git a/test/prism/snapshots/seattlerb/block_args_opt2.txt b/test/prism/snapshots/seattlerb/block_args_opt2.txt deleted file mode 100644 index 7170768b1cb943..00000000000000 --- a/test/prism/snapshots/seattlerb/block_args_opt2.txt +++ /dev/null @@ -1,57 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,18)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,18)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,18)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :a - ├── message_loc: (1,0)-(1,1) = "a" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,2)-(1,18)) - ├── flags: ∅ - ├── locals: [:b, :c] - ├── parameters: - │ @ BlockParametersNode (location: (1,4)-(1,16)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,6)-(1,14)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 2) - │ │ │ ├── @ OptionalParameterNode (location: (1,6)-(1,9)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :b - │ │ │ │ ├── name_loc: (1,6)-(1,7) = "b" - │ │ │ │ ├── operator_loc: (1,7)-(1,8) = "=" - │ │ │ │ └── value: - │ │ │ │ @ IntegerNode (location: (1,8)-(1,9)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ └── @ OptionalParameterNode (location: (1,11)-(1,14)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :c - │ │ │ ├── name_loc: (1,11)-(1,12) = "c" - │ │ │ ├── operator_loc: (1,12)-(1,13) = "=" - │ │ │ └── value: - │ │ │ @ IntegerNode (location: (1,13)-(1,14)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,4)-(1,5) = "|" - │ └── closing_loc: (1,15)-(1,16) = "|" - ├── body: ∅ - ├── opening_loc: (1,2)-(1,3) = "{" - └── closing_loc: (1,17)-(1,18) = "}" diff --git a/test/prism/snapshots/seattlerb/block_args_opt2_2.txt b/test/prism/snapshots/seattlerb/block_args_opt2_2.txt deleted file mode 100644 index 34d04dbe54b4a0..00000000000000 --- a/test/prism/snapshots/seattlerb/block_args_opt2_2.txt +++ /dev/null @@ -1,80 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,35)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,35)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,35)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :f - ├── message_loc: (1,0)-(1,1) = "f" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,2)-(1,35)) - ├── flags: ∅ - ├── locals: [:a, :b, :c] - ├── parameters: - │ @ BlockParametersNode (location: (1,4)-(1,23)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,5)-(1,22)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (1,5)-(1,6)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :a - │ │ ├── optionals: (length: 2) - │ │ │ ├── @ OptionalParameterNode (location: (1,8)-(1,14)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :b - │ │ │ │ ├── name_loc: (1,8)-(1,9) = "b" - │ │ │ │ ├── operator_loc: (1,10)-(1,11) = "=" - │ │ │ │ └── value: - │ │ │ │ @ IntegerNode (location: (1,12)-(1,14)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 42 - │ │ │ └── @ OptionalParameterNode (location: (1,16)-(1,22)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :c - │ │ │ ├── name_loc: (1,16)-(1,17) = "c" - │ │ │ ├── operator_loc: (1,18)-(1,19) = "=" - │ │ │ └── value: - │ │ │ @ IntegerNode (location: (1,20)-(1,22)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 24 - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,4)-(1,5) = "|" - │ └── closing_loc: (1,22)-(1,23) = "|" - ├── body: - │ @ StatementsNode (location: (1,24)-(1,33)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ ArrayNode (location: (1,24)-(1,33)) - │ ├── flags: newline - │ ├── elements: (length: 3) - │ │ ├── @ LocalVariableReadNode (location: (1,25)-(1,26)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :a - │ │ │ └── depth: 0 - │ │ ├── @ LocalVariableReadNode (location: (1,28)-(1,29)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :b - │ │ │ └── depth: 0 - │ │ └── @ LocalVariableReadNode (location: (1,31)-(1,32)) - │ │ ├── flags: ∅ - │ │ ├── name: :c - │ │ └── depth: 0 - │ ├── opening_loc: (1,24)-(1,25) = "[" - │ └── closing_loc: (1,32)-(1,33) = "]" - ├── opening_loc: (1,2)-(1,3) = "{" - └── closing_loc: (1,34)-(1,35) = "}" diff --git a/test/prism/snapshots/seattlerb/block_args_opt3.txt b/test/prism/snapshots/seattlerb/block_args_opt3.txt deleted file mode 100644 index 508d062ce2e354..00000000000000 --- a/test/prism/snapshots/seattlerb/block_args_opt3.txt +++ /dev/null @@ -1,89 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,42)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,42)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,42)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :f - ├── message_loc: (1,0)-(1,1) = "f" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,2)-(1,42)) - ├── flags: ∅ - ├── locals: [:a, :b, :c, :d] - ├── parameters: - │ @ BlockParametersNode (location: (1,4)-(1,27)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,5)-(1,26)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (1,5)-(1,6)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :a - │ │ ├── optionals: (length: 2) - │ │ │ ├── @ OptionalParameterNode (location: (1,8)-(1,14)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :b - │ │ │ │ ├── name_loc: (1,8)-(1,9) = "b" - │ │ │ │ ├── operator_loc: (1,10)-(1,11) = "=" - │ │ │ │ └── value: - │ │ │ │ @ IntegerNode (location: (1,12)-(1,14)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 42 - │ │ │ └── @ OptionalParameterNode (location: (1,16)-(1,22)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :c - │ │ │ ├── name_loc: (1,16)-(1,17) = "c" - │ │ │ ├── operator_loc: (1,18)-(1,19) = "=" - │ │ │ └── value: - │ │ │ @ IntegerNode (location: (1,20)-(1,22)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 24 - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: - │ │ @ BlockParameterNode (location: (1,24)-(1,26)) - │ │ ├── flags: ∅ - │ │ ├── name: :d - │ │ ├── name_loc: (1,25)-(1,26) = "d" - │ │ └── operator_loc: (1,24)-(1,25) = "&" - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,4)-(1,5) = "|" - │ └── closing_loc: (1,26)-(1,27) = "|" - ├── body: - │ @ StatementsNode (location: (1,28)-(1,40)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ ArrayNode (location: (1,28)-(1,40)) - │ ├── flags: newline - │ ├── elements: (length: 4) - │ │ ├── @ LocalVariableReadNode (location: (1,29)-(1,30)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :a - │ │ │ └── depth: 0 - │ │ ├── @ LocalVariableReadNode (location: (1,32)-(1,33)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :b - │ │ │ └── depth: 0 - │ │ ├── @ LocalVariableReadNode (location: (1,35)-(1,36)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :c - │ │ │ └── depth: 0 - │ │ └── @ LocalVariableReadNode (location: (1,38)-(1,39)) - │ │ ├── flags: ∅ - │ │ ├── name: :d - │ │ └── depth: 0 - │ ├── opening_loc: (1,28)-(1,29) = "[" - │ └── closing_loc: (1,39)-(1,40) = "]" - ├── opening_loc: (1,2)-(1,3) = "{" - └── closing_loc: (1,41)-(1,42) = "}" diff --git a/test/prism/snapshots/seattlerb/block_call_defn_call_block_call.txt b/test/prism/snapshots/seattlerb/block_call_defn_call_block_call.txt deleted file mode 100644 index 4e6ad90afd1257..00000000000000 --- a/test/prism/snapshots/seattlerb/block_call_defn_call_block_call.txt +++ /dev/null @@ -1,86 +0,0 @@ -@ ProgramNode (location: (1,0)-(4,11)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(4,11)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ CallNode (location: (1,0)-(3,4)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (1,0)-(1,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,2)-(3,4)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ DefNode (location: (1,2)-(3,4)) - │ │ ├── flags: ∅ - │ │ ├── name: :b - │ │ ├── name_loc: (1,6)-(1,7) = "b" - │ │ ├── receiver: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (1,8)-(1,9)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (1,8)-(1,9)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :c - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (2,1)-(2,2)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (2,1)-(2,2)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :d - │ │ │ ├── message_loc: (2,1)-(2,2) = "d" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: [:c] - │ │ ├── def_keyword_loc: (1,2)-(1,5) = "def" - │ │ ├── operator_loc: ∅ - │ │ ├── lparen_loc: (1,7)-(1,8) = "(" - │ │ ├── rparen_loc: (1,9)-(1,10) = ")" - │ │ ├── equal_loc: ∅ - │ │ └── end_keyword_loc: (3,1)-(3,4) = "end" - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── @ CallNode (location: (4,1)-(4,11)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (4,1)-(4,2)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :e - │ ├── message_loc: (4,1)-(4,2) = "e" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: (4,2)-(4,3) = "." - ├── name: :f - ├── message_loc: (4,3)-(4,4) = "f" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (4,5)-(4,11)) - ├── flags: ∅ - ├── locals: [] - ├── parameters: ∅ - ├── body: ∅ - ├── opening_loc: (4,5)-(4,7) = "do" - └── closing_loc: (4,8)-(4,11) = "end" diff --git a/test/prism/snapshots/seattlerb/block_call_dot_op2_brace_block.txt b/test/prism/snapshots/seattlerb/block_call_dot_op2_brace_block.txt deleted file mode 100644 index 5f05b1f6ff4015..00000000000000 --- a/test/prism/snapshots/seattlerb/block_call_dot_op2_brace_block.txt +++ /dev/null @@ -1,108 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,31)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,31)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,31)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (1,0)-(1,16)) - │ ├── flags: ∅ - │ ├── receiver: - │ │ @ CallNode (location: (1,0)-(1,1)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (1,0)-(1,1) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (1,1)-(1,2) = "." - │ ├── name: :b - │ ├── message_loc: (1,2)-(1,3) = "b" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,4)-(1,7)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (1,4)-(1,7)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :c - │ │ ├── message_loc: (1,4)-(1,5) = "c" - │ │ ├── opening_loc: (1,5)-(1,6) = "(" - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: (1,6)-(1,7) = ")" - │ │ └── block: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (1,8)-(1,16)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (1,11)-(1,12)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (1,11)-(1,12)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :d - │ │ ├── message_loc: (1,11)-(1,12) = "d" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── opening_loc: (1,8)-(1,10) = "do" - │ └── closing_loc: (1,13)-(1,16) = "end" - ├── call_operator_loc: (1,16)-(1,17) = "." - ├── name: :e - ├── message_loc: (1,17)-(1,18) = "e" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,19)-(1,31)) - ├── flags: ∅ - ├── locals: [:f] - ├── parameters: - │ @ BlockParametersNode (location: (1,22)-(1,25)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,23)-(1,24)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (1,23)-(1,24)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :f - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,22)-(1,23) = "|" - │ └── closing_loc: (1,24)-(1,25) = "|" - ├── body: - │ @ StatementsNode (location: (1,26)-(1,27)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,26)-(1,27)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :g - │ ├── message_loc: (1,26)-(1,27) = "g" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── opening_loc: (1,19)-(1,21) = "do" - └── closing_loc: (1,28)-(1,31) = "end" diff --git a/test/prism/snapshots/seattlerb/block_call_dot_op2_cmd_args_do_block.txt b/test/prism/snapshots/seattlerb/block_call_dot_op2_cmd_args_do_block.txt deleted file mode 100644 index ca141580b7d8fb..00000000000000 --- a/test/prism/snapshots/seattlerb/block_call_dot_op2_cmd_args_do_block.txt +++ /dev/null @@ -1,121 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,33)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,33)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,33)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (1,0)-(1,16)) - │ ├── flags: ∅ - │ ├── receiver: - │ │ @ CallNode (location: (1,0)-(1,1)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (1,0)-(1,1) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (1,1)-(1,2) = "." - │ ├── name: :b - │ ├── message_loc: (1,2)-(1,3) = "b" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,4)-(1,7)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (1,4)-(1,7)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :c - │ │ ├── message_loc: (1,4)-(1,5) = "c" - │ │ ├── opening_loc: (1,5)-(1,6) = "(" - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: (1,6)-(1,7) = ")" - │ │ └── block: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (1,8)-(1,16)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (1,11)-(1,12)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (1,11)-(1,12)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :d - │ │ ├── message_loc: (1,11)-(1,12) = "d" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── opening_loc: (1,8)-(1,10) = "do" - │ └── closing_loc: (1,13)-(1,16) = "end" - ├── call_operator_loc: (1,16)-(1,17) = "." - ├── name: :e - ├── message_loc: (1,17)-(1,18) = "e" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,19)-(1,20)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ CallNode (location: (1,19)-(1,20)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :f - │ ├── message_loc: (1,19)-(1,20) = "f" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,21)-(1,33)) - ├── flags: ∅ - ├── locals: [:g] - ├── parameters: - │ @ BlockParametersNode (location: (1,24)-(1,27)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,25)-(1,26)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (1,25)-(1,26)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :g - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,24)-(1,25) = "|" - │ └── closing_loc: (1,26)-(1,27) = "|" - ├── body: - │ @ StatementsNode (location: (1,28)-(1,29)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,28)-(1,29)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :h - │ ├── message_loc: (1,28)-(1,29) = "h" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── opening_loc: (1,21)-(1,23) = "do" - └── closing_loc: (1,30)-(1,33) = "end" diff --git a/test/prism/snapshots/seattlerb/block_call_operation_colon.txt b/test/prism/snapshots/seattlerb/block_call_operation_colon.txt deleted file mode 100644 index cecd421263869f..00000000000000 --- a/test/prism/snapshots/seattlerb/block_call_operation_colon.txt +++ /dev/null @@ -1,57 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,15)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,15)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,15)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (1,0)-(1,12)) - │ ├── flags: ∅ - │ ├── receiver: - │ │ @ CallNode (location: (1,0)-(1,1)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (1,0)-(1,1) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (1,1)-(1,2) = "." - │ ├── name: :b - │ ├── message_loc: (1,2)-(1,3) = "b" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,4)-(1,5)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (1,4)-(1,5)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :c - │ │ ├── message_loc: (1,4)-(1,5) = "c" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (1,6)-(1,12)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (1,6)-(1,8) = "do" - │ └── closing_loc: (1,9)-(1,12) = "end" - ├── call_operator_loc: (1,12)-(1,14) = "::" - ├── name: :d - ├── message_loc: (1,14)-(1,15) = "d" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/block_call_operation_dot.txt b/test/prism/snapshots/seattlerb/block_call_operation_dot.txt deleted file mode 100644 index 5c661fb49a9a57..00000000000000 --- a/test/prism/snapshots/seattlerb/block_call_operation_dot.txt +++ /dev/null @@ -1,57 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,14)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,14)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,14)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (1,0)-(1,12)) - │ ├── flags: ∅ - │ ├── receiver: - │ │ @ CallNode (location: (1,0)-(1,1)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (1,0)-(1,1) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (1,1)-(1,2) = "." - │ ├── name: :b - │ ├── message_loc: (1,2)-(1,3) = "b" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,4)-(1,5)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (1,4)-(1,5)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :c - │ │ ├── message_loc: (1,4)-(1,5) = "c" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (1,6)-(1,12)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (1,6)-(1,8) = "do" - │ └── closing_loc: (1,9)-(1,12) = "end" - ├── call_operator_loc: (1,12)-(1,13) = "." - ├── name: :d - ├── message_loc: (1,13)-(1,14) = "d" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/block_call_paren_call_block_call.txt b/test/prism/snapshots/seattlerb/block_call_paren_call_block_call.txt deleted file mode 100644 index 93c4b05f9bcddb..00000000000000 --- a/test/prism/snapshots/seattlerb/block_call_paren_call_block_call.txt +++ /dev/null @@ -1,65 +0,0 @@ -@ ProgramNode (location: (1,0)-(2,10)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(2,10)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ CallNode (location: (1,0)-(1,5)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (1,0)-(1,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,2)-(1,5)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ ParenthesesNode (location: (1,2)-(1,5)) - │ │ ├── flags: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (1,3)-(1,4)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (1,3)-(1,4)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (1,3)-(1,4) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── opening_loc: (1,2)-(1,3) = "(" - │ │ └── closing_loc: (1,4)-(1,5) = ")" - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── @ CallNode (location: (2,0)-(2,10)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (2,0)-(2,1)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :c - │ ├── message_loc: (2,0)-(2,1) = "c" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: (2,1)-(2,2) = "." - ├── name: :d - ├── message_loc: (2,2)-(2,3) = "d" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (2,4)-(2,10)) - ├── flags: ∅ - ├── locals: [] - ├── parameters: ∅ - ├── body: ∅ - ├── opening_loc: (2,4)-(2,6) = "do" - └── closing_loc: (2,7)-(2,10) = "end" diff --git a/test/prism/snapshots/seattlerb/block_command_operation_colon.txt b/test/prism/snapshots/seattlerb/block_command_operation_colon.txt deleted file mode 100644 index c71fbe2f4a0a58..00000000000000 --- a/test/prism/snapshots/seattlerb/block_command_operation_colon.txt +++ /dev/null @@ -1,52 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,17)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,17)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,17)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (1,0)-(1,11)) - │ ├── flags: ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (1,0)-(1,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,2)-(1,4)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ SymbolNode (location: (1,2)-(1,4)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (1,2)-(1,3) = ":" - │ │ ├── value_loc: (1,3)-(1,4) = "b" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "b" - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (1,5)-(1,11)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (1,5)-(1,7) = "do" - │ └── closing_loc: (1,8)-(1,11) = "end" - ├── call_operator_loc: (1,11)-(1,13) = "::" - ├── name: :c - ├── message_loc: (1,13)-(1,14) = "c" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,15)-(1,17)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ SymbolNode (location: (1,15)-(1,17)) - │ ├── flags: static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (1,15)-(1,16) = ":" - │ ├── value_loc: (1,16)-(1,17) = "d" - │ ├── closing_loc: ∅ - │ └── unescaped: "d" - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/block_command_operation_dot.txt b/test/prism/snapshots/seattlerb/block_command_operation_dot.txt deleted file mode 100644 index 68d98c99b46e2c..00000000000000 --- a/test/prism/snapshots/seattlerb/block_command_operation_dot.txt +++ /dev/null @@ -1,52 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,16)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,16)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,16)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (1,0)-(1,11)) - │ ├── flags: ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (1,0)-(1,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,2)-(1,4)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ SymbolNode (location: (1,2)-(1,4)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (1,2)-(1,3) = ":" - │ │ ├── value_loc: (1,3)-(1,4) = "b" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "b" - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (1,5)-(1,11)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (1,5)-(1,7) = "do" - │ └── closing_loc: (1,8)-(1,11) = "end" - ├── call_operator_loc: (1,11)-(1,12) = "." - ├── name: :c - ├── message_loc: (1,12)-(1,13) = "c" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,14)-(1,16)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ SymbolNode (location: (1,14)-(1,16)) - │ ├── flags: static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (1,14)-(1,15) = ":" - │ ├── value_loc: (1,15)-(1,16) = "d" - │ ├── closing_loc: ∅ - │ └── unescaped: "d" - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/block_decomp_anon_splat_arg.txt b/test/prism/snapshots/seattlerb/block_decomp_anon_splat_arg.txt deleted file mode 100644 index 5628cacc97867d..00000000000000 --- a/test/prism/snapshots/seattlerb/block_decomp_anon_splat_arg.txt +++ /dev/null @@ -1,53 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,14)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,14)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,14)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :f - ├── message_loc: (1,0)-(1,1) = "f" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,2)-(1,14)) - ├── flags: ∅ - ├── locals: [:a] - ├── parameters: - │ @ BlockParametersNode (location: (1,4)-(1,12)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,5)-(1,11)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ MultiTargetNode (location: (1,5)-(1,11)) - │ │ │ ├── flags: ∅ - │ │ │ ├── lefts: (length: 0) - │ │ │ ├── rest: - │ │ │ │ @ SplatNode (location: (1,6)-(1,7)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── operator_loc: (1,6)-(1,7) = "*" - │ │ │ │ └── expression: ∅ - │ │ │ ├── rights: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (1,9)-(1,10)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :a - │ │ │ ├── lparen_loc: (1,5)-(1,6) = "(" - │ │ │ └── rparen_loc: (1,10)-(1,11) = ")" - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,4)-(1,5) = "|" - │ └── closing_loc: (1,11)-(1,12) = "|" - ├── body: ∅ - ├── opening_loc: (1,2)-(1,3) = "{" - └── closing_loc: (1,13)-(1,14) = "}" diff --git a/test/prism/snapshots/seattlerb/block_decomp_arg_splat.txt b/test/prism/snapshots/seattlerb/block_decomp_arg_splat.txt deleted file mode 100644 index b13e13d167ef8e..00000000000000 --- a/test/prism/snapshots/seattlerb/block_decomp_arg_splat.txt +++ /dev/null @@ -1,53 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,14)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,14)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,14)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :a - ├── message_loc: (1,0)-(1,1) = "a" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,2)-(1,14)) - ├── flags: ∅ - ├── locals: [:b] - ├── parameters: - │ @ BlockParametersNode (location: (1,4)-(1,12)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,5)-(1,11)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ MultiTargetNode (location: (1,5)-(1,11)) - │ │ │ ├── flags: ∅ - │ │ │ ├── lefts: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (1,6)-(1,7)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :b - │ │ │ ├── rest: - │ │ │ │ @ SplatNode (location: (1,9)-(1,10)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── operator_loc: (1,9)-(1,10) = "*" - │ │ │ │ └── expression: ∅ - │ │ │ ├── rights: (length: 0) - │ │ │ ├── lparen_loc: (1,5)-(1,6) = "(" - │ │ │ └── rparen_loc: (1,10)-(1,11) = ")" - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,4)-(1,5) = "|" - │ └── closing_loc: (1,11)-(1,12) = "|" - ├── body: ∅ - ├── opening_loc: (1,2)-(1,3) = "{" - └── closing_loc: (1,13)-(1,14) = "}" diff --git a/test/prism/snapshots/seattlerb/block_decomp_arg_splat_arg.txt b/test/prism/snapshots/seattlerb/block_decomp_arg_splat_arg.txt deleted file mode 100644 index ba0a6202cedc07..00000000000000 --- a/test/prism/snapshots/seattlerb/block_decomp_arg_splat_arg.txt +++ /dev/null @@ -1,59 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,18)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,18)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,18)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :f - ├── message_loc: (1,0)-(1,1) = "f" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,2)-(1,18)) - ├── flags: ∅ - ├── locals: [:a, :b, :c] - ├── parameters: - │ @ BlockParametersNode (location: (1,4)-(1,16)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,5)-(1,15)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ MultiTargetNode (location: (1,5)-(1,15)) - │ │ │ ├── flags: ∅ - │ │ │ ├── lefts: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (1,6)-(1,7)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :a - │ │ │ ├── rest: - │ │ │ │ @ SplatNode (location: (1,9)-(1,11)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── operator_loc: (1,9)-(1,10) = "*" - │ │ │ │ └── expression: - │ │ │ │ @ RequiredParameterNode (location: (1,10)-(1,11)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :b - │ │ │ ├── rights: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (1,13)-(1,14)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :c - │ │ │ ├── lparen_loc: (1,5)-(1,6) = "(" - │ │ │ └── rparen_loc: (1,14)-(1,15) = ")" - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,4)-(1,5) = "|" - │ └── closing_loc: (1,15)-(1,16) = "|" - ├── body: ∅ - ├── opening_loc: (1,2)-(1,3) = "{" - └── closing_loc: (1,17)-(1,18) = "}" diff --git a/test/prism/snapshots/seattlerb/block_decomp_splat.txt b/test/prism/snapshots/seattlerb/block_decomp_splat.txt deleted file mode 100644 index fd8ad4bda1fa46..00000000000000 --- a/test/prism/snapshots/seattlerb/block_decomp_splat.txt +++ /dev/null @@ -1,53 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,12)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,12)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,12)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :f - ├── message_loc: (1,0)-(1,1) = "f" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,2)-(1,12)) - ├── flags: ∅ - ├── locals: [:a] - ├── parameters: - │ @ BlockParametersNode (location: (1,4)-(1,10)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,5)-(1,9)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ MultiTargetNode (location: (1,5)-(1,9)) - │ │ │ ├── flags: ∅ - │ │ │ ├── lefts: (length: 0) - │ │ │ ├── rest: - │ │ │ │ @ SplatNode (location: (1,6)-(1,8)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── operator_loc: (1,6)-(1,7) = "*" - │ │ │ │ └── expression: - │ │ │ │ @ RequiredParameterNode (location: (1,7)-(1,8)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :a - │ │ │ ├── rights: (length: 0) - │ │ │ ├── lparen_loc: (1,5)-(1,6) = "(" - │ │ │ └── rparen_loc: (1,8)-(1,9) = ")" - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,4)-(1,5) = "|" - │ └── closing_loc: (1,9)-(1,10) = "|" - ├── body: ∅ - ├── opening_loc: (1,2)-(1,3) = "{" - └── closing_loc: (1,11)-(1,12) = "}" diff --git a/test/prism/snapshots/seattlerb/block_kw.txt b/test/prism/snapshots/seattlerb/block_kw.txt deleted file mode 100644 index d76998ecb6636a..00000000000000 --- a/test/prism/snapshots/seattlerb/block_kw.txt +++ /dev/null @@ -1,47 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,15)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,15)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,15)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :blah - ├── message_loc: (1,0)-(1,4) = "blah" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,5)-(1,15)) - ├── flags: ∅ - ├── locals: [:k] - ├── parameters: - │ @ BlockParametersNode (location: (1,7)-(1,13)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,8)-(1,12)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 1) - │ │ │ └── @ OptionalKeywordParameterNode (location: (1,8)-(1,12)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :k - │ │ │ ├── name_loc: (1,8)-(1,10) = "k:" - │ │ │ └── value: - │ │ │ @ IntegerNode (location: (1,10)-(1,12)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 42 - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,7)-(1,8) = "|" - │ └── closing_loc: (1,12)-(1,13) = "|" - ├── body: ∅ - ├── opening_loc: (1,5)-(1,6) = "{" - └── closing_loc: (1,14)-(1,15) = "}" diff --git a/test/prism/snapshots/seattlerb/block_kw__required.txt b/test/prism/snapshots/seattlerb/block_kw__required.txt deleted file mode 100644 index f04987d854fd10..00000000000000 --- a/test/prism/snapshots/seattlerb/block_kw__required.txt +++ /dev/null @@ -1,43 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,16)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,16)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,16)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :blah - ├── message_loc: (1,0)-(1,4) = "blah" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,5)-(1,16)) - ├── flags: ∅ - ├── locals: [:k] - ├── parameters: - │ @ BlockParametersNode (location: (1,8)-(1,12)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,9)-(1,11)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 1) - │ │ │ └── @ RequiredKeywordParameterNode (location: (1,9)-(1,11)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :k - │ │ │ └── name_loc: (1,9)-(1,11) = "k:" - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,8)-(1,9) = "|" - │ └── closing_loc: (1,11)-(1,12) = "|" - ├── body: ∅ - ├── opening_loc: (1,5)-(1,7) = "do" - └── closing_loc: (1,13)-(1,16) = "end" diff --git a/test/prism/snapshots/seattlerb/block_kwarg_lvar.txt b/test/prism/snapshots/seattlerb/block_kwarg_lvar.txt deleted file mode 100644 index 861348f2a2a4a7..00000000000000 --- a/test/prism/snapshots/seattlerb/block_kwarg_lvar.txt +++ /dev/null @@ -1,57 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,20)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,20)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,20)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :bl - ├── message_loc: (1,0)-(1,2) = "bl" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,3)-(1,20)) - ├── flags: ∅ - ├── locals: [:kw] - ├── parameters: - │ @ BlockParametersNode (location: (1,5)-(1,15)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,6)-(1,14)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 1) - │ │ │ └── @ OptionalKeywordParameterNode (location: (1,6)-(1,14)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :kw - │ │ │ ├── name_loc: (1,6)-(1,9) = "kw:" - │ │ │ └── value: - │ │ │ @ SymbolNode (location: (1,10)-(1,14)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (1,10)-(1,11) = ":" - │ │ │ ├── value_loc: (1,11)-(1,14) = "val" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "val" - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,5)-(1,6) = "|" - │ └── closing_loc: (1,14)-(1,15) = "|" - ├── body: - │ @ StatementsNode (location: (1,16)-(1,18)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ LocalVariableReadNode (location: (1,16)-(1,18)) - │ ├── flags: newline - │ ├── name: :kw - │ └── depth: 0 - ├── opening_loc: (1,3)-(1,4) = "{" - └── closing_loc: (1,19)-(1,20) = "}" diff --git a/test/prism/snapshots/seattlerb/block_kwarg_lvar_multiple.txt b/test/prism/snapshots/seattlerb/block_kwarg_lvar_multiple.txt deleted file mode 100644 index f1c1fef8a38c48..00000000000000 --- a/test/prism/snapshots/seattlerb/block_kwarg_lvar_multiple.txt +++ /dev/null @@ -1,68 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,33)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,33)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,33)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :bl - ├── message_loc: (1,0)-(1,2) = "bl" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,3)-(1,33)) - ├── flags: ∅ - ├── locals: [:kw, :kw2] - ├── parameters: - │ @ BlockParametersNode (location: (1,5)-(1,28)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,6)-(1,26)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 2) - │ │ │ ├── @ OptionalKeywordParameterNode (location: (1,6)-(1,14)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :kw - │ │ │ │ ├── name_loc: (1,6)-(1,9) = "kw:" - │ │ │ │ └── value: - │ │ │ │ @ SymbolNode (location: (1,10)-(1,14)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: (1,10)-(1,11) = ":" - │ │ │ │ ├── value_loc: (1,11)-(1,14) = "val" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "val" - │ │ │ └── @ OptionalKeywordParameterNode (location: (1,16)-(1,26)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :kw2 - │ │ │ ├── name_loc: (1,16)-(1,20) = "kw2:" - │ │ │ └── value: - │ │ │ @ SymbolNode (location: (1,21)-(1,26)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (1,21)-(1,22) = ":" - │ │ │ ├── value_loc: (1,22)-(1,26) = "val2" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "val2" - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,5)-(1,6) = "|" - │ └── closing_loc: (1,27)-(1,28) = "|" - ├── body: - │ @ StatementsNode (location: (1,29)-(1,31)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ LocalVariableReadNode (location: (1,29)-(1,31)) - │ ├── flags: newline - │ ├── name: :kw - │ └── depth: 0 - ├── opening_loc: (1,3)-(1,4) = "{" - └── closing_loc: (1,32)-(1,33) = "}" diff --git a/test/prism/snapshots/seattlerb/block_opt_arg.txt b/test/prism/snapshots/seattlerb/block_opt_arg.txt deleted file mode 100644 index 39be11ac92d193..00000000000000 --- a/test/prism/snapshots/seattlerb/block_opt_arg.txt +++ /dev/null @@ -1,51 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,14)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,14)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,14)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :a - ├── message_loc: (1,0)-(1,1) = "a" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,2)-(1,14)) - ├── flags: ∅ - ├── locals: [:b, :c] - ├── parameters: - │ @ BlockParametersNode (location: (1,4)-(1,12)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,5)-(1,11)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 1) - │ │ │ └── @ OptionalParameterNode (location: (1,5)-(1,8)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :b - │ │ │ ├── name_loc: (1,5)-(1,6) = "b" - │ │ │ ├── operator_loc: (1,6)-(1,7) = "=" - │ │ │ └── value: - │ │ │ @ IntegerNode (location: (1,7)-(1,8)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (1,10)-(1,11)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :c - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,4)-(1,5) = "|" - │ └── closing_loc: (1,11)-(1,12) = "|" - ├── body: ∅ - ├── opening_loc: (1,2)-(1,3) = "{" - └── closing_loc: (1,13)-(1,14) = "}" diff --git a/test/prism/snapshots/seattlerb/block_opt_splat.txt b/test/prism/snapshots/seattlerb/block_opt_splat.txt deleted file mode 100644 index 3898212dc00f64..00000000000000 --- a/test/prism/snapshots/seattlerb/block_opt_splat.txt +++ /dev/null @@ -1,53 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,17)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,17)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,17)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :a - ├── message_loc: (1,0)-(1,1) = "a" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,2)-(1,17)) - ├── flags: ∅ - ├── locals: [:b, :c] - ├── parameters: - │ @ BlockParametersNode (location: (1,4)-(1,15)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,5)-(1,14)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 1) - │ │ │ └── @ OptionalParameterNode (location: (1,5)-(1,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :b - │ │ │ ├── name_loc: (1,5)-(1,6) = "b" - │ │ │ ├── operator_loc: (1,7)-(1,8) = "=" - │ │ │ └── value: - │ │ │ @ IntegerNode (location: (1,9)-(1,10)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── rest: - │ │ │ @ RestParameterNode (location: (1,12)-(1,14)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :c - │ │ │ ├── name_loc: (1,13)-(1,14) = "c" - │ │ │ └── operator_loc: (1,12)-(1,13) = "*" - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,4)-(1,5) = "|" - │ └── closing_loc: (1,14)-(1,15) = "|" - ├── body: ∅ - ├── opening_loc: (1,2)-(1,3) = "{" - └── closing_loc: (1,16)-(1,17) = "}" diff --git a/test/prism/snapshots/seattlerb/block_opt_splat_arg_block_omfg.txt b/test/prism/snapshots/seattlerb/block_opt_splat_arg_block_omfg.txt deleted file mode 100644 index ed4857ad25a939..00000000000000 --- a/test/prism/snapshots/seattlerb/block_opt_splat_arg_block_omfg.txt +++ /dev/null @@ -1,61 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,22)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,22)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,22)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :a - ├── message_loc: (1,0)-(1,1) = "a" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,2)-(1,22)) - ├── flags: ∅ - ├── locals: [:b, :c, :d, :e] - ├── parameters: - │ @ BlockParametersNode (location: (1,4)-(1,20)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,5)-(1,19)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 1) - │ │ │ └── @ OptionalParameterNode (location: (1,5)-(1,8)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :b - │ │ │ ├── name_loc: (1,5)-(1,6) = "b" - │ │ │ ├── operator_loc: (1,6)-(1,7) = "=" - │ │ │ └── value: - │ │ │ @ IntegerNode (location: (1,7)-(1,8)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── rest: - │ │ │ @ RestParameterNode (location: (1,10)-(1,12)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :c - │ │ │ ├── name_loc: (1,11)-(1,12) = "c" - │ │ │ └── operator_loc: (1,10)-(1,11) = "*" - │ │ ├── posts: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (1,14)-(1,15)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :d - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: - │ │ @ BlockParameterNode (location: (1,17)-(1,19)) - │ │ ├── flags: ∅ - │ │ ├── name: :e - │ │ ├── name_loc: (1,18)-(1,19) = "e" - │ │ └── operator_loc: (1,17)-(1,18) = "&" - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,4)-(1,5) = "|" - │ └── closing_loc: (1,19)-(1,20) = "|" - ├── body: ∅ - ├── opening_loc: (1,2)-(1,3) = "{" - └── closing_loc: (1,21)-(1,22) = "}" diff --git a/test/prism/snapshots/seattlerb/block_optarg.txt b/test/prism/snapshots/seattlerb/block_optarg.txt deleted file mode 100644 index 2172571eb12da5..00000000000000 --- a/test/prism/snapshots/seattlerb/block_optarg.txt +++ /dev/null @@ -1,51 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,14)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,14)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,14)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :a - ├── message_loc: (1,0)-(1,1) = "a" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,2)-(1,14)) - ├── flags: ∅ - ├── locals: [:b] - ├── parameters: - │ @ BlockParametersNode (location: (1,4)-(1,12)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,5)-(1,11)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 1) - │ │ │ └── @ OptionalParameterNode (location: (1,5)-(1,11)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :b - │ │ │ ├── name_loc: (1,5)-(1,6) = "b" - │ │ │ ├── operator_loc: (1,7)-(1,8) = "=" - │ │ │ └── value: - │ │ │ @ SymbolNode (location: (1,9)-(1,11)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (1,9)-(1,10) = ":" - │ │ │ ├── value_loc: (1,10)-(1,11) = "c" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "c" - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,4)-(1,5) = "|" - │ └── closing_loc: (1,11)-(1,12) = "|" - ├── body: ∅ - ├── opening_loc: (1,2)-(1,3) = "{" - └── closing_loc: (1,13)-(1,14) = "}" diff --git a/test/prism/snapshots/seattlerb/block_paren_splat.txt b/test/prism/snapshots/seattlerb/block_paren_splat.txt deleted file mode 100644 index b6c2da679bb072..00000000000000 --- a/test/prism/snapshots/seattlerb/block_paren_splat.txt +++ /dev/null @@ -1,56 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,15)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,15)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,15)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :a - ├── message_loc: (1,0)-(1,1) = "a" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,2)-(1,15)) - ├── flags: ∅ - ├── locals: [:b, :c] - ├── parameters: - │ @ BlockParametersNode (location: (1,4)-(1,13)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,5)-(1,12)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ MultiTargetNode (location: (1,5)-(1,12)) - │ │ │ ├── flags: ∅ - │ │ │ ├── lefts: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (1,6)-(1,7)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :b - │ │ │ ├── rest: - │ │ │ │ @ SplatNode (location: (1,9)-(1,11)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── operator_loc: (1,9)-(1,10) = "*" - │ │ │ │ └── expression: - │ │ │ │ @ RequiredParameterNode (location: (1,10)-(1,11)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :c - │ │ │ ├── rights: (length: 0) - │ │ │ ├── lparen_loc: (1,5)-(1,6) = "(" - │ │ │ └── rparen_loc: (1,11)-(1,12) = ")" - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,4)-(1,5) = "|" - │ └── closing_loc: (1,12)-(1,13) = "|" - ├── body: ∅ - ├── opening_loc: (1,2)-(1,3) = "{" - └── closing_loc: (1,14)-(1,15) = "}" diff --git a/test/prism/snapshots/seattlerb/block_reg_optarg.txt b/test/prism/snapshots/seattlerb/block_reg_optarg.txt deleted file mode 100644 index 0173b92e8f08f6..00000000000000 --- a/test/prism/snapshots/seattlerb/block_reg_optarg.txt +++ /dev/null @@ -1,54 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,17)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,17)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,17)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :a - ├── message_loc: (1,0)-(1,1) = "a" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,2)-(1,17)) - ├── flags: ∅ - ├── locals: [:b, :c] - ├── parameters: - │ @ BlockParametersNode (location: (1,4)-(1,15)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,5)-(1,14)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (1,5)-(1,6)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :b - │ │ ├── optionals: (length: 1) - │ │ │ └── @ OptionalParameterNode (location: (1,8)-(1,14)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :c - │ │ │ ├── name_loc: (1,8)-(1,9) = "c" - │ │ │ ├── operator_loc: (1,10)-(1,11) = "=" - │ │ │ └── value: - │ │ │ @ SymbolNode (location: (1,12)-(1,14)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (1,12)-(1,13) = ":" - │ │ │ ├── value_loc: (1,13)-(1,14) = "d" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "d" - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,4)-(1,5) = "|" - │ └── closing_loc: (1,14)-(1,15) = "|" - ├── body: ∅ - ├── opening_loc: (1,2)-(1,3) = "{" - └── closing_loc: (1,16)-(1,17) = "}" diff --git a/test/prism/snapshots/seattlerb/block_return.txt b/test/prism/snapshots/seattlerb/block_return.txt deleted file mode 100644 index 0eee33c844e2b3..00000000000000 --- a/test/prism/snapshots/seattlerb/block_return.txt +++ /dev/null @@ -1,62 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,27)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,27)) - ├── flags: ∅ - └── body: (length: 1) - └── @ ReturnNode (location: (1,0)-(1,27)) - ├── flags: newline - ├── keyword_loc: (1,0)-(1,6) = "return" - └── arguments: - @ ArgumentsNode (location: (1,7)-(1,27)) - ├── flags: ∅ - └── arguments: (length: 1) - └── @ CallNode (location: (1,7)-(1,27)) - ├── flags: ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :foo - ├── message_loc: (1,7)-(1,10) = "foo" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,11)-(1,14)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ CallNode (location: (1,11)-(1,14)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :arg - │ ├── message_loc: (1,11)-(1,14) = "arg" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,15)-(1,27)) - ├── flags: ∅ - ├── locals: [:bar] - ├── parameters: - │ @ BlockParametersNode (location: (1,18)-(1,23)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,19)-(1,22)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (1,19)-(1,22)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :bar - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,18)-(1,19) = "|" - │ └── closing_loc: (1,22)-(1,23) = "|" - ├── body: ∅ - ├── opening_loc: (1,15)-(1,17) = "do" - └── closing_loc: (1,24)-(1,27) = "end" diff --git a/test/prism/snapshots/seattlerb/block_scope.txt b/test/prism/snapshots/seattlerb/block_scope.txt deleted file mode 100644 index ef659bb38ebe4f..00000000000000 --- a/test/prism/snapshots/seattlerb/block_scope.txt +++ /dev/null @@ -1,33 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,10)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,10)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,10)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :a - ├── message_loc: (1,0)-(1,1) = "a" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,2)-(1,10)) - ├── flags: ∅ - ├── locals: [:b] - ├── parameters: - │ @ BlockParametersNode (location: (1,4)-(1,8)) - │ ├── flags: ∅ - │ ├── parameters: ∅ - │ ├── locals: (length: 1) - │ │ └── @ BlockLocalVariableNode (location: (1,6)-(1,7)) - │ │ ├── flags: ∅ - │ │ └── name: :b - │ ├── opening_loc: (1,4)-(1,5) = "|" - │ └── closing_loc: (1,7)-(1,8) = "|" - ├── body: ∅ - ├── opening_loc: (1,2)-(1,3) = "{" - └── closing_loc: (1,9)-(1,10) = "}" diff --git a/test/prism/snapshots/seattlerb/block_splat_reg.txt b/test/prism/snapshots/seattlerb/block_splat_reg.txt deleted file mode 100644 index b5eb009c52dc89..00000000000000 --- a/test/prism/snapshots/seattlerb/block_splat_reg.txt +++ /dev/null @@ -1,47 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,13)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,13)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,13)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :a - ├── message_loc: (1,0)-(1,1) = "a" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,2)-(1,13)) - ├── flags: ∅ - ├── locals: [:b, :c] - ├── parameters: - │ @ BlockParametersNode (location: (1,4)-(1,11)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,5)-(1,10)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: - │ │ │ @ RestParameterNode (location: (1,5)-(1,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :b - │ │ │ ├── name_loc: (1,6)-(1,7) = "b" - │ │ │ └── operator_loc: (1,5)-(1,6) = "*" - │ │ ├── posts: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (1,9)-(1,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :c - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,4)-(1,5) = "|" - │ └── closing_loc: (1,10)-(1,11) = "|" - ├── body: ∅ - ├── opening_loc: (1,2)-(1,3) = "{" - └── closing_loc: (1,12)-(1,13) = "}" diff --git a/test/prism/snapshots/seattlerb/bug169.txt b/test/prism/snapshots/seattlerb/bug169.txt deleted file mode 100644 index c55df4257ded69..00000000000000 --- a/test/prism/snapshots/seattlerb/bug169.txt +++ /dev/null @@ -1,32 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,7)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,7)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,7)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :m - ├── message_loc: (1,0)-(1,1) = "m" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,2)-(1,4)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ ParenthesesNode (location: (1,2)-(1,4)) - │ ├── flags: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (1,2)-(1,3) = "(" - │ └── closing_loc: (1,3)-(1,4) = ")" - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,5)-(1,7)) - ├── flags: ∅ - ├── locals: [] - ├── parameters: ∅ - ├── body: ∅ - ├── opening_loc: (1,5)-(1,6) = "{" - └── closing_loc: (1,6)-(1,7) = "}" diff --git a/test/prism/snapshots/seattlerb/bug179.txt b/test/prism/snapshots/seattlerb/bug179.txt deleted file mode 100644 index 4392d5ec27c6cb..00000000000000 --- a/test/prism/snapshots/seattlerb/bug179.txt +++ /dev/null @@ -1,32 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,9)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,9)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,9)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :p - ├── message_loc: (1,0)-(1,1) = "p" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,2)-(1,9)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ RangeNode (location: (1,2)-(1,9)) - │ ├── flags: ∅ - │ ├── left: - │ │ @ ParenthesesNode (location: (1,2)-(1,4)) - │ │ ├── flags: ∅ - │ │ ├── body: ∅ - │ │ ├── opening_loc: (1,2)-(1,3) = "(" - │ │ └── closing_loc: (1,3)-(1,4) = ")" - │ ├── right: - │ │ @ NilNode (location: (1,6)-(1,9)) - │ │ └── flags: static_literal - │ └── operator_loc: (1,4)-(1,6) = ".." - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/bug190.txt b/test/prism/snapshots/seattlerb/bug190.txt deleted file mode 100644 index 004ca16a60c502..00000000000000 --- a/test/prism/snapshots/seattlerb/bug190.txt +++ /dev/null @@ -1,13 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,6)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,6)) - ├── flags: ∅ - └── body: (length: 1) - └── @ RegularExpressionNode (location: (1,0)-(1,6)) - ├── flags: newline, static_literal, forced_us_ascii_encoding - ├── opening_loc: (1,0)-(1,3) = "%r'" - ├── content_loc: (1,3)-(1,5) = "\\'" - ├── closing_loc: (1,5)-(1,6) = "'" - └── unescaped: "'" diff --git a/test/prism/snapshots/seattlerb/bug191.txt b/test/prism/snapshots/seattlerb/bug191.txt deleted file mode 100644 index 27b7f97f45007d..00000000000000 --- a/test/prism/snapshots/seattlerb/bug191.txt +++ /dev/null @@ -1,97 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,9)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,9)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ IfNode (location: (1,0)-(1,9)) - │ ├── flags: newline - │ ├── if_keyword_loc: ∅ - │ ├── predicate: - │ │ @ CallNode (location: (1,0)-(1,1)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (1,0)-(1,1) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── then_keyword_loc: (1,2)-(1,3) = "?" - │ ├── statements: - │ │ @ StatementsNode (location: (1,4)-(1,6)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ StringNode (location: (1,4)-(1,6)) - │ │ ├── flags: newline - │ │ ├── opening_loc: (1,4)-(1,5) = "\"" - │ │ ├── content_loc: (1,5)-(1,5) = "" - │ │ ├── closing_loc: (1,5)-(1,6) = "\"" - │ │ └── unescaped: "" - │ ├── subsequent: - │ │ @ ElseNode (location: (1,6)-(1,9)) - │ │ ├── flags: ∅ - │ │ ├── else_keyword_loc: (1,6)-(1,7) = ":" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (1,8)-(1,9)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (1,8)-(1,9)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (1,8)-(1,9) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── end_keyword_loc: ∅ - │ └── end_keyword_loc: ∅ - └── @ IfNode (location: (3,0)-(3,9)) - ├── flags: newline - ├── if_keyword_loc: ∅ - ├── predicate: - │ @ CallNode (location: (3,0)-(3,1)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (3,0)-(3,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── then_keyword_loc: (3,2)-(3,3) = "?" - ├── statements: - │ @ StatementsNode (location: (3,4)-(3,6)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ StringNode (location: (3,4)-(3,6)) - │ ├── flags: newline - │ ├── opening_loc: (3,4)-(3,5) = "'" - │ ├── content_loc: (3,5)-(3,5) = "" - │ ├── closing_loc: (3,5)-(3,6) = "'" - │ └── unescaped: "" - ├── subsequent: - │ @ ElseNode (location: (3,6)-(3,9)) - │ ├── flags: ∅ - │ ├── else_keyword_loc: (3,6)-(3,7) = ":" - │ ├── statements: - │ │ @ StatementsNode (location: (3,8)-(3,9)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (3,8)-(3,9)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :b - │ │ ├── message_loc: (3,8)-(3,9) = "b" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── end_keyword_loc: ∅ - └── end_keyword_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/bug202.txt b/test/prism/snapshots/seattlerb/bug202.txt deleted file mode 100644 index f907081c208a28..00000000000000 --- a/test/prism/snapshots/seattlerb/bug202.txt +++ /dev/null @@ -1,26 +0,0 @@ -@ ProgramNode (location: (1,0)-(2,10)) -├── flags: ∅ -├── locals: [:测试] -└── statements: - @ StatementsNode (location: (1,0)-(2,10)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ GlobalVariableWriteNode (location: (1,0)-(1,11)) - │ ├── flags: newline - │ ├── name: :$测试 - │ ├── name_loc: (1,0)-(1,7) = "$测试" - │ ├── value: - │ │ @ IntegerNode (location: (1,10)-(1,11)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ └── operator_loc: (1,8)-(1,9) = "=" - └── @ LocalVariableWriteNode (location: (2,0)-(2,10)) - ├── flags: newline - ├── name: :测试 - ├── depth: 0 - ├── name_loc: (2,0)-(2,6) = "测试" - ├── value: - │ @ IntegerNode (location: (2,9)-(2,10)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - └── operator_loc: (2,7)-(2,8) = "=" diff --git a/test/prism/snapshots/seattlerb/bug236.txt b/test/prism/snapshots/seattlerb/bug236.txt deleted file mode 100644 index 792020dc78b52f..00000000000000 --- a/test/prism/snapshots/seattlerb/bug236.txt +++ /dev/null @@ -1,79 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,6)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,6)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ CallNode (location: (1,0)-(1,7)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :x - │ ├── message_loc: (1,0)-(1,1) = "x" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (1,1)-(1,7)) - │ ├── flags: ∅ - │ ├── locals: [:a] - │ ├── parameters: - │ │ @ BlockParametersNode (location: (1,2)-(1,6)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (1,3)-(1,5)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (1,3)-(1,4)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :a - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: - │ │ │ │ @ ImplicitRestNode (location: (1,4)-(1,5)) - │ │ │ │ └── flags: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: (1,2)-(1,3) = "|" - │ │ └── closing_loc: (1,5)-(1,6) = "|" - │ ├── body: ∅ - │ ├── opening_loc: (1,1)-(1,2) = "{" - │ └── closing_loc: (1,6)-(1,7) = "}" - └── @ CallNode (location: (3,0)-(3,6)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :x - ├── message_loc: (3,0)-(3,1) = "x" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (3,1)-(3,6)) - ├── flags: ∅ - ├── locals: [:a] - ├── parameters: - │ @ BlockParametersNode (location: (3,2)-(3,5)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (3,3)-(3,4)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (3,3)-(3,4)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :a - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (3,2)-(3,3) = "|" - │ └── closing_loc: (3,4)-(3,5) = "|" - ├── body: ∅ - ├── opening_loc: (3,1)-(3,2) = "{" - └── closing_loc: (3,5)-(3,6) = "}" diff --git a/test/prism/snapshots/seattlerb/bug290.txt b/test/prism/snapshots/seattlerb/bug290.txt deleted file mode 100644 index 85d75c0d16132f..00000000000000 --- a/test/prism/snapshots/seattlerb/bug290.txt +++ /dev/null @@ -1,28 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ BeginNode (location: (1,0)-(3,3)) - ├── flags: newline - ├── begin_keyword_loc: (1,0)-(1,5) = "begin" - ├── statements: - │ @ StatementsNode (location: (2,2)-(2,5)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (2,2)-(2,5)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (2,2)-(2,5) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── rescue_clause: ∅ - ├── else_clause: ∅ - ├── ensure_clause: ∅ - └── end_keyword_loc: (3,0)-(3,3) = "end" diff --git a/test/prism/snapshots/seattlerb/bug_187.txt b/test/prism/snapshots/seattlerb/bug_187.txt deleted file mode 100644 index 6a5786e34ab08b..00000000000000 --- a/test/prism/snapshots/seattlerb/bug_187.txt +++ /dev/null @@ -1,64 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(3,3)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :private - ├── message_loc: (1,0)-(1,7) = "private" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,8)-(3,3)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ DefNode (location: (1,8)-(3,3)) - │ ├── flags: ∅ - │ ├── name: :f - │ ├── name_loc: (1,12)-(1,13) = "f" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (2,0)-(2,10)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (2,0)-(2,10)) - │ │ ├── flags: newline - │ │ ├── receiver: - │ │ │ @ CallNode (location: (2,0)-(2,1)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :a - │ │ │ ├── message_loc: (2,0)-(2,1) = "a" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: (2,1)-(2,2) = "." - │ │ ├── name: :b - │ │ ├── message_loc: (2,2)-(2,3) = "b" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: - │ │ @ BlockNode (location: (2,4)-(2,10)) - │ │ ├── flags: ∅ - │ │ ├── locals: [] - │ │ ├── parameters: ∅ - │ │ ├── body: ∅ - │ │ ├── opening_loc: (2,4)-(2,6) = "do" - │ │ └── closing_loc: (2,7)-(2,10) = "end" - │ ├── locals: [] - │ ├── def_keyword_loc: (1,8)-(1,11) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (3,0)-(3,3) = "end" - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/bug_215.txt b/test/prism/snapshots/seattlerb/bug_215.txt deleted file mode 100644 index ee82b4f1da9982..00000000000000 --- a/test/prism/snapshots/seattlerb/bug_215.txt +++ /dev/null @@ -1,17 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,13)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,13)) - ├── flags: ∅ - └── body: (length: 1) - └── @ UndefNode (location: (1,0)-(1,13)) - ├── flags: newline - ├── names: (length: 1) - │ └── @ SymbolNode (location: (1,6)-(1,13)) - │ ├── flags: static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (1,6)-(1,9) = "%s(" - │ ├── value_loc: (1,9)-(1,12) = "foo" - │ ├── closing_loc: (1,12)-(1,13) = ")" - │ └── unescaped: "foo" - └── keyword_loc: (1,0)-(1,5) = "undef" diff --git a/test/prism/snapshots/seattlerb/bug_249.txt b/test/prism/snapshots/seattlerb/bug_249.txt deleted file mode 100644 index 06daa80e41d8f0..00000000000000 --- a/test/prism/snapshots/seattlerb/bug_249.txt +++ /dev/null @@ -1,95 +0,0 @@ -@ ProgramNode (location: (1,0)-(4,28)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(4,28)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(4,28)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :mount - ├── message_loc: (1,0)-(1,5) = "mount" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,6)-(4,28)) - │ ├── flags: contains_keywords - │ └── arguments: (length: 2) - │ ├── @ CallNode (location: (1,6)-(4,9)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ ParenthesesNode (location: (1,6)-(4,5)) - │ │ │ ├── flags: ∅ - │ │ │ ├── body: - │ │ │ │ @ StatementsNode (location: (1,7)-(4,4)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (1,7)-(4,4)) - │ │ │ │ ├── flags: newline - │ │ │ │ ├── receiver: - │ │ │ │ │ @ ConstantReadNode (location: (1,7)-(1,12)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── name: :Class - │ │ │ │ ├── call_operator_loc: (1,12)-(1,13) = "." - │ │ │ │ ├── name: :new - │ │ │ │ ├── message_loc: (1,13)-(1,16) = "new" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: - │ │ │ │ @ BlockNode (location: (1,17)-(4,4)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── locals: [] - │ │ │ │ ├── parameters: ∅ - │ │ │ │ ├── body: - │ │ │ │ │ @ StatementsNode (location: (2,0)-(3,3)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── body: (length: 1) - │ │ │ │ │ └── @ DefNode (location: (2,0)-(3,3)) - │ │ │ │ │ ├── flags: newline - │ │ │ │ │ ├── name: :initialize - │ │ │ │ │ ├── name_loc: (2,4)-(2,14) = "initialize" - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── parameters: ∅ - │ │ │ │ │ ├── body: ∅ - │ │ │ │ │ ├── locals: [] - │ │ │ │ │ ├── def_keyword_loc: (2,0)-(2,3) = "def" - │ │ │ │ │ ├── operator_loc: ∅ - │ │ │ │ │ ├── lparen_loc: ∅ - │ │ │ │ │ ├── rparen_loc: ∅ - │ │ │ │ │ ├── equal_loc: ∅ - │ │ │ │ │ └── end_keyword_loc: (3,0)-(3,3) = "end" - │ │ │ │ ├── opening_loc: (1,17)-(1,19) = "do" - │ │ │ │ └── closing_loc: (4,1)-(4,4) = "end" - │ │ │ ├── opening_loc: (1,6)-(1,7) = "(" - │ │ │ └── closing_loc: (4,4)-(4,5) = ")" - │ │ ├── call_operator_loc: (4,5)-(4,6) = "." - │ │ ├── name: :new - │ │ ├── message_loc: (4,6)-(4,9) = "new" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── @ KeywordHashNode (location: (4,11)-(4,28)) - │ ├── flags: symbol_keys - │ └── elements: (length: 1) - │ └── @ AssocNode (location: (4,11)-(4,28)) - │ ├── flags: ∅ - │ ├── key: - │ │ @ SymbolNode (location: (4,11)-(4,14)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (4,11)-(4,12) = ":" - │ │ ├── value_loc: (4,12)-(4,14) = "at" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "at" - │ ├── value: - │ │ @ StringNode (location: (4,18)-(4,28)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (4,18)-(4,19) = "'" - │ │ ├── content_loc: (4,19)-(4,27) = "endpoint" - │ │ ├── closing_loc: (4,27)-(4,28) = "'" - │ │ └── unescaped: "endpoint" - │ └── operator_loc: (4,15)-(4,17) = "=>" - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/bug_and.txt b/test/prism/snapshots/seattlerb/bug_and.txt deleted file mode 100644 index 89eb403b4a8061..00000000000000 --- a/test/prism/snapshots/seattlerb/bug_and.txt +++ /dev/null @@ -1,28 +0,0 @@ -@ ProgramNode (location: (1,0)-(4,11)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(4,11)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ AndNode (location: (1,0)-(2,4)) - │ ├── flags: newline - │ ├── left: - │ │ @ TrueNode (location: (1,0)-(1,4)) - │ │ └── flags: static_literal - │ ├── right: - │ │ @ TrueNode (location: (2,0)-(2,4)) - │ │ └── flags: static_literal - │ └── operator_loc: (1,5)-(1,8) = "and" - └── @ AndNode (location: (4,0)-(4,11)) - ├── flags: newline - ├── left: - │ @ TrueNode (location: (4,0)-(4,4)) - │ └── flags: static_literal - ├── right: - │ @ ArrayNode (location: (4,9)-(4,11)) - │ ├── flags: static_literal - │ ├── elements: (length: 0) - │ ├── opening_loc: (4,9)-(4,10) = "[" - │ └── closing_loc: (4,10)-(4,11) = "]" - └── operator_loc: (4,5)-(4,8) = "and" diff --git a/test/prism/snapshots/seattlerb/bug_args__19.txt b/test/prism/snapshots/seattlerb/bug_args__19.txt deleted file mode 100644 index 5b1d897718a323..00000000000000 --- a/test/prism/snapshots/seattlerb/bug_args__19.txt +++ /dev/null @@ -1,65 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,16)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,16)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,16)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :f - ├── message_loc: (1,0)-(1,1) = "f" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,2)-(1,16)) - ├── flags: ∅ - ├── locals: [:a, :b] - ├── parameters: - │ @ BlockParametersNode (location: (1,4)-(1,12)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,5)-(1,11)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ MultiTargetNode (location: (1,5)-(1,11)) - │ │ │ ├── flags: ∅ - │ │ │ ├── lefts: (length: 2) - │ │ │ │ ├── @ RequiredParameterNode (location: (1,6)-(1,7)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── name: :a - │ │ │ │ └── @ RequiredParameterNode (location: (1,9)-(1,10)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :b - │ │ │ ├── rest: ∅ - │ │ │ ├── rights: (length: 0) - │ │ │ ├── lparen_loc: (1,5)-(1,6) = "(" - │ │ │ └── rparen_loc: (1,10)-(1,11) = ")" - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,4)-(1,5) = "|" - │ └── closing_loc: (1,11)-(1,12) = "|" - ├── body: - │ @ StatementsNode (location: (1,13)-(1,14)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,13)-(1,14)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :d - │ ├── message_loc: (1,13)-(1,14) = "d" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── opening_loc: (1,2)-(1,3) = "{" - └── closing_loc: (1,15)-(1,16) = "}" diff --git a/test/prism/snapshots/seattlerb/bug_args_masgn.txt b/test/prism/snapshots/seattlerb/bug_args_masgn.txt deleted file mode 100644 index 6456d82ecc3130..00000000000000 --- a/test/prism/snapshots/seattlerb/bug_args_masgn.txt +++ /dev/null @@ -1,55 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,17)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,17)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,17)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :f - ├── message_loc: (1,0)-(1,1) = "f" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,2)-(1,17)) - ├── flags: ∅ - ├── locals: [:a, :b, :c] - ├── parameters: - │ @ BlockParametersNode (location: (1,4)-(1,15)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,5)-(1,14)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 2) - │ │ │ ├── @ MultiTargetNode (location: (1,5)-(1,11)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── lefts: (length: 2) - │ │ │ │ │ ├── @ RequiredParameterNode (location: (1,6)-(1,7)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ └── name: :a - │ │ │ │ │ └── @ RequiredParameterNode (location: (1,9)-(1,10)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── name: :b - │ │ │ │ ├── rest: ∅ - │ │ │ │ ├── rights: (length: 0) - │ │ │ │ ├── lparen_loc: (1,5)-(1,6) = "(" - │ │ │ │ └── rparen_loc: (1,10)-(1,11) = ")" - │ │ │ └── @ RequiredParameterNode (location: (1,13)-(1,14)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :c - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,4)-(1,5) = "|" - │ └── closing_loc: (1,14)-(1,15) = "|" - ├── body: ∅ - ├── opening_loc: (1,2)-(1,3) = "{" - └── closing_loc: (1,16)-(1,17) = "}" diff --git a/test/prism/snapshots/seattlerb/bug_args_masgn2.txt b/test/prism/snapshots/seattlerb/bug_args_masgn2.txt deleted file mode 100644 index bd9fc6116115d0..00000000000000 --- a/test/prism/snapshots/seattlerb/bug_args_masgn2.txt +++ /dev/null @@ -1,65 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,22)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,22)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,22)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :f - ├── message_loc: (1,0)-(1,1) = "f" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,2)-(1,22)) - ├── flags: ∅ - ├── locals: [:a, :b, :c, :d] - ├── parameters: - │ @ BlockParametersNode (location: (1,4)-(1,20)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,5)-(1,19)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 2) - │ │ │ ├── @ MultiTargetNode (location: (1,5)-(1,16)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── lefts: (length: 2) - │ │ │ │ │ ├── @ MultiTargetNode (location: (1,6)-(1,12)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ ├── lefts: (length: 2) - │ │ │ │ │ │ │ ├── @ RequiredParameterNode (location: (1,7)-(1,8)) - │ │ │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ │ │ └── name: :a - │ │ │ │ │ │ │ └── @ RequiredParameterNode (location: (1,10)-(1,11)) - │ │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ │ └── name: :b - │ │ │ │ │ │ ├── rest: ∅ - │ │ │ │ │ │ ├── rights: (length: 0) - │ │ │ │ │ │ ├── lparen_loc: (1,6)-(1,7) = "(" - │ │ │ │ │ │ └── rparen_loc: (1,11)-(1,12) = ")" - │ │ │ │ │ └── @ RequiredParameterNode (location: (1,14)-(1,15)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── name: :c - │ │ │ │ ├── rest: ∅ - │ │ │ │ ├── rights: (length: 0) - │ │ │ │ ├── lparen_loc: (1,5)-(1,6) = "(" - │ │ │ │ └── rparen_loc: (1,15)-(1,16) = ")" - │ │ │ └── @ RequiredParameterNode (location: (1,18)-(1,19)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :d - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,4)-(1,5) = "|" - │ └── closing_loc: (1,19)-(1,20) = "|" - ├── body: ∅ - ├── opening_loc: (1,2)-(1,3) = "{" - └── closing_loc: (1,21)-(1,22) = "}" diff --git a/test/prism/snapshots/seattlerb/bug_args_masgn_outer_parens__19.txt b/test/prism/snapshots/seattlerb/bug_args_masgn_outer_parens__19.txt deleted file mode 100644 index ad62bd4daa50db..00000000000000 --- a/test/prism/snapshots/seattlerb/bug_args_masgn_outer_parens__19.txt +++ /dev/null @@ -1,62 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,19)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,19)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,19)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :f - ├── message_loc: (1,0)-(1,1) = "f" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,2)-(1,19)) - ├── flags: ∅ - ├── locals: [:k, :v, :i] - ├── parameters: - │ @ BlockParametersNode (location: (1,4)-(1,17)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,5)-(1,16)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ MultiTargetNode (location: (1,5)-(1,16)) - │ │ │ ├── flags: ∅ - │ │ │ ├── lefts: (length: 2) - │ │ │ │ ├── @ MultiTargetNode (location: (1,6)-(1,12)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── lefts: (length: 2) - │ │ │ │ │ │ ├── @ RequiredParameterNode (location: (1,7)-(1,8)) - │ │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ │ └── name: :k - │ │ │ │ │ │ └── @ RequiredParameterNode (location: (1,10)-(1,11)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ └── name: :v - │ │ │ │ │ ├── rest: ∅ - │ │ │ │ │ ├── rights: (length: 0) - │ │ │ │ │ ├── lparen_loc: (1,6)-(1,7) = "(" - │ │ │ │ │ └── rparen_loc: (1,11)-(1,12) = ")" - │ │ │ │ └── @ RequiredParameterNode (location: (1,14)-(1,15)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :i - │ │ │ ├── rest: ∅ - │ │ │ ├── rights: (length: 0) - │ │ │ ├── lparen_loc: (1,5)-(1,6) = "(" - │ │ │ └── rparen_loc: (1,15)-(1,16) = ")" - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,4)-(1,5) = "|" - │ └── closing_loc: (1,16)-(1,17) = "|" - ├── body: ∅ - ├── opening_loc: (1,2)-(1,3) = "{" - └── closing_loc: (1,18)-(1,19) = "}" diff --git a/test/prism/snapshots/seattlerb/bug_call_arglist_parens.txt b/test/prism/snapshots/seattlerb/bug_call_arglist_parens.txt deleted file mode 100644 index 6954854baeba87..00000000000000 --- a/test/prism/snapshots/seattlerb/bug_call_arglist_parens.txt +++ /dev/null @@ -1,122 +0,0 @@ -@ ProgramNode (location: (1,6)-(11,9)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,6)-(11,9)) - ├── flags: ∅ - └── body: (length: 3) - ├── @ DefNode (location: (1,6)-(3,9)) - │ ├── flags: newline - │ ├── name: :f - │ ├── name_loc: (1,10)-(1,11) = "f" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (2,8)-(2,17)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (2,8)-(2,17)) - │ │ ├── flags: newline, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :g - │ │ ├── message_loc: (2,8)-(2,9) = "g" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (2,10)-(2,17)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 2) - │ │ │ ├── @ ParenthesesNode (location: (2,10)-(2,14)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── body: - │ │ │ │ │ @ StatementsNode (location: (2,12)-(2,13)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── body: (length: 1) - │ │ │ │ │ └── @ IntegerNode (location: (2,12)-(2,13)) - │ │ │ │ │ ├── flags: newline, static_literal, decimal - │ │ │ │ │ └── value: 1 - │ │ │ │ ├── opening_loc: (2,10)-(2,11) = "(" - │ │ │ │ └── closing_loc: (2,13)-(2,14) = ")" - │ │ │ └── @ IntegerNode (location: (2,16)-(2,17)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (1,6)-(1,9) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (3,6)-(3,9) = "end" - ├── @ DefNode (location: (6,6)-(8,9)) - │ ├── flags: newline - │ ├── name: :f - │ ├── name_loc: (6,10)-(6,11) = "f" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (7,8)-(7,16)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (7,8)-(7,16)) - │ │ ├── flags: newline, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :g - │ │ ├── message_loc: (7,8)-(7,9) = "g" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (7,10)-(7,16)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 2) - │ │ │ ├── @ ParenthesesNode (location: (7,10)-(7,13)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── body: - │ │ │ │ │ @ StatementsNode (location: (7,11)-(7,12)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── body: (length: 1) - │ │ │ │ │ └── @ IntegerNode (location: (7,11)-(7,12)) - │ │ │ │ │ ├── flags: newline, static_literal, decimal - │ │ │ │ │ └── value: 1 - │ │ │ │ ├── opening_loc: (7,10)-(7,11) = "(" - │ │ │ │ └── closing_loc: (7,12)-(7,13) = ")" - │ │ │ └── @ IntegerNode (location: (7,15)-(7,16)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (6,6)-(6,9) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (6,11)-(6,12) = "(" - │ ├── rparen_loc: (6,12)-(6,13) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (8,6)-(8,9) = "end" - └── @ CallNode (location: (11,0)-(11,9)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :g - ├── message_loc: (11,0)-(11,1) = "g" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (11,2)-(11,9)) - │ ├── flags: ∅ - │ └── arguments: (length: 2) - │ ├── @ ParenthesesNode (location: (11,2)-(11,6)) - │ │ ├── flags: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (11,4)-(11,5)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ IntegerNode (location: (11,4)-(11,5)) - │ │ │ ├── flags: newline, static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── opening_loc: (11,2)-(11,3) = "(" - │ │ └── closing_loc: (11,5)-(11,6) = ")" - │ └── @ IntegerNode (location: (11,8)-(11,9)) - │ ├── flags: static_literal, decimal - │ └── value: 2 - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/bug_case_when_regexp.txt b/test/prism/snapshots/seattlerb/bug_case_when_regexp.txt deleted file mode 100644 index e24a170ad4f80a..00000000000000 --- a/test/prism/snapshots/seattlerb/bug_case_when_regexp.txt +++ /dev/null @@ -1,32 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,26)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,26)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CaseNode (location: (1,0)-(1,26)) - ├── flags: newline - ├── predicate: - │ @ SymbolNode (location: (1,5)-(1,7)) - │ ├── flags: static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (1,5)-(1,6) = ":" - │ ├── value_loc: (1,6)-(1,7) = "x" - │ ├── closing_loc: ∅ - │ └── unescaped: "x" - ├── conditions: (length: 1) - │ └── @ WhenNode (location: (1,9)-(1,22)) - │ ├── flags: ∅ - │ ├── keyword_loc: (1,9)-(1,13) = "when" - │ ├── conditions: (length: 1) - │ │ └── @ RegularExpressionNode (location: (1,14)-(1,17)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (1,14)-(1,15) = "/" - │ │ ├── content_loc: (1,15)-(1,16) = "x" - │ │ ├── closing_loc: (1,16)-(1,17) = "/" - │ │ └── unescaped: "x" - │ ├── then_keyword_loc: (1,18)-(1,22) = "then" - │ └── statements: ∅ - ├── else_clause: ∅ - ├── case_keyword_loc: (1,0)-(1,4) = "case" - └── end_keyword_loc: (1,23)-(1,26) = "end" diff --git a/test/prism/snapshots/seattlerb/bug_comma.txt b/test/prism/snapshots/seattlerb/bug_comma.txt deleted file mode 100644 index d370ea0ac0ec4d..00000000000000 --- a/test/prism/snapshots/seattlerb/bug_comma.txt +++ /dev/null @@ -1,44 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,24)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,24)) - ├── flags: ∅ - └── body: (length: 1) - └── @ IfNode (location: (1,0)-(1,24)) - ├── flags: newline - ├── if_keyword_loc: (1,0)-(1,2) = "if" - ├── predicate: - │ @ CallNode (location: (1,3)-(1,15)) - │ ├── flags: ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :test - │ ├── message_loc: (1,3)-(1,7) = "test" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,8)-(1,15)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ StringNode (location: (1,8)-(1,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (1,8)-(1,9) = "?" - │ │ │ ├── content_loc: (1,9)-(1,10) = "d" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "d" - │ │ └── @ CallNode (location: (1,12)-(1,15)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :dir - │ │ ├── message_loc: (1,12)-(1,15) = "dir" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── then_keyword_loc: (1,16)-(1,20) = "then" - ├── statements: ∅ - ├── subsequent: ∅ - └── end_keyword_loc: (1,21)-(1,24) = "end" diff --git a/test/prism/snapshots/seattlerb/bug_cond_pct.txt b/test/prism/snapshots/seattlerb/bug_cond_pct.txt deleted file mode 100644 index 0b96c5c44e45c4..00000000000000 --- a/test/prism/snapshots/seattlerb/bug_cond_pct.txt +++ /dev/null @@ -1,26 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,28)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,28)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CaseNode (location: (1,0)-(1,28)) - ├── flags: newline - ├── predicate: ∅ - ├── conditions: (length: 1) - │ └── @ WhenNode (location: (1,6)-(1,23)) - │ ├── flags: ∅ - │ ├── keyword_loc: (1,6)-(1,10) = "when" - │ ├── conditions: (length: 1) - │ │ └── @ RegularExpressionNode (location: (1,11)-(1,23)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (1,11)-(1,14) = "%r%" - │ │ ├── content_loc: (1,14)-(1,22) = "blahblah" - │ │ ├── closing_loc: (1,22)-(1,23) = "%" - │ │ └── unescaped: "blahblah" - │ ├── then_keyword_loc: ∅ - │ └── statements: ∅ - ├── else_clause: ∅ - ├── case_keyword_loc: (1,0)-(1,4) = "case" - └── end_keyword_loc: (1,25)-(1,28) = "end" diff --git a/test/prism/snapshots/seattlerb/bug_hash_args.txt b/test/prism/snapshots/seattlerb/bug_hash_args.txt deleted file mode 100644 index cd90f0ebc60a0e..00000000000000 --- a/test/prism/snapshots/seattlerb/bug_hash_args.txt +++ /dev/null @@ -1,42 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,19)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,19)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,19)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :foo - ├── message_loc: (1,0)-(1,3) = "foo" - ├── opening_loc: (1,3)-(1,4) = "(" - ├── arguments: - │ @ ArgumentsNode (location: (1,4)-(1,18)) - │ ├── flags: contains_keywords - │ └── arguments: (length: 2) - │ ├── @ SymbolNode (location: (1,4)-(1,8)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (1,4)-(1,5) = ":" - │ │ ├── value_loc: (1,5)-(1,8) = "bar" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "bar" - │ └── @ KeywordHashNode (location: (1,10)-(1,18)) - │ ├── flags: symbol_keys - │ └── elements: (length: 1) - │ └── @ AssocNode (location: (1,10)-(1,18)) - │ ├── flags: static_literal - │ ├── key: - │ │ @ SymbolNode (location: (1,10)-(1,14)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: ∅ - │ │ ├── value_loc: (1,10)-(1,13) = "baz" - │ │ ├── closing_loc: (1,13)-(1,14) = ":" - │ │ └── unescaped: "baz" - │ ├── value: - │ │ @ NilNode (location: (1,15)-(1,18)) - │ │ └── flags: static_literal - │ └── operator_loc: ∅ - ├── closing_loc: (1,18)-(1,19) = ")" - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/bug_hash_args_trailing_comma.txt b/test/prism/snapshots/seattlerb/bug_hash_args_trailing_comma.txt deleted file mode 100644 index 8c06cabf1c245c..00000000000000 --- a/test/prism/snapshots/seattlerb/bug_hash_args_trailing_comma.txt +++ /dev/null @@ -1,42 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,20)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,20)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,20)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :foo - ├── message_loc: (1,0)-(1,3) = "foo" - ├── opening_loc: (1,3)-(1,4) = "(" - ├── arguments: - │ @ ArgumentsNode (location: (1,4)-(1,18)) - │ ├── flags: contains_keywords - │ └── arguments: (length: 2) - │ ├── @ SymbolNode (location: (1,4)-(1,8)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (1,4)-(1,5) = ":" - │ │ ├── value_loc: (1,5)-(1,8) = "bar" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "bar" - │ └── @ KeywordHashNode (location: (1,10)-(1,18)) - │ ├── flags: symbol_keys - │ └── elements: (length: 1) - │ └── @ AssocNode (location: (1,10)-(1,18)) - │ ├── flags: static_literal - │ ├── key: - │ │ @ SymbolNode (location: (1,10)-(1,14)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: ∅ - │ │ ├── value_loc: (1,10)-(1,13) = "baz" - │ │ ├── closing_loc: (1,13)-(1,14) = ":" - │ │ └── unescaped: "baz" - │ ├── value: - │ │ @ NilNode (location: (1,15)-(1,18)) - │ │ └── flags: static_literal - │ └── operator_loc: ∅ - ├── closing_loc: (1,19)-(1,20) = ")" - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/bug_hash_interp_array.txt b/test/prism/snapshots/seattlerb/bug_hash_interp_array.txt deleted file mode 100644 index 3d9fc56850b08e..00000000000000 --- a/test/prism/snapshots/seattlerb/bug_hash_interp_array.txt +++ /dev/null @@ -1,32 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,13)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,13)) - ├── flags: ∅ - └── body: (length: 1) - └── @ HashNode (location: (1,0)-(1,13)) - ├── flags: newline - ├── opening_loc: (1,0)-(1,1) = "{" - ├── elements: (length: 1) - │ └── @ AssocNode (location: (1,2)-(1,11)) - │ ├── flags: ∅ - │ ├── key: - │ │ @ InterpolatedSymbolNode (location: (1,2)-(1,8)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (1,2)-(1,3) = "\"" - │ │ ├── parts: (length: 1) - │ │ │ └── @ EmbeddedStatementsNode (location: (1,3)-(1,6)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (1,3)-(1,5) = "\#{" - │ │ │ ├── statements: ∅ - │ │ │ └── closing_loc: (1,5)-(1,6) = "}" - │ │ └── closing_loc: (1,6)-(1,8) = "\":" - │ ├── value: - │ │ @ ArrayNode (location: (1,9)-(1,11)) - │ │ ├── flags: static_literal - │ │ ├── elements: (length: 0) - │ │ ├── opening_loc: (1,9)-(1,10) = "[" - │ │ └── closing_loc: (1,10)-(1,11) = "]" - │ └── operator_loc: ∅ - └── closing_loc: (1,12)-(1,13) = "}" diff --git a/test/prism/snapshots/seattlerb/bug_masgn_right.txt b/test/prism/snapshots/seattlerb/bug_masgn_right.txt deleted file mode 100644 index e5b635d802d3c0..00000000000000 --- a/test/prism/snapshots/seattlerb/bug_masgn_right.txt +++ /dev/null @@ -1,55 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,17)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,17)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,17)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :f - ├── message_loc: (1,0)-(1,1) = "f" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,2)-(1,17)) - ├── flags: ∅ - ├── locals: [:a, :b, :c] - ├── parameters: - │ @ BlockParametersNode (location: (1,4)-(1,15)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,5)-(1,14)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 2) - │ │ │ ├── @ RequiredParameterNode (location: (1,5)-(1,6)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :a - │ │ │ └── @ MultiTargetNode (location: (1,8)-(1,14)) - │ │ │ ├── flags: ∅ - │ │ │ ├── lefts: (length: 2) - │ │ │ │ ├── @ RequiredParameterNode (location: (1,9)-(1,10)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── name: :b - │ │ │ │ └── @ RequiredParameterNode (location: (1,12)-(1,13)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :c - │ │ │ ├── rest: ∅ - │ │ │ ├── rights: (length: 0) - │ │ │ ├── lparen_loc: (1,8)-(1,9) = "(" - │ │ │ └── rparen_loc: (1,13)-(1,14) = ")" - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,4)-(1,5) = "|" - │ └── closing_loc: (1,14)-(1,15) = "|" - ├── body: ∅ - ├── opening_loc: (1,2)-(1,3) = "{" - └── closing_loc: (1,16)-(1,17) = "}" diff --git a/test/prism/snapshots/seattlerb/bug_not_parens.txt b/test/prism/snapshots/seattlerb/bug_not_parens.txt deleted file mode 100644 index 163fb79564f8c3..00000000000000 --- a/test/prism/snapshots/seattlerb/bug_not_parens.txt +++ /dev/null @@ -1,27 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,6)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,6)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,6)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (1,4)-(1,5)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (1,4)-(1,5) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: ∅ - ├── name: :! - ├── message_loc: (1,0)-(1,3) = "not" - ├── opening_loc: (1,3)-(1,4) = "(" - ├── arguments: ∅ - ├── closing_loc: (1,5)-(1,6) = ")" - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/bug_op_asgn_rescue.txt b/test/prism/snapshots/seattlerb/bug_op_asgn_rescue.txt deleted file mode 100644 index 9da753aece04eb..00000000000000 --- a/test/prism/snapshots/seattlerb/bug_op_asgn_rescue.txt +++ /dev/null @@ -1,31 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,18)) -├── flags: ∅ -├── locals: [:a] -└── statements: - @ StatementsNode (location: (1,0)-(1,18)) - ├── flags: ∅ - └── body: (length: 1) - └── @ LocalVariableOrWriteNode (location: (1,0)-(1,18)) - ├── flags: newline - ├── name_loc: (1,0)-(1,1) = "a" - ├── operator_loc: (1,2)-(1,5) = "||=" - ├── value: - │ @ RescueModifierNode (location: (1,6)-(1,18)) - │ ├── flags: ∅ - │ ├── expression: - │ │ @ CallNode (location: (1,6)-(1,7)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :b - │ │ ├── message_loc: (1,6)-(1,7) = "b" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── keyword_loc: (1,8)-(1,14) = "rescue" - │ └── rescue_expression: - │ @ NilNode (location: (1,15)-(1,18)) - │ └── flags: static_literal - ├── name: :a - └── depth: 0 diff --git a/test/prism/snapshots/seattlerb/call_and.txt b/test/prism/snapshots/seattlerb/call_and.txt deleted file mode 100644 index 640f355c4a1fb8..00000000000000 --- a/test/prism/snapshots/seattlerb/call_and.txt +++ /dev/null @@ -1,26 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,5)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,5)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,5)) - ├── flags: newline - ├── receiver: - │ @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── call_operator_loc: ∅ - ├── name: :& - ├── message_loc: (1,2)-(1,3) = "&" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,4)-(1,5)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ IntegerNode (location: (1,4)-(1,5)) - │ ├── flags: static_literal, decimal - │ └── value: 2 - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_arg_assoc.txt b/test/prism/snapshots/seattlerb/call_arg_assoc.txt deleted file mode 100644 index b8ec9070317132..00000000000000 --- a/test/prism/snapshots/seattlerb/call_arg_assoc.txt +++ /dev/null @@ -1,37 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,10)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,10)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,10)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :f - ├── message_loc: (1,0)-(1,1) = "f" - ├── opening_loc: (1,1)-(1,2) = "(" - ├── arguments: - │ @ ArgumentsNode (location: (1,2)-(1,9)) - │ ├── flags: contains_keywords - │ └── arguments: (length: 2) - │ ├── @ IntegerNode (location: (1,2)-(1,3)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ └── @ KeywordHashNode (location: (1,5)-(1,9)) - │ ├── flags: ∅ - │ └── elements: (length: 1) - │ └── @ AssocNode (location: (1,5)-(1,9)) - │ ├── flags: static_literal - │ ├── key: - │ │ @ IntegerNode (location: (1,5)-(1,6)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── value: - │ │ @ IntegerNode (location: (1,8)-(1,9)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 3 - │ └── operator_loc: (1,6)-(1,8) = "=>" - ├── closing_loc: (1,9)-(1,10) = ")" - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_arg_assoc_kwsplat.txt b/test/prism/snapshots/seattlerb/call_arg_assoc_kwsplat.txt deleted file mode 100644 index 11142b272191e5..00000000000000 --- a/test/prism/snapshots/seattlerb/call_arg_assoc_kwsplat.txt +++ /dev/null @@ -1,47 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,16)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,16)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,16)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :f - ├── message_loc: (1,0)-(1,1) = "f" - ├── opening_loc: (1,1)-(1,2) = "(" - ├── arguments: - │ @ ArgumentsNode (location: (1,2)-(1,15)) - │ ├── flags: contains_keywords, contains_keyword_splat - │ └── arguments: (length: 2) - │ ├── @ IntegerNode (location: (1,2)-(1,3)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ └── @ KeywordHashNode (location: (1,5)-(1,15)) - │ ├── flags: ∅ - │ └── elements: (length: 2) - │ ├── @ AssocNode (location: (1,5)-(1,10)) - │ │ ├── flags: static_literal - │ │ ├── key: - │ │ │ @ SymbolNode (location: (1,5)-(1,8)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (1,5)-(1,7) = "kw" - │ │ │ ├── closing_loc: (1,7)-(1,8) = ":" - │ │ │ └── unescaped: "kw" - │ │ ├── value: - │ │ │ @ IntegerNode (location: (1,9)-(1,10)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ └── operator_loc: ∅ - │ └── @ AssocSplatNode (location: (1,12)-(1,15)) - │ ├── flags: ∅ - │ ├── value: - │ │ @ IntegerNode (location: (1,14)-(1,15)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 3 - │ └── operator_loc: (1,12)-(1,14) = "**" - ├── closing_loc: (1,15)-(1,16) = ")" - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_arg_kwsplat.txt b/test/prism/snapshots/seattlerb/call_arg_kwsplat.txt deleted file mode 100644 index 853f7103e3e673..00000000000000 --- a/test/prism/snapshots/seattlerb/call_arg_kwsplat.txt +++ /dev/null @@ -1,40 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,9)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,9)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,9)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :a - ├── message_loc: (1,0)-(1,1) = "a" - ├── opening_loc: (1,1)-(1,2) = "(" - ├── arguments: - │ @ ArgumentsNode (location: (1,2)-(1,8)) - │ ├── flags: contains_keywords, contains_keyword_splat - │ └── arguments: (length: 2) - │ ├── @ CallNode (location: (1,2)-(1,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :b - │ │ ├── message_loc: (1,2)-(1,3) = "b" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── @ KeywordHashNode (location: (1,5)-(1,8)) - │ ├── flags: ∅ - │ └── elements: (length: 1) - │ └── @ AssocSplatNode (location: (1,5)-(1,8)) - │ ├── flags: ∅ - │ ├── value: - │ │ @ IntegerNode (location: (1,7)-(1,8)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ └── operator_loc: (1,5)-(1,7) = "**" - ├── closing_loc: (1,8)-(1,9) = ")" - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_args_assoc_quoted.txt b/test/prism/snapshots/seattlerb/call_args_assoc_quoted.txt deleted file mode 100644 index 615bee5b4a9681..00000000000000 --- a/test/prism/snapshots/seattlerb/call_args_assoc_quoted.txt +++ /dev/null @@ -1,114 +0,0 @@ -@ ProgramNode (location: (1,0)-(5,8)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(5,8)) - ├── flags: ∅ - └── body: (length: 3) - ├── @ CallNode (location: (1,0)-(1,11)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :x - │ ├── message_loc: (1,0)-(1,1) = "x" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,2)-(1,11)) - │ │ ├── flags: contains_keywords - │ │ └── arguments: (length: 1) - │ │ └── @ KeywordHashNode (location: (1,2)-(1,11)) - │ │ ├── flags: ∅ - │ │ └── elements: (length: 1) - │ │ └── @ AssocNode (location: (1,2)-(1,11)) - │ │ ├── flags: ∅ - │ │ ├── key: - │ │ │ @ InterpolatedSymbolNode (location: (1,2)-(1,9)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (1,2)-(1,3) = "\"" - │ │ │ ├── parts: (length: 1) - │ │ │ │ └── @ EmbeddedStatementsNode (location: (1,3)-(1,7)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── opening_loc: (1,3)-(1,5) = "\#{" - │ │ │ │ ├── statements: - │ │ │ │ │ @ StatementsNode (location: (1,5)-(1,6)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── body: (length: 1) - │ │ │ │ │ └── @ CallNode (location: (1,5)-(1,6)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :k - │ │ │ │ │ ├── message_loc: (1,5)-(1,6) = "k" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ └── closing_loc: (1,6)-(1,7) = "}" - │ │ │ └── closing_loc: (1,7)-(1,9) = "\":" - │ │ ├── value: - │ │ │ @ IntegerNode (location: (1,9)-(1,11)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 42 - │ │ └── operator_loc: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (3,0)-(3,8)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :x - │ ├── message_loc: (3,0)-(3,1) = "x" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (3,2)-(3,8)) - │ │ ├── flags: contains_keywords - │ │ └── arguments: (length: 1) - │ │ └── @ KeywordHashNode (location: (3,2)-(3,8)) - │ │ ├── flags: symbol_keys - │ │ └── elements: (length: 1) - │ │ └── @ AssocNode (location: (3,2)-(3,8)) - │ │ ├── flags: static_literal - │ │ ├── key: - │ │ │ @ SymbolNode (location: (3,2)-(3,6)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (3,2)-(3,3) = "\"" - │ │ │ ├── value_loc: (3,3)-(3,4) = "k" - │ │ │ ├── closing_loc: (3,4)-(3,6) = "\":" - │ │ │ └── unescaped: "k" - │ │ ├── value: - │ │ │ @ IntegerNode (location: (3,6)-(3,8)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 42 - │ │ └── operator_loc: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── @ CallNode (location: (5,0)-(5,8)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :x - ├── message_loc: (5,0)-(5,1) = "x" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (5,2)-(5,8)) - │ ├── flags: contains_keywords - │ └── arguments: (length: 1) - │ └── @ KeywordHashNode (location: (5,2)-(5,8)) - │ ├── flags: symbol_keys - │ └── elements: (length: 1) - │ └── @ AssocNode (location: (5,2)-(5,8)) - │ ├── flags: static_literal - │ ├── key: - │ │ @ SymbolNode (location: (5,2)-(5,6)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (5,2)-(5,3) = "'" - │ │ ├── value_loc: (5,3)-(5,4) = "k" - │ │ ├── closing_loc: (5,4)-(5,6) = "':" - │ │ └── unescaped: "k" - │ ├── value: - │ │ @ IntegerNode (location: (5,6)-(5,8)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 42 - │ └── operator_loc: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_args_assoc_trailing_comma.txt b/test/prism/snapshots/seattlerb/call_args_assoc_trailing_comma.txt deleted file mode 100644 index 00bc620f544829..00000000000000 --- a/test/prism/snapshots/seattlerb/call_args_assoc_trailing_comma.txt +++ /dev/null @@ -1,37 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,11)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,11)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,11)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :f - ├── message_loc: (1,0)-(1,1) = "f" - ├── opening_loc: (1,1)-(1,2) = "(" - ├── arguments: - │ @ ArgumentsNode (location: (1,2)-(1,9)) - │ ├── flags: contains_keywords - │ └── arguments: (length: 2) - │ ├── @ IntegerNode (location: (1,2)-(1,3)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ └── @ KeywordHashNode (location: (1,5)-(1,9)) - │ ├── flags: ∅ - │ └── elements: (length: 1) - │ └── @ AssocNode (location: (1,5)-(1,9)) - │ ├── flags: static_literal - │ ├── key: - │ │ @ IntegerNode (location: (1,5)-(1,6)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── value: - │ │ @ IntegerNode (location: (1,8)-(1,9)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 3 - │ └── operator_loc: (1,6)-(1,8) = "=>" - ├── closing_loc: (1,10)-(1,11) = ")" - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_args_command.txt b/test/prism/snapshots/seattlerb/call_args_command.txt deleted file mode 100644 index 6fe112f224aa59..00000000000000 --- a/test/prism/snapshots/seattlerb/call_args_command.txt +++ /dev/null @@ -1,56 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,9)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,9)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,9)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (1,0)-(1,1)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (1,0)-(1,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: (1,1)-(1,2) = "." - ├── name: :b - ├── message_loc: (1,2)-(1,3) = "b" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,4)-(1,9)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ CallNode (location: (1,4)-(1,9)) - │ ├── flags: ∅ - │ ├── receiver: - │ │ @ CallNode (location: (1,4)-(1,5)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :c - │ │ ├── message_loc: (1,4)-(1,5) = "c" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (1,5)-(1,6) = "." - │ ├── name: :d - │ ├── message_loc: (1,6)-(1,7) = "d" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,8)-(1,9)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (1,8)-(1,9)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_array_arg.txt b/test/prism/snapshots/seattlerb/call_array_arg.txt deleted file mode 100644 index cec613bc582e44..00000000000000 --- a/test/prism/snapshots/seattlerb/call_array_arg.txt +++ /dev/null @@ -1,40 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,13)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,13)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,13)) - ├── flags: newline - ├── receiver: - │ @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── call_operator_loc: ∅ - ├── name: :== - ├── message_loc: (1,2)-(1,4) = "==" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,5)-(1,13)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ ArrayNode (location: (1,5)-(1,13)) - │ ├── flags: static_literal - │ ├── elements: (length: 2) - │ │ ├── @ SymbolNode (location: (1,6)-(1,8)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (1,6)-(1,7) = ":" - │ │ │ ├── value_loc: (1,7)-(1,8) = "b" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "b" - │ │ └── @ SymbolNode (location: (1,10)-(1,12)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (1,10)-(1,11) = ":" - │ │ ├── value_loc: (1,11)-(1,12) = "c" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "c" - │ ├── opening_loc: (1,5)-(1,6) = "[" - │ └── closing_loc: (1,12)-(1,13) = "]" - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_array_block_call.txt b/test/prism/snapshots/seattlerb/call_array_block_call.txt deleted file mode 100644 index 4a044924e9f31e..00000000000000 --- a/test/prism/snapshots/seattlerb/call_array_block_call.txt +++ /dev/null @@ -1,44 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,19)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,19)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,19)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :a - ├── message_loc: (1,0)-(1,1) = "a" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,2)-(1,19)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ ArrayNode (location: (1,2)-(1,19)) - │ ├── flags: ∅ - │ ├── elements: (length: 2) - │ │ ├── @ NilNode (location: (1,4)-(1,7)) - │ │ │ └── flags: static_literal - │ │ └── @ CallNode (location: (1,9)-(1,17)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :b - │ │ ├── message_loc: (1,9)-(1,10) = "b" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: - │ │ @ BlockNode (location: (1,11)-(1,17)) - │ │ ├── flags: ∅ - │ │ ├── locals: [] - │ │ ├── parameters: ∅ - │ │ ├── body: ∅ - │ │ ├── opening_loc: (1,11)-(1,13) = "do" - │ │ └── closing_loc: (1,14)-(1,17) = "end" - │ ├── opening_loc: (1,2)-(1,3) = "[" - │ └── closing_loc: (1,18)-(1,19) = "]" - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_array_lambda_block_call.txt b/test/prism/snapshots/seattlerb/call_array_lambda_block_call.txt deleted file mode 100644 index dca64e5f7b25ae..00000000000000 --- a/test/prism/snapshots/seattlerb/call_array_lambda_block_call.txt +++ /dev/null @@ -1,46 +0,0 @@ -@ ProgramNode (location: (1,0)-(2,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(2,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(2,3)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :a - ├── message_loc: (1,0)-(1,1) = "a" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,2)-(1,11)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ ArrayNode (location: (1,2)-(1,11)) - │ ├── flags: ∅ - │ ├── elements: (length: 1) - │ │ └── @ LambdaNode (location: (1,3)-(1,10)) - │ │ ├── flags: ∅ - │ │ ├── locals: [] - │ │ ├── operator_loc: (1,3)-(1,5) = "->" - │ │ ├── opening_loc: (1,8)-(1,9) = "{" - │ │ ├── closing_loc: (1,9)-(1,10) = "}" - │ │ ├── parameters: - │ │ │ @ BlockParametersNode (location: (1,5)-(1,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── parameters: ∅ - │ │ │ ├── locals: (length: 0) - │ │ │ ├── opening_loc: (1,5)-(1,6) = "(" - │ │ │ └── closing_loc: (1,6)-(1,7) = ")" - │ │ └── body: ∅ - │ ├── opening_loc: (1,2)-(1,3) = "[" - │ └── closing_loc: (1,10)-(1,11) = "]" - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,12)-(2,3)) - ├── flags: ∅ - ├── locals: [] - ├── parameters: ∅ - ├── body: ∅ - ├── opening_loc: (1,12)-(1,14) = "do" - └── closing_loc: (2,0)-(2,3) = "end" diff --git a/test/prism/snapshots/seattlerb/call_array_lit_inline_hash.txt b/test/prism/snapshots/seattlerb/call_array_lit_inline_hash.txt deleted file mode 100644 index f83c7a55e5b592..00000000000000 --- a/test/prism/snapshots/seattlerb/call_array_lit_inline_hash.txt +++ /dev/null @@ -1,48 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,16)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,16)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,16)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :a - ├── message_loc: (1,0)-(1,1) = "a" - ├── opening_loc: (1,1)-(1,2) = "(" - ├── arguments: - │ @ ArgumentsNode (location: (1,2)-(1,15)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ ArrayNode (location: (1,2)-(1,15)) - │ ├── flags: ∅ - │ ├── elements: (length: 2) - │ │ ├── @ SymbolNode (location: (1,3)-(1,5)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (1,3)-(1,4) = ":" - │ │ │ ├── value_loc: (1,4)-(1,5) = "b" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "b" - │ │ └── @ KeywordHashNode (location: (1,7)-(1,14)) - │ │ ├── flags: symbol_keys - │ │ └── elements: (length: 1) - │ │ └── @ AssocNode (location: (1,7)-(1,14)) - │ │ ├── flags: static_literal - │ │ ├── key: - │ │ │ @ SymbolNode (location: (1,7)-(1,9)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (1,7)-(1,8) = ":" - │ │ │ ├── value_loc: (1,8)-(1,9) = "c" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "c" - │ │ ├── value: - │ │ │ @ IntegerNode (location: (1,13)-(1,14)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── operator_loc: (1,10)-(1,12) = "=>" - │ ├── opening_loc: (1,2)-(1,3) = "[" - │ └── closing_loc: (1,14)-(1,15) = "]" - ├── closing_loc: (1,15)-(1,16) = ")" - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_assoc.txt b/test/prism/snapshots/seattlerb/call_assoc.txt deleted file mode 100644 index a4e4512a0821cd..00000000000000 --- a/test/prism/snapshots/seattlerb/call_assoc.txt +++ /dev/null @@ -1,34 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,7)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,7)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,7)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :f - ├── message_loc: (1,0)-(1,1) = "f" - ├── opening_loc: (1,1)-(1,2) = "(" - ├── arguments: - │ @ ArgumentsNode (location: (1,2)-(1,6)) - │ ├── flags: contains_keywords - │ └── arguments: (length: 1) - │ └── @ KeywordHashNode (location: (1,2)-(1,6)) - │ ├── flags: ∅ - │ └── elements: (length: 1) - │ └── @ AssocNode (location: (1,2)-(1,6)) - │ ├── flags: static_literal - │ ├── key: - │ │ @ IntegerNode (location: (1,2)-(1,3)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── value: - │ │ @ IntegerNode (location: (1,5)-(1,6)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 3 - │ └── operator_loc: (1,3)-(1,5) = "=>" - ├── closing_loc: (1,6)-(1,7) = ")" - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_assoc_new.txt b/test/prism/snapshots/seattlerb/call_assoc_new.txt deleted file mode 100644 index 6cbc942a6ba486..00000000000000 --- a/test/prism/snapshots/seattlerb/call_assoc_new.txt +++ /dev/null @@ -1,37 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,6)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,6)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,6)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :f - ├── message_loc: (1,0)-(1,1) = "f" - ├── opening_loc: (1,1)-(1,2) = "(" - ├── arguments: - │ @ ArgumentsNode (location: (1,2)-(1,5)) - │ ├── flags: contains_keywords - │ └── arguments: (length: 1) - │ └── @ KeywordHashNode (location: (1,2)-(1,5)) - │ ├── flags: symbol_keys - │ └── elements: (length: 1) - │ └── @ AssocNode (location: (1,2)-(1,5)) - │ ├── flags: static_literal - │ ├── key: - │ │ @ SymbolNode (location: (1,2)-(1,4)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: ∅ - │ │ ├── value_loc: (1,2)-(1,3) = "a" - │ │ ├── closing_loc: (1,3)-(1,4) = ":" - │ │ └── unescaped: "a" - │ ├── value: - │ │ @ IntegerNode (location: (1,4)-(1,5)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 3 - │ └── operator_loc: ∅ - ├── closing_loc: (1,5)-(1,6) = ")" - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_assoc_new_if_multiline.txt b/test/prism/snapshots/seattlerb/call_assoc_new_if_multiline.txt deleted file mode 100644 index a258b734a30c17..00000000000000 --- a/test/prism/snapshots/seattlerb/call_assoc_new_if_multiline.txt +++ /dev/null @@ -1,65 +0,0 @@ -@ ProgramNode (location: (1,0)-(5,4)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(5,4)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(5,4)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :a - ├── message_loc: (1,0)-(1,1) = "a" - ├── opening_loc: (1,1)-(1,2) = "(" - ├── arguments: - │ @ ArgumentsNode (location: (1,2)-(5,3)) - │ ├── flags: contains_keywords - │ └── arguments: (length: 1) - │ └── @ KeywordHashNode (location: (1,2)-(5,3)) - │ ├── flags: symbol_keys - │ └── elements: (length: 1) - │ └── @ AssocNode (location: (1,2)-(5,3)) - │ ├── flags: ∅ - │ ├── key: - │ │ @ SymbolNode (location: (1,2)-(1,4)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: ∅ - │ │ ├── value_loc: (1,2)-(1,3) = "b" - │ │ ├── closing_loc: (1,3)-(1,4) = ":" - │ │ └── unescaped: "b" - │ ├── value: - │ │ @ IfNode (location: (1,5)-(5,3)) - │ │ ├── flags: newline - │ │ ├── if_keyword_loc: (1,5)-(1,7) = "if" - │ │ ├── predicate: - │ │ │ @ SymbolNode (location: (1,8)-(1,10)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (1,8)-(1,9) = ":" - │ │ │ ├── value_loc: (1,9)-(1,10) = "c" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "c" - │ │ ├── then_keyword_loc: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (2,0)-(2,1)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ IntegerNode (location: (2,0)-(2,1)) - │ │ │ ├── flags: newline, static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── subsequent: - │ │ │ @ ElseNode (location: (3,0)-(5,3)) - │ │ │ ├── flags: ∅ - │ │ │ ├── else_keyword_loc: (3,0)-(3,4) = "else" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (4,0)-(4,1)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ IntegerNode (location: (4,0)-(4,1)) - │ │ │ │ ├── flags: newline, static_literal, decimal - │ │ │ │ └── value: 2 - │ │ │ └── end_keyword_loc: (5,0)-(5,3) = "end" - │ │ └── end_keyword_loc: (5,0)-(5,3) = "end" - │ └── operator_loc: ∅ - ├── closing_loc: (5,3)-(5,4) = ")" - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_assoc_trailing_comma.txt b/test/prism/snapshots/seattlerb/call_assoc_trailing_comma.txt deleted file mode 100644 index a240775d69b8af..00000000000000 --- a/test/prism/snapshots/seattlerb/call_assoc_trailing_comma.txt +++ /dev/null @@ -1,34 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,8)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,8)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,8)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :f - ├── message_loc: (1,0)-(1,1) = "f" - ├── opening_loc: (1,1)-(1,2) = "(" - ├── arguments: - │ @ ArgumentsNode (location: (1,2)-(1,6)) - │ ├── flags: contains_keywords - │ └── arguments: (length: 1) - │ └── @ KeywordHashNode (location: (1,2)-(1,6)) - │ ├── flags: ∅ - │ └── elements: (length: 1) - │ └── @ AssocNode (location: (1,2)-(1,6)) - │ ├── flags: static_literal - │ ├── key: - │ │ @ IntegerNode (location: (1,2)-(1,3)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── value: - │ │ @ IntegerNode (location: (1,5)-(1,6)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ └── operator_loc: (1,3)-(1,5) = "=>" - ├── closing_loc: (1,7)-(1,8) = ")" - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_bang_command_call.txt b/test/prism/snapshots/seattlerb/call_bang_command_call.txt deleted file mode 100644 index e226d652785347..00000000000000 --- a/test/prism/snapshots/seattlerb/call_bang_command_call.txt +++ /dev/null @@ -1,43 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,7)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,7)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,7)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (1,2)-(1,7)) - │ ├── flags: ∅ - │ ├── receiver: - │ │ @ CallNode (location: (1,2)-(1,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (1,2)-(1,3) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (1,3)-(1,4) = "." - │ ├── name: :b - │ ├── message_loc: (1,4)-(1,5) = "b" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,6)-(1,7)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (1,6)-(1,7)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: ∅ - ├── name: :! - ├── message_loc: (1,0)-(1,1) = "!" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_bang_squiggle.txt b/test/prism/snapshots/seattlerb/call_bang_squiggle.txt deleted file mode 100644 index 5c10841f73936e..00000000000000 --- a/test/prism/snapshots/seattlerb/call_bang_squiggle.txt +++ /dev/null @@ -1,26 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,6)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,6)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,6)) - ├── flags: newline - ├── receiver: - │ @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── call_operator_loc: ∅ - ├── name: :!~ - ├── message_loc: (1,2)-(1,4) = "!~" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,5)-(1,6)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ IntegerNode (location: (1,5)-(1,6)) - │ ├── flags: static_literal, decimal - │ └── value: 2 - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_begin_call_block_call.txt b/test/prism/snapshots/seattlerb/call_begin_call_block_call.txt deleted file mode 100644 index 240a3aaa76b5c6..00000000000000 --- a/test/prism/snapshots/seattlerb/call_begin_call_block_call.txt +++ /dev/null @@ -1,58 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(3,3)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :a - ├── message_loc: (1,0)-(1,1) = "a" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,2)-(3,3)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ BeginNode (location: (1,2)-(3,3)) - │ ├── flags: ∅ - │ ├── begin_keyword_loc: (1,2)-(1,7) = "begin" - │ ├── statements: - │ │ @ StatementsNode (location: (2,0)-(2,10)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (2,0)-(2,10)) - │ │ ├── flags: newline - │ │ ├── receiver: - │ │ │ @ CallNode (location: (2,0)-(2,1)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (2,0)-(2,1) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: (2,1)-(2,2) = "." - │ │ ├── name: :c - │ │ ├── message_loc: (2,2)-(2,3) = "c" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: - │ │ @ BlockNode (location: (2,4)-(2,10)) - │ │ ├── flags: ∅ - │ │ ├── locals: [] - │ │ ├── parameters: ∅ - │ │ ├── body: ∅ - │ │ ├── opening_loc: (2,4)-(2,6) = "do" - │ │ └── closing_loc: (2,7)-(2,10) = "end" - │ ├── rescue_clause: ∅ - │ ├── else_clause: ∅ - │ ├── ensure_clause: ∅ - │ └── end_keyword_loc: (3,0)-(3,3) = "end" - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_block_arg_named.txt b/test/prism/snapshots/seattlerb/call_block_arg_named.txt deleted file mode 100644 index db6fc7a059a0f0..00000000000000 --- a/test/prism/snapshots/seattlerb/call_block_arg_named.txt +++ /dev/null @@ -1,31 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,6)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,6)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,6)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :x - ├── message_loc: (1,0)-(1,1) = "x" - ├── opening_loc: (1,1)-(1,2) = "(" - ├── arguments: ∅ - ├── closing_loc: (1,6)-(1,7) = ")" - └── block: - @ BlockArgumentNode (location: (1,2)-(1,6)) - ├── flags: ∅ - ├── expression: - │ @ CallNode (location: (1,3)-(1,6)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :blk - │ ├── message_loc: (1,3)-(1,6) = "blk" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── operator_loc: (1,2)-(1,3) = "&" diff --git a/test/prism/snapshots/seattlerb/call_carat.txt b/test/prism/snapshots/seattlerb/call_carat.txt deleted file mode 100644 index 88ed832aca93de..00000000000000 --- a/test/prism/snapshots/seattlerb/call_carat.txt +++ /dev/null @@ -1,26 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,5)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,5)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,5)) - ├── flags: newline - ├── receiver: - │ @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── call_operator_loc: ∅ - ├── name: :^ - ├── message_loc: (1,2)-(1,3) = "^" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,4)-(1,5)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ IntegerNode (location: (1,4)-(1,5)) - │ ├── flags: static_literal, decimal - │ └── value: 2 - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_colon2.txt b/test/prism/snapshots/seattlerb/call_colon2.txt deleted file mode 100644 index 85e39cd3636104..00000000000000 --- a/test/prism/snapshots/seattlerb/call_colon2.txt +++ /dev/null @@ -1,20 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,4)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,4)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,4)) - ├── flags: newline - ├── receiver: - │ @ ConstantReadNode (location: (1,0)-(1,1)) - │ ├── flags: ∅ - │ └── name: :A - ├── call_operator_loc: (1,1)-(1,3) = "::" - ├── name: :b - ├── message_loc: (1,3)-(1,4) = "b" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_colon_parens.txt b/test/prism/snapshots/seattlerb/call_colon_parens.txt deleted file mode 100644 index 19141c34133911..00000000000000 --- a/test/prism/snapshots/seattlerb/call_colon_parens.txt +++ /dev/null @@ -1,20 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,5)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,5)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,5)) - ├── flags: newline - ├── receiver: - │ @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── call_operator_loc: (1,1)-(1,3) = "::" - ├── name: :call - ├── message_loc: ∅ - ├── opening_loc: (1,3)-(1,4) = "(" - ├── arguments: ∅ - ├── closing_loc: (1,4)-(1,5) = ")" - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_div.txt b/test/prism/snapshots/seattlerb/call_div.txt deleted file mode 100644 index 55a410977c3baa..00000000000000 --- a/test/prism/snapshots/seattlerb/call_div.txt +++ /dev/null @@ -1,26 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,5)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,5)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,5)) - ├── flags: newline - ├── receiver: - │ @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── call_operator_loc: ∅ - ├── name: :/ - ├── message_loc: (1,2)-(1,3) = "/" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,4)-(1,5)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ IntegerNode (location: (1,4)-(1,5)) - │ ├── flags: static_literal, decimal - │ └── value: 2 - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_dot_parens.txt b/test/prism/snapshots/seattlerb/call_dot_parens.txt deleted file mode 100644 index 29b592a960dc18..00000000000000 --- a/test/prism/snapshots/seattlerb/call_dot_parens.txt +++ /dev/null @@ -1,20 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,4)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,4)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,4)) - ├── flags: newline - ├── receiver: - │ @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── call_operator_loc: (1,1)-(1,2) = "." - ├── name: :call - ├── message_loc: ∅ - ├── opening_loc: (1,2)-(1,3) = "(" - ├── arguments: ∅ - ├── closing_loc: (1,3)-(1,4) = ")" - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_env.txt b/test/prism/snapshots/seattlerb/call_env.txt deleted file mode 100644 index 933621594f850c..00000000000000 --- a/test/prism/snapshots/seattlerb/call_env.txt +++ /dev/null @@ -1,27 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,7)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,7)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,7)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (1,0)-(1,1)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (1,0)-(1,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: (1,1)-(1,2) = "." - ├── name: :happy - ├── message_loc: (1,2)-(1,7) = "happy" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_eq3.txt b/test/prism/snapshots/seattlerb/call_eq3.txt deleted file mode 100644 index 52e4b00c5ce7b7..00000000000000 --- a/test/prism/snapshots/seattlerb/call_eq3.txt +++ /dev/null @@ -1,26 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,7)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,7)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,7)) - ├── flags: newline - ├── receiver: - │ @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── call_operator_loc: ∅ - ├── name: :=== - ├── message_loc: (1,2)-(1,5) = "===" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,6)-(1,7)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ IntegerNode (location: (1,6)-(1,7)) - │ ├── flags: static_literal, decimal - │ └── value: 2 - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_gt.txt b/test/prism/snapshots/seattlerb/call_gt.txt deleted file mode 100644 index 22371dd8ca0e47..00000000000000 --- a/test/prism/snapshots/seattlerb/call_gt.txt +++ /dev/null @@ -1,26 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,5)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,5)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,5)) - ├── flags: newline - ├── receiver: - │ @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── call_operator_loc: ∅ - ├── name: :> - ├── message_loc: (1,2)-(1,3) = ">" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,4)-(1,5)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ IntegerNode (location: (1,4)-(1,5)) - │ ├── flags: static_literal, decimal - │ └── value: 2 - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_kwsplat.txt b/test/prism/snapshots/seattlerb/call_kwsplat.txt deleted file mode 100644 index 17773e769335a6..00000000000000 --- a/test/prism/snapshots/seattlerb/call_kwsplat.txt +++ /dev/null @@ -1,30 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,6)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,6)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,6)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :a - ├── message_loc: (1,0)-(1,1) = "a" - ├── opening_loc: (1,1)-(1,2) = "(" - ├── arguments: - │ @ ArgumentsNode (location: (1,2)-(1,5)) - │ ├── flags: contains_keywords, contains_keyword_splat - │ └── arguments: (length: 1) - │ └── @ KeywordHashNode (location: (1,2)-(1,5)) - │ ├── flags: ∅ - │ └── elements: (length: 1) - │ └── @ AssocSplatNode (location: (1,2)-(1,5)) - │ ├── flags: ∅ - │ ├── value: - │ │ @ IntegerNode (location: (1,4)-(1,5)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ └── operator_loc: (1,2)-(1,4) = "**" - ├── closing_loc: (1,5)-(1,6) = ")" - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_leading_dots.txt b/test/prism/snapshots/seattlerb/call_leading_dots.txt deleted file mode 100644 index 5562afcd7020f5..00000000000000 --- a/test/prism/snapshots/seattlerb/call_leading_dots.txt +++ /dev/null @@ -1,37 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,2)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,2)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(3,2)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (1,0)-(2,2)) - │ ├── flags: ∅ - │ ├── receiver: - │ │ @ CallNode (location: (1,0)-(1,1)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (1,0)-(1,1) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (2,0)-(2,1) = "." - │ ├── name: :b - │ ├── message_loc: (2,1)-(2,2) = "b" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: (3,0)-(3,1) = "." - ├── name: :c - ├── message_loc: (3,1)-(3,2) = "c" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_leading_dots_comment.txt b/test/prism/snapshots/seattlerb/call_leading_dots_comment.txt deleted file mode 100644 index f285e42cbf4b67..00000000000000 --- a/test/prism/snapshots/seattlerb/call_leading_dots_comment.txt +++ /dev/null @@ -1,37 +0,0 @@ -@ ProgramNode (location: (1,0)-(4,2)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(4,2)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(4,2)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (1,0)-(2,2)) - │ ├── flags: ∅ - │ ├── receiver: - │ │ @ CallNode (location: (1,0)-(1,1)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (1,0)-(1,1) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (2,0)-(2,1) = "." - │ ├── name: :b - │ ├── message_loc: (2,1)-(2,2) = "b" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: (4,0)-(4,1) = "." - ├── name: :d - ├── message_loc: (4,1)-(4,2) = "d" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_lt.txt b/test/prism/snapshots/seattlerb/call_lt.txt deleted file mode 100644 index bec3deddd083b5..00000000000000 --- a/test/prism/snapshots/seattlerb/call_lt.txt +++ /dev/null @@ -1,26 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,5)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,5)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,5)) - ├── flags: newline - ├── receiver: - │ @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── call_operator_loc: ∅ - ├── name: :< - ├── message_loc: (1,2)-(1,3) = "<" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,4)-(1,5)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ IntegerNode (location: (1,4)-(1,5)) - │ ├── flags: static_literal, decimal - │ └── value: 2 - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_lte.txt b/test/prism/snapshots/seattlerb/call_lte.txt deleted file mode 100644 index a71e03ee1283ec..00000000000000 --- a/test/prism/snapshots/seattlerb/call_lte.txt +++ /dev/null @@ -1,26 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,6)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,6)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,6)) - ├── flags: newline - ├── receiver: - │ @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── call_operator_loc: ∅ - ├── name: :<= - ├── message_loc: (1,2)-(1,4) = "<=" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,5)-(1,6)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ IntegerNode (location: (1,5)-(1,6)) - │ ├── flags: static_literal, decimal - │ └── value: 2 - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_not.txt b/test/prism/snapshots/seattlerb/call_not.txt deleted file mode 100644 index e9df80fb9f2a84..00000000000000 --- a/test/prism/snapshots/seattlerb/call_not.txt +++ /dev/null @@ -1,20 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,6)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,6)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,6)) - ├── flags: newline - ├── receiver: - │ @ IntegerNode (location: (1,4)-(1,6)) - │ ├── flags: static_literal, decimal - │ └── value: 42 - ├── call_operator_loc: ∅ - ├── name: :! - ├── message_loc: (1,0)-(1,3) = "not" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_pipe.txt b/test/prism/snapshots/seattlerb/call_pipe.txt deleted file mode 100644 index 8cf68211a99ea7..00000000000000 --- a/test/prism/snapshots/seattlerb/call_pipe.txt +++ /dev/null @@ -1,26 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,5)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,5)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,5)) - ├── flags: newline - ├── receiver: - │ @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── call_operator_loc: ∅ - ├── name: :| - ├── message_loc: (1,2)-(1,3) = "|" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,4)-(1,5)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ IntegerNode (location: (1,4)-(1,5)) - │ ├── flags: static_literal, decimal - │ └── value: 2 - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_rshift.txt b/test/prism/snapshots/seattlerb/call_rshift.txt deleted file mode 100644 index 28948a044f9da0..00000000000000 --- a/test/prism/snapshots/seattlerb/call_rshift.txt +++ /dev/null @@ -1,26 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,6)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,6)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,6)) - ├── flags: newline - ├── receiver: - │ @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── call_operator_loc: ∅ - ├── name: :>> - ├── message_loc: (1,2)-(1,4) = ">>" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,5)-(1,6)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ IntegerNode (location: (1,5)-(1,6)) - │ ├── flags: static_literal, decimal - │ └── value: 2 - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_self_brackets.txt b/test/prism/snapshots/seattlerb/call_self_brackets.txt deleted file mode 100644 index e4f5e2c41313aa..00000000000000 --- a/test/prism/snapshots/seattlerb/call_self_brackets.txt +++ /dev/null @@ -1,25 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,7)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,7)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,7)) - ├── flags: newline, ignore_visibility - ├── receiver: - │ @ SelfNode (location: (1,0)-(1,4)) - │ └── flags: ∅ - ├── call_operator_loc: ∅ - ├── name: :[] - ├── message_loc: (1,4)-(1,7) = "[1]" - ├── opening_loc: (1,4)-(1,5) = "[" - ├── arguments: - │ @ ArgumentsNode (location: (1,5)-(1,6)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ IntegerNode (location: (1,5)-(1,6)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── closing_loc: (1,6)-(1,7) = "]" - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_spaceship.txt b/test/prism/snapshots/seattlerb/call_spaceship.txt deleted file mode 100644 index 4ea67f2e00bb5b..00000000000000 --- a/test/prism/snapshots/seattlerb/call_spaceship.txt +++ /dev/null @@ -1,26 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,7)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,7)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,7)) - ├── flags: newline - ├── receiver: - │ @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── call_operator_loc: ∅ - ├── name: :<=> - ├── message_loc: (1,2)-(1,5) = "<=>" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,6)-(1,7)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ IntegerNode (location: (1,6)-(1,7)) - │ ├── flags: static_literal, decimal - │ └── value: 2 - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_stabby_do_end_with_block.txt b/test/prism/snapshots/seattlerb/call_stabby_do_end_with_block.txt deleted file mode 100644 index 0e83d334cacf2b..00000000000000 --- a/test/prism/snapshots/seattlerb/call_stabby_do_end_with_block.txt +++ /dev/null @@ -1,47 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,22)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,22)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,22)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :a - ├── message_loc: (1,0)-(1,1) = "a" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,2)-(1,13)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ LambdaNode (location: (1,2)-(1,13)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── operator_loc: (1,2)-(1,4) = "->" - │ ├── opening_loc: (1,5)-(1,7) = "do" - │ ├── closing_loc: (1,10)-(1,13) = "end" - │ ├── parameters: ∅ - │ └── body: - │ @ StatementsNode (location: (1,8)-(1,9)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ IntegerNode (location: (1,8)-(1,9)) - │ ├── flags: newline, static_literal, decimal - │ └── value: 1 - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,14)-(1,22)) - ├── flags: ∅ - ├── locals: [] - ├── parameters: ∅ - ├── body: - │ @ StatementsNode (location: (1,17)-(1,18)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ IntegerNode (location: (1,17)-(1,18)) - │ ├── flags: newline, static_literal, decimal - │ └── value: 2 - ├── opening_loc: (1,14)-(1,16) = "do" - └── closing_loc: (1,19)-(1,22) = "end" diff --git a/test/prism/snapshots/seattlerb/call_stabby_with_braces_block.txt b/test/prism/snapshots/seattlerb/call_stabby_with_braces_block.txt deleted file mode 100644 index 705f8b8d0224c6..00000000000000 --- a/test/prism/snapshots/seattlerb/call_stabby_with_braces_block.txt +++ /dev/null @@ -1,47 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,19)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,19)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,19)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :a - ├── message_loc: (1,0)-(1,1) = "a" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,2)-(1,10)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ LambdaNode (location: (1,2)-(1,10)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── operator_loc: (1,2)-(1,4) = "->" - │ ├── opening_loc: (1,5)-(1,6) = "{" - │ ├── closing_loc: (1,9)-(1,10) = "}" - │ ├── parameters: ∅ - │ └── body: - │ @ StatementsNode (location: (1,7)-(1,8)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ IntegerNode (location: (1,7)-(1,8)) - │ ├── flags: newline, static_literal, decimal - │ └── value: 1 - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,11)-(1,19)) - ├── flags: ∅ - ├── locals: [] - ├── parameters: ∅ - ├── body: - │ @ StatementsNode (location: (1,14)-(1,15)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ IntegerNode (location: (1,14)-(1,15)) - │ ├── flags: newline, static_literal, decimal - │ └── value: 2 - ├── opening_loc: (1,11)-(1,13) = "do" - └── closing_loc: (1,16)-(1,19) = "end" diff --git a/test/prism/snapshots/seattlerb/call_star.txt b/test/prism/snapshots/seattlerb/call_star.txt deleted file mode 100644 index 06bee81f30da40..00000000000000 --- a/test/prism/snapshots/seattlerb/call_star.txt +++ /dev/null @@ -1,26 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,5)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,5)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,5)) - ├── flags: newline - ├── receiver: - │ @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── call_operator_loc: ∅ - ├── name: :* - ├── message_loc: (1,2)-(1,3) = "*" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,4)-(1,5)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ IntegerNode (location: (1,4)-(1,5)) - │ ├── flags: static_literal, decimal - │ └── value: 2 - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_star2.txt b/test/prism/snapshots/seattlerb/call_star2.txt deleted file mode 100644 index bd367d2e758fc8..00000000000000 --- a/test/prism/snapshots/seattlerb/call_star2.txt +++ /dev/null @@ -1,26 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,6)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,6)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,6)) - ├── flags: newline - ├── receiver: - │ @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── call_operator_loc: ∅ - ├── name: :** - ├── message_loc: (1,2)-(1,4) = "**" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,5)-(1,6)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ IntegerNode (location: (1,5)-(1,6)) - │ ├── flags: static_literal, decimal - │ └── value: 2 - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_trailing_comma.txt b/test/prism/snapshots/seattlerb/call_trailing_comma.txt deleted file mode 100644 index 01cb77a25a060f..00000000000000 --- a/test/prism/snapshots/seattlerb/call_trailing_comma.txt +++ /dev/null @@ -1,23 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,5)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,5)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,5)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :f - ├── message_loc: (1,0)-(1,1) = "f" - ├── opening_loc: (1,1)-(1,2) = "(" - ├── arguments: - │ @ ArgumentsNode (location: (1,2)-(1,3)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ IntegerNode (location: (1,2)-(1,3)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── closing_loc: (1,4)-(1,5) = ")" - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_trailing_dots.txt b/test/prism/snapshots/seattlerb/call_trailing_dots.txt deleted file mode 100644 index 73ffd855ad8839..00000000000000 --- a/test/prism/snapshots/seattlerb/call_trailing_dots.txt +++ /dev/null @@ -1,37 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,1)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,1)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(3,1)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (1,0)-(2,1)) - │ ├── flags: ∅ - │ ├── receiver: - │ │ @ CallNode (location: (1,0)-(1,1)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (1,0)-(1,1) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (1,1)-(1,2) = "." - │ ├── name: :b - │ ├── message_loc: (2,0)-(2,1) = "b" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: (2,1)-(2,2) = "." - ├── name: :c - ├── message_loc: (3,0)-(3,1) = "c" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/call_unary_bang.txt b/test/prism/snapshots/seattlerb/call_unary_bang.txt deleted file mode 100644 index b08f0706930f40..00000000000000 --- a/test/prism/snapshots/seattlerb/call_unary_bang.txt +++ /dev/null @@ -1,20 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,2)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,2)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,2)) - ├── flags: newline - ├── receiver: - │ @ IntegerNode (location: (1,1)-(1,2)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── call_operator_loc: ∅ - ├── name: :! - ├── message_loc: (1,0)-(1,1) = "!" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/case_in.txt b/test/prism/snapshots/seattlerb/case_in.txt deleted file mode 100644 index 929cca0d38256d..00000000000000 --- a/test/prism/snapshots/seattlerb/case_in.txt +++ /dev/null @@ -1,1109 +0,0 @@ -@ ProgramNode (location: (1,0)-(111,3)) -├── flags: ∅ -├── locals: [:b, :_, :lhs, :x, :rhs, :c, :e] -└── statements: - @ StatementsNode (location: (1,0)-(111,3)) - ├── flags: ∅ - └── body: (length: 28) - ├── @ CaseMatchNode (location: (1,0)-(3,3)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ SymbolNode (location: (1,5)-(1,7)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (1,5)-(1,6) = ":" - │ │ ├── value_loc: (1,6)-(1,7) = "a" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "a" - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (2,0)-(2,8)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ HashPatternNode (location: (2,4)-(2,8)) - │ │ │ ├── flags: ∅ - │ │ │ ├── constant: ∅ - │ │ │ ├── elements: (length: 1) - │ │ │ │ └── @ AssocNode (location: (2,4)-(2,8)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── key: - │ │ │ │ │ @ SymbolNode (location: (2,4)-(2,8)) - │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ │ ├── opening_loc: (2,4)-(2,5) = "\"" - │ │ │ │ │ ├── value_loc: (2,5)-(2,6) = "b" - │ │ │ │ │ ├── closing_loc: (2,6)-(2,8) = "\":" - │ │ │ │ │ └── unescaped: "b" - │ │ │ │ ├── value: - │ │ │ │ │ @ ImplicitNode (location: (2,5)-(2,6)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── value: - │ │ │ │ │ @ LocalVariableTargetNode (location: (2,5)-(2,6)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── name: :b - │ │ │ │ │ └── depth: 0 - │ │ │ │ └── operator_loc: ∅ - │ │ │ ├── rest: ∅ - │ │ │ ├── opening_loc: ∅ - │ │ │ └── closing_loc: ∅ - │ │ ├── statements: ∅ - │ │ ├── in_loc: (2,0)-(2,2) = "in" - │ │ └── then_loc: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (1,0)-(1,4) = "case" - │ └── end_keyword_loc: (3,0)-(3,3) = "end" - ├── @ CaseMatchNode (location: (5,0)-(7,3)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ SymbolNode (location: (5,5)-(5,7)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (5,5)-(5,6) = ":" - │ │ ├── value_loc: (5,6)-(5,7) = "a" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "a" - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (6,0)-(6,10)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ ArrayNode (location: (6,3)-(6,10)) - │ │ │ ├── flags: static_literal - │ │ │ ├── elements: (length: 2) - │ │ │ │ ├── @ SymbolNode (location: (6,6)-(6,7)) - │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── value_loc: (6,6)-(6,7) = "a" - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── unescaped: "a" - │ │ │ │ └── @ SymbolNode (location: (6,8)-(6,9)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── value_loc: (6,8)-(6,9) = "b" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "b" - │ │ │ ├── opening_loc: (6,3)-(6,6) = "%I[" - │ │ │ └── closing_loc: (6,9)-(6,10) = "]" - │ │ ├── statements: ∅ - │ │ ├── in_loc: (6,0)-(6,2) = "in" - │ │ └── then_loc: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (5,0)-(5,4) = "case" - │ └── end_keyword_loc: (7,0)-(7,3) = "end" - ├── @ CaseMatchNode (location: (9,0)-(11,3)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ SymbolNode (location: (9,5)-(9,7)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (9,5)-(9,6) = ":" - │ │ ├── value_loc: (9,6)-(9,7) = "a" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "a" - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (10,0)-(10,10)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ ArrayNode (location: (10,3)-(10,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── elements: (length: 2) - │ │ │ │ ├── @ StringNode (location: (10,6)-(10,7)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── content_loc: (10,6)-(10,7) = "a" - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── unescaped: "a" - │ │ │ │ └── @ StringNode (location: (10,8)-(10,9)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── content_loc: (10,8)-(10,9) = "b" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "b" - │ │ │ ├── opening_loc: (10,3)-(10,6) = "%W[" - │ │ │ └── closing_loc: (10,9)-(10,10) = "]" - │ │ ├── statements: ∅ - │ │ ├── in_loc: (10,0)-(10,2) = "in" - │ │ └── then_loc: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (9,0)-(9,4) = "case" - │ └── end_keyword_loc: (11,0)-(11,3) = "end" - ├── @ CaseMatchNode (location: (13,0)-(15,3)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ SymbolNode (location: (13,5)-(13,7)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (13,5)-(13,6) = ":" - │ │ ├── value_loc: (13,6)-(13,7) = "a" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "a" - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (14,0)-(14,10)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ ArrayNode (location: (14,3)-(14,10)) - │ │ │ ├── flags: static_literal - │ │ │ ├── elements: (length: 2) - │ │ │ │ ├── @ SymbolNode (location: (14,6)-(14,7)) - │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── value_loc: (14,6)-(14,7) = "a" - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── unescaped: "a" - │ │ │ │ └── @ SymbolNode (location: (14,8)-(14,9)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── value_loc: (14,8)-(14,9) = "b" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "b" - │ │ │ ├── opening_loc: (14,3)-(14,6) = "%i[" - │ │ │ └── closing_loc: (14,9)-(14,10) = "]" - │ │ ├── statements: ∅ - │ │ ├── in_loc: (14,0)-(14,2) = "in" - │ │ └── then_loc: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (13,0)-(13,4) = "case" - │ └── end_keyword_loc: (15,0)-(15,3) = "end" - ├── @ CaseMatchNode (location: (17,0)-(19,3)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ SymbolNode (location: (17,5)-(17,7)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (17,5)-(17,6) = ":" - │ │ ├── value_loc: (17,6)-(17,7) = "a" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "a" - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (18,0)-(18,10)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ ArrayNode (location: (18,3)-(18,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── elements: (length: 2) - │ │ │ │ ├── @ StringNode (location: (18,6)-(18,7)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── content_loc: (18,6)-(18,7) = "a" - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── unescaped: "a" - │ │ │ │ └── @ StringNode (location: (18,8)-(18,9)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── content_loc: (18,8)-(18,9) = "b" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "b" - │ │ │ ├── opening_loc: (18,3)-(18,6) = "%w[" - │ │ │ └── closing_loc: (18,9)-(18,10) = "]" - │ │ ├── statements: ∅ - │ │ ├── in_loc: (18,0)-(18,2) = "in" - │ │ └── then_loc: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (17,0)-(17,4) = "case" - │ └── end_keyword_loc: (19,0)-(19,3) = "end" - ├── @ CaseMatchNode (location: (21,0)-(23,3)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ SymbolNode (location: (21,5)-(21,7)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (21,5)-(21,6) = ":" - │ │ ├── value_loc: (21,6)-(21,7) = "a" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "a" - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (22,0)-(22,10)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ ParenthesesNode (location: (22,3)-(22,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── body: - │ │ │ │ @ RangeNode (location: (22,4)-(22,9)) - │ │ │ │ ├── flags: static_literal, exclude_end - │ │ │ │ ├── left: ∅ - │ │ │ │ ├── right: - │ │ │ │ │ @ IntegerNode (location: (22,7)-(22,9)) - │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ └── value: 10 - │ │ │ │ └── operator_loc: (22,4)-(22,7) = "..." - │ │ │ ├── opening_loc: (22,3)-(22,4) = "(" - │ │ │ └── closing_loc: (22,9)-(22,10) = ")" - │ │ ├── statements: ∅ - │ │ ├── in_loc: (22,0)-(22,2) = "in" - │ │ └── then_loc: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (21,0)-(21,4) = "case" - │ └── end_keyword_loc: (23,0)-(23,3) = "end" - ├── @ CaseMatchNode (location: (25,0)-(27,3)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ SymbolNode (location: (25,5)-(25,7)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (25,5)-(25,6) = ":" - │ │ ├── value_loc: (25,6)-(25,7) = "a" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "a" - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (26,0)-(26,9)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ ParenthesesNode (location: (26,3)-(26,9)) - │ │ │ ├── flags: ∅ - │ │ │ ├── body: - │ │ │ │ @ RangeNode (location: (26,4)-(26,8)) - │ │ │ │ ├── flags: static_literal - │ │ │ │ ├── left: ∅ - │ │ │ │ ├── right: - │ │ │ │ │ @ IntegerNode (location: (26,6)-(26,8)) - │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ └── value: 10 - │ │ │ │ └── operator_loc: (26,4)-(26,6) = ".." - │ │ │ ├── opening_loc: (26,3)-(26,4) = "(" - │ │ │ └── closing_loc: (26,8)-(26,9) = ")" - │ │ ├── statements: ∅ - │ │ ├── in_loc: (26,0)-(26,2) = "in" - │ │ └── then_loc: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (25,0)-(25,4) = "case" - │ └── end_keyword_loc: (27,0)-(27,3) = "end" - ├── @ CaseMatchNode (location: (29,0)-(31,3)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ SymbolNode (location: (29,5)-(29,7)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (29,5)-(29,6) = ":" - │ │ ├── value_loc: (29,6)-(29,7) = "a" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "a" - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (30,0)-(30,9)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ ParenthesesNode (location: (30,3)-(30,9)) - │ │ │ ├── flags: ∅ - │ │ │ ├── body: - │ │ │ │ @ RangeNode (location: (30,4)-(30,8)) - │ │ │ │ ├── flags: static_literal, exclude_end - │ │ │ │ ├── left: - │ │ │ │ │ @ IntegerNode (location: (30,4)-(30,5)) - │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ └── value: 1 - │ │ │ │ ├── right: ∅ - │ │ │ │ └── operator_loc: (30,5)-(30,8) = "..." - │ │ │ ├── opening_loc: (30,3)-(30,4) = "(" - │ │ │ └── closing_loc: (30,8)-(30,9) = ")" - │ │ ├── statements: ∅ - │ │ ├── in_loc: (30,0)-(30,2) = "in" - │ │ └── then_loc: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (29,0)-(29,4) = "case" - │ └── end_keyword_loc: (31,0)-(31,3) = "end" - ├── @ CaseMatchNode (location: (33,0)-(35,3)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ SymbolNode (location: (33,5)-(33,7)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (33,5)-(33,6) = ":" - │ │ ├── value_loc: (33,6)-(33,7) = "a" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "a" - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (34,0)-(34,10)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ ParenthesesNode (location: (34,3)-(34,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── body: - │ │ │ │ @ RangeNode (location: (34,4)-(34,9)) - │ │ │ │ ├── flags: static_literal, exclude_end - │ │ │ │ ├── left: - │ │ │ │ │ @ IntegerNode (location: (34,4)-(34,5)) - │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ └── value: 1 - │ │ │ │ ├── right: - │ │ │ │ │ @ IntegerNode (location: (34,8)-(34,9)) - │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ └── value: 3 - │ │ │ │ └── operator_loc: (34,5)-(34,8) = "..." - │ │ │ ├── opening_loc: (34,3)-(34,4) = "(" - │ │ │ └── closing_loc: (34,9)-(34,10) = ")" - │ │ ├── statements: ∅ - │ │ ├── in_loc: (34,0)-(34,2) = "in" - │ │ └── then_loc: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (33,0)-(33,4) = "case" - │ └── end_keyword_loc: (35,0)-(35,3) = "end" - ├── @ CaseMatchNode (location: (37,0)-(39,3)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ SymbolNode (location: (37,5)-(37,7)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (37,5)-(37,6) = ":" - │ │ ├── value_loc: (37,6)-(37,7) = "a" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "a" - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (38,0)-(38,7)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ ParenthesesNode (location: (38,3)-(38,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── body: - │ │ │ │ @ IntegerNode (location: (38,4)-(38,6)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 42 - │ │ │ ├── opening_loc: (38,3)-(38,4) = "(" - │ │ │ └── closing_loc: (38,6)-(38,7) = ")" - │ │ ├── statements: ∅ - │ │ ├── in_loc: (38,0)-(38,2) = "in" - │ │ └── then_loc: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (37,0)-(37,4) = "case" - │ └── end_keyword_loc: (39,0)-(39,3) = "end" - ├── @ CaseMatchNode (location: (41,0)-(43,3)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ SymbolNode (location: (41,5)-(41,7)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (41,5)-(41,6) = ":" - │ │ ├── value_loc: (41,6)-(41,7) = "a" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "a" - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (42,0)-(42,8)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ HashPatternNode (location: (42,3)-(42,8)) - │ │ │ ├── flags: ∅ - │ │ │ ├── constant: ∅ - │ │ │ ├── elements: (length: 0) - │ │ │ ├── rest: - │ │ │ │ @ NoKeywordsParameterNode (location: (42,3)-(42,8)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── operator_loc: (42,3)-(42,5) = "**" - │ │ │ │ └── keyword_loc: (42,5)-(42,8) = "nil" - │ │ │ ├── opening_loc: ∅ - │ │ │ └── closing_loc: ∅ - │ │ ├── statements: ∅ - │ │ ├── in_loc: (42,0)-(42,2) = "in" - │ │ └── then_loc: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (41,0)-(41,4) = "case" - │ └── end_keyword_loc: (43,0)-(43,3) = "end" - ├── @ CaseMatchNode (location: (45,0)-(47,3)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ SymbolNode (location: (45,5)-(45,7)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (45,5)-(45,6) = ":" - │ │ ├── value_loc: (45,6)-(45,7) = "a" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "a" - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (46,0)-(46,11)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ RegularExpressionNode (location: (46,3)-(46,11)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (46,3)-(46,4) = "/" - │ │ │ ├── content_loc: (46,4)-(46,10) = "regexp" - │ │ │ ├── closing_loc: (46,10)-(46,11) = "/" - │ │ │ └── unescaped: "regexp" - │ │ ├── statements: ∅ - │ │ ├── in_loc: (46,0)-(46,2) = "in" - │ │ └── then_loc: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (45,0)-(45,4) = "case" - │ └── end_keyword_loc: (47,0)-(47,3) = "end" - ├── @ CaseMatchNode (location: (49,0)-(51,3)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ SymbolNode (location: (49,5)-(49,7)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (49,5)-(49,6) = ":" - │ │ ├── value_loc: (49,6)-(49,7) = "a" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "a" - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (50,0)-(50,13)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ ArrayPatternNode (location: (50,3)-(50,13)) - │ │ │ ├── flags: ∅ - │ │ │ ├── constant: ∅ - │ │ │ ├── requireds: (length: 1) - │ │ │ │ └── @ SymbolNode (location: (50,3)-(50,5)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: (50,3)-(50,4) = ":" - │ │ │ │ ├── value_loc: (50,4)-(50,5) = "b" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "b" - │ │ │ ├── rest: - │ │ │ │ @ SplatNode (location: (50,7)-(50,9)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── operator_loc: (50,7)-(50,8) = "*" - │ │ │ │ └── expression: - │ │ │ │ @ LocalVariableTargetNode (location: (50,8)-(50,9)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :_ - │ │ │ │ └── depth: 0 - │ │ │ ├── posts: (length: 1) - │ │ │ │ └── @ SymbolNode (location: (50,11)-(50,13)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: (50,11)-(50,12) = ":" - │ │ │ │ ├── value_loc: (50,12)-(50,13) = "c" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "c" - │ │ │ ├── opening_loc: ∅ - │ │ │ └── closing_loc: ∅ - │ │ ├── statements: ∅ - │ │ ├── in_loc: (50,0)-(50,2) = "in" - │ │ └── then_loc: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (49,0)-(49,4) = "case" - │ └── end_keyword_loc: (51,0)-(51,3) = "end" - ├── @ CaseMatchNode (location: (53,0)-(55,3)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ SymbolNode (location: (53,5)-(53,7)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (53,5)-(53,6) = ":" - │ │ ├── value_loc: (53,6)-(53,7) = "a" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "a" - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (54,0)-(54,11)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ ArrayPatternNode (location: (54,3)-(54,11)) - │ │ │ ├── flags: ∅ - │ │ │ ├── constant: ∅ - │ │ │ ├── requireds: (length: 2) - │ │ │ │ ├── @ SymbolNode (location: (54,3)-(54,5)) - │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ │ ├── opening_loc: (54,3)-(54,4) = ":" - │ │ │ │ │ ├── value_loc: (54,4)-(54,5) = "b" - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── unescaped: "b" - │ │ │ │ └── @ ArrayPatternNode (location: (54,7)-(54,11)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── constant: ∅ - │ │ │ │ ├── requireds: (length: 1) - │ │ │ │ │ └── @ SymbolNode (location: (54,8)-(54,10)) - │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ │ ├── opening_loc: (54,8)-(54,9) = ":" - │ │ │ │ │ ├── value_loc: (54,9)-(54,10) = "c" - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── unescaped: "c" - │ │ │ │ ├── rest: ∅ - │ │ │ │ ├── posts: (length: 0) - │ │ │ │ ├── opening_loc: (54,7)-(54,8) = "[" - │ │ │ │ └── closing_loc: (54,10)-(54,11) = "]" - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── opening_loc: ∅ - │ │ │ └── closing_loc: ∅ - │ │ ├── statements: ∅ - │ │ ├── in_loc: (54,0)-(54,2) = "in" - │ │ └── then_loc: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (53,0)-(53,4) = "case" - │ └── end_keyword_loc: (55,0)-(55,3) = "end" - ├── @ CaseMatchNode (location: (57,0)-(59,3)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ SymbolNode (location: (57,5)-(57,7)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (57,5)-(57,6) = ":" - │ │ ├── value_loc: (57,6)-(57,7) = "a" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "a" - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (58,0)-(58,11)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ ArrayPatternNode (location: (58,3)-(58,11)) - │ │ │ ├── flags: ∅ - │ │ │ ├── constant: - │ │ │ │ @ ConstantReadNode (location: (58,3)-(58,9)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :Symbol - │ │ │ ├── requireds: (length: 0) - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── opening_loc: (58,9)-(58,10) = "(" - │ │ │ └── closing_loc: (58,10)-(58,11) = ")" - │ │ ├── statements: ∅ - │ │ ├── in_loc: (58,0)-(58,2) = "in" - │ │ └── then_loc: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (57,0)-(57,4) = "case" - │ └── end_keyword_loc: (59,0)-(59,3) = "end" - ├── @ CaseMatchNode (location: (61,0)-(63,3)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ SymbolNode (location: (61,5)-(61,7)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (61,5)-(61,6) = ":" - │ │ ├── value_loc: (61,6)-(61,7) = "a" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "a" - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (62,0)-(62,24)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ FindPatternNode (location: (62,3)-(62,24)) - │ │ │ ├── flags: ∅ - │ │ │ ├── constant: - │ │ │ │ @ ConstantReadNode (location: (62,3)-(62,9)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :Symbol - │ │ │ ├── left: - │ │ │ │ @ SplatNode (location: (62,10)-(62,14)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── operator_loc: (62,10)-(62,11) = "*" - │ │ │ │ └── expression: - │ │ │ │ @ LocalVariableTargetNode (location: (62,11)-(62,14)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :lhs - │ │ │ │ └── depth: 0 - │ │ │ ├── requireds: (length: 1) - │ │ │ │ └── @ LocalVariableTargetNode (location: (62,16)-(62,17)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :x - │ │ │ │ └── depth: 0 - │ │ │ ├── right: - │ │ │ │ @ SplatNode (location: (62,19)-(62,23)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── operator_loc: (62,19)-(62,20) = "*" - │ │ │ │ └── expression: - │ │ │ │ @ LocalVariableTargetNode (location: (62,20)-(62,23)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :rhs - │ │ │ │ └── depth: 0 - │ │ │ ├── opening_loc: (62,9)-(62,10) = "(" - │ │ │ └── closing_loc: (62,23)-(62,24) = ")" - │ │ ├── statements: ∅ - │ │ ├── in_loc: (62,0)-(62,2) = "in" - │ │ └── then_loc: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (61,0)-(61,4) = "case" - │ └── end_keyword_loc: (63,0)-(63,3) = "end" - ├── @ CaseMatchNode (location: (65,0)-(67,3)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ SymbolNode (location: (65,5)-(65,7)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (65,5)-(65,6) = ":" - │ │ ├── value_loc: (65,6)-(65,7) = "a" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "a" - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (66,0)-(66,24)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ FindPatternNode (location: (66,3)-(66,24)) - │ │ │ ├── flags: ∅ - │ │ │ ├── constant: - │ │ │ │ @ ConstantReadNode (location: (66,3)-(66,9)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :Symbol - │ │ │ ├── left: - │ │ │ │ @ SplatNode (location: (66,10)-(66,14)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── operator_loc: (66,10)-(66,11) = "*" - │ │ │ │ └── expression: - │ │ │ │ @ LocalVariableTargetNode (location: (66,11)-(66,14)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :lhs - │ │ │ │ └── depth: 0 - │ │ │ ├── requireds: (length: 1) - │ │ │ │ └── @ LocalVariableTargetNode (location: (66,16)-(66,17)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :x - │ │ │ │ └── depth: 0 - │ │ │ ├── right: - │ │ │ │ @ SplatNode (location: (66,19)-(66,23)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── operator_loc: (66,19)-(66,20) = "*" - │ │ │ │ └── expression: - │ │ │ │ @ LocalVariableTargetNode (location: (66,20)-(66,23)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :rhs - │ │ │ │ └── depth: 0 - │ │ │ ├── opening_loc: (66,9)-(66,10) = "[" - │ │ │ └── closing_loc: (66,23)-(66,24) = "]" - │ │ ├── statements: ∅ - │ │ ├── in_loc: (66,0)-(66,2) = "in" - │ │ └── then_loc: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (65,0)-(65,4) = "case" - │ └── end_keyword_loc: (67,0)-(67,3) = "end" - ├── @ CaseMatchNode (location: (69,0)-(71,3)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ SymbolNode (location: (69,5)-(69,7)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (69,5)-(69,6) = ":" - │ │ ├── value_loc: (69,6)-(69,7) = "a" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "a" - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (70,0)-(70,22)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ ArrayPatternNode (location: (70,3)-(70,22)) - │ │ │ ├── flags: ∅ - │ │ │ ├── constant: ∅ - │ │ │ ├── requireds: (length: 2) - │ │ │ │ ├── @ LambdaNode (location: (70,4)-(70,18)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── locals: [:b] - │ │ │ │ │ ├── operator_loc: (70,4)-(70,6) = "->" - │ │ │ │ │ ├── opening_loc: (70,10)-(70,11) = "{" - │ │ │ │ │ ├── closing_loc: (70,17)-(70,18) = "}" - │ │ │ │ │ ├── parameters: - │ │ │ │ │ │ @ BlockParametersNode (location: (70,6)-(70,9)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ ├── parameters: - │ │ │ │ │ │ │ @ ParametersNode (location: (70,7)-(70,8)) - │ │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ │ ├── requireds: (length: 1) - │ │ │ │ │ │ │ │ └── @ RequiredParameterNode (location: (70,7)-(70,8)) - │ │ │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ │ │ └── name: :b - │ │ │ │ │ │ │ ├── optionals: (length: 0) - │ │ │ │ │ │ │ ├── rest: ∅ - │ │ │ │ │ │ │ ├── posts: (length: 0) - │ │ │ │ │ │ │ ├── keywords: (length: 0) - │ │ │ │ │ │ │ ├── keyword_rest: ∅ - │ │ │ │ │ │ │ └── block: ∅ - │ │ │ │ │ │ ├── locals: (length: 0) - │ │ │ │ │ │ ├── opening_loc: (70,6)-(70,7) = "(" - │ │ │ │ │ │ └── closing_loc: (70,8)-(70,9) = ")" - │ │ │ │ │ └── body: - │ │ │ │ │ @ StatementsNode (location: (70,12)-(70,16)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── body: (length: 1) - │ │ │ │ │ └── @ TrueNode (location: (70,12)-(70,16)) - │ │ │ │ │ └── flags: newline, static_literal - │ │ │ │ └── @ LocalVariableTargetNode (location: (70,20)-(70,21)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :c - │ │ │ │ └── depth: 0 - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── opening_loc: (70,3)-(70,4) = "[" - │ │ │ └── closing_loc: (70,21)-(70,22) = "]" - │ │ ├── statements: ∅ - │ │ ├── in_loc: (70,0)-(70,2) = "in" - │ │ └── then_loc: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (69,0)-(69,4) = "case" - │ └── end_keyword_loc: (71,0)-(71,3) = "end" - ├── @ CaseMatchNode (location: (73,0)-(75,3)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ SymbolNode (location: (73,5)-(73,7)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (73,5)-(73,6) = ":" - │ │ ├── value_loc: (73,6)-(73,7) = "a" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "a" - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (74,0)-(74,28)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ ArrayPatternNode (location: (74,3)-(74,28)) - │ │ │ ├── flags: ∅ - │ │ │ ├── constant: ∅ - │ │ │ ├── requireds: (length: 4) - │ │ │ │ ├── @ SymbolNode (location: (74,4)-(74,6)) - │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ │ ├── opening_loc: (74,4)-(74,5) = ":" - │ │ │ │ │ ├── value_loc: (74,5)-(74,6) = "a" - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── unescaped: "a" - │ │ │ │ ├── @ LocalVariableTargetNode (location: (74,8)-(74,9)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── name: :b - │ │ │ │ │ └── depth: 0 - │ │ │ │ ├── @ LocalVariableTargetNode (location: (74,11)-(74,12)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── name: :c - │ │ │ │ │ └── depth: 0 - │ │ │ │ └── @ ArrayPatternNode (location: (74,14)-(74,27)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── constant: ∅ - │ │ │ │ ├── requireds: (length: 1) - │ │ │ │ │ └── @ SymbolNode (location: (74,15)-(74,17)) - │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ │ ├── opening_loc: (74,15)-(74,16) = ":" - │ │ │ │ │ ├── value_loc: (74,16)-(74,17) = "d" - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── unescaped: "d" - │ │ │ │ ├── rest: - │ │ │ │ │ @ SplatNode (location: (74,19)-(74,21)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── operator_loc: (74,19)-(74,20) = "*" - │ │ │ │ │ └── expression: - │ │ │ │ │ @ LocalVariableTargetNode (location: (74,20)-(74,21)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── name: :e - │ │ │ │ │ └── depth: 0 - │ │ │ │ ├── posts: (length: 1) - │ │ │ │ │ └── @ NilNode (location: (74,23)-(74,26)) - │ │ │ │ │ └── flags: static_literal - │ │ │ │ ├── opening_loc: (74,14)-(74,15) = "[" - │ │ │ │ └── closing_loc: (74,26)-(74,27) = "]" - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── opening_loc: (74,3)-(74,4) = "[" - │ │ │ └── closing_loc: (74,27)-(74,28) = "]" - │ │ ├── statements: ∅ - │ │ ├── in_loc: (74,0)-(74,2) = "in" - │ │ └── then_loc: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (73,0)-(73,4) = "case" - │ └── end_keyword_loc: (75,0)-(75,3) = "end" - ├── @ CaseMatchNode (location: (77,0)-(79,3)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ SymbolNode (location: (77,5)-(77,7)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (77,5)-(77,6) = ":" - │ │ ├── value_loc: (77,6)-(77,7) = "a" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "a" - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (78,0)-(78,12)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ ArrayPatternNode (location: (78,3)-(78,12)) - │ │ │ ├── flags: ∅ - │ │ │ ├── constant: ∅ - │ │ │ ├── requireds: (length: 1) - │ │ │ │ └── @ ConstantReadNode (location: (78,4)-(78,5)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :A - │ │ │ ├── rest: - │ │ │ │ @ SplatNode (location: (78,7)-(78,8)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── operator_loc: (78,7)-(78,8) = "*" - │ │ │ │ └── expression: ∅ - │ │ │ ├── posts: (length: 1) - │ │ │ │ └── @ ConstantReadNode (location: (78,10)-(78,11)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :B - │ │ │ ├── opening_loc: (78,3)-(78,4) = "[" - │ │ │ └── closing_loc: (78,11)-(78,12) = "]" - │ │ ├── statements: ∅ - │ │ ├── in_loc: (78,0)-(78,2) = "in" - │ │ └── then_loc: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (77,0)-(77,4) = "case" - │ └── end_keyword_loc: (79,0)-(79,3) = "end" - ├── @ CaseMatchNode (location: (81,0)-(83,3)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ SymbolNode (location: (81,5)-(81,7)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (81,5)-(81,6) = ":" - │ │ ├── value_loc: (81,6)-(81,7) = "a" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "a" - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (82,0)-(82,22)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ ArrayPatternNode (location: (82,3)-(82,22)) - │ │ │ ├── flags: ∅ - │ │ │ ├── constant: ∅ - │ │ │ ├── requireds: (length: 2) - │ │ │ │ ├── @ ArrayPatternNode (location: (82,4)-(82,11)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── constant: ∅ - │ │ │ │ │ ├── requireds: (length: 2) - │ │ │ │ │ │ ├── @ SymbolNode (location: (82,5)-(82,7)) - │ │ │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ │ │ │ ├── opening_loc: (82,5)-(82,6) = ":" - │ │ │ │ │ │ │ ├── value_loc: (82,6)-(82,7) = "b" - │ │ │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ │ │ └── unescaped: "b" - │ │ │ │ │ │ └── @ LocalVariableTargetNode (location: (82,9)-(82,10)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ ├── name: :c - │ │ │ │ │ │ └── depth: 0 - │ │ │ │ │ ├── rest: ∅ - │ │ │ │ │ ├── posts: (length: 0) - │ │ │ │ │ ├── opening_loc: (82,4)-(82,5) = "[" - │ │ │ │ │ └── closing_loc: (82,10)-(82,11) = "]" - │ │ │ │ └── @ ArrayPatternNode (location: (82,13)-(82,21)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── constant: ∅ - │ │ │ │ ├── requireds: (length: 2) - │ │ │ │ │ ├── @ SymbolNode (location: (82,14)-(82,16)) - │ │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ │ │ ├── opening_loc: (82,14)-(82,15) = ":" - │ │ │ │ │ │ ├── value_loc: (82,15)-(82,16) = "d" - │ │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ │ └── unescaped: "d" - │ │ │ │ │ └── @ PinnedVariableNode (location: (82,18)-(82,20)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── variable: - │ │ │ │ │ │ @ LocalVariableReadNode (location: (82,19)-(82,20)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ ├── name: :e - │ │ │ │ │ │ └── depth: 0 - │ │ │ │ │ └── operator_loc: (82,18)-(82,19) = "^" - │ │ │ │ ├── rest: ∅ - │ │ │ │ ├── posts: (length: 0) - │ │ │ │ ├── opening_loc: (82,13)-(82,14) = "[" - │ │ │ │ └── closing_loc: (82,20)-(82,21) = "]" - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── opening_loc: (82,3)-(82,4) = "[" - │ │ │ └── closing_loc: (82,21)-(82,22) = "]" - │ │ ├── statements: ∅ - │ │ ├── in_loc: (82,0)-(82,2) = "in" - │ │ └── then_loc: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (81,0)-(81,4) = "case" - │ └── end_keyword_loc: (83,0)-(83,3) = "end" - ├── @ CaseMatchNode (location: (85,0)-(87,3)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ SymbolNode (location: (85,5)-(85,7)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (85,5)-(85,6) = ":" - │ │ ├── value_loc: (85,6)-(85,7) = "a" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "a" - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (86,0)-(86,5)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ ArrayPatternNode (location: (86,3)-(86,5)) - │ │ │ ├── flags: ∅ - │ │ │ ├── constant: ∅ - │ │ │ ├── requireds: (length: 0) - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── opening_loc: (86,3)-(86,4) = "[" - │ │ │ └── closing_loc: (86,4)-(86,5) = "]" - │ │ ├── statements: ∅ - │ │ ├── in_loc: (86,0)-(86,2) = "in" - │ │ └── then_loc: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (85,0)-(85,4) = "case" - │ └── end_keyword_loc: (87,0)-(87,3) = "end" - ├── @ CaseMatchNode (location: (89,0)-(91,3)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ SymbolNode (location: (89,5)-(89,7)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (89,5)-(89,6) = ":" - │ │ ├── value_loc: (89,6)-(89,7) = "a" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "a" - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (90,0)-(90,9)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ ArrayPatternNode (location: (90,3)-(90,9)) - │ │ │ ├── flags: ∅ - │ │ │ ├── constant: ∅ - │ │ │ ├── requireds: (length: 1) - │ │ │ │ └── @ PinnedExpressionNode (location: (90,4)-(90,8)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── expression: - │ │ │ │ │ @ CallNode (location: (90,6)-(90,7)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :a - │ │ │ │ │ ├── message_loc: (90,6)-(90,7) = "a" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── operator_loc: (90,4)-(90,5) = "^" - │ │ │ │ ├── lparen_loc: (90,5)-(90,6) = "(" - │ │ │ │ └── rparen_loc: (90,7)-(90,8) = ")" - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── opening_loc: (90,3)-(90,4) = "[" - │ │ │ └── closing_loc: (90,8)-(90,9) = "]" - │ │ ├── statements: ∅ - │ │ ├── in_loc: (90,0)-(90,2) = "in" - │ │ └── then_loc: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (89,0)-(89,4) = "case" - │ └── end_keyword_loc: (91,0)-(91,3) = "end" - ├── @ CaseMatchNode (location: (93,0)-(95,3)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ SymbolNode (location: (93,5)-(93,7)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (93,5)-(93,6) = ":" - │ │ ├── value_loc: (93,6)-(93,7) = "a" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "a" - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (94,0)-(94,19)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ ArrayPatternNode (location: (94,3)-(94,19)) - │ │ │ ├── flags: ∅ - │ │ │ ├── constant: ∅ - │ │ │ ├── requireds: (length: 3) - │ │ │ │ ├── @ PinnedVariableNode (location: (94,4)-(94,7)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── variable: - │ │ │ │ │ │ @ InstanceVariableReadNode (location: (94,5)-(94,7)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ └── name: :@a - │ │ │ │ │ └── operator_loc: (94,4)-(94,5) = "^" - │ │ │ │ ├── @ PinnedVariableNode (location: (94,9)-(94,12)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── variable: - │ │ │ │ │ │ @ GlobalVariableReadNode (location: (94,10)-(94,12)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ └── name: :$b - │ │ │ │ │ └── operator_loc: (94,9)-(94,10) = "^" - │ │ │ │ └── @ PinnedVariableNode (location: (94,14)-(94,18)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── variable: - │ │ │ │ │ @ ClassVariableReadNode (location: (94,15)-(94,18)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── name: :@@c - │ │ │ │ └── operator_loc: (94,14)-(94,15) = "^" - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── opening_loc: (94,3)-(94,4) = "[" - │ │ │ └── closing_loc: (94,18)-(94,19) = "]" - │ │ ├── statements: ∅ - │ │ ├── in_loc: (94,0)-(94,2) = "in" - │ │ └── then_loc: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (93,0)-(93,4) = "case" - │ └── end_keyword_loc: (95,0)-(95,3) = "end" - ├── @ CaseMatchNode (location: (97,0)-(99,3)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ SymbolNode (location: (97,5)-(97,7)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (97,5)-(97,6) = ":" - │ │ ├── value_loc: (97,6)-(97,7) = "a" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "a" - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (98,0)-(98,12)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ XStringNode (location: (98,3)-(98,12)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (98,3)-(98,4) = "`" - │ │ │ ├── content_loc: (98,4)-(98,11) = "echo hi" - │ │ │ ├── closing_loc: (98,11)-(98,12) = "`" - │ │ │ └── unescaped: "echo hi" - │ │ ├── statements: ∅ - │ │ ├── in_loc: (98,0)-(98,2) = "in" - │ │ └── then_loc: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (97,0)-(97,4) = "case" - │ └── end_keyword_loc: (99,0)-(99,3) = "end" - ├── @ CaseMatchNode (location: (101,0)-(103,3)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ SymbolNode (location: (101,5)-(101,7)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (101,5)-(101,6) = ":" - │ │ ├── value_loc: (101,6)-(101,7) = "a" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "a" - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (102,0)-(102,16)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ ArrayPatternNode (location: (102,3)-(102,16)) - │ │ │ ├── flags: ∅ - │ │ │ ├── constant: ∅ - │ │ │ ├── requireds: (length: 3) - │ │ │ │ ├── @ NilNode (location: (102,3)-(102,6)) - │ │ │ │ │ └── flags: static_literal - │ │ │ │ ├── @ NilNode (location: (102,8)-(102,11)) - │ │ │ │ │ └── flags: static_literal - │ │ │ │ └── @ NilNode (location: (102,13)-(102,16)) - │ │ │ │ └── flags: static_literal - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── opening_loc: ∅ - │ │ │ └── closing_loc: ∅ - │ │ ├── statements: ∅ - │ │ ├── in_loc: (102,0)-(102,2) = "in" - │ │ └── then_loc: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (101,0)-(101,4) = "case" - │ └── end_keyword_loc: (103,0)-(103,3) = "end" - ├── @ CaseMatchNode (location: (105,0)-(107,3)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ SymbolNode (location: (105,5)-(105,7)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (105,5)-(105,6) = ":" - │ │ ├── value_loc: (105,6)-(105,7) = "a" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "a" - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (106,0)-(106,11)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ HashPatternNode (location: (106,3)-(106,11)) - │ │ │ ├── flags: ∅ - │ │ │ ├── constant: ∅ - │ │ │ ├── elements: (length: 1) - │ │ │ │ └── @ AssocNode (location: (106,5)-(106,9)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── key: - │ │ │ │ │ @ SymbolNode (location: (106,5)-(106,9)) - │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ │ ├── opening_loc: (106,5)-(106,6) = "\"" - │ │ │ │ │ ├── value_loc: (106,6)-(106,7) = "b" - │ │ │ │ │ ├── closing_loc: (106,7)-(106,9) = "\":" - │ │ │ │ │ └── unescaped: "b" - │ │ │ │ ├── value: - │ │ │ │ │ @ ImplicitNode (location: (106,6)-(106,7)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── value: - │ │ │ │ │ @ LocalVariableTargetNode (location: (106,6)-(106,7)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── name: :b - │ │ │ │ │ └── depth: 0 - │ │ │ │ └── operator_loc: ∅ - │ │ │ ├── rest: ∅ - │ │ │ ├── opening_loc: (106,3)-(106,4) = "{" - │ │ │ └── closing_loc: (106,10)-(106,11) = "}" - │ │ ├── statements: ∅ - │ │ ├── in_loc: (106,0)-(106,2) = "in" - │ │ └── then_loc: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (105,0)-(105,4) = "case" - │ └── end_keyword_loc: (107,0)-(107,3) = "end" - └── @ CaseMatchNode (location: (109,0)-(111,3)) - ├── flags: newline - ├── predicate: - │ @ SymbolNode (location: (109,5)-(109,7)) - │ ├── flags: static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (109,5)-(109,6) = ":" - │ ├── value_loc: (109,6)-(109,7) = "a" - │ ├── closing_loc: ∅ - │ └── unescaped: "a" - ├── conditions: (length: 1) - │ └── @ InNode (location: (110,0)-(110,5)) - │ ├── flags: ∅ - │ ├── pattern: - │ │ @ HashPatternNode (location: (110,3)-(110,5)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── elements: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── opening_loc: (110,3)-(110,4) = "{" - │ │ └── closing_loc: (110,4)-(110,5) = "}" - │ ├── statements: ∅ - │ ├── in_loc: (110,0)-(110,2) = "in" - │ └── then_loc: ∅ - ├── else_clause: ∅ - ├── case_keyword_loc: (109,0)-(109,4) = "case" - └── end_keyword_loc: (111,0)-(111,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_31.txt b/test/prism/snapshots/seattlerb/case_in_31.txt deleted file mode 100644 index 4abddbcdced444..00000000000000 --- a/test/prism/snapshots/seattlerb/case_in_31.txt +++ /dev/null @@ -1,57 +0,0 @@ -@ ProgramNode (location: (1,0)-(4,3)) -├── flags: ∅ -├── locals: [:c] -└── statements: - @ StatementsNode (location: (1,0)-(4,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CaseMatchNode (location: (1,0)-(4,3)) - ├── flags: newline - ├── predicate: - │ @ SymbolNode (location: (1,5)-(1,7)) - │ ├── flags: static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (1,5)-(1,6) = ":" - │ ├── value_loc: (1,6)-(1,7) = "a" - │ ├── closing_loc: ∅ - │ └── unescaped: "a" - ├── conditions: (length: 1) - │ └── @ InNode (location: (2,0)-(3,4)) - │ ├── flags: ∅ - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (2,3)-(2,11)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ SymbolNode (location: (2,4)-(2,6)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (2,4)-(2,5) = ":" - │ │ │ ├── value_loc: (2,5)-(2,6) = "b" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "b" - │ │ ├── rest: - │ │ │ @ SplatNode (location: (2,8)-(2,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (2,8)-(2,9) = "*" - │ │ │ └── expression: - │ │ │ @ LocalVariableTargetNode (location: (2,9)-(2,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :c - │ │ │ └── depth: 0 - │ │ ├── posts: (length: 0) - │ │ ├── opening_loc: (2,3)-(2,4) = "[" - │ │ └── closing_loc: (2,10)-(2,11) = "]" - │ ├── statements: - │ │ @ StatementsNode (location: (3,2)-(3,4)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ SymbolNode (location: (3,2)-(3,4)) - │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (3,2)-(3,3) = ":" - │ │ ├── value_loc: (3,3)-(3,4) = "d" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "d" - │ ├── in_loc: (2,0)-(2,2) = "in" - │ └── then_loc: ∅ - ├── else_clause: ∅ - ├── case_keyword_loc: (1,0)-(1,4) = "case" - └── end_keyword_loc: (4,0)-(4,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_37.txt b/test/prism/snapshots/seattlerb/case_in_37.txt deleted file mode 100644 index 5ef6d916af5d51..00000000000000 --- a/test/prism/snapshots/seattlerb/case_in_37.txt +++ /dev/null @@ -1,68 +0,0 @@ -@ ProgramNode (location: (1,0)-(4,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(4,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CaseMatchNode (location: (1,0)-(4,3)) - ├── flags: newline - ├── predicate: - │ @ SymbolNode (location: (1,5)-(1,7)) - │ ├── flags: static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (1,5)-(1,6) = ":" - │ ├── value_loc: (1,6)-(1,7) = "a" - │ ├── closing_loc: ∅ - │ └── unescaped: "a" - ├── conditions: (length: 1) - │ └── @ InNode (location: (2,0)-(3,4)) - │ ├── flags: ∅ - │ ├── pattern: - │ │ @ HashPatternNode (location: (2,3)-(2,19)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── elements: (length: 1) - │ │ │ └── @ AssocNode (location: (2,5)-(2,17)) - │ │ │ ├── flags: ∅ - │ │ │ ├── key: - │ │ │ │ @ SymbolNode (location: (2,5)-(2,7)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── value_loc: (2,5)-(2,6) = "b" - │ │ │ │ ├── closing_loc: (2,6)-(2,7) = ":" - │ │ │ │ └── unescaped: "b" - │ │ │ ├── value: - │ │ │ │ @ ArrayPatternNode (location: (2,8)-(2,17)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── constant: ∅ - │ │ │ │ ├── requireds: (length: 1) - │ │ │ │ │ └── @ ConstantReadNode (location: (2,9)-(2,13)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── name: :Hash - │ │ │ │ ├── rest: - │ │ │ │ │ @ SplatNode (location: (2,15)-(2,16)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── operator_loc: (2,15)-(2,16) = "*" - │ │ │ │ │ └── expression: ∅ - │ │ │ │ ├── posts: (length: 0) - │ │ │ │ ├── opening_loc: (2,8)-(2,9) = "[" - │ │ │ │ └── closing_loc: (2,16)-(2,17) = "]" - │ │ │ └── operator_loc: ∅ - │ │ ├── rest: ∅ - │ │ ├── opening_loc: (2,3)-(2,4) = "{" - │ │ └── closing_loc: (2,18)-(2,19) = "}" - │ ├── statements: - │ │ @ StatementsNode (location: (3,2)-(3,4)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ SymbolNode (location: (3,2)-(3,4)) - │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (3,2)-(3,3) = ":" - │ │ ├── value_loc: (3,3)-(3,4) = "c" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "c" - │ ├── in_loc: (2,0)-(2,2) = "in" - │ └── then_loc: ∅ - ├── else_clause: ∅ - ├── case_keyword_loc: (1,0)-(1,4) = "case" - └── end_keyword_loc: (4,0)-(4,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_42.txt b/test/prism/snapshots/seattlerb/case_in_42.txt deleted file mode 100644 index 9c6d21c68efd79..00000000000000 --- a/test/prism/snapshots/seattlerb/case_in_42.txt +++ /dev/null @@ -1,53 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,3)) -├── flags: ∅ -├── locals: [:_] -└── statements: - @ StatementsNode (location: (1,0)-(3,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CaseMatchNode (location: (1,0)-(3,3)) - ├── flags: newline - ├── predicate: - │ @ SymbolNode (location: (1,5)-(1,7)) - │ ├── flags: static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (1,5)-(1,6) = ":" - │ ├── value_loc: (1,6)-(1,7) = "a" - │ ├── closing_loc: ∅ - │ └── unescaped: "a" - ├── conditions: (length: 1) - │ └── @ InNode (location: (2,0)-(2,18)) - │ ├── flags: ∅ - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (2,3)-(2,9)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ SymbolNode (location: (2,3)-(2,5)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (2,3)-(2,4) = ":" - │ │ │ ├── value_loc: (2,4)-(2,5) = "b" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "b" - │ │ ├── rest: - │ │ │ @ SplatNode (location: (2,7)-(2,9)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (2,7)-(2,8) = "*" - │ │ │ └── expression: - │ │ │ @ LocalVariableTargetNode (location: (2,8)-(2,9)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :_ - │ │ │ └── depth: 0 - │ │ ├── posts: (length: 0) - │ │ ├── opening_loc: ∅ - │ │ └── closing_loc: ∅ - │ ├── statements: - │ │ @ StatementsNode (location: (2,15)-(2,18)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ NilNode (location: (2,15)-(2,18)) - │ │ └── flags: newline, static_literal - │ ├── in_loc: (2,0)-(2,2) = "in" - │ └── then_loc: (2,10)-(2,14) = "then" - ├── else_clause: ∅ - ├── case_keyword_loc: (1,0)-(1,4) = "case" - └── end_keyword_loc: (3,0)-(3,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_42_2.txt b/test/prism/snapshots/seattlerb/case_in_42_2.txt deleted file mode 100644 index e16df21fa27460..00000000000000 --- a/test/prism/snapshots/seattlerb/case_in_42_2.txt +++ /dev/null @@ -1,50 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,3)) -├── flags: ∅ -├── locals: [:list] -└── statements: - @ StatementsNode (location: (1,0)-(3,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CaseMatchNode (location: (1,0)-(3,3)) - ├── flags: newline - ├── predicate: - │ @ SymbolNode (location: (1,5)-(1,7)) - │ ├── flags: static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (1,5)-(1,6) = ":" - │ ├── value_loc: (1,6)-(1,7) = "a" - │ ├── closing_loc: ∅ - │ └── unescaped: "a" - ├── conditions: (length: 1) - │ └── @ InNode (location: (2,0)-(2,20)) - │ ├── flags: ∅ - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (2,3)-(2,11)) - │ │ ├── flags: ∅ - │ │ ├── constant: - │ │ │ @ ConstantReadNode (location: (2,3)-(2,4)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :A - │ │ ├── requireds: (length: 0) - │ │ ├── rest: - │ │ │ @ SplatNode (location: (2,5)-(2,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (2,5)-(2,6) = "*" - │ │ │ └── expression: - │ │ │ @ LocalVariableTargetNode (location: (2,6)-(2,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :list - │ │ │ └── depth: 0 - │ │ ├── posts: (length: 0) - │ │ ├── opening_loc: (2,4)-(2,5) = "(" - │ │ └── closing_loc: (2,10)-(2,11) = ")" - │ ├── statements: - │ │ @ StatementsNode (location: (2,17)-(2,20)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ NilNode (location: (2,17)-(2,20)) - │ │ └── flags: newline, static_literal - │ ├── in_loc: (2,0)-(2,2) = "in" - │ └── then_loc: (2,12)-(2,16) = "then" - ├── else_clause: ∅ - ├── case_keyword_loc: (1,0)-(1,4) = "case" - └── end_keyword_loc: (3,0)-(3,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_47.txt b/test/prism/snapshots/seattlerb/case_in_47.txt deleted file mode 100644 index ee11204f615927..00000000000000 --- a/test/prism/snapshots/seattlerb/case_in_47.txt +++ /dev/null @@ -1,59 +0,0 @@ -@ ProgramNode (location: (1,0)-(4,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(4,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CaseMatchNode (location: (1,0)-(4,3)) - ├── flags: newline - ├── predicate: - │ @ SymbolNode (location: (1,5)-(1,7)) - │ ├── flags: static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (1,5)-(1,6) = ":" - │ ├── value_loc: (1,6)-(1,7) = "a" - │ ├── closing_loc: ∅ - │ └── unescaped: "a" - ├── conditions: (length: 1) - │ └── @ InNode (location: (2,0)-(3,4)) - │ ├── flags: ∅ - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (2,3)-(2,14)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── rest: - │ │ │ @ SplatNode (location: (2,4)-(2,5)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (2,4)-(2,5) = "*" - │ │ │ └── expression: ∅ - │ │ ├── posts: (length: 2) - │ │ │ ├── @ SymbolNode (location: (2,7)-(2,9)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: (2,7)-(2,8) = ":" - │ │ │ │ ├── value_loc: (2,8)-(2,9) = "b" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "b" - │ │ │ └── @ SymbolNode (location: (2,11)-(2,13)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (2,11)-(2,12) = ":" - │ │ │ ├── value_loc: (2,12)-(2,13) = "c" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "c" - │ │ ├── opening_loc: (2,3)-(2,4) = "[" - │ │ └── closing_loc: (2,13)-(2,14) = "]" - │ ├── statements: - │ │ @ StatementsNode (location: (3,2)-(3,4)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ SymbolNode (location: (3,2)-(3,4)) - │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (3,2)-(3,3) = ":" - │ │ ├── value_loc: (3,3)-(3,4) = "d" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "d" - │ ├── in_loc: (2,0)-(2,2) = "in" - │ └── then_loc: ∅ - ├── else_clause: ∅ - ├── case_keyword_loc: (1,0)-(1,4) = "case" - └── end_keyword_loc: (4,0)-(4,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_67.txt b/test/prism/snapshots/seattlerb/case_in_67.txt deleted file mode 100644 index 103277a39d91db..00000000000000 --- a/test/prism/snapshots/seattlerb/case_in_67.txt +++ /dev/null @@ -1,39 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CaseMatchNode (location: (1,0)-(3,3)) - ├── flags: newline - ├── predicate: - │ @ SymbolNode (location: (1,5)-(1,7)) - │ ├── flags: static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (1,5)-(1,6) = ":" - │ ├── value_loc: (1,6)-(1,7) = "a" - │ ├── closing_loc: ∅ - │ └── unescaped: "a" - ├── conditions: (length: 1) - │ └── @ InNode (location: (2,0)-(2,15)) - │ ├── flags: ∅ - │ ├── pattern: - │ │ @ RangeNode (location: (2,3)-(2,6)) - │ │ ├── flags: static_literal - │ │ ├── left: - │ │ │ @ IntegerNode (location: (2,3)-(2,4)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── right: ∅ - │ │ └── operator_loc: (2,4)-(2,6) = ".." - │ ├── statements: - │ │ @ StatementsNode (location: (2,12)-(2,15)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ NilNode (location: (2,12)-(2,15)) - │ │ └── flags: newline, static_literal - │ ├── in_loc: (2,0)-(2,2) = "in" - │ └── then_loc: (2,7)-(2,11) = "then" - ├── else_clause: ∅ - ├── case_keyword_loc: (1,0)-(1,4) = "case" - └── end_keyword_loc: (3,0)-(3,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_86.txt b/test/prism/snapshots/seattlerb/case_in_86.txt deleted file mode 100644 index b163ae64e4f4bd..00000000000000 --- a/test/prism/snapshots/seattlerb/case_in_86.txt +++ /dev/null @@ -1,60 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CaseMatchNode (location: (1,0)-(3,3)) - ├── flags: newline - ├── predicate: - │ @ ArrayNode (location: (1,5)-(1,13)) - │ ├── flags: static_literal - │ ├── elements: (length: 2) - │ │ ├── @ SymbolNode (location: (1,6)-(1,8)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (1,6)-(1,7) = ":" - │ │ │ ├── value_loc: (1,7)-(1,8) = "a" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "a" - │ │ └── @ SymbolNode (location: (1,10)-(1,12)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (1,10)-(1,11) = ":" - │ │ ├── value_loc: (1,11)-(1,12) = "b" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "b" - │ ├── opening_loc: (1,5)-(1,6) = "[" - │ └── closing_loc: (1,12)-(1,13) = "]" - ├── conditions: (length: 1) - │ └── @ InNode (location: (2,0)-(2,25)) - │ ├── flags: ∅ - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (2,3)-(2,16)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ ConstantPathNode (location: (2,3)-(2,13)) - │ │ │ ├── flags: ∅ - │ │ │ ├── parent: ∅ - │ │ │ ├── name: :NilClass - │ │ │ ├── delimiter_loc: (2,3)-(2,5) = "::" - │ │ │ └── name_loc: (2,5)-(2,13) = "NilClass" - │ │ ├── rest: - │ │ │ @ SplatNode (location: (2,15)-(2,16)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (2,15)-(2,16) = "*" - │ │ │ └── expression: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── opening_loc: ∅ - │ │ └── closing_loc: ∅ - │ ├── statements: - │ │ @ StatementsNode (location: (2,22)-(2,25)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ NilNode (location: (2,22)-(2,25)) - │ │ └── flags: newline, static_literal - │ ├── in_loc: (2,0)-(2,2) = "in" - │ └── then_loc: (2,17)-(2,21) = "then" - ├── else_clause: ∅ - ├── case_keyword_loc: (1,0)-(1,4) = "case" - └── end_keyword_loc: (3,0)-(3,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_86_2.txt b/test/prism/snapshots/seattlerb/case_in_86_2.txt deleted file mode 100644 index bf6b2ff53da8dd..00000000000000 --- a/test/prism/snapshots/seattlerb/case_in_86_2.txt +++ /dev/null @@ -1,60 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CaseMatchNode (location: (1,0)-(3,3)) - ├── flags: newline - ├── predicate: - │ @ ArrayNode (location: (1,5)-(1,13)) - │ ├── flags: static_literal - │ ├── elements: (length: 2) - │ │ ├── @ SymbolNode (location: (1,6)-(1,8)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (1,6)-(1,7) = ":" - │ │ │ ├── value_loc: (1,7)-(1,8) = "a" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "a" - │ │ └── @ SymbolNode (location: (1,10)-(1,12)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (1,10)-(1,11) = ":" - │ │ ├── value_loc: (1,11)-(1,12) = "b" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "b" - │ ├── opening_loc: (1,5)-(1,6) = "[" - │ └── closing_loc: (1,12)-(1,13) = "]" - ├── conditions: (length: 1) - │ └── @ InNode (location: (2,0)-(2,25)) - │ ├── flags: ∅ - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (2,3)-(2,16)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── rest: - │ │ │ @ SplatNode (location: (2,3)-(2,4)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (2,3)-(2,4) = "*" - │ │ │ └── expression: ∅ - │ │ ├── posts: (length: 1) - │ │ │ └── @ ConstantPathNode (location: (2,6)-(2,16)) - │ │ │ ├── flags: ∅ - │ │ │ ├── parent: ∅ - │ │ │ ├── name: :NilClass - │ │ │ ├── delimiter_loc: (2,6)-(2,8) = "::" - │ │ │ └── name_loc: (2,8)-(2,16) = "NilClass" - │ │ ├── opening_loc: ∅ - │ │ └── closing_loc: ∅ - │ ├── statements: - │ │ @ StatementsNode (location: (2,22)-(2,25)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ NilNode (location: (2,22)-(2,25)) - │ │ └── flags: newline, static_literal - │ ├── in_loc: (2,0)-(2,2) = "in" - │ └── then_loc: (2,17)-(2,21) = "then" - ├── else_clause: ∅ - ├── case_keyword_loc: (1,0)-(1,4) = "case" - └── end_keyword_loc: (3,0)-(3,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_array_pat_const.txt b/test/prism/snapshots/seattlerb/case_in_array_pat_const.txt deleted file mode 100644 index c0aae6a723b710..00000000000000 --- a/test/prism/snapshots/seattlerb/case_in_array_pat_const.txt +++ /dev/null @@ -1,50 +0,0 @@ -@ ProgramNode (location: (1,0)-(4,3)) -├── flags: ∅ -├── locals: [:c] -└── statements: - @ StatementsNode (location: (1,0)-(4,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CaseMatchNode (location: (1,0)-(4,3)) - ├── flags: newline - ├── predicate: - │ @ SymbolNode (location: (1,5)-(1,7)) - │ ├── flags: static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (1,5)-(1,6) = ":" - │ ├── value_loc: (1,6)-(1,7) = "a" - │ ├── closing_loc: ∅ - │ └── unescaped: "a" - ├── conditions: (length: 1) - │ └── @ InNode (location: (2,0)-(3,4)) - │ ├── flags: ∅ - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (2,3)-(2,7)) - │ │ ├── flags: ∅ - │ │ ├── constant: - │ │ │ @ ConstantReadNode (location: (2,3)-(2,4)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :B - │ │ ├── requireds: (length: 1) - │ │ │ └── @ LocalVariableTargetNode (location: (2,5)-(2,6)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :c - │ │ │ └── depth: 0 - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── opening_loc: (2,4)-(2,5) = "[" - │ │ └── closing_loc: (2,6)-(2,7) = "]" - │ ├── statements: - │ │ @ StatementsNode (location: (3,2)-(3,4)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ SymbolNode (location: (3,2)-(3,4)) - │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (3,2)-(3,3) = ":" - │ │ ├── value_loc: (3,3)-(3,4) = "d" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "d" - │ ├── in_loc: (2,0)-(2,2) = "in" - │ └── then_loc: ∅ - ├── else_clause: ∅ - ├── case_keyword_loc: (1,0)-(1,4) = "case" - └── end_keyword_loc: (4,0)-(4,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_array_pat_const2.txt b/test/prism/snapshots/seattlerb/case_in_array_pat_const2.txt deleted file mode 100644 index 7739dde6287406..00000000000000 --- a/test/prism/snapshots/seattlerb/case_in_array_pat_const2.txt +++ /dev/null @@ -1,56 +0,0 @@ -@ ProgramNode (location: (1,0)-(4,3)) -├── flags: ∅ -├── locals: [:d] -└── statements: - @ StatementsNode (location: (1,0)-(4,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CaseMatchNode (location: (1,0)-(4,3)) - ├── flags: newline - ├── predicate: - │ @ SymbolNode (location: (1,5)-(1,7)) - │ ├── flags: static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (1,5)-(1,6) = ":" - │ ├── value_loc: (1,6)-(1,7) = "a" - │ ├── closing_loc: ∅ - │ └── unescaped: "a" - ├── conditions: (length: 1) - │ └── @ InNode (location: (2,0)-(3,4)) - │ ├── flags: ∅ - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (2,3)-(2,10)) - │ │ ├── flags: ∅ - │ │ ├── constant: - │ │ │ @ ConstantPathNode (location: (2,3)-(2,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── parent: - │ │ │ │ @ ConstantReadNode (location: (2,3)-(2,4)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :B - │ │ │ ├── name: :C - │ │ │ ├── delimiter_loc: (2,4)-(2,6) = "::" - │ │ │ └── name_loc: (2,6)-(2,7) = "C" - │ │ ├── requireds: (length: 1) - │ │ │ └── @ LocalVariableTargetNode (location: (2,8)-(2,9)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :d - │ │ │ └── depth: 0 - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── opening_loc: (2,7)-(2,8) = "[" - │ │ └── closing_loc: (2,9)-(2,10) = "]" - │ ├── statements: - │ │ @ StatementsNode (location: (3,2)-(3,4)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ SymbolNode (location: (3,2)-(3,4)) - │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (3,2)-(3,3) = ":" - │ │ ├── value_loc: (3,3)-(3,4) = "e" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "e" - │ ├── in_loc: (2,0)-(2,2) = "in" - │ └── then_loc: ∅ - ├── else_clause: ∅ - ├── case_keyword_loc: (1,0)-(1,4) = "case" - └── end_keyword_loc: (4,0)-(4,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_array_pat_paren_assign.txt b/test/prism/snapshots/seattlerb/case_in_array_pat_paren_assign.txt deleted file mode 100644 index e34cac73c4e5fc..00000000000000 --- a/test/prism/snapshots/seattlerb/case_in_array_pat_paren_assign.txt +++ /dev/null @@ -1,58 +0,0 @@ -@ ProgramNode (location: (1,0)-(4,3)) -├── flags: ∅ -├── locals: [:d] -└── statements: - @ StatementsNode (location: (1,0)-(4,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CaseMatchNode (location: (1,0)-(4,3)) - ├── flags: newline - ├── predicate: - │ @ SymbolNode (location: (1,5)-(1,7)) - │ ├── flags: static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (1,5)-(1,6) = ":" - │ ├── value_loc: (1,6)-(1,7) = "a" - │ ├── closing_loc: ∅ - │ └── unescaped: "a" - ├── conditions: (length: 1) - │ └── @ InNode (location: (2,0)-(3,4)) - │ ├── flags: ∅ - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (2,3)-(2,12)) - │ │ ├── flags: ∅ - │ │ ├── constant: - │ │ │ @ ConstantReadNode (location: (2,3)-(2,4)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :B - │ │ ├── requireds: (length: 1) - │ │ │ └── @ CapturePatternNode (location: (2,5)-(2,11)) - │ │ │ ├── flags: ∅ - │ │ │ ├── value: - │ │ │ │ @ ConstantReadNode (location: (2,5)-(2,6)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :C - │ │ │ ├── target: - │ │ │ │ @ LocalVariableTargetNode (location: (2,10)-(2,11)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :d - │ │ │ │ └── depth: 0 - │ │ │ └── operator_loc: (2,7)-(2,9) = "=>" - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── opening_loc: (2,4)-(2,5) = "(" - │ │ └── closing_loc: (2,11)-(2,12) = ")" - │ ├── statements: - │ │ @ StatementsNode (location: (3,2)-(3,4)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ SymbolNode (location: (3,2)-(3,4)) - │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (3,2)-(3,3) = ":" - │ │ ├── value_loc: (3,3)-(3,4) = "d" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "d" - │ ├── in_loc: (2,0)-(2,2) = "in" - │ └── then_loc: ∅ - ├── else_clause: ∅ - ├── case_keyword_loc: (1,0)-(1,4) = "case" - └── end_keyword_loc: (4,0)-(4,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_const.txt b/test/prism/snapshots/seattlerb/case_in_const.txt deleted file mode 100644 index 49097d26dfd638..00000000000000 --- a/test/prism/snapshots/seattlerb/case_in_const.txt +++ /dev/null @@ -1,35 +0,0 @@ -@ ProgramNode (location: (1,0)-(4,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(4,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CaseMatchNode (location: (1,0)-(4,3)) - ├── flags: newline - ├── predicate: - │ @ ConstantReadNode (location: (1,5)-(1,10)) - │ ├── flags: ∅ - │ └── name: :Array - ├── conditions: (length: 1) - │ └── @ InNode (location: (2,0)-(3,4)) - │ ├── flags: ∅ - │ ├── pattern: - │ │ @ ConstantReadNode (location: (2,3)-(2,8)) - │ │ ├── flags: ∅ - │ │ └── name: :Class - │ ├── statements: - │ │ @ StatementsNode (location: (3,2)-(3,4)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ SymbolNode (location: (3,2)-(3,4)) - │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (3,2)-(3,3) = ":" - │ │ ├── value_loc: (3,3)-(3,4) = "b" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "b" - │ ├── in_loc: (2,0)-(2,2) = "in" - │ └── then_loc: ∅ - ├── else_clause: ∅ - ├── case_keyword_loc: (1,0)-(1,4) = "case" - └── end_keyword_loc: (4,0)-(4,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_else.txt b/test/prism/snapshots/seattlerb/case_in_else.txt deleted file mode 100644 index e0cdf5125c004f..00000000000000 --- a/test/prism/snapshots/seattlerb/case_in_else.txt +++ /dev/null @@ -1,49 +0,0 @@ -@ ProgramNode (location: (1,0)-(6,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(6,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CaseMatchNode (location: (1,0)-(6,3)) - ├── flags: newline - ├── predicate: - │ @ ConstantReadNode (location: (1,5)-(1,10)) - │ ├── flags: ∅ - │ └── name: :Array - ├── conditions: (length: 1) - │ └── @ InNode (location: (2,0)-(3,4)) - │ ├── flags: ∅ - │ ├── pattern: - │ │ @ ConstantReadNode (location: (2,3)-(2,8)) - │ │ ├── flags: ∅ - │ │ └── name: :Class - │ ├── statements: - │ │ @ StatementsNode (location: (3,2)-(3,4)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ SymbolNode (location: (3,2)-(3,4)) - │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (3,2)-(3,3) = ":" - │ │ ├── value_loc: (3,3)-(3,4) = "b" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "b" - │ ├── in_loc: (2,0)-(2,2) = "in" - │ └── then_loc: ∅ - ├── else_clause: - │ @ ElseNode (location: (4,0)-(6,3)) - │ ├── flags: ∅ - │ ├── else_keyword_loc: (4,0)-(4,4) = "else" - │ ├── statements: - │ │ @ StatementsNode (location: (5,2)-(5,4)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ SymbolNode (location: (5,2)-(5,4)) - │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (5,2)-(5,3) = ":" - │ │ ├── value_loc: (5,3)-(5,4) = "c" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "c" - │ └── end_keyword_loc: (6,0)-(6,3) = "end" - ├── case_keyword_loc: (1,0)-(1,4) = "case" - └── end_keyword_loc: (6,0)-(6,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_find.txt b/test/prism/snapshots/seattlerb/case_in_find.txt deleted file mode 100644 index c6337d7c85073b..00000000000000 --- a/test/prism/snapshots/seattlerb/case_in_find.txt +++ /dev/null @@ -1,56 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,3)) -├── flags: ∅ -├── locals: [:a, :b] -└── statements: - @ StatementsNode (location: (1,0)-(3,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CaseMatchNode (location: (1,0)-(3,3)) - ├── flags: newline - ├── predicate: - │ @ SymbolNode (location: (1,5)-(1,7)) - │ ├── flags: static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (1,5)-(1,6) = ":" - │ ├── value_loc: (1,6)-(1,7) = "a" - │ ├── closing_loc: ∅ - │ └── unescaped: "a" - ├── conditions: (length: 1) - │ └── @ InNode (location: (2,2)-(2,15)) - │ ├── flags: ∅ - │ ├── pattern: - │ │ @ FindPatternNode (location: (2,5)-(2,15)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── left: - │ │ │ @ SplatNode (location: (2,5)-(2,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (2,5)-(2,6) = "*" - │ │ │ └── expression: - │ │ │ @ LocalVariableTargetNode (location: (2,6)-(2,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :a - │ │ │ └── depth: 0 - │ │ ├── requireds: (length: 1) - │ │ │ └── @ SymbolNode (location: (2,9)-(2,11)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (2,9)-(2,10) = ":" - │ │ │ ├── value_loc: (2,10)-(2,11) = "+" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "+" - │ │ ├── right: - │ │ │ @ SplatNode (location: (2,13)-(2,15)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (2,13)-(2,14) = "*" - │ │ │ └── expression: - │ │ │ @ LocalVariableTargetNode (location: (2,14)-(2,15)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :b - │ │ │ └── depth: 0 - │ │ ├── opening_loc: ∅ - │ │ └── closing_loc: ∅ - │ ├── statements: ∅ - │ ├── in_loc: (2,2)-(2,4) = "in" - │ └── then_loc: ∅ - ├── else_clause: ∅ - ├── case_keyword_loc: (1,0)-(1,4) = "case" - └── end_keyword_loc: (3,0)-(3,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_find_array.txt b/test/prism/snapshots/seattlerb/case_in_find_array.txt deleted file mode 100644 index 986925904f4001..00000000000000 --- a/test/prism/snapshots/seattlerb/case_in_find_array.txt +++ /dev/null @@ -1,52 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,3)) -├── flags: ∅ -├── locals: [:c] -└── statements: - @ StatementsNode (location: (1,0)-(3,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CaseMatchNode (location: (1,0)-(3,3)) - ├── flags: newline - ├── predicate: - │ @ SymbolNode (location: (1,5)-(1,7)) - │ ├── flags: static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (1,5)-(1,6) = ":" - │ ├── value_loc: (1,6)-(1,7) = "a" - │ ├── closing_loc: ∅ - │ └── unescaped: "a" - ├── conditions: (length: 1) - │ └── @ InNode (location: (2,0)-(2,16)) - │ ├── flags: ∅ - │ ├── pattern: - │ │ @ FindPatternNode (location: (2,3)-(2,16)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── left: - │ │ │ @ SplatNode (location: (2,4)-(2,5)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (2,4)-(2,5) = "*" - │ │ │ └── expression: ∅ - │ │ ├── requireds: (length: 2) - │ │ │ ├── @ SymbolNode (location: (2,7)-(2,9)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: (2,7)-(2,8) = ":" - │ │ │ │ ├── value_loc: (2,8)-(2,9) = "b" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "b" - │ │ │ └── @ LocalVariableTargetNode (location: (2,11)-(2,12)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :c - │ │ │ └── depth: 0 - │ │ ├── right: - │ │ │ @ SplatNode (location: (2,14)-(2,15)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (2,14)-(2,15) = "*" - │ │ │ └── expression: ∅ - │ │ ├── opening_loc: (2,3)-(2,4) = "[" - │ │ └── closing_loc: (2,15)-(2,16) = "]" - │ ├── statements: ∅ - │ ├── in_loc: (2,0)-(2,2) = "in" - │ └── then_loc: ∅ - ├── else_clause: ∅ - ├── case_keyword_loc: (1,0)-(1,4) = "case" - └── end_keyword_loc: (3,0)-(3,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_hash_pat.txt b/test/prism/snapshots/seattlerb/case_in_hash_pat.txt deleted file mode 100644 index e3f62d026e7d55..00000000000000 --- a/test/prism/snapshots/seattlerb/case_in_hash_pat.txt +++ /dev/null @@ -1,76 +0,0 @@ -@ ProgramNode (location: (1,0)-(4,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(4,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CaseMatchNode (location: (1,0)-(4,3)) - ├── flags: newline - ├── predicate: - │ @ SymbolNode (location: (1,5)-(1,7)) - │ ├── flags: static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (1,5)-(1,6) = ":" - │ ├── value_loc: (1,6)-(1,7) = "a" - │ ├── closing_loc: ∅ - │ └── unescaped: "a" - ├── conditions: (length: 1) - │ └── @ InNode (location: (2,0)-(3,4)) - │ ├── flags: ∅ - │ ├── pattern: - │ │ @ HashPatternNode (location: (2,3)-(2,21)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── elements: (length: 2) - │ │ │ ├── @ AssocNode (location: (2,5)-(2,11)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── key: - │ │ │ │ │ @ SymbolNode (location: (2,5)-(2,7)) - │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── value_loc: (2,5)-(2,6) = "b" - │ │ │ │ │ ├── closing_loc: (2,6)-(2,7) = ":" - │ │ │ │ │ └── unescaped: "b" - │ │ │ │ ├── value: - │ │ │ │ │ @ StringNode (location: (2,8)-(2,11)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── opening_loc: (2,8)-(2,9) = "'" - │ │ │ │ │ ├── content_loc: (2,9)-(2,10) = "c" - │ │ │ │ │ ├── closing_loc: (2,10)-(2,11) = "'" - │ │ │ │ │ └── unescaped: "c" - │ │ │ │ └── operator_loc: ∅ - │ │ │ └── @ AssocNode (location: (2,13)-(2,19)) - │ │ │ ├── flags: ∅ - │ │ │ ├── key: - │ │ │ │ @ SymbolNode (location: (2,13)-(2,15)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── value_loc: (2,13)-(2,14) = "d" - │ │ │ │ ├── closing_loc: (2,14)-(2,15) = ":" - │ │ │ │ └── unescaped: "d" - │ │ │ ├── value: - │ │ │ │ @ StringNode (location: (2,16)-(2,19)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── opening_loc: (2,16)-(2,17) = "\"" - │ │ │ │ ├── content_loc: (2,17)-(2,18) = "e" - │ │ │ │ ├── closing_loc: (2,18)-(2,19) = "\"" - │ │ │ │ └── unescaped: "e" - │ │ │ └── operator_loc: ∅ - │ │ ├── rest: ∅ - │ │ ├── opening_loc: (2,3)-(2,4) = "{" - │ │ └── closing_loc: (2,20)-(2,21) = "}" - │ ├── statements: - │ │ @ StatementsNode (location: (3,2)-(3,4)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ SymbolNode (location: (3,2)-(3,4)) - │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (3,2)-(3,3) = ":" - │ │ ├── value_loc: (3,3)-(3,4) = "f" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "f" - │ ├── in_loc: (2,0)-(2,2) = "in" - │ └── then_loc: (2,22)-(2,26) = "then" - ├── else_clause: ∅ - ├── case_keyword_loc: (1,0)-(1,4) = "case" - └── end_keyword_loc: (4,0)-(4,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_hash_pat_assign.txt b/test/prism/snapshots/seattlerb/case_in_hash_pat_assign.txt deleted file mode 100644 index 483c932680991b..00000000000000 --- a/test/prism/snapshots/seattlerb/case_in_hash_pat_assign.txt +++ /dev/null @@ -1,100 +0,0 @@ -@ ProgramNode (location: (1,0)-(4,3)) -├── flags: ∅ -├── locals: [:x, :f] -└── statements: - @ StatementsNode (location: (1,0)-(4,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CaseMatchNode (location: (1,0)-(4,3)) - ├── flags: newline - ├── predicate: - │ @ SymbolNode (location: (1,5)-(1,7)) - │ ├── flags: static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (1,5)-(1,6) = ":" - │ ├── value_loc: (1,6)-(1,7) = "a" - │ ├── closing_loc: ∅ - │ └── unescaped: "a" - ├── conditions: (length: 1) - │ └── @ InNode (location: (2,0)-(3,4)) - │ ├── flags: ∅ - │ ├── pattern: - │ │ @ HashPatternNode (location: (2,3)-(2,34)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── elements: (length: 3) - │ │ │ ├── @ AssocNode (location: (2,5)-(2,20)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── key: - │ │ │ │ │ @ SymbolNode (location: (2,5)-(2,7)) - │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── value_loc: (2,5)-(2,6) = "b" - │ │ │ │ │ ├── closing_loc: (2,6)-(2,7) = ":" - │ │ │ │ │ └── unescaped: "b" - │ │ │ │ ├── value: - │ │ │ │ │ @ CapturePatternNode (location: (2,8)-(2,20)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── value: - │ │ │ │ │ │ @ ConstantReadNode (location: (2,8)-(2,15)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ └── name: :Integer - │ │ │ │ │ ├── target: - │ │ │ │ │ │ @ LocalVariableTargetNode (location: (2,19)-(2,20)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ ├── name: :x - │ │ │ │ │ │ └── depth: 0 - │ │ │ │ │ └── operator_loc: (2,16)-(2,18) = "=>" - │ │ │ │ └── operator_loc: ∅ - │ │ │ ├── @ AssocNode (location: (2,22)-(2,28)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── key: - │ │ │ │ │ @ SymbolNode (location: (2,22)-(2,24)) - │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── value_loc: (2,22)-(2,23) = "d" - │ │ │ │ │ ├── closing_loc: (2,23)-(2,24) = ":" - │ │ │ │ │ └── unescaped: "d" - │ │ │ │ ├── value: - │ │ │ │ │ @ StringNode (location: (2,25)-(2,28)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── opening_loc: (2,25)-(2,26) = "\"" - │ │ │ │ │ ├── content_loc: (2,26)-(2,27) = "e" - │ │ │ │ │ ├── closing_loc: (2,27)-(2,28) = "\"" - │ │ │ │ │ └── unescaped: "e" - │ │ │ │ └── operator_loc: ∅ - │ │ │ └── @ AssocNode (location: (2,30)-(2,32)) - │ │ │ ├── flags: ∅ - │ │ │ ├── key: - │ │ │ │ @ SymbolNode (location: (2,30)-(2,32)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── value_loc: (2,30)-(2,31) = "f" - │ │ │ │ ├── closing_loc: (2,31)-(2,32) = ":" - │ │ │ │ └── unescaped: "f" - │ │ │ ├── value: - │ │ │ │ @ ImplicitNode (location: (2,30)-(2,31)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── value: - │ │ │ │ @ LocalVariableTargetNode (location: (2,30)-(2,31)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :f - │ │ │ │ └── depth: 0 - │ │ │ └── operator_loc: ∅ - │ │ ├── rest: ∅ - │ │ ├── opening_loc: (2,3)-(2,4) = "{" - │ │ └── closing_loc: (2,33)-(2,34) = "}" - │ ├── statements: - │ │ @ StatementsNode (location: (3,2)-(3,4)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ SymbolNode (location: (3,2)-(3,4)) - │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (3,2)-(3,3) = ":" - │ │ ├── value_loc: (3,3)-(3,4) = "g" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "g" - │ ├── in_loc: (2,0)-(2,2) = "in" - │ └── then_loc: (2,35)-(2,39) = "then" - ├── else_clause: ∅ - ├── case_keyword_loc: (1,0)-(1,4) = "case" - └── end_keyword_loc: (4,0)-(4,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_hash_pat_paren_assign.txt b/test/prism/snapshots/seattlerb/case_in_hash_pat_paren_assign.txt deleted file mode 100644 index b6e809326a15cf..00000000000000 --- a/test/prism/snapshots/seattlerb/case_in_hash_pat_paren_assign.txt +++ /dev/null @@ -1,59 +0,0 @@ -@ ProgramNode (location: (1,0)-(4,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(4,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CaseMatchNode (location: (1,0)-(4,3)) - ├── flags: newline - ├── predicate: - │ @ SymbolNode (location: (1,5)-(1,7)) - │ ├── flags: static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (1,5)-(1,6) = ":" - │ ├── value_loc: (1,6)-(1,7) = "a" - │ ├── closing_loc: ∅ - │ └── unescaped: "a" - ├── conditions: (length: 1) - │ └── @ InNode (location: (2,0)-(3,4)) - │ ├── flags: ∅ - │ ├── pattern: - │ │ @ HashPatternNode (location: (2,3)-(2,11)) - │ │ ├── flags: ∅ - │ │ ├── constant: - │ │ │ @ ConstantReadNode (location: (2,3)-(2,4)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :B - │ │ ├── elements: (length: 1) - │ │ │ └── @ AssocNode (location: (2,5)-(2,10)) - │ │ │ ├── flags: static_literal - │ │ │ ├── key: - │ │ │ │ @ SymbolNode (location: (2,5)-(2,7)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── value_loc: (2,5)-(2,6) = "a" - │ │ │ │ ├── closing_loc: (2,6)-(2,7) = ":" - │ │ │ │ └── unescaped: "a" - │ │ │ ├── value: - │ │ │ │ @ IntegerNode (location: (2,8)-(2,10)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 42 - │ │ │ └── operator_loc: ∅ - │ │ ├── rest: ∅ - │ │ ├── opening_loc: (2,4)-(2,5) = "(" - │ │ └── closing_loc: (2,10)-(2,11) = ")" - │ ├── statements: - │ │ @ StatementsNode (location: (3,2)-(3,4)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ SymbolNode (location: (3,2)-(3,4)) - │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (3,2)-(3,3) = ":" - │ │ ├── value_loc: (3,3)-(3,4) = "d" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "d" - │ ├── in_loc: (2,0)-(2,2) = "in" - │ └── then_loc: ∅ - ├── else_clause: ∅ - ├── case_keyword_loc: (1,0)-(1,4) = "case" - └── end_keyword_loc: (4,0)-(4,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_hash_pat_paren_true.txt b/test/prism/snapshots/seattlerb/case_in_hash_pat_paren_true.txt deleted file mode 100644 index a54402103082bb..00000000000000 --- a/test/prism/snapshots/seattlerb/case_in_hash_pat_paren_true.txt +++ /dev/null @@ -1,55 +0,0 @@ -@ ProgramNode (location: (1,0)-(4,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(4,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CaseMatchNode (location: (1,0)-(4,3)) - ├── flags: newline - ├── predicate: - │ @ SymbolNode (location: (1,5)-(1,7)) - │ ├── flags: static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (1,5)-(1,6) = ":" - │ ├── value_loc: (1,6)-(1,7) = "a" - │ ├── closing_loc: ∅ - │ └── unescaped: "a" - ├── conditions: (length: 1) - │ └── @ InNode (location: (2,0)-(3,4)) - │ ├── flags: ∅ - │ ├── pattern: - │ │ @ HashPatternNode (location: (2,3)-(2,10)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── elements: (length: 1) - │ │ │ └── @ AssocNode (location: (2,3)-(2,10)) - │ │ │ ├── flags: static_literal - │ │ │ ├── key: - │ │ │ │ @ SymbolNode (location: (2,3)-(2,5)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── value_loc: (2,3)-(2,4) = "b" - │ │ │ │ ├── closing_loc: (2,4)-(2,5) = ":" - │ │ │ │ └── unescaped: "b" - │ │ │ ├── value: - │ │ │ │ @ TrueNode (location: (2,6)-(2,10)) - │ │ │ │ └── flags: static_literal - │ │ │ └── operator_loc: ∅ - │ │ ├── rest: ∅ - │ │ ├── opening_loc: ∅ - │ │ └── closing_loc: ∅ - │ ├── statements: - │ │ @ StatementsNode (location: (3,2)-(3,4)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ SymbolNode (location: (3,2)-(3,4)) - │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (3,2)-(3,3) = ":" - │ │ ├── value_loc: (3,3)-(3,4) = "c" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "c" - │ ├── in_loc: (2,0)-(2,2) = "in" - │ └── then_loc: (2,11)-(2,15) = "then" - ├── else_clause: ∅ - ├── case_keyword_loc: (1,0)-(1,4) = "case" - └── end_keyword_loc: (4,0)-(4,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_hash_pat_rest.txt b/test/prism/snapshots/seattlerb/case_in_hash_pat_rest.txt deleted file mode 100644 index 71f7e126bc1848..00000000000000 --- a/test/prism/snapshots/seattlerb/case_in_hash_pat_rest.txt +++ /dev/null @@ -1,65 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,3)) -├── flags: ∅ -├── locals: [:c, :rest] -└── statements: - @ StatementsNode (location: (1,0)-(3,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CaseMatchNode (location: (1,0)-(3,3)) - ├── flags: newline - ├── predicate: - │ @ SymbolNode (location: (1,5)-(1,7)) - │ ├── flags: static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (1,5)-(1,6) = ":" - │ ├── value_loc: (1,6)-(1,7) = "a" - │ ├── closing_loc: ∅ - │ └── unescaped: "a" - ├── conditions: (length: 1) - │ └── @ InNode (location: (2,0)-(2,23)) - │ ├── flags: ∅ - │ ├── pattern: - │ │ @ HashPatternNode (location: (2,3)-(2,15)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── elements: (length: 1) - │ │ │ └── @ AssocNode (location: (2,3)-(2,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── key: - │ │ │ │ @ SymbolNode (location: (2,3)-(2,5)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── value_loc: (2,3)-(2,4) = "b" - │ │ │ │ ├── closing_loc: (2,4)-(2,5) = ":" - │ │ │ │ └── unescaped: "b" - │ │ │ ├── value: - │ │ │ │ @ LocalVariableTargetNode (location: (2,6)-(2,7)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :c - │ │ │ │ └── depth: 0 - │ │ │ └── operator_loc: ∅ - │ │ ├── rest: - │ │ │ @ AssocSplatNode (location: (2,9)-(2,15)) - │ │ │ ├── flags: ∅ - │ │ │ ├── value: - │ │ │ │ @ LocalVariableTargetNode (location: (2,11)-(2,15)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :rest - │ │ │ │ └── depth: 0 - │ │ │ └── operator_loc: (2,9)-(2,11) = "**" - │ │ ├── opening_loc: ∅ - │ │ └── closing_loc: ∅ - │ ├── statements: - │ │ @ StatementsNode (location: (2,21)-(2,23)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ SymbolNode (location: (2,21)-(2,23)) - │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (2,21)-(2,22) = ":" - │ │ ├── value_loc: (2,22)-(2,23) = "d" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "d" - │ ├── in_loc: (2,0)-(2,2) = "in" - │ └── then_loc: (2,16)-(2,20) = "then" - ├── else_clause: ∅ - ├── case_keyword_loc: (1,0)-(1,4) = "case" - └── end_keyword_loc: (3,0)-(3,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_hash_pat_rest_solo.txt b/test/prism/snapshots/seattlerb/case_in_hash_pat_rest_solo.txt deleted file mode 100644 index 01b324e086c62b..00000000000000 --- a/test/prism/snapshots/seattlerb/case_in_hash_pat_rest_solo.txt +++ /dev/null @@ -1,50 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,3)) -├── flags: ∅ -├── locals: [:rest] -└── statements: - @ StatementsNode (location: (1,0)-(3,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CaseMatchNode (location: (1,0)-(3,3)) - ├── flags: newline - ├── predicate: - │ @ SymbolNode (location: (1,5)-(1,7)) - │ ├── flags: static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (1,5)-(1,6) = ":" - │ ├── value_loc: (1,6)-(1,7) = "a" - │ ├── closing_loc: ∅ - │ └── unescaped: "a" - ├── conditions: (length: 1) - │ └── @ InNode (location: (2,0)-(2,17)) - │ ├── flags: ∅ - │ ├── pattern: - │ │ @ HashPatternNode (location: (2,3)-(2,9)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── elements: (length: 0) - │ │ ├── rest: - │ │ │ @ AssocSplatNode (location: (2,3)-(2,9)) - │ │ │ ├── flags: ∅ - │ │ │ ├── value: - │ │ │ │ @ LocalVariableTargetNode (location: (2,5)-(2,9)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :rest - │ │ │ │ └── depth: 0 - │ │ │ └── operator_loc: (2,3)-(2,5) = "**" - │ │ ├── opening_loc: ∅ - │ │ └── closing_loc: ∅ - │ ├── statements: - │ │ @ StatementsNode (location: (2,15)-(2,17)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ SymbolNode (location: (2,15)-(2,17)) - │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (2,15)-(2,16) = ":" - │ │ ├── value_loc: (2,16)-(2,17) = "d" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "d" - │ ├── in_loc: (2,0)-(2,2) = "in" - │ └── then_loc: (2,10)-(2,14) = "then" - ├── else_clause: ∅ - ├── case_keyword_loc: (1,0)-(1,4) = "case" - └── end_keyword_loc: (3,0)-(3,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_if_unless_post_mod.txt b/test/prism/snapshots/seattlerb/case_in_if_unless_post_mod.txt deleted file mode 100644 index 3da03ffbc3fbf3..00000000000000 --- a/test/prism/snapshots/seattlerb/case_in_if_unless_post_mod.txt +++ /dev/null @@ -1,82 +0,0 @@ -@ ProgramNode (location: (1,0)-(6,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(6,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CaseMatchNode (location: (1,0)-(6,3)) - ├── flags: newline - ├── predicate: - │ @ SymbolNode (location: (1,5)-(1,7)) - │ ├── flags: static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (1,5)-(1,6) = ":" - │ ├── value_loc: (1,6)-(1,7) = "a" - │ ├── closing_loc: ∅ - │ └── unescaped: "a" - ├── conditions: (length: 2) - │ ├── @ InNode (location: (2,0)-(3,4)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ IfNode (location: (2,3)-(2,12)) - │ │ │ ├── flags: newline - │ │ │ ├── if_keyword_loc: (2,5)-(2,7) = "if" - │ │ │ ├── predicate: - │ │ │ │ @ TrueNode (location: (2,8)-(2,12)) - │ │ │ │ └── flags: static_literal - │ │ │ ├── then_keyword_loc: ∅ - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (2,3)-(2,4)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ ConstantReadNode (location: (2,3)-(2,4)) - │ │ │ │ ├── flags: newline - │ │ │ │ └── name: :A - │ │ │ ├── subsequent: ∅ - │ │ │ └── end_keyword_loc: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (3,2)-(3,4)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ SymbolNode (location: (3,2)-(3,4)) - │ │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (3,2)-(3,3) = ":" - │ │ │ ├── value_loc: (3,3)-(3,4) = "C" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "C" - │ │ ├── in_loc: (2,0)-(2,2) = "in" - │ │ └── then_loc: ∅ - │ └── @ InNode (location: (4,0)-(5,4)) - │ ├── flags: ∅ - │ ├── pattern: - │ │ @ UnlessNode (location: (4,3)-(4,17)) - │ │ ├── flags: newline - │ │ ├── keyword_loc: (4,5)-(4,11) = "unless" - │ │ ├── predicate: - │ │ │ @ FalseNode (location: (4,12)-(4,17)) - │ │ │ └── flags: static_literal - │ │ ├── then_keyword_loc: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (4,3)-(4,4)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ ConstantReadNode (location: (4,3)-(4,4)) - │ │ │ ├── flags: newline - │ │ │ └── name: :D - │ │ ├── else_clause: ∅ - │ │ └── end_keyword_loc: ∅ - │ ├── statements: - │ │ @ StatementsNode (location: (5,2)-(5,4)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ SymbolNode (location: (5,2)-(5,4)) - │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (5,2)-(5,3) = ":" - │ │ ├── value_loc: (5,3)-(5,4) = "E" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "E" - │ ├── in_loc: (4,0)-(4,2) = "in" - │ └── then_loc: ∅ - ├── else_clause: ∅ - ├── case_keyword_loc: (1,0)-(1,4) = "case" - └── end_keyword_loc: (6,0)-(6,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_multiple.txt b/test/prism/snapshots/seattlerb/case_in_multiple.txt deleted file mode 100644 index 173136fc6fba8c..00000000000000 --- a/test/prism/snapshots/seattlerb/case_in_multiple.txt +++ /dev/null @@ -1,68 +0,0 @@ -@ ProgramNode (location: (1,0)-(6,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(6,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CaseMatchNode (location: (1,0)-(6,3)) - ├── flags: newline - ├── predicate: - │ @ SymbolNode (location: (1,5)-(1,7)) - │ ├── flags: static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (1,5)-(1,6) = ":" - │ ├── value_loc: (1,6)-(1,7) = "a" - │ ├── closing_loc: ∅ - │ └── unescaped: "a" - ├── conditions: (length: 2) - │ ├── @ InNode (location: (2,0)-(3,4)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ ConstantPathNode (location: (2,3)-(2,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── parent: - │ │ │ │ @ ConstantReadNode (location: (2,3)-(2,4)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :A - │ │ │ ├── name: :B - │ │ │ ├── delimiter_loc: (2,4)-(2,6) = "::" - │ │ │ └── name_loc: (2,6)-(2,7) = "B" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (3,2)-(3,4)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ SymbolNode (location: (3,2)-(3,4)) - │ │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (3,2)-(3,3) = ":" - │ │ │ ├── value_loc: (3,3)-(3,4) = "C" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "C" - │ │ ├── in_loc: (2,0)-(2,2) = "in" - │ │ └── then_loc: ∅ - │ └── @ InNode (location: (4,0)-(5,4)) - │ ├── flags: ∅ - │ ├── pattern: - │ │ @ ConstantPathNode (location: (4,3)-(4,7)) - │ │ ├── flags: ∅ - │ │ ├── parent: - │ │ │ @ ConstantReadNode (location: (4,3)-(4,4)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :D - │ │ ├── name: :E - │ │ ├── delimiter_loc: (4,4)-(4,6) = "::" - │ │ └── name_loc: (4,6)-(4,7) = "E" - │ ├── statements: - │ │ @ StatementsNode (location: (5,2)-(5,4)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ SymbolNode (location: (5,2)-(5,4)) - │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (5,2)-(5,3) = ":" - │ │ ├── value_loc: (5,3)-(5,4) = "F" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "F" - │ ├── in_loc: (4,0)-(4,2) = "in" - │ └── then_loc: ∅ - ├── else_clause: ∅ - ├── case_keyword_loc: (1,0)-(1,4) = "case" - └── end_keyword_loc: (6,0)-(6,3) = "end" diff --git a/test/prism/snapshots/seattlerb/case_in_or.txt b/test/prism/snapshots/seattlerb/case_in_or.txt deleted file mode 100644 index 7bcf50293d1b70..00000000000000 --- a/test/prism/snapshots/seattlerb/case_in_or.txt +++ /dev/null @@ -1,46 +0,0 @@ -@ ProgramNode (location: (1,0)-(4,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(4,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CaseMatchNode (location: (1,0)-(4,3)) - ├── flags: newline - ├── predicate: - │ @ SymbolNode (location: (1,5)-(1,7)) - │ ├── flags: static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (1,5)-(1,6) = ":" - │ ├── value_loc: (1,6)-(1,7) = "a" - │ ├── closing_loc: ∅ - │ └── unescaped: "a" - ├── conditions: (length: 1) - │ └── @ InNode (location: (2,0)-(3,4)) - │ ├── flags: ∅ - │ ├── pattern: - │ │ @ AlternationPatternNode (location: (2,3)-(2,8)) - │ │ ├── flags: ∅ - │ │ ├── left: - │ │ │ @ ConstantReadNode (location: (2,3)-(2,4)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :B - │ │ ├── right: - │ │ │ @ ConstantReadNode (location: (2,7)-(2,8)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :C - │ │ └── operator_loc: (2,5)-(2,6) = "|" - │ ├── statements: - │ │ @ StatementsNode (location: (3,2)-(3,4)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ SymbolNode (location: (3,2)-(3,4)) - │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (3,2)-(3,3) = ":" - │ │ ├── value_loc: (3,3)-(3,4) = "d" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "d" - │ ├── in_loc: (2,0)-(2,2) = "in" - │ └── then_loc: ∅ - ├── else_clause: ∅ - ├── case_keyword_loc: (1,0)-(1,4) = "case" - └── end_keyword_loc: (4,0)-(4,3) = "end" diff --git a/test/prism/snapshots/seattlerb/class_comments.txt b/test/prism/snapshots/seattlerb/class_comments.txt deleted file mode 100644 index 75350722a1ac28..00000000000000 --- a/test/prism/snapshots/seattlerb/class_comments.txt +++ /dev/null @@ -1,37 +0,0 @@ -@ ProgramNode (location: (4,0)-(9,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (4,0)-(9,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ ClassNode (location: (4,0)-(9,3)) - ├── flags: newline - ├── locals: [] - ├── class_keyword_loc: (4,0)-(4,5) = "class" - ├── constant_path: - │ @ ConstantReadNode (location: (4,6)-(4,7)) - │ ├── flags: ∅ - │ └── name: :X - ├── inheritance_operator_loc: ∅ - ├── superclass: ∅ - ├── body: - │ @ StatementsNode (location: (6,2)-(8,5)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ DefNode (location: (6,2)-(8,5)) - │ ├── flags: newline - │ ├── name: :blah - │ ├── name_loc: (6,6)-(6,10) = "blah" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (6,2)-(6,5) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (8,2)-(8,5) = "end" - ├── end_keyword_loc: (9,0)-(9,3) = "end" - └── name: :X diff --git a/test/prism/snapshots/seattlerb/cond_unary_minus.txt b/test/prism/snapshots/seattlerb/cond_unary_minus.txt deleted file mode 100644 index 69a998475e5ae0..00000000000000 --- a/test/prism/snapshots/seattlerb/cond_unary_minus.txt +++ /dev/null @@ -1,18 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,10)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,10)) - ├── flags: ∅ - └── body: (length: 1) - └── @ IfNode (location: (1,0)-(1,10)) - ├── flags: newline - ├── if_keyword_loc: (1,0)-(1,2) = "if" - ├── predicate: - │ @ IntegerNode (location: (1,3)-(1,5)) - │ ├── flags: static_literal, decimal - │ └── value: -1 - ├── then_keyword_loc: ∅ - ├── statements: ∅ - ├── subsequent: ∅ - └── end_keyword_loc: (1,7)-(1,10) = "end" diff --git a/test/prism/snapshots/seattlerb/const_2_op_asgn_or2.txt b/test/prism/snapshots/seattlerb/const_2_op_asgn_or2.txt deleted file mode 100644 index 25d77dac2d5df5..00000000000000 --- a/test/prism/snapshots/seattlerb/const_2_op_asgn_or2.txt +++ /dev/null @@ -1,27 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,12)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,12)) - ├── flags: ∅ - └── body: (length: 1) - └── @ ConstantPathOrWriteNode (location: (1,0)-(1,12)) - ├── flags: newline - ├── target: - │ @ ConstantPathNode (location: (1,0)-(1,6)) - │ ├── flags: ∅ - │ ├── parent: - │ │ @ ConstantPathNode (location: (1,0)-(1,3)) - │ │ ├── flags: ∅ - │ │ ├── parent: ∅ - │ │ ├── name: :X - │ │ ├── delimiter_loc: (1,0)-(1,2) = "::" - │ │ └── name_loc: (1,2)-(1,3) = "X" - │ ├── name: :Y - │ ├── delimiter_loc: (1,3)-(1,5) = "::" - │ └── name_loc: (1,5)-(1,6) = "Y" - ├── operator_loc: (1,7)-(1,10) = "||=" - └── value: - @ IntegerNode (location: (1,11)-(1,12)) - ├── flags: static_literal, decimal - └── value: 1 diff --git a/test/prism/snapshots/seattlerb/const_3_op_asgn_or.txt b/test/prism/snapshots/seattlerb/const_3_op_asgn_or.txt deleted file mode 100644 index dc098bcf23c4e5..00000000000000 --- a/test/prism/snapshots/seattlerb/const_3_op_asgn_or.txt +++ /dev/null @@ -1,21 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,9)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,9)) - ├── flags: ∅ - └── body: (length: 1) - └── @ ConstantPathOrWriteNode (location: (1,0)-(1,9)) - ├── flags: newline - ├── target: - │ @ ConstantPathNode (location: (1,0)-(1,3)) - │ ├── flags: ∅ - │ ├── parent: ∅ - │ ├── name: :X - │ ├── delimiter_loc: (1,0)-(1,2) = "::" - │ └── name_loc: (1,2)-(1,3) = "X" - ├── operator_loc: (1,4)-(1,7) = "||=" - └── value: - @ IntegerNode (location: (1,8)-(1,9)) - ├── flags: static_literal, decimal - └── value: 1 diff --git a/test/prism/snapshots/seattlerb/const_op_asgn_and1.txt b/test/prism/snapshots/seattlerb/const_op_asgn_and1.txt deleted file mode 100644 index 63b8bc190b1447..00000000000000 --- a/test/prism/snapshots/seattlerb/const_op_asgn_and1.txt +++ /dev/null @@ -1,22 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,8)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,8)) - ├── flags: ∅ - └── body: (length: 1) - └── @ ConstantPathOperatorWriteNode (location: (1,0)-(1,8)) - ├── flags: newline - ├── target: - │ @ ConstantPathNode (location: (1,0)-(1,3)) - │ ├── flags: ∅ - │ ├── parent: ∅ - │ ├── name: :X - │ ├── delimiter_loc: (1,0)-(1,2) = "::" - │ └── name_loc: (1,2)-(1,3) = "X" - ├── binary_operator_loc: (1,4)-(1,6) = "&=" - ├── value: - │ @ IntegerNode (location: (1,7)-(1,8)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - └── binary_operator: :& diff --git a/test/prism/snapshots/seattlerb/const_op_asgn_and2.txt b/test/prism/snapshots/seattlerb/const_op_asgn_and2.txt deleted file mode 100644 index c1ac2bcf526132..00000000000000 --- a/test/prism/snapshots/seattlerb/const_op_asgn_and2.txt +++ /dev/null @@ -1,21 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,9)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,9)) - ├── flags: ∅ - └── body: (length: 1) - └── @ ConstantPathAndWriteNode (location: (1,0)-(1,9)) - ├── flags: newline - ├── target: - │ @ ConstantPathNode (location: (1,0)-(1,3)) - │ ├── flags: ∅ - │ ├── parent: ∅ - │ ├── name: :X - │ ├── delimiter_loc: (1,0)-(1,2) = "::" - │ └── name_loc: (1,2)-(1,3) = "X" - ├── operator_loc: (1,4)-(1,7) = "&&=" - └── value: - @ IntegerNode (location: (1,8)-(1,9)) - ├── flags: static_literal, decimal - └── value: 1 diff --git a/test/prism/snapshots/seattlerb/const_op_asgn_or.txt b/test/prism/snapshots/seattlerb/const_op_asgn_or.txt deleted file mode 100644 index 0a53593d123cbe..00000000000000 --- a/test/prism/snapshots/seattlerb/const_op_asgn_or.txt +++ /dev/null @@ -1,24 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,10)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,10)) - ├── flags: ∅ - └── body: (length: 1) - └── @ ConstantPathOrWriteNode (location: (1,0)-(1,10)) - ├── flags: newline - ├── target: - │ @ ConstantPathNode (location: (1,0)-(1,4)) - │ ├── flags: ∅ - │ ├── parent: - │ │ @ ConstantReadNode (location: (1,0)-(1,1)) - │ │ ├── flags: ∅ - │ │ └── name: :X - │ ├── name: :Y - │ ├── delimiter_loc: (1,1)-(1,3) = "::" - │ └── name_loc: (1,3)-(1,4) = "Y" - ├── operator_loc: (1,5)-(1,8) = "||=" - └── value: - @ IntegerNode (location: (1,9)-(1,10)) - ├── flags: static_literal, decimal - └── value: 1 diff --git a/test/prism/snapshots/seattlerb/defined_eh_parens.txt b/test/prism/snapshots/seattlerb/defined_eh_parens.txt deleted file mode 100644 index 7e18a24787572f..00000000000000 --- a/test/prism/snapshots/seattlerb/defined_eh_parens.txt +++ /dev/null @@ -1,16 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,12)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,12)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefinedNode (location: (1,0)-(1,12)) - ├── flags: newline - ├── lparen_loc: (1,8)-(1,9) = "(" - ├── value: - │ @ IntegerNode (location: (1,9)-(1,11)) - │ ├── flags: static_literal, decimal - │ └── value: 42 - ├── rparen_loc: (1,11)-(1,12) = ")" - └── keyword_loc: (1,0)-(1,8) = "defined?" diff --git a/test/prism/snapshots/seattlerb/defn_arg_asplat_arg.txt b/test/prism/snapshots/seattlerb/defn_arg_asplat_arg.txt deleted file mode 100644 index 312b0214d6f61b..00000000000000 --- a/test/prism/snapshots/seattlerb/defn_arg_asplat_arg.txt +++ /dev/null @@ -1,41 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,29)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,29)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(1,29)) - ├── flags: newline - ├── name: :call - ├── name_loc: (1,4)-(1,8) = "call" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (1,9)-(1,24)) - │ ├── flags: ∅ - │ ├── requireds: (length: 1) - │ │ └── @ RequiredParameterNode (location: (1,9)-(1,15)) - │ │ ├── flags: ∅ - │ │ └── name: :interp - │ ├── optionals: (length: 0) - │ ├── rest: - │ │ @ RestParameterNode (location: (1,17)-(1,18)) - │ │ ├── flags: ∅ - │ │ ├── name: ∅ - │ │ ├── name_loc: ∅ - │ │ └── operator_loc: (1,17)-(1,18) = "*" - │ ├── posts: (length: 1) - │ │ └── @ RequiredParameterNode (location: (1,20)-(1,24)) - │ │ ├── flags: ∅ - │ │ └── name: :args - │ ├── keywords: (length: 0) - │ ├── keyword_rest: ∅ - │ └── block: ∅ - ├── body: ∅ - ├── locals: [:interp, :args] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: (1,8)-(1,9) = "(" - ├── rparen_loc: (1,24)-(1,25) = ")" - ├── equal_loc: ∅ - └── end_keyword_loc: (1,26)-(1,29) = "end" diff --git a/test/prism/snapshots/seattlerb/defn_arg_forward_args.txt b/test/prism/snapshots/seattlerb/defn_arg_forward_args.txt deleted file mode 100644 index 905978bc2f165c..00000000000000 --- a/test/prism/snapshots/seattlerb/defn_arg_forward_args.txt +++ /dev/null @@ -1,57 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,29)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,29)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(1,29)) - ├── flags: newline - ├── name: :a - ├── name_loc: (1,4)-(1,5) = "a" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (1,6)-(1,12)) - │ ├── flags: ∅ - │ ├── requireds: (length: 1) - │ │ └── @ RequiredParameterNode (location: (1,6)-(1,7)) - │ │ ├── flags: ∅ - │ │ └── name: :x - │ ├── optionals: (length: 0) - │ ├── rest: ∅ - │ ├── posts: (length: 0) - │ ├── keywords: (length: 0) - │ ├── keyword_rest: - │ │ @ ForwardingParameterNode (location: (1,9)-(1,12)) - │ │ └── flags: ∅ - │ └── block: ∅ - ├── body: - │ @ StatementsNode (location: (1,15)-(1,24)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,15)-(1,24)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :b - │ ├── message_loc: (1,15)-(1,16) = "b" - │ ├── opening_loc: (1,16)-(1,17) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,17)-(1,23)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ LocalVariableReadNode (location: (1,17)-(1,18)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :x - │ │ │ └── depth: 0 - │ │ └── @ ForwardingArgumentsNode (location: (1,20)-(1,23)) - │ │ └── flags: ∅ - │ ├── closing_loc: (1,23)-(1,24) = ")" - │ └── block: ∅ - ├── locals: [:x] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: (1,5)-(1,6) = "(" - ├── rparen_loc: (1,12)-(1,13) = ")" - ├── equal_loc: ∅ - └── end_keyword_loc: (1,26)-(1,29) = "end" diff --git a/test/prism/snapshots/seattlerb/defn_args_forward_args.txt b/test/prism/snapshots/seattlerb/defn_args_forward_args.txt deleted file mode 100644 index ca03f79d57d5e9..00000000000000 --- a/test/prism/snapshots/seattlerb/defn_args_forward_args.txt +++ /dev/null @@ -1,69 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,41)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,41)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(1,41)) - ├── flags: newline - ├── name: :a - ├── name_loc: (1,4)-(1,5) = "a" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (1,6)-(1,18)) - │ ├── flags: ∅ - │ ├── requireds: (length: 3) - │ │ ├── @ RequiredParameterNode (location: (1,6)-(1,7)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :x - │ │ ├── @ RequiredParameterNode (location: (1,9)-(1,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :y - │ │ └── @ RequiredParameterNode (location: (1,12)-(1,13)) - │ │ ├── flags: ∅ - │ │ └── name: :z - │ ├── optionals: (length: 0) - │ ├── rest: ∅ - │ ├── posts: (length: 0) - │ ├── keywords: (length: 0) - │ ├── keyword_rest: - │ │ @ ForwardingParameterNode (location: (1,15)-(1,18)) - │ │ └── flags: ∅ - │ └── block: ∅ - ├── body: - │ @ StatementsNode (location: (1,21)-(1,36)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,21)-(1,36)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :b - │ ├── message_loc: (1,21)-(1,22) = "b" - │ ├── opening_loc: (1,22)-(1,23) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,23)-(1,35)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 3) - │ │ ├── @ SymbolNode (location: (1,23)-(1,27)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (1,23)-(1,24) = ":" - │ │ │ ├── value_loc: (1,24)-(1,27) = "get" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "get" - │ │ ├── @ LocalVariableReadNode (location: (1,29)-(1,30)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :z - │ │ │ └── depth: 0 - │ │ └── @ ForwardingArgumentsNode (location: (1,32)-(1,35)) - │ │ └── flags: ∅ - │ ├── closing_loc: (1,35)-(1,36) = ")" - │ └── block: ∅ - ├── locals: [:x, :y, :z] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: (1,5)-(1,6) = "(" - ├── rparen_loc: (1,18)-(1,19) = ")" - ├── equal_loc: ∅ - └── end_keyword_loc: (1,38)-(1,41) = "end" diff --git a/test/prism/snapshots/seattlerb/defn_comments.txt b/test/prism/snapshots/seattlerb/defn_comments.txt deleted file mode 100644 index 8ea66b77603487..00000000000000 --- a/test/prism/snapshots/seattlerb/defn_comments.txt +++ /dev/null @@ -1,21 +0,0 @@ -@ ProgramNode (location: (4,0)-(5,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (4,0)-(5,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (4,0)-(5,3)) - ├── flags: newline - ├── name: :blah - ├── name_loc: (4,4)-(4,8) = "blah" - ├── receiver: ∅ - ├── parameters: ∅ - ├── body: ∅ - ├── locals: [] - ├── def_keyword_loc: (4,0)-(4,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: ∅ - ├── rparen_loc: ∅ - ├── equal_loc: ∅ - └── end_keyword_loc: (5,0)-(5,3) = "end" diff --git a/test/prism/snapshots/seattlerb/defn_endless_command.txt b/test/prism/snapshots/seattlerb/defn_endless_command.txt deleted file mode 100644 index 12149a821cb204..00000000000000 --- a/test/prism/snapshots/seattlerb/defn_endless_command.txt +++ /dev/null @@ -1,40 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,33)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,33)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(1,33)) - ├── flags: newline - ├── name: :some_method - ├── name_loc: (1,4)-(1,15) = "some_method" - ├── receiver: ∅ - ├── parameters: ∅ - ├── body: - │ @ StatementsNode (location: (1,18)-(1,33)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,18)-(1,33)) - │ ├── flags: ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :other_method - │ ├── message_loc: (1,18)-(1,30) = "other_method" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,31)-(1,33)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (1,31)-(1,33)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 42 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── locals: [] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: ∅ - ├── rparen_loc: ∅ - ├── equal_loc: (1,16)-(1,17) = "=" - └── end_keyword_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/defn_endless_command_rescue.txt b/test/prism/snapshots/seattlerb/defn_endless_command_rescue.txt deleted file mode 100644 index 99194a5ce9418a..00000000000000 --- a/test/prism/snapshots/seattlerb/defn_endless_command_rescue.txt +++ /dev/null @@ -1,48 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,43)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,43)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(1,43)) - ├── flags: newline - ├── name: :some_method - ├── name_loc: (1,4)-(1,15) = "some_method" - ├── receiver: ∅ - ├── parameters: ∅ - ├── body: - │ @ StatementsNode (location: (1,18)-(1,43)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ RescueModifierNode (location: (1,18)-(1,43)) - │ ├── flags: ∅ - │ ├── expression: - │ │ @ CallNode (location: (1,18)-(1,33)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :other_method - │ │ ├── message_loc: (1,18)-(1,30) = "other_method" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (1,31)-(1,33)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (1,31)-(1,33)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 42 - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── keyword_loc: (1,34)-(1,40) = "rescue" - │ └── rescue_expression: - │ @ IntegerNode (location: (1,41)-(1,43)) - │ ├── flags: static_literal, decimal - │ └── value: 24 - ├── locals: [] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: ∅ - ├── rparen_loc: ∅ - ├── equal_loc: (1,16)-(1,17) = "=" - └── end_keyword_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/defn_forward_args.txt b/test/prism/snapshots/seattlerb/defn_forward_args.txt deleted file mode 100644 index 50fc32c0473c43..00000000000000 --- a/test/prism/snapshots/seattlerb/defn_forward_args.txt +++ /dev/null @@ -1,50 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,23)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,23)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(1,23)) - ├── flags: newline - ├── name: :a - ├── name_loc: (1,4)-(1,5) = "a" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (1,6)-(1,9)) - │ ├── flags: ∅ - │ ├── requireds: (length: 0) - │ ├── optionals: (length: 0) - │ ├── rest: ∅ - │ ├── posts: (length: 0) - │ ├── keywords: (length: 0) - │ ├── keyword_rest: - │ │ @ ForwardingParameterNode (location: (1,6)-(1,9)) - │ │ └── flags: ∅ - │ └── block: ∅ - ├── body: - │ @ StatementsNode (location: (1,12)-(1,18)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,12)-(1,18)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :b - │ ├── message_loc: (1,12)-(1,13) = "b" - │ ├── opening_loc: (1,13)-(1,14) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,14)-(1,17)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ ForwardingArgumentsNode (location: (1,14)-(1,17)) - │ │ └── flags: ∅ - │ ├── closing_loc: (1,17)-(1,18) = ")" - │ └── block: ∅ - ├── locals: [] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: (1,5)-(1,6) = "(" - ├── rparen_loc: (1,9)-(1,10) = ")" - ├── equal_loc: ∅ - └── end_keyword_loc: (1,20)-(1,23) = "end" diff --git a/test/prism/snapshots/seattlerb/defn_forward_args__no_parens.txt b/test/prism/snapshots/seattlerb/defn_forward_args__no_parens.txt deleted file mode 100644 index 8926f2cdf18d4b..00000000000000 --- a/test/prism/snapshots/seattlerb/defn_forward_args__no_parens.txt +++ /dev/null @@ -1,50 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(3,3)) - ├── flags: newline - ├── name: :f - ├── name_loc: (1,4)-(1,5) = "f" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (1,6)-(1,9)) - │ ├── flags: ∅ - │ ├── requireds: (length: 0) - │ ├── optionals: (length: 0) - │ ├── rest: ∅ - │ ├── posts: (length: 0) - │ ├── keywords: (length: 0) - │ ├── keyword_rest: - │ │ @ ForwardingParameterNode (location: (1,6)-(1,9)) - │ │ └── flags: ∅ - │ └── block: ∅ - ├── body: - │ @ StatementsNode (location: (2,2)-(2,8)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (2,2)-(2,8)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :m - │ ├── message_loc: (2,2)-(2,3) = "m" - │ ├── opening_loc: (2,3)-(2,4) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (2,4)-(2,7)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ ForwardingArgumentsNode (location: (2,4)-(2,7)) - │ │ └── flags: ∅ - │ ├── closing_loc: (2,7)-(2,8) = ")" - │ └── block: ∅ - ├── locals: [] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: ∅ - ├── rparen_loc: ∅ - ├── equal_loc: ∅ - └── end_keyword_loc: (3,0)-(3,3) = "end" diff --git a/test/prism/snapshots/seattlerb/defn_kwarg_env.txt b/test/prism/snapshots/seattlerb/defn_kwarg_env.txt deleted file mode 100644 index 0df82b5dc2be21..00000000000000 --- a/test/prism/snapshots/seattlerb/defn_kwarg_env.txt +++ /dev/null @@ -1,62 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,45)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,45)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(1,45)) - ├── flags: newline - ├── name: :test - ├── name_loc: (1,4)-(1,8) = "test" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (1,9)-(1,18)) - │ ├── flags: ∅ - │ ├── requireds: (length: 0) - │ ├── optionals: (length: 0) - │ ├── rest: ∅ - │ ├── posts: (length: 0) - │ ├── keywords: (length: 0) - │ ├── keyword_rest: - │ │ @ KeywordRestParameterNode (location: (1,9)-(1,18)) - │ │ ├── flags: ∅ - │ │ ├── name: :testing - │ │ ├── name_loc: (1,11)-(1,18) = "testing" - │ │ └── operator_loc: (1,9)-(1,11) = "**" - │ └── block: ∅ - ├── body: - │ @ StatementsNode (location: (1,20)-(1,41)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,20)-(1,41)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :test_splat - │ ├── message_loc: (1,20)-(1,30) = "test_splat" - │ ├── opening_loc: (1,30)-(1,31) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,31)-(1,40)) - │ │ ├── flags: contains_keywords, contains_keyword_splat - │ │ └── arguments: (length: 1) - │ │ └── @ KeywordHashNode (location: (1,31)-(1,40)) - │ │ ├── flags: ∅ - │ │ └── elements: (length: 1) - │ │ └── @ AssocSplatNode (location: (1,31)-(1,40)) - │ │ ├── flags: ∅ - │ │ ├── value: - │ │ │ @ LocalVariableReadNode (location: (1,33)-(1,40)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :testing - │ │ │ └── depth: 0 - │ │ └── operator_loc: (1,31)-(1,33) = "**" - │ ├── closing_loc: (1,40)-(1,41) = ")" - │ └── block: ∅ - ├── locals: [:testing] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: (1,8)-(1,9) = "(" - ├── rparen_loc: (1,18)-(1,19) = ")" - ├── equal_loc: ∅ - └── end_keyword_loc: (1,42)-(1,45) = "end" diff --git a/test/prism/snapshots/seattlerb/defn_kwarg_kwarg.txt b/test/prism/snapshots/seattlerb/defn_kwarg_kwarg.txt deleted file mode 100644 index ead1437a86fae8..00000000000000 --- a/test/prism/snapshots/seattlerb/defn_kwarg_kwarg.txt +++ /dev/null @@ -1,49 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,24)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,24)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(1,24)) - ├── flags: newline - ├── name: :f - ├── name_loc: (1,4)-(1,5) = "f" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (1,6)-(1,19)) - │ ├── flags: ∅ - │ ├── requireds: (length: 1) - │ │ └── @ RequiredParameterNode (location: (1,6)-(1,7)) - │ │ ├── flags: ∅ - │ │ └── name: :a - │ ├── optionals: (length: 0) - │ ├── rest: ∅ - │ ├── posts: (length: 0) - │ ├── keywords: (length: 2) - │ │ ├── @ OptionalKeywordParameterNode (location: (1,9)-(1,13)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :b - │ │ │ ├── name_loc: (1,9)-(1,11) = "b:" - │ │ │ └── value: - │ │ │ @ IntegerNode (location: (1,12)-(1,13)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── @ OptionalKeywordParameterNode (location: (1,15)-(1,19)) - │ │ ├── flags: ∅ - │ │ ├── name: :c - │ │ ├── name_loc: (1,15)-(1,17) = "c:" - │ │ └── value: - │ │ @ IntegerNode (location: (1,18)-(1,19)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── keyword_rest: ∅ - │ └── block: ∅ - ├── body: ∅ - ├── locals: [:a, :b, :c] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: (1,5)-(1,6) = "(" - ├── rparen_loc: (1,19)-(1,20) = ")" - ├── equal_loc: ∅ - └── end_keyword_loc: (1,21)-(1,24) = "end" diff --git a/test/prism/snapshots/seattlerb/defn_kwarg_kwsplat.txt b/test/prism/snapshots/seattlerb/defn_kwarg_kwsplat.txt deleted file mode 100644 index 2b228334604e2d..00000000000000 --- a/test/prism/snapshots/seattlerb/defn_kwarg_kwsplat.txt +++ /dev/null @@ -1,43 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,20)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,20)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(1,20)) - ├── flags: newline - ├── name: :a - ├── name_loc: (1,4)-(1,5) = "a" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (1,6)-(1,15)) - │ ├── flags: ∅ - │ ├── requireds: (length: 0) - │ ├── optionals: (length: 0) - │ ├── rest: ∅ - │ ├── posts: (length: 0) - │ ├── keywords: (length: 1) - │ │ └── @ OptionalKeywordParameterNode (location: (1,6)-(1,10)) - │ │ ├── flags: ∅ - │ │ ├── name: :b - │ │ ├── name_loc: (1,6)-(1,8) = "b:" - │ │ └── value: - │ │ @ IntegerNode (location: (1,9)-(1,10)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── keyword_rest: - │ │ @ KeywordRestParameterNode (location: (1,12)-(1,15)) - │ │ ├── flags: ∅ - │ │ ├── name: :c - │ │ ├── name_loc: (1,14)-(1,15) = "c" - │ │ └── operator_loc: (1,12)-(1,14) = "**" - │ └── block: ∅ - ├── body: ∅ - ├── locals: [:b, :c] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: (1,5)-(1,6) = "(" - ├── rparen_loc: (1,15)-(1,16) = ")" - ├── equal_loc: ∅ - └── end_keyword_loc: (1,17)-(1,20) = "end" diff --git a/test/prism/snapshots/seattlerb/defn_kwarg_kwsplat_anon.txt b/test/prism/snapshots/seattlerb/defn_kwarg_kwsplat_anon.txt deleted file mode 100644 index 1e0e1f132e7416..00000000000000 --- a/test/prism/snapshots/seattlerb/defn_kwarg_kwsplat_anon.txt +++ /dev/null @@ -1,43 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,19)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,19)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(1,19)) - ├── flags: newline - ├── name: :a - ├── name_loc: (1,4)-(1,5) = "a" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (1,6)-(1,14)) - │ ├── flags: ∅ - │ ├── requireds: (length: 0) - │ ├── optionals: (length: 0) - │ ├── rest: ∅ - │ ├── posts: (length: 0) - │ ├── keywords: (length: 1) - │ │ └── @ OptionalKeywordParameterNode (location: (1,6)-(1,10)) - │ │ ├── flags: ∅ - │ │ ├── name: :b - │ │ ├── name_loc: (1,6)-(1,8) = "b:" - │ │ └── value: - │ │ @ IntegerNode (location: (1,9)-(1,10)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── keyword_rest: - │ │ @ KeywordRestParameterNode (location: (1,12)-(1,14)) - │ │ ├── flags: ∅ - │ │ ├── name: ∅ - │ │ ├── name_loc: ∅ - │ │ └── operator_loc: (1,12)-(1,14) = "**" - │ └── block: ∅ - ├── body: ∅ - ├── locals: [:b] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: (1,5)-(1,6) = "(" - ├── rparen_loc: (1,14)-(1,15) = ")" - ├── equal_loc: ∅ - └── end_keyword_loc: (1,16)-(1,19) = "end" diff --git a/test/prism/snapshots/seattlerb/defn_kwarg_lvar.txt b/test/prism/snapshots/seattlerb/defn_kwarg_lvar.txt deleted file mode 100644 index 0835d3987db21c..00000000000000 --- a/test/prism/snapshots/seattlerb/defn_kwarg_lvar.txt +++ /dev/null @@ -1,48 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,26)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,26)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(1,26)) - ├── flags: newline - ├── name: :fun - ├── name_loc: (1,4)-(1,7) = "fun" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (1,8)-(1,16)) - │ ├── flags: ∅ - │ ├── requireds: (length: 0) - │ ├── optionals: (length: 0) - │ ├── rest: ∅ - │ ├── posts: (length: 0) - │ ├── keywords: (length: 1) - │ │ └── @ OptionalKeywordParameterNode (location: (1,8)-(1,16)) - │ │ ├── flags: ∅ - │ │ ├── name: :kw - │ │ ├── name_loc: (1,8)-(1,11) = "kw:" - │ │ └── value: - │ │ @ SymbolNode (location: (1,12)-(1,16)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (1,12)-(1,13) = ":" - │ │ ├── value_loc: (1,13)-(1,16) = "val" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "val" - │ ├── keyword_rest: ∅ - │ └── block: ∅ - ├── body: - │ @ StatementsNode (location: (1,19)-(1,21)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ LocalVariableReadNode (location: (1,19)-(1,21)) - │ ├── flags: newline - │ ├── name: :kw - │ └── depth: 0 - ├── locals: [:kw] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: (1,7)-(1,8) = "(" - ├── rparen_loc: (1,16)-(1,17) = ")" - ├── equal_loc: ∅ - └── end_keyword_loc: (1,23)-(1,26) = "end" diff --git a/test/prism/snapshots/seattlerb/defn_kwarg_no_parens.txt b/test/prism/snapshots/seattlerb/defn_kwarg_no_parens.txt deleted file mode 100644 index 3f6af5e0ee49a9..00000000000000 --- a/test/prism/snapshots/seattlerb/defn_kwarg_no_parens.txt +++ /dev/null @@ -1,38 +0,0 @@ -@ ProgramNode (location: (1,0)-(2,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(2,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(2,3)) - ├── flags: newline - ├── name: :f - ├── name_loc: (1,4)-(1,5) = "f" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (1,6)-(1,10)) - │ ├── flags: ∅ - │ ├── requireds: (length: 0) - │ ├── optionals: (length: 0) - │ ├── rest: ∅ - │ ├── posts: (length: 0) - │ ├── keywords: (length: 1) - │ │ └── @ OptionalKeywordParameterNode (location: (1,6)-(1,10)) - │ │ ├── flags: ∅ - │ │ ├── name: :a - │ │ ├── name_loc: (1,6)-(1,8) = "a:" - │ │ └── value: - │ │ @ IntegerNode (location: (1,9)-(1,10)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── keyword_rest: ∅ - │ └── block: ∅ - ├── body: ∅ - ├── locals: [:a] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: ∅ - ├── rparen_loc: ∅ - ├── equal_loc: ∅ - └── end_keyword_loc: (2,0)-(2,3) = "end" diff --git a/test/prism/snapshots/seattlerb/defn_kwarg_val.txt b/test/prism/snapshots/seattlerb/defn_kwarg_val.txt deleted file mode 100644 index 38cb995c093258..00000000000000 --- a/test/prism/snapshots/seattlerb/defn_kwarg_val.txt +++ /dev/null @@ -1,41 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,17)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,17)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(1,17)) - ├── flags: newline - ├── name: :f - ├── name_loc: (1,4)-(1,5) = "f" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (1,6)-(1,12)) - │ ├── flags: ∅ - │ ├── requireds: (length: 1) - │ │ └── @ RequiredParameterNode (location: (1,6)-(1,7)) - │ │ ├── flags: ∅ - │ │ └── name: :a - │ ├── optionals: (length: 0) - │ ├── rest: ∅ - │ ├── posts: (length: 0) - │ ├── keywords: (length: 1) - │ │ └── @ OptionalKeywordParameterNode (location: (1,9)-(1,12)) - │ │ ├── flags: ∅ - │ │ ├── name: :b - │ │ ├── name_loc: (1,9)-(1,11) = "b:" - │ │ └── value: - │ │ @ IntegerNode (location: (1,11)-(1,12)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── keyword_rest: ∅ - │ └── block: ∅ - ├── body: ∅ - ├── locals: [:a, :b] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: (1,5)-(1,6) = "(" - ├── rparen_loc: (1,12)-(1,13) = ")" - ├── equal_loc: ∅ - └── end_keyword_loc: (1,14)-(1,17) = "end" diff --git a/test/prism/snapshots/seattlerb/defn_no_kwargs.txt b/test/prism/snapshots/seattlerb/defn_no_kwargs.txt deleted file mode 100644 index 778b300a4be2e1..00000000000000 --- a/test/prism/snapshots/seattlerb/defn_no_kwargs.txt +++ /dev/null @@ -1,34 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,17)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,17)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(1,17)) - ├── flags: newline - ├── name: :x - ├── name_loc: (1,4)-(1,5) = "x" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (1,6)-(1,11)) - │ ├── flags: ∅ - │ ├── requireds: (length: 0) - │ ├── optionals: (length: 0) - │ ├── rest: ∅ - │ ├── posts: (length: 0) - │ ├── keywords: (length: 0) - │ ├── keyword_rest: - │ │ @ NoKeywordsParameterNode (location: (1,6)-(1,11)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (1,6)-(1,8) = "**" - │ │ └── keyword_loc: (1,8)-(1,11) = "nil" - │ └── block: ∅ - ├── body: ∅ - ├── locals: [] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: (1,5)-(1,6) = "(" - ├── rparen_loc: (1,11)-(1,12) = ")" - ├── equal_loc: ∅ - └── end_keyword_loc: (1,14)-(1,17) = "end" diff --git a/test/prism/snapshots/seattlerb/defn_oneliner.txt b/test/prism/snapshots/seattlerb/defn_oneliner.txt deleted file mode 100644 index 81ca22f010e69c..00000000000000 --- a/test/prism/snapshots/seattlerb/defn_oneliner.txt +++ /dev/null @@ -1,53 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,27)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,27)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(1,27)) - ├── flags: newline - ├── name: :exec - ├── name_loc: (1,4)-(1,8) = "exec" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (1,9)-(1,12)) - │ ├── flags: ∅ - │ ├── requireds: (length: 1) - │ │ └── @ RequiredParameterNode (location: (1,9)-(1,12)) - │ │ ├── flags: ∅ - │ │ └── name: :cmd - │ ├── optionals: (length: 0) - │ ├── rest: ∅ - │ ├── posts: (length: 0) - │ ├── keywords: (length: 0) - │ ├── keyword_rest: ∅ - │ └── block: ∅ - ├── body: - │ @ StatementsNode (location: (1,16)-(1,27)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,16)-(1,27)) - │ ├── flags: ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :system - │ ├── message_loc: (1,16)-(1,22) = "system" - │ ├── opening_loc: (1,22)-(1,23) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,23)-(1,26)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ LocalVariableReadNode (location: (1,23)-(1,26)) - │ │ ├── flags: ∅ - │ │ ├── name: :cmd - │ │ └── depth: 0 - │ ├── closing_loc: (1,26)-(1,27) = ")" - │ └── block: ∅ - ├── locals: [:cmd] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: (1,8)-(1,9) = "(" - ├── rparen_loc: (1,12)-(1,13) = ")" - ├── equal_loc: (1,14)-(1,15) = "=" - └── end_keyword_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/defn_oneliner_eq2.txt b/test/prism/snapshots/seattlerb/defn_oneliner_eq2.txt deleted file mode 100644 index 414ecff4eddf49..00000000000000 --- a/test/prism/snapshots/seattlerb/defn_oneliner_eq2.txt +++ /dev/null @@ -1,55 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ ClassNode (location: (1,0)-(3,3)) - ├── flags: newline - ├── locals: [] - ├── class_keyword_loc: (1,0)-(1,5) = "class" - ├── constant_path: - │ @ ConstantReadNode (location: (1,6)-(1,7)) - │ ├── flags: ∅ - │ └── name: :X - ├── inheritance_operator_loc: ∅ - ├── superclass: ∅ - ├── body: - │ @ StatementsNode (location: (2,2)-(2,16)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ DefNode (location: (2,2)-(2,16)) - │ ├── flags: newline - │ ├── name: :== - │ ├── name_loc: (2,6)-(2,8) = "==" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (2,9)-(2,10)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (2,9)-(2,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :o - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (2,14)-(2,16)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ IntegerNode (location: (2,14)-(2,16)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 42 - │ ├── locals: [:o] - │ ├── def_keyword_loc: (2,2)-(2,5) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (2,8)-(2,9) = "(" - │ ├── rparen_loc: (2,10)-(2,11) = ")" - │ ├── equal_loc: (2,12)-(2,13) = "=" - │ └── end_keyword_loc: ∅ - ├── end_keyword_loc: (3,0)-(3,3) = "end" - └── name: :X diff --git a/test/prism/snapshots/seattlerb/defn_oneliner_noargs.txt b/test/prism/snapshots/seattlerb/defn_oneliner_noargs.txt deleted file mode 100644 index 5928f64179fc9b..00000000000000 --- a/test/prism/snapshots/seattlerb/defn_oneliner_noargs.txt +++ /dev/null @@ -1,34 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,17)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,17)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(1,17)) - ├── flags: newline - ├── name: :exec - ├── name_loc: (1,4)-(1,8) = "exec" - ├── receiver: ∅ - ├── parameters: ∅ - ├── body: - │ @ StatementsNode (location: (1,11)-(1,17)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,11)-(1,17)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :system - │ ├── message_loc: (1,11)-(1,17) = "system" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── locals: [] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: ∅ - ├── rparen_loc: ∅ - ├── equal_loc: (1,9)-(1,10) = "=" - └── end_keyword_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/defn_oneliner_noargs_parentheses.txt b/test/prism/snapshots/seattlerb/defn_oneliner_noargs_parentheses.txt deleted file mode 100644 index d0cd777039ee97..00000000000000 --- a/test/prism/snapshots/seattlerb/defn_oneliner_noargs_parentheses.txt +++ /dev/null @@ -1,34 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,19)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,19)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(1,19)) - ├── flags: newline - ├── name: :exec - ├── name_loc: (1,4)-(1,8) = "exec" - ├── receiver: ∅ - ├── parameters: ∅ - ├── body: - │ @ StatementsNode (location: (1,13)-(1,19)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,13)-(1,19)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :system - │ ├── message_loc: (1,13)-(1,19) = "system" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── locals: [] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: (1,8)-(1,9) = "(" - ├── rparen_loc: (1,9)-(1,10) = ")" - ├── equal_loc: (1,11)-(1,12) = "=" - └── end_keyword_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/defn_oneliner_rescue.txt b/test/prism/snapshots/seattlerb/defn_oneliner_rescue.txt deleted file mode 100644 index d6cfba773d634f..00000000000000 --- a/test/prism/snapshots/seattlerb/defn_oneliner_rescue.txt +++ /dev/null @@ -1,180 +0,0 @@ -@ ProgramNode (location: (1,0)-(13,38)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(13,38)) - ├── flags: ∅ - └── body: (length: 3) - ├── @ DefNode (location: (1,0)-(5,3)) - │ ├── flags: newline - │ ├── name: :exec - │ ├── name_loc: (1,4)-(1,8) = "exec" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,9)-(1,12)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (1,9)-(1,12)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :cmd - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ BeginNode (location: (1,0)-(5,3)) - │ │ ├── flags: ∅ - │ │ ├── begin_keyword_loc: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (2,2)-(2,13)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (2,2)-(2,13)) - │ │ │ ├── flags: newline, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :system - │ │ │ ├── message_loc: (2,2)-(2,8) = "system" - │ │ │ ├── opening_loc: (2,8)-(2,9) = "(" - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (2,9)-(2,12)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ LocalVariableReadNode (location: (2,9)-(2,12)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :cmd - │ │ │ │ └── depth: 0 - │ │ │ ├── closing_loc: (2,12)-(2,13) = ")" - │ │ │ └── block: ∅ - │ │ ├── rescue_clause: - │ │ │ @ RescueNode (location: (3,0)-(4,5)) - │ │ │ ├── flags: ∅ - │ │ │ ├── keyword_loc: (3,0)-(3,6) = "rescue" - │ │ │ ├── exceptions: (length: 0) - │ │ │ ├── operator_loc: ∅ - │ │ │ ├── reference: ∅ - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (4,2)-(4,5)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ NilNode (location: (4,2)-(4,5)) - │ │ │ │ └── flags: newline, static_literal - │ │ │ └── subsequent: ∅ - │ │ ├── else_clause: ∅ - │ │ ├── ensure_clause: ∅ - │ │ └── end_keyword_loc: (5,0)-(5,3) = "end" - │ ├── locals: [:cmd] - │ ├── def_keyword_loc: (1,0)-(1,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (1,8)-(1,9) = "(" - │ ├── rparen_loc: (1,12)-(1,13) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (5,0)-(5,3) = "end" - ├── @ DefNode (location: (8,0)-(10,3)) - │ ├── flags: newline - │ ├── name: :exec - │ ├── name_loc: (8,4)-(8,8) = "exec" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (8,9)-(8,12)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (8,9)-(8,12)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :cmd - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (9,2)-(9,24)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ RescueModifierNode (location: (9,2)-(9,24)) - │ │ ├── flags: newline - │ │ ├── expression: - │ │ │ @ CallNode (location: (9,2)-(9,13)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :system - │ │ │ ├── message_loc: (9,2)-(9,8) = "system" - │ │ │ ├── opening_loc: (9,8)-(9,9) = "(" - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (9,9)-(9,12)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ LocalVariableReadNode (location: (9,9)-(9,12)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :cmd - │ │ │ │ └── depth: 0 - │ │ │ ├── closing_loc: (9,12)-(9,13) = ")" - │ │ │ └── block: ∅ - │ │ ├── keyword_loc: (9,14)-(9,20) = "rescue" - │ │ └── rescue_expression: - │ │ @ NilNode (location: (9,21)-(9,24)) - │ │ └── flags: static_literal - │ ├── locals: [:cmd] - │ ├── def_keyword_loc: (8,0)-(8,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (8,8)-(8,9) = "(" - │ ├── rparen_loc: (8,12)-(8,13) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (10,0)-(10,3) = "end" - └── @ DefNode (location: (13,0)-(13,38)) - ├── flags: newline - ├── name: :exec - ├── name_loc: (13,4)-(13,8) = "exec" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (13,9)-(13,12)) - │ ├── flags: ∅ - │ ├── requireds: (length: 1) - │ │ └── @ RequiredParameterNode (location: (13,9)-(13,12)) - │ │ ├── flags: ∅ - │ │ └── name: :cmd - │ ├── optionals: (length: 0) - │ ├── rest: ∅ - │ ├── posts: (length: 0) - │ ├── keywords: (length: 0) - │ ├── keyword_rest: ∅ - │ └── block: ∅ - ├── body: - │ @ StatementsNode (location: (13,16)-(13,38)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ RescueModifierNode (location: (13,16)-(13,38)) - │ ├── flags: ∅ - │ ├── expression: - │ │ @ CallNode (location: (13,16)-(13,27)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :system - │ │ ├── message_loc: (13,16)-(13,22) = "system" - │ │ ├── opening_loc: (13,22)-(13,23) = "(" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (13,23)-(13,26)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ LocalVariableReadNode (location: (13,23)-(13,26)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :cmd - │ │ │ └── depth: 0 - │ │ ├── closing_loc: (13,26)-(13,27) = ")" - │ │ └── block: ∅ - │ ├── keyword_loc: (13,28)-(13,34) = "rescue" - │ └── rescue_expression: - │ @ NilNode (location: (13,35)-(13,38)) - │ └── flags: static_literal - ├── locals: [:cmd] - ├── def_keyword_loc: (13,0)-(13,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: (13,8)-(13,9) = "(" - ├── rparen_loc: (13,12)-(13,13) = ")" - ├── equal_loc: (13,14)-(13,15) = "=" - └── end_keyword_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/defn_opt_last_arg.txt b/test/prism/snapshots/seattlerb/defn_opt_last_arg.txt deleted file mode 100644 index f7c37e3d457b35..00000000000000 --- a/test/prism/snapshots/seattlerb/defn_opt_last_arg.txt +++ /dev/null @@ -1,38 +0,0 @@ -@ ProgramNode (location: (1,0)-(2,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(2,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(2,3)) - ├── flags: newline - ├── name: :m - ├── name_loc: (1,4)-(1,5) = "m" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (1,6)-(1,17)) - │ ├── flags: ∅ - │ ├── requireds: (length: 0) - │ ├── optionals: (length: 1) - │ │ └── @ OptionalParameterNode (location: (1,6)-(1,17)) - │ │ ├── flags: ∅ - │ │ ├── name: :arg - │ │ ├── name_loc: (1,6)-(1,9) = "arg" - │ │ ├── operator_loc: (1,10)-(1,11) = "=" - │ │ └── value: - │ │ @ FalseNode (location: (1,12)-(1,17)) - │ │ └── flags: static_literal - │ ├── rest: ∅ - │ ├── posts: (length: 0) - │ ├── keywords: (length: 0) - │ ├── keyword_rest: ∅ - │ └── block: ∅ - ├── body: ∅ - ├── locals: [:arg] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: ∅ - ├── rparen_loc: ∅ - ├── equal_loc: ∅ - └── end_keyword_loc: (2,0)-(2,3) = "end" diff --git a/test/prism/snapshots/seattlerb/defn_opt_reg.txt b/test/prism/snapshots/seattlerb/defn_opt_reg.txt deleted file mode 100644 index 9bdd14390504ee..00000000000000 --- a/test/prism/snapshots/seattlerb/defn_opt_reg.txt +++ /dev/null @@ -1,41 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,19)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,19)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(1,19)) - ├── flags: newline - ├── name: :f - ├── name_loc: (1,4)-(1,5) = "f" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (1,6)-(1,14)) - │ ├── flags: ∅ - │ ├── requireds: (length: 0) - │ ├── optionals: (length: 1) - │ │ └── @ OptionalParameterNode (location: (1,6)-(1,11)) - │ │ ├── flags: ∅ - │ │ ├── name: :a - │ │ ├── name_loc: (1,6)-(1,7) = "a" - │ │ ├── operator_loc: (1,7)-(1,8) = "=" - │ │ └── value: - │ │ @ NilNode (location: (1,8)-(1,11)) - │ │ └── flags: static_literal - │ ├── rest: ∅ - │ ├── posts: (length: 1) - │ │ └── @ RequiredParameterNode (location: (1,13)-(1,14)) - │ │ ├── flags: ∅ - │ │ └── name: :b - │ ├── keywords: (length: 0) - │ ├── keyword_rest: ∅ - │ └── block: ∅ - ├── body: ∅ - ├── locals: [:a, :b] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: (1,5)-(1,6) = "(" - ├── rparen_loc: (1,14)-(1,15) = ")" - ├── equal_loc: ∅ - └── end_keyword_loc: (1,16)-(1,19) = "end" diff --git a/test/prism/snapshots/seattlerb/defn_opt_splat_arg.txt b/test/prism/snapshots/seattlerb/defn_opt_splat_arg.txt deleted file mode 100644 index d90fddc6533ace..00000000000000 --- a/test/prism/snapshots/seattlerb/defn_opt_splat_arg.txt +++ /dev/null @@ -1,47 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,24)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,24)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(1,24)) - ├── flags: newline - ├── name: :f - ├── name_loc: (1,4)-(1,5) = "f" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (1,7)-(1,19)) - │ ├── flags: ∅ - │ ├── requireds: (length: 0) - │ ├── optionals: (length: 1) - │ │ └── @ OptionalParameterNode (location: (1,7)-(1,12)) - │ │ ├── flags: ∅ - │ │ ├── name: :a - │ │ ├── name_loc: (1,7)-(1,8) = "a" - │ │ ├── operator_loc: (1,9)-(1,10) = "=" - │ │ └── value: - │ │ @ IntegerNode (location: (1,11)-(1,12)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── rest: - │ │ @ RestParameterNode (location: (1,14)-(1,16)) - │ │ ├── flags: ∅ - │ │ ├── name: :b - │ │ ├── name_loc: (1,15)-(1,16) = "b" - │ │ └── operator_loc: (1,14)-(1,15) = "*" - │ ├── posts: (length: 1) - │ │ └── @ RequiredParameterNode (location: (1,18)-(1,19)) - │ │ ├── flags: ∅ - │ │ └── name: :c - │ ├── keywords: (length: 0) - │ ├── keyword_rest: ∅ - │ └── block: ∅ - ├── body: ∅ - ├── locals: [:a, :b, :c] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: (1,6)-(1,7) = "(" - ├── rparen_loc: (1,19)-(1,20) = ")" - ├── equal_loc: ∅ - └── end_keyword_loc: (1,21)-(1,24) = "end" diff --git a/test/prism/snapshots/seattlerb/defn_powarg.txt b/test/prism/snapshots/seattlerb/defn_powarg.txt deleted file mode 100644 index 8d4ff4283ac141..00000000000000 --- a/test/prism/snapshots/seattlerb/defn_powarg.txt +++ /dev/null @@ -1,35 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,17)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,17)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(1,17)) - ├── flags: newline - ├── name: :f - ├── name_loc: (1,4)-(1,5) = "f" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (1,6)-(1,12)) - │ ├── flags: ∅ - │ ├── requireds: (length: 0) - │ ├── optionals: (length: 0) - │ ├── rest: ∅ - │ ├── posts: (length: 0) - │ ├── keywords: (length: 0) - │ ├── keyword_rest: - │ │ @ KeywordRestParameterNode (location: (1,6)-(1,12)) - │ │ ├── flags: ∅ - │ │ ├── name: :opts - │ │ ├── name_loc: (1,8)-(1,12) = "opts" - │ │ └── operator_loc: (1,6)-(1,8) = "**" - │ └── block: ∅ - ├── body: ∅ - ├── locals: [:opts] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: (1,5)-(1,6) = "(" - ├── rparen_loc: (1,12)-(1,13) = ")" - ├── equal_loc: ∅ - └── end_keyword_loc: (1,14)-(1,17) = "end" diff --git a/test/prism/snapshots/seattlerb/defn_reg_opt_reg.txt b/test/prism/snapshots/seattlerb/defn_reg_opt_reg.txt deleted file mode 100644 index 0cd1435e8f992b..00000000000000 --- a/test/prism/snapshots/seattlerb/defn_reg_opt_reg.txt +++ /dev/null @@ -1,48 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,23)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,23)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(1,23)) - ├── flags: newline - ├── name: :f - ├── name_loc: (1,4)-(1,5) = "f" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (1,6)-(1,18)) - │ ├── flags: ∅ - │ ├── requireds: (length: 1) - │ │ └── @ RequiredParameterNode (location: (1,6)-(1,7)) - │ │ ├── flags: ∅ - │ │ └── name: :a - │ ├── optionals: (length: 1) - │ │ └── @ OptionalParameterNode (location: (1,9)-(1,15)) - │ │ ├── flags: ∅ - │ │ ├── name: :b - │ │ ├── name_loc: (1,9)-(1,10) = "b" - │ │ ├── operator_loc: (1,11)-(1,12) = "=" - │ │ └── value: - │ │ @ SymbolNode (location: (1,13)-(1,15)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (1,13)-(1,14) = ":" - │ │ ├── value_loc: (1,14)-(1,15) = "c" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "c" - │ ├── rest: ∅ - │ ├── posts: (length: 1) - │ │ └── @ RequiredParameterNode (location: (1,17)-(1,18)) - │ │ ├── flags: ∅ - │ │ └── name: :d - │ ├── keywords: (length: 0) - │ ├── keyword_rest: ∅ - │ └── block: ∅ - ├── body: ∅ - ├── locals: [:a, :b, :d] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: (1,5)-(1,6) = "(" - ├── rparen_loc: (1,18)-(1,19) = ")" - ├── equal_loc: ∅ - └── end_keyword_loc: (1,20)-(1,23) = "end" diff --git a/test/prism/snapshots/seattlerb/defn_splat_arg.txt b/test/prism/snapshots/seattlerb/defn_splat_arg.txt deleted file mode 100644 index c137e263c4433c..00000000000000 --- a/test/prism/snapshots/seattlerb/defn_splat_arg.txt +++ /dev/null @@ -1,38 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,15)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,15)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(1,15)) - ├── flags: newline - ├── name: :f - ├── name_loc: (1,4)-(1,5) = "f" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (1,6)-(1,10)) - │ ├── flags: ∅ - │ ├── requireds: (length: 0) - │ ├── optionals: (length: 0) - │ ├── rest: - │ │ @ RestParameterNode (location: (1,6)-(1,7)) - │ │ ├── flags: ∅ - │ │ ├── name: ∅ - │ │ ├── name_loc: ∅ - │ │ └── operator_loc: (1,6)-(1,7) = "*" - │ ├── posts: (length: 1) - │ │ └── @ RequiredParameterNode (location: (1,9)-(1,10)) - │ │ ├── flags: ∅ - │ │ └── name: :a - │ ├── keywords: (length: 0) - │ ├── keyword_rest: ∅ - │ └── block: ∅ - ├── body: ∅ - ├── locals: [:a] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: (1,5)-(1,6) = "(" - ├── rparen_loc: (1,10)-(1,11) = ")" - ├── equal_loc: ∅ - └── end_keyword_loc: (1,12)-(1,15) = "end" diff --git a/test/prism/snapshots/seattlerb/defn_unary_not.txt b/test/prism/snapshots/seattlerb/defn_unary_not.txt deleted file mode 100644 index 0722d3cdca18a2..00000000000000 --- a/test/prism/snapshots/seattlerb/defn_unary_not.txt +++ /dev/null @@ -1,26 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,17)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,17)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(1,17)) - ├── flags: newline - ├── name: :! - ├── name_loc: (1,4)-(1,6) = "!@" - ├── receiver: ∅ - ├── parameters: ∅ - ├── body: - │ @ StatementsNode (location: (1,8)-(1,12)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ TrueNode (location: (1,8)-(1,12)) - │ └── flags: newline, static_literal - ├── locals: [] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: ∅ - ├── rparen_loc: ∅ - ├── equal_loc: ∅ - └── end_keyword_loc: (1,14)-(1,17) = "end" diff --git a/test/prism/snapshots/seattlerb/defns_reserved.txt b/test/prism/snapshots/seattlerb/defns_reserved.txt deleted file mode 100644 index 10361184ac86a7..00000000000000 --- a/test/prism/snapshots/seattlerb/defns_reserved.txt +++ /dev/null @@ -1,23 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,20)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,20)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(1,20)) - ├── flags: newline - ├── name: :return - ├── name_loc: (1,9)-(1,15) = "return" - ├── receiver: - │ @ SelfNode (location: (1,4)-(1,8)) - │ └── flags: ∅ - ├── parameters: ∅ - ├── body: ∅ - ├── locals: [] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: (1,8)-(1,9) = "." - ├── lparen_loc: ∅ - ├── rparen_loc: ∅ - ├── equal_loc: ∅ - └── end_keyword_loc: (1,17)-(1,20) = "end" diff --git a/test/prism/snapshots/seattlerb/defs_as_arg_with_do_block_inside.txt b/test/prism/snapshots/seattlerb/defs_as_arg_with_do_block_inside.txt deleted file mode 100644 index f9479eb11bddca..00000000000000 --- a/test/prism/snapshots/seattlerb/defs_as_arg_with_do_block_inside.txt +++ /dev/null @@ -1,66 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,30)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,30)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,30)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :p - ├── message_loc: (1,0)-(1,1) = "p" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,2)-(1,30)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ DefNode (location: (1,2)-(1,30)) - │ ├── flags: ∅ - │ ├── name: :b - │ ├── name_loc: (1,11)-(1,12) = "b" - │ ├── receiver: - │ │ @ SelfNode (location: (1,6)-(1,10)) - │ │ └── flags: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (1,14)-(1,25)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (1,14)-(1,25)) - │ │ ├── flags: newline - │ │ ├── receiver: - │ │ │ @ CallNode (location: (1,14)-(1,15)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :x - │ │ │ ├── message_loc: (1,14)-(1,15) = "x" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: (1,15)-(1,16) = "." - │ │ ├── name: :y - │ │ ├── message_loc: (1,16)-(1,17) = "y" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: - │ │ @ BlockNode (location: (1,18)-(1,25)) - │ │ ├── flags: ∅ - │ │ ├── locals: [] - │ │ ├── parameters: ∅ - │ │ ├── body: ∅ - │ │ ├── opening_loc: (1,18)-(1,20) = "do" - │ │ └── closing_loc: (1,22)-(1,25) = "end" - │ ├── locals: [] - │ ├── def_keyword_loc: (1,2)-(1,5) = "def" - │ ├── operator_loc: (1,10)-(1,11) = "." - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (1,27)-(1,30) = "end" - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/defs_comments.txt b/test/prism/snapshots/seattlerb/defs_comments.txt deleted file mode 100644 index 7f94497978b32a..00000000000000 --- a/test/prism/snapshots/seattlerb/defs_comments.txt +++ /dev/null @@ -1,23 +0,0 @@ -@ ProgramNode (location: (4,0)-(5,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (4,0)-(5,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (4,0)-(5,3)) - ├── flags: newline - ├── name: :blah - ├── name_loc: (4,9)-(4,13) = "blah" - ├── receiver: - │ @ SelfNode (location: (4,4)-(4,8)) - │ └── flags: ∅ - ├── parameters: ∅ - ├── body: ∅ - ├── locals: [] - ├── def_keyword_loc: (4,0)-(4,3) = "def" - ├── operator_loc: (4,8)-(4,9) = "." - ├── lparen_loc: ∅ - ├── rparen_loc: ∅ - ├── equal_loc: ∅ - └── end_keyword_loc: (5,0)-(5,3) = "end" diff --git a/test/prism/snapshots/seattlerb/defs_endless_command.txt b/test/prism/snapshots/seattlerb/defs_endless_command.txt deleted file mode 100644 index f34d667901c789..00000000000000 --- a/test/prism/snapshots/seattlerb/defs_endless_command.txt +++ /dev/null @@ -1,50 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,35)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,35)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(1,35)) - ├── flags: newline - ├── name: :some_method - ├── name_loc: (1,6)-(1,17) = "some_method" - ├── receiver: - │ @ CallNode (location: (1,4)-(1,5)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :x - │ ├── message_loc: (1,4)-(1,5) = "x" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── parameters: ∅ - ├── body: - │ @ StatementsNode (location: (1,20)-(1,35)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,20)-(1,35)) - │ ├── flags: ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :other_method - │ ├── message_loc: (1,20)-(1,32) = "other_method" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,33)-(1,35)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (1,33)-(1,35)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 42 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── locals: [] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: (1,5)-(1,6) = "." - ├── lparen_loc: ∅ - ├── rparen_loc: ∅ - ├── equal_loc: (1,18)-(1,19) = "=" - └── end_keyword_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/defs_endless_command_rescue.txt b/test/prism/snapshots/seattlerb/defs_endless_command_rescue.txt deleted file mode 100644 index fe859369400bbe..00000000000000 --- a/test/prism/snapshots/seattlerb/defs_endless_command_rescue.txt +++ /dev/null @@ -1,58 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,45)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,45)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(1,45)) - ├── flags: newline - ├── name: :some_method - ├── name_loc: (1,6)-(1,17) = "some_method" - ├── receiver: - │ @ CallNode (location: (1,4)-(1,5)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :x - │ ├── message_loc: (1,4)-(1,5) = "x" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── parameters: ∅ - ├── body: - │ @ StatementsNode (location: (1,20)-(1,45)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ RescueModifierNode (location: (1,20)-(1,45)) - │ ├── flags: ∅ - │ ├── expression: - │ │ @ CallNode (location: (1,20)-(1,35)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :other_method - │ │ ├── message_loc: (1,20)-(1,32) = "other_method" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (1,33)-(1,35)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (1,33)-(1,35)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 42 - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── keyword_loc: (1,36)-(1,42) = "rescue" - │ └── rescue_expression: - │ @ IntegerNode (location: (1,43)-(1,45)) - │ ├── flags: static_literal, decimal - │ └── value: 24 - ├── locals: [] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: (1,5)-(1,6) = "." - ├── lparen_loc: ∅ - ├── rparen_loc: ∅ - ├── equal_loc: (1,18)-(1,19) = "=" - └── end_keyword_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/defs_kwarg.txt b/test/prism/snapshots/seattlerb/defs_kwarg.txt deleted file mode 100644 index 86a2d562e3aafa..00000000000000 --- a/test/prism/snapshots/seattlerb/defs_kwarg.txt +++ /dev/null @@ -1,40 +0,0 @@ -@ ProgramNode (location: (1,0)-(2,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(2,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(2,3)) - ├── flags: newline - ├── name: :a - ├── name_loc: (1,9)-(1,10) = "a" - ├── receiver: - │ @ SelfNode (location: (1,4)-(1,8)) - │ └── flags: ∅ - ├── parameters: - │ @ ParametersNode (location: (1,11)-(1,15)) - │ ├── flags: ∅ - │ ├── requireds: (length: 0) - │ ├── optionals: (length: 0) - │ ├── rest: ∅ - │ ├── posts: (length: 0) - │ ├── keywords: (length: 1) - │ │ └── @ OptionalKeywordParameterNode (location: (1,11)-(1,15)) - │ │ ├── flags: ∅ - │ │ ├── name: :b - │ │ ├── name_loc: (1,11)-(1,13) = "b:" - │ │ └── value: - │ │ @ IntegerNode (location: (1,14)-(1,15)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── keyword_rest: ∅ - │ └── block: ∅ - ├── body: ∅ - ├── locals: [:b] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: (1,8)-(1,9) = "." - ├── lparen_loc: ∅ - ├── rparen_loc: ∅ - ├── equal_loc: ∅ - └── end_keyword_loc: (2,0)-(2,3) = "end" diff --git a/test/prism/snapshots/seattlerb/defs_oneliner.txt b/test/prism/snapshots/seattlerb/defs_oneliner.txt deleted file mode 100644 index c99b81084407a2..00000000000000 --- a/test/prism/snapshots/seattlerb/defs_oneliner.txt +++ /dev/null @@ -1,55 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,32)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,32)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(1,32)) - ├── flags: newline - ├── name: :exec - ├── name_loc: (1,9)-(1,13) = "exec" - ├── receiver: - │ @ SelfNode (location: (1,4)-(1,8)) - │ └── flags: ∅ - ├── parameters: - │ @ ParametersNode (location: (1,14)-(1,17)) - │ ├── flags: ∅ - │ ├── requireds: (length: 1) - │ │ └── @ RequiredParameterNode (location: (1,14)-(1,17)) - │ │ ├── flags: ∅ - │ │ └── name: :cmd - │ ├── optionals: (length: 0) - │ ├── rest: ∅ - │ ├── posts: (length: 0) - │ ├── keywords: (length: 0) - │ ├── keyword_rest: ∅ - │ └── block: ∅ - ├── body: - │ @ StatementsNode (location: (1,21)-(1,32)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,21)-(1,32)) - │ ├── flags: ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :system - │ ├── message_loc: (1,21)-(1,27) = "system" - │ ├── opening_loc: (1,27)-(1,28) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,28)-(1,31)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ LocalVariableReadNode (location: (1,28)-(1,31)) - │ │ ├── flags: ∅ - │ │ ├── name: :cmd - │ │ └── depth: 0 - │ ├── closing_loc: (1,31)-(1,32) = ")" - │ └── block: ∅ - ├── locals: [:cmd] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: (1,8)-(1,9) = "." - ├── lparen_loc: (1,13)-(1,14) = "(" - ├── rparen_loc: (1,17)-(1,18) = ")" - ├── equal_loc: (1,19)-(1,20) = "=" - └── end_keyword_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/defs_oneliner_eq2.txt b/test/prism/snapshots/seattlerb/defs_oneliner_eq2.txt deleted file mode 100644 index 328ba5d78b27aa..00000000000000 --- a/test/prism/snapshots/seattlerb/defs_oneliner_eq2.txt +++ /dev/null @@ -1,57 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ ClassNode (location: (1,0)-(3,3)) - ├── flags: newline - ├── locals: [] - ├── class_keyword_loc: (1,0)-(1,5) = "class" - ├── constant_path: - │ @ ConstantReadNode (location: (1,6)-(1,7)) - │ ├── flags: ∅ - │ └── name: :X - ├── inheritance_operator_loc: ∅ - ├── superclass: ∅ - ├── body: - │ @ StatementsNode (location: (2,2)-(2,21)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ DefNode (location: (2,2)-(2,21)) - │ ├── flags: newline - │ ├── name: :== - │ ├── name_loc: (2,11)-(2,13) = "==" - │ ├── receiver: - │ │ @ SelfNode (location: (2,6)-(2,10)) - │ │ └── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (2,14)-(2,15)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (2,14)-(2,15)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :o - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (2,19)-(2,21)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ IntegerNode (location: (2,19)-(2,21)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 42 - │ ├── locals: [:o] - │ ├── def_keyword_loc: (2,2)-(2,5) = "def" - │ ├── operator_loc: (2,10)-(2,11) = "." - │ ├── lparen_loc: (2,13)-(2,14) = "(" - │ ├── rparen_loc: (2,15)-(2,16) = ")" - │ ├── equal_loc: (2,17)-(2,18) = "=" - │ └── end_keyword_loc: ∅ - ├── end_keyword_loc: (3,0)-(3,3) = "end" - └── name: :X diff --git a/test/prism/snapshots/seattlerb/defs_oneliner_rescue.txt b/test/prism/snapshots/seattlerb/defs_oneliner_rescue.txt deleted file mode 100644 index 985744d45e93bc..00000000000000 --- a/test/prism/snapshots/seattlerb/defs_oneliner_rescue.txt +++ /dev/null @@ -1,186 +0,0 @@ -@ ProgramNode (location: (1,0)-(13,43)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(13,43)) - ├── flags: ∅ - └── body: (length: 3) - ├── @ DefNode (location: (1,0)-(5,3)) - │ ├── flags: newline - │ ├── name: :exec - │ ├── name_loc: (1,9)-(1,13) = "exec" - │ ├── receiver: - │ │ @ SelfNode (location: (1,4)-(1,8)) - │ │ └── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,14)-(1,17)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (1,14)-(1,17)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :cmd - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ BeginNode (location: (1,0)-(5,3)) - │ │ ├── flags: ∅ - │ │ ├── begin_keyword_loc: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (2,2)-(2,13)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (2,2)-(2,13)) - │ │ │ ├── flags: newline, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :system - │ │ │ ├── message_loc: (2,2)-(2,8) = "system" - │ │ │ ├── opening_loc: (2,8)-(2,9) = "(" - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (2,9)-(2,12)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ LocalVariableReadNode (location: (2,9)-(2,12)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :cmd - │ │ │ │ └── depth: 0 - │ │ │ ├── closing_loc: (2,12)-(2,13) = ")" - │ │ │ └── block: ∅ - │ │ ├── rescue_clause: - │ │ │ @ RescueNode (location: (3,0)-(4,5)) - │ │ │ ├── flags: ∅ - │ │ │ ├── keyword_loc: (3,0)-(3,6) = "rescue" - │ │ │ ├── exceptions: (length: 0) - │ │ │ ├── operator_loc: ∅ - │ │ │ ├── reference: ∅ - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (4,2)-(4,5)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ NilNode (location: (4,2)-(4,5)) - │ │ │ │ └── flags: newline, static_literal - │ │ │ └── subsequent: ∅ - │ │ ├── else_clause: ∅ - │ │ ├── ensure_clause: ∅ - │ │ └── end_keyword_loc: (5,0)-(5,3) = "end" - │ ├── locals: [:cmd] - │ ├── def_keyword_loc: (1,0)-(1,3) = "def" - │ ├── operator_loc: (1,8)-(1,9) = "." - │ ├── lparen_loc: (1,13)-(1,14) = "(" - │ ├── rparen_loc: (1,17)-(1,18) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (5,0)-(5,3) = "end" - ├── @ DefNode (location: (8,0)-(10,3)) - │ ├── flags: newline - │ ├── name: :exec - │ ├── name_loc: (8,9)-(8,13) = "exec" - │ ├── receiver: - │ │ @ SelfNode (location: (8,4)-(8,8)) - │ │ └── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (8,14)-(8,17)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (8,14)-(8,17)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :cmd - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (9,2)-(9,24)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ RescueModifierNode (location: (9,2)-(9,24)) - │ │ ├── flags: newline - │ │ ├── expression: - │ │ │ @ CallNode (location: (9,2)-(9,13)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :system - │ │ │ ├── message_loc: (9,2)-(9,8) = "system" - │ │ │ ├── opening_loc: (9,8)-(9,9) = "(" - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (9,9)-(9,12)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ LocalVariableReadNode (location: (9,9)-(9,12)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :cmd - │ │ │ │ └── depth: 0 - │ │ │ ├── closing_loc: (9,12)-(9,13) = ")" - │ │ │ └── block: ∅ - │ │ ├── keyword_loc: (9,14)-(9,20) = "rescue" - │ │ └── rescue_expression: - │ │ @ NilNode (location: (9,21)-(9,24)) - │ │ └── flags: static_literal - │ ├── locals: [:cmd] - │ ├── def_keyword_loc: (8,0)-(8,3) = "def" - │ ├── operator_loc: (8,8)-(8,9) = "." - │ ├── lparen_loc: (8,13)-(8,14) = "(" - │ ├── rparen_loc: (8,17)-(8,18) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (10,0)-(10,3) = "end" - └── @ DefNode (location: (13,0)-(13,43)) - ├── flags: newline - ├── name: :exec - ├── name_loc: (13,9)-(13,13) = "exec" - ├── receiver: - │ @ SelfNode (location: (13,4)-(13,8)) - │ └── flags: ∅ - ├── parameters: - │ @ ParametersNode (location: (13,14)-(13,17)) - │ ├── flags: ∅ - │ ├── requireds: (length: 1) - │ │ └── @ RequiredParameterNode (location: (13,14)-(13,17)) - │ │ ├── flags: ∅ - │ │ └── name: :cmd - │ ├── optionals: (length: 0) - │ ├── rest: ∅ - │ ├── posts: (length: 0) - │ ├── keywords: (length: 0) - │ ├── keyword_rest: ∅ - │ └── block: ∅ - ├── body: - │ @ StatementsNode (location: (13,21)-(13,43)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ RescueModifierNode (location: (13,21)-(13,43)) - │ ├── flags: ∅ - │ ├── expression: - │ │ @ CallNode (location: (13,21)-(13,32)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :system - │ │ ├── message_loc: (13,21)-(13,27) = "system" - │ │ ├── opening_loc: (13,27)-(13,28) = "(" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (13,28)-(13,31)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ LocalVariableReadNode (location: (13,28)-(13,31)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :cmd - │ │ │ └── depth: 0 - │ │ ├── closing_loc: (13,31)-(13,32) = ")" - │ │ └── block: ∅ - │ ├── keyword_loc: (13,33)-(13,39) = "rescue" - │ └── rescue_expression: - │ @ NilNode (location: (13,40)-(13,43)) - │ └── flags: static_literal - ├── locals: [:cmd] - ├── def_keyword_loc: (13,0)-(13,3) = "def" - ├── operator_loc: (13,8)-(13,9) = "." - ├── lparen_loc: (13,13)-(13,14) = "(" - ├── rparen_loc: (13,17)-(13,18) = ")" - ├── equal_loc: (13,19)-(13,20) = "=" - └── end_keyword_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/difficult0_.txt b/test/prism/snapshots/seattlerb/difficult0_.txt deleted file mode 100644 index 233440b101920c..00000000000000 --- a/test/prism/snapshots/seattlerb/difficult0_.txt +++ /dev/null @@ -1,75 +0,0 @@ -@ ProgramNode (location: (1,0)-(4,8)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(4,8)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(4,8)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :p - ├── message_loc: (1,0)-(1,1) = "p" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,2)-(4,8)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ CallNode (location: (1,2)-(4,8)) - │ ├── flags: ∅ - │ ├── receiver: - │ │ @ CallNode (location: (1,2)-(4,4)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ StringNode (location: (1,2)-(1,8)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (1,2)-(1,8) = "<<-END" - │ │ │ ├── content_loc: (2,0)-(3,0) = " a\n" - │ │ │ ├── closing_loc: (3,0)-(4,0) = " END\n" - │ │ │ └── unescaped: " a\n" - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :+ - │ │ ├── message_loc: (1,8)-(1,9) = "+" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (1,9)-(4,4)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ InterpolatedStringNode (location: (1,9)-(4,4)) - │ │ │ ├── flags: static_literal - │ │ │ ├── opening_loc: (1,9)-(1,10) = "'" - │ │ │ ├── parts: (length: 2) - │ │ │ │ ├── @ StringNode (location: (1,10)-(2,0)) - │ │ │ │ │ ├── flags: static_literal, frozen - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── content_loc: (1,10)-(2,0) = "b\n" - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── unescaped: "b\n" - │ │ │ │ └── @ StringNode (location: (4,0)-(4,3)) - │ │ │ │ ├── flags: static_literal, frozen - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── content_loc: (4,0)-(4,3) = " c" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: " c" - │ │ │ └── closing_loc: (4,3)-(4,4) = "'" - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :+ - │ ├── message_loc: (4,4)-(4,5) = "+" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (4,5)-(4,8)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ StringNode (location: (4,5)-(4,8)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (4,5)-(4,6) = "'" - │ │ ├── content_loc: (4,6)-(4,7) = "d" - │ │ ├── closing_loc: (4,7)-(4,8) = "'" - │ │ └── unescaped: "d" - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/difficult1_line_numbers.txt b/test/prism/snapshots/seattlerb/difficult1_line_numbers.txt deleted file mode 100644 index c34579e6ac8a5a..00000000000000 --- a/test/prism/snapshots/seattlerb/difficult1_line_numbers.txt +++ /dev/null @@ -1,272 +0,0 @@ -@ ProgramNode (location: (1,0)-(12,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(12,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ IfNode (location: (1,0)-(12,3)) - ├── flags: newline - ├── if_keyword_loc: (1,0)-(1,2) = "if" - ├── predicate: - │ @ TrueNode (location: (1,3)-(1,7)) - │ └── flags: static_literal - ├── then_keyword_loc: ∅ - ├── statements: - │ @ StatementsNode (location: (2,2)-(11,11)) - │ ├── flags: ∅ - │ └── body: (length: 10) - │ ├── @ CallNode (location: (2,2)-(2,5)) - │ │ ├── flags: newline, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :p - │ │ ├── message_loc: (2,2)-(2,3) = "p" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (2,4)-(2,5)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (2,4)-(2,5)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── @ CallNode (location: (3,2)-(3,7)) - │ │ ├── flags: newline - │ │ ├── receiver: - │ │ │ @ CallNode (location: (3,2)-(3,3)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :a - │ │ │ ├── message_loc: (3,2)-(3,3) = "a" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: (3,3)-(3,4) = "." - │ │ ├── name: :b - │ │ ├── message_loc: (3,4)-(3,5) = "b" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (3,6)-(3,7)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (3,6)-(3,7)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── @ CallNode (location: (4,2)-(4,10)) - │ │ ├── flags: newline - │ │ ├── receiver: - │ │ │ @ CallNode (location: (4,2)-(4,3)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :c - │ │ │ ├── message_loc: (4,2)-(4,3) = "c" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: (4,3)-(4,4) = "." - │ │ ├── name: :d - │ │ ├── message_loc: (4,4)-(4,5) = "d" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (4,6)-(4,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 2) - │ │ │ ├── @ IntegerNode (location: (4,6)-(4,7)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 3 - │ │ │ └── @ IntegerNode (location: (4,9)-(4,10)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 4 - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── @ CallNode (location: (5,2)-(5,7)) - │ │ ├── flags: newline - │ │ ├── receiver: - │ │ │ @ CallNode (location: (5,2)-(5,3)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :e - │ │ │ ├── message_loc: (5,2)-(5,3) = "e" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: (5,3)-(5,4) = "." - │ │ ├── name: :f - │ │ ├── message_loc: (5,4)-(5,5) = "f" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (5,6)-(5,7)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (5,6)-(5,7)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 5 - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── @ CallNode (location: (6,2)-(6,10)) - │ │ ├── flags: newline - │ │ ├── receiver: - │ │ │ @ CallNode (location: (6,2)-(6,3)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :g - │ │ │ ├── message_loc: (6,2)-(6,3) = "g" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: (6,3)-(6,4) = "." - │ │ ├── name: :h - │ │ ├── message_loc: (6,4)-(6,5) = "h" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (6,6)-(6,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 2) - │ │ │ ├── @ IntegerNode (location: (6,6)-(6,7)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 6 - │ │ │ └── @ IntegerNode (location: (6,9)-(6,10)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 7 - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── @ CallNode (location: (7,2)-(7,6)) - │ │ ├── flags: newline, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :p - │ │ ├── message_loc: (7,2)-(7,3) = "p" - │ │ ├── opening_loc: (7,3)-(7,4) = "(" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (7,4)-(7,5)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (7,4)-(7,5)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── closing_loc: (7,5)-(7,6) = ")" - │ │ └── block: ∅ - │ ├── @ CallNode (location: (8,2)-(8,8)) - │ │ ├── flags: newline - │ │ ├── receiver: - │ │ │ @ CallNode (location: (8,2)-(8,3)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :a - │ │ │ ├── message_loc: (8,2)-(8,3) = "a" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: (8,3)-(8,4) = "." - │ │ ├── name: :b - │ │ ├── message_loc: (8,4)-(8,5) = "b" - │ │ ├── opening_loc: (8,5)-(8,6) = "(" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (8,6)-(8,7)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (8,6)-(8,7)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ ├── closing_loc: (8,7)-(8,8) = ")" - │ │ └── block: ∅ - │ ├── @ CallNode (location: (9,2)-(9,11)) - │ │ ├── flags: newline - │ │ ├── receiver: - │ │ │ @ CallNode (location: (9,2)-(9,3)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :c - │ │ │ ├── message_loc: (9,2)-(9,3) = "c" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: (9,3)-(9,4) = "." - │ │ ├── name: :d - │ │ ├── message_loc: (9,4)-(9,5) = "d" - │ │ ├── opening_loc: (9,5)-(9,6) = "(" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (9,6)-(9,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 2) - │ │ │ ├── @ IntegerNode (location: (9,6)-(9,7)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 3 - │ │ │ └── @ IntegerNode (location: (9,9)-(9,10)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 4 - │ │ ├── closing_loc: (9,10)-(9,11) = ")" - │ │ └── block: ∅ - │ ├── @ CallNode (location: (10,2)-(10,8)) - │ │ ├── flags: newline - │ │ ├── receiver: - │ │ │ @ CallNode (location: (10,2)-(10,3)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :e - │ │ │ ├── message_loc: (10,2)-(10,3) = "e" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: (10,3)-(10,4) = "." - │ │ ├── name: :f - │ │ ├── message_loc: (10,4)-(10,5) = "f" - │ │ ├── opening_loc: (10,5)-(10,6) = "(" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (10,6)-(10,7)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (10,6)-(10,7)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 5 - │ │ ├── closing_loc: (10,7)-(10,8) = ")" - │ │ └── block: ∅ - │ └── @ CallNode (location: (11,2)-(11,11)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (11,2)-(11,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :g - │ │ ├── message_loc: (11,2)-(11,3) = "g" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (11,3)-(11,4) = "." - │ ├── name: :h - │ ├── message_loc: (11,4)-(11,5) = "h" - │ ├── opening_loc: (11,5)-(11,6) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (11,6)-(11,10)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ IntegerNode (location: (11,6)-(11,7)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 6 - │ │ └── @ IntegerNode (location: (11,9)-(11,10)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 7 - │ ├── closing_loc: (11,10)-(11,11) = ")" - │ └── block: ∅ - ├── subsequent: ∅ - └── end_keyword_loc: (12,0)-(12,3) = "end" diff --git a/test/prism/snapshots/seattlerb/difficult1_line_numbers2.txt b/test/prism/snapshots/seattlerb/difficult1_line_numbers2.txt deleted file mode 100644 index ae710f997f3a68..00000000000000 --- a/test/prism/snapshots/seattlerb/difficult1_line_numbers2.txt +++ /dev/null @@ -1,86 +0,0 @@ -@ ProgramNode (location: (1,0)-(7,1)) -├── flags: ∅ -├── locals: [:b, :c] -└── statements: - @ StatementsNode (location: (1,0)-(7,1)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ IfNode (location: (1,0)-(6,3)) - │ ├── flags: newline - │ ├── if_keyword_loc: (1,0)-(1,2) = "if" - │ ├── predicate: - │ │ @ TrueNode (location: (1,3)-(1,7)) - │ │ └── flags: static_literal - │ ├── then_keyword_loc: (1,8)-(1,12) = "then" - │ ├── statements: - │ │ @ StatementsNode (location: (2,2)-(5,6)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 4) - │ │ ├── @ CallNode (location: (2,2)-(2,8)) - │ │ │ ├── flags: newline, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :p - │ │ │ ├── message_loc: (2,2)-(2,3) = "p" - │ │ │ ├── opening_loc: (2,3)-(2,4) = "(" - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (2,4)-(2,7)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ StringNode (location: (2,4)-(2,7)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── opening_loc: (2,4)-(2,5) = "\"" - │ │ │ │ ├── content_loc: (2,5)-(2,6) = "a" - │ │ │ │ ├── closing_loc: (2,6)-(2,7) = "\"" - │ │ │ │ └── unescaped: "a" - │ │ │ ├── closing_loc: (2,7)-(2,8) = ")" - │ │ │ └── block: ∅ - │ │ ├── @ LocalVariableWriteNode (location: (3,2)-(3,7)) - │ │ │ ├── flags: newline - │ │ │ ├── name: :b - │ │ │ ├── depth: 0 - │ │ │ ├── name_loc: (3,2)-(3,3) = "b" - │ │ │ ├── value: - │ │ │ │ @ IntegerNode (location: (3,6)-(3,7)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ └── operator_loc: (3,4)-(3,5) = "=" - │ │ ├── @ CallNode (location: (4,2)-(4,5)) - │ │ │ ├── flags: newline, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :p - │ │ │ ├── message_loc: (4,2)-(4,3) = "p" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (4,4)-(4,5)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ LocalVariableReadNode (location: (4,4)-(4,5)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :b - │ │ │ │ └── depth: 0 - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── @ LocalVariableWriteNode (location: (5,2)-(5,6)) - │ │ ├── flags: newline - │ │ ├── name: :c - │ │ ├── depth: 0 - │ │ ├── name_loc: (5,2)-(5,3) = "c" - │ │ ├── value: - │ │ │ @ IntegerNode (location: (5,5)-(5,6)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── operator_loc: (5,4)-(5,5) = "=" - │ ├── subsequent: ∅ - │ └── end_keyword_loc: (6,0)-(6,3) = "end" - └── @ CallNode (location: (7,0)-(7,1)) - ├── flags: newline, variable_call, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :a - ├── message_loc: (7,0)-(7,1) = "a" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/difficult2_.txt b/test/prism/snapshots/seattlerb/difficult2_.txt deleted file mode 100644 index 2a7e8e49d0f57a..00000000000000 --- a/test/prism/snapshots/seattlerb/difficult2_.txt +++ /dev/null @@ -1,81 +0,0 @@ -@ ProgramNode (location: (1,0)-(2,6)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(2,6)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ IfNode (location: (1,0)-(1,13)) - │ ├── flags: newline - │ ├── if_keyword_loc: ∅ - │ ├── predicate: - │ │ @ IntegerNode (location: (1,0)-(1,1)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── then_keyword_loc: (1,2)-(1,3) = "?" - │ ├── statements: - │ │ @ StatementsNode (location: (1,4)-(1,9)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (1,4)-(1,9)) - │ │ ├── flags: newline, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :b - │ │ ├── message_loc: (1,4)-(1,5) = "b" - │ │ ├── opening_loc: (1,5)-(1,6) = "(" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (1,6)-(1,8)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ StringNode (location: (1,6)-(1,8)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (1,6)-(1,7) = "'" - │ │ │ ├── content_loc: (1,7)-(1,7) = "" - │ │ │ ├── closing_loc: (1,7)-(1,8) = "'" - │ │ │ └── unescaped: "" - │ │ ├── closing_loc: (1,8)-(1,9) = ")" - │ │ └── block: ∅ - │ ├── subsequent: - │ │ @ ElseNode (location: (1,10)-(1,13)) - │ │ ├── flags: ∅ - │ │ ├── else_keyword_loc: (1,10)-(1,11) = ":" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (1,12)-(1,13)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ IntegerNode (location: (1,12)-(1,13)) - │ │ │ ├── flags: newline, static_literal, decimal - │ │ │ └── value: 2 - │ │ └── end_keyword_loc: ∅ - │ └── end_keyword_loc: ∅ - └── @ CallNode (location: (2,0)-(2,6)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :a - ├── message_loc: (2,0)-(2,1) = "a" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (2,2)-(2,6)) - │ ├── flags: contains_keywords - │ └── arguments: (length: 1) - │ └── @ KeywordHashNode (location: (2,2)-(2,6)) - │ ├── flags: symbol_keys - │ └── elements: (length: 1) - │ └── @ AssocNode (location: (2,2)-(2,6)) - │ ├── flags: static_literal - │ ├── key: - │ │ @ SymbolNode (location: (2,2)-(2,4)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: ∅ - │ │ ├── value_loc: (2,2)-(2,3) = "d" - │ │ ├── closing_loc: (2,3)-(2,4) = ":" - │ │ └── unescaped: "d" - │ ├── value: - │ │ @ IntegerNode (location: (2,5)-(2,6)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 3 - │ └── operator_loc: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/difficult3_.txt b/test/prism/snapshots/seattlerb/difficult3_.txt deleted file mode 100644 index 313cfa4cf265c2..00000000000000 --- a/test/prism/snapshots/seattlerb/difficult3_.txt +++ /dev/null @@ -1,59 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,18)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,18)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,18)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :f - ├── message_loc: (1,0)-(1,1) = "f" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,2)-(1,18)) - ├── flags: ∅ - ├── locals: [:a, :b, :c] - ├── parameters: - │ @ BlockParametersNode (location: (1,4)-(1,16)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,5)-(1,15)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 2) - │ │ │ ├── @ RequiredParameterNode (location: (1,5)-(1,6)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :a - │ │ │ └── @ MultiTargetNode (location: (1,8)-(1,15)) - │ │ │ ├── flags: ∅ - │ │ │ ├── lefts: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (1,9)-(1,10)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :b - │ │ │ ├── rest: - │ │ │ │ @ SplatNode (location: (1,12)-(1,14)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── operator_loc: (1,12)-(1,13) = "*" - │ │ │ │ └── expression: - │ │ │ │ @ RequiredParameterNode (location: (1,13)-(1,14)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :c - │ │ │ ├── rights: (length: 0) - │ │ │ ├── lparen_loc: (1,8)-(1,9) = "(" - │ │ │ └── rparen_loc: (1,14)-(1,15) = ")" - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,4)-(1,5) = "|" - │ └── closing_loc: (1,15)-(1,16) = "|" - ├── body: ∅ - ├── opening_loc: (1,2)-(1,3) = "{" - └── closing_loc: (1,17)-(1,18) = "}" diff --git a/test/prism/snapshots/seattlerb/difficult3_2.txt b/test/prism/snapshots/seattlerb/difficult3_2.txt deleted file mode 100644 index e1eed78c7963eb..00000000000000 --- a/test/prism/snapshots/seattlerb/difficult3_2.txt +++ /dev/null @@ -1,47 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,13)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,13)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,13)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :f - ├── message_loc: (1,0)-(1,1) = "f" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,2)-(1,13)) - ├── flags: ∅ - ├── locals: [:a, :b] - ├── parameters: - │ @ BlockParametersNode (location: (1,4)-(1,11)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,5)-(1,10)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: - │ │ │ @ RestParameterNode (location: (1,5)-(1,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :a - │ │ │ ├── name_loc: (1,6)-(1,7) = "a" - │ │ │ └── operator_loc: (1,5)-(1,6) = "*" - │ │ ├── posts: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (1,9)-(1,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :b - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,4)-(1,5) = "|" - │ └── closing_loc: (1,10)-(1,11) = "|" - ├── body: ∅ - ├── opening_loc: (1,2)-(1,3) = "{" - └── closing_loc: (1,12)-(1,13) = "}" diff --git a/test/prism/snapshots/seattlerb/difficult3_3.txt b/test/prism/snapshots/seattlerb/difficult3_3.txt deleted file mode 100644 index 5dcd71d651508a..00000000000000 --- a/test/prism/snapshots/seattlerb/difficult3_3.txt +++ /dev/null @@ -1,52 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,17)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,17)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,17)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :f - ├── message_loc: (1,0)-(1,1) = "f" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,2)-(1,17)) - ├── flags: ∅ - ├── locals: [:a, :b, :c] - ├── parameters: - │ @ BlockParametersNode (location: (1,4)-(1,15)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,5)-(1,14)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: - │ │ │ @ RestParameterNode (location: (1,5)-(1,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :a - │ │ │ ├── name_loc: (1,6)-(1,7) = "a" - │ │ │ └── operator_loc: (1,5)-(1,6) = "*" - │ │ ├── posts: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (1,9)-(1,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :b - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: - │ │ @ BlockParameterNode (location: (1,12)-(1,14)) - │ │ ├── flags: ∅ - │ │ ├── name: :c - │ │ ├── name_loc: (1,13)-(1,14) = "c" - │ │ └── operator_loc: (1,12)-(1,13) = "&" - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,4)-(1,5) = "|" - │ └── closing_loc: (1,14)-(1,15) = "|" - ├── body: ∅ - ├── opening_loc: (1,2)-(1,3) = "{" - └── closing_loc: (1,16)-(1,17) = "}" diff --git a/test/prism/snapshots/seattlerb/difficult3_4.txt b/test/prism/snapshots/seattlerb/difficult3_4.txt deleted file mode 100644 index b733c42265eb6d..00000000000000 --- a/test/prism/snapshots/seattlerb/difficult3_4.txt +++ /dev/null @@ -1,47 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,17)) -├── flags: ∅ -├── locals: [:a] -└── statements: - @ StatementsNode (location: (1,0)-(1,17)) - ├── flags: ∅ - └── body: (length: 1) - └── @ LocalVariableWriteNode (location: (1,0)-(1,17)) - ├── flags: newline - ├── name: :a - ├── depth: 0 - ├── name_loc: (1,0)-(1,1) = "a" - ├── value: - │ @ IfNode (location: (1,2)-(1,17)) - │ ├── flags: newline - │ ├── if_keyword_loc: ∅ - │ ├── predicate: - │ │ @ CallNode (location: (1,2)-(1,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :b - │ │ ├── message_loc: (1,2)-(1,3) = "b" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── then_keyword_loc: (1,4)-(1,5) = "?" - │ ├── statements: - │ │ @ StatementsNode (location: (1,6)-(1,10)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ TrueNode (location: (1,6)-(1,10)) - │ │ └── flags: newline, static_literal - │ ├── subsequent: - │ │ @ ElseNode (location: (1,10)-(1,17)) - │ │ ├── flags: ∅ - │ │ ├── else_keyword_loc: (1,10)-(1,11) = ":" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (1,12)-(1,17)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ FalseNode (location: (1,12)-(1,17)) - │ │ │ └── flags: newline, static_literal - │ │ └── end_keyword_loc: ∅ - │ └── end_keyword_loc: ∅ - └── operator_loc: (1,1)-(1,2) = "=" diff --git a/test/prism/snapshots/seattlerb/difficult3_5.txt b/test/prism/snapshots/seattlerb/difficult3_5.txt deleted file mode 100644 index b8bbbdc03ec5a1..00000000000000 --- a/test/prism/snapshots/seattlerb/difficult3_5.txt +++ /dev/null @@ -1,54 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,19)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,19)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,19)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :f - ├── message_loc: (1,0)-(1,1) = "f" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,2)-(1,19)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ LambdaNode (location: (1,2)-(1,19)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── operator_loc: (1,2)-(1,4) = "->" - │ ├── opening_loc: (1,7)-(1,8) = "{" - │ ├── closing_loc: (1,18)-(1,19) = "}" - │ ├── parameters: - │ │ @ BlockParametersNode (location: (1,4)-(1,6)) - │ │ ├── flags: ∅ - │ │ ├── parameters: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: (1,4)-(1,5) = "(" - │ │ └── closing_loc: (1,5)-(1,6) = ")" - │ └── body: - │ @ StatementsNode (location: (1,9)-(1,17)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,9)-(1,17)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :g - │ ├── message_loc: (1,9)-(1,10) = "g" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (1,11)-(1,17)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (1,11)-(1,13) = "do" - │ └── closing_loc: (1,14)-(1,17) = "end" - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/difficult3__10.txt b/test/prism/snapshots/seattlerb/difficult3__10.txt deleted file mode 100644 index a5ce0762f16700..00000000000000 --- a/test/prism/snapshots/seattlerb/difficult3__10.txt +++ /dev/null @@ -1,59 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,18)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,18)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,18)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :f - ├── message_loc: (1,0)-(1,1) = "f" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,2)-(1,18)) - ├── flags: ∅ - ├── locals: [:a, :b, :c] - ├── parameters: - │ @ BlockParametersNode (location: (1,4)-(1,16)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,5)-(1,15)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 2) - │ │ │ ├── @ RequiredParameterNode (location: (1,5)-(1,6)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :a - │ │ │ └── @ MultiTargetNode (location: (1,8)-(1,15)) - │ │ │ ├── flags: ∅ - │ │ │ ├── lefts: (length: 0) - │ │ │ ├── rest: - │ │ │ │ @ SplatNode (location: (1,9)-(1,11)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── operator_loc: (1,9)-(1,10) = "*" - │ │ │ │ └── expression: - │ │ │ │ @ RequiredParameterNode (location: (1,10)-(1,11)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :b - │ │ │ ├── rights: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (1,13)-(1,14)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :c - │ │ │ ├── lparen_loc: (1,8)-(1,9) = "(" - │ │ │ └── rparen_loc: (1,14)-(1,15) = ")" - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,4)-(1,5) = "|" - │ └── closing_loc: (1,15)-(1,16) = "|" - ├── body: ∅ - ├── opening_loc: (1,2)-(1,3) = "{" - └── closing_loc: (1,17)-(1,18) = "}" diff --git a/test/prism/snapshots/seattlerb/difficult3__11.txt b/test/prism/snapshots/seattlerb/difficult3__11.txt deleted file mode 100644 index c1017885d8ef16..00000000000000 --- a/test/prism/snapshots/seattlerb/difficult3__11.txt +++ /dev/null @@ -1,53 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,14)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,14)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,14)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :f - ├── message_loc: (1,0)-(1,1) = "f" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,2)-(1,14)) - ├── flags: ∅ - ├── locals: [:a] - ├── parameters: - │ @ BlockParametersNode (location: (1,4)-(1,12)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,5)-(1,11)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 2) - │ │ │ ├── @ RequiredParameterNode (location: (1,5)-(1,6)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :a - │ │ │ └── @ MultiTargetNode (location: (1,8)-(1,11)) - │ │ │ ├── flags: ∅ - │ │ │ ├── lefts: (length: 0) - │ │ │ ├── rest: - │ │ │ │ @ SplatNode (location: (1,9)-(1,10)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── operator_loc: (1,9)-(1,10) = "*" - │ │ │ │ └── expression: ∅ - │ │ │ ├── rights: (length: 0) - │ │ │ ├── lparen_loc: (1,8)-(1,9) = "(" - │ │ │ └── rparen_loc: (1,10)-(1,11) = ")" - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,4)-(1,5) = "|" - │ └── closing_loc: (1,11)-(1,12) = "|" - ├── body: ∅ - ├── opening_loc: (1,2)-(1,3) = "{" - └── closing_loc: (1,13)-(1,14) = "}" diff --git a/test/prism/snapshots/seattlerb/difficult3__12.txt b/test/prism/snapshots/seattlerb/difficult3__12.txt deleted file mode 100644 index bbcfad48b4c68a..00000000000000 --- a/test/prism/snapshots/seattlerb/difficult3__12.txt +++ /dev/null @@ -1,56 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,17)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,17)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,17)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :f - ├── message_loc: (1,0)-(1,1) = "f" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,2)-(1,17)) - ├── flags: ∅ - ├── locals: [:a, :b] - ├── parameters: - │ @ BlockParametersNode (location: (1,4)-(1,15)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,5)-(1,14)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 2) - │ │ │ ├── @ RequiredParameterNode (location: (1,5)-(1,6)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :a - │ │ │ └── @ MultiTargetNode (location: (1,8)-(1,14)) - │ │ │ ├── flags: ∅ - │ │ │ ├── lefts: (length: 0) - │ │ │ ├── rest: - │ │ │ │ @ SplatNode (location: (1,9)-(1,10)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── operator_loc: (1,9)-(1,10) = "*" - │ │ │ │ └── expression: ∅ - │ │ │ ├── rights: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (1,12)-(1,13)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :b - │ │ │ ├── lparen_loc: (1,8)-(1,9) = "(" - │ │ │ └── rparen_loc: (1,13)-(1,14) = ")" - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,4)-(1,5) = "|" - │ └── closing_loc: (1,14)-(1,15) = "|" - ├── body: ∅ - ├── opening_loc: (1,2)-(1,3) = "{" - └── closing_loc: (1,16)-(1,17) = "}" diff --git a/test/prism/snapshots/seattlerb/difficult3__6.txt b/test/prism/snapshots/seattlerb/difficult3__6.txt deleted file mode 100644 index 95d1ac39b58409..00000000000000 --- a/test/prism/snapshots/seattlerb/difficult3__6.txt +++ /dev/null @@ -1,62 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,21)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,21)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,21)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :f - ├── message_loc: (1,0)-(1,1) = "f" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,2)-(1,21)) - ├── flags: ∅ - ├── locals: [:a, :b, :c, :d] - ├── parameters: - │ @ BlockParametersNode (location: (1,4)-(1,19)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,5)-(1,18)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 2) - │ │ │ ├── @ RequiredParameterNode (location: (1,5)-(1,6)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :a - │ │ │ └── @ MultiTargetNode (location: (1,8)-(1,18)) - │ │ │ ├── flags: ∅ - │ │ │ ├── lefts: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (1,9)-(1,10)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :b - │ │ │ ├── rest: - │ │ │ │ @ SplatNode (location: (1,12)-(1,14)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── operator_loc: (1,12)-(1,13) = "*" - │ │ │ │ └── expression: - │ │ │ │ @ RequiredParameterNode (location: (1,13)-(1,14)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :c - │ │ │ ├── rights: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (1,16)-(1,17)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :d - │ │ │ ├── lparen_loc: (1,8)-(1,9) = "(" - │ │ │ └── rparen_loc: (1,17)-(1,18) = ")" - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,4)-(1,5) = "|" - │ └── closing_loc: (1,18)-(1,19) = "|" - ├── body: ∅ - ├── opening_loc: (1,2)-(1,3) = "{" - └── closing_loc: (1,20)-(1,21) = "}" diff --git a/test/prism/snapshots/seattlerb/difficult3__7.txt b/test/prism/snapshots/seattlerb/difficult3__7.txt deleted file mode 100644 index 4640cfdb534854..00000000000000 --- a/test/prism/snapshots/seattlerb/difficult3__7.txt +++ /dev/null @@ -1,56 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,17)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,17)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,17)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :f - ├── message_loc: (1,0)-(1,1) = "f" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,2)-(1,17)) - ├── flags: ∅ - ├── locals: [:a, :b] - ├── parameters: - │ @ BlockParametersNode (location: (1,4)-(1,15)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,5)-(1,14)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 2) - │ │ │ ├── @ RequiredParameterNode (location: (1,5)-(1,6)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :a - │ │ │ └── @ MultiTargetNode (location: (1,8)-(1,14)) - │ │ │ ├── flags: ∅ - │ │ │ ├── lefts: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (1,9)-(1,10)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :b - │ │ │ ├── rest: - │ │ │ │ @ SplatNode (location: (1,12)-(1,13)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── operator_loc: (1,12)-(1,13) = "*" - │ │ │ │ └── expression: ∅ - │ │ │ ├── rights: (length: 0) - │ │ │ ├── lparen_loc: (1,8)-(1,9) = "(" - │ │ │ └── rparen_loc: (1,13)-(1,14) = ")" - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,4)-(1,5) = "|" - │ └── closing_loc: (1,14)-(1,15) = "|" - ├── body: ∅ - ├── opening_loc: (1,2)-(1,3) = "{" - └── closing_loc: (1,16)-(1,17) = "}" diff --git a/test/prism/snapshots/seattlerb/difficult3__8.txt b/test/prism/snapshots/seattlerb/difficult3__8.txt deleted file mode 100644 index e19cbfc279eb08..00000000000000 --- a/test/prism/snapshots/seattlerb/difficult3__8.txt +++ /dev/null @@ -1,59 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,20)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,20)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,20)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :f - ├── message_loc: (1,0)-(1,1) = "f" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,2)-(1,20)) - ├── flags: ∅ - ├── locals: [:a, :b, :c] - ├── parameters: - │ @ BlockParametersNode (location: (1,4)-(1,18)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,5)-(1,17)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 2) - │ │ │ ├── @ RequiredParameterNode (location: (1,5)-(1,6)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :a - │ │ │ └── @ MultiTargetNode (location: (1,8)-(1,17)) - │ │ │ ├── flags: ∅ - │ │ │ ├── lefts: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (1,9)-(1,10)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :b - │ │ │ ├── rest: - │ │ │ │ @ SplatNode (location: (1,12)-(1,13)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── operator_loc: (1,12)-(1,13) = "*" - │ │ │ │ └── expression: ∅ - │ │ │ ├── rights: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (1,15)-(1,16)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :c - │ │ │ ├── lparen_loc: (1,8)-(1,9) = "(" - │ │ │ └── rparen_loc: (1,16)-(1,17) = ")" - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,4)-(1,5) = "|" - │ └── closing_loc: (1,17)-(1,18) = "|" - ├── body: ∅ - ├── opening_loc: (1,2)-(1,3) = "{" - └── closing_loc: (1,19)-(1,20) = "}" diff --git a/test/prism/snapshots/seattlerb/difficult3__9.txt b/test/prism/snapshots/seattlerb/difficult3__9.txt deleted file mode 100644 index 2259351b41f94e..00000000000000 --- a/test/prism/snapshots/seattlerb/difficult3__9.txt +++ /dev/null @@ -1,56 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,15)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,15)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,15)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :f - ├── message_loc: (1,0)-(1,1) = "f" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,2)-(1,15)) - ├── flags: ∅ - ├── locals: [:a, :b] - ├── parameters: - │ @ BlockParametersNode (location: (1,4)-(1,13)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,5)-(1,12)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 2) - │ │ │ ├── @ RequiredParameterNode (location: (1,5)-(1,6)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :a - │ │ │ └── @ MultiTargetNode (location: (1,8)-(1,12)) - │ │ │ ├── flags: ∅ - │ │ │ ├── lefts: (length: 0) - │ │ │ ├── rest: - │ │ │ │ @ SplatNode (location: (1,9)-(1,11)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── operator_loc: (1,9)-(1,10) = "*" - │ │ │ │ └── expression: - │ │ │ │ @ RequiredParameterNode (location: (1,10)-(1,11)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :b - │ │ │ ├── rights: (length: 0) - │ │ │ ├── lparen_loc: (1,8)-(1,9) = "(" - │ │ │ └── rparen_loc: (1,11)-(1,12) = ")" - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,4)-(1,5) = "|" - │ └── closing_loc: (1,12)-(1,13) = "|" - ├── body: ∅ - ├── opening_loc: (1,2)-(1,3) = "{" - └── closing_loc: (1,14)-(1,15) = "}" diff --git a/test/prism/snapshots/seattlerb/difficult4__leading_dots.txt b/test/prism/snapshots/seattlerb/difficult4__leading_dots.txt deleted file mode 100644 index 4201ed00aadd84..00000000000000 --- a/test/prism/snapshots/seattlerb/difficult4__leading_dots.txt +++ /dev/null @@ -1,27 +0,0 @@ -@ ProgramNode (location: (1,0)-(2,2)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(2,2)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(2,2)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (1,0)-(1,1)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (1,0)-(1,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: (2,0)-(2,1) = "." - ├── name: :b - ├── message_loc: (2,1)-(2,2) = "b" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/difficult4__leading_dots2.txt b/test/prism/snapshots/seattlerb/difficult4__leading_dots2.txt deleted file mode 100644 index 8dd122ddd444bc..00000000000000 --- a/test/prism/snapshots/seattlerb/difficult4__leading_dots2.txt +++ /dev/null @@ -1,18 +0,0 @@ -@ ProgramNode (location: (1,0)-(2,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(2,3)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: newline, static_literal, decimal - │ └── value: 1 - └── @ RangeNode (location: (2,0)-(2,3)) - ├── flags: newline, static_literal - ├── left: ∅ - ├── right: - │ @ IntegerNode (location: (2,2)-(2,3)) - │ ├── flags: static_literal, decimal - │ └── value: 3 - └── operator_loc: (2,0)-(2,2) = ".." diff --git a/test/prism/snapshots/seattlerb/difficult6_.txt b/test/prism/snapshots/seattlerb/difficult6_.txt deleted file mode 100644 index fc273bda46d91d..00000000000000 --- a/test/prism/snapshots/seattlerb/difficult6_.txt +++ /dev/null @@ -1,70 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,25)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,25)) - ├── flags: ∅ - └── body: (length: 1) - └── @ LambdaNode (location: (1,0)-(1,25)) - ├── flags: newline - ├── locals: [:a, :b] - ├── operator_loc: (1,0)-(1,2) = "->" - ├── opening_loc: (1,13)-(1,14) = "{" - ├── closing_loc: (1,24)-(1,25) = "}" - ├── parameters: - │ @ BlockParametersNode (location: (1,2)-(1,12)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,3)-(1,11)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (1,3)-(1,4)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :a - │ │ ├── optionals: (length: 1) - │ │ │ └── @ OptionalParameterNode (location: (1,6)-(1,11)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :b - │ │ │ ├── name_loc: (1,6)-(1,7) = "b" - │ │ │ ├── operator_loc: (1,7)-(1,8) = "=" - │ │ │ └── value: - │ │ │ @ NilNode (location: (1,8)-(1,11)) - │ │ │ └── flags: static_literal - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,2)-(1,3) = "(" - │ └── closing_loc: (1,11)-(1,12) = ")" - └── body: - @ StatementsNode (location: (1,15)-(1,23)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,15)-(1,23)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :p - ├── message_loc: (1,15)-(1,16) = "p" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,17)-(1,23)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ ArrayNode (location: (1,17)-(1,23)) - │ ├── flags: ∅ - │ ├── elements: (length: 2) - │ │ ├── @ LocalVariableReadNode (location: (1,18)-(1,19)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :a - │ │ │ └── depth: 0 - │ │ └── @ LocalVariableReadNode (location: (1,21)-(1,22)) - │ │ ├── flags: ∅ - │ │ ├── name: :b - │ │ └── depth: 0 - │ ├── opening_loc: (1,17)-(1,18) = "[" - │ └── closing_loc: (1,22)-(1,23) = "]" - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/difficult6__7.txt b/test/prism/snapshots/seattlerb/difficult6__7.txt deleted file mode 100644 index 509da6914f4725..00000000000000 --- a/test/prism/snapshots/seattlerb/difficult6__7.txt +++ /dev/null @@ -1,61 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,11)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,11)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,11)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (1,0)-(1,1)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (1,0)-(1,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: (1,1)-(1,2) = "." - ├── name: :b - ├── message_loc: (1,2)-(1,3) = "b" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,4)-(1,7)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ ParenthesesNode (location: (1,4)-(1,7)) - │ ├── flags: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (1,5)-(1,6)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ IntegerNode (location: (1,5)-(1,6)) - │ │ ├── flags: newline, static_literal, decimal - │ │ └── value: 1 - │ ├── opening_loc: (1,4)-(1,5) = "(" - │ └── closing_loc: (1,6)-(1,7) = ")" - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,8)-(1,11)) - ├── flags: ∅ - ├── locals: [] - ├── parameters: ∅ - ├── body: - │ @ StatementsNode (location: (1,9)-(1,10)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,9)-(1,10)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :c - │ ├── message_loc: (1,9)-(1,10) = "c" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── opening_loc: (1,8)-(1,9) = "{" - └── closing_loc: (1,10)-(1,11) = "}" diff --git a/test/prism/snapshots/seattlerb/difficult6__8.txt b/test/prism/snapshots/seattlerb/difficult6__8.txt deleted file mode 100644 index c6fece62cb418d..00000000000000 --- a/test/prism/snapshots/seattlerb/difficult6__8.txt +++ /dev/null @@ -1,61 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,12)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,12)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,12)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (1,0)-(1,1)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (1,0)-(1,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: (1,1)-(1,3) = "::" - ├── name: :b - ├── message_loc: (1,3)-(1,4) = "b" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,5)-(1,8)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ ParenthesesNode (location: (1,5)-(1,8)) - │ ├── flags: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (1,6)-(1,7)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ IntegerNode (location: (1,6)-(1,7)) - │ │ ├── flags: newline, static_literal, decimal - │ │ └── value: 1 - │ ├── opening_loc: (1,5)-(1,6) = "(" - │ └── closing_loc: (1,7)-(1,8) = ")" - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,9)-(1,12)) - ├── flags: ∅ - ├── locals: [] - ├── parameters: ∅ - ├── body: - │ @ StatementsNode (location: (1,10)-(1,11)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,10)-(1,11)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :c - │ ├── message_loc: (1,10)-(1,11) = "c" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── opening_loc: (1,9)-(1,10) = "{" - └── closing_loc: (1,11)-(1,12) = "}" diff --git a/test/prism/snapshots/seattlerb/difficult7_.txt b/test/prism/snapshots/seattlerb/difficult7_.txt deleted file mode 100644 index 2cf03ce57e6964..00000000000000 --- a/test/prism/snapshots/seattlerb/difficult7_.txt +++ /dev/null @@ -1,105 +0,0 @@ -@ ProgramNode (location: (1,6)-(4,7)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,6)-(4,7)) - ├── flags: ∅ - └── body: (length: 1) - └── @ HashNode (location: (1,6)-(4,7)) - ├── flags: newline - ├── opening_loc: (1,6)-(1,7) = "{" - ├── elements: (length: 2) - │ ├── @ AssocNode (location: (2,8)-(2,33)) - │ │ ├── flags: ∅ - │ │ ├── key: - │ │ │ @ SymbolNode (location: (2,8)-(2,10)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (2,8)-(2,9) = "a" - │ │ │ ├── closing_loc: (2,9)-(2,10) = ":" - │ │ │ └── unescaped: "a" - │ │ ├── value: - │ │ │ @ CallNode (location: (2,11)-(2,33)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :lambda - │ │ │ ├── message_loc: (2,11)-(2,17) = "lambda" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: - │ │ │ @ BlockNode (location: (2,18)-(2,33)) - │ │ │ ├── flags: ∅ - │ │ │ ├── locals: [] - │ │ │ ├── parameters: ∅ - │ │ │ ├── body: - │ │ │ │ @ StatementsNode (location: (2,20)-(2,31)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ IfNode (location: (2,20)-(2,31)) - │ │ │ │ ├── flags: newline - │ │ │ │ ├── if_keyword_loc: ∅ - │ │ │ │ ├── predicate: - │ │ │ │ │ @ CallNode (location: (2,20)-(2,21)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :b - │ │ │ │ │ ├── message_loc: (2,20)-(2,21) = "b" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── then_keyword_loc: (2,22)-(2,23) = "?" - │ │ │ │ ├── statements: - │ │ │ │ │ @ StatementsNode (location: (2,24)-(2,27)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── body: (length: 1) - │ │ │ │ │ └── @ CallNode (location: (2,24)-(2,27)) - │ │ │ │ │ ├── flags: newline, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :c - │ │ │ │ │ ├── message_loc: (2,24)-(2,25) = "c" - │ │ │ │ │ ├── opening_loc: (2,25)-(2,26) = "(" - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: (2,26)-(2,27) = ")" - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── subsequent: - │ │ │ │ │ @ ElseNode (location: (2,28)-(2,31)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── else_keyword_loc: (2,28)-(2,29) = ":" - │ │ │ │ │ ├── statements: - │ │ │ │ │ │ @ StatementsNode (location: (2,30)-(2,31)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ └── body: (length: 1) - │ │ │ │ │ │ └── @ CallNode (location: (2,30)-(2,31)) - │ │ │ │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ │ ├── name: :d - │ │ │ │ │ │ ├── message_loc: (2,30)-(2,31) = "d" - │ │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ │ └── block: ∅ - │ │ │ │ │ └── end_keyword_loc: ∅ - │ │ │ │ └── end_keyword_loc: ∅ - │ │ │ ├── opening_loc: (2,18)-(2,19) = "{" - │ │ │ └── closing_loc: (2,32)-(2,33) = "}" - │ │ └── operator_loc: ∅ - │ └── @ AssocNode (location: (3,8)-(3,14)) - │ ├── flags: static_literal - │ ├── key: - │ │ @ SymbolNode (location: (3,8)-(3,10)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: ∅ - │ │ ├── value_loc: (3,8)-(3,9) = "e" - │ │ ├── closing_loc: (3,9)-(3,10) = ":" - │ │ └── unescaped: "e" - │ ├── value: - │ │ @ NilNode (location: (3,11)-(3,14)) - │ │ └── flags: static_literal - │ └── operator_loc: ∅ - └── closing_loc: (4,6)-(4,7) = "}" diff --git a/test/prism/snapshots/seattlerb/do_bug.txt b/test/prism/snapshots/seattlerb/do_bug.txt deleted file mode 100644 index 8d1a0b786ce944..00000000000000 --- a/test/prism/snapshots/seattlerb/do_bug.txt +++ /dev/null @@ -1,68 +0,0 @@ -@ ProgramNode (location: (1,0)-(4,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(4,3)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ CallNode (location: (1,0)-(1,3)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (1,0)-(1,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,2)-(1,3)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (1,2)-(1,3)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── @ CallNode (location: (2,0)-(4,3)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (2,0)-(2,1)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (2,0)-(2,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: (2,1)-(2,2) = "." - ├── name: :b - ├── message_loc: (2,2)-(2,3) = "b" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (2,4)-(4,3)) - ├── flags: ∅ - ├── locals: [:c] - ├── parameters: - │ @ BlockParametersNode (location: (2,7)-(2,10)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (2,8)-(2,9)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (2,8)-(2,9)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :c - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (2,7)-(2,8) = "|" - │ └── closing_loc: (2,9)-(2,10) = "|" - ├── body: ∅ - ├── opening_loc: (2,4)-(2,6) = "do" - └── closing_loc: (4,0)-(4,3) = "end" diff --git a/test/prism/snapshots/seattlerb/do_lambda.txt b/test/prism/snapshots/seattlerb/do_lambda.txt deleted file mode 100644 index 76383b0ada0a0b..00000000000000 --- a/test/prism/snapshots/seattlerb/do_lambda.txt +++ /dev/null @@ -1,21 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,11)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,11)) - ├── flags: ∅ - └── body: (length: 1) - └── @ LambdaNode (location: (1,0)-(1,11)) - ├── flags: newline - ├── locals: [] - ├── operator_loc: (1,0)-(1,2) = "->" - ├── opening_loc: (1,5)-(1,7) = "do" - ├── closing_loc: (1,8)-(1,11) = "end" - ├── parameters: - │ @ BlockParametersNode (location: (1,2)-(1,4)) - │ ├── flags: ∅ - │ ├── parameters: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,2)-(1,3) = "(" - │ └── closing_loc: (1,3)-(1,4) = ")" - └── body: ∅ diff --git a/test/prism/snapshots/seattlerb/dot2_nil__26.txt b/test/prism/snapshots/seattlerb/dot2_nil__26.txt deleted file mode 100644 index fc5122055f51ec..00000000000000 --- a/test/prism/snapshots/seattlerb/dot2_nil__26.txt +++ /dev/null @@ -1,22 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ RangeNode (location: (1,0)-(1,3)) - ├── flags: newline - ├── left: - │ @ CallNode (location: (1,0)-(1,1)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (1,0)-(1,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── right: ∅ - └── operator_loc: (1,1)-(1,3) = ".." diff --git a/test/prism/snapshots/seattlerb/dot3_nil__26.txt b/test/prism/snapshots/seattlerb/dot3_nil__26.txt deleted file mode 100644 index c2277975db0ad9..00000000000000 --- a/test/prism/snapshots/seattlerb/dot3_nil__26.txt +++ /dev/null @@ -1,22 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,4)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,4)) - ├── flags: ∅ - └── body: (length: 1) - └── @ RangeNode (location: (1,0)-(1,4)) - ├── flags: newline, exclude_end - ├── left: - │ @ CallNode (location: (1,0)-(1,1)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (1,0)-(1,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── right: ∅ - └── operator_loc: (1,1)-(1,4) = "..." diff --git a/test/prism/snapshots/seattlerb/dstr_evstr.txt b/test/prism/snapshots/seattlerb/dstr_evstr.txt deleted file mode 100644 index 143d8ff5840a7a..00000000000000 --- a/test/prism/snapshots/seattlerb/dstr_evstr.txt +++ /dev/null @@ -1,44 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,12)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,12)) - ├── flags: ∅ - └── body: (length: 1) - └── @ InterpolatedStringNode (location: (1,0)-(1,12)) - ├── flags: newline - ├── opening_loc: (1,0)-(1,1) = "\"" - ├── parts: (length: 2) - │ ├── @ EmbeddedStatementsNode (location: (1,1)-(1,7)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (1,1)-(1,3) = "\#{" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (1,3)-(1,6)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ StringNode (location: (1,3)-(1,6)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: (1,3)-(1,4) = "'" - │ │ │ ├── content_loc: (1,4)-(1,5) = "a" - │ │ │ ├── closing_loc: (1,5)-(1,6) = "'" - │ │ │ └── unescaped: "a" - │ │ └── closing_loc: (1,6)-(1,7) = "}" - │ └── @ EmbeddedStatementsNode (location: (1,7)-(1,11)) - │ ├── flags: ∅ - │ ├── opening_loc: (1,7)-(1,9) = "\#{" - │ ├── statements: - │ │ @ StatementsNode (location: (1,9)-(1,10)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (1,9)-(1,10)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :b - │ │ ├── message_loc: (1,9)-(1,10) = "b" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── closing_loc: (1,10)-(1,11) = "}" - └── closing_loc: (1,11)-(1,12) = "\"" diff --git a/test/prism/snapshots/seattlerb/dstr_evstr_empty_end.txt b/test/prism/snapshots/seattlerb/dstr_evstr_empty_end.txt deleted file mode 100644 index 8e3ade63c97361..00000000000000 --- a/test/prism/snapshots/seattlerb/dstr_evstr_empty_end.txt +++ /dev/null @@ -1,30 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,11)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,11)) - ├── flags: ∅ - └── body: (length: 1) - └── @ InterpolatedSymbolNode (location: (1,0)-(1,11)) - ├── flags: newline - ├── opening_loc: (1,0)-(1,2) = ":\"" - ├── parts: (length: 1) - │ └── @ EmbeddedStatementsNode (location: (1,2)-(1,10)) - │ ├── flags: ∅ - │ ├── opening_loc: (1,2)-(1,4) = "\#{" - │ ├── statements: - │ │ @ StatementsNode (location: (1,4)-(1,9)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (1,4)-(1,9)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :field - │ │ ├── message_loc: (1,4)-(1,9) = "field" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── closing_loc: (1,9)-(1,10) = "}" - └── closing_loc: (1,10)-(1,11) = "\"" diff --git a/test/prism/snapshots/seattlerb/dstr_lex_state.txt b/test/prism/snapshots/seattlerb/dstr_lex_state.txt deleted file mode 100644 index 2bdeab0834ede0..00000000000000 --- a/test/prism/snapshots/seattlerb/dstr_lex_state.txt +++ /dev/null @@ -1,39 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,8)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,8)) - ├── flags: ∅ - └── body: (length: 1) - └── @ InterpolatedStringNode (location: (1,0)-(1,8)) - ├── flags: newline - ├── opening_loc: (1,0)-(1,1) = "\"" - ├── parts: (length: 1) - │ └── @ EmbeddedStatementsNode (location: (1,1)-(1,7)) - │ ├── flags: ∅ - │ ├── opening_loc: (1,1)-(1,3) = "\#{" - │ ├── statements: - │ │ @ StatementsNode (location: (1,3)-(1,6)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (1,3)-(1,6)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :p - │ │ ├── message_loc: (1,3)-(1,4) = "p" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (1,4)-(1,6)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ SymbolNode (location: (1,4)-(1,6)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (1,4)-(1,5) = ":" - │ │ │ ├── value_loc: (1,5)-(1,6) = "a" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "a" - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── closing_loc: (1,6)-(1,7) = "}" - └── closing_loc: (1,7)-(1,8) = "\"" diff --git a/test/prism/snapshots/seattlerb/dstr_str.txt b/test/prism/snapshots/seattlerb/dstr_str.txt deleted file mode 100644 index 7b3e0e36ad5006..00000000000000 --- a/test/prism/snapshots/seattlerb/dstr_str.txt +++ /dev/null @@ -1,32 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,10)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,10)) - ├── flags: ∅ - └── body: (length: 1) - └── @ InterpolatedStringNode (location: (1,0)-(1,10)) - ├── flags: newline, static_literal, mutable - ├── opening_loc: (1,0)-(1,1) = "\"" - ├── parts: (length: 2) - │ ├── @ EmbeddedStatementsNode (location: (1,1)-(1,7)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (1,1)-(1,3) = "\#{" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (1,3)-(1,6)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ StringNode (location: (1,3)-(1,6)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: (1,3)-(1,4) = "'" - │ │ │ ├── content_loc: (1,4)-(1,5) = "a" - │ │ │ ├── closing_loc: (1,5)-(1,6) = "'" - │ │ │ └── unescaped: "a" - │ │ └── closing_loc: (1,6)-(1,7) = "}" - │ └── @ StringNode (location: (1,7)-(1,9)) - │ ├── flags: static_literal, frozen - │ ├── opening_loc: ∅ - │ ├── content_loc: (1,7)-(1,9) = " b" - │ ├── closing_loc: ∅ - │ └── unescaped: " b" - └── closing_loc: (1,9)-(1,10) = "\"" diff --git a/test/prism/snapshots/seattlerb/dsym_esc_to_sym.txt b/test/prism/snapshots/seattlerb/dsym_esc_to_sym.txt deleted file mode 100644 index 4224e305e9f9ca..00000000000000 --- a/test/prism/snapshots/seattlerb/dsym_esc_to_sym.txt +++ /dev/null @@ -1,13 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,17)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,17)) - ├── flags: ∅ - └── body: (length: 1) - └── @ SymbolNode (location: (1,0)-(1,17)) - ├── flags: newline, static_literal, forced_utf8_encoding - ├── opening_loc: (1,0)-(1,2) = ":\"" - ├── value_loc: (1,2)-(1,16) = "Variet\\303\\240" - ├── closing_loc: (1,16)-(1,17) = "\"" - └── unescaped: "Varietà" diff --git a/test/prism/snapshots/seattlerb/dsym_to_sym.txt b/test/prism/snapshots/seattlerb/dsym_to_sym.txt deleted file mode 100644 index 7c5d2bef87497b..00000000000000 --- a/test/prism/snapshots/seattlerb/dsym_to_sym.txt +++ /dev/null @@ -1,41 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,13)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,13)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ AliasMethodNode (location: (1,0)-(1,17)) - │ ├── flags: newline - │ ├── new_name: - │ │ @ SymbolNode (location: (1,6)-(1,11)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (1,6)-(1,8) = ":\"" - │ │ ├── value_loc: (1,8)-(1,10) = "<<" - │ │ ├── closing_loc: (1,10)-(1,11) = "\"" - │ │ └── unescaped: "<<" - │ ├── old_name: - │ │ @ SymbolNode (location: (1,12)-(1,17)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (1,12)-(1,14) = ":\"" - │ │ ├── value_loc: (1,14)-(1,16) = ">>" - │ │ ├── closing_loc: (1,16)-(1,17) = "\"" - │ │ └── unescaped: ">>" - │ └── keyword_loc: (1,0)-(1,5) = "alias" - └── @ AliasMethodNode (location: (3,0)-(3,13)) - ├── flags: newline - ├── new_name: - │ @ SymbolNode (location: (3,6)-(3,9)) - │ ├── flags: static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (3,6)-(3,7) = ":" - │ ├── value_loc: (3,7)-(3,9) = "<<" - │ ├── closing_loc: ∅ - │ └── unescaped: "<<" - ├── old_name: - │ @ SymbolNode (location: (3,10)-(3,13)) - │ ├── flags: static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (3,10)-(3,11) = ":" - │ ├── value_loc: (3,11)-(3,13) = ">>" - │ ├── closing_loc: ∅ - │ └── unescaped: ">>" - └── keyword_loc: (3,0)-(3,5) = "alias" diff --git a/test/prism/snapshots/seattlerb/eq_begin_line_numbers.txt b/test/prism/snapshots/seattlerb/eq_begin_line_numbers.txt deleted file mode 100644 index 010ee71da042ef..00000000000000 --- a/test/prism/snapshots/seattlerb/eq_begin_line_numbers.txt +++ /dev/null @@ -1,13 +0,0 @@ -@ ProgramNode (location: (1,0)-(6,1)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(6,1)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: newline, static_literal, decimal - │ └── value: 1 - └── @ IntegerNode (location: (6,0)-(6,1)) - ├── flags: newline, static_literal, decimal - └── value: 2 diff --git a/test/prism/snapshots/seattlerb/eq_begin_why_wont_people_use_their_spacebar.txt b/test/prism/snapshots/seattlerb/eq_begin_why_wont_people_use_their_spacebar.txt deleted file mode 100644 index 5f6a3fe62ee9c4..00000000000000 --- a/test/prism/snapshots/seattlerb/eq_begin_why_wont_people_use_their_spacebar.txt +++ /dev/null @@ -1,54 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,8)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,8)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(3,8)) - ├── flags: newline, attribute_write - ├── receiver: - │ @ CallNode (location: (1,0)-(1,1)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :h - │ ├── message_loc: (1,0)-(1,1) = "h" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: ∅ - ├── name: :[]= - ├── message_loc: (1,1)-(1,4) = "[k]" - ├── opening_loc: (1,1)-(1,2) = "[" - ├── arguments: - │ @ ArgumentsNode (location: (1,2)-(3,8)) - │ ├── flags: ∅ - │ └── arguments: (length: 2) - │ ├── @ CallNode (location: (1,2)-(1,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :k - │ │ ├── message_loc: (1,2)-(1,3) = "k" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── @ BeginNode (location: (1,5)-(3,8)) - │ ├── flags: ∅ - │ ├── begin_keyword_loc: (1,5)-(1,10) = "begin" - │ ├── statements: - │ │ @ StatementsNode (location: (2,7)-(2,9)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ IntegerNode (location: (2,7)-(2,9)) - │ │ ├── flags: newline, static_literal, decimal - │ │ └── value: 42 - │ ├── rescue_clause: ∅ - │ ├── else_clause: ∅ - │ ├── ensure_clause: ∅ - │ └── end_keyword_loc: (3,5)-(3,8) = "end" - ├── closing_loc: (1,3)-(1,4) = "]" - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/evstr_evstr.txt b/test/prism/snapshots/seattlerb/evstr_evstr.txt deleted file mode 100644 index c8dba1c3e55443..00000000000000 --- a/test/prism/snapshots/seattlerb/evstr_evstr.txt +++ /dev/null @@ -1,48 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,10)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,10)) - ├── flags: ∅ - └── body: (length: 1) - └── @ InterpolatedStringNode (location: (1,0)-(1,10)) - ├── flags: newline - ├── opening_loc: (1,0)-(1,1) = "\"" - ├── parts: (length: 2) - │ ├── @ EmbeddedStatementsNode (location: (1,1)-(1,5)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (1,1)-(1,3) = "\#{" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (1,3)-(1,4)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (1,3)-(1,4)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :a - │ │ │ ├── message_loc: (1,3)-(1,4) = "a" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── closing_loc: (1,4)-(1,5) = "}" - │ └── @ EmbeddedStatementsNode (location: (1,5)-(1,9)) - │ ├── flags: ∅ - │ ├── opening_loc: (1,5)-(1,7) = "\#{" - │ ├── statements: - │ │ @ StatementsNode (location: (1,7)-(1,8)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (1,7)-(1,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :b - │ │ ├── message_loc: (1,7)-(1,8) = "b" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── closing_loc: (1,8)-(1,9) = "}" - └── closing_loc: (1,9)-(1,10) = "\"" diff --git a/test/prism/snapshots/seattlerb/evstr_str.txt b/test/prism/snapshots/seattlerb/evstr_str.txt deleted file mode 100644 index 69a992b19a9dd1..00000000000000 --- a/test/prism/snapshots/seattlerb/evstr_str.txt +++ /dev/null @@ -1,36 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,8)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,8)) - ├── flags: ∅ - └── body: (length: 1) - └── @ InterpolatedStringNode (location: (1,0)-(1,8)) - ├── flags: newline - ├── opening_loc: (1,0)-(1,1) = "\"" - ├── parts: (length: 2) - │ ├── @ EmbeddedStatementsNode (location: (1,1)-(1,5)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (1,1)-(1,3) = "\#{" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (1,3)-(1,4)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (1,3)-(1,4)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :a - │ │ │ ├── message_loc: (1,3)-(1,4) = "a" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── closing_loc: (1,4)-(1,5) = "}" - │ └── @ StringNode (location: (1,5)-(1,7)) - │ ├── flags: static_literal, frozen - │ ├── opening_loc: ∅ - │ ├── content_loc: (1,5)-(1,7) = " b" - │ ├── closing_loc: ∅ - │ └── unescaped: " b" - └── closing_loc: (1,7)-(1,8) = "\"" diff --git a/test/prism/snapshots/seattlerb/expr_not_bang.txt b/test/prism/snapshots/seattlerb/expr_not_bang.txt deleted file mode 100644 index 868ef85648f759..00000000000000 --- a/test/prism/snapshots/seattlerb/expr_not_bang.txt +++ /dev/null @@ -1,40 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,5)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,5)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,5)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (1,2)-(1,5)) - │ ├── flags: ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (1,2)-(1,3) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,4)-(1,5)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (1,4)-(1,5)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :b - │ │ ├── message_loc: (1,4)-(1,5) = "b" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: ∅ - ├── name: :! - ├── message_loc: (1,0)-(1,1) = "!" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/f_kw.txt b/test/prism/snapshots/seattlerb/f_kw.txt deleted file mode 100644 index e2b82371b87734..00000000000000 --- a/test/prism/snapshots/seattlerb/f_kw.txt +++ /dev/null @@ -1,38 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,15)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,15)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(1,15)) - ├── flags: newline - ├── name: :x - ├── name_loc: (1,4)-(1,5) = "x" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (1,6)-(1,10)) - │ ├── flags: ∅ - │ ├── requireds: (length: 0) - │ ├── optionals: (length: 0) - │ ├── rest: ∅ - │ ├── posts: (length: 0) - │ ├── keywords: (length: 1) - │ │ └── @ OptionalKeywordParameterNode (location: (1,6)-(1,10)) - │ │ ├── flags: ∅ - │ │ ├── name: :k - │ │ ├── name_loc: (1,6)-(1,8) = "k:" - │ │ └── value: - │ │ @ IntegerNode (location: (1,8)-(1,10)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 42 - │ ├── keyword_rest: ∅ - │ └── block: ∅ - ├── body: ∅ - ├── locals: [:k] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: ∅ - ├── rparen_loc: ∅ - ├── equal_loc: ∅ - └── end_keyword_loc: (1,12)-(1,15) = "end" diff --git a/test/prism/snapshots/seattlerb/f_kw__required.txt b/test/prism/snapshots/seattlerb/f_kw__required.txt deleted file mode 100644 index c44dbbf2fc81c0..00000000000000 --- a/test/prism/snapshots/seattlerb/f_kw__required.txt +++ /dev/null @@ -1,34 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,13)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,13)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(1,13)) - ├── flags: newline - ├── name: :x - ├── name_loc: (1,4)-(1,5) = "x" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (1,6)-(1,8)) - │ ├── flags: ∅ - │ ├── requireds: (length: 0) - │ ├── optionals: (length: 0) - │ ├── rest: ∅ - │ ├── posts: (length: 0) - │ ├── keywords: (length: 1) - │ │ └── @ RequiredKeywordParameterNode (location: (1,6)-(1,8)) - │ │ ├── flags: ∅ - │ │ ├── name: :k - │ │ └── name_loc: (1,6)-(1,8) = "k:" - │ ├── keyword_rest: ∅ - │ └── block: ∅ - ├── body: ∅ - ├── locals: [:k] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: ∅ - ├── rparen_loc: ∅ - ├── equal_loc: ∅ - └── end_keyword_loc: (1,10)-(1,13) = "end" diff --git a/test/prism/snapshots/seattlerb/flip2_env_lvar.txt b/test/prism/snapshots/seattlerb/flip2_env_lvar.txt deleted file mode 100644 index def6ffaf3a7e84..00000000000000 --- a/test/prism/snapshots/seattlerb/flip2_env_lvar.txt +++ /dev/null @@ -1,40 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,16)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,16)) - ├── flags: ∅ - └── body: (length: 1) - └── @ IfNode (location: (1,0)-(1,16)) - ├── flags: newline - ├── if_keyword_loc: (1,0)-(1,2) = "if" - ├── predicate: - │ @ FlipFlopNode (location: (1,3)-(1,7)) - │ ├── flags: ∅ - │ ├── left: - │ │ @ CallNode (location: (1,3)-(1,4)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (1,3)-(1,4) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── right: - │ │ @ CallNode (location: (1,6)-(1,7)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :b - │ │ ├── message_loc: (1,6)-(1,7) = "b" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── operator_loc: (1,4)-(1,6) = ".." - ├── then_keyword_loc: (1,8)-(1,12) = "then" - ├── statements: ∅ - ├── subsequent: ∅ - └── end_keyword_loc: (1,13)-(1,16) = "end" diff --git a/test/prism/snapshots/seattlerb/float_with_if_modifier.txt b/test/prism/snapshots/seattlerb/float_with_if_modifier.txt deleted file mode 100644 index 400c90b17cb591..00000000000000 --- a/test/prism/snapshots/seattlerb/float_with_if_modifier.txt +++ /dev/null @@ -1,23 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,10)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,10)) - ├── flags: ∅ - └── body: (length: 1) - └── @ IfNode (location: (1,0)-(1,10)) - ├── flags: newline - ├── if_keyword_loc: (1,3)-(1,5) = "if" - ├── predicate: - │ @ TrueNode (location: (1,6)-(1,10)) - │ └── flags: static_literal - ├── then_keyword_loc: ∅ - ├── statements: - │ @ StatementsNode (location: (1,0)-(1,3)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ FloatNode (location: (1,0)-(1,3)) - │ ├── flags: newline, static_literal - │ └── value: 1.0 - ├── subsequent: ∅ - └── end_keyword_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/heredoc__backslash_dos_format.txt b/test/prism/snapshots/seattlerb/heredoc__backslash_dos_format.txt deleted file mode 100644 index 7d745587b3f14f..00000000000000 --- a/test/prism/snapshots/seattlerb/heredoc__backslash_dos_format.txt +++ /dev/null @@ -1,20 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,12)) -├── flags: ∅ -├── locals: [:str] -└── statements: - @ StatementsNode (location: (1,0)-(1,12)) - ├── flags: ∅ - └── body: (length: 1) - └── @ LocalVariableWriteNode (location: (1,0)-(1,12)) - ├── flags: newline - ├── name: :str - ├── depth: 0 - ├── name_loc: (1,0)-(1,3) = "str" - ├── value: - │ @ StringNode (location: (1,6)-(1,12)) - │ ├── flags: ∅ - │ ├── opening_loc: (1,6)-(1,12) = "<<-XXX" - │ ├── content_loc: (2,0)-(4,0) = "before\\\r\nafter\r\n" - │ ├── closing_loc: (4,0)-(5,0) = "XXX\r\n" - │ └── unescaped: "beforeafter\n" - └── operator_loc: (1,4)-(1,5) = "=" diff --git a/test/prism/snapshots/seattlerb/heredoc_backslash_nl.txt b/test/prism/snapshots/seattlerb/heredoc_backslash_nl.txt deleted file mode 100644 index 4c34bf6ef60586..00000000000000 --- a/test/prism/snapshots/seattlerb/heredoc_backslash_nl.txt +++ /dev/null @@ -1,19 +0,0 @@ -@ ProgramNode (location: (1,0)-(5,7)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(5,7)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ StringNode (location: (1,0)-(3,1)) - │ ├── flags: newline - │ ├── opening_loc: (1,0)-(1,1) = "\"" - │ ├── content_loc: (1,1)-(3,0) = " why would someone do this? \\\n blah\n" - │ ├── closing_loc: (3,0)-(3,1) = "\"" - │ └── unescaped: " why would someone do this? blah\n" - └── @ StringNode (location: (5,0)-(5,7)) - ├── flags: newline - ├── opening_loc: (5,0)-(5,7) = "<<-DESC" - ├── content_loc: (6,0)-(8,0) = " why would someone do this? \\\n blah\n" - ├── closing_loc: (8,0)-(9,0) = "DESC\n" - └── unescaped: " why would someone do this? blah\n" diff --git a/test/prism/snapshots/seattlerb/heredoc_bad_hex_escape.txt b/test/prism/snapshots/seattlerb/heredoc_bad_hex_escape.txt deleted file mode 100644 index 1c521108c04f04..00000000000000 --- a/test/prism/snapshots/seattlerb/heredoc_bad_hex_escape.txt +++ /dev/null @@ -1,20 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,9)) -├── flags: ∅ -├── locals: [:s] -└── statements: - @ StatementsNode (location: (1,0)-(1,9)) - ├── flags: ∅ - └── body: (length: 1) - └── @ LocalVariableWriteNode (location: (1,0)-(1,9)) - ├── flags: newline - ├── name: :s - ├── depth: 0 - ├── name_loc: (1,0)-(1,1) = "s" - ├── value: - │ @ StringNode (location: (1,4)-(1,9)) - │ ├── flags: forced_utf8_encoding - │ ├── opening_loc: (1,4)-(1,9) = "< - ├── message_loc: (1,3)-(1,4) = ">" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,5)-(1,6)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ IntegerNode (location: (1,5)-(1,6)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/safe_call_rhs_newline.txt b/test/prism/snapshots/seattlerb/safe_call_rhs_newline.txt deleted file mode 100644 index 50d03b7044288f..00000000000000 --- a/test/prism/snapshots/seattlerb/safe_call_rhs_newline.txt +++ /dev/null @@ -1,34 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,8)) -├── flags: ∅ -├── locals: [:c] -└── statements: - @ StatementsNode (location: (1,0)-(1,8)) - ├── flags: ∅ - └── body: (length: 1) - └── @ LocalVariableWriteNode (location: (1,0)-(1,8)) - ├── flags: newline - ├── name: :c - ├── depth: 0 - ├── name_loc: (1,0)-(1,1) = "c" - ├── value: - │ @ CallNode (location: (1,4)-(1,8)) - │ ├── flags: safe_navigation - │ ├── receiver: - │ │ @ CallNode (location: (1,4)-(1,5)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (1,4)-(1,5) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (1,5)-(1,7) = "&." - │ ├── name: :b - │ ├── message_loc: (1,7)-(1,8) = "b" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── operator_loc: (1,2)-(1,3) = "=" diff --git a/test/prism/snapshots/seattlerb/safe_calls.txt b/test/prism/snapshots/seattlerb/safe_calls.txt deleted file mode 100644 index 5d853af648eacd..00000000000000 --- a/test/prism/snapshots/seattlerb/safe_calls.txt +++ /dev/null @@ -1,43 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,10)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,10)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,10)) - ├── flags: newline, safe_navigation - ├── receiver: - │ @ CallNode (location: (1,0)-(1,4)) - │ ├── flags: safe_navigation - │ ├── receiver: - │ │ @ CallNode (location: (1,0)-(1,1)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (1,0)-(1,1) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (1,1)-(1,3) = "&." - │ ├── name: :b - │ ├── message_loc: (1,3)-(1,4) = "b" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: (1,4)-(1,6) = "&." - ├── name: :c - ├── message_loc: (1,6)-(1,7) = "c" - ├── opening_loc: (1,7)-(1,8) = "(" - ├── arguments: - │ @ ArgumentsNode (location: (1,8)-(1,9)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ IntegerNode (location: (1,8)-(1,9)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── closing_loc: (1,9)-(1,10) = ")" - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/safe_op_asgn.txt b/test/prism/snapshots/seattlerb/safe_op_asgn.txt deleted file mode 100644 index 31ad5a813dfdb3..00000000000000 --- a/test/prism/snapshots/seattlerb/safe_op_asgn.txt +++ /dev/null @@ -1,43 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,11)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,11)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallOperatorWriteNode (location: (1,0)-(1,11)) - ├── flags: newline, safe_navigation - ├── receiver: - │ @ CallNode (location: (1,0)-(1,1)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (1,0)-(1,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: (1,1)-(1,3) = "&." - ├── message_loc: (1,3)-(1,4) = "b" - ├── read_name: :b - ├── write_name: :b= - ├── binary_operator: :+ - ├── binary_operator_loc: (1,5)-(1,7) = "+=" - └── value: - @ CallNode (location: (1,8)-(1,11)) - ├── flags: ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :x - ├── message_loc: (1,8)-(1,9) = "x" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,10)-(1,11)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ IntegerNode (location: (1,10)-(1,11)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/safe_op_asgn2.txt b/test/prism/snapshots/seattlerb/safe_op_asgn2.txt deleted file mode 100644 index 81d42aac635bd9..00000000000000 --- a/test/prism/snapshots/seattlerb/safe_op_asgn2.txt +++ /dev/null @@ -1,36 +0,0 @@ -@ ProgramNode (location: (1,0)-(2,1)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(2,1)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallOrWriteNode (location: (1,0)-(2,1)) - ├── flags: newline, safe_navigation - ├── receiver: - │ @ CallNode (location: (1,0)-(1,1)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (1,0)-(1,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: (1,1)-(1,3) = "&." - ├── message_loc: (1,3)-(1,4) = "b" - ├── read_name: :b - ├── write_name: :b= - ├── operator_loc: (1,5)-(1,8) = "||=" - └── value: - @ CallNode (location: (2,0)-(2,1)) - ├── flags: variable_call, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :x - ├── message_loc: (2,0)-(2,1) = "x" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/slashy_newlines_within_string.txt b/test/prism/snapshots/seattlerb/slashy_newlines_within_string.txt deleted file mode 100644 index 061e67ca6af4de..00000000000000 --- a/test/prism/snapshots/seattlerb/slashy_newlines_within_string.txt +++ /dev/null @@ -1,59 +0,0 @@ -@ ProgramNode (location: (1,0)-(6,5)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(6,5)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ CallNode (location: (1,0)-(4,8)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :puts - │ ├── message_loc: (1,0)-(1,4) = "puts" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,5)-(4,8)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ StringNode (location: (1,5)-(4,8)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (1,5)-(1,6) = "\"" - │ │ ├── content_loc: (1,6)-(4,7) = "hello\\\n my\\\n dear\\\n friend" - │ │ ├── closing_loc: (4,7)-(4,8) = "\"" - │ │ └── unescaped: "hello my dear friend" - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── @ CallNode (location: (6,0)-(6,5)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (6,0)-(6,1)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (6,0)-(6,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: ∅ - ├── name: :+ - ├── message_loc: (6,2)-(6,3) = "+" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (6,4)-(6,5)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ CallNode (location: (6,4)-(6,5)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :b - │ ├── message_loc: (6,4)-(6,5) = "b" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/stabby_arg_no_paren.txt b/test/prism/snapshots/seattlerb/stabby_arg_no_paren.txt deleted file mode 100644 index e00e82e9c6a11a..00000000000000 --- a/test/prism/snapshots/seattlerb/stabby_arg_no_paren.txt +++ /dev/null @@ -1,33 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,5)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,5)) - ├── flags: ∅ - └── body: (length: 1) - └── @ LambdaNode (location: (1,0)-(1,5)) - ├── flags: newline - ├── locals: [:a] - ├── operator_loc: (1,0)-(1,2) = "->" - ├── opening_loc: (1,3)-(1,4) = "{" - ├── closing_loc: (1,4)-(1,5) = "}" - ├── parameters: - │ @ BlockParametersNode (location: (1,2)-(1,3)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,2)-(1,3)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (1,2)-(1,3)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :a - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: ∅ - │ └── closing_loc: ∅ - └── body: ∅ diff --git a/test/prism/snapshots/seattlerb/stabby_arg_opt_splat_arg_block_omfg.txt b/test/prism/snapshots/seattlerb/stabby_arg_opt_splat_arg_block_omfg.txt deleted file mode 100644 index b0b9a93f613b3b..00000000000000 --- a/test/prism/snapshots/seattlerb/stabby_arg_opt_splat_arg_block_omfg.txt +++ /dev/null @@ -1,55 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,23)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,23)) - ├── flags: ∅ - └── body: (length: 1) - └── @ LambdaNode (location: (1,0)-(1,23)) - ├── flags: newline - ├── locals: [:b, :c, :d, :e, :f] - ├── operator_loc: (1,0)-(1,2) = "->" - ├── opening_loc: (1,21)-(1,22) = "{" - ├── closing_loc: (1,22)-(1,23) = "}" - ├── parameters: - │ @ BlockParametersNode (location: (1,2)-(1,21)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,3)-(1,20)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (1,3)-(1,4)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :b - │ │ ├── optionals: (length: 1) - │ │ │ └── @ OptionalParameterNode (location: (1,6)-(1,9)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :c - │ │ │ ├── name_loc: (1,6)-(1,7) = "c" - │ │ │ ├── operator_loc: (1,7)-(1,8) = "=" - │ │ │ └── value: - │ │ │ @ IntegerNode (location: (1,8)-(1,9)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── rest: - │ │ │ @ RestParameterNode (location: (1,11)-(1,13)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :d - │ │ │ ├── name_loc: (1,12)-(1,13) = "d" - │ │ │ └── operator_loc: (1,11)-(1,12) = "*" - │ │ ├── posts: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (1,15)-(1,16)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :e - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: - │ │ @ BlockParameterNode (location: (1,18)-(1,20)) - │ │ ├── flags: ∅ - │ │ ├── name: :f - │ │ ├── name_loc: (1,19)-(1,20) = "f" - │ │ └── operator_loc: (1,18)-(1,19) = "&" - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,2)-(1,3) = "(" - │ └── closing_loc: (1,20)-(1,21) = ")" - └── body: ∅ diff --git a/test/prism/snapshots/seattlerb/stabby_block_iter_call.txt b/test/prism/snapshots/seattlerb/stabby_block_iter_call.txt deleted file mode 100644 index 97695636071356..00000000000000 --- a/test/prism/snapshots/seattlerb/stabby_block_iter_call.txt +++ /dev/null @@ -1,64 +0,0 @@ -@ ProgramNode (location: (1,0)-(4,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(4,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(4,3)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :x - ├── message_loc: (1,0)-(1,1) = "x" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,2)-(4,3)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ LambdaNode (location: (1,2)-(4,3)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── operator_loc: (1,2)-(1,4) = "->" - │ ├── opening_loc: (1,8)-(1,10) = "do" - │ ├── closing_loc: (4,0)-(4,3) = "end" - │ ├── parameters: - │ │ @ BlockParametersNode (location: (1,5)-(1,7)) - │ │ ├── flags: ∅ - │ │ ├── parameters: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: (1,5)-(1,6) = "(" - │ │ └── closing_loc: (1,6)-(1,7) = ")" - │ └── body: - │ @ StatementsNode (location: (2,0)-(3,3)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (2,0)-(3,3)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (2,0)-(2,1)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (2,0)-(2,1) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (2,1)-(2,2) = "." - │ ├── name: :b - │ ├── message_loc: (2,2)-(2,3) = "b" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (2,4)-(3,3)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (2,4)-(2,6) = "do" - │ └── closing_loc: (3,0)-(3,3) = "end" - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/stabby_block_iter_call_no_target_with_arg.txt b/test/prism/snapshots/seattlerb/stabby_block_iter_call_no_target_with_arg.txt deleted file mode 100644 index 5d60be6e86d138..00000000000000 --- a/test/prism/snapshots/seattlerb/stabby_block_iter_call_no_target_with_arg.txt +++ /dev/null @@ -1,60 +0,0 @@ -@ ProgramNode (location: (1,0)-(4,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(4,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(4,3)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :x - ├── message_loc: (1,0)-(1,1) = "x" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,2)-(4,3)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ LambdaNode (location: (1,2)-(4,3)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── operator_loc: (1,2)-(1,4) = "->" - │ ├── opening_loc: (1,8)-(1,10) = "do" - │ ├── closing_loc: (4,0)-(4,3) = "end" - │ ├── parameters: - │ │ @ BlockParametersNode (location: (1,5)-(1,7)) - │ │ ├── flags: ∅ - │ │ ├── parameters: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: (1,5)-(1,6) = "(" - │ │ └── closing_loc: (1,6)-(1,7) = ")" - │ └── body: - │ @ StatementsNode (location: (2,0)-(3,3)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (2,0)-(3,3)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (2,0)-(2,1) = "a" - │ ├── opening_loc: (2,1)-(2,2) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (2,2)-(2,3)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (2,2)-(2,3)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── closing_loc: (2,3)-(2,4) = ")" - │ └── block: - │ @ BlockNode (location: (2,5)-(3,3)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (2,5)-(2,7) = "do" - │ └── closing_loc: (3,0)-(3,3) = "end" - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/stabby_block_kw.txt b/test/prism/snapshots/seattlerb/stabby_block_kw.txt deleted file mode 100644 index 456eb691009e11..00000000000000 --- a/test/prism/snapshots/seattlerb/stabby_block_kw.txt +++ /dev/null @@ -1,38 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,13)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,13)) - ├── flags: ∅ - └── body: (length: 1) - └── @ LambdaNode (location: (1,0)-(1,13)) - ├── flags: newline - ├── locals: [:k] - ├── operator_loc: (1,0)-(1,2) = "->" - ├── opening_loc: (1,10)-(1,11) = "{" - ├── closing_loc: (1,12)-(1,13) = "}" - ├── parameters: - │ @ BlockParametersNode (location: (1,3)-(1,9)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,4)-(1,8)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 1) - │ │ │ └── @ OptionalKeywordParameterNode (location: (1,4)-(1,8)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :k - │ │ │ ├── name_loc: (1,4)-(1,6) = "k:" - │ │ │ └── value: - │ │ │ @ IntegerNode (location: (1,6)-(1,8)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 42 - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,3)-(1,4) = "(" - │ └── closing_loc: (1,8)-(1,9) = ")" - └── body: ∅ diff --git a/test/prism/snapshots/seattlerb/stabby_block_kw__required.txt b/test/prism/snapshots/seattlerb/stabby_block_kw__required.txt deleted file mode 100644 index 823a5adca4ef75..00000000000000 --- a/test/prism/snapshots/seattlerb/stabby_block_kw__required.txt +++ /dev/null @@ -1,34 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,11)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,11)) - ├── flags: ∅ - └── body: (length: 1) - └── @ LambdaNode (location: (1,0)-(1,11)) - ├── flags: newline - ├── locals: [:k] - ├── operator_loc: (1,0)-(1,2) = "->" - ├── opening_loc: (1,8)-(1,9) = "{" - ├── closing_loc: (1,10)-(1,11) = "}" - ├── parameters: - │ @ BlockParametersNode (location: (1,3)-(1,7)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,4)-(1,6)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 1) - │ │ │ └── @ RequiredKeywordParameterNode (location: (1,4)-(1,6)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :k - │ │ │ └── name_loc: (1,4)-(1,6) = "k:" - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,3)-(1,4) = "(" - │ └── closing_loc: (1,6)-(1,7) = ")" - └── body: ∅ diff --git a/test/prism/snapshots/seattlerb/stabby_proc_scope.txt b/test/prism/snapshots/seattlerb/stabby_proc_scope.txt deleted file mode 100644 index c0b073a4391328..00000000000000 --- a/test/prism/snapshots/seattlerb/stabby_proc_scope.txt +++ /dev/null @@ -1,36 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,11)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,11)) - ├── flags: ∅ - └── body: (length: 1) - └── @ LambdaNode (location: (1,0)-(1,11)) - ├── flags: newline - ├── locals: [:a, :b] - ├── operator_loc: (1,0)-(1,2) = "->" - ├── opening_loc: (1,9)-(1,10) = "{" - ├── closing_loc: (1,10)-(1,11) = "}" - ├── parameters: - │ @ BlockParametersNode (location: (1,2)-(1,8)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,3)-(1,4)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (1,3)-(1,4)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :a - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 1) - │ │ └── @ BlockLocalVariableNode (location: (1,6)-(1,7)) - │ │ ├── flags: ∅ - │ │ └── name: :b - │ ├── opening_loc: (1,2)-(1,3) = "(" - │ └── closing_loc: (1,7)-(1,8) = ")" - └── body: ∅ diff --git a/test/prism/snapshots/seattlerb/str_backslashes.txt b/test/prism/snapshots/seattlerb/str_backslashes.txt deleted file mode 100644 index e73793beb8d36c..00000000000000 --- a/test/prism/snapshots/seattlerb/str_backslashes.txt +++ /dev/null @@ -1,26 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,204)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,204)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,204)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :x - ├── message_loc: (1,0)-(1,1) = "x" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,2)-(1,204)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ StringNode (location: (1,2)-(1,204)) - │ ├── flags: ∅ - │ ├── opening_loc: (1,2)-(1,3) = "'" - │ ├── content_loc: (1,3)-(1,203) = "\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n" - │ ├── closing_loc: (1,203)-(1,204) = "'" - │ └── unescaped: "\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n" - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/str_double_double_escaped_newline.txt b/test/prism/snapshots/seattlerb/str_double_double_escaped_newline.txt deleted file mode 100644 index fa7444d7e71a34..00000000000000 --- a/test/prism/snapshots/seattlerb/str_double_double_escaped_newline.txt +++ /dev/null @@ -1,36 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,9)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,9)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ CallNode (location: (1,0)-(1,7)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (1,0)-(1,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,2)-(1,7)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ StringNode (location: (1,2)-(1,7)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (1,2)-(1,3) = "\"" - │ │ ├── content_loc: (1,3)-(1,6) = "\\\\n" - │ │ ├── closing_loc: (1,6)-(1,7) = "\"" - │ │ └── unescaped: "\\n" - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── @ CallNode (location: (1,8)-(1,9)) - ├── flags: newline, variable_call, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :b - ├── message_loc: (1,8)-(1,9) = "b" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/str_double_escaped_newline.txt b/test/prism/snapshots/seattlerb/str_double_escaped_newline.txt deleted file mode 100644 index c91c9139195c65..00000000000000 --- a/test/prism/snapshots/seattlerb/str_double_escaped_newline.txt +++ /dev/null @@ -1,36 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,8)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,8)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ CallNode (location: (1,0)-(1,6)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (1,0)-(1,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,2)-(1,6)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ StringNode (location: (1,2)-(1,6)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (1,2)-(1,3) = "\"" - │ │ ├── content_loc: (1,3)-(1,5) = "\\n" - │ │ ├── closing_loc: (1,5)-(1,6) = "\"" - │ │ └── unescaped: "\n" - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── @ CallNode (location: (1,7)-(1,8)) - ├── flags: newline, variable_call, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :b - ├── message_loc: (1,7)-(1,8) = "b" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/str_double_newline.txt b/test/prism/snapshots/seattlerb/str_double_newline.txt deleted file mode 100644 index 7809a9aafff7c9..00000000000000 --- a/test/prism/snapshots/seattlerb/str_double_newline.txt +++ /dev/null @@ -1,36 +0,0 @@ -@ ProgramNode (location: (1,0)-(2,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(2,3)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ CallNode (location: (1,0)-(2,1)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (1,0)-(1,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,2)-(2,1)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ StringNode (location: (1,2)-(2,1)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (1,2)-(1,3) = "\"" - │ │ ├── content_loc: (1,3)-(2,0) = "\n" - │ │ ├── closing_loc: (2,0)-(2,1) = "\"" - │ │ └── unescaped: "\n" - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── @ CallNode (location: (2,2)-(2,3)) - ├── flags: newline, variable_call, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :b - ├── message_loc: (2,2)-(2,3) = "b" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/str_evstr.txt b/test/prism/snapshots/seattlerb/str_evstr.txt deleted file mode 100644 index 98b65f00f84f89..00000000000000 --- a/test/prism/snapshots/seattlerb/str_evstr.txt +++ /dev/null @@ -1,36 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,8)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,8)) - ├── flags: ∅ - └── body: (length: 1) - └── @ InterpolatedStringNode (location: (1,0)-(1,8)) - ├── flags: newline - ├── opening_loc: (1,0)-(1,1) = "\"" - ├── parts: (length: 2) - │ ├── @ StringNode (location: (1,1)-(1,3)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (1,1)-(1,3) = "a " - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "a " - │ └── @ EmbeddedStatementsNode (location: (1,3)-(1,7)) - │ ├── flags: ∅ - │ ├── opening_loc: (1,3)-(1,5) = "\#{" - │ ├── statements: - │ │ @ StatementsNode (location: (1,5)-(1,6)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (1,5)-(1,6)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :b - │ │ ├── message_loc: (1,5)-(1,6) = "b" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── closing_loc: (1,6)-(1,7) = "}" - └── closing_loc: (1,7)-(1,8) = "\"" diff --git a/test/prism/snapshots/seattlerb/str_evstr_escape.txt b/test/prism/snapshots/seattlerb/str_evstr_escape.txt deleted file mode 100644 index f6559cc822fe09..00000000000000 --- a/test/prism/snapshots/seattlerb/str_evstr_escape.txt +++ /dev/null @@ -1,42 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,16)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,16)) - ├── flags: ∅ - └── body: (length: 1) - └── @ InterpolatedStringNode (location: (1,0)-(1,16)) - ├── flags: newline - ├── opening_loc: (1,0)-(1,1) = "\"" - ├── parts: (length: 3) - │ ├── @ StringNode (location: (1,1)-(1,3)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (1,1)-(1,3) = "a " - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "a " - │ ├── @ EmbeddedStatementsNode (location: (1,3)-(1,7)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (1,3)-(1,5) = "\#{" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (1,5)-(1,6)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (1,5)-(1,6)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (1,5)-(1,6) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── closing_loc: (1,6)-(1,7) = "}" - │ └── @ StringNode (location: (1,7)-(1,15)) - │ ├── flags: static_literal, forced_utf8_encoding, frozen - │ ├── opening_loc: ∅ - │ ├── content_loc: (1,7)-(1,15) = "\\302\\275" - │ ├── closing_loc: ∅ - │ └── unescaped: "½" - └── closing_loc: (1,15)-(1,16) = "\"" diff --git a/test/prism/snapshots/seattlerb/str_heredoc_interp.txt b/test/prism/snapshots/seattlerb/str_heredoc_interp.txt deleted file mode 100644 index 1261eec6c3f5db..00000000000000 --- a/test/prism/snapshots/seattlerb/str_heredoc_interp.txt +++ /dev/null @@ -1,36 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,4)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,4)) - ├── flags: ∅ - └── body: (length: 1) - └── @ InterpolatedStringNode (location: (1,0)-(1,4)) - ├── flags: newline - ├── opening_loc: (1,0)-(1,4) = "<<\"\"" - ├── parts: (length: 2) - │ ├── @ EmbeddedStatementsNode (location: (2,0)-(2,4)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (2,0)-(2,2) = "\#{" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (2,2)-(2,3)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (2,2)-(2,3)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :x - │ │ │ ├── message_loc: (2,2)-(2,3) = "x" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── closing_loc: (2,3)-(2,4) = "}" - │ └── @ StringNode (location: (2,4)-(4,0)) - │ ├── flags: static_literal, frozen - │ ├── opening_loc: ∅ - │ ├── content_loc: (2,4)-(4,0) = "\nblah2\n" - │ ├── closing_loc: ∅ - │ └── unescaped: "\nblah2\n" - └── closing_loc: (4,0)-(5,0) = "\n" diff --git a/test/prism/snapshots/seattlerb/str_interp_ternary_or_label.txt b/test/prism/snapshots/seattlerb/str_interp_ternary_or_label.txt deleted file mode 100644 index 8161109337c35f..00000000000000 --- a/test/prism/snapshots/seattlerb/str_interp_ternary_or_label.txt +++ /dev/null @@ -1,113 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,23)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,23)) - ├── flags: ∅ - └── body: (length: 1) - └── @ InterpolatedStringNode (location: (1,0)-(1,23)) - ├── flags: newline - ├── opening_loc: (1,0)-(1,1) = "\"" - ├── parts: (length: 1) - │ └── @ EmbeddedStatementsNode (location: (1,1)-(1,22)) - │ ├── flags: ∅ - │ ├── opening_loc: (1,1)-(1,3) = "\#{" - │ ├── statements: - │ │ @ StatementsNode (location: (1,3)-(1,21)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ IfNode (location: (1,3)-(1,21)) - │ │ ├── flags: ∅ - │ │ ├── if_keyword_loc: ∅ - │ │ ├── predicate: - │ │ │ @ CallNode (location: (1,3)-(1,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── receiver: - │ │ │ │ @ CallNode (location: (1,3)-(1,4)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :a - │ │ │ │ ├── message_loc: (1,3)-(1,4) = "a" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── call_operator_loc: (1,4)-(1,5) = "." - │ │ │ ├── name: :b? - │ │ │ ├── message_loc: (1,5)-(1,7) = "b?" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── then_keyword_loc: (1,8)-(1,9) = "?" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (1,10)-(1,17)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (1,10)-(1,17)) - │ │ │ ├── flags: newline - │ │ │ ├── receiver: - │ │ │ │ @ CallNode (location: (1,10)-(1,14)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── receiver: - │ │ │ │ │ @ StringNode (location: (1,10)-(1,12)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── opening_loc: (1,10)-(1,11) = "\"" - │ │ │ │ │ ├── content_loc: (1,11)-(1,11) = "" - │ │ │ │ │ ├── closing_loc: (1,11)-(1,12) = "\"" - │ │ │ │ │ └── unescaped: "" - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :+ - │ │ │ │ ├── message_loc: (1,12)-(1,13) = "+" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: - │ │ │ │ │ @ ArgumentsNode (location: (1,13)-(1,14)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── arguments: (length: 1) - │ │ │ │ │ └── @ CallNode (location: (1,13)-(1,14)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :a - │ │ │ │ │ ├── message_loc: (1,13)-(1,14) = "a" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :+ - │ │ │ ├── message_loc: (1,14)-(1,15) = "+" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (1,15)-(1,17)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ StringNode (location: (1,15)-(1,17)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── opening_loc: (1,15)-(1,16) = "\"" - │ │ │ │ ├── content_loc: (1,16)-(1,16) = "" - │ │ │ │ ├── closing_loc: (1,16)-(1,17) = "\"" - │ │ │ │ └── unescaped: "" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── subsequent: - │ │ │ @ ElseNode (location: (1,17)-(1,21)) - │ │ │ ├── flags: ∅ - │ │ │ ├── else_keyword_loc: (1,17)-(1,18) = ":" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (1,19)-(1,21)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ StringNode (location: (1,19)-(1,21)) - │ │ │ │ ├── flags: newline - │ │ │ │ ├── opening_loc: (1,19)-(1,20) = "\"" - │ │ │ │ ├── content_loc: (1,20)-(1,20) = "" - │ │ │ │ ├── closing_loc: (1,20)-(1,21) = "\"" - │ │ │ │ └── unescaped: "" - │ │ │ └── end_keyword_loc: ∅ - │ │ └── end_keyword_loc: ∅ - │ └── closing_loc: (1,21)-(1,22) = "}" - └── closing_loc: (1,22)-(1,23) = "\"" diff --git a/test/prism/snapshots/seattlerb/str_lit_concat_bad_encodings.txt b/test/prism/snapshots/seattlerb/str_lit_concat_bad_encodings.txt deleted file mode 100644 index 4a80bc33058086..00000000000000 --- a/test/prism/snapshots/seattlerb/str_lit_concat_bad_encodings.txt +++ /dev/null @@ -1,24 +0,0 @@ -@ ProgramNode (location: (1,0)-(2,66)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(2,66)) - ├── flags: ∅ - └── body: (length: 1) - └── @ InterpolatedStringNode (location: (1,0)-(2,66)) - ├── flags: newline, static_literal - ├── opening_loc: ∅ - ├── parts: (length: 2) - │ ├── @ StringNode (location: (1,0)-(1,62)) - │ │ ├── flags: static_literal, forced_utf8_encoding, frozen - │ │ ├── opening_loc: (1,0)-(1,1) = "\"" - │ │ ├── content_loc: (1,1)-(1,61) = "\\xE3\\xD3\\x8B\\xE3\\x83\\xBC\\x83\\xE3\\x83\\xE3\\x82\\xB3\\xA3\\x82\\x99" - │ │ ├── closing_loc: (1,61)-(1,62) = "\"" - │ │ └── unescaped: "\xE3Ӌー\x83\xE3\x83コ\xA3\x82\x99" - │ └── @ StringNode (location: (2,8)-(2,66)) - │ ├── flags: static_literal, forced_utf8_encoding, frozen - │ ├── opening_loc: (2,8)-(2,9) = "\"" - │ ├── content_loc: (2,9)-(2,65) = "\\xE3\\x83\\xB3\\xE3\\x83\\x8F\\xE3\\x82\\x9A\\xC3\\xBD;foo@bar.com" - │ ├── closing_loc: (2,65)-(2,66) = "\"" - │ └── unescaped: "ンãƒã‚šÃ½;foo@bar.com" - └── closing_loc: ∅ diff --git a/test/prism/snapshots/seattlerb/str_newline_hash_line_number.txt b/test/prism/snapshots/seattlerb/str_newline_hash_line_number.txt deleted file mode 100644 index 1ac2e04c60848e..00000000000000 --- a/test/prism/snapshots/seattlerb/str_newline_hash_line_number.txt +++ /dev/null @@ -1,16 +0,0 @@ -@ ProgramNode (location: (1,0)-(2,1)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(2,1)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ StringNode (location: (1,0)-(1,11)) - │ ├── flags: newline - │ ├── opening_loc: (1,0)-(1,1) = "\"" - │ ├── content_loc: (1,1)-(1,10) = "\\n\\n\\n\\n#" - │ ├── closing_loc: (1,10)-(1,11) = "\"" - │ └── unescaped: "\n\n\n\n#" - └── @ IntegerNode (location: (2,0)-(2,1)) - ├── flags: newline, static_literal, decimal - └── value: 1 diff --git a/test/prism/snapshots/seattlerb/str_pct_Q_nested.txt b/test/prism/snapshots/seattlerb/str_pct_Q_nested.txt deleted file mode 100644 index 76a0f5a5cf1ef6..00000000000000 --- a/test/prism/snapshots/seattlerb/str_pct_Q_nested.txt +++ /dev/null @@ -1,42 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,26)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,26)) - ├── flags: ∅ - └── body: (length: 1) - └── @ InterpolatedStringNode (location: (1,0)-(1,26)) - ├── flags: newline - ├── opening_loc: (1,0)-(1,3) = "%Q[" - ├── parts: (length: 3) - │ ├── @ StringNode (location: (1,3)-(1,11)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (1,3)-(1,11) = "before [" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "before [" - │ ├── @ EmbeddedStatementsNode (location: (1,11)-(1,18)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (1,11)-(1,13) = "\#{" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (1,13)-(1,17)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (1,13)-(1,17)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :nest - │ │ │ ├── message_loc: (1,13)-(1,17) = "nest" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── closing_loc: (1,17)-(1,18) = "}" - │ └── @ StringNode (location: (1,18)-(1,25)) - │ ├── flags: static_literal, frozen - │ ├── opening_loc: ∅ - │ ├── content_loc: (1,18)-(1,25) = "] after" - │ ├── closing_loc: ∅ - │ └── unescaped: "] after" - └── closing_loc: (1,25)-(1,26) = "]" diff --git a/test/prism/snapshots/seattlerb/str_pct_nested_nested.txt b/test/prism/snapshots/seattlerb/str_pct_nested_nested.txt deleted file mode 100644 index 02125b374da97f..00000000000000 --- a/test/prism/snapshots/seattlerb/str_pct_nested_nested.txt +++ /dev/null @@ -1,48 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,20)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,20)) - ├── flags: ∅ - └── body: (length: 1) - └── @ InterpolatedStringNode (location: (1,0)-(1,20)) - ├── flags: newline - ├── opening_loc: (1,0)-(1,2) = "%{" - ├── parts: (length: 3) - │ ├── @ StringNode (location: (1,2)-(1,5)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (1,2)-(1,5) = " { " - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: " { " - │ ├── @ EmbeddedStatementsNode (location: (1,5)-(1,16)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (1,5)-(1,7) = "\#{" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (1,8)-(1,14)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ InterpolatedStringNode (location: (1,8)-(1,14)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (1,8)-(1,9) = "\"" - │ │ │ ├── parts: (length: 1) - │ │ │ │ └── @ EmbeddedStatementsNode (location: (1,9)-(1,13)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── opening_loc: (1,9)-(1,11) = "\#{" - │ │ │ │ ├── statements: - │ │ │ │ │ @ StatementsNode (location: (1,11)-(1,12)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── body: (length: 1) - │ │ │ │ │ └── @ IntegerNode (location: (1,11)-(1,12)) - │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ └── value: 1 - │ │ │ │ └── closing_loc: (1,12)-(1,13) = "}" - │ │ │ └── closing_loc: (1,13)-(1,14) = "\"" - │ │ └── closing_loc: (1,15)-(1,16) = "}" - │ └── @ StringNode (location: (1,16)-(1,19)) - │ ├── flags: static_literal, frozen - │ ├── opening_loc: ∅ - │ ├── content_loc: (1,16)-(1,19) = " } " - │ ├── closing_loc: ∅ - │ └── unescaped: " } " - └── closing_loc: (1,19)-(1,20) = "}" diff --git a/test/prism/snapshots/seattlerb/str_pct_q.txt b/test/prism/snapshots/seattlerb/str_pct_q.txt deleted file mode 100644 index ddcbb1ac562b46..00000000000000 --- a/test/prism/snapshots/seattlerb/str_pct_q.txt +++ /dev/null @@ -1,13 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,9)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,9)) - ├── flags: ∅ - └── body: (length: 1) - └── @ StringNode (location: (1,0)-(1,9)) - ├── flags: newline - ├── opening_loc: (1,0)-(1,3) = "%q{" - ├── content_loc: (1,3)-(1,8) = "a b c" - ├── closing_loc: (1,8)-(1,9) = "}" - └── unescaped: "a b c" diff --git a/test/prism/snapshots/seattlerb/str_single_double_escaped_newline.txt b/test/prism/snapshots/seattlerb/str_single_double_escaped_newline.txt deleted file mode 100644 index 2187edc92debcb..00000000000000 --- a/test/prism/snapshots/seattlerb/str_single_double_escaped_newline.txt +++ /dev/null @@ -1,36 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,9)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,9)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ CallNode (location: (1,0)-(1,7)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (1,0)-(1,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,2)-(1,7)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ StringNode (location: (1,2)-(1,7)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (1,2)-(1,3) = "'" - │ │ ├── content_loc: (1,3)-(1,6) = "\\\\n" - │ │ ├── closing_loc: (1,6)-(1,7) = "'" - │ │ └── unescaped: "\\n" - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── @ CallNode (location: (1,8)-(1,9)) - ├── flags: newline, variable_call, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :b - ├── message_loc: (1,8)-(1,9) = "b" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/str_single_escaped_newline.txt b/test/prism/snapshots/seattlerb/str_single_escaped_newline.txt deleted file mode 100644 index 36028e09d0b3d6..00000000000000 --- a/test/prism/snapshots/seattlerb/str_single_escaped_newline.txt +++ /dev/null @@ -1,36 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,8)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,8)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ CallNode (location: (1,0)-(1,6)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (1,0)-(1,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,2)-(1,6)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ StringNode (location: (1,2)-(1,6)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (1,2)-(1,3) = "'" - │ │ ├── content_loc: (1,3)-(1,5) = "\\n" - │ │ ├── closing_loc: (1,5)-(1,6) = "'" - │ │ └── unescaped: "\\n" - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── @ CallNode (location: (1,7)-(1,8)) - ├── flags: newline, variable_call, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :b - ├── message_loc: (1,7)-(1,8) = "b" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/str_single_newline.txt b/test/prism/snapshots/seattlerb/str_single_newline.txt deleted file mode 100644 index b53d1ed81aaa1c..00000000000000 --- a/test/prism/snapshots/seattlerb/str_single_newline.txt +++ /dev/null @@ -1,36 +0,0 @@ -@ ProgramNode (location: (1,0)-(2,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(2,3)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ CallNode (location: (1,0)-(2,1)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (1,0)-(1,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,2)-(2,1)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ StringNode (location: (1,2)-(2,1)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (1,2)-(1,3) = "'" - │ │ ├── content_loc: (1,3)-(2,0) = "\n" - │ │ ├── closing_loc: (2,0)-(2,1) = "'" - │ │ └── unescaped: "\n" - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── @ CallNode (location: (2,2)-(2,3)) - ├── flags: newline, variable_call, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :b - ├── message_loc: (2,2)-(2,3) = "b" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/str_str.txt b/test/prism/snapshots/seattlerb/str_str.txt deleted file mode 100644 index 37a57d2fd6c6bf..00000000000000 --- a/test/prism/snapshots/seattlerb/str_str.txt +++ /dev/null @@ -1,32 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,10)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,10)) - ├── flags: ∅ - └── body: (length: 1) - └── @ InterpolatedStringNode (location: (1,0)-(1,10)) - ├── flags: newline, static_literal, mutable - ├── opening_loc: (1,0)-(1,1) = "\"" - ├── parts: (length: 2) - │ ├── @ StringNode (location: (1,1)-(1,3)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (1,1)-(1,3) = "a " - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "a " - │ └── @ EmbeddedStatementsNode (location: (1,3)-(1,9)) - │ ├── flags: ∅ - │ ├── opening_loc: (1,3)-(1,5) = "\#{" - │ ├── statements: - │ │ @ StatementsNode (location: (1,5)-(1,8)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ StringNode (location: (1,5)-(1,8)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: (1,5)-(1,6) = "'" - │ │ ├── content_loc: (1,6)-(1,7) = "b" - │ │ ├── closing_loc: (1,7)-(1,8) = "'" - │ │ └── unescaped: "b" - │ └── closing_loc: (1,8)-(1,9) = "}" - └── closing_loc: (1,9)-(1,10) = "\"" diff --git a/test/prism/snapshots/seattlerb/str_str_str.txt b/test/prism/snapshots/seattlerb/str_str_str.txt deleted file mode 100644 index ed74c1a954ef1c..00000000000000 --- a/test/prism/snapshots/seattlerb/str_str_str.txt +++ /dev/null @@ -1,38 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,12)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,12)) - ├── flags: ∅ - └── body: (length: 1) - └── @ InterpolatedStringNode (location: (1,0)-(1,12)) - ├── flags: newline, static_literal, mutable - ├── opening_loc: (1,0)-(1,1) = "\"" - ├── parts: (length: 3) - │ ├── @ StringNode (location: (1,1)-(1,3)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (1,1)-(1,3) = "a " - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "a " - │ ├── @ EmbeddedStatementsNode (location: (1,3)-(1,9)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (1,3)-(1,5) = "\#{" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (1,5)-(1,8)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ StringNode (location: (1,5)-(1,8)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: (1,5)-(1,6) = "'" - │ │ │ ├── content_loc: (1,6)-(1,7) = "b" - │ │ │ ├── closing_loc: (1,7)-(1,8) = "'" - │ │ │ └── unescaped: "b" - │ │ └── closing_loc: (1,8)-(1,9) = "}" - │ └── @ StringNode (location: (1,9)-(1,11)) - │ ├── flags: static_literal, frozen - │ ├── opening_loc: ∅ - │ ├── content_loc: (1,9)-(1,11) = " c" - │ ├── closing_loc: ∅ - │ └── unescaped: " c" - └── closing_loc: (1,11)-(1,12) = "\"" diff --git a/test/prism/snapshots/seattlerb/super_arg.txt b/test/prism/snapshots/seattlerb/super_arg.txt deleted file mode 100644 index 76acc38ce7a1a2..00000000000000 --- a/test/prism/snapshots/seattlerb/super_arg.txt +++ /dev/null @@ -1,20 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,8)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,8)) - ├── flags: ∅ - └── body: (length: 1) - └── @ SuperNode (location: (1,0)-(1,8)) - ├── flags: newline - ├── keyword_loc: (1,0)-(1,5) = "super" - ├── lparen_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,6)-(1,8)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ IntegerNode (location: (1,6)-(1,8)) - │ ├── flags: static_literal, decimal - │ └── value: 42 - ├── rparen_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/symbol_empty.txt b/test/prism/snapshots/seattlerb/symbol_empty.txt deleted file mode 100644 index 945a0e3a51e743..00000000000000 --- a/test/prism/snapshots/seattlerb/symbol_empty.txt +++ /dev/null @@ -1,13 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ SymbolNode (location: (1,0)-(1,3)) - ├── flags: newline, static_literal, forced_us_ascii_encoding - ├── opening_loc: (1,0)-(1,2) = ":'" - ├── value_loc: (1,2)-(1,2) = "" - ├── closing_loc: (1,2)-(1,3) = "'" - └── unescaped: "" diff --git a/test/prism/snapshots/seattlerb/symbol_list.txt b/test/prism/snapshots/seattlerb/symbol_list.txt deleted file mode 100644 index 6ee21564bb3ee7..00000000000000 --- a/test/prism/snapshots/seattlerb/symbol_list.txt +++ /dev/null @@ -1,58 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,13)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,13)) - ├── flags: ∅ - └── body: (length: 1) - └── @ ArrayNode (location: (1,0)-(1,13)) - ├── flags: newline - ├── elements: (length: 2) - │ ├── @ InterpolatedSymbolNode (location: (1,3)-(1,7)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: ∅ - │ │ ├── parts: (length: 1) - │ │ │ └── @ EmbeddedStatementsNode (location: (1,3)-(1,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (1,3)-(1,5) = "\#{" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (1,5)-(1,6)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (1,5)-(1,6)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :a - │ │ │ │ ├── message_loc: (1,5)-(1,6) = "a" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── closing_loc: (1,6)-(1,7) = "}" - │ │ └── closing_loc: ∅ - │ └── @ InterpolatedSymbolNode (location: (1,8)-(1,12)) - │ ├── flags: ∅ - │ ├── opening_loc: ∅ - │ ├── parts: (length: 1) - │ │ └── @ EmbeddedStatementsNode (location: (1,8)-(1,12)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (1,8)-(1,10) = "\#{" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (1,10)-(1,11)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (1,10)-(1,11)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (1,10)-(1,11) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── closing_loc: (1,11)-(1,12) = "}" - │ └── closing_loc: ∅ - ├── opening_loc: (1,0)-(1,3) = "%I[" - └── closing_loc: (1,12)-(1,13) = "]" diff --git a/test/prism/snapshots/seattlerb/symbols.txt b/test/prism/snapshots/seattlerb/symbols.txt deleted file mode 100644 index c7292c201f5f6a..00000000000000 --- a/test/prism/snapshots/seattlerb/symbols.txt +++ /dev/null @@ -1,30 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,9)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,9)) - ├── flags: ∅ - └── body: (length: 1) - └── @ ArrayNode (location: (1,0)-(1,9)) - ├── flags: newline, static_literal - ├── elements: (length: 3) - │ ├── @ SymbolNode (location: (1,3)-(1,4)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: ∅ - │ │ ├── value_loc: (1,3)-(1,4) = "a" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "a" - │ ├── @ SymbolNode (location: (1,5)-(1,6)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: ∅ - │ │ ├── value_loc: (1,5)-(1,6) = "b" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "b" - │ └── @ SymbolNode (location: (1,7)-(1,8)) - │ ├── flags: static_literal, forced_us_ascii_encoding - │ ├── opening_loc: ∅ - │ ├── value_loc: (1,7)-(1,8) = "c" - │ ├── closing_loc: ∅ - │ └── unescaped: "c" - ├── opening_loc: (1,0)-(1,3) = "%i(" - └── closing_loc: (1,8)-(1,9) = ")" diff --git a/test/prism/snapshots/seattlerb/symbols_empty.txt b/test/prism/snapshots/seattlerb/symbols_empty.txt deleted file mode 100644 index 955a6eda727493..00000000000000 --- a/test/prism/snapshots/seattlerb/symbols_empty.txt +++ /dev/null @@ -1,12 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,4)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,4)) - ├── flags: ∅ - └── body: (length: 1) - └── @ ArrayNode (location: (1,0)-(1,4)) - ├── flags: newline, static_literal - ├── elements: (length: 0) - ├── opening_loc: (1,0)-(1,3) = "%i(" - └── closing_loc: (1,3)-(1,4) = ")" diff --git a/test/prism/snapshots/seattlerb/symbols_empty_space.txt b/test/prism/snapshots/seattlerb/symbols_empty_space.txt deleted file mode 100644 index 291a775b356f5b..00000000000000 --- a/test/prism/snapshots/seattlerb/symbols_empty_space.txt +++ /dev/null @@ -1,12 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,5)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,5)) - ├── flags: ∅ - └── body: (length: 1) - └── @ ArrayNode (location: (1,0)-(1,5)) - ├── flags: newline, static_literal - ├── elements: (length: 0) - ├── opening_loc: (1,0)-(1,3) = "%i(" - └── closing_loc: (1,4)-(1,5) = ")" diff --git a/test/prism/snapshots/seattlerb/symbols_interp.txt b/test/prism/snapshots/seattlerb/symbols_interp.txt deleted file mode 100644 index 373f8363cd57be..00000000000000 --- a/test/prism/snapshots/seattlerb/symbols_interp.txt +++ /dev/null @@ -1,30 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,15)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,15)) - ├── flags: ∅ - └── body: (length: 1) - └── @ ArrayNode (location: (1,0)-(1,15)) - ├── flags: newline, static_literal - ├── elements: (length: 3) - │ ├── @ SymbolNode (location: (1,3)-(1,4)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: ∅ - │ │ ├── value_loc: (1,3)-(1,4) = "a" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "a" - │ ├── @ SymbolNode (location: (1,5)-(1,12)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: ∅ - │ │ ├── value_loc: (1,5)-(1,12) = "b\#{1+1}" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "b\#{1+1}" - │ └── @ SymbolNode (location: (1,13)-(1,14)) - │ ├── flags: static_literal, forced_us_ascii_encoding - │ ├── opening_loc: ∅ - │ ├── value_loc: (1,13)-(1,14) = "c" - │ ├── closing_loc: ∅ - │ └── unescaped: "c" - ├── opening_loc: (1,0)-(1,3) = "%i(" - └── closing_loc: (1,14)-(1,15) = ")" diff --git a/test/prism/snapshots/seattlerb/thingy.txt b/test/prism/snapshots/seattlerb/thingy.txt deleted file mode 100644 index edbcd8e25beda2..00000000000000 --- a/test/prism/snapshots/seattlerb/thingy.txt +++ /dev/null @@ -1,59 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,7)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,7)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ CallNode (location: (1,0)-(1,6)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (1,0)-(1,1)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :f - │ │ ├── message_loc: (1,0)-(1,1) = "f" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (1,1)-(1,2) = "." - │ ├── name: :call - │ ├── message_loc: ∅ - │ ├── opening_loc: (1,2)-(1,3) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,3)-(1,5)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (1,3)-(1,5)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 42 - │ ├── closing_loc: (1,5)-(1,6) = ")" - │ └── block: ∅ - └── @ CallNode (location: (3,0)-(3,7)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (3,0)-(3,1)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :f - │ ├── message_loc: (3,0)-(3,1) = "f" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: (3,1)-(3,3) = "::" - ├── name: :call - ├── message_loc: ∅ - ├── opening_loc: (3,3)-(3,4) = "(" - ├── arguments: - │ @ ArgumentsNode (location: (3,4)-(3,6)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ IntegerNode (location: (3,4)-(3,6)) - │ ├── flags: static_literal, decimal - │ └── value: 42 - ├── closing_loc: (3,6)-(3,7) = ")" - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/uminus_float.txt b/test/prism/snapshots/seattlerb/uminus_float.txt deleted file mode 100644 index dfaaf0682757e7..00000000000000 --- a/test/prism/snapshots/seattlerb/uminus_float.txt +++ /dev/null @@ -1,10 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,4)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,4)) - ├── flags: ∅ - └── body: (length: 1) - └── @ FloatNode (location: (1,0)-(1,4)) - ├── flags: newline, static_literal - └── value: -0.0 diff --git a/test/prism/snapshots/seattlerb/unary_minus.txt b/test/prism/snapshots/seattlerb/unary_minus.txt deleted file mode 100644 index d10ff3a89e74bb..00000000000000 --- a/test/prism/snapshots/seattlerb/unary_minus.txt +++ /dev/null @@ -1,27 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,2)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,2)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,2)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (1,1)-(1,2)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (1,1)-(1,2) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: ∅ - ├── name: :-@ - ├── message_loc: (1,0)-(1,1) = "-" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/unary_plus.txt b/test/prism/snapshots/seattlerb/unary_plus.txt deleted file mode 100644 index 11cb2ebabdd6a5..00000000000000 --- a/test/prism/snapshots/seattlerb/unary_plus.txt +++ /dev/null @@ -1,27 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,2)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,2)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,2)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (1,1)-(1,2)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (1,1)-(1,2) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: ∅ - ├── name: :+@ - ├── message_loc: (1,0)-(1,1) = "+" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/unary_plus_on_literal.txt b/test/prism/snapshots/seattlerb/unary_plus_on_literal.txt deleted file mode 100644 index 3431fd6cfeb2a2..00000000000000 --- a/test/prism/snapshots/seattlerb/unary_plus_on_literal.txt +++ /dev/null @@ -1,23 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,3)) - ├── flags: newline - ├── receiver: - │ @ SymbolNode (location: (1,1)-(1,3)) - │ ├── flags: static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (1,1)-(1,2) = ":" - │ ├── value_loc: (1,2)-(1,3) = "a" - │ ├── closing_loc: ∅ - │ └── unescaped: "a" - ├── call_operator_loc: ∅ - ├── name: :+@ - ├── message_loc: (1,0)-(1,1) = "+" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/unary_tilde.txt b/test/prism/snapshots/seattlerb/unary_tilde.txt deleted file mode 100644 index 52a4fa86304408..00000000000000 --- a/test/prism/snapshots/seattlerb/unary_tilde.txt +++ /dev/null @@ -1,27 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,2)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,2)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,2)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (1,1)-(1,2)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (1,1)-(1,2) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: ∅ - ├── name: :~ - ├── message_loc: (1,0)-(1,1) = "~" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/utf8_bom.txt b/test/prism/snapshots/seattlerb/utf8_bom.txt deleted file mode 100644 index c26bb1741bdb4c..00000000000000 --- a/test/prism/snapshots/seattlerb/utf8_bom.txt +++ /dev/null @@ -1,23 +0,0 @@ -@ ProgramNode (location: (2,0)-(2,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (2,0)-(2,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (2,0)-(2,3)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :p - ├── message_loc: (2,0)-(2,1) = "p" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (2,2)-(2,3)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ IntegerNode (location: (2,2)-(2,3)) - │ ├── flags: static_literal, decimal - │ └── value: 0 - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/seattlerb/when_splat.txt b/test/prism/snapshots/seattlerb/when_splat.txt deleted file mode 100644 index 6df6e773977264..00000000000000 --- a/test/prism/snapshots/seattlerb/when_splat.txt +++ /dev/null @@ -1,44 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,25)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,25)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CaseNode (location: (1,0)-(1,25)) - ├── flags: newline - ├── predicate: - │ @ CallNode (location: (1,5)-(1,6)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (1,5)-(1,6) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── conditions: (length: 1) - │ └── @ WhenNode (location: (1,8)-(1,20)) - │ ├── flags: ∅ - │ ├── keyword_loc: (1,8)-(1,12) = "when" - │ ├── conditions: (length: 1) - │ │ └── @ SplatNode (location: (1,13)-(1,15)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (1,13)-(1,14) = "*" - │ │ └── expression: - │ │ @ CallNode (location: (1,14)-(1,15)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :b - │ │ ├── message_loc: (1,14)-(1,15) = "b" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── then_keyword_loc: (1,16)-(1,20) = "then" - │ └── statements: ∅ - ├── else_clause: ∅ - ├── case_keyword_loc: (1,0)-(1,4) = "case" - └── end_keyword_loc: (1,22)-(1,25) = "end" diff --git a/test/prism/snapshots/seattlerb/words_interp.txt b/test/prism/snapshots/seattlerb/words_interp.txt deleted file mode 100644 index 4dc5944538f068..00000000000000 --- a/test/prism/snapshots/seattlerb/words_interp.txt +++ /dev/null @@ -1,34 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,9)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,9)) - ├── flags: ∅ - └── body: (length: 1) - └── @ ArrayNode (location: (1,0)-(1,9)) - ├── flags: newline - ├── elements: (length: 1) - │ └── @ InterpolatedStringNode (location: (1,3)-(1,8)) - │ ├── flags: ∅ - │ ├── opening_loc: ∅ - │ ├── parts: (length: 2) - │ │ ├── @ EmbeddedStatementsNode (location: (1,3)-(1,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (1,3)-(1,5) = "\#{" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (1,5)-(1,6)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ IntegerNode (location: (1,5)-(1,6)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ └── closing_loc: (1,6)-(1,7) = "}" - │ │ └── @ StringNode (location: (1,7)-(1,8)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (1,7)-(1,8) = "b" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "b" - │ └── closing_loc: ∅ - ├── opening_loc: (1,0)-(1,3) = "%W(" - └── closing_loc: (1,8)-(1,9) = ")" diff --git a/test/prism/snapshots/single_method_call_with_bang.txt b/test/prism/snapshots/single_method_call_with_bang.txt deleted file mode 100644 index 8baca8888d6d36..00000000000000 --- a/test/prism/snapshots/single_method_call_with_bang.txt +++ /dev/null @@ -1,17 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,4)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,4)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,4)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :foo! - ├── message_loc: (1,0)-(1,4) = "foo!" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/single_quote_heredocs.txt b/test/prism/snapshots/single_quote_heredocs.txt deleted file mode 100644 index 0221f33e341b78..00000000000000 --- a/test/prism/snapshots/single_quote_heredocs.txt +++ /dev/null @@ -1,13 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,8)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,8)) - ├── flags: ∅ - └── body: (length: 1) - └── @ StringNode (location: (1,0)-(1,8)) - ├── flags: newline - ├── opening_loc: (1,0)-(1,8) = "<<-'EOS'" - ├── content_loc: (2,0)-(3,0) = " cd L:\\Work\\MG3710IQPro\\Develop\n" - ├── closing_loc: (3,0)-(4,0) = "EOS\n" - └── unescaped: " cd L:\\Work\\MG3710IQPro\\Develop\n" diff --git a/test/prism/snapshots/spanning_heredoc.txt b/test/prism/snapshots/spanning_heredoc.txt deleted file mode 100644 index f880f64434e373..00000000000000 --- a/test/prism/snapshots/spanning_heredoc.txt +++ /dev/null @@ -1,420 +0,0 @@ -@ ProgramNode (location: (4,0)-(63,2)) -├── flags: ∅ -├── locals: [:a] -└── statements: - @ StatementsNode (location: (4,0)-(63,2)) - ├── flags: ∅ - └── body: (length: 14) - ├── @ CallNode (location: (4,0)-(7,7)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :pp - │ ├── message_loc: (4,0)-(4,2) = "pp" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (4,3)-(7,7)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (4,3)-(7,7)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ StringNode (location: (4,3)-(4,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (4,3)-(4,7) = "<<-A" - │ │ │ ├── content_loc: (5,0)-(6,0) = "a\n" - │ │ │ ├── closing_loc: (6,0)-(7,0) = "A\n" - │ │ │ └── unescaped: "a\n" - │ │ ├── call_operator_loc: (4,7)-(4,8) = "." - │ │ ├── name: :gsub - │ │ ├── message_loc: (4,8)-(4,12) = "gsub" - │ │ ├── opening_loc: (4,12)-(4,13) = "(" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (4,13)-(7,6)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 2) - │ │ │ ├── @ InterpolatedRegularExpressionNode (location: (4,13)-(7,2)) - │ │ │ │ ├── flags: static_literal - │ │ │ │ ├── opening_loc: (4,13)-(4,14) = "/" - │ │ │ │ ├── parts: (length: 2) - │ │ │ │ │ ├── @ StringNode (location: (4,14)-(4,16)) - │ │ │ │ │ │ ├── flags: static_literal, frozen - │ │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ │ ├── content_loc: (4,14)-(4,16) = "b\\" - │ │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ │ └── unescaped: "b" - │ │ │ │ │ └── @ StringNode (location: (7,0)-(7,1)) - │ │ │ │ │ ├── flags: static_literal, frozen - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── content_loc: (7,0)-(7,1) = "b" - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── unescaped: "b" - │ │ │ │ └── closing_loc: (7,1)-(7,2) = "/" - │ │ │ └── @ StringNode (location: (7,4)-(7,6)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (7,4)-(7,5) = "\"" - │ │ │ ├── content_loc: (7,5)-(7,5) = "" - │ │ │ ├── closing_loc: (7,5)-(7,6) = "\"" - │ │ │ └── unescaped: "" - │ │ ├── closing_loc: (7,6)-(7,7) = ")" - │ │ └── block: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (10,0)-(13,2)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :pp - │ ├── message_loc: (10,0)-(10,2) = "pp" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (10,3)-(13,2)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ StringNode (location: (10,3)-(10,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (10,3)-(10,7) = "<<-A" - │ │ │ ├── content_loc: (11,0)-(12,0) = "c\n" - │ │ │ ├── closing_loc: (12,0)-(13,0) = "A\n" - │ │ │ └── unescaped: "c\n" - │ │ └── @ InterpolatedStringNode (location: (10,9)-(13,2)) - │ │ ├── flags: static_literal - │ │ ├── opening_loc: (10,9)-(10,10) = "\"" - │ │ ├── parts: (length: 2) - │ │ │ ├── @ StringNode (location: (10,10)-(10,12)) - │ │ │ │ ├── flags: static_literal, frozen - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── content_loc: (10,10)-(10,12) = "d\\" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "d" - │ │ │ └── @ StringNode (location: (13,0)-(13,1)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (13,0)-(13,1) = "d" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "d" - │ │ └── closing_loc: (13,1)-(13,2) = "\"" - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (16,0)-(19,2)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :pp - │ ├── message_loc: (16,0)-(16,2) = "pp" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (16,3)-(19,2)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ StringNode (location: (16,3)-(16,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (16,3)-(16,7) = "<<-A" - │ │ │ ├── content_loc: (17,0)-(18,0) = "e\n" - │ │ │ ├── closing_loc: (18,0)-(19,0) = "A\n" - │ │ │ └── unescaped: "e\n" - │ │ └── @ InterpolatedStringNode (location: (16,9)-(19,2)) - │ │ ├── flags: static_literal - │ │ ├── opening_loc: (16,9)-(16,12) = "%q[" - │ │ ├── parts: (length: 2) - │ │ │ ├── @ StringNode (location: (16,12)-(16,14)) - │ │ │ │ ├── flags: static_literal, frozen - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── content_loc: (16,12)-(16,14) = "f\\" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "f\\\n" - │ │ │ └── @ StringNode (location: (19,0)-(19,1)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (19,0)-(19,1) = "f" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "f" - │ │ └── closing_loc: (19,1)-(19,2) = "]" - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (22,0)-(25,2)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :pp - │ ├── message_loc: (22,0)-(22,2) = "pp" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (22,3)-(25,2)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ StringNode (location: (22,3)-(22,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (22,3)-(22,7) = "<<-A" - │ │ │ ├── content_loc: (23,0)-(24,0) = "g\n" - │ │ │ ├── closing_loc: (24,0)-(25,0) = "A\n" - │ │ │ └── unescaped: "g\n" - │ │ └── @ InterpolatedStringNode (location: (22,9)-(25,2)) - │ │ ├── flags: static_literal - │ │ ├── opening_loc: (22,9)-(22,12) = "%Q[" - │ │ ├── parts: (length: 2) - │ │ │ ├── @ StringNode (location: (22,12)-(22,14)) - │ │ │ │ ├── flags: static_literal, frozen - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── content_loc: (22,12)-(22,14) = "h\\" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "h" - │ │ │ └── @ StringNode (location: (25,0)-(25,1)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (25,0)-(25,1) = "h" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "h" - │ │ └── closing_loc: (25,1)-(25,2) = "]" - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (28,0)-(31,2)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :pp - │ ├── message_loc: (28,0)-(28,2) = "pp" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (28,3)-(31,2)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ StringNode (location: (28,3)-(28,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (28,3)-(28,7) = "<<-A" - │ │ │ ├── content_loc: (29,0)-(30,0) = "i\n" - │ │ │ ├── closing_loc: (30,0)-(31,0) = "A\n" - │ │ │ └── unescaped: "i\n" - │ │ └── @ ArrayNode (location: (28,9)-(31,2)) - │ │ ├── flags: ∅ - │ │ ├── elements: (length: 2) - │ │ │ ├── @ StringNode (location: (28,12)-(28,14)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── content_loc: (28,12)-(28,14) = "j\\" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "j\n" - │ │ │ └── @ StringNode (location: (31,0)-(31,1)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (31,0)-(31,1) = "j" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "j" - │ │ ├── opening_loc: (28,9)-(28,12) = "%w[" - │ │ └── closing_loc: (31,1)-(31,2) = "]" - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (35,0)-(38,2)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :pp - │ ├── message_loc: (35,0)-(35,2) = "pp" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (35,3)-(38,2)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ StringNode (location: (35,3)-(35,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (35,3)-(35,7) = "<<-A" - │ │ │ ├── content_loc: (36,0)-(37,0) = "k\n" - │ │ │ ├── closing_loc: (37,0)-(38,0) = "A\n" - │ │ │ └── unescaped: "k\n" - │ │ └── @ ArrayNode (location: (35,9)-(38,2)) - │ │ ├── flags: static_literal - │ │ ├── elements: (length: 1) - │ │ │ └── @ InterpolatedStringNode (location: (35,12)-(38,1)) - │ │ │ ├── flags: static_literal - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── parts: (length: 2) - │ │ │ │ ├── @ StringNode (location: (35,12)-(35,14)) - │ │ │ │ │ ├── flags: static_literal, frozen - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── content_loc: (35,12)-(35,14) = "l\\" - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── unescaped: "l\n" - │ │ │ │ └── @ StringNode (location: (38,0)-(38,1)) - │ │ │ │ ├── flags: static_literal, frozen - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── content_loc: (38,0)-(38,1) = "l" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "l" - │ │ │ └── closing_loc: ∅ - │ │ ├── opening_loc: (35,9)-(35,12) = "%W[" - │ │ └── closing_loc: (38,1)-(38,2) = "]" - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (41,0)-(44,2)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :pp - │ ├── message_loc: (41,0)-(41,2) = "pp" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (41,3)-(44,2)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ StringNode (location: (41,3)-(41,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (41,3)-(41,7) = "<<-A" - │ │ │ ├── content_loc: (42,0)-(43,0) = "m\n" - │ │ │ ├── closing_loc: (43,0)-(44,0) = "A\n" - │ │ │ └── unescaped: "m\n" - │ │ └── @ ArrayNode (location: (41,9)-(44,2)) - │ │ ├── flags: static_literal - │ │ ├── elements: (length: 2) - │ │ │ ├── @ SymbolNode (location: (41,12)-(41,14)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── value_loc: (41,12)-(41,14) = "n\\" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "n\n" - │ │ │ └── @ SymbolNode (location: (44,0)-(44,1)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (44,0)-(44,1) = "n" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "n" - │ │ ├── opening_loc: (41,9)-(41,12) = "%i[" - │ │ └── closing_loc: (44,1)-(44,2) = "]" - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (48,0)-(51,2)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :pp - │ ├── message_loc: (48,0)-(48,2) = "pp" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (48,3)-(51,2)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ StringNode (location: (48,3)-(48,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (48,3)-(48,7) = "<<-A" - │ │ │ ├── content_loc: (49,0)-(50,0) = "o\n" - │ │ │ ├── closing_loc: (50,0)-(51,0) = "A\n" - │ │ │ └── unescaped: "o\n" - │ │ └── @ ArrayNode (location: (48,9)-(51,2)) - │ │ ├── flags: static_literal - │ │ ├── elements: (length: 1) - │ │ │ └── @ InterpolatedSymbolNode (location: (48,12)-(48,14)) - │ │ │ ├── flags: static_literal - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── parts: (length: 2) - │ │ │ │ ├── @ StringNode (location: (48,12)-(48,14)) - │ │ │ │ │ ├── flags: static_literal, frozen - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── content_loc: (48,12)-(48,14) = "p\\" - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── unescaped: "p\n" - │ │ │ │ └── @ StringNode (location: (48,12)-(48,14)) - │ │ │ │ ├── flags: static_literal, frozen - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── content_loc: (48,12)-(48,14) = "p\\" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "p" - │ │ │ └── closing_loc: ∅ - │ │ ├── opening_loc: (48,9)-(48,12) = "%I[" - │ │ └── closing_loc: (51,1)-(51,2) = "]" - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ StringNode (location: (53,0)-(53,3)) - │ ├── flags: newline - │ ├── opening_loc: (53,0)-(53,3) = "<)" - │ │ │ └── closing_loc: (55,6)-(55,7) = "/" - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :=~ - │ │ ├── message_loc: (55,8)-(55,10) = "=~" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (55,11)-(55,13)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ StringNode (location: (55,11)-(55,13)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (55,11)-(55,12) = "'" - │ │ │ ├── content_loc: (55,12)-(55,12) = "" - │ │ │ ├── closing_loc: (55,12)-(55,13) = "'" - │ │ │ └── unescaped: "" - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── targets: (length: 1) - │ └── @ LocalVariableTargetNode (location: (53,5)-(55,7)) - │ ├── flags: ∅ - │ ├── name: :a - │ └── depth: 0 - ├── @ StringNode (location: (57,0)-(57,3)) - │ ├── flags: newline - │ ├── opening_loc: (57,0)-(57,3) = "<=" - ├── @ SymbolNode (location: (77,0)-(77,3)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (77,0)-(77,1) = ":" - │ ├── value_loc: (77,1)-(77,3) = ">>" - │ ├── closing_loc: ∅ - │ └── unescaped: ">>" - ├── @ SymbolNode (location: (79,0)-(79,2)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (79,0)-(79,1) = ":" - │ ├── value_loc: (79,1)-(79,2) = ">" - │ ├── closing_loc: ∅ - │ └── unescaped: ">" - ├── @ SymbolNode (location: (81,0)-(81,4)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (81,0)-(81,1) = ":" - │ ├── value_loc: (81,1)-(81,4) = "<=>" - │ ├── closing_loc: ∅ - │ └── unescaped: "<=>" - ├── @ SymbolNode (location: (83,0)-(83,3)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (83,0)-(83,1) = ":" - │ ├── value_loc: (83,1)-(83,3) = "<=" - │ ├── closing_loc: ∅ - │ └── unescaped: "<=" - ├── @ SymbolNode (location: (85,0)-(85,3)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (85,0)-(85,1) = ":" - │ ├── value_loc: (85,1)-(85,3) = "<<" - │ ├── closing_loc: ∅ - │ └── unescaped: "<<" - ├── @ SymbolNode (location: (87,0)-(87,2)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (87,0)-(87,1) = ":" - │ ├── value_loc: (87,1)-(87,2) = "<" - │ ├── closing_loc: ∅ - │ └── unescaped: "<" - ├── @ SymbolNode (location: (89,0)-(89,9)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (89,0)-(89,1) = ":" - │ ├── value_loc: (89,1)-(89,9) = "__LINE__" - │ ├── closing_loc: ∅ - │ └── unescaped: "__LINE__" - ├── @ SymbolNode (location: (91,0)-(91,9)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (91,0)-(91,1) = ":" - │ ├── value_loc: (91,1)-(91,9) = "__FILE__" - │ ├── closing_loc: ∅ - │ └── unescaped: "__FILE__" - └── @ SymbolNode (location: (93,0)-(93,13)) - ├── flags: newline, static_literal, forced_us_ascii_encoding - ├── opening_loc: (93,0)-(93,1) = ":" - ├── value_loc: (93,1)-(93,13) = "__ENCODING__" - ├── closing_loc: ∅ - └── unescaped: "__ENCODING__" diff --git a/test/prism/snapshots/ternary_operator.txt b/test/prism/snapshots/ternary_operator.txt deleted file mode 100644 index 4d6a7423f9263a..00000000000000 --- a/test/prism/snapshots/ternary_operator.txt +++ /dev/null @@ -1,340 +0,0 @@ -@ ProgramNode (location: (1,0)-(15,12)) -├── flags: ∅ -├── locals: [:_a] -└── statements: - @ StatementsNode (location: (1,0)-(15,12)) - ├── flags: ∅ - └── body: (length: 8) - ├── @ IfNode (location: (1,0)-(1,9)) - │ ├── flags: newline - │ ├── if_keyword_loc: ∅ - │ ├── predicate: - │ │ @ CallNode (location: (1,0)-(1,1)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (1,0)-(1,1) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── then_keyword_loc: (1,2)-(1,3) = "?" - │ ├── statements: - │ │ @ StatementsNode (location: (1,4)-(1,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (1,4)-(1,5)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :b - │ │ ├── message_loc: (1,4)-(1,5) = "b" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── subsequent: - │ │ @ ElseNode (location: (1,6)-(1,9)) - │ │ ├── flags: ∅ - │ │ ├── else_keyword_loc: (1,6)-(1,7) = ":" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (1,8)-(1,9)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (1,8)-(1,9)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :c - │ │ │ ├── message_loc: (1,8)-(1,9) = "c" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── end_keyword_loc: ∅ - │ └── end_keyword_loc: ∅ - ├── @ IfNode (location: (3,0)-(3,27)) - │ ├── flags: newline - │ ├── if_keyword_loc: ∅ - │ ├── predicate: - │ │ @ CallNode (location: (3,0)-(3,1)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (3,0)-(3,1) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── then_keyword_loc: (3,2)-(3,3) = "?" - │ ├── statements: - │ │ @ StatementsNode (location: (3,4)-(3,14)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ DefinedNode (location: (3,4)-(3,14)) - │ │ ├── flags: newline - │ │ ├── lparen_loc: ∅ - │ │ ├── value: - │ │ │ @ CallNode (location: (3,13)-(3,14)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (3,13)-(3,14) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── rparen_loc: ∅ - │ │ └── keyword_loc: (3,4)-(3,12) = "defined?" - │ ├── subsequent: - │ │ @ ElseNode (location: (3,15)-(3,27)) - │ │ ├── flags: ∅ - │ │ ├── else_keyword_loc: (3,15)-(3,16) = ":" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (3,17)-(3,27)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ DefinedNode (location: (3,17)-(3,27)) - │ │ │ ├── flags: newline - │ │ │ ├── lparen_loc: ∅ - │ │ │ ├── value: - │ │ │ │ @ CallNode (location: (3,26)-(3,27)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :c - │ │ │ │ ├── message_loc: (3,26)-(3,27) = "c" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── rparen_loc: ∅ - │ │ │ └── keyword_loc: (3,17)-(3,25) = "defined?" - │ │ └── end_keyword_loc: ∅ - │ └── end_keyword_loc: ∅ - ├── @ IfNode (location: (5,0)-(5,15)) - │ ├── flags: newline - │ ├── if_keyword_loc: ∅ - │ ├── predicate: - │ │ @ CallNode (location: (5,0)-(5,6)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :empty? - │ │ ├── message_loc: (5,0)-(5,6) = "empty?" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── then_keyword_loc: (5,6)-(5,7) = "?" - │ ├── statements: - │ │ @ StatementsNode (location: (5,7)-(5,11)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ TrueNode (location: (5,7)-(5,11)) - │ │ └── flags: newline, static_literal - │ ├── subsequent: - │ │ @ ElseNode (location: (5,11)-(5,15)) - │ │ ├── flags: ∅ - │ │ ├── else_keyword_loc: (5,11)-(5,12) = ":" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (5,12)-(5,15)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ NilNode (location: (5,12)-(5,15)) - │ │ │ └── flags: newline, static_literal - │ │ └── end_keyword_loc: ∅ - │ └── end_keyword_loc: ∅ - ├── @ IfNode (location: (7,0)-(7,16)) - │ ├── flags: newline - │ ├── if_keyword_loc: ∅ - │ ├── predicate: - │ │ @ CallNode (location: (7,0)-(7,6)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :empty? - │ │ ├── message_loc: (7,0)-(7,6) = "empty?" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── then_keyword_loc: (7,6)-(7,7) = "?" - │ ├── statements: - │ │ @ StatementsNode (location: (7,7)-(7,12)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ FalseNode (location: (7,7)-(7,12)) - │ │ └── flags: newline, static_literal - │ ├── subsequent: - │ │ @ ElseNode (location: (7,12)-(7,16)) - │ │ ├── flags: ∅ - │ │ ├── else_keyword_loc: (7,12)-(7,13) = ":" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (7,13)-(7,16)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ NilNode (location: (7,13)-(7,16)) - │ │ │ └── flags: newline, static_literal - │ │ └── end_keyword_loc: ∅ - │ └── end_keyword_loc: ∅ - ├── @ IfNode (location: (9,0)-(9,14)) - │ ├── flags: newline - │ ├── if_keyword_loc: ∅ - │ ├── predicate: - │ │ @ CallNode (location: (9,0)-(9,6)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :empty? - │ │ ├── message_loc: (9,0)-(9,6) = "empty?" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── then_keyword_loc: (9,6)-(9,7) = "?" - │ ├── statements: - │ │ @ StatementsNode (location: (9,7)-(9,10)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ NilNode (location: (9,7)-(9,10)) - │ │ └── flags: newline, static_literal - │ ├── subsequent: - │ │ @ ElseNode (location: (9,10)-(9,14)) - │ │ ├── flags: ∅ - │ │ ├── else_keyword_loc: (9,10)-(9,11) = ":" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (9,11)-(9,14)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ NilNode (location: (9,11)-(9,14)) - │ │ │ └── flags: newline, static_literal - │ │ └── end_keyword_loc: ∅ - │ └── end_keyword_loc: ∅ - ├── @ IfNode (location: (11,0)-(11,10)) - │ ├── flags: newline - │ ├── if_keyword_loc: ∅ - │ ├── predicate: - │ │ @ CallNode (location: (11,0)-(11,2)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a? - │ │ ├── message_loc: (11,0)-(11,2) = "a?" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── then_keyword_loc: (11,2)-(11,3) = "?" - │ ├── statements: - │ │ @ StatementsNode (location: (11,3)-(11,6)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ NilNode (location: (11,3)-(11,6)) - │ │ └── flags: newline, static_literal - │ ├── subsequent: - │ │ @ ElseNode (location: (11,6)-(11,10)) - │ │ ├── flags: ∅ - │ │ ├── else_keyword_loc: (11,6)-(11,7) = ":" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (11,7)-(11,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ NilNode (location: (11,7)-(11,10)) - │ │ │ └── flags: newline, static_literal - │ │ └── end_keyword_loc: ∅ - │ └── end_keyword_loc: ∅ - ├── @ IfNode (location: (13,0)-(13,14)) - │ ├── flags: newline - │ ├── if_keyword_loc: ∅ - │ ├── predicate: - │ │ @ CallNode (location: (13,0)-(13,1)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (13,0)-(13,1) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── then_keyword_loc: (13,2)-(13,3) = "?" - │ ├── statements: - │ │ @ StatementsNode (location: (13,3)-(13,7)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (13,3)-(13,7)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :var1 - │ │ ├── message_loc: (13,3)-(13,7) = "var1" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── subsequent: - │ │ @ ElseNode (location: (13,8)-(13,14)) - │ │ ├── flags: ∅ - │ │ ├── else_keyword_loc: (13,8)-(13,9) = ":" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (13,10)-(13,14)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (13,10)-(13,14)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :var2 - │ │ │ ├── message_loc: (13,10)-(13,14) = "var2" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── end_keyword_loc: ∅ - │ └── end_keyword_loc: ∅ - └── @ IfNode (location: (15,0)-(15,12)) - ├── flags: newline - ├── if_keyword_loc: ∅ - ├── predicate: - │ @ CallNode (location: (15,0)-(15,4)) - │ ├── flags: ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :nil? - │ ├── message_loc: (15,0)-(15,4) = "nil?" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── then_keyword_loc: (15,4)-(15,5) = "?" - ├── statements: - │ @ StatementsNode (location: (15,5)-(15,10)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ LocalVariableWriteNode (location: (15,5)-(15,10)) - │ ├── flags: newline - │ ├── name: :_a - │ ├── depth: 0 - │ ├── name_loc: (15,5)-(15,7) = "_a" - │ ├── value: - │ │ @ IntegerNode (location: (15,9)-(15,10)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ └── operator_loc: (15,8)-(15,9) = "=" - ├── subsequent: - │ @ ElseNode (location: (15,10)-(15,12)) - │ ├── flags: ∅ - │ ├── else_keyword_loc: (15,10)-(15,11) = ":" - │ ├── statements: - │ │ @ StatementsNode (location: (15,11)-(15,12)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ IntegerNode (location: (15,11)-(15,12)) - │ │ ├── flags: newline, static_literal, decimal - │ │ └── value: 1 - │ └── end_keyword_loc: ∅ - └── end_keyword_loc: ∅ diff --git a/test/prism/snapshots/tilde_heredocs.txt b/test/prism/snapshots/tilde_heredocs.txt deleted file mode 100644 index dc6321ce1a5972..00000000000000 --- a/test/prism/snapshots/tilde_heredocs.txt +++ /dev/null @@ -1,421 +0,0 @@ -@ ProgramNode (location: (1,0)-(94,6)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(94,6)) - ├── flags: ∅ - └── body: (length: 19) - ├── @ InterpolatedStringNode (location: (1,0)-(1,6)) - │ ├── flags: newline - │ ├── opening_loc: (1,0)-(1,6) = "<<~EOF" - │ ├── parts: (length: 4) - │ │ ├── @ StringNode (location: (2,0)-(3,0)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (2,0)-(3,0) = " a\n" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: " a\n" - │ │ ├── @ EmbeddedStatementsNode (location: (3,0)-(3,4)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (3,0)-(3,2) = "\#{" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (3,2)-(3,3)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ IntegerNode (location: (3,2)-(3,3)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ └── closing_loc: (3,3)-(3,4) = "}" - │ │ ├── @ StringNode (location: (3,4)-(4,0)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (3,4)-(4,0) = "\n" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "\n" - │ │ └── @ StringNode (location: (4,0)-(5,0)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (4,0)-(5,0) = " a\n" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: " a\n" - │ └── closing_loc: (5,0)-(6,0) = "EOF\n" - ├── @ StringNode (location: (7,0)-(7,6)) - │ ├── flags: newline - │ ├── opening_loc: (7,0)-(7,6) = "<<~EOF" - │ ├── content_loc: (8,0)-(9,0) = " a\n" - │ ├── closing_loc: (9,0)-(10,0) = "EOF\n" - │ └── unescaped: "a\n" - ├── @ InterpolatedStringNode (location: (11,0)-(11,6)) - │ ├── flags: newline, static_literal - │ ├── opening_loc: (11,0)-(11,6) = "<<~EOF" - │ ├── parts: (length: 3) - │ │ ├── @ StringNode (location: (12,0)-(13,0)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (12,0)-(13,0) = "\ta\n" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "\ta\n" - │ │ ├── @ StringNode (location: (13,0)-(14,0)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (13,0)-(14,0) = " b\n" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "b\n" - │ │ └── @ StringNode (location: (14,0)-(15,0)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (14,0)-(15,0) = "\t\tc\n" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "\t\tc\n" - │ └── closing_loc: (15,0)-(16,0) = "EOF\n" - ├── @ InterpolatedStringNode (location: (17,0)-(17,6)) - │ ├── flags: newline - │ ├── opening_loc: (17,0)-(17,6) = "<<~EOF" - │ ├── parts: (length: 2) - │ │ ├── @ EmbeddedStatementsNode (location: (18,2)-(18,6)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (18,2)-(18,4) = "\#{" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (18,4)-(18,5)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ IntegerNode (location: (18,4)-(18,5)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ └── closing_loc: (18,5)-(18,6) = "}" - │ │ └── @ StringNode (location: (18,6)-(19,0)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (18,6)-(19,0) = " a\n" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: " a\n" - │ └── closing_loc: (19,0)-(20,0) = "EOF\n" - ├── @ InterpolatedStringNode (location: (21,0)-(21,6)) - │ ├── flags: newline - │ ├── opening_loc: (21,0)-(21,6) = "<<~EOF" - │ ├── parts: (length: 3) - │ │ ├── @ StringNode (location: (22,0)-(22,4)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (22,0)-(22,4) = " a " - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "a " - │ │ ├── @ EmbeddedStatementsNode (location: (22,4)-(22,8)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (22,4)-(22,6) = "\#{" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (22,6)-(22,7)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ IntegerNode (location: (22,6)-(22,7)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ └── closing_loc: (22,7)-(22,8) = "}" - │ │ └── @ StringNode (location: (22,8)-(23,0)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (22,8)-(23,0) = "\n" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "\n" - │ └── closing_loc: (23,0)-(24,0) = "EOF\n" - ├── @ InterpolatedStringNode (location: (25,0)-(25,6)) - │ ├── flags: newline - │ ├── opening_loc: (25,0)-(25,6) = "<<~EOF" - │ ├── parts: (length: 3) - │ │ ├── @ StringNode (location: (26,0)-(27,0)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (26,0)-(27,0) = " a\n" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: " a\n" - │ │ ├── @ EmbeddedStatementsNode (location: (27,1)-(27,5)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (27,1)-(27,3) = "\#{" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (27,3)-(27,4)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ IntegerNode (location: (27,3)-(27,4)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ └── closing_loc: (27,4)-(27,5) = "}" - │ │ └── @ StringNode (location: (27,5)-(28,0)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (27,5)-(28,0) = "\n" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "\n" - │ └── closing_loc: (28,0)-(29,0) = "EOF\n" - ├── @ InterpolatedStringNode (location: (30,0)-(30,6)) - │ ├── flags: newline - │ ├── opening_loc: (30,0)-(30,6) = "<<~EOF" - │ ├── parts: (length: 3) - │ │ ├── @ StringNode (location: (31,0)-(32,0)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (31,0)-(32,0) = " a\n" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "a\n" - │ │ ├── @ EmbeddedStatementsNode (location: (32,2)-(32,6)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (32,2)-(32,4) = "\#{" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (32,4)-(32,5)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ IntegerNode (location: (32,4)-(32,5)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ └── closing_loc: (32,5)-(32,6) = "}" - │ │ └── @ StringNode (location: (32,6)-(33,0)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (32,6)-(33,0) = "\n" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "\n" - │ └── closing_loc: (33,0)-(34,0) = "EOF\n" - ├── @ InterpolatedStringNode (location: (35,0)-(35,6)) - │ ├── flags: newline, static_literal - │ ├── opening_loc: (35,0)-(35,6) = "<<~EOF" - │ ├── parts: (length: 2) - │ │ ├── @ StringNode (location: (36,0)-(37,0)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (36,0)-(37,0) = " a\n" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "a\n" - │ │ └── @ StringNode (location: (37,0)-(38,0)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (37,0)-(38,0) = " b\n" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "b\n" - │ └── closing_loc: (38,0)-(39,0) = "EOF\n" - ├── @ InterpolatedStringNode (location: (40,0)-(40,6)) - │ ├── flags: newline, static_literal - │ ├── opening_loc: (40,0)-(40,6) = "<<~EOF" - │ ├── parts: (length: 2) - │ │ ├── @ StringNode (location: (41,0)-(42,0)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (41,0)-(42,0) = " a\n" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "a\n" - │ │ └── @ StringNode (location: (42,0)-(43,0)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (42,0)-(43,0) = " b\n" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: " b\n" - │ └── closing_loc: (43,0)-(44,0) = "EOF\n" - ├── @ InterpolatedStringNode (location: (45,0)-(45,6)) - │ ├── flags: newline, static_literal - │ ├── opening_loc: (45,0)-(45,6) = "<<~EOF" - │ ├── parts: (length: 2) - │ │ ├── @ StringNode (location: (46,0)-(47,0)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (46,0)-(47,0) = "\t\t\ta\n" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "\ta\n" - │ │ └── @ StringNode (location: (47,0)-(48,0)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (47,0)-(48,0) = "\t\tb\n" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "b\n" - │ └── closing_loc: (48,0)-(49,0) = "EOF\n" - ├── @ StringNode (location: (50,0)-(50,8)) - │ ├── flags: newline - │ ├── opening_loc: (50,0)-(50,8) = "<<~'EOF'" - │ ├── content_loc: (51,0)-(52,0) = " a \#{1}\n" - │ ├── closing_loc: (52,0)-(53,0) = "EOF\n" - │ └── unescaped: "a \#{1}\n" - ├── @ InterpolatedStringNode (location: (54,0)-(54,6)) - │ ├── flags: newline, static_literal - │ ├── opening_loc: (54,0)-(54,6) = "<<~EOF" - │ ├── parts: (length: 2) - │ │ ├── @ StringNode (location: (55,0)-(56,0)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (55,0)-(56,0) = "\ta\n" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "a\n" - │ │ └── @ StringNode (location: (56,0)-(57,0)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (56,0)-(57,0) = "\t b\n" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: " b\n" - │ └── closing_loc: (57,0)-(58,0) = "EOF\n" - ├── @ InterpolatedStringNode (location: (59,0)-(59,6)) - │ ├── flags: newline, static_literal - │ ├── opening_loc: (59,0)-(59,6) = "<<~EOF" - │ ├── parts: (length: 2) - │ │ ├── @ StringNode (location: (60,0)-(61,0)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (60,0)-(61,0) = "\t a\n" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: " a\n" - │ │ └── @ StringNode (location: (61,0)-(62,0)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (61,0)-(62,0) = "\tb\n" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "b\n" - │ └── closing_loc: (62,0)-(63,0) = "EOF\n" - ├── @ InterpolatedStringNode (location: (64,0)-(64,6)) - │ ├── flags: newline, static_literal - │ ├── opening_loc: (64,0)-(64,6) = "<<~EOF" - │ ├── parts: (length: 2) - │ │ ├── @ StringNode (location: (65,0)-(66,0)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (65,0)-(66,0) = " \ta\n" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "a\n" - │ │ └── @ StringNode (location: (66,0)-(67,0)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (66,0)-(67,0) = " b\n" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "b\n" - │ └── closing_loc: (67,0)-(68,0) = "EOF\n" - ├── @ InterpolatedStringNode (location: (69,0)-(69,6)) - │ ├── flags: newline, static_literal - │ ├── opening_loc: (69,0)-(69,6) = "<<~EOF" - │ ├── parts: (length: 3) - │ │ ├── @ StringNode (location: (70,0)-(71,0)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (70,0)-(71,0) = " a\n" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "a\n" - │ │ ├── @ StringNode (location: (71,0)-(72,0)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (71,0)-(72,0) = "\n" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "\n" - │ │ └── @ StringNode (location: (72,0)-(73,0)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (72,0)-(73,0) = " b\n" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "b\n" - │ └── closing_loc: (73,0)-(74,0) = "EOF\n" - ├── @ InterpolatedStringNode (location: (75,0)-(75,6)) - │ ├── flags: newline, static_literal - │ ├── opening_loc: (75,0)-(75,6) = "<<~EOF" - │ ├── parts: (length: 3) - │ │ ├── @ StringNode (location: (76,0)-(77,0)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (76,0)-(77,0) = " a\n" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "a\n" - │ │ ├── @ StringNode (location: (77,0)-(78,0)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (77,0)-(78,0) = "\n" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "\n" - │ │ └── @ StringNode (location: (78,0)-(79,0)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (78,0)-(79,0) = " b\n" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "b\n" - │ └── closing_loc: (79,0)-(80,0) = "EOF\n" - ├── @ InterpolatedStringNode (location: (81,0)-(81,6)) - │ ├── flags: newline, static_literal - │ ├── opening_loc: (81,0)-(81,6) = "<<~EOF" - │ ├── parts: (length: 5) - │ │ ├── @ StringNode (location: (82,0)-(83,0)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (82,0)-(83,0) = " a\n" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "a\n" - │ │ ├── @ StringNode (location: (83,0)-(84,0)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (83,0)-(84,0) = "\n" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "\n" - │ │ ├── @ StringNode (location: (84,0)-(85,0)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (84,0)-(85,0) = "\n" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "\n" - │ │ ├── @ StringNode (location: (85,0)-(86,0)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (85,0)-(86,0) = "\n" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "\n" - │ │ └── @ StringNode (location: (86,0)-(87,0)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (86,0)-(87,0) = " b\n" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "b\n" - │ └── closing_loc: (87,0)-(88,0) = "EOF\n" - ├── @ InterpolatedStringNode (location: (89,0)-(89,6)) - │ ├── flags: newline - │ ├── opening_loc: (89,0)-(89,6) = "<<~EOF" - │ ├── parts: (length: 3) - │ │ ├── @ StringNode (location: (90,0)-(91,0)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (90,0)-(91,0) = "\n" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "\n" - │ │ ├── @ EmbeddedStatementsNode (location: (91,2)-(91,6)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (91,2)-(91,4) = "\#{" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (91,4)-(91,5)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ IntegerNode (location: (91,4)-(91,5)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ └── closing_loc: (91,5)-(91,6) = "}" - │ │ └── @ StringNode (location: (91,6)-(92,0)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (91,6)-(92,0) = "a\n" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "a\n" - │ └── closing_loc: (92,0)-(93,0) = " EOF\n" - └── @ InterpolatedStringNode (location: (94,0)-(94,6)) - ├── flags: newline - ├── opening_loc: (94,0)-(94,6) = "<<~EOT" - ├── parts: (length: 3) - │ ├── @ EmbeddedStatementsNode (location: (95,2)-(95,6)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (95,2)-(95,4) = "\#{" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (95,4)-(95,5)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ IntegerNode (location: (95,4)-(95,5)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── closing_loc: (95,5)-(95,6) = "}" - │ ├── @ StringNode (location: (95,6)-(96,0)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (95,6)-(96,0) = "\n" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "\n" - │ └── @ StringNode (location: (96,0)-(97,0)) - │ ├── flags: static_literal, frozen - │ ├── opening_loc: ∅ - │ ├── content_loc: (96,0)-(97,0) = "\tb\n" - │ ├── closing_loc: ∅ - │ └── unescaped: "\tb\n" - └── closing_loc: (97,0)-(98,0) = "EOT\n" diff --git a/test/prism/snapshots/undef.txt b/test/prism/snapshots/undef.txt deleted file mode 100644 index 7491fc4c953659..00000000000000 --- a/test/prism/snapshots/undef.txt +++ /dev/null @@ -1,131 +0,0 @@ -@ ProgramNode (location: (1,0)-(17,14)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(17,14)) - ├── flags: ∅ - └── body: (length: 9) - ├── @ UndefNode (location: (1,0)-(1,7)) - │ ├── flags: newline - │ ├── names: (length: 1) - │ │ └── @ SymbolNode (location: (1,6)-(1,7)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: ∅ - │ │ ├── value_loc: (1,6)-(1,7) = "a" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "a" - │ └── keyword_loc: (1,0)-(1,5) = "undef" - ├── @ UndefNode (location: (3,0)-(3,10)) - │ ├── flags: newline - │ ├── names: (length: 2) - │ │ ├── @ SymbolNode (location: (3,6)-(3,7)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (3,6)-(3,7) = "a" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "a" - │ │ └── @ SymbolNode (location: (3,9)-(3,10)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: ∅ - │ │ ├── value_loc: (3,9)-(3,10) = "b" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "b" - │ └── keyword_loc: (3,0)-(3,5) = "undef" - ├── @ UndefNode (location: (5,0)-(5,8)) - │ ├── flags: newline - │ ├── names: (length: 1) - │ │ └── @ SymbolNode (location: (5,6)-(5,8)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: ∅ - │ │ ├── value_loc: (5,6)-(5,8) = "if" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "if" - │ └── keyword_loc: (5,0)-(5,5) = "undef" - ├── @ UndefNode (location: (7,0)-(7,9)) - │ ├── flags: newline - │ ├── names: (length: 1) - │ │ └── @ SymbolNode (location: (7,6)-(7,9)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: ∅ - │ │ ├── value_loc: (7,6)-(7,9) = "<=>" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "<=>" - │ └── keyword_loc: (7,0)-(7,5) = "undef" - ├── @ UndefNode (location: (9,0)-(9,8)) - │ ├── flags: newline - │ ├── names: (length: 1) - │ │ └── @ SymbolNode (location: (9,6)-(9,8)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (9,6)-(9,7) = ":" - │ │ ├── value_loc: (9,7)-(9,8) = "a" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "a" - │ └── keyword_loc: (9,0)-(9,5) = "undef" - ├── @ UndefNode (location: (11,0)-(11,16)) - │ ├── flags: newline - │ ├── names: (length: 3) - │ │ ├── @ SymbolNode (location: (11,6)-(11,8)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (11,6)-(11,7) = ":" - │ │ │ ├── value_loc: (11,7)-(11,8) = "a" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "a" - │ │ ├── @ SymbolNode (location: (11,10)-(11,12)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (11,10)-(11,11) = ":" - │ │ │ ├── value_loc: (11,11)-(11,12) = "b" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "b" - │ │ └── @ SymbolNode (location: (11,14)-(11,16)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (11,14)-(11,15) = ":" - │ │ ├── value_loc: (11,15)-(11,16) = "c" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "c" - │ └── keyword_loc: (11,0)-(11,5) = "undef" - ├── @ UndefNode (location: (13,0)-(13,12)) - │ ├── flags: newline - │ ├── names: (length: 1) - │ │ └── @ SymbolNode (location: (13,6)-(13,12)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (13,6)-(13,8) = ":'" - │ │ ├── value_loc: (13,8)-(13,11) = "abc" - │ │ ├── closing_loc: (13,11)-(13,12) = "'" - │ │ └── unescaped: "abc" - │ └── keyword_loc: (13,0)-(13,5) = "undef" - ├── @ UndefNode (location: (15,0)-(15,16)) - │ ├── flags: newline - │ ├── names: (length: 1) - │ │ └── @ InterpolatedSymbolNode (location: (15,6)-(15,16)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (15,6)-(15,8) = ":\"" - │ │ ├── parts: (length: 2) - │ │ │ ├── @ StringNode (location: (15,8)-(15,11)) - │ │ │ │ ├── flags: static_literal, frozen - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── content_loc: (15,8)-(15,11) = "abc" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "abc" - │ │ │ └── @ EmbeddedStatementsNode (location: (15,11)-(15,15)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (15,11)-(15,13) = "\#{" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (15,13)-(15,14)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ IntegerNode (location: (15,13)-(15,14)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ └── closing_loc: (15,14)-(15,15) = "}" - │ │ └── closing_loc: (15,15)-(15,16) = "\"" - │ └── keyword_loc: (15,0)-(15,5) = "undef" - └── @ UndefNode (location: (17,0)-(17,14)) - ├── flags: newline - ├── names: (length: 1) - │ └── @ SymbolNode (location: (17,6)-(17,14)) - │ ├── flags: static_literal, forced_us_ascii_encoding - │ ├── opening_loc: ∅ - │ ├── value_loc: (17,6)-(17,14) = "Constant" - │ ├── closing_loc: ∅ - │ └── unescaped: "Constant" - └── keyword_loc: (17,0)-(17,5) = "undef" diff --git a/test/prism/snapshots/unescaping.txt b/test/prism/snapshots/unescaping.txt deleted file mode 100644 index 822fbe7d8f2936..00000000000000 --- a/test/prism/snapshots/unescaping.txt +++ /dev/null @@ -1,36 +0,0 @@ -@ ProgramNode (location: (1,0)-(7,7)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(7,7)) - ├── flags: ∅ - └── body: (length: 4) - ├── @ ArrayNode (location: (1,0)-(1,10)) - │ ├── flags: newline - │ ├── elements: (length: 1) - │ │ └── @ StringNode (location: (1,1)-(1,9)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (1,1)-(1,2) = "\"" - │ │ ├── content_loc: (1,2)-(1,8) = "\\c\#{1}" - │ │ ├── closing_loc: (1,8)-(1,9) = "\"" - │ │ └── unescaped: "\u0003{1}" - │ ├── opening_loc: (1,0)-(1,1) = "[" - │ └── closing_loc: (1,9)-(1,10) = "]" - ├── @ RegularExpressionNode (location: (3,0)-(3,8)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (3,0)-(3,1) = "/" - │ ├── content_loc: (3,1)-(3,7) = "\\c\#{1}" - │ ├── closing_loc: (3,7)-(3,8) = "/" - │ └── unescaped: "\\x03{1}" - ├── @ StringNode (location: (5,0)-(5,8)) - │ ├── flags: newline - │ ├── opening_loc: (5,0)-(5,1) = "\"" - │ ├── content_loc: (5,1)-(5,7) = "\\c\#{1}" - │ ├── closing_loc: (5,7)-(5,8) = "\"" - │ └── unescaped: "\u0003{1}" - └── @ StringNode (location: (7,0)-(7,7)) - ├── flags: newline - ├── opening_loc: (7,0)-(7,7) = "<<~HERE" - ├── content_loc: (8,0)-(9,0) = " \\c\#{1}\n" - ├── closing_loc: (9,0)-(10,0) = "HERE\n" - └── unescaped: "\u0003{1}\n" diff --git a/test/prism/snapshots/unless.txt b/test/prism/snapshots/unless.txt deleted file mode 100644 index 9e62b0c0a96999..00000000000000 --- a/test/prism/snapshots/unless.txt +++ /dev/null @@ -1,203 +0,0 @@ -@ ProgramNode (location: (1,0)-(14,22)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(14,22)) - ├── flags: ∅ - └── body: (length: 7) - ├── @ UnlessNode (location: (1,0)-(1,19)) - │ ├── flags: newline - │ ├── keyword_loc: (1,0)-(1,6) = "unless" - │ ├── predicate: - │ │ @ TrueNode (location: (1,7)-(1,11)) - │ │ └── flags: static_literal - │ ├── then_keyword_loc: ∅ - │ ├── statements: - │ │ @ StatementsNode (location: (1,13)-(1,14)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ IntegerNode (location: (1,13)-(1,14)) - │ │ ├── flags: newline, static_literal, decimal - │ │ └── value: 1 - │ ├── else_clause: ∅ - │ └── end_keyword_loc: (1,16)-(1,19) = "end" - ├── @ UnlessNode (location: (3,0)-(4,12)) - │ ├── flags: newline - │ ├── keyword_loc: (3,0)-(3,6) = "unless" - │ ├── predicate: - │ │ @ TrueNode (location: (3,7)-(3,11)) - │ │ └── flags: static_literal - │ ├── then_keyword_loc: ∅ - │ ├── statements: - │ │ @ StatementsNode (location: (4,0)-(4,1)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ IntegerNode (location: (4,0)-(4,1)) - │ │ ├── flags: newline, static_literal, decimal - │ │ └── value: 1 - │ ├── else_clause: - │ │ @ ElseNode (location: (4,2)-(4,12)) - │ │ ├── flags: ∅ - │ │ ├── else_keyword_loc: (4,2)-(4,6) = "else" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (4,7)-(4,8)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ IntegerNode (location: (4,7)-(4,8)) - │ │ │ ├── flags: newline, static_literal, decimal - │ │ │ └── value: 2 - │ │ └── end_keyword_loc: (4,9)-(4,12) = "end" - │ └── end_keyword_loc: (4,9)-(4,12) = "end" - ├── @ UnlessNode (location: (6,0)-(6,13)) - │ ├── flags: newline - │ ├── keyword_loc: (6,2)-(6,8) = "unless" - │ ├── predicate: - │ │ @ TrueNode (location: (6,9)-(6,13)) - │ │ └── flags: static_literal - │ ├── then_keyword_loc: ∅ - │ ├── statements: - │ │ @ StatementsNode (location: (6,0)-(6,1)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ IntegerNode (location: (6,0)-(6,1)) - │ │ ├── flags: newline, static_literal, decimal - │ │ └── value: 1 - │ ├── else_clause: ∅ - │ └── end_keyword_loc: ∅ - ├── @ CallNode (location: (8,0)-(8,25)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :tap - │ ├── message_loc: (8,0)-(8,3) = "tap" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (8,4)-(8,25)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (8,6)-(8,23)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ UnlessNode (location: (8,6)-(8,23)) - │ │ ├── flags: newline - │ │ ├── keyword_loc: (8,12)-(8,18) = "unless" - │ │ ├── predicate: - │ │ │ @ TrueNode (location: (8,19)-(8,23)) - │ │ │ └── flags: static_literal - │ │ ├── then_keyword_loc: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (8,6)-(8,11)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ BreakNode (location: (8,6)-(8,11)) - │ │ │ ├── flags: newline - │ │ │ ├── arguments: ∅ - │ │ │ └── keyword_loc: (8,6)-(8,11) = "break" - │ │ ├── else_clause: ∅ - │ │ └── end_keyword_loc: ∅ - │ ├── opening_loc: (8,4)-(8,5) = "{" - │ └── closing_loc: (8,24)-(8,25) = "}" - ├── @ CallNode (location: (10,0)-(10,24)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :tap - │ ├── message_loc: (10,0)-(10,3) = "tap" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (10,4)-(10,24)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (10,6)-(10,22)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ UnlessNode (location: (10,6)-(10,22)) - │ │ ├── flags: newline - │ │ ├── keyword_loc: (10,11)-(10,17) = "unless" - │ │ ├── predicate: - │ │ │ @ TrueNode (location: (10,18)-(10,22)) - │ │ │ └── flags: static_literal - │ │ ├── then_keyword_loc: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (10,6)-(10,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ NextNode (location: (10,6)-(10,10)) - │ │ │ ├── flags: newline - │ │ │ ├── arguments: ∅ - │ │ │ └── keyword_loc: (10,6)-(10,10) = "next" - │ │ ├── else_clause: ∅ - │ │ └── end_keyword_loc: ∅ - │ ├── opening_loc: (10,4)-(10,5) = "{" - │ └── closing_loc: (10,23)-(10,24) = "}" - ├── @ UnlessNode (location: (12,0)-(12,18)) - │ ├── flags: newline - │ ├── keyword_loc: (12,7)-(12,13) = "unless" - │ ├── predicate: - │ │ @ TrueNode (location: (12,14)-(12,18)) - │ │ └── flags: static_literal - │ ├── then_keyword_loc: ∅ - │ ├── statements: - │ │ @ StatementsNode (location: (12,0)-(12,6)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ ReturnNode (location: (12,0)-(12,6)) - │ │ ├── flags: newline - │ │ ├── keyword_loc: (12,0)-(12,6) = "return" - │ │ └── arguments: ∅ - │ ├── else_clause: ∅ - │ └── end_keyword_loc: ∅ - └── @ UnlessNode (location: (14,0)-(14,22)) - ├── flags: newline - ├── keyword_loc: (14,11)-(14,17) = "unless" - ├── predicate: - │ @ CallNode (location: (14,18)-(14,22)) - │ ├── flags: ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :bar? - │ ├── message_loc: (14,18)-(14,22) = "bar?" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── then_keyword_loc: ∅ - ├── statements: - │ @ StatementsNode (location: (14,0)-(14,10)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (14,0)-(14,10)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (14,0)-(14,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (14,4)-(14,10)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ SymbolNode (location: (14,4)-(14,6)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (14,4)-(14,5) = ":" - │ │ │ ├── value_loc: (14,5)-(14,6) = "a" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "a" - │ │ └── @ SymbolNode (location: (14,8)-(14,10)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (14,8)-(14,9) = ":" - │ │ ├── value_loc: (14,9)-(14,10) = "b" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "b" - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── else_clause: ∅ - └── end_keyword_loc: ∅ diff --git a/test/prism/snapshots/unparser/corpus/literal/alias.txt b/test/prism/snapshots/unparser/corpus/literal/alias.txt deleted file mode 100644 index 6ce892b54d0943..00000000000000 --- a/test/prism/snapshots/unparser/corpus/literal/alias.txt +++ /dev/null @@ -1,35 +0,0 @@ -@ ProgramNode (location: (1,0)-(2,15)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(2,15)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ AliasGlobalVariableNode (location: (1,0)-(1,15)) - │ ├── flags: newline - │ ├── new_name: - │ │ @ GlobalVariableReadNode (location: (1,6)-(1,10)) - │ │ ├── flags: ∅ - │ │ └── name: :$foo - │ ├── old_name: - │ │ @ GlobalVariableReadNode (location: (1,11)-(1,15)) - │ │ ├── flags: ∅ - │ │ └── name: :$bar - │ └── keyword_loc: (1,0)-(1,5) = "alias" - └── @ AliasMethodNode (location: (2,0)-(2,15)) - ├── flags: newline - ├── new_name: - │ @ SymbolNode (location: (2,6)-(2,10)) - │ ├── flags: static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (2,6)-(2,7) = ":" - │ ├── value_loc: (2,7)-(2,10) = "foo" - │ ├── closing_loc: ∅ - │ └── unescaped: "foo" - ├── old_name: - │ @ SymbolNode (location: (2,11)-(2,15)) - │ ├── flags: static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (2,11)-(2,12) = ":" - │ ├── value_loc: (2,12)-(2,15) = "bar" - │ ├── closing_loc: ∅ - │ └── unescaped: "bar" - └── keyword_loc: (2,0)-(2,5) = "alias" diff --git a/test/prism/snapshots/unparser/corpus/literal/assignment.txt b/test/prism/snapshots/unparser/corpus/literal/assignment.txt deleted file mode 100644 index 4e4ed86e7b6b69..00000000000000 --- a/test/prism/snapshots/unparser/corpus/literal/assignment.txt +++ /dev/null @@ -1,1181 +0,0 @@ -@ ProgramNode (location: (1,0)-(51,17)) -├── flags: ∅ -├── locals: [:a, :b, :foo, :c, :x] -└── statements: - @ StatementsNode (location: (1,0)-(51,17)) - ├── flags: ∅ - └── body: (length: 43) - ├── @ GlobalVariableWriteNode (location: (1,0)-(1,6)) - │ ├── flags: newline - │ ├── name: :$a - │ ├── name_loc: (1,0)-(1,2) = "$a" - │ ├── value: - │ │ @ IntegerNode (location: (1,5)-(1,6)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ └── operator_loc: (1,3)-(1,4) = "=" - ├── @ MultiWriteNode (location: (2,0)-(2,17)) - │ ├── flags: newline - │ ├── lefts: (length: 2) - │ │ ├── @ GlobalVariableTargetNode (location: (2,1)-(2,3)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :$a - │ │ └── @ GlobalVariableTargetNode (location: (2,5)-(2,7)) - │ │ ├── flags: ∅ - │ │ └── name: :$b - │ ├── rest: ∅ - │ ├── rights: (length: 0) - │ ├── lparen_loc: (2,0)-(2,1) = "(" - │ ├── rparen_loc: (2,7)-(2,8) = ")" - │ ├── operator_loc: (2,9)-(2,10) = "=" - │ └── value: - │ @ ArrayNode (location: (2,11)-(2,17)) - │ ├── flags: static_literal - │ ├── elements: (length: 2) - │ │ ├── @ IntegerNode (location: (2,12)-(2,13)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── @ IntegerNode (location: (2,15)-(2,16)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── opening_loc: (2,11)-(2,12) = "[" - │ └── closing_loc: (2,16)-(2,17) = "]" - ├── @ MultiWriteNode (location: (3,0)-(3,13)) - │ ├── flags: newline - │ ├── lefts: (length: 2) - │ │ ├── @ MultiTargetNode (location: (3,1)-(3,5)) - │ │ │ ├── flags: ∅ - │ │ │ ├── lefts: (length: 1) - │ │ │ │ └── @ LocalVariableTargetNode (location: (3,2)-(3,3)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :a - │ │ │ │ └── depth: 0 - │ │ │ ├── rest: - │ │ │ │ @ ImplicitRestNode (location: (3,3)-(3,4)) - │ │ │ │ └── flags: ∅ - │ │ │ ├── rights: (length: 0) - │ │ │ ├── lparen_loc: (3,1)-(3,2) = "(" - │ │ │ └── rparen_loc: (3,4)-(3,5) = ")" - │ │ └── @ LocalVariableTargetNode (location: (3,7)-(3,8)) - │ │ ├── flags: ∅ - │ │ ├── name: :b - │ │ └── depth: 0 - │ ├── rest: ∅ - │ ├── rights: (length: 0) - │ ├── lparen_loc: (3,0)-(3,1) = "(" - │ ├── rparen_loc: (3,8)-(3,9) = ")" - │ ├── operator_loc: (3,10)-(3,11) = "=" - │ └── value: - │ @ IntegerNode (location: (3,12)-(3,13)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── @ MultiWriteNode (location: (4,0)-(4,9)) - │ ├── flags: newline - │ ├── lefts: (length: 0) - │ ├── rest: - │ │ @ SplatNode (location: (4,1)-(4,3)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (4,1)-(4,2) = "*" - │ │ └── expression: - │ │ @ LocalVariableTargetNode (location: (4,2)-(4,3)) - │ │ ├── flags: ∅ - │ │ ├── name: :a - │ │ └── depth: 0 - │ ├── rights: (length: 0) - │ ├── lparen_loc: (4,0)-(4,1) = "(" - │ ├── rparen_loc: (4,3)-(4,4) = ")" - │ ├── operator_loc: (4,5)-(4,6) = "=" - │ └── value: - │ @ ArrayNode (location: (4,7)-(4,9)) - │ ├── flags: static_literal - │ ├── elements: (length: 0) - │ ├── opening_loc: (4,7)-(4,8) = "[" - │ └── closing_loc: (4,8)-(4,9) = "]" - ├── @ MultiWriteNode (location: (5,0)-(5,15)) - │ ├── flags: newline - │ ├── lefts: (length: 0) - │ ├── rest: - │ │ @ SplatNode (location: (5,1)-(5,5)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (5,1)-(5,2) = "*" - │ │ └── expression: - │ │ @ LocalVariableTargetNode (location: (5,2)-(5,5)) - │ │ ├── flags: ∅ - │ │ ├── name: :foo - │ │ └── depth: 0 - │ ├── rights: (length: 0) - │ ├── lparen_loc: (5,0)-(5,1) = "(" - │ ├── rparen_loc: (5,5)-(5,6) = ")" - │ ├── operator_loc: (5,7)-(5,8) = "=" - │ └── value: - │ @ ArrayNode (location: (5,9)-(5,15)) - │ ├── flags: static_literal - │ ├── elements: (length: 2) - │ │ ├── @ IntegerNode (location: (5,10)-(5,11)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── @ IntegerNode (location: (5,13)-(5,14)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── opening_loc: (5,9)-(5,10) = "[" - │ └── closing_loc: (5,14)-(5,15) = "]" - ├── @ MultiWriteNode (location: (6,0)-(6,19)) - │ ├── flags: newline - │ ├── lefts: (length: 2) - │ │ ├── @ ClassVariableTargetNode (location: (6,1)-(6,4)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :@@a - │ │ └── @ ClassVariableTargetNode (location: (6,6)-(6,9)) - │ │ ├── flags: ∅ - │ │ └── name: :@@b - │ ├── rest: ∅ - │ ├── rights: (length: 0) - │ ├── lparen_loc: (6,0)-(6,1) = "(" - │ ├── rparen_loc: (6,9)-(6,10) = ")" - │ ├── operator_loc: (6,11)-(6,12) = "=" - │ └── value: - │ @ ArrayNode (location: (6,13)-(6,19)) - │ ├── flags: static_literal - │ ├── elements: (length: 2) - │ │ ├── @ IntegerNode (location: (6,14)-(6,15)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── @ IntegerNode (location: (6,17)-(6,18)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── opening_loc: (6,13)-(6,14) = "[" - │ └── closing_loc: (6,18)-(6,19) = "]" - ├── @ MultiWriteNode (location: (7,0)-(7,17)) - │ ├── flags: newline - │ ├── lefts: (length: 2) - │ │ ├── @ InstanceVariableTargetNode (location: (7,1)-(7,3)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :@a - │ │ └── @ InstanceVariableTargetNode (location: (7,5)-(7,7)) - │ │ ├── flags: ∅ - │ │ └── name: :@b - │ ├── rest: ∅ - │ ├── rights: (length: 0) - │ ├── lparen_loc: (7,0)-(7,1) = "(" - │ ├── rparen_loc: (7,7)-(7,8) = ")" - │ ├── operator_loc: (7,9)-(7,10) = "=" - │ └── value: - │ @ ArrayNode (location: (7,11)-(7,17)) - │ ├── flags: static_literal - │ ├── elements: (length: 2) - │ │ ├── @ IntegerNode (location: (7,12)-(7,13)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── @ IntegerNode (location: (7,15)-(7,16)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── opening_loc: (7,11)-(7,12) = "[" - │ └── closing_loc: (7,16)-(7,17) = "]" - ├── @ MultiWriteNode (location: (8,0)-(8,25)) - │ ├── flags: newline - │ ├── lefts: (length: 2) - │ │ ├── @ LocalVariableTargetNode (location: (8,1)-(8,2)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :a - │ │ │ └── depth: 0 - │ │ └── @ MultiTargetNode (location: (8,4)-(8,10)) - │ │ ├── flags: ∅ - │ │ ├── lefts: (length: 2) - │ │ │ ├── @ LocalVariableTargetNode (location: (8,5)-(8,6)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :b - │ │ │ │ └── depth: 0 - │ │ │ └── @ LocalVariableTargetNode (location: (8,8)-(8,9)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :c - │ │ │ └── depth: 0 - │ │ ├── rest: ∅ - │ │ ├── rights: (length: 0) - │ │ ├── lparen_loc: (8,4)-(8,5) = "(" - │ │ └── rparen_loc: (8,9)-(8,10) = ")" - │ ├── rest: ∅ - │ ├── rights: (length: 0) - │ ├── lparen_loc: (8,0)-(8,1) = "(" - │ ├── rparen_loc: (8,10)-(8,11) = ")" - │ ├── operator_loc: (8,12)-(8,13) = "=" - │ └── value: - │ @ ArrayNode (location: (8,14)-(8,25)) - │ ├── flags: ∅ - │ ├── elements: (length: 2) - │ │ ├── @ IntegerNode (location: (8,15)-(8,16)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── @ ArrayNode (location: (8,18)-(8,24)) - │ │ ├── flags: static_literal - │ │ ├── elements: (length: 2) - │ │ │ ├── @ IntegerNode (location: (8,19)-(8,20)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 2 - │ │ │ └── @ IntegerNode (location: (8,22)-(8,23)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 3 - │ │ ├── opening_loc: (8,18)-(8,19) = "[" - │ │ └── closing_loc: (8,23)-(8,24) = "]" - │ ├── opening_loc: (8,14)-(8,15) = "[" - │ └── closing_loc: (8,24)-(8,25) = "]" - ├── @ MultiWriteNode (location: (9,0)-(9,15)) - │ ├── flags: newline - │ ├── lefts: (length: 1) - │ │ └── @ LocalVariableTargetNode (location: (9,1)-(9,2)) - │ │ ├── flags: ∅ - │ │ ├── name: :a - │ │ └── depth: 0 - │ ├── rest: - │ │ @ SplatNode (location: (9,4)-(9,5)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (9,4)-(9,5) = "*" - │ │ └── expression: ∅ - │ ├── rights: (length: 0) - │ ├── lparen_loc: (9,0)-(9,1) = "(" - │ ├── rparen_loc: (9,5)-(9,6) = ")" - │ ├── operator_loc: (9,7)-(9,8) = "=" - │ └── value: - │ @ ArrayNode (location: (9,9)-(9,15)) - │ ├── flags: static_literal - │ ├── elements: (length: 2) - │ │ ├── @ IntegerNode (location: (9,10)-(9,11)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── @ IntegerNode (location: (9,13)-(9,14)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── opening_loc: (9,9)-(9,10) = "[" - │ └── closing_loc: (9,14)-(9,15) = "]" - ├── @ MultiWriteNode (location: (10,0)-(10,18)) - │ ├── flags: newline - │ ├── lefts: (length: 1) - │ │ └── @ LocalVariableTargetNode (location: (10,1)-(10,2)) - │ │ ├── flags: ∅ - │ │ ├── name: :a - │ │ └── depth: 0 - │ ├── rest: - │ │ @ SplatNode (location: (10,4)-(10,8)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (10,4)-(10,5) = "*" - │ │ └── expression: - │ │ @ LocalVariableTargetNode (location: (10,5)-(10,8)) - │ │ ├── flags: ∅ - │ │ ├── name: :foo - │ │ └── depth: 0 - │ ├── rights: (length: 0) - │ ├── lparen_loc: (10,0)-(10,1) = "(" - │ ├── rparen_loc: (10,8)-(10,9) = ")" - │ ├── operator_loc: (10,10)-(10,11) = "=" - │ └── value: - │ @ ArrayNode (location: (10,12)-(10,18)) - │ ├── flags: static_literal - │ ├── elements: (length: 2) - │ │ ├── @ IntegerNode (location: (10,13)-(10,14)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── @ IntegerNode (location: (10,16)-(10,17)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── opening_loc: (10,12)-(10,13) = "[" - │ └── closing_loc: (10,17)-(10,18) = "]" - ├── @ MultiWriteNode (location: (11,0)-(11,15)) - │ ├── flags: newline - │ ├── lefts: (length: 2) - │ │ ├── @ LocalVariableTargetNode (location: (11,1)-(11,2)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :a - │ │ │ └── depth: 0 - │ │ └── @ LocalVariableTargetNode (location: (11,4)-(11,5)) - │ │ ├── flags: ∅ - │ │ ├── name: :b - │ │ └── depth: 0 - │ ├── rest: ∅ - │ ├── rights: (length: 0) - │ ├── lparen_loc: (11,0)-(11,1) = "(" - │ ├── rparen_loc: (11,5)-(11,6) = ")" - │ ├── operator_loc: (11,7)-(11,8) = "=" - │ └── value: - │ @ ArrayNode (location: (11,9)-(11,15)) - │ ├── flags: static_literal - │ ├── elements: (length: 2) - │ │ ├── @ IntegerNode (location: (11,10)-(11,11)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── @ IntegerNode (location: (11,13)-(11,14)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── opening_loc: (11,9)-(11,10) = "[" - │ └── closing_loc: (11,14)-(11,15) = "]" - ├── @ MultiWriteNode (location: (12,0)-(12,12)) - │ ├── flags: newline - │ ├── lefts: (length: 2) - │ │ ├── @ LocalVariableTargetNode (location: (12,1)-(12,2)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :a - │ │ │ └── depth: 0 - │ │ └── @ LocalVariableTargetNode (location: (12,4)-(12,5)) - │ │ ├── flags: ∅ - │ │ ├── name: :b - │ │ └── depth: 0 - │ ├── rest: ∅ - │ ├── rights: (length: 0) - │ ├── lparen_loc: (12,0)-(12,1) = "(" - │ ├── rparen_loc: (12,5)-(12,6) = ")" - │ ├── operator_loc: (12,7)-(12,8) = "=" - │ └── value: - │ @ LocalVariableReadNode (location: (12,9)-(12,12)) - │ ├── flags: ∅ - │ ├── name: :foo - │ └── depth: 0 - ├── @ MultiWriteNode (location: (13,0)-(13,10)) - │ ├── flags: newline - │ ├── lefts: (length: 1) - │ │ └── @ LocalVariableTargetNode (location: (13,1)-(13,2)) - │ │ ├── flags: ∅ - │ │ ├── name: :a - │ │ └── depth: 0 - │ ├── rest: - │ │ @ ImplicitRestNode (location: (13,2)-(13,3)) - │ │ └── flags: ∅ - │ ├── rights: (length: 0) - │ ├── lparen_loc: (13,0)-(13,1) = "(" - │ ├── rparen_loc: (13,3)-(13,4) = ")" - │ ├── operator_loc: (13,5)-(13,6) = "=" - │ └── value: - │ @ LocalVariableReadNode (location: (13,7)-(13,10)) - │ ├── flags: ∅ - │ ├── name: :foo - │ └── depth: 0 - ├── @ MultiWriteNode (location: (14,0)-(14,23)) - │ ├── flags: newline - │ ├── lefts: (length: 2) - │ │ ├── @ CallTargetNode (location: (14,1)-(14,6)) - │ │ │ ├── flags: ∅ - │ │ │ ├── receiver: - │ │ │ │ @ LocalVariableReadNode (location: (14,1)-(14,2)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :a - │ │ │ │ └── depth: 0 - │ │ │ ├── call_operator_loc: (14,2)-(14,3) = "." - │ │ │ ├── name: :foo= - │ │ │ └── message_loc: (14,3)-(14,6) = "foo" - │ │ └── @ CallTargetNode (location: (14,8)-(14,13)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ LocalVariableReadNode (location: (14,8)-(14,9)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :a - │ │ │ └── depth: 0 - │ │ ├── call_operator_loc: (14,9)-(14,10) = "." - │ │ ├── name: :bar= - │ │ └── message_loc: (14,10)-(14,13) = "bar" - │ ├── rest: ∅ - │ ├── rights: (length: 0) - │ ├── lparen_loc: (14,0)-(14,1) = "(" - │ ├── rparen_loc: (14,13)-(14,14) = ")" - │ ├── operator_loc: (14,15)-(14,16) = "=" - │ └── value: - │ @ ArrayNode (location: (14,17)-(14,23)) - │ ├── flags: static_literal - │ ├── elements: (length: 2) - │ │ ├── @ IntegerNode (location: (14,18)-(14,19)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── @ IntegerNode (location: (14,21)-(14,22)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── opening_loc: (14,17)-(14,18) = "[" - │ └── closing_loc: (14,22)-(14,23) = "]" - ├── @ MultiWriteNode (location: (15,0)-(15,24)) - │ ├── flags: newline - │ ├── lefts: (length: 2) - │ │ ├── @ IndexTargetNode (location: (15,1)-(15,8)) - │ │ │ ├── flags: attribute_write - │ │ │ ├── receiver: - │ │ │ │ @ LocalVariableReadNode (location: (15,1)-(15,2)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :a - │ │ │ │ └── depth: 0 - │ │ │ ├── opening_loc: (15,2)-(15,3) = "[" - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (15,3)-(15,7)) - │ │ │ │ ├── flags: contains_splat - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ SplatNode (location: (15,3)-(15,7)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── operator_loc: (15,3)-(15,4) = "*" - │ │ │ │ └── expression: - │ │ │ │ @ LocalVariableReadNode (location: (15,4)-(15,7)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :foo - │ │ │ │ └── depth: 0 - │ │ │ ├── closing_loc: (15,7)-(15,8) = "]" - │ │ │ └── block: ∅ - │ │ └── @ IndexTargetNode (location: (15,10)-(15,14)) - │ │ ├── flags: attribute_write - │ │ ├── receiver: - │ │ │ @ LocalVariableReadNode (location: (15,10)-(15,11)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :a - │ │ │ └── depth: 0 - │ │ ├── opening_loc: (15,11)-(15,12) = "[" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (15,12)-(15,13)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (15,12)-(15,13)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── closing_loc: (15,13)-(15,14) = "]" - │ │ └── block: ∅ - │ ├── rest: ∅ - │ ├── rights: (length: 0) - │ ├── lparen_loc: (15,0)-(15,1) = "(" - │ ├── rparen_loc: (15,14)-(15,15) = ")" - │ ├── operator_loc: (15,16)-(15,17) = "=" - │ └── value: - │ @ ArrayNode (location: (15,18)-(15,24)) - │ ├── flags: static_literal - │ ├── elements: (length: 2) - │ │ ├── @ IntegerNode (location: (15,19)-(15,20)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── @ IntegerNode (location: (15,22)-(15,23)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── opening_loc: (15,18)-(15,19) = "[" - │ └── closing_loc: (15,23)-(15,24) = "]" - ├── @ MultiWriteNode (location: (16,0)-(16,21)) - │ ├── flags: newline - │ ├── lefts: (length: 2) - │ │ ├── @ IndexTargetNode (location: (16,1)-(16,5)) - │ │ │ ├── flags: attribute_write - │ │ │ ├── receiver: - │ │ │ │ @ LocalVariableReadNode (location: (16,1)-(16,2)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :a - │ │ │ │ └── depth: 0 - │ │ │ ├── opening_loc: (16,2)-(16,3) = "[" - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (16,3)-(16,4)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ IntegerNode (location: (16,3)-(16,4)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 0 - │ │ │ ├── closing_loc: (16,4)-(16,5) = "]" - │ │ │ └── block: ∅ - │ │ └── @ IndexTargetNode (location: (16,7)-(16,11)) - │ │ ├── flags: attribute_write - │ │ ├── receiver: - │ │ │ @ LocalVariableReadNode (location: (16,7)-(16,8)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :a - │ │ │ └── depth: 0 - │ │ ├── opening_loc: (16,8)-(16,9) = "[" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (16,9)-(16,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (16,9)-(16,10)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── closing_loc: (16,10)-(16,11) = "]" - │ │ └── block: ∅ - │ ├── rest: ∅ - │ ├── rights: (length: 0) - │ ├── lparen_loc: (16,0)-(16,1) = "(" - │ ├── rparen_loc: (16,11)-(16,12) = ")" - │ ├── operator_loc: (16,13)-(16,14) = "=" - │ └── value: - │ @ ArrayNode (location: (16,15)-(16,21)) - │ ├── flags: static_literal - │ ├── elements: (length: 2) - │ │ ├── @ IntegerNode (location: (16,16)-(16,17)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── @ IntegerNode (location: (16,19)-(16,20)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── opening_loc: (16,15)-(16,16) = "[" - │ └── closing_loc: (16,20)-(16,21) = "]" - ├── @ MultiWriteNode (location: (17,0)-(17,12)) - │ ├── flags: newline - │ ├── lefts: (length: 0) - │ ├── rest: - │ │ @ SplatNode (location: (17,1)-(17,7)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (17,1)-(17,2) = "*" - │ │ └── expression: - │ │ @ CallTargetNode (location: (17,2)-(17,7)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ LocalVariableReadNode (location: (17,2)-(17,3)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :c - │ │ │ └── depth: 0 - │ │ ├── call_operator_loc: (17,3)-(17,4) = "." - │ │ ├── name: :foo= - │ │ └── message_loc: (17,4)-(17,7) = "foo" - │ ├── rights: (length: 0) - │ ├── lparen_loc: (17,0)-(17,1) = "(" - │ ├── rparen_loc: (17,7)-(17,8) = ")" - │ ├── operator_loc: (17,9)-(17,10) = "=" - │ └── value: - │ @ IntegerNode (location: (17,11)-(17,12)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── @ ConstantPathWriteNode (location: (18,0)-(18,13)) - │ ├── flags: newline - │ ├── target: - │ │ @ ConstantPathNode (location: (18,0)-(18,5)) - │ │ ├── flags: ∅ - │ │ ├── parent: ∅ - │ │ ├── name: :Foo - │ │ ├── delimiter_loc: (18,0)-(18,2) = "::" - │ │ └── name_loc: (18,2)-(18,5) = "Foo" - │ ├── operator_loc: (18,6)-(18,7) = "=" - │ └── value: - │ @ ConstantPathNode (location: (18,8)-(18,13)) - │ ├── flags: ∅ - │ ├── parent: ∅ - │ ├── name: :Bar - │ ├── delimiter_loc: (18,8)-(18,10) = "::" - │ └── name_loc: (18,10)-(18,13) = "Bar" - ├── @ ClassVariableWriteNode (location: (19,0)-(19,7)) - │ ├── flags: newline - │ ├── name: :@@a - │ ├── name_loc: (19,0)-(19,3) = "@@a" - │ ├── value: - │ │ @ IntegerNode (location: (19,6)-(19,7)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ └── operator_loc: (19,4)-(19,5) = "=" - ├── @ InstanceVariableWriteNode (location: (20,0)-(20,6)) - │ ├── flags: newline - │ ├── name: :@a - │ ├── name_loc: (20,0)-(20,2) = "@a" - │ ├── value: - │ │ @ IntegerNode (location: (20,5)-(20,6)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ └── operator_loc: (20,3)-(20,4) = "=" - ├── @ ConstantWriteNode (location: (21,0)-(21,9)) - │ ├── flags: newline - │ ├── name: :CONST - │ ├── name_loc: (21,0)-(21,5) = "CONST" - │ ├── value: - │ │ @ IntegerNode (location: (21,8)-(21,9)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ └── operator_loc: (21,6)-(21,7) = "=" - ├── @ ConstantPathWriteNode (location: (22,0)-(22,23)) - │ ├── flags: newline - │ ├── target: - │ │ @ ConstantPathNode (location: (22,0)-(22,19)) - │ │ ├── flags: ∅ - │ │ ├── parent: - │ │ │ @ ConstantPathNode (location: (22,0)-(22,12)) - │ │ │ ├── flags: ∅ - │ │ │ ├── parent: - │ │ │ │ @ ConstantReadNode (location: (22,0)-(22,4)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :Name - │ │ │ ├── name: :Spaced - │ │ │ ├── delimiter_loc: (22,4)-(22,6) = "::" - │ │ │ └── name_loc: (22,6)-(22,12) = "Spaced" - │ │ ├── name: :CONST - │ │ ├── delimiter_loc: (22,12)-(22,14) = "::" - │ │ └── name_loc: (22,14)-(22,19) = "CONST" - │ ├── operator_loc: (22,20)-(22,21) = "=" - │ └── value: - │ @ IntegerNode (location: (22,22)-(22,23)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── @ LocalVariableWriteNode (location: (23,0)-(23,16)) - │ ├── flags: newline - │ ├── name: :a - │ ├── depth: 0 - │ ├── name_loc: (23,0)-(23,1) = "a" - │ ├── value: - │ │ @ ParenthesesNode (location: (23,4)-(23,16)) - │ │ ├── flags: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (23,5)-(23,15)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ MultiWriteNode (location: (23,5)-(23,15)) - │ │ │ ├── flags: newline - │ │ │ ├── lefts: (length: 2) - │ │ │ │ ├── @ LocalVariableTargetNode (location: (23,6)-(23,7)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── name: :b - │ │ │ │ │ └── depth: 0 - │ │ │ │ └── @ LocalVariableTargetNode (location: (23,9)-(23,10)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :c - │ │ │ │ └── depth: 0 - │ │ │ ├── rest: ∅ - │ │ │ ├── rights: (length: 0) - │ │ │ ├── lparen_loc: (23,5)-(23,6) = "(" - │ │ │ ├── rparen_loc: (23,10)-(23,11) = ")" - │ │ │ ├── operator_loc: (23,12)-(23,13) = "=" - │ │ │ └── value: - │ │ │ @ IntegerNode (location: (23,14)-(23,15)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── opening_loc: (23,4)-(23,5) = "(" - │ │ └── closing_loc: (23,15)-(23,16) = ")" - │ └── operator_loc: (23,2)-(23,3) = "=" - ├── @ LocalVariableWriteNode (location: (24,0)-(24,5)) - │ ├── flags: newline - │ ├── name: :a - │ ├── depth: 0 - │ ├── name_loc: (24,0)-(24,1) = "a" - │ ├── value: - │ │ @ IntegerNode (location: (24,4)-(24,5)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ └── operator_loc: (24,2)-(24,3) = "=" - ├── @ LocalVariableWriteNode (location: (25,0)-(25,11)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── depth: 0 - │ ├── name_loc: (25,0)-(25,3) = "foo" - │ ├── value: - │ │ @ CallNode (location: (25,6)-(25,11)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (25,6)-(25,9) = "foo" - │ │ ├── opening_loc: (25,9)-(25,10) = "(" - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: (25,10)-(25,11) = ")" - │ │ └── block: ∅ - │ └── operator_loc: (25,4)-(25,5) = "=" - ├── @ CallNode (location: (26,0)-(26,9)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (26,0)-(26,3)) - │ │ ├── flags: ∅ - │ │ ├── name: :foo - │ │ └── depth: 0 - │ ├── call_operator_loc: (26,3)-(26,4) = "." - │ ├── name: :[]= - │ ├── message_loc: (26,4)-(26,7) = "[]=" - │ ├── opening_loc: (26,7)-(26,8) = "(" - │ ├── arguments: ∅ - │ ├── closing_loc: (26,8)-(26,9) = ")" - │ └── block: ∅ - ├── @ CallNode (location: (27,0)-(27,13)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (27,0)-(27,3)) - │ │ ├── flags: ∅ - │ │ ├── name: :foo - │ │ └── depth: 0 - │ ├── call_operator_loc: (27,3)-(27,4) = "." - │ ├── name: :[]= - │ ├── message_loc: (27,4)-(27,7) = "[]=" - │ ├── opening_loc: (27,7)-(27,8) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (27,8)-(27,12)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ IntegerNode (location: (27,8)-(27,9)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── @ IntegerNode (location: (27,11)-(27,12)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── closing_loc: (27,12)-(27,13) = ")" - │ └── block: ∅ - ├── @ CallNode (location: (28,0)-(28,11)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (28,0)-(28,3)) - │ │ ├── flags: ∅ - │ │ ├── name: :foo - │ │ └── depth: 0 - │ ├── call_operator_loc: (28,3)-(28,4) = "." - │ ├── name: :[]= - │ ├── message_loc: (28,4)-(28,7) = "[]=" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (28,7)-(28,11)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ TrueNode (location: (28,7)-(28,11)) - │ │ └── flags: static_literal - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (29,0)-(29,19)) - │ ├── flags: newline, attribute_write - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (29,0)-(29,3)) - │ │ ├── flags: ∅ - │ │ ├── name: :foo - │ │ └── depth: 0 - │ ├── call_operator_loc: ∅ - │ ├── name: :[]= - │ ├── message_loc: (29,3)-(29,11) = "[*index]" - │ ├── opening_loc: (29,3)-(29,4) = "[" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (29,4)-(29,19)) - │ │ ├── flags: contains_splat - │ │ └── arguments: (length: 2) - │ │ ├── @ SplatNode (location: (29,4)-(29,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (29,4)-(29,5) = "*" - │ │ │ └── expression: - │ │ │ @ CallNode (location: (29,5)-(29,10)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :index - │ │ │ ├── message_loc: (29,5)-(29,10) = "index" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── @ CallNode (location: (29,14)-(29,19)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :value - │ │ ├── message_loc: (29,14)-(29,19) = "value" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (29,10)-(29,11) = "]" - │ └── block: ∅ - ├── @ CallNode (location: (30,0)-(30,17)) - │ ├── flags: newline, attribute_write - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (30,0)-(30,3)) - │ │ ├── flags: ∅ - │ │ ├── name: :foo - │ │ └── depth: 0 - │ ├── call_operator_loc: ∅ - │ ├── name: :[]= - │ ├── message_loc: (30,3)-(30,9) = "[1..2]" - │ ├── opening_loc: (30,3)-(30,4) = "[" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (30,4)-(30,17)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ RangeNode (location: (30,4)-(30,8)) - │ │ │ ├── flags: static_literal - │ │ │ ├── left: - │ │ │ │ @ IntegerNode (location: (30,4)-(30,5)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ ├── right: - │ │ │ │ @ IntegerNode (location: (30,7)-(30,8)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 2 - │ │ │ └── operator_loc: (30,5)-(30,7) = ".." - │ │ └── @ CallNode (location: (30,12)-(30,17)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :value - │ │ ├── message_loc: (30,12)-(30,17) = "value" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (30,8)-(30,9) = "]" - │ └── block: ∅ - ├── @ CallNode (location: (31,0)-(31,9)) - │ ├── flags: newline, attribute_write - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (31,0)-(31,3)) - │ │ ├── flags: ∅ - │ │ ├── name: :foo - │ │ └── depth: 0 - │ ├── call_operator_loc: ∅ - │ ├── name: :[]= - │ ├── message_loc: (31,3)-(31,5) = "[]" - │ ├── opening_loc: (31,3)-(31,4) = "[" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (31,8)-(31,9)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (31,8)-(31,9)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── closing_loc: (31,4)-(31,5) = "]" - │ └── block: ∅ - ├── @ CallNode (location: (32,0)-(32,17)) - │ ├── flags: newline, attribute_write - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (32,0)-(32,3)) - │ │ ├── flags: ∅ - │ │ ├── name: :foo - │ │ └── depth: 0 - │ ├── call_operator_loc: ∅ - │ ├── name: :[]= - │ ├── message_loc: (32,3)-(32,9) = "[a, b]" - │ ├── opening_loc: (32,3)-(32,4) = "[" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (32,4)-(32,17)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 3) - │ │ ├── @ LocalVariableReadNode (location: (32,4)-(32,5)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :a - │ │ │ └── depth: 0 - │ │ ├── @ LocalVariableReadNode (location: (32,7)-(32,8)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :b - │ │ │ └── depth: 0 - │ │ └── @ CallNode (location: (32,12)-(32,17)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :value - │ │ ├── message_loc: (32,12)-(32,17) = "value" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (32,8)-(32,9) = "]" - │ └── block: ∅ - ├── @ CallNode (location: (33,0)-(33,18)) - │ ├── flags: newline, attribute_write - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (33,0)-(33,3)) - │ │ ├── flags: ∅ - │ │ ├── name: :foo - │ │ └── depth: 0 - │ ├── call_operator_loc: ∅ - │ ├── name: :[]= - │ ├── message_loc: (33,3)-(33,10) = "[index]" - │ ├── opening_loc: (33,3)-(33,4) = "[" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (33,4)-(33,18)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (33,4)-(33,9)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :index - │ │ │ ├── message_loc: (33,4)-(33,9) = "index" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── @ CallNode (location: (33,13)-(33,18)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :value - │ │ ├── message_loc: (33,13)-(33,18) = "value" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (33,9)-(33,10) = "]" - │ └── block: ∅ - ├── @ LocalVariableWriteNode (location: (34,0)-(34,7)) - │ ├── flags: newline - │ ├── name: :x - │ ├── depth: 0 - │ ├── name_loc: (34,0)-(34,1) = "x" - │ ├── value: - │ │ @ StringNode (location: (34,4)-(34,7)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (34,4)-(34,6) = "%(" - │ │ ├── content_loc: (34,6)-(34,6) = "" - │ │ ├── closing_loc: (34,6)-(34,7) = ")" - │ │ └── unescaped: "" - │ └── operator_loc: (34,2)-(34,3) = "=" - ├── @ CallNode (location: (35,0)-(35,7)) - │ ├── flags: newline, attribute_write - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (35,0)-(35,1)) - │ │ ├── flags: ∅ - │ │ ├── name: :x - │ │ └── depth: 0 - │ ├── call_operator_loc: (35,1)-(35,2) = "." - │ ├── name: :x= - │ ├── message_loc: (35,2)-(35,3) = "x" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (35,4)-(35,7)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ StringNode (location: (35,4)-(35,7)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (35,4)-(35,6) = "%(" - │ │ ├── content_loc: (35,6)-(35,6) = "" - │ │ ├── closing_loc: (35,6)-(35,7) = ")" - │ │ └── unescaped: "" - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (36,0)-(36,12)) - │ ├── flags: newline, attribute_write - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (36,0)-(36,1)) - │ │ ├── flags: ∅ - │ │ ├── name: :x - │ │ └── depth: 0 - │ ├── call_operator_loc: ∅ - │ ├── name: :[]= - │ ├── message_loc: (36,1)-(36,6) = "[%()]" - │ ├── opening_loc: (36,1)-(36,2) = "[" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (36,2)-(36,12)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ StringNode (location: (36,2)-(36,5)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (36,2)-(36,4) = "%(" - │ │ │ ├── content_loc: (36,4)-(36,4) = "" - │ │ │ ├── closing_loc: (36,4)-(36,5) = ")" - │ │ │ └── unescaped: "" - │ │ └── @ CallNode (location: (36,9)-(36,12)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (36,9)-(36,12) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (36,5)-(36,6) = "]" - │ └── block: ∅ - ├── @ IndexOrWriteNode (location: (37,0)-(37,14)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (37,0)-(37,1)) - │ │ ├── flags: ∅ - │ │ ├── name: :a - │ │ └── depth: 0 - │ ├── call_operator_loc: ∅ - │ ├── opening_loc: (37,1)-(37,2) = "[" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (37,2)-(37,5)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ StringNode (location: (37,2)-(37,5)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (37,2)-(37,4) = "%(" - │ │ ├── content_loc: (37,4)-(37,4) = "" - │ │ ├── closing_loc: (37,4)-(37,5) = ")" - │ │ └── unescaped: "" - │ ├── closing_loc: (37,5)-(37,6) = "]" - │ ├── block: ∅ - │ ├── operator_loc: (37,7)-(37,10) = "||=" - │ └── value: - │ @ CallNode (location: (37,11)-(37,14)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :bar - │ ├── message_loc: (37,11)-(37,14) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ InstanceVariableOrWriteNode (location: (38,0)-(38,10)) - │ ├── flags: newline - │ ├── name: :@a - │ ├── name_loc: (38,0)-(38,2) = "@a" - │ ├── operator_loc: (38,3)-(38,6) = "||=" - │ └── value: - │ @ StringNode (location: (38,7)-(38,10)) - │ ├── flags: ∅ - │ ├── opening_loc: (38,7)-(38,9) = "%(" - │ ├── content_loc: (38,9)-(38,9) = "" - │ ├── closing_loc: (38,9)-(38,10) = ")" - │ └── unescaped: "" - ├── @ LocalVariableWriteNode (location: (39,0)-(39,14)) - │ ├── flags: newline - │ ├── name: :x - │ ├── depth: 0 - │ ├── name_loc: (39,0)-(39,1) = "x" - │ ├── value: - │ │ @ InterpolatedStringNode (location: (39,4)-(39,14)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (39,4)-(39,14) = "<<-HEREDOC" - │ │ ├── parts: (length: 3) - │ │ │ ├── @ StringNode (location: (40,0)-(40,2)) - │ │ │ │ ├── flags: static_literal, frozen - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── content_loc: (40,0)-(40,2) = " " - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: " " - │ │ │ ├── @ EmbeddedStatementsNode (location: (40,2)-(40,5)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── opening_loc: (40,2)-(40,4) = "\#{" - │ │ │ │ ├── statements: ∅ - │ │ │ │ └── closing_loc: (40,4)-(40,5) = "}" - │ │ │ └── @ StringNode (location: (40,5)-(41,0)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (40,5)-(41,0) = "\n" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "\n" - │ │ └── closing_loc: (41,0)-(42,0) = "HEREDOC\n" - │ └── operator_loc: (39,2)-(39,3) = "=" - ├── @ CallNode (location: (42,0)-(42,14)) - │ ├── flags: newline, attribute_write - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (42,0)-(42,1)) - │ │ ├── flags: ∅ - │ │ ├── name: :x - │ │ └── depth: 0 - │ ├── call_operator_loc: (42,1)-(42,2) = "." - │ ├── name: :x= - │ ├── message_loc: (42,2)-(42,3) = "x" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (42,4)-(42,14)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ InterpolatedStringNode (location: (42,4)-(42,14)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (42,4)-(42,14) = "<<-HEREDOC" - │ │ ├── parts: (length: 3) - │ │ │ ├── @ StringNode (location: (43,0)-(43,2)) - │ │ │ │ ├── flags: static_literal, frozen - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── content_loc: (43,0)-(43,2) = " " - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: " " - │ │ │ ├── @ EmbeddedStatementsNode (location: (43,2)-(43,5)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── opening_loc: (43,2)-(43,4) = "\#{" - │ │ │ │ ├── statements: ∅ - │ │ │ │ └── closing_loc: (43,4)-(43,5) = "}" - │ │ │ └── @ StringNode (location: (43,5)-(44,0)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (43,5)-(44,0) = "\n" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "\n" - │ │ └── closing_loc: (44,0)-(45,0) = "HEREDOC\n" - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (45,0)-(45,16)) - │ ├── flags: newline, attribute_write - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (45,0)-(45,1)) - │ │ ├── flags: ∅ - │ │ ├── name: :x - │ │ └── depth: 0 - │ ├── call_operator_loc: ∅ - │ ├── name: :[]= - │ ├── message_loc: (45,1)-(45,3) = "[]" - │ ├── opening_loc: (45,1)-(45,2) = "[" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (45,6)-(45,16)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ InterpolatedStringNode (location: (45,6)-(45,16)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (45,6)-(45,16) = "<<-HEREDOC" - │ │ ├── parts: (length: 3) - │ │ │ ├── @ StringNode (location: (46,0)-(46,2)) - │ │ │ │ ├── flags: static_literal, frozen - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── content_loc: (46,0)-(46,2) = " " - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: " " - │ │ │ ├── @ EmbeddedStatementsNode (location: (46,2)-(46,5)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── opening_loc: (46,2)-(46,4) = "\#{" - │ │ │ │ ├── statements: ∅ - │ │ │ │ └── closing_loc: (46,4)-(46,5) = "}" - │ │ │ └── @ StringNode (location: (46,5)-(47,0)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (46,5)-(47,0) = "\n" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "\n" - │ │ └── closing_loc: (47,0)-(48,0) = "HEREDOC\n" - │ ├── closing_loc: (45,2)-(45,3) = "]" - │ └── block: ∅ - ├── @ IndexOrWriteNode (location: (48,0)-(48,21)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (48,0)-(48,1)) - │ │ ├── flags: ∅ - │ │ ├── name: :a - │ │ └── depth: 0 - │ ├── call_operator_loc: ∅ - │ ├── opening_loc: (48,1)-(48,2) = "[" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (48,2)-(48,12)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ InterpolatedStringNode (location: (48,2)-(48,12)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (48,2)-(48,12) = "<<-HEREDOC" - │ │ ├── parts: (length: 3) - │ │ │ ├── @ StringNode (location: (49,0)-(49,2)) - │ │ │ │ ├── flags: static_literal, frozen - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── content_loc: (49,0)-(49,2) = " " - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: " " - │ │ │ ├── @ EmbeddedStatementsNode (location: (49,2)-(49,5)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── opening_loc: (49,2)-(49,4) = "\#{" - │ │ │ │ ├── statements: ∅ - │ │ │ │ └── closing_loc: (49,4)-(49,5) = "}" - │ │ │ └── @ StringNode (location: (49,5)-(50,0)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (49,5)-(50,0) = "\n" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "\n" - │ │ └── closing_loc: (50,0)-(51,0) = "HEREDOC\n" - │ ├── closing_loc: (48,12)-(48,13) = "]" - │ ├── block: ∅ - │ ├── operator_loc: (48,14)-(48,17) = "||=" - │ └── value: - │ @ CallNode (location: (48,18)-(48,21)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :bar - │ ├── message_loc: (48,18)-(48,21) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── @ InstanceVariableOrWriteNode (location: (51,0)-(51,17)) - ├── flags: newline - ├── name: :@a - ├── name_loc: (51,0)-(51,2) = "@a" - ├── operator_loc: (51,3)-(51,6) = "||=" - └── value: - @ InterpolatedStringNode (location: (51,7)-(51,17)) - ├── flags: ∅ - ├── opening_loc: (51,7)-(51,17) = "<<-HEREDOC" - ├── parts: (length: 3) - │ ├── @ StringNode (location: (52,0)-(52,2)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (52,0)-(52,2) = " " - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: " " - │ ├── @ EmbeddedStatementsNode (location: (52,2)-(52,5)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (52,2)-(52,4) = "\#{" - │ │ ├── statements: ∅ - │ │ └── closing_loc: (52,4)-(52,5) = "}" - │ └── @ StringNode (location: (52,5)-(53,0)) - │ ├── flags: static_literal, frozen - │ ├── opening_loc: ∅ - │ ├── content_loc: (52,5)-(53,0) = "\n" - │ ├── closing_loc: ∅ - │ └── unescaped: "\n" - └── closing_loc: (53,0)-(54,0) = "HEREDOC\n" diff --git a/test/prism/snapshots/unparser/corpus/literal/block.txt b/test/prism/snapshots/unparser/corpus/literal/block.txt deleted file mode 100644 index 4320ede87b64ca..00000000000000 --- a/test/prism/snapshots/unparser/corpus/literal/block.txt +++ /dev/null @@ -1,1541 +0,0 @@ -@ ProgramNode (location: (1,0)-(96,1)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(96,1)) - ├── flags: ∅ - └── body: (length: 30) - ├── @ CallNode (location: (1,0)-(2,1)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (1,0)-(1,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (1,4)-(2,1)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (1,4)-(1,5) = "{" - │ └── closing_loc: (2,0)-(2,1) = "}" - ├── @ CallNode (location: (3,0)-(4,1)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (3,0)-(3,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (3,4)-(4,1)) - │ ├── flags: ∅ - │ ├── locals: [:a] - │ ├── parameters: - │ │ @ BlockParametersNode (location: (3,6)-(3,9)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (3,7)-(3,8)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (3,7)-(3,8)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :a - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: (3,6)-(3,7) = "|" - │ │ └── closing_loc: (3,8)-(3,9) = "|" - │ ├── body: ∅ - │ ├── opening_loc: (3,4)-(3,5) = "{" - │ └── closing_loc: (4,0)-(4,1) = "}" - ├── @ CallNode (location: (5,0)-(6,1)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (5,0)-(5,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (5,4)-(6,1)) - │ ├── flags: ∅ - │ ├── locals: [:a] - │ ├── parameters: - │ │ @ BlockParametersNode (location: (5,6)-(5,10)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (5,7)-(5,9)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (5,7)-(5,8)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :a - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: - │ │ │ │ @ ImplicitRestNode (location: (5,8)-(5,9)) - │ │ │ │ └── flags: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: (5,6)-(5,7) = "|" - │ │ └── closing_loc: (5,9)-(5,10) = "|" - │ ├── body: ∅ - │ ├── opening_loc: (5,4)-(5,5) = "{" - │ └── closing_loc: (6,0)-(6,1) = "}" - ├── @ CallNode (location: (7,0)-(8,1)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (7,0)-(7,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (7,4)-(8,1)) - │ ├── flags: ∅ - │ ├── locals: [:a, :x] - │ ├── parameters: - │ │ @ BlockParametersNode (location: (7,6)-(7,13)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (7,7)-(7,9)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (7,7)-(7,8)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :a - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: - │ │ │ │ @ ImplicitRestNode (location: (7,8)-(7,9)) - │ │ │ │ └── flags: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 1) - │ │ │ └── @ BlockLocalVariableNode (location: (7,11)-(7,12)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :x - │ │ ├── opening_loc: (7,6)-(7,7) = "|" - │ │ └── closing_loc: (7,12)-(7,13) = "|" - │ ├── body: ∅ - │ ├── opening_loc: (7,4)-(7,5) = "{" - │ └── closing_loc: (8,0)-(8,1) = "}" - ├── @ CallNode (location: (9,0)-(10,1)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (9,0)-(9,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (9,4)-(10,1)) - │ ├── flags: ∅ - │ ├── locals: [:a, :b] - │ ├── parameters: - │ │ @ BlockParametersNode (location: (9,6)-(9,12)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (9,7)-(9,11)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 2) - │ │ │ │ ├── @ RequiredParameterNode (location: (9,7)-(9,8)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── name: :a - │ │ │ │ └── @ RequiredParameterNode (location: (9,10)-(9,11)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :b - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: (9,6)-(9,7) = "|" - │ │ └── closing_loc: (9,11)-(9,12) = "|" - │ ├── body: ∅ - │ ├── opening_loc: (9,4)-(9,5) = "{" - │ └── closing_loc: (10,0)-(10,1) = "}" - ├── @ CallNode (location: (11,0)-(13,1)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (11,0)-(11,3) = "foo" - │ ├── opening_loc: (11,3)-(11,4) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (11,4)-(11,5)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (11,4)-(11,5)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── closing_loc: (11,5)-(11,6) = ")" - │ └── block: - │ @ BlockNode (location: (11,7)-(13,1)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (12,2)-(12,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ NilNode (location: (12,2)-(12,5)) - │ │ └── flags: newline, static_literal - │ ├── opening_loc: (11,7)-(11,8) = "{" - │ └── closing_loc: (13,0)-(13,1) = "}" - ├── @ CallNode (location: (14,0)-(16,1)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (14,0)-(14,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (14,4)-(16,1)) - │ ├── flags: ∅ - │ ├── locals: [:a, :b] - │ ├── parameters: - │ │ @ BlockParametersNode (location: (14,6)-(14,13)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (14,7)-(14,12)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (14,7)-(14,8)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :a - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: - │ │ │ │ @ RestParameterNode (location: (14,10)-(14,12)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :b - │ │ │ │ ├── name_loc: (14,11)-(14,12) = "b" - │ │ │ │ └── operator_loc: (14,10)-(14,11) = "*" - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: (14,6)-(14,7) = "|" - │ │ └── closing_loc: (14,12)-(14,13) = "|" - │ ├── body: - │ │ @ StatementsNode (location: (15,2)-(15,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ NilNode (location: (15,2)-(15,5)) - │ │ └── flags: newline, static_literal - │ ├── opening_loc: (14,4)-(14,5) = "{" - │ └── closing_loc: (16,0)-(16,1) = "}" - ├── @ CallNode (location: (17,0)-(19,1)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (17,0)-(17,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (17,4)-(19,1)) - │ ├── flags: ∅ - │ ├── locals: [:a] - │ ├── parameters: - │ │ @ BlockParametersNode (location: (17,6)-(17,12)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (17,7)-(17,11)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (17,7)-(17,8)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :a - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: - │ │ │ │ @ RestParameterNode (location: (17,10)-(17,11)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: ∅ - │ │ │ │ ├── name_loc: ∅ - │ │ │ │ └── operator_loc: (17,10)-(17,11) = "*" - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: (17,6)-(17,7) = "|" - │ │ └── closing_loc: (17,11)-(17,12) = "|" - │ ├── body: - │ │ @ StatementsNode (location: (18,2)-(18,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ NilNode (location: (18,2)-(18,5)) - │ │ └── flags: newline, static_literal - │ ├── opening_loc: (17,4)-(17,5) = "{" - │ └── closing_loc: (19,0)-(19,1) = "}" - ├── @ CallNode (location: (20,0)-(22,1)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (20,0)-(20,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (20,4)-(22,1)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (21,2)-(21,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (21,2)-(21,5)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (21,2)-(21,5) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── opening_loc: (20,4)-(20,5) = "{" - │ └── closing_loc: (22,0)-(22,1) = "}" - ├── @ CallNode (location: (23,0)-(25,1)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (23,0)-(23,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (23,0)-(23,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (23,3)-(23,4) = "." - │ ├── name: :bar - │ ├── message_loc: (23,4)-(23,7) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (23,8)-(25,1)) - │ ├── flags: ∅ - │ ├── locals: [:a, :b, :c] - │ ├── parameters: - │ │ @ BlockParametersNode (location: (23,10)-(23,21)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (23,11)-(23,20)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 2) - │ │ │ │ ├── @ MultiTargetNode (location: (23,11)-(23,17)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── lefts: (length: 2) - │ │ │ │ │ │ ├── @ RequiredParameterNode (location: (23,12)-(23,13)) - │ │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ │ └── name: :a - │ │ │ │ │ │ └── @ RequiredParameterNode (location: (23,15)-(23,16)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ └── name: :b - │ │ │ │ │ ├── rest: ∅ - │ │ │ │ │ ├── rights: (length: 0) - │ │ │ │ │ ├── lparen_loc: (23,11)-(23,12) = "(" - │ │ │ │ │ └── rparen_loc: (23,16)-(23,17) = ")" - │ │ │ │ └── @ RequiredParameterNode (location: (23,19)-(23,20)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :c - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: (23,10)-(23,11) = "|" - │ │ └── closing_loc: (23,20)-(23,21) = "|" - │ ├── body: - │ │ @ StatementsNode (location: (24,2)-(24,3)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (24,2)-(24,3)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :d - │ │ ├── message_loc: (24,2)-(24,3) = "d" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── opening_loc: (23,8)-(23,9) = "{" - │ └── closing_loc: (25,0)-(25,1) = "}" - ├── @ CallNode (location: (26,0)-(27,1)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (26,0)-(26,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (26,0)-(26,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (26,3)-(26,4) = "." - │ ├── name: :bar - │ ├── message_loc: (26,4)-(26,7) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (26,8)-(27,1)) - │ ├── flags: ∅ - │ ├── locals: [:a, :b] - │ ├── parameters: - │ │ @ BlockParametersNode (location: (26,10)-(26,17)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (26,11)-(26,13)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 0) - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: - │ │ │ │ @ RestParameterNode (location: (26,11)-(26,13)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :a - │ │ │ │ ├── name_loc: (26,12)-(26,13) = "a" - │ │ │ │ └── operator_loc: (26,11)-(26,12) = "*" - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 1) - │ │ │ └── @ BlockLocalVariableNode (location: (26,15)-(26,16)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :b - │ │ ├── opening_loc: (26,10)-(26,11) = "|" - │ │ └── closing_loc: (26,16)-(26,17) = "|" - │ ├── body: ∅ - │ ├── opening_loc: (26,8)-(26,9) = "{" - │ └── closing_loc: (27,0)-(27,1) = "}" - ├── @ CallNode (location: (28,0)-(29,1)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (28,0)-(28,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (28,0)-(28,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (28,3)-(28,4) = "." - │ ├── name: :bar - │ ├── message_loc: (28,4)-(28,7) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (28,8)-(29,1)) - │ ├── flags: ∅ - │ ├── locals: [:a, :b] - │ ├── parameters: - │ │ @ BlockParametersNode (location: (28,10)-(28,16)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (28,11)-(28,12)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (28,11)-(28,12)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :a - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 1) - │ │ │ └── @ BlockLocalVariableNode (location: (28,14)-(28,15)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :b - │ │ ├── opening_loc: (28,10)-(28,11) = "|" - │ │ └── closing_loc: (28,15)-(28,16) = "|" - │ ├── body: ∅ - │ ├── opening_loc: (28,8)-(28,9) = "{" - │ └── closing_loc: (29,0)-(29,1) = "}" - ├── @ CallNode (location: (30,0)-(31,1)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (30,0)-(30,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (30,0)-(30,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (30,3)-(30,4) = "." - │ ├── name: :bar - │ ├── message_loc: (30,4)-(30,7) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (30,8)-(31,1)) - │ ├── flags: ∅ - │ ├── locals: [:a, :b] - │ ├── parameters: - │ │ @ BlockParametersNode (location: (30,10)-(30,18)) - │ │ ├── flags: ∅ - │ │ ├── parameters: ∅ - │ │ ├── locals: (length: 2) - │ │ │ ├── @ BlockLocalVariableNode (location: (30,13)-(30,14)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :a - │ │ │ └── @ BlockLocalVariableNode (location: (30,16)-(30,17)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :b - │ │ ├── opening_loc: (30,10)-(30,11) = "|" - │ │ └── closing_loc: (30,17)-(30,18) = "|" - │ ├── body: ∅ - │ ├── opening_loc: (30,8)-(30,9) = "{" - │ └── closing_loc: (31,0)-(31,1) = "}" - ├── @ CallNode (location: (32,0)-(34,1)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (32,0)-(32,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (32,0)-(32,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (32,3)-(32,4) = "." - │ ├── name: :bar - │ ├── message_loc: (32,4)-(32,7) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (32,8)-(34,1)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: - │ │ @ BlockParametersNode (location: (32,10)-(32,13)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (32,11)-(32,12)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 0) - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: - │ │ │ │ @ RestParameterNode (location: (32,11)-(32,12)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: ∅ - │ │ │ │ ├── name_loc: ∅ - │ │ │ │ └── operator_loc: (32,11)-(32,12) = "*" - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: (32,10)-(32,11) = "|" - │ │ └── closing_loc: (32,12)-(32,13) = "|" - │ ├── body: - │ │ @ StatementsNode (location: (33,2)-(33,3)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (33,2)-(33,3)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :d - │ │ ├── message_loc: (33,2)-(33,3) = "d" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── opening_loc: (32,8)-(32,9) = "{" - │ └── closing_loc: (34,0)-(34,1) = "}" - ├── @ CallNode (location: (35,0)-(37,1)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (35,0)-(35,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (35,0)-(35,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (35,3)-(35,4) = "." - │ ├── name: :bar - │ ├── message_loc: (35,4)-(35,7) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (35,8)-(37,1)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: - │ │ @ BlockParametersNode (location: (35,10)-(35,15)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (35,11)-(35,14)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 1) - │ │ │ │ └── @ MultiTargetNode (location: (35,11)-(35,14)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── lefts: (length: 0) - │ │ │ │ ├── rest: - │ │ │ │ │ @ SplatNode (location: (35,12)-(35,13)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── operator_loc: (35,12)-(35,13) = "*" - │ │ │ │ │ └── expression: ∅ - │ │ │ │ ├── rights: (length: 0) - │ │ │ │ ├── lparen_loc: (35,11)-(35,12) = "(" - │ │ │ │ └── rparen_loc: (35,13)-(35,14) = ")" - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: (35,10)-(35,11) = "|" - │ │ └── closing_loc: (35,14)-(35,15) = "|" - │ ├── body: - │ │ @ StatementsNode (location: (36,2)-(36,3)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (36,2)-(36,3)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :d - │ │ ├── message_loc: (36,2)-(36,3) = "d" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── opening_loc: (35,8)-(35,9) = "{" - │ └── closing_loc: (37,0)-(37,1) = "}" - ├── @ CallNode (location: (38,0)-(40,1)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (38,0)-(38,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (38,0)-(38,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (38,3)-(38,4) = "." - │ ├── name: :bar - │ ├── message_loc: (38,4)-(38,7) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (38,8)-(40,1)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: - │ │ @ BlockParametersNode (location: (38,10)-(38,17)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (38,11)-(38,16)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 1) - │ │ │ │ └── @ MultiTargetNode (location: (38,11)-(38,16)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── lefts: (length: 1) - │ │ │ │ │ └── @ MultiTargetNode (location: (38,12)-(38,15)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── lefts: (length: 0) - │ │ │ │ │ ├── rest: - │ │ │ │ │ │ @ SplatNode (location: (38,13)-(38,14)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ ├── operator_loc: (38,13)-(38,14) = "*" - │ │ │ │ │ │ └── expression: ∅ - │ │ │ │ │ ├── rights: (length: 0) - │ │ │ │ │ ├── lparen_loc: (38,12)-(38,13) = "(" - │ │ │ │ │ └── rparen_loc: (38,14)-(38,15) = ")" - │ │ │ │ ├── rest: ∅ - │ │ │ │ ├── rights: (length: 0) - │ │ │ │ ├── lparen_loc: (38,11)-(38,12) = "(" - │ │ │ │ └── rparen_loc: (38,15)-(38,16) = ")" - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: (38,10)-(38,11) = "|" - │ │ └── closing_loc: (38,16)-(38,17) = "|" - │ ├── body: - │ │ @ StatementsNode (location: (39,2)-(39,3)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (39,2)-(39,3)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :d - │ │ ├── message_loc: (39,2)-(39,3) = "d" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── opening_loc: (38,8)-(38,9) = "{" - │ └── closing_loc: (40,0)-(40,1) = "}" - ├── @ CallNode (location: (41,0)-(43,1)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (41,0)-(41,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (41,0)-(41,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (41,3)-(41,4) = "." - │ ├── name: :bar - │ ├── message_loc: (41,4)-(41,7) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (41,8)-(43,1)) - │ ├── flags: ∅ - │ ├── locals: [:a] - │ ├── parameters: - │ │ @ BlockParametersNode (location: (41,10)-(41,20)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (41,11)-(41,19)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 1) - │ │ │ │ └── @ MultiTargetNode (location: (41,11)-(41,19)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── lefts: (length: 2) - │ │ │ │ │ ├── @ RequiredParameterNode (location: (41,12)-(41,13)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ └── name: :a - │ │ │ │ │ └── @ MultiTargetNode (location: (41,15)-(41,18)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── lefts: (length: 0) - │ │ │ │ │ ├── rest: - │ │ │ │ │ │ @ SplatNode (location: (41,16)-(41,17)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ ├── operator_loc: (41,16)-(41,17) = "*" - │ │ │ │ │ │ └── expression: ∅ - │ │ │ │ │ ├── rights: (length: 0) - │ │ │ │ │ ├── lparen_loc: (41,15)-(41,16) = "(" - │ │ │ │ │ └── rparen_loc: (41,17)-(41,18) = ")" - │ │ │ │ ├── rest: ∅ - │ │ │ │ ├── rights: (length: 0) - │ │ │ │ ├── lparen_loc: (41,11)-(41,12) = "(" - │ │ │ │ └── rparen_loc: (41,18)-(41,19) = ")" - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: (41,10)-(41,11) = "|" - │ │ └── closing_loc: (41,19)-(41,20) = "|" - │ ├── body: - │ │ @ StatementsNode (location: (42,2)-(42,3)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (42,2)-(42,3)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :d - │ │ ├── message_loc: (42,2)-(42,3) = "d" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── opening_loc: (41,8)-(41,9) = "{" - │ └── closing_loc: (43,0)-(43,1) = "}" - ├── @ CallNode (location: (44,0)-(46,1)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (44,0)-(44,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (44,0)-(44,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (44,3)-(44,4) = "." - │ ├── name: :bar - │ ├── message_loc: (44,4)-(44,7) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (44,8)-(46,1)) - │ ├── flags: ∅ - │ ├── locals: [:a, :b] - │ ├── parameters: - │ │ @ BlockParametersNode (location: (44,10)-(44,18)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (44,11)-(44,17)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 1) - │ │ │ │ └── @ MultiTargetNode (location: (44,11)-(44,17)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── lefts: (length: 2) - │ │ │ │ │ ├── @ RequiredParameterNode (location: (44,12)-(44,13)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ └── name: :a - │ │ │ │ │ └── @ RequiredParameterNode (location: (44,15)-(44,16)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── name: :b - │ │ │ │ ├── rest: ∅ - │ │ │ │ ├── rights: (length: 0) - │ │ │ │ ├── lparen_loc: (44,11)-(44,12) = "(" - │ │ │ │ └── rparen_loc: (44,16)-(44,17) = ")" - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: (44,10)-(44,11) = "|" - │ │ └── closing_loc: (44,17)-(44,18) = "|" - │ ├── body: - │ │ @ StatementsNode (location: (45,2)-(45,3)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (45,2)-(45,3)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :d - │ │ ├── message_loc: (45,2)-(45,3) = "d" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── opening_loc: (44,8)-(44,9) = "{" - │ └── closing_loc: (46,0)-(46,1) = "}" - ├── @ CallNode (location: (47,0)-(48,5)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (47,0)-(48,1)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ CallNode (location: (47,0)-(47,3)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (47,0)-(47,3) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: (47,3)-(47,4) = "." - │ │ ├── name: :bar - │ │ ├── message_loc: (47,4)-(47,7) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: - │ │ @ BlockNode (location: (47,8)-(48,1)) - │ │ ├── flags: ∅ - │ │ ├── locals: [] - │ │ ├── parameters: ∅ - │ │ ├── body: ∅ - │ │ ├── opening_loc: (47,8)-(47,9) = "{" - │ │ └── closing_loc: (48,0)-(48,1) = "}" - │ ├── call_operator_loc: (48,1)-(48,2) = "." - │ ├── name: :baz - │ ├── message_loc: (48,2)-(48,5) = "baz" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (49,0)-(51,3)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :m - │ ├── message_loc: (49,0)-(49,1) = "m" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (49,2)-(51,3)) - │ ├── flags: ∅ - │ ├── locals: [:e] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ BeginNode (location: (49,2)-(51,3)) - │ │ ├── flags: ∅ - │ │ ├── begin_keyword_loc: ∅ - │ │ ├── statements: ∅ - │ │ ├── rescue_clause: - │ │ │ @ RescueNode (location: (50,0)-(50,21)) - │ │ │ ├── flags: ∅ - │ │ │ ├── keyword_loc: (50,0)-(50,6) = "rescue" - │ │ │ ├── exceptions: (length: 1) - │ │ │ │ └── @ ConstantReadNode (location: (50,7)-(50,16)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :Exception - │ │ │ ├── operator_loc: (50,17)-(50,19) = "=>" - │ │ │ ├── reference: - │ │ │ │ @ LocalVariableTargetNode (location: (50,20)-(50,21)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :e - │ │ │ │ └── depth: 0 - │ │ │ ├── statements: ∅ - │ │ │ └── subsequent: ∅ - │ │ ├── else_clause: ∅ - │ │ ├── ensure_clause: ∅ - │ │ └── end_keyword_loc: (51,0)-(51,3) = "end" - │ ├── opening_loc: (49,2)-(49,4) = "do" - │ └── closing_loc: (51,0)-(51,3) = "end" - ├── @ CallNode (location: (52,0)-(56,3)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :m - │ ├── message_loc: (52,0)-(52,1) = "m" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (52,2)-(56,3)) - │ ├── flags: ∅ - │ ├── locals: [:bar] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ BeginNode (location: (52,2)-(56,3)) - │ │ ├── flags: ∅ - │ │ ├── begin_keyword_loc: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (53,2)-(53,5)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (53,2)-(53,5)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (53,2)-(53,5) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── rescue_clause: - │ │ │ @ RescueNode (location: (54,0)-(55,5)) - │ │ │ ├── flags: ∅ - │ │ │ ├── keyword_loc: (54,0)-(54,6) = "rescue" - │ │ │ ├── exceptions: (length: 1) - │ │ │ │ └── @ ConstantReadNode (location: (54,7)-(54,16)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :Exception - │ │ │ ├── operator_loc: (54,17)-(54,19) = "=>" - │ │ │ ├── reference: - │ │ │ │ @ LocalVariableTargetNode (location: (54,20)-(54,23)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :bar - │ │ │ │ └── depth: 0 - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (55,2)-(55,5)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ LocalVariableReadNode (location: (55,2)-(55,5)) - │ │ │ │ ├── flags: newline - │ │ │ │ ├── name: :bar - │ │ │ │ └── depth: 0 - │ │ │ └── subsequent: ∅ - │ │ ├── else_clause: ∅ - │ │ ├── ensure_clause: ∅ - │ │ └── end_keyword_loc: (56,0)-(56,3) = "end" - │ ├── opening_loc: (52,2)-(52,4) = "do" - │ └── closing_loc: (56,0)-(56,3) = "end" - ├── @ CallNode (location: (57,0)-(61,3)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :m - │ ├── message_loc: (57,0)-(57,1) = "m" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (57,2)-(61,3)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ BeginNode (location: (57,2)-(61,3)) - │ │ ├── flags: ∅ - │ │ ├── begin_keyword_loc: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (58,2)-(58,5)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (58,2)-(58,5)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (58,2)-(58,5) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── rescue_clause: - │ │ │ @ RescueNode (location: (59,0)-(60,5)) - │ │ │ ├── flags: ∅ - │ │ │ ├── keyword_loc: (59,0)-(59,6) = "rescue" - │ │ │ ├── exceptions: (length: 2) - │ │ │ │ ├── @ ConstantReadNode (location: (59,7)-(59,16)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── name: :SomeError - │ │ │ │ └── @ SplatNode (location: (59,18)-(59,22)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── operator_loc: (59,18)-(59,19) = "*" - │ │ │ │ └── expression: - │ │ │ │ @ CallNode (location: (59,19)-(59,22)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :bar - │ │ │ │ ├── message_loc: (59,19)-(59,22) = "bar" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── operator_loc: ∅ - │ │ │ ├── reference: ∅ - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (60,2)-(60,5)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (60,2)-(60,5)) - │ │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ ├── message_loc: (60,2)-(60,5) = "baz" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── subsequent: ∅ - │ │ ├── else_clause: ∅ - │ │ ├── ensure_clause: ∅ - │ │ └── end_keyword_loc: (61,0)-(61,3) = "end" - │ ├── opening_loc: (57,2)-(57,4) = "do" - │ └── closing_loc: (61,0)-(61,3) = "end" - ├── @ CallNode (location: (62,0)-(66,3)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :m - │ ├── message_loc: (62,0)-(62,1) = "m" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (62,2)-(66,3)) - │ ├── flags: ∅ - │ ├── locals: [:exception] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ BeginNode (location: (62,2)-(66,3)) - │ │ ├── flags: ∅ - │ │ ├── begin_keyword_loc: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (63,2)-(63,5)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (63,2)-(63,5)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (63,2)-(63,5) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── rescue_clause: - │ │ │ @ RescueNode (location: (64,0)-(65,5)) - │ │ │ ├── flags: ∅ - │ │ │ ├── keyword_loc: (64,0)-(64,6) = "rescue" - │ │ │ ├── exceptions: (length: 2) - │ │ │ │ ├── @ ConstantReadNode (location: (64,7)-(64,16)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── name: :SomeError - │ │ │ │ └── @ SplatNode (location: (64,18)-(64,22)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── operator_loc: (64,18)-(64,19) = "*" - │ │ │ │ └── expression: - │ │ │ │ @ CallNode (location: (64,19)-(64,22)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :bar - │ │ │ │ ├── message_loc: (64,19)-(64,22) = "bar" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── operator_loc: (64,23)-(64,25) = "=>" - │ │ │ ├── reference: - │ │ │ │ @ LocalVariableTargetNode (location: (64,26)-(64,35)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :exception - │ │ │ │ └── depth: 0 - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (65,2)-(65,5)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (65,2)-(65,5)) - │ │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ ├── message_loc: (65,2)-(65,5) = "baz" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── subsequent: ∅ - │ │ ├── else_clause: ∅ - │ │ ├── ensure_clause: ∅ - │ │ └── end_keyword_loc: (66,0)-(66,3) = "end" - │ ├── opening_loc: (62,2)-(62,4) = "do" - │ └── closing_loc: (66,0)-(66,3) = "end" - ├── @ CallNode (location: (67,0)-(71,3)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :m - │ ├── message_loc: (67,0)-(67,1) = "m" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (67,2)-(71,3)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ BeginNode (location: (67,2)-(71,3)) - │ │ ├── flags: ∅ - │ │ ├── begin_keyword_loc: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (68,2)-(68,5)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (68,2)-(68,5)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (68,2)-(68,5) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── rescue_clause: - │ │ │ @ RescueNode (location: (69,0)-(70,5)) - │ │ │ ├── flags: ∅ - │ │ │ ├── keyword_loc: (69,0)-(69,6) = "rescue" - │ │ │ ├── exceptions: (length: 1) - │ │ │ │ └── @ SplatNode (location: (69,7)-(69,11)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── operator_loc: (69,7)-(69,8) = "*" - │ │ │ │ └── expression: - │ │ │ │ @ CallNode (location: (69,8)-(69,11)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :bar - │ │ │ │ ├── message_loc: (69,8)-(69,11) = "bar" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── operator_loc: ∅ - │ │ │ ├── reference: ∅ - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (70,2)-(70,5)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (70,2)-(70,5)) - │ │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ ├── message_loc: (70,2)-(70,5) = "baz" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── subsequent: ∅ - │ │ ├── else_clause: ∅ - │ │ ├── ensure_clause: ∅ - │ │ └── end_keyword_loc: (71,0)-(71,3) = "end" - │ ├── opening_loc: (67,2)-(67,4) = "do" - │ └── closing_loc: (71,0)-(71,3) = "end" - ├── @ CallNode (location: (72,0)-(75,3)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :m - │ ├── message_loc: (72,0)-(72,1) = "m" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (72,2)-(75,3)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ BeginNode (location: (72,2)-(75,3)) - │ │ ├── flags: ∅ - │ │ ├── begin_keyword_loc: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (73,2)-(73,5)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (73,2)-(73,5)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (73,2)-(73,5) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── rescue_clause: - │ │ │ @ RescueNode (location: (74,0)-(74,16)) - │ │ │ ├── flags: ∅ - │ │ │ ├── keyword_loc: (74,0)-(74,6) = "rescue" - │ │ │ ├── exceptions: (length: 1) - │ │ │ │ └── @ ConstantReadNode (location: (74,7)-(74,16)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :LoadError - │ │ │ ├── operator_loc: ∅ - │ │ │ ├── reference: ∅ - │ │ │ ├── statements: ∅ - │ │ │ └── subsequent: ∅ - │ │ ├── else_clause: ∅ - │ │ ├── ensure_clause: ∅ - │ │ └── end_keyword_loc: (75,0)-(75,3) = "end" - │ ├── opening_loc: (72,2)-(72,4) = "do" - │ └── closing_loc: (75,0)-(75,3) = "end" - ├── @ CallNode (location: (76,0)-(81,3)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :m - │ ├── message_loc: (76,0)-(76,1) = "m" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (76,2)-(81,3)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ BeginNode (location: (76,2)-(81,3)) - │ │ ├── flags: ∅ - │ │ ├── begin_keyword_loc: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (77,2)-(77,5)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (77,2)-(77,5)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (77,2)-(77,5) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── rescue_clause: - │ │ │ @ RescueNode (location: (78,0)-(78,6)) - │ │ │ ├── flags: ∅ - │ │ │ ├── keyword_loc: (78,0)-(78,6) = "rescue" - │ │ │ ├── exceptions: (length: 0) - │ │ │ ├── operator_loc: ∅ - │ │ │ ├── reference: ∅ - │ │ │ ├── statements: ∅ - │ │ │ └── subsequent: ∅ - │ │ ├── else_clause: - │ │ │ @ ElseNode (location: (79,0)-(81,3)) - │ │ │ ├── flags: ∅ - │ │ │ ├── else_keyword_loc: (79,0)-(79,4) = "else" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (80,2)-(80,5)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (80,2)-(80,5)) - │ │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ ├── message_loc: (80,2)-(80,5) = "baz" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── end_keyword_loc: (81,0)-(81,3) = "end" - │ │ ├── ensure_clause: ∅ - │ │ └── end_keyword_loc: (81,0)-(81,3) = "end" - │ ├── opening_loc: (76,2)-(76,4) = "do" - │ └── closing_loc: (81,0)-(81,3) = "end" - ├── @ CallNode (location: (82,0)-(86,3)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :m - │ ├── message_loc: (82,0)-(82,1) = "m" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (82,2)-(86,3)) - │ ├── flags: ∅ - │ ├── locals: [:exception] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ BeginNode (location: (82,2)-(86,3)) - │ │ ├── flags: ∅ - │ │ ├── begin_keyword_loc: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (83,2)-(83,5)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (83,2)-(83,5)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (83,2)-(83,5) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── rescue_clause: - │ │ │ @ RescueNode (location: (84,0)-(85,5)) - │ │ │ ├── flags: ∅ - │ │ │ ├── keyword_loc: (84,0)-(84,6) = "rescue" - │ │ │ ├── exceptions: (length: 1) - │ │ │ │ └── @ SplatNode (location: (84,7)-(84,11)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── operator_loc: (84,7)-(84,8) = "*" - │ │ │ │ └── expression: - │ │ │ │ @ CallNode (location: (84,8)-(84,11)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :bar - │ │ │ │ ├── message_loc: (84,8)-(84,11) = "bar" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── operator_loc: (84,12)-(84,14) = "=>" - │ │ │ ├── reference: - │ │ │ │ @ LocalVariableTargetNode (location: (84,15)-(84,24)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :exception - │ │ │ │ └── depth: 0 - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (85,2)-(85,5)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (85,2)-(85,5)) - │ │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ ├── message_loc: (85,2)-(85,5) = "baz" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── subsequent: ∅ - │ │ ├── else_clause: ∅ - │ │ ├── ensure_clause: ∅ - │ │ └── end_keyword_loc: (86,0)-(86,3) = "end" - │ ├── opening_loc: (82,2)-(82,4) = "do" - │ └── closing_loc: (86,0)-(86,3) = "end" - ├── @ CallNode (location: (87,0)-(89,3)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :m - │ ├── message_loc: (87,0)-(87,1) = "m" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (87,2)-(89,3)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ BeginNode (location: (87,2)-(89,3)) - │ │ ├── flags: ∅ - │ │ ├── begin_keyword_loc: ∅ - │ │ ├── statements: ∅ - │ │ ├── rescue_clause: ∅ - │ │ ├── else_clause: ∅ - │ │ ├── ensure_clause: - │ │ │ @ EnsureNode (location: (88,0)-(89,3)) - │ │ │ ├── flags: ∅ - │ │ │ ├── ensure_keyword_loc: (88,0)-(88,6) = "ensure" - │ │ │ ├── statements: ∅ - │ │ │ └── end_keyword_loc: (89,0)-(89,3) = "end" - │ │ └── end_keyword_loc: (89,0)-(89,3) = "end" - │ ├── opening_loc: (87,2)-(87,4) = "do" - │ └── closing_loc: (89,0)-(89,3) = "end" - ├── @ CallNode (location: (90,0)-(93,3)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :m - │ ├── message_loc: (90,0)-(90,1) = "m" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (90,2)-(93,3)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ BeginNode (location: (90,2)-(93,3)) - │ │ ├── flags: ∅ - │ │ ├── begin_keyword_loc: ∅ - │ │ ├── statements: ∅ - │ │ ├── rescue_clause: - │ │ │ @ RescueNode (location: (91,0)-(91,6)) - │ │ │ ├── flags: ∅ - │ │ │ ├── keyword_loc: (91,0)-(91,6) = "rescue" - │ │ │ ├── exceptions: (length: 0) - │ │ │ ├── operator_loc: ∅ - │ │ │ ├── reference: ∅ - │ │ │ ├── statements: ∅ - │ │ │ └── subsequent: ∅ - │ │ ├── else_clause: ∅ - │ │ ├── ensure_clause: - │ │ │ @ EnsureNode (location: (92,0)-(93,3)) - │ │ │ ├── flags: ∅ - │ │ │ ├── ensure_keyword_loc: (92,0)-(92,6) = "ensure" - │ │ │ ├── statements: ∅ - │ │ │ └── end_keyword_loc: (93,0)-(93,3) = "end" - │ │ └── end_keyword_loc: (93,0)-(93,3) = "end" - │ ├── opening_loc: (90,2)-(90,4) = "do" - │ └── closing_loc: (93,0)-(93,3) = "end" - └── @ CallNode (location: (94,0)-(96,1)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :bar - ├── message_loc: (94,0)-(94,3) = "bar" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (94,4)-(96,1)) - ├── flags: ∅ - ├── locals: [:_1, :_2] - ├── parameters: - │ @ NumberedParametersNode (location: (94,4)-(96,1)) - │ ├── flags: ∅ - │ └── maximum: 2 - ├── body: - │ @ StatementsNode (location: (95,2)-(95,9)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (95,2)-(95,9)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (95,2)-(95,4)) - │ │ ├── flags: ∅ - │ │ ├── name: :_1 - │ │ └── depth: 0 - │ ├── call_operator_loc: ∅ - │ ├── name: :+ - │ ├── message_loc: (95,5)-(95,6) = "+" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (95,7)-(95,9)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ LocalVariableReadNode (location: (95,7)-(95,9)) - │ │ ├── flags: ∅ - │ │ ├── name: :_2 - │ │ └── depth: 0 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── opening_loc: (94,4)-(94,5) = "{" - └── closing_loc: (96,0)-(96,1) = "}" diff --git a/test/prism/snapshots/unparser/corpus/literal/case.txt b/test/prism/snapshots/unparser/corpus/literal/case.txt deleted file mode 100644 index 5e831cc6c3a1c0..00000000000000 --- a/test/prism/snapshots/unparser/corpus/literal/case.txt +++ /dev/null @@ -1,480 +0,0 @@ -@ ProgramNode (location: (1,0)-(37,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(37,3)) - ├── flags: ∅ - └── body: (length: 8) - ├── @ CaseNode (location: (1,0)-(6,3)) - │ ├── flags: newline - │ ├── predicate: ∅ - │ ├── conditions: (length: 2) - │ │ ├── @ WhenNode (location: (2,0)-(3,5)) - │ │ │ ├── flags: ∅ - │ │ │ ├── keyword_loc: (2,0)-(2,4) = "when" - │ │ │ ├── conditions: (length: 1) - │ │ │ │ └── @ CallNode (location: (2,5)-(2,8)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :bar - │ │ │ │ ├── message_loc: (2,5)-(2,8) = "bar" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── then_keyword_loc: ∅ - │ │ │ └── statements: - │ │ │ @ StatementsNode (location: (3,2)-(3,5)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (3,2)-(3,5)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :baz - │ │ │ ├── message_loc: (3,2)-(3,5) = "baz" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── @ WhenNode (location: (4,0)-(5,5)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (4,0)-(4,4) = "when" - │ │ ├── conditions: (length: 1) - │ │ │ └── @ CallNode (location: (4,5)-(4,8)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :baz - │ │ │ ├── message_loc: (4,5)-(4,8) = "baz" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── then_keyword_loc: ∅ - │ │ └── statements: - │ │ @ StatementsNode (location: (5,2)-(5,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (5,2)-(5,5)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (5,2)-(5,5) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (1,0)-(1,4) = "case" - │ └── end_keyword_loc: (6,0)-(6,3) = "end" - ├── @ CaseNode (location: (7,0)-(11,3)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (7,5)-(7,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (7,5)-(7,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 2) - │ │ ├── @ WhenNode (location: (8,0)-(8,8)) - │ │ │ ├── flags: ∅ - │ │ │ ├── keyword_loc: (8,0)-(8,4) = "when" - │ │ │ ├── conditions: (length: 1) - │ │ │ │ └── @ CallNode (location: (8,5)-(8,8)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :bar - │ │ │ │ ├── message_loc: (8,5)-(8,8) = "bar" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── then_keyword_loc: ∅ - │ │ │ └── statements: ∅ - │ │ └── @ WhenNode (location: (9,0)-(10,5)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (9,0)-(9,4) = "when" - │ │ ├── conditions: (length: 1) - │ │ │ └── @ CallNode (location: (9,5)-(9,8)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :baz - │ │ │ ├── message_loc: (9,5)-(9,8) = "baz" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── then_keyword_loc: ∅ - │ │ └── statements: - │ │ @ StatementsNode (location: (10,2)-(10,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (10,2)-(10,5)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (10,2)-(10,5) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (7,0)-(7,4) = "case" - │ └── end_keyword_loc: (11,0)-(11,3) = "end" - ├── @ CaseNode (location: (12,0)-(17,3)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (12,5)-(12,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (12,5)-(12,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 2) - │ │ ├── @ WhenNode (location: (13,0)-(14,5)) - │ │ │ ├── flags: ∅ - │ │ │ ├── keyword_loc: (13,0)-(13,4) = "when" - │ │ │ ├── conditions: (length: 1) - │ │ │ │ └── @ CallNode (location: (13,5)-(13,8)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :bar - │ │ │ │ ├── message_loc: (13,5)-(13,8) = "bar" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── then_keyword_loc: ∅ - │ │ │ └── statements: - │ │ │ @ StatementsNode (location: (14,2)-(14,5)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (14,2)-(14,5)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :baz - │ │ │ ├── message_loc: (14,2)-(14,5) = "baz" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── @ WhenNode (location: (15,0)-(16,5)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (15,0)-(15,4) = "when" - │ │ ├── conditions: (length: 1) - │ │ │ └── @ CallNode (location: (15,5)-(15,8)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :baz - │ │ │ ├── message_loc: (15,5)-(15,8) = "baz" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── then_keyword_loc: ∅ - │ │ └── statements: - │ │ @ StatementsNode (location: (16,2)-(16,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (16,2)-(16,5)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (16,2)-(16,5) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (12,0)-(12,4) = "case" - │ └── end_keyword_loc: (17,0)-(17,3) = "end" - ├── @ CaseNode (location: (18,0)-(21,3)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (18,5)-(18,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (18,5)-(18,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ WhenNode (location: (19,0)-(20,8)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (19,0)-(19,4) = "when" - │ │ ├── conditions: (length: 2) - │ │ │ ├── @ CallNode (location: (19,5)-(19,8)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :bar - │ │ │ │ ├── message_loc: (19,5)-(19,8) = "bar" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── @ CallNode (location: (19,10)-(19,13)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :baz - │ │ │ ├── message_loc: (19,10)-(19,13) = "baz" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── then_keyword_loc: ∅ - │ │ └── statements: - │ │ @ StatementsNode (location: (20,2)-(20,8)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ SymbolNode (location: (20,2)-(20,8)) - │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (20,2)-(20,3) = ":" - │ │ ├── value_loc: (20,3)-(20,8) = "other" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "other" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (18,0)-(18,4) = "case" - │ └── end_keyword_loc: (21,0)-(21,3) = "end" - ├── @ CaseNode (location: (22,0)-(25,3)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (22,5)-(22,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (22,5)-(22,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ WhenNode (location: (23,0)-(24,8)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (23,0)-(23,4) = "when" - │ │ ├── conditions: (length: 1) - │ │ │ └── @ SplatNode (location: (23,5)-(23,9)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (23,5)-(23,6) = "*" - │ │ │ └── expression: - │ │ │ @ CallNode (location: (23,6)-(23,9)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (23,6)-(23,9) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── then_keyword_loc: ∅ - │ │ └── statements: - │ │ @ StatementsNode (location: (24,2)-(24,8)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ SymbolNode (location: (24,2)-(24,8)) - │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (24,2)-(24,3) = ":" - │ │ ├── value_loc: (24,3)-(24,8) = "value" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "value" - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (22,0)-(22,4) = "case" - │ └── end_keyword_loc: (25,0)-(25,3) = "end" - ├── @ CaseNode (location: (26,0)-(31,3)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (26,5)-(26,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (26,5)-(26,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ WhenNode (location: (27,0)-(28,5)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (27,0)-(27,4) = "when" - │ │ ├── conditions: (length: 1) - │ │ │ └── @ CallNode (location: (27,5)-(27,8)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (27,5)-(27,8) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── then_keyword_loc: ∅ - │ │ └── statements: - │ │ @ StatementsNode (location: (28,2)-(28,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (28,2)-(28,5)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :baz - │ │ ├── message_loc: (28,2)-(28,5) = "baz" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── else_clause: - │ │ @ ElseNode (location: (29,0)-(31,3)) - │ │ ├── flags: ∅ - │ │ ├── else_keyword_loc: (29,0)-(29,4) = "else" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (30,2)-(30,6)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ SymbolNode (location: (30,2)-(30,6)) - │ │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (30,2)-(30,3) = ":" - │ │ │ ├── value_loc: (30,3)-(30,6) = "foo" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "foo" - │ │ └── end_keyword_loc: (31,0)-(31,3) = "end" - │ ├── case_keyword_loc: (26,0)-(26,4) = "case" - │ └── end_keyword_loc: (31,0)-(31,3) = "end" - ├── @ CaseNode (location: (32,0)-(34,3)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (32,5)-(32,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (32,5)-(32,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ WhenNode (location: (33,0)-(33,15)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (33,0)-(33,4) = "when" - │ │ ├── conditions: (length: 1) - │ │ │ └── @ SplatNode (location: (33,5)-(33,15)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (33,5)-(33,6) = "*" - │ │ │ └── expression: - │ │ │ @ CallNode (location: (33,6)-(33,15)) - │ │ │ ├── flags: ∅ - │ │ │ ├── receiver: - │ │ │ │ @ CallNode (location: (33,6)-(33,9)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :bar - │ │ │ │ ├── message_loc: (33,6)-(33,9) = "bar" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :| - │ │ │ ├── message_loc: (33,10)-(33,11) = "|" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (33,12)-(33,15)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ CallNode (location: (33,12)-(33,15)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ ├── message_loc: (33,12)-(33,15) = "baz" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── then_keyword_loc: ∅ - │ │ └── statements: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (32,0)-(32,4) = "case" - │ └── end_keyword_loc: (34,0)-(34,3) = "end" - └── @ CaseNode (location: (35,0)-(37,3)) - ├── flags: newline - ├── predicate: - │ @ CallNode (location: (35,5)-(35,8)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (35,5)-(35,8) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── conditions: (length: 1) - │ └── @ WhenNode (location: (36,0)-(36,15)) - │ ├── flags: ∅ - │ ├── keyword_loc: (36,0)-(36,4) = "when" - │ ├── conditions: (length: 1) - │ │ └── @ SplatNode (location: (36,5)-(36,15)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (36,5)-(36,6) = "*" - │ │ └── expression: - │ │ @ CallNode (location: (36,6)-(36,15)) - │ │ ├── flags: attribute_write - │ │ ├── receiver: - │ │ │ @ CallNode (location: (36,6)-(36,9)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (36,6)-(36,9) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: (36,9)-(36,10) = "." - │ │ ├── name: :baz= - │ │ ├── message_loc: (36,10)-(36,13) = "baz" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (36,14)-(36,15)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (36,14)-(36,15)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── then_keyword_loc: ∅ - │ └── statements: ∅ - ├── else_clause: ∅ - ├── case_keyword_loc: (35,0)-(35,4) = "case" - └── end_keyword_loc: (37,0)-(37,3) = "end" diff --git a/test/prism/snapshots/unparser/corpus/literal/class.txt b/test/prism/snapshots/unparser/corpus/literal/class.txt deleted file mode 100644 index add60ce30560a2..00000000000000 --- a/test/prism/snapshots/unparser/corpus/literal/class.txt +++ /dev/null @@ -1,260 +0,0 @@ -@ ProgramNode (location: (1,0)-(35,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(35,3)) - ├── flags: ∅ - └── body: (length: 10) - ├── @ ClassNode (location: (1,0)-(2,3)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── class_keyword_loc: (1,0)-(1,5) = "class" - │ ├── constant_path: - │ │ @ ConstantReadNode (location: (1,6)-(1,7)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── inheritance_operator_loc: ∅ - │ ├── superclass: ∅ - │ ├── body: ∅ - │ ├── end_keyword_loc: (2,0)-(2,3) = "end" - │ └── name: :A - ├── @ SingletonClassNode (location: (4,0)-(5,3)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── class_keyword_loc: (4,0)-(4,5) = "class" - │ ├── operator_loc: (4,6)-(4,8) = "<<" - │ ├── expression: - │ │ @ CallNode (location: (4,9)-(4,10)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (4,9)-(4,10) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ └── end_keyword_loc: (5,0)-(5,3) = "end" - ├── @ SingletonClassNode (location: (7,0)-(9,3)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── class_keyword_loc: (7,0)-(7,5) = "class" - │ ├── operator_loc: (7,6)-(7,8) = "<<" - │ ├── expression: - │ │ @ CallNode (location: (7,9)-(7,10)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (7,9)-(7,10) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (8,2)-(8,3)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (8,2)-(8,3)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :b - │ │ ├── message_loc: (8,2)-(8,3) = "b" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── end_keyword_loc: (9,0)-(9,3) = "end" - ├── @ ClassNode (location: (11,0)-(12,3)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── class_keyword_loc: (11,0)-(11,5) = "class" - │ ├── constant_path: - │ │ @ ConstantPathNode (location: (11,6)-(11,10)) - │ │ ├── flags: ∅ - │ │ ├── parent: - │ │ │ @ ConstantReadNode (location: (11,6)-(11,7)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :A - │ │ ├── name: :B - │ │ ├── delimiter_loc: (11,7)-(11,9) = "::" - │ │ └── name_loc: (11,9)-(11,10) = "B" - │ ├── inheritance_operator_loc: ∅ - │ ├── superclass: ∅ - │ ├── body: ∅ - │ ├── end_keyword_loc: (12,0)-(12,3) = "end" - │ └── name: :B - ├── @ ClassNode (location: (14,0)-(15,3)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── class_keyword_loc: (14,0)-(14,5) = "class" - │ ├── constant_path: - │ │ @ ConstantPathNode (location: (14,6)-(14,13)) - │ │ ├── flags: ∅ - │ │ ├── parent: - │ │ │ @ ConstantPathNode (location: (14,6)-(14,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── parent: - │ │ │ │ @ ConstantReadNode (location: (14,6)-(14,7)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :A - │ │ │ ├── name: :B - │ │ │ ├── delimiter_loc: (14,7)-(14,9) = "::" - │ │ │ └── name_loc: (14,9)-(14,10) = "B" - │ │ ├── name: :C - │ │ ├── delimiter_loc: (14,10)-(14,12) = "::" - │ │ └── name_loc: (14,12)-(14,13) = "C" - │ ├── inheritance_operator_loc: ∅ - │ ├── superclass: ∅ - │ ├── body: ∅ - │ ├── end_keyword_loc: (15,0)-(15,3) = "end" - │ └── name: :C - ├── @ ClassNode (location: (17,0)-(18,3)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── class_keyword_loc: (17,0)-(17,5) = "class" - │ ├── constant_path: - │ │ @ ConstantReadNode (location: (17,6)-(17,7)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── inheritance_operator_loc: (17,8)-(17,9) = "<" - │ ├── superclass: - │ │ @ ConstantReadNode (location: (17,10)-(17,11)) - │ │ ├── flags: ∅ - │ │ └── name: :B - │ ├── body: ∅ - │ ├── end_keyword_loc: (18,0)-(18,3) = "end" - │ └── name: :A - ├── @ ClassNode (location: (20,0)-(21,3)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── class_keyword_loc: (20,0)-(20,5) = "class" - │ ├── constant_path: - │ │ @ ConstantReadNode (location: (20,6)-(20,7)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── inheritance_operator_loc: (20,8)-(20,9) = "<" - │ ├── superclass: - │ │ @ ConstantPathNode (location: (20,10)-(20,14)) - │ │ ├── flags: ∅ - │ │ ├── parent: - │ │ │ @ ConstantReadNode (location: (20,10)-(20,11)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :B - │ │ ├── name: :C - │ │ ├── delimiter_loc: (20,11)-(20,13) = "::" - │ │ └── name_loc: (20,13)-(20,14) = "C" - │ ├── body: ∅ - │ ├── end_keyword_loc: (21,0)-(21,3) = "end" - │ └── name: :A - ├── @ ClassNode (location: (23,0)-(24,3)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── class_keyword_loc: (23,0)-(23,5) = "class" - │ ├── constant_path: - │ │ @ ConstantPathNode (location: (23,6)-(23,10)) - │ │ ├── flags: ∅ - │ │ ├── parent: - │ │ │ @ ConstantReadNode (location: (23,6)-(23,7)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :A - │ │ ├── name: :B - │ │ ├── delimiter_loc: (23,7)-(23,9) = "::" - │ │ └── name_loc: (23,9)-(23,10) = "B" - │ ├── inheritance_operator_loc: (23,11)-(23,12) = "<" - │ ├── superclass: - │ │ @ ConstantPathNode (location: (23,13)-(23,17)) - │ │ ├── flags: ∅ - │ │ ├── parent: - │ │ │ @ ConstantReadNode (location: (23,13)-(23,14)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :C - │ │ ├── name: :D - │ │ ├── delimiter_loc: (23,14)-(23,16) = "::" - │ │ └── name_loc: (23,16)-(23,17) = "D" - │ ├── body: ∅ - │ ├── end_keyword_loc: (24,0)-(24,3) = "end" - │ └── name: :B - ├── @ ClassNode (location: (26,0)-(32,3)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── class_keyword_loc: (26,0)-(26,5) = "class" - │ ├── constant_path: - │ │ @ ConstantReadNode (location: (26,6)-(26,7)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── inheritance_operator_loc: ∅ - │ ├── superclass: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (27,2)-(31,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 2) - │ │ ├── @ CallNode (location: (27,2)-(27,16)) - │ │ │ ├── flags: newline, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :include - │ │ │ ├── message_loc: (27,2)-(27,9) = "include" - │ │ │ ├── opening_loc: (27,9)-(27,10) = "(" - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (27,10)-(27,15)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ CallNode (location: (27,10)-(27,15)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── receiver: - │ │ │ │ │ @ ConstantReadNode (location: (27,10)-(27,11)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── name: :B - │ │ │ │ ├── call_operator_loc: (27,11)-(27,12) = "." - │ │ │ │ ├── name: :new - │ │ │ │ ├── message_loc: (27,12)-(27,15) = "new" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── closing_loc: (27,15)-(27,16) = ")" - │ │ │ └── block: ∅ - │ │ └── @ DefNode (location: (29,2)-(31,5)) - │ │ ├── flags: newline - │ │ ├── name: :foo - │ │ ├── name_loc: (29,6)-(29,9) = "foo" - │ │ ├── receiver: ∅ - │ │ ├── parameters: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (30,4)-(30,8)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ SymbolNode (location: (30,4)-(30,8)) - │ │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (30,4)-(30,5) = ":" - │ │ │ ├── value_loc: (30,5)-(30,8) = "bar" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "bar" - │ │ ├── locals: [] - │ │ ├── def_keyword_loc: (29,2)-(29,5) = "def" - │ │ ├── operator_loc: ∅ - │ │ ├── lparen_loc: ∅ - │ │ ├── rparen_loc: ∅ - │ │ ├── equal_loc: ∅ - │ │ └── end_keyword_loc: (31,2)-(31,5) = "end" - │ ├── end_keyword_loc: (32,0)-(32,3) = "end" - │ └── name: :A - └── @ ClassNode (location: (34,0)-(35,3)) - ├── flags: newline - ├── locals: [] - ├── class_keyword_loc: (34,0)-(34,5) = "class" - ├── constant_path: - │ @ ConstantPathNode (location: (34,6)-(34,9)) - │ ├── flags: ∅ - │ ├── parent: ∅ - │ ├── name: :A - │ ├── delimiter_loc: (34,6)-(34,8) = "::" - │ └── name_loc: (34,8)-(34,9) = "A" - ├── inheritance_operator_loc: ∅ - ├── superclass: ∅ - ├── body: ∅ - ├── end_keyword_loc: (35,0)-(35,3) = "end" - └── name: :A diff --git a/test/prism/snapshots/unparser/corpus/literal/def.txt b/test/prism/snapshots/unparser/corpus/literal/def.txt deleted file mode 100644 index d27977cbde6dfa..00000000000000 --- a/test/prism/snapshots/unparser/corpus/literal/def.txt +++ /dev/null @@ -1,1325 +0,0 @@ -@ ProgramNode (location: (1,0)-(134,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(134,3)) - ├── flags: ∅ - └── body: (length: 30) - ├── @ DefNode (location: (1,0)-(9,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (1,4)-(1,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ BeginNode (location: (1,0)-(9,3)) - │ │ ├── flags: ∅ - │ │ ├── begin_keyword_loc: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (2,2)-(2,3)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (2,2)-(2,3)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :a - │ │ │ ├── message_loc: (2,2)-(2,3) = "a" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── rescue_clause: - │ │ │ @ RescueNode (location: (3,0)-(4,3)) - │ │ │ ├── flags: ∅ - │ │ │ ├── keyword_loc: (3,0)-(3,6) = "rescue" - │ │ │ ├── exceptions: (length: 0) - │ │ │ ├── operator_loc: ∅ - │ │ │ ├── reference: ∅ - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (4,2)-(4,3)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (4,2)-(4,3)) - │ │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :b - │ │ │ │ ├── message_loc: (4,2)-(4,3) = "b" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── subsequent: ∅ - │ │ ├── else_clause: - │ │ │ @ ElseNode (location: (5,0)-(7,6)) - │ │ │ ├── flags: ∅ - │ │ │ ├── else_keyword_loc: (5,0)-(5,4) = "else" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (6,2)-(6,3)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (6,2)-(6,3)) - │ │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :c - │ │ │ │ ├── message_loc: (6,2)-(6,3) = "c" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── end_keyword_loc: (7,0)-(7,6) = "ensure" - │ │ ├── ensure_clause: - │ │ │ @ EnsureNode (location: (7,0)-(9,3)) - │ │ │ ├── flags: ∅ - │ │ │ ├── ensure_keyword_loc: (7,0)-(7,6) = "ensure" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (8,2)-(8,3)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (8,2)-(8,3)) - │ │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :d - │ │ │ │ ├── message_loc: (8,2)-(8,3) = "d" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── end_keyword_loc: (9,0)-(9,3) = "end" - │ │ └── end_keyword_loc: (9,0)-(9,3) = "end" - │ ├── locals: [] - │ ├── def_keyword_loc: (1,0)-(1,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (9,0)-(9,3) = "end" - ├── @ DefNode (location: (11,0)-(19,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (11,4)-(11,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ BeginNode (location: (11,0)-(19,3)) - │ │ ├── flags: ∅ - │ │ ├── begin_keyword_loc: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (12,2)-(12,12)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ RescueModifierNode (location: (12,2)-(12,12)) - │ │ │ ├── flags: newline - │ │ │ ├── expression: - │ │ │ │ @ CallNode (location: (12,2)-(12,3)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :a - │ │ │ │ ├── message_loc: (12,2)-(12,3) = "a" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── keyword_loc: (12,4)-(12,10) = "rescue" - │ │ │ └── rescue_expression: - │ │ │ @ CallNode (location: (12,11)-(12,12)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (12,11)-(12,12) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── rescue_clause: - │ │ │ @ RescueNode (location: (13,0)-(14,3)) - │ │ │ ├── flags: ∅ - │ │ │ ├── keyword_loc: (13,0)-(13,6) = "rescue" - │ │ │ ├── exceptions: (length: 0) - │ │ │ ├── operator_loc: ∅ - │ │ │ ├── reference: ∅ - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (14,2)-(14,3)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (14,2)-(14,3)) - │ │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :b - │ │ │ │ ├── message_loc: (14,2)-(14,3) = "b" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── subsequent: ∅ - │ │ ├── else_clause: - │ │ │ @ ElseNode (location: (15,0)-(17,6)) - │ │ │ ├── flags: ∅ - │ │ │ ├── else_keyword_loc: (15,0)-(15,4) = "else" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (16,2)-(16,3)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (16,2)-(16,3)) - │ │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :c - │ │ │ │ ├── message_loc: (16,2)-(16,3) = "c" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── end_keyword_loc: (17,0)-(17,6) = "ensure" - │ │ ├── ensure_clause: - │ │ │ @ EnsureNode (location: (17,0)-(19,3)) - │ │ │ ├── flags: ∅ - │ │ │ ├── ensure_keyword_loc: (17,0)-(17,6) = "ensure" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (18,2)-(18,3)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (18,2)-(18,3)) - │ │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :d - │ │ │ │ ├── message_loc: (18,2)-(18,3) = "d" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── end_keyword_loc: (19,0)-(19,3) = "end" - │ │ └── end_keyword_loc: (19,0)-(19,3) = "end" - │ ├── locals: [] - │ ├── def_keyword_loc: (11,0)-(11,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (19,0)-(19,3) = "end" - ├── @ DefNode (location: (21,0)-(22,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (21,4)-(21,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (21,8)-(21,18)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 2) - │ │ │ ├── @ RequiredKeywordParameterNode (location: (21,8)-(21,12)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :bar - │ │ │ │ └── name_loc: (21,8)-(21,12) = "bar:" - │ │ │ └── @ RequiredKeywordParameterNode (location: (21,14)-(21,18)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :baz - │ │ │ └── name_loc: (21,14)-(21,18) = "baz:" - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:bar, :baz] - │ ├── def_keyword_loc: (21,0)-(21,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (21,7)-(21,8) = "(" - │ ├── rparen_loc: (21,18)-(21,19) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (22,0)-(22,3) = "end" - ├── @ DefNode (location: (24,0)-(25,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (24,4)-(24,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (24,0)-(24,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (25,0)-(25,3) = "end" - ├── @ DefNode (location: (27,0)-(29,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (27,4)-(27,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (28,2)-(28,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (28,2)-(28,5)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (28,2)-(28,5) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (27,0)-(27,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (29,0)-(29,3) = "end" - ├── @ DefNode (location: (31,0)-(37,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (31,4)-(31,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ BeginNode (location: (31,0)-(37,3)) - │ │ ├── flags: ∅ - │ │ ├── begin_keyword_loc: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (32,2)-(32,5)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (32,2)-(32,5)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (32,2)-(32,5) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── rescue_clause: - │ │ │ @ RescueNode (location: (33,0)-(34,5)) - │ │ │ ├── flags: ∅ - │ │ │ ├── keyword_loc: (33,0)-(33,6) = "rescue" - │ │ │ ├── exceptions: (length: 0) - │ │ │ ├── operator_loc: ∅ - │ │ │ ├── reference: ∅ - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (34,2)-(34,5)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (34,2)-(34,5)) - │ │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :bar - │ │ │ │ ├── message_loc: (34,2)-(34,5) = "bar" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── subsequent: ∅ - │ │ ├── else_clause: ∅ - │ │ ├── ensure_clause: - │ │ │ @ EnsureNode (location: (35,0)-(37,3)) - │ │ │ ├── flags: ∅ - │ │ │ ├── ensure_keyword_loc: (35,0)-(35,6) = "ensure" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (36,2)-(36,5)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (36,2)-(36,5)) - │ │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ ├── message_loc: (36,2)-(36,5) = "baz" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── end_keyword_loc: (37,0)-(37,3) = "end" - │ │ └── end_keyword_loc: (37,0)-(37,3) = "end" - │ ├── locals: [] - │ ├── def_keyword_loc: (31,0)-(31,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (37,0)-(37,3) = "end" - ├── @ DefNode (location: (39,0)-(43,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (39,4)-(39,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ BeginNode (location: (39,0)-(43,3)) - │ │ ├── flags: ∅ - │ │ ├── begin_keyword_loc: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (40,2)-(40,5)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (40,2)-(40,5)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (40,2)-(40,5) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── rescue_clause: ∅ - │ │ ├── else_clause: ∅ - │ │ ├── ensure_clause: - │ │ │ @ EnsureNode (location: (41,0)-(43,3)) - │ │ │ ├── flags: ∅ - │ │ │ ├── ensure_keyword_loc: (41,0)-(41,6) = "ensure" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (42,2)-(42,5)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (42,2)-(42,5)) - │ │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ ├── message_loc: (42,2)-(42,5) = "baz" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── end_keyword_loc: (43,0)-(43,3) = "end" - │ │ └── end_keyword_loc: (43,0)-(43,3) = "end" - │ ├── locals: [] - │ ├── def_keyword_loc: (39,0)-(39,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (43,0)-(43,3) = "end" - ├── @ DefNode (location: (45,0)-(49,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (45,4)-(45,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ BeginNode (location: (45,0)-(49,3)) - │ │ ├── flags: ∅ - │ │ ├── begin_keyword_loc: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (46,2)-(46,5)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (46,2)-(46,5)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (46,2)-(46,5) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── rescue_clause: - │ │ │ @ RescueNode (location: (47,0)-(48,5)) - │ │ │ ├── flags: ∅ - │ │ │ ├── keyword_loc: (47,0)-(47,6) = "rescue" - │ │ │ ├── exceptions: (length: 0) - │ │ │ ├── operator_loc: ∅ - │ │ │ ├── reference: ∅ - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (48,2)-(48,5)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (48,2)-(48,5)) - │ │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ ├── message_loc: (48,2)-(48,5) = "baz" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── subsequent: ∅ - │ │ ├── else_clause: ∅ - │ │ ├── ensure_clause: ∅ - │ │ └── end_keyword_loc: (49,0)-(49,3) = "end" - │ ├── locals: [] - │ ├── def_keyword_loc: (45,0)-(45,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (49,0)-(49,3) = "end" - ├── @ DefNode (location: (51,0)-(53,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (51,4)-(51,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (51,8)-(51,11)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (51,8)-(51,11)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :bar - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (52,2)-(52,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ LocalVariableReadNode (location: (52,2)-(52,5)) - │ │ ├── flags: newline - │ │ ├── name: :bar - │ │ └── depth: 0 - │ ├── locals: [:bar] - │ ├── def_keyword_loc: (51,0)-(51,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (51,7)-(51,8) = "(" - │ ├── rparen_loc: (51,11)-(51,12) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (53,0)-(53,3) = "end" - ├── @ DefNode (location: (55,0)-(57,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (55,4)-(55,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (55,8)-(55,16)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 2) - │ │ │ ├── @ RequiredParameterNode (location: (55,8)-(55,11)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :bar - │ │ │ └── @ RequiredParameterNode (location: (55,13)-(55,16)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :baz - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (56,2)-(56,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ LocalVariableReadNode (location: (56,2)-(56,5)) - │ │ ├── flags: newline - │ │ ├── name: :bar - │ │ └── depth: 0 - │ ├── locals: [:bar, :baz] - │ ├── def_keyword_loc: (55,0)-(55,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (55,7)-(55,8) = "(" - │ ├── rparen_loc: (55,16)-(55,17) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (57,0)-(57,3) = "end" - ├── @ DefNode (location: (59,0)-(61,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (59,4)-(59,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (59,8)-(59,16)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 1) - │ │ │ └── @ OptionalParameterNode (location: (59,8)-(59,16)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── name_loc: (59,8)-(59,11) = "bar" - │ │ │ ├── operator_loc: (59,12)-(59,13) = "=" - │ │ │ └── value: - │ │ │ @ ParenthesesNode (location: (59,14)-(59,16)) - │ │ │ ├── flags: ∅ - │ │ │ ├── body: ∅ - │ │ │ ├── opening_loc: (59,14)-(59,15) = "(" - │ │ │ └── closing_loc: (59,15)-(59,16) = ")" - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (60,2)-(60,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ LocalVariableReadNode (location: (60,2)-(60,5)) - │ │ ├── flags: newline - │ │ ├── name: :bar - │ │ └── depth: 0 - │ ├── locals: [:bar] - │ ├── def_keyword_loc: (59,0)-(59,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (59,7)-(59,8) = "(" - │ ├── rparen_loc: (59,16)-(59,17) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (61,0)-(61,3) = "end" - ├── @ DefNode (location: (63,0)-(64,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (63,4)-(63,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (63,8)-(63,24)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 1) - │ │ │ └── @ OptionalParameterNode (location: (63,8)-(63,24)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── name_loc: (63,8)-(63,11) = "bar" - │ │ │ ├── operator_loc: (63,12)-(63,13) = "=" - │ │ │ └── value: - │ │ │ @ ParenthesesNode (location: (63,14)-(63,24)) - │ │ │ ├── flags: ∅ - │ │ │ ├── body: - │ │ │ │ @ StatementsNode (location: (63,15)-(63,23)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 2) - │ │ │ │ ├── @ CallNode (location: (63,15)-(63,18)) - │ │ │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :baz - │ │ │ │ │ ├── message_loc: (63,15)-(63,18) = "baz" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ └── @ NilNode (location: (63,20)-(63,23)) - │ │ │ │ └── flags: newline, static_literal - │ │ │ ├── opening_loc: (63,14)-(63,15) = "(" - │ │ │ └── closing_loc: (63,23)-(63,24) = ")" - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:bar] - │ ├── def_keyword_loc: (63,0)-(63,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (63,7)-(63,8) = "(" - │ ├── rparen_loc: (63,24)-(63,25) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (64,0)-(64,3) = "end" - ├── @ DefNode (location: (66,0)-(68,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (66,4)-(66,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (66,8)-(66,18)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 1) - │ │ │ └── @ OptionalParameterNode (location: (66,8)-(66,18)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── name_loc: (66,8)-(66,11) = "bar" - │ │ │ ├── operator_loc: (66,12)-(66,13) = "=" - │ │ │ └── value: - │ │ │ @ TrueNode (location: (66,14)-(66,18)) - │ │ │ └── flags: static_literal - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (67,2)-(67,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ LocalVariableReadNode (location: (67,2)-(67,5)) - │ │ ├── flags: newline - │ │ ├── name: :bar - │ │ └── depth: 0 - │ ├── locals: [:bar] - │ ├── def_keyword_loc: (66,0)-(66,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (66,7)-(66,8) = "(" - │ ├── rparen_loc: (66,18)-(66,19) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (68,0)-(68,3) = "end" - ├── @ DefNode (location: (70,0)-(72,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (70,4)-(70,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (70,8)-(70,23)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (70,8)-(70,11)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :bar - │ │ ├── optionals: (length: 1) - │ │ │ └── @ OptionalParameterNode (location: (70,13)-(70,23)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :baz - │ │ │ ├── name_loc: (70,13)-(70,16) = "baz" - │ │ │ ├── operator_loc: (70,17)-(70,18) = "=" - │ │ │ └── value: - │ │ │ @ TrueNode (location: (70,19)-(70,23)) - │ │ │ └── flags: static_literal - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (71,2)-(71,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ LocalVariableReadNode (location: (71,2)-(71,5)) - │ │ ├── flags: newline - │ │ ├── name: :bar - │ │ └── depth: 0 - │ ├── locals: [:bar, :baz] - │ ├── def_keyword_loc: (70,0)-(70,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (70,7)-(70,8) = "(" - │ ├── rparen_loc: (70,23)-(70,24) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (72,0)-(72,3) = "end" - ├── @ DefNode (location: (74,0)-(75,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (74,4)-(74,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (74,8)-(74,14)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 1) - │ │ │ └── @ OptionalKeywordParameterNode (location: (74,8)-(74,14)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── name_loc: (74,8)-(74,12) = "bar:" - │ │ │ └── value: - │ │ │ @ IntegerNode (location: (74,13)-(74,14)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:bar] - │ ├── def_keyword_loc: (74,0)-(74,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (74,7)-(74,8) = "(" - │ ├── rparen_loc: (74,14)-(74,15) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (75,0)-(75,3) = "end" - ├── @ DefNode (location: (77,0)-(78,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (77,4)-(77,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (77,8)-(77,16)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 1) - │ │ │ └── @ OptionalKeywordParameterNode (location: (77,8)-(77,16)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── name_loc: (77,8)-(77,12) = "bar:" - │ │ │ └── value: - │ │ │ @ CallNode (location: (77,13)-(77,16)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :baz - │ │ │ ├── message_loc: (77,13)-(77,16) = "baz" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:bar] - │ ├── def_keyword_loc: (77,0)-(77,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (77,7)-(77,8) = "(" - │ ├── rparen_loc: (77,16)-(77,17) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (78,0)-(78,3) = "end" - ├── @ DefNode (location: (80,0)-(81,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (80,4)-(80,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (80,8)-(80,18)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 1) - │ │ │ └── @ OptionalKeywordParameterNode (location: (80,8)-(80,18)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── name_loc: (80,8)-(80,12) = "bar:" - │ │ │ └── value: - │ │ │ @ CallNode (location: (80,13)-(80,18)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (80,13)-(80,16) = "bar" - │ │ │ ├── opening_loc: (80,16)-(80,17) = "(" - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: (80,17)-(80,18) = ")" - │ │ │ └── block: ∅ - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:bar] - │ ├── def_keyword_loc: (80,0)-(80,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (80,7)-(80,8) = "(" - │ ├── rparen_loc: (80,18)-(80,19) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (81,0)-(81,3) = "end" - ├── @ DefNode (location: (83,0)-(85,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (83,4)-(83,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (83,8)-(83,9)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: - │ │ │ @ RestParameterNode (location: (83,8)-(83,9)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: ∅ - │ │ │ ├── name_loc: ∅ - │ │ │ └── operator_loc: (83,8)-(83,9) = "*" - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (84,2)-(84,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (84,2)-(84,5)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (84,2)-(84,5) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (83,0)-(83,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (83,7)-(83,8) = "(" - │ ├── rparen_loc: (83,9)-(83,10) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (85,0)-(85,3) = "end" - ├── @ DefNode (location: (87,0)-(89,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (87,4)-(87,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (87,8)-(87,12)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: - │ │ │ @ RestParameterNode (location: (87,8)-(87,12)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── name_loc: (87,9)-(87,12) = "bar" - │ │ │ └── operator_loc: (87,8)-(87,9) = "*" - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (88,2)-(88,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ LocalVariableReadNode (location: (88,2)-(88,5)) - │ │ ├── flags: newline - │ │ ├── name: :bar - │ │ └── depth: 0 - │ ├── locals: [:bar] - │ ├── def_keyword_loc: (87,0)-(87,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (87,7)-(87,8) = "(" - │ ├── rparen_loc: (87,12)-(87,13) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (89,0)-(89,3) = "end" - ├── @ DefNode (location: (91,0)-(93,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (91,4)-(91,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (91,8)-(91,17)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (91,8)-(91,11)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :bar - │ │ ├── optionals: (length: 0) - │ │ ├── rest: - │ │ │ @ RestParameterNode (location: (91,13)-(91,17)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :baz - │ │ │ ├── name_loc: (91,14)-(91,17) = "baz" - │ │ │ └── operator_loc: (91,13)-(91,14) = "*" - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (92,2)-(92,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ LocalVariableReadNode (location: (92,2)-(92,5)) - │ │ ├── flags: newline - │ │ ├── name: :bar - │ │ └── depth: 0 - │ ├── locals: [:bar, :baz] - │ ├── def_keyword_loc: (91,0)-(91,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (91,7)-(91,8) = "(" - │ ├── rparen_loc: (91,17)-(91,18) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (93,0)-(93,3) = "end" - ├── @ DefNode (location: (95,0)-(97,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (95,4)-(95,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (95,8)-(95,24)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 1) - │ │ │ └── @ OptionalParameterNode (location: (95,8)-(95,18)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :baz - │ │ │ ├── name_loc: (95,8)-(95,11) = "baz" - │ │ │ ├── operator_loc: (95,12)-(95,13) = "=" - │ │ │ └── value: - │ │ │ @ TrueNode (location: (95,14)-(95,18)) - │ │ │ └── flags: static_literal - │ │ ├── rest: - │ │ │ @ RestParameterNode (location: (95,20)-(95,24)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :bor - │ │ │ ├── name_loc: (95,21)-(95,24) = "bor" - │ │ │ └── operator_loc: (95,20)-(95,21) = "*" - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (96,2)-(96,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (96,2)-(96,5)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (96,2)-(96,5) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── locals: [:baz, :bor] - │ ├── def_keyword_loc: (95,0)-(95,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (95,7)-(95,8) = "(" - │ ├── rparen_loc: (95,24)-(95,25) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (97,0)-(97,3) = "end" - ├── @ DefNode (location: (99,0)-(101,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (99,4)-(99,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (99,8)-(99,32)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 1) - │ │ │ └── @ OptionalParameterNode (location: (99,8)-(99,18)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :baz - │ │ │ ├── name_loc: (99,8)-(99,11) = "baz" - │ │ │ ├── operator_loc: (99,12)-(99,13) = "=" - │ │ │ └── value: - │ │ │ @ TrueNode (location: (99,14)-(99,18)) - │ │ │ └── flags: static_literal - │ │ ├── rest: - │ │ │ @ RestParameterNode (location: (99,20)-(99,24)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :bor - │ │ │ ├── name_loc: (99,21)-(99,24) = "bor" - │ │ │ └── operator_loc: (99,20)-(99,21) = "*" - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: - │ │ @ BlockParameterNode (location: (99,26)-(99,32)) - │ │ ├── flags: ∅ - │ │ ├── name: :block - │ │ ├── name_loc: (99,27)-(99,32) = "block" - │ │ └── operator_loc: (99,26)-(99,27) = "&" - │ ├── body: - │ │ @ StatementsNode (location: (100,2)-(100,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (100,2)-(100,5)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (100,2)-(100,5) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── locals: [:baz, :bor, :block] - │ ├── def_keyword_loc: (99,0)-(99,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (99,7)-(99,8) = "(" - │ ├── rparen_loc: (99,32)-(99,33) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (101,0)-(101,3) = "end" - ├── @ DefNode (location: (103,0)-(105,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (103,4)-(103,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (103,8)-(103,29)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (103,8)-(103,11)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :bar - │ │ ├── optionals: (length: 1) - │ │ │ └── @ OptionalParameterNode (location: (103,13)-(103,23)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :baz - │ │ │ ├── name_loc: (103,13)-(103,16) = "baz" - │ │ │ ├── operator_loc: (103,17)-(103,18) = "=" - │ │ │ └── value: - │ │ │ @ TrueNode (location: (103,19)-(103,23)) - │ │ │ └── flags: static_literal - │ │ ├── rest: - │ │ │ @ RestParameterNode (location: (103,25)-(103,29)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :bor - │ │ │ ├── name_loc: (103,26)-(103,29) = "bor" - │ │ │ └── operator_loc: (103,25)-(103,26) = "*" - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (104,2)-(104,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ LocalVariableReadNode (location: (104,2)-(104,5)) - │ │ ├── flags: newline - │ │ ├── name: :bar - │ │ └── depth: 0 - │ ├── locals: [:bar, :baz, :bor] - │ ├── def_keyword_loc: (103,0)-(103,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (103,7)-(103,8) = "(" - │ ├── rparen_loc: (103,29)-(103,30) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (105,0)-(105,3) = "end" - ├── @ DefNode (location: (107,0)-(109,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (107,4)-(107,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (107,8)-(107,14)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: - │ │ @ BlockParameterNode (location: (107,8)-(107,14)) - │ │ ├── flags: ∅ - │ │ ├── name: :block - │ │ ├── name_loc: (107,9)-(107,14) = "block" - │ │ └── operator_loc: (107,8)-(107,9) = "&" - │ ├── body: - │ │ @ StatementsNode (location: (108,2)-(108,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (108,2)-(108,5)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (108,2)-(108,5) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── locals: [:block] - │ ├── def_keyword_loc: (107,0)-(107,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (107,7)-(107,8) = "(" - │ ├── rparen_loc: (107,14)-(107,15) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (109,0)-(109,3) = "end" - ├── @ DefNode (location: (111,0)-(113,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (111,4)-(111,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (111,8)-(111,19)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (111,8)-(111,11)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :bar - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: - │ │ @ BlockParameterNode (location: (111,13)-(111,19)) - │ │ ├── flags: ∅ - │ │ ├── name: :block - │ │ ├── name_loc: (111,14)-(111,19) = "block" - │ │ └── operator_loc: (111,13)-(111,14) = "&" - │ ├── body: - │ │ @ StatementsNode (location: (112,2)-(112,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ LocalVariableReadNode (location: (112,2)-(112,5)) - │ │ ├── flags: newline - │ │ ├── name: :bar - │ │ └── depth: 0 - │ ├── locals: [:bar, :block] - │ ├── def_keyword_loc: (111,0)-(111,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (111,7)-(111,8) = "(" - │ ├── rparen_loc: (111,19)-(111,20) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (113,0)-(113,3) = "end" - ├── @ DefNode (location: (115,0)-(118,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (115,4)-(115,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (116,2)-(117,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 2) - │ │ ├── @ CallNode (location: (116,2)-(116,5)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (116,2)-(116,5) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── @ CallNode (location: (117,2)-(117,5)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :baz - │ │ ├── message_loc: (117,2)-(117,5) = "baz" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (115,0)-(115,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (118,0)-(118,3) = "end" - ├── @ DefNode (location: (120,0)-(121,3)) - │ ├── flags: newline - │ ├── name: :f - │ ├── name_loc: (120,4)-(120,5) = "f" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (120,6)-(120,11)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ MultiTargetNode (location: (120,6)-(120,11)) - │ │ │ ├── flags: ∅ - │ │ │ ├── lefts: (length: 1) - │ │ │ │ └── @ MultiTargetNode (location: (120,7)-(120,10)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── lefts: (length: 1) - │ │ │ │ │ └── @ RequiredParameterNode (location: (120,8)-(120,9)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── name: :a - │ │ │ │ ├── rest: ∅ - │ │ │ │ ├── rights: (length: 0) - │ │ │ │ ├── lparen_loc: (120,7)-(120,8) = "(" - │ │ │ │ └── rparen_loc: (120,9)-(120,10) = ")" - │ │ │ ├── rest: ∅ - │ │ │ ├── rights: (length: 0) - │ │ │ ├── lparen_loc: (120,6)-(120,7) = "(" - │ │ │ └── rparen_loc: (120,10)-(120,11) = ")" - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:a] - │ ├── def_keyword_loc: (120,0)-(120,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (120,5)-(120,6) = "(" - │ ├── rparen_loc: (120,11)-(120,12) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (121,0)-(121,3) = "end" - ├── @ DefNode (location: (123,0)-(124,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (123,4)-(123,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (123,8)-(123,26)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 2) - │ │ │ ├── @ RequiredKeywordParameterNode (location: (123,8)-(123,12)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :bar - │ │ │ │ └── name_loc: (123,8)-(123,12) = "bar:" - │ │ │ └── @ OptionalKeywordParameterNode (location: (123,14)-(123,26)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :baz - │ │ │ ├── name_loc: (123,14)-(123,18) = "baz:" - │ │ │ └── value: - │ │ │ @ StringNode (location: (123,19)-(123,26)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (123,19)-(123,20) = "\"" - │ │ │ ├── content_loc: (123,20)-(123,25) = "value" - │ │ │ ├── closing_loc: (123,25)-(123,26) = "\"" - │ │ │ └── unescaped: "value" - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:bar, :baz] - │ ├── def_keyword_loc: (123,0)-(123,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (123,7)-(123,8) = "(" - │ ├── rparen_loc: (123,26)-(123,27) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (124,0)-(124,3) = "end" - ├── @ DefNode (location: (126,0)-(130,3)) - │ ├── flags: newline - │ ├── name: :f - │ ├── name_loc: (126,4)-(126,5) = "f" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (127,2)-(127,12)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ InterpolatedStringNode (location: (127,2)-(127,12)) - │ │ ├── flags: newline - │ │ ├── opening_loc: (127,2)-(127,12) = "<<-HEREDOC" - │ │ ├── parts: (length: 3) - │ │ │ ├── @ StringNode (location: (128,0)-(128,4)) - │ │ │ │ ├── flags: static_literal, frozen - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── content_loc: (128,0)-(128,4) = " " - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: " " - │ │ │ ├── @ EmbeddedStatementsNode (location: (128,4)-(128,7)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── opening_loc: (128,4)-(128,6) = "\#{" - │ │ │ │ ├── statements: ∅ - │ │ │ │ └── closing_loc: (128,6)-(128,7) = "}" - │ │ │ └── @ StringNode (location: (128,7)-(129,0)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (128,7)-(129,0) = "\n" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "\n" - │ │ └── closing_loc: (129,0)-(130,0) = " HEREDOC\n" - │ ├── locals: [] - │ ├── def_keyword_loc: (126,0)-(126,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (130,0)-(130,3) = "end" - └── @ DefNode (location: (132,0)-(134,3)) - ├── flags: newline - ├── name: :f - ├── name_loc: (132,4)-(132,5) = "f" - ├── receiver: ∅ - ├── parameters: ∅ - ├── body: - │ @ StatementsNode (location: (133,2)-(133,5)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ StringNode (location: (133,2)-(133,5)) - │ ├── flags: newline - │ ├── opening_loc: (133,2)-(133,4) = "%(" - │ ├── content_loc: (133,4)-(133,4) = "" - │ ├── closing_loc: (133,4)-(133,5) = ")" - │ └── unescaped: "" - ├── locals: [] - ├── def_keyword_loc: (132,0)-(132,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: ∅ - ├── rparen_loc: ∅ - ├── equal_loc: ∅ - └── end_keyword_loc: (134,0)-(134,3) = "end" diff --git a/test/prism/snapshots/unparser/corpus/literal/defined.txt b/test/prism/snapshots/unparser/corpus/literal/defined.txt deleted file mode 100644 index d1b5a15685e0d3..00000000000000 --- a/test/prism/snapshots/unparser/corpus/literal/defined.txt +++ /dev/null @@ -1,67 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,27)) -├── flags: ∅ -├── locals: [:a, :b] -└── statements: - @ StatementsNode (location: (1,0)-(3,27)) - ├── flags: ∅ - └── body: (length: 3) - ├── @ DefinedNode (location: (1,0)-(1,14)) - │ ├── flags: newline - │ ├── lparen_loc: (1,8)-(1,9) = "(" - │ ├── value: - │ │ @ InstanceVariableReadNode (location: (1,9)-(1,13)) - │ │ ├── flags: ∅ - │ │ └── name: :@foo - │ ├── rparen_loc: (1,13)-(1,14) = ")" - │ └── keyword_loc: (1,0)-(1,8) = "defined?" - ├── @ DefinedNode (location: (2,0)-(2,13)) - │ ├── flags: newline - │ ├── lparen_loc: (2,8)-(2,9) = "(" - │ ├── value: - │ │ @ ConstantReadNode (location: (2,9)-(2,12)) - │ │ ├── flags: ∅ - │ │ └── name: :Foo - │ ├── rparen_loc: (2,12)-(2,13) = ")" - │ └── keyword_loc: (2,0)-(2,8) = "defined?" - └── @ DefinedNode (location: (3,0)-(3,27)) - ├── flags: newline - ├── lparen_loc: (3,8)-(3,9) = "(" - ├── value: - │ @ ParenthesesNode (location: (3,9)-(3,26)) - │ ├── flags: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (3,10)-(3,25)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ MultiWriteNode (location: (3,10)-(3,25)) - │ │ ├── flags: newline - │ │ ├── lefts: (length: 2) - │ │ │ ├── @ LocalVariableTargetNode (location: (3,11)-(3,12)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :a - │ │ │ │ └── depth: 0 - │ │ │ └── @ LocalVariableTargetNode (location: (3,14)-(3,15)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :b - │ │ │ └── depth: 0 - │ │ ├── rest: ∅ - │ │ ├── rights: (length: 0) - │ │ ├── lparen_loc: (3,10)-(3,11) = "(" - │ │ ├── rparen_loc: (3,15)-(3,16) = ")" - │ │ ├── operator_loc: (3,17)-(3,18) = "=" - │ │ └── value: - │ │ @ ArrayNode (location: (3,19)-(3,25)) - │ │ ├── flags: static_literal - │ │ ├── elements: (length: 2) - │ │ │ ├── @ IntegerNode (location: (3,20)-(3,21)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ └── @ IntegerNode (location: (3,23)-(3,24)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ ├── opening_loc: (3,19)-(3,20) = "[" - │ │ └── closing_loc: (3,24)-(3,25) = "]" - │ ├── opening_loc: (3,9)-(3,10) = "(" - │ └── closing_loc: (3,25)-(3,26) = ")" - ├── rparen_loc: (3,26)-(3,27) = ")" - └── keyword_loc: (3,0)-(3,8) = "defined?" diff --git a/test/prism/snapshots/unparser/corpus/literal/defs.txt b/test/prism/snapshots/unparser/corpus/literal/defs.txt deleted file mode 100644 index 33c24f3b24ef74..00000000000000 --- a/test/prism/snapshots/unparser/corpus/literal/defs.txt +++ /dev/null @@ -1,395 +0,0 @@ -@ ProgramNode (location: (1,0)-(40,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(40,3)) - ├── flags: ∅ - └── body: (length: 10) - ├── @ DefNode (location: (1,0)-(2,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (1,9)-(1,12) = "foo" - │ ├── receiver: - │ │ @ SelfNode (location: (1,4)-(1,8)) - │ │ └── flags: ∅ - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (1,0)-(1,3) = "def" - │ ├── operator_loc: (1,8)-(1,9) = "." - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (2,0)-(2,3) = "end" - ├── @ DefNode (location: (4,0)-(6,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (4,9)-(4,12) = "foo" - │ ├── receiver: - │ │ @ SelfNode (location: (4,4)-(4,8)) - │ │ └── flags: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (5,2)-(5,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (5,2)-(5,5)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (5,2)-(5,5) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (4,0)-(4,3) = "def" - │ ├── operator_loc: (4,8)-(4,9) = "." - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (6,0)-(6,3) = "end" - ├── @ DefNode (location: (8,0)-(11,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (8,9)-(8,12) = "foo" - │ ├── receiver: - │ │ @ SelfNode (location: (8,4)-(8,8)) - │ │ └── flags: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (9,2)-(10,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 2) - │ │ ├── @ CallNode (location: (9,2)-(9,5)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (9,2)-(9,5) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── @ CallNode (location: (10,2)-(10,5)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :baz - │ │ ├── message_loc: (10,2)-(10,5) = "baz" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (8,0)-(8,3) = "def" - │ ├── operator_loc: (8,8)-(8,9) = "." - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (11,0)-(11,3) = "end" - ├── @ DefNode (location: (13,0)-(15,3)) - │ ├── flags: newline - │ ├── name: :bar - │ ├── name_loc: (13,8)-(13,11) = "bar" - │ ├── receiver: - │ │ @ ConstantReadNode (location: (13,4)-(13,7)) - │ │ ├── flags: ∅ - │ │ └── name: :Foo - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (14,2)-(14,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (14,2)-(14,5)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (14,2)-(14,5) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (13,0)-(13,3) = "def" - │ ├── operator_loc: (13,7)-(13,8) = "." - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (15,0)-(15,3) = "end" - ├── @ DefNode (location: (17,0)-(20,3)) - │ ├── flags: newline - │ ├── name: :bar - │ ├── name_loc: (18,3)-(18,6) = "bar" - │ ├── receiver: - │ │ @ ParenthesesNode (location: (17,4)-(18,2)) - │ │ ├── flags: ∅ - │ │ ├── body: - │ │ │ @ CallNode (location: (17,5)-(18,1)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (17,5)-(17,8) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: - │ │ │ @ BlockNode (location: (17,9)-(18,1)) - │ │ │ ├── flags: ∅ - │ │ │ ├── locals: [:bar] - │ │ │ ├── parameters: - │ │ │ │ @ BlockParametersNode (location: (17,11)-(17,16)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── parameters: - │ │ │ │ │ @ ParametersNode (location: (17,12)-(17,15)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── requireds: (length: 1) - │ │ │ │ │ │ └── @ RequiredParameterNode (location: (17,12)-(17,15)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ └── name: :bar - │ │ │ │ │ ├── optionals: (length: 0) - │ │ │ │ │ ├── rest: ∅ - │ │ │ │ │ ├── posts: (length: 0) - │ │ │ │ │ ├── keywords: (length: 0) - │ │ │ │ │ ├── keyword_rest: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── locals: (length: 0) - │ │ │ │ ├── opening_loc: (17,11)-(17,12) = "|" - │ │ │ │ └── closing_loc: (17,15)-(17,16) = "|" - │ │ │ ├── body: ∅ - │ │ │ ├── opening_loc: (17,9)-(17,10) = "{" - │ │ │ └── closing_loc: (18,0)-(18,1) = "}" - │ │ ├── opening_loc: (17,4)-(17,5) = "(" - │ │ └── closing_loc: (18,1)-(18,2) = ")" - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (19,2)-(19,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (19,2)-(19,5)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (19,2)-(19,5) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (17,0)-(17,3) = "def" - │ ├── operator_loc: (18,2)-(18,3) = "." - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (20,0)-(20,3) = "end" - ├── @ DefNode (location: (22,0)-(24,3)) - │ ├── flags: newline - │ ├── name: :bar - │ ├── name_loc: (22,13)-(22,16) = "bar" - │ ├── receiver: - │ │ @ ParenthesesNode (location: (22,4)-(22,12)) - │ │ ├── flags: ∅ - │ │ ├── body: - │ │ │ @ CallNode (location: (22,5)-(22,11)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (22,5)-(22,8) = "foo" - │ │ │ ├── opening_loc: (22,8)-(22,9) = "(" - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (22,9)-(22,10)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ IntegerNode (location: (22,9)-(22,10)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ ├── closing_loc: (22,10)-(22,11) = ")" - │ │ │ └── block: ∅ - │ │ ├── opening_loc: (22,4)-(22,5) = "(" - │ │ └── closing_loc: (22,11)-(22,12) = ")" - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (23,2)-(23,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (23,2)-(23,5)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (23,2)-(23,5) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (22,0)-(22,3) = "def" - │ ├── operator_loc: (22,12)-(22,13) = "." - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (24,0)-(24,3) = "end" - ├── @ DefNode (location: (26,0)-(28,3)) - │ ├── flags: newline - │ ├── name: :bar - │ ├── name_loc: (26,19)-(26,22) = "bar" - │ ├── receiver: - │ │ @ ParenthesesNode (location: (26,4)-(26,18)) - │ │ ├── flags: ∅ - │ │ ├── body: - │ │ │ @ CallNode (location: (26,5)-(26,17)) - │ │ │ ├── flags: ∅ - │ │ │ ├── receiver: - │ │ │ │ @ ConstantPathNode (location: (26,5)-(26,13)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── parent: - │ │ │ │ │ @ ConstantReadNode (location: (26,5)-(26,8)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── name: :Foo - │ │ │ │ ├── name: :Bar - │ │ │ │ ├── delimiter_loc: (26,8)-(26,10) = "::" - │ │ │ │ └── name_loc: (26,10)-(26,13) = "Bar" - │ │ │ ├── call_operator_loc: (26,13)-(26,14) = "." - │ │ │ ├── name: :baz - │ │ │ ├── message_loc: (26,14)-(26,17) = "baz" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── opening_loc: (26,4)-(26,5) = "(" - │ │ └── closing_loc: (26,17)-(26,18) = ")" - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (27,2)-(27,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (27,2)-(27,5)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :baz - │ │ ├── message_loc: (27,2)-(27,5) = "baz" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (26,0)-(26,3) = "def" - │ ├── operator_loc: (26,18)-(26,19) = "." - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (28,0)-(28,3) = "end" - ├── @ DefNode (location: (30,0)-(32,3)) - │ ├── flags: newline - │ ├── name: :bar - │ ├── name_loc: (30,15)-(30,18) = "bar" - │ ├── receiver: - │ │ @ ParenthesesNode (location: (30,4)-(30,14)) - │ │ ├── flags: ∅ - │ │ ├── body: - │ │ │ @ ConstantPathNode (location: (30,5)-(30,13)) - │ │ │ ├── flags: ∅ - │ │ │ ├── parent: - │ │ │ │ @ ConstantReadNode (location: (30,5)-(30,8)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :Foo - │ │ │ ├── name: :Bar - │ │ │ ├── delimiter_loc: (30,8)-(30,10) = "::" - │ │ │ └── name_loc: (30,10)-(30,13) = "Bar" - │ │ ├── opening_loc: (30,4)-(30,5) = "(" - │ │ └── closing_loc: (30,13)-(30,14) = ")" - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (31,2)-(31,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (31,2)-(31,5)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :baz - │ │ ├── message_loc: (31,2)-(31,5) = "baz" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (30,0)-(30,3) = "def" - │ ├── operator_loc: (30,14)-(30,15) = "." - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (32,0)-(32,3) = "end" - ├── @ DefNode (location: (34,0)-(36,3)) - │ ├── flags: newline - │ ├── name: :bar - │ ├── name_loc: (34,8)-(34,11) = "bar" - │ ├── receiver: - │ │ @ ConstantReadNode (location: (34,4)-(34,7)) - │ │ ├── flags: ∅ - │ │ └── name: :Foo - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (35,2)-(35,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (35,2)-(35,5)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :baz - │ │ ├── message_loc: (35,2)-(35,5) = "baz" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (34,0)-(34,3) = "def" - │ ├── operator_loc: (34,7)-(34,8) = "." - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (36,0)-(36,3) = "end" - └── @ DefNode (location: (38,0)-(40,3)) - ├── flags: newline - ├── name: :bar - ├── name_loc: (38,8)-(38,11) = "bar" - ├── receiver: - │ @ CallNode (location: (38,4)-(38,7)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (38,4)-(38,7) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── parameters: ∅ - ├── body: - │ @ StatementsNode (location: (39,2)-(39,5)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (39,2)-(39,5)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :baz - │ ├── message_loc: (39,2)-(39,5) = "baz" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── locals: [] - ├── def_keyword_loc: (38,0)-(38,3) = "def" - ├── operator_loc: (38,7)-(38,8) = "." - ├── lparen_loc: ∅ - ├── rparen_loc: ∅ - ├── equal_loc: ∅ - └── end_keyword_loc: (40,0)-(40,3) = "end" diff --git a/test/prism/snapshots/unparser/corpus/literal/dstr.txt b/test/prism/snapshots/unparser/corpus/literal/dstr.txt deleted file mode 100644 index 64cb3ff1b20e65..00000000000000 --- a/test/prism/snapshots/unparser/corpus/literal/dstr.txt +++ /dev/null @@ -1,389 +0,0 @@ -@ ProgramNode (location: (1,0)-(37,1)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(37,1)) - ├── flags: ∅ - └── body: (length: 11) - ├── @ IfNode (location: (1,0)-(3,3)) - │ ├── flags: newline - │ ├── if_keyword_loc: (1,0)-(1,2) = "if" - │ ├── predicate: - │ │ @ TrueNode (location: (1,3)-(1,7)) - │ │ └── flags: static_literal - │ ├── then_keyword_loc: ∅ - │ ├── statements: - │ │ @ StatementsNode (location: (2,2)-(2,8)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ InterpolatedStringNode (location: (2,2)-(2,8)) - │ │ ├── flags: newline - │ │ ├── opening_loc: (2,2)-(2,3) = "\"" - │ │ ├── parts: (length: 2) - │ │ │ ├── @ EmbeddedStatementsNode (location: (2,3)-(2,6)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── opening_loc: (2,3)-(2,5) = "\#{" - │ │ │ │ ├── statements: ∅ - │ │ │ │ └── closing_loc: (2,5)-(2,6) = "}" - │ │ │ └── @ StringNode (location: (2,6)-(2,7)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (2,6)-(2,7) = "a" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "a" - │ │ └── closing_loc: (2,7)-(2,8) = "\"" - │ ├── subsequent: ∅ - │ └── end_keyword_loc: (3,0)-(3,3) = "end" - ├── @ IfNode (location: (4,0)-(11,3)) - │ ├── flags: newline - │ ├── if_keyword_loc: (4,0)-(4,2) = "if" - │ ├── predicate: - │ │ @ TrueNode (location: (4,3)-(4,7)) - │ │ └── flags: static_literal - │ ├── then_keyword_loc: ∅ - │ ├── statements: - │ │ @ StatementsNode (location: (5,2)-(10,3)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 2) - │ │ ├── @ InterpolatedStringNode (location: (5,2)-(5,12)) - │ │ │ ├── flags: newline - │ │ │ ├── opening_loc: (5,2)-(5,12) = "<<-HEREDOC" - │ │ │ ├── parts: (length: 3) - │ │ │ │ ├── @ StringNode (location: (6,0)-(7,0)) - │ │ │ │ │ ├── flags: static_literal, frozen - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── content_loc: (6,0)-(7,0) = "a\n" - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── unescaped: "a\n" - │ │ │ │ ├── @ EmbeddedStatementsNode (location: (7,0)-(7,3)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── opening_loc: (7,0)-(7,2) = "\#{" - │ │ │ │ │ ├── statements: ∅ - │ │ │ │ │ └── closing_loc: (7,2)-(7,3) = "}" - │ │ │ │ └── @ StringNode (location: (7,3)-(9,0)) - │ │ │ │ ├── flags: static_literal, frozen - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── content_loc: (7,3)-(9,0) = "a\nb\n" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "a\nb\n" - │ │ │ └── closing_loc: (9,0)-(10,0) = " HEREDOC\n" - │ │ └── @ CallNode (location: (10,2)-(10,3)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :x - │ │ ├── message_loc: (10,2)-(10,3) = "x" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── subsequent: ∅ - │ └── end_keyword_loc: (11,0)-(11,3) = "end" - ├── @ InterpolatedStringNode (location: (12,0)-(12,10)) - │ ├── flags: newline - │ ├── opening_loc: (12,0)-(12,10) = "<<-HEREDOC" - │ ├── parts: (length: 7) - │ │ ├── @ StringNode (location: (13,0)-(14,0)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (13,0)-(14,0) = "\\\#{}\\\#{}\n" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "\#{}\#{}\n" - │ │ ├── @ EmbeddedStatementsNode (location: (14,0)-(14,3)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (14,0)-(14,2) = "\#{" - │ │ │ ├── statements: ∅ - │ │ │ └── closing_loc: (14,2)-(14,3) = "}" - │ │ ├── @ StringNode (location: (14,3)-(15,0)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (14,3)-(15,0) = "\n" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "\n" - │ │ ├── @ EmbeddedStatementsNode (location: (15,0)-(15,3)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (15,0)-(15,2) = "\#{" - │ │ │ ├── statements: ∅ - │ │ │ └── closing_loc: (15,2)-(15,3) = "}" - │ │ ├── @ StringNode (location: (15,3)-(16,0)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (15,3)-(16,0) = "\n" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "\n" - │ │ ├── @ EmbeddedStatementsNode (location: (16,0)-(16,3)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (16,0)-(16,2) = "\#{" - │ │ │ ├── statements: ∅ - │ │ │ └── closing_loc: (16,2)-(16,3) = "}" - │ │ └── @ StringNode (location: (16,3)-(17,0)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (16,3)-(17,0) = "\n" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "\n" - │ └── closing_loc: (17,0)-(18,0) = "HEREDOC\n" - ├── @ RescueModifierNode (location: (18,0)-(18,21)) - │ ├── flags: newline - │ ├── expression: - │ │ @ InterpolatedStringNode (location: (18,0)-(18,10)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (18,0)-(18,10) = "<<-HEREDOC" - │ │ ├── parts: (length: 2) - │ │ │ ├── @ EmbeddedStatementsNode (location: (19,0)-(19,3)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── opening_loc: (19,0)-(19,2) = "\#{" - │ │ │ │ ├── statements: ∅ - │ │ │ │ └── closing_loc: (19,2)-(19,3) = "}" - │ │ │ └── @ StringNode (location: (19,3)-(21,0)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (19,3)-(21,0) = "\na\n" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "\na\n" - │ │ └── closing_loc: (21,0)-(22,0) = "HEREDOC\n" - │ ├── keyword_loc: (18,11)-(18,17) = "rescue" - │ └── rescue_expression: - │ @ NilNode (location: (18,18)-(18,21)) - │ └── flags: static_literal - ├── @ InterpolatedStringNode (location: (22,0)-(22,6)) - │ ├── flags: newline - │ ├── opening_loc: (22,0)-(22,1) = "\"" - │ ├── parts: (length: 2) - │ │ ├── @ StringNode (location: (22,1)-(22,2)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (22,1)-(22,2) = "a" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "a" - │ │ └── @ EmbeddedVariableNode (location: (22,2)-(22,5)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (22,2)-(22,3) = "#" - │ │ └── variable: - │ │ @ NumberedReferenceReadNode (location: (22,3)-(22,5)) - │ │ ├── flags: ∅ - │ │ └── number: 1 - │ └── closing_loc: (22,5)-(22,6) = "\"" - ├── @ InterpolatedStringNode (location: (23,0)-(23,6)) - │ ├── flags: newline - │ ├── opening_loc: (23,0)-(23,1) = "\"" - │ ├── parts: (length: 2) - │ │ ├── @ StringNode (location: (23,1)-(23,2)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (23,1)-(23,2) = "a" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "a" - │ │ └── @ EmbeddedVariableNode (location: (23,2)-(23,5)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (23,2)-(23,3) = "#" - │ │ └── variable: - │ │ @ GlobalVariableReadNode (location: (23,3)-(23,5)) - │ │ ├── flags: ∅ - │ │ └── name: :$a - │ └── closing_loc: (23,5)-(23,6) = "\"" - ├── @ InterpolatedStringNode (location: (24,0)-(24,6)) - │ ├── flags: newline - │ ├── opening_loc: (24,0)-(24,1) = "\"" - │ ├── parts: (length: 2) - │ │ ├── @ StringNode (location: (24,1)-(24,2)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (24,1)-(24,2) = "a" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "a" - │ │ └── @ EmbeddedVariableNode (location: (24,2)-(24,5)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (24,2)-(24,3) = "#" - │ │ └── variable: - │ │ @ InstanceVariableReadNode (location: (24,3)-(24,5)) - │ │ ├── flags: ∅ - │ │ └── name: :@a - │ └── closing_loc: (24,5)-(24,6) = "\"" - ├── @ InterpolatedStringNode (location: (25,0)-(25,7)) - │ ├── flags: newline - │ ├── opening_loc: (25,0)-(25,1) = "\"" - │ ├── parts: (length: 2) - │ │ ├── @ StringNode (location: (25,1)-(25,2)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (25,1)-(25,2) = "a" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "a" - │ │ └── @ EmbeddedVariableNode (location: (25,2)-(25,6)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (25,2)-(25,3) = "#" - │ │ └── variable: - │ │ @ ClassVariableReadNode (location: (25,3)-(25,6)) - │ │ ├── flags: ∅ - │ │ └── name: :@@a - │ └── closing_loc: (25,6)-(25,7) = "\"" - ├── @ IfNode (location: (26,0)-(30,3)) - │ ├── flags: newline - │ ├── if_keyword_loc: (26,0)-(26,2) = "if" - │ ├── predicate: - │ │ @ TrueNode (location: (26,3)-(26,7)) - │ │ └── flags: static_literal - │ ├── then_keyword_loc: ∅ - │ ├── statements: - │ │ @ StatementsNode (location: (27,2)-(27,19)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ ReturnNode (location: (27,2)-(27,19)) - │ │ ├── flags: newline - │ │ ├── keyword_loc: (27,2)-(27,8) = "return" - │ │ └── arguments: - │ │ @ ArgumentsNode (location: (27,9)-(27,19)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ InterpolatedStringNode (location: (27,9)-(27,19)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (27,9)-(27,19) = "<<-HEREDOC" - │ │ ├── parts: (length: 3) - │ │ │ ├── @ StringNode (location: (28,0)-(28,4)) - │ │ │ │ ├── flags: static_literal, frozen - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── content_loc: (28,0)-(28,4) = " " - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: " " - │ │ │ ├── @ EmbeddedStatementsNode (location: (28,4)-(28,9)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── opening_loc: (28,4)-(28,6) = "\#{" - │ │ │ │ ├── statements: - │ │ │ │ │ @ StatementsNode (location: (28,6)-(28,8)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── body: (length: 1) - │ │ │ │ │ └── @ IntegerNode (location: (28,6)-(28,8)) - │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ └── value: 42 - │ │ │ │ └── closing_loc: (28,8)-(28,9) = "}" - │ │ │ └── @ StringNode (location: (28,9)-(29,0)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (28,9)-(29,0) = "\n" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "\n" - │ │ └── closing_loc: (29,0)-(30,0) = " HEREDOC\n" - │ ├── subsequent: ∅ - │ └── end_keyword_loc: (30,0)-(30,3) = "end" - ├── @ CallNode (location: (31,0)-(31,15)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (31,0)-(31,3) = "foo" - │ ├── opening_loc: (31,3)-(31,4) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (31,4)-(31,14)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ InterpolatedStringNode (location: (31,4)-(31,14)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (31,4)-(31,14) = "<<-HEREDOC" - │ │ ├── parts: (length: 3) - │ │ │ ├── @ StringNode (location: (32,0)-(32,2)) - │ │ │ │ ├── flags: static_literal, frozen - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── content_loc: (32,0)-(32,2) = " " - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: " " - │ │ │ ├── @ EmbeddedStatementsNode (location: (32,2)-(32,8)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── opening_loc: (32,2)-(32,4) = "\#{" - │ │ │ │ ├── statements: - │ │ │ │ │ @ StatementsNode (location: (32,4)-(32,7)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── body: (length: 1) - │ │ │ │ │ └── @ CallNode (location: (32,4)-(32,7)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :bar - │ │ │ │ │ ├── message_loc: (32,4)-(32,7) = "bar" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ └── closing_loc: (32,7)-(32,8) = "}" - │ │ │ └── @ StringNode (location: (32,8)-(33,0)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (32,8)-(33,0) = "\n" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "\n" - │ │ └── closing_loc: (33,0)-(34,0) = "HEREDOC\n" - │ ├── closing_loc: (31,14)-(31,15) = ")" - │ └── block: ∅ - └── @ CallNode (location: (34,0)-(37,1)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :foo - ├── message_loc: (34,0)-(34,3) = "foo" - ├── opening_loc: (34,3)-(34,4) = "(" - ├── arguments: - │ @ ArgumentsNode (location: (34,4)-(34,14)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ InterpolatedStringNode (location: (34,4)-(34,14)) - │ ├── flags: ∅ - │ ├── opening_loc: (34,4)-(34,14) = "<<-HEREDOC" - │ ├── parts: (length: 3) - │ │ ├── @ StringNode (location: (35,0)-(35,2)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (35,0)-(35,2) = " " - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: " " - │ │ ├── @ EmbeddedStatementsNode (location: (35,2)-(35,8)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (35,2)-(35,4) = "\#{" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (35,4)-(35,7)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (35,4)-(35,7)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :bar - │ │ │ │ ├── message_loc: (35,4)-(35,7) = "bar" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── closing_loc: (35,7)-(35,8) = "}" - │ │ └── @ StringNode (location: (35,8)-(36,0)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (35,8)-(36,0) = "\n" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "\n" - │ └── closing_loc: (36,0)-(37,0) = "HEREDOC\n" - ├── closing_loc: (34,14)-(34,15) = ")" - └── block: - @ BlockNode (location: (34,16)-(37,1)) - ├── flags: ∅ - ├── locals: [:x] - ├── parameters: - │ @ BlockParametersNode (location: (34,18)-(34,21)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (34,19)-(34,20)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (34,19)-(34,20)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :x - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (34,18)-(34,19) = "|" - │ └── closing_loc: (34,20)-(34,21) = "|" - ├── body: ∅ - ├── opening_loc: (34,16)-(34,17) = "{" - └── closing_loc: (37,0)-(37,1) = "}" diff --git a/test/prism/snapshots/unparser/corpus/literal/empty.txt b/test/prism/snapshots/unparser/corpus/literal/empty.txt deleted file mode 100644 index 5756285aaf2bd2..00000000000000 --- a/test/prism/snapshots/unparser/corpus/literal/empty.txt +++ /dev/null @@ -1,7 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,0)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,0)) - ├── flags: ∅ - └── body: (length: 0) diff --git a/test/prism/snapshots/unparser/corpus/literal/empty_begin.txt b/test/prism/snapshots/unparser/corpus/literal/empty_begin.txt deleted file mode 100644 index 25dc0b26a216a3..00000000000000 --- a/test/prism/snapshots/unparser/corpus/literal/empty_begin.txt +++ /dev/null @@ -1,12 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,2)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,2)) - ├── flags: ∅ - └── body: (length: 1) - └── @ ParenthesesNode (location: (1,0)-(1,2)) - ├── flags: newline - ├── body: ∅ - ├── opening_loc: (1,0)-(1,1) = "(" - └── closing_loc: (1,1)-(1,2) = ")" diff --git a/test/prism/snapshots/unparser/corpus/literal/flipflop.txt b/test/prism/snapshots/unparser/corpus/literal/flipflop.txt deleted file mode 100644 index 418aa242cbecd9..00000000000000 --- a/test/prism/snapshots/unparser/corpus/literal/flipflop.txt +++ /dev/null @@ -1,257 +0,0 @@ -@ ProgramNode (location: (1,0)-(10,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(10,3)) - ├── flags: ∅ - └── body: (length: 4) - ├── @ IfNode (location: (1,0)-(3,3)) - │ ├── flags: newline - │ ├── if_keyword_loc: (1,0)-(1,2) = "if" - │ ├── predicate: - │ │ @ ParenthesesNode (location: (1,3)-(1,23)) - │ │ ├── flags: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (1,4)-(1,22)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ FlipFlopNode (location: (1,4)-(1,22)) - │ │ │ ├── flags: newline - │ │ │ ├── left: - │ │ │ │ @ ParenthesesNode (location: (1,4)-(1,12)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── body: - │ │ │ │ │ @ StatementsNode (location: (1,5)-(1,11)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── body: (length: 1) - │ │ │ │ │ └── @ CallNode (location: (1,5)-(1,11)) - │ │ │ │ │ ├── flags: newline - │ │ │ │ │ ├── receiver: - │ │ │ │ │ │ @ CallNode (location: (1,5)-(1,6)) - │ │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ │ ├── name: :i - │ │ │ │ │ │ ├── message_loc: (1,5)-(1,6) = "i" - │ │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ │ └── block: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :== - │ │ │ │ │ ├── message_loc: (1,7)-(1,9) = "==" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: - │ │ │ │ │ │ @ ArgumentsNode (location: (1,10)-(1,11)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ └── arguments: (length: 1) - │ │ │ │ │ │ └── @ IntegerNode (location: (1,10)-(1,11)) - │ │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ │ └── value: 4 - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── opening_loc: (1,4)-(1,5) = "(" - │ │ │ │ └── closing_loc: (1,11)-(1,12) = ")" - │ │ │ ├── right: - │ │ │ │ @ ParenthesesNode (location: (1,14)-(1,22)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── body: - │ │ │ │ │ @ StatementsNode (location: (1,15)-(1,21)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── body: (length: 1) - │ │ │ │ │ └── @ CallNode (location: (1,15)-(1,21)) - │ │ │ │ │ ├── flags: newline - │ │ │ │ │ ├── receiver: - │ │ │ │ │ │ @ CallNode (location: (1,15)-(1,16)) - │ │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ │ ├── name: :i - │ │ │ │ │ │ ├── message_loc: (1,15)-(1,16) = "i" - │ │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ │ └── block: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :== - │ │ │ │ │ ├── message_loc: (1,17)-(1,19) = "==" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: - │ │ │ │ │ │ @ ArgumentsNode (location: (1,20)-(1,21)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ └── arguments: (length: 1) - │ │ │ │ │ │ └── @ IntegerNode (location: (1,20)-(1,21)) - │ │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ │ └── value: 4 - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── opening_loc: (1,14)-(1,15) = "(" - │ │ │ │ └── closing_loc: (1,21)-(1,22) = ")" - │ │ │ └── operator_loc: (1,12)-(1,14) = ".." - │ │ ├── opening_loc: (1,3)-(1,4) = "(" - │ │ └── closing_loc: (1,22)-(1,23) = ")" - │ ├── then_keyword_loc: ∅ - │ ├── statements: - │ │ @ StatementsNode (location: (2,2)-(2,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (2,2)-(2,5)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (2,2)-(2,5) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── subsequent: ∅ - │ └── end_keyword_loc: (3,0)-(3,3) = "end" - ├── @ IfNode (location: (4,0)-(6,3)) - │ ├── flags: newline - │ ├── if_keyword_loc: (4,0)-(4,2) = "if" - │ ├── predicate: - │ │ @ ParenthesesNode (location: (4,3)-(4,24)) - │ │ ├── flags: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (4,4)-(4,23)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ FlipFlopNode (location: (4,4)-(4,23)) - │ │ │ ├── flags: newline, exclude_end - │ │ │ ├── left: - │ │ │ │ @ ParenthesesNode (location: (4,4)-(4,12)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── body: - │ │ │ │ │ @ StatementsNode (location: (4,5)-(4,11)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── body: (length: 1) - │ │ │ │ │ └── @ CallNode (location: (4,5)-(4,11)) - │ │ │ │ │ ├── flags: newline - │ │ │ │ │ ├── receiver: - │ │ │ │ │ │ @ CallNode (location: (4,5)-(4,6)) - │ │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ │ ├── name: :i - │ │ │ │ │ │ ├── message_loc: (4,5)-(4,6) = "i" - │ │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ │ └── block: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :== - │ │ │ │ │ ├── message_loc: (4,7)-(4,9) = "==" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: - │ │ │ │ │ │ @ ArgumentsNode (location: (4,10)-(4,11)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ └── arguments: (length: 1) - │ │ │ │ │ │ └── @ IntegerNode (location: (4,10)-(4,11)) - │ │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ │ └── value: 4 - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── opening_loc: (4,4)-(4,5) = "(" - │ │ │ │ └── closing_loc: (4,11)-(4,12) = ")" - │ │ │ ├── right: - │ │ │ │ @ ParenthesesNode (location: (4,15)-(4,23)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── body: - │ │ │ │ │ @ StatementsNode (location: (4,16)-(4,22)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── body: (length: 1) - │ │ │ │ │ └── @ CallNode (location: (4,16)-(4,22)) - │ │ │ │ │ ├── flags: newline - │ │ │ │ │ ├── receiver: - │ │ │ │ │ │ @ CallNode (location: (4,16)-(4,17)) - │ │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ │ ├── name: :i - │ │ │ │ │ │ ├── message_loc: (4,16)-(4,17) = "i" - │ │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ │ └── block: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :== - │ │ │ │ │ ├── message_loc: (4,18)-(4,20) = "==" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: - │ │ │ │ │ │ @ ArgumentsNode (location: (4,21)-(4,22)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ └── arguments: (length: 1) - │ │ │ │ │ │ └── @ IntegerNode (location: (4,21)-(4,22)) - │ │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ │ └── value: 4 - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── opening_loc: (4,15)-(4,16) = "(" - │ │ │ │ └── closing_loc: (4,22)-(4,23) = ")" - │ │ │ └── operator_loc: (4,12)-(4,15) = "..." - │ │ ├── opening_loc: (4,3)-(4,4) = "(" - │ │ └── closing_loc: (4,23)-(4,24) = ")" - │ ├── then_keyword_loc: ∅ - │ ├── statements: - │ │ @ StatementsNode (location: (5,2)-(5,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (5,2)-(5,5)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (5,2)-(5,5) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── subsequent: ∅ - │ └── end_keyword_loc: (6,0)-(6,3) = "end" - ├── @ IfNode (location: (7,0)-(8,3)) - │ ├── flags: newline - │ ├── if_keyword_loc: (7,0)-(7,2) = "if" - │ ├── predicate: - │ │ @ FlipFlopNode (location: (7,3)-(7,8)) - │ │ ├── flags: ∅ - │ │ ├── left: ∅ - │ │ ├── right: - │ │ │ @ CallNode (location: (7,5)-(7,8)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (7,5)-(7,8) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: (7,3)-(7,5) = ".." - │ ├── then_keyword_loc: ∅ - │ ├── statements: ∅ - │ ├── subsequent: ∅ - │ └── end_keyword_loc: (8,0)-(8,3) = "end" - └── @ IfNode (location: (9,0)-(10,3)) - ├── flags: newline - ├── if_keyword_loc: (9,0)-(9,2) = "if" - ├── predicate: - │ @ FlipFlopNode (location: (9,3)-(9,8)) - │ ├── flags: ∅ - │ ├── left: - │ │ @ CallNode (location: (9,3)-(9,6)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (9,3)-(9,6) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── right: ∅ - │ └── operator_loc: (9,6)-(9,8) = ".." - ├── then_keyword_loc: ∅ - ├── statements: ∅ - ├── subsequent: ∅ - └── end_keyword_loc: (10,0)-(10,3) = "end" diff --git a/test/prism/snapshots/unparser/corpus/literal/for.txt b/test/prism/snapshots/unparser/corpus/literal/for.txt deleted file mode 100644 index a1722a8a099cf9..00000000000000 --- a/test/prism/snapshots/unparser/corpus/literal/for.txt +++ /dev/null @@ -1,190 +0,0 @@ -@ ProgramNode (location: (1,0)-(12,3)) -├── flags: ∅ -├── locals: [:a, :b] -└── statements: - @ StatementsNode (location: (1,0)-(12,3)) - ├── flags: ∅ - └── body: (length: 4) - ├── @ CallNode (location: (1,0)-(3,4)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :bar - │ ├── message_loc: (1,0)-(1,3) = "bar" - │ ├── opening_loc: (1,3)-(1,4) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,4)-(3,3)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ ForNode (location: (1,4)-(3,3)) - │ │ ├── flags: ∅ - │ │ ├── index: - │ │ │ @ LocalVariableTargetNode (location: (1,8)-(1,9)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :a - │ │ │ └── depth: 0 - │ │ ├── collection: - │ │ │ @ CallNode (location: (1,13)-(1,16)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (1,13)-(1,16) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (2,2)-(2,5)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (2,2)-(2,5)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :baz - │ │ │ ├── message_loc: (2,2)-(2,5) = "baz" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── for_keyword_loc: (1,4)-(1,7) = "for" - │ │ ├── in_keyword_loc: (1,10)-(1,12) = "in" - │ │ ├── do_keyword_loc: (1,17)-(1,19) = "do" - │ │ └── end_keyword_loc: (3,0)-(3,3) = "end" - │ ├── closing_loc: (3,3)-(3,4) = ")" - │ └── block: ∅ - ├── @ ForNode (location: (4,0)-(6,3)) - │ ├── flags: newline - │ ├── index: - │ │ @ LocalVariableTargetNode (location: (4,4)-(4,5)) - │ │ ├── flags: ∅ - │ │ ├── name: :a - │ │ └── depth: 0 - │ ├── collection: - │ │ @ CallNode (location: (4,9)-(4,12)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (4,9)-(4,12) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── statements: - │ │ @ StatementsNode (location: (5,2)-(5,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (5,2)-(5,5)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :baz - │ │ ├── message_loc: (5,2)-(5,5) = "baz" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── for_keyword_loc: (4,0)-(4,3) = "for" - │ ├── in_keyword_loc: (4,6)-(4,8) = "in" - │ ├── do_keyword_loc: (4,13)-(4,15) = "do" - │ └── end_keyword_loc: (6,0)-(6,3) = "end" - ├── @ ForNode (location: (7,0)-(9,3)) - │ ├── flags: newline - │ ├── index: - │ │ @ MultiTargetNode (location: (7,4)-(7,11)) - │ │ ├── flags: ∅ - │ │ ├── lefts: (length: 1) - │ │ │ └── @ LocalVariableTargetNode (location: (7,5)-(7,6)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :a - │ │ │ └── depth: 0 - │ │ ├── rest: - │ │ │ @ SplatNode (location: (7,8)-(7,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (7,8)-(7,9) = "*" - │ │ │ └── expression: - │ │ │ @ LocalVariableTargetNode (location: (7,9)-(7,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :b - │ │ │ └── depth: 0 - │ │ ├── rights: (length: 0) - │ │ ├── lparen_loc: (7,4)-(7,5) = "(" - │ │ └── rparen_loc: (7,10)-(7,11) = ")" - │ ├── collection: - │ │ @ CallNode (location: (7,15)-(7,18)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (7,15)-(7,18) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── statements: - │ │ @ StatementsNode (location: (8,2)-(8,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (8,2)-(8,5)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :baz - │ │ ├── message_loc: (8,2)-(8,5) = "baz" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── for_keyword_loc: (7,0)-(7,3) = "for" - │ ├── in_keyword_loc: (7,12)-(7,14) = "in" - │ ├── do_keyword_loc: (7,19)-(7,21) = "do" - │ └── end_keyword_loc: (9,0)-(9,3) = "end" - └── @ ForNode (location: (10,0)-(12,3)) - ├── flags: newline - ├── index: - │ @ MultiTargetNode (location: (10,4)-(10,10)) - │ ├── flags: ∅ - │ ├── lefts: (length: 2) - │ │ ├── @ LocalVariableTargetNode (location: (10,5)-(10,6)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :a - │ │ │ └── depth: 0 - │ │ └── @ LocalVariableTargetNode (location: (10,8)-(10,9)) - │ │ ├── flags: ∅ - │ │ ├── name: :b - │ │ └── depth: 0 - │ ├── rest: ∅ - │ ├── rights: (length: 0) - │ ├── lparen_loc: (10,4)-(10,5) = "(" - │ └── rparen_loc: (10,9)-(10,10) = ")" - ├── collection: - │ @ CallNode (location: (10,14)-(10,17)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :bar - │ ├── message_loc: (10,14)-(10,17) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── statements: - │ @ StatementsNode (location: (11,2)-(11,5)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (11,2)-(11,5)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :baz - │ ├── message_loc: (11,2)-(11,5) = "baz" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── for_keyword_loc: (10,0)-(10,3) = "for" - ├── in_keyword_loc: (10,11)-(10,13) = "in" - ├── do_keyword_loc: (10,18)-(10,20) = "do" - └── end_keyword_loc: (12,0)-(12,3) = "end" diff --git a/test/prism/snapshots/unparser/corpus/literal/hookexe.txt b/test/prism/snapshots/unparser/corpus/literal/hookexe.txt deleted file mode 100644 index bbcb8fee1b0da7..00000000000000 --- a/test/prism/snapshots/unparser/corpus/literal/hookexe.txt +++ /dev/null @@ -1,55 +0,0 @@ -@ ProgramNode (location: (1,0)-(7,1)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(7,1)) - ├── flags: ∅ - └── body: (length: 3) - ├── @ PreExecutionNode (location: (1,0)-(3,1)) - │ ├── flags: newline - │ ├── statements: - │ │ @ StatementsNode (location: (2,2)-(2,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (2,2)-(2,5)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (2,2)-(2,5) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── keyword_loc: (1,0)-(1,5) = "BEGIN" - │ ├── opening_loc: (1,6)-(1,7) = "{" - │ └── closing_loc: (3,0)-(3,1) = "}" - ├── @ CallNode (location: (4,0)-(4,3)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :bar - │ ├── message_loc: (4,0)-(4,3) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── @ PostExecutionNode (location: (5,0)-(7,1)) - ├── flags: newline - ├── statements: - │ @ StatementsNode (location: (6,2)-(6,5)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (6,2)-(6,5)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :baz - │ ├── message_loc: (6,2)-(6,5) = "baz" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── keyword_loc: (5,0)-(5,3) = "END" - ├── opening_loc: (5,4)-(5,5) = "{" - └── closing_loc: (7,0)-(7,1) = "}" diff --git a/test/prism/snapshots/unparser/corpus/literal/if.txt b/test/prism/snapshots/unparser/corpus/literal/if.txt deleted file mode 100644 index 10240962c59375..00000000000000 --- a/test/prism/snapshots/unparser/corpus/literal/if.txt +++ /dev/null @@ -1,330 +0,0 @@ -@ ProgramNode (location: (1,0)-(36,3)) -├── flags: ∅ -├── locals: [:foo, :pair] -└── statements: - @ StatementsNode (location: (1,0)-(36,3)) - ├── flags: ∅ - └── body: (length: 10) - ├── @ IfNode (location: (1,0)-(3,3)) - │ ├── flags: newline - │ ├── if_keyword_loc: (1,0)-(1,2) = "if" - │ ├── predicate: - │ │ @ MatchLastLineNode (location: (1,3)-(1,8)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (1,3)-(1,4) = "/" - │ │ ├── content_loc: (1,4)-(1,7) = "foo" - │ │ ├── closing_loc: (1,7)-(1,8) = "/" - │ │ └── unescaped: "foo" - │ ├── then_keyword_loc: ∅ - │ ├── statements: - │ │ @ StatementsNode (location: (2,2)-(2,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (2,2)-(2,5)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (2,2)-(2,5) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── subsequent: ∅ - │ └── end_keyword_loc: (3,0)-(3,3) = "end" - ├── @ IfNode (location: (4,0)-(6,3)) - │ ├── flags: newline - │ ├── if_keyword_loc: (4,0)-(4,2) = "if" - │ ├── predicate: - │ │ @ IntegerNode (location: (4,3)-(4,4)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 3 - │ ├── then_keyword_loc: ∅ - │ ├── statements: - │ │ @ StatementsNode (location: (5,2)-(5,3)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ IntegerNode (location: (5,2)-(5,3)) - │ │ ├── flags: newline, static_literal, decimal - │ │ └── value: 9 - │ ├── subsequent: ∅ - │ └── end_keyword_loc: (6,0)-(6,3) = "end" - ├── @ IfNode (location: (7,0)-(11,3)) - │ ├── flags: newline - │ ├── if_keyword_loc: (7,0)-(7,2) = "if" - │ ├── predicate: - │ │ @ IntegerNode (location: (7,3)-(7,4)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 4 - │ ├── then_keyword_loc: ∅ - │ ├── statements: - │ │ @ StatementsNode (location: (8,2)-(8,3)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ IntegerNode (location: (8,2)-(8,3)) - │ │ ├── flags: newline, static_literal, decimal - │ │ └── value: 5 - │ ├── subsequent: - │ │ @ ElseNode (location: (9,0)-(11,3)) - │ │ ├── flags: ∅ - │ │ ├── else_keyword_loc: (9,0)-(9,4) = "else" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (10,2)-(10,3)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ IntegerNode (location: (10,2)-(10,3)) - │ │ │ ├── flags: newline, static_literal, decimal - │ │ │ └── value: 6 - │ │ └── end_keyword_loc: (11,0)-(11,3) = "end" - │ └── end_keyword_loc: (11,0)-(11,3) = "end" - ├── @ UnlessNode (location: (12,0)-(14,3)) - │ ├── flags: newline - │ ├── keyword_loc: (12,0)-(12,6) = "unless" - │ ├── predicate: - │ │ @ IntegerNode (location: (12,7)-(12,8)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 3 - │ ├── then_keyword_loc: ∅ - │ ├── statements: - │ │ @ StatementsNode (location: (13,2)-(13,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ NilNode (location: (13,2)-(13,5)) - │ │ └── flags: newline, static_literal - │ ├── else_clause: ∅ - │ └── end_keyword_loc: (14,0)-(14,3) = "end" - ├── @ UnlessNode (location: (15,0)-(17,3)) - │ ├── flags: newline - │ ├── keyword_loc: (15,0)-(15,6) = "unless" - │ ├── predicate: - │ │ @ IntegerNode (location: (15,7)-(15,8)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 3 - │ ├── then_keyword_loc: ∅ - │ ├── statements: - │ │ @ StatementsNode (location: (16,2)-(16,3)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ IntegerNode (location: (16,2)-(16,3)) - │ │ ├── flags: newline, static_literal, decimal - │ │ └── value: 9 - │ ├── else_clause: ∅ - │ └── end_keyword_loc: (17,0)-(17,3) = "end" - ├── @ IfNode (location: (18,0)-(19,3)) - │ ├── flags: newline - │ ├── if_keyword_loc: (18,0)-(18,2) = "if" - │ ├── predicate: - │ │ @ CallNode (location: (18,3)-(18,6)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (18,3)-(18,6) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── then_keyword_loc: ∅ - │ ├── statements: ∅ - │ ├── subsequent: ∅ - │ └── end_keyword_loc: (19,0)-(19,3) = "end" - ├── @ ModuleNode (location: (21,0)-(23,3)) - │ ├── flags: newline - │ ├── locals: [:foo] - │ ├── module_keyword_loc: (21,0)-(21,6) = "module" - │ ├── constant_path: - │ │ @ ConstantReadNode (location: (21,7)-(21,8)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── body: - │ │ @ StatementsNode (location: (22,2)-(22,18)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ IfNode (location: (22,2)-(22,18)) - │ │ ├── flags: newline - │ │ ├── if_keyword_loc: (22,12)-(22,14) = "if" - │ │ ├── predicate: - │ │ │ @ LocalVariableReadNode (location: (22,15)-(22,18)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :foo - │ │ │ └── depth: 0 - │ │ ├── then_keyword_loc: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (22,2)-(22,11)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ LocalVariableWriteNode (location: (22,2)-(22,11)) - │ │ │ ├── flags: newline - │ │ │ ├── name: :foo - │ │ │ ├── depth: 0 - │ │ │ ├── name_loc: (22,2)-(22,5) = "foo" - │ │ │ ├── value: - │ │ │ │ @ CallNode (location: (22,8)-(22,11)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :bar - │ │ │ │ ├── message_loc: (22,8)-(22,11) = "bar" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── operator_loc: (22,6)-(22,7) = "=" - │ │ ├── subsequent: ∅ - │ │ └── end_keyword_loc: ∅ - │ ├── end_keyword_loc: (23,0)-(23,3) = "end" - │ └── name: :A - ├── @ ModuleNode (location: (25,0)-(27,3)) - │ ├── flags: newline - │ ├── locals: [:foo] - │ ├── module_keyword_loc: (25,0)-(25,6) = "module" - │ ├── constant_path: - │ │ @ ConstantReadNode (location: (25,7)-(25,8)) - │ │ ├── flags: ∅ - │ │ └── name: :B - │ ├── body: - │ │ @ StatementsNode (location: (26,2)-(26,22)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ UnlessNode (location: (26,2)-(26,22)) - │ │ ├── flags: newline - │ │ ├── keyword_loc: (26,12)-(26,18) = "unless" - │ │ ├── predicate: - │ │ │ @ LocalVariableReadNode (location: (26,19)-(26,22)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :foo - │ │ │ └── depth: 0 - │ │ ├── then_keyword_loc: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (26,2)-(26,11)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ LocalVariableWriteNode (location: (26,2)-(26,11)) - │ │ │ ├── flags: newline - │ │ │ ├── name: :foo - │ │ │ ├── depth: 0 - │ │ │ ├── name_loc: (26,2)-(26,5) = "foo" - │ │ │ ├── value: - │ │ │ │ @ CallNode (location: (26,8)-(26,11)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :bar - │ │ │ │ ├── message_loc: (26,8)-(26,11) = "bar" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── operator_loc: (26,6)-(26,7) = "=" - │ │ ├── else_clause: ∅ - │ │ └── end_keyword_loc: ∅ - │ ├── end_keyword_loc: (27,0)-(27,3) = "end" - │ └── name: :B - ├── @ UnlessNode (location: (28,0)-(30,3)) - │ ├── flags: newline - │ ├── keyword_loc: (28,0)-(28,6) = "unless" - │ ├── predicate: - │ │ @ CallNode (location: (28,7)-(28,10)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (28,7)-(28,10) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── then_keyword_loc: ∅ - │ ├── statements: - │ │ @ StatementsNode (location: (29,2)-(29,11)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ LocalVariableWriteNode (location: (29,2)-(29,11)) - │ │ ├── flags: newline - │ │ ├── name: :foo - │ │ ├── depth: 0 - │ │ ├── name_loc: (29,2)-(29,5) = "foo" - │ │ ├── value: - │ │ │ @ CallNode (location: (29,8)-(29,11)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (29,8)-(29,11) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: (29,6)-(29,7) = "=" - │ ├── else_clause: ∅ - │ └── end_keyword_loc: (30,0)-(30,3) = "end" - └── @ IfNode (location: (31,0)-(36,3)) - ├── flags: newline - ├── if_keyword_loc: (31,0)-(31,2) = "if" - ├── predicate: - │ @ CallNode (location: (31,3)-(33,1)) - │ ├── flags: ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (31,3)-(31,6) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (31,7)-(33,1)) - │ ├── flags: ∅ - │ ├── locals: [:pair] - │ ├── parameters: - │ │ @ BlockParametersNode (location: (31,9)-(31,15)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (31,10)-(31,14)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (31,10)-(31,14)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :pair - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: (31,9)-(31,10) = "|" - │ │ └── closing_loc: (31,14)-(31,15) = "|" - │ ├── body: - │ │ @ StatementsNode (location: (32,2)-(32,6)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ LocalVariableReadNode (location: (32,2)-(32,6)) - │ │ ├── flags: newline - │ │ ├── name: :pair - │ │ └── depth: 0 - │ ├── opening_loc: (31,7)-(31,8) = "{" - │ └── closing_loc: (33,0)-(33,1) = "}" - ├── then_keyword_loc: ∅ - ├── statements: - │ @ StatementsNode (location: (34,2)-(35,5)) - │ ├── flags: ∅ - │ └── body: (length: 2) - │ ├── @ LocalVariableWriteNode (location: (34,2)-(34,13)) - │ │ ├── flags: newline - │ │ ├── name: :pair - │ │ ├── depth: 0 - │ │ ├── name_loc: (34,2)-(34,6) = "pair" - │ │ ├── value: - │ │ │ @ SymbolNode (location: (34,9)-(34,13)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (34,9)-(34,10) = ":" - │ │ │ ├── value_loc: (34,10)-(34,13) = "foo" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "foo" - │ │ └── operator_loc: (34,7)-(34,8) = "=" - │ └── @ LocalVariableReadNode (location: (35,2)-(35,5)) - │ ├── flags: newline - │ ├── name: :foo - │ └── depth: 0 - ├── subsequent: ∅ - └── end_keyword_loc: (36,0)-(36,3) = "end" diff --git a/test/prism/snapshots/unparser/corpus/literal/kwbegin.txt b/test/prism/snapshots/unparser/corpus/literal/kwbegin.txt deleted file mode 100644 index 9c7febe206badd..00000000000000 --- a/test/prism/snapshots/unparser/corpus/literal/kwbegin.txt +++ /dev/null @@ -1,570 +0,0 @@ -@ ProgramNode (location: (1,0)-(80,3)) -├── flags: ∅ -├── locals: [:foo, :bar, :exception] -└── statements: - @ StatementsNode (location: (1,0)-(80,3)) - ├── flags: ∅ - └── body: (length: 14) - ├── @ BeginNode (location: (1,0)-(3,3)) - │ ├── flags: newline - │ ├── begin_keyword_loc: (1,0)-(1,5) = "begin" - │ ├── statements: ∅ - │ ├── rescue_clause: - │ │ @ RescueNode (location: (2,0)-(2,6)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (2,0)-(2,6) = "rescue" - │ │ ├── exceptions: (length: 0) - │ │ ├── operator_loc: ∅ - │ │ ├── reference: ∅ - │ │ ├── statements: ∅ - │ │ └── subsequent: ∅ - │ ├── else_clause: ∅ - │ ├── ensure_clause: ∅ - │ └── end_keyword_loc: (3,0)-(3,3) = "end" - ├── @ BeginNode (location: (5,0)-(7,3)) - │ ├── flags: newline - │ ├── begin_keyword_loc: (5,0)-(5,5) = "begin" - │ ├── statements: ∅ - │ ├── rescue_clause: ∅ - │ ├── else_clause: ∅ - │ ├── ensure_clause: - │ │ @ EnsureNode (location: (6,0)-(7,3)) - │ │ ├── flags: ∅ - │ │ ├── ensure_keyword_loc: (6,0)-(6,6) = "ensure" - │ │ ├── statements: ∅ - │ │ └── end_keyword_loc: (7,0)-(7,3) = "end" - │ └── end_keyword_loc: (7,0)-(7,3) = "end" - ├── @ BeginNode (location: (9,0)-(11,3)) - │ ├── flags: newline - │ ├── begin_keyword_loc: (9,0)-(9,5) = "begin" - │ ├── statements: - │ │ @ StatementsNode (location: (10,2)-(10,3)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (10,2)-(10,3)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (10,2)-(10,3) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── rescue_clause: ∅ - │ ├── else_clause: ∅ - │ ├── ensure_clause: ∅ - │ └── end_keyword_loc: (11,0)-(11,3) = "end" - ├── @ BeginNode (location: (13,0)-(17,3)) - │ ├── flags: newline - │ ├── begin_keyword_loc: (13,0)-(13,5) = "begin" - │ ├── statements: - │ │ @ StatementsNode (location: (14,2)-(14,3)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (14,2)-(14,3)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (14,2)-(14,3) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── rescue_clause: - │ │ @ RescueNode (location: (15,0)-(16,3)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (15,0)-(15,6) = "rescue" - │ │ ├── exceptions: (length: 0) - │ │ ├── operator_loc: ∅ - │ │ ├── reference: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (16,2)-(16,3)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (16,2)-(16,3)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (16,2)-(16,3) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── subsequent: ∅ - │ ├── else_clause: ∅ - │ ├── ensure_clause: ∅ - │ └── end_keyword_loc: (17,0)-(17,3) = "end" - ├── @ BeginNode (location: (19,0)-(24,3)) - │ ├── flags: newline - │ ├── begin_keyword_loc: (19,0)-(19,5) = "begin" - │ ├── statements: - │ │ @ StatementsNode (location: (20,2)-(21,3)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 2) - │ │ ├── @ CallNode (location: (20,2)-(20,3)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :a - │ │ │ ├── message_loc: (20,2)-(20,3) = "a" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── @ CallNode (location: (21,2)-(21,3)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :b - │ │ ├── message_loc: (21,2)-(21,3) = "b" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── rescue_clause: - │ │ @ RescueNode (location: (22,0)-(23,3)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (22,0)-(22,6) = "rescue" - │ │ ├── exceptions: (length: 0) - │ │ ├── operator_loc: ∅ - │ │ ├── reference: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (23,2)-(23,3)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (23,2)-(23,3)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (23,2)-(23,3) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── subsequent: ∅ - │ ├── else_clause: ∅ - │ ├── ensure_clause: ∅ - │ └── end_keyword_loc: (24,0)-(24,3) = "end" - ├── @ BeginNode (location: (26,0)-(28,3)) - │ ├── flags: newline - │ ├── begin_keyword_loc: (26,0)-(26,5) = "begin" - │ ├── statements: ∅ - │ ├── rescue_clause: - │ │ @ RescueNode (location: (27,0)-(27,8)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (27,0)-(27,6) = "rescue" - │ │ ├── exceptions: (length: 1) - │ │ │ └── @ ConstantReadNode (location: (27,7)-(27,8)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :A - │ │ ├── operator_loc: ∅ - │ │ ├── reference: ∅ - │ │ ├── statements: ∅ - │ │ └── subsequent: ∅ - │ ├── else_clause: ∅ - │ ├── ensure_clause: ∅ - │ └── end_keyword_loc: (28,0)-(28,3) = "end" - ├── @ BeginNode (location: (30,0)-(32,3)) - │ ├── flags: newline - │ ├── begin_keyword_loc: (30,0)-(30,5) = "begin" - │ ├── statements: ∅ - │ ├── rescue_clause: - │ │ @ RescueNode (location: (31,0)-(31,15)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (31,0)-(31,6) = "rescue" - │ │ ├── exceptions: (length: 1) - │ │ │ └── @ ConstantReadNode (location: (31,7)-(31,8)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :A - │ │ ├── operator_loc: (31,9)-(31,11) = "=>" - │ │ ├── reference: - │ │ │ @ LocalVariableTargetNode (location: (31,12)-(31,15)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :foo - │ │ │ └── depth: 0 - │ │ ├── statements: ∅ - │ │ └── subsequent: ∅ - │ ├── else_clause: ∅ - │ ├── ensure_clause: ∅ - │ └── end_keyword_loc: (32,0)-(32,3) = "end" - ├── @ BeginNode (location: (34,0)-(42,3)) - │ ├── flags: newline - │ ├── begin_keyword_loc: (34,0)-(34,5) = "begin" - │ ├── statements: - │ │ @ StatementsNode (location: (35,2)-(35,3)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (35,2)-(35,3)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (35,2)-(35,3) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── rescue_clause: - │ │ @ RescueNode (location: (36,0)-(39,3)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (36,0)-(36,6) = "rescue" - │ │ ├── exceptions: (length: 1) - │ │ │ └── @ ConstantReadNode (location: (36,7)-(36,8)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :A - │ │ ├── operator_loc: ∅ - │ │ ├── reference: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (37,2)-(37,3)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (37,2)-(37,3)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (37,2)-(37,3) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── subsequent: - │ │ @ RescueNode (location: (38,0)-(39,3)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (38,0)-(38,6) = "rescue" - │ │ ├── exceptions: (length: 1) - │ │ │ └── @ ConstantReadNode (location: (38,7)-(38,8)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :B - │ │ ├── operator_loc: ∅ - │ │ ├── reference: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (39,2)-(39,3)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (39,2)-(39,3)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :c - │ │ │ ├── message_loc: (39,2)-(39,3) = "c" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── subsequent: ∅ - │ ├── else_clause: ∅ - │ ├── ensure_clause: - │ │ @ EnsureNode (location: (40,0)-(42,3)) - │ │ ├── flags: ∅ - │ │ ├── ensure_keyword_loc: (40,0)-(40,6) = "ensure" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (41,2)-(41,3)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (41,2)-(41,3)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :d - │ │ │ ├── message_loc: (41,2)-(41,3) = "d" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── end_keyword_loc: (42,0)-(42,3) = "end" - │ └── end_keyword_loc: (42,0)-(42,3) = "end" - ├── @ BeginNode (location: (44,0)-(53,3)) - │ ├── flags: newline - │ ├── begin_keyword_loc: (44,0)-(44,5) = "begin" - │ ├── statements: - │ │ @ StatementsNode (location: (45,2)-(49,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ BeginNode (location: (45,2)-(49,5)) - │ │ ├── flags: newline - │ │ ├── begin_keyword_loc: (45,2)-(45,7) = "begin" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (46,4)-(47,7)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 2) - │ │ │ ├── @ LocalVariableReadNode (location: (46,4)-(46,7)) - │ │ │ │ ├── flags: newline - │ │ │ │ ├── name: :foo - │ │ │ │ └── depth: 0 - │ │ │ └── @ CallNode (location: (47,4)-(47,7)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (47,4)-(47,7) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── rescue_clause: - │ │ │ @ RescueNode (location: (48,2)-(48,8)) - │ │ │ ├── flags: ∅ - │ │ │ ├── keyword_loc: (48,2)-(48,8) = "rescue" - │ │ │ ├── exceptions: (length: 0) - │ │ │ ├── operator_loc: ∅ - │ │ │ ├── reference: ∅ - │ │ │ ├── statements: ∅ - │ │ │ └── subsequent: ∅ - │ │ ├── else_clause: ∅ - │ │ ├── ensure_clause: ∅ - │ │ └── end_keyword_loc: (49,2)-(49,5) = "end" - │ ├── rescue_clause: - │ │ @ RescueNode (location: (50,0)-(52,5)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (50,0)-(50,6) = "rescue" - │ │ ├── exceptions: (length: 0) - │ │ ├── operator_loc: ∅ - │ │ ├── reference: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (51,2)-(52,5)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 2) - │ │ │ ├── @ CallNode (location: (51,2)-(51,5)) - │ │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ ├── message_loc: (51,2)-(51,5) = "baz" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── @ CallNode (location: (52,2)-(52,5)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (52,2)-(52,5) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── subsequent: ∅ - │ ├── else_clause: ∅ - │ ├── ensure_clause: ∅ - │ └── end_keyword_loc: (53,0)-(53,3) = "end" - ├── @ BeginNode (location: (55,0)-(58,3)) - │ ├── flags: newline - │ ├── begin_keyword_loc: (55,0)-(55,5) = "begin" - │ ├── statements: - │ │ @ StatementsNode (location: (56,2)-(56,35)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ RescueModifierNode (location: (56,2)-(56,35)) - │ │ ├── flags: newline - │ │ ├── expression: - │ │ │ @ CallNode (location: (56,2)-(56,18)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :raise - │ │ │ ├── message_loc: (56,2)-(56,7) = "raise" - │ │ │ ├── opening_loc: (56,7)-(56,8) = "(" - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (56,8)-(56,17)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ ConstantReadNode (location: (56,8)-(56,17)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :Exception - │ │ │ ├── closing_loc: (56,17)-(56,18) = ")" - │ │ │ └── block: ∅ - │ │ ├── keyword_loc: (56,19)-(56,25) = "rescue" - │ │ └── rescue_expression: - │ │ @ LocalVariableWriteNode (location: (56,26)-(56,35)) - │ │ ├── flags: ∅ - │ │ ├── name: :foo - │ │ ├── depth: 0 - │ │ ├── name_loc: (56,26)-(56,29) = "foo" - │ │ ├── value: - │ │ │ @ CallNode (location: (56,32)-(56,35)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (56,32)-(56,35) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: (56,30)-(56,31) = "=" - │ ├── rescue_clause: - │ │ @ RescueNode (location: (57,0)-(57,16)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (57,0)-(57,6) = "rescue" - │ │ ├── exceptions: (length: 1) - │ │ │ └── @ ConstantReadNode (location: (57,7)-(57,16)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :Exception - │ │ ├── operator_loc: ∅ - │ │ ├── reference: ∅ - │ │ ├── statements: ∅ - │ │ └── subsequent: ∅ - │ ├── else_clause: ∅ - │ ├── ensure_clause: ∅ - │ └── end_keyword_loc: (58,0)-(58,3) = "end" - ├── @ BeginNode (location: (60,0)-(64,3)) - │ ├── flags: newline - │ ├── begin_keyword_loc: (60,0)-(60,5) = "begin" - │ ├── statements: - │ │ @ StatementsNode (location: (61,2)-(61,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ LocalVariableReadNode (location: (61,2)-(61,5)) - │ │ ├── flags: newline - │ │ ├── name: :foo - │ │ └── depth: 0 - │ ├── rescue_clause: - │ │ @ RescueNode (location: (62,0)-(63,5)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (62,0)-(62,6) = "rescue" - │ │ ├── exceptions: (length: 0) - │ │ ├── operator_loc: (62,7)-(62,9) = "=>" - │ │ ├── reference: - │ │ │ @ LocalVariableTargetNode (location: (62,10)-(62,13)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :bar - │ │ │ └── depth: 0 - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (63,2)-(63,5)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ LocalVariableReadNode (location: (63,2)-(63,5)) - │ │ │ ├── flags: newline - │ │ │ ├── name: :bar - │ │ │ └── depth: 0 - │ │ └── subsequent: ∅ - │ ├── else_clause: ∅ - │ ├── ensure_clause: ∅ - │ └── end_keyword_loc: (64,0)-(64,3) = "end" - ├── @ BeginNode (location: (66,0)-(70,3)) - │ ├── flags: newline - │ ├── begin_keyword_loc: (66,0)-(66,5) = "begin" - │ ├── statements: - │ │ @ StatementsNode (location: (67,2)-(67,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ LocalVariableReadNode (location: (67,2)-(67,5)) - │ │ ├── flags: newline - │ │ ├── name: :foo - │ │ └── depth: 0 - │ ├── rescue_clause: - │ │ @ RescueNode (location: (68,0)-(69,5)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (68,0)-(68,6) = "rescue" - │ │ ├── exceptions: (length: 2) - │ │ │ ├── @ ConstantReadNode (location: (68,7)-(68,16)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :Exception - │ │ │ └── @ ConstantReadNode (location: (68,18)-(68,23)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :Other - │ │ ├── operator_loc: (68,24)-(68,26) = "=>" - │ │ ├── reference: - │ │ │ @ LocalVariableTargetNode (location: (68,27)-(68,30)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :bar - │ │ │ └── depth: 0 - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (69,2)-(69,5)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ LocalVariableReadNode (location: (69,2)-(69,5)) - │ │ │ ├── flags: newline - │ │ │ ├── name: :bar - │ │ │ └── depth: 0 - │ │ └── subsequent: ∅ - │ ├── else_clause: ∅ - │ ├── ensure_clause: ∅ - │ └── end_keyword_loc: (70,0)-(70,3) = "end" - ├── @ BeginNode (location: (72,0)-(76,3)) - │ ├── flags: newline - │ ├── begin_keyword_loc: (72,0)-(72,5) = "begin" - │ ├── statements: - │ │ @ StatementsNode (location: (73,2)-(73,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ LocalVariableReadNode (location: (73,2)-(73,5)) - │ │ ├── flags: newline - │ │ ├── name: :bar - │ │ └── depth: 0 - │ ├── rescue_clause: - │ │ @ RescueNode (location: (74,0)-(75,5)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (74,0)-(74,6) = "rescue" - │ │ ├── exceptions: (length: 2) - │ │ │ ├── @ ConstantReadNode (location: (74,7)-(74,16)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :SomeError - │ │ │ └── @ SplatNode (location: (74,18)-(74,22)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (74,18)-(74,19) = "*" - │ │ │ └── expression: - │ │ │ @ LocalVariableReadNode (location: (74,19)-(74,22)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :bar - │ │ │ └── depth: 0 - │ │ ├── operator_loc: (74,23)-(74,25) = "=>" - │ │ ├── reference: - │ │ │ @ LocalVariableTargetNode (location: (74,26)-(74,35)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :exception - │ │ │ └── depth: 0 - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (75,2)-(75,5)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (75,2)-(75,5)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :baz - │ │ │ ├── message_loc: (75,2)-(75,5) = "baz" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── subsequent: ∅ - │ ├── else_clause: ∅ - │ ├── ensure_clause: ∅ - │ └── end_keyword_loc: (76,0)-(76,3) = "end" - └── @ SingletonClassNode (location: (78,0)-(80,3)) - ├── flags: newline - ├── locals: [] - ├── class_keyword_loc: (78,0)-(78,5) = "class" - ├── operator_loc: (78,6)-(78,8) = "<<" - ├── expression: - │ @ SelfNode (location: (78,9)-(78,13)) - │ └── flags: ∅ - ├── body: - │ @ StatementsNode (location: (79,2)-(79,23)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ RescueModifierNode (location: (79,2)-(79,23)) - │ ├── flags: newline - │ ├── expression: - │ │ @ UndefNode (location: (79,2)-(79,12)) - │ │ ├── flags: ∅ - │ │ ├── names: (length: 1) - │ │ │ └── @ SymbolNode (location: (79,8)-(79,12)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (79,8)-(79,9) = ":" - │ │ │ ├── value_loc: (79,9)-(79,12) = "bar" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "bar" - │ │ └── keyword_loc: (79,2)-(79,7) = "undef" - │ ├── keyword_loc: (79,13)-(79,19) = "rescue" - │ └── rescue_expression: - │ @ NilNode (location: (79,20)-(79,23)) - │ └── flags: static_literal - └── end_keyword_loc: (80,0)-(80,3) = "end" diff --git a/test/prism/snapshots/unparser/corpus/literal/lambda.txt b/test/prism/snapshots/unparser/corpus/literal/lambda.txt deleted file mode 100644 index 863678f17b4a8f..00000000000000 --- a/test/prism/snapshots/unparser/corpus/literal/lambda.txt +++ /dev/null @@ -1,170 +0,0 @@ -@ ProgramNode (location: (1,0)-(13,1)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(13,1)) - ├── flags: ∅ - └── body: (length: 6) - ├── @ CallNode (location: (1,0)-(2,1)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :lambda - │ ├── message_loc: (1,0)-(1,6) = "lambda" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (1,7)-(2,1)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (1,7)-(1,8) = "{" - │ └── closing_loc: (2,0)-(2,1) = "}" - ├── @ CallNode (location: (3,0)-(5,1)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :lambda - │ ├── message_loc: (3,0)-(3,6) = "lambda" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (3,7)-(5,1)) - │ ├── flags: ∅ - │ ├── locals: [:a, :b] - │ ├── parameters: - │ │ @ BlockParametersNode (location: (3,9)-(3,15)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (3,10)-(3,14)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 2) - │ │ │ │ ├── @ RequiredParameterNode (location: (3,10)-(3,11)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── name: :a - │ │ │ │ └── @ RequiredParameterNode (location: (3,13)-(3,14)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :b - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: (3,9)-(3,10) = "|" - │ │ └── closing_loc: (3,14)-(3,15) = "|" - │ ├── body: - │ │ @ StatementsNode (location: (4,2)-(4,3)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ LocalVariableReadNode (location: (4,2)-(4,3)) - │ │ ├── flags: newline - │ │ ├── name: :a - │ │ └── depth: 0 - │ ├── opening_loc: (3,7)-(3,8) = "{" - │ └── closing_loc: (5,0)-(5,1) = "}" - ├── @ LambdaNode (location: (6,0)-(7,1)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── operator_loc: (6,0)-(6,2) = "->" - │ ├── opening_loc: (6,5)-(6,6) = "{" - │ ├── closing_loc: (7,0)-(7,1) = "}" - │ ├── parameters: - │ │ @ BlockParametersNode (location: (6,2)-(6,4)) - │ │ ├── flags: ∅ - │ │ ├── parameters: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: (6,2)-(6,3) = "(" - │ │ └── closing_loc: (6,3)-(6,4) = ")" - │ └── body: ∅ - ├── @ LambdaNode (location: (8,0)-(9,1)) - │ ├── flags: newline - │ ├── locals: [:a] - │ ├── operator_loc: (8,0)-(8,2) = "->" - │ ├── opening_loc: (8,6)-(8,7) = "{" - │ ├── closing_loc: (9,0)-(9,1) = "}" - │ ├── parameters: - │ │ @ BlockParametersNode (location: (8,2)-(8,5)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (8,3)-(8,4)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (8,3)-(8,4)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :a - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: (8,2)-(8,3) = "(" - │ │ └── closing_loc: (8,4)-(8,5) = ")" - │ └── body: ∅ - ├── @ LambdaNode (location: (10,0)-(11,1)) - │ ├── flags: newline - │ ├── locals: [:a, :b] - │ ├── operator_loc: (10,0)-(10,2) = "->" - │ ├── opening_loc: (10,9)-(10,10) = "{" - │ ├── closing_loc: (11,0)-(11,1) = "}" - │ ├── parameters: - │ │ @ BlockParametersNode (location: (10,2)-(10,8)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (10,3)-(10,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 2) - │ │ │ │ ├── @ RequiredParameterNode (location: (10,3)-(10,4)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── name: :a - │ │ │ │ └── @ RequiredParameterNode (location: (10,6)-(10,7)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :b - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: (10,2)-(10,3) = "(" - │ │ └── closing_loc: (10,7)-(10,8) = ")" - │ └── body: ∅ - └── @ LambdaNode (location: (12,0)-(13,1)) - ├── flags: newline - ├── locals: [:a, :b, :c] - ├── operator_loc: (12,0)-(12,2) = "->" - ├── opening_loc: (12,12)-(12,13) = "{" - ├── closing_loc: (13,0)-(13,1) = "}" - ├── parameters: - │ @ BlockParametersNode (location: (12,2)-(12,11)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (12,3)-(12,7)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 2) - │ │ │ ├── @ RequiredParameterNode (location: (12,3)-(12,4)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :a - │ │ │ └── @ RequiredParameterNode (location: (12,6)-(12,7)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :b - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 1) - │ │ └── @ BlockLocalVariableNode (location: (12,9)-(12,10)) - │ │ ├── flags: ∅ - │ │ └── name: :c - │ ├── opening_loc: (12,2)-(12,3) = "(" - │ └── closing_loc: (12,10)-(12,11) = ")" - └── body: ∅ diff --git a/test/prism/snapshots/unparser/corpus/literal/literal.txt b/test/prism/snapshots/unparser/corpus/literal/literal.txt deleted file mode 100644 index 430a8a06793857..00000000000000 --- a/test/prism/snapshots/unparser/corpus/literal/literal.txt +++ /dev/null @@ -1,1309 +0,0 @@ -@ ProgramNode (location: (1,0)-(91,2)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(91,2)) - ├── flags: ∅ - └── body: (length: 78) - ├── @ HashNode (location: (1,0)-(1,38)) - │ ├── flags: newline - │ ├── opening_loc: (1,0)-(1,1) = "{" - │ ├── elements: (length: 2) - │ │ ├── @ AssocNode (location: (1,2)-(1,21)) - │ │ │ ├── flags: ∅ - │ │ │ ├── key: - │ │ │ │ @ StringNode (location: (1,2)-(1,7)) - │ │ │ │ ├── flags: static_literal, frozen - │ │ │ │ ├── opening_loc: (1,2)-(1,3) = "\"" - │ │ │ │ ├── content_loc: (1,3)-(1,6) = "foo" - │ │ │ │ ├── closing_loc: (1,6)-(1,7) = "\"" - │ │ │ │ └── unescaped: "foo" - │ │ │ ├── value: - │ │ │ │ @ InterpolatedStringNode (location: (1,11)-(1,21)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── opening_loc: (1,11)-(1,21) = "<<-HEREDOC" - │ │ │ │ ├── parts: (length: 3) - │ │ │ │ │ ├── @ StringNode (location: (2,0)-(2,2)) - │ │ │ │ │ │ ├── flags: static_literal, frozen - │ │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ │ ├── content_loc: (2,0)-(2,2) = " " - │ │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ │ └── unescaped: " " - │ │ │ │ │ ├── @ EmbeddedStatementsNode (location: (2,2)-(2,5)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ ├── opening_loc: (2,2)-(2,4) = "\#{" - │ │ │ │ │ │ ├── statements: ∅ - │ │ │ │ │ │ └── closing_loc: (2,4)-(2,5) = "}" - │ │ │ │ │ └── @ StringNode (location: (2,5)-(3,0)) - │ │ │ │ │ ├── flags: static_literal, frozen - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── content_loc: (2,5)-(3,0) = "\n" - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── unescaped: "\n" - │ │ │ │ └── closing_loc: (3,0)-(4,0) = "HEREDOC\n" - │ │ │ └── operator_loc: (1,8)-(1,10) = "=>" - │ │ └── @ AssocNode (location: (1,23)-(1,36)) - │ │ ├── flags: static_literal - │ │ ├── key: - │ │ │ @ StringNode (location: (1,23)-(1,28)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: (1,23)-(1,24) = "\"" - │ │ │ ├── content_loc: (1,24)-(1,27) = "bar" - │ │ │ ├── closing_loc: (1,27)-(1,28) = "\"" - │ │ │ └── unescaped: "bar" - │ │ ├── value: - │ │ │ @ SymbolNode (location: (1,32)-(1,36)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (1,32)-(1,33) = ":" - │ │ │ ├── value_loc: (1,33)-(1,36) = "baz" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "baz" - │ │ └── operator_loc: (1,29)-(1,31) = "=>" - │ └── closing_loc: (1,37)-(1,38) = "}" - ├── @ HashNode (location: (4,0)-(4,31)) - │ ├── flags: newline - │ ├── opening_loc: (4,0)-(4,1) = "{" - │ ├── elements: (length: 2) - │ │ ├── @ AssocNode (location: (4,2)-(4,14)) - │ │ │ ├── flags: ∅ - │ │ │ ├── key: - │ │ │ │ @ StringNode (location: (4,2)-(4,7)) - │ │ │ │ ├── flags: static_literal, frozen - │ │ │ │ ├── opening_loc: (4,2)-(4,3) = "\"" - │ │ │ │ ├── content_loc: (4,3)-(4,6) = "foo" - │ │ │ │ ├── closing_loc: (4,6)-(4,7) = "\"" - │ │ │ │ └── unescaped: "foo" - │ │ │ ├── value: - │ │ │ │ @ StringNode (location: (4,11)-(4,14)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── opening_loc: (4,11)-(4,13) = "%(" - │ │ │ │ ├── content_loc: (4,13)-(4,13) = "" - │ │ │ │ ├── closing_loc: (4,13)-(4,14) = ")" - │ │ │ │ └── unescaped: "" - │ │ │ └── operator_loc: (4,8)-(4,10) = "=>" - │ │ └── @ AssocNode (location: (4,16)-(4,29)) - │ │ ├── flags: static_literal - │ │ ├── key: - │ │ │ @ StringNode (location: (4,16)-(4,21)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: (4,16)-(4,17) = "\"" - │ │ │ ├── content_loc: (4,17)-(4,20) = "bar" - │ │ │ ├── closing_loc: (4,20)-(4,21) = "\"" - │ │ │ └── unescaped: "bar" - │ │ ├── value: - │ │ │ @ SymbolNode (location: (4,25)-(4,29)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (4,25)-(4,26) = ":" - │ │ │ ├── value_loc: (4,26)-(4,29) = "baz" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "baz" - │ │ └── operator_loc: (4,22)-(4,24) = "=>" - │ └── closing_loc: (4,30)-(4,31) = "}" - ├── @ ArrayNode (location: (5,0)-(5,12)) - │ ├── flags: newline - │ ├── elements: (length: 2) - │ │ ├── @ StringNode (location: (5,1)-(5,6)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (5,1)-(5,2) = "\"" - │ │ │ ├── content_loc: (5,2)-(5,5) = "foo" - │ │ │ ├── closing_loc: (5,5)-(5,6) = "\"" - │ │ │ └── unescaped: "foo" - │ │ └── @ StringNode (location: (5,8)-(5,11)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (5,8)-(5,10) = "%(" - │ │ ├── content_loc: (5,10)-(5,10) = "" - │ │ ├── closing_loc: (5,10)-(5,11) = ")" - │ │ └── unescaped: "" - │ ├── opening_loc: (5,0)-(5,1) = "[" - │ └── closing_loc: (5,11)-(5,12) = "]" - ├── @ CallNode (location: (6,0)-(6,15)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (6,0)-(6,13)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (6,0)-(6,1) = "a" - │ │ ├── opening_loc: (6,1)-(6,2) = "(" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (6,2)-(6,12)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ InterpolatedStringNode (location: (6,2)-(6,12)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (6,2)-(6,12) = "<<-HEREDOC" - │ │ │ ├── parts: (length: 3) - │ │ │ │ ├── @ StringNode (location: (7,0)-(7,2)) - │ │ │ │ │ ├── flags: static_literal, frozen - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── content_loc: (7,0)-(7,2) = " " - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── unescaped: " " - │ │ │ │ ├── @ EmbeddedStatementsNode (location: (7,2)-(7,5)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── opening_loc: (7,2)-(7,4) = "\#{" - │ │ │ │ │ ├── statements: ∅ - │ │ │ │ │ └── closing_loc: (7,4)-(7,5) = "}" - │ │ │ │ └── @ StringNode (location: (7,5)-(8,0)) - │ │ │ │ ├── flags: static_literal, frozen - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── content_loc: (7,5)-(8,0) = "\n" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "\n" - │ │ │ └── closing_loc: (8,0)-(9,0) = "HEREDOC\n" - │ │ ├── closing_loc: (6,12)-(6,13) = ")" - │ │ └── block: ∅ - │ ├── call_operator_loc: (6,13)-(6,14) = "." - │ ├── name: :a - │ ├── message_loc: (6,14)-(6,15) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (9,0)-(9,8)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (9,0)-(9,6)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (9,0)-(9,1) = "a" - │ │ ├── opening_loc: (9,1)-(9,2) = "(" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (9,2)-(9,5)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ StringNode (location: (9,2)-(9,5)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (9,2)-(9,4) = "%(" - │ │ │ ├── content_loc: (9,4)-(9,4) = "" - │ │ │ ├── closing_loc: (9,4)-(9,5) = ")" - │ │ │ └── unescaped: "" - │ │ ├── closing_loc: (9,5)-(9,6) = ")" - │ │ └── block: ∅ - │ ├── call_operator_loc: (9,6)-(9,7) = "." - │ ├── name: :a - │ ├── message_loc: (9,7)-(9,8) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ HashNode (location: (10,0)-(10,30)) - │ ├── flags: newline - │ ├── opening_loc: (10,0)-(10,1) = "{" - │ ├── elements: (length: 2) - │ │ ├── @ AssocNode (location: (10,2)-(10,21)) - │ │ │ ├── flags: ∅ - │ │ │ ├── key: - │ │ │ │ @ StringNode (location: (10,2)-(10,7)) - │ │ │ │ ├── flags: static_literal, frozen - │ │ │ │ ├── opening_loc: (10,2)-(10,3) = "\"" - │ │ │ │ ├── content_loc: (10,3)-(10,6) = "foo" - │ │ │ │ ├── closing_loc: (10,6)-(10,7) = "\"" - │ │ │ │ └── unescaped: "foo" - │ │ │ ├── value: - │ │ │ │ @ InterpolatedStringNode (location: (10,11)-(10,21)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── opening_loc: (10,11)-(10,21) = "<<-HEREDOC" - │ │ │ │ ├── parts: (length: 3) - │ │ │ │ │ ├── @ StringNode (location: (11,0)-(11,2)) - │ │ │ │ │ │ ├── flags: static_literal, frozen - │ │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ │ ├── content_loc: (11,0)-(11,2) = " " - │ │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ │ └── unescaped: " " - │ │ │ │ │ ├── @ EmbeddedStatementsNode (location: (11,2)-(11,5)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ ├── opening_loc: (11,2)-(11,4) = "\#{" - │ │ │ │ │ │ ├── statements: ∅ - │ │ │ │ │ │ └── closing_loc: (11,4)-(11,5) = "}" - │ │ │ │ │ └── @ StringNode (location: (11,5)-(12,0)) - │ │ │ │ │ ├── flags: static_literal, frozen - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── content_loc: (11,5)-(12,0) = "\n" - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── unescaped: "\n" - │ │ │ │ └── closing_loc: (12,0)-(13,0) = "HEREDOC\n" - │ │ │ └── operator_loc: (10,8)-(10,10) = "=>" - │ │ └── @ AssocSplatNode (location: (10,23)-(10,28)) - │ │ ├── flags: ∅ - │ │ ├── value: - │ │ │ @ CallNode (location: (10,25)-(10,28)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :baz - │ │ │ ├── message_loc: (10,25)-(10,28) = "baz" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: (10,23)-(10,25) = "**" - │ └── closing_loc: (10,29)-(10,30) = "}" - ├── @ HashNode (location: (13,0)-(13,23)) - │ ├── flags: newline - │ ├── opening_loc: (13,0)-(13,1) = "{" - │ ├── elements: (length: 2) - │ │ ├── @ AssocNode (location: (13,2)-(13,14)) - │ │ │ ├── flags: ∅ - │ │ │ ├── key: - │ │ │ │ @ StringNode (location: (13,2)-(13,7)) - │ │ │ │ ├── flags: static_literal, frozen - │ │ │ │ ├── opening_loc: (13,2)-(13,3) = "\"" - │ │ │ │ ├── content_loc: (13,3)-(13,6) = "foo" - │ │ │ │ ├── closing_loc: (13,6)-(13,7) = "\"" - │ │ │ │ └── unescaped: "foo" - │ │ │ ├── value: - │ │ │ │ @ StringNode (location: (13,11)-(13,14)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── opening_loc: (13,11)-(13,13) = "%(" - │ │ │ │ ├── content_loc: (13,13)-(13,13) = "" - │ │ │ │ ├── closing_loc: (13,13)-(13,14) = ")" - │ │ │ │ └── unescaped: "" - │ │ │ └── operator_loc: (13,8)-(13,10) = "=>" - │ │ └── @ AssocSplatNode (location: (13,16)-(13,21)) - │ │ ├── flags: ∅ - │ │ ├── value: - │ │ │ @ CallNode (location: (13,18)-(13,21)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :baz - │ │ │ ├── message_loc: (13,18)-(13,21) = "baz" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: (13,16)-(13,18) = "**" - │ └── closing_loc: (13,22)-(13,23) = "}" - ├── @ InterpolatedStringNode (location: (14,0)-(14,14)) - │ ├── flags: newline - │ ├── opening_loc: (14,0)-(14,1) = "\"" - │ ├── parts: (length: 5) - │ │ ├── @ EmbeddedVariableNode (location: (14,1)-(14,4)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (14,1)-(14,2) = "#" - │ │ │ └── variable: - │ │ │ @ InstanceVariableReadNode (location: (14,2)-(14,4)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :@a - │ │ ├── @ StringNode (location: (14,4)-(14,5)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (14,4)-(14,5) = " " - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: " " - │ │ ├── @ EmbeddedVariableNode (location: (14,5)-(14,9)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (14,5)-(14,6) = "#" - │ │ │ └── variable: - │ │ │ @ ClassVariableReadNode (location: (14,6)-(14,9)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :@@a - │ │ ├── @ StringNode (location: (14,9)-(14,10)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (14,9)-(14,10) = " " - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: " " - │ │ └── @ EmbeddedVariableNode (location: (14,10)-(14,13)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (14,10)-(14,11) = "#" - │ │ └── variable: - │ │ @ GlobalVariableReadNode (location: (14,11)-(14,13)) - │ │ ├── flags: ∅ - │ │ └── name: :$a - │ └── closing_loc: (14,13)-(14,14) = "\"" - ├── @ IntegerNode (location: (15,0)-(15,1)) - │ ├── flags: newline, static_literal, decimal - │ └── value: 0 - ├── @ CallNode (location: (16,0)-(16,3)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ IntegerNode (location: (16,1)-(16,3)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── call_operator_loc: ∅ - │ ├── name: :+@ - │ ├── message_loc: (16,0)-(16,1) = "+" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ IntegerNode (location: (17,0)-(17,1)) - │ ├── flags: newline, static_literal, decimal - │ └── value: 1 - ├── @ IntegerNode (location: (18,0)-(18,1)) - │ ├── flags: newline, static_literal, decimal - │ └── value: 1 - ├── @ RationalNode (location: (19,0)-(19,2)) - │ ├── flags: newline, static_literal, decimal - │ ├── numerator: 1 - │ └── denominator: 1 - ├── @ RationalNode (location: (20,0)-(20,4)) - │ ├── flags: newline, static_literal, decimal - │ ├── numerator: 3 - │ └── denominator: 2 - ├── @ RationalNode (location: (21,0)-(21,4)) - │ ├── flags: newline, static_literal, decimal - │ ├── numerator: 13 - │ └── denominator: 10 - ├── @ ImaginaryNode (location: (22,0)-(22,2)) - │ ├── flags: newline, static_literal - │ └── numeric: - │ @ IntegerNode (location: (22,0)-(22,1)) - │ ├── flags: static_literal, decimal - │ └── value: 5 - ├── @ ImaginaryNode (location: (23,0)-(23,3)) - │ ├── flags: newline, static_literal - │ └── numeric: - │ @ IntegerNode (location: (23,0)-(23,2)) - │ ├── flags: static_literal, decimal - │ └── value: -5 - ├── @ ImaginaryNode (location: (24,0)-(24,4)) - │ ├── flags: newline, static_literal - │ └── numeric: - │ @ FloatNode (location: (24,0)-(24,3)) - │ ├── flags: static_literal - │ └── value: 0.6 - ├── @ ImaginaryNode (location: (25,0)-(25,5)) - │ ├── flags: newline, static_literal - │ └── numeric: - │ @ FloatNode (location: (25,0)-(25,4)) - │ ├── flags: static_literal - │ └── value: -0.6 - ├── @ ImaginaryNode (location: (26,0)-(26,32)) - │ ├── flags: newline, static_literal - │ └── numeric: - │ @ IntegerNode (location: (26,0)-(26,31)) - │ ├── flags: static_literal, decimal - │ └── value: 1000000000000000000000000000000 - ├── @ ImaginaryNode (location: (27,0)-(27,3)) - │ ├── flags: newline, static_literal - │ └── numeric: - │ @ RationalNode (location: (27,0)-(27,2)) - │ ├── flags: static_literal, decimal - │ ├── numerator: 1 - │ └── denominator: 1 - ├── @ InterpolatedStringNode (location: (28,0)-(28,11)) - │ ├── flags: newline, static_literal - │ ├── opening_loc: ∅ - │ ├── parts: (length: 2) - │ │ ├── @ StringNode (location: (28,0)-(28,5)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: (28,0)-(28,1) = "\"" - │ │ │ ├── content_loc: (28,1)-(28,4) = "foo" - │ │ │ ├── closing_loc: (28,4)-(28,5) = "\"" - │ │ │ └── unescaped: "foo" - │ │ └── @ StringNode (location: (28,6)-(28,11)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: (28,6)-(28,7) = "\"" - │ │ ├── content_loc: (28,7)-(28,10) = "bar" - │ │ ├── closing_loc: (28,10)-(28,11) = "\"" - │ │ └── unescaped: "bar" - │ └── closing_loc: ∅ - ├── @ InterpolatedStringNode (location: (29,0)-(29,15)) - │ ├── flags: newline - │ ├── opening_loc: (29,0)-(29,1) = "\"" - │ ├── parts: (length: 2) - │ │ ├── @ StringNode (location: (29,1)-(29,8)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (29,1)-(29,8) = "foobar " - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "foobar " - │ │ └── @ EmbeddedStatementsNode (location: (29,8)-(29,14)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (29,8)-(29,10) = "\#{" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (29,10)-(29,13)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (29,10)-(29,13)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :baz - │ │ │ ├── message_loc: (29,10)-(29,13) = "baz" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── closing_loc: (29,13)-(29,14) = "}" - │ └── closing_loc: (29,14)-(29,15) = "\"" - ├── @ InterpolatedStringNode (location: (30,0)-(30,12)) - │ ├── flags: newline - │ ├── opening_loc: (30,0)-(30,1) = "\"" - │ ├── parts: (length: 3) - │ │ ├── @ StringNode (location: (30,1)-(30,4)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (30,1)-(30,4) = "foo" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "foo" - │ │ ├── @ EmbeddedStatementsNode (location: (30,4)-(30,8)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (30,4)-(30,6) = "\#{" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (30,6)-(30,7)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ IntegerNode (location: (30,6)-(30,7)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ └── closing_loc: (30,7)-(30,8) = "}" - │ │ └── @ StringNode (location: (30,8)-(30,11)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (30,8)-(30,11) = "bar" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "bar" - │ └── closing_loc: (30,11)-(30,12) = "\"" - ├── @ InterpolatedStringNode (location: (31,0)-(31,9)) - │ ├── flags: newline - │ ├── opening_loc: (31,0)-(31,1) = "\"" - │ ├── parts: (length: 2) - │ │ ├── @ StringNode (location: (31,1)-(31,5)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (31,1)-(31,5) = "\\\\\\\\" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "\\\\" - │ │ └── @ EmbeddedStatementsNode (location: (31,5)-(31,8)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (31,5)-(31,7) = "\#{" - │ │ ├── statements: ∅ - │ │ └── closing_loc: (31,7)-(31,8) = "}" - │ └── closing_loc: (31,8)-(31,9) = "\"" - ├── @ InterpolatedStringNode (location: (32,0)-(32,9)) - │ ├── flags: newline - │ ├── opening_loc: (32,0)-(32,1) = "\"" - │ ├── parts: (length: 2) - │ │ ├── @ EmbeddedStatementsNode (location: (32,1)-(32,4)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (32,1)-(32,3) = "\#{" - │ │ │ ├── statements: ∅ - │ │ │ └── closing_loc: (32,3)-(32,4) = "}" - │ │ └── @ StringNode (location: (32,4)-(32,8)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (32,4)-(32,8) = "\\\#{}" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "\#{}" - │ └── closing_loc: (32,8)-(32,9) = "\"" - ├── @ InterpolatedStringNode (location: (33,0)-(33,9)) - │ ├── flags: newline - │ ├── opening_loc: (33,0)-(33,1) = "\"" - │ ├── parts: (length: 2) - │ │ ├── @ StringNode (location: (33,1)-(33,5)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (33,1)-(33,5) = "\\\#{}" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "\#{}" - │ │ └── @ EmbeddedStatementsNode (location: (33,5)-(33,8)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (33,5)-(33,7) = "\#{" - │ │ ├── statements: ∅ - │ │ └── closing_loc: (33,7)-(33,8) = "}" - │ └── closing_loc: (33,8)-(33,9) = "\"" - ├── @ StringNode (location: (34,0)-(34,15)) - │ ├── flags: newline - │ ├── opening_loc: (34,0)-(34,1) = "\"" - │ ├── content_loc: (34,1)-(34,14) = "foo\\\\\\\#{@bar}" - │ ├── closing_loc: (34,14)-(34,15) = "\"" - │ └── unescaped: "foo\\\#{@bar}" - ├── @ StringNode (location: (35,0)-(35,4)) - │ ├── flags: newline - │ ├── opening_loc: (35,0)-(35,1) = "\"" - │ ├── content_loc: (35,1)-(35,3) = "\\\"" - │ ├── closing_loc: (35,3)-(35,4) = "\"" - │ └── unescaped: "\"" - ├── @ StringNode (location: (36,0)-(36,9)) - │ ├── flags: newline - │ ├── opening_loc: (36,0)-(36,1) = "\"" - │ ├── content_loc: (36,1)-(36,8) = "foo bar" - │ ├── closing_loc: (36,8)-(36,9) = "\"" - │ └── unescaped: "foo bar" - ├── @ StringNode (location: (37,0)-(37,10)) - │ ├── flags: newline - │ ├── opening_loc: (37,0)-(37,1) = "\"" - │ ├── content_loc: (37,1)-(37,9) = "foo\\nbar" - │ ├── closing_loc: (37,9)-(37,10) = "\"" - │ └── unescaped: "foo\nbar" - ├── @ XStringNode (location: (38,0)-(38,5)) - │ ├── flags: newline - │ ├── opening_loc: (38,0)-(38,1) = "`" - │ ├── content_loc: (38,1)-(38,4) = "foo" - │ ├── closing_loc: (38,4)-(38,5) = "`" - │ └── unescaped: "foo" - ├── @ InterpolatedXStringNode (location: (39,0)-(39,12)) - │ ├── flags: newline - │ ├── opening_loc: (39,0)-(39,1) = "`" - │ ├── parts: (length: 2) - │ │ ├── @ StringNode (location: (39,1)-(39,4)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (39,1)-(39,4) = "foo" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "foo" - │ │ └── @ EmbeddedStatementsNode (location: (39,4)-(39,11)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (39,4)-(39,6) = "\#{" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (39,6)-(39,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ InstanceVariableReadNode (location: (39,6)-(39,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :@bar - │ │ └── closing_loc: (39,10)-(39,11) = "}" - │ └── closing_loc: (39,11)-(39,12) = "`" - ├── @ XStringNode (location: (40,0)-(40,3)) - │ ├── flags: newline - │ ├── opening_loc: (40,0)-(40,1) = "`" - │ ├── content_loc: (40,1)-(40,2) = ")" - │ ├── closing_loc: (40,2)-(40,3) = "`" - │ └── unescaped: ")" - ├── @ XStringNode (location: (41,0)-(41,4)) - │ ├── flags: newline - │ ├── opening_loc: (41,0)-(41,1) = "`" - │ ├── content_loc: (41,1)-(41,3) = "\\`" - │ ├── closing_loc: (41,3)-(41,4) = "`" - │ └── unescaped: "`" - ├── @ XStringNode (location: (42,0)-(42,3)) - │ ├── flags: newline - │ ├── opening_loc: (42,0)-(42,1) = "`" - │ ├── content_loc: (42,1)-(42,2) = "\"" - │ ├── closing_loc: (42,2)-(42,3) = "`" - │ └── unescaped: "\"" - ├── @ SymbolNode (location: (43,0)-(43,4)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (43,0)-(43,1) = ":" - │ ├── value_loc: (43,1)-(43,4) = "foo" - │ ├── closing_loc: ∅ - │ └── unescaped: "foo" - ├── @ SymbolNode (location: (44,0)-(44,6)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (44,0)-(44,2) = ":\"" - │ ├── value_loc: (44,2)-(44,5) = "A B" - │ ├── closing_loc: (44,5)-(44,6) = "\"" - │ └── unescaped: "A B" - ├── @ SymbolNode (location: (45,0)-(45,4)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (45,0)-(45,1) = ":" - │ ├── value_loc: (45,1)-(45,4) = "foo" - │ ├── closing_loc: ∅ - │ └── unescaped: "foo" - ├── @ SymbolNode (location: (46,0)-(46,6)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (46,0)-(46,2) = ":\"" - │ ├── value_loc: (46,2)-(46,5) = "A B" - │ ├── closing_loc: (46,5)-(46,6) = "\"" - │ └── unescaped: "A B" - ├── @ SymbolNode (location: (47,0)-(47,7)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (47,0)-(47,2) = ":\"" - │ ├── value_loc: (47,2)-(47,6) = "A\\\"B" - │ ├── closing_loc: (47,6)-(47,7) = "\"" - │ └── unescaped: "A\"B" - ├── @ SymbolNode (location: (48,0)-(48,3)) - │ ├── flags: newline, static_literal - │ ├── opening_loc: (48,0)-(48,2) = ":\"" - │ ├── value_loc: (1,0)-(1,0) = "" - │ ├── closing_loc: (48,2)-(48,3) = "\"" - │ └── unescaped: "" - ├── @ RegularExpressionNode (location: (49,0)-(49,5)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (49,0)-(49,1) = "/" - │ ├── content_loc: (49,1)-(49,4) = "foo" - │ ├── closing_loc: (49,4)-(49,5) = "/" - │ └── unescaped: "foo" - ├── @ RegularExpressionNode (location: (50,0)-(50,28)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (50,0)-(50,1) = "/" - │ ├── content_loc: (50,1)-(50,27) = "[^-+',.\\/:@[:alnum:]\\[\\]]+" - │ ├── closing_loc: (50,27)-(50,28) = "/" - │ └── unescaped: "[^-+',./:@[:alnum:]\\[\\]]+" - ├── @ InterpolatedRegularExpressionNode (location: (51,0)-(51,12)) - │ ├── flags: newline - │ ├── opening_loc: (51,0)-(51,1) = "/" - │ ├── parts: (length: 2) - │ │ ├── @ StringNode (location: (51,1)-(51,4)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (51,1)-(51,4) = "foo" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "foo" - │ │ └── @ EmbeddedStatementsNode (location: (51,4)-(51,11)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (51,4)-(51,6) = "\#{" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (51,6)-(51,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ InstanceVariableReadNode (location: (51,6)-(51,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :@bar - │ │ └── closing_loc: (51,10)-(51,11) = "}" - │ └── closing_loc: (51,11)-(51,12) = "/" - ├── @ InterpolatedRegularExpressionNode (location: (52,0)-(52,15)) - │ ├── flags: newline, ignore_case, extended, multi_line - │ ├── opening_loc: (52,0)-(52,1) = "/" - │ ├── parts: (length: 2) - │ │ ├── @ StringNode (location: (52,1)-(52,4)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (52,1)-(52,4) = "foo" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "foo" - │ │ └── @ EmbeddedStatementsNode (location: (52,4)-(52,11)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (52,4)-(52,6) = "\#{" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (52,6)-(52,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ InstanceVariableReadNode (location: (52,6)-(52,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :@bar - │ │ └── closing_loc: (52,10)-(52,11) = "}" - │ └── closing_loc: (52,11)-(52,15) = "/imx" - ├── @ InterpolatedRegularExpressionNode (location: (53,0)-(53,13)) - │ ├── flags: newline, static_literal - │ ├── opening_loc: (53,0)-(53,1) = "/" - │ ├── parts: (length: 1) - │ │ └── @ EmbeddedStatementsNode (location: (53,1)-(53,12)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (53,1)-(53,3) = "\#{" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (53,3)-(53,11)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ StringNode (location: (53,3)-(53,11)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: (53,3)-(53,4) = "\"" - │ │ │ ├── content_loc: (53,4)-(53,10) = "\\u0000" - │ │ │ ├── closing_loc: (53,10)-(53,11) = "\"" - │ │ │ └── unescaped: "\u0000" - │ │ └── closing_loc: (53,11)-(53,12) = "}" - │ └── closing_loc: (53,12)-(53,13) = "/" - ├── @ RegularExpressionNode (location: (54,0)-(54,4)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (54,0)-(54,1) = "/" - │ ├── content_loc: (54,1)-(54,3) = "\\n" - │ ├── closing_loc: (54,3)-(54,4) = "/" - │ └── unescaped: "\\n" - ├── @ RegularExpressionNode (location: (55,0)-(55,4)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (55,0)-(55,1) = "/" - │ ├── content_loc: (55,1)-(55,3) = "\\n" - │ ├── closing_loc: (55,3)-(55,4) = "/" - │ └── unescaped: "\\n" - ├── @ RegularExpressionNode (location: (56,0)-(56,5)) - │ ├── flags: newline, static_literal, extended, forced_us_ascii_encoding - │ ├── opening_loc: (56,0)-(56,1) = "/" - │ ├── content_loc: (56,1)-(56,3) = "\\n" - │ ├── closing_loc: (56,3)-(56,5) = "/x" - │ └── unescaped: "\\n" - ├── @ RegularExpressionNode (location: (57,0)-(57,7)) - │ ├── flags: newline, static_literal, extended, forced_us_ascii_encoding - │ ├── opening_loc: (57,0)-(57,1) = "/" - │ ├── content_loc: (57,1)-(57,5) = "\\/\\/" - │ ├── closing_loc: (57,5)-(57,7) = "/x" - │ └── unescaped: "//" - ├── @ InterpolatedSymbolNode (location: (58,0)-(58,15)) - │ ├── flags: newline - │ ├── opening_loc: (58,0)-(58,2) = ":\"" - │ ├── parts: (length: 3) - │ │ ├── @ StringNode (location: (58,2)-(58,5)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (58,2)-(58,5) = "foo" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "foo" - │ │ ├── @ EmbeddedStatementsNode (location: (58,5)-(58,11)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (58,5)-(58,7) = "\#{" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (58,7)-(58,10)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (58,7)-(58,10)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :bar - │ │ │ │ ├── message_loc: (58,7)-(58,10) = "bar" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── closing_loc: (58,10)-(58,11) = "}" - │ │ └── @ StringNode (location: (58,11)-(58,14)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (58,11)-(58,14) = "baz" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "baz" - │ └── closing_loc: (58,14)-(58,15) = "\"" - ├── @ InterpolatedSymbolNode (location: (59,0)-(59,11)) - │ ├── flags: newline, static_literal - │ ├── opening_loc: (59,0)-(59,2) = ":\"" - │ ├── parts: (length: 1) - │ │ └── @ EmbeddedStatementsNode (location: (59,2)-(59,10)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (59,2)-(59,4) = "\#{" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (59,4)-(59,9)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ StringNode (location: (59,4)-(59,9)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: (59,4)-(59,5) = "\"" - │ │ │ ├── content_loc: (59,5)-(59,8) = "foo" - │ │ │ ├── closing_loc: (59,8)-(59,9) = "\"" - │ │ │ └── unescaped: "foo" - │ │ └── closing_loc: (59,9)-(59,10) = "}" - │ └── closing_loc: (59,10)-(59,11) = "\"" - ├── @ RangeNode (location: (60,0)-(60,14)) - │ ├── flags: newline - │ ├── left: - │ │ @ ParenthesesNode (location: (60,0)-(60,11)) - │ │ ├── flags: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (60,1)-(60,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (60,1)-(60,10)) - │ │ │ ├── flags: newline - │ │ │ ├── receiver: - │ │ │ │ @ FloatNode (location: (60,1)-(60,4)) - │ │ │ │ ├── flags: static_literal - │ │ │ │ └── value: 0.0 - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :/ - │ │ │ ├── message_loc: (60,5)-(60,6) = "/" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (60,7)-(60,10)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ FloatNode (location: (60,7)-(60,10)) - │ │ │ │ ├── flags: static_literal - │ │ │ │ └── value: 0.0 - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── opening_loc: (60,0)-(60,1) = "(" - │ │ └── closing_loc: (60,10)-(60,11) = ")" - │ ├── right: - │ │ @ IntegerNode (location: (60,13)-(60,14)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ └── operator_loc: (60,11)-(60,13) = ".." - ├── @ RangeNode (location: (61,0)-(61,14)) - │ ├── flags: newline - │ ├── left: - │ │ @ IntegerNode (location: (61,0)-(61,1)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── right: - │ │ @ ParenthesesNode (location: (61,3)-(61,14)) - │ │ ├── flags: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (61,4)-(61,13)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (61,4)-(61,13)) - │ │ │ ├── flags: newline - │ │ │ ├── receiver: - │ │ │ │ @ FloatNode (location: (61,4)-(61,7)) - │ │ │ │ ├── flags: static_literal - │ │ │ │ └── value: 0.0 - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :/ - │ │ │ ├── message_loc: (61,8)-(61,9) = "/" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (61,10)-(61,13)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ FloatNode (location: (61,10)-(61,13)) - │ │ │ │ ├── flags: static_literal - │ │ │ │ └── value: 0.0 - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── opening_loc: (61,3)-(61,4) = "(" - │ │ └── closing_loc: (61,13)-(61,14) = ")" - │ └── operator_loc: (61,1)-(61,3) = ".." - ├── @ RangeNode (location: (62,0)-(62,16)) - │ ├── flags: newline - │ ├── left: - │ │ @ ParenthesesNode (location: (62,0)-(62,11)) - │ │ ├── flags: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (62,1)-(62,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (62,1)-(62,10)) - │ │ │ ├── flags: newline - │ │ │ ├── receiver: - │ │ │ │ @ FloatNode (location: (62,1)-(62,4)) - │ │ │ │ ├── flags: static_literal - │ │ │ │ └── value: 0.0 - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :/ - │ │ │ ├── message_loc: (62,5)-(62,6) = "/" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (62,7)-(62,10)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ FloatNode (location: (62,7)-(62,10)) - │ │ │ │ ├── flags: static_literal - │ │ │ │ └── value: 0.0 - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── opening_loc: (62,0)-(62,1) = "(" - │ │ └── closing_loc: (62,10)-(62,11) = ")" - │ ├── right: - │ │ @ IntegerNode (location: (62,13)-(62,16)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 100 - │ └── operator_loc: (62,11)-(62,13) = ".." - ├── @ FloatNode (location: (63,0)-(63,4)) - │ ├── flags: newline, static_literal - │ └── value: -0.1 - ├── @ FloatNode (location: (64,0)-(64,3)) - │ ├── flags: newline, static_literal - │ └── value: 0.1 - ├── @ ArrayNode (location: (65,0)-(65,6)) - │ ├── flags: newline, static_literal - │ ├── elements: (length: 2) - │ │ ├── @ IntegerNode (location: (65,1)-(65,2)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── @ IntegerNode (location: (65,4)-(65,5)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── opening_loc: (65,0)-(65,1) = "[" - │ └── closing_loc: (65,5)-(65,6) = "]" - ├── @ ArrayNode (location: (66,0)-(66,11)) - │ ├── flags: newline - │ ├── elements: (length: 3) - │ │ ├── @ IntegerNode (location: (66,1)-(66,2)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── @ ParenthesesNode (location: (66,4)-(66,6)) - │ │ │ ├── flags: ∅ - │ │ │ ├── body: ∅ - │ │ │ ├── opening_loc: (66,4)-(66,5) = "(" - │ │ │ └── closing_loc: (66,5)-(66,6) = ")" - │ │ └── @ CallNode (location: (66,8)-(66,10)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :n2 - │ │ ├── message_loc: (66,8)-(66,10) = "n2" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── opening_loc: (66,0)-(66,1) = "[" - │ └── closing_loc: (66,10)-(66,11) = "]" - ├── @ ArrayNode (location: (67,0)-(67,3)) - │ ├── flags: newline, static_literal - │ ├── elements: (length: 1) - │ │ └── @ IntegerNode (location: (67,1)-(67,2)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── opening_loc: (67,0)-(67,1) = "[" - │ └── closing_loc: (67,2)-(67,3) = "]" - ├── @ ArrayNode (location: (68,0)-(68,2)) - │ ├── flags: newline, static_literal - │ ├── elements: (length: 0) - │ ├── opening_loc: (68,0)-(68,1) = "[" - │ └── closing_loc: (68,1)-(68,2) = "]" - ├── @ ArrayNode (location: (69,0)-(69,10)) - │ ├── flags: newline, contains_splat - │ ├── elements: (length: 2) - │ │ ├── @ IntegerNode (location: (69,1)-(69,2)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── @ SplatNode (location: (69,4)-(69,9)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (69,4)-(69,5) = "*" - │ │ └── expression: - │ │ @ InstanceVariableReadNode (location: (69,5)-(69,9)) - │ │ ├── flags: ∅ - │ │ └── name: :@foo - │ ├── opening_loc: (69,0)-(69,1) = "[" - │ └── closing_loc: (69,9)-(69,10) = "]" - ├── @ ArrayNode (location: (70,0)-(70,10)) - │ ├── flags: newline, contains_splat - │ ├── elements: (length: 2) - │ │ ├── @ SplatNode (location: (70,1)-(70,6)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (70,1)-(70,2) = "*" - │ │ │ └── expression: - │ │ │ @ InstanceVariableReadNode (location: (70,2)-(70,6)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :@foo - │ │ └── @ IntegerNode (location: (70,8)-(70,9)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── opening_loc: (70,0)-(70,1) = "[" - │ └── closing_loc: (70,9)-(70,10) = "]" - ├── @ ArrayNode (location: (71,0)-(71,14)) - │ ├── flags: newline, contains_splat - │ ├── elements: (length: 2) - │ │ ├── @ SplatNode (location: (71,1)-(71,6)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (71,1)-(71,2) = "*" - │ │ │ └── expression: - │ │ │ @ InstanceVariableReadNode (location: (71,2)-(71,6)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :@foo - │ │ └── @ SplatNode (location: (71,8)-(71,13)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (71,8)-(71,9) = "*" - │ │ └── expression: - │ │ @ InstanceVariableReadNode (location: (71,9)-(71,13)) - │ │ ├── flags: ∅ - │ │ └── name: :@baz - │ ├── opening_loc: (71,0)-(71,1) = "[" - │ └── closing_loc: (71,13)-(71,14) = "]" - ├── @ HashNode (location: (72,0)-(72,2)) - │ ├── flags: newline, static_literal - │ ├── opening_loc: (72,0)-(72,1) = "{" - │ ├── elements: (length: 0) - │ └── closing_loc: (72,1)-(72,2) = "}" - ├── @ HashNode (location: (73,0)-(73,12)) - │ ├── flags: newline - │ ├── opening_loc: (73,0)-(73,1) = "{" - │ ├── elements: (length: 1) - │ │ └── @ AssocNode (location: (73,2)-(73,10)) - │ │ ├── flags: ∅ - │ │ ├── key: - │ │ │ @ ParenthesesNode (location: (73,2)-(73,4)) - │ │ │ ├── flags: ∅ - │ │ │ ├── body: ∅ - │ │ │ ├── opening_loc: (73,2)-(73,3) = "(" - │ │ │ └── closing_loc: (73,3)-(73,4) = ")" - │ │ ├── value: - │ │ │ @ ParenthesesNode (location: (73,8)-(73,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── body: ∅ - │ │ │ ├── opening_loc: (73,8)-(73,9) = "(" - │ │ │ └── closing_loc: (73,9)-(73,10) = ")" - │ │ └── operator_loc: (73,5)-(73,7) = "=>" - │ └── closing_loc: (73,11)-(73,12) = "}" - ├── @ HashNode (location: (74,0)-(74,10)) - │ ├── flags: newline, static_literal - │ ├── opening_loc: (74,0)-(74,1) = "{" - │ ├── elements: (length: 1) - │ │ └── @ AssocNode (location: (74,2)-(74,8)) - │ │ ├── flags: static_literal - │ │ ├── key: - │ │ │ @ IntegerNode (location: (74,2)-(74,3)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── value: - │ │ │ @ IntegerNode (location: (74,7)-(74,8)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ └── operator_loc: (74,4)-(74,6) = "=>" - │ └── closing_loc: (74,9)-(74,10) = "}" - ├── @ HashNode (location: (75,0)-(75,18)) - │ ├── flags: newline, static_literal - │ ├── opening_loc: (75,0)-(75,1) = "{" - │ ├── elements: (length: 2) - │ │ ├── @ AssocNode (location: (75,2)-(75,8)) - │ │ │ ├── flags: static_literal - │ │ │ ├── key: - │ │ │ │ @ IntegerNode (location: (75,2)-(75,3)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ ├── value: - │ │ │ │ @ IntegerNode (location: (75,7)-(75,8)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 2 - │ │ │ └── operator_loc: (75,4)-(75,6) = "=>" - │ │ └── @ AssocNode (location: (75,10)-(75,16)) - │ │ ├── flags: static_literal - │ │ ├── key: - │ │ │ @ IntegerNode (location: (75,10)-(75,11)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 3 - │ │ ├── value: - │ │ │ @ IntegerNode (location: (75,15)-(75,16)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 4 - │ │ └── operator_loc: (75,12)-(75,14) = "=>" - │ └── closing_loc: (75,17)-(75,18) = "}" - ├── @ HashNode (location: (76,0)-(76,27)) - │ ├── flags: newline - │ ├── opening_loc: (76,0)-(76,1) = "{" - │ ├── elements: (length: 2) - │ │ ├── @ AssocNode (location: (76,2)-(76,19)) - │ │ │ ├── flags: ∅ - │ │ │ ├── key: - │ │ │ │ @ SymbolNode (location: (76,2)-(76,4)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── value_loc: (76,2)-(76,3) = "a" - │ │ │ │ ├── closing_loc: (76,3)-(76,4) = ":" - │ │ │ │ └── unescaped: "a" - │ │ │ ├── value: - │ │ │ │ @ ParenthesesNode (location: (76,5)-(76,19)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── body: - │ │ │ │ │ @ StatementsNode (location: (76,6)-(76,18)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── body: (length: 1) - │ │ │ │ │ └── @ RescueModifierNode (location: (76,6)-(76,18)) - │ │ │ │ │ ├── flags: newline - │ │ │ │ │ ├── expression: - │ │ │ │ │ │ @ IntegerNode (location: (76,6)-(76,7)) - │ │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ │ └── value: 1 - │ │ │ │ │ ├── keyword_loc: (76,8)-(76,14) = "rescue" - │ │ │ │ │ └── rescue_expression: - │ │ │ │ │ @ CallNode (location: (76,15)-(76,18)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :foo - │ │ │ │ │ ├── message_loc: (76,15)-(76,18) = "foo" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── opening_loc: (76,5)-(76,6) = "(" - │ │ │ │ └── closing_loc: (76,18)-(76,19) = ")" - │ │ │ └── operator_loc: ∅ - │ │ └── @ AssocNode (location: (76,21)-(76,25)) - │ │ ├── flags: static_literal - │ │ ├── key: - │ │ │ @ SymbolNode (location: (76,21)-(76,23)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (76,21)-(76,22) = "b" - │ │ │ ├── closing_loc: (76,22)-(76,23) = ":" - │ │ │ └── unescaped: "b" - │ │ ├── value: - │ │ │ @ IntegerNode (location: (76,24)-(76,25)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ └── operator_loc: ∅ - │ └── closing_loc: (76,26)-(76,27) = "}" - ├── @ HashNode (location: (77,0)-(77,14)) - │ ├── flags: newline, static_literal - │ ├── opening_loc: (77,0)-(77,1) = "{" - │ ├── elements: (length: 2) - │ │ ├── @ AssocNode (location: (77,2)-(77,6)) - │ │ │ ├── flags: static_literal - │ │ │ ├── key: - │ │ │ │ @ SymbolNode (location: (77,2)-(77,4)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── value_loc: (77,2)-(77,3) = "a" - │ │ │ │ ├── closing_loc: (77,3)-(77,4) = ":" - │ │ │ │ └── unescaped: "a" - │ │ │ ├── value: - │ │ │ │ @ IntegerNode (location: (77,5)-(77,6)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ └── operator_loc: ∅ - │ │ └── @ AssocNode (location: (77,8)-(77,12)) - │ │ ├── flags: static_literal - │ │ ├── key: - │ │ │ @ SymbolNode (location: (77,8)-(77,10)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (77,8)-(77,9) = "b" - │ │ │ ├── closing_loc: (77,9)-(77,10) = ":" - │ │ │ └── unescaped: "b" - │ │ ├── value: - │ │ │ @ IntegerNode (location: (77,11)-(77,12)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ └── operator_loc: ∅ - │ └── closing_loc: (77,13)-(77,14) = "}" - ├── @ HashNode (location: (78,0)-(78,9)) - │ ├── flags: newline, static_literal - │ ├── opening_loc: (78,0)-(78,1) = "{" - │ ├── elements: (length: 1) - │ │ └── @ AssocNode (location: (78,2)-(78,7)) - │ │ ├── flags: static_literal - │ │ ├── key: - │ │ │ @ SymbolNode (location: (78,2)-(78,4)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (78,2)-(78,3) = "a" - │ │ │ ├── closing_loc: (78,3)-(78,4) = ":" - │ │ │ └── unescaped: "a" - │ │ ├── value: - │ │ │ @ SymbolNode (location: (78,5)-(78,7)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (78,5)-(78,6) = ":" - │ │ │ ├── value_loc: (78,6)-(78,7) = "a" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "a" - │ │ └── operator_loc: ∅ - │ └── closing_loc: (78,8)-(78,9) = "}" - ├── @ HashNode (location: (79,0)-(79,15)) - │ ├── flags: newline, static_literal - │ ├── opening_loc: (79,0)-(79,1) = "{" - │ ├── elements: (length: 1) - │ │ └── @ AssocNode (location: (79,2)-(79,13)) - │ │ ├── flags: static_literal - │ │ ├── key: - │ │ │ @ SymbolNode (location: (79,2)-(79,8)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (79,2)-(79,4) = ":\"" - │ │ │ ├── value_loc: (79,4)-(79,7) = "a b" - │ │ │ ├── closing_loc: (79,7)-(79,8) = "\"" - │ │ │ └── unescaped: "a b" - │ │ ├── value: - │ │ │ @ IntegerNode (location: (79,12)-(79,13)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── operator_loc: (79,9)-(79,11) = "=>" - │ └── closing_loc: (79,14)-(79,15) = "}" - ├── @ HashNode (location: (80,0)-(80,12)) - │ ├── flags: newline, static_literal - │ ├── opening_loc: (80,0)-(80,1) = "{" - │ ├── elements: (length: 1) - │ │ └── @ AssocNode (location: (80,2)-(80,10)) - │ │ ├── flags: static_literal - │ │ ├── key: - │ │ │ @ SymbolNode (location: (80,2)-(80,5)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (80,2)-(80,3) = ":" - │ │ │ ├── value_loc: (80,3)-(80,5) = "-@" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "-@" - │ │ ├── value: - │ │ │ @ IntegerNode (location: (80,9)-(80,10)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── operator_loc: (80,6)-(80,8) = "=>" - │ └── closing_loc: (80,11)-(80,12) = "}" - ├── @ InterpolatedStringNode (location: (81,0)-(82,7)) - │ ├── flags: newline - │ ├── opening_loc: (81,0)-(81,1) = "\"" - │ ├── parts: (length: 4) - │ │ ├── @ EmbeddedStatementsNode (location: (81,1)-(81,4)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (81,1)-(81,3) = "\#{" - │ │ │ ├── statements: ∅ - │ │ │ └── closing_loc: (81,3)-(81,4) = "}" - │ │ ├── @ StringNode (location: (81,4)-(82,0)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (81,4)-(82,0) = "\n" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "\n" - │ │ ├── @ EmbeddedStatementsNode (location: (82,0)-(82,3)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (82,0)-(82,2) = "\#{" - │ │ │ ├── statements: ∅ - │ │ │ └── closing_loc: (82,2)-(82,3) = "}" - │ │ └── @ StringNode (location: (82,3)-(82,6)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (82,3)-(82,6) = "\\na" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "\na" - │ └── closing_loc: (82,6)-(82,7) = "\"" - ├── @ CallNode (location: (83,0)-(86,1)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (83,0)-(83,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (83,4)-(86,1)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (84,2)-(85,7)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ InterpolatedStringNode (location: (84,2)-(85,7)) - │ │ ├── flags: newline - │ │ ├── opening_loc: (84,2)-(84,3) = "\"" - │ │ ├── parts: (length: 4) - │ │ │ ├── @ EmbeddedStatementsNode (location: (84,3)-(84,6)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── opening_loc: (84,3)-(84,5) = "\#{" - │ │ │ │ ├── statements: ∅ - │ │ │ │ └── closing_loc: (84,5)-(84,6) = "}" - │ │ │ ├── @ StringNode (location: (84,6)-(85,0)) - │ │ │ │ ├── flags: static_literal, frozen - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── content_loc: (84,6)-(85,0) = "\n" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "\n" - │ │ │ ├── @ EmbeddedStatementsNode (location: (85,0)-(85,3)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── opening_loc: (85,0)-(85,2) = "\#{" - │ │ │ │ ├── statements: ∅ - │ │ │ │ └── closing_loc: (85,2)-(85,3) = "}" - │ │ │ └── @ StringNode (location: (85,3)-(85,6)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (85,3)-(85,6) = "\\na" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "\na" - │ │ └── closing_loc: (85,6)-(85,7) = "\"" - │ ├── opening_loc: (83,4)-(83,5) = "{" - │ └── closing_loc: (86,0)-(86,1) = "}" - ├── @ SymbolNode (location: (87,0)-(88,2)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (87,0)-(87,2) = ":\"" - │ ├── value_loc: (87,2)-(88,1) = "a\\\\\nb" - │ ├── closing_loc: (88,1)-(88,2) = "\"" - │ └── unescaped: "a\\\nb" - └── @ InterpolatedXStringNode (location: (89,0)-(91,2)) - ├── flags: newline - ├── opening_loc: (89,0)-(89,1) = "`" - ├── parts: (length: 3) - │ ├── @ StringNode (location: (89,1)-(90,0)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (89,1)-(90,0) = " x\n" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: " x\n" - │ ├── @ EmbeddedStatementsNode (location: (90,0)-(90,6)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (90,0)-(90,2) = "\#{" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (90,2)-(90,5)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (90,2)-(90,5)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (90,2)-(90,5) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── closing_loc: (90,5)-(90,6) = "}" - │ └── @ StringNode (location: (90,6)-(91,1)) - │ ├── flags: static_literal, frozen - │ ├── opening_loc: ∅ - │ ├── content_loc: (90,6)-(91,1) = "\n#" - │ ├── closing_loc: ∅ - │ └── unescaped: "\n#" - └── closing_loc: (91,1)-(91,2) = "`" diff --git a/test/prism/snapshots/unparser/corpus/literal/module.txt b/test/prism/snapshots/unparser/corpus/literal/module.txt deleted file mode 100644 index 9ad15d2dcd18fa..00000000000000 --- a/test/prism/snapshots/unparser/corpus/literal/module.txt +++ /dev/null @@ -1,121 +0,0 @@ -@ ProgramNode (location: (1,0)-(16,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(16,3)) - ├── flags: ∅ - └── body: (length: 4) - ├── @ ModuleNode (location: (1,0)-(2,3)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── module_keyword_loc: (1,0)-(1,6) = "module" - │ ├── constant_path: - │ │ @ ConstantReadNode (location: (1,7)-(1,8)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── body: ∅ - │ ├── end_keyword_loc: (2,0)-(2,3) = "end" - │ └── name: :A - ├── @ ModuleNode (location: (4,0)-(5,3)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── module_keyword_loc: (4,0)-(4,6) = "module" - │ ├── constant_path: - │ │ @ ConstantPathNode (location: (4,7)-(4,11)) - │ │ ├── flags: ∅ - │ │ ├── parent: - │ │ │ @ ConstantReadNode (location: (4,7)-(4,8)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :A - │ │ ├── name: :B - │ │ ├── delimiter_loc: (4,8)-(4,10) = "::" - │ │ └── name_loc: (4,10)-(4,11) = "B" - │ ├── body: ∅ - │ ├── end_keyword_loc: (5,0)-(5,3) = "end" - │ └── name: :B - ├── @ ModuleNode (location: (7,0)-(8,3)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── module_keyword_loc: (7,0)-(7,6) = "module" - │ ├── constant_path: - │ │ @ ConstantPathNode (location: (7,7)-(7,14)) - │ │ ├── flags: ∅ - │ │ ├── parent: - │ │ │ @ ConstantPathNode (location: (7,7)-(7,11)) - │ │ │ ├── flags: ∅ - │ │ │ ├── parent: - │ │ │ │ @ ConstantReadNode (location: (7,7)-(7,8)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :A - │ │ │ ├── name: :B - │ │ │ ├── delimiter_loc: (7,8)-(7,10) = "::" - │ │ │ └── name_loc: (7,10)-(7,11) = "B" - │ │ ├── name: :C - │ │ ├── delimiter_loc: (7,11)-(7,13) = "::" - │ │ └── name_loc: (7,13)-(7,14) = "C" - │ ├── body: ∅ - │ ├── end_keyword_loc: (8,0)-(8,3) = "end" - │ └── name: :C - └── @ ModuleNode (location: (10,0)-(16,3)) - ├── flags: newline - ├── locals: [] - ├── module_keyword_loc: (10,0)-(10,6) = "module" - ├── constant_path: - │ @ ConstantReadNode (location: (10,7)-(10,8)) - │ ├── flags: ∅ - │ └── name: :A - ├── body: - │ @ StatementsNode (location: (11,2)-(15,5)) - │ ├── flags: ∅ - │ └── body: (length: 2) - │ ├── @ CallNode (location: (11,2)-(11,16)) - │ │ ├── flags: newline, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :include - │ │ ├── message_loc: (11,2)-(11,9) = "include" - │ │ ├── opening_loc: (11,9)-(11,10) = "(" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (11,10)-(11,15)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ CallNode (location: (11,10)-(11,15)) - │ │ │ ├── flags: ∅ - │ │ │ ├── receiver: - │ │ │ │ @ ConstantReadNode (location: (11,10)-(11,11)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :B - │ │ │ ├── call_operator_loc: (11,11)-(11,12) = "." - │ │ │ ├── name: :new - │ │ │ ├── message_loc: (11,12)-(11,15) = "new" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── closing_loc: (11,15)-(11,16) = ")" - │ │ └── block: ∅ - │ └── @ DefNode (location: (13,2)-(15,5)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (13,6)-(13,9) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (14,4)-(14,8)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ SymbolNode (location: (14,4)-(14,8)) - │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (14,4)-(14,5) = ":" - │ │ ├── value_loc: (14,5)-(14,8) = "bar" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "bar" - │ ├── locals: [] - │ ├── def_keyword_loc: (13,2)-(13,5) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (15,2)-(15,5) = "end" - ├── end_keyword_loc: (16,0)-(16,3) = "end" - └── name: :A diff --git a/test/prism/snapshots/unparser/corpus/literal/opasgn.txt b/test/prism/snapshots/unparser/corpus/literal/opasgn.txt deleted file mode 100644 index 3df6248d4badb7..00000000000000 --- a/test/prism/snapshots/unparser/corpus/literal/opasgn.txt +++ /dev/null @@ -1,539 +0,0 @@ -@ ProgramNode (location: (1,0)-(24,10)) -├── flags: ∅ -├── locals: [:a, :h] -└── statements: - @ StatementsNode (location: (1,0)-(24,10)) - ├── flags: ∅ - └── body: (length: 24) - ├── @ LocalVariableOperatorWriteNode (location: (1,0)-(1,6)) - │ ├── flags: newline - │ ├── name_loc: (1,0)-(1,1) = "a" - │ ├── binary_operator_loc: (1,2)-(1,4) = "+=" - │ ├── value: - │ │ @ IntegerNode (location: (1,5)-(1,6)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── name: :a - │ ├── binary_operator: :+ - │ └── depth: 0 - ├── @ LocalVariableOperatorWriteNode (location: (2,0)-(2,6)) - │ ├── flags: newline - │ ├── name_loc: (2,0)-(2,1) = "a" - │ ├── binary_operator_loc: (2,2)-(2,4) = "-=" - │ ├── value: - │ │ @ IntegerNode (location: (2,5)-(2,6)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── name: :a - │ ├── binary_operator: :- - │ └── depth: 0 - ├── @ LocalVariableOperatorWriteNode (location: (3,0)-(3,7)) - │ ├── flags: newline - │ ├── name_loc: (3,0)-(3,1) = "a" - │ ├── binary_operator_loc: (3,2)-(3,5) = "**=" - │ ├── value: - │ │ @ IntegerNode (location: (3,6)-(3,7)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── name: :a - │ ├── binary_operator: :** - │ └── depth: 0 - ├── @ LocalVariableOperatorWriteNode (location: (4,0)-(4,6)) - │ ├── flags: newline - │ ├── name_loc: (4,0)-(4,1) = "a" - │ ├── binary_operator_loc: (4,2)-(4,4) = "*=" - │ ├── value: - │ │ @ IntegerNode (location: (4,5)-(4,6)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── name: :a - │ ├── binary_operator: :* - │ └── depth: 0 - ├── @ LocalVariableOperatorWriteNode (location: (5,0)-(5,6)) - │ ├── flags: newline - │ ├── name_loc: (5,0)-(5,1) = "a" - │ ├── binary_operator_loc: (5,2)-(5,4) = "/=" - │ ├── value: - │ │ @ IntegerNode (location: (5,5)-(5,6)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── name: :a - │ ├── binary_operator: :/ - │ └── depth: 0 - ├── @ LocalVariableAndWriteNode (location: (6,0)-(6,7)) - │ ├── flags: newline - │ ├── name_loc: (6,0)-(6,1) = "a" - │ ├── operator_loc: (6,2)-(6,5) = "&&=" - │ ├── value: - │ │ @ CallNode (location: (6,6)-(6,7)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :b - │ │ ├── message_loc: (6,6)-(6,7) = "b" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── name: :a - │ └── depth: 0 - ├── @ LocalVariableOrWriteNode (location: (7,0)-(7,7)) - │ ├── flags: newline - │ ├── name_loc: (7,0)-(7,1) = "a" - │ ├── operator_loc: (7,2)-(7,5) = "||=" - │ ├── value: - │ │ @ IntegerNode (location: (7,6)-(7,7)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── name: :a - │ └── depth: 0 - ├── @ CallNode (location: (8,0)-(8,13)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ParenthesesNode (location: (8,0)-(8,9)) - │ │ ├── flags: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (8,1)-(8,8)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ LocalVariableOrWriteNode (location: (8,1)-(8,8)) - │ │ │ ├── flags: newline - │ │ │ ├── name_loc: (8,1)-(8,2) = "a" - │ │ │ ├── operator_loc: (8,3)-(8,6) = "||=" - │ │ │ ├── value: - │ │ │ │ @ IntegerNode (location: (8,7)-(8,8)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 2 - │ │ │ ├── name: :a - │ │ │ └── depth: 0 - │ │ ├── opening_loc: (8,0)-(8,1) = "(" - │ │ └── closing_loc: (8,8)-(8,9) = ")" - │ ├── call_operator_loc: (8,9)-(8,10) = "." - │ ├── name: :bar - │ ├── message_loc: (8,10)-(8,13) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (9,0)-(9,17)) - │ ├── flags: newline, attribute_write - │ ├── receiver: - │ │ @ ParenthesesNode (location: (9,0)-(9,10)) - │ │ ├── flags: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (9,1)-(9,9)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ LocalVariableOrWriteNode (location: (9,1)-(9,9)) - │ │ │ ├── flags: newline - │ │ │ ├── name_loc: (9,1)-(9,2) = "h" - │ │ │ ├── operator_loc: (9,3)-(9,6) = "||=" - │ │ │ ├── value: - │ │ │ │ @ HashNode (location: (9,7)-(9,9)) - │ │ │ │ ├── flags: static_literal - │ │ │ │ ├── opening_loc: (9,7)-(9,8) = "{" - │ │ │ │ ├── elements: (length: 0) - │ │ │ │ └── closing_loc: (9,8)-(9,9) = "}" - │ │ │ ├── name: :h - │ │ │ └── depth: 0 - │ │ ├── opening_loc: (9,0)-(9,1) = "(" - │ │ └── closing_loc: (9,9)-(9,10) = ")" - │ ├── call_operator_loc: ∅ - │ ├── name: :[]= - │ ├── message_loc: (9,10)-(9,13) = "[k]" - │ ├── opening_loc: (9,10)-(9,11) = "[" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (9,11)-(9,17)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (9,11)-(9,12)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :k - │ │ │ ├── message_loc: (9,11)-(9,12) = "k" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── @ CallNode (location: (9,16)-(9,17)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :v - │ │ ├── message_loc: (9,16)-(9,17) = "v" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (9,12)-(9,13) = "]" - │ └── block: ∅ - ├── @ CallOperatorWriteNode (location: (10,0)-(10,8)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (10,0)-(10,1)) - │ │ ├── flags: ∅ - │ │ ├── name: :a - │ │ └── depth: 0 - │ ├── call_operator_loc: (10,1)-(10,2) = "." - │ ├── message_loc: (10,2)-(10,3) = "b" - │ ├── read_name: :b - │ ├── write_name: :b= - │ ├── binary_operator: :+ - │ ├── binary_operator_loc: (10,4)-(10,6) = "+=" - │ └── value: - │ @ IntegerNode (location: (10,7)-(10,8)) - │ ├── flags: static_literal, decimal - │ └── value: 2 - ├── @ CallOperatorWriteNode (location: (11,0)-(11,8)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (11,0)-(11,1)) - │ │ ├── flags: ∅ - │ │ ├── name: :a - │ │ └── depth: 0 - │ ├── call_operator_loc: (11,1)-(11,2) = "." - │ ├── message_loc: (11,2)-(11,3) = "b" - │ ├── read_name: :b - │ ├── write_name: :b= - │ ├── binary_operator: :- - │ ├── binary_operator_loc: (11,4)-(11,6) = "-=" - │ └── value: - │ @ IntegerNode (location: (11,7)-(11,8)) - │ ├── flags: static_literal, decimal - │ └── value: 2 - ├── @ CallOperatorWriteNode (location: (12,0)-(12,9)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (12,0)-(12,1)) - │ │ ├── flags: ∅ - │ │ ├── name: :a - │ │ └── depth: 0 - │ ├── call_operator_loc: (12,1)-(12,2) = "." - │ ├── message_loc: (12,2)-(12,3) = "b" - │ ├── read_name: :b - │ ├── write_name: :b= - │ ├── binary_operator: :** - │ ├── binary_operator_loc: (12,4)-(12,7) = "**=" - │ └── value: - │ @ IntegerNode (location: (12,8)-(12,9)) - │ ├── flags: static_literal, decimal - │ └── value: 2 - ├── @ CallOperatorWriteNode (location: (13,0)-(13,8)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (13,0)-(13,1)) - │ │ ├── flags: ∅ - │ │ ├── name: :a - │ │ └── depth: 0 - │ ├── call_operator_loc: (13,1)-(13,2) = "." - │ ├── message_loc: (13,2)-(13,3) = "b" - │ ├── read_name: :b - │ ├── write_name: :b= - │ ├── binary_operator: :* - │ ├── binary_operator_loc: (13,4)-(13,6) = "*=" - │ └── value: - │ @ IntegerNode (location: (13,7)-(13,8)) - │ ├── flags: static_literal, decimal - │ └── value: 2 - ├── @ CallOperatorWriteNode (location: (14,0)-(14,8)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (14,0)-(14,1)) - │ │ ├── flags: ∅ - │ │ ├── name: :a - │ │ └── depth: 0 - │ ├── call_operator_loc: (14,1)-(14,2) = "." - │ ├── message_loc: (14,2)-(14,3) = "b" - │ ├── read_name: :b - │ ├── write_name: :b= - │ ├── binary_operator: :/ - │ ├── binary_operator_loc: (14,4)-(14,6) = "/=" - │ └── value: - │ @ IntegerNode (location: (14,7)-(14,8)) - │ ├── flags: static_literal, decimal - │ └── value: 2 - ├── @ CallAndWriteNode (location: (15,0)-(15,9)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (15,0)-(15,1)) - │ │ ├── flags: ∅ - │ │ ├── name: :a - │ │ └── depth: 0 - │ ├── call_operator_loc: (15,1)-(15,2) = "." - │ ├── message_loc: (15,2)-(15,3) = "b" - │ ├── read_name: :b - │ ├── write_name: :b= - │ ├── operator_loc: (15,4)-(15,7) = "&&=" - │ └── value: - │ @ CallNode (location: (15,8)-(15,9)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :b - │ ├── message_loc: (15,8)-(15,9) = "b" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallOrWriteNode (location: (16,0)-(16,9)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (16,0)-(16,1)) - │ │ ├── flags: ∅ - │ │ ├── name: :a - │ │ └── depth: 0 - │ ├── call_operator_loc: (16,1)-(16,2) = "." - │ ├── message_loc: (16,2)-(16,3) = "b" - │ ├── read_name: :b - │ ├── write_name: :b= - │ ├── operator_loc: (16,4)-(16,7) = "||=" - │ └── value: - │ @ IntegerNode (location: (16,8)-(16,9)) - │ ├── flags: static_literal, decimal - │ └── value: 2 - ├── @ IndexOperatorWriteNode (location: (17,0)-(17,9)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (17,0)-(17,1)) - │ │ ├── flags: ∅ - │ │ ├── name: :a - │ │ └── depth: 0 - │ ├── call_operator_loc: ∅ - │ ├── opening_loc: (17,1)-(17,2) = "[" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (17,2)-(17,3)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (17,2)-(17,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :b - │ │ ├── message_loc: (17,2)-(17,3) = "b" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (17,3)-(17,4) = "]" - │ ├── block: ∅ - │ ├── binary_operator: :+ - │ ├── binary_operator_loc: (17,5)-(17,7) = "+=" - │ └── value: - │ @ IntegerNode (location: (17,8)-(17,9)) - │ ├── flags: static_literal, decimal - │ └── value: 2 - ├── @ IndexOperatorWriteNode (location: (18,0)-(18,9)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (18,0)-(18,1)) - │ │ ├── flags: ∅ - │ │ ├── name: :a - │ │ └── depth: 0 - │ ├── call_operator_loc: ∅ - │ ├── opening_loc: (18,1)-(18,2) = "[" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (18,2)-(18,3)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (18,2)-(18,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :b - │ │ ├── message_loc: (18,2)-(18,3) = "b" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (18,3)-(18,4) = "]" - │ ├── block: ∅ - │ ├── binary_operator: :- - │ ├── binary_operator_loc: (18,5)-(18,7) = "-=" - │ └── value: - │ @ IntegerNode (location: (18,8)-(18,9)) - │ ├── flags: static_literal, decimal - │ └── value: 2 - ├── @ IndexOperatorWriteNode (location: (19,0)-(19,10)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (19,0)-(19,1)) - │ │ ├── flags: ∅ - │ │ ├── name: :a - │ │ └── depth: 0 - │ ├── call_operator_loc: ∅ - │ ├── opening_loc: (19,1)-(19,2) = "[" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (19,2)-(19,3)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (19,2)-(19,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :b - │ │ ├── message_loc: (19,2)-(19,3) = "b" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (19,3)-(19,4) = "]" - │ ├── block: ∅ - │ ├── binary_operator: :** - │ ├── binary_operator_loc: (19,5)-(19,8) = "**=" - │ └── value: - │ @ IntegerNode (location: (19,9)-(19,10)) - │ ├── flags: static_literal, decimal - │ └── value: 2 - ├── @ IndexOperatorWriteNode (location: (20,0)-(20,9)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (20,0)-(20,1)) - │ │ ├── flags: ∅ - │ │ ├── name: :a - │ │ └── depth: 0 - │ ├── call_operator_loc: ∅ - │ ├── opening_loc: (20,1)-(20,2) = "[" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (20,2)-(20,3)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (20,2)-(20,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :b - │ │ ├── message_loc: (20,2)-(20,3) = "b" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (20,3)-(20,4) = "]" - │ ├── block: ∅ - │ ├── binary_operator: :* - │ ├── binary_operator_loc: (20,5)-(20,7) = "*=" - │ └── value: - │ @ IntegerNode (location: (20,8)-(20,9)) - │ ├── flags: static_literal, decimal - │ └── value: 2 - ├── @ IndexOperatorWriteNode (location: (21,0)-(21,9)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (21,0)-(21,1)) - │ │ ├── flags: ∅ - │ │ ├── name: :a - │ │ └── depth: 0 - │ ├── call_operator_loc: ∅ - │ ├── opening_loc: (21,1)-(21,2) = "[" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (21,2)-(21,3)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (21,2)-(21,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :b - │ │ ├── message_loc: (21,2)-(21,3) = "b" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (21,3)-(21,4) = "]" - │ ├── block: ∅ - │ ├── binary_operator: :/ - │ ├── binary_operator_loc: (21,5)-(21,7) = "/=" - │ └── value: - │ @ IntegerNode (location: (21,8)-(21,9)) - │ ├── flags: static_literal, decimal - │ └── value: 2 - ├── @ IndexAndWriteNode (location: (22,0)-(22,10)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (22,0)-(22,1)) - │ │ ├── flags: ∅ - │ │ ├── name: :a - │ │ └── depth: 0 - │ ├── call_operator_loc: ∅ - │ ├── opening_loc: (22,1)-(22,2) = "[" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (22,2)-(22,3)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (22,2)-(22,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :b - │ │ ├── message_loc: (22,2)-(22,3) = "b" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (22,3)-(22,4) = "]" - │ ├── block: ∅ - │ ├── operator_loc: (22,5)-(22,8) = "&&=" - │ └── value: - │ @ CallNode (location: (22,9)-(22,10)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :b - │ ├── message_loc: (22,9)-(22,10) = "b" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ IndexOrWriteNode (location: (23,0)-(23,10)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (23,0)-(23,1)) - │ │ ├── flags: ∅ - │ │ ├── name: :a - │ │ └── depth: 0 - │ ├── call_operator_loc: ∅ - │ ├── opening_loc: (23,1)-(23,2) = "[" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (23,2)-(23,3)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (23,2)-(23,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :b - │ │ ├── message_loc: (23,2)-(23,3) = "b" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (23,3)-(23,4) = "]" - │ ├── block: ∅ - │ ├── operator_loc: (23,5)-(23,8) = "||=" - │ └── value: - │ @ IntegerNode (location: (23,9)-(23,10)) - │ ├── flags: static_literal, decimal - │ └── value: 2 - └── @ CallOperatorWriteNode (location: (24,0)-(24,10)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (24,0)-(24,3)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (24,0)-(24,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: (24,3)-(24,4) = "." - ├── message_loc: (24,4)-(24,5) = "A" - ├── read_name: :A - ├── write_name: :A= - ├── binary_operator: :+ - ├── binary_operator_loc: (24,6)-(24,8) = "+=" - └── value: - @ IntegerNode (location: (24,9)-(24,10)) - ├── flags: static_literal, decimal - └── value: 1 diff --git a/test/prism/snapshots/unparser/corpus/literal/pattern.txt b/test/prism/snapshots/unparser/corpus/literal/pattern.txt deleted file mode 100644 index 200837c4503ce9..00000000000000 --- a/test/prism/snapshots/unparser/corpus/literal/pattern.txt +++ /dev/null @@ -1,542 +0,0 @@ -@ ProgramNode (location: (1,0)-(41,8)) -├── flags: ∅ -├── locals: [:a, :x, :y] -└── statements: - @ StatementsNode (location: (1,0)-(41,8)) - ├── flags: ∅ - └── body: (length: 4) - ├── @ CaseMatchNode (location: (1,0)-(33,3)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (1,5)-(1,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (1,5)-(1,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 15) - │ │ ├── @ InNode (location: (2,0)-(3,6)) - │ │ │ ├── flags: ∅ - │ │ │ ├── pattern: - │ │ │ │ @ ArrayPatternNode (location: (2,3)-(2,17)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── constant: - │ │ │ │ │ @ ConstantReadNode (location: (2,3)-(2,4)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── name: :A - │ │ │ │ ├── requireds: (length: 2) - │ │ │ │ │ ├── @ IntegerNode (location: (2,5)-(2,6)) - │ │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ │ └── value: 1 - │ │ │ │ │ └── @ IntegerNode (location: (2,8)-(2,9)) - │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ └── value: 2 - │ │ │ │ ├── rest: - │ │ │ │ │ @ SplatNode (location: (2,11)-(2,13)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── operator_loc: (2,11)-(2,12) = "*" - │ │ │ │ │ └── expression: - │ │ │ │ │ @ LocalVariableTargetNode (location: (2,12)-(2,13)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── name: :a - │ │ │ │ │ └── depth: 0 - │ │ │ │ ├── posts: (length: 1) - │ │ │ │ │ └── @ IntegerNode (location: (2,15)-(2,16)) - │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ └── value: 3 - │ │ │ │ ├── opening_loc: (2,4)-(2,5) = "[" - │ │ │ │ └── closing_loc: (2,16)-(2,17) = "]" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (3,2)-(3,6)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ TrueNode (location: (3,2)-(3,6)) - │ │ │ │ └── flags: newline, static_literal - │ │ │ ├── in_loc: (2,0)-(2,2) = "in" - │ │ │ └── then_loc: (2,18)-(2,22) = "then" - │ │ ├── @ InNode (location: (4,0)-(5,3)) - │ │ │ ├── flags: ∅ - │ │ │ ├── pattern: - │ │ │ │ @ ArrayPatternNode (location: (4,3)-(4,11)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── constant: ∅ - │ │ │ │ ├── requireds: (length: 2) - │ │ │ │ │ ├── @ IntegerNode (location: (4,4)-(4,5)) - │ │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ │ └── value: 1 - │ │ │ │ │ └── @ IntegerNode (location: (4,7)-(4,8)) - │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ └── value: 2 - │ │ │ │ ├── rest: - │ │ │ │ │ @ ImplicitRestNode (location: (4,8)-(4,9)) - │ │ │ │ │ └── flags: ∅ - │ │ │ │ ├── posts: (length: 0) - │ │ │ │ ├── opening_loc: (4,3)-(4,4) = "[" - │ │ │ │ └── closing_loc: (4,10)-(4,11) = "]" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (5,2)-(5,3)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (5,2)-(5,3)) - │ │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :y - │ │ │ │ ├── message_loc: (5,2)-(5,3) = "y" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── in_loc: (4,0)-(4,2) = "in" - │ │ │ └── then_loc: (4,12)-(4,16) = "then" - │ │ ├── @ InNode (location: (6,0)-(7,6)) - │ │ │ ├── flags: ∅ - │ │ │ ├── pattern: - │ │ │ │ @ HashPatternNode (location: (6,3)-(6,8)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── constant: - │ │ │ │ │ @ ConstantReadNode (location: (6,3)-(6,4)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── name: :A - │ │ │ │ ├── elements: (length: 1) - │ │ │ │ │ └── @ AssocNode (location: (6,5)-(6,7)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── key: - │ │ │ │ │ │ @ SymbolNode (location: (6,5)-(6,7)) - │ │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ │ ├── value_loc: (6,5)-(6,6) = "x" - │ │ │ │ │ │ ├── closing_loc: (6,6)-(6,7) = ":" - │ │ │ │ │ │ └── unescaped: "x" - │ │ │ │ │ ├── value: - │ │ │ │ │ │ @ ImplicitNode (location: (6,5)-(6,6)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ └── value: - │ │ │ │ │ │ @ LocalVariableTargetNode (location: (6,5)-(6,6)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ ├── name: :x - │ │ │ │ │ │ └── depth: 0 - │ │ │ │ │ └── operator_loc: ∅ - │ │ │ │ ├── rest: ∅ - │ │ │ │ ├── opening_loc: (6,4)-(6,5) = "(" - │ │ │ │ └── closing_loc: (6,7)-(6,8) = ")" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (7,2)-(7,6)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ TrueNode (location: (7,2)-(7,6)) - │ │ │ │ └── flags: newline, static_literal - │ │ │ ├── in_loc: (6,0)-(6,2) = "in" - │ │ │ └── then_loc: (6,9)-(6,13) = "then" - │ │ ├── @ InNode (location: (8,0)-(9,6)) - │ │ │ ├── flags: ∅ - │ │ │ ├── pattern: - │ │ │ │ @ HashPatternNode (location: (8,3)-(8,8)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── constant: ∅ - │ │ │ │ ├── elements: (length: 0) - │ │ │ │ ├── rest: - │ │ │ │ │ @ AssocSplatNode (location: (8,4)-(8,7)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── value: - │ │ │ │ │ │ @ LocalVariableTargetNode (location: (8,6)-(8,7)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ ├── name: :a - │ │ │ │ │ │ └── depth: 0 - │ │ │ │ │ └── operator_loc: (8,4)-(8,6) = "**" - │ │ │ │ ├── opening_loc: (8,3)-(8,4) = "{" - │ │ │ │ └── closing_loc: (8,7)-(8,8) = "}" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (9,2)-(9,6)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ TrueNode (location: (9,2)-(9,6)) - │ │ │ │ └── flags: newline, static_literal - │ │ │ ├── in_loc: (8,0)-(8,2) = "in" - │ │ │ └── then_loc: (8,9)-(8,13) = "then" - │ │ ├── @ InNode (location: (10,0)-(11,6)) - │ │ │ ├── flags: ∅ - │ │ │ ├── pattern: - │ │ │ │ @ IfNode (location: (10,3)-(10,13)) - │ │ │ │ ├── flags: newline - │ │ │ │ ├── if_keyword_loc: (10,6)-(10,8) = "if" - │ │ │ │ ├── predicate: - │ │ │ │ │ @ TrueNode (location: (10,9)-(10,13)) - │ │ │ │ │ └── flags: static_literal - │ │ │ │ ├── then_keyword_loc: ∅ - │ │ │ │ ├── statements: - │ │ │ │ │ @ StatementsNode (location: (10,3)-(10,5)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── body: (length: 1) - │ │ │ │ │ └── @ HashPatternNode (location: (10,3)-(10,5)) - │ │ │ │ │ ├── flags: newline - │ │ │ │ │ ├── constant: ∅ - │ │ │ │ │ ├── elements: (length: 0) - │ │ │ │ │ ├── rest: ∅ - │ │ │ │ │ ├── opening_loc: (10,3)-(10,4) = "{" - │ │ │ │ │ └── closing_loc: (10,4)-(10,5) = "}" - │ │ │ │ ├── subsequent: ∅ - │ │ │ │ └── end_keyword_loc: ∅ - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (11,2)-(11,6)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ TrueNode (location: (11,2)-(11,6)) - │ │ │ │ └── flags: newline, static_literal - │ │ │ ├── in_loc: (10,0)-(10,2) = "in" - │ │ │ └── then_loc: (10,14)-(10,18) = "then" - │ │ ├── @ InNode (location: (12,0)-(13,6)) - │ │ │ ├── flags: ∅ - │ │ │ ├── pattern: - │ │ │ │ @ ArrayPatternNode (location: (12,3)-(12,12)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── constant: ∅ - │ │ │ │ ├── requireds: (length: 2) - │ │ │ │ │ ├── @ LocalVariableTargetNode (location: (12,4)-(12,5)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ ├── name: :x - │ │ │ │ │ │ └── depth: 0 - │ │ │ │ │ └── @ LocalVariableTargetNode (location: (12,7)-(12,8)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── name: :y - │ │ │ │ │ └── depth: 0 - │ │ │ │ ├── rest: - │ │ │ │ │ @ SplatNode (location: (12,10)-(12,11)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── operator_loc: (12,10)-(12,11) = "*" - │ │ │ │ │ └── expression: ∅ - │ │ │ │ ├── posts: (length: 0) - │ │ │ │ ├── opening_loc: (12,3)-(12,4) = "[" - │ │ │ │ └── closing_loc: (12,11)-(12,12) = "]" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (13,2)-(13,6)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ TrueNode (location: (13,2)-(13,6)) - │ │ │ │ └── flags: newline, static_literal - │ │ │ ├── in_loc: (12,0)-(12,2) = "in" - │ │ │ └── then_loc: (12,13)-(12,17) = "then" - │ │ ├── @ InNode (location: (14,0)-(15,6)) - │ │ │ ├── flags: ∅ - │ │ │ ├── pattern: - │ │ │ │ @ HashPatternNode (location: (14,3)-(14,16)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── constant: ∅ - │ │ │ │ ├── elements: (length: 2) - │ │ │ │ │ ├── @ AssocNode (location: (14,4)-(14,8)) - │ │ │ │ │ │ ├── flags: static_literal - │ │ │ │ │ │ ├── key: - │ │ │ │ │ │ │ @ SymbolNode (location: (14,4)-(14,6)) - │ │ │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ │ │ ├── value_loc: (14,4)-(14,5) = "a" - │ │ │ │ │ │ │ ├── closing_loc: (14,5)-(14,6) = ":" - │ │ │ │ │ │ │ └── unescaped: "a" - │ │ │ │ │ │ ├── value: - │ │ │ │ │ │ │ @ IntegerNode (location: (14,7)-(14,8)) - │ │ │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ │ │ └── value: 1 - │ │ │ │ │ │ └── operator_loc: ∅ - │ │ │ │ │ └── @ AssocNode (location: (14,10)-(14,15)) - │ │ │ │ │ ├── flags: static_literal - │ │ │ │ │ ├── key: - │ │ │ │ │ │ @ SymbolNode (location: (14,10)-(14,13)) - │ │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ │ ├── value_loc: (14,10)-(14,12) = "aa" - │ │ │ │ │ │ ├── closing_loc: (14,12)-(14,13) = ":" - │ │ │ │ │ │ └── unescaped: "aa" - │ │ │ │ │ ├── value: - │ │ │ │ │ │ @ IntegerNode (location: (14,14)-(14,15)) - │ │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ │ └── value: 2 - │ │ │ │ │ └── operator_loc: ∅ - │ │ │ │ ├── rest: ∅ - │ │ │ │ ├── opening_loc: (14,3)-(14,4) = "{" - │ │ │ │ └── closing_loc: (14,15)-(14,16) = "}" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (15,2)-(15,6)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ TrueNode (location: (15,2)-(15,6)) - │ │ │ │ └── flags: newline, static_literal - │ │ │ ├── in_loc: (14,0)-(14,2) = "in" - │ │ │ └── then_loc: (14,17)-(14,21) = "then" - │ │ ├── @ InNode (location: (16,0)-(17,6)) - │ │ │ ├── flags: ∅ - │ │ │ ├── pattern: - │ │ │ │ @ HashPatternNode (location: (16,3)-(16,5)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── constant: ∅ - │ │ │ │ ├── elements: (length: 0) - │ │ │ │ ├── rest: ∅ - │ │ │ │ ├── opening_loc: (16,3)-(16,4) = "{" - │ │ │ │ └── closing_loc: (16,4)-(16,5) = "}" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (17,2)-(17,6)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ TrueNode (location: (17,2)-(17,6)) - │ │ │ │ └── flags: newline, static_literal - │ │ │ ├── in_loc: (16,0)-(16,2) = "in" - │ │ │ └── then_loc: (16,6)-(16,10) = "then" - │ │ ├── @ InNode (location: (18,0)-(19,6)) - │ │ │ ├── flags: ∅ - │ │ │ ├── pattern: - │ │ │ │ @ HashPatternNode (location: (18,3)-(18,10)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── constant: ∅ - │ │ │ │ ├── elements: (length: 0) - │ │ │ │ ├── rest: - │ │ │ │ │ @ NoKeywordsParameterNode (location: (18,4)-(18,9)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── operator_loc: (18,4)-(18,6) = "**" - │ │ │ │ │ └── keyword_loc: (18,6)-(18,9) = "nil" - │ │ │ │ ├── opening_loc: (18,3)-(18,4) = "{" - │ │ │ │ └── closing_loc: (18,9)-(18,10) = "}" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (19,2)-(19,6)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ TrueNode (location: (19,2)-(19,6)) - │ │ │ │ └── flags: newline, static_literal - │ │ │ ├── in_loc: (18,0)-(18,2) = "in" - │ │ │ └── then_loc: (18,11)-(18,15) = "then" - │ │ ├── @ InNode (location: (20,0)-(21,6)) - │ │ │ ├── flags: ∅ - │ │ │ ├── pattern: - │ │ │ │ @ HashPatternNode (location: (20,3)-(20,11)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── constant: ∅ - │ │ │ │ ├── elements: (length: 1) - │ │ │ │ │ └── @ AssocNode (location: (20,4)-(20,10)) - │ │ │ │ │ ├── flags: static_literal - │ │ │ │ │ ├── key: - │ │ │ │ │ │ @ SymbolNode (location: (20,4)-(20,8)) - │ │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ │ │ ├── opening_loc: (20,4)-(20,5) = "\"" - │ │ │ │ │ │ ├── value_loc: (20,5)-(20,6) = "a" - │ │ │ │ │ │ ├── closing_loc: (20,6)-(20,8) = "\":" - │ │ │ │ │ │ └── unescaped: "a" - │ │ │ │ │ ├── value: - │ │ │ │ │ │ @ IntegerNode (location: (20,9)-(20,10)) - │ │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ │ └── value: 1 - │ │ │ │ │ └── operator_loc: ∅ - │ │ │ │ ├── rest: ∅ - │ │ │ │ ├── opening_loc: (20,3)-(20,4) = "{" - │ │ │ │ └── closing_loc: (20,10)-(20,11) = "}" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (21,2)-(21,6)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ TrueNode (location: (21,2)-(21,6)) - │ │ │ │ └── flags: newline, static_literal - │ │ │ ├── in_loc: (20,0)-(20,2) = "in" - │ │ │ └── then_loc: (20,12)-(20,16) = "then" - │ │ ├── @ InNode (location: (22,0)-(23,6)) - │ │ │ ├── flags: ∅ - │ │ │ ├── pattern: - │ │ │ │ @ AlternationPatternNode (location: (22,3)-(22,8)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── left: - │ │ │ │ │ @ IntegerNode (location: (22,3)-(22,4)) - │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ └── value: 1 - │ │ │ │ ├── right: - │ │ │ │ │ @ IntegerNode (location: (22,7)-(22,8)) - │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ └── value: 2 - │ │ │ │ └── operator_loc: (22,5)-(22,6) = "|" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (23,2)-(23,6)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ TrueNode (location: (23,2)-(23,6)) - │ │ │ │ └── flags: newline, static_literal - │ │ │ ├── in_loc: (22,0)-(22,2) = "in" - │ │ │ └── then_loc: (22,9)-(22,13) = "then" - │ │ ├── @ InNode (location: (24,0)-(25,6)) - │ │ │ ├── flags: ∅ - │ │ │ ├── pattern: - │ │ │ │ @ CapturePatternNode (location: (24,3)-(24,9)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── value: - │ │ │ │ │ @ IntegerNode (location: (24,3)-(24,4)) - │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ └── value: 1 - │ │ │ │ ├── target: - │ │ │ │ │ @ LocalVariableTargetNode (location: (24,8)-(24,9)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── name: :a - │ │ │ │ │ └── depth: 0 - │ │ │ │ └── operator_loc: (24,5)-(24,7) = "=>" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (25,2)-(25,6)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ TrueNode (location: (25,2)-(25,6)) - │ │ │ │ └── flags: newline, static_literal - │ │ │ ├── in_loc: (24,0)-(24,2) = "in" - │ │ │ └── then_loc: (24,10)-(24,14) = "then" - │ │ ├── @ InNode (location: (26,0)-(27,6)) - │ │ │ ├── flags: ∅ - │ │ │ ├── pattern: - │ │ │ │ @ PinnedVariableNode (location: (26,3)-(26,5)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── variable: - │ │ │ │ │ @ LocalVariableReadNode (location: (26,4)-(26,5)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── name: :x - │ │ │ │ │ └── depth: 0 - │ │ │ │ └── operator_loc: (26,3)-(26,4) = "^" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (27,2)-(27,6)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ TrueNode (location: (27,2)-(27,6)) - │ │ │ │ └── flags: newline, static_literal - │ │ │ ├── in_loc: (26,0)-(26,2) = "in" - │ │ │ └── then_loc: (26,6)-(26,10) = "then" - │ │ ├── @ InNode (location: (28,0)-(28,4)) - │ │ │ ├── flags: ∅ - │ │ │ ├── pattern: - │ │ │ │ @ IntegerNode (location: (28,3)-(28,4)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ ├── statements: ∅ - │ │ │ ├── in_loc: (28,0)-(28,2) = "in" - │ │ │ └── then_loc: ∅ - │ │ └── @ InNode (location: (29,0)-(30,6)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ IntegerNode (location: (29,3)-(29,4)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (30,2)-(30,6)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ TrueNode (location: (30,2)-(30,6)) - │ │ │ └── flags: newline, static_literal - │ │ ├── in_loc: (29,0)-(29,2) = "in" - │ │ └── then_loc: (29,5)-(29,9) = "then" - │ ├── else_clause: - │ │ @ ElseNode (location: (31,0)-(33,3)) - │ │ ├── flags: ∅ - │ │ ├── else_keyword_loc: (31,0)-(31,4) = "else" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (32,2)-(32,6)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ TrueNode (location: (32,2)-(32,6)) - │ │ │ └── flags: newline, static_literal - │ │ └── end_keyword_loc: (33,0)-(33,3) = "end" - │ ├── case_keyword_loc: (1,0)-(1,4) = "case" - │ └── end_keyword_loc: (33,0)-(33,3) = "end" - ├── @ CaseMatchNode (location: (34,0)-(36,3)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (34,5)-(34,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (34,5)-(34,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (35,0)-(35,17)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ ArrayPatternNode (location: (35,3)-(35,17)) - │ │ │ ├── flags: ∅ - │ │ │ ├── constant: - │ │ │ │ @ ConstantReadNode (location: (35,3)-(35,4)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :A - │ │ │ ├── requireds: (length: 2) - │ │ │ │ ├── @ IntegerNode (location: (35,5)-(35,6)) - │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ └── value: 1 - │ │ │ │ └── @ IntegerNode (location: (35,8)-(35,9)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 2 - │ │ │ ├── rest: - │ │ │ │ @ SplatNode (location: (35,11)-(35,13)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── operator_loc: (35,11)-(35,12) = "*" - │ │ │ │ └── expression: - │ │ │ │ @ LocalVariableTargetNode (location: (35,12)-(35,13)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :a - │ │ │ │ └── depth: 0 - │ │ │ ├── posts: (length: 1) - │ │ │ │ └── @ IntegerNode (location: (35,15)-(35,16)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 3 - │ │ │ ├── opening_loc: (35,4)-(35,5) = "[" - │ │ │ └── closing_loc: (35,16)-(35,17) = "]" - │ │ ├── statements: ∅ - │ │ ├── in_loc: (35,0)-(35,2) = "in" - │ │ └── then_loc: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (34,0)-(34,4) = "case" - │ └── end_keyword_loc: (36,0)-(36,3) = "end" - ├── @ CaseMatchNode (location: (37,0)-(40,3)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (37,5)-(37,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (37,5)-(37,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 1) - │ │ └── @ InNode (location: (38,0)-(38,4)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ ConstantReadNode (location: (38,3)-(38,4)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :A - │ │ ├── statements: ∅ - │ │ ├── in_loc: (38,0)-(38,2) = "in" - │ │ └── then_loc: ∅ - │ ├── else_clause: - │ │ @ ElseNode (location: (39,0)-(40,3)) - │ │ ├── flags: ∅ - │ │ ├── else_keyword_loc: (39,0)-(39,4) = "else" - │ │ ├── statements: ∅ - │ │ └── end_keyword_loc: (40,0)-(40,3) = "end" - │ ├── case_keyword_loc: (37,0)-(37,4) = "case" - │ └── end_keyword_loc: (40,0)-(40,3) = "end" - └── @ MatchPredicateNode (location: (41,0)-(41,8)) - ├── flags: newline - ├── value: - │ @ IntegerNode (location: (41,0)-(41,1)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── pattern: - │ @ ArrayPatternNode (location: (41,5)-(41,8)) - │ ├── flags: ∅ - │ ├── constant: ∅ - │ ├── requireds: (length: 1) - │ │ └── @ LocalVariableTargetNode (location: (41,6)-(41,7)) - │ │ ├── flags: ∅ - │ │ ├── name: :a - │ │ └── depth: 0 - │ ├── rest: ∅ - │ ├── posts: (length: 0) - │ ├── opening_loc: (41,5)-(41,6) = "[" - │ └── closing_loc: (41,7)-(41,8) = "]" - └── operator_loc: (41,2)-(41,4) = "in" diff --git a/test/prism/snapshots/unparser/corpus/literal/pragma.txt b/test/prism/snapshots/unparser/corpus/literal/pragma.txt deleted file mode 100644 index 2a82f0c860eb5a..00000000000000 --- a/test/prism/snapshots/unparser/corpus/literal/pragma.txt +++ /dev/null @@ -1,24 +0,0 @@ -@ ProgramNode (location: (1,0)-(4,7)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(4,7)) - ├── flags: ∅ - └── body: (length: 4) - ├── @ SourceEncodingNode (location: (1,0)-(1,12)) - │ └── flags: newline, static_literal - ├── @ SourceFileNode (location: (2,0)-(2,8)) - │ ├── flags: newline - │ └── filepath: "unparser/corpus/literal/pragma.txt" - ├── @ SourceLineNode (location: (3,0)-(3,8)) - │ └── flags: newline, static_literal - └── @ CallNode (location: (4,0)-(4,7)) - ├── flags: newline, variable_call, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :__dir__ - ├── message_loc: (4,0)-(4,7) = "__dir__" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/unparser/corpus/literal/range.txt b/test/prism/snapshots/unparser/corpus/literal/range.txt deleted file mode 100644 index d6bbe34b3430a0..00000000000000 --- a/test/prism/snapshots/unparser/corpus/literal/range.txt +++ /dev/null @@ -1,61 +0,0 @@ -@ ProgramNode (location: (1,0)-(4,5)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(4,5)) - ├── flags: ∅ - └── body: (length: 4) - ├── @ ParenthesesNode (location: (1,0)-(1,5)) - │ ├── flags: newline - │ ├── body: - │ │ @ StatementsNode (location: (1,1)-(1,4)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ RangeNode (location: (1,1)-(1,4)) - │ │ ├── flags: newline, static_literal - │ │ ├── left: - │ │ │ @ IntegerNode (location: (1,1)-(1,2)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── right: ∅ - │ │ └── operator_loc: (1,2)-(1,4) = ".." - │ ├── opening_loc: (1,0)-(1,1) = "(" - │ └── closing_loc: (1,4)-(1,5) = ")" - ├── @ RangeNode (location: (2,0)-(2,4)) - │ ├── flags: newline, static_literal - │ ├── left: - │ │ @ IntegerNode (location: (2,0)-(2,1)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── right: - │ │ @ IntegerNode (location: (2,3)-(2,4)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ └── operator_loc: (2,1)-(2,3) = ".." - ├── @ ParenthesesNode (location: (3,0)-(3,6)) - │ ├── flags: newline - │ ├── body: - │ │ @ StatementsNode (location: (3,1)-(3,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ RangeNode (location: (3,1)-(3,5)) - │ │ ├── flags: newline, static_literal, exclude_end - │ │ ├── left: - │ │ │ @ IntegerNode (location: (3,1)-(3,2)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── right: ∅ - │ │ └── operator_loc: (3,2)-(3,5) = "..." - │ ├── opening_loc: (3,0)-(3,1) = "(" - │ └── closing_loc: (3,5)-(3,6) = ")" - └── @ RangeNode (location: (4,0)-(4,5)) - ├── flags: newline, static_literal, exclude_end - ├── left: - │ @ IntegerNode (location: (4,0)-(4,1)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── right: - │ @ IntegerNode (location: (4,4)-(4,5)) - │ ├── flags: static_literal, decimal - │ └── value: 2 - └── operator_loc: (4,1)-(4,4) = "..." diff --git a/test/prism/snapshots/unparser/corpus/literal/rescue.txt b/test/prism/snapshots/unparser/corpus/literal/rescue.txt deleted file mode 100644 index 78801c1d90a204..00000000000000 --- a/test/prism/snapshots/unparser/corpus/literal/rescue.txt +++ /dev/null @@ -1,111 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,27)) -├── flags: ∅ -├── locals: [:x] -└── statements: - @ StatementsNode (location: (1,0)-(3,27)) - ├── flags: ∅ - └── body: (length: 3) - ├── @ RescueModifierNode (location: (1,0)-(1,14)) - │ ├── flags: newline - │ ├── expression: - │ │ @ CallNode (location: (1,0)-(1,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (1,0)-(1,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── keyword_loc: (1,4)-(1,10) = "rescue" - │ └── rescue_expression: - │ @ CallNode (location: (1,11)-(1,14)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :bar - │ ├── message_loc: (1,11)-(1,14) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ RescueModifierNode (location: (2,0)-(2,21)) - │ ├── flags: newline - │ ├── expression: - │ │ @ CallNode (location: (2,0)-(2,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (2,0)-(2,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── keyword_loc: (2,4)-(2,10) = "rescue" - │ └── rescue_expression: - │ @ ReturnNode (location: (2,11)-(2,21)) - │ ├── flags: ∅ - │ ├── keyword_loc: (2,11)-(2,17) = "return" - │ └── arguments: - │ @ ArgumentsNode (location: (2,18)-(2,21)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ CallNode (location: (2,18)-(2,21)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :bar - │ ├── message_loc: (2,18)-(2,21) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── @ LocalVariableWriteNode (location: (3,0)-(3,27)) - ├── flags: newline - ├── name: :x - ├── depth: 0 - ├── name_loc: (3,0)-(3,1) = "x" - ├── value: - │ @ ParenthesesNode (location: (3,4)-(3,27)) - │ ├── flags: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (3,5)-(3,26)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ RescueModifierNode (location: (3,5)-(3,26)) - │ │ ├── flags: newline - │ │ ├── expression: - │ │ │ @ CallNode (location: (3,5)-(3,8)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (3,5)-(3,8) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── keyword_loc: (3,9)-(3,15) = "rescue" - │ │ └── rescue_expression: - │ │ @ ReturnNode (location: (3,16)-(3,26)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (3,16)-(3,22) = "return" - │ │ └── arguments: - │ │ @ ArgumentsNode (location: (3,23)-(3,26)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (3,23)-(3,26)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (3,23)-(3,26) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── opening_loc: (3,4)-(3,5) = "(" - │ └── closing_loc: (3,26)-(3,27) = ")" - └── operator_loc: (3,2)-(3,3) = "=" diff --git a/test/prism/snapshots/unparser/corpus/literal/send.txt b/test/prism/snapshots/unparser/corpus/literal/send.txt deleted file mode 100644 index 4800b4e2e656b1..00000000000000 --- a/test/prism/snapshots/unparser/corpus/literal/send.txt +++ /dev/null @@ -1,2274 +0,0 @@ -@ ProgramNode (location: (1,0)-(84,7)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(84,7)) - ├── flags: ∅ - └── body: (length: 62) - ├── @ ModuleNode (location: (1,0)-(3,3)) - │ ├── flags: newline - │ ├── locals: [:foo, :a, :_] - │ ├── module_keyword_loc: (1,0)-(1,6) = "module" - │ ├── constant_path: - │ │ @ ConstantReadNode (location: (1,7)-(1,8)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── body: - │ │ @ StatementsNode (location: (2,2)-(2,22)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ LocalVariableOrWriteNode (location: (2,2)-(2,22)) - │ │ ├── flags: newline - │ │ ├── name_loc: (2,2)-(2,5) = "foo" - │ │ ├── operator_loc: (2,6)-(2,9) = "||=" - │ │ ├── value: - │ │ │ @ ParenthesesNode (location: (2,10)-(2,22)) - │ │ │ ├── flags: ∅ - │ │ │ ├── body: - │ │ │ │ @ StatementsNode (location: (2,11)-(2,21)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ MultiWriteNode (location: (2,11)-(2,21)) - │ │ │ │ ├── flags: newline - │ │ │ │ ├── lefts: (length: 2) - │ │ │ │ │ ├── @ LocalVariableTargetNode (location: (2,12)-(2,13)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ ├── name: :a - │ │ │ │ │ │ └── depth: 0 - │ │ │ │ │ └── @ LocalVariableTargetNode (location: (2,15)-(2,16)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── name: :_ - │ │ │ │ │ └── depth: 0 - │ │ │ │ ├── rest: ∅ - │ │ │ │ ├── rights: (length: 0) - │ │ │ │ ├── lparen_loc: (2,11)-(2,12) = "(" - │ │ │ │ ├── rparen_loc: (2,16)-(2,17) = ")" - │ │ │ │ ├── operator_loc: (2,18)-(2,19) = "=" - │ │ │ │ └── value: - │ │ │ │ @ CallNode (location: (2,20)-(2,21)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :b - │ │ │ │ ├── message_loc: (2,20)-(2,21) = "b" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── opening_loc: (2,10)-(2,11) = "(" - │ │ │ └── closing_loc: (2,21)-(2,22) = ")" - │ │ ├── name: :foo - │ │ └── depth: 0 - │ ├── end_keyword_loc: (3,0)-(3,3) = "end" - │ └── name: :A - ├── @ ModuleNode (location: (5,0)-(8,3)) - │ ├── flags: newline - │ ├── locals: [:local] - │ ├── module_keyword_loc: (5,0)-(5,6) = "module" - │ ├── constant_path: - │ │ @ ConstantReadNode (location: (5,7)-(5,8)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── body: - │ │ @ StatementsNode (location: (6,2)-(7,11)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 2) - │ │ ├── @ LocalVariableWriteNode (location: (6,2)-(6,11)) - │ │ │ ├── flags: newline - │ │ │ ├── name: :local - │ │ │ ├── depth: 0 - │ │ │ ├── name_loc: (6,2)-(6,7) = "local" - │ │ │ ├── value: - │ │ │ │ @ IntegerNode (location: (6,10)-(6,11)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ └── operator_loc: (6,8)-(6,9) = "=" - │ │ └── @ CallNode (location: (7,2)-(7,11)) - │ │ ├── flags: newline - │ │ ├── receiver: - │ │ │ @ LocalVariableReadNode (location: (7,2)-(7,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :local - │ │ │ └── depth: 0 - │ │ ├── call_operator_loc: (7,7)-(7,8) = "." - │ │ ├── name: :bar - │ │ ├── message_loc: (7,8)-(7,11) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── end_keyword_loc: (8,0)-(8,3) = "end" - │ └── name: :A - ├── @ CallNode (location: (9,0)-(10,7)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ClassNode (location: (9,0)-(10,3)) - │ │ ├── flags: ∅ - │ │ ├── locals: [] - │ │ ├── class_keyword_loc: (9,0)-(9,5) = "class" - │ │ ├── constant_path: - │ │ │ @ ConstantReadNode (location: (9,6)-(9,7)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :A - │ │ ├── inheritance_operator_loc: ∅ - │ │ ├── superclass: ∅ - │ │ ├── body: ∅ - │ │ ├── end_keyword_loc: (10,0)-(10,3) = "end" - │ │ └── name: :A - │ ├── call_operator_loc: (10,3)-(10,4) = "." - │ ├── name: :bar - │ ├── message_loc: (10,4)-(10,7) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (11,0)-(12,7)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ModuleNode (location: (11,0)-(12,3)) - │ │ ├── flags: ∅ - │ │ ├── locals: [] - │ │ ├── module_keyword_loc: (11,0)-(11,6) = "module" - │ │ ├── constant_path: - │ │ │ @ ConstantReadNode (location: (11,7)-(11,8)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :A - │ │ ├── body: ∅ - │ │ ├── end_keyword_loc: (12,0)-(12,3) = "end" - │ │ └── name: :A - │ ├── call_operator_loc: (12,3)-(12,4) = "." - │ ├── name: :bar - │ ├── message_loc: (12,4)-(12,7) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (13,0)-(15,7)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ BeginNode (location: (13,0)-(15,3)) - │ │ ├── flags: ∅ - │ │ ├── begin_keyword_loc: (13,0)-(13,5) = "begin" - │ │ ├── statements: ∅ - │ │ ├── rescue_clause: - │ │ │ @ RescueNode (location: (14,0)-(14,6)) - │ │ │ ├── flags: ∅ - │ │ │ ├── keyword_loc: (14,0)-(14,6) = "rescue" - │ │ │ ├── exceptions: (length: 0) - │ │ │ ├── operator_loc: ∅ - │ │ │ ├── reference: ∅ - │ │ │ ├── statements: ∅ - │ │ │ └── subsequent: ∅ - │ │ ├── else_clause: ∅ - │ │ ├── ensure_clause: ∅ - │ │ └── end_keyword_loc: (15,0)-(15,3) = "end" - │ ├── call_operator_loc: (15,3)-(15,4) = "." - │ ├── name: :bar - │ ├── message_loc: (15,4)-(15,7) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (16,0)-(19,7)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CaseNode (location: (16,0)-(19,3)) - │ │ ├── flags: ∅ - │ │ ├── predicate: - │ │ │ @ ParenthesesNode (location: (16,5)-(17,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── body: - │ │ │ │ @ StatementsNode (location: (16,6)-(17,9)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 2) - │ │ │ │ ├── @ DefNode (location: (16,6)-(17,3)) - │ │ │ │ │ ├── flags: newline - │ │ │ │ │ ├── name: :foo - │ │ │ │ │ ├── name_loc: (16,10)-(16,13) = "foo" - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── parameters: ∅ - │ │ │ │ │ ├── body: ∅ - │ │ │ │ │ ├── locals: [] - │ │ │ │ │ ├── def_keyword_loc: (16,6)-(16,9) = "def" - │ │ │ │ │ ├── operator_loc: ∅ - │ │ │ │ │ ├── lparen_loc: ∅ - │ │ │ │ │ ├── rparen_loc: ∅ - │ │ │ │ │ ├── equal_loc: ∅ - │ │ │ │ │ └── end_keyword_loc: (17,0)-(17,3) = "end" - │ │ │ │ └── @ SymbolNode (location: (17,5)-(17,9)) - │ │ │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: (17,5)-(17,6) = ":" - │ │ │ │ ├── value_loc: (17,6)-(17,9) = "bar" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "bar" - │ │ │ ├── opening_loc: (16,5)-(16,6) = "(" - │ │ │ └── closing_loc: (17,9)-(17,10) = ")" - │ │ ├── conditions: (length: 1) - │ │ │ └── @ WhenNode (location: (18,0)-(18,8)) - │ │ │ ├── flags: ∅ - │ │ │ ├── keyword_loc: (18,0)-(18,4) = "when" - │ │ │ ├── conditions: (length: 1) - │ │ │ │ └── @ CallNode (location: (18,5)-(18,8)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :bar - │ │ │ │ ├── message_loc: (18,5)-(18,8) = "bar" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── then_keyword_loc: ∅ - │ │ │ └── statements: ∅ - │ │ ├── else_clause: ∅ - │ │ ├── case_keyword_loc: (16,0)-(16,4) = "case" - │ │ └── end_keyword_loc: (19,0)-(19,3) = "end" - │ ├── call_operator_loc: (19,3)-(19,4) = "." - │ ├── name: :baz - │ ├── message_loc: (19,4)-(19,7) = "baz" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (20,0)-(22,7)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CaseNode (location: (20,0)-(22,3)) - │ │ ├── flags: ∅ - │ │ ├── predicate: - │ │ │ @ CallNode (location: (20,5)-(20,8)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (20,5)-(20,8) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── conditions: (length: 1) - │ │ │ └── @ WhenNode (location: (21,0)-(21,8)) - │ │ │ ├── flags: ∅ - │ │ │ ├── keyword_loc: (21,0)-(21,4) = "when" - │ │ │ ├── conditions: (length: 1) - │ │ │ │ └── @ CallNode (location: (21,5)-(21,8)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :bar - │ │ │ │ ├── message_loc: (21,5)-(21,8) = "bar" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── then_keyword_loc: ∅ - │ │ │ └── statements: ∅ - │ │ ├── else_clause: ∅ - │ │ ├── case_keyword_loc: (20,0)-(20,4) = "case" - │ │ └── end_keyword_loc: (22,0)-(22,3) = "end" - │ ├── call_operator_loc: (22,3)-(22,4) = "." - │ ├── name: :baz - │ ├── message_loc: (22,4)-(22,7) = "baz" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (23,0)-(24,7)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ SingletonClassNode (location: (23,0)-(24,3)) - │ │ ├── flags: ∅ - │ │ ├── locals: [] - │ │ ├── class_keyword_loc: (23,0)-(23,5) = "class" - │ │ ├── operator_loc: (23,6)-(23,8) = "<<" - │ │ ├── expression: - │ │ │ @ SelfNode (location: (23,9)-(23,13)) - │ │ │ └── flags: ∅ - │ │ ├── body: ∅ - │ │ └── end_keyword_loc: (24,0)-(24,3) = "end" - │ ├── call_operator_loc: (24,3)-(24,4) = "." - │ ├── name: :bar - │ ├── message_loc: (24,4)-(24,7) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (25,0)-(26,7)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ DefNode (location: (25,0)-(26,3)) - │ │ ├── flags: ∅ - │ │ ├── name: :foo - │ │ ├── name_loc: (25,9)-(25,12) = "foo" - │ │ ├── receiver: - │ │ │ @ SelfNode (location: (25,4)-(25,8)) - │ │ │ └── flags: ∅ - │ │ ├── parameters: ∅ - │ │ ├── body: ∅ - │ │ ├── locals: [] - │ │ ├── def_keyword_loc: (25,0)-(25,3) = "def" - │ │ ├── operator_loc: (25,8)-(25,9) = "." - │ │ ├── lparen_loc: ∅ - │ │ ├── rparen_loc: ∅ - │ │ ├── equal_loc: ∅ - │ │ └── end_keyword_loc: (26,0)-(26,3) = "end" - │ ├── call_operator_loc: (26,3)-(26,4) = "." - │ ├── name: :bar - │ ├── message_loc: (26,4)-(26,7) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (27,0)-(28,7)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ DefNode (location: (27,0)-(28,3)) - │ │ ├── flags: ∅ - │ │ ├── name: :foo - │ │ ├── name_loc: (27,4)-(27,7) = "foo" - │ │ ├── receiver: ∅ - │ │ ├── parameters: ∅ - │ │ ├── body: ∅ - │ │ ├── locals: [] - │ │ ├── def_keyword_loc: (27,0)-(27,3) = "def" - │ │ ├── operator_loc: ∅ - │ │ ├── lparen_loc: ∅ - │ │ ├── rparen_loc: ∅ - │ │ ├── equal_loc: ∅ - │ │ └── end_keyword_loc: (28,0)-(28,3) = "end" - │ ├── call_operator_loc: (28,3)-(28,4) = "." - │ ├── name: :bar - │ ├── message_loc: (28,4)-(28,7) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (29,0)-(30,7)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ UntilNode (location: (29,0)-(30,3)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (29,0)-(29,5) = "until" - │ │ ├── closing_loc: (30,0)-(30,3) = "end" - │ │ ├── predicate: - │ │ │ @ CallNode (location: (29,6)-(29,9)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (29,6)-(29,9) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── statements: ∅ - │ ├── call_operator_loc: (30,3)-(30,4) = "." - │ ├── name: :bar - │ ├── message_loc: (30,4)-(30,7) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (31,0)-(32,7)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ WhileNode (location: (31,0)-(32,3)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (31,0)-(31,5) = "while" - │ │ ├── closing_loc: (32,0)-(32,3) = "end" - │ │ ├── predicate: - │ │ │ @ CallNode (location: (31,6)-(31,9)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (31,6)-(31,9) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── statements: ∅ - │ ├── call_operator_loc: (32,3)-(32,4) = "." - │ ├── name: :bar - │ ├── message_loc: (32,4)-(32,7) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (33,0)-(34,5)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (33,0)-(34,1)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :loop - │ │ ├── message_loc: (33,0)-(33,4) = "loop" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: - │ │ @ BlockNode (location: (33,5)-(34,1)) - │ │ ├── flags: ∅ - │ │ ├── locals: [] - │ │ ├── parameters: ∅ - │ │ ├── body: ∅ - │ │ ├── opening_loc: (33,5)-(33,6) = "{" - │ │ └── closing_loc: (34,0)-(34,1) = "}" - │ ├── call_operator_loc: (34,1)-(34,2) = "." - │ ├── name: :bar - │ ├── message_loc: (34,2)-(34,5) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (35,0)-(36,7)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ IfNode (location: (35,0)-(36,3)) - │ │ ├── flags: newline - │ │ ├── if_keyword_loc: (35,0)-(35,2) = "if" - │ │ ├── predicate: - │ │ │ @ CallNode (location: (35,3)-(35,6)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (35,3)-(35,6) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── then_keyword_loc: ∅ - │ │ ├── statements: ∅ - │ │ ├── subsequent: ∅ - │ │ └── end_keyword_loc: (36,0)-(36,3) = "end" - │ ├── call_operator_loc: (36,3)-(36,4) = "." - │ ├── name: :baz - │ ├── message_loc: (36,4)-(36,7) = "baz" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (37,0)-(37,19)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ParenthesesNode (location: (37,0)-(37,15)) - │ │ ├── flags: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (37,1)-(37,14)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (37,1)-(37,14)) - │ │ │ ├── flags: newline - │ │ │ ├── receiver: - │ │ │ │ @ RegularExpressionNode (location: (37,1)-(37,6)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: (37,1)-(37,2) = "/" - │ │ │ │ ├── content_loc: (37,2)-(37,5) = "bar" - │ │ │ │ ├── closing_loc: (37,5)-(37,6) = "/" - │ │ │ │ └── unescaped: "bar" - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :=~ - │ │ │ ├── message_loc: (37,7)-(37,9) = "=~" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (37,10)-(37,14)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ SymbolNode (location: (37,10)-(37,14)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: (37,10)-(37,11) = ":" - │ │ │ │ ├── value_loc: (37,11)-(37,14) = "foo" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "foo" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── opening_loc: (37,0)-(37,1) = "(" - │ │ └── closing_loc: (37,14)-(37,15) = ")" - │ ├── call_operator_loc: (37,15)-(37,16) = "." - │ ├── name: :foo - │ ├── message_loc: (37,16)-(37,19) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (38,0)-(38,10)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ParenthesesNode (location: (38,0)-(38,6)) - │ │ ├── flags: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (38,1)-(38,5)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ RangeNode (location: (38,1)-(38,5)) - │ │ │ ├── flags: newline, static_literal - │ │ │ ├── left: - │ │ │ │ @ IntegerNode (location: (38,1)-(38,2)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ ├── right: - │ │ │ │ @ IntegerNode (location: (38,4)-(38,5)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 2 - │ │ │ └── operator_loc: (38,2)-(38,4) = ".." - │ │ ├── opening_loc: (38,0)-(38,1) = "(" - │ │ └── closing_loc: (38,5)-(38,6) = ")" - │ ├── call_operator_loc: (38,6)-(38,7) = "." - │ ├── name: :max - │ ├── message_loc: (38,7)-(38,10) = "max" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (39,0)-(39,18)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ParenthesesNode (location: (39,0)-(39,14)) - │ │ ├── flags: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (39,1)-(39,13)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (39,1)-(39,13)) - │ │ │ ├── flags: newline - │ │ │ ├── receiver: - │ │ │ │ @ CallNode (location: (39,1)-(39,4)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :foo - │ │ │ │ ├── message_loc: (39,1)-(39,4) = "foo" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :=~ - │ │ │ ├── message_loc: (39,5)-(39,7) = "=~" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (39,8)-(39,13)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ RegularExpressionNode (location: (39,8)-(39,13)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: (39,8)-(39,9) = "/" - │ │ │ │ ├── content_loc: (39,9)-(39,12) = "bar" - │ │ │ │ ├── closing_loc: (39,12)-(39,13) = "/" - │ │ │ │ └── unescaped: "bar" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── opening_loc: (39,0)-(39,1) = "(" - │ │ └── closing_loc: (39,13)-(39,14) = ")" - │ ├── call_operator_loc: (39,14)-(39,15) = "." - │ ├── name: :foo - │ ├── message_loc: (39,15)-(39,18) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (40,0)-(40,13)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ RegularExpressionNode (location: (40,0)-(40,5)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (40,0)-(40,1) = "/" - │ │ ├── content_loc: (40,1)-(40,4) = "bar" - │ │ ├── closing_loc: (40,4)-(40,5) = "/" - │ │ └── unescaped: "bar" - │ ├── call_operator_loc: ∅ - │ ├── name: :=~ - │ ├── message_loc: (40,6)-(40,8) = "=~" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (40,9)-(40,13)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ SymbolNode (location: (40,9)-(40,13)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (40,9)-(40,10) = ":" - │ │ ├── value_loc: (40,10)-(40,13) = "foo" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "foo" - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (41,0)-(41,12)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ RegularExpressionNode (location: (41,0)-(41,5)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (41,0)-(41,1) = "/" - │ │ ├── content_loc: (41,1)-(41,4) = "bar" - │ │ ├── closing_loc: (41,4)-(41,5) = "/" - │ │ └── unescaped: "bar" - │ ├── call_operator_loc: ∅ - │ ├── name: :=~ - │ ├── message_loc: (41,6)-(41,8) = "=~" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (41,9)-(41,12)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (41,9)-(41,12)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (41,9)-(41,12) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ RangeNode (location: (42,0)-(42,8)) - │ ├── flags: newline - │ ├── left: - │ │ @ IntegerNode (location: (42,0)-(42,1)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── right: - │ │ @ CallNode (location: (42,3)-(42,8)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ IntegerNode (location: (42,3)-(42,4)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ ├── call_operator_loc: (42,4)-(42,5) = "." - │ │ ├── name: :max - │ │ ├── message_loc: (42,5)-(42,8) = "max" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── operator_loc: (42,1)-(42,3) = ".." - ├── @ CallNode (location: (43,0)-(43,5)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ConstantReadNode (location: (43,0)-(43,1)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── call_operator_loc: (43,1)-(43,2) = "." - │ ├── name: :foo - │ ├── message_loc: (43,2)-(43,5) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (44,0)-(44,5)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :FOO - │ ├── message_loc: (44,0)-(44,3) = "FOO" - │ ├── opening_loc: (44,3)-(44,4) = "(" - │ ├── arguments: ∅ - │ ├── closing_loc: (44,4)-(44,5) = ")" - │ └── block: ∅ - ├── @ CallNode (location: (45,0)-(45,4)) - │ ├── flags: newline, safe_navigation - │ ├── receiver: - │ │ @ CallNode (location: (45,0)-(45,1)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (45,0)-(45,1) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (45,1)-(45,3) = "&." - │ ├── name: :b - │ ├── message_loc: (45,3)-(45,4) = "b" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (46,0)-(46,5)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (46,0)-(46,1)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (46,0)-(46,1) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (46,1)-(46,2) = "." - │ ├── name: :foo - │ ├── message_loc: (46,2)-(46,5) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (47,0)-(47,3)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (47,0)-(47,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (48,0)-(48,18)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (48,0)-(48,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (48,0)-(48,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :<< - │ ├── message_loc: (48,4)-(48,6) = "<<" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (48,7)-(48,18)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ ParenthesesNode (location: (48,7)-(48,18)) - │ │ ├── flags: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (48,8)-(48,17)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (48,8)-(48,17)) - │ │ │ ├── flags: newline - │ │ │ ├── receiver: - │ │ │ │ @ CallNode (location: (48,8)-(48,11)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :bar - │ │ │ │ ├── message_loc: (48,8)-(48,11) = "bar" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :* - │ │ │ ├── message_loc: (48,12)-(48,13) = "*" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (48,14)-(48,17)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ CallNode (location: (48,14)-(48,17)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ ├── message_loc: (48,14)-(48,17) = "baz" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── opening_loc: (48,7)-(48,8) = "(" - │ │ └── closing_loc: (48,17)-(48,18) = ")" - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (49,0)-(49,12)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (49,0)-(49,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (49,0)-(49,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :=~ - │ ├── message_loc: (49,4)-(49,6) = "=~" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (49,7)-(49,12)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ RegularExpressionNode (location: (49,7)-(49,12)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (49,7)-(49,8) = "/" - │ │ ├── content_loc: (49,8)-(49,11) = "bar" - │ │ ├── closing_loc: (49,11)-(49,12) = "/" - │ │ └── unescaped: "bar" - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (50,0)-(50,17)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (50,0)-(50,3) = "foo" - │ ├── opening_loc: (50,3)-(50,4) = "(" - │ ├── arguments: ∅ - │ ├── closing_loc: (50,17)-(50,18) = ")" - │ └── block: - │ @ BlockArgumentNode (location: (50,4)-(50,17)) - │ ├── flags: ∅ - │ ├── expression: - │ │ @ ParenthesesNode (location: (50,5)-(50,17)) - │ │ ├── flags: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (50,6)-(50,16)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ OrNode (location: (50,6)-(50,16)) - │ │ │ ├── flags: newline - │ │ │ ├── left: - │ │ │ │ @ CallNode (location: (50,6)-(50,9)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :foo - │ │ │ │ ├── message_loc: (50,6)-(50,9) = "foo" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── right: - │ │ │ │ @ CallNode (location: (50,13)-(50,16)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :bar - │ │ │ │ ├── message_loc: (50,13)-(50,16) = "bar" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── operator_loc: (50,10)-(50,12) = "||" - │ │ ├── opening_loc: (50,5)-(50,6) = "(" - │ │ └── closing_loc: (50,16)-(50,17) = ")" - │ └── operator_loc: (50,4)-(50,5) = "&" - ├── @ CallNode (location: (51,0)-(51,10)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (51,0)-(51,3) = "foo" - │ ├── opening_loc: (51,3)-(51,4) = "(" - │ ├── arguments: ∅ - │ ├── closing_loc: (51,10)-(51,11) = ")" - │ └── block: - │ @ BlockArgumentNode (location: (51,4)-(51,10)) - │ ├── flags: ∅ - │ ├── expression: - │ │ @ CallNode (location: (51,5)-(51,10)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :block - │ │ ├── message_loc: (51,5)-(51,10) = "block" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── operator_loc: (51,4)-(51,5) = "&" - ├── @ CallNode (location: (52,0)-(52,17)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (52,0)-(52,3) = "foo" - │ ├── opening_loc: (52,3)-(52,4) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (52,4)-(52,9)) - │ │ ├── flags: contains_splat - │ │ └── arguments: (length: 1) - │ │ └── @ SplatNode (location: (52,4)-(52,9)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (52,4)-(52,5) = "*" - │ │ └── expression: - │ │ @ CallNode (location: (52,5)-(52,9)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :args - │ │ ├── message_loc: (52,5)-(52,9) = "args" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (52,17)-(52,18) = ")" - │ └── block: - │ @ BlockArgumentNode (location: (52,11)-(52,17)) - │ ├── flags: ∅ - │ ├── expression: - │ │ @ CallNode (location: (52,12)-(52,17)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :block - │ │ ├── message_loc: (52,12)-(52,17) = "block" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── operator_loc: (52,11)-(52,12) = "&" - ├── @ CallNode (location: (53,0)-(53,15)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (53,0)-(53,3) = "foo" - │ ├── opening_loc: (53,3)-(53,4) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (53,4)-(53,14)) - │ │ ├── flags: contains_splat - │ │ └── arguments: (length: 1) - │ │ └── @ SplatNode (location: (53,4)-(53,14)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (53,4)-(53,5) = "*" - │ │ └── expression: - │ │ @ CallNode (location: (53,5)-(53,14)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :arguments - │ │ ├── message_loc: (53,5)-(53,14) = "arguments" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (53,14)-(53,15) = ")" - │ └── block: ∅ - ├── @ CallNode (location: (54,0)-(54,9)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (54,0)-(54,3) = "foo" - │ ├── opening_loc: (54,3)-(54,4) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (54,4)-(54,8)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ IntegerNode (location: (54,4)-(54,5)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── @ IntegerNode (location: (54,7)-(54,8)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── closing_loc: (54,8)-(54,9) = ")" - │ └── block: ∅ - ├── @ CallNode (location: (55,0)-(55,8)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (55,0)-(55,3) = "foo" - │ ├── opening_loc: (55,3)-(55,4) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (55,4)-(55,7)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (55,4)-(55,7)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (55,4)-(55,7) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (55,7)-(55,8) = ")" - │ └── block: ∅ - ├── @ CallNode (location: (56,0)-(56,15)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (56,0)-(56,3) = "foo" - │ ├── opening_loc: (56,3)-(56,4) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (56,4)-(56,14)) - │ │ ├── flags: contains_splat - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (56,4)-(56,7)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (56,4)-(56,7) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── @ SplatNode (location: (56,9)-(56,14)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (56,9)-(56,10) = "*" - │ │ └── expression: - │ │ @ CallNode (location: (56,10)-(56,14)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :args - │ │ ├── message_loc: (56,10)-(56,14) = "args" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (56,14)-(56,15) = ")" - │ └── block: ∅ - ├── @ CallNode (location: (57,0)-(57,17)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (57,0)-(57,3) = "foo" - │ ├── opening_loc: (57,3)-(57,4) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (57,4)-(57,16)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (57,4)-(57,16)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ CallNode (location: (57,4)-(57,7)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (57,4)-(57,7) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :=~ - │ │ ├── message_loc: (57,8)-(57,10) = "=~" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (57,11)-(57,16)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ RegularExpressionNode (location: (57,11)-(57,16)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (57,11)-(57,12) = "/" - │ │ │ ├── content_loc: (57,12)-(57,15) = "bar" - │ │ │ ├── closing_loc: (57,15)-(57,16) = "/" - │ │ │ └── unescaped: "bar" - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (57,16)-(57,17) = ")" - │ └── block: ∅ - ├── @ CallNode (location: (58,0)-(58,13)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (58,0)-(58,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (58,0)-(58,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (58,3)-(58,4) = "." - │ ├── name: :bar - │ ├── message_loc: (58,4)-(58,7) = "bar" - │ ├── opening_loc: (58,7)-(58,8) = "(" - │ ├── arguments: ∅ - │ ├── closing_loc: (58,12)-(58,13) = ")" - │ └── block: - │ @ BlockArgumentNode (location: (58,8)-(58,12)) - │ ├── flags: ∅ - │ ├── expression: - │ │ @ CallNode (location: (58,9)-(58,12)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :baz - │ │ ├── message_loc: (58,9)-(58,12) = "baz" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── operator_loc: (58,8)-(58,9) = "&" - ├── @ CallNode (location: (59,0)-(59,26)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (59,0)-(59,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (59,0)-(59,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (59,3)-(59,4) = "." - │ ├── name: :bar - │ ├── message_loc: (59,4)-(59,7) = "bar" - │ ├── opening_loc: (59,7)-(59,8) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (59,8)-(59,25)) - │ │ ├── flags: contains_splat, contains_multiple_splats - │ │ └── arguments: (length: 3) - │ │ ├── @ SplatNode (location: (59,8)-(59,13)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (59,8)-(59,9) = "*" - │ │ │ └── expression: - │ │ │ @ CallNode (location: (59,9)-(59,13)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :arga - │ │ │ ├── message_loc: (59,9)-(59,13) = "arga" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── @ CallNode (location: (59,15)-(59,18)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (59,15)-(59,18) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── @ SplatNode (location: (59,20)-(59,25)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (59,20)-(59,21) = "*" - │ │ └── expression: - │ │ @ CallNode (location: (59,21)-(59,25)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :argb - │ │ ├── message_loc: (59,21)-(59,25) = "argb" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (59,25)-(59,26) = ")" - │ └── block: ∅ - ├── @ CallNode (location: (60,0)-(60,14)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (60,0)-(60,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (60,0)-(60,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (60,3)-(60,4) = "." - │ ├── name: :bar - │ ├── message_loc: (60,4)-(60,7) = "bar" - │ ├── opening_loc: (60,7)-(60,8) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (60,8)-(60,13)) - │ │ ├── flags: contains_splat - │ │ └── arguments: (length: 1) - │ │ └── @ SplatNode (location: (60,8)-(60,13)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (60,8)-(60,9) = "*" - │ │ └── expression: - │ │ @ CallNode (location: (60,9)-(60,13)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :args - │ │ ├── message_loc: (60,9)-(60,13) = "args" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (60,13)-(60,14) = ")" - │ └── block: ∅ - ├── @ CallNode (location: (61,0)-(61,19)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (61,0)-(61,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (61,0)-(61,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (61,3)-(61,4) = "." - │ ├── name: :bar - │ ├── message_loc: (61,4)-(61,7) = "bar" - │ ├── opening_loc: (61,7)-(61,8) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (61,8)-(61,18)) - │ │ ├── flags: contains_splat - │ │ └── arguments: (length: 2) - │ │ ├── @ SplatNode (location: (61,8)-(61,13)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (61,8)-(61,9) = "*" - │ │ │ └── expression: - │ │ │ @ CallNode (location: (61,9)-(61,13)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :args - │ │ │ ├── message_loc: (61,9)-(61,13) = "args" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── @ CallNode (location: (61,15)-(61,18)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (61,15)-(61,18) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (61,18)-(61,19) = ")" - │ └── block: ∅ - ├── @ CallNode (location: (62,0)-(62,19)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (62,0)-(62,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (62,0)-(62,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (62,3)-(62,4) = "." - │ ├── name: :bar - │ ├── message_loc: (62,4)-(62,7) = "bar" - │ ├── opening_loc: (62,7)-(62,8) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (62,8)-(62,12)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ SymbolNode (location: (62,8)-(62,12)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (62,8)-(62,9) = ":" - │ │ ├── value_loc: (62,9)-(62,12) = "baz" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "baz" - │ ├── closing_loc: (62,18)-(62,19) = ")" - │ └── block: - │ @ BlockArgumentNode (location: (62,14)-(62,18)) - │ ├── flags: ∅ - │ ├── expression: - │ │ @ CallNode (location: (62,15)-(62,18)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :baz - │ │ ├── message_loc: (62,15)-(62,18) = "baz" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── operator_loc: (62,14)-(62,15) = "&" - ├── @ CallNode (location: (63,0)-(63,17)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (63,0)-(63,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (63,0)-(63,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (63,3)-(63,4) = "." - │ ├── name: :bar - │ ├── message_loc: (63,4)-(63,7) = "bar" - │ ├── opening_loc: (63,7)-(63,8) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (63,8)-(63,16)) - │ │ ├── flags: contains_keywords - │ │ └── arguments: (length: 1) - │ │ └── @ KeywordHashNode (location: (63,8)-(63,16)) - │ │ ├── flags: symbol_keys - │ │ └── elements: (length: 1) - │ │ └── @ AssocNode (location: (63,8)-(63,16)) - │ │ ├── flags: ∅ - │ │ ├── key: - │ │ │ @ SymbolNode (location: (63,8)-(63,12)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (63,8)-(63,11) = "baz" - │ │ │ ├── closing_loc: (63,11)-(63,12) = ":" - │ │ │ └── unescaped: "baz" - │ │ ├── value: - │ │ │ @ CallNode (location: (63,13)-(63,16)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :boz - │ │ │ ├── message_loc: (63,13)-(63,16) = "boz" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: ∅ - │ ├── closing_loc: (63,16)-(63,17) = ")" - │ └── block: ∅ - ├── @ CallNode (location: (64,0)-(64,26)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (64,0)-(64,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (64,0)-(64,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (64,3)-(64,4) = "." - │ ├── name: :bar - │ ├── message_loc: (64,4)-(64,7) = "bar" - │ ├── opening_loc: (64,7)-(64,8) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (64,8)-(64,25)) - │ │ ├── flags: contains_keywords - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (64,8)-(64,11)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (64,8)-(64,11) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── @ KeywordHashNode (location: (64,13)-(64,25)) - │ │ ├── flags: ∅ - │ │ └── elements: (length: 1) - │ │ └── @ AssocNode (location: (64,13)-(64,25)) - │ │ ├── flags: ∅ - │ │ ├── key: - │ │ │ @ StringNode (location: (64,13)-(64,18)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: (64,13)-(64,14) = "\"" - │ │ │ ├── content_loc: (64,14)-(64,17) = "baz" - │ │ │ ├── closing_loc: (64,17)-(64,18) = "\"" - │ │ │ └── unescaped: "baz" - │ │ ├── value: - │ │ │ @ CallNode (location: (64,22)-(64,25)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :boz - │ │ │ ├── message_loc: (64,22)-(64,25) = "boz" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: (64,19)-(64,21) = "=>" - │ ├── closing_loc: (64,25)-(64,26) = ")" - │ └── block: ∅ - ├── @ CallNode (location: (65,0)-(65,19)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (65,0)-(65,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (65,0)-(65,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (65,3)-(65,4) = "." - │ ├── name: :bar - │ ├── message_loc: (65,4)-(65,7) = "bar" - │ ├── opening_loc: (65,7)-(65,8) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (65,8)-(65,18)) - │ │ ├── flags: contains_splat - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (65,8)-(65,11)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (65,8)-(65,11) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── @ SplatNode (location: (65,13)-(65,18)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (65,13)-(65,14) = "*" - │ │ └── expression: - │ │ @ CallNode (location: (65,14)-(65,18)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :args - │ │ ├── message_loc: (65,14)-(65,18) = "args" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (65,18)-(65,19) = ")" - │ └── block: ∅ - ├── @ CallNode (location: (66,0)-(66,27)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (66,0)-(66,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (66,0)-(66,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (66,3)-(66,4) = "." - │ ├── name: :bar - │ ├── message_loc: (66,4)-(66,7) = "bar" - │ ├── opening_loc: (66,7)-(66,8) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (66,8)-(66,18)) - │ │ ├── flags: contains_splat - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (66,8)-(66,11)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (66,8)-(66,11) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── @ SplatNode (location: (66,13)-(66,18)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (66,13)-(66,14) = "*" - │ │ └── expression: - │ │ @ CallNode (location: (66,14)-(66,18)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :args - │ │ ├── message_loc: (66,14)-(66,18) = "args" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (66,26)-(66,27) = ")" - │ └── block: - │ @ BlockArgumentNode (location: (66,20)-(66,26)) - │ ├── flags: ∅ - │ ├── expression: - │ │ @ CallNode (location: (66,21)-(66,26)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :block - │ │ ├── message_loc: (66,21)-(66,26) = "block" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── operator_loc: (66,20)-(66,21) = "&" - ├── @ CallNode (location: (67,0)-(67,16)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (67,0)-(67,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (67,0)-(67,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (67,3)-(67,4) = "." - │ ├── name: :bar - │ ├── message_loc: (67,4)-(67,7) = "bar" - │ ├── opening_loc: (67,7)-(67,8) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (67,8)-(67,15)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (67,8)-(67,11)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (67,8)-(67,11) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── @ HashNode (location: (67,13)-(67,15)) - │ │ ├── flags: static_literal - │ │ ├── opening_loc: (67,13)-(67,14) = "{" - │ │ ├── elements: (length: 0) - │ │ └── closing_loc: (67,14)-(67,15) = "}" - │ ├── closing_loc: (67,15)-(67,16) = ")" - │ └── block: ∅ - ├── @ CallNode (location: (68,0)-(68,26)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (68,0)-(68,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (68,0)-(68,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (68,3)-(68,4) = "." - │ ├── name: :bar - │ ├── message_loc: (68,4)-(68,7) = "bar" - │ ├── opening_loc: (68,7)-(68,8) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (68,8)-(68,25)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ HashNode (location: (68,8)-(68,20)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (68,8)-(68,9) = "{" - │ │ │ ├── elements: (length: 1) - │ │ │ │ └── @ AssocNode (location: (68,10)-(68,18)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── key: - │ │ │ │ │ @ SymbolNode (location: (68,10)-(68,14)) - │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── value_loc: (68,10)-(68,13) = "foo" - │ │ │ │ │ ├── closing_loc: (68,13)-(68,14) = ":" - │ │ │ │ │ └── unescaped: "foo" - │ │ │ │ ├── value: - │ │ │ │ │ @ CallNode (location: (68,15)-(68,18)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :boz - │ │ │ │ │ ├── message_loc: (68,15)-(68,18) = "boz" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ └── operator_loc: ∅ - │ │ │ └── closing_loc: (68,19)-(68,20) = "}" - │ │ └── @ CallNode (location: (68,22)-(68,25)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :boz - │ │ ├── message_loc: (68,22)-(68,25) = "boz" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (68,25)-(68,26) = ")" - │ └── block: ∅ - ├── @ CallNode (location: (69,0)-(69,12)) - │ ├── flags: newline, attribute_write - │ ├── receiver: - │ │ @ CallNode (location: (69,0)-(69,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (69,0)-(69,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (69,3)-(69,4) = "." - │ ├── name: :bar= - │ ├── message_loc: (69,4)-(69,7) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (69,8)-(69,12)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ SymbolNode (location: (69,8)-(69,12)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (69,8)-(69,9) = ":" - │ │ ├── value_loc: (69,9)-(69,12) = "baz" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "baz" - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (70,0)-(70,9)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (70,0)-(70,3) = "foo" - │ ├── opening_loc: (70,3)-(70,4) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (70,4)-(70,8)) - │ │ ├── flags: contains_keywords - │ │ └── arguments: (length: 1) - │ │ └── @ KeywordHashNode (location: (70,4)-(70,8)) - │ │ ├── flags: symbol_keys - │ │ └── elements: (length: 1) - │ │ └── @ AssocNode (location: (70,4)-(70,8)) - │ │ ├── flags: ∅ - │ │ ├── key: - │ │ │ @ SymbolNode (location: (70,4)-(70,6)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (70,4)-(70,5) = "a" - │ │ │ ├── closing_loc: (70,5)-(70,6) = ":" - │ │ │ └── unescaped: "a" - │ │ ├── value: - │ │ │ @ CallNode (location: (70,7)-(70,8)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (70,7)-(70,8) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: ∅ - │ ├── closing_loc: (70,8)-(70,9) = ")" - │ └── block: ∅ - ├── @ CallNode (location: (71,0)-(71,11)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (71,0)-(71,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (71,0)-(71,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (71,3)-(71,4) = "." - │ ├── name: :& - │ ├── message_loc: (71,4)-(71,5) = "&" - │ ├── opening_loc: (71,5)-(71,6) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (71,6)-(71,10)) - │ │ ├── flags: contains_keywords - │ │ └── arguments: (length: 1) - │ │ └── @ KeywordHashNode (location: (71,6)-(71,10)) - │ │ ├── flags: symbol_keys - │ │ └── elements: (length: 1) - │ │ └── @ AssocNode (location: (71,6)-(71,10)) - │ │ ├── flags: ∅ - │ │ ├── key: - │ │ │ @ SymbolNode (location: (71,6)-(71,8)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (71,6)-(71,7) = "a" - │ │ │ ├── closing_loc: (71,7)-(71,8) = ":" - │ │ │ └── unescaped: "a" - │ │ ├── value: - │ │ │ @ CallNode (location: (71,9)-(71,10)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (71,9)-(71,10) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: ∅ - │ ├── closing_loc: (71,10)-(71,11) = ")" - │ └── block: ∅ - ├── @ CallNode (location: (72,0)-(72,10)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (72,0)-(72,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (72,0)-(72,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (72,3)-(72,4) = "." - │ ├── name: :& - │ ├── message_loc: (72,4)-(72,5) = "&" - │ ├── opening_loc: (72,5)-(72,6) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (72,6)-(72,9)) - │ │ ├── flags: contains_keywords, contains_keyword_splat - │ │ └── arguments: (length: 1) - │ │ └── @ KeywordHashNode (location: (72,6)-(72,9)) - │ │ ├── flags: ∅ - │ │ └── elements: (length: 1) - │ │ └── @ AssocSplatNode (location: (72,6)-(72,9)) - │ │ ├── flags: ∅ - │ │ ├── value: - │ │ │ @ CallNode (location: (72,8)-(72,9)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :a - │ │ │ ├── message_loc: (72,8)-(72,9) = "a" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: (72,6)-(72,8) = "**" - │ ├── closing_loc: (72,9)-(72,10) = ")" - │ └── block: ∅ - ├── @ CallNode (location: (73,0)-(73,9)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (73,0)-(73,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (73,0)-(73,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :[] - │ ├── message_loc: (73,3)-(73,9) = "[*baz]" - │ ├── opening_loc: (73,3)-(73,4) = "[" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (73,4)-(73,8)) - │ │ ├── flags: contains_splat - │ │ └── arguments: (length: 1) - │ │ └── @ SplatNode (location: (73,4)-(73,8)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (73,4)-(73,5) = "*" - │ │ └── expression: - │ │ @ CallNode (location: (73,5)-(73,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :baz - │ │ ├── message_loc: (73,5)-(73,8) = "baz" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (73,8)-(73,9) = "]" - │ └── block: ∅ - ├── @ CallNode (location: (74,0)-(74,9)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (74,0)-(74,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (74,0)-(74,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :[] - │ ├── message_loc: (74,3)-(74,9) = "[1, 2]" - │ ├── opening_loc: (74,3)-(74,4) = "[" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (74,4)-(74,8)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ IntegerNode (location: (74,4)-(74,5)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── @ IntegerNode (location: (74,7)-(74,8)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── closing_loc: (74,8)-(74,9) = "]" - │ └── block: ∅ - ├── @ CallNode (location: (75,0)-(75,5)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (75,0)-(75,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (75,0)-(75,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :[] - │ ├── message_loc: (75,3)-(75,5) = "[]" - │ ├── opening_loc: (75,3)-(75,4) = "[" - │ ├── arguments: ∅ - │ ├── closing_loc: (75,4)-(75,5) = "]" - │ └── block: ∅ - ├── @ CallNode (location: (76,0)-(76,8)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: - │ │ @ SelfNode (location: (76,0)-(76,4)) - │ │ └── flags: ∅ - │ ├── call_operator_loc: (76,4)-(76,5) = "." - │ ├── name: :foo - │ ├── message_loc: (76,5)-(76,8) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (77,0)-(77,13)) - │ ├── flags: newline, attribute_write, ignore_visibility - │ ├── receiver: - │ │ @ SelfNode (location: (77,0)-(77,4)) - │ │ └── flags: ∅ - │ ├── call_operator_loc: (77,4)-(77,5) = "." - │ ├── name: :foo= - │ ├── message_loc: (77,5)-(77,8) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (77,9)-(77,13)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ SymbolNode (location: (77,9)-(77,13)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (77,9)-(77,10) = ":" - │ │ ├── value_loc: (77,10)-(77,13) = "bar" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "bar" - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (78,0)-(78,17)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ParenthesesNode (location: (78,0)-(78,7)) - │ │ ├── flags: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (78,1)-(78,6)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (78,1)-(78,6)) - │ │ │ ├── flags: newline - │ │ │ ├── receiver: - │ │ │ │ @ CallNode (location: (78,1)-(78,2)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :a - │ │ │ │ ├── message_loc: (78,1)-(78,2) = "a" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :+ - │ │ │ ├── message_loc: (78,3)-(78,4) = "+" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (78,5)-(78,6)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ CallNode (location: (78,5)-(78,6)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :b - │ │ │ │ ├── message_loc: (78,5)-(78,6) = "b" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── opening_loc: (78,0)-(78,1) = "(" - │ │ └── closing_loc: (78,6)-(78,7) = ")" - │ ├── call_operator_loc: ∅ - │ ├── name: :/ - │ ├── message_loc: (78,8)-(78,9) = "/" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (78,10)-(78,17)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ ParenthesesNode (location: (78,10)-(78,17)) - │ │ ├── flags: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (78,11)-(78,16)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (78,11)-(78,16)) - │ │ │ ├── flags: newline - │ │ │ ├── receiver: - │ │ │ │ @ CallNode (location: (78,11)-(78,12)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :c - │ │ │ │ ├── message_loc: (78,11)-(78,12) = "c" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :- - │ │ │ ├── message_loc: (78,13)-(78,14) = "-" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (78,15)-(78,16)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ CallNode (location: (78,15)-(78,16)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :d - │ │ │ │ ├── message_loc: (78,15)-(78,16) = "d" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── opening_loc: (78,10)-(78,11) = "(" - │ │ └── closing_loc: (78,16)-(78,17) = ")" - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (79,0)-(79,19)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ParenthesesNode (location: (79,0)-(79,7)) - │ │ ├── flags: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (79,1)-(79,6)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (79,1)-(79,6)) - │ │ │ ├── flags: newline - │ │ │ ├── receiver: - │ │ │ │ @ CallNode (location: (79,1)-(79,2)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :a - │ │ │ │ ├── message_loc: (79,1)-(79,2) = "a" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :+ - │ │ │ ├── message_loc: (79,3)-(79,4) = "+" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (79,5)-(79,6)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ CallNode (location: (79,5)-(79,6)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :b - │ │ │ │ ├── message_loc: (79,5)-(79,6) = "b" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── opening_loc: (79,0)-(79,1) = "(" - │ │ └── closing_loc: (79,6)-(79,7) = ")" - │ ├── call_operator_loc: ∅ - │ ├── name: :/ - │ ├── message_loc: (79,8)-(79,9) = "/" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (79,10)-(79,19)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (79,10)-(79,19)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ CallNode (location: (79,10)-(79,11)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :c - │ │ │ ├── message_loc: (79,10)-(79,11) = "c" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: (79,11)-(79,12) = "." - │ │ ├── name: :- - │ │ ├── message_loc: (79,12)-(79,13) = "-" - │ │ ├── opening_loc: (79,13)-(79,14) = "(" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (79,14)-(79,18)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 2) - │ │ │ ├── @ CallNode (location: (79,14)-(79,15)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :e - │ │ │ │ ├── message_loc: (79,14)-(79,15) = "e" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── @ CallNode (location: (79,17)-(79,18)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :f - │ │ │ ├── message_loc: (79,17)-(79,18) = "f" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── closing_loc: (79,18)-(79,19) = ")" - │ │ └── block: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (80,0)-(80,17)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ParenthesesNode (location: (80,0)-(80,7)) - │ │ ├── flags: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (80,1)-(80,6)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (80,1)-(80,6)) - │ │ │ ├── flags: newline - │ │ │ ├── receiver: - │ │ │ │ @ CallNode (location: (80,1)-(80,2)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :a - │ │ │ │ ├── message_loc: (80,1)-(80,2) = "a" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :+ - │ │ │ ├── message_loc: (80,3)-(80,4) = "+" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (80,5)-(80,6)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ CallNode (location: (80,5)-(80,6)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :b - │ │ │ │ ├── message_loc: (80,5)-(80,6) = "b" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── opening_loc: (80,0)-(80,1) = "(" - │ │ └── closing_loc: (80,6)-(80,7) = ")" - │ ├── call_operator_loc: ∅ - │ ├── name: :/ - │ ├── message_loc: (80,8)-(80,9) = "/" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (80,10)-(80,17)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (80,10)-(80,17)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ CallNode (location: (80,10)-(80,11)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :c - │ │ │ ├── message_loc: (80,10)-(80,11) = "c" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── call_operator_loc: (80,11)-(80,12) = "." - │ │ ├── name: :- - │ │ ├── message_loc: (80,12)-(80,13) = "-" - │ │ ├── opening_loc: (80,13)-(80,14) = "(" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (80,14)-(80,16)) - │ │ │ ├── flags: contains_splat - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ SplatNode (location: (80,14)-(80,16)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (80,14)-(80,15) = "*" - │ │ │ └── expression: - │ │ │ @ CallNode (location: (80,15)-(80,16)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :f - │ │ │ ├── message_loc: (80,15)-(80,16) = "f" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── closing_loc: (80,16)-(80,17) = ")" - │ │ └── block: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (81,0)-(81,8)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :x - │ ├── message_loc: (81,0)-(81,1) = "x" - │ ├── opening_loc: (81,1)-(81,2) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (81,2)-(81,7)) - │ │ ├── flags: contains_keywords, contains_keyword_splat - │ │ └── arguments: (length: 1) - │ │ └── @ KeywordHashNode (location: (81,2)-(81,7)) - │ │ ├── flags: ∅ - │ │ └── elements: (length: 1) - │ │ └── @ AssocSplatNode (location: (81,2)-(81,7)) - │ │ ├── flags: ∅ - │ │ ├── value: - │ │ │ @ CallNode (location: (81,4)-(81,7)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (81,4)-(81,7) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: (81,2)-(81,4) = "**" - │ ├── closing_loc: (81,7)-(81,8) = ")" - │ └── block: ∅ - ├── @ CallNode (location: (82,0)-(82,6)) - │ ├── flags: newline, safe_navigation - │ ├── receiver: - │ │ @ CallNode (location: (82,0)-(82,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (82,0)-(82,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (82,3)-(82,5) = "&." - │ ├── name: :! - │ ├── message_loc: (82,5)-(82,6) = "!" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (83,0)-(83,8)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (83,0)-(83,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (83,0)-(83,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (83,3)-(83,4) = "." - │ ├── name: :~ - │ ├── message_loc: (83,4)-(83,5) = "~" - │ ├── opening_loc: (83,5)-(83,6) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (83,6)-(83,7)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (83,6)-(83,7)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :b - │ │ ├── message_loc: (83,6)-(83,7) = "b" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (83,7)-(83,8) = ")" - │ └── block: ∅ - └── @ CallNode (location: (84,0)-(84,7)) - ├── flags: newline, safe_navigation - ├── receiver: - │ @ CallNode (location: (84,0)-(84,1)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (84,0)-(84,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: (84,1)-(84,3) = "&." - ├── name: :+ - ├── message_loc: (84,3)-(84,4) = "+" - ├── opening_loc: (84,4)-(84,5) = "(" - ├── arguments: - │ @ ArgumentsNode (location: (84,5)-(84,6)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ CallNode (location: (84,5)-(84,6)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :b - │ ├── message_loc: (84,5)-(84,6) = "b" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── closing_loc: (84,6)-(84,7) = ")" - └── block: ∅ diff --git a/test/prism/snapshots/unparser/corpus/literal/since/27.txt b/test/prism/snapshots/unparser/corpus/literal/since/27.txt deleted file mode 100644 index e4cda312f836bf..00000000000000 --- a/test/prism/snapshots/unparser/corpus/literal/since/27.txt +++ /dev/null @@ -1,58 +0,0 @@ -@ ProgramNode (location: (1,0)-(4,5)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(4,5)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ LambdaNode (location: (1,0)-(3,1)) - │ ├── flags: newline - │ ├── locals: [:_1, :_2] - │ ├── operator_loc: (1,0)-(1,2) = "->" - │ ├── opening_loc: (1,3)-(1,4) = "{" - │ ├── closing_loc: (3,0)-(3,1) = "}" - │ ├── parameters: - │ │ @ NumberedParametersNode (location: (1,0)-(3,1)) - │ │ ├── flags: ∅ - │ │ └── maximum: 2 - │ └── body: - │ @ StatementsNode (location: (2,2)-(2,9)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (2,2)-(2,9)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (2,2)-(2,4)) - │ │ ├── flags: ∅ - │ │ ├── name: :_1 - │ │ └── depth: 0 - │ ├── call_operator_loc: ∅ - │ ├── name: :+ - │ ├── message_loc: (2,5)-(2,6) = "+" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (2,7)-(2,9)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ LocalVariableReadNode (location: (2,7)-(2,9)) - │ │ ├── flags: ∅ - │ │ ├── name: :_2 - │ │ └── depth: 0 - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── @ ParenthesesNode (location: (4,0)-(4,5)) - ├── flags: newline - ├── body: - │ @ StatementsNode (location: (4,1)-(4,4)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ RangeNode (location: (4,1)-(4,4)) - │ ├── flags: newline, static_literal - │ ├── left: ∅ - │ ├── right: - │ │ @ IntegerNode (location: (4,3)-(4,4)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ └── operator_loc: (4,1)-(4,3) = ".." - ├── opening_loc: (4,0)-(4,1) = "(" - └── closing_loc: (4,4)-(4,5) = ")" diff --git a/test/prism/snapshots/unparser/corpus/literal/since/30.txt b/test/prism/snapshots/unparser/corpus/literal/since/30.txt deleted file mode 100644 index 0102b2c97b4f5e..00000000000000 --- a/test/prism/snapshots/unparser/corpus/literal/since/30.txt +++ /dev/null @@ -1,106 +0,0 @@ -@ ProgramNode (location: (1,0)-(4,17)) -├── flags: ∅ -├── locals: [:a, :foo] -└── statements: - @ StatementsNode (location: (1,0)-(4,17)) - ├── flags: ∅ - └── body: (length: 4) - ├── @ MatchRequiredNode (location: (1,0)-(1,8)) - │ ├── flags: newline - │ ├── value: - │ │ @ IntegerNode (location: (1,0)-(1,1)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (1,5)-(1,8)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ LocalVariableTargetNode (location: (1,6)-(1,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :a - │ │ │ └── depth: 0 - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── opening_loc: (1,5)-(1,6) = "[" - │ │ └── closing_loc: (1,7)-(1,8) = "]" - │ └── operator_loc: (1,2)-(1,4) = "=>" - ├── @ MatchRequiredNode (location: (2,0)-(2,8)) - │ ├── flags: newline - │ ├── value: - │ │ @ IntegerNode (location: (2,0)-(2,1)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (2,5)-(2,8)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── rest: - │ │ │ @ SplatNode (location: (2,6)-(2,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (2,6)-(2,7) = "*" - │ │ │ └── expression: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── opening_loc: (2,5)-(2,6) = "[" - │ │ └── closing_loc: (2,7)-(2,8) = "]" - │ └── operator_loc: (2,2)-(2,4) = "=>" - ├── @ MatchPredicateNode (location: (3,0)-(3,15)) - │ ├── flags: newline - │ ├── value: - │ │ @ IntegerNode (location: (3,0)-(3,1)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── pattern: - │ │ @ FindPatternNode (location: (3,5)-(3,15)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── left: - │ │ │ @ SplatNode (location: (3,6)-(3,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (3,6)-(3,7) = "*" - │ │ │ └── expression: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ IntegerNode (location: (3,9)-(3,11)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 42 - │ │ ├── right: - │ │ │ @ SplatNode (location: (3,13)-(3,14)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (3,13)-(3,14) = "*" - │ │ │ └── expression: ∅ - │ │ ├── opening_loc: (3,5)-(3,6) = "[" - │ │ └── closing_loc: (3,14)-(3,15) = "]" - │ └── operator_loc: (3,2)-(3,4) = "in" - └── @ MatchPredicateNode (location: (4,0)-(4,17)) - ├── flags: newline - ├── value: - │ @ IntegerNode (location: (4,0)-(4,1)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── pattern: - │ @ FindPatternNode (location: (4,5)-(4,17)) - │ ├── flags: ∅ - │ ├── constant: ∅ - │ ├── left: - │ │ @ SplatNode (location: (4,6)-(4,7)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (4,6)-(4,7) = "*" - │ │ └── expression: ∅ - │ ├── requireds: (length: 1) - │ │ └── @ LocalVariableTargetNode (location: (4,9)-(4,10)) - │ │ ├── flags: ∅ - │ │ ├── name: :a - │ │ └── depth: 0 - │ ├── right: - │ │ @ SplatNode (location: (4,12)-(4,16)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (4,12)-(4,13) = "*" - │ │ └── expression: - │ │ @ LocalVariableTargetNode (location: (4,13)-(4,16)) - │ │ ├── flags: ∅ - │ │ ├── name: :foo - │ │ └── depth: 0 - │ ├── opening_loc: (4,5)-(4,6) = "[" - │ └── closing_loc: (4,16)-(4,17) = "]" - └── operator_loc: (4,2)-(4,4) = "in" diff --git a/test/prism/snapshots/unparser/corpus/literal/since/31.txt b/test/prism/snapshots/unparser/corpus/literal/since/31.txt deleted file mode 100644 index 81bcd9662bd136..00000000000000 --- a/test/prism/snapshots/unparser/corpus/literal/since/31.txt +++ /dev/null @@ -1,100 +0,0 @@ -@ ProgramNode (location: (1,0)-(7,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(7,3)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ DefNode (location: (1,0)-(3,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (1,4)-(1,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,8)-(1,9)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: - │ │ @ BlockParameterNode (location: (1,8)-(1,9)) - │ │ ├── flags: ∅ - │ │ ├── name: ∅ - │ │ ├── name_loc: ∅ - │ │ └── operator_loc: (1,8)-(1,9) = "&" - │ ├── body: - │ │ @ StatementsNode (location: (2,2)-(2,7)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (2,2)-(2,7)) - │ │ ├── flags: newline, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (2,2)-(2,5) = "bar" - │ │ ├── opening_loc: (2,5)-(2,6) = "(" - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: (2,7)-(2,8) = ")" - │ │ └── block: - │ │ @ BlockArgumentNode (location: (2,6)-(2,7)) - │ │ ├── flags: ∅ - │ │ ├── expression: ∅ - │ │ └── operator_loc: (2,6)-(2,7) = "&" - │ ├── locals: [] - │ ├── def_keyword_loc: (1,0)-(1,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (1,7)-(1,8) = "(" - │ ├── rparen_loc: (1,9)-(1,10) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (3,0)-(3,3) = "end" - └── @ DefNode (location: (5,0)-(7,3)) - ├── flags: newline - ├── name: :foo - ├── name_loc: (5,4)-(5,7) = "foo" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (5,8)-(5,12)) - │ ├── flags: ∅ - │ ├── requireds: (length: 1) - │ │ └── @ RequiredParameterNode (location: (5,8)-(5,9)) - │ │ ├── flags: ∅ - │ │ └── name: :a - │ ├── optionals: (length: 0) - │ ├── rest: ∅ - │ ├── posts: (length: 0) - │ ├── keywords: (length: 0) - │ ├── keyword_rest: ∅ - │ └── block: - │ @ BlockParameterNode (location: (5,11)-(5,12)) - │ ├── flags: ∅ - │ ├── name: ∅ - │ ├── name_loc: ∅ - │ └── operator_loc: (5,11)-(5,12) = "&" - ├── body: - │ @ StatementsNode (location: (6,2)-(6,7)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (6,2)-(6,7)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :bar - │ ├── message_loc: (6,2)-(6,5) = "bar" - │ ├── opening_loc: (6,5)-(6,6) = "(" - │ ├── arguments: ∅ - │ ├── closing_loc: (6,7)-(6,8) = ")" - │ └── block: - │ @ BlockArgumentNode (location: (6,6)-(6,7)) - │ ├── flags: ∅ - │ ├── expression: ∅ - │ └── operator_loc: (6,6)-(6,7) = "&" - ├── locals: [:a] - ├── def_keyword_loc: (5,0)-(5,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: (5,7)-(5,8) = "(" - ├── rparen_loc: (5,12)-(5,13) = ")" - ├── equal_loc: ∅ - └── end_keyword_loc: (7,0)-(7,3) = "end" diff --git a/test/prism/snapshots/unparser/corpus/literal/since/32.txt b/test/prism/snapshots/unparser/corpus/literal/since/32.txt deleted file mode 100644 index 2b126a0cc5551a..00000000000000 --- a/test/prism/snapshots/unparser/corpus/literal/since/32.txt +++ /dev/null @@ -1,174 +0,0 @@ -@ ProgramNode (location: (1,0)-(11,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(11,3)) - ├── flags: ∅ - └── body: (length: 3) - ├── @ DefNode (location: (1,0)-(3,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (1,4)-(1,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,8)-(1,20)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (1,8)-(1,16)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :argument - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: - │ │ │ @ KeywordRestParameterNode (location: (1,18)-(1,20)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: ∅ - │ │ │ ├── name_loc: ∅ - │ │ │ └── operator_loc: (1,18)-(1,20) = "**" - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (2,2)-(2,19)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (2,2)-(2,19)) - │ │ ├── flags: newline, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (2,2)-(2,5) = "bar" - │ │ ├── opening_loc: (2,5)-(2,6) = "(" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (2,6)-(2,18)) - │ │ │ ├── flags: contains_keywords, contains_keyword_splat - │ │ │ └── arguments: (length: 2) - │ │ │ ├── @ LocalVariableReadNode (location: (2,6)-(2,14)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :argument - │ │ │ │ └── depth: 0 - │ │ │ └── @ KeywordHashNode (location: (2,16)-(2,18)) - │ │ │ ├── flags: ∅ - │ │ │ └── elements: (length: 1) - │ │ │ └── @ AssocSplatNode (location: (2,16)-(2,18)) - │ │ │ ├── flags: ∅ - │ │ │ ├── value: ∅ - │ │ │ └── operator_loc: (2,16)-(2,18) = "**" - │ │ ├── closing_loc: (2,18)-(2,19) = ")" - │ │ └── block: ∅ - │ ├── locals: [:argument] - │ ├── def_keyword_loc: (1,0)-(1,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (1,7)-(1,8) = "(" - │ ├── rparen_loc: (1,20)-(1,21) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (3,0)-(3,3) = "end" - ├── @ DefNode (location: (5,0)-(7,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (5,4)-(5,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (5,8)-(5,19)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (5,8)-(5,16)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :argument - │ │ ├── optionals: (length: 0) - │ │ ├── rest: - │ │ │ @ RestParameterNode (location: (5,18)-(5,19)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: ∅ - │ │ │ ├── name_loc: ∅ - │ │ │ └── operator_loc: (5,18)-(5,19) = "*" - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (6,2)-(6,18)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (6,2)-(6,18)) - │ │ ├── flags: newline, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (6,2)-(6,5) = "bar" - │ │ ├── opening_loc: (6,5)-(6,6) = "(" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (6,6)-(6,17)) - │ │ │ ├── flags: contains_splat - │ │ │ └── arguments: (length: 2) - │ │ │ ├── @ LocalVariableReadNode (location: (6,6)-(6,14)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :argument - │ │ │ │ └── depth: 0 - │ │ │ └── @ SplatNode (location: (6,16)-(6,17)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (6,16)-(6,17) = "*" - │ │ │ └── expression: ∅ - │ │ ├── closing_loc: (6,17)-(6,18) = ")" - │ │ └── block: ∅ - │ ├── locals: [:argument] - │ ├── def_keyword_loc: (5,0)-(5,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (5,7)-(5,8) = "(" - │ ├── rparen_loc: (5,19)-(5,20) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (7,0)-(7,3) = "end" - └── @ DefNode (location: (9,0)-(11,3)) - ├── flags: newline - ├── name: :foo - ├── name_loc: (9,4)-(9,7) = "foo" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (9,8)-(9,10)) - │ ├── flags: ∅ - │ ├── requireds: (length: 0) - │ ├── optionals: (length: 0) - │ ├── rest: ∅ - │ ├── posts: (length: 0) - │ ├── keywords: (length: 0) - │ ├── keyword_rest: - │ │ @ KeywordRestParameterNode (location: (9,8)-(9,10)) - │ │ ├── flags: ∅ - │ │ ├── name: ∅ - │ │ ├── name_loc: ∅ - │ │ └── operator_loc: (9,8)-(9,10) = "**" - │ └── block: ∅ - ├── body: - │ @ StatementsNode (location: (10,2)-(10,20)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ HashNode (location: (10,2)-(10,20)) - │ ├── flags: newline - │ ├── opening_loc: (10,2)-(10,3) = "{" - │ ├── elements: (length: 2) - │ │ ├── @ AssocNode (location: (10,4)-(10,14)) - │ │ │ ├── flags: static_literal - │ │ │ ├── key: - │ │ │ │ @ SymbolNode (location: (10,4)-(10,12)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── value_loc: (10,4)-(10,11) = "default" - │ │ │ │ ├── closing_loc: (10,11)-(10,12) = ":" - │ │ │ │ └── unescaped: "default" - │ │ │ ├── value: - │ │ │ │ @ IntegerNode (location: (10,13)-(10,14)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ └── operator_loc: ∅ - │ │ └── @ AssocSplatNode (location: (10,16)-(10,18)) - │ │ ├── flags: ∅ - │ │ ├── value: ∅ - │ │ └── operator_loc: (10,16)-(10,18) = "**" - │ └── closing_loc: (10,19)-(10,20) = "}" - ├── locals: [] - ├── def_keyword_loc: (9,0)-(9,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: (9,7)-(9,8) = "(" - ├── rparen_loc: (9,10)-(9,11) = ")" - ├── equal_loc: ∅ - └── end_keyword_loc: (11,0)-(11,3) = "end" diff --git a/test/prism/snapshots/unparser/corpus/literal/singletons.txt b/test/prism/snapshots/unparser/corpus/literal/singletons.txt deleted file mode 100644 index 23069207c93422..00000000000000 --- a/test/prism/snapshots/unparser/corpus/literal/singletons.txt +++ /dev/null @@ -1,15 +0,0 @@ -@ ProgramNode (location: (1,0)-(4,4)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(4,4)) - ├── flags: ∅ - └── body: (length: 4) - ├── @ FalseNode (location: (1,0)-(1,5)) - │ └── flags: newline, static_literal - ├── @ NilNode (location: (2,0)-(2,3)) - │ └── flags: newline, static_literal - ├── @ SelfNode (location: (3,0)-(3,4)) - │ └── flags: newline - └── @ TrueNode (location: (4,0)-(4,4)) - └── flags: newline, static_literal diff --git a/test/prism/snapshots/unparser/corpus/literal/super.txt b/test/prism/snapshots/unparser/corpus/literal/super.txt deleted file mode 100644 index a6311116ca5c23..00000000000000 --- a/test/prism/snapshots/unparser/corpus/literal/super.txt +++ /dev/null @@ -1,302 +0,0 @@ -@ ProgramNode (location: (1,0)-(21,1)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(21,1)) - ├── flags: ∅ - └── body: (length: 11) - ├── @ ForwardingSuperNode (location: (1,0)-(1,5)) - │ ├── flags: newline - │ └── block: ∅ - ├── @ SuperNode (location: (2,0)-(2,7)) - │ ├── flags: newline - │ ├── keyword_loc: (2,0)-(2,5) = "super" - │ ├── lparen_loc: (2,5)-(2,6) = "(" - │ ├── arguments: ∅ - │ ├── rparen_loc: (2,6)-(2,7) = ")" - │ └── block: ∅ - ├── @ SuperNode (location: (3,0)-(3,8)) - │ ├── flags: newline - │ ├── keyword_loc: (3,0)-(3,5) = "super" - │ ├── lparen_loc: (3,5)-(3,6) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (3,6)-(3,7)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (3,6)-(3,7)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (3,6)-(3,7) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── rparen_loc: (3,7)-(3,8) = ")" - │ └── block: ∅ - ├── @ SuperNode (location: (4,0)-(4,11)) - │ ├── flags: newline - │ ├── keyword_loc: (4,0)-(4,5) = "super" - │ ├── lparen_loc: (4,5)-(4,6) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (4,6)-(4,10)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (4,6)-(4,7)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :a - │ │ │ ├── message_loc: (4,6)-(4,7) = "a" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── @ CallNode (location: (4,9)-(4,10)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :b - │ │ ├── message_loc: (4,9)-(4,10) = "b" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── rparen_loc: (4,10)-(4,11) = ")" - │ └── block: ∅ - ├── @ SuperNode (location: (5,0)-(5,13)) - │ ├── flags: newline - │ ├── keyword_loc: (5,0)-(5,5) = "super" - │ ├── lparen_loc: (5,5)-(5,6) = "(" - │ ├── arguments: ∅ - │ ├── rparen_loc: (5,12)-(5,13) = ")" - │ └── block: - │ @ BlockArgumentNode (location: (5,6)-(5,12)) - │ ├── flags: ∅ - │ ├── expression: - │ │ @ CallNode (location: (5,7)-(5,12)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :block - │ │ ├── message_loc: (5,7)-(5,12) = "block" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── operator_loc: (5,6)-(5,7) = "&" - ├── @ SuperNode (location: (6,0)-(6,16)) - │ ├── flags: newline - │ ├── keyword_loc: (6,0)-(6,5) = "super" - │ ├── lparen_loc: (6,5)-(6,6) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (6,6)-(6,7)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (6,6)-(6,7)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (6,6)-(6,7) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── rparen_loc: (6,15)-(6,16) = ")" - │ └── block: - │ @ BlockArgumentNode (location: (6,9)-(6,15)) - │ ├── flags: ∅ - │ ├── expression: - │ │ @ CallNode (location: (6,10)-(6,15)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :block - │ │ ├── message_loc: (6,10)-(6,15) = "block" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── operator_loc: (6,9)-(6,10) = "&" - ├── @ SuperNode (location: (7,0)-(9,2)) - │ ├── flags: newline - │ ├── keyword_loc: (7,0)-(7,5) = "super" - │ ├── lparen_loc: (7,5)-(7,6) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (7,6)-(9,1)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (7,6)-(9,1)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (7,6)-(7,7) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: - │ │ @ BlockNode (location: (7,8)-(9,1)) - │ │ ├── flags: ∅ - │ │ ├── locals: [] - │ │ ├── parameters: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (8,2)-(8,5)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (8,2)-(8,5)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (8,2)-(8,5) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── opening_loc: (7,8)-(7,9) = "{" - │ │ └── closing_loc: (9,0)-(9,1) = "}" - │ ├── rparen_loc: (9,1)-(9,2) = ")" - │ └── block: ∅ - ├── @ ForwardingSuperNode (location: (10,0)-(12,1)) - │ ├── flags: newline - │ └── block: - │ @ BlockNode (location: (10,6)-(12,1)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (11,2)-(11,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (11,2)-(11,5)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (11,2)-(11,5) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── opening_loc: (10,6)-(10,7) = "{" - │ └── closing_loc: (12,0)-(12,1) = "}" - ├── @ SuperNode (location: (13,0)-(15,1)) - │ ├── flags: newline - │ ├── keyword_loc: (13,0)-(13,5) = "super" - │ ├── lparen_loc: (13,5)-(13,6) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (13,6)-(13,7)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (13,6)-(13,7)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (13,6)-(13,7) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── rparen_loc: (13,7)-(13,8) = ")" - │ └── block: - │ @ BlockNode (location: (13,9)-(15,1)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (14,2)-(14,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (14,2)-(14,5)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (14,2)-(14,5) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── opening_loc: (13,9)-(13,10) = "{" - │ └── closing_loc: (15,0)-(15,1) = "}" - ├── @ SuperNode (location: (16,0)-(18,1)) - │ ├── flags: newline - │ ├── keyword_loc: (16,0)-(16,5) = "super" - │ ├── lparen_loc: (16,5)-(16,6) = "(" - │ ├── arguments: ∅ - │ ├── rparen_loc: (16,6)-(16,7) = ")" - │ └── block: - │ @ BlockNode (location: (16,8)-(18,1)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (17,2)-(17,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (17,2)-(17,5)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (17,2)-(17,5) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── opening_loc: (16,8)-(16,9) = "{" - │ └── closing_loc: (18,0)-(18,1) = "}" - └── @ SuperNode (location: (19,0)-(21,1)) - ├── flags: newline - ├── keyword_loc: (19,0)-(19,5) = "super" - ├── lparen_loc: (19,5)-(19,6) = "(" - ├── arguments: - │ @ ArgumentsNode (location: (19,6)-(19,10)) - │ ├── flags: ∅ - │ └── arguments: (length: 2) - │ ├── @ CallNode (location: (19,6)-(19,7)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (19,6)-(19,7) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── @ CallNode (location: (19,9)-(19,10)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :b - │ ├── message_loc: (19,9)-(19,10) = "b" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── rparen_loc: (19,10)-(19,11) = ")" - └── block: - @ BlockNode (location: (19,12)-(21,1)) - ├── flags: ∅ - ├── locals: [] - ├── parameters: ∅ - ├── body: - │ @ StatementsNode (location: (20,2)-(20,5)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (20,2)-(20,5)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (20,2)-(20,5) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── opening_loc: (19,12)-(19,13) = "{" - └── closing_loc: (21,0)-(21,1) = "}" diff --git a/test/prism/snapshots/unparser/corpus/literal/unary.txt b/test/prism/snapshots/unparser/corpus/literal/unary.txt deleted file mode 100644 index be19b0457c9df0..00000000000000 --- a/test/prism/snapshots/unparser/corpus/literal/unary.txt +++ /dev/null @@ -1,261 +0,0 @@ -@ ProgramNode (location: (1,0)-(8,9)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(8,9)) - ├── flags: ∅ - └── body: (length: 8) - ├── @ CallNode (location: (1,0)-(1,2)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ IntegerNode (location: (1,1)-(1,2)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── call_operator_loc: ∅ - │ ├── name: :! - │ ├── message_loc: (1,0)-(1,1) = "!" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (2,0)-(2,5)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ParenthesesNode (location: (2,1)-(2,5)) - │ │ ├── flags: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (2,2)-(2,4)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (2,2)-(2,4)) - │ │ │ ├── flags: newline - │ │ │ ├── receiver: - │ │ │ │ @ IntegerNode (location: (2,3)-(2,4)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :! - │ │ │ ├── message_loc: (2,2)-(2,3) = "!" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── opening_loc: (2,1)-(2,2) = "(" - │ │ └── closing_loc: (2,4)-(2,5) = ")" - │ ├── call_operator_loc: ∅ - │ ├── name: :! - │ ├── message_loc: (2,0)-(2,1) = "!" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (3,0)-(3,16)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ ParenthesesNode (location: (3,1)-(3,16)) - │ │ ├── flags: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (3,2)-(3,15)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (3,2)-(3,15)) - │ │ │ ├── flags: newline - │ │ │ ├── receiver: - │ │ │ │ @ ParenthesesNode (location: (3,3)-(3,15)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── body: - │ │ │ │ │ @ StatementsNode (location: (3,4)-(3,14)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── body: (length: 1) - │ │ │ │ │ └── @ OrNode (location: (3,4)-(3,14)) - │ │ │ │ │ ├── flags: newline - │ │ │ │ │ ├── left: - │ │ │ │ │ │ @ CallNode (location: (3,4)-(3,7)) - │ │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ │ ├── name: :foo - │ │ │ │ │ │ ├── message_loc: (3,4)-(3,7) = "foo" - │ │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ │ └── block: ∅ - │ │ │ │ │ ├── right: - │ │ │ │ │ │ @ CallNode (location: (3,11)-(3,14)) - │ │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ │ ├── name: :bar - │ │ │ │ │ │ ├── message_loc: (3,11)-(3,14) = "bar" - │ │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ │ └── block: ∅ - │ │ │ │ │ └── operator_loc: (3,8)-(3,10) = "||" - │ │ │ │ ├── opening_loc: (3,3)-(3,4) = "(" - │ │ │ │ └── closing_loc: (3,14)-(3,15) = ")" - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :! - │ │ │ ├── message_loc: (3,2)-(3,3) = "!" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── opening_loc: (3,1)-(3,2) = "(" - │ │ └── closing_loc: (3,15)-(3,16) = ")" - │ ├── call_operator_loc: ∅ - │ ├── name: :! - │ ├── message_loc: (3,0)-(3,1) = "!" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (4,0)-(4,9)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (4,1)-(4,9)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ ParenthesesNode (location: (4,1)-(4,5)) - │ │ │ ├── flags: ∅ - │ │ │ ├── body: - │ │ │ │ @ StatementsNode (location: (4,2)-(4,4)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (4,2)-(4,4)) - │ │ │ │ ├── flags: newline - │ │ │ │ ├── receiver: - │ │ │ │ │ @ IntegerNode (location: (4,3)-(4,4)) - │ │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ │ └── value: 1 - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :! - │ │ │ │ ├── message_loc: (4,2)-(4,3) = "!" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── opening_loc: (4,1)-(4,2) = "(" - │ │ │ └── closing_loc: (4,4)-(4,5) = ")" - │ │ ├── call_operator_loc: (4,5)-(4,6) = "." - │ │ ├── name: :baz - │ │ ├── message_loc: (4,6)-(4,9) = "baz" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :! - │ ├── message_loc: (4,0)-(4,1) = "!" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (5,0)-(5,2)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (5,1)-(5,2)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (5,1)-(5,2) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :~ - │ ├── message_loc: (5,0)-(5,1) = "~" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (6,0)-(6,2)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (6,1)-(6,2)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (6,1)-(6,2) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :-@ - │ ├── message_loc: (6,0)-(6,1) = "-" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (7,0)-(7,2)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (7,1)-(7,2)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (7,1)-(7,2) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :+@ - │ ├── message_loc: (7,0)-(7,1) = "+" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── @ CallNode (location: (8,0)-(8,9)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (8,1)-(8,9)) - │ ├── flags: ∅ - │ ├── receiver: - │ │ @ ParenthesesNode (location: (8,1)-(8,5)) - │ │ ├── flags: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (8,2)-(8,4)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (8,2)-(8,4)) - │ │ │ ├── flags: newline - │ │ │ ├── receiver: - │ │ │ │ @ CallNode (location: (8,3)-(8,4)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :a - │ │ │ │ ├── message_loc: (8,3)-(8,4) = "a" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :-@ - │ │ │ ├── message_loc: (8,2)-(8,3) = "-" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── opening_loc: (8,1)-(8,2) = "(" - │ │ └── closing_loc: (8,4)-(8,5) = ")" - │ ├── call_operator_loc: (8,5)-(8,6) = "." - │ ├── name: :foo - │ ├── message_loc: (8,6)-(8,9) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: ∅ - ├── name: :-@ - ├── message_loc: (8,0)-(8,1) = "-" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/unparser/corpus/literal/undef.txt b/test/prism/snapshots/unparser/corpus/literal/undef.txt deleted file mode 100644 index b7ccf68e27e78b..00000000000000 --- a/test/prism/snapshots/unparser/corpus/literal/undef.txt +++ /dev/null @@ -1,33 +0,0 @@ -@ ProgramNode (location: (1,0)-(2,16)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(2,16)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ UndefNode (location: (1,0)-(1,10)) - │ ├── flags: newline - │ ├── names: (length: 1) - │ │ └── @ SymbolNode (location: (1,6)-(1,10)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (1,6)-(1,7) = ":" - │ │ ├── value_loc: (1,7)-(1,10) = "foo" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "foo" - │ └── keyword_loc: (1,0)-(1,5) = "undef" - └── @ UndefNode (location: (2,0)-(2,16)) - ├── flags: newline - ├── names: (length: 2) - │ ├── @ SymbolNode (location: (2,6)-(2,10)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (2,6)-(2,7) = ":" - │ │ ├── value_loc: (2,7)-(2,10) = "foo" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "foo" - │ └── @ SymbolNode (location: (2,12)-(2,16)) - │ ├── flags: static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (2,12)-(2,13) = ":" - │ ├── value_loc: (2,13)-(2,16) = "bar" - │ ├── closing_loc: ∅ - │ └── unescaped: "bar" - └── keyword_loc: (2,0)-(2,5) = "undef" diff --git a/test/prism/snapshots/unparser/corpus/literal/variables.txt b/test/prism/snapshots/unparser/corpus/literal/variables.txt deleted file mode 100644 index 3861af1a4629c1..00000000000000 --- a/test/prism/snapshots/unparser/corpus/literal/variables.txt +++ /dev/null @@ -1,62 +0,0 @@ -@ ProgramNode (location: (1,0)-(10,17)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(10,17)) - ├── flags: ∅ - └── body: (length: 10) - ├── @ CallNode (location: (1,0)-(1,1)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (1,0)-(1,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ InstanceVariableReadNode (location: (2,0)-(2,2)) - │ ├── flags: newline - │ └── name: :@a - ├── @ ClassVariableReadNode (location: (3,0)-(3,3)) - │ ├── flags: newline - │ └── name: :@@a - ├── @ GlobalVariableReadNode (location: (4,0)-(4,2)) - │ ├── flags: newline - │ └── name: :$a - ├── @ NumberedReferenceReadNode (location: (5,0)-(5,2)) - │ ├── flags: newline - │ └── number: 1 - ├── @ BackReferenceReadNode (location: (6,0)-(6,2)) - │ ├── flags: newline - │ └── name: :$` - ├── @ ConstantReadNode (location: (7,0)-(7,5)) - │ ├── flags: newline - │ └── name: :CONST - ├── @ ConstantPathNode (location: (8,0)-(8,13)) - │ ├── flags: newline - │ ├── parent: - │ │ @ ConstantReadNode (location: (8,0)-(8,6)) - │ │ ├── flags: ∅ - │ │ └── name: :SCOPED - │ ├── name: :CONST - │ ├── delimiter_loc: (8,6)-(8,8) = "::" - │ └── name_loc: (8,8)-(8,13) = "CONST" - ├── @ ConstantPathNode (location: (9,0)-(9,10)) - │ ├── flags: newline - │ ├── parent: ∅ - │ ├── name: :TOPLEVEL - │ ├── delimiter_loc: (9,0)-(9,2) = "::" - │ └── name_loc: (9,2)-(9,10) = "TOPLEVEL" - └── @ ConstantPathNode (location: (10,0)-(10,17)) - ├── flags: newline - ├── parent: - │ @ ConstantPathNode (location: (10,0)-(10,10)) - │ ├── flags: ∅ - │ ├── parent: ∅ - │ ├── name: :TOPLEVEL - │ ├── delimiter_loc: (10,0)-(10,2) = "::" - │ └── name_loc: (10,2)-(10,10) = "TOPLEVEL" - ├── name: :CONST - ├── delimiter_loc: (10,10)-(10,12) = "::" - └── name_loc: (10,12)-(10,17) = "CONST" diff --git a/test/prism/snapshots/unparser/corpus/literal/while.txt b/test/prism/snapshots/unparser/corpus/literal/while.txt deleted file mode 100644 index 7d9a24ec624313..00000000000000 --- a/test/prism/snapshots/unparser/corpus/literal/while.txt +++ /dev/null @@ -1,786 +0,0 @@ -@ ProgramNode (location: (1,0)-(73,3)) -├── flags: ∅ -├── locals: [:x] -└── statements: - @ StatementsNode (location: (1,0)-(73,3)) - ├── flags: ∅ - └── body: (length: 17) - ├── @ ModuleNode (location: (1,0)-(7,3)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── module_keyword_loc: (1,0)-(1,6) = "module" - │ ├── constant_path: - │ │ @ ConstantReadNode (location: (1,7)-(1,8)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── body: - │ │ @ StatementsNode (location: (2,2)-(6,3)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (2,2)-(6,3)) - │ │ ├── flags: newline, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (2,2)-(2,5) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: - │ │ @ BlockNode (location: (2,6)-(6,3)) - │ │ ├── flags: ∅ - │ │ ├── locals: [:bar, :foo] - │ │ ├── parameters: - │ │ │ @ BlockParametersNode (location: (2,8)-(2,13)) - │ │ │ ├── flags: ∅ - │ │ │ ├── parameters: - │ │ │ │ @ ParametersNode (location: (2,9)-(2,12)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── requireds: (length: 1) - │ │ │ │ │ └── @ RequiredParameterNode (location: (2,9)-(2,12)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── name: :bar - │ │ │ │ ├── optionals: (length: 0) - │ │ │ │ ├── rest: ∅ - │ │ │ │ ├── posts: (length: 0) - │ │ │ │ ├── keywords: (length: 0) - │ │ │ │ ├── keyword_rest: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── locals: (length: 0) - │ │ │ ├── opening_loc: (2,8)-(2,9) = "|" - │ │ │ └── closing_loc: (2,12)-(2,13) = "|" - │ │ ├── body: - │ │ │ @ StatementsNode (location: (3,4)-(5,7)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ WhileNode (location: (3,4)-(5,7)) - │ │ │ ├── flags: newline - │ │ │ ├── keyword_loc: (3,4)-(3,9) = "while" - │ │ │ ├── closing_loc: (5,4)-(5,7) = "end" - │ │ │ ├── predicate: - │ │ │ │ @ CallNode (location: (3,10)-(3,13)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :foo - │ │ │ │ ├── message_loc: (3,10)-(3,13) = "foo" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── statements: - │ │ │ @ StatementsNode (location: (4,6)-(4,15)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ LocalVariableWriteNode (location: (4,6)-(4,15)) - │ │ │ ├── flags: newline - │ │ │ ├── name: :foo - │ │ │ ├── depth: 0 - │ │ │ ├── name_loc: (4,6)-(4,9) = "foo" - │ │ │ ├── value: - │ │ │ │ @ LocalVariableReadNode (location: (4,12)-(4,15)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :bar - │ │ │ │ └── depth: 0 - │ │ │ └── operator_loc: (4,10)-(4,11) = "=" - │ │ ├── opening_loc: (2,6)-(2,7) = "{" - │ │ └── closing_loc: (6,2)-(6,3) = "}" - │ ├── end_keyword_loc: (7,0)-(7,3) = "end" - │ └── name: :A - ├── @ DefNode (location: (9,0)-(11,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (9,4)-(9,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (10,2)-(10,28)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ WhileNode (location: (10,2)-(10,28)) - │ │ ├── flags: newline - │ │ ├── keyword_loc: (10,12)-(10,17) = "while" - │ │ ├── closing_loc: ∅ - │ │ ├── predicate: - │ │ │ @ CallNode (location: (10,18)-(10,28)) - │ │ │ ├── flags: ∅ - │ │ │ ├── receiver: - │ │ │ │ @ LocalVariableReadNode (location: (10,18)-(10,21)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :foo - │ │ │ │ └── depth: 0 - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :!= - │ │ │ ├── message_loc: (10,22)-(10,24) = "!=" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (10,25)-(10,28)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ CallNode (location: (10,25)-(10,28)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ ├── message_loc: (10,25)-(10,28) = "baz" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── statements: - │ │ @ StatementsNode (location: (10,2)-(10,11)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ LocalVariableWriteNode (location: (10,2)-(10,11)) - │ │ ├── flags: newline - │ │ ├── name: :foo - │ │ ├── depth: 0 - │ │ ├── name_loc: (10,2)-(10,5) = "foo" - │ │ ├── value: - │ │ │ @ CallNode (location: (10,8)-(10,11)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (10,8)-(10,11) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: (10,6)-(10,7) = "=" - │ ├── locals: [:foo] - │ ├── def_keyword_loc: (9,0)-(9,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (11,0)-(11,3) = "end" - ├── @ ModuleNode (location: (13,0)-(15,3)) - │ ├── flags: newline - │ ├── locals: [:foo] - │ ├── module_keyword_loc: (13,0)-(13,6) = "module" - │ ├── constant_path: - │ │ @ ConstantReadNode (location: (13,7)-(13,8)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── body: - │ │ @ StatementsNode (location: (14,2)-(14,21)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ WhileNode (location: (14,2)-(14,21)) - │ │ ├── flags: newline - │ │ ├── keyword_loc: (14,12)-(14,17) = "while" - │ │ ├── closing_loc: ∅ - │ │ ├── predicate: - │ │ │ @ LocalVariableReadNode (location: (14,18)-(14,21)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :foo - │ │ │ └── depth: 0 - │ │ └── statements: - │ │ @ StatementsNode (location: (14,2)-(14,11)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ LocalVariableWriteNode (location: (14,2)-(14,11)) - │ │ ├── flags: newline - │ │ ├── name: :foo - │ │ ├── depth: 0 - │ │ ├── name_loc: (14,2)-(14,5) = "foo" - │ │ ├── value: - │ │ │ @ CallNode (location: (14,8)-(14,11)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (14,8)-(14,11) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: (14,6)-(14,7) = "=" - │ ├── end_keyword_loc: (15,0)-(15,3) = "end" - │ └── name: :A - ├── @ ModuleNode (location: (17,0)-(19,3)) - │ ├── flags: newline - │ ├── locals: [:foo] - │ ├── module_keyword_loc: (17,0)-(17,6) = "module" - │ ├── constant_path: - │ │ @ ConstantReadNode (location: (17,7)-(17,8)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── body: - │ │ @ StatementsNode (location: (18,2)-(18,21)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ UntilNode (location: (18,2)-(18,21)) - │ │ ├── flags: newline - │ │ ├── keyword_loc: (18,12)-(18,17) = "until" - │ │ ├── closing_loc: ∅ - │ │ ├── predicate: - │ │ │ @ LocalVariableReadNode (location: (18,18)-(18,21)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :foo - │ │ │ └── depth: 0 - │ │ └── statements: - │ │ @ StatementsNode (location: (18,2)-(18,11)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ LocalVariableWriteNode (location: (18,2)-(18,11)) - │ │ ├── flags: newline - │ │ ├── name: :foo - │ │ ├── depth: 0 - │ │ ├── name_loc: (18,2)-(18,5) = "foo" - │ │ ├── value: - │ │ │ @ CallNode (location: (18,8)-(18,11)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (18,8)-(18,11) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: (18,6)-(18,7) = "=" - │ ├── end_keyword_loc: (19,0)-(19,3) = "end" - │ └── name: :A - ├── @ ModuleNode (location: (21,0)-(25,3)) - │ ├── flags: newline - │ ├── locals: [:foo] - │ ├── module_keyword_loc: (21,0)-(21,6) = "module" - │ ├── constant_path: - │ │ @ ConstantReadNode (location: (21,7)-(21,8)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── body: - │ │ @ StatementsNode (location: (22,2)-(24,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ WhileNode (location: (22,2)-(24,5)) - │ │ ├── flags: newline - │ │ ├── keyword_loc: (22,2)-(22,7) = "while" - │ │ ├── closing_loc: (24,2)-(24,5) = "end" - │ │ ├── predicate: - │ │ │ @ CallNode (location: (22,8)-(22,11)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (22,8)-(22,11) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── statements: - │ │ @ StatementsNode (location: (23,4)-(23,13)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ LocalVariableWriteNode (location: (23,4)-(23,13)) - │ │ ├── flags: newline - │ │ ├── name: :foo - │ │ ├── depth: 0 - │ │ ├── name_loc: (23,4)-(23,7) = "foo" - │ │ ├── value: - │ │ │ @ CallNode (location: (23,10)-(23,13)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (23,10)-(23,13) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: (23,8)-(23,9) = "=" - │ ├── end_keyword_loc: (25,0)-(25,3) = "end" - │ └── name: :A - ├── @ ModuleNode (location: (27,0)-(33,3)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── module_keyword_loc: (27,0)-(27,6) = "module" - │ ├── constant_path: - │ │ @ ConstantReadNode (location: (27,7)-(27,8)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── body: - │ │ @ StatementsNode (location: (28,2)-(32,3)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (28,2)-(32,3)) - │ │ ├── flags: newline, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :each - │ │ ├── message_loc: (28,2)-(28,6) = "each" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: - │ │ @ BlockNode (location: (28,7)-(32,3)) - │ │ ├── flags: ∅ - │ │ ├── locals: [:baz, :foo] - │ │ ├── parameters: - │ │ │ @ BlockParametersNode (location: (28,9)-(28,14)) - │ │ │ ├── flags: ∅ - │ │ │ ├── parameters: - │ │ │ │ @ ParametersNode (location: (28,10)-(28,13)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── requireds: (length: 1) - │ │ │ │ │ └── @ RequiredParameterNode (location: (28,10)-(28,13)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── name: :baz - │ │ │ │ ├── optionals: (length: 0) - │ │ │ │ ├── rest: ∅ - │ │ │ │ ├── posts: (length: 0) - │ │ │ │ ├── keywords: (length: 0) - │ │ │ │ ├── keyword_rest: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── locals: (length: 0) - │ │ │ ├── opening_loc: (28,9)-(28,10) = "|" - │ │ │ └── closing_loc: (28,13)-(28,14) = "|" - │ │ ├── body: - │ │ │ @ StatementsNode (location: (29,4)-(31,7)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ WhileNode (location: (29,4)-(31,7)) - │ │ │ ├── flags: newline - │ │ │ ├── keyword_loc: (29,4)-(29,9) = "while" - │ │ │ ├── closing_loc: (31,4)-(31,7) = "end" - │ │ │ ├── predicate: - │ │ │ │ @ CallNode (location: (29,10)-(29,13)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :foo - │ │ │ │ ├── message_loc: (29,10)-(29,13) = "foo" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── statements: - │ │ │ @ StatementsNode (location: (30,6)-(30,15)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ LocalVariableWriteNode (location: (30,6)-(30,15)) - │ │ │ ├── flags: newline - │ │ │ ├── name: :foo - │ │ │ ├── depth: 0 - │ │ │ ├── name_loc: (30,6)-(30,9) = "foo" - │ │ │ ├── value: - │ │ │ │ @ CallNode (location: (30,12)-(30,15)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :bar - │ │ │ │ ├── message_loc: (30,12)-(30,15) = "bar" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── operator_loc: (30,10)-(30,11) = "=" - │ │ ├── opening_loc: (28,7)-(28,8) = "{" - │ │ └── closing_loc: (32,2)-(32,3) = "}" - │ ├── end_keyword_loc: (33,0)-(33,3) = "end" - │ └── name: :A - ├── @ ModuleNode (location: (35,0)-(41,3)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── module_keyword_loc: (35,0)-(35,6) = "module" - │ ├── constant_path: - │ │ @ ConstantReadNode (location: (35,7)-(35,8)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── body: - │ │ @ StatementsNode (location: (36,2)-(40,3)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (36,2)-(40,3)) - │ │ ├── flags: newline, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :each - │ │ ├── message_loc: (36,2)-(36,6) = "each" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: - │ │ @ BlockNode (location: (36,7)-(40,3)) - │ │ ├── flags: ∅ - │ │ ├── locals: [:foo] - │ │ ├── parameters: - │ │ │ @ BlockParametersNode (location: (36,9)-(36,14)) - │ │ │ ├── flags: ∅ - │ │ │ ├── parameters: - │ │ │ │ @ ParametersNode (location: (36,10)-(36,13)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── requireds: (length: 1) - │ │ │ │ │ └── @ RequiredParameterNode (location: (36,10)-(36,13)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── name: :foo - │ │ │ │ ├── optionals: (length: 0) - │ │ │ │ ├── rest: ∅ - │ │ │ │ ├── posts: (length: 0) - │ │ │ │ ├── keywords: (length: 0) - │ │ │ │ ├── keyword_rest: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── locals: (length: 0) - │ │ │ ├── opening_loc: (36,9)-(36,10) = "|" - │ │ │ └── closing_loc: (36,13)-(36,14) = "|" - │ │ ├── body: - │ │ │ @ StatementsNode (location: (37,4)-(39,7)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ WhileNode (location: (37,4)-(39,7)) - │ │ │ ├── flags: newline - │ │ │ ├── keyword_loc: (37,4)-(37,9) = "while" - │ │ │ ├── closing_loc: (39,4)-(39,7) = "end" - │ │ │ ├── predicate: - │ │ │ │ @ LocalVariableReadNode (location: (37,10)-(37,13)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :foo - │ │ │ │ └── depth: 0 - │ │ │ └── statements: - │ │ │ @ StatementsNode (location: (38,6)-(38,15)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ LocalVariableWriteNode (location: (38,6)-(38,15)) - │ │ │ ├── flags: newline - │ │ │ ├── name: :foo - │ │ │ ├── depth: 0 - │ │ │ ├── name_loc: (38,6)-(38,9) = "foo" - │ │ │ ├── value: - │ │ │ │ @ CallNode (location: (38,12)-(38,15)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :bar - │ │ │ │ ├── message_loc: (38,12)-(38,15) = "bar" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── operator_loc: (38,10)-(38,11) = "=" - │ │ ├── opening_loc: (36,7)-(36,8) = "{" - │ │ └── closing_loc: (40,2)-(40,3) = "}" - │ ├── end_keyword_loc: (41,0)-(41,3) = "end" - │ └── name: :A - ├── @ LocalVariableWriteNode (location: (42,0)-(44,14)) - │ ├── flags: newline - │ ├── name: :x - │ ├── depth: 0 - │ ├── name_loc: (42,0)-(42,1) = "x" - │ ├── value: - │ │ @ ParenthesesNode (location: (42,4)-(44,14)) - │ │ ├── flags: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (42,5)-(44,13)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ WhileNode (location: (42,5)-(44,13)) - │ │ │ ├── flags: newline, begin_modifier - │ │ │ ├── keyword_loc: (44,4)-(44,9) = "while" - │ │ │ ├── closing_loc: ∅ - │ │ │ ├── predicate: - │ │ │ │ @ CallNode (location: (44,10)-(44,13)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :baz - │ │ │ │ ├── message_loc: (44,10)-(44,13) = "baz" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── statements: - │ │ │ @ StatementsNode (location: (42,5)-(44,3)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ BeginNode (location: (42,5)-(44,3)) - │ │ │ ├── flags: newline - │ │ │ ├── begin_keyword_loc: (42,5)-(42,10) = "begin" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (43,2)-(43,5)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (43,2)-(43,5)) - │ │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :foo - │ │ │ │ ├── message_loc: (43,2)-(43,5) = "foo" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── rescue_clause: ∅ - │ │ │ ├── else_clause: ∅ - │ │ │ ├── ensure_clause: ∅ - │ │ │ └── end_keyword_loc: (44,0)-(44,3) = "end" - │ │ ├── opening_loc: (42,4)-(42,5) = "(" - │ │ └── closing_loc: (44,13)-(44,14) = ")" - │ └── operator_loc: (42,2)-(42,3) = "=" - ├── @ WhileNode (location: (45,0)-(47,13)) - │ ├── flags: newline, begin_modifier - │ ├── keyword_loc: (47,4)-(47,9) = "while" - │ ├── closing_loc: ∅ - │ ├── predicate: - │ │ @ CallNode (location: (47,10)-(47,13)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :baz - │ │ ├── message_loc: (47,10)-(47,13) = "baz" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── statements: - │ @ StatementsNode (location: (45,0)-(47,3)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ BeginNode (location: (45,0)-(47,3)) - │ ├── flags: newline - │ ├── begin_keyword_loc: (45,0)-(45,5) = "begin" - │ ├── statements: - │ │ @ StatementsNode (location: (46,2)-(46,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (46,2)-(46,5)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (46,2)-(46,5) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── rescue_clause: ∅ - │ ├── else_clause: ∅ - │ ├── ensure_clause: ∅ - │ └── end_keyword_loc: (47,0)-(47,3) = "end" - ├── @ UntilNode (location: (48,0)-(51,13)) - │ ├── flags: newline, begin_modifier - │ ├── keyword_loc: (51,4)-(51,9) = "until" - │ ├── closing_loc: ∅ - │ ├── predicate: - │ │ @ CallNode (location: (51,10)-(51,13)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :baz - │ │ ├── message_loc: (51,10)-(51,13) = "baz" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── statements: - │ @ StatementsNode (location: (48,0)-(51,3)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ BeginNode (location: (48,0)-(51,3)) - │ ├── flags: newline - │ ├── begin_keyword_loc: (48,0)-(48,5) = "begin" - │ ├── statements: - │ │ @ StatementsNode (location: (49,2)-(50,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 2) - │ │ ├── @ CallNode (location: (49,2)-(49,5)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (49,2)-(49,5) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── @ CallNode (location: (50,2)-(50,5)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (50,2)-(50,5) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── rescue_clause: ∅ - │ ├── else_clause: ∅ - │ ├── ensure_clause: ∅ - │ └── end_keyword_loc: (51,0)-(51,3) = "end" - ├── @ WhileNode (location: (52,0)-(55,13)) - │ ├── flags: newline, begin_modifier - │ ├── keyword_loc: (55,4)-(55,9) = "while" - │ ├── closing_loc: ∅ - │ ├── predicate: - │ │ @ CallNode (location: (55,10)-(55,13)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :baz - │ │ ├── message_loc: (55,10)-(55,13) = "baz" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── statements: - │ @ StatementsNode (location: (52,0)-(55,3)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ BeginNode (location: (52,0)-(55,3)) - │ ├── flags: newline - │ ├── begin_keyword_loc: (52,0)-(52,5) = "begin" - │ ├── statements: - │ │ @ StatementsNode (location: (53,2)-(54,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 2) - │ │ ├── @ CallNode (location: (53,2)-(53,5)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (53,2)-(53,5) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── @ CallNode (location: (54,2)-(54,5)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (54,2)-(54,5) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── rescue_clause: ∅ - │ ├── else_clause: ∅ - │ ├── ensure_clause: ∅ - │ └── end_keyword_loc: (55,0)-(55,3) = "end" - ├── @ WhileNode (location: (56,0)-(57,3)) - │ ├── flags: newline - │ ├── keyword_loc: (56,0)-(56,5) = "while" - │ ├── closing_loc: (57,0)-(57,3) = "end" - │ ├── predicate: - │ │ @ FalseNode (location: (56,6)-(56,11)) - │ │ └── flags: static_literal - │ └── statements: ∅ - ├── @ WhileNode (location: (58,0)-(60,3)) - │ ├── flags: newline - │ ├── keyword_loc: (58,0)-(58,5) = "while" - │ ├── closing_loc: (60,0)-(60,3) = "end" - │ ├── predicate: - │ │ @ FalseNode (location: (58,6)-(58,11)) - │ │ └── flags: static_literal - │ └── statements: - │ @ StatementsNode (location: (59,2)-(59,3)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ IntegerNode (location: (59,2)-(59,3)) - │ ├── flags: newline, static_literal, decimal - │ └── value: 3 - ├── @ WhileNode (location: (61,0)-(64,3)) - │ ├── flags: newline - │ ├── keyword_loc: (61,0)-(61,5) = "while" - │ ├── closing_loc: (64,0)-(64,3) = "end" - │ ├── predicate: - │ │ @ ParenthesesNode (location: (61,6)-(62,2)) - │ │ ├── flags: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (61,7)-(62,1)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (61,7)-(62,1)) - │ │ │ ├── flags: newline, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (61,7)-(61,10) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: - │ │ │ @ BlockNode (location: (61,11)-(62,1)) - │ │ │ ├── flags: ∅ - │ │ │ ├── locals: [] - │ │ │ ├── parameters: ∅ - │ │ │ ├── body: ∅ - │ │ │ ├── opening_loc: (61,11)-(61,12) = "{" - │ │ │ └── closing_loc: (62,0)-(62,1) = "}" - │ │ ├── opening_loc: (61,6)-(61,7) = "(" - │ │ └── closing_loc: (62,1)-(62,2) = ")" - │ └── statements: - │ @ StatementsNode (location: (63,2)-(63,7)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ SymbolNode (location: (63,2)-(63,7)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (63,2)-(63,3) = ":" - │ ├── value_loc: (63,3)-(63,7) = "body" - │ ├── closing_loc: ∅ - │ └── unescaped: "body" - ├── @ UntilNode (location: (65,0)-(66,3)) - │ ├── flags: newline - │ ├── keyword_loc: (65,0)-(65,5) = "until" - │ ├── closing_loc: (66,0)-(66,3) = "end" - │ ├── predicate: - │ │ @ FalseNode (location: (65,6)-(65,11)) - │ │ └── flags: static_literal - │ └── statements: ∅ - ├── @ UntilNode (location: (67,0)-(69,3)) - │ ├── flags: newline - │ ├── keyword_loc: (67,0)-(67,5) = "until" - │ ├── closing_loc: (69,0)-(69,3) = "end" - │ ├── predicate: - │ │ @ FalseNode (location: (67,6)-(67,11)) - │ │ └── flags: static_literal - │ └── statements: - │ @ StatementsNode (location: (68,2)-(68,3)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ IntegerNode (location: (68,2)-(68,3)) - │ ├── flags: newline, static_literal, decimal - │ └── value: 3 - └── @ UntilNode (location: (70,0)-(73,3)) - ├── flags: newline - ├── keyword_loc: (70,0)-(70,5) = "until" - ├── closing_loc: (73,0)-(73,3) = "end" - ├── predicate: - │ @ ParenthesesNode (location: (70,6)-(71,2)) - │ ├── flags: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (70,7)-(71,1)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (70,7)-(71,1)) - │ │ ├── flags: newline, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (70,7)-(70,10) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: - │ │ @ BlockNode (location: (70,11)-(71,1)) - │ │ ├── flags: ∅ - │ │ ├── locals: [] - │ │ ├── parameters: ∅ - │ │ ├── body: ∅ - │ │ ├── opening_loc: (70,11)-(70,12) = "{" - │ │ └── closing_loc: (71,0)-(71,1) = "}" - │ ├── opening_loc: (70,6)-(70,7) = "(" - │ └── closing_loc: (71,1)-(71,2) = ")" - └── statements: - @ StatementsNode (location: (72,2)-(72,7)) - ├── flags: ∅ - └── body: (length: 1) - └── @ SymbolNode (location: (72,2)-(72,7)) - ├── flags: newline, static_literal, forced_us_ascii_encoding - ├── opening_loc: (72,2)-(72,3) = ":" - ├── value_loc: (72,3)-(72,7) = "body" - ├── closing_loc: ∅ - └── unescaped: "body" diff --git a/test/prism/snapshots/unparser/corpus/semantic/and.txt b/test/prism/snapshots/unparser/corpus/semantic/and.txt deleted file mode 100644 index ad2b6397773197..00000000000000 --- a/test/prism/snapshots/unparser/corpus/semantic/and.txt +++ /dev/null @@ -1,243 +0,0 @@ -@ ProgramNode (location: (1,0)-(8,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(8,3)) - ├── flags: ∅ - └── body: (length: 4) - ├── @ OrNode (location: (1,0)-(1,14)) - │ ├── flags: newline - │ ├── left: - │ │ @ RangeNode (location: (1,0)-(1,5)) - │ │ ├── flags: exclude_end - │ │ ├── left: - │ │ │ @ CallNode (location: (1,0)-(1,1)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :a - │ │ │ ├── message_loc: (1,0)-(1,1) = "a" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── right: - │ │ │ @ CallNode (location: (1,4)-(1,5)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (1,4)-(1,5) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: (1,1)-(1,4) = "..." - │ ├── right: - │ │ @ RangeNode (location: (1,9)-(1,14)) - │ │ ├── flags: exclude_end - │ │ ├── left: - │ │ │ @ CallNode (location: (1,9)-(1,10)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :c - │ │ │ ├── message_loc: (1,9)-(1,10) = "c" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── right: - │ │ │ @ CallNode (location: (1,13)-(1,14)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :d - │ │ │ ├── message_loc: (1,13)-(1,14) = "d" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: (1,10)-(1,13) = "..." - │ └── operator_loc: (1,6)-(1,8) = "or" - ├── @ AndNode (location: (2,0)-(2,15)) - │ ├── flags: newline - │ ├── left: - │ │ @ RangeNode (location: (2,0)-(2,5)) - │ │ ├── flags: exclude_end - │ │ ├── left: - │ │ │ @ CallNode (location: (2,0)-(2,1)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :a - │ │ │ ├── message_loc: (2,0)-(2,1) = "a" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── right: - │ │ │ @ CallNode (location: (2,4)-(2,5)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (2,4)-(2,5) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: (2,1)-(2,4) = "..." - │ ├── right: - │ │ @ RangeNode (location: (2,10)-(2,15)) - │ │ ├── flags: exclude_end - │ │ ├── left: - │ │ │ @ CallNode (location: (2,10)-(2,11)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :c - │ │ │ ├── message_loc: (2,10)-(2,11) = "c" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── right: - │ │ │ @ CallNode (location: (2,14)-(2,15)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :d - │ │ │ ├── message_loc: (2,14)-(2,15) = "d" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: (2,11)-(2,14) = "..." - │ └── operator_loc: (2,6)-(2,9) = "and" - ├── @ IfNode (location: (4,0)-(5,3)) - │ ├── flags: newline - │ ├── if_keyword_loc: (4,0)-(4,2) = "if" - │ ├── predicate: - │ │ @ OrNode (location: (4,3)-(4,17)) - │ │ ├── flags: ∅ - │ │ ├── left: - │ │ │ @ FlipFlopNode (location: (4,3)-(4,8)) - │ │ │ ├── flags: exclude_end - │ │ │ ├── left: - │ │ │ │ @ CallNode (location: (4,3)-(4,4)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :a - │ │ │ │ ├── message_loc: (4,3)-(4,4) = "a" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── right: - │ │ │ │ @ CallNode (location: (4,7)-(4,8)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :b - │ │ │ │ ├── message_loc: (4,7)-(4,8) = "b" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── operator_loc: (4,4)-(4,7) = "..." - │ │ ├── right: - │ │ │ @ FlipFlopNode (location: (4,12)-(4,17)) - │ │ │ ├── flags: exclude_end - │ │ │ ├── left: - │ │ │ │ @ CallNode (location: (4,12)-(4,13)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :c - │ │ │ │ ├── message_loc: (4,12)-(4,13) = "c" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── right: - │ │ │ │ @ CallNode (location: (4,16)-(4,17)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :d - │ │ │ │ ├── message_loc: (4,16)-(4,17) = "d" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── operator_loc: (4,13)-(4,16) = "..." - │ │ └── operator_loc: (4,9)-(4,11) = "or" - │ ├── then_keyword_loc: ∅ - │ ├── statements: ∅ - │ ├── subsequent: ∅ - │ └── end_keyword_loc: (5,0)-(5,3) = "end" - └── @ IfNode (location: (7,0)-(8,3)) - ├── flags: newline - ├── if_keyword_loc: (7,0)-(7,2) = "if" - ├── predicate: - │ @ AndNode (location: (7,3)-(7,18)) - │ ├── flags: ∅ - │ ├── left: - │ │ @ FlipFlopNode (location: (7,3)-(7,8)) - │ │ ├── flags: exclude_end - │ │ ├── left: - │ │ │ @ CallNode (location: (7,3)-(7,4)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :a - │ │ │ ├── message_loc: (7,3)-(7,4) = "a" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── right: - │ │ │ @ CallNode (location: (7,7)-(7,8)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (7,7)-(7,8) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: (7,4)-(7,7) = "..." - │ ├── right: - │ │ @ FlipFlopNode (location: (7,13)-(7,18)) - │ │ ├── flags: exclude_end - │ │ ├── left: - │ │ │ @ CallNode (location: (7,13)-(7,14)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :c - │ │ │ ├── message_loc: (7,13)-(7,14) = "c" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── right: - │ │ │ @ CallNode (location: (7,17)-(7,18)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :d - │ │ │ ├── message_loc: (7,17)-(7,18) = "d" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: (7,14)-(7,17) = "..." - │ └── operator_loc: (7,9)-(7,12) = "and" - ├── then_keyword_loc: ∅ - ├── statements: ∅ - ├── subsequent: ∅ - └── end_keyword_loc: (8,0)-(8,3) = "end" diff --git a/test/prism/snapshots/unparser/corpus/semantic/block.txt b/test/prism/snapshots/unparser/corpus/semantic/block.txt deleted file mode 100644 index ea87b101ec0326..00000000000000 --- a/test/prism/snapshots/unparser/corpus/semantic/block.txt +++ /dev/null @@ -1,213 +0,0 @@ -@ ProgramNode (location: (1,0)-(26,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(26,3)) - ├── flags: ∅ - └── body: (length: 6) - ├── @ CallNode (location: (1,0)-(2,3)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (1,0)-(1,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (1,4)-(2,3)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (1,4)-(1,6) = "do" - │ └── closing_loc: (2,0)-(2,3) = "end" - ├── @ CallNode (location: (4,0)-(6,3)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (4,0)-(4,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (4,4)-(6,3)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ BeginNode (location: (4,4)-(6,3)) - │ │ ├── flags: ∅ - │ │ ├── begin_keyword_loc: ∅ - │ │ ├── statements: ∅ - │ │ ├── rescue_clause: - │ │ │ @ RescueNode (location: (5,0)-(5,6)) - │ │ │ ├── flags: ∅ - │ │ │ ├── keyword_loc: (5,0)-(5,6) = "rescue" - │ │ │ ├── exceptions: (length: 0) - │ │ │ ├── operator_loc: ∅ - │ │ │ ├── reference: ∅ - │ │ │ ├── statements: ∅ - │ │ │ └── subsequent: ∅ - │ │ ├── else_clause: ∅ - │ │ ├── ensure_clause: ∅ - │ │ └── end_keyword_loc: (6,0)-(6,3) = "end" - │ ├── opening_loc: (4,4)-(4,6) = "do" - │ └── closing_loc: (6,0)-(6,3) = "end" - ├── @ CallNode (location: (8,0)-(11,3)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (8,0)-(8,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (8,4)-(11,3)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (9,2)-(10,5)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 2) - │ │ ├── @ RescueModifierNode (location: (9,2)-(9,16)) - │ │ │ ├── flags: newline - │ │ │ ├── expression: - │ │ │ │ @ NilNode (location: (9,2)-(9,5)) - │ │ │ │ └── flags: static_literal - │ │ │ ├── keyword_loc: (9,6)-(9,12) = "rescue" - │ │ │ └── rescue_expression: - │ │ │ @ NilNode (location: (9,13)-(9,16)) - │ │ │ └── flags: static_literal - │ │ └── @ NilNode (location: (10,2)-(10,5)) - │ │ └── flags: newline, static_literal - │ ├── opening_loc: (8,4)-(8,6) = "do" - │ └── closing_loc: (11,0)-(11,3) = "end" - ├── @ CallNode (location: (13,0)-(14,3)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (13,0)-(13,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (13,4)-(14,3)) - │ ├── flags: ∅ - │ ├── locals: [:a] - │ ├── parameters: - │ │ @ BlockParametersNode (location: (13,7)-(13,10)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (13,8)-(13,9)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (13,8)-(13,9)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :a - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: (13,7)-(13,8) = "|" - │ │ └── closing_loc: (13,9)-(13,10) = "|" - │ ├── body: ∅ - │ ├── opening_loc: (13,4)-(13,6) = "do" - │ └── closing_loc: (14,0)-(14,3) = "end" - ├── @ CallNode (location: (16,0)-(20,3)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (16,0)-(16,3) = "foo" - │ ├── opening_loc: (16,3)-(16,4) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (16,4)-(16,10)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ StringNode (location: (16,4)-(16,10)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (16,4)-(16,10) = "<<-DOC" - │ │ ├── content_loc: (17,0)-(18,0) = " b\n" - │ │ ├── closing_loc: (18,0)-(19,0) = "DOC\n" - │ │ └── unescaped: " b\n" - │ ├── closing_loc: (16,10)-(16,11) = ")" - │ └── block: - │ @ BlockNode (location: (16,12)-(20,3)) - │ ├── flags: ∅ - │ ├── locals: [:a] - │ ├── parameters: - │ │ @ BlockParametersNode (location: (16,15)-(16,18)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (16,16)-(16,17)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (16,16)-(16,17)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :a - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: (16,15)-(16,16) = "|" - │ │ └── closing_loc: (16,17)-(16,18) = "|" - │ ├── body: - │ │ @ StatementsNode (location: (19,2)-(19,3)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ LocalVariableReadNode (location: (19,2)-(19,3)) - │ │ ├── flags: newline - │ │ ├── name: :a - │ │ └── depth: 0 - │ ├── opening_loc: (16,12)-(16,14) = "do" - │ └── closing_loc: (20,0)-(20,3) = "end" - └── @ CallNode (location: (22,0)-(26,3)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :foo - ├── message_loc: (22,0)-(22,3) = "foo" - ├── opening_loc: (22,3)-(22,4) = "(" - ├── arguments: - │ @ ArgumentsNode (location: (22,4)-(22,10)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ StringNode (location: (22,4)-(22,10)) - │ ├── flags: ∅ - │ ├── opening_loc: (22,4)-(22,10) = "<<-DOC" - │ ├── content_loc: (23,0)-(24,0) = " b\n" - │ ├── closing_loc: (24,0)-(25,0) = "DOC\n" - │ └── unescaped: " b\n" - ├── closing_loc: (22,10)-(22,11) = ")" - └── block: - @ BlockNode (location: (22,12)-(26,3)) - ├── flags: ∅ - ├── locals: [] - ├── parameters: ∅ - ├── body: - │ @ StatementsNode (location: (25,2)-(25,3)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (25,2)-(25,3)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (25,2)-(25,3) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── opening_loc: (22,12)-(22,14) = "do" - └── closing_loc: (26,0)-(26,3) = "end" diff --git a/test/prism/snapshots/unparser/corpus/semantic/def.txt b/test/prism/snapshots/unparser/corpus/semantic/def.txt deleted file mode 100644 index f05ce02bca7cf3..00000000000000 --- a/test/prism/snapshots/unparser/corpus/semantic/def.txt +++ /dev/null @@ -1,100 +0,0 @@ -@ ProgramNode (location: (1,0)-(7,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(7,3)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ DefNode (location: (1,0)-(3,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (1,4)-(1,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (2,2)-(2,9)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ ParenthesesNode (location: (2,2)-(2,9)) - │ │ ├── flags: newline - │ │ ├── body: - │ │ │ @ StatementsNode (location: (2,3)-(2,8)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (2,3)-(2,8)) - │ │ │ ├── flags: newline - │ │ │ ├── receiver: - │ │ │ │ @ CallNode (location: (2,3)-(2,4)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :a - │ │ │ │ ├── message_loc: (2,3)-(2,4) = "a" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :- - │ │ │ ├── message_loc: (2,5)-(2,6) = "-" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (2,7)-(2,8)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ CallNode (location: (2,7)-(2,8)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :b - │ │ │ │ ├── message_loc: (2,7)-(2,8) = "b" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── opening_loc: (2,2)-(2,3) = "(" - │ │ └── closing_loc: (2,8)-(2,9) = ")" - │ ├── locals: [] - │ ├── def_keyword_loc: (1,0)-(1,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (3,0)-(3,3) = "end" - └── @ DefNode (location: (5,0)-(7,3)) - ├── flags: newline - ├── name: :foo - ├── name_loc: (5,4)-(5,7) = "foo" - ├── receiver: ∅ - ├── parameters: ∅ - ├── body: - │ @ StatementsNode (location: (6,2)-(6,20)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ RescueModifierNode (location: (6,2)-(6,20)) - │ ├── flags: newline - │ ├── expression: - │ │ @ CallNode (location: (6,2)-(6,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (6,2)-(6,3) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── keyword_loc: (6,4)-(6,10) = "rescue" - │ └── rescue_expression: - │ @ ConstantReadNode (location: (6,11)-(6,20)) - │ ├── flags: ∅ - │ └── name: :Exception - ├── locals: [] - ├── def_keyword_loc: (5,0)-(5,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: ∅ - ├── rparen_loc: ∅ - ├── equal_loc: ∅ - └── end_keyword_loc: (7,0)-(7,3) = "end" diff --git a/test/prism/snapshots/unparser/corpus/semantic/dstr.txt b/test/prism/snapshots/unparser/corpus/semantic/dstr.txt deleted file mode 100644 index b1bfbefc8ba7d5..00000000000000 --- a/test/prism/snapshots/unparser/corpus/semantic/dstr.txt +++ /dev/null @@ -1,639 +0,0 @@ -@ ProgramNode (location: (1,0)-(127,11)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(127,11)) - ├── flags: ∅ - └── body: (length: 33) - ├── @ StringNode (location: (1,0)-(1,5)) - │ ├── flags: newline - │ ├── opening_loc: (1,0)-(1,5) = "<= - ├── name_loc: (11,4)-(11,6) = ">=" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (11,7)-(11,12)) - │ ├── flags: ∅ - │ ├── requireds: (length: 1) - │ │ └── @ RequiredParameterNode (location: (11,7)-(11,12)) - │ │ ├── flags: ∅ - │ │ └── name: :other - │ ├── optionals: (length: 0) - │ ├── rest: ∅ - │ ├── posts: (length: 0) - │ ├── keywords: (length: 0) - │ ├── keyword_rest: ∅ - │ └── block: ∅ - ├── body: - │ @ StatementsNode (location: (11,16)-(11,28)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (11,16)-(11,28)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :do_something - │ ├── message_loc: (11,16)-(11,28) = "do_something" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── locals: [:other] - ├── def_keyword_loc: (11,0)-(11,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: (11,6)-(11,7) = "(" - ├── rparen_loc: (11,12)-(11,13) = ")" - ├── equal_loc: (11,14)-(11,15) = "=" - └── end_keyword_loc: ∅ diff --git a/test/prism/snapshots/whitequark/endless_method.txt b/test/prism/snapshots/whitequark/endless_method.txt deleted file mode 100644 index 3c24ab2a7dc1dd..00000000000000 --- a/test/prism/snapshots/whitequark/endless_method.txt +++ /dev/null @@ -1,165 +0,0 @@ -@ ProgramNode (location: (1,0)-(7,22)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(7,22)) - ├── flags: ∅ - └── body: (length: 4) - ├── @ DefNode (location: (1,0)-(1,14)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (1,4)-(1,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (1,12)-(1,14)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ IntegerNode (location: (1,12)-(1,14)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 42 - │ ├── locals: [] - │ ├── def_keyword_loc: (1,0)-(1,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (1,7)-(1,8) = "(" - │ ├── rparen_loc: (1,8)-(1,9) = ")" - │ ├── equal_loc: (1,10)-(1,11) = "=" - │ └── end_keyword_loc: ∅ - ├── @ DefNode (location: (3,0)-(3,18)) - │ ├── flags: newline - │ ├── name: :inc - │ ├── name_loc: (3,4)-(3,7) = "inc" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (3,8)-(3,9)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (3,8)-(3,9)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :x - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (3,13)-(3,18)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (3,13)-(3,18)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ LocalVariableReadNode (location: (3,13)-(3,14)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :x - │ │ │ └── depth: 0 - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :+ - │ │ ├── message_loc: (3,15)-(3,16) = "+" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (3,17)-(3,18)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (3,17)-(3,18)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── locals: [:x] - │ ├── def_keyword_loc: (3,0)-(3,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (3,7)-(3,8) = "(" - │ ├── rparen_loc: (3,9)-(3,10) = ")" - │ ├── equal_loc: (3,11)-(3,12) = "=" - │ └── end_keyword_loc: ∅ - ├── @ DefNode (location: (5,0)-(5,18)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (5,8)-(5,11) = "foo" - │ ├── receiver: - │ │ @ CallNode (location: (5,4)-(5,7)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :obj - │ │ ├── message_loc: (5,4)-(5,7) = "obj" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (5,16)-(5,18)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ IntegerNode (location: (5,16)-(5,18)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 42 - │ ├── locals: [] - │ ├── def_keyword_loc: (5,0)-(5,3) = "def" - │ ├── operator_loc: (5,7)-(5,8) = "." - │ ├── lparen_loc: (5,11)-(5,12) = "(" - │ ├── rparen_loc: (5,12)-(5,13) = ")" - │ ├── equal_loc: (5,14)-(5,15) = "=" - │ └── end_keyword_loc: ∅ - └── @ DefNode (location: (7,0)-(7,22)) - ├── flags: newline - ├── name: :inc - ├── name_loc: (7,8)-(7,11) = "inc" - ├── receiver: - │ @ CallNode (location: (7,4)-(7,7)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :obj - │ ├── message_loc: (7,4)-(7,7) = "obj" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── parameters: - │ @ ParametersNode (location: (7,12)-(7,13)) - │ ├── flags: ∅ - │ ├── requireds: (length: 1) - │ │ └── @ RequiredParameterNode (location: (7,12)-(7,13)) - │ │ ├── flags: ∅ - │ │ └── name: :x - │ ├── optionals: (length: 0) - │ ├── rest: ∅ - │ ├── posts: (length: 0) - │ ├── keywords: (length: 0) - │ ├── keyword_rest: ∅ - │ └── block: ∅ - ├── body: - │ @ StatementsNode (location: (7,17)-(7,22)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (7,17)-(7,22)) - │ ├── flags: ∅ - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (7,17)-(7,18)) - │ │ ├── flags: ∅ - │ │ ├── name: :x - │ │ └── depth: 0 - │ ├── call_operator_loc: ∅ - │ ├── name: :+ - │ ├── message_loc: (7,19)-(7,20) = "+" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (7,21)-(7,22)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (7,21)-(7,22)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── locals: [:x] - ├── def_keyword_loc: (7,0)-(7,3) = "def" - ├── operator_loc: (7,7)-(7,8) = "." - ├── lparen_loc: (7,11)-(7,12) = "(" - ├── rparen_loc: (7,13)-(7,14) = ")" - ├── equal_loc: (7,15)-(7,16) = "=" - └── end_keyword_loc: ∅ diff --git a/test/prism/snapshots/whitequark/endless_method_command_syntax.txt b/test/prism/snapshots/whitequark/endless_method_command_syntax.txt deleted file mode 100644 index db2c0cec6fe7ce..00000000000000 --- a/test/prism/snapshots/whitequark/endless_method_command_syntax.txt +++ /dev/null @@ -1,427 +0,0 @@ -@ ProgramNode (location: (1,0)-(15,62)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(15,62)) - ├── flags: ∅ - └── body: (length: 8) - ├── @ DefNode (location: (1,0)-(1,22)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (1,4)-(1,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (1,10)-(1,22)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (1,10)-(1,22)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :puts - │ │ ├── message_loc: (1,10)-(1,14) = "puts" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (1,15)-(1,22)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ StringNode (location: (1,15)-(1,22)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (1,15)-(1,16) = "\"" - │ │ │ ├── content_loc: (1,16)-(1,21) = "Hello" - │ │ │ ├── closing_loc: (1,21)-(1,22) = "\"" - │ │ │ └── unescaped: "Hello" - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (1,0)-(1,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: (1,8)-(1,9) = "=" - │ └── end_keyword_loc: ∅ - ├── @ DefNode (location: (3,0)-(3,24)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (3,4)-(3,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (3,12)-(3,24)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (3,12)-(3,24)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :puts - │ │ ├── message_loc: (3,12)-(3,16) = "puts" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (3,17)-(3,24)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ StringNode (location: (3,17)-(3,24)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (3,17)-(3,18) = "\"" - │ │ │ ├── content_loc: (3,18)-(3,23) = "Hello" - │ │ │ ├── closing_loc: (3,23)-(3,24) = "\"" - │ │ │ └── unescaped: "Hello" - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (3,0)-(3,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (3,7)-(3,8) = "(" - │ ├── rparen_loc: (3,8)-(3,9) = ")" - │ ├── equal_loc: (3,10)-(3,11) = "=" - │ └── end_keyword_loc: ∅ - ├── @ DefNode (location: (5,0)-(5,19)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (5,4)-(5,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (5,8)-(5,9)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (5,8)-(5,9)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :x - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (5,13)-(5,19)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (5,13)-(5,19)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :puts - │ │ ├── message_loc: (5,13)-(5,17) = "puts" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (5,18)-(5,19)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ LocalVariableReadNode (location: (5,18)-(5,19)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :x - │ │ │ └── depth: 0 - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── locals: [:x] - │ ├── def_keyword_loc: (5,0)-(5,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (5,7)-(5,8) = "(" - │ ├── rparen_loc: (5,9)-(5,10) = ")" - │ ├── equal_loc: (5,11)-(5,12) = "=" - │ └── end_keyword_loc: ∅ - ├── @ DefNode (location: (7,0)-(7,26)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (7,8)-(7,11) = "foo" - │ ├── receiver: - │ │ @ CallNode (location: (7,4)-(7,7)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :obj - │ │ ├── message_loc: (7,4)-(7,7) = "obj" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (7,14)-(7,26)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (7,14)-(7,26)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :puts - │ │ ├── message_loc: (7,14)-(7,18) = "puts" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (7,19)-(7,26)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ StringNode (location: (7,19)-(7,26)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (7,19)-(7,20) = "\"" - │ │ │ ├── content_loc: (7,20)-(7,25) = "Hello" - │ │ │ ├── closing_loc: (7,25)-(7,26) = "\"" - │ │ │ └── unescaped: "Hello" - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (7,0)-(7,3) = "def" - │ ├── operator_loc: (7,7)-(7,8) = "." - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: (7,12)-(7,13) = "=" - │ └── end_keyword_loc: ∅ - ├── @ DefNode (location: (9,0)-(9,28)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (9,8)-(9,11) = "foo" - │ ├── receiver: - │ │ @ CallNode (location: (9,4)-(9,7)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :obj - │ │ ├── message_loc: (9,4)-(9,7) = "obj" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (9,16)-(9,28)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (9,16)-(9,28)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :puts - │ │ ├── message_loc: (9,16)-(9,20) = "puts" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (9,21)-(9,28)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ StringNode (location: (9,21)-(9,28)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (9,21)-(9,22) = "\"" - │ │ │ ├── content_loc: (9,22)-(9,27) = "Hello" - │ │ │ ├── closing_loc: (9,27)-(9,28) = "\"" - │ │ │ └── unescaped: "Hello" - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (9,0)-(9,3) = "def" - │ ├── operator_loc: (9,7)-(9,8) = "." - │ ├── lparen_loc: (9,11)-(9,12) = "(" - │ ├── rparen_loc: (9,12)-(9,13) = ")" - │ ├── equal_loc: (9,14)-(9,15) = "=" - │ └── end_keyword_loc: ∅ - ├── @ DefNode (location: (11,0)-(11,23)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (11,8)-(11,11) = "foo" - │ ├── receiver: - │ │ @ CallNode (location: (11,4)-(11,7)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :obj - │ │ ├── message_loc: (11,4)-(11,7) = "obj" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (11,12)-(11,13)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (11,12)-(11,13)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :x - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (11,17)-(11,23)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (11,17)-(11,23)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :puts - │ │ ├── message_loc: (11,17)-(11,21) = "puts" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (11,22)-(11,23)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ LocalVariableReadNode (location: (11,22)-(11,23)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :x - │ │ │ └── depth: 0 - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── locals: [:x] - │ ├── def_keyword_loc: (11,0)-(11,3) = "def" - │ ├── operator_loc: (11,7)-(11,8) = "." - │ ├── lparen_loc: (11,11)-(11,12) = "(" - │ ├── rparen_loc: (11,13)-(11,14) = ")" - │ ├── equal_loc: (11,15)-(11,16) = "=" - │ └── end_keyword_loc: ∅ - ├── @ DefNode (location: (13,0)-(13,60)) - │ ├── flags: newline - │ ├── name: :rescued - │ ├── name_loc: (13,4)-(13,11) = "rescued" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (13,12)-(13,13)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (13,12)-(13,13)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :x - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (13,17)-(13,60)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ RescueModifierNode (location: (13,17)-(13,60)) - │ │ ├── flags: ∅ - │ │ ├── expression: - │ │ │ @ CallNode (location: (13,17)-(13,37)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :raise - │ │ │ ├── message_loc: (13,17)-(13,22) = "raise" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (13,23)-(13,37)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ StringNode (location: (13,23)-(13,37)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── opening_loc: (13,23)-(13,24) = "\"" - │ │ │ │ ├── content_loc: (13,24)-(13,36) = "to be caught" - │ │ │ │ ├── closing_loc: (13,36)-(13,37) = "\"" - │ │ │ │ └── unescaped: "to be caught" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── keyword_loc: (13,38)-(13,44) = "rescue" - │ │ └── rescue_expression: - │ │ @ InterpolatedStringNode (location: (13,45)-(13,60)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (13,45)-(13,46) = "\"" - │ │ ├── parts: (length: 2) - │ │ │ ├── @ StringNode (location: (13,46)-(13,55)) - │ │ │ │ ├── flags: static_literal, frozen - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── content_loc: (13,46)-(13,55) = "instance " - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "instance " - │ │ │ └── @ EmbeddedStatementsNode (location: (13,55)-(13,59)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (13,55)-(13,57) = "\#{" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (13,57)-(13,58)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ LocalVariableReadNode (location: (13,57)-(13,58)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :x - │ │ │ │ └── depth: 0 - │ │ │ └── closing_loc: (13,58)-(13,59) = "}" - │ │ └── closing_loc: (13,59)-(13,60) = "\"" - │ ├── locals: [:x] - │ ├── def_keyword_loc: (13,0)-(13,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (13,11)-(13,12) = "(" - │ ├── rparen_loc: (13,13)-(13,14) = ")" - │ ├── equal_loc: (13,15)-(13,16) = "=" - │ └── end_keyword_loc: ∅ - └── @ DefNode (location: (15,0)-(15,62)) - ├── flags: newline - ├── name: :rescued - ├── name_loc: (15,9)-(15,16) = "rescued" - ├── receiver: - │ @ SelfNode (location: (15,4)-(15,8)) - │ └── flags: ∅ - ├── parameters: - │ @ ParametersNode (location: (15,17)-(15,18)) - │ ├── flags: ∅ - │ ├── requireds: (length: 1) - │ │ └── @ RequiredParameterNode (location: (15,17)-(15,18)) - │ │ ├── flags: ∅ - │ │ └── name: :x - │ ├── optionals: (length: 0) - │ ├── rest: ∅ - │ ├── posts: (length: 0) - │ ├── keywords: (length: 0) - │ ├── keyword_rest: ∅ - │ └── block: ∅ - ├── body: - │ @ StatementsNode (location: (15,22)-(15,62)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ RescueModifierNode (location: (15,22)-(15,62)) - │ ├── flags: ∅ - │ ├── expression: - │ │ @ CallNode (location: (15,22)-(15,42)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :raise - │ │ ├── message_loc: (15,22)-(15,27) = "raise" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (15,28)-(15,42)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ StringNode (location: (15,28)-(15,42)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (15,28)-(15,29) = "\"" - │ │ │ ├── content_loc: (15,29)-(15,41) = "to be caught" - │ │ │ ├── closing_loc: (15,41)-(15,42) = "\"" - │ │ │ └── unescaped: "to be caught" - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── keyword_loc: (15,43)-(15,49) = "rescue" - │ └── rescue_expression: - │ @ InterpolatedStringNode (location: (15,50)-(15,62)) - │ ├── flags: ∅ - │ ├── opening_loc: (15,50)-(15,51) = "\"" - │ ├── parts: (length: 2) - │ │ ├── @ StringNode (location: (15,51)-(15,57)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (15,51)-(15,57) = "class " - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "class " - │ │ └── @ EmbeddedStatementsNode (location: (15,57)-(15,61)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (15,57)-(15,59) = "\#{" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (15,59)-(15,60)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ LocalVariableReadNode (location: (15,59)-(15,60)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :x - │ │ │ └── depth: 0 - │ │ └── closing_loc: (15,60)-(15,61) = "}" - │ └── closing_loc: (15,61)-(15,62) = "\"" - ├── locals: [:x] - ├── def_keyword_loc: (15,0)-(15,3) = "def" - ├── operator_loc: (15,8)-(15,9) = "." - ├── lparen_loc: (15,16)-(15,17) = "(" - ├── rparen_loc: (15,18)-(15,19) = ")" - ├── equal_loc: (15,20)-(15,21) = "=" - └── end_keyword_loc: ∅ diff --git a/test/prism/snapshots/whitequark/endless_method_forwarded_args_legacy.txt b/test/prism/snapshots/whitequark/endless_method_forwarded_args_legacy.txt deleted file mode 100644 index 5927016b2650fe..00000000000000 --- a/test/prism/snapshots/whitequark/endless_method_forwarded_args_legacy.txt +++ /dev/null @@ -1,50 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,23)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,23)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(1,23)) - ├── flags: newline - ├── name: :foo - ├── name_loc: (1,4)-(1,7) = "foo" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (1,8)-(1,11)) - │ ├── flags: ∅ - │ ├── requireds: (length: 0) - │ ├── optionals: (length: 0) - │ ├── rest: ∅ - │ ├── posts: (length: 0) - │ ├── keywords: (length: 0) - │ ├── keyword_rest: - │ │ @ ForwardingParameterNode (location: (1,8)-(1,11)) - │ │ └── flags: ∅ - │ └── block: ∅ - ├── body: - │ @ StatementsNode (location: (1,15)-(1,23)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,15)-(1,23)) - │ ├── flags: ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :bar - │ ├── message_loc: (1,15)-(1,18) = "bar" - │ ├── opening_loc: (1,18)-(1,19) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,19)-(1,22)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ ForwardingArgumentsNode (location: (1,19)-(1,22)) - │ │ └── flags: ∅ - │ ├── closing_loc: (1,22)-(1,23) = ")" - │ └── block: ∅ - ├── locals: [] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: (1,7)-(1,8) = "(" - ├── rparen_loc: (1,11)-(1,12) = ")" - ├── equal_loc: (1,13)-(1,14) = "=" - └── end_keyword_loc: ∅ diff --git a/test/prism/snapshots/whitequark/endless_method_with_rescue_mod.txt b/test/prism/snapshots/whitequark/endless_method_with_rescue_mod.txt deleted file mode 100644 index c64ba634b73bed..00000000000000 --- a/test/prism/snapshots/whitequark/endless_method_with_rescue_mod.txt +++ /dev/null @@ -1,65 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,25)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,25)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ DefNode (location: (1,0)-(1,20)) - │ ├── flags: newline - │ ├── name: :m - │ ├── name_loc: (1,4)-(1,5) = "m" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (1,10)-(1,20)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ RescueModifierNode (location: (1,10)-(1,20)) - │ │ ├── flags: ∅ - │ │ ├── expression: - │ │ │ @ IntegerNode (location: (1,10)-(1,11)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── keyword_loc: (1,12)-(1,18) = "rescue" - │ │ └── rescue_expression: - │ │ @ IntegerNode (location: (1,19)-(1,20)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── locals: [] - │ ├── def_keyword_loc: (1,0)-(1,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (1,5)-(1,6) = "(" - │ ├── rparen_loc: (1,6)-(1,7) = ")" - │ ├── equal_loc: (1,8)-(1,9) = "=" - │ └── end_keyword_loc: ∅ - └── @ DefNode (location: (3,0)-(3,25)) - ├── flags: newline - ├── name: :m - ├── name_loc: (3,9)-(3,10) = "m" - ├── receiver: - │ @ SelfNode (location: (3,4)-(3,8)) - │ └── flags: ∅ - ├── parameters: ∅ - ├── body: - │ @ StatementsNode (location: (3,15)-(3,25)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ RescueModifierNode (location: (3,15)-(3,25)) - │ ├── flags: ∅ - │ ├── expression: - │ │ @ IntegerNode (location: (3,15)-(3,16)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── keyword_loc: (3,17)-(3,23) = "rescue" - │ └── rescue_expression: - │ @ IntegerNode (location: (3,24)-(3,25)) - │ ├── flags: static_literal, decimal - │ └── value: 2 - ├── locals: [] - ├── def_keyword_loc: (3,0)-(3,3) = "def" - ├── operator_loc: (3,8)-(3,9) = "." - ├── lparen_loc: (3,10)-(3,11) = "(" - ├── rparen_loc: (3,11)-(3,12) = ")" - ├── equal_loc: (3,13)-(3,14) = "=" - └── end_keyword_loc: ∅ diff --git a/test/prism/snapshots/whitequark/endless_method_without_args.txt b/test/prism/snapshots/whitequark/endless_method_without_args.txt deleted file mode 100644 index 0be157df627368..00000000000000 --- a/test/prism/snapshots/whitequark/endless_method_without_args.txt +++ /dev/null @@ -1,105 +0,0 @@ -@ ProgramNode (location: (1,0)-(7,28)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(7,28)) - ├── flags: ∅ - └── body: (length: 4) - ├── @ DefNode (location: (1,0)-(1,12)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (1,4)-(1,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (1,10)-(1,12)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ IntegerNode (location: (1,10)-(1,12)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 42 - │ ├── locals: [] - │ ├── def_keyword_loc: (1,0)-(1,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: (1,8)-(1,9) = "=" - │ └── end_keyword_loc: ∅ - ├── @ DefNode (location: (3,0)-(3,23)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (3,4)-(3,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (3,10)-(3,23)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ RescueModifierNode (location: (3,10)-(3,23)) - │ │ ├── flags: ∅ - │ │ ├── expression: - │ │ │ @ IntegerNode (location: (3,10)-(3,12)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 42 - │ │ ├── keyword_loc: (3,13)-(3,19) = "rescue" - │ │ └── rescue_expression: - │ │ @ NilNode (location: (3,20)-(3,23)) - │ │ └── flags: static_literal - │ ├── locals: [] - │ ├── def_keyword_loc: (3,0)-(3,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: (3,8)-(3,9) = "=" - │ └── end_keyword_loc: ∅ - ├── @ DefNode (location: (5,0)-(5,17)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (5,9)-(5,12) = "foo" - │ ├── receiver: - │ │ @ SelfNode (location: (5,4)-(5,8)) - │ │ └── flags: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (5,15)-(5,17)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ IntegerNode (location: (5,15)-(5,17)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 42 - │ ├── locals: [] - │ ├── def_keyword_loc: (5,0)-(5,3) = "def" - │ ├── operator_loc: (5,8)-(5,9) = "." - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: (5,13)-(5,14) = "=" - │ └── end_keyword_loc: ∅ - └── @ DefNode (location: (7,0)-(7,28)) - ├── flags: newline - ├── name: :foo - ├── name_loc: (7,9)-(7,12) = "foo" - ├── receiver: - │ @ SelfNode (location: (7,4)-(7,8)) - │ └── flags: ∅ - ├── parameters: ∅ - ├── body: - │ @ StatementsNode (location: (7,15)-(7,28)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ RescueModifierNode (location: (7,15)-(7,28)) - │ ├── flags: ∅ - │ ├── expression: - │ │ @ IntegerNode (location: (7,15)-(7,17)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 42 - │ ├── keyword_loc: (7,18)-(7,24) = "rescue" - │ └── rescue_expression: - │ @ NilNode (location: (7,25)-(7,28)) - │ └── flags: static_literal - ├── locals: [] - ├── def_keyword_loc: (7,0)-(7,3) = "def" - ├── operator_loc: (7,8)-(7,9) = "." - ├── lparen_loc: ∅ - ├── rparen_loc: ∅ - ├── equal_loc: (7,13)-(7,14) = "=" - └── end_keyword_loc: ∅ diff --git a/test/prism/snapshots/whitequark/ensure.txt b/test/prism/snapshots/whitequark/ensure.txt deleted file mode 100644 index 63d4a3b05dc8b4..00000000000000 --- a/test/prism/snapshots/whitequark/ensure.txt +++ /dev/null @@ -1,46 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,29)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,29)) - ├── flags: ∅ - └── body: (length: 1) - └── @ BeginNode (location: (1,0)-(1,29)) - ├── flags: newline - ├── begin_keyword_loc: (1,0)-(1,5) = "begin" - ├── statements: - │ @ StatementsNode (location: (1,7)-(1,11)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,7)-(1,11)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :meth - │ ├── message_loc: (1,7)-(1,11) = "meth" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── rescue_clause: ∅ - ├── else_clause: ∅ - ├── ensure_clause: - │ @ EnsureNode (location: (1,13)-(1,29)) - │ ├── flags: ∅ - │ ├── ensure_keyword_loc: (1,13)-(1,19) = "ensure" - │ ├── statements: - │ │ @ StatementsNode (location: (1,21)-(1,24)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (1,21)-(1,24)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (1,21)-(1,24) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── end_keyword_loc: (1,26)-(1,29) = "end" - └── end_keyword_loc: (1,26)-(1,29) = "end" diff --git a/test/prism/snapshots/whitequark/ensure_empty.txt b/test/prism/snapshots/whitequark/ensure_empty.txt deleted file mode 100644 index c7369b7b1f59c4..00000000000000 --- a/test/prism/snapshots/whitequark/ensure_empty.txt +++ /dev/null @@ -1,20 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,16)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,16)) - ├── flags: ∅ - └── body: (length: 1) - └── @ BeginNode (location: (1,0)-(1,16)) - ├── flags: newline - ├── begin_keyword_loc: (1,0)-(1,5) = "begin" - ├── statements: ∅ - ├── rescue_clause: ∅ - ├── else_clause: ∅ - ├── ensure_clause: - │ @ EnsureNode (location: (1,6)-(1,16)) - │ ├── flags: ∅ - │ ├── ensure_keyword_loc: (1,6)-(1,12) = "ensure" - │ ├── statements: ∅ - │ └── end_keyword_loc: (1,13)-(1,16) = "end" - └── end_keyword_loc: (1,13)-(1,16) = "end" diff --git a/test/prism/snapshots/whitequark/false.txt b/test/prism/snapshots/whitequark/false.txt deleted file mode 100644 index 4686f6aa08a145..00000000000000 --- a/test/prism/snapshots/whitequark/false.txt +++ /dev/null @@ -1,9 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,5)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,5)) - ├── flags: ∅ - └── body: (length: 1) - └── @ FalseNode (location: (1,0)-(1,5)) - └── flags: newline, static_literal diff --git a/test/prism/snapshots/whitequark/float.txt b/test/prism/snapshots/whitequark/float.txt deleted file mode 100644 index 7839f899625893..00000000000000 --- a/test/prism/snapshots/whitequark/float.txt +++ /dev/null @@ -1,13 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,4)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,4)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ FloatNode (location: (1,0)-(1,5)) - │ ├── flags: newline, static_literal - │ └── value: -1.33 - └── @ FloatNode (location: (3,0)-(3,4)) - ├── flags: newline, static_literal - └── value: 1.33 diff --git a/test/prism/snapshots/whitequark/for.txt b/test/prism/snapshots/whitequark/for.txt deleted file mode 100644 index 8dca927c905146..00000000000000 --- a/test/prism/snapshots/whitequark/for.txt +++ /dev/null @@ -1,93 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,22)) -├── flags: ∅ -├── locals: [:a] -└── statements: - @ StatementsNode (location: (1,0)-(3,22)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ ForNode (location: (1,0)-(1,24)) - │ ├── flags: newline - │ ├── index: - │ │ @ LocalVariableTargetNode (location: (1,4)-(1,5)) - │ │ ├── flags: ∅ - │ │ ├── name: :a - │ │ └── depth: 0 - │ ├── collection: - │ │ @ CallNode (location: (1,9)-(1,12)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (1,9)-(1,12) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── statements: - │ │ @ StatementsNode (location: (1,16)-(1,19)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (1,16)-(1,19)) - │ │ ├── flags: newline, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :p - │ │ ├── message_loc: (1,16)-(1,17) = "p" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (1,18)-(1,19)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ LocalVariableReadNode (location: (1,18)-(1,19)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :a - │ │ │ └── depth: 0 - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── for_keyword_loc: (1,0)-(1,3) = "for" - │ ├── in_keyword_loc: (1,6)-(1,8) = "in" - │ ├── do_keyword_loc: (1,13)-(1,15) = "do" - │ └── end_keyword_loc: (1,21)-(1,24) = "end" - └── @ ForNode (location: (3,0)-(3,22)) - ├── flags: newline - ├── index: - │ @ LocalVariableTargetNode (location: (3,4)-(3,5)) - │ ├── flags: ∅ - │ ├── name: :a - │ └── depth: 0 - ├── collection: - │ @ CallNode (location: (3,9)-(3,12)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (3,9)-(3,12) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── statements: - │ @ StatementsNode (location: (3,14)-(3,17)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (3,14)-(3,17)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :p - │ ├── message_loc: (3,14)-(3,15) = "p" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (3,16)-(3,17)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ LocalVariableReadNode (location: (3,16)-(3,17)) - │ │ ├── flags: ∅ - │ │ ├── name: :a - │ │ └── depth: 0 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── for_keyword_loc: (3,0)-(3,3) = "for" - ├── in_keyword_loc: (3,6)-(3,8) = "in" - ├── do_keyword_loc: ∅ - └── end_keyword_loc: (3,19)-(3,22) = "end" diff --git a/test/prism/snapshots/whitequark/for_mlhs.txt b/test/prism/snapshots/whitequark/for_mlhs.txt deleted file mode 100644 index 0f70dd8a7dad73..00000000000000 --- a/test/prism/snapshots/whitequark/for_mlhs.txt +++ /dev/null @@ -1,65 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,28)) -├── flags: ∅ -├── locals: [:a, :b] -└── statements: - @ StatementsNode (location: (1,0)-(1,28)) - ├── flags: ∅ - └── body: (length: 1) - └── @ ForNode (location: (1,0)-(1,28)) - ├── flags: newline - ├── index: - │ @ MultiTargetNode (location: (1,4)-(1,8)) - │ ├── flags: ∅ - │ ├── lefts: (length: 2) - │ │ ├── @ LocalVariableTargetNode (location: (1,4)-(1,5)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :a - │ │ │ └── depth: 0 - │ │ └── @ LocalVariableTargetNode (location: (1,7)-(1,8)) - │ │ ├── flags: ∅ - │ │ ├── name: :b - │ │ └── depth: 0 - │ ├── rest: ∅ - │ ├── rights: (length: 0) - │ ├── lparen_loc: ∅ - │ └── rparen_loc: ∅ - ├── collection: - │ @ CallNode (location: (1,12)-(1,15)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (1,12)-(1,15) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── statements: - │ @ StatementsNode (location: (1,17)-(1,23)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,17)-(1,23)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :p - │ ├── message_loc: (1,17)-(1,18) = "p" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,19)-(1,23)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ LocalVariableReadNode (location: (1,19)-(1,20)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :a - │ │ │ └── depth: 0 - │ │ └── @ LocalVariableReadNode (location: (1,22)-(1,23)) - │ │ ├── flags: ∅ - │ │ ├── name: :b - │ │ └── depth: 0 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── for_keyword_loc: (1,0)-(1,3) = "for" - ├── in_keyword_loc: (1,9)-(1,11) = "in" - ├── do_keyword_loc: ∅ - └── end_keyword_loc: (1,25)-(1,28) = "end" diff --git a/test/prism/snapshots/whitequark/forward_arg.txt b/test/prism/snapshots/whitequark/forward_arg.txt deleted file mode 100644 index b8c22d08f2db34..00000000000000 --- a/test/prism/snapshots/whitequark/forward_arg.txt +++ /dev/null @@ -1,50 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,27)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,27)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(1,27)) - ├── flags: newline - ├── name: :foo - ├── name_loc: (1,4)-(1,7) = "foo" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (1,8)-(1,11)) - │ ├── flags: ∅ - │ ├── requireds: (length: 0) - │ ├── optionals: (length: 0) - │ ├── rest: ∅ - │ ├── posts: (length: 0) - │ ├── keywords: (length: 0) - │ ├── keyword_rest: - │ │ @ ForwardingParameterNode (location: (1,8)-(1,11)) - │ │ └── flags: ∅ - │ └── block: ∅ - ├── body: - │ @ StatementsNode (location: (1,14)-(1,22)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,14)-(1,22)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :bar - │ ├── message_loc: (1,14)-(1,17) = "bar" - │ ├── opening_loc: (1,17)-(1,18) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,18)-(1,21)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ ForwardingArgumentsNode (location: (1,18)-(1,21)) - │ │ └── flags: ∅ - │ ├── closing_loc: (1,21)-(1,22) = ")" - │ └── block: ∅ - ├── locals: [] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: (1,7)-(1,8) = "(" - ├── rparen_loc: (1,11)-(1,12) = ")" - ├── equal_loc: ∅ - └── end_keyword_loc: (1,24)-(1,27) = "end" diff --git a/test/prism/snapshots/whitequark/forward_arg_with_open_args.txt b/test/prism/snapshots/whitequark/forward_arg_with_open_args.txt deleted file mode 100644 index 20c8486276b9d4..00000000000000 --- a/test/prism/snapshots/whitequark/forward_arg_with_open_args.txt +++ /dev/null @@ -1,456 +0,0 @@ -@ ProgramNode (location: (1,0)-(27,28)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(27,28)) - ├── flags: ∅ - └── body: (length: 10) - ├── @ ParenthesesNode (location: (1,0)-(3,4)) - │ ├── flags: newline - │ ├── body: - │ │ @ StatementsNode (location: (1,1)-(3,3)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ DefNode (location: (1,1)-(3,3)) - │ │ ├── flags: newline - │ │ ├── name: :foo - │ │ ├── name_loc: (1,5)-(1,8) = "foo" - │ │ ├── receiver: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (1,9)-(1,12)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 0) - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: - │ │ │ │ @ ForwardingParameterNode (location: (1,9)-(1,12)) - │ │ │ │ └── flags: ∅ - │ │ │ └── block: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (2,2)-(2,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (2,2)-(2,10)) - │ │ │ ├── flags: newline, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (2,2)-(2,5) = "bar" - │ │ │ ├── opening_loc: (2,5)-(2,6) = "(" - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (2,6)-(2,9)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ ForwardingArgumentsNode (location: (2,6)-(2,9)) - │ │ │ │ └── flags: ∅ - │ │ │ ├── closing_loc: (2,9)-(2,10) = ")" - │ │ │ └── block: ∅ - │ │ ├── locals: [] - │ │ ├── def_keyword_loc: (1,1)-(1,4) = "def" - │ │ ├── operator_loc: ∅ - │ │ ├── lparen_loc: ∅ - │ │ ├── rparen_loc: ∅ - │ │ ├── equal_loc: ∅ - │ │ └── end_keyword_loc: (3,0)-(3,3) = "end" - │ ├── opening_loc: (1,0)-(1,1) = "(" - │ └── closing_loc: (3,3)-(3,4) = ")" - ├── @ ParenthesesNode (location: (5,0)-(5,28)) - │ ├── flags: newline - │ ├── body: - │ │ @ StatementsNode (location: (5,1)-(5,27)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ DefNode (location: (5,1)-(5,27)) - │ │ ├── flags: newline - │ │ ├── name: :foo - │ │ ├── name_loc: (5,5)-(5,8) = "foo" - │ │ ├── receiver: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (5,9)-(5,12)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 0) - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: - │ │ │ │ @ ForwardingParameterNode (location: (5,9)-(5,12)) - │ │ │ │ └── flags: ∅ - │ │ │ └── block: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (5,14)-(5,22)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (5,14)-(5,22)) - │ │ │ ├── flags: newline, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (5,14)-(5,17) = "bar" - │ │ │ ├── opening_loc: (5,17)-(5,18) = "(" - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (5,18)-(5,21)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ ForwardingArgumentsNode (location: (5,18)-(5,21)) - │ │ │ │ └── flags: ∅ - │ │ │ ├── closing_loc: (5,21)-(5,22) = ")" - │ │ │ └── block: ∅ - │ │ ├── locals: [] - │ │ ├── def_keyword_loc: (5,1)-(5,4) = "def" - │ │ ├── operator_loc: ∅ - │ │ ├── lparen_loc: ∅ - │ │ ├── rparen_loc: ∅ - │ │ ├── equal_loc: ∅ - │ │ └── end_keyword_loc: (5,24)-(5,27) = "end" - │ ├── opening_loc: (5,0)-(5,1) = "(" - │ └── closing_loc: (5,27)-(5,28) = ")" - ├── @ DefNode (location: (7,0)-(8,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (7,4)-(7,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (7,8)-(7,11)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: - │ │ │ @ ForwardingParameterNode (location: (7,8)-(7,11)) - │ │ │ └── flags: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (7,0)-(7,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (8,0)-(8,3) = "end" - ├── @ DefNode (location: (10,0)-(10,26)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (10,4)-(10,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (10,8)-(10,11)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: - │ │ │ @ ForwardingParameterNode (location: (10,8)-(10,11)) - │ │ │ └── flags: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (10,13)-(10,21)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (10,13)-(10,21)) - │ │ ├── flags: newline, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (10,13)-(10,16) = "bar" - │ │ ├── opening_loc: (10,16)-(10,17) = "(" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (10,17)-(10,20)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ ForwardingArgumentsNode (location: (10,17)-(10,20)) - │ │ │ └── flags: ∅ - │ │ ├── closing_loc: (10,20)-(10,21) = ")" - │ │ └── block: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (10,0)-(10,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (10,23)-(10,26) = "end" - ├── @ DefNode (location: (12,0)-(14,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (12,4)-(12,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (12,8)-(12,14)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (12,8)-(12,9)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :a - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: - │ │ │ @ ForwardingParameterNode (location: (12,11)-(12,14)) - │ │ │ └── flags: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (13,2)-(13,10)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (13,2)-(13,10)) - │ │ ├── flags: newline, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (13,2)-(13,5) = "bar" - │ │ ├── opening_loc: (13,5)-(13,6) = "(" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (13,6)-(13,9)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ ForwardingArgumentsNode (location: (13,6)-(13,9)) - │ │ │ └── flags: ∅ - │ │ ├── closing_loc: (13,9)-(13,10) = ")" - │ │ └── block: ∅ - │ ├── locals: [:a] - │ ├── def_keyword_loc: (12,0)-(12,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (14,0)-(14,3) = "end" - ├── @ DefNode (location: (16,0)-(16,29)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (16,4)-(16,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (16,8)-(16,14)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (16,8)-(16,9)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :a - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: - │ │ │ @ ForwardingParameterNode (location: (16,11)-(16,14)) - │ │ │ └── flags: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (16,16)-(16,24)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (16,16)-(16,24)) - │ │ ├── flags: newline, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (16,16)-(16,19) = "bar" - │ │ ├── opening_loc: (16,19)-(16,20) = "(" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (16,20)-(16,23)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ ForwardingArgumentsNode (location: (16,20)-(16,23)) - │ │ │ └── flags: ∅ - │ │ ├── closing_loc: (16,23)-(16,24) = ")" - │ │ └── block: ∅ - │ ├── locals: [:a] - │ ├── def_keyword_loc: (16,0)-(16,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (16,26)-(16,29) = "end" - ├── @ DefNode (location: (18,0)-(19,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (18,4)-(18,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (18,8)-(18,21)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (18,8)-(18,9)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :a - │ │ ├── optionals: (length: 1) - │ │ │ └── @ OptionalParameterNode (location: (18,11)-(18,16)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :b - │ │ │ ├── name_loc: (18,11)-(18,12) = "b" - │ │ │ ├── operator_loc: (18,13)-(18,14) = "=" - │ │ │ └── value: - │ │ │ @ IntegerNode (location: (18,15)-(18,16)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: - │ │ │ @ ForwardingParameterNode (location: (18,18)-(18,21)) - │ │ │ └── flags: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:a, :b] - │ ├── def_keyword_loc: (18,0)-(18,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (19,0)-(19,3) = "end" - ├── @ DefNode (location: (21,0)-(23,3)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (21,4)-(21,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (21,8)-(21,18)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 1) - │ │ │ └── @ OptionalParameterNode (location: (21,8)-(21,13)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :b - │ │ │ ├── name_loc: (21,8)-(21,9) = "b" - │ │ │ ├── operator_loc: (21,10)-(21,11) = "=" - │ │ │ └── value: - │ │ │ @ IntegerNode (location: (21,12)-(21,13)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: - │ │ │ @ ForwardingParameterNode (location: (21,15)-(21,18)) - │ │ │ └── flags: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (22,2)-(22,10)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (22,2)-(22,10)) - │ │ ├── flags: newline, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (22,2)-(22,5) = "bar" - │ │ ├── opening_loc: (22,5)-(22,6) = "(" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (22,6)-(22,9)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ ForwardingArgumentsNode (location: (22,6)-(22,9)) - │ │ │ └── flags: ∅ - │ │ ├── closing_loc: (22,9)-(22,10) = ")" - │ │ └── block: ∅ - │ ├── locals: [:b] - │ ├── def_keyword_loc: (21,0)-(21,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (23,0)-(23,3) = "end" - ├── @ DefNode (location: (25,0)-(25,33)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (25,4)-(25,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (25,8)-(25,18)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 1) - │ │ │ └── @ OptionalParameterNode (location: (25,8)-(25,13)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :b - │ │ │ ├── name_loc: (25,8)-(25,9) = "b" - │ │ │ ├── operator_loc: (25,10)-(25,11) = "=" - │ │ │ └── value: - │ │ │ @ IntegerNode (location: (25,12)-(25,13)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: - │ │ │ @ ForwardingParameterNode (location: (25,15)-(25,18)) - │ │ │ └── flags: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (25,20)-(25,28)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (25,20)-(25,28)) - │ │ ├── flags: newline, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (25,20)-(25,23) = "bar" - │ │ ├── opening_loc: (25,23)-(25,24) = "(" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (25,24)-(25,27)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ ForwardingArgumentsNode (location: (25,24)-(25,27)) - │ │ │ └── flags: ∅ - │ │ ├── closing_loc: (25,27)-(25,28) = ")" - │ │ └── block: ∅ - │ ├── locals: [:b] - │ ├── def_keyword_loc: (25,0)-(25,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (25,30)-(25,33) = "end" - └── @ DefNode (location: (27,0)-(27,28)) - ├── flags: newline - ├── name: :foo - ├── name_loc: (27,4)-(27,7) = "foo" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (27,8)-(27,14)) - │ ├── flags: ∅ - │ ├── requireds: (length: 1) - │ │ └── @ RequiredParameterNode (location: (27,8)-(27,9)) - │ │ ├── flags: ∅ - │ │ └── name: :a - │ ├── optionals: (length: 0) - │ ├── rest: ∅ - │ ├── posts: (length: 0) - │ ├── keywords: (length: 0) - │ ├── keyword_rest: - │ │ @ ForwardingParameterNode (location: (27,11)-(27,14)) - │ │ └── flags: ∅ - │ └── block: ∅ - ├── body: - │ @ StatementsNode (location: (27,16)-(27,24)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (27,16)-(27,24)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :bar - │ ├── message_loc: (27,16)-(27,19) = "bar" - │ ├── opening_loc: (27,19)-(27,20) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (27,20)-(27,23)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ ForwardingArgumentsNode (location: (27,20)-(27,23)) - │ │ └── flags: ∅ - │ ├── closing_loc: (27,23)-(27,24) = ")" - │ └── block: ∅ - ├── locals: [:a] - ├── def_keyword_loc: (27,0)-(27,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: (27,7)-(27,8) = "(" - ├── rparen_loc: (27,14)-(27,15) = ")" - ├── equal_loc: ∅ - └── end_keyword_loc: (27,25)-(27,28) = "end" diff --git a/test/prism/snapshots/whitequark/forward_args_legacy.txt b/test/prism/snapshots/whitequark/forward_args_legacy.txt deleted file mode 100644 index 6fd9c536e35153..00000000000000 --- a/test/prism/snapshots/whitequark/forward_args_legacy.txt +++ /dev/null @@ -1,115 +0,0 @@ -@ ProgramNode (location: (1,0)-(5,29)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(5,29)) - ├── flags: ∅ - └── body: (length: 3) - ├── @ DefNode (location: (1,0)-(1,27)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (1,4)-(1,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,8)-(1,11)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: - │ │ │ @ ForwardingParameterNode (location: (1,8)-(1,11)) - │ │ │ └── flags: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (1,14)-(1,22)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (1,14)-(1,22)) - │ │ ├── flags: newline, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (1,14)-(1,17) = "bar" - │ │ ├── opening_loc: (1,17)-(1,18) = "(" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (1,18)-(1,21)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ ForwardingArgumentsNode (location: (1,18)-(1,21)) - │ │ │ └── flags: ∅ - │ │ ├── closing_loc: (1,21)-(1,22) = ")" - │ │ └── block: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (1,0)-(1,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (1,7)-(1,8) = "(" - │ ├── rparen_loc: (1,11)-(1,12) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (1,24)-(1,27) = "end" - ├── @ DefNode (location: (3,0)-(3,17)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (3,4)-(3,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (3,8)-(3,11)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: - │ │ │ @ ForwardingParameterNode (location: (3,8)-(3,11)) - │ │ │ └── flags: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (3,0)-(3,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: (3,7)-(3,8) = "(" - │ ├── rparen_loc: (3,11)-(3,12) = ")" - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (3,14)-(3,17) = "end" - └── @ DefNode (location: (5,0)-(5,29)) - ├── flags: newline - ├── name: :foo - ├── name_loc: (5,4)-(5,7) = "foo" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (5,8)-(5,11)) - │ ├── flags: ∅ - │ ├── requireds: (length: 0) - │ ├── optionals: (length: 0) - │ ├── rest: ∅ - │ ├── posts: (length: 0) - │ ├── keywords: (length: 0) - │ ├── keyword_rest: - │ │ @ ForwardingParameterNode (location: (5,8)-(5,11)) - │ │ └── flags: ∅ - │ └── block: ∅ - ├── body: - │ @ StatementsNode (location: (5,14)-(5,24)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ SuperNode (location: (5,14)-(5,24)) - │ ├── flags: newline - │ ├── keyword_loc: (5,14)-(5,19) = "super" - │ ├── lparen_loc: (5,19)-(5,20) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (5,20)-(5,23)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ ForwardingArgumentsNode (location: (5,20)-(5,23)) - │ │ └── flags: ∅ - │ ├── rparen_loc: (5,23)-(5,24) = ")" - │ └── block: ∅ - ├── locals: [] - ├── def_keyword_loc: (5,0)-(5,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: (5,7)-(5,8) = "(" - ├── rparen_loc: (5,11)-(5,12) = ")" - ├── equal_loc: ∅ - └── end_keyword_loc: (5,26)-(5,29) = "end" diff --git a/test/prism/snapshots/whitequark/forwarded_argument_with_kwrestarg.txt b/test/prism/snapshots/whitequark/forwarded_argument_with_kwrestarg.txt deleted file mode 100644 index d80ace6fbaf9bd..00000000000000 --- a/test/prism/snapshots/whitequark/forwarded_argument_with_kwrestarg.txt +++ /dev/null @@ -1,65 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,45)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,45)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(1,45)) - ├── flags: newline - ├── name: :foo - ├── name_loc: (1,4)-(1,7) = "foo" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (1,8)-(1,20)) - │ ├── flags: ∅ - │ ├── requireds: (length: 1) - │ │ └── @ RequiredParameterNode (location: (1,8)-(1,16)) - │ │ ├── flags: ∅ - │ │ └── name: :argument - │ ├── optionals: (length: 0) - │ ├── rest: ∅ - │ ├── posts: (length: 0) - │ ├── keywords: (length: 0) - │ ├── keyword_rest: - │ │ @ KeywordRestParameterNode (location: (1,18)-(1,20)) - │ │ ├── flags: ∅ - │ │ ├── name: ∅ - │ │ ├── name_loc: ∅ - │ │ └── operator_loc: (1,18)-(1,20) = "**" - │ └── block: ∅ - ├── body: - │ @ StatementsNode (location: (1,23)-(1,40)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,23)-(1,40)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :bar - │ ├── message_loc: (1,23)-(1,26) = "bar" - │ ├── opening_loc: (1,26)-(1,27) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,27)-(1,39)) - │ │ ├── flags: contains_keywords, contains_keyword_splat - │ │ └── arguments: (length: 2) - │ │ ├── @ LocalVariableReadNode (location: (1,27)-(1,35)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :argument - │ │ │ └── depth: 0 - │ │ └── @ KeywordHashNode (location: (1,37)-(1,39)) - │ │ ├── flags: ∅ - │ │ └── elements: (length: 1) - │ │ └── @ AssocSplatNode (location: (1,37)-(1,39)) - │ │ ├── flags: ∅ - │ │ ├── value: ∅ - │ │ └── operator_loc: (1,37)-(1,39) = "**" - │ ├── closing_loc: (1,39)-(1,40) = ")" - │ └── block: ∅ - ├── locals: [:argument] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: (1,7)-(1,8) = "(" - ├── rparen_loc: (1,20)-(1,21) = ")" - ├── equal_loc: ∅ - └── end_keyword_loc: (1,42)-(1,45) = "end" diff --git a/test/prism/snapshots/whitequark/forwarded_argument_with_restarg.txt b/test/prism/snapshots/whitequark/forwarded_argument_with_restarg.txt deleted file mode 100644 index 2dd95c6cae18b2..00000000000000 --- a/test/prism/snapshots/whitequark/forwarded_argument_with_restarg.txt +++ /dev/null @@ -1,62 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,43)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,43)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(1,43)) - ├── flags: newline - ├── name: :foo - ├── name_loc: (1,4)-(1,7) = "foo" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (1,8)-(1,19)) - │ ├── flags: ∅ - │ ├── requireds: (length: 1) - │ │ └── @ RequiredParameterNode (location: (1,8)-(1,16)) - │ │ ├── flags: ∅ - │ │ └── name: :argument - │ ├── optionals: (length: 0) - │ ├── rest: - │ │ @ RestParameterNode (location: (1,18)-(1,19)) - │ │ ├── flags: ∅ - │ │ ├── name: ∅ - │ │ ├── name_loc: ∅ - │ │ └── operator_loc: (1,18)-(1,19) = "*" - │ ├── posts: (length: 0) - │ ├── keywords: (length: 0) - │ ├── keyword_rest: ∅ - │ └── block: ∅ - ├── body: - │ @ StatementsNode (location: (1,22)-(1,38)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,22)-(1,38)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :bar - │ ├── message_loc: (1,22)-(1,25) = "bar" - │ ├── opening_loc: (1,25)-(1,26) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,26)-(1,37)) - │ │ ├── flags: contains_splat - │ │ └── arguments: (length: 2) - │ │ ├── @ LocalVariableReadNode (location: (1,26)-(1,34)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :argument - │ │ │ └── depth: 0 - │ │ └── @ SplatNode (location: (1,36)-(1,37)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (1,36)-(1,37) = "*" - │ │ └── expression: ∅ - │ ├── closing_loc: (1,37)-(1,38) = ")" - │ └── block: ∅ - ├── locals: [:argument] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: (1,7)-(1,8) = "(" - ├── rparen_loc: (1,19)-(1,20) = ")" - ├── equal_loc: ∅ - └── end_keyword_loc: (1,40)-(1,43) = "end" diff --git a/test/prism/snapshots/whitequark/forwarded_kwrestarg.txt b/test/prism/snapshots/whitequark/forwarded_kwrestarg.txt deleted file mode 100644 index 50cc9ca38b857c..00000000000000 --- a/test/prism/snapshots/whitequark/forwarded_kwrestarg.txt +++ /dev/null @@ -1,58 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,25)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,25)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(1,25)) - ├── flags: newline - ├── name: :foo - ├── name_loc: (1,4)-(1,7) = "foo" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (1,8)-(1,10)) - │ ├── flags: ∅ - │ ├── requireds: (length: 0) - │ ├── optionals: (length: 0) - │ ├── rest: ∅ - │ ├── posts: (length: 0) - │ ├── keywords: (length: 0) - │ ├── keyword_rest: - │ │ @ KeywordRestParameterNode (location: (1,8)-(1,10)) - │ │ ├── flags: ∅ - │ │ ├── name: ∅ - │ │ ├── name_loc: ∅ - │ │ └── operator_loc: (1,8)-(1,10) = "**" - │ └── block: ∅ - ├── body: - │ @ StatementsNode (location: (1,13)-(1,20)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,13)-(1,20)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :bar - │ ├── message_loc: (1,13)-(1,16) = "bar" - │ ├── opening_loc: (1,16)-(1,17) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,17)-(1,19)) - │ │ ├── flags: contains_keywords, contains_keyword_splat - │ │ └── arguments: (length: 1) - │ │ └── @ KeywordHashNode (location: (1,17)-(1,19)) - │ │ ├── flags: ∅ - │ │ └── elements: (length: 1) - │ │ └── @ AssocSplatNode (location: (1,17)-(1,19)) - │ │ ├── flags: ∅ - │ │ ├── value: ∅ - │ │ └── operator_loc: (1,17)-(1,19) = "**" - │ ├── closing_loc: (1,19)-(1,20) = ")" - │ └── block: ∅ - ├── locals: [] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: (1,7)-(1,8) = "(" - ├── rparen_loc: (1,10)-(1,11) = ")" - ├── equal_loc: ∅ - └── end_keyword_loc: (1,22)-(1,25) = "end" diff --git a/test/prism/snapshots/whitequark/forwarded_kwrestarg_with_additional_kwarg.txt b/test/prism/snapshots/whitequark/forwarded_kwrestarg_with_additional_kwarg.txt deleted file mode 100644 index 32ace5cb3d464e..00000000000000 --- a/test/prism/snapshots/whitequark/forwarded_kwrestarg_with_additional_kwarg.txt +++ /dev/null @@ -1,71 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,41)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,41)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(1,41)) - ├── flags: newline - ├── name: :foo - ├── name_loc: (1,4)-(1,7) = "foo" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (1,8)-(1,10)) - │ ├── flags: ∅ - │ ├── requireds: (length: 0) - │ ├── optionals: (length: 0) - │ ├── rest: ∅ - │ ├── posts: (length: 0) - │ ├── keywords: (length: 0) - │ ├── keyword_rest: - │ │ @ KeywordRestParameterNode (location: (1,8)-(1,10)) - │ │ ├── flags: ∅ - │ │ ├── name: ∅ - │ │ ├── name_loc: ∅ - │ │ └── operator_loc: (1,8)-(1,10) = "**" - │ └── block: ∅ - ├── body: - │ @ StatementsNode (location: (1,13)-(1,36)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,13)-(1,36)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :bar - │ ├── message_loc: (1,13)-(1,16) = "bar" - │ ├── opening_loc: (1,16)-(1,17) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,17)-(1,35)) - │ │ ├── flags: contains_keywords, contains_keyword_splat - │ │ └── arguments: (length: 1) - │ │ └── @ KeywordHashNode (location: (1,17)-(1,35)) - │ │ ├── flags: ∅ - │ │ └── elements: (length: 2) - │ │ ├── @ AssocSplatNode (location: (1,17)-(1,19)) - │ │ │ ├── flags: ∅ - │ │ │ ├── value: ∅ - │ │ │ └── operator_loc: (1,17)-(1,19) = "**" - │ │ └── @ AssocNode (location: (1,21)-(1,35)) - │ │ ├── flags: static_literal - │ │ ├── key: - │ │ │ @ SymbolNode (location: (1,21)-(1,30)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (1,21)-(1,29) = "from_foo" - │ │ │ ├── closing_loc: (1,29)-(1,30) = ":" - │ │ │ └── unescaped: "from_foo" - │ │ ├── value: - │ │ │ @ TrueNode (location: (1,31)-(1,35)) - │ │ │ └── flags: static_literal - │ │ └── operator_loc: ∅ - │ ├── closing_loc: (1,35)-(1,36) = ")" - │ └── block: ∅ - ├── locals: [] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: (1,7)-(1,8) = "(" - ├── rparen_loc: (1,10)-(1,11) = ")" - ├── equal_loc: ∅ - └── end_keyword_loc: (1,38)-(1,41) = "end" diff --git a/test/prism/snapshots/whitequark/forwarded_restarg.txt b/test/prism/snapshots/whitequark/forwarded_restarg.txt deleted file mode 100644 index 3e26b2b60eee44..00000000000000 --- a/test/prism/snapshots/whitequark/forwarded_restarg.txt +++ /dev/null @@ -1,55 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,23)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,23)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(1,23)) - ├── flags: newline - ├── name: :foo - ├── name_loc: (1,4)-(1,7) = "foo" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (1,8)-(1,9)) - │ ├── flags: ∅ - │ ├── requireds: (length: 0) - │ ├── optionals: (length: 0) - │ ├── rest: - │ │ @ RestParameterNode (location: (1,8)-(1,9)) - │ │ ├── flags: ∅ - │ │ ├── name: ∅ - │ │ ├── name_loc: ∅ - │ │ └── operator_loc: (1,8)-(1,9) = "*" - │ ├── posts: (length: 0) - │ ├── keywords: (length: 0) - │ ├── keyword_rest: ∅ - │ └── block: ∅ - ├── body: - │ @ StatementsNode (location: (1,12)-(1,18)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,12)-(1,18)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :bar - │ ├── message_loc: (1,12)-(1,15) = "bar" - │ ├── opening_loc: (1,15)-(1,16) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,16)-(1,17)) - │ │ ├── flags: contains_splat - │ │ └── arguments: (length: 1) - │ │ └── @ SplatNode (location: (1,16)-(1,17)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (1,16)-(1,17) = "*" - │ │ └── expression: ∅ - │ ├── closing_loc: (1,17)-(1,18) = ")" - │ └── block: ∅ - ├── locals: [] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: (1,7)-(1,8) = "(" - ├── rparen_loc: (1,9)-(1,10) = ")" - ├── equal_loc: ∅ - └── end_keyword_loc: (1,20)-(1,23) = "end" diff --git a/test/prism/snapshots/whitequark/gvar.txt b/test/prism/snapshots/whitequark/gvar.txt deleted file mode 100644 index 5191f28e241745..00000000000000 --- a/test/prism/snapshots/whitequark/gvar.txt +++ /dev/null @@ -1,10 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,4)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,4)) - ├── flags: ∅ - └── body: (length: 1) - └── @ GlobalVariableReadNode (location: (1,0)-(1,4)) - ├── flags: newline - └── name: :$foo diff --git a/test/prism/snapshots/whitequark/gvasgn.txt b/test/prism/snapshots/whitequark/gvasgn.txt deleted file mode 100644 index e5bfe44d18ac3d..00000000000000 --- a/test/prism/snapshots/whitequark/gvasgn.txt +++ /dev/null @@ -1,16 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,9)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,9)) - ├── flags: ∅ - └── body: (length: 1) - └── @ GlobalVariableWriteNode (location: (1,0)-(1,9)) - ├── flags: newline - ├── name: :$var - ├── name_loc: (1,0)-(1,4) = "$var" - ├── value: - │ @ IntegerNode (location: (1,7)-(1,9)) - │ ├── flags: static_literal, decimal - │ └── value: 10 - └── operator_loc: (1,5)-(1,6) = "=" diff --git a/test/prism/snapshots/whitequark/hash_empty.txt b/test/prism/snapshots/whitequark/hash_empty.txt deleted file mode 100644 index 3f6fcdd171fd32..00000000000000 --- a/test/prism/snapshots/whitequark/hash_empty.txt +++ /dev/null @@ -1,12 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ HashNode (location: (1,0)-(1,3)) - ├── flags: newline, static_literal - ├── opening_loc: (1,0)-(1,1) = "{" - ├── elements: (length: 0) - └── closing_loc: (1,2)-(1,3) = "}" diff --git a/test/prism/snapshots/whitequark/hash_hashrocket.txt b/test/prism/snapshots/whitequark/hash_hashrocket.txt deleted file mode 100644 index fcf3fe3055ba6f..00000000000000 --- a/test/prism/snapshots/whitequark/hash_hashrocket.txt +++ /dev/null @@ -1,56 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,25)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,25)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ HashNode (location: (1,0)-(1,10)) - │ ├── flags: newline, static_literal - │ ├── opening_loc: (1,0)-(1,1) = "{" - │ ├── elements: (length: 1) - │ │ └── @ AssocNode (location: (1,2)-(1,8)) - │ │ ├── flags: static_literal - │ │ ├── key: - │ │ │ @ IntegerNode (location: (1,2)-(1,3)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── value: - │ │ │ @ IntegerNode (location: (1,7)-(1,8)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ └── operator_loc: (1,4)-(1,6) = "=>" - │ └── closing_loc: (1,9)-(1,10) = "}" - └── @ HashNode (location: (3,0)-(3,25)) - ├── flags: newline - ├── opening_loc: (3,0)-(3,1) = "{" - ├── elements: (length: 2) - │ ├── @ AssocNode (location: (3,2)-(3,8)) - │ │ ├── flags: static_literal - │ │ ├── key: - │ │ │ @ IntegerNode (location: (3,2)-(3,3)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── value: - │ │ │ @ IntegerNode (location: (3,7)-(3,8)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ └── operator_loc: (3,4)-(3,6) = "=>" - │ └── @ AssocNode (location: (3,10)-(3,23)) - │ ├── flags: ∅ - │ ├── key: - │ │ @ SymbolNode (location: (3,10)-(3,14)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (3,10)-(3,11) = ":" - │ │ ├── value_loc: (3,11)-(3,14) = "foo" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "foo" - │ ├── value: - │ │ @ StringNode (location: (3,18)-(3,23)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (3,18)-(3,19) = "\"" - │ │ ├── content_loc: (3,19)-(3,22) = "bar" - │ │ ├── closing_loc: (3,22)-(3,23) = "\"" - │ │ └── unescaped: "bar" - │ └── operator_loc: (3,15)-(3,17) = "=>" - └── closing_loc: (3,24)-(3,25) = "}" diff --git a/test/prism/snapshots/whitequark/hash_kwsplat.txt b/test/prism/snapshots/whitequark/hash_kwsplat.txt deleted file mode 100644 index acccc48b3d67ff..00000000000000 --- a/test/prism/snapshots/whitequark/hash_kwsplat.txt +++ /dev/null @@ -1,40 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,17)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,17)) - ├── flags: ∅ - └── body: (length: 1) - └── @ HashNode (location: (1,0)-(1,17)) - ├── flags: newline - ├── opening_loc: (1,0)-(1,1) = "{" - ├── elements: (length: 2) - │ ├── @ AssocNode (location: (1,2)-(1,8)) - │ │ ├── flags: static_literal - │ │ ├── key: - │ │ │ @ SymbolNode (location: (1,2)-(1,6)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (1,2)-(1,5) = "foo" - │ │ │ ├── closing_loc: (1,5)-(1,6) = ":" - │ │ │ └── unescaped: "foo" - │ │ ├── value: - │ │ │ @ IntegerNode (location: (1,7)-(1,8)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ └── operator_loc: ∅ - │ └── @ AssocSplatNode (location: (1,10)-(1,15)) - │ ├── flags: ∅ - │ ├── value: - │ │ @ CallNode (location: (1,12)-(1,15)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (1,12)-(1,15) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── operator_loc: (1,10)-(1,12) = "**" - └── closing_loc: (1,16)-(1,17) = "}" diff --git a/test/prism/snapshots/whitequark/hash_label.txt b/test/prism/snapshots/whitequark/hash_label.txt deleted file mode 100644 index b321e2185920a1..00000000000000 --- a/test/prism/snapshots/whitequark/hash_label.txt +++ /dev/null @@ -1,26 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,10)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,10)) - ├── flags: ∅ - └── body: (length: 1) - └── @ HashNode (location: (1,0)-(1,10)) - ├── flags: newline, static_literal - ├── opening_loc: (1,0)-(1,1) = "{" - ├── elements: (length: 1) - │ └── @ AssocNode (location: (1,2)-(1,8)) - │ ├── flags: static_literal - │ ├── key: - │ │ @ SymbolNode (location: (1,2)-(1,6)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: ∅ - │ │ ├── value_loc: (1,2)-(1,5) = "foo" - │ │ ├── closing_loc: (1,5)-(1,6) = ":" - │ │ └── unescaped: "foo" - │ ├── value: - │ │ @ IntegerNode (location: (1,7)-(1,8)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ └── operator_loc: ∅ - └── closing_loc: (1,9)-(1,10) = "}" diff --git a/test/prism/snapshots/whitequark/hash_label_end.txt b/test/prism/snapshots/whitequark/hash_label_end.txt deleted file mode 100644 index 9e4accee0044e9..00000000000000 --- a/test/prism/snapshots/whitequark/hash_label_end.txt +++ /dev/null @@ -1,112 +0,0 @@ -@ ProgramNode (location: (1,0)-(5,22)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(5,22)) - ├── flags: ∅ - └── body: (length: 3) - ├── @ CallNode (location: (1,0)-(1,12)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :f - │ ├── message_loc: (1,0)-(1,1) = "f" - │ ├── opening_loc: (1,1)-(1,2) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,2)-(1,11)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IfNode (location: (1,2)-(1,11)) - │ │ ├── flags: newline - │ │ ├── if_keyword_loc: ∅ - │ │ ├── predicate: - │ │ │ @ CallNode (location: (1,2)-(1,3)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :a - │ │ │ ├── message_loc: (1,2)-(1,3) = "a" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── then_keyword_loc: (1,4)-(1,5) = "?" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (1,6)-(1,9)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ StringNode (location: (1,6)-(1,9)) - │ │ │ ├── flags: newline - │ │ │ ├── opening_loc: (1,6)-(1,7) = "\"" - │ │ │ ├── content_loc: (1,7)-(1,8) = "a" - │ │ │ ├── closing_loc: (1,8)-(1,9) = "\"" - │ │ │ └── unescaped: "a" - │ │ ├── subsequent: - │ │ │ @ ElseNode (location: (1,9)-(1,11)) - │ │ │ ├── flags: ∅ - │ │ │ ├── else_keyword_loc: (1,9)-(1,10) = ":" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (1,10)-(1,11)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ IntegerNode (location: (1,10)-(1,11)) - │ │ │ │ ├── flags: newline, static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ └── end_keyword_loc: ∅ - │ │ └── end_keyword_loc: ∅ - │ ├── closing_loc: (1,11)-(1,12) = ")" - │ └── block: ∅ - ├── @ HashNode (location: (3,0)-(3,12)) - │ ├── flags: newline, static_literal - │ ├── opening_loc: (3,0)-(3,1) = "{" - │ ├── elements: (length: 1) - │ │ └── @ AssocNode (location: (3,2)-(3,10)) - │ │ ├── flags: static_literal - │ │ ├── key: - │ │ │ @ SymbolNode (location: (3,2)-(3,8)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (3,2)-(3,3) = "'" - │ │ │ ├── value_loc: (3,3)-(3,6) = "foo" - │ │ │ ├── closing_loc: (3,6)-(3,8) = "':" - │ │ │ └── unescaped: "foo" - │ │ ├── value: - │ │ │ @ IntegerNode (location: (3,9)-(3,10)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ └── operator_loc: ∅ - │ └── closing_loc: (3,11)-(3,12) = "}" - └── @ HashNode (location: (5,0)-(5,22)) - ├── flags: newline - ├── opening_loc: (5,0)-(5,1) = "{" - ├── elements: (length: 2) - │ ├── @ AssocNode (location: (5,2)-(5,10)) - │ │ ├── flags: static_literal - │ │ ├── key: - │ │ │ @ SymbolNode (location: (5,2)-(5,8)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (5,2)-(5,3) = "'" - │ │ │ ├── value_loc: (5,3)-(5,6) = "foo" - │ │ │ ├── closing_loc: (5,6)-(5,8) = "':" - │ │ │ └── unescaped: "foo" - │ │ ├── value: - │ │ │ @ IntegerNode (location: (5,9)-(5,10)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ └── operator_loc: ∅ - │ └── @ AssocNode (location: (5,12)-(5,21)) - │ ├── flags: ∅ - │ ├── key: - │ │ @ SymbolNode (location: (5,12)-(5,18)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (5,12)-(5,13) = "'" - │ │ ├── value_loc: (5,13)-(5,16) = "bar" - │ │ ├── closing_loc: (5,16)-(5,18) = "':" - │ │ └── unescaped: "bar" - │ ├── value: - │ │ @ HashNode (location: (5,19)-(5,21)) - │ │ ├── flags: static_literal - │ │ ├── opening_loc: (5,19)-(5,20) = "{" - │ │ ├── elements: (length: 0) - │ │ └── closing_loc: (5,20)-(5,21) = "}" - │ └── operator_loc: ∅ - └── closing_loc: (5,21)-(5,22) = "}" diff --git a/test/prism/snapshots/whitequark/hash_pair_value_omission.txt b/test/prism/snapshots/whitequark/hash_pair_value_omission.txt deleted file mode 100644 index d87b1ef0f9ffe9..00000000000000 --- a/test/prism/snapshots/whitequark/hash_pair_value_omission.txt +++ /dev/null @@ -1,111 +0,0 @@ -@ ProgramNode (location: (1,0)-(5,7)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(5,7)) - ├── flags: ∅ - └── body: (length: 3) - ├── @ HashNode (location: (1,0)-(1,6)) - │ ├── flags: newline - │ ├── opening_loc: (1,0)-(1,1) = "{" - │ ├── elements: (length: 1) - │ │ └── @ AssocNode (location: (1,1)-(1,5)) - │ │ ├── flags: ∅ - │ │ ├── key: - │ │ │ @ SymbolNode (location: (1,1)-(1,5)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (1,1)-(1,4) = "BAR" - │ │ │ ├── closing_loc: (1,4)-(1,5) = ":" - │ │ │ └── unescaped: "BAR" - │ │ ├── value: - │ │ │ @ ImplicitNode (location: (1,1)-(1,5)) - │ │ │ ├── flags: ∅ - │ │ │ └── value: - │ │ │ @ ConstantReadNode (location: (1,1)-(1,5)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :BAR - │ │ └── operator_loc: ∅ - │ └── closing_loc: (1,5)-(1,6) = "}" - ├── @ HashNode (location: (3,0)-(3,8)) - │ ├── flags: newline - │ ├── opening_loc: (3,0)-(3,1) = "{" - │ ├── elements: (length: 2) - │ │ ├── @ AssocNode (location: (3,1)-(3,3)) - │ │ │ ├── flags: ∅ - │ │ │ ├── key: - │ │ │ │ @ SymbolNode (location: (3,1)-(3,3)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── value_loc: (3,1)-(3,2) = "a" - │ │ │ │ ├── closing_loc: (3,2)-(3,3) = ":" - │ │ │ │ └── unescaped: "a" - │ │ │ ├── value: - │ │ │ │ @ ImplicitNode (location: (3,1)-(3,3)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── value: - │ │ │ │ @ CallNode (location: (3,1)-(3,3)) - │ │ │ │ ├── flags: ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :a - │ │ │ │ ├── message_loc: (3,1)-(3,2) = "a" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── operator_loc: ∅ - │ │ └── @ AssocNode (location: (3,5)-(3,7)) - │ │ ├── flags: ∅ - │ │ ├── key: - │ │ │ @ SymbolNode (location: (3,5)-(3,7)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (3,5)-(3,6) = "b" - │ │ │ ├── closing_loc: (3,6)-(3,7) = ":" - │ │ │ └── unescaped: "b" - │ │ ├── value: - │ │ │ @ ImplicitNode (location: (3,5)-(3,7)) - │ │ │ ├── flags: ∅ - │ │ │ └── value: - │ │ │ @ CallNode (location: (3,5)-(3,7)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (3,5)-(3,6) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: ∅ - │ └── closing_loc: (3,7)-(3,8) = "}" - └── @ HashNode (location: (5,0)-(5,7)) - ├── flags: newline - ├── opening_loc: (5,0)-(5,1) = "{" - ├── elements: (length: 1) - │ └── @ AssocNode (location: (5,1)-(5,6)) - │ ├── flags: ∅ - │ ├── key: - │ │ @ SymbolNode (location: (5,1)-(5,6)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: ∅ - │ │ ├── value_loc: (5,1)-(5,5) = "puts" - │ │ ├── closing_loc: (5,5)-(5,6) = ":" - │ │ └── unescaped: "puts" - │ ├── value: - │ │ @ ImplicitNode (location: (5,1)-(5,6)) - │ │ ├── flags: ∅ - │ │ └── value: - │ │ @ CallNode (location: (5,1)-(5,6)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :puts - │ │ ├── message_loc: (5,1)-(5,5) = "puts" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── operator_loc: ∅ - └── closing_loc: (5,6)-(5,7) = "}" diff --git a/test/prism/snapshots/whitequark/heredoc.txt b/test/prism/snapshots/whitequark/heredoc.txt deleted file mode 100644 index 76b3e94a922b13..00000000000000 --- a/test/prism/snapshots/whitequark/heredoc.txt +++ /dev/null @@ -1,25 +0,0 @@ -@ ProgramNode (location: (1,0)-(11,8)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(11,8)) - ├── flags: ∅ - └── body: (length: 3) - ├── @ StringNode (location: (1,0)-(1,8)) - │ ├── flags: newline - │ ├── opening_loc: (1,0)-(1,8) = "<<'HERE'" - │ ├── content_loc: (2,0)-(4,0) = "foo\nbar\n" - │ ├── closing_loc: (4,0)-(5,0) = "HERE\n" - │ └── unescaped: "foo\nbar\n" - ├── @ StringNode (location: (6,0)-(6,6)) - │ ├── flags: newline - │ ├── opening_loc: (6,0)-(6,6) = "<bar)" - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :=~ - │ │ ├── message_loc: (1,16)-(1,18) = "=~" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (1,19)-(1,24)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ StringNode (location: (1,19)-(1,24)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (1,19)-(1,20) = "'" - │ │ │ ├── content_loc: (1,20)-(1,23) = "bar" - │ │ │ ├── closing_loc: (1,23)-(1,24) = "'" - │ │ │ └── unescaped: "bar" - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── targets: (length: 1) - │ └── @ LocalVariableTargetNode (location: (1,4)-(1,9)) - │ ├── flags: ∅ - │ ├── name: :match - │ └── depth: 0 - └── @ LocalVariableReadNode (location: (1,26)-(1,31)) - ├── flags: newline - ├── name: :match - └── depth: 0 diff --git a/test/prism/snapshots/whitequark/lvasgn.txt b/test/prism/snapshots/whitequark/lvasgn.txt deleted file mode 100644 index 43cb251bd50b0f..00000000000000 --- a/test/prism/snapshots/whitequark/lvasgn.txt +++ /dev/null @@ -1,21 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,13)) -├── flags: ∅ -├── locals: [:var] -└── statements: - @ StatementsNode (location: (1,0)-(1,13)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ LocalVariableWriteNode (location: (1,0)-(1,8)) - │ ├── flags: newline - │ ├── name: :var - │ ├── depth: 0 - │ ├── name_loc: (1,0)-(1,3) = "var" - │ ├── value: - │ │ @ IntegerNode (location: (1,6)-(1,8)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 10 - │ └── operator_loc: (1,4)-(1,5) = "=" - └── @ LocalVariableReadNode (location: (1,10)-(1,13)) - ├── flags: newline - ├── name: :var - └── depth: 0 diff --git a/test/prism/snapshots/whitequark/masgn.txt b/test/prism/snapshots/whitequark/masgn.txt deleted file mode 100644 index a7ce7f5691d480..00000000000000 --- a/test/prism/snapshots/whitequark/masgn.txt +++ /dev/null @@ -1,95 +0,0 @@ -@ ProgramNode (location: (1,0)-(5,20)) -├── flags: ∅ -├── locals: [:foo, :bar, :baz] -└── statements: - @ StatementsNode (location: (1,0)-(5,20)) - ├── flags: ∅ - └── body: (length: 3) - ├── @ MultiWriteNode (location: (1,0)-(1,17)) - │ ├── flags: newline - │ ├── lefts: (length: 2) - │ │ ├── @ LocalVariableTargetNode (location: (1,1)-(1,4)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :foo - │ │ │ └── depth: 0 - │ │ └── @ LocalVariableTargetNode (location: (1,6)-(1,9)) - │ │ ├── flags: ∅ - │ │ ├── name: :bar - │ │ └── depth: 0 - │ ├── rest: ∅ - │ ├── rights: (length: 0) - │ ├── lparen_loc: (1,0)-(1,1) = "(" - │ ├── rparen_loc: (1,9)-(1,10) = ")" - │ ├── operator_loc: (1,11)-(1,12) = "=" - │ └── value: - │ @ ArrayNode (location: (1,13)-(1,17)) - │ ├── flags: static_literal - │ ├── elements: (length: 2) - │ │ ├── @ IntegerNode (location: (1,13)-(1,14)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── @ IntegerNode (location: (1,16)-(1,17)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── opening_loc: ∅ - │ └── closing_loc: ∅ - ├── @ MultiWriteNode (location: (3,0)-(3,15)) - │ ├── flags: newline - │ ├── lefts: (length: 2) - │ │ ├── @ LocalVariableTargetNode (location: (3,0)-(3,3)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :foo - │ │ │ └── depth: 0 - │ │ └── @ LocalVariableTargetNode (location: (3,5)-(3,8)) - │ │ ├── flags: ∅ - │ │ ├── name: :bar - │ │ └── depth: 0 - │ ├── rest: ∅ - │ ├── rights: (length: 0) - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── operator_loc: (3,9)-(3,10) = "=" - │ └── value: - │ @ ArrayNode (location: (3,11)-(3,15)) - │ ├── flags: static_literal - │ ├── elements: (length: 2) - │ │ ├── @ IntegerNode (location: (3,11)-(3,12)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── @ IntegerNode (location: (3,14)-(3,15)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── opening_loc: ∅ - │ └── closing_loc: ∅ - └── @ MultiWriteNode (location: (5,0)-(5,20)) - ├── flags: newline - ├── lefts: (length: 3) - │ ├── @ LocalVariableTargetNode (location: (5,0)-(5,3)) - │ │ ├── flags: ∅ - │ │ ├── name: :foo - │ │ └── depth: 0 - │ ├── @ LocalVariableTargetNode (location: (5,5)-(5,8)) - │ │ ├── flags: ∅ - │ │ ├── name: :bar - │ │ └── depth: 0 - │ └── @ LocalVariableTargetNode (location: (5,10)-(5,13)) - │ ├── flags: ∅ - │ ├── name: :baz - │ └── depth: 0 - ├── rest: ∅ - ├── rights: (length: 0) - ├── lparen_loc: ∅ - ├── rparen_loc: ∅ - ├── operator_loc: (5,14)-(5,15) = "=" - └── value: - @ ArrayNode (location: (5,16)-(5,20)) - ├── flags: static_literal - ├── elements: (length: 2) - │ ├── @ IntegerNode (location: (5,16)-(5,17)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ └── @ IntegerNode (location: (5,19)-(5,20)) - │ ├── flags: static_literal, decimal - │ └── value: 2 - ├── opening_loc: ∅ - └── closing_loc: ∅ diff --git a/test/prism/snapshots/whitequark/masgn_attr.txt b/test/prism/snapshots/whitequark/masgn_attr.txt deleted file mode 100644 index 4e7b85e9608f60..00000000000000 --- a/test/prism/snapshots/whitequark/masgn_attr.txt +++ /dev/null @@ -1,96 +0,0 @@ -@ ProgramNode (location: (1,0)-(5,18)) -├── flags: ∅ -├── locals: [:foo] -└── statements: - @ StatementsNode (location: (1,0)-(5,18)) - ├── flags: ∅ - └── body: (length: 3) - ├── @ MultiWriteNode (location: (1,0)-(1,17)) - │ ├── flags: newline - │ ├── lefts: (length: 2) - │ │ ├── @ CallTargetNode (location: (1,0)-(1,6)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: - │ │ │ │ @ SelfNode (location: (1,0)-(1,4)) - │ │ │ │ └── flags: ∅ - │ │ │ ├── call_operator_loc: (1,4)-(1,5) = "." - │ │ │ ├── name: :A= - │ │ │ └── message_loc: (1,5)-(1,6) = "A" - │ │ └── @ LocalVariableTargetNode (location: (1,8)-(1,11)) - │ │ ├── flags: ∅ - │ │ ├── name: :foo - │ │ └── depth: 0 - │ ├── rest: ∅ - │ ├── rights: (length: 0) - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── operator_loc: (1,12)-(1,13) = "=" - │ └── value: - │ @ LocalVariableReadNode (location: (1,14)-(1,17)) - │ ├── flags: ∅ - │ ├── name: :foo - │ └── depth: 0 - ├── @ MultiWriteNode (location: (3,0)-(3,24)) - │ ├── flags: newline - │ ├── lefts: (length: 2) - │ │ ├── @ CallTargetNode (location: (3,0)-(3,6)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: - │ │ │ │ @ SelfNode (location: (3,0)-(3,4)) - │ │ │ │ └── flags: ∅ - │ │ │ ├── call_operator_loc: (3,4)-(3,5) = "." - │ │ │ ├── name: :a= - │ │ │ └── message_loc: (3,5)-(3,6) = "a" - │ │ └── @ IndexTargetNode (location: (3,8)-(3,18)) - │ │ ├── flags: attribute_write, ignore_visibility - │ │ ├── receiver: - │ │ │ @ SelfNode (location: (3,8)-(3,12)) - │ │ │ └── flags: ∅ - │ │ ├── opening_loc: (3,12)-(3,13) = "[" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (3,13)-(3,17)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 2) - │ │ │ ├── @ IntegerNode (location: (3,13)-(3,14)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ └── @ IntegerNode (location: (3,16)-(3,17)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ ├── closing_loc: (3,17)-(3,18) = "]" - │ │ └── block: ∅ - │ ├── rest: ∅ - │ ├── rights: (length: 0) - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── operator_loc: (3,19)-(3,20) = "=" - │ └── value: - │ @ LocalVariableReadNode (location: (3,21)-(3,24)) - │ ├── flags: ∅ - │ ├── name: :foo - │ └── depth: 0 - └── @ MultiWriteNode (location: (5,0)-(5,18)) - ├── flags: newline - ├── lefts: (length: 2) - │ ├── @ CallTargetNode (location: (5,0)-(5,7)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: - │ │ │ @ SelfNode (location: (5,0)-(5,4)) - │ │ │ └── flags: ∅ - │ │ ├── call_operator_loc: (5,4)-(5,6) = "::" - │ │ ├── name: :a= - │ │ └── message_loc: (5,6)-(5,7) = "a" - │ └── @ LocalVariableTargetNode (location: (5,9)-(5,12)) - │ ├── flags: ∅ - │ ├── name: :foo - │ └── depth: 0 - ├── rest: ∅ - ├── rights: (length: 0) - ├── lparen_loc: ∅ - ├── rparen_loc: ∅ - ├── operator_loc: (5,13)-(5,14) = "=" - └── value: - @ LocalVariableReadNode (location: (5,15)-(5,18)) - ├── flags: ∅ - ├── name: :foo - └── depth: 0 diff --git a/test/prism/snapshots/whitequark/masgn_cmd.txt b/test/prism/snapshots/whitequark/masgn_cmd.txt deleted file mode 100644 index 8ca2afbba0b105..00000000000000 --- a/test/prism/snapshots/whitequark/masgn_cmd.txt +++ /dev/null @@ -1,41 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,16)) -├── flags: ∅ -├── locals: [:foo, :bar] -└── statements: - @ StatementsNode (location: (1,0)-(1,16)) - ├── flags: ∅ - └── body: (length: 1) - └── @ MultiWriteNode (location: (1,0)-(1,16)) - ├── flags: newline - ├── lefts: (length: 2) - │ ├── @ LocalVariableTargetNode (location: (1,0)-(1,3)) - │ │ ├── flags: ∅ - │ │ ├── name: :foo - │ │ └── depth: 0 - │ └── @ LocalVariableTargetNode (location: (1,5)-(1,8)) - │ ├── flags: ∅ - │ ├── name: :bar - │ └── depth: 0 - ├── rest: ∅ - ├── rights: (length: 0) - ├── lparen_loc: ∅ - ├── rparen_loc: ∅ - ├── operator_loc: (1,9)-(1,10) = "=" - └── value: - @ CallNode (location: (1,11)-(1,16)) - ├── flags: ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :m - ├── message_loc: (1,11)-(1,12) = "m" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,13)-(1,16)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ LocalVariableReadNode (location: (1,13)-(1,16)) - │ ├── flags: ∅ - │ ├── name: :foo - │ └── depth: 0 - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/whitequark/masgn_const.txt b/test/prism/snapshots/whitequark/masgn_const.txt deleted file mode 100644 index 160b0b0f033552..00000000000000 --- a/test/prism/snapshots/whitequark/masgn_const.txt +++ /dev/null @@ -1,55 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,18)) -├── flags: ∅ -├── locals: [:foo] -└── statements: - @ StatementsNode (location: (1,0)-(3,18)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ MultiWriteNode (location: (1,0)-(1,14)) - │ ├── flags: newline - │ ├── lefts: (length: 2) - │ │ ├── @ ConstantPathTargetNode (location: (1,0)-(1,3)) - │ │ │ ├── flags: ∅ - │ │ │ ├── parent: ∅ - │ │ │ ├── name: :A - │ │ │ ├── delimiter_loc: (1,0)-(1,2) = "::" - │ │ │ └── name_loc: (1,2)-(1,3) = "A" - │ │ └── @ LocalVariableTargetNode (location: (1,5)-(1,8)) - │ │ ├── flags: ∅ - │ │ ├── name: :foo - │ │ └── depth: 0 - │ ├── rest: ∅ - │ ├── rights: (length: 0) - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── operator_loc: (1,9)-(1,10) = "=" - │ └── value: - │ @ LocalVariableReadNode (location: (1,11)-(1,14)) - │ ├── flags: ∅ - │ ├── name: :foo - │ └── depth: 0 - └── @ MultiWriteNode (location: (3,0)-(3,18)) - ├── flags: newline - ├── lefts: (length: 2) - │ ├── @ ConstantPathTargetNode (location: (3,0)-(3,7)) - │ │ ├── flags: ∅ - │ │ ├── parent: - │ │ │ @ SelfNode (location: (3,0)-(3,4)) - │ │ │ └── flags: ∅ - │ │ ├── name: :A - │ │ ├── delimiter_loc: (3,4)-(3,6) = "::" - │ │ └── name_loc: (3,6)-(3,7) = "A" - │ └── @ LocalVariableTargetNode (location: (3,9)-(3,12)) - │ ├── flags: ∅ - │ ├── name: :foo - │ └── depth: 0 - ├── rest: ∅ - ├── rights: (length: 0) - ├── lparen_loc: ∅ - ├── rparen_loc: ∅ - ├── operator_loc: (3,13)-(3,14) = "=" - └── value: - @ LocalVariableReadNode (location: (3,15)-(3,18)) - ├── flags: ∅ - ├── name: :foo - └── depth: 0 diff --git a/test/prism/snapshots/whitequark/masgn_nested.txt b/test/prism/snapshots/whitequark/masgn_nested.txt deleted file mode 100644 index db92f24ab5f62d..00000000000000 --- a/test/prism/snapshots/whitequark/masgn_nested.txt +++ /dev/null @@ -1,77 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,15)) -├── flags: ∅ -├── locals: [:b, :a, :c] -└── statements: - @ StatementsNode (location: (1,0)-(3,15)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ MultiWriteNode (location: (1,0)-(1,13)) - │ ├── flags: newline - │ ├── lefts: (length: 1) - │ │ └── @ MultiTargetNode (location: (1,1)-(1,6)) - │ │ ├── flags: ∅ - │ │ ├── lefts: (length: 1) - │ │ │ └── @ LocalVariableTargetNode (location: (1,2)-(1,3)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :b - │ │ │ └── depth: 0 - │ │ ├── rest: - │ │ │ @ ImplicitRestNode (location: (1,3)-(1,4)) - │ │ │ └── flags: ∅ - │ │ ├── rights: (length: 0) - │ │ ├── lparen_loc: (1,1)-(1,2) = "(" - │ │ └── rparen_loc: (1,5)-(1,6) = ")" - │ ├── rest: ∅ - │ ├── rights: (length: 0) - │ ├── lparen_loc: (1,0)-(1,1) = "(" - │ ├── rparen_loc: (1,6)-(1,7) = ")" - │ ├── operator_loc: (1,8)-(1,9) = "=" - │ └── value: - │ @ CallNode (location: (1,10)-(1,13)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (1,10)-(1,13) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── @ MultiWriteNode (location: (3,0)-(3,15)) - ├── flags: newline - ├── lefts: (length: 2) - │ ├── @ LocalVariableTargetNode (location: (3,0)-(3,1)) - │ │ ├── flags: ∅ - │ │ ├── name: :a - │ │ └── depth: 0 - │ └── @ MultiTargetNode (location: (3,3)-(3,9)) - │ ├── flags: ∅ - │ ├── lefts: (length: 2) - │ │ ├── @ LocalVariableTargetNode (location: (3,4)-(3,5)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :b - │ │ │ └── depth: 0 - │ │ └── @ LocalVariableTargetNode (location: (3,7)-(3,8)) - │ │ ├── flags: ∅ - │ │ ├── name: :c - │ │ └── depth: 0 - │ ├── rest: ∅ - │ ├── rights: (length: 0) - │ ├── lparen_loc: (3,3)-(3,4) = "(" - │ └── rparen_loc: (3,8)-(3,9) = ")" - ├── rest: ∅ - ├── rights: (length: 0) - ├── lparen_loc: ∅ - ├── rparen_loc: ∅ - ├── operator_loc: (3,10)-(3,11) = "=" - └── value: - @ CallNode (location: (3,12)-(3,15)) - ├── flags: variable_call, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :foo - ├── message_loc: (3,12)-(3,15) = "foo" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/whitequark/masgn_splat.txt b/test/prism/snapshots/whitequark/masgn_splat.txt deleted file mode 100644 index e50174d9de5dd9..00000000000000 --- a/test/prism/snapshots/whitequark/masgn_splat.txt +++ /dev/null @@ -1,323 +0,0 @@ -@ ProgramNode (location: (1,0)-(19,16)) -├── flags: ∅ -├── locals: [:c, :d, :b, :a] -└── statements: - @ StatementsNode (location: (1,0)-(19,16)) - ├── flags: ∅ - └── body: (length: 10) - ├── @ MultiWriteNode (location: (1,0)-(1,7)) - │ ├── flags: newline - │ ├── lefts: (length: 0) - │ ├── rest: - │ │ @ SplatNode (location: (1,0)-(1,1)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (1,0)-(1,1) = "*" - │ │ └── expression: ∅ - │ ├── rights: (length: 0) - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── operator_loc: (1,2)-(1,3) = "=" - │ └── value: - │ @ CallNode (location: (1,4)-(1,7)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :bar - │ ├── message_loc: (1,4)-(1,7) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ MultiWriteNode (location: (3,0)-(3,13)) - │ ├── flags: newline - │ ├── lefts: (length: 0) - │ ├── rest: - │ │ @ SplatNode (location: (3,0)-(3,1)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (3,0)-(3,1) = "*" - │ │ └── expression: ∅ - │ ├── rights: (length: 2) - │ │ ├── @ LocalVariableTargetNode (location: (3,3)-(3,4)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :c - │ │ │ └── depth: 0 - │ │ └── @ LocalVariableTargetNode (location: (3,6)-(3,7)) - │ │ ├── flags: ∅ - │ │ ├── name: :d - │ │ └── depth: 0 - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── operator_loc: (3,8)-(3,9) = "=" - │ └── value: - │ @ CallNode (location: (3,10)-(3,13)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :bar - │ ├── message_loc: (3,10)-(3,13) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ MultiWriteNode (location: (5,0)-(5,8)) - │ ├── flags: newline - │ ├── lefts: (length: 0) - │ ├── rest: - │ │ @ SplatNode (location: (5,0)-(5,2)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (5,0)-(5,1) = "*" - │ │ └── expression: - │ │ @ LocalVariableTargetNode (location: (5,1)-(5,2)) - │ │ ├── flags: ∅ - │ │ ├── name: :b - │ │ └── depth: 0 - │ ├── rights: (length: 0) - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── operator_loc: (5,3)-(5,4) = "=" - │ └── value: - │ @ CallNode (location: (5,5)-(5,8)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :bar - │ ├── message_loc: (5,5)-(5,8) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ MultiWriteNode (location: (7,0)-(7,11)) - │ ├── flags: newline - │ ├── lefts: (length: 0) - │ ├── rest: - │ │ @ SplatNode (location: (7,0)-(7,2)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (7,0)-(7,1) = "*" - │ │ └── expression: - │ │ @ LocalVariableTargetNode (location: (7,1)-(7,2)) - │ │ ├── flags: ∅ - │ │ ├── name: :b - │ │ └── depth: 0 - │ ├── rights: (length: 1) - │ │ └── @ LocalVariableTargetNode (location: (7,4)-(7,5)) - │ │ ├── flags: ∅ - │ │ ├── name: :c - │ │ └── depth: 0 - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── operator_loc: (7,6)-(7,7) = "=" - │ └── value: - │ @ CallNode (location: (7,8)-(7,11)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :bar - │ ├── message_loc: (7,8)-(7,11) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ MultiWriteNode (location: (9,0)-(9,18)) - │ ├── flags: newline - │ ├── lefts: (length: 2) - │ │ ├── @ InstanceVariableTargetNode (location: (9,0)-(9,4)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :@foo - │ │ └── @ ClassVariableTargetNode (location: (9,6)-(9,11)) - │ │ ├── flags: ∅ - │ │ └── name: :@@bar - │ ├── rest: ∅ - │ ├── rights: (length: 0) - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── operator_loc: (9,12)-(9,13) = "=" - │ └── value: - │ @ ArrayNode (location: (9,14)-(9,18)) - │ ├── flags: contains_splat - │ ├── elements: (length: 1) - │ │ └── @ SplatNode (location: (9,14)-(9,18)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (9,14)-(9,15) = "*" - │ │ └── expression: - │ │ @ CallNode (location: (9,15)-(9,18)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (9,15)-(9,18) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── opening_loc: ∅ - │ └── closing_loc: ∅ - ├── @ MultiWriteNode (location: (11,0)-(11,10)) - │ ├── flags: newline - │ ├── lefts: (length: 1) - │ │ └── @ LocalVariableTargetNode (location: (11,0)-(11,1)) - │ │ ├── flags: ∅ - │ │ ├── name: :a - │ │ └── depth: 0 - │ ├── rest: - │ │ @ SplatNode (location: (11,3)-(11,4)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (11,3)-(11,4) = "*" - │ │ └── expression: ∅ - │ ├── rights: (length: 0) - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── operator_loc: (11,5)-(11,6) = "=" - │ └── value: - │ @ CallNode (location: (11,7)-(11,10)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :bar - │ ├── message_loc: (11,7)-(11,10) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ MultiWriteNode (location: (13,0)-(13,13)) - │ ├── flags: newline - │ ├── lefts: (length: 1) - │ │ └── @ LocalVariableTargetNode (location: (13,0)-(13,1)) - │ │ ├── flags: ∅ - │ │ ├── name: :a - │ │ └── depth: 0 - │ ├── rest: - │ │ @ SplatNode (location: (13,3)-(13,4)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (13,3)-(13,4) = "*" - │ │ └── expression: ∅ - │ ├── rights: (length: 1) - │ │ └── @ LocalVariableTargetNode (location: (13,6)-(13,7)) - │ │ ├── flags: ∅ - │ │ ├── name: :c - │ │ └── depth: 0 - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── operator_loc: (13,8)-(13,9) = "=" - │ └── value: - │ @ CallNode (location: (13,10)-(13,13)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :bar - │ ├── message_loc: (13,10)-(13,13) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ MultiWriteNode (location: (15,0)-(15,11)) - │ ├── flags: newline - │ ├── lefts: (length: 1) - │ │ └── @ LocalVariableTargetNode (location: (15,0)-(15,1)) - │ │ ├── flags: ∅ - │ │ ├── name: :a - │ │ └── depth: 0 - │ ├── rest: - │ │ @ SplatNode (location: (15,3)-(15,5)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (15,3)-(15,4) = "*" - │ │ └── expression: - │ │ @ LocalVariableTargetNode (location: (15,4)-(15,5)) - │ │ ├── flags: ∅ - │ │ ├── name: :b - │ │ └── depth: 0 - │ ├── rights: (length: 0) - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── operator_loc: (15,6)-(15,7) = "=" - │ └── value: - │ @ CallNode (location: (15,8)-(15,11)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :bar - │ ├── message_loc: (15,8)-(15,11) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ MultiWriteNode (location: (17,0)-(17,14)) - │ ├── flags: newline - │ ├── lefts: (length: 1) - │ │ └── @ LocalVariableTargetNode (location: (17,0)-(17,1)) - │ │ ├── flags: ∅ - │ │ ├── name: :a - │ │ └── depth: 0 - │ ├── rest: - │ │ @ SplatNode (location: (17,3)-(17,5)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (17,3)-(17,4) = "*" - │ │ └── expression: - │ │ @ LocalVariableTargetNode (location: (17,4)-(17,5)) - │ │ ├── flags: ∅ - │ │ ├── name: :b - │ │ └── depth: 0 - │ ├── rights: (length: 1) - │ │ └── @ LocalVariableTargetNode (location: (17,7)-(17,8)) - │ │ ├── flags: ∅ - │ │ ├── name: :c - │ │ └── depth: 0 - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── operator_loc: (17,9)-(17,10) = "=" - │ └── value: - │ @ CallNode (location: (17,11)-(17,14)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :bar - │ ├── message_loc: (17,11)-(17,14) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── @ MultiWriteNode (location: (19,0)-(19,16)) - ├── flags: newline - ├── lefts: (length: 2) - │ ├── @ LocalVariableTargetNode (location: (19,0)-(19,1)) - │ │ ├── flags: ∅ - │ │ ├── name: :a - │ │ └── depth: 0 - │ └── @ LocalVariableTargetNode (location: (19,3)-(19,4)) - │ ├── flags: ∅ - │ ├── name: :b - │ └── depth: 0 - ├── rest: ∅ - ├── rights: (length: 0) - ├── lparen_loc: ∅ - ├── rparen_loc: ∅ - ├── operator_loc: (19,5)-(19,6) = "=" - └── value: - @ ArrayNode (location: (19,7)-(19,16)) - ├── flags: contains_splat - ├── elements: (length: 2) - │ ├── @ SplatNode (location: (19,7)-(19,11)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (19,7)-(19,8) = "*" - │ │ └── expression: - │ │ @ CallNode (location: (19,8)-(19,11)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (19,8)-(19,11) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── @ CallNode (location: (19,13)-(19,16)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :bar - │ ├── message_loc: (19,13)-(19,16) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── opening_loc: ∅ - └── closing_loc: ∅ diff --git a/test/prism/snapshots/whitequark/method_definition_in_while_cond.txt b/test/prism/snapshots/whitequark/method_definition_in_while_cond.txt deleted file mode 100644 index 34a55fbe02f7b9..00000000000000 --- a/test/prism/snapshots/whitequark/method_definition_in_while_cond.txt +++ /dev/null @@ -1,223 +0,0 @@ -@ ProgramNode (location: (1,0)-(7,47)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(7,47)) - ├── flags: ∅ - └── body: (length: 4) - ├── @ WhileNode (location: (1,0)-(1,45)) - │ ├── flags: newline - │ ├── keyword_loc: (1,0)-(1,5) = "while" - │ ├── closing_loc: (1,42)-(1,45) = "end" - │ ├── predicate: - │ │ @ DefNode (location: (1,6)-(1,33)) - │ │ ├── flags: ∅ - │ │ ├── name: :foo - │ │ ├── name_loc: (1,10)-(1,13) = "foo" - │ │ ├── receiver: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (1,14)-(1,28)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 0) - │ │ │ ├── optionals: (length: 1) - │ │ │ │ └── @ OptionalParameterNode (location: (1,14)-(1,28)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :a - │ │ │ │ ├── name_loc: (1,14)-(1,15) = "a" - │ │ │ │ ├── operator_loc: (1,16)-(1,17) = "=" - │ │ │ │ └── value: - │ │ │ │ @ CallNode (location: (1,18)-(1,28)) - │ │ │ │ ├── flags: ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :tap - │ │ │ │ ├── message_loc: (1,18)-(1,21) = "tap" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: - │ │ │ │ @ BlockNode (location: (1,22)-(1,28)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── locals: [] - │ │ │ │ ├── parameters: ∅ - │ │ │ │ ├── body: ∅ - │ │ │ │ ├── opening_loc: (1,22)-(1,24) = "do" - │ │ │ │ └── closing_loc: (1,25)-(1,28) = "end" - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── body: ∅ - │ │ ├── locals: [:a] - │ │ ├── def_keyword_loc: (1,6)-(1,9) = "def" - │ │ ├── operator_loc: ∅ - │ │ ├── lparen_loc: ∅ - │ │ ├── rparen_loc: ∅ - │ │ ├── equal_loc: ∅ - │ │ └── end_keyword_loc: (1,30)-(1,33) = "end" - │ └── statements: - │ @ StatementsNode (location: (1,35)-(1,40)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ BreakNode (location: (1,35)-(1,40)) - │ ├── flags: newline - │ ├── arguments: ∅ - │ └── keyword_loc: (1,35)-(1,40) = "break" - ├── @ WhileNode (location: (3,0)-(3,42)) - │ ├── flags: newline - │ ├── keyword_loc: (3,0)-(3,5) = "while" - │ ├── closing_loc: (3,39)-(3,42) = "end" - │ ├── predicate: - │ │ @ DefNode (location: (3,6)-(3,30)) - │ │ ├── flags: ∅ - │ │ ├── name: :foo - │ │ ├── name_loc: (3,10)-(3,13) = "foo" - │ │ ├── receiver: ∅ - │ │ ├── parameters: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (3,15)-(3,25)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (3,15)-(3,25)) - │ │ │ ├── flags: newline, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :tap - │ │ │ ├── message_loc: (3,15)-(3,18) = "tap" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: - │ │ │ @ BlockNode (location: (3,19)-(3,25)) - │ │ │ ├── flags: ∅ - │ │ │ ├── locals: [] - │ │ │ ├── parameters: ∅ - │ │ │ ├── body: ∅ - │ │ │ ├── opening_loc: (3,19)-(3,21) = "do" - │ │ │ └── closing_loc: (3,22)-(3,25) = "end" - │ │ ├── locals: [] - │ │ ├── def_keyword_loc: (3,6)-(3,9) = "def" - │ │ ├── operator_loc: ∅ - │ │ ├── lparen_loc: ∅ - │ │ ├── rparen_loc: ∅ - │ │ ├── equal_loc: ∅ - │ │ └── end_keyword_loc: (3,27)-(3,30) = "end" - │ └── statements: - │ @ StatementsNode (location: (3,32)-(3,37)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ BreakNode (location: (3,32)-(3,37)) - │ ├── flags: newline - │ ├── arguments: ∅ - │ └── keyword_loc: (3,32)-(3,37) = "break" - ├── @ WhileNode (location: (5,0)-(5,50)) - │ ├── flags: newline - │ ├── keyword_loc: (5,0)-(5,5) = "while" - │ ├── closing_loc: (5,47)-(5,50) = "end" - │ ├── predicate: - │ │ @ DefNode (location: (5,6)-(5,38)) - │ │ ├── flags: ∅ - │ │ ├── name: :foo - │ │ ├── name_loc: (5,15)-(5,18) = "foo" - │ │ ├── receiver: - │ │ │ @ SelfNode (location: (5,10)-(5,14)) - │ │ │ └── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (5,19)-(5,33)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 0) - │ │ │ ├── optionals: (length: 1) - │ │ │ │ └── @ OptionalParameterNode (location: (5,19)-(5,33)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :a - │ │ │ │ ├── name_loc: (5,19)-(5,20) = "a" - │ │ │ │ ├── operator_loc: (5,21)-(5,22) = "=" - │ │ │ │ └── value: - │ │ │ │ @ CallNode (location: (5,23)-(5,33)) - │ │ │ │ ├── flags: ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :tap - │ │ │ │ ├── message_loc: (5,23)-(5,26) = "tap" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: - │ │ │ │ @ BlockNode (location: (5,27)-(5,33)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── locals: [] - │ │ │ │ ├── parameters: ∅ - │ │ │ │ ├── body: ∅ - │ │ │ │ ├── opening_loc: (5,27)-(5,29) = "do" - │ │ │ │ └── closing_loc: (5,30)-(5,33) = "end" - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── body: ∅ - │ │ ├── locals: [:a] - │ │ ├── def_keyword_loc: (5,6)-(5,9) = "def" - │ │ ├── operator_loc: (5,14)-(5,15) = "." - │ │ ├── lparen_loc: ∅ - │ │ ├── rparen_loc: ∅ - │ │ ├── equal_loc: ∅ - │ │ └── end_keyword_loc: (5,35)-(5,38) = "end" - │ └── statements: - │ @ StatementsNode (location: (5,40)-(5,45)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ BreakNode (location: (5,40)-(5,45)) - │ ├── flags: newline - │ ├── arguments: ∅ - │ └── keyword_loc: (5,40)-(5,45) = "break" - └── @ WhileNode (location: (7,0)-(7,47)) - ├── flags: newline - ├── keyword_loc: (7,0)-(7,5) = "while" - ├── closing_loc: (7,44)-(7,47) = "end" - ├── predicate: - │ @ DefNode (location: (7,6)-(7,35)) - │ ├── flags: ∅ - │ ├── name: :foo - │ ├── name_loc: (7,15)-(7,18) = "foo" - │ ├── receiver: - │ │ @ SelfNode (location: (7,10)-(7,14)) - │ │ └── flags: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (7,20)-(7,30)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (7,20)-(7,30)) - │ │ ├── flags: newline, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :tap - │ │ ├── message_loc: (7,20)-(7,23) = "tap" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: - │ │ @ BlockNode (location: (7,24)-(7,30)) - │ │ ├── flags: ∅ - │ │ ├── locals: [] - │ │ ├── parameters: ∅ - │ │ ├── body: ∅ - │ │ ├── opening_loc: (7,24)-(7,26) = "do" - │ │ └── closing_loc: (7,27)-(7,30) = "end" - │ ├── locals: [] - │ ├── def_keyword_loc: (7,6)-(7,9) = "def" - │ ├── operator_loc: (7,14)-(7,15) = "." - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (7,32)-(7,35) = "end" - └── statements: - @ StatementsNode (location: (7,37)-(7,42)) - ├── flags: ∅ - └── body: (length: 1) - └── @ BreakNode (location: (7,37)-(7,42)) - ├── flags: newline - ├── arguments: ∅ - └── keyword_loc: (7,37)-(7,42) = "break" diff --git a/test/prism/snapshots/whitequark/module.txt b/test/prism/snapshots/whitequark/module.txt deleted file mode 100644 index 2989be01094053..00000000000000 --- a/test/prism/snapshots/whitequark/module.txt +++ /dev/null @@ -1,18 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,15)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,15)) - ├── flags: ∅ - └── body: (length: 1) - └── @ ModuleNode (location: (1,0)-(1,15)) - ├── flags: newline - ├── locals: [] - ├── module_keyword_loc: (1,0)-(1,6) = "module" - ├── constant_path: - │ @ ConstantReadNode (location: (1,7)-(1,10)) - │ ├── flags: ∅ - │ └── name: :Foo - ├── body: ∅ - ├── end_keyword_loc: (1,12)-(1,15) = "end" - └── name: :Foo diff --git a/test/prism/snapshots/whitequark/multiple_pattern_matches.txt b/test/prism/snapshots/whitequark/multiple_pattern_matches.txt deleted file mode 100644 index 24cf259e08f7d9..00000000000000 --- a/test/prism/snapshots/whitequark/multiple_pattern_matches.txt +++ /dev/null @@ -1,203 +0,0 @@ -@ ProgramNode (location: (1,0)-(5,12)) -├── flags: ∅ -├── locals: [:a] -└── statements: - @ StatementsNode (location: (1,0)-(5,12)) - ├── flags: ∅ - └── body: (length: 4) - ├── @ MatchRequiredNode (location: (1,0)-(1,12)) - │ ├── flags: newline - │ ├── value: - │ │ @ HashNode (location: (1,0)-(1,6)) - │ │ ├── flags: static_literal - │ │ ├── opening_loc: (1,0)-(1,1) = "{" - │ │ ├── elements: (length: 1) - │ │ │ └── @ AssocNode (location: (1,1)-(1,5)) - │ │ │ ├── flags: static_literal - │ │ │ ├── key: - │ │ │ │ @ SymbolNode (location: (1,1)-(1,3)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── value_loc: (1,1)-(1,2) = "a" - │ │ │ │ ├── closing_loc: (1,2)-(1,3) = ":" - │ │ │ │ └── unescaped: "a" - │ │ │ ├── value: - │ │ │ │ @ IntegerNode (location: (1,4)-(1,5)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 0 - │ │ │ └── operator_loc: ∅ - │ │ └── closing_loc: (1,5)-(1,6) = "}" - │ ├── pattern: - │ │ @ HashPatternNode (location: (1,10)-(1,12)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── elements: (length: 1) - │ │ │ └── @ AssocNode (location: (1,10)-(1,12)) - │ │ │ ├── flags: ∅ - │ │ │ ├── key: - │ │ │ │ @ SymbolNode (location: (1,10)-(1,12)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── value_loc: (1,10)-(1,11) = "a" - │ │ │ │ ├── closing_loc: (1,11)-(1,12) = ":" - │ │ │ │ └── unescaped: "a" - │ │ │ ├── value: - │ │ │ │ @ ImplicitNode (location: (1,10)-(1,11)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── value: - │ │ │ │ @ LocalVariableTargetNode (location: (1,10)-(1,11)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :a - │ │ │ │ └── depth: 0 - │ │ │ └── operator_loc: ∅ - │ │ ├── rest: ∅ - │ │ ├── opening_loc: ∅ - │ │ └── closing_loc: ∅ - │ └── operator_loc: (1,7)-(1,9) = "=>" - ├── @ MatchRequiredNode (location: (2,0)-(2,12)) - │ ├── flags: newline - │ ├── value: - │ │ @ HashNode (location: (2,0)-(2,6)) - │ │ ├── flags: static_literal - │ │ ├── opening_loc: (2,0)-(2,1) = "{" - │ │ ├── elements: (length: 1) - │ │ │ └── @ AssocNode (location: (2,1)-(2,5)) - │ │ │ ├── flags: static_literal - │ │ │ ├── key: - │ │ │ │ @ SymbolNode (location: (2,1)-(2,3)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── value_loc: (2,1)-(2,2) = "a" - │ │ │ │ ├── closing_loc: (2,2)-(2,3) = ":" - │ │ │ │ └── unescaped: "a" - │ │ │ ├── value: - │ │ │ │ @ IntegerNode (location: (2,4)-(2,5)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 0 - │ │ │ └── operator_loc: ∅ - │ │ └── closing_loc: (2,5)-(2,6) = "}" - │ ├── pattern: - │ │ @ HashPatternNode (location: (2,10)-(2,12)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── elements: (length: 1) - │ │ │ └── @ AssocNode (location: (2,10)-(2,12)) - │ │ │ ├── flags: ∅ - │ │ │ ├── key: - │ │ │ │ @ SymbolNode (location: (2,10)-(2,12)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── value_loc: (2,10)-(2,11) = "a" - │ │ │ │ ├── closing_loc: (2,11)-(2,12) = ":" - │ │ │ │ └── unescaped: "a" - │ │ │ ├── value: - │ │ │ │ @ ImplicitNode (location: (2,10)-(2,11)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── value: - │ │ │ │ @ LocalVariableTargetNode (location: (2,10)-(2,11)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :a - │ │ │ │ └── depth: 0 - │ │ │ └── operator_loc: ∅ - │ │ ├── rest: ∅ - │ │ ├── opening_loc: ∅ - │ │ └── closing_loc: ∅ - │ └── operator_loc: (2,7)-(2,9) = "=>" - ├── @ MatchPredicateNode (location: (4,0)-(4,12)) - │ ├── flags: newline - │ ├── value: - │ │ @ HashNode (location: (4,0)-(4,6)) - │ │ ├── flags: static_literal - │ │ ├── opening_loc: (4,0)-(4,1) = "{" - │ │ ├── elements: (length: 1) - │ │ │ └── @ AssocNode (location: (4,1)-(4,5)) - │ │ │ ├── flags: static_literal - │ │ │ ├── key: - │ │ │ │ @ SymbolNode (location: (4,1)-(4,3)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── value_loc: (4,1)-(4,2) = "a" - │ │ │ │ ├── closing_loc: (4,2)-(4,3) = ":" - │ │ │ │ └── unescaped: "a" - │ │ │ ├── value: - │ │ │ │ @ IntegerNode (location: (4,4)-(4,5)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 0 - │ │ │ └── operator_loc: ∅ - │ │ └── closing_loc: (4,5)-(4,6) = "}" - │ ├── pattern: - │ │ @ HashPatternNode (location: (4,10)-(4,12)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── elements: (length: 1) - │ │ │ └── @ AssocNode (location: (4,10)-(4,12)) - │ │ │ ├── flags: ∅ - │ │ │ ├── key: - │ │ │ │ @ SymbolNode (location: (4,10)-(4,12)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── value_loc: (4,10)-(4,11) = "a" - │ │ │ │ ├── closing_loc: (4,11)-(4,12) = ":" - │ │ │ │ └── unescaped: "a" - │ │ │ ├── value: - │ │ │ │ @ ImplicitNode (location: (4,10)-(4,11)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── value: - │ │ │ │ @ LocalVariableTargetNode (location: (4,10)-(4,11)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :a - │ │ │ │ └── depth: 0 - │ │ │ └── operator_loc: ∅ - │ │ ├── rest: ∅ - │ │ ├── opening_loc: ∅ - │ │ └── closing_loc: ∅ - │ └── operator_loc: (4,7)-(4,9) = "in" - └── @ MatchPredicateNode (location: (5,0)-(5,12)) - ├── flags: newline - ├── value: - │ @ HashNode (location: (5,0)-(5,6)) - │ ├── flags: static_literal - │ ├── opening_loc: (5,0)-(5,1) = "{" - │ ├── elements: (length: 1) - │ │ └── @ AssocNode (location: (5,1)-(5,5)) - │ │ ├── flags: static_literal - │ │ ├── key: - │ │ │ @ SymbolNode (location: (5,1)-(5,3)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (5,1)-(5,2) = "a" - │ │ │ ├── closing_loc: (5,2)-(5,3) = ":" - │ │ │ └── unescaped: "a" - │ │ ├── value: - │ │ │ @ IntegerNode (location: (5,4)-(5,5)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 0 - │ │ └── operator_loc: ∅ - │ └── closing_loc: (5,5)-(5,6) = "}" - ├── pattern: - │ @ HashPatternNode (location: (5,10)-(5,12)) - │ ├── flags: ∅ - │ ├── constant: ∅ - │ ├── elements: (length: 1) - │ │ └── @ AssocNode (location: (5,10)-(5,12)) - │ │ ├── flags: ∅ - │ │ ├── key: - │ │ │ @ SymbolNode (location: (5,10)-(5,12)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (5,10)-(5,11) = "a" - │ │ │ ├── closing_loc: (5,11)-(5,12) = ":" - │ │ │ └── unescaped: "a" - │ │ ├── value: - │ │ │ @ ImplicitNode (location: (5,10)-(5,11)) - │ │ │ ├── flags: ∅ - │ │ │ └── value: - │ │ │ @ LocalVariableTargetNode (location: (5,10)-(5,11)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :a - │ │ │ └── depth: 0 - │ │ └── operator_loc: ∅ - │ ├── rest: ∅ - │ ├── opening_loc: ∅ - │ └── closing_loc: ∅ - └── operator_loc: (5,7)-(5,9) = "in" diff --git a/test/prism/snapshots/whitequark/newline_in_hash_argument.txt b/test/prism/snapshots/whitequark/newline_in_hash_argument.txt deleted file mode 100644 index 2a7d06102d9faf..00000000000000 --- a/test/prism/snapshots/whitequark/newline_in_hash_argument.txt +++ /dev/null @@ -1,182 +0,0 @@ -@ ProgramNode (location: (1,0)-(14,1)) -├── flags: ∅ -├── locals: [:a, :b] -└── statements: - @ StatementsNode (location: (1,0)-(14,1)) - ├── flags: ∅ - └── body: (length: 3) - ├── @ CaseMatchNode (location: (1,0)-(8,3)) - │ ├── flags: newline - │ ├── predicate: - │ │ @ CallNode (location: (1,5)-(1,8)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (1,5)-(1,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── conditions: (length: 2) - │ │ ├── @ InNode (location: (2,0)-(4,4)) - │ │ │ ├── flags: ∅ - │ │ │ ├── pattern: - │ │ │ │ @ HashPatternNode (location: (2,3)-(2,5)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── constant: ∅ - │ │ │ │ ├── elements: (length: 1) - │ │ │ │ │ └── @ AssocNode (location: (2,3)-(2,5)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── key: - │ │ │ │ │ │ @ SymbolNode (location: (2,3)-(2,5)) - │ │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ │ ├── value_loc: (2,3)-(2,4) = "a" - │ │ │ │ │ │ ├── closing_loc: (2,4)-(2,5) = ":" - │ │ │ │ │ │ └── unescaped: "a" - │ │ │ │ │ ├── value: - │ │ │ │ │ │ @ ImplicitNode (location: (2,3)-(2,4)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ └── value: - │ │ │ │ │ │ @ LocalVariableTargetNode (location: (2,3)-(2,4)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ ├── name: :a - │ │ │ │ │ │ └── depth: 0 - │ │ │ │ │ └── operator_loc: ∅ - │ │ │ │ ├── rest: ∅ - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ └── closing_loc: ∅ - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (3,0)-(4,4)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 2) - │ │ │ │ ├── @ IntegerNode (location: (3,0)-(3,1)) - │ │ │ │ │ ├── flags: newline, static_literal, decimal - │ │ │ │ │ └── value: 0 - │ │ │ │ └── @ TrueNode (location: (4,0)-(4,4)) - │ │ │ │ └── flags: newline, static_literal - │ │ │ ├── in_loc: (2,0)-(2,2) = "in" - │ │ │ └── then_loc: ∅ - │ │ └── @ InNode (location: (5,0)-(7,4)) - │ │ ├── flags: ∅ - │ │ ├── pattern: - │ │ │ @ HashPatternNode (location: (5,3)-(5,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── constant: ∅ - │ │ │ ├── elements: (length: 1) - │ │ │ │ └── @ AssocNode (location: (5,3)-(5,7)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── key: - │ │ │ │ │ @ SymbolNode (location: (5,3)-(5,7)) - │ │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ │ ├── opening_loc: (5,3)-(5,4) = "\"" - │ │ │ │ │ ├── value_loc: (5,4)-(5,5) = "b" - │ │ │ │ │ ├── closing_loc: (5,5)-(5,7) = "\":" - │ │ │ │ │ └── unescaped: "b" - │ │ │ │ ├── value: - │ │ │ │ │ @ ImplicitNode (location: (5,4)-(5,5)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── value: - │ │ │ │ │ @ LocalVariableTargetNode (location: (5,4)-(5,5)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── name: :b - │ │ │ │ │ └── depth: 0 - │ │ │ │ └── operator_loc: ∅ - │ │ │ ├── rest: ∅ - │ │ │ ├── opening_loc: ∅ - │ │ │ └── closing_loc: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (6,0)-(7,4)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 2) - │ │ │ ├── @ IntegerNode (location: (6,0)-(6,1)) - │ │ │ │ ├── flags: newline, static_literal, decimal - │ │ │ │ └── value: 0 - │ │ │ └── @ TrueNode (location: (7,0)-(7,4)) - │ │ │ └── flags: newline, static_literal - │ │ ├── in_loc: (5,0)-(5,2) = "in" - │ │ └── then_loc: ∅ - │ ├── else_clause: ∅ - │ ├── case_keyword_loc: (1,0)-(1,4) = "case" - │ └── end_keyword_loc: (8,0)-(8,3) = "end" - ├── @ CallNode (location: (10,0)-(11,1)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (10,0)-(10,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :obj - │ │ ├── message_loc: (10,0)-(10,3) = "obj" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (10,3)-(10,4) = "." - │ ├── name: :set - │ ├── message_loc: (10,4)-(10,7) = "set" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (10,8)-(11,1)) - │ │ ├── flags: contains_keywords - │ │ └── arguments: (length: 1) - │ │ └── @ KeywordHashNode (location: (10,8)-(11,1)) - │ │ ├── flags: symbol_keys - │ │ └── elements: (length: 1) - │ │ └── @ AssocNode (location: (10,8)-(11,1)) - │ │ ├── flags: static_literal - │ │ ├── key: - │ │ │ @ SymbolNode (location: (10,8)-(10,14)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (10,8)-(10,9) = "\"" - │ │ │ ├── value_loc: (10,9)-(10,12) = "foo" - │ │ │ ├── closing_loc: (10,12)-(10,14) = "\":" - │ │ │ └── unescaped: "foo" - │ │ ├── value: - │ │ │ @ IntegerNode (location: (11,0)-(11,1)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── operator_loc: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── @ CallNode (location: (13,0)-(14,1)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (13,0)-(13,3)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :obj - │ ├── message_loc: (13,0)-(13,3) = "obj" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: (13,3)-(13,4) = "." - ├── name: :set - ├── message_loc: (13,4)-(13,7) = "set" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (13,8)-(14,1)) - │ ├── flags: contains_keywords - │ └── arguments: (length: 1) - │ └── @ KeywordHashNode (location: (13,8)-(14,1)) - │ ├── flags: symbol_keys - │ └── elements: (length: 1) - │ └── @ AssocNode (location: (13,8)-(14,1)) - │ ├── flags: static_literal - │ ├── key: - │ │ @ SymbolNode (location: (13,8)-(13,12)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: ∅ - │ │ ├── value_loc: (13,8)-(13,11) = "foo" - │ │ ├── closing_loc: (13,11)-(13,12) = ":" - │ │ └── unescaped: "foo" - │ ├── value: - │ │ @ IntegerNode (location: (14,0)-(14,1)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ └── operator_loc: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/whitequark/nil.txt b/test/prism/snapshots/whitequark/nil.txt deleted file mode 100644 index 39b9c2e8214e15..00000000000000 --- a/test/prism/snapshots/whitequark/nil.txt +++ /dev/null @@ -1,9 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ NilNode (location: (1,0)-(1,3)) - └── flags: newline, static_literal diff --git a/test/prism/snapshots/whitequark/nil_expression.txt b/test/prism/snapshots/whitequark/nil_expression.txt deleted file mode 100644 index 00e579864cc9f0..00000000000000 --- a/test/prism/snapshots/whitequark/nil_expression.txt +++ /dev/null @@ -1,20 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,9)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,9)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ ParenthesesNode (location: (1,0)-(1,2)) - │ ├── flags: newline - │ ├── body: ∅ - │ ├── opening_loc: (1,0)-(1,1) = "(" - │ └── closing_loc: (1,1)-(1,2) = ")" - └── @ BeginNode (location: (3,0)-(3,9)) - ├── flags: newline - ├── begin_keyword_loc: (3,0)-(3,5) = "begin" - ├── statements: ∅ - ├── rescue_clause: ∅ - ├── else_clause: ∅ - ├── ensure_clause: ∅ - └── end_keyword_loc: (3,6)-(3,9) = "end" diff --git a/test/prism/snapshots/whitequark/non_lvar_injecting_match.txt b/test/prism/snapshots/whitequark/non_lvar_injecting_match.txt deleted file mode 100644 index 0322423e63e80a..00000000000000 --- a/test/prism/snapshots/whitequark/non_lvar_injecting_match.txt +++ /dev/null @@ -1,48 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,28)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,28)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,28)) - ├── flags: newline - ├── receiver: - │ @ InterpolatedRegularExpressionNode (location: (1,0)-(1,19)) - │ ├── flags: ∅ - │ ├── opening_loc: (1,0)-(1,1) = "/" - │ ├── parts: (length: 2) - │ │ ├── @ EmbeddedStatementsNode (location: (1,1)-(1,5)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (1,1)-(1,3) = "\#{" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (1,3)-(1,4)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ IntegerNode (location: (1,3)-(1,4)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ └── closing_loc: (1,4)-(1,5) = "}" - │ │ └── @ StringNode (location: (1,5)-(1,18)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (1,5)-(1,18) = "(?bar)" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "(?bar)" - │ └── closing_loc: (1,18)-(1,19) = "/" - ├── call_operator_loc: ∅ - ├── name: :=~ - ├── message_loc: (1,20)-(1,22) = "=~" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,23)-(1,28)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ StringNode (location: (1,23)-(1,28)) - │ ├── flags: ∅ - │ ├── opening_loc: (1,23)-(1,24) = "'" - │ ├── content_loc: (1,24)-(1,27) = "bar" - │ ├── closing_loc: (1,27)-(1,28) = "'" - │ └── unescaped: "bar" - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/whitequark/not.txt b/test/prism/snapshots/whitequark/not.txt deleted file mode 100644 index b70792f1548166..00000000000000 --- a/test/prism/snapshots/whitequark/not.txt +++ /dev/null @@ -1,57 +0,0 @@ -@ ProgramNode (location: (1,0)-(5,8)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(5,8)) - ├── flags: ∅ - └── body: (length: 3) - ├── @ CallNode (location: (1,0)-(1,7)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (1,4)-(1,7)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (1,4)-(1,7) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :! - │ ├── message_loc: (1,0)-(1,3) = "not" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (3,0)-(3,5)) - │ ├── flags: newline - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :! - │ ├── message_loc: (3,0)-(3,3) = "not" - │ ├── opening_loc: (3,3)-(3,4) = "(" - │ ├── arguments: ∅ - │ ├── closing_loc: (3,4)-(3,5) = ")" - │ └── block: ∅ - └── @ CallNode (location: (5,0)-(5,8)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (5,4)-(5,7)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (5,4)-(5,7) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: ∅ - ├── name: :! - ├── message_loc: (5,0)-(5,3) = "not" - ├── opening_loc: (5,3)-(5,4) = "(" - ├── arguments: ∅ - ├── closing_loc: (5,7)-(5,8) = ")" - └── block: ∅ diff --git a/test/prism/snapshots/whitequark/not_cmd.txt b/test/prism/snapshots/whitequark/not_cmd.txt deleted file mode 100644 index 0ecd1cc67ee900..00000000000000 --- a/test/prism/snapshots/whitequark/not_cmd.txt +++ /dev/null @@ -1,40 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,9)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,9)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,9)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (1,4)-(1,9)) - │ ├── flags: ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :m - │ ├── message_loc: (1,4)-(1,5) = "m" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,6)-(1,9)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (1,6)-(1,9)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (1,6)-(1,9) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: ∅ - ├── name: :! - ├── message_loc: (1,0)-(1,3) = "not" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/whitequark/not_masgn__24.txt b/test/prism/snapshots/whitequark/not_masgn__24.txt deleted file mode 100644 index d84faadc50c222..00000000000000 --- a/test/prism/snapshots/whitequark/not_masgn__24.txt +++ /dev/null @@ -1,52 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,13)) -├── flags: ∅ -├── locals: [:a, :b] -└── statements: - @ StatementsNode (location: (1,0)-(1,13)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,13)) - ├── flags: newline - ├── receiver: - │ @ ParenthesesNode (location: (1,1)-(1,13)) - │ ├── flags: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (1,2)-(1,12)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ MultiWriteNode (location: (1,2)-(1,12)) - │ │ ├── flags: newline - │ │ ├── lefts: (length: 2) - │ │ │ ├── @ LocalVariableTargetNode (location: (1,2)-(1,3)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :a - │ │ │ │ └── depth: 0 - │ │ │ └── @ LocalVariableTargetNode (location: (1,5)-(1,6)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :b - │ │ │ └── depth: 0 - │ │ ├── rest: ∅ - │ │ ├── rights: (length: 0) - │ │ ├── lparen_loc: ∅ - │ │ ├── rparen_loc: ∅ - │ │ ├── operator_loc: (1,7)-(1,8) = "=" - │ │ └── value: - │ │ @ CallNode (location: (1,9)-(1,12)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (1,9)-(1,12) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── opening_loc: (1,1)-(1,2) = "(" - │ └── closing_loc: (1,12)-(1,13) = ")" - ├── call_operator_loc: ∅ - ├── name: :! - ├── message_loc: (1,0)-(1,1) = "!" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/whitequark/nth_ref.txt b/test/prism/snapshots/whitequark/nth_ref.txt deleted file mode 100644 index cca157454832ec..00000000000000 --- a/test/prism/snapshots/whitequark/nth_ref.txt +++ /dev/null @@ -1,10 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ NumberedReferenceReadNode (location: (1,0)-(1,3)) - ├── flags: newline - └── number: 10 diff --git a/test/prism/snapshots/whitequark/numbered_args_after_27.txt b/test/prism/snapshots/whitequark/numbered_args_after_27.txt deleted file mode 100644 index 7bf09f7904a3e3..00000000000000 --- a/test/prism/snapshots/whitequark/numbered_args_after_27.txt +++ /dev/null @@ -1,165 +0,0 @@ -@ ProgramNode (location: (1,0)-(7,13)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(7,13)) - ├── flags: ∅ - └── body: (length: 4) - ├── @ LambdaNode (location: (1,0)-(1,17)) - │ ├── flags: newline - │ ├── locals: [:_1, :_2, :_3, :_4, :_5, :_6, :_7, :_8, :_9] - │ ├── operator_loc: (1,0)-(1,2) = "->" - │ ├── opening_loc: (1,3)-(1,5) = "do" - │ ├── closing_loc: (1,14)-(1,17) = "end" - │ ├── parameters: - │ │ @ NumberedParametersNode (location: (1,0)-(1,17)) - │ │ ├── flags: ∅ - │ │ └── maximum: 9 - │ └── body: - │ @ StatementsNode (location: (1,6)-(1,13)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,6)-(1,13)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (1,6)-(1,8)) - │ │ ├── flags: ∅ - │ │ ├── name: :_1 - │ │ └── depth: 0 - │ ├── call_operator_loc: ∅ - │ ├── name: :+ - │ ├── message_loc: (1,9)-(1,10) = "+" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,11)-(1,13)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ LocalVariableReadNode (location: (1,11)-(1,13)) - │ │ ├── flags: ∅ - │ │ ├── name: :_9 - │ │ └── depth: 0 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ LambdaNode (location: (3,0)-(3,13)) - │ ├── flags: newline - │ ├── locals: [:_1, :_2, :_3, :_4, :_5, :_6, :_7, :_8, :_9] - │ ├── operator_loc: (3,0)-(3,2) = "->" - │ ├── opening_loc: (3,3)-(3,4) = "{" - │ ├── closing_loc: (3,12)-(3,13) = "}" - │ ├── parameters: - │ │ @ NumberedParametersNode (location: (3,0)-(3,13)) - │ │ ├── flags: ∅ - │ │ └── maximum: 9 - │ └── body: - │ @ StatementsNode (location: (3,5)-(3,12)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (3,5)-(3,12)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (3,5)-(3,7)) - │ │ ├── flags: ∅ - │ │ ├── name: :_1 - │ │ └── depth: 0 - │ ├── call_operator_loc: ∅ - │ ├── name: :+ - │ ├── message_loc: (3,8)-(3,9) = "+" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (3,10)-(3,12)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ LocalVariableReadNode (location: (3,10)-(3,12)) - │ │ ├── flags: ∅ - │ │ ├── name: :_9 - │ │ └── depth: 0 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (5,0)-(5,16)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :m - │ ├── message_loc: (5,0)-(5,1) = "m" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (5,2)-(5,16)) - │ ├── flags: ∅ - │ ├── locals: [:_1, :_2, :_3, :_4, :_5, :_6, :_7, :_8, :_9] - │ ├── parameters: - │ │ @ NumberedParametersNode (location: (5,2)-(5,16)) - │ │ ├── flags: ∅ - │ │ └── maximum: 9 - │ ├── body: - │ │ @ StatementsNode (location: (5,5)-(5,12)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (5,5)-(5,12)) - │ │ ├── flags: newline - │ │ ├── receiver: - │ │ │ @ LocalVariableReadNode (location: (5,5)-(5,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :_1 - │ │ │ └── depth: 0 - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :+ - │ │ ├── message_loc: (5,8)-(5,9) = "+" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (5,10)-(5,12)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ LocalVariableReadNode (location: (5,10)-(5,12)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :_9 - │ │ │ └── depth: 0 - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── opening_loc: (5,2)-(5,4) = "do" - │ └── closing_loc: (5,13)-(5,16) = "end" - └── @ CallNode (location: (7,0)-(7,13)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :m - ├── message_loc: (7,0)-(7,1) = "m" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (7,2)-(7,13)) - ├── flags: ∅ - ├── locals: [:_1, :_2, :_3, :_4, :_5, :_6, :_7, :_8, :_9] - ├── parameters: - │ @ NumberedParametersNode (location: (7,2)-(7,13)) - │ ├── flags: ∅ - │ └── maximum: 9 - ├── body: - │ @ StatementsNode (location: (7,4)-(7,11)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (7,4)-(7,11)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (7,4)-(7,6)) - │ │ ├── flags: ∅ - │ │ ├── name: :_1 - │ │ └── depth: 0 - │ ├── call_operator_loc: ∅ - │ ├── name: :+ - │ ├── message_loc: (7,7)-(7,8) = "+" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (7,9)-(7,11)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ LocalVariableReadNode (location: (7,9)-(7,11)) - │ │ ├── flags: ∅ - │ │ ├── name: :_9 - │ │ └── depth: 0 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── opening_loc: (7,2)-(7,3) = "{" - └── closing_loc: (7,12)-(7,13) = "}" diff --git a/test/prism/snapshots/whitequark/numparam_outside_block.txt b/test/prism/snapshots/whitequark/numparam_outside_block.txt deleted file mode 100644 index beef05a392c168..00000000000000 --- a/test/prism/snapshots/whitequark/numparam_outside_block.txt +++ /dev/null @@ -1,127 +0,0 @@ -@ ProgramNode (location: (1,0)-(9,17)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(9,17)) - ├── flags: ∅ - └── body: (length: 5) - ├── @ CallNode (location: (1,0)-(1,2)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :_1 - │ ├── message_loc: (1,0)-(1,2) = "_1" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ SingletonClassNode (location: (3,0)-(3,21)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── class_keyword_loc: (3,0)-(3,5) = "class" - │ ├── operator_loc: (3,6)-(3,8) = "<<" - │ ├── expression: - │ │ @ CallNode (location: (3,9)-(3,12)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (3,9)-(3,12) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (3,14)-(3,16)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (3,14)-(3,16)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :_1 - │ │ ├── message_loc: (3,14)-(3,16) = "_1" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── end_keyword_loc: (3,18)-(3,21) = "end" - ├── @ ClassNode (location: (5,0)-(5,16)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── class_keyword_loc: (5,0)-(5,5) = "class" - │ ├── constant_path: - │ │ @ ConstantReadNode (location: (5,6)-(5,7)) - │ │ ├── flags: ∅ - │ │ └── name: :A - │ ├── inheritance_operator_loc: ∅ - │ ├── superclass: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (5,9)-(5,11)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (5,9)-(5,11)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :_1 - │ │ ├── message_loc: (5,9)-(5,11) = "_1" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── end_keyword_loc: (5,13)-(5,16) = "end" - │ └── name: :A - ├── @ DefNode (location: (7,0)-(7,19)) - │ ├── flags: newline - │ ├── name: :m - │ ├── name_loc: (7,9)-(7,10) = "m" - │ ├── receiver: - │ │ @ SelfNode (location: (7,4)-(7,8)) - │ │ └── flags: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (7,12)-(7,14)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (7,12)-(7,14)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :_1 - │ │ ├── message_loc: (7,12)-(7,14) = "_1" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (7,0)-(7,3) = "def" - │ ├── operator_loc: (7,8)-(7,9) = "." - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (7,16)-(7,19) = "end" - └── @ ModuleNode (location: (9,0)-(9,17)) - ├── flags: newline - ├── locals: [] - ├── module_keyword_loc: (9,0)-(9,6) = "module" - ├── constant_path: - │ @ ConstantReadNode (location: (9,7)-(9,8)) - │ ├── flags: ∅ - │ └── name: :A - ├── body: - │ @ StatementsNode (location: (9,10)-(9,12)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (9,10)-(9,12)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :_1 - │ ├── message_loc: (9,10)-(9,12) = "_1" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── end_keyword_loc: (9,14)-(9,17) = "end" - └── name: :A diff --git a/test/prism/snapshots/whitequark/numparam_ruby_bug_19025.txt b/test/prism/snapshots/whitequark/numparam_ruby_bug_19025.txt deleted file mode 100644 index 5043c9be48be07..00000000000000 --- a/test/prism/snapshots/whitequark/numparam_ruby_bug_19025.txt +++ /dev/null @@ -1,55 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,14)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,14)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,14)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :p - ├── message_loc: (1,0)-(1,1) = "p" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,2)-(1,14)) - ├── flags: ∅ - ├── locals: [:_1] - ├── parameters: - │ @ NumberedParametersNode (location: (1,2)-(1,14)) - │ ├── flags: ∅ - │ └── maximum: 1 - ├── body: - │ @ StatementsNode (location: (1,4)-(1,12)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ ArrayNode (location: (1,4)-(1,12)) - │ ├── flags: newline - │ ├── elements: (length: 1) - │ │ └── @ CallNode (location: (1,5)-(1,11)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ LocalVariableReadNode (location: (1,5)-(1,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :_1 - │ │ │ └── depth: 0 - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :** - │ │ ├── message_loc: (1,8)-(1,10) = "**" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (1,10)-(1,11)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (1,10)-(1,11)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── opening_loc: (1,4)-(1,5) = "[" - │ └── closing_loc: (1,11)-(1,12) = "]" - ├── opening_loc: (1,2)-(1,3) = "{" - └── closing_loc: (1,13)-(1,14) = "}" diff --git a/test/prism/snapshots/whitequark/op_asgn.txt b/test/prism/snapshots/whitequark/op_asgn.txt deleted file mode 100644 index cac3e0e7b1798a..00000000000000 --- a/test/prism/snapshots/whitequark/op_asgn.txt +++ /dev/null @@ -1,76 +0,0 @@ -@ ProgramNode (location: (1,0)-(5,11)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(5,11)) - ├── flags: ∅ - └── body: (length: 3) - ├── @ CallOperatorWriteNode (location: (1,0)-(1,10)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (1,0)-(1,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (1,0)-(1,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (1,3)-(1,4) = "." - │ ├── message_loc: (1,4)-(1,5) = "A" - │ ├── read_name: :A - │ ├── write_name: :A= - │ ├── binary_operator: :+ - │ ├── binary_operator_loc: (1,6)-(1,8) = "+=" - │ └── value: - │ @ IntegerNode (location: (1,9)-(1,10)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── @ CallOperatorWriteNode (location: (3,0)-(3,10)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (3,0)-(3,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (3,0)-(3,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (3,3)-(3,4) = "." - │ ├── message_loc: (3,4)-(3,5) = "a" - │ ├── read_name: :a - │ ├── write_name: :a= - │ ├── binary_operator: :+ - │ ├── binary_operator_loc: (3,6)-(3,8) = "+=" - │ └── value: - │ @ IntegerNode (location: (3,9)-(3,10)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - └── @ CallOperatorWriteNode (location: (5,0)-(5,11)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (5,0)-(5,3)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (5,0)-(5,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: (5,3)-(5,5) = "::" - ├── message_loc: (5,5)-(5,6) = "a" - ├── read_name: :a - ├── write_name: :a= - ├── binary_operator: :+ - ├── binary_operator_loc: (5,7)-(5,9) = "+=" - └── value: - @ IntegerNode (location: (5,10)-(5,11)) - ├── flags: static_literal, decimal - └── value: 1 diff --git a/test/prism/snapshots/whitequark/op_asgn_cmd.txt b/test/prism/snapshots/whitequark/op_asgn_cmd.txt deleted file mode 100644 index 6ee1650274ce3b..00000000000000 --- a/test/prism/snapshots/whitequark/op_asgn_cmd.txt +++ /dev/null @@ -1,181 +0,0 @@ -@ ProgramNode (location: (1,0)-(7,15)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(7,15)) - ├── flags: ∅ - └── body: (length: 4) - ├── @ CallOperatorWriteNode (location: (1,0)-(1,14)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (1,0)-(1,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (1,0)-(1,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (1,3)-(1,4) = "." - │ ├── message_loc: (1,4)-(1,5) = "A" - │ ├── read_name: :A - │ ├── write_name: :A= - │ ├── binary_operator: :+ - │ ├── binary_operator_loc: (1,6)-(1,8) = "+=" - │ └── value: - │ @ CallNode (location: (1,9)-(1,14)) - │ ├── flags: ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :m - │ ├── message_loc: (1,9)-(1,10) = "m" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,11)-(1,14)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (1,11)-(1,14)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (1,11)-(1,14) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallOperatorWriteNode (location: (3,0)-(3,14)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (3,0)-(3,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (3,0)-(3,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (3,3)-(3,4) = "." - │ ├── message_loc: (3,4)-(3,5) = "a" - │ ├── read_name: :a - │ ├── write_name: :a= - │ ├── binary_operator: :+ - │ ├── binary_operator_loc: (3,6)-(3,8) = "+=" - │ └── value: - │ @ CallNode (location: (3,9)-(3,14)) - │ ├── flags: ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :m - │ ├── message_loc: (3,9)-(3,10) = "m" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (3,11)-(3,14)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (3,11)-(3,14)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (3,11)-(3,14) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ ConstantPathOperatorWriteNode (location: (5,0)-(5,15)) - │ ├── flags: newline - │ ├── target: - │ │ @ ConstantPathNode (location: (5,0)-(5,6)) - │ │ ├── flags: ∅ - │ │ ├── parent: - │ │ │ @ CallNode (location: (5,0)-(5,3)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (5,0)-(5,3) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── name: :A - │ │ ├── delimiter_loc: (5,3)-(5,5) = "::" - │ │ └── name_loc: (5,5)-(5,6) = "A" - │ ├── binary_operator_loc: (5,7)-(5,9) = "+=" - │ ├── value: - │ │ @ CallNode (location: (5,10)-(5,15)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :m - │ │ ├── message_loc: (5,10)-(5,11) = "m" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (5,12)-(5,15)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ CallNode (location: (5,12)-(5,15)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (5,12)-(5,15) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── binary_operator: :+ - └── @ CallOperatorWriteNode (location: (7,0)-(7,15)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (7,0)-(7,3)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (7,0)-(7,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: (7,3)-(7,5) = "::" - ├── message_loc: (7,5)-(7,6) = "a" - ├── read_name: :a - ├── write_name: :a= - ├── binary_operator: :+ - ├── binary_operator_loc: (7,7)-(7,9) = "+=" - └── value: - @ CallNode (location: (7,10)-(7,15)) - ├── flags: ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :m - ├── message_loc: (7,10)-(7,11) = "m" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (7,12)-(7,15)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ CallNode (location: (7,12)-(7,15)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (7,12)-(7,15) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/whitequark/op_asgn_index.txt b/test/prism/snapshots/whitequark/op_asgn_index.txt deleted file mode 100644 index 0e2927f0fb14f0..00000000000000 --- a/test/prism/snapshots/whitequark/op_asgn_index.txt +++ /dev/null @@ -1,40 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,14)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,14)) - ├── flags: ∅ - └── body: (length: 1) - └── @ IndexOperatorWriteNode (location: (1,0)-(1,14)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (1,0)-(1,3)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (1,0)-(1,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: ∅ - ├── opening_loc: (1,3)-(1,4) = "[" - ├── arguments: - │ @ ArgumentsNode (location: (1,4)-(1,8)) - │ ├── flags: ∅ - │ └── arguments: (length: 2) - │ ├── @ IntegerNode (location: (1,4)-(1,5)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 0 - │ └── @ IntegerNode (location: (1,7)-(1,8)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── closing_loc: (1,8)-(1,9) = "]" - ├── block: ∅ - ├── binary_operator: :+ - ├── binary_operator_loc: (1,10)-(1,12) = "+=" - └── value: - @ IntegerNode (location: (1,13)-(1,14)) - ├── flags: static_literal, decimal - └── value: 2 diff --git a/test/prism/snapshots/whitequark/op_asgn_index_cmd.txt b/test/prism/snapshots/whitequark/op_asgn_index_cmd.txt deleted file mode 100644 index 84cef7867d31c1..00000000000000 --- a/test/prism/snapshots/whitequark/op_asgn_index_cmd.txt +++ /dev/null @@ -1,60 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,18)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,18)) - ├── flags: ∅ - └── body: (length: 1) - └── @ IndexOperatorWriteNode (location: (1,0)-(1,18)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (1,0)-(1,3)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (1,0)-(1,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: ∅ - ├── opening_loc: (1,3)-(1,4) = "[" - ├── arguments: - │ @ ArgumentsNode (location: (1,4)-(1,8)) - │ ├── flags: ∅ - │ └── arguments: (length: 2) - │ ├── @ IntegerNode (location: (1,4)-(1,5)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 0 - │ └── @ IntegerNode (location: (1,7)-(1,8)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── closing_loc: (1,8)-(1,9) = "]" - ├── block: ∅ - ├── binary_operator: :+ - ├── binary_operator_loc: (1,10)-(1,12) = "+=" - └── value: - @ CallNode (location: (1,13)-(1,18)) - ├── flags: ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :m - ├── message_loc: (1,13)-(1,14) = "m" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,15)-(1,18)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ CallNode (location: (1,15)-(1,18)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (1,15)-(1,18) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/whitequark/optarg.txt b/test/prism/snapshots/whitequark/optarg.txt deleted file mode 100644 index f25b004a00ff25..00000000000000 --- a/test/prism/snapshots/whitequark/optarg.txt +++ /dev/null @@ -1,80 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,24)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,24)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ DefNode (location: (1,0)-(1,18)) - │ ├── flags: newline - │ ├── name: :f - │ ├── name_loc: (1,4)-(1,5) = "f" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,6)-(1,13)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 1) - │ │ │ └── @ OptionalParameterNode (location: (1,6)-(1,13)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── name_loc: (1,6)-(1,9) = "foo" - │ │ │ ├── operator_loc: (1,10)-(1,11) = "=" - │ │ │ └── value: - │ │ │ @ IntegerNode (location: (1,12)-(1,13)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: ∅ - │ ├── locals: [:foo] - │ ├── def_keyword_loc: (1,0)-(1,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (1,15)-(1,18) = "end" - └── @ DefNode (location: (3,0)-(3,24)) - ├── flags: newline - ├── name: :f - ├── name_loc: (3,4)-(3,5) = "f" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (3,6)-(3,18)) - │ ├── flags: ∅ - │ ├── requireds: (length: 0) - │ ├── optionals: (length: 2) - │ │ ├── @ OptionalParameterNode (location: (3,6)-(3,11)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── name_loc: (3,6)-(3,9) = "foo" - │ │ │ ├── operator_loc: (3,9)-(3,10) = "=" - │ │ │ └── value: - │ │ │ @ IntegerNode (location: (3,10)-(3,11)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── @ OptionalParameterNode (location: (3,13)-(3,18)) - │ │ ├── flags: ∅ - │ │ ├── name: :bar - │ │ ├── name_loc: (3,13)-(3,16) = "bar" - │ │ ├── operator_loc: (3,16)-(3,17) = "=" - │ │ └── value: - │ │ @ IntegerNode (location: (3,17)-(3,18)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── rest: ∅ - │ ├── posts: (length: 0) - │ ├── keywords: (length: 0) - │ ├── keyword_rest: ∅ - │ └── block: ∅ - ├── body: ∅ - ├── locals: [:foo, :bar] - ├── def_keyword_loc: (3,0)-(3,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: (3,5)-(3,6) = "(" - ├── rparen_loc: (3,18)-(3,19) = ")" - ├── equal_loc: ∅ - └── end_keyword_loc: (3,21)-(3,24) = "end" diff --git a/test/prism/snapshots/whitequark/or.txt b/test/prism/snapshots/whitequark/or.txt deleted file mode 100644 index 7a23781399e817..00000000000000 --- a/test/prism/snapshots/whitequark/or.txt +++ /dev/null @@ -1,57 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,10)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,10)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ OrNode (location: (1,0)-(1,10)) - │ ├── flags: newline - │ ├── left: - │ │ @ CallNode (location: (1,0)-(1,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (1,0)-(1,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── right: - │ │ @ CallNode (location: (1,7)-(1,10)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (1,7)-(1,10) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── operator_loc: (1,4)-(1,6) = "or" - └── @ OrNode (location: (3,0)-(3,10)) - ├── flags: newline - ├── left: - │ @ CallNode (location: (3,0)-(3,3)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (3,0)-(3,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── right: - │ @ CallNode (location: (3,7)-(3,10)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :bar - │ ├── message_loc: (3,7)-(3,10) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── operator_loc: (3,4)-(3,6) = "||" diff --git a/test/prism/snapshots/whitequark/or_asgn.txt b/test/prism/snapshots/whitequark/or_asgn.txt deleted file mode 100644 index 7234587b45d58b..00000000000000 --- a/test/prism/snapshots/whitequark/or_asgn.txt +++ /dev/null @@ -1,61 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,15)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,15)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ CallOrWriteNode (location: (1,0)-(1,11)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (1,0)-(1,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (1,0)-(1,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (1,3)-(1,4) = "." - │ ├── message_loc: (1,4)-(1,5) = "a" - │ ├── read_name: :a - │ ├── write_name: :a= - │ ├── operator_loc: (1,6)-(1,9) = "||=" - │ └── value: - │ @ IntegerNode (location: (1,10)-(1,11)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - └── @ IndexOrWriteNode (location: (3,0)-(3,15)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (3,0)-(3,3)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (3,0)-(3,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: ∅ - ├── opening_loc: (3,3)-(3,4) = "[" - ├── arguments: - │ @ ArgumentsNode (location: (3,4)-(3,8)) - │ ├── flags: ∅ - │ └── arguments: (length: 2) - │ ├── @ IntegerNode (location: (3,4)-(3,5)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 0 - │ └── @ IntegerNode (location: (3,7)-(3,8)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── closing_loc: (3,8)-(3,9) = "]" - ├── block: ∅ - ├── operator_loc: (3,10)-(3,13) = "||=" - └── value: - @ IntegerNode (location: (3,14)-(3,15)) - ├── flags: static_literal, decimal - └── value: 2 diff --git a/test/prism/snapshots/whitequark/parser_bug_272.txt b/test/prism/snapshots/whitequark/parser_bug_272.txt deleted file mode 100644 index 64df1cf46d2de9..00000000000000 --- a/test/prism/snapshots/whitequark/parser_bug_272.txt +++ /dev/null @@ -1,48 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,15)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,15)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,15)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :a - ├── message_loc: (1,0)-(1,1) = "a" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,2)-(1,4)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ InstanceVariableReadNode (location: (1,2)-(1,4)) - │ ├── flags: ∅ - │ └── name: :@b - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,5)-(1,15)) - ├── flags: ∅ - ├── locals: [:c] - ├── parameters: - │ @ BlockParametersNode (location: (1,8)-(1,11)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,9)-(1,10)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (1,9)-(1,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :c - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,8)-(1,9) = "|" - │ └── closing_loc: (1,10)-(1,11) = "|" - ├── body: ∅ - ├── opening_loc: (1,5)-(1,7) = "do" - └── closing_loc: (1,12)-(1,15) = "end" diff --git a/test/prism/snapshots/whitequark/parser_bug_490.txt b/test/prism/snapshots/whitequark/parser_bug_490.txt deleted file mode 100644 index 89a29c11f56eeb..00000000000000 --- a/test/prism/snapshots/whitequark/parser_bug_490.txt +++ /dev/null @@ -1,129 +0,0 @@ -@ ProgramNode (location: (1,0)-(5,45)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(5,45)) - ├── flags: ∅ - └── body: (length: 3) - ├── @ DefNode (location: (1,0)-(1,39)) - │ ├── flags: newline - │ ├── name: :m - │ ├── name_loc: (1,4)-(1,5) = "m" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (1,7)-(1,34)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ SingletonClassNode (location: (1,7)-(1,34)) - │ │ ├── flags: newline - │ │ ├── locals: [] - │ │ ├── class_keyword_loc: (1,7)-(1,12) = "class" - │ │ ├── operator_loc: (1,13)-(1,15) = "<<" - │ │ ├── expression: - │ │ │ @ SelfNode (location: (1,16)-(1,20)) - │ │ │ └── flags: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (1,22)-(1,29)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ ConstantWriteNode (location: (1,22)-(1,29)) - │ │ │ ├── flags: newline - │ │ │ ├── name: :A - │ │ │ ├── name_loc: (1,22)-(1,23) = "A" - │ │ │ ├── value: - │ │ │ │ @ NilNode (location: (1,26)-(1,29)) - │ │ │ │ └── flags: static_literal - │ │ │ └── operator_loc: (1,24)-(1,25) = "=" - │ │ └── end_keyword_loc: (1,31)-(1,34) = "end" - │ ├── locals: [] - │ ├── def_keyword_loc: (1,0)-(1,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (1,36)-(1,39) = "end" - ├── @ DefNode (location: (3,0)-(3,44)) - │ ├── flags: newline - │ ├── name: :m - │ ├── name_loc: (3,4)-(3,5) = "m" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (3,7)-(3,39)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ SingletonClassNode (location: (3,7)-(3,39)) - │ │ ├── flags: newline - │ │ ├── locals: [] - │ │ ├── class_keyword_loc: (3,7)-(3,12) = "class" - │ │ ├── operator_loc: (3,13)-(3,15) = "<<" - │ │ ├── expression: - │ │ │ @ SelfNode (location: (3,16)-(3,20)) - │ │ │ └── flags: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (3,22)-(3,34)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ ClassNode (location: (3,22)-(3,34)) - │ │ │ ├── flags: newline - │ │ │ ├── locals: [] - │ │ │ ├── class_keyword_loc: (3,22)-(3,27) = "class" - │ │ │ ├── constant_path: - │ │ │ │ @ ConstantReadNode (location: (3,28)-(3,29)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :C - │ │ │ ├── inheritance_operator_loc: ∅ - │ │ │ ├── superclass: ∅ - │ │ │ ├── body: ∅ - │ │ │ ├── end_keyword_loc: (3,31)-(3,34) = "end" - │ │ │ └── name: :C - │ │ └── end_keyword_loc: (3,36)-(3,39) = "end" - │ ├── locals: [] - │ ├── def_keyword_loc: (3,0)-(3,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (3,41)-(3,44) = "end" - └── @ DefNode (location: (5,0)-(5,45)) - ├── flags: newline - ├── name: :m - ├── name_loc: (5,4)-(5,5) = "m" - ├── receiver: ∅ - ├── parameters: ∅ - ├── body: - │ @ StatementsNode (location: (5,7)-(5,40)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ SingletonClassNode (location: (5,7)-(5,40)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── class_keyword_loc: (5,7)-(5,12) = "class" - │ ├── operator_loc: (5,13)-(5,15) = "<<" - │ ├── expression: - │ │ @ SelfNode (location: (5,16)-(5,20)) - │ │ └── flags: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (5,22)-(5,35)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ ModuleNode (location: (5,22)-(5,35)) - │ │ ├── flags: newline - │ │ ├── locals: [] - │ │ ├── module_keyword_loc: (5,22)-(5,28) = "module" - │ │ ├── constant_path: - │ │ │ @ ConstantReadNode (location: (5,29)-(5,30)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :M - │ │ ├── body: ∅ - │ │ ├── end_keyword_loc: (5,32)-(5,35) = "end" - │ │ └── name: :M - │ └── end_keyword_loc: (5,37)-(5,40) = "end" - ├── locals: [] - ├── def_keyword_loc: (5,0)-(5,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: ∅ - ├── rparen_loc: ∅ - ├── equal_loc: ∅ - └── end_keyword_loc: (5,42)-(5,45) = "end" diff --git a/test/prism/snapshots/whitequark/parser_bug_507.txt b/test/prism/snapshots/whitequark/parser_bug_507.txt deleted file mode 100644 index 63a9169d01106f..00000000000000 --- a/test/prism/snapshots/whitequark/parser_bug_507.txt +++ /dev/null @@ -1,42 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,19)) -├── flags: ∅ -├── locals: [:m] -└── statements: - @ StatementsNode (location: (1,0)-(1,19)) - ├── flags: ∅ - └── body: (length: 1) - └── @ LocalVariableWriteNode (location: (1,0)-(1,19)) - ├── flags: newline - ├── name: :m - ├── depth: 0 - ├── name_loc: (1,0)-(1,1) = "m" - ├── value: - │ @ LambdaNode (location: (1,4)-(1,19)) - │ ├── flags: ∅ - │ ├── locals: [:args] - │ ├── operator_loc: (1,4)-(1,6) = "->" - │ ├── opening_loc: (1,13)-(1,15) = "do" - │ ├── closing_loc: (1,16)-(1,19) = "end" - │ ├── parameters: - │ │ @ BlockParametersNode (location: (1,7)-(1,12)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (1,7)-(1,12)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 0) - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: - │ │ │ │ @ RestParameterNode (location: (1,7)-(1,12)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :args - │ │ │ │ ├── name_loc: (1,8)-(1,12) = "args" - │ │ │ │ └── operator_loc: (1,7)-(1,8) = "*" - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: ∅ - │ │ └── closing_loc: ∅ - │ └── body: ∅ - └── operator_loc: (1,2)-(1,3) = "=" diff --git a/test/prism/snapshots/whitequark/parser_bug_518.txt b/test/prism/snapshots/whitequark/parser_bug_518.txt deleted file mode 100644 index 3341167b64d1e8..00000000000000 --- a/test/prism/snapshots/whitequark/parser_bug_518.txt +++ /dev/null @@ -1,23 +0,0 @@ -@ ProgramNode (location: (1,0)-(2,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(2,3)) - ├── flags: ∅ - └── body: (length: 1) - └── @ ClassNode (location: (1,0)-(2,3)) - ├── flags: newline - ├── locals: [] - ├── class_keyword_loc: (1,0)-(1,5) = "class" - ├── constant_path: - │ @ ConstantReadNode (location: (1,6)-(1,7)) - │ ├── flags: ∅ - │ └── name: :A - ├── inheritance_operator_loc: (1,8)-(1,9) = "<" - ├── superclass: - │ @ ConstantReadNode (location: (1,10)-(1,11)) - │ ├── flags: ∅ - │ └── name: :B - ├── body: ∅ - ├── end_keyword_loc: (2,0)-(2,3) = "end" - └── name: :A diff --git a/test/prism/snapshots/whitequark/parser_bug_525.txt b/test/prism/snapshots/whitequark/parser_bug_525.txt deleted file mode 100644 index 46dca6f97d38ac..00000000000000 --- a/test/prism/snapshots/whitequark/parser_bug_525.txt +++ /dev/null @@ -1,71 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,32)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,32)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,32)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :m1 - ├── message_loc: (1,0)-(1,2) = "m1" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,3)-(1,11)) - │ ├── flags: contains_keywords - │ └── arguments: (length: 1) - │ └── @ KeywordHashNode (location: (1,3)-(1,11)) - │ ├── flags: symbol_keys - │ └── elements: (length: 1) - │ └── @ AssocNode (location: (1,3)-(1,11)) - │ ├── flags: ∅ - │ ├── key: - │ │ @ SymbolNode (location: (1,3)-(1,5)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (1,3)-(1,4) = ":" - │ │ ├── value_loc: (1,4)-(1,5) = "k" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "k" - │ ├── value: - │ │ @ CallNode (location: (1,9)-(1,11)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :m2 - │ │ ├── message_loc: (1,9)-(1,11) = "m2" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── operator_loc: (1,6)-(1,8) = "=>" - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,12)-(1,32)) - ├── flags: ∅ - ├── locals: [] - ├── parameters: ∅ - ├── body: - │ @ StatementsNode (location: (1,16)-(1,27)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,16)-(1,27)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :m3 - │ ├── message_loc: (1,16)-(1,18) = "m3" - │ ├── opening_loc: (1,18)-(1,19) = "(" - │ ├── arguments: ∅ - │ ├── closing_loc: (1,19)-(1,20) = ")" - │ └── block: - │ @ BlockNode (location: (1,21)-(1,27)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (1,21)-(1,23) = "do" - │ └── closing_loc: (1,24)-(1,27) = "end" - ├── opening_loc: (1,12)-(1,14) = "do" - └── closing_loc: (1,29)-(1,32) = "end" diff --git a/test/prism/snapshots/whitequark/parser_bug_604.txt b/test/prism/snapshots/whitequark/parser_bug_604.txt deleted file mode 100644 index aa58b2304fbb49..00000000000000 --- a/test/prism/snapshots/whitequark/parser_bug_604.txt +++ /dev/null @@ -1,60 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,14)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,14)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,14)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :m - ├── message_loc: (1,0)-(1,1) = "m" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,2)-(1,7)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ CallNode (location: (1,2)-(1,7)) - │ ├── flags: ∅ - │ ├── receiver: - │ │ @ CallNode (location: (1,2)-(1,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (1,2)-(1,3) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :+ - │ ├── message_loc: (1,4)-(1,5) = "+" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,6)-(1,7)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (1,6)-(1,7)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :b - │ │ ├── message_loc: (1,6)-(1,7) = "b" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,8)-(1,14)) - ├── flags: ∅ - ├── locals: [] - ├── parameters: ∅ - ├── body: ∅ - ├── opening_loc: (1,8)-(1,10) = "do" - └── closing_loc: (1,11)-(1,14) = "end" diff --git a/test/prism/snapshots/whitequark/parser_bug_640.txt b/test/prism/snapshots/whitequark/parser_bug_640.txt deleted file mode 100644 index 1e535e769bf5e6..00000000000000 --- a/test/prism/snapshots/whitequark/parser_bug_640.txt +++ /dev/null @@ -1,24 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,6)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,6)) - ├── flags: ∅ - └── body: (length: 1) - └── @ InterpolatedStringNode (location: (1,0)-(1,6)) - ├── flags: newline, static_literal - ├── opening_loc: (1,0)-(1,6) = "<<~FOO" - ├── parts: (length: 2) - │ ├── @ StringNode (location: (2,0)-(3,0)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (2,0)-(3,0) = " baz\\\n" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "baz" - │ └── @ StringNode (location: (3,0)-(4,0)) - │ ├── flags: static_literal, frozen - │ ├── opening_loc: ∅ - │ ├── content_loc: (3,0)-(4,0) = " qux\n" - │ ├── closing_loc: ∅ - │ └── unescaped: "qux\n" - └── closing_loc: (4,0)-(5,0) = "FOO\n" diff --git a/test/prism/snapshots/whitequark/parser_bug_645.txt b/test/prism/snapshots/whitequark/parser_bug_645.txt deleted file mode 100644 index 0aa65ebe0346da..00000000000000 --- a/test/prism/snapshots/whitequark/parser_bug_645.txt +++ /dev/null @@ -1,41 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,14)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,14)) - ├── flags: ∅ - └── body: (length: 1) - └── @ LambdaNode (location: (1,0)-(1,14)) - ├── flags: newline - ├── locals: [:arg] - ├── operator_loc: (1,0)-(1,2) = "->" - ├── opening_loc: (1,12)-(1,13) = "{" - ├── closing_loc: (1,13)-(1,14) = "}" - ├── parameters: - │ @ BlockParametersNode (location: (1,3)-(1,11)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,4)-(1,10)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 1) - │ │ │ └── @ OptionalParameterNode (location: (1,4)-(1,10)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :arg - │ │ │ ├── name_loc: (1,4)-(1,7) = "arg" - │ │ │ ├── operator_loc: (1,7)-(1,8) = "=" - │ │ │ └── value: - │ │ │ @ HashNode (location: (1,8)-(1,10)) - │ │ │ ├── flags: static_literal - │ │ │ ├── opening_loc: (1,8)-(1,9) = "{" - │ │ │ ├── elements: (length: 0) - │ │ │ └── closing_loc: (1,9)-(1,10) = "}" - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (1,3)-(1,4) = "(" - │ └── closing_loc: (1,10)-(1,11) = ")" - └── body: ∅ diff --git a/test/prism/snapshots/whitequark/parser_bug_830.txt b/test/prism/snapshots/whitequark/parser_bug_830.txt deleted file mode 100644 index 4adbe6256af02b..00000000000000 --- a/test/prism/snapshots/whitequark/parser_bug_830.txt +++ /dev/null @@ -1,13 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,4)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,4)) - ├── flags: ∅ - └── body: (length: 1) - └── @ RegularExpressionNode (location: (1,0)-(1,4)) - ├── flags: newline, static_literal, forced_us_ascii_encoding - ├── opening_loc: (1,0)-(1,1) = "/" - ├── content_loc: (1,1)-(1,3) = "\\(" - ├── closing_loc: (1,3)-(1,4) = "/" - └── unescaped: "\\(" diff --git a/test/prism/snapshots/whitequark/parser_bug_989.txt b/test/prism/snapshots/whitequark/parser_bug_989.txt deleted file mode 100644 index d0aec1ff5e79e6..00000000000000 --- a/test/prism/snapshots/whitequark/parser_bug_989.txt +++ /dev/null @@ -1,13 +0,0 @@ -@ ProgramNode (location: (1,1)-(1,8)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,1)-(1,8)) - ├── flags: ∅ - └── body: (length: 1) - └── @ StringNode (location: (1,1)-(1,8)) - ├── flags: newline - ├── opening_loc: (1,1)-(1,8) = "<<-HERE" - ├── content_loc: (2,0)-(3,0) = "\t\tcontent\n" - ├── closing_loc: (3,0)-(4,0) = "\tHERE\n" - └── unescaped: "\t\tcontent\n" diff --git a/test/prism/snapshots/whitequark/parser_drops_truncated_parts_of_squiggly_heredoc.txt b/test/prism/snapshots/whitequark/parser_drops_truncated_parts_of_squiggly_heredoc.txt deleted file mode 100644 index 3b0f46674bd675..00000000000000 --- a/test/prism/snapshots/whitequark/parser_drops_truncated_parts_of_squiggly_heredoc.txt +++ /dev/null @@ -1,23 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,7)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,7)) - ├── flags: ∅ - └── body: (length: 1) - └── @ InterpolatedStringNode (location: (1,0)-(1,7)) - ├── flags: newline - ├── opening_loc: (1,0)-(1,7) = "<<~HERE" - ├── parts: (length: 2) - │ ├── @ EmbeddedStatementsNode (location: (2,2)-(2,5)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (2,2)-(2,4) = "\#{" - │ │ ├── statements: ∅ - │ │ └── closing_loc: (2,4)-(2,5) = "}" - │ └── @ StringNode (location: (2,5)-(3,0)) - │ ├── flags: static_literal, frozen - │ ├── opening_loc: ∅ - │ ├── content_loc: (2,5)-(3,0) = "\n" - │ ├── closing_loc: ∅ - │ └── unescaped: "\n" - └── closing_loc: (3,0)-(4,0) = "HERE\n" diff --git a/test/prism/snapshots/whitequark/parser_slash_slash_n_escaping_in_literals.txt b/test/prism/snapshots/whitequark/parser_slash_slash_n_escaping_in_literals.txt deleted file mode 100644 index ddd38a5ab73606..00000000000000 --- a/test/prism/snapshots/whitequark/parser_slash_slash_n_escaping_in_literals.txt +++ /dev/null @@ -1,141 +0,0 @@ -@ ProgramNode (location: (1,0)-(62,2)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(62,2)) - ├── flags: ∅ - └── body: (length: 19) - ├── @ StringNode (location: (1,0)-(2,2)) - │ ├── flags: newline - │ ├── opening_loc: (1,0)-(1,1) = "\"" - │ ├── content_loc: (1,1)-(2,1) = "a\\\nb" - │ ├── closing_loc: (2,1)-(2,2) = "\"" - │ └── unescaped: "ab" - ├── @ ArrayNode (location: (4,0)-(5,2)) - │ ├── flags: newline, static_literal - │ ├── elements: (length: 1) - │ │ └── @ SymbolNode (location: (4,3)-(5,1)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: ∅ - │ │ ├── value_loc: (4,3)-(5,1) = "a\\\nb" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "a\nb" - │ ├── opening_loc: (4,0)-(4,3) = "%I{" - │ └── closing_loc: (5,1)-(5,2) = "}" - ├── @ StringNode (location: (7,0)-(8,2)) - │ ├── flags: newline - │ ├── opening_loc: (7,0)-(7,3) = "%Q{" - │ ├── content_loc: (7,3)-(8,1) = "a\\\nb" - │ ├── closing_loc: (8,1)-(8,2) = "}" - │ └── unescaped: "ab" - ├── @ ArrayNode (location: (10,0)-(11,2)) - │ ├── flags: newline - │ ├── elements: (length: 1) - │ │ └── @ StringNode (location: (10,3)-(11,1)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (10,3)-(11,1) = "a\\\nb" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "a\nb" - │ ├── opening_loc: (10,0)-(10,3) = "%W{" - │ └── closing_loc: (11,1)-(11,2) = "}" - ├── @ ArrayNode (location: (13,0)-(14,2)) - │ ├── flags: newline, static_literal - │ ├── elements: (length: 1) - │ │ └── @ SymbolNode (location: (13,3)-(14,1)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: ∅ - │ │ ├── value_loc: (13,3)-(14,1) = "a\\\nb" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "a\nb" - │ ├── opening_loc: (13,0)-(13,3) = "%i{" - │ └── closing_loc: (14,1)-(14,2) = "}" - ├── @ StringNode (location: (16,0)-(17,2)) - │ ├── flags: newline - │ ├── opening_loc: (16,0)-(16,3) = "%q{" - │ ├── content_loc: (16,3)-(17,1) = "a\\\nb" - │ ├── closing_loc: (17,1)-(17,2) = "}" - │ └── unescaped: "a\\\nb" - ├── @ RegularExpressionNode (location: (19,0)-(20,2)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (19,0)-(19,3) = "%r{" - │ ├── content_loc: (19,3)-(20,1) = "a\\\nb" - │ ├── closing_loc: (20,1)-(20,2) = "}" - │ └── unescaped: "ab" - ├── @ SymbolNode (location: (22,0)-(23,2)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (22,0)-(22,3) = "%s{" - │ ├── value_loc: (22,3)-(23,1) = "a\\\nb" - │ ├── closing_loc: (23,1)-(23,2) = "}" - │ └── unescaped: "a\\\nb" - ├── @ ArrayNode (location: (25,0)-(26,2)) - │ ├── flags: newline - │ ├── elements: (length: 1) - │ │ └── @ StringNode (location: (25,3)-(26,1)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (25,3)-(26,1) = "a\\\nb" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "a\nb" - │ ├── opening_loc: (25,0)-(25,3) = "%w{" - │ └── closing_loc: (26,1)-(26,2) = "}" - ├── @ XStringNode (location: (28,0)-(29,2)) - │ ├── flags: newline - │ ├── opening_loc: (28,0)-(28,3) = "%x{" - │ ├── content_loc: (28,3)-(29,1) = "a\\\nb" - │ ├── closing_loc: (29,1)-(29,2) = "}" - │ └── unescaped: "ab" - ├── @ StringNode (location: (31,0)-(32,2)) - │ ├── flags: newline - │ ├── opening_loc: (31,0)-(31,2) = "%{" - │ ├── content_loc: (31,2)-(32,1) = "a\\\nb" - │ ├── closing_loc: (32,1)-(32,2) = "}" - │ └── unescaped: "ab" - ├── @ StringNode (location: (34,0)-(35,2)) - │ ├── flags: newline - │ ├── opening_loc: (34,0)-(34,1) = "'" - │ ├── content_loc: (34,1)-(35,1) = "a\\\nb" - │ ├── closing_loc: (35,1)-(35,2) = "'" - │ └── unescaped: "a\\\nb" - ├── @ RegularExpressionNode (location: (37,0)-(38,2)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (37,0)-(37,1) = "/" - │ ├── content_loc: (37,1)-(38,1) = "a\\\nb" - │ ├── closing_loc: (38,1)-(38,2) = "/" - │ └── unescaped: "ab" - ├── @ SymbolNode (location: (40,0)-(41,2)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (40,0)-(40,2) = ":\"" - │ ├── value_loc: (40,2)-(41,1) = "a\\\nb" - │ ├── closing_loc: (41,1)-(41,2) = "\"" - │ └── unescaped: "ab" - ├── @ SymbolNode (location: (43,0)-(44,2)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (43,0)-(43,2) = ":'" - │ ├── value_loc: (43,2)-(44,1) = "a\\\nb" - │ ├── closing_loc: (44,1)-(44,2) = "'" - │ └── unescaped: "a\\\nb" - ├── @ StringNode (location: (46,0)-(46,9)) - │ ├── flags: newline - │ ├── opening_loc: (46,0)-(46,9) = "<<-\"HERE\"" - │ ├── content_loc: (47,0)-(49,0) = "a\\\nb\n" - │ ├── closing_loc: (49,0)-(50,0) = "HERE\n" - │ └── unescaped: "ab\n" - ├── @ StringNode (location: (51,0)-(51,9)) - │ ├── flags: newline - │ ├── opening_loc: (51,0)-(51,9) = "<<-'HERE'" - │ ├── content_loc: (52,0)-(54,0) = "a\\\nb\n" - │ ├── closing_loc: (54,0)-(55,0) = "HERE\n" - │ └── unescaped: "a\\\nb\n" - ├── @ XStringNode (location: (56,0)-(56,9)) - │ ├── flags: newline - │ ├── opening_loc: (56,0)-(56,9) = "<<-`HERE`" - │ ├── content_loc: (57,0)-(59,0) = "a\\\nb\n" - │ ├── closing_loc: (59,0)-(60,0) = "HERE\n" - │ └── unescaped: "ab\n" - └── @ XStringNode (location: (61,0)-(62,2)) - ├── flags: newline - ├── opening_loc: (61,0)-(61,1) = "`" - ├── content_loc: (61,1)-(62,1) = "a\\\nb" - ├── closing_loc: (62,1)-(62,2) = "`" - └── unescaped: "ab" diff --git a/test/prism/snapshots/whitequark/pattern_matching__FILE__LINE_literals.txt b/test/prism/snapshots/whitequark/pattern_matching__FILE__LINE_literals.txt deleted file mode 100644 index 77b6f0b1eae94e..00000000000000 --- a/test/prism/snapshots/whitequark/pattern_matching__FILE__LINE_literals.txt +++ /dev/null @@ -1,63 +0,0 @@ -@ ProgramNode (location: (1,8)-(3,11)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,8)-(3,11)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CaseMatchNode (location: (1,8)-(3,11)) - ├── flags: newline - ├── predicate: - │ @ ArrayNode (location: (1,13)-(1,51)) - │ ├── flags: ∅ - │ ├── elements: (length: 3) - │ │ ├── @ SourceFileNode (location: (1,14)-(1,22)) - │ │ │ ├── flags: ∅ - │ │ │ └── filepath: "whitequark/pattern_matching__FILE__LINE_literals.txt" - │ │ ├── @ CallNode (location: (1,24)-(1,36)) - │ │ │ ├── flags: ∅ - │ │ │ ├── receiver: - │ │ │ │ @ SourceLineNode (location: (1,24)-(1,32)) - │ │ │ │ └── flags: static_literal - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :+ - │ │ │ ├── message_loc: (1,33)-(1,34) = "+" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (1,35)-(1,36)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ IntegerNode (location: (1,35)-(1,36)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── @ SourceEncodingNode (location: (1,38)-(1,50)) - │ │ └── flags: static_literal - │ ├── opening_loc: (1,13)-(1,14) = "[" - │ └── closing_loc: (1,50)-(1,51) = "]" - ├── conditions: (length: 1) - │ └── @ InNode (location: (2,10)-(2,47)) - │ ├── flags: ∅ - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (2,13)-(2,47)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── requireds: (length: 3) - │ │ │ ├── @ SourceFileNode (location: (2,14)-(2,22)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── filepath: "whitequark/pattern_matching__FILE__LINE_literals.txt" - │ │ │ ├── @ SourceLineNode (location: (2,24)-(2,32)) - │ │ │ │ └── flags: static_literal - │ │ │ └── @ SourceEncodingNode (location: (2,34)-(2,46)) - │ │ │ └── flags: static_literal - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── opening_loc: (2,13)-(2,14) = "[" - │ │ └── closing_loc: (2,46)-(2,47) = "]" - │ ├── statements: ∅ - │ ├── in_loc: (2,10)-(2,12) = "in" - │ └── then_loc: ∅ - ├── else_clause: ∅ - ├── case_keyword_loc: (1,8)-(1,12) = "case" - └── end_keyword_loc: (3,8)-(3,11) = "end" diff --git a/test/prism/snapshots/whitequark/pattern_matching_blank_else.txt b/test/prism/snapshots/whitequark/pattern_matching_blank_else.txt deleted file mode 100644 index af14e7b5a67515..00000000000000 --- a/test/prism/snapshots/whitequark/pattern_matching_blank_else.txt +++ /dev/null @@ -1,37 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,26)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,26)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CaseMatchNode (location: (1,0)-(1,26)) - ├── flags: newline - ├── predicate: - │ @ IntegerNode (location: (1,5)-(1,6)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── conditions: (length: 1) - │ └── @ InNode (location: (1,8)-(1,15)) - │ ├── flags: ∅ - │ ├── pattern: - │ │ @ IntegerNode (location: (1,11)-(1,12)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── statements: - │ │ @ StatementsNode (location: (1,14)-(1,15)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ IntegerNode (location: (1,14)-(1,15)) - │ │ ├── flags: newline, static_literal, decimal - │ │ └── value: 3 - │ ├── in_loc: (1,8)-(1,10) = "in" - │ └── then_loc: ∅ - ├── else_clause: - │ @ ElseNode (location: (1,17)-(1,26)) - │ ├── flags: ∅ - │ ├── else_keyword_loc: (1,17)-(1,21) = "else" - │ ├── statements: ∅ - │ └── end_keyword_loc: (1,23)-(1,26) = "end" - ├── case_keyword_loc: (1,0)-(1,4) = "case" - └── end_keyword_loc: (1,23)-(1,26) = "end" diff --git a/test/prism/snapshots/whitequark/pattern_matching_else.txt b/test/prism/snapshots/whitequark/pattern_matching_else.txt deleted file mode 100644 index 010f002716834b..00000000000000 --- a/test/prism/snapshots/whitequark/pattern_matching_else.txt +++ /dev/null @@ -1,43 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,29)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,29)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CaseMatchNode (location: (1,0)-(1,29)) - ├── flags: newline - ├── predicate: - │ @ IntegerNode (location: (1,5)-(1,6)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── conditions: (length: 1) - │ └── @ InNode (location: (1,8)-(1,15)) - │ ├── flags: ∅ - │ ├── pattern: - │ │ @ IntegerNode (location: (1,11)-(1,12)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ ├── statements: - │ │ @ StatementsNode (location: (1,14)-(1,15)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ IntegerNode (location: (1,14)-(1,15)) - │ │ ├── flags: newline, static_literal, decimal - │ │ └── value: 3 - │ ├── in_loc: (1,8)-(1,10) = "in" - │ └── then_loc: ∅ - ├── else_clause: - │ @ ElseNode (location: (1,17)-(1,29)) - │ ├── flags: ∅ - │ ├── else_keyword_loc: (1,17)-(1,21) = "else" - │ ├── statements: - │ │ @ StatementsNode (location: (1,23)-(1,24)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ IntegerNode (location: (1,23)-(1,24)) - │ │ ├── flags: newline, static_literal, decimal - │ │ └── value: 4 - │ └── end_keyword_loc: (1,26)-(1,29) = "end" - ├── case_keyword_loc: (1,0)-(1,4) = "case" - └── end_keyword_loc: (1,26)-(1,29) = "end" diff --git a/test/prism/snapshots/whitequark/pattern_matching_single_line.txt b/test/prism/snapshots/whitequark/pattern_matching_single_line.txt deleted file mode 100644 index f11ec00951b242..00000000000000 --- a/test/prism/snapshots/whitequark/pattern_matching_single_line.txt +++ /dev/null @@ -1,55 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,11)) -├── flags: ∅ -├── locals: [:a] -└── statements: - @ StatementsNode (location: (1,0)-(3,11)) - ├── flags: ∅ - └── body: (length: 4) - ├── @ MatchRequiredNode (location: (1,0)-(1,8)) - │ ├── flags: newline - │ ├── value: - │ │ @ IntegerNode (location: (1,0)-(1,1)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (1,5)-(1,8)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ LocalVariableTargetNode (location: (1,6)-(1,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :a - │ │ │ └── depth: 0 - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── opening_loc: (1,5)-(1,6) = "[" - │ │ └── closing_loc: (1,7)-(1,8) = "]" - │ └── operator_loc: (1,2)-(1,4) = "=>" - ├── @ LocalVariableReadNode (location: (1,10)-(1,11)) - │ ├── flags: newline - │ ├── name: :a - │ └── depth: 0 - ├── @ MatchPredicateNode (location: (3,0)-(3,8)) - │ ├── flags: newline - │ ├── value: - │ │ @ IntegerNode (location: (3,0)-(3,1)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (3,5)-(3,8)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ LocalVariableTargetNode (location: (3,6)-(3,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :a - │ │ │ └── depth: 0 - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── opening_loc: (3,5)-(3,6) = "[" - │ │ └── closing_loc: (3,7)-(3,8) = "]" - │ └── operator_loc: (3,2)-(3,4) = "in" - └── @ LocalVariableReadNode (location: (3,10)-(3,11)) - ├── flags: newline - ├── name: :a - └── depth: 0 diff --git a/test/prism/snapshots/whitequark/pattern_matching_single_line_allowed_omission_of_parentheses.txt b/test/prism/snapshots/whitequark/pattern_matching_single_line_allowed_omission_of_parentheses.txt deleted file mode 100644 index 51542e9dd2fa5f..00000000000000 --- a/test/prism/snapshots/whitequark/pattern_matching_single_line_allowed_omission_of_parentheses.txt +++ /dev/null @@ -1,291 +0,0 @@ -@ ProgramNode (location: (1,0)-(11,34)) -├── flags: ∅ -├── locals: [:a, :b, :value] -└── statements: - @ StatementsNode (location: (1,0)-(11,34)) - ├── flags: ∅ - └── body: (length: 12) - ├── @ MatchRequiredNode (location: (1,0)-(1,14)) - │ ├── flags: newline - │ ├── value: - │ │ @ ArrayNode (location: (1,0)-(1,6)) - │ │ ├── flags: static_literal - │ │ ├── elements: (length: 2) - │ │ │ ├── @ IntegerNode (location: (1,1)-(1,2)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ └── @ IntegerNode (location: (1,4)-(1,5)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ ├── opening_loc: (1,0)-(1,1) = "[" - │ │ └── closing_loc: (1,5)-(1,6) = "]" - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (1,10)-(1,14)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── requireds: (length: 2) - │ │ │ ├── @ LocalVariableTargetNode (location: (1,10)-(1,11)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :a - │ │ │ │ └── depth: 0 - │ │ │ └── @ LocalVariableTargetNode (location: (1,13)-(1,14)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :b - │ │ │ └── depth: 0 - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── opening_loc: ∅ - │ │ └── closing_loc: ∅ - │ └── operator_loc: (1,7)-(1,9) = "=>" - ├── @ LocalVariableReadNode (location: (1,16)-(1,17)) - │ ├── flags: newline - │ ├── name: :a - │ └── depth: 0 - ├── @ MatchPredicateNode (location: (3,0)-(3,14)) - │ ├── flags: newline - │ ├── value: - │ │ @ ArrayNode (location: (3,0)-(3,6)) - │ │ ├── flags: static_literal - │ │ ├── elements: (length: 2) - │ │ │ ├── @ IntegerNode (location: (3,1)-(3,2)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ └── @ IntegerNode (location: (3,4)-(3,5)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ ├── opening_loc: (3,0)-(3,1) = "[" - │ │ └── closing_loc: (3,5)-(3,6) = "]" - │ ├── pattern: - │ │ @ ArrayPatternNode (location: (3,10)-(3,14)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── requireds: (length: 2) - │ │ │ ├── @ LocalVariableTargetNode (location: (3,10)-(3,11)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :a - │ │ │ │ └── depth: 0 - │ │ │ └── @ LocalVariableTargetNode (location: (3,13)-(3,14)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :b - │ │ │ └── depth: 0 - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── opening_loc: ∅ - │ │ └── closing_loc: ∅ - │ └── operator_loc: (3,7)-(3,9) = "in" - ├── @ LocalVariableReadNode (location: (3,16)-(3,17)) - │ ├── flags: newline - │ ├── name: :a - │ └── depth: 0 - ├── @ MatchRequiredNode (location: (5,0)-(5,12)) - │ ├── flags: newline - │ ├── value: - │ │ @ HashNode (location: (5,0)-(5,6)) - │ │ ├── flags: static_literal - │ │ ├── opening_loc: (5,0)-(5,1) = "{" - │ │ ├── elements: (length: 1) - │ │ │ └── @ AssocNode (location: (5,1)-(5,5)) - │ │ │ ├── flags: static_literal - │ │ │ ├── key: - │ │ │ │ @ SymbolNode (location: (5,1)-(5,3)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── value_loc: (5,1)-(5,2) = "a" - │ │ │ │ ├── closing_loc: (5,2)-(5,3) = ":" - │ │ │ │ └── unescaped: "a" - │ │ │ ├── value: - │ │ │ │ @ IntegerNode (location: (5,4)-(5,5)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ └── operator_loc: ∅ - │ │ └── closing_loc: (5,5)-(5,6) = "}" - │ ├── pattern: - │ │ @ HashPatternNode (location: (5,10)-(5,12)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── elements: (length: 1) - │ │ │ └── @ AssocNode (location: (5,10)-(5,12)) - │ │ │ ├── flags: ∅ - │ │ │ ├── key: - │ │ │ │ @ SymbolNode (location: (5,10)-(5,12)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── value_loc: (5,10)-(5,11) = "a" - │ │ │ │ ├── closing_loc: (5,11)-(5,12) = ":" - │ │ │ │ └── unescaped: "a" - │ │ │ ├── value: - │ │ │ │ @ ImplicitNode (location: (5,10)-(5,11)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── value: - │ │ │ │ @ LocalVariableTargetNode (location: (5,10)-(5,11)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :a - │ │ │ │ └── depth: 0 - │ │ │ └── operator_loc: ∅ - │ │ ├── rest: ∅ - │ │ ├── opening_loc: ∅ - │ │ └── closing_loc: ∅ - │ └── operator_loc: (5,7)-(5,9) = "=>" - ├── @ LocalVariableReadNode (location: (5,14)-(5,15)) - │ ├── flags: newline - │ ├── name: :a - │ └── depth: 0 - ├── @ MatchPredicateNode (location: (7,0)-(7,12)) - │ ├── flags: newline - │ ├── value: - │ │ @ HashNode (location: (7,0)-(7,6)) - │ │ ├── flags: static_literal - │ │ ├── opening_loc: (7,0)-(7,1) = "{" - │ │ ├── elements: (length: 1) - │ │ │ └── @ AssocNode (location: (7,1)-(7,5)) - │ │ │ ├── flags: static_literal - │ │ │ ├── key: - │ │ │ │ @ SymbolNode (location: (7,1)-(7,3)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── value_loc: (7,1)-(7,2) = "a" - │ │ │ │ ├── closing_loc: (7,2)-(7,3) = ":" - │ │ │ │ └── unescaped: "a" - │ │ │ ├── value: - │ │ │ │ @ IntegerNode (location: (7,4)-(7,5)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ └── operator_loc: ∅ - │ │ └── closing_loc: (7,5)-(7,6) = "}" - │ ├── pattern: - │ │ @ HashPatternNode (location: (7,10)-(7,12)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── elements: (length: 1) - │ │ │ └── @ AssocNode (location: (7,10)-(7,12)) - │ │ │ ├── flags: ∅ - │ │ │ ├── key: - │ │ │ │ @ SymbolNode (location: (7,10)-(7,12)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── value_loc: (7,10)-(7,11) = "a" - │ │ │ │ ├── closing_loc: (7,11)-(7,12) = ":" - │ │ │ │ └── unescaped: "a" - │ │ │ ├── value: - │ │ │ │ @ ImplicitNode (location: (7,10)-(7,11)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── value: - │ │ │ │ @ LocalVariableTargetNode (location: (7,10)-(7,11)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :a - │ │ │ │ └── depth: 0 - │ │ │ └── operator_loc: ∅ - │ │ ├── rest: ∅ - │ │ ├── opening_loc: ∅ - │ │ └── closing_loc: ∅ - │ └── operator_loc: (7,7)-(7,9) = "in" - ├── @ LocalVariableReadNode (location: (7,14)-(7,15)) - │ ├── flags: newline - │ ├── name: :a - │ └── depth: 0 - ├── @ MatchRequiredNode (location: (9,0)-(9,27)) - │ ├── flags: newline - │ ├── value: - │ │ @ HashNode (location: (9,0)-(9,13)) - │ │ ├── flags: static_literal - │ │ ├── opening_loc: (9,0)-(9,1) = "{" - │ │ ├── elements: (length: 1) - │ │ │ └── @ AssocNode (location: (9,1)-(9,12)) - │ │ │ ├── flags: static_literal - │ │ │ ├── key: - │ │ │ │ @ SymbolNode (location: (9,1)-(9,5)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── value_loc: (9,1)-(9,4) = "key" - │ │ │ │ ├── closing_loc: (9,4)-(9,5) = ":" - │ │ │ │ └── unescaped: "key" - │ │ │ ├── value: - │ │ │ │ @ SymbolNode (location: (9,6)-(9,12)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: (9,6)-(9,7) = ":" - │ │ │ │ ├── value_loc: (9,7)-(9,12) = "value" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "value" - │ │ │ └── operator_loc: ∅ - │ │ └── closing_loc: (9,12)-(9,13) = "}" - │ ├── pattern: - │ │ @ HashPatternNode (location: (9,17)-(9,27)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── elements: (length: 1) - │ │ │ └── @ AssocNode (location: (9,17)-(9,27)) - │ │ │ ├── flags: ∅ - │ │ │ ├── key: - │ │ │ │ @ SymbolNode (location: (9,17)-(9,21)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── value_loc: (9,17)-(9,20) = "key" - │ │ │ │ ├── closing_loc: (9,20)-(9,21) = ":" - │ │ │ │ └── unescaped: "key" - │ │ │ ├── value: - │ │ │ │ @ LocalVariableTargetNode (location: (9,22)-(9,27)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :value - │ │ │ │ └── depth: 0 - │ │ │ └── operator_loc: ∅ - │ │ ├── rest: ∅ - │ │ ├── opening_loc: ∅ - │ │ └── closing_loc: ∅ - │ └── operator_loc: (9,14)-(9,16) = "=>" - ├── @ LocalVariableReadNode (location: (9,29)-(9,34)) - │ ├── flags: newline - │ ├── name: :value - │ └── depth: 0 - ├── @ MatchPredicateNode (location: (11,0)-(11,27)) - │ ├── flags: newline - │ ├── value: - │ │ @ HashNode (location: (11,0)-(11,13)) - │ │ ├── flags: static_literal - │ │ ├── opening_loc: (11,0)-(11,1) = "{" - │ │ ├── elements: (length: 1) - │ │ │ └── @ AssocNode (location: (11,1)-(11,12)) - │ │ │ ├── flags: static_literal - │ │ │ ├── key: - │ │ │ │ @ SymbolNode (location: (11,1)-(11,5)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── value_loc: (11,1)-(11,4) = "key" - │ │ │ │ ├── closing_loc: (11,4)-(11,5) = ":" - │ │ │ │ └── unescaped: "key" - │ │ │ ├── value: - │ │ │ │ @ SymbolNode (location: (11,6)-(11,12)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: (11,6)-(11,7) = ":" - │ │ │ │ ├── value_loc: (11,7)-(11,12) = "value" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "value" - │ │ │ └── operator_loc: ∅ - │ │ └── closing_loc: (11,12)-(11,13) = "}" - │ ├── pattern: - │ │ @ HashPatternNode (location: (11,17)-(11,27)) - │ │ ├── flags: ∅ - │ │ ├── constant: ∅ - │ │ ├── elements: (length: 1) - │ │ │ └── @ AssocNode (location: (11,17)-(11,27)) - │ │ │ ├── flags: ∅ - │ │ │ ├── key: - │ │ │ │ @ SymbolNode (location: (11,17)-(11,21)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── value_loc: (11,17)-(11,20) = "key" - │ │ │ │ ├── closing_loc: (11,20)-(11,21) = ":" - │ │ │ │ └── unescaped: "key" - │ │ │ ├── value: - │ │ │ │ @ LocalVariableTargetNode (location: (11,22)-(11,27)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :value - │ │ │ │ └── depth: 0 - │ │ │ └── operator_loc: ∅ - │ │ ├── rest: ∅ - │ │ ├── opening_loc: ∅ - │ │ └── closing_loc: ∅ - │ └── operator_loc: (11,14)-(11,16) = "in" - └── @ LocalVariableReadNode (location: (11,29)-(11,34)) - ├── flags: newline - ├── name: :value - └── depth: 0 diff --git a/test/prism/snapshots/whitequark/postexe.txt b/test/prism/snapshots/whitequark/postexe.txt deleted file mode 100644 index f4648b8a987de2..00000000000000 --- a/test/prism/snapshots/whitequark/postexe.txt +++ /dev/null @@ -1,19 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,9)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,9)) - ├── flags: ∅ - └── body: (length: 1) - └── @ PostExecutionNode (location: (1,0)-(1,9)) - ├── flags: newline - ├── statements: - │ @ StatementsNode (location: (1,6)-(1,7)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ IntegerNode (location: (1,6)-(1,7)) - │ ├── flags: newline, static_literal, decimal - │ └── value: 1 - ├── keyword_loc: (1,0)-(1,3) = "END" - ├── opening_loc: (1,4)-(1,5) = "{" - └── closing_loc: (1,8)-(1,9) = "}" diff --git a/test/prism/snapshots/whitequark/preexe.txt b/test/prism/snapshots/whitequark/preexe.txt deleted file mode 100644 index f9fe60d07a5e70..00000000000000 --- a/test/prism/snapshots/whitequark/preexe.txt +++ /dev/null @@ -1,19 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,11)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,11)) - ├── flags: ∅ - └── body: (length: 1) - └── @ PreExecutionNode (location: (1,0)-(1,11)) - ├── flags: newline - ├── statements: - │ @ StatementsNode (location: (1,8)-(1,9)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ IntegerNode (location: (1,8)-(1,9)) - │ ├── flags: newline, static_literal, decimal - │ └── value: 1 - ├── keyword_loc: (1,0)-(1,5) = "BEGIN" - ├── opening_loc: (1,6)-(1,7) = "{" - └── closing_loc: (1,10)-(1,11) = "}" diff --git a/test/prism/snapshots/whitequark/procarg0.txt b/test/prism/snapshots/whitequark/procarg0.txt deleted file mode 100644 index 90e03ce940dd8f..00000000000000 --- a/test/prism/snapshots/whitequark/procarg0.txt +++ /dev/null @@ -1,87 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,11)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,11)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ CallNode (location: (1,0)-(1,18)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :m - │ ├── message_loc: (1,0)-(1,1) = "m" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (1,2)-(1,18)) - │ ├── flags: ∅ - │ ├── locals: [:foo, :bar] - │ ├── parameters: - │ │ @ BlockParametersNode (location: (1,4)-(1,16)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (1,5)-(1,15)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 1) - │ │ │ │ └── @ MultiTargetNode (location: (1,5)-(1,15)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── lefts: (length: 2) - │ │ │ │ │ ├── @ RequiredParameterNode (location: (1,6)-(1,9)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ └── name: :foo - │ │ │ │ │ └── @ RequiredParameterNode (location: (1,11)-(1,14)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── name: :bar - │ │ │ │ ├── rest: ∅ - │ │ │ │ ├── rights: (length: 0) - │ │ │ │ ├── lparen_loc: (1,5)-(1,6) = "(" - │ │ │ │ └── rparen_loc: (1,14)-(1,15) = ")" - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: (1,4)-(1,5) = "|" - │ │ └── closing_loc: (1,15)-(1,16) = "|" - │ ├── body: ∅ - │ ├── opening_loc: (1,2)-(1,3) = "{" - │ └── closing_loc: (1,17)-(1,18) = "}" - └── @ CallNode (location: (3,0)-(3,11)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :m - ├── message_loc: (3,0)-(3,1) = "m" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (3,2)-(3,11)) - ├── flags: ∅ - ├── locals: [:foo] - ├── parameters: - │ @ BlockParametersNode (location: (3,4)-(3,9)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (3,5)-(3,8)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (3,5)-(3,8)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :foo - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (3,4)-(3,5) = "|" - │ └── closing_loc: (3,8)-(3,9) = "|" - ├── body: ∅ - ├── opening_loc: (3,2)-(3,3) = "{" - └── closing_loc: (3,10)-(3,11) = "}" diff --git a/test/prism/snapshots/whitequark/range_exclusive.txt b/test/prism/snapshots/whitequark/range_exclusive.txt deleted file mode 100644 index 2351c33fbc5d8f..00000000000000 --- a/test/prism/snapshots/whitequark/range_exclusive.txt +++ /dev/null @@ -1,18 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,5)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,5)) - ├── flags: ∅ - └── body: (length: 1) - └── @ RangeNode (location: (1,0)-(1,5)) - ├── flags: newline, static_literal, exclude_end - ├── left: - │ @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── right: - │ @ IntegerNode (location: (1,4)-(1,5)) - │ ├── flags: static_literal, decimal - │ └── value: 2 - └── operator_loc: (1,1)-(1,4) = "..." diff --git a/test/prism/snapshots/whitequark/range_inclusive.txt b/test/prism/snapshots/whitequark/range_inclusive.txt deleted file mode 100644 index 6d703816d656be..00000000000000 --- a/test/prism/snapshots/whitequark/range_inclusive.txt +++ /dev/null @@ -1,18 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,4)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,4)) - ├── flags: ∅ - └── body: (length: 1) - └── @ RangeNode (location: (1,0)-(1,4)) - ├── flags: newline, static_literal - ├── left: - │ @ IntegerNode (location: (1,0)-(1,1)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── right: - │ @ IntegerNode (location: (1,3)-(1,4)) - │ ├── flags: static_literal, decimal - │ └── value: 2 - └── operator_loc: (1,1)-(1,3) = ".." diff --git a/test/prism/snapshots/whitequark/rational.txt b/test/prism/snapshots/whitequark/rational.txt deleted file mode 100644 index f35fa5b5e39fcc..00000000000000 --- a/test/prism/snapshots/whitequark/rational.txt +++ /dev/null @@ -1,15 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,3)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,3)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ RationalNode (location: (1,0)-(1,5)) - │ ├── flags: newline, static_literal, decimal - │ ├── numerator: 421 - │ └── denominator: 10 - └── @ RationalNode (location: (3,0)-(3,3)) - ├── flags: newline, static_literal, decimal - ├── numerator: 42 - └── denominator: 1 diff --git a/test/prism/snapshots/whitequark/regex_interp.txt b/test/prism/snapshots/whitequark/regex_interp.txt deleted file mode 100644 index e440274cc2055f..00000000000000 --- a/test/prism/snapshots/whitequark/regex_interp.txt +++ /dev/null @@ -1,42 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,14)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,14)) - ├── flags: ∅ - └── body: (length: 1) - └── @ InterpolatedRegularExpressionNode (location: (1,0)-(1,14)) - ├── flags: newline - ├── opening_loc: (1,0)-(1,1) = "/" - ├── parts: (length: 3) - │ ├── @ StringNode (location: (1,1)-(1,4)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (1,1)-(1,4) = "foo" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "foo" - │ ├── @ EmbeddedStatementsNode (location: (1,4)-(1,10)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (1,4)-(1,6) = "\#{" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (1,6)-(1,9)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (1,6)-(1,9)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (1,6)-(1,9) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── closing_loc: (1,9)-(1,10) = "}" - │ └── @ StringNode (location: (1,10)-(1,13)) - │ ├── flags: static_literal, frozen - │ ├── opening_loc: ∅ - │ ├── content_loc: (1,10)-(1,13) = "baz" - │ ├── closing_loc: ∅ - │ └── unescaped: "baz" - └── closing_loc: (1,13)-(1,14) = "/" diff --git a/test/prism/snapshots/whitequark/regex_plain.txt b/test/prism/snapshots/whitequark/regex_plain.txt deleted file mode 100644 index 44dde97c79e016..00000000000000 --- a/test/prism/snapshots/whitequark/regex_plain.txt +++ /dev/null @@ -1,13 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,10)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,10)) - ├── flags: ∅ - └── body: (length: 1) - └── @ RegularExpressionNode (location: (1,0)-(1,10)) - ├── flags: newline, static_literal, ignore_case, multi_line, forced_us_ascii_encoding - ├── opening_loc: (1,0)-(1,1) = "/" - ├── content_loc: (1,1)-(1,7) = "source" - ├── closing_loc: (1,7)-(1,10) = "/im" - └── unescaped: "source" diff --git a/test/prism/snapshots/whitequark/resbody_list.txt b/test/prism/snapshots/whitequark/resbody_list.txt deleted file mode 100644 index 3fa753b4349566..00000000000000 --- a/test/prism/snapshots/whitequark/resbody_list.txt +++ /dev/null @@ -1,52 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,39)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,39)) - ├── flags: ∅ - └── body: (length: 1) - └── @ BeginNode (location: (1,0)-(1,39)) - ├── flags: newline - ├── begin_keyword_loc: (1,0)-(1,5) = "begin" - ├── statements: - │ @ StatementsNode (location: (1,7)-(1,11)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,7)-(1,11)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :meth - │ ├── message_loc: (1,7)-(1,11) = "meth" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── rescue_clause: - │ @ RescueNode (location: (1,13)-(1,34)) - │ ├── flags: ∅ - │ ├── keyword_loc: (1,13)-(1,19) = "rescue" - │ ├── exceptions: (length: 1) - │ │ └── @ ConstantReadNode (location: (1,20)-(1,29)) - │ │ ├── flags: ∅ - │ │ └── name: :Exception - │ ├── operator_loc: ∅ - │ ├── reference: ∅ - │ ├── statements: - │ │ @ StatementsNode (location: (1,31)-(1,34)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (1,31)-(1,34)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (1,31)-(1,34) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── subsequent: ∅ - ├── else_clause: ∅ - ├── ensure_clause: ∅ - └── end_keyword_loc: (1,36)-(1,39) = "end" diff --git a/test/prism/snapshots/whitequark/resbody_list_mrhs.txt b/test/prism/snapshots/whitequark/resbody_list_mrhs.txt deleted file mode 100644 index d8889d36e84305..00000000000000 --- a/test/prism/snapshots/whitequark/resbody_list_mrhs.txt +++ /dev/null @@ -1,62 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,44)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,44)) - ├── flags: ∅ - └── body: (length: 1) - └── @ BeginNode (location: (1,0)-(1,44)) - ├── flags: newline - ├── begin_keyword_loc: (1,0)-(1,5) = "begin" - ├── statements: - │ @ StatementsNode (location: (1,7)-(1,11)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,7)-(1,11)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :meth - │ ├── message_loc: (1,7)-(1,11) = "meth" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── rescue_clause: - │ @ RescueNode (location: (1,13)-(1,39)) - │ ├── flags: ∅ - │ ├── keyword_loc: (1,13)-(1,19) = "rescue" - │ ├── exceptions: (length: 2) - │ │ ├── @ ConstantReadNode (location: (1,20)-(1,29)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :Exception - │ │ └── @ CallNode (location: (1,31)-(1,34)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (1,31)-(1,34) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── operator_loc: ∅ - │ ├── reference: ∅ - │ ├── statements: - │ │ @ StatementsNode (location: (1,36)-(1,39)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (1,36)-(1,39)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (1,36)-(1,39) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── subsequent: ∅ - ├── else_clause: ∅ - ├── ensure_clause: ∅ - └── end_keyword_loc: (1,41)-(1,44) = "end" diff --git a/test/prism/snapshots/whitequark/resbody_list_var.txt b/test/prism/snapshots/whitequark/resbody_list_var.txt deleted file mode 100644 index 0fe73828347a1f..00000000000000 --- a/test/prism/snapshots/whitequark/resbody_list_var.txt +++ /dev/null @@ -1,63 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,39)) -├── flags: ∅ -├── locals: [:ex] -└── statements: - @ StatementsNode (location: (1,0)-(1,39)) - ├── flags: ∅ - └── body: (length: 1) - └── @ BeginNode (location: (1,0)-(1,39)) - ├── flags: newline - ├── begin_keyword_loc: (1,0)-(1,5) = "begin" - ├── statements: - │ @ StatementsNode (location: (1,7)-(1,11)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,7)-(1,11)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :meth - │ ├── message_loc: (1,7)-(1,11) = "meth" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── rescue_clause: - │ @ RescueNode (location: (1,13)-(1,34)) - │ ├── flags: ∅ - │ ├── keyword_loc: (1,13)-(1,19) = "rescue" - │ ├── exceptions: (length: 1) - │ │ └── @ CallNode (location: (1,20)-(1,23)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (1,20)-(1,23) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── operator_loc: (1,24)-(1,26) = "=>" - │ ├── reference: - │ │ @ LocalVariableTargetNode (location: (1,27)-(1,29)) - │ │ ├── flags: ∅ - │ │ ├── name: :ex - │ │ └── depth: 0 - │ ├── statements: - │ │ @ StatementsNode (location: (1,31)-(1,34)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (1,31)-(1,34)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (1,31)-(1,34) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── subsequent: ∅ - ├── else_clause: ∅ - ├── ensure_clause: ∅ - └── end_keyword_loc: (1,36)-(1,39) = "end" diff --git a/test/prism/snapshots/whitequark/resbody_var.txt b/test/prism/snapshots/whitequark/resbody_var.txt deleted file mode 100644 index ce5237a01bd534..00000000000000 --- a/test/prism/snapshots/whitequark/resbody_var.txt +++ /dev/null @@ -1,98 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,35)) -├── flags: ∅ -├── locals: [:ex] -└── statements: - @ StatementsNode (location: (1,0)-(3,35)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ BeginNode (location: (1,0)-(1,36)) - │ ├── flags: newline - │ ├── begin_keyword_loc: (1,0)-(1,5) = "begin" - │ ├── statements: - │ │ @ StatementsNode (location: (1,7)-(1,11)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (1,7)-(1,11)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :meth - │ │ ├── message_loc: (1,7)-(1,11) = "meth" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── rescue_clause: - │ │ @ RescueNode (location: (1,13)-(1,31)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (1,13)-(1,19) = "rescue" - │ │ ├── exceptions: (length: 0) - │ │ ├── operator_loc: (1,20)-(1,22) = "=>" - │ │ ├── reference: - │ │ │ @ InstanceVariableTargetNode (location: (1,23)-(1,26)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :@ex - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (1,28)-(1,31)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (1,28)-(1,31)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (1,28)-(1,31) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── subsequent: ∅ - │ ├── else_clause: ∅ - │ ├── ensure_clause: ∅ - │ └── end_keyword_loc: (1,33)-(1,36) = "end" - └── @ BeginNode (location: (3,0)-(3,35)) - ├── flags: newline - ├── begin_keyword_loc: (3,0)-(3,5) = "begin" - ├── statements: - │ @ StatementsNode (location: (3,7)-(3,11)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (3,7)-(3,11)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :meth - │ ├── message_loc: (3,7)-(3,11) = "meth" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── rescue_clause: - │ @ RescueNode (location: (3,13)-(3,30)) - │ ├── flags: ∅ - │ ├── keyword_loc: (3,13)-(3,19) = "rescue" - │ ├── exceptions: (length: 0) - │ ├── operator_loc: (3,20)-(3,22) = "=>" - │ ├── reference: - │ │ @ LocalVariableTargetNode (location: (3,23)-(3,25)) - │ │ ├── flags: ∅ - │ │ ├── name: :ex - │ │ └── depth: 0 - │ ├── statements: - │ │ @ StatementsNode (location: (3,27)-(3,30)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (3,27)-(3,30)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (3,27)-(3,30) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── subsequent: ∅ - ├── else_clause: ∅ - ├── ensure_clause: ∅ - └── end_keyword_loc: (3,32)-(3,35) = "end" diff --git a/test/prism/snapshots/whitequark/rescue.txt b/test/prism/snapshots/whitequark/rescue.txt deleted file mode 100644 index fa421b902c8baa..00000000000000 --- a/test/prism/snapshots/whitequark/rescue.txt +++ /dev/null @@ -1,49 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,29)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,29)) - ├── flags: ∅ - └── body: (length: 1) - └── @ BeginNode (location: (1,0)-(1,29)) - ├── flags: newline - ├── begin_keyword_loc: (1,0)-(1,5) = "begin" - ├── statements: - │ @ StatementsNode (location: (1,7)-(1,11)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,7)-(1,11)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :meth - │ ├── message_loc: (1,7)-(1,11) = "meth" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── rescue_clause: - │ @ RescueNode (location: (1,13)-(1,24)) - │ ├── flags: ∅ - │ ├── keyword_loc: (1,13)-(1,19) = "rescue" - │ ├── exceptions: (length: 0) - │ ├── operator_loc: ∅ - │ ├── reference: ∅ - │ ├── statements: - │ │ @ StatementsNode (location: (1,21)-(1,24)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (1,21)-(1,24)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (1,21)-(1,24) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── subsequent: ∅ - ├── else_clause: ∅ - ├── ensure_clause: ∅ - └── end_keyword_loc: (1,26)-(1,29) = "end" diff --git a/test/prism/snapshots/whitequark/rescue_else.txt b/test/prism/snapshots/whitequark/rescue_else.txt deleted file mode 100644 index 31a4deab9f749a..00000000000000 --- a/test/prism/snapshots/whitequark/rescue_else.txt +++ /dev/null @@ -1,67 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,40)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,40)) - ├── flags: ∅ - └── body: (length: 1) - └── @ BeginNode (location: (1,0)-(1,40)) - ├── flags: newline - ├── begin_keyword_loc: (1,0)-(1,5) = "begin" - ├── statements: - │ @ StatementsNode (location: (1,7)-(1,11)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,7)-(1,11)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :meth - │ ├── message_loc: (1,7)-(1,11) = "meth" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── rescue_clause: - │ @ RescueNode (location: (1,13)-(1,24)) - │ ├── flags: ∅ - │ ├── keyword_loc: (1,13)-(1,19) = "rescue" - │ ├── exceptions: (length: 0) - │ ├── operator_loc: ∅ - │ ├── reference: ∅ - │ ├── statements: - │ │ @ StatementsNode (location: (1,21)-(1,24)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (1,21)-(1,24)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (1,21)-(1,24) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── subsequent: ∅ - ├── else_clause: - │ @ ElseNode (location: (1,26)-(1,40)) - │ ├── flags: ∅ - │ ├── else_keyword_loc: (1,26)-(1,30) = "else" - │ ├── statements: - │ │ @ StatementsNode (location: (1,32)-(1,35)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (1,32)-(1,35)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (1,32)-(1,35) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── end_keyword_loc: (1,37)-(1,40) = "end" - ├── ensure_clause: ∅ - └── end_keyword_loc: (1,37)-(1,40) = "end" diff --git a/test/prism/snapshots/whitequark/rescue_else_ensure.txt b/test/prism/snapshots/whitequark/rescue_else_ensure.txt deleted file mode 100644 index a300a253b87f16..00000000000000 --- a/test/prism/snapshots/whitequark/rescue_else_ensure.txt +++ /dev/null @@ -1,85 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,51)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,51)) - ├── flags: ∅ - └── body: (length: 1) - └── @ BeginNode (location: (1,0)-(1,51)) - ├── flags: newline - ├── begin_keyword_loc: (1,0)-(1,5) = "begin" - ├── statements: - │ @ StatementsNode (location: (1,7)-(1,11)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,7)-(1,11)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :meth - │ ├── message_loc: (1,7)-(1,11) = "meth" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── rescue_clause: - │ @ RescueNode (location: (1,13)-(1,24)) - │ ├── flags: ∅ - │ ├── keyword_loc: (1,13)-(1,19) = "rescue" - │ ├── exceptions: (length: 0) - │ ├── operator_loc: ∅ - │ ├── reference: ∅ - │ ├── statements: - │ │ @ StatementsNode (location: (1,21)-(1,24)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (1,21)-(1,24)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :baz - │ │ ├── message_loc: (1,21)-(1,24) = "baz" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── subsequent: ∅ - ├── else_clause: - │ @ ElseNode (location: (1,26)-(1,42)) - │ ├── flags: ∅ - │ ├── else_keyword_loc: (1,26)-(1,30) = "else" - │ ├── statements: - │ │ @ StatementsNode (location: (1,31)-(1,34)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (1,31)-(1,34)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (1,31)-(1,34) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── end_keyword_loc: (1,36)-(1,42) = "ensure" - ├── ensure_clause: - │ @ EnsureNode (location: (1,36)-(1,51)) - │ ├── flags: ∅ - │ ├── ensure_keyword_loc: (1,36)-(1,42) = "ensure" - │ ├── statements: - │ │ @ StatementsNode (location: (1,44)-(1,47)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (1,44)-(1,47)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (1,44)-(1,47) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── end_keyword_loc: (1,48)-(1,51) = "end" - └── end_keyword_loc: (1,48)-(1,51) = "end" diff --git a/test/prism/snapshots/whitequark/rescue_ensure.txt b/test/prism/snapshots/whitequark/rescue_ensure.txt deleted file mode 100644 index ac345e440aee2f..00000000000000 --- a/test/prism/snapshots/whitequark/rescue_ensure.txt +++ /dev/null @@ -1,67 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,42)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,42)) - ├── flags: ∅ - └── body: (length: 1) - └── @ BeginNode (location: (1,0)-(1,42)) - ├── flags: newline - ├── begin_keyword_loc: (1,0)-(1,5) = "begin" - ├── statements: - │ @ StatementsNode (location: (1,7)-(1,11)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,7)-(1,11)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :meth - │ ├── message_loc: (1,7)-(1,11) = "meth" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── rescue_clause: - │ @ RescueNode (location: (1,13)-(1,24)) - │ ├── flags: ∅ - │ ├── keyword_loc: (1,13)-(1,19) = "rescue" - │ ├── exceptions: (length: 0) - │ ├── operator_loc: ∅ - │ ├── reference: ∅ - │ ├── statements: - │ │ @ StatementsNode (location: (1,21)-(1,24)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (1,21)-(1,24)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :baz - │ │ ├── message_loc: (1,21)-(1,24) = "baz" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── subsequent: ∅ - ├── else_clause: ∅ - ├── ensure_clause: - │ @ EnsureNode (location: (1,26)-(1,42)) - │ ├── flags: ∅ - │ ├── ensure_keyword_loc: (1,26)-(1,32) = "ensure" - │ ├── statements: - │ │ @ StatementsNode (location: (1,34)-(1,37)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (1,34)-(1,37)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (1,34)-(1,37) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── end_keyword_loc: (1,39)-(1,42) = "end" - └── end_keyword_loc: (1,39)-(1,42) = "end" diff --git a/test/prism/snapshots/whitequark/rescue_in_lambda_block.txt b/test/prism/snapshots/whitequark/rescue_in_lambda_block.txt deleted file mode 100644 index 790202d61f2c96..00000000000000 --- a/test/prism/snapshots/whitequark/rescue_in_lambda_block.txt +++ /dev/null @@ -1,31 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,17)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,17)) - ├── flags: ∅ - └── body: (length: 1) - └── @ LambdaNode (location: (1,0)-(1,17)) - ├── flags: newline - ├── locals: [] - ├── operator_loc: (1,0)-(1,2) = "->" - ├── opening_loc: (1,3)-(1,5) = "do" - ├── closing_loc: (1,14)-(1,17) = "end" - ├── parameters: ∅ - └── body: - @ BeginNode (location: (1,3)-(1,17)) - ├── flags: ∅ - ├── begin_keyword_loc: ∅ - ├── statements: ∅ - ├── rescue_clause: - │ @ RescueNode (location: (1,6)-(1,12)) - │ ├── flags: ∅ - │ ├── keyword_loc: (1,6)-(1,12) = "rescue" - │ ├── exceptions: (length: 0) - │ ├── operator_loc: ∅ - │ ├── reference: ∅ - │ ├── statements: ∅ - │ └── subsequent: ∅ - ├── else_clause: ∅ - ├── ensure_clause: ∅ - └── end_keyword_loc: (1,14)-(1,17) = "end" diff --git a/test/prism/snapshots/whitequark/rescue_mod.txt b/test/prism/snapshots/whitequark/rescue_mod.txt deleted file mode 100644 index abed85c1b9e54d..00000000000000 --- a/test/prism/snapshots/whitequark/rescue_mod.txt +++ /dev/null @@ -1,32 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,15)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,15)) - ├── flags: ∅ - └── body: (length: 1) - └── @ RescueModifierNode (location: (1,0)-(1,15)) - ├── flags: newline - ├── expression: - │ @ CallNode (location: (1,0)-(1,4)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :meth - │ ├── message_loc: (1,0)-(1,4) = "meth" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── keyword_loc: (1,5)-(1,11) = "rescue" - └── rescue_expression: - @ CallNode (location: (1,12)-(1,15)) - ├── flags: variable_call, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :bar - ├── message_loc: (1,12)-(1,15) = "bar" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/whitequark/rescue_mod_asgn.txt b/test/prism/snapshots/whitequark/rescue_mod_asgn.txt deleted file mode 100644 index a2fa161e4eaf5d..00000000000000 --- a/test/prism/snapshots/whitequark/rescue_mod_asgn.txt +++ /dev/null @@ -1,39 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,21)) -├── flags: ∅ -├── locals: [:foo] -└── statements: - @ StatementsNode (location: (1,0)-(1,21)) - ├── flags: ∅ - └── body: (length: 1) - └── @ LocalVariableWriteNode (location: (1,0)-(1,21)) - ├── flags: newline - ├── name: :foo - ├── depth: 0 - ├── name_loc: (1,0)-(1,3) = "foo" - ├── value: - │ @ RescueModifierNode (location: (1,6)-(1,21)) - │ ├── flags: ∅ - │ ├── expression: - │ │ @ CallNode (location: (1,6)-(1,10)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :meth - │ │ ├── message_loc: (1,6)-(1,10) = "meth" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── keyword_loc: (1,11)-(1,17) = "rescue" - │ └── rescue_expression: - │ @ CallNode (location: (1,18)-(1,21)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :bar - │ ├── message_loc: (1,18)-(1,21) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── operator_loc: (1,4)-(1,5) = "=" diff --git a/test/prism/snapshots/whitequark/rescue_mod_masgn.txt b/test/prism/snapshots/whitequark/rescue_mod_masgn.txt deleted file mode 100644 index b5ca37b12957c8..00000000000000 --- a/test/prism/snapshots/whitequark/rescue_mod_masgn.txt +++ /dev/null @@ -1,50 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,29)) -├── flags: ∅ -├── locals: [:foo, :bar] -└── statements: - @ StatementsNode (location: (1,0)-(1,29)) - ├── flags: ∅ - └── body: (length: 1) - └── @ MultiWriteNode (location: (1,0)-(1,29)) - ├── flags: newline - ├── lefts: (length: 2) - │ ├── @ LocalVariableTargetNode (location: (1,0)-(1,3)) - │ │ ├── flags: ∅ - │ │ ├── name: :foo - │ │ └── depth: 0 - │ └── @ LocalVariableTargetNode (location: (1,5)-(1,8)) - │ ├── flags: ∅ - │ ├── name: :bar - │ └── depth: 0 - ├── rest: ∅ - ├── rights: (length: 0) - ├── lparen_loc: ∅ - ├── rparen_loc: ∅ - ├── operator_loc: (1,9)-(1,10) = "=" - └── value: - @ RescueModifierNode (location: (1,11)-(1,29)) - ├── flags: ∅ - ├── expression: - │ @ CallNode (location: (1,11)-(1,15)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :meth - │ ├── message_loc: (1,11)-(1,15) = "meth" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── keyword_loc: (1,16)-(1,22) = "rescue" - └── rescue_expression: - @ ArrayNode (location: (1,23)-(1,29)) - ├── flags: static_literal - ├── elements: (length: 2) - │ ├── @ IntegerNode (location: (1,24)-(1,25)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ └── @ IntegerNode (location: (1,27)-(1,28)) - │ ├── flags: static_literal, decimal - │ └── value: 2 - ├── opening_loc: (1,23)-(1,24) = "[" - └── closing_loc: (1,28)-(1,29) = "]" diff --git a/test/prism/snapshots/whitequark/rescue_mod_op_assign.txt b/test/prism/snapshots/whitequark/rescue_mod_op_assign.txt deleted file mode 100644 index 22101d7c98790d..00000000000000 --- a/test/prism/snapshots/whitequark/rescue_mod_op_assign.txt +++ /dev/null @@ -1,40 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,22)) -├── flags: ∅ -├── locals: [:foo] -└── statements: - @ StatementsNode (location: (1,0)-(1,22)) - ├── flags: ∅ - └── body: (length: 1) - └── @ LocalVariableOperatorWriteNode (location: (1,0)-(1,22)) - ├── flags: newline - ├── name_loc: (1,0)-(1,3) = "foo" - ├── binary_operator_loc: (1,4)-(1,6) = "+=" - ├── value: - │ @ RescueModifierNode (location: (1,7)-(1,22)) - │ ├── flags: ∅ - │ ├── expression: - │ │ @ CallNode (location: (1,7)-(1,11)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :meth - │ │ ├── message_loc: (1,7)-(1,11) = "meth" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── keyword_loc: (1,12)-(1,18) = "rescue" - │ └── rescue_expression: - │ @ CallNode (location: (1,19)-(1,22)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :bar - │ ├── message_loc: (1,19)-(1,22) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── name: :foo - ├── binary_operator: :+ - └── depth: 0 diff --git a/test/prism/snapshots/whitequark/rescue_without_begin_end.txt b/test/prism/snapshots/whitequark/rescue_without_begin_end.txt deleted file mode 100644 index 318ecc79e60127..00000000000000 --- a/test/prism/snapshots/whitequark/rescue_without_begin_end.txt +++ /dev/null @@ -1,66 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,30)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,30)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,30)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :meth - ├── message_loc: (1,0)-(1,4) = "meth" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,5)-(1,30)) - ├── flags: ∅ - ├── locals: [] - ├── parameters: ∅ - ├── body: - │ @ BeginNode (location: (1,5)-(1,30)) - │ ├── flags: ∅ - │ ├── begin_keyword_loc: ∅ - │ ├── statements: - │ │ @ StatementsNode (location: (1,9)-(1,12)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (1,9)-(1,12)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (1,9)-(1,12) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── rescue_clause: - │ │ @ RescueNode (location: (1,14)-(1,25)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (1,14)-(1,20) = "rescue" - │ │ ├── exceptions: (length: 0) - │ │ ├── operator_loc: ∅ - │ │ ├── reference: ∅ - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (1,22)-(1,25)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (1,22)-(1,25)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (1,22)-(1,25) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── subsequent: ∅ - │ ├── else_clause: ∅ - │ ├── ensure_clause: ∅ - │ └── end_keyword_loc: (1,27)-(1,30) = "end" - ├── opening_loc: (1,5)-(1,7) = "do" - └── closing_loc: (1,27)-(1,30) = "end" diff --git a/test/prism/snapshots/whitequark/restarg_named.txt b/test/prism/snapshots/whitequark/restarg_named.txt deleted file mode 100644 index 0bb6b9d2ba1bcc..00000000000000 --- a/test/prism/snapshots/whitequark/restarg_named.txt +++ /dev/null @@ -1,35 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,16)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,16)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(1,16)) - ├── flags: newline - ├── name: :f - ├── name_loc: (1,4)-(1,5) = "f" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (1,6)-(1,10)) - │ ├── flags: ∅ - │ ├── requireds: (length: 0) - │ ├── optionals: (length: 0) - │ ├── rest: - │ │ @ RestParameterNode (location: (1,6)-(1,10)) - │ │ ├── flags: ∅ - │ │ ├── name: :foo - │ │ ├── name_loc: (1,7)-(1,10) = "foo" - │ │ └── operator_loc: (1,6)-(1,7) = "*" - │ ├── posts: (length: 0) - │ ├── keywords: (length: 0) - │ ├── keyword_rest: ∅ - │ └── block: ∅ - ├── body: ∅ - ├── locals: [:foo] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: (1,5)-(1,6) = "(" - ├── rparen_loc: (1,10)-(1,11) = ")" - ├── equal_loc: ∅ - └── end_keyword_loc: (1,13)-(1,16) = "end" diff --git a/test/prism/snapshots/whitequark/restarg_unnamed.txt b/test/prism/snapshots/whitequark/restarg_unnamed.txt deleted file mode 100644 index 0fc102a82ca43d..00000000000000 --- a/test/prism/snapshots/whitequark/restarg_unnamed.txt +++ /dev/null @@ -1,35 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,13)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,13)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(1,13)) - ├── flags: newline - ├── name: :f - ├── name_loc: (1,4)-(1,5) = "f" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (1,6)-(1,7)) - │ ├── flags: ∅ - │ ├── requireds: (length: 0) - │ ├── optionals: (length: 0) - │ ├── rest: - │ │ @ RestParameterNode (location: (1,6)-(1,7)) - │ │ ├── flags: ∅ - │ │ ├── name: ∅ - │ │ ├── name_loc: ∅ - │ │ └── operator_loc: (1,6)-(1,7) = "*" - │ ├── posts: (length: 0) - │ ├── keywords: (length: 0) - │ ├── keyword_rest: ∅ - │ └── block: ∅ - ├── body: ∅ - ├── locals: [] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: (1,5)-(1,6) = "(" - ├── rparen_loc: (1,7)-(1,8) = ")" - ├── equal_loc: ∅ - └── end_keyword_loc: (1,10)-(1,13) = "end" diff --git a/test/prism/snapshots/whitequark/return.txt b/test/prism/snapshots/whitequark/return.txt deleted file mode 100644 index 1e059ba63c34e5..00000000000000 --- a/test/prism/snapshots/whitequark/return.txt +++ /dev/null @@ -1,65 +0,0 @@ -@ ProgramNode (location: (1,0)-(7,11)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(7,11)) - ├── flags: ∅ - └── body: (length: 4) - ├── @ ReturnNode (location: (1,0)-(1,6)) - │ ├── flags: newline - │ ├── keyword_loc: (1,0)-(1,6) = "return" - │ └── arguments: ∅ - ├── @ ReturnNode (location: (3,0)-(3,10)) - │ ├── flags: newline - │ ├── keyword_loc: (3,0)-(3,6) = "return" - │ └── arguments: - │ @ ArgumentsNode (location: (3,7)-(3,10)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ CallNode (location: (3,7)-(3,10)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (3,7)-(3,10) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ ReturnNode (location: (5,0)-(5,8)) - │ ├── flags: newline - │ ├── keyword_loc: (5,0)-(5,6) = "return" - │ └── arguments: - │ @ ArgumentsNode (location: (5,6)-(5,8)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ ParenthesesNode (location: (5,6)-(5,8)) - │ ├── flags: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (5,6)-(5,7) = "(" - │ └── closing_loc: (5,7)-(5,8) = ")" - └── @ ReturnNode (location: (7,0)-(7,11)) - ├── flags: newline - ├── keyword_loc: (7,0)-(7,6) = "return" - └── arguments: - @ ArgumentsNode (location: (7,6)-(7,11)) - ├── flags: ∅ - └── arguments: (length: 1) - └── @ ParenthesesNode (location: (7,6)-(7,11)) - ├── flags: ∅ - ├── body: - │ @ StatementsNode (location: (7,7)-(7,10)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (7,7)-(7,10)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (7,7)-(7,10) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── opening_loc: (7,6)-(7,7) = "(" - └── closing_loc: (7,10)-(7,11) = ")" diff --git a/test/prism/snapshots/whitequark/return_block.txt b/test/prism/snapshots/whitequark/return_block.txt deleted file mode 100644 index 90161b67509475..00000000000000 --- a/test/prism/snapshots/whitequark/return_block.txt +++ /dev/null @@ -1,44 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,21)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,21)) - ├── flags: ∅ - └── body: (length: 1) - └── @ ReturnNode (location: (1,0)-(1,21)) - ├── flags: newline - ├── keyword_loc: (1,0)-(1,6) = "return" - └── arguments: - @ ArgumentsNode (location: (1,7)-(1,21)) - ├── flags: ∅ - └── arguments: (length: 1) - └── @ CallNode (location: (1,7)-(1,21)) - ├── flags: ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :fun - ├── message_loc: (1,7)-(1,10) = "fun" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,11)-(1,14)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ CallNode (location: (1,11)-(1,14)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (1,11)-(1,14) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,15)-(1,21)) - ├── flags: ∅ - ├── locals: [] - ├── parameters: ∅ - ├── body: ∅ - ├── opening_loc: (1,15)-(1,17) = "do" - └── closing_loc: (1,18)-(1,21) = "end" diff --git a/test/prism/snapshots/whitequark/ruby_bug_10279.txt b/test/prism/snapshots/whitequark/ruby_bug_10279.txt deleted file mode 100644 index 0076c954a5c3e8..00000000000000 --- a/test/prism/snapshots/whitequark/ruby_bug_10279.txt +++ /dev/null @@ -1,39 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,24)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,24)) - ├── flags: ∅ - └── body: (length: 1) - └── @ HashNode (location: (1,0)-(1,24)) - ├── flags: newline - ├── opening_loc: (1,0)-(1,1) = "{" - ├── elements: (length: 1) - │ └── @ AssocNode (location: (1,1)-(1,23)) - │ ├── flags: ∅ - │ ├── key: - │ │ @ SymbolNode (location: (1,1)-(1,3)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: ∅ - │ │ ├── value_loc: (1,1)-(1,2) = "a" - │ │ ├── closing_loc: (1,2)-(1,3) = ":" - │ │ └── unescaped: "a" - │ ├── value: - │ │ @ IfNode (location: (1,4)-(1,23)) - │ │ ├── flags: newline - │ │ ├── if_keyword_loc: (1,4)-(1,6) = "if" - │ │ ├── predicate: - │ │ │ @ TrueNode (location: (1,7)-(1,11)) - │ │ │ └── flags: static_literal - │ │ ├── then_keyword_loc: (1,12)-(1,16) = "then" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (1,17)-(1,19)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ IntegerNode (location: (1,17)-(1,19)) - │ │ │ ├── flags: newline, static_literal, decimal - │ │ │ └── value: 42 - │ │ ├── subsequent: ∅ - │ │ └── end_keyword_loc: (1,20)-(1,23) = "end" - │ └── operator_loc: ∅ - └── closing_loc: (1,23)-(1,24) = "}" diff --git a/test/prism/snapshots/whitequark/ruby_bug_10653.txt b/test/prism/snapshots/whitequark/ruby_bug_10653.txt deleted file mode 100644 index 3a562d8b1f5076..00000000000000 --- a/test/prism/snapshots/whitequark/ruby_bug_10653.txt +++ /dev/null @@ -1,199 +0,0 @@ -@ ProgramNode (location: (1,0)-(5,31)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(5,31)) - ├── flags: ∅ - └── body: (length: 3) - ├── @ IfNode (location: (1,0)-(1,33)) - │ ├── flags: newline - │ ├── if_keyword_loc: ∅ - │ ├── predicate: - │ │ @ FalseNode (location: (1,0)-(1,5)) - │ │ └── flags: static_literal - │ ├── then_keyword_loc: (1,6)-(1,7) = "?" - │ ├── statements: - │ │ @ StatementsNode (location: (1,8)-(1,20)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (1,8)-(1,20)) - │ │ ├── flags: newline, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :raise - │ │ ├── message_loc: (1,8)-(1,13) = "raise" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: - │ │ @ BlockNode (location: (1,14)-(1,20)) - │ │ ├── flags: ∅ - │ │ ├── locals: [] - │ │ ├── parameters: ∅ - │ │ ├── body: ∅ - │ │ ├── opening_loc: (1,14)-(1,16) = "do" - │ │ └── closing_loc: (1,17)-(1,20) = "end" - │ ├── subsequent: - │ │ @ ElseNode (location: (1,21)-(1,33)) - │ │ ├── flags: ∅ - │ │ ├── else_keyword_loc: (1,21)-(1,22) = ":" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (1,23)-(1,33)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (1,23)-(1,33)) - │ │ │ ├── flags: newline, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :tap - │ │ │ ├── message_loc: (1,23)-(1,26) = "tap" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: - │ │ │ @ BlockNode (location: (1,27)-(1,33)) - │ │ │ ├── flags: ∅ - │ │ │ ├── locals: [] - │ │ │ ├── parameters: ∅ - │ │ │ ├── body: ∅ - │ │ │ ├── opening_loc: (1,27)-(1,29) = "do" - │ │ │ └── closing_loc: (1,30)-(1,33) = "end" - │ │ └── end_keyword_loc: ∅ - │ └── end_keyword_loc: ∅ - ├── @ IfNode (location: (3,0)-(3,25)) - │ ├── flags: newline - │ ├── if_keyword_loc: ∅ - │ ├── predicate: - │ │ @ FalseNode (location: (3,0)-(3,5)) - │ │ └── flags: static_literal - │ ├── then_keyword_loc: (3,6)-(3,7) = "?" - │ ├── statements: - │ │ @ StatementsNode (location: (3,8)-(3,16)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (3,8)-(3,16)) - │ │ ├── flags: newline, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :raise - │ │ ├── message_loc: (3,8)-(3,13) = "raise" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: - │ │ @ BlockNode (location: (3,14)-(3,16)) - │ │ ├── flags: ∅ - │ │ ├── locals: [] - │ │ ├── parameters: ∅ - │ │ ├── body: ∅ - │ │ ├── opening_loc: (3,14)-(3,15) = "{" - │ │ └── closing_loc: (3,15)-(3,16) = "}" - │ ├── subsequent: - │ │ @ ElseNode (location: (3,17)-(3,25)) - │ │ ├── flags: ∅ - │ │ ├── else_keyword_loc: (3,17)-(3,18) = ":" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (3,19)-(3,25)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (3,19)-(3,25)) - │ │ │ ├── flags: newline, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :tap - │ │ │ ├── message_loc: (3,19)-(3,22) = "tap" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: - │ │ │ @ BlockNode (location: (3,23)-(3,25)) - │ │ │ ├── flags: ∅ - │ │ │ ├── locals: [] - │ │ │ ├── parameters: ∅ - │ │ │ ├── body: ∅ - │ │ │ ├── opening_loc: (3,23)-(3,24) = "{" - │ │ │ └── closing_loc: (3,24)-(3,25) = "}" - │ │ └── end_keyword_loc: ∅ - │ └── end_keyword_loc: ∅ - └── @ IfNode (location: (5,0)-(5,31)) - ├── flags: newline - ├── if_keyword_loc: ∅ - ├── predicate: - │ @ TrueNode (location: (5,0)-(5,4)) - │ └── flags: static_literal - ├── then_keyword_loc: (5,5)-(5,6) = "?" - ├── statements: - │ @ StatementsNode (location: (5,7)-(5,27)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (5,7)-(5,27)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ IntegerNode (location: (5,7)-(5,8)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── call_operator_loc: (5,8)-(5,9) = "." - │ ├── name: :tap - │ ├── message_loc: (5,9)-(5,12) = "tap" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (5,13)-(5,27)) - │ ├── flags: ∅ - │ ├── locals: [:n] - │ ├── parameters: - │ │ @ BlockParametersNode (location: (5,16)-(5,19)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (5,17)-(5,18)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (5,17)-(5,18)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :n - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: (5,16)-(5,17) = "|" - │ │ └── closing_loc: (5,18)-(5,19) = "|" - │ ├── body: - │ │ @ StatementsNode (location: (5,20)-(5,23)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (5,20)-(5,23)) - │ │ ├── flags: newline, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :p - │ │ ├── message_loc: (5,20)-(5,21) = "p" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (5,22)-(5,23)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ LocalVariableReadNode (location: (5,22)-(5,23)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :n - │ │ │ └── depth: 0 - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── opening_loc: (5,13)-(5,15) = "do" - │ └── closing_loc: (5,24)-(5,27) = "end" - ├── subsequent: - │ @ ElseNode (location: (5,28)-(5,31)) - │ ├── flags: ∅ - │ ├── else_keyword_loc: (5,28)-(5,29) = ":" - │ ├── statements: - │ │ @ StatementsNode (location: (5,30)-(5,31)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ IntegerNode (location: (5,30)-(5,31)) - │ │ ├── flags: newline, static_literal, decimal - │ │ └── value: 0 - │ └── end_keyword_loc: ∅ - └── end_keyword_loc: ∅ diff --git a/test/prism/snapshots/whitequark/ruby_bug_11107.txt b/test/prism/snapshots/whitequark/ruby_bug_11107.txt deleted file mode 100644 index 4ed332f903b9f5..00000000000000 --- a/test/prism/snapshots/whitequark/ruby_bug_11107.txt +++ /dev/null @@ -1,54 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,24)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,24)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,24)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :p - ├── message_loc: (1,0)-(1,1) = "p" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,2)-(1,24)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ LambdaNode (location: (1,2)-(1,24)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── operator_loc: (1,2)-(1,4) = "->" - │ ├── opening_loc: (1,7)-(1,9) = "do" - │ ├── closing_loc: (1,21)-(1,24) = "end" - │ ├── parameters: - │ │ @ BlockParametersNode (location: (1,4)-(1,6)) - │ │ ├── flags: ∅ - │ │ ├── parameters: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: (1,4)-(1,5) = "(" - │ │ └── closing_loc: (1,5)-(1,6) = ")" - │ └── body: - │ @ StatementsNode (location: (1,10)-(1,20)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,10)-(1,20)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (1,10)-(1,11) = "a" - │ ├── opening_loc: (1,11)-(1,12) = "(" - │ ├── arguments: ∅ - │ ├── closing_loc: (1,12)-(1,13) = ")" - │ └── block: - │ @ BlockNode (location: (1,14)-(1,20)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (1,14)-(1,16) = "do" - │ └── closing_loc: (1,17)-(1,20) = "end" - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/whitequark/ruby_bug_11380.txt b/test/prism/snapshots/whitequark/ruby_bug_11380.txt deleted file mode 100644 index 5893034b65d47c..00000000000000 --- a/test/prism/snapshots/whitequark/ruby_bug_11380.txt +++ /dev/null @@ -1,61 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,28)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,28)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,28)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :p - ├── message_loc: (1,0)-(1,1) = "p" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,2)-(1,21)) - │ ├── flags: contains_keywords - │ └── arguments: (length: 2) - │ ├── @ LambdaNode (location: (1,2)-(1,15)) - │ │ ├── flags: ∅ - │ │ ├── locals: [] - │ │ ├── operator_loc: (1,2)-(1,4) = "->" - │ │ ├── opening_loc: (1,5)-(1,6) = "{" - │ │ ├── closing_loc: (1,14)-(1,15) = "}" - │ │ ├── parameters: ∅ - │ │ └── body: - │ │ @ StatementsNode (location: (1,7)-(1,13)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ SymbolNode (location: (1,7)-(1,13)) - │ │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (1,7)-(1,8) = ":" - │ │ ├── value_loc: (1,8)-(1,13) = "hello" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "hello" - │ └── @ KeywordHashNode (location: (1,17)-(1,21)) - │ ├── flags: symbol_keys - │ └── elements: (length: 1) - │ └── @ AssocNode (location: (1,17)-(1,21)) - │ ├── flags: static_literal - │ ├── key: - │ │ @ SymbolNode (location: (1,17)-(1,19)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: ∅ - │ │ ├── value_loc: (1,17)-(1,18) = "a" - │ │ ├── closing_loc: (1,18)-(1,19) = ":" - │ │ └── unescaped: "a" - │ ├── value: - │ │ @ IntegerNode (location: (1,20)-(1,21)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ └── operator_loc: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,22)-(1,28)) - ├── flags: ∅ - ├── locals: [] - ├── parameters: ∅ - ├── body: ∅ - ├── opening_loc: (1,22)-(1,24) = "do" - └── closing_loc: (1,25)-(1,28) = "end" diff --git a/test/prism/snapshots/whitequark/ruby_bug_11873.txt b/test/prism/snapshots/whitequark/ruby_bug_11873.txt deleted file mode 100644 index a92b21748246ed..00000000000000 --- a/test/prism/snapshots/whitequark/ruby_bug_11873.txt +++ /dev/null @@ -1,793 +0,0 @@ -@ ProgramNode (location: (1,0)-(23,22)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(23,22)) - ├── flags: ∅ - └── body: (length: 12) - ├── @ CallNode (location: (1,0)-(1,20)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (1,0)-(1,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,2)-(1,13)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (1,2)-(1,8)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (1,2)-(1,3) = "b" - │ │ │ ├── opening_loc: (1,3)-(1,4) = "(" - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (1,4)-(1,7)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ CallNode (location: (1,4)-(1,7)) - │ │ │ │ ├── flags: ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :c - │ │ │ │ ├── message_loc: (1,4)-(1,5) = "c" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: - │ │ │ │ │ @ ArgumentsNode (location: (1,6)-(1,7)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── arguments: (length: 1) - │ │ │ │ │ └── @ CallNode (location: (1,6)-(1,7)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :d - │ │ │ │ │ ├── message_loc: (1,6)-(1,7) = "d" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── closing_loc: (1,7)-(1,8) = ")" - │ │ │ └── block: ∅ - │ │ └── @ StringNode (location: (1,10)-(1,13)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (1,10)-(1,11) = "\"" - │ │ ├── content_loc: (1,11)-(1,12) = "x" - │ │ ├── closing_loc: (1,12)-(1,13) = "\"" - │ │ └── unescaped: "x" - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (1,14)-(1,20)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (1,14)-(1,16) = "do" - │ └── closing_loc: (1,17)-(1,20) = "end" - ├── @ CallNode (location: (3,0)-(3,20)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (3,0)-(3,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (3,2)-(3,13)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (3,2)-(3,8)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (3,2)-(3,3) = "b" - │ │ │ ├── opening_loc: (3,3)-(3,4) = "(" - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (3,4)-(3,7)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ CallNode (location: (3,4)-(3,7)) - │ │ │ │ ├── flags: ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :c - │ │ │ │ ├── message_loc: (3,4)-(3,5) = "c" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: - │ │ │ │ │ @ ArgumentsNode (location: (3,6)-(3,7)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── arguments: (length: 1) - │ │ │ │ │ └── @ CallNode (location: (3,6)-(3,7)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :d - │ │ │ │ │ ├── message_loc: (3,6)-(3,7) = "d" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── closing_loc: (3,7)-(3,8) = ")" - │ │ │ └── block: ∅ - │ │ └── @ RegularExpressionNode (location: (3,10)-(3,13)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (3,10)-(3,11) = "/" - │ │ ├── content_loc: (3,11)-(3,12) = "x" - │ │ ├── closing_loc: (3,12)-(3,13) = "/" - │ │ └── unescaped: "x" - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (3,14)-(3,20)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (3,14)-(3,16) = "do" - │ └── closing_loc: (3,17)-(3,20) = "end" - ├── @ CallNode (location: (5,0)-(5,21)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (5,0)-(5,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (5,2)-(5,14)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (5,2)-(5,8)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (5,2)-(5,3) = "b" - │ │ │ ├── opening_loc: (5,3)-(5,4) = "(" - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (5,4)-(5,7)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ CallNode (location: (5,4)-(5,7)) - │ │ │ │ ├── flags: ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :c - │ │ │ │ ├── message_loc: (5,4)-(5,5) = "c" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: - │ │ │ │ │ @ ArgumentsNode (location: (5,6)-(5,7)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── arguments: (length: 1) - │ │ │ │ │ └── @ CallNode (location: (5,6)-(5,7)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :d - │ │ │ │ │ ├── message_loc: (5,6)-(5,7) = "d" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── closing_loc: (5,7)-(5,8) = ")" - │ │ │ └── block: ∅ - │ │ └── @ RegularExpressionNode (location: (5,10)-(5,14)) - │ │ ├── flags: static_literal, multi_line, forced_us_ascii_encoding - │ │ ├── opening_loc: (5,10)-(5,11) = "/" - │ │ ├── content_loc: (5,11)-(5,12) = "x" - │ │ ├── closing_loc: (5,12)-(5,14) = "/m" - │ │ └── unescaped: "x" - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (5,15)-(5,21)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (5,15)-(5,17) = "do" - │ └── closing_loc: (5,18)-(5,21) = "end" - ├── @ CallNode (location: (7,0)-(7,21)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (7,0)-(7,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (7,2)-(7,14)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (7,2)-(7,9)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (7,2)-(7,3) = "b" - │ │ │ ├── opening_loc: (7,3)-(7,4) = "(" - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (7,4)-(7,8)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ CallNode (location: (7,4)-(7,8)) - │ │ │ │ ├── flags: ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :c - │ │ │ │ ├── message_loc: (7,4)-(7,5) = "c" - │ │ │ │ ├── opening_loc: (7,5)-(7,6) = "(" - │ │ │ │ ├── arguments: - │ │ │ │ │ @ ArgumentsNode (location: (7,6)-(7,7)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── arguments: (length: 1) - │ │ │ │ │ └── @ CallNode (location: (7,6)-(7,7)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :d - │ │ │ │ │ ├── message_loc: (7,6)-(7,7) = "d" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── closing_loc: (7,7)-(7,8) = ")" - │ │ │ │ └── block: ∅ - │ │ │ ├── closing_loc: (7,8)-(7,9) = ")" - │ │ │ └── block: ∅ - │ │ └── @ StringNode (location: (7,11)-(7,14)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (7,11)-(7,12) = "\"" - │ │ ├── content_loc: (7,12)-(7,13) = "x" - │ │ ├── closing_loc: (7,13)-(7,14) = "\"" - │ │ └── unescaped: "x" - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (7,15)-(7,21)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (7,15)-(7,17) = "do" - │ └── closing_loc: (7,18)-(7,21) = "end" - ├── @ CallNode (location: (9,0)-(9,21)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (9,0)-(9,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (9,2)-(9,14)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (9,2)-(9,9)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (9,2)-(9,3) = "b" - │ │ │ ├── opening_loc: (9,3)-(9,4) = "(" - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (9,4)-(9,8)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ CallNode (location: (9,4)-(9,8)) - │ │ │ │ ├── flags: ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :c - │ │ │ │ ├── message_loc: (9,4)-(9,5) = "c" - │ │ │ │ ├── opening_loc: (9,5)-(9,6) = "(" - │ │ │ │ ├── arguments: - │ │ │ │ │ @ ArgumentsNode (location: (9,6)-(9,7)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── arguments: (length: 1) - │ │ │ │ │ └── @ CallNode (location: (9,6)-(9,7)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :d - │ │ │ │ │ ├── message_loc: (9,6)-(9,7) = "d" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── closing_loc: (9,7)-(9,8) = ")" - │ │ │ │ └── block: ∅ - │ │ │ ├── closing_loc: (9,8)-(9,9) = ")" - │ │ │ └── block: ∅ - │ │ └── @ RegularExpressionNode (location: (9,11)-(9,14)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (9,11)-(9,12) = "/" - │ │ ├── content_loc: (9,12)-(9,13) = "x" - │ │ ├── closing_loc: (9,13)-(9,14) = "/" - │ │ └── unescaped: "x" - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (9,15)-(9,21)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (9,15)-(9,17) = "do" - │ └── closing_loc: (9,18)-(9,21) = "end" - ├── @ CallNode (location: (11,0)-(11,22)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (11,0)-(11,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (11,2)-(11,15)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (11,2)-(11,9)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (11,2)-(11,3) = "b" - │ │ │ ├── opening_loc: (11,3)-(11,4) = "(" - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (11,4)-(11,8)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ CallNode (location: (11,4)-(11,8)) - │ │ │ │ ├── flags: ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :c - │ │ │ │ ├── message_loc: (11,4)-(11,5) = "c" - │ │ │ │ ├── opening_loc: (11,5)-(11,6) = "(" - │ │ │ │ ├── arguments: - │ │ │ │ │ @ ArgumentsNode (location: (11,6)-(11,7)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── arguments: (length: 1) - │ │ │ │ │ └── @ CallNode (location: (11,6)-(11,7)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :d - │ │ │ │ │ ├── message_loc: (11,6)-(11,7) = "d" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── closing_loc: (11,7)-(11,8) = ")" - │ │ │ │ └── block: ∅ - │ │ │ ├── closing_loc: (11,8)-(11,9) = ")" - │ │ │ └── block: ∅ - │ │ └── @ RegularExpressionNode (location: (11,11)-(11,15)) - │ │ ├── flags: static_literal, multi_line, forced_us_ascii_encoding - │ │ ├── opening_loc: (11,11)-(11,12) = "/" - │ │ ├── content_loc: (11,12)-(11,13) = "x" - │ │ ├── closing_loc: (11,13)-(11,15) = "/m" - │ │ └── unescaped: "x" - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (11,16)-(11,22)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (11,16)-(11,18) = "do" - │ └── closing_loc: (11,19)-(11,22) = "end" - ├── @ CallNode (location: (13,0)-(13,20)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (13,0)-(13,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (13,2)-(13,13)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (13,2)-(13,8)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (13,2)-(13,3) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: - │ │ │ @ BlockNode (location: (13,3)-(13,8)) - │ │ │ ├── flags: ∅ - │ │ │ ├── locals: [] - │ │ │ ├── parameters: ∅ - │ │ │ ├── body: - │ │ │ │ @ StatementsNode (location: (13,4)-(13,7)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (13,4)-(13,7)) - │ │ │ │ ├── flags: newline, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :c - │ │ │ │ ├── message_loc: (13,4)-(13,5) = "c" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: - │ │ │ │ │ @ ArgumentsNode (location: (13,6)-(13,7)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── arguments: (length: 1) - │ │ │ │ │ └── @ CallNode (location: (13,6)-(13,7)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :d - │ │ │ │ │ ├── message_loc: (13,6)-(13,7) = "d" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── opening_loc: (13,3)-(13,4) = "{" - │ │ │ └── closing_loc: (13,7)-(13,8) = "}" - │ │ └── @ StringNode (location: (13,10)-(13,13)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (13,10)-(13,11) = "\"" - │ │ ├── content_loc: (13,11)-(13,12) = "x" - │ │ ├── closing_loc: (13,12)-(13,13) = "\"" - │ │ └── unescaped: "x" - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (13,14)-(13,20)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (13,14)-(13,16) = "do" - │ └── closing_loc: (13,17)-(13,20) = "end" - ├── @ CallNode (location: (15,0)-(15,20)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (15,0)-(15,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (15,2)-(15,13)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (15,2)-(15,8)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (15,2)-(15,3) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: - │ │ │ @ BlockNode (location: (15,3)-(15,8)) - │ │ │ ├── flags: ∅ - │ │ │ ├── locals: [] - │ │ │ ├── parameters: ∅ - │ │ │ ├── body: - │ │ │ │ @ StatementsNode (location: (15,4)-(15,7)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (15,4)-(15,7)) - │ │ │ │ ├── flags: newline, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :c - │ │ │ │ ├── message_loc: (15,4)-(15,5) = "c" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: - │ │ │ │ │ @ ArgumentsNode (location: (15,6)-(15,7)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── arguments: (length: 1) - │ │ │ │ │ └── @ CallNode (location: (15,6)-(15,7)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :d - │ │ │ │ │ ├── message_loc: (15,6)-(15,7) = "d" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── opening_loc: (15,3)-(15,4) = "{" - │ │ │ └── closing_loc: (15,7)-(15,8) = "}" - │ │ └── @ RegularExpressionNode (location: (15,10)-(15,13)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (15,10)-(15,11) = "/" - │ │ ├── content_loc: (15,11)-(15,12) = "x" - │ │ ├── closing_loc: (15,12)-(15,13) = "/" - │ │ └── unescaped: "x" - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (15,14)-(15,20)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (15,14)-(15,16) = "do" - │ └── closing_loc: (15,17)-(15,20) = "end" - ├── @ CallNode (location: (17,0)-(17,21)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (17,0)-(17,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (17,2)-(17,14)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (17,2)-(17,8)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (17,2)-(17,3) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: - │ │ │ @ BlockNode (location: (17,3)-(17,8)) - │ │ │ ├── flags: ∅ - │ │ │ ├── locals: [] - │ │ │ ├── parameters: ∅ - │ │ │ ├── body: - │ │ │ │ @ StatementsNode (location: (17,4)-(17,7)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (17,4)-(17,7)) - │ │ │ │ ├── flags: newline, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :c - │ │ │ │ ├── message_loc: (17,4)-(17,5) = "c" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: - │ │ │ │ │ @ ArgumentsNode (location: (17,6)-(17,7)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── arguments: (length: 1) - │ │ │ │ │ └── @ CallNode (location: (17,6)-(17,7)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :d - │ │ │ │ │ ├── message_loc: (17,6)-(17,7) = "d" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── opening_loc: (17,3)-(17,4) = "{" - │ │ │ └── closing_loc: (17,7)-(17,8) = "}" - │ │ └── @ RegularExpressionNode (location: (17,10)-(17,14)) - │ │ ├── flags: static_literal, multi_line, forced_us_ascii_encoding - │ │ ├── opening_loc: (17,10)-(17,11) = "/" - │ │ ├── content_loc: (17,11)-(17,12) = "x" - │ │ ├── closing_loc: (17,12)-(17,14) = "/m" - │ │ └── unescaped: "x" - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (17,15)-(17,21)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (17,15)-(17,17) = "do" - │ └── closing_loc: (17,18)-(17,21) = "end" - ├── @ CallNode (location: (19,0)-(19,21)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (19,0)-(19,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (19,2)-(19,14)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (19,2)-(19,9)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (19,2)-(19,3) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: - │ │ │ @ BlockNode (location: (19,3)-(19,9)) - │ │ │ ├── flags: ∅ - │ │ │ ├── locals: [] - │ │ │ ├── parameters: ∅ - │ │ │ ├── body: - │ │ │ │ @ StatementsNode (location: (19,4)-(19,8)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (19,4)-(19,8)) - │ │ │ │ ├── flags: newline, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :c - │ │ │ │ ├── message_loc: (19,4)-(19,5) = "c" - │ │ │ │ ├── opening_loc: (19,5)-(19,6) = "(" - │ │ │ │ ├── arguments: - │ │ │ │ │ @ ArgumentsNode (location: (19,6)-(19,7)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── arguments: (length: 1) - │ │ │ │ │ └── @ CallNode (location: (19,6)-(19,7)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :d - │ │ │ │ │ ├── message_loc: (19,6)-(19,7) = "d" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── closing_loc: (19,7)-(19,8) = ")" - │ │ │ │ └── block: ∅ - │ │ │ ├── opening_loc: (19,3)-(19,4) = "{" - │ │ │ └── closing_loc: (19,8)-(19,9) = "}" - │ │ └── @ StringNode (location: (19,11)-(19,14)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (19,11)-(19,12) = "\"" - │ │ ├── content_loc: (19,12)-(19,13) = "x" - │ │ ├── closing_loc: (19,13)-(19,14) = "\"" - │ │ └── unescaped: "x" - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (19,15)-(19,21)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (19,15)-(19,17) = "do" - │ └── closing_loc: (19,18)-(19,21) = "end" - ├── @ CallNode (location: (21,0)-(21,21)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (21,0)-(21,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (21,2)-(21,14)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (21,2)-(21,9)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (21,2)-(21,3) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: - │ │ │ @ BlockNode (location: (21,3)-(21,9)) - │ │ │ ├── flags: ∅ - │ │ │ ├── locals: [] - │ │ │ ├── parameters: ∅ - │ │ │ ├── body: - │ │ │ │ @ StatementsNode (location: (21,4)-(21,8)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (21,4)-(21,8)) - │ │ │ │ ├── flags: newline, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :c - │ │ │ │ ├── message_loc: (21,4)-(21,5) = "c" - │ │ │ │ ├── opening_loc: (21,5)-(21,6) = "(" - │ │ │ │ ├── arguments: - │ │ │ │ │ @ ArgumentsNode (location: (21,6)-(21,7)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── arguments: (length: 1) - │ │ │ │ │ └── @ CallNode (location: (21,6)-(21,7)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :d - │ │ │ │ │ ├── message_loc: (21,6)-(21,7) = "d" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── closing_loc: (21,7)-(21,8) = ")" - │ │ │ │ └── block: ∅ - │ │ │ ├── opening_loc: (21,3)-(21,4) = "{" - │ │ │ └── closing_loc: (21,8)-(21,9) = "}" - │ │ └── @ RegularExpressionNode (location: (21,11)-(21,14)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (21,11)-(21,12) = "/" - │ │ ├── content_loc: (21,12)-(21,13) = "x" - │ │ ├── closing_loc: (21,13)-(21,14) = "/" - │ │ └── unescaped: "x" - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (21,15)-(21,21)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (21,15)-(21,17) = "do" - │ └── closing_loc: (21,18)-(21,21) = "end" - └── @ CallNode (location: (23,0)-(23,22)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :a - ├── message_loc: (23,0)-(23,1) = "a" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (23,2)-(23,15)) - │ ├── flags: ∅ - │ └── arguments: (length: 2) - │ ├── @ CallNode (location: (23,2)-(23,9)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :b - │ │ ├── message_loc: (23,2)-(23,3) = "b" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: - │ │ @ BlockNode (location: (23,3)-(23,9)) - │ │ ├── flags: ∅ - │ │ ├── locals: [] - │ │ ├── parameters: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (23,4)-(23,8)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (23,4)-(23,8)) - │ │ │ ├── flags: newline, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :c - │ │ │ ├── message_loc: (23,4)-(23,5) = "c" - │ │ │ ├── opening_loc: (23,5)-(23,6) = "(" - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (23,6)-(23,7)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ CallNode (location: (23,6)-(23,7)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :d - │ │ │ │ ├── message_loc: (23,6)-(23,7) = "d" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── closing_loc: (23,7)-(23,8) = ")" - │ │ │ └── block: ∅ - │ │ ├── opening_loc: (23,3)-(23,4) = "{" - │ │ └── closing_loc: (23,8)-(23,9) = "}" - │ └── @ RegularExpressionNode (location: (23,11)-(23,15)) - │ ├── flags: static_literal, multi_line, forced_us_ascii_encoding - │ ├── opening_loc: (23,11)-(23,12) = "/" - │ ├── content_loc: (23,12)-(23,13) = "x" - │ ├── closing_loc: (23,13)-(23,15) = "/m" - │ └── unescaped: "x" - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (23,16)-(23,22)) - ├── flags: ∅ - ├── locals: [] - ├── parameters: ∅ - ├── body: ∅ - ├── opening_loc: (23,16)-(23,18) = "do" - └── closing_loc: (23,19)-(23,22) = "end" diff --git a/test/prism/snapshots/whitequark/ruby_bug_11873_a.txt b/test/prism/snapshots/whitequark/ruby_bug_11873_a.txt deleted file mode 100644 index 6897357de824e5..00000000000000 --- a/test/prism/snapshots/whitequark/ruby_bug_11873_a.txt +++ /dev/null @@ -1,1285 +0,0 @@ -@ ProgramNode (location: (1,0)-(39,20)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(39,20)) - ├── flags: ∅ - └── body: (length: 20) - ├── @ CallNode (location: (1,0)-(1,18)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (1,0)-(1,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,2)-(1,11)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (1,2)-(1,8)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (1,2)-(1,3) = "b" - │ │ │ ├── opening_loc: (1,3)-(1,4) = "(" - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (1,4)-(1,7)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ CallNode (location: (1,4)-(1,7)) - │ │ │ │ ├── flags: ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :c - │ │ │ │ ├── message_loc: (1,4)-(1,5) = "c" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: - │ │ │ │ │ @ ArgumentsNode (location: (1,6)-(1,7)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── arguments: (length: 1) - │ │ │ │ │ └── @ CallNode (location: (1,6)-(1,7)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :d - │ │ │ │ │ ├── message_loc: (1,6)-(1,7) = "d" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── closing_loc: (1,7)-(1,8) = ")" - │ │ │ └── block: ∅ - │ │ └── @ IntegerNode (location: (1,10)-(1,11)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (1,12)-(1,18)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (1,12)-(1,14) = "do" - │ └── closing_loc: (1,15)-(1,18) = "end" - ├── @ CallNode (location: (3,0)-(3,20)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (3,0)-(3,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (3,2)-(3,13)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (3,2)-(3,8)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (3,2)-(3,3) = "b" - │ │ │ ├── opening_loc: (3,3)-(3,4) = "(" - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (3,4)-(3,7)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ CallNode (location: (3,4)-(3,7)) - │ │ │ │ ├── flags: ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :c - │ │ │ │ ├── message_loc: (3,4)-(3,5) = "c" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: - │ │ │ │ │ @ ArgumentsNode (location: (3,6)-(3,7)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── arguments: (length: 1) - │ │ │ │ │ └── @ CallNode (location: (3,6)-(3,7)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :d - │ │ │ │ │ ├── message_loc: (3,6)-(3,7) = "d" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── closing_loc: (3,7)-(3,8) = ")" - │ │ │ └── block: ∅ - │ │ └── @ FloatNode (location: (3,10)-(3,13)) - │ │ ├── flags: static_literal - │ │ └── value: 1.0 - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (3,14)-(3,20)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (3,14)-(3,16) = "do" - │ └── closing_loc: (3,17)-(3,20) = "end" - ├── @ CallNode (location: (5,0)-(5,21)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (5,0)-(5,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (5,2)-(5,14)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (5,2)-(5,8)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (5,2)-(5,3) = "b" - │ │ │ ├── opening_loc: (5,3)-(5,4) = "(" - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (5,4)-(5,7)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ CallNode (location: (5,4)-(5,7)) - │ │ │ │ ├── flags: ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :c - │ │ │ │ ├── message_loc: (5,4)-(5,5) = "c" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: - │ │ │ │ │ @ ArgumentsNode (location: (5,6)-(5,7)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── arguments: (length: 1) - │ │ │ │ │ └── @ CallNode (location: (5,6)-(5,7)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :d - │ │ │ │ │ ├── message_loc: (5,6)-(5,7) = "d" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── closing_loc: (5,7)-(5,8) = ")" - │ │ │ └── block: ∅ - │ │ └── @ ImaginaryNode (location: (5,10)-(5,14)) - │ │ ├── flags: static_literal - │ │ └── numeric: - │ │ @ FloatNode (location: (5,10)-(5,13)) - │ │ ├── flags: static_literal - │ │ └── value: 1.0 - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (5,15)-(5,21)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (5,15)-(5,17) = "do" - │ └── closing_loc: (5,18)-(5,21) = "end" - ├── @ CallNode (location: (7,0)-(7,21)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (7,0)-(7,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (7,2)-(7,14)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (7,2)-(7,8)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (7,2)-(7,3) = "b" - │ │ │ ├── opening_loc: (7,3)-(7,4) = "(" - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (7,4)-(7,7)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ CallNode (location: (7,4)-(7,7)) - │ │ │ │ ├── flags: ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :c - │ │ │ │ ├── message_loc: (7,4)-(7,5) = "c" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: - │ │ │ │ │ @ ArgumentsNode (location: (7,6)-(7,7)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── arguments: (length: 1) - │ │ │ │ │ └── @ CallNode (location: (7,6)-(7,7)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :d - │ │ │ │ │ ├── message_loc: (7,6)-(7,7) = "d" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── closing_loc: (7,7)-(7,8) = ")" - │ │ │ └── block: ∅ - │ │ └── @ RationalNode (location: (7,10)-(7,14)) - │ │ ├── flags: static_literal, decimal - │ │ ├── numerator: 1 - │ │ └── denominator: 1 - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (7,15)-(7,21)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (7,15)-(7,17) = "do" - │ └── closing_loc: (7,18)-(7,21) = "end" - ├── @ CallNode (location: (9,0)-(9,19)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (9,0)-(9,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (9,2)-(9,12)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (9,2)-(9,8)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (9,2)-(9,3) = "b" - │ │ │ ├── opening_loc: (9,3)-(9,4) = "(" - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (9,4)-(9,7)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ CallNode (location: (9,4)-(9,7)) - │ │ │ │ ├── flags: ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :c - │ │ │ │ ├── message_loc: (9,4)-(9,5) = "c" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: - │ │ │ │ │ @ ArgumentsNode (location: (9,6)-(9,7)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── arguments: (length: 1) - │ │ │ │ │ └── @ CallNode (location: (9,6)-(9,7)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :d - │ │ │ │ │ ├── message_loc: (9,6)-(9,7) = "d" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── closing_loc: (9,7)-(9,8) = ")" - │ │ │ └── block: ∅ - │ │ └── @ SymbolNode (location: (9,10)-(9,12)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (9,10)-(9,11) = ":" - │ │ ├── value_loc: (9,11)-(9,12) = "e" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "e" - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (9,13)-(9,19)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (9,13)-(9,15) = "do" - │ └── closing_loc: (9,16)-(9,19) = "end" - ├── @ CallNode (location: (11,0)-(11,19)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (11,0)-(11,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (11,2)-(11,12)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (11,2)-(11,9)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (11,2)-(11,3) = "b" - │ │ │ ├── opening_loc: (11,3)-(11,4) = "(" - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (11,4)-(11,8)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ CallNode (location: (11,4)-(11,8)) - │ │ │ │ ├── flags: ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :c - │ │ │ │ ├── message_loc: (11,4)-(11,5) = "c" - │ │ │ │ ├── opening_loc: (11,5)-(11,6) = "(" - │ │ │ │ ├── arguments: - │ │ │ │ │ @ ArgumentsNode (location: (11,6)-(11,7)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── arguments: (length: 1) - │ │ │ │ │ └── @ CallNode (location: (11,6)-(11,7)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :d - │ │ │ │ │ ├── message_loc: (11,6)-(11,7) = "d" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── closing_loc: (11,7)-(11,8) = ")" - │ │ │ │ └── block: ∅ - │ │ │ ├── closing_loc: (11,8)-(11,9) = ")" - │ │ │ └── block: ∅ - │ │ └── @ IntegerNode (location: (11,11)-(11,12)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (11,13)-(11,19)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (11,13)-(11,15) = "do" - │ └── closing_loc: (11,16)-(11,19) = "end" - ├── @ CallNode (location: (13,0)-(13,21)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (13,0)-(13,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (13,2)-(13,14)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (13,2)-(13,9)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (13,2)-(13,3) = "b" - │ │ │ ├── opening_loc: (13,3)-(13,4) = "(" - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (13,4)-(13,8)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ CallNode (location: (13,4)-(13,8)) - │ │ │ │ ├── flags: ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :c - │ │ │ │ ├── message_loc: (13,4)-(13,5) = "c" - │ │ │ │ ├── opening_loc: (13,5)-(13,6) = "(" - │ │ │ │ ├── arguments: - │ │ │ │ │ @ ArgumentsNode (location: (13,6)-(13,7)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── arguments: (length: 1) - │ │ │ │ │ └── @ CallNode (location: (13,6)-(13,7)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :d - │ │ │ │ │ ├── message_loc: (13,6)-(13,7) = "d" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── closing_loc: (13,7)-(13,8) = ")" - │ │ │ │ └── block: ∅ - │ │ │ ├── closing_loc: (13,8)-(13,9) = ")" - │ │ │ └── block: ∅ - │ │ └── @ FloatNode (location: (13,11)-(13,14)) - │ │ ├── flags: static_literal - │ │ └── value: 1.0 - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (13,15)-(13,21)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (13,15)-(13,17) = "do" - │ └── closing_loc: (13,18)-(13,21) = "end" - ├── @ CallNode (location: (15,0)-(15,22)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (15,0)-(15,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (15,2)-(15,15)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (15,2)-(15,9)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (15,2)-(15,3) = "b" - │ │ │ ├── opening_loc: (15,3)-(15,4) = "(" - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (15,4)-(15,8)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ CallNode (location: (15,4)-(15,8)) - │ │ │ │ ├── flags: ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :c - │ │ │ │ ├── message_loc: (15,4)-(15,5) = "c" - │ │ │ │ ├── opening_loc: (15,5)-(15,6) = "(" - │ │ │ │ ├── arguments: - │ │ │ │ │ @ ArgumentsNode (location: (15,6)-(15,7)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── arguments: (length: 1) - │ │ │ │ │ └── @ CallNode (location: (15,6)-(15,7)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :d - │ │ │ │ │ ├── message_loc: (15,6)-(15,7) = "d" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── closing_loc: (15,7)-(15,8) = ")" - │ │ │ │ └── block: ∅ - │ │ │ ├── closing_loc: (15,8)-(15,9) = ")" - │ │ │ └── block: ∅ - │ │ └── @ ImaginaryNode (location: (15,11)-(15,15)) - │ │ ├── flags: static_literal - │ │ └── numeric: - │ │ @ FloatNode (location: (15,11)-(15,14)) - │ │ ├── flags: static_literal - │ │ └── value: 1.0 - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (15,16)-(15,22)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (15,16)-(15,18) = "do" - │ └── closing_loc: (15,19)-(15,22) = "end" - ├── @ CallNode (location: (17,0)-(17,22)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (17,0)-(17,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (17,2)-(17,15)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (17,2)-(17,9)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (17,2)-(17,3) = "b" - │ │ │ ├── opening_loc: (17,3)-(17,4) = "(" - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (17,4)-(17,8)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ CallNode (location: (17,4)-(17,8)) - │ │ │ │ ├── flags: ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :c - │ │ │ │ ├── message_loc: (17,4)-(17,5) = "c" - │ │ │ │ ├── opening_loc: (17,5)-(17,6) = "(" - │ │ │ │ ├── arguments: - │ │ │ │ │ @ ArgumentsNode (location: (17,6)-(17,7)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── arguments: (length: 1) - │ │ │ │ │ └── @ CallNode (location: (17,6)-(17,7)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :d - │ │ │ │ │ ├── message_loc: (17,6)-(17,7) = "d" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── closing_loc: (17,7)-(17,8) = ")" - │ │ │ │ └── block: ∅ - │ │ │ ├── closing_loc: (17,8)-(17,9) = ")" - │ │ │ └── block: ∅ - │ │ └── @ RationalNode (location: (17,11)-(17,15)) - │ │ ├── flags: static_literal, decimal - │ │ ├── numerator: 1 - │ │ └── denominator: 1 - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (17,16)-(17,22)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (17,16)-(17,18) = "do" - │ └── closing_loc: (17,19)-(17,22) = "end" - ├── @ CallNode (location: (19,0)-(19,20)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (19,0)-(19,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (19,2)-(19,13)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (19,2)-(19,9)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (19,2)-(19,3) = "b" - │ │ │ ├── opening_loc: (19,3)-(19,4) = "(" - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (19,4)-(19,8)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ CallNode (location: (19,4)-(19,8)) - │ │ │ │ ├── flags: ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :c - │ │ │ │ ├── message_loc: (19,4)-(19,5) = "c" - │ │ │ │ ├── opening_loc: (19,5)-(19,6) = "(" - │ │ │ │ ├── arguments: - │ │ │ │ │ @ ArgumentsNode (location: (19,6)-(19,7)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── arguments: (length: 1) - │ │ │ │ │ └── @ CallNode (location: (19,6)-(19,7)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :d - │ │ │ │ │ ├── message_loc: (19,6)-(19,7) = "d" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── closing_loc: (19,7)-(19,8) = ")" - │ │ │ │ └── block: ∅ - │ │ │ ├── closing_loc: (19,8)-(19,9) = ")" - │ │ │ └── block: ∅ - │ │ └── @ SymbolNode (location: (19,11)-(19,13)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (19,11)-(19,12) = ":" - │ │ ├── value_loc: (19,12)-(19,13) = "e" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "e" - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (19,14)-(19,20)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (19,14)-(19,16) = "do" - │ └── closing_loc: (19,17)-(19,20) = "end" - ├── @ CallNode (location: (21,0)-(21,18)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (21,0)-(21,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (21,2)-(21,11)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (21,2)-(21,8)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (21,2)-(21,3) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: - │ │ │ @ BlockNode (location: (21,3)-(21,8)) - │ │ │ ├── flags: ∅ - │ │ │ ├── locals: [] - │ │ │ ├── parameters: ∅ - │ │ │ ├── body: - │ │ │ │ @ StatementsNode (location: (21,4)-(21,7)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (21,4)-(21,7)) - │ │ │ │ ├── flags: newline, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :c - │ │ │ │ ├── message_loc: (21,4)-(21,5) = "c" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: - │ │ │ │ │ @ ArgumentsNode (location: (21,6)-(21,7)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── arguments: (length: 1) - │ │ │ │ │ └── @ CallNode (location: (21,6)-(21,7)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :d - │ │ │ │ │ ├── message_loc: (21,6)-(21,7) = "d" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── opening_loc: (21,3)-(21,4) = "{" - │ │ │ └── closing_loc: (21,7)-(21,8) = "}" - │ │ └── @ IntegerNode (location: (21,10)-(21,11)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (21,12)-(21,18)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (21,12)-(21,14) = "do" - │ └── closing_loc: (21,15)-(21,18) = "end" - ├── @ CallNode (location: (23,0)-(23,20)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (23,0)-(23,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (23,2)-(23,13)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (23,2)-(23,8)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (23,2)-(23,3) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: - │ │ │ @ BlockNode (location: (23,3)-(23,8)) - │ │ │ ├── flags: ∅ - │ │ │ ├── locals: [] - │ │ │ ├── parameters: ∅ - │ │ │ ├── body: - │ │ │ │ @ StatementsNode (location: (23,4)-(23,7)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (23,4)-(23,7)) - │ │ │ │ ├── flags: newline, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :c - │ │ │ │ ├── message_loc: (23,4)-(23,5) = "c" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: - │ │ │ │ │ @ ArgumentsNode (location: (23,6)-(23,7)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── arguments: (length: 1) - │ │ │ │ │ └── @ CallNode (location: (23,6)-(23,7)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :d - │ │ │ │ │ ├── message_loc: (23,6)-(23,7) = "d" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── opening_loc: (23,3)-(23,4) = "{" - │ │ │ └── closing_loc: (23,7)-(23,8) = "}" - │ │ └── @ FloatNode (location: (23,10)-(23,13)) - │ │ ├── flags: static_literal - │ │ └── value: 1.0 - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (23,14)-(23,20)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (23,14)-(23,16) = "do" - │ └── closing_loc: (23,17)-(23,20) = "end" - ├── @ CallNode (location: (25,0)-(25,21)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (25,0)-(25,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (25,2)-(25,14)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (25,2)-(25,8)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (25,2)-(25,3) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: - │ │ │ @ BlockNode (location: (25,3)-(25,8)) - │ │ │ ├── flags: ∅ - │ │ │ ├── locals: [] - │ │ │ ├── parameters: ∅ - │ │ │ ├── body: - │ │ │ │ @ StatementsNode (location: (25,4)-(25,7)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (25,4)-(25,7)) - │ │ │ │ ├── flags: newline, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :c - │ │ │ │ ├── message_loc: (25,4)-(25,5) = "c" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: - │ │ │ │ │ @ ArgumentsNode (location: (25,6)-(25,7)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── arguments: (length: 1) - │ │ │ │ │ └── @ CallNode (location: (25,6)-(25,7)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :d - │ │ │ │ │ ├── message_loc: (25,6)-(25,7) = "d" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── opening_loc: (25,3)-(25,4) = "{" - │ │ │ └── closing_loc: (25,7)-(25,8) = "}" - │ │ └── @ ImaginaryNode (location: (25,10)-(25,14)) - │ │ ├── flags: static_literal - │ │ └── numeric: - │ │ @ FloatNode (location: (25,10)-(25,13)) - │ │ ├── flags: static_literal - │ │ └── value: 1.0 - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (25,15)-(25,21)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (25,15)-(25,17) = "do" - │ └── closing_loc: (25,18)-(25,21) = "end" - ├── @ CallNode (location: (27,0)-(27,21)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (27,0)-(27,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (27,2)-(27,14)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (27,2)-(27,8)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (27,2)-(27,3) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: - │ │ │ @ BlockNode (location: (27,3)-(27,8)) - │ │ │ ├── flags: ∅ - │ │ │ ├── locals: [] - │ │ │ ├── parameters: ∅ - │ │ │ ├── body: - │ │ │ │ @ StatementsNode (location: (27,4)-(27,7)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (27,4)-(27,7)) - │ │ │ │ ├── flags: newline, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :c - │ │ │ │ ├── message_loc: (27,4)-(27,5) = "c" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: - │ │ │ │ │ @ ArgumentsNode (location: (27,6)-(27,7)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── arguments: (length: 1) - │ │ │ │ │ └── @ CallNode (location: (27,6)-(27,7)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :d - │ │ │ │ │ ├── message_loc: (27,6)-(27,7) = "d" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── opening_loc: (27,3)-(27,4) = "{" - │ │ │ └── closing_loc: (27,7)-(27,8) = "}" - │ │ └── @ RationalNode (location: (27,10)-(27,14)) - │ │ ├── flags: static_literal, decimal - │ │ ├── numerator: 1 - │ │ └── denominator: 1 - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (27,15)-(27,21)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (27,15)-(27,17) = "do" - │ └── closing_loc: (27,18)-(27,21) = "end" - ├── @ CallNode (location: (29,0)-(29,19)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (29,0)-(29,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (29,2)-(29,12)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (29,2)-(29,8)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (29,2)-(29,3) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: - │ │ │ @ BlockNode (location: (29,3)-(29,8)) - │ │ │ ├── flags: ∅ - │ │ │ ├── locals: [] - │ │ │ ├── parameters: ∅ - │ │ │ ├── body: - │ │ │ │ @ StatementsNode (location: (29,4)-(29,7)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (29,4)-(29,7)) - │ │ │ │ ├── flags: newline, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :c - │ │ │ │ ├── message_loc: (29,4)-(29,5) = "c" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: - │ │ │ │ │ @ ArgumentsNode (location: (29,6)-(29,7)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── arguments: (length: 1) - │ │ │ │ │ └── @ CallNode (location: (29,6)-(29,7)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :d - │ │ │ │ │ ├── message_loc: (29,6)-(29,7) = "d" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── opening_loc: (29,3)-(29,4) = "{" - │ │ │ └── closing_loc: (29,7)-(29,8) = "}" - │ │ └── @ SymbolNode (location: (29,10)-(29,12)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (29,10)-(29,11) = ":" - │ │ ├── value_loc: (29,11)-(29,12) = "e" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "e" - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (29,13)-(29,19)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (29,13)-(29,15) = "do" - │ └── closing_loc: (29,16)-(29,19) = "end" - ├── @ CallNode (location: (31,0)-(31,19)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (31,0)-(31,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (31,2)-(31,12)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (31,2)-(31,9)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (31,2)-(31,3) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: - │ │ │ @ BlockNode (location: (31,3)-(31,9)) - │ │ │ ├── flags: ∅ - │ │ │ ├── locals: [] - │ │ │ ├── parameters: ∅ - │ │ │ ├── body: - │ │ │ │ @ StatementsNode (location: (31,4)-(31,8)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (31,4)-(31,8)) - │ │ │ │ ├── flags: newline, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :c - │ │ │ │ ├── message_loc: (31,4)-(31,5) = "c" - │ │ │ │ ├── opening_loc: (31,5)-(31,6) = "(" - │ │ │ │ ├── arguments: - │ │ │ │ │ @ ArgumentsNode (location: (31,6)-(31,7)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── arguments: (length: 1) - │ │ │ │ │ └── @ CallNode (location: (31,6)-(31,7)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :d - │ │ │ │ │ ├── message_loc: (31,6)-(31,7) = "d" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── closing_loc: (31,7)-(31,8) = ")" - │ │ │ │ └── block: ∅ - │ │ │ ├── opening_loc: (31,3)-(31,4) = "{" - │ │ │ └── closing_loc: (31,8)-(31,9) = "}" - │ │ └── @ IntegerNode (location: (31,11)-(31,12)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (31,13)-(31,19)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (31,13)-(31,15) = "do" - │ └── closing_loc: (31,16)-(31,19) = "end" - ├── @ CallNode (location: (33,0)-(33,21)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (33,0)-(33,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (33,2)-(33,14)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (33,2)-(33,9)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (33,2)-(33,3) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: - │ │ │ @ BlockNode (location: (33,3)-(33,9)) - │ │ │ ├── flags: ∅ - │ │ │ ├── locals: [] - │ │ │ ├── parameters: ∅ - │ │ │ ├── body: - │ │ │ │ @ StatementsNode (location: (33,4)-(33,8)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (33,4)-(33,8)) - │ │ │ │ ├── flags: newline, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :c - │ │ │ │ ├── message_loc: (33,4)-(33,5) = "c" - │ │ │ │ ├── opening_loc: (33,5)-(33,6) = "(" - │ │ │ │ ├── arguments: - │ │ │ │ │ @ ArgumentsNode (location: (33,6)-(33,7)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── arguments: (length: 1) - │ │ │ │ │ └── @ CallNode (location: (33,6)-(33,7)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :d - │ │ │ │ │ ├── message_loc: (33,6)-(33,7) = "d" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── closing_loc: (33,7)-(33,8) = ")" - │ │ │ │ └── block: ∅ - │ │ │ ├── opening_loc: (33,3)-(33,4) = "{" - │ │ │ └── closing_loc: (33,8)-(33,9) = "}" - │ │ └── @ FloatNode (location: (33,11)-(33,14)) - │ │ ├── flags: static_literal - │ │ └── value: 1.0 - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (33,15)-(33,21)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (33,15)-(33,17) = "do" - │ └── closing_loc: (33,18)-(33,21) = "end" - ├── @ CallNode (location: (35,0)-(35,22)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (35,0)-(35,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (35,2)-(35,15)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (35,2)-(35,9)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (35,2)-(35,3) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: - │ │ │ @ BlockNode (location: (35,3)-(35,9)) - │ │ │ ├── flags: ∅ - │ │ │ ├── locals: [] - │ │ │ ├── parameters: ∅ - │ │ │ ├── body: - │ │ │ │ @ StatementsNode (location: (35,4)-(35,8)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (35,4)-(35,8)) - │ │ │ │ ├── flags: newline, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :c - │ │ │ │ ├── message_loc: (35,4)-(35,5) = "c" - │ │ │ │ ├── opening_loc: (35,5)-(35,6) = "(" - │ │ │ │ ├── arguments: - │ │ │ │ │ @ ArgumentsNode (location: (35,6)-(35,7)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── arguments: (length: 1) - │ │ │ │ │ └── @ CallNode (location: (35,6)-(35,7)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :d - │ │ │ │ │ ├── message_loc: (35,6)-(35,7) = "d" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── closing_loc: (35,7)-(35,8) = ")" - │ │ │ │ └── block: ∅ - │ │ │ ├── opening_loc: (35,3)-(35,4) = "{" - │ │ │ └── closing_loc: (35,8)-(35,9) = "}" - │ │ └── @ ImaginaryNode (location: (35,11)-(35,15)) - │ │ ├── flags: static_literal - │ │ └── numeric: - │ │ @ FloatNode (location: (35,11)-(35,14)) - │ │ ├── flags: static_literal - │ │ └── value: 1.0 - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (35,16)-(35,22)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (35,16)-(35,18) = "do" - │ └── closing_loc: (35,19)-(35,22) = "end" - ├── @ CallNode (location: (37,0)-(37,22)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (37,0)-(37,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (37,2)-(37,15)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ CallNode (location: (37,2)-(37,9)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :b - │ │ │ ├── message_loc: (37,2)-(37,3) = "b" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: - │ │ │ @ BlockNode (location: (37,3)-(37,9)) - │ │ │ ├── flags: ∅ - │ │ │ ├── locals: [] - │ │ │ ├── parameters: ∅ - │ │ │ ├── body: - │ │ │ │ @ StatementsNode (location: (37,4)-(37,8)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (37,4)-(37,8)) - │ │ │ │ ├── flags: newline, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :c - │ │ │ │ ├── message_loc: (37,4)-(37,5) = "c" - │ │ │ │ ├── opening_loc: (37,5)-(37,6) = "(" - │ │ │ │ ├── arguments: - │ │ │ │ │ @ ArgumentsNode (location: (37,6)-(37,7)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── arguments: (length: 1) - │ │ │ │ │ └── @ CallNode (location: (37,6)-(37,7)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :d - │ │ │ │ │ ├── message_loc: (37,6)-(37,7) = "d" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── closing_loc: (37,7)-(37,8) = ")" - │ │ │ │ └── block: ∅ - │ │ │ ├── opening_loc: (37,3)-(37,4) = "{" - │ │ │ └── closing_loc: (37,8)-(37,9) = "}" - │ │ └── @ RationalNode (location: (37,11)-(37,15)) - │ │ ├── flags: static_literal, decimal - │ │ ├── numerator: 1 - │ │ └── denominator: 1 - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (37,16)-(37,22)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (37,16)-(37,18) = "do" - │ └── closing_loc: (37,19)-(37,22) = "end" - └── @ CallNode (location: (39,0)-(39,20)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :a - ├── message_loc: (39,0)-(39,1) = "a" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (39,2)-(39,13)) - │ ├── flags: ∅ - │ └── arguments: (length: 2) - │ ├── @ CallNode (location: (39,2)-(39,9)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :b - │ │ ├── message_loc: (39,2)-(39,3) = "b" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: - │ │ @ BlockNode (location: (39,3)-(39,9)) - │ │ ├── flags: ∅ - │ │ ├── locals: [] - │ │ ├── parameters: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (39,4)-(39,8)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (39,4)-(39,8)) - │ │ │ ├── flags: newline, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :c - │ │ │ ├── message_loc: (39,4)-(39,5) = "c" - │ │ │ ├── opening_loc: (39,5)-(39,6) = "(" - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (39,6)-(39,7)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ CallNode (location: (39,6)-(39,7)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :d - │ │ │ │ ├── message_loc: (39,6)-(39,7) = "d" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── closing_loc: (39,7)-(39,8) = ")" - │ │ │ └── block: ∅ - │ │ ├── opening_loc: (39,3)-(39,4) = "{" - │ │ └── closing_loc: (39,8)-(39,9) = "}" - │ └── @ SymbolNode (location: (39,11)-(39,13)) - │ ├── flags: static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (39,11)-(39,12) = ":" - │ ├── value_loc: (39,12)-(39,13) = "e" - │ ├── closing_loc: ∅ - │ └── unescaped: "e" - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (39,14)-(39,20)) - ├── flags: ∅ - ├── locals: [] - ├── parameters: ∅ - ├── body: ∅ - ├── opening_loc: (39,14)-(39,16) = "do" - └── closing_loc: (39,17)-(39,20) = "end" diff --git a/test/prism/snapshots/whitequark/ruby_bug_11873_b.txt b/test/prism/snapshots/whitequark/ruby_bug_11873_b.txt deleted file mode 100644 index 263f4f8dd30b3e..00000000000000 --- a/test/prism/snapshots/whitequark/ruby_bug_11873_b.txt +++ /dev/null @@ -1,103 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,25)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,25)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,25)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :p - ├── message_loc: (1,0)-(1,1) = "p" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,2)-(1,18)) - │ ├── flags: ∅ - │ └── arguments: (length: 2) - │ ├── @ CallNode (location: (1,2)-(1,13)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :p - │ │ ├── message_loc: (1,2)-(1,3) = "p" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: - │ │ @ BlockNode (location: (1,3)-(1,13)) - │ │ ├── flags: ∅ - │ │ ├── locals: [] - │ │ ├── parameters: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (1,4)-(1,12)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 2) - │ │ │ ├── @ CallNode (location: (1,4)-(1,8)) - │ │ │ │ ├── flags: newline, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :p - │ │ │ │ ├── message_loc: (1,4)-(1,5) = "p" - │ │ │ │ ├── opening_loc: (1,5)-(1,6) = "(" - │ │ │ │ ├── arguments: - │ │ │ │ │ @ ArgumentsNode (location: (1,6)-(1,7)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── arguments: (length: 1) - │ │ │ │ │ └── @ CallNode (location: (1,6)-(1,7)) - │ │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ │ ├── receiver: ∅ - │ │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ │ ├── name: :p - │ │ │ │ │ ├── message_loc: (1,6)-(1,7) = "p" - │ │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ │ ├── arguments: ∅ - │ │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ │ └── block: ∅ - │ │ │ │ ├── closing_loc: (1,7)-(1,8) = ")" - │ │ │ │ └── block: ∅ - │ │ │ └── @ CallNode (location: (1,9)-(1,12)) - │ │ │ ├── flags: newline, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :p - │ │ │ ├── message_loc: (1,9)-(1,10) = "p" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (1,11)-(1,12)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ CallNode (location: (1,11)-(1,12)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :p - │ │ │ │ ├── message_loc: (1,11)-(1,12) = "p" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── opening_loc: (1,3)-(1,4) = "{" - │ │ └── closing_loc: (1,12)-(1,13) = "}" - │ └── @ CallNode (location: (1,15)-(1,18)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :tap - │ ├── message_loc: (1,15)-(1,18) = "tap" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,19)-(1,25)) - ├── flags: ∅ - ├── locals: [] - ├── parameters: ∅ - ├── body: ∅ - ├── opening_loc: (1,19)-(1,21) = "do" - └── closing_loc: (1,22)-(1,25) = "end" diff --git a/test/prism/snapshots/whitequark/ruby_bug_11989.txt b/test/prism/snapshots/whitequark/ruby_bug_11989.txt deleted file mode 100644 index 96bafab7e9eb71..00000000000000 --- a/test/prism/snapshots/whitequark/ruby_bug_11989.txt +++ /dev/null @@ -1,26 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,8)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,8)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,8)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :p - ├── message_loc: (1,0)-(1,1) = "p" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,2)-(1,8)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ StringNode (location: (1,2)-(1,8)) - │ ├── flags: ∅ - │ ├── opening_loc: (1,2)-(1,8) = "<<~\"E\"" - │ ├── content_loc: (2,0)-(3,0) = " x\\n y\n" - │ ├── closing_loc: (3,0)-(4,0) = "E\n" - │ └── unescaped: "x\n y\n" - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/whitequark/ruby_bug_11990.txt b/test/prism/snapshots/whitequark/ruby_bug_11990.txt deleted file mode 100644 index 095381d13085b3..00000000000000 --- a/test/prism/snapshots/whitequark/ruby_bug_11990.txt +++ /dev/null @@ -1,37 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,12)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,12)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,12)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :p - ├── message_loc: (1,0)-(1,1) = "p" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,2)-(1,12)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ InterpolatedStringNode (location: (1,2)-(1,12)) - │ ├── flags: static_literal - │ ├── opening_loc: ∅ - │ ├── parts: (length: 2) - │ │ ├── @ StringNode (location: (1,2)-(1,6)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: (1,2)-(1,6) = "<<~E" - │ │ │ ├── content_loc: (2,0)-(3,0) = " x\n" - │ │ │ ├── closing_loc: (3,0)-(4,0) = "E\n" - │ │ │ └── unescaped: "x\n" - │ │ └── @ StringNode (location: (1,7)-(1,12)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: (1,7)-(1,8) = "\"" - │ │ ├── content_loc: (1,8)-(1,11) = " y" - │ │ ├── closing_loc: (1,11)-(1,12) = "\"" - │ │ └── unescaped: " y" - │ └── closing_loc: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/whitequark/ruby_bug_12073.txt b/test/prism/snapshots/whitequark/ruby_bug_12073.txt deleted file mode 100644 index 0b20229de91190..00000000000000 --- a/test/prism/snapshots/whitequark/ruby_bug_12073.txt +++ /dev/null @@ -1,104 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,34)) -├── flags: ∅ -├── locals: [:a] -└── statements: - @ StatementsNode (location: (1,0)-(3,34)) - ├── flags: ∅ - └── body: (length: 3) - ├── @ LocalVariableWriteNode (location: (1,0)-(1,5)) - │ ├── flags: newline - │ ├── name: :a - │ ├── depth: 0 - │ ├── name_loc: (1,0)-(1,1) = "a" - │ ├── value: - │ │ @ IntegerNode (location: (1,4)-(1,5)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ └── operator_loc: (1,2)-(1,3) = "=" - ├── @ CallNode (location: (1,7)-(1,13)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (1,7)-(1,8) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,9)-(1,13)) - │ │ ├── flags: contains_keywords - │ │ └── arguments: (length: 1) - │ │ └── @ KeywordHashNode (location: (1,9)-(1,13)) - │ │ ├── flags: symbol_keys - │ │ └── elements: (length: 1) - │ │ └── @ AssocNode (location: (1,9)-(1,13)) - │ │ ├── flags: static_literal - │ │ ├── key: - │ │ │ @ SymbolNode (location: (1,9)-(1,11)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (1,9)-(1,10) = "b" - │ │ │ ├── closing_loc: (1,10)-(1,11) = ":" - │ │ │ └── unescaped: "b" - │ │ ├── value: - │ │ │ @ IntegerNode (location: (1,12)-(1,13)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── operator_loc: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── @ DefNode (location: (3,0)-(3,34)) - ├── flags: newline - ├── name: :foo - ├── name_loc: (3,4)-(3,7) = "foo" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (3,8)-(3,13)) - │ ├── flags: ∅ - │ ├── requireds: (length: 1) - │ │ └── @ RequiredParameterNode (location: (3,8)-(3,13)) - │ │ ├── flags: ∅ - │ │ └── name: :raise - │ ├── optionals: (length: 0) - │ ├── rest: ∅ - │ ├── posts: (length: 0) - │ ├── keywords: (length: 0) - │ ├── keyword_rest: ∅ - │ └── block: ∅ - ├── body: - │ @ StatementsNode (location: (3,15)-(3,29)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (3,15)-(3,29)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :raise - │ ├── message_loc: (3,15)-(3,20) = "raise" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (3,21)-(3,29)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 2) - │ │ ├── @ ConstantPathNode (location: (3,21)-(3,25)) - │ │ │ ├── flags: ∅ - │ │ │ ├── parent: - │ │ │ │ @ ConstantReadNode (location: (3,21)-(3,22)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :A - │ │ │ ├── name: :B - │ │ │ ├── delimiter_loc: (3,22)-(3,24) = "::" - │ │ │ └── name_loc: (3,24)-(3,25) = "B" - │ │ └── @ StringNode (location: (3,27)-(3,29)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (3,27)-(3,28) = "'" - │ │ ├── content_loc: (3,28)-(3,28) = "" - │ │ ├── closing_loc: (3,28)-(3,29) = "'" - │ │ └── unescaped: "" - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── locals: [:raise] - ├── def_keyword_loc: (3,0)-(3,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: ∅ - ├── rparen_loc: ∅ - ├── equal_loc: ∅ - └── end_keyword_loc: (3,31)-(3,34) = "end" diff --git a/test/prism/snapshots/whitequark/ruby_bug_12402.txt b/test/prism/snapshots/whitequark/ruby_bug_12402.txt deleted file mode 100644 index 6f915342c03624..00000000000000 --- a/test/prism/snapshots/whitequark/ruby_bug_12402.txt +++ /dev/null @@ -1,613 +0,0 @@ -@ ProgramNode (location: (1,0)-(27,31)) -├── flags: ∅ -├── locals: [:foo] -└── statements: - @ StatementsNode (location: (1,0)-(27,31)) - ├── flags: ∅ - └── body: (length: 14) - ├── @ LocalVariableOperatorWriteNode (location: (1,0)-(1,27)) - │ ├── flags: newline - │ ├── name_loc: (1,0)-(1,3) = "foo" - │ ├── binary_operator_loc: (1,4)-(1,6) = "+=" - │ ├── value: - │ │ @ RescueModifierNode (location: (1,7)-(1,27)) - │ │ ├── flags: ∅ - │ │ ├── expression: - │ │ │ @ CallNode (location: (1,7)-(1,16)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :raise - │ │ │ ├── message_loc: (1,7)-(1,12) = "raise" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (1,13)-(1,16)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ CallNode (location: (1,13)-(1,16)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :bar - │ │ │ │ ├── message_loc: (1,13)-(1,16) = "bar" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── keyword_loc: (1,17)-(1,23) = "rescue" - │ │ └── rescue_expression: - │ │ @ NilNode (location: (1,24)-(1,27)) - │ │ └── flags: static_literal - │ ├── name: :foo - │ ├── binary_operator: :+ - │ └── depth: 0 - ├── @ LocalVariableOperatorWriteNode (location: (3,0)-(3,28)) - │ ├── flags: newline - │ ├── name_loc: (3,0)-(3,3) = "foo" - │ ├── binary_operator_loc: (3,4)-(3,6) = "+=" - │ ├── value: - │ │ @ RescueModifierNode (location: (3,7)-(3,28)) - │ │ ├── flags: ∅ - │ │ ├── expression: - │ │ │ @ CallNode (location: (3,7)-(3,17)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :raise - │ │ │ ├── message_loc: (3,7)-(3,12) = "raise" - │ │ │ ├── opening_loc: (3,12)-(3,13) = "(" - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (3,13)-(3,16)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ CallNode (location: (3,13)-(3,16)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :bar - │ │ │ │ ├── message_loc: (3,13)-(3,16) = "bar" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── closing_loc: (3,16)-(3,17) = ")" - │ │ │ └── block: ∅ - │ │ ├── keyword_loc: (3,18)-(3,24) = "rescue" - │ │ └── rescue_expression: - │ │ @ NilNode (location: (3,25)-(3,28)) - │ │ └── flags: static_literal - │ ├── name: :foo - │ ├── binary_operator: :+ - │ └── depth: 0 - ├── @ LocalVariableWriteNode (location: (5,0)-(5,26)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── depth: 0 - │ ├── name_loc: (5,0)-(5,3) = "foo" - │ ├── value: - │ │ @ RescueModifierNode (location: (5,6)-(5,26)) - │ │ ├── flags: ∅ - │ │ ├── expression: - │ │ │ @ CallNode (location: (5,6)-(5,15)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :raise - │ │ │ ├── message_loc: (5,6)-(5,11) = "raise" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (5,12)-(5,15)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ CallNode (location: (5,12)-(5,15)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :bar - │ │ │ │ ├── message_loc: (5,12)-(5,15) = "bar" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── keyword_loc: (5,16)-(5,22) = "rescue" - │ │ └── rescue_expression: - │ │ @ NilNode (location: (5,23)-(5,26)) - │ │ └── flags: static_literal - │ └── operator_loc: (5,4)-(5,5) = "=" - ├── @ LocalVariableWriteNode (location: (7,0)-(7,27)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── depth: 0 - │ ├── name_loc: (7,0)-(7,3) = "foo" - │ ├── value: - │ │ @ RescueModifierNode (location: (7,6)-(7,27)) - │ │ ├── flags: ∅ - │ │ ├── expression: - │ │ │ @ CallNode (location: (7,6)-(7,16)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :raise - │ │ │ ├── message_loc: (7,6)-(7,11) = "raise" - │ │ │ ├── opening_loc: (7,11)-(7,12) = "(" - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (7,12)-(7,15)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ CallNode (location: (7,12)-(7,15)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :bar - │ │ │ │ ├── message_loc: (7,12)-(7,15) = "bar" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── closing_loc: (7,15)-(7,16) = ")" - │ │ │ └── block: ∅ - │ │ ├── keyword_loc: (7,17)-(7,23) = "rescue" - │ │ └── rescue_expression: - │ │ @ NilNode (location: (7,24)-(7,27)) - │ │ └── flags: static_literal - │ └── operator_loc: (7,4)-(7,5) = "=" - ├── @ CallOperatorWriteNode (location: (9,0)-(9,29)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (9,0)-(9,3)) - │ │ ├── flags: ∅ - │ │ ├── name: :foo - │ │ └── depth: 0 - │ ├── call_operator_loc: (9,3)-(9,4) = "." - │ ├── message_loc: (9,4)-(9,5) = "C" - │ ├── read_name: :C - │ ├── write_name: :C= - │ ├── binary_operator: :+ - │ ├── binary_operator_loc: (9,6)-(9,8) = "+=" - │ └── value: - │ @ RescueModifierNode (location: (9,9)-(9,29)) - │ ├── flags: ∅ - │ ├── expression: - │ │ @ CallNode (location: (9,9)-(9,18)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :raise - │ │ ├── message_loc: (9,9)-(9,14) = "raise" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (9,15)-(9,18)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ CallNode (location: (9,15)-(9,18)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (9,15)-(9,18) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── keyword_loc: (9,19)-(9,25) = "rescue" - │ └── rescue_expression: - │ @ NilNode (location: (9,26)-(9,29)) - │ └── flags: static_literal - ├── @ CallOperatorWriteNode (location: (11,0)-(11,30)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (11,0)-(11,3)) - │ │ ├── flags: ∅ - │ │ ├── name: :foo - │ │ └── depth: 0 - │ ├── call_operator_loc: (11,3)-(11,4) = "." - │ ├── message_loc: (11,4)-(11,5) = "C" - │ ├── read_name: :C - │ ├── write_name: :C= - │ ├── binary_operator: :+ - │ ├── binary_operator_loc: (11,6)-(11,8) = "+=" - │ └── value: - │ @ RescueModifierNode (location: (11,9)-(11,30)) - │ ├── flags: ∅ - │ ├── expression: - │ │ @ CallNode (location: (11,9)-(11,19)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :raise - │ │ ├── message_loc: (11,9)-(11,14) = "raise" - │ │ ├── opening_loc: (11,14)-(11,15) = "(" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (11,15)-(11,18)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ CallNode (location: (11,15)-(11,18)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (11,15)-(11,18) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── closing_loc: (11,18)-(11,19) = ")" - │ │ └── block: ∅ - │ ├── keyword_loc: (11,20)-(11,26) = "rescue" - │ └── rescue_expression: - │ @ NilNode (location: (11,27)-(11,30)) - │ └── flags: static_literal - ├── @ CallOperatorWriteNode (location: (13,0)-(13,29)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (13,0)-(13,3)) - │ │ ├── flags: ∅ - │ │ ├── name: :foo - │ │ └── depth: 0 - │ ├── call_operator_loc: (13,3)-(13,4) = "." - │ ├── message_loc: (13,4)-(13,5) = "m" - │ ├── read_name: :m - │ ├── write_name: :m= - │ ├── binary_operator: :+ - │ ├── binary_operator_loc: (13,6)-(13,8) = "+=" - │ └── value: - │ @ RescueModifierNode (location: (13,9)-(13,29)) - │ ├── flags: ∅ - │ ├── expression: - │ │ @ CallNode (location: (13,9)-(13,18)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :raise - │ │ ├── message_loc: (13,9)-(13,14) = "raise" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (13,15)-(13,18)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ CallNode (location: (13,15)-(13,18)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (13,15)-(13,18) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── keyword_loc: (13,19)-(13,25) = "rescue" - │ └── rescue_expression: - │ @ NilNode (location: (13,26)-(13,29)) - │ └── flags: static_literal - ├── @ CallOperatorWriteNode (location: (15,0)-(15,30)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (15,0)-(15,3)) - │ │ ├── flags: ∅ - │ │ ├── name: :foo - │ │ └── depth: 0 - │ ├── call_operator_loc: (15,3)-(15,4) = "." - │ ├── message_loc: (15,4)-(15,5) = "m" - │ ├── read_name: :m - │ ├── write_name: :m= - │ ├── binary_operator: :+ - │ ├── binary_operator_loc: (15,6)-(15,8) = "+=" - │ └── value: - │ @ RescueModifierNode (location: (15,9)-(15,30)) - │ ├── flags: ∅ - │ ├── expression: - │ │ @ CallNode (location: (15,9)-(15,19)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :raise - │ │ ├── message_loc: (15,9)-(15,14) = "raise" - │ │ ├── opening_loc: (15,14)-(15,15) = "(" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (15,15)-(15,18)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ CallNode (location: (15,15)-(15,18)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (15,15)-(15,18) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── closing_loc: (15,18)-(15,19) = ")" - │ │ └── block: ∅ - │ ├── keyword_loc: (15,20)-(15,26) = "rescue" - │ └── rescue_expression: - │ @ NilNode (location: (15,27)-(15,30)) - │ └── flags: static_literal - ├── @ ConstantPathOrWriteNode (location: (17,0)-(17,31)) - │ ├── flags: newline - │ ├── target: - │ │ @ ConstantPathNode (location: (17,0)-(17,6)) - │ │ ├── flags: ∅ - │ │ ├── parent: - │ │ │ @ LocalVariableReadNode (location: (17,0)-(17,3)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :foo - │ │ │ └── depth: 0 - │ │ ├── name: :C - │ │ ├── delimiter_loc: (17,3)-(17,5) = "::" - │ │ └── name_loc: (17,5)-(17,6) = "C" - │ ├── operator_loc: (17,7)-(17,10) = "||=" - │ └── value: - │ @ RescueModifierNode (location: (17,11)-(17,31)) - │ ├── flags: ∅ - │ ├── expression: - │ │ @ CallNode (location: (17,11)-(17,20)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :raise - │ │ ├── message_loc: (17,11)-(17,16) = "raise" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (17,17)-(17,20)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ CallNode (location: (17,17)-(17,20)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (17,17)-(17,20) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── keyword_loc: (17,21)-(17,27) = "rescue" - │ └── rescue_expression: - │ @ NilNode (location: (17,28)-(17,31)) - │ └── flags: static_literal - ├── @ ConstantPathOrWriteNode (location: (19,0)-(19,32)) - │ ├── flags: newline - │ ├── target: - │ │ @ ConstantPathNode (location: (19,0)-(19,6)) - │ │ ├── flags: ∅ - │ │ ├── parent: - │ │ │ @ LocalVariableReadNode (location: (19,0)-(19,3)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :foo - │ │ │ └── depth: 0 - │ │ ├── name: :C - │ │ ├── delimiter_loc: (19,3)-(19,5) = "::" - │ │ └── name_loc: (19,5)-(19,6) = "C" - │ ├── operator_loc: (19,7)-(19,10) = "||=" - │ └── value: - │ @ RescueModifierNode (location: (19,11)-(19,32)) - │ ├── flags: ∅ - │ ├── expression: - │ │ @ CallNode (location: (19,11)-(19,21)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :raise - │ │ ├── message_loc: (19,11)-(19,16) = "raise" - │ │ ├── opening_loc: (19,16)-(19,17) = "(" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (19,17)-(19,20)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ CallNode (location: (19,17)-(19,20)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (19,17)-(19,20) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── closing_loc: (19,20)-(19,21) = ")" - │ │ └── block: ∅ - │ ├── keyword_loc: (19,22)-(19,28) = "rescue" - │ └── rescue_expression: - │ @ NilNode (location: (19,29)-(19,32)) - │ └── flags: static_literal - ├── @ CallOperatorWriteNode (location: (21,0)-(21,30)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (21,0)-(21,3)) - │ │ ├── flags: ∅ - │ │ ├── name: :foo - │ │ └── depth: 0 - │ ├── call_operator_loc: (21,3)-(21,5) = "::" - │ ├── message_loc: (21,5)-(21,6) = "m" - │ ├── read_name: :m - │ ├── write_name: :m= - │ ├── binary_operator: :+ - │ ├── binary_operator_loc: (21,7)-(21,9) = "+=" - │ └── value: - │ @ RescueModifierNode (location: (21,10)-(21,30)) - │ ├── flags: ∅ - │ ├── expression: - │ │ @ CallNode (location: (21,10)-(21,19)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :raise - │ │ ├── message_loc: (21,10)-(21,15) = "raise" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (21,16)-(21,19)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ CallNode (location: (21,16)-(21,19)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (21,16)-(21,19) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── keyword_loc: (21,20)-(21,26) = "rescue" - │ └── rescue_expression: - │ @ NilNode (location: (21,27)-(21,30)) - │ └── flags: static_literal - ├── @ CallOperatorWriteNode (location: (23,0)-(23,31)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (23,0)-(23,3)) - │ │ ├── flags: ∅ - │ │ ├── name: :foo - │ │ └── depth: 0 - │ ├── call_operator_loc: (23,3)-(23,5) = "::" - │ ├── message_loc: (23,5)-(23,6) = "m" - │ ├── read_name: :m - │ ├── write_name: :m= - │ ├── binary_operator: :+ - │ ├── binary_operator_loc: (23,7)-(23,9) = "+=" - │ └── value: - │ @ RescueModifierNode (location: (23,10)-(23,31)) - │ ├── flags: ∅ - │ ├── expression: - │ │ @ CallNode (location: (23,10)-(23,20)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :raise - │ │ ├── message_loc: (23,10)-(23,15) = "raise" - │ │ ├── opening_loc: (23,15)-(23,16) = "(" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (23,16)-(23,19)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ CallNode (location: (23,16)-(23,19)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (23,16)-(23,19) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── closing_loc: (23,19)-(23,20) = ")" - │ │ └── block: ∅ - │ ├── keyword_loc: (23,21)-(23,27) = "rescue" - │ └── rescue_expression: - │ @ NilNode (location: (23,28)-(23,31)) - │ └── flags: static_literal - ├── @ IndexOperatorWriteNode (location: (25,0)-(25,30)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ LocalVariableReadNode (location: (25,0)-(25,3)) - │ │ ├── flags: ∅ - │ │ ├── name: :foo - │ │ └── depth: 0 - │ ├── call_operator_loc: ∅ - │ ├── opening_loc: (25,3)-(25,4) = "[" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (25,4)-(25,5)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (25,4)-(25,5)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 0 - │ ├── closing_loc: (25,5)-(25,6) = "]" - │ ├── block: ∅ - │ ├── binary_operator: :+ - │ ├── binary_operator_loc: (25,7)-(25,9) = "+=" - │ └── value: - │ @ RescueModifierNode (location: (25,10)-(25,30)) - │ ├── flags: ∅ - │ ├── expression: - │ │ @ CallNode (location: (25,10)-(25,19)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :raise - │ │ ├── message_loc: (25,10)-(25,15) = "raise" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (25,16)-(25,19)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ CallNode (location: (25,16)-(25,19)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (25,16)-(25,19) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── keyword_loc: (25,20)-(25,26) = "rescue" - │ └── rescue_expression: - │ @ NilNode (location: (25,27)-(25,30)) - │ └── flags: static_literal - └── @ IndexOperatorWriteNode (location: (27,0)-(27,31)) - ├── flags: newline - ├── receiver: - │ @ LocalVariableReadNode (location: (27,0)-(27,3)) - │ ├── flags: ∅ - │ ├── name: :foo - │ └── depth: 0 - ├── call_operator_loc: ∅ - ├── opening_loc: (27,3)-(27,4) = "[" - ├── arguments: - │ @ ArgumentsNode (location: (27,4)-(27,5)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ IntegerNode (location: (27,4)-(27,5)) - │ ├── flags: static_literal, decimal - │ └── value: 0 - ├── closing_loc: (27,5)-(27,6) = "]" - ├── block: ∅ - ├── binary_operator: :+ - ├── binary_operator_loc: (27,7)-(27,9) = "+=" - └── value: - @ RescueModifierNode (location: (27,10)-(27,31)) - ├── flags: ∅ - ├── expression: - │ @ CallNode (location: (27,10)-(27,20)) - │ ├── flags: ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :raise - │ ├── message_loc: (27,10)-(27,15) = "raise" - │ ├── opening_loc: (27,15)-(27,16) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (27,16)-(27,19)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (27,16)-(27,19)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (27,16)-(27,19) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (27,19)-(27,20) = ")" - │ └── block: ∅ - ├── keyword_loc: (27,21)-(27,27) = "rescue" - └── rescue_expression: - @ NilNode (location: (27,28)-(27,31)) - └── flags: static_literal diff --git a/test/prism/snapshots/whitequark/ruby_bug_12669.txt b/test/prism/snapshots/whitequark/ruby_bug_12669.txt deleted file mode 100644 index 9d1a924b79a0a6..00000000000000 --- a/test/prism/snapshots/whitequark/ruby_bug_12669.txt +++ /dev/null @@ -1,143 +0,0 @@ -@ ProgramNode (location: (1,0)-(7,16)) -├── flags: ∅ -├── locals: [:a, :b] -└── statements: - @ StatementsNode (location: (1,0)-(7,16)) - ├── flags: ∅ - └── body: (length: 4) - ├── @ LocalVariableOperatorWriteNode (location: (1,0)-(1,18)) - │ ├── flags: newline - │ ├── name_loc: (1,0)-(1,1) = "a" - │ ├── binary_operator_loc: (1,2)-(1,4) = "+=" - │ ├── value: - │ │ @ LocalVariableOperatorWriteNode (location: (1,5)-(1,18)) - │ │ ├── flags: ∅ - │ │ ├── name_loc: (1,5)-(1,6) = "b" - │ │ ├── binary_operator_loc: (1,7)-(1,9) = "+=" - │ │ ├── value: - │ │ │ @ CallNode (location: (1,10)-(1,18)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :raise - │ │ │ ├── message_loc: (1,10)-(1,15) = "raise" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (1,16)-(1,18)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ SymbolNode (location: (1,16)-(1,18)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: (1,16)-(1,17) = ":" - │ │ │ │ ├── value_loc: (1,17)-(1,18) = "x" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "x" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── name: :b - │ │ ├── binary_operator: :+ - │ │ └── depth: 0 - │ ├── name: :a - │ ├── binary_operator: :+ - │ └── depth: 0 - ├── @ LocalVariableOperatorWriteNode (location: (3,0)-(3,17)) - │ ├── flags: newline - │ ├── name_loc: (3,0)-(3,1) = "a" - │ ├── binary_operator_loc: (3,2)-(3,4) = "+=" - │ ├── value: - │ │ @ LocalVariableWriteNode (location: (3,5)-(3,17)) - │ │ ├── flags: ∅ - │ │ ├── name: :b - │ │ ├── depth: 0 - │ │ ├── name_loc: (3,5)-(3,6) = "b" - │ │ ├── value: - │ │ │ @ CallNode (location: (3,9)-(3,17)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :raise - │ │ │ ├── message_loc: (3,9)-(3,14) = "raise" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (3,15)-(3,17)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ SymbolNode (location: (3,15)-(3,17)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: (3,15)-(3,16) = ":" - │ │ │ │ ├── value_loc: (3,16)-(3,17) = "x" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "x" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── operator_loc: (3,7)-(3,8) = "=" - │ ├── name: :a - │ ├── binary_operator: :+ - │ └── depth: 0 - ├── @ LocalVariableWriteNode (location: (5,0)-(5,17)) - │ ├── flags: newline - │ ├── name: :a - │ ├── depth: 0 - │ ├── name_loc: (5,0)-(5,1) = "a" - │ ├── value: - │ │ @ LocalVariableOperatorWriteNode (location: (5,4)-(5,17)) - │ │ ├── flags: ∅ - │ │ ├── name_loc: (5,4)-(5,5) = "b" - │ │ ├── binary_operator_loc: (5,6)-(5,8) = "+=" - │ │ ├── value: - │ │ │ @ CallNode (location: (5,9)-(5,17)) - │ │ │ ├── flags: ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :raise - │ │ │ ├── message_loc: (5,9)-(5,14) = "raise" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: - │ │ │ │ @ ArgumentsNode (location: (5,15)-(5,17)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── arguments: (length: 1) - │ │ │ │ └── @ SymbolNode (location: (5,15)-(5,17)) - │ │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ │ ├── opening_loc: (5,15)-(5,16) = ":" - │ │ │ │ ├── value_loc: (5,16)-(5,17) = "x" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "x" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── name: :b - │ │ ├── binary_operator: :+ - │ │ └── depth: 0 - │ └── operator_loc: (5,2)-(5,3) = "=" - └── @ LocalVariableWriteNode (location: (7,0)-(7,16)) - ├── flags: newline - ├── name: :a - ├── depth: 0 - ├── name_loc: (7,0)-(7,1) = "a" - ├── value: - │ @ LocalVariableWriteNode (location: (7,4)-(7,16)) - │ ├── flags: ∅ - │ ├── name: :b - │ ├── depth: 0 - │ ├── name_loc: (7,4)-(7,5) = "b" - │ ├── value: - │ │ @ CallNode (location: (7,8)-(7,16)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :raise - │ │ ├── message_loc: (7,8)-(7,13) = "raise" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (7,14)-(7,16)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ SymbolNode (location: (7,14)-(7,16)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: (7,14)-(7,15) = ":" - │ │ │ ├── value_loc: (7,15)-(7,16) = "x" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "x" - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── operator_loc: (7,6)-(7,7) = "=" - └── operator_loc: (7,2)-(7,3) = "=" diff --git a/test/prism/snapshots/whitequark/ruby_bug_12686.txt b/test/prism/snapshots/whitequark/ruby_bug_12686.txt deleted file mode 100644 index 515ee75674238a..00000000000000 --- a/test/prism/snapshots/whitequark/ruby_bug_12686.txt +++ /dev/null @@ -1,45 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,16)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,16)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,16)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :f - ├── message_loc: (1,0)-(1,1) = "f" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,2)-(1,16)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ ParenthesesNode (location: (1,2)-(1,16)) - │ ├── flags: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (1,3)-(1,15)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ RescueModifierNode (location: (1,3)-(1,15)) - │ │ ├── flags: newline - │ │ ├── expression: - │ │ │ @ CallNode (location: (1,3)-(1,4)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :g - │ │ │ ├── message_loc: (1,3)-(1,4) = "g" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── keyword_loc: (1,5)-(1,11) = "rescue" - │ │ └── rescue_expression: - │ │ @ NilNode (location: (1,12)-(1,15)) - │ │ └── flags: static_literal - │ ├── opening_loc: (1,2)-(1,3) = "(" - │ └── closing_loc: (1,15)-(1,16) = ")" - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/whitequark/ruby_bug_13547.txt b/test/prism/snapshots/whitequark/ruby_bug_13547.txt deleted file mode 100644 index d0ac79d7ff4201..00000000000000 --- a/test/prism/snapshots/whitequark/ruby_bug_13547.txt +++ /dev/null @@ -1,34 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,9)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,9)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,9)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (1,0)-(1,4)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :meth - │ ├── message_loc: (1,0)-(1,4) = "meth" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: ∅ - ├── name: :[] - ├── message_loc: (1,4)-(1,6) = "[]" - ├── opening_loc: (1,4)-(1,5) = "[" - ├── arguments: ∅ - ├── closing_loc: (1,5)-(1,6) = "]" - └── block: - @ BlockNode (location: (1,7)-(1,9)) - ├── flags: ∅ - ├── locals: [] - ├── parameters: ∅ - ├── body: ∅ - ├── opening_loc: (1,7)-(1,8) = "{" - └── closing_loc: (1,8)-(1,9) = "}" diff --git a/test/prism/snapshots/whitequark/ruby_bug_14690.txt b/test/prism/snapshots/whitequark/ruby_bug_14690.txt deleted file mode 100644 index 377c0e0a0ea3c7..00000000000000 --- a/test/prism/snapshots/whitequark/ruby_bug_14690.txt +++ /dev/null @@ -1,65 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,23)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,23)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,23)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :let - ├── message_loc: (1,0)-(1,3) = "let" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,4)-(1,6)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ ParenthesesNode (location: (1,4)-(1,6)) - │ ├── flags: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (1,4)-(1,5) = "(" - │ └── closing_loc: (1,5)-(1,6) = ")" - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,7)-(1,23)) - ├── flags: ∅ - ├── locals: [] - ├── parameters: ∅ - ├── body: - │ @ StatementsNode (location: (1,9)-(1,21)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,9)-(1,21)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :m - │ ├── message_loc: (1,9)-(1,10) = "m" - │ ├── opening_loc: (1,10)-(1,11) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,11)-(1,12)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (1,11)-(1,12)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :a - │ │ ├── message_loc: (1,11)-(1,12) = "a" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (1,12)-(1,13) = ")" - │ └── block: - │ @ BlockNode (location: (1,14)-(1,21)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (1,14)-(1,16) = "do" - │ └── closing_loc: (1,18)-(1,21) = "end" - ├── opening_loc: (1,7)-(1,8) = "{" - └── closing_loc: (1,22)-(1,23) = "}" diff --git a/test/prism/snapshots/whitequark/ruby_bug_15789.txt b/test/prism/snapshots/whitequark/ruby_bug_15789.txt deleted file mode 100644 index c6ac7447a86c7d..00000000000000 --- a/test/prism/snapshots/whitequark/ruby_bug_15789.txt +++ /dev/null @@ -1,140 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,19)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,19)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ CallNode (location: (1,0)-(1,20)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :m - │ ├── message_loc: (1,0)-(1,1) = "m" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,2)-(1,20)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ LambdaNode (location: (1,2)-(1,20)) - │ │ ├── flags: ∅ - │ │ ├── locals: [:a] - │ │ ├── operator_loc: (1,2)-(1,4) = "->" - │ │ ├── opening_loc: (1,17)-(1,18) = "{" - │ │ ├── closing_loc: (1,19)-(1,20) = "}" - │ │ ├── parameters: - │ │ │ @ BlockParametersNode (location: (1,4)-(1,16)) - │ │ │ ├── flags: ∅ - │ │ │ ├── parameters: - │ │ │ │ @ ParametersNode (location: (1,5)-(1,15)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── requireds: (length: 0) - │ │ │ │ ├── optionals: (length: 1) - │ │ │ │ │ └── @ OptionalParameterNode (location: (1,5)-(1,15)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── name: :a - │ │ │ │ │ ├── name_loc: (1,5)-(1,6) = "a" - │ │ │ │ │ ├── operator_loc: (1,7)-(1,8) = "=" - │ │ │ │ │ └── value: - │ │ │ │ │ @ LambdaNode (location: (1,9)-(1,15)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ ├── locals: [:_1] - │ │ │ │ │ ├── operator_loc: (1,9)-(1,11) = "->" - │ │ │ │ │ ├── opening_loc: (1,11)-(1,12) = "{" - │ │ │ │ │ ├── closing_loc: (1,14)-(1,15) = "}" - │ │ │ │ │ ├── parameters: - │ │ │ │ │ │ @ NumberedParametersNode (location: (1,9)-(1,15)) - │ │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ │ └── maximum: 1 - │ │ │ │ │ └── body: - │ │ │ │ │ @ StatementsNode (location: (1,12)-(1,14)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── body: (length: 1) - │ │ │ │ │ └── @ LocalVariableReadNode (location: (1,12)-(1,14)) - │ │ │ │ │ ├── flags: newline - │ │ │ │ │ ├── name: :_1 - │ │ │ │ │ └── depth: 0 - │ │ │ │ ├── rest: ∅ - │ │ │ │ ├── posts: (length: 0) - │ │ │ │ ├── keywords: (length: 0) - │ │ │ │ ├── keyword_rest: ∅ - │ │ │ │ └── block: ∅ - │ │ │ ├── locals: (length: 0) - │ │ │ ├── opening_loc: (1,4)-(1,5) = "(" - │ │ │ └── closing_loc: (1,15)-(1,16) = ")" - │ │ └── body: - │ │ @ StatementsNode (location: (1,18)-(1,19)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ LocalVariableReadNode (location: (1,18)-(1,19)) - │ │ ├── flags: newline - │ │ ├── name: :a - │ │ └── depth: 0 - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── @ CallNode (location: (3,0)-(3,19)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :m - ├── message_loc: (3,0)-(3,1) = "m" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (3,2)-(3,19)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ LambdaNode (location: (3,2)-(3,19)) - │ ├── flags: ∅ - │ ├── locals: [:a] - │ ├── operator_loc: (3,2)-(3,4) = "->" - │ ├── opening_loc: (3,16)-(3,17) = "{" - │ ├── closing_loc: (3,18)-(3,19) = "}" - │ ├── parameters: - │ │ @ BlockParametersNode (location: (3,4)-(3,15)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (3,5)-(3,14)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 0) - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 1) - │ │ │ │ └── @ OptionalKeywordParameterNode (location: (3,5)-(3,14)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :a - │ │ │ │ ├── name_loc: (3,5)-(3,7) = "a:" - │ │ │ │ └── value: - │ │ │ │ @ LambdaNode (location: (3,8)-(3,14)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── locals: [:_1] - │ │ │ │ ├── operator_loc: (3,8)-(3,10) = "->" - │ │ │ │ ├── opening_loc: (3,10)-(3,11) = "{" - │ │ │ │ ├── closing_loc: (3,13)-(3,14) = "}" - │ │ │ │ ├── parameters: - │ │ │ │ │ @ NumberedParametersNode (location: (3,8)-(3,14)) - │ │ │ │ │ ├── flags: ∅ - │ │ │ │ │ └── maximum: 1 - │ │ │ │ └── body: - │ │ │ │ @ StatementsNode (location: (3,11)-(3,13)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ LocalVariableReadNode (location: (3,11)-(3,13)) - │ │ │ │ ├── flags: newline - │ │ │ │ ├── name: :_1 - │ │ │ │ └── depth: 0 - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: (3,4)-(3,5) = "(" - │ │ └── closing_loc: (3,14)-(3,15) = ")" - │ └── body: - │ @ StatementsNode (location: (3,17)-(3,18)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ LocalVariableReadNode (location: (3,17)-(3,18)) - │ ├── flags: newline - │ ├── name: :a - │ └── depth: 0 - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/whitequark/ruby_bug_9669.txt b/test/prism/snapshots/whitequark/ruby_bug_9669.txt deleted file mode 100644 index c771c50c8a67d1..00000000000000 --- a/test/prism/snapshots/whitequark/ruby_bug_9669.txt +++ /dev/null @@ -1,67 +0,0 @@ -@ ProgramNode (location: (1,0)-(8,1)) -├── flags: ∅ -├── locals: [:o] -└── statements: - @ StatementsNode (location: (1,0)-(8,1)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ DefNode (location: (1,0)-(3,3)) - │ ├── flags: newline - │ ├── name: :a - │ ├── name_loc: (1,4)-(1,5) = "a" - │ ├── receiver: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,6)-(1,8)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 1) - │ │ │ └── @ RequiredKeywordParameterNode (location: (1,6)-(1,8)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :b - │ │ │ └── name_loc: (1,6)-(1,8) = "b:" - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (2,0)-(2,6)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ ReturnNode (location: (2,0)-(2,6)) - │ │ ├── flags: newline - │ │ ├── keyword_loc: (2,0)-(2,6) = "return" - │ │ └── arguments: ∅ - │ ├── locals: [:b] - │ ├── def_keyword_loc: (1,0)-(1,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (3,0)-(3,3) = "end" - └── @ LocalVariableWriteNode (location: (5,0)-(8,1)) - ├── flags: newline - ├── name: :o - ├── depth: 0 - ├── name_loc: (5,0)-(5,1) = "o" - ├── value: - │ @ HashNode (location: (5,4)-(8,1)) - │ ├── flags: static_literal - │ ├── opening_loc: (5,4)-(5,5) = "{" - │ ├── elements: (length: 1) - │ │ └── @ AssocNode (location: (6,0)-(7,1)) - │ │ ├── flags: static_literal - │ │ ├── key: - │ │ │ @ SymbolNode (location: (6,0)-(6,2)) - │ │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── value_loc: (6,0)-(6,1) = "a" - │ │ │ ├── closing_loc: (6,1)-(6,2) = ":" - │ │ │ └── unescaped: "a" - │ │ ├── value: - │ │ │ @ IntegerNode (location: (7,0)-(7,1)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── operator_loc: ∅ - │ └── closing_loc: (8,0)-(8,1) = "}" - └── operator_loc: (5,2)-(5,3) = "=" diff --git a/test/prism/snapshots/whitequark/sclass.txt b/test/prism/snapshots/whitequark/sclass.txt deleted file mode 100644 index 346d1a4149cbe9..00000000000000 --- a/test/prism/snapshots/whitequark/sclass.txt +++ /dev/null @@ -1,30 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,22)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,22)) - ├── flags: ∅ - └── body: (length: 1) - └── @ SingletonClassNode (location: (1,0)-(1,22)) - ├── flags: newline - ├── locals: [] - ├── class_keyword_loc: (1,0)-(1,5) = "class" - ├── operator_loc: (1,6)-(1,8) = "<<" - ├── expression: - │ @ CallNode (location: (1,9)-(1,12)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (1,9)-(1,12) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── body: - │ @ StatementsNode (location: (1,14)-(1,17)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ NilNode (location: (1,14)-(1,17)) - │ └── flags: newline, static_literal - └── end_keyword_loc: (1,19)-(1,22) = "end" diff --git a/test/prism/snapshots/whitequark/self.txt b/test/prism/snapshots/whitequark/self.txt deleted file mode 100644 index e3a1a9f7df9f2a..00000000000000 --- a/test/prism/snapshots/whitequark/self.txt +++ /dev/null @@ -1,9 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,4)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,4)) - ├── flags: ∅ - └── body: (length: 1) - └── @ SelfNode (location: (1,0)-(1,4)) - └── flags: newline diff --git a/test/prism/snapshots/whitequark/send_attr_asgn.txt b/test/prism/snapshots/whitequark/send_attr_asgn.txt deleted file mode 100644 index faeb5a7c7cbb0c..00000000000000 --- a/test/prism/snapshots/whitequark/send_attr_asgn.txt +++ /dev/null @@ -1,109 +0,0 @@ -@ ProgramNode (location: (1,0)-(7,10)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(7,10)) - ├── flags: ∅ - └── body: (length: 4) - ├── @ CallNode (location: (1,0)-(1,9)) - │ ├── flags: newline, attribute_write - │ ├── receiver: - │ │ @ CallNode (location: (1,0)-(1,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (1,0)-(1,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (1,3)-(1,4) = "." - │ ├── name: :A= - │ ├── message_loc: (1,4)-(1,5) = "A" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,8)-(1,9)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (1,8)-(1,9)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (3,0)-(3,9)) - │ ├── flags: newline, attribute_write - │ ├── receiver: - │ │ @ CallNode (location: (3,0)-(3,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (3,0)-(3,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (3,3)-(3,4) = "." - │ ├── name: :a= - │ ├── message_loc: (3,4)-(3,5) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (3,8)-(3,9)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (3,8)-(3,9)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ ConstantPathWriteNode (location: (5,0)-(5,10)) - │ ├── flags: newline - │ ├── target: - │ │ @ ConstantPathNode (location: (5,0)-(5,6)) - │ │ ├── flags: ∅ - │ │ ├── parent: - │ │ │ @ CallNode (location: (5,0)-(5,3)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :foo - │ │ │ ├── message_loc: (5,0)-(5,3) = "foo" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── name: :A - │ │ ├── delimiter_loc: (5,3)-(5,5) = "::" - │ │ └── name_loc: (5,5)-(5,6) = "A" - │ ├── operator_loc: (5,7)-(5,8) = "=" - │ └── value: - │ @ IntegerNode (location: (5,9)-(5,10)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - └── @ CallNode (location: (7,0)-(7,10)) - ├── flags: newline, attribute_write - ├── receiver: - │ @ CallNode (location: (7,0)-(7,3)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (7,0)-(7,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: (7,3)-(7,5) = "::" - ├── name: :a= - ├── message_loc: (7,5)-(7,6) = "a" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (7,9)-(7,10)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ IntegerNode (location: (7,9)-(7,10)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/whitequark/send_attr_asgn_conditional.txt b/test/prism/snapshots/whitequark/send_attr_asgn_conditional.txt deleted file mode 100644 index cb849e3f053ca9..00000000000000 --- a/test/prism/snapshots/whitequark/send_attr_asgn_conditional.txt +++ /dev/null @@ -1,33 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,8)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,8)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,8)) - ├── flags: newline, safe_navigation, attribute_write - ├── receiver: - │ @ CallNode (location: (1,0)-(1,1)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (1,0)-(1,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: (1,1)-(1,3) = "&." - ├── name: :b= - ├── message_loc: (1,3)-(1,4) = "b" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,7)-(1,8)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ IntegerNode (location: (1,7)-(1,8)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/whitequark/send_binary_op.txt b/test/prism/snapshots/whitequark/send_binary_op.txt deleted file mode 100644 index 49a2cffa659ae8..00000000000000 --- a/test/prism/snapshots/whitequark/send_binary_op.txt +++ /dev/null @@ -1,553 +0,0 @@ -@ ProgramNode (location: (1,0)-(41,7)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(41,7)) - ├── flags: ∅ - └── body: (length: 21) - ├── @ CallNode (location: (1,0)-(1,8)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (1,0)-(1,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (1,0)-(1,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :!= - │ ├── message_loc: (1,4)-(1,6) = "!=" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,7)-(1,8)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (1,7)-(1,8)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (3,0)-(3,8)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (3,0)-(3,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (3,0)-(3,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :!~ - │ ├── message_loc: (3,4)-(3,6) = "!~" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (3,7)-(3,8)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (3,7)-(3,8)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (5,0)-(5,7)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (5,0)-(5,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (5,0)-(5,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :% - │ ├── message_loc: (5,4)-(5,5) = "%" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (5,6)-(5,7)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (5,6)-(5,7)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (7,0)-(7,7)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (7,0)-(7,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (7,0)-(7,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :& - │ ├── message_loc: (7,4)-(7,5) = "&" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (7,6)-(7,7)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (7,6)-(7,7)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (9,0)-(9,7)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (9,0)-(9,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (9,0)-(9,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :* - │ ├── message_loc: (9,4)-(9,5) = "*" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (9,6)-(9,7)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (9,6)-(9,7)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (11,0)-(11,8)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (11,0)-(11,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (11,0)-(11,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :** - │ ├── message_loc: (11,4)-(11,6) = "**" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (11,7)-(11,8)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (11,7)-(11,8)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (13,0)-(13,7)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (13,0)-(13,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (13,0)-(13,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :+ - │ ├── message_loc: (13,4)-(13,5) = "+" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (13,6)-(13,7)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (13,6)-(13,7)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (15,0)-(15,7)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (15,0)-(15,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (15,0)-(15,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :- - │ ├── message_loc: (15,4)-(15,5) = "-" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (15,6)-(15,7)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (15,6)-(15,7)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (17,0)-(17,7)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (17,0)-(17,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (17,0)-(17,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :/ - │ ├── message_loc: (17,4)-(17,5) = "/" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (17,6)-(17,7)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (17,6)-(17,7)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (19,0)-(19,7)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (19,0)-(19,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (19,0)-(19,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :< - │ ├── message_loc: (19,4)-(19,5) = "<" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (19,6)-(19,7)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (19,6)-(19,7)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (21,0)-(21,8)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (21,0)-(21,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (21,0)-(21,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :<< - │ ├── message_loc: (21,4)-(21,6) = "<<" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (21,7)-(21,8)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (21,7)-(21,8)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (23,0)-(23,8)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (23,0)-(23,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (23,0)-(23,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :<= - │ ├── message_loc: (23,4)-(23,6) = "<=" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (23,7)-(23,8)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (23,7)-(23,8)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (25,0)-(25,9)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (25,0)-(25,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (25,0)-(25,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :<=> - │ ├── message_loc: (25,4)-(25,7) = "<=>" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (25,8)-(25,9)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (25,8)-(25,9)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (27,0)-(27,8)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (27,0)-(27,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (27,0)-(27,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :== - │ ├── message_loc: (27,4)-(27,6) = "==" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (27,7)-(27,8)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (27,7)-(27,8)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (29,0)-(29,9)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (29,0)-(29,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (29,0)-(29,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :=== - │ ├── message_loc: (29,4)-(29,7) = "===" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (29,8)-(29,9)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (29,8)-(29,9)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (31,0)-(31,8)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (31,0)-(31,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (31,0)-(31,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :=~ - │ ├── message_loc: (31,4)-(31,6) = "=~" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (31,7)-(31,8)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (31,7)-(31,8)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (33,0)-(33,7)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (33,0)-(33,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (33,0)-(33,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :> - │ ├── message_loc: (33,4)-(33,5) = ">" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (33,6)-(33,7)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (33,6)-(33,7)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (35,0)-(35,8)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (35,0)-(35,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (35,0)-(35,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :>= - │ ├── message_loc: (35,4)-(35,6) = ">=" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (35,7)-(35,8)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (35,7)-(35,8)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (37,0)-(37,8)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (37,0)-(37,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (37,0)-(37,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :>> - │ ├── message_loc: (37,4)-(37,6) = ">>" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (37,7)-(37,8)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (37,7)-(37,8)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (39,0)-(39,7)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (39,0)-(39,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (39,0)-(39,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :^ - │ ├── message_loc: (39,4)-(39,5) = "^" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (39,6)-(39,7)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (39,6)-(39,7)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── @ CallNode (location: (41,0)-(41,7)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (41,0)-(41,3)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (41,0)-(41,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: ∅ - ├── name: :| - ├── message_loc: (41,4)-(41,5) = "|" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (41,6)-(41,7)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ IntegerNode (location: (41,6)-(41,7)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/whitequark/send_block_chain_cmd.txt b/test/prism/snapshots/whitequark/send_block_chain_cmd.txt deleted file mode 100644 index bce45c38eed623..00000000000000 --- a/test/prism/snapshots/whitequark/send_block_chain_cmd.txt +++ /dev/null @@ -1,337 +0,0 @@ -@ ProgramNode (location: (1,0)-(13,23)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(13,23)) - ├── flags: ∅ - └── body: (length: 7) - ├── @ CallNode (location: (1,0)-(1,21)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (1,0)-(1,13)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :meth - │ │ ├── message_loc: (1,0)-(1,4) = "meth" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (1,5)-(1,6)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (1,5)-(1,6)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── closing_loc: ∅ - │ │ └── block: - │ │ @ BlockNode (location: (1,7)-(1,13)) - │ │ ├── flags: ∅ - │ │ ├── locals: [] - │ │ ├── parameters: ∅ - │ │ ├── body: ∅ - │ │ ├── opening_loc: (1,7)-(1,9) = "do" - │ │ └── closing_loc: (1,10)-(1,13) = "end" - │ ├── call_operator_loc: (1,13)-(1,14) = "." - │ ├── name: :fun - │ ├── message_loc: (1,14)-(1,17) = "fun" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,18)-(1,21)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (1,18)-(1,21)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (1,18)-(1,21) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (3,0)-(3,28)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (3,0)-(3,13)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :meth - │ │ ├── message_loc: (3,0)-(3,4) = "meth" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (3,5)-(3,6)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (3,5)-(3,6)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── closing_loc: ∅ - │ │ └── block: - │ │ @ BlockNode (location: (3,7)-(3,13)) - │ │ ├── flags: ∅ - │ │ ├── locals: [] - │ │ ├── parameters: ∅ - │ │ ├── body: ∅ - │ │ ├── opening_loc: (3,7)-(3,9) = "do" - │ │ └── closing_loc: (3,10)-(3,13) = "end" - │ ├── call_operator_loc: (3,13)-(3,14) = "." - │ ├── name: :fun - │ ├── message_loc: (3,14)-(3,17) = "fun" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (3,18)-(3,21)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (3,18)-(3,21)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (3,18)-(3,21) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (3,22)-(3,28)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (3,22)-(3,24) = "do" - │ └── closing_loc: (3,25)-(3,28) = "end" - ├── @ CallNode (location: (5,0)-(5,20)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (5,0)-(5,13)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :meth - │ │ ├── message_loc: (5,0)-(5,4) = "meth" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (5,5)-(5,6)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (5,5)-(5,6)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── closing_loc: ∅ - │ │ └── block: - │ │ @ BlockNode (location: (5,7)-(5,13)) - │ │ ├── flags: ∅ - │ │ ├── locals: [] - │ │ ├── parameters: ∅ - │ │ ├── body: ∅ - │ │ ├── opening_loc: (5,7)-(5,9) = "do" - │ │ └── closing_loc: (5,10)-(5,13) = "end" - │ ├── call_operator_loc: (5,13)-(5,14) = "." - │ ├── name: :fun - │ ├── message_loc: (5,14)-(5,17) = "fun" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (5,18)-(5,20)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (5,18)-(5,19) = "{" - │ └── closing_loc: (5,19)-(5,20) = "}" - ├── @ CallNode (location: (7,0)-(7,22)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (7,0)-(7,13)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :meth - │ │ ├── message_loc: (7,0)-(7,4) = "meth" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (7,5)-(7,6)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (7,5)-(7,6)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── closing_loc: ∅ - │ │ └── block: - │ │ @ BlockNode (location: (7,7)-(7,13)) - │ │ ├── flags: ∅ - │ │ ├── locals: [] - │ │ ├── parameters: ∅ - │ │ ├── body: ∅ - │ │ ├── opening_loc: (7,7)-(7,9) = "do" - │ │ └── closing_loc: (7,10)-(7,13) = "end" - │ ├── call_operator_loc: (7,13)-(7,14) = "." - │ ├── name: :fun - │ ├── message_loc: (7,14)-(7,17) = "fun" - │ ├── opening_loc: (7,17)-(7,18) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (7,18)-(7,21)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (7,18)-(7,21)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (7,18)-(7,21) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (7,21)-(7,22) = ")" - │ └── block: ∅ - ├── @ CallNode (location: (9,0)-(9,25)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (9,0)-(9,13)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :meth - │ │ ├── message_loc: (9,0)-(9,4) = "meth" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (9,5)-(9,6)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (9,5)-(9,6)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── closing_loc: ∅ - │ │ └── block: - │ │ @ BlockNode (location: (9,7)-(9,13)) - │ │ ├── flags: ∅ - │ │ ├── locals: [] - │ │ ├── parameters: ∅ - │ │ ├── body: ∅ - │ │ ├── opening_loc: (9,7)-(9,9) = "do" - │ │ └── closing_loc: (9,10)-(9,13) = "end" - │ ├── call_operator_loc: (9,13)-(9,14) = "." - │ ├── name: :fun - │ ├── message_loc: (9,14)-(9,17) = "fun" - │ ├── opening_loc: (9,17)-(9,18) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (9,18)-(9,21)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (9,18)-(9,21)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (9,18)-(9,21) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: (9,21)-(9,22) = ")" - │ └── block: - │ @ BlockNode (location: (9,23)-(9,25)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (9,23)-(9,24) = "{" - │ └── closing_loc: (9,24)-(9,25) = "}" - ├── @ CallNode (location: (11,0)-(11,22)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (11,0)-(11,13)) - │ │ ├── flags: ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :meth - │ │ ├── message_loc: (11,0)-(11,4) = "meth" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (11,5)-(11,6)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (11,5)-(11,6)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── closing_loc: ∅ - │ │ └── block: - │ │ @ BlockNode (location: (11,7)-(11,13)) - │ │ ├── flags: ∅ - │ │ ├── locals: [] - │ │ ├── parameters: ∅ - │ │ ├── body: ∅ - │ │ ├── opening_loc: (11,7)-(11,9) = "do" - │ │ └── closing_loc: (11,10)-(11,13) = "end" - │ ├── call_operator_loc: (11,13)-(11,15) = "::" - │ ├── name: :fun - │ ├── message_loc: (11,15)-(11,18) = "fun" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (11,19)-(11,22)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (11,19)-(11,22)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (11,19)-(11,22) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── @ CallNode (location: (13,0)-(13,23)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (13,0)-(13,13)) - │ ├── flags: ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :meth - │ ├── message_loc: (13,0)-(13,4) = "meth" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (13,5)-(13,6)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (13,5)-(13,6)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (13,7)-(13,13)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (13,7)-(13,9) = "do" - │ └── closing_loc: (13,10)-(13,13) = "end" - ├── call_operator_loc: (13,13)-(13,15) = "::" - ├── name: :fun - ├── message_loc: (13,15)-(13,18) = "fun" - ├── opening_loc: (13,18)-(13,19) = "(" - ├── arguments: - │ @ ArgumentsNode (location: (13,19)-(13,22)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ CallNode (location: (13,19)-(13,22)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :bar - │ ├── message_loc: (13,19)-(13,22) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── closing_loc: (13,22)-(13,23) = ")" - └── block: ∅ diff --git a/test/prism/snapshots/whitequark/send_block_conditional.txt b/test/prism/snapshots/whitequark/send_block_conditional.txt deleted file mode 100644 index 86ef0dbf36eddd..00000000000000 --- a/test/prism/snapshots/whitequark/send_block_conditional.txt +++ /dev/null @@ -1,34 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,11)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,11)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,11)) - ├── flags: newline, safe_navigation - ├── receiver: - │ @ CallNode (location: (1,0)-(1,3)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (1,0)-(1,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: (1,3)-(1,5) = "&." - ├── name: :bar - ├── message_loc: (1,5)-(1,8) = "bar" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,9)-(1,11)) - ├── flags: ∅ - ├── locals: [] - ├── parameters: ∅ - ├── body: ∅ - ├── opening_loc: (1,9)-(1,10) = "{" - └── closing_loc: (1,10)-(1,11) = "}" diff --git a/test/prism/snapshots/whitequark/send_call.txt b/test/prism/snapshots/whitequark/send_call.txt deleted file mode 100644 index 4ed17fbaee07f0..00000000000000 --- a/test/prism/snapshots/whitequark/send_call.txt +++ /dev/null @@ -1,59 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,8)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,8)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ CallNode (location: (1,0)-(1,7)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (1,0)-(1,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (1,0)-(1,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (1,3)-(1,4) = "." - │ ├── name: :call - │ ├── message_loc: ∅ - │ ├── opening_loc: (1,4)-(1,5) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,5)-(1,6)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (1,5)-(1,6)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── closing_loc: (1,6)-(1,7) = ")" - │ └── block: ∅ - └── @ CallNode (location: (3,0)-(3,8)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (3,0)-(3,3)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (3,0)-(3,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: (3,3)-(3,5) = "::" - ├── name: :call - ├── message_loc: ∅ - ├── opening_loc: (3,5)-(3,6) = "(" - ├── arguments: - │ @ ArgumentsNode (location: (3,6)-(3,7)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ IntegerNode (location: (3,6)-(3,7)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── closing_loc: (3,7)-(3,8) = ")" - └── block: ∅ diff --git a/test/prism/snapshots/whitequark/send_conditional.txt b/test/prism/snapshots/whitequark/send_conditional.txt deleted file mode 100644 index 7faa6ac04e0739..00000000000000 --- a/test/prism/snapshots/whitequark/send_conditional.txt +++ /dev/null @@ -1,27 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,4)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,4)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,4)) - ├── flags: newline, safe_navigation - ├── receiver: - │ @ CallNode (location: (1,0)-(1,1)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (1,0)-(1,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: (1,1)-(1,3) = "&." - ├── name: :b - ├── message_loc: (1,3)-(1,4) = "b" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/whitequark/send_index.txt b/test/prism/snapshots/whitequark/send_index.txt deleted file mode 100644 index 5aec47c484912f..00000000000000 --- a/test/prism/snapshots/whitequark/send_index.txt +++ /dev/null @@ -1,36 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,9)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,9)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,9)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (1,0)-(1,3)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (1,0)-(1,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: ∅ - ├── name: :[] - ├── message_loc: (1,3)-(1,9) = "[1, 2]" - ├── opening_loc: (1,3)-(1,4) = "[" - ├── arguments: - │ @ ArgumentsNode (location: (1,4)-(1,8)) - │ ├── flags: ∅ - │ └── arguments: (length: 2) - │ ├── @ IntegerNode (location: (1,4)-(1,5)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ └── @ IntegerNode (location: (1,7)-(1,8)) - │ ├── flags: static_literal, decimal - │ └── value: 2 - ├── closing_loc: (1,8)-(1,9) = "]" - └── block: ∅ diff --git a/test/prism/snapshots/whitequark/send_index_asgn.txt b/test/prism/snapshots/whitequark/send_index_asgn.txt deleted file mode 100644 index fe0f71956a0d26..00000000000000 --- a/test/prism/snapshots/whitequark/send_index_asgn.txt +++ /dev/null @@ -1,39 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,13)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,13)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,13)) - ├── flags: newline, attribute_write - ├── receiver: - │ @ CallNode (location: (1,0)-(1,3)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (1,0)-(1,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: ∅ - ├── name: :[]= - ├── message_loc: (1,3)-(1,9) = "[1, 2]" - ├── opening_loc: (1,3)-(1,4) = "[" - ├── arguments: - │ @ ArgumentsNode (location: (1,4)-(1,13)) - │ ├── flags: ∅ - │ └── arguments: (length: 3) - │ ├── @ IntegerNode (location: (1,4)-(1,5)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── @ IntegerNode (location: (1,7)-(1,8)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ └── @ IntegerNode (location: (1,12)-(1,13)) - │ ├── flags: static_literal, decimal - │ └── value: 3 - ├── closing_loc: (1,8)-(1,9) = "]" - └── block: ∅ diff --git a/test/prism/snapshots/whitequark/send_index_asgn_legacy.txt b/test/prism/snapshots/whitequark/send_index_asgn_legacy.txt deleted file mode 100644 index fe0f71956a0d26..00000000000000 --- a/test/prism/snapshots/whitequark/send_index_asgn_legacy.txt +++ /dev/null @@ -1,39 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,13)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,13)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,13)) - ├── flags: newline, attribute_write - ├── receiver: - │ @ CallNode (location: (1,0)-(1,3)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (1,0)-(1,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: ∅ - ├── name: :[]= - ├── message_loc: (1,3)-(1,9) = "[1, 2]" - ├── opening_loc: (1,3)-(1,4) = "[" - ├── arguments: - │ @ ArgumentsNode (location: (1,4)-(1,13)) - │ ├── flags: ∅ - │ └── arguments: (length: 3) - │ ├── @ IntegerNode (location: (1,4)-(1,5)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── @ IntegerNode (location: (1,7)-(1,8)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 2 - │ └── @ IntegerNode (location: (1,12)-(1,13)) - │ ├── flags: static_literal, decimal - │ └── value: 3 - ├── closing_loc: (1,8)-(1,9) = "]" - └── block: ∅ diff --git a/test/prism/snapshots/whitequark/send_index_cmd.txt b/test/prism/snapshots/whitequark/send_index_cmd.txt deleted file mode 100644 index 89a5c41fc3c7db..00000000000000 --- a/test/prism/snapshots/whitequark/send_index_cmd.txt +++ /dev/null @@ -1,53 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,10)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,10)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,10)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (1,0)-(1,3)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (1,0)-(1,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: ∅ - ├── name: :[] - ├── message_loc: (1,3)-(1,10) = "[m bar]" - ├── opening_loc: (1,3)-(1,4) = "[" - ├── arguments: - │ @ ArgumentsNode (location: (1,4)-(1,9)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ CallNode (location: (1,4)-(1,9)) - │ ├── flags: ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :m - │ ├── message_loc: (1,4)-(1,5) = "m" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,6)-(1,9)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (1,6)-(1,9)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (1,6)-(1,9) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── closing_loc: (1,9)-(1,10) = "]" - └── block: ∅ diff --git a/test/prism/snapshots/whitequark/send_index_legacy.txt b/test/prism/snapshots/whitequark/send_index_legacy.txt deleted file mode 100644 index 5aec47c484912f..00000000000000 --- a/test/prism/snapshots/whitequark/send_index_legacy.txt +++ /dev/null @@ -1,36 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,9)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,9)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,9)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (1,0)-(1,3)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (1,0)-(1,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: ∅ - ├── name: :[] - ├── message_loc: (1,3)-(1,9) = "[1, 2]" - ├── opening_loc: (1,3)-(1,4) = "[" - ├── arguments: - │ @ ArgumentsNode (location: (1,4)-(1,8)) - │ ├── flags: ∅ - │ └── arguments: (length: 2) - │ ├── @ IntegerNode (location: (1,4)-(1,5)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ └── @ IntegerNode (location: (1,7)-(1,8)) - │ ├── flags: static_literal, decimal - │ └── value: 2 - ├── closing_loc: (1,8)-(1,9) = "]" - └── block: ∅ diff --git a/test/prism/snapshots/whitequark/send_lambda.txt b/test/prism/snapshots/whitequark/send_lambda.txt deleted file mode 100644 index a1693734e83444..00000000000000 --- a/test/prism/snapshots/whitequark/send_lambda.txt +++ /dev/null @@ -1,51 +0,0 @@ -@ ProgramNode (location: (1,0)-(5,5)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(5,5)) - ├── flags: ∅ - └── body: (length: 3) - ├── @ LambdaNode (location: (1,0)-(1,8)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── operator_loc: (1,0)-(1,2) = "->" - │ ├── opening_loc: (1,5)-(1,6) = "{" - │ ├── closing_loc: (1,7)-(1,8) = "}" - │ ├── parameters: - │ │ @ BlockParametersNode (location: (1,3)-(1,4)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (1,3)-(1,4)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 0) - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: - │ │ │ │ @ RestParameterNode (location: (1,3)-(1,4)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: ∅ - │ │ │ │ ├── name_loc: ∅ - │ │ │ │ └── operator_loc: (1,3)-(1,4) = "*" - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: ∅ - │ │ └── closing_loc: ∅ - │ └── body: ∅ - ├── @ LambdaNode (location: (3,0)-(3,9)) - │ ├── flags: newline - │ ├── locals: [] - │ ├── operator_loc: (3,0)-(3,2) = "->" - │ ├── opening_loc: (3,3)-(3,5) = "do" - │ ├── closing_loc: (3,6)-(3,9) = "end" - │ ├── parameters: ∅ - │ └── body: ∅ - └── @ LambdaNode (location: (5,0)-(5,5)) - ├── flags: newline - ├── locals: [] - ├── operator_loc: (5,0)-(5,2) = "->" - ├── opening_loc: (5,2)-(5,3) = "{" - ├── closing_loc: (5,4)-(5,5) = "}" - ├── parameters: ∅ - └── body: ∅ diff --git a/test/prism/snapshots/whitequark/send_lambda_args.txt b/test/prism/snapshots/whitequark/send_lambda_args.txt deleted file mode 100644 index ffa9a6ba9e4e7e..00000000000000 --- a/test/prism/snapshots/whitequark/send_lambda_args.txt +++ /dev/null @@ -1,59 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,9)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,9)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ LambdaNode (location: (1,0)-(1,10)) - │ ├── flags: newline - │ ├── locals: [:a] - │ ├── operator_loc: (1,0)-(1,2) = "->" - │ ├── opening_loc: (1,7)-(1,8) = "{" - │ ├── closing_loc: (1,9)-(1,10) = "}" - │ ├── parameters: - │ │ @ BlockParametersNode (location: (1,3)-(1,6)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (1,4)-(1,5)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 1) - │ │ │ │ └── @ RequiredParameterNode (location: (1,4)-(1,5)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── name: :a - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 0) - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: (1,3)-(1,4) = "(" - │ │ └── closing_loc: (1,5)-(1,6) = ")" - │ └── body: ∅ - └── @ LambdaNode (location: (3,0)-(3,9)) - ├── flags: newline - ├── locals: [:a] - ├── operator_loc: (3,0)-(3,2) = "->" - ├── opening_loc: (3,6)-(3,7) = "{" - ├── closing_loc: (3,8)-(3,9) = "}" - ├── parameters: - │ @ BlockParametersNode (location: (3,2)-(3,5)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (3,3)-(3,4)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (3,3)-(3,4)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :a - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: (3,2)-(3,3) = "(" - │ └── closing_loc: (3,4)-(3,5) = ")" - └── body: ∅ diff --git a/test/prism/snapshots/whitequark/send_lambda_args_noparen.txt b/test/prism/snapshots/whitequark/send_lambda_args_noparen.txt deleted file mode 100644 index 2cbe43e6e01b4d..00000000000000 --- a/test/prism/snapshots/whitequark/send_lambda_args_noparen.txt +++ /dev/null @@ -1,65 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,9)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,9)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ LambdaNode (location: (1,0)-(1,11)) - │ ├── flags: newline - │ ├── locals: [:a] - │ ├── operator_loc: (1,0)-(1,2) = "->" - │ ├── opening_loc: (1,8)-(1,9) = "{" - │ ├── closing_loc: (1,10)-(1,11) = "}" - │ ├── parameters: - │ │ @ BlockParametersNode (location: (1,3)-(1,7)) - │ │ ├── flags: ∅ - │ │ ├── parameters: - │ │ │ @ ParametersNode (location: (1,3)-(1,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── requireds: (length: 0) - │ │ │ ├── optionals: (length: 0) - │ │ │ ├── rest: ∅ - │ │ │ ├── posts: (length: 0) - │ │ │ ├── keywords: (length: 1) - │ │ │ │ └── @ OptionalKeywordParameterNode (location: (1,3)-(1,7)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ ├── name: :a - │ │ │ │ ├── name_loc: (1,3)-(1,5) = "a:" - │ │ │ │ └── value: - │ │ │ │ @ IntegerNode (location: (1,6)-(1,7)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ ├── keyword_rest: ∅ - │ │ │ └── block: ∅ - │ │ ├── locals: (length: 0) - │ │ ├── opening_loc: ∅ - │ │ └── closing_loc: ∅ - │ └── body: ∅ - └── @ LambdaNode (location: (3,0)-(3,9)) - ├── flags: newline - ├── locals: [:a] - ├── operator_loc: (3,0)-(3,2) = "->" - ├── opening_loc: (3,6)-(3,7) = "{" - ├── closing_loc: (3,8)-(3,9) = "}" - ├── parameters: - │ @ BlockParametersNode (location: (3,3)-(3,5)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (3,3)-(3,5)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 0) - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 1) - │ │ │ └── @ RequiredKeywordParameterNode (location: (3,3)-(3,5)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :a - │ │ │ └── name_loc: (3,3)-(3,5) = "a:" - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 0) - │ ├── opening_loc: ∅ - │ └── closing_loc: ∅ - └── body: ∅ diff --git a/test/prism/snapshots/whitequark/send_lambda_args_shadow.txt b/test/prism/snapshots/whitequark/send_lambda_args_shadow.txt deleted file mode 100644 index 5cd6660d4a5900..00000000000000 --- a/test/prism/snapshots/whitequark/send_lambda_args_shadow.txt +++ /dev/null @@ -1,39 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,19)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,19)) - ├── flags: ∅ - └── body: (length: 1) - └── @ LambdaNode (location: (1,0)-(1,19)) - ├── flags: newline - ├── locals: [:a, :foo, :bar] - ├── operator_loc: (1,0)-(1,2) = "->" - ├── opening_loc: (1,16)-(1,17) = "{" - ├── closing_loc: (1,18)-(1,19) = "}" - ├── parameters: - │ @ BlockParametersNode (location: (1,2)-(1,15)) - │ ├── flags: ∅ - │ ├── parameters: - │ │ @ ParametersNode (location: (1,3)-(1,4)) - │ │ ├── flags: ∅ - │ │ ├── requireds: (length: 1) - │ │ │ └── @ RequiredParameterNode (location: (1,3)-(1,4)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :a - │ │ ├── optionals: (length: 0) - │ │ ├── rest: ∅ - │ │ ├── posts: (length: 0) - │ │ ├── keywords: (length: 0) - │ │ ├── keyword_rest: ∅ - │ │ └── block: ∅ - │ ├── locals: (length: 2) - │ │ ├── @ BlockLocalVariableNode (location: (1,6)-(1,9)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :foo - │ │ └── @ BlockLocalVariableNode (location: (1,11)-(1,14)) - │ │ ├── flags: ∅ - │ │ └── name: :bar - │ ├── opening_loc: (1,2)-(1,3) = "(" - │ └── closing_loc: (1,14)-(1,15) = ")" - └── body: ∅ diff --git a/test/prism/snapshots/whitequark/send_lambda_legacy.txt b/test/prism/snapshots/whitequark/send_lambda_legacy.txt deleted file mode 100644 index 902e1404592c09..00000000000000 --- a/test/prism/snapshots/whitequark/send_lambda_legacy.txt +++ /dev/null @@ -1,15 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,5)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,5)) - ├── flags: ∅ - └── body: (length: 1) - └── @ LambdaNode (location: (1,0)-(1,5)) - ├── flags: newline - ├── locals: [] - ├── operator_loc: (1,0)-(1,2) = "->" - ├── opening_loc: (1,2)-(1,3) = "{" - ├── closing_loc: (1,4)-(1,5) = "}" - ├── parameters: ∅ - └── body: ∅ diff --git a/test/prism/snapshots/whitequark/send_op_asgn_conditional.txt b/test/prism/snapshots/whitequark/send_op_asgn_conditional.txt deleted file mode 100644 index 68e09171f8859c..00000000000000 --- a/test/prism/snapshots/whitequark/send_op_asgn_conditional.txt +++ /dev/null @@ -1,29 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,10)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,10)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallAndWriteNode (location: (1,0)-(1,10)) - ├── flags: newline, safe_navigation - ├── receiver: - │ @ CallNode (location: (1,0)-(1,1)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :a - │ ├── message_loc: (1,0)-(1,1) = "a" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: (1,1)-(1,3) = "&." - ├── message_loc: (1,3)-(1,4) = "b" - ├── read_name: :b - ├── write_name: :b= - ├── operator_loc: (1,5)-(1,8) = "&&=" - └── value: - @ IntegerNode (location: (1,9)-(1,10)) - ├── flags: static_literal, decimal - └── value: 1 diff --git a/test/prism/snapshots/whitequark/send_plain.txt b/test/prism/snapshots/whitequark/send_plain.txt deleted file mode 100644 index 96643ddcab7ea9..00000000000000 --- a/test/prism/snapshots/whitequark/send_plain.txt +++ /dev/null @@ -1,67 +0,0 @@ -@ ProgramNode (location: (1,0)-(5,8)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(5,8)) - ├── flags: ∅ - └── body: (length: 3) - ├── @ CallNode (location: (1,0)-(1,7)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (1,0)-(1,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (1,0)-(1,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (1,3)-(1,4) = "." - │ ├── name: :fun - │ ├── message_loc: (1,4)-(1,7) = "fun" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (3,0)-(3,10)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (3,0)-(3,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (3,0)-(3,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (3,3)-(3,5) = "::" - │ ├── name: :Fun - │ ├── message_loc: (3,5)-(3,8) = "Fun" - │ ├── opening_loc: (3,8)-(3,9) = "(" - │ ├── arguments: ∅ - │ ├── closing_loc: (3,9)-(3,10) = ")" - │ └── block: ∅ - └── @ CallNode (location: (5,0)-(5,8)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (5,0)-(5,3)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (5,0)-(5,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: (5,3)-(5,5) = "::" - ├── name: :fun - ├── message_loc: (5,5)-(5,8) = "fun" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/whitequark/send_plain_cmd.txt b/test/prism/snapshots/whitequark/send_plain_cmd.txt deleted file mode 100644 index 2785712baae0c5..00000000000000 --- a/test/prism/snapshots/whitequark/send_plain_cmd.txt +++ /dev/null @@ -1,106 +0,0 @@ -@ ProgramNode (location: (1,0)-(5,12)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(5,12)) - ├── flags: ∅ - └── body: (length: 3) - ├── @ CallNode (location: (1,0)-(1,11)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (1,0)-(1,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (1,0)-(1,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (1,3)-(1,4) = "." - │ ├── name: :fun - │ ├── message_loc: (1,4)-(1,7) = "fun" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,8)-(1,11)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (1,8)-(1,11)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (1,8)-(1,11) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (3,0)-(3,12)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (3,0)-(3,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (3,0)-(3,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (3,3)-(3,5) = "::" - │ ├── name: :Fun - │ ├── message_loc: (3,5)-(3,8) = "Fun" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (3,9)-(3,12)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (3,9)-(3,12)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (3,9)-(3,12) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── @ CallNode (location: (5,0)-(5,12)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (5,0)-(5,3)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (5,0)-(5,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: (5,3)-(5,5) = "::" - ├── name: :fun - ├── message_loc: (5,5)-(5,8) = "fun" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (5,9)-(5,12)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ CallNode (location: (5,9)-(5,12)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :bar - │ ├── message_loc: (5,9)-(5,12) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/whitequark/send_self.txt b/test/prism/snapshots/whitequark/send_self.txt deleted file mode 100644 index f3c56f5413b59b..00000000000000 --- a/test/prism/snapshots/whitequark/send_self.txt +++ /dev/null @@ -1,43 +0,0 @@ -@ ProgramNode (location: (1,0)-(5,6)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(5,6)) - ├── flags: ∅ - └── body: (length: 3) - ├── @ CallNode (location: (1,0)-(1,3)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :fun - │ ├── message_loc: (1,0)-(1,3) = "fun" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (3,0)-(3,4)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :fun! - │ ├── message_loc: (3,0)-(3,4) = "fun!" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── @ CallNode (location: (5,0)-(5,6)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :fun - ├── message_loc: (5,0)-(5,3) = "fun" - ├── opening_loc: (5,3)-(5,4) = "(" - ├── arguments: - │ @ ArgumentsNode (location: (5,4)-(5,5)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ IntegerNode (location: (5,4)-(5,5)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── closing_loc: (5,5)-(5,6) = ")" - └── block: ∅ diff --git a/test/prism/snapshots/whitequark/send_self_block.txt b/test/prism/snapshots/whitequark/send_self_block.txt deleted file mode 100644 index 2d526d5d48ae9c..00000000000000 --- a/test/prism/snapshots/whitequark/send_self_block.txt +++ /dev/null @@ -1,81 +0,0 @@ -@ ProgramNode (location: (1,0)-(7,10)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(7,10)) - ├── flags: ∅ - └── body: (length: 4) - ├── @ CallNode (location: (1,0)-(1,10)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :fun - │ ├── message_loc: (1,0)-(1,3) = "fun" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (1,4)-(1,10)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (1,4)-(1,6) = "do" - │ └── closing_loc: (1,7)-(1,10) = "end" - ├── @ CallNode (location: (3,0)-(3,7)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :fun - │ ├── message_loc: (3,0)-(3,3) = "fun" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (3,4)-(3,7)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (3,4)-(3,5) = "{" - │ └── closing_loc: (3,6)-(3,7) = "}" - ├── @ CallNode (location: (5,0)-(5,9)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :fun - │ ├── message_loc: (5,0)-(5,3) = "fun" - │ ├── opening_loc: (5,3)-(5,4) = "(" - │ ├── arguments: ∅ - │ ├── closing_loc: (5,4)-(5,5) = ")" - │ └── block: - │ @ BlockNode (location: (5,6)-(5,9)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (5,6)-(5,7) = "{" - │ └── closing_loc: (5,8)-(5,9) = "}" - └── @ CallNode (location: (7,0)-(7,10)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :fun - ├── message_loc: (7,0)-(7,3) = "fun" - ├── opening_loc: (7,3)-(7,4) = "(" - ├── arguments: - │ @ ArgumentsNode (location: (7,4)-(7,5)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ IntegerNode (location: (7,4)-(7,5)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── closing_loc: (7,5)-(7,6) = ")" - └── block: - @ BlockNode (location: (7,7)-(7,10)) - ├── flags: ∅ - ├── locals: [] - ├── parameters: ∅ - ├── body: ∅ - ├── opening_loc: (7,7)-(7,8) = "{" - └── closing_loc: (7,9)-(7,10) = "}" diff --git a/test/prism/snapshots/whitequark/send_unary_op.txt b/test/prism/snapshots/whitequark/send_unary_op.txt deleted file mode 100644 index 970b78417f285e..00000000000000 --- a/test/prism/snapshots/whitequark/send_unary_op.txt +++ /dev/null @@ -1,67 +0,0 @@ -@ ProgramNode (location: (1,0)-(5,4)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(5,4)) - ├── flags: ∅ - └── body: (length: 3) - ├── @ CallNode (location: (1,0)-(1,4)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (1,1)-(1,4)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (1,1)-(1,4) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :+@ - │ ├── message_loc: (1,0)-(1,1) = "+" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (3,0)-(3,4)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (3,1)-(3,4)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (3,1)-(3,4) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :-@ - │ ├── message_loc: (3,0)-(3,1) = "-" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── @ CallNode (location: (5,0)-(5,4)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (5,1)-(5,4)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (5,1)-(5,4) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: ∅ - ├── name: :~ - ├── message_loc: (5,0)-(5,1) = "~" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/whitequark/slash_newline_in_heredocs.txt b/test/prism/snapshots/whitequark/slash_newline_in_heredocs.txt deleted file mode 100644 index bd9fa7916d8715..00000000000000 --- a/test/prism/snapshots/whitequark/slash_newline_in_heredocs.txt +++ /dev/null @@ -1,36 +0,0 @@ -@ ProgramNode (location: (1,0)-(8,4)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(8,4)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ StringNode (location: (1,0)-(1,4)) - │ ├── flags: newline - │ ├── opening_loc: (1,0)-(1,4) = "<<-E" - │ ├── content_loc: (2,0)-(5,0) = " 1 \\\n 2\n 3\n" - │ ├── closing_loc: (5,0)-(6,0) = "E\n" - │ └── unescaped: " 1 2\n 3\n" - └── @ InterpolatedStringNode (location: (8,0)-(8,4)) - ├── flags: newline, static_literal - ├── opening_loc: (8,0)-(8,4) = "<<~E" - ├── parts: (length: 3) - │ ├── @ StringNode (location: (9,0)-(10,0)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (9,0)-(10,0) = " 1 \\\n" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "1 " - │ ├── @ StringNode (location: (10,0)-(11,0)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (10,0)-(11,0) = " 2\n" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "2\n" - │ └── @ StringNode (location: (11,0)-(12,0)) - │ ├── flags: static_literal, frozen - │ ├── opening_loc: ∅ - │ ├── content_loc: (11,0)-(12,0) = " 3\n" - │ ├── closing_loc: ∅ - │ └── unescaped: "3\n" - └── closing_loc: (12,0)-(13,0) = "E\n" diff --git a/test/prism/snapshots/whitequark/space_args_arg.txt b/test/prism/snapshots/whitequark/space_args_arg.txt deleted file mode 100644 index a0149c5f3261b3..00000000000000 --- a/test/prism/snapshots/whitequark/space_args_arg.txt +++ /dev/null @@ -1,31 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,7)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,7)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,7)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :fun - ├── message_loc: (1,0)-(1,3) = "fun" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,4)-(1,7)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ ParenthesesNode (location: (1,4)-(1,7)) - │ ├── flags: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (1,5)-(1,6)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ IntegerNode (location: (1,5)-(1,6)) - │ │ ├── flags: newline, static_literal, decimal - │ │ └── value: 1 - │ ├── opening_loc: (1,4)-(1,5) = "(" - │ └── closing_loc: (1,6)-(1,7) = ")" - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/whitequark/space_args_arg_block.txt b/test/prism/snapshots/whitequark/space_args_arg_block.txt deleted file mode 100644 index c3289c1448c554..00000000000000 --- a/test/prism/snapshots/whitequark/space_args_arg_block.txt +++ /dev/null @@ -1,120 +0,0 @@ -@ ProgramNode (location: (1,0)-(5,10)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(5,10)) - ├── flags: ∅ - └── body: (length: 3) - ├── @ CallNode (location: (1,0)-(1,14)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (1,0)-(1,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (1,0)-(1,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (1,3)-(1,4) = "." - │ ├── name: :fun - │ ├── message_loc: (1,4)-(1,7) = "fun" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,8)-(1,11)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ ParenthesesNode (location: (1,8)-(1,11)) - │ │ ├── flags: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (1,9)-(1,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ IntegerNode (location: (1,9)-(1,10)) - │ │ │ ├── flags: newline, static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── opening_loc: (1,8)-(1,9) = "(" - │ │ └── closing_loc: (1,10)-(1,11) = ")" - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (1,12)-(1,14)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (1,12)-(1,13) = "{" - │ └── closing_loc: (1,13)-(1,14) = "}" - ├── @ CallNode (location: (3,0)-(3,15)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (3,0)-(3,3)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (3,0)-(3,3) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: (3,3)-(3,5) = "::" - │ ├── name: :fun - │ ├── message_loc: (3,5)-(3,8) = "fun" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (3,9)-(3,12)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ ParenthesesNode (location: (3,9)-(3,12)) - │ │ ├── flags: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (3,10)-(3,11)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ IntegerNode (location: (3,10)-(3,11)) - │ │ │ ├── flags: newline, static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── opening_loc: (3,9)-(3,10) = "(" - │ │ └── closing_loc: (3,11)-(3,12) = ")" - │ ├── closing_loc: ∅ - │ └── block: - │ @ BlockNode (location: (3,13)-(3,15)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (3,13)-(3,14) = "{" - │ └── closing_loc: (3,14)-(3,15) = "}" - └── @ CallNode (location: (5,0)-(5,10)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :fun - ├── message_loc: (5,0)-(5,3) = "fun" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (5,4)-(5,7)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ ParenthesesNode (location: (5,4)-(5,7)) - │ ├── flags: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (5,5)-(5,6)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ IntegerNode (location: (5,5)-(5,6)) - │ │ ├── flags: newline, static_literal, decimal - │ │ └── value: 1 - │ ├── opening_loc: (5,4)-(5,5) = "(" - │ └── closing_loc: (5,6)-(5,7) = ")" - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (5,8)-(5,10)) - ├── flags: ∅ - ├── locals: [] - ├── parameters: ∅ - ├── body: ∅ - ├── opening_loc: (5,8)-(5,9) = "{" - └── closing_loc: (5,9)-(5,10) = "}" diff --git a/test/prism/snapshots/whitequark/space_args_arg_call.txt b/test/prism/snapshots/whitequark/space_args_arg_call.txt deleted file mode 100644 index 538a865e2acd03..00000000000000 --- a/test/prism/snapshots/whitequark/space_args_arg_call.txt +++ /dev/null @@ -1,41 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,12)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,12)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,12)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :fun - ├── message_loc: (1,0)-(1,3) = "fun" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,4)-(1,12)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ CallNode (location: (1,4)-(1,12)) - │ ├── flags: ∅ - │ ├── receiver: - │ │ @ ParenthesesNode (location: (1,4)-(1,7)) - │ │ ├── flags: ∅ - │ │ ├── body: - │ │ │ @ StatementsNode (location: (1,5)-(1,6)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ IntegerNode (location: (1,5)-(1,6)) - │ │ │ ├── flags: newline, static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── opening_loc: (1,4)-(1,5) = "(" - │ │ └── closing_loc: (1,6)-(1,7) = ")" - │ ├── call_operator_loc: (1,7)-(1,8) = "." - │ ├── name: :to_i - │ ├── message_loc: (1,8)-(1,12) = "to_i" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/whitequark/space_args_arg_newline.txt b/test/prism/snapshots/whitequark/space_args_arg_newline.txt deleted file mode 100644 index d3fbe232999636..00000000000000 --- a/test/prism/snapshots/whitequark/space_args_arg_newline.txt +++ /dev/null @@ -1,31 +0,0 @@ -@ ProgramNode (location: (1,0)-(2,1)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(2,1)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(2,1)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :fun - ├── message_loc: (1,0)-(1,3) = "fun" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,4)-(2,1)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ ParenthesesNode (location: (1,4)-(2,1)) - │ ├── flags: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (1,5)-(1,6)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ IntegerNode (location: (1,5)-(1,6)) - │ │ ├── flags: newline, static_literal, decimal - │ │ └── value: 1 - │ ├── opening_loc: (1,4)-(1,5) = "(" - │ └── closing_loc: (2,0)-(2,1) = ")" - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/whitequark/space_args_block.txt b/test/prism/snapshots/whitequark/space_args_block.txt deleted file mode 100644 index 19b5064886bd2e..00000000000000 --- a/test/prism/snapshots/whitequark/space_args_block.txt +++ /dev/null @@ -1,32 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,9)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,9)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,9)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :fun - ├── message_loc: (1,0)-(1,3) = "fun" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,4)-(1,6)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ ParenthesesNode (location: (1,4)-(1,6)) - │ ├── flags: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (1,4)-(1,5) = "(" - │ └── closing_loc: (1,5)-(1,6) = ")" - ├── closing_loc: ∅ - └── block: - @ BlockNode (location: (1,7)-(1,9)) - ├── flags: ∅ - ├── locals: [] - ├── parameters: ∅ - ├── body: ∅ - ├── opening_loc: (1,7)-(1,8) = "{" - └── closing_loc: (1,8)-(1,9) = "}" diff --git a/test/prism/snapshots/whitequark/space_args_cmd.txt b/test/prism/snapshots/whitequark/space_args_cmd.txt deleted file mode 100644 index f91b7edbbe4ebb..00000000000000 --- a/test/prism/snapshots/whitequark/space_args_cmd.txt +++ /dev/null @@ -1,51 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,11)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,11)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,11)) - ├── flags: newline, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :fun - ├── message_loc: (1,0)-(1,3) = "fun" - ├── opening_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (1,4)-(1,11)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ ParenthesesNode (location: (1,4)-(1,11)) - │ ├── flags: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (1,5)-(1,10)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (1,5)-(1,10)) - │ │ ├── flags: newline, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :f - │ │ ├── message_loc: (1,5)-(1,6) = "f" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (1,7)-(1,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ CallNode (location: (1,7)-(1,10)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (1,7)-(1,10) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── opening_loc: (1,4)-(1,5) = "(" - │ └── closing_loc: (1,10)-(1,11) = ")" - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/whitequark/string___FILE__.txt b/test/prism/snapshots/whitequark/string___FILE__.txt deleted file mode 100644 index 98cd05e689badf..00000000000000 --- a/test/prism/snapshots/whitequark/string___FILE__.txt +++ /dev/null @@ -1,10 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,8)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,8)) - ├── flags: ∅ - └── body: (length: 1) - └── @ SourceFileNode (location: (1,0)-(1,8)) - ├── flags: newline - └── filepath: "whitequark/string___FILE__.txt" diff --git a/test/prism/snapshots/whitequark/string_concat.txt b/test/prism/snapshots/whitequark/string_concat.txt deleted file mode 100644 index 1320fae371c1de..00000000000000 --- a/test/prism/snapshots/whitequark/string_concat.txt +++ /dev/null @@ -1,36 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,14)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,14)) - ├── flags: ∅ - └── body: (length: 1) - └── @ InterpolatedStringNode (location: (1,0)-(1,14)) - ├── flags: newline - ├── opening_loc: ∅ - ├── parts: (length: 2) - │ ├── @ InterpolatedStringNode (location: (1,0)-(1,8)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (1,0)-(1,1) = "\"" - │ │ ├── parts: (length: 2) - │ │ │ ├── @ StringNode (location: (1,1)-(1,4)) - │ │ │ │ ├── flags: static_literal, frozen - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── content_loc: (1,1)-(1,4) = "foo" - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── unescaped: "foo" - │ │ │ └── @ EmbeddedVariableNode (location: (1,4)-(1,7)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (1,4)-(1,5) = "#" - │ │ │ └── variable: - │ │ │ @ InstanceVariableReadNode (location: (1,5)-(1,7)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :@a - │ │ └── closing_loc: (1,7)-(1,8) = "\"" - │ └── @ StringNode (location: (1,9)-(1,14)) - │ ├── flags: static_literal, frozen - │ ├── opening_loc: (1,9)-(1,10) = "\"" - │ ├── content_loc: (1,10)-(1,13) = "bar" - │ ├── closing_loc: (1,13)-(1,14) = "\"" - │ └── unescaped: "bar" - └── closing_loc: ∅ diff --git a/test/prism/snapshots/whitequark/string_dvar.txt b/test/prism/snapshots/whitequark/string_dvar.txt deleted file mode 100644 index ab11f000136911..00000000000000 --- a/test/prism/snapshots/whitequark/string_dvar.txt +++ /dev/null @@ -1,45 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,14)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,14)) - ├── flags: ∅ - └── body: (length: 1) - └── @ InterpolatedStringNode (location: (1,0)-(1,14)) - ├── flags: newline - ├── opening_loc: (1,0)-(1,1) = "\"" - ├── parts: (length: 5) - │ ├── @ EmbeddedVariableNode (location: (1,1)-(1,4)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (1,1)-(1,2) = "#" - │ │ └── variable: - │ │ @ InstanceVariableReadNode (location: (1,2)-(1,4)) - │ │ ├── flags: ∅ - │ │ └── name: :@a - │ ├── @ StringNode (location: (1,4)-(1,5)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (1,4)-(1,5) = " " - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: " " - │ ├── @ EmbeddedVariableNode (location: (1,5)-(1,9)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (1,5)-(1,6) = "#" - │ │ └── variable: - │ │ @ ClassVariableReadNode (location: (1,6)-(1,9)) - │ │ ├── flags: ∅ - │ │ └── name: :@@a - │ ├── @ StringNode (location: (1,9)-(1,10)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (1,9)-(1,10) = " " - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: " " - │ └── @ EmbeddedVariableNode (location: (1,10)-(1,13)) - │ ├── flags: ∅ - │ ├── operator_loc: (1,10)-(1,11) = "#" - │ └── variable: - │ @ GlobalVariableReadNode (location: (1,11)-(1,13)) - │ ├── flags: ∅ - │ └── name: :$a - └── closing_loc: (1,13)-(1,14) = "\"" diff --git a/test/prism/snapshots/whitequark/string_interp.txt b/test/prism/snapshots/whitequark/string_interp.txt deleted file mode 100644 index 22ddaed0cd4491..00000000000000 --- a/test/prism/snapshots/whitequark/string_interp.txt +++ /dev/null @@ -1,42 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,14)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,14)) - ├── flags: ∅ - └── body: (length: 1) - └── @ InterpolatedStringNode (location: (1,0)-(1,14)) - ├── flags: newline - ├── opening_loc: (1,0)-(1,1) = "\"" - ├── parts: (length: 3) - │ ├── @ StringNode (location: (1,1)-(1,4)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (1,1)-(1,4) = "foo" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "foo" - │ ├── @ EmbeddedStatementsNode (location: (1,4)-(1,10)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (1,4)-(1,6) = "\#{" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (1,6)-(1,9)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (1,6)-(1,9)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (1,6)-(1,9) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── closing_loc: (1,9)-(1,10) = "}" - │ └── @ StringNode (location: (1,10)-(1,13)) - │ ├── flags: static_literal, frozen - │ ├── opening_loc: ∅ - │ ├── content_loc: (1,10)-(1,13) = "baz" - │ ├── closing_loc: ∅ - │ └── unescaped: "baz" - └── closing_loc: (1,13)-(1,14) = "\"" diff --git a/test/prism/snapshots/whitequark/string_plain.txt b/test/prism/snapshots/whitequark/string_plain.txt deleted file mode 100644 index 0a763cef602cba..00000000000000 --- a/test/prism/snapshots/whitequark/string_plain.txt +++ /dev/null @@ -1,19 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,8)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,8)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ StringNode (location: (1,0)-(1,10)) - │ ├── flags: newline - │ ├── opening_loc: (1,0)-(1,3) = "%q(" - │ ├── content_loc: (1,3)-(1,9) = "foobar" - │ ├── closing_loc: (1,9)-(1,10) = ")" - │ └── unescaped: "foobar" - └── @ StringNode (location: (3,0)-(3,8)) - ├── flags: newline - ├── opening_loc: (3,0)-(3,1) = "'" - ├── content_loc: (3,1)-(3,7) = "foobar" - ├── closing_loc: (3,7)-(3,8) = "'" - └── unescaped: "foobar" diff --git a/test/prism/snapshots/whitequark/super.txt b/test/prism/snapshots/whitequark/super.txt deleted file mode 100644 index da89dbda287d42..00000000000000 --- a/test/prism/snapshots/whitequark/super.txt +++ /dev/null @@ -1,54 +0,0 @@ -@ ProgramNode (location: (1,0)-(5,10)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(5,10)) - ├── flags: ∅ - └── body: (length: 3) - ├── @ SuperNode (location: (1,0)-(1,9)) - │ ├── flags: newline - │ ├── keyword_loc: (1,0)-(1,5) = "super" - │ ├── lparen_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,6)-(1,9)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ CallNode (location: (1,6)-(1,9)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (1,6)-(1,9) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── rparen_loc: ∅ - │ └── block: ∅ - ├── @ SuperNode (location: (3,0)-(3,7)) - │ ├── flags: newline - │ ├── keyword_loc: (3,0)-(3,5) = "super" - │ ├── lparen_loc: (3,5)-(3,6) = "(" - │ ├── arguments: ∅ - │ ├── rparen_loc: (3,6)-(3,7) = ")" - │ └── block: ∅ - └── @ SuperNode (location: (5,0)-(5,10)) - ├── flags: newline - ├── keyword_loc: (5,0)-(5,5) = "super" - ├── lparen_loc: (5,5)-(5,6) = "(" - ├── arguments: - │ @ ArgumentsNode (location: (5,6)-(5,9)) - │ ├── flags: ∅ - │ └── arguments: (length: 1) - │ └── @ CallNode (location: (5,6)-(5,9)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (5,6)-(5,9) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── rparen_loc: (5,9)-(5,10) = ")" - └── block: ∅ diff --git a/test/prism/snapshots/whitequark/super_block.txt b/test/prism/snapshots/whitequark/super_block.txt deleted file mode 100644 index 095856ef408b1a..00000000000000 --- a/test/prism/snapshots/whitequark/super_block.txt +++ /dev/null @@ -1,54 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,21)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,21)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ ForwardingSuperNode (location: (1,0)-(1,12)) - │ ├── flags: newline - │ └── block: - │ @ BlockNode (location: (1,6)-(1,12)) - │ ├── flags: ∅ - │ ├── locals: [] - │ ├── parameters: ∅ - │ ├── body: ∅ - │ ├── opening_loc: (1,6)-(1,8) = "do" - │ └── closing_loc: (1,9)-(1,12) = "end" - └── @ SuperNode (location: (3,0)-(3,21)) - ├── flags: newline - ├── keyword_loc: (3,0)-(3,5) = "super" - ├── lparen_loc: ∅ - ├── arguments: - │ @ ArgumentsNode (location: (3,6)-(3,14)) - │ ├── flags: ∅ - │ └── arguments: (length: 2) - │ ├── @ CallNode (location: (3,6)-(3,9)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (3,6)-(3,9) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── @ CallNode (location: (3,11)-(3,14)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :bar - │ ├── message_loc: (3,11)-(3,14) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── rparen_loc: ∅ - └── block: - @ BlockNode (location: (3,15)-(3,21)) - ├── flags: ∅ - ├── locals: [] - ├── parameters: ∅ - ├── body: ∅ - ├── opening_loc: (3,15)-(3,17) = "do" - └── closing_loc: (3,18)-(3,21) = "end" diff --git a/test/prism/snapshots/whitequark/symbol_interp.txt b/test/prism/snapshots/whitequark/symbol_interp.txt deleted file mode 100644 index 46a24b6c7e2f9b..00000000000000 --- a/test/prism/snapshots/whitequark/symbol_interp.txt +++ /dev/null @@ -1,42 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,15)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,15)) - ├── flags: ∅ - └── body: (length: 1) - └── @ InterpolatedSymbolNode (location: (1,0)-(1,15)) - ├── flags: newline - ├── opening_loc: (1,0)-(1,2) = ":\"" - ├── parts: (length: 3) - │ ├── @ StringNode (location: (1,2)-(1,5)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (1,2)-(1,5) = "foo" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "foo" - │ ├── @ EmbeddedStatementsNode (location: (1,5)-(1,11)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (1,5)-(1,7) = "\#{" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (1,7)-(1,10)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (1,7)-(1,10)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (1,7)-(1,10) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── closing_loc: (1,10)-(1,11) = "}" - │ └── @ StringNode (location: (1,11)-(1,14)) - │ ├── flags: static_literal, frozen - │ ├── opening_loc: ∅ - │ ├── content_loc: (1,11)-(1,14) = "baz" - │ ├── closing_loc: ∅ - │ └── unescaped: "baz" - └── closing_loc: (1,14)-(1,15) = "\"" diff --git a/test/prism/snapshots/whitequark/symbol_plain.txt b/test/prism/snapshots/whitequark/symbol_plain.txt deleted file mode 100644 index 803f2847cd496b..00000000000000 --- a/test/prism/snapshots/whitequark/symbol_plain.txt +++ /dev/null @@ -1,19 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,4)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,4)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ SymbolNode (location: (1,0)-(1,6)) - │ ├── flags: newline, static_literal, forced_us_ascii_encoding - │ ├── opening_loc: (1,0)-(1,2) = ":'" - │ ├── value_loc: (1,2)-(1,5) = "foo" - │ ├── closing_loc: (1,5)-(1,6) = "'" - │ └── unescaped: "foo" - └── @ SymbolNode (location: (3,0)-(3,4)) - ├── flags: newline, static_literal, forced_us_ascii_encoding - ├── opening_loc: (3,0)-(3,1) = ":" - ├── value_loc: (3,1)-(3,4) = "foo" - ├── closing_loc: ∅ - └── unescaped: "foo" diff --git a/test/prism/snapshots/whitequark/ternary.txt b/test/prism/snapshots/whitequark/ternary.txt deleted file mode 100644 index 4aa79916751f83..00000000000000 --- a/test/prism/snapshots/whitequark/ternary.txt +++ /dev/null @@ -1,42 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,11)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,11)) - ├── flags: ∅ - └── body: (length: 1) - └── @ IfNode (location: (1,0)-(1,11)) - ├── flags: newline - ├── if_keyword_loc: ∅ - ├── predicate: - │ @ CallNode (location: (1,0)-(1,3)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (1,0)-(1,3) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── then_keyword_loc: (1,4)-(1,5) = "?" - ├── statements: - │ @ StatementsNode (location: (1,6)-(1,7)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ IntegerNode (location: (1,6)-(1,7)) - │ ├── flags: newline, static_literal, decimal - │ └── value: 1 - ├── subsequent: - │ @ ElseNode (location: (1,8)-(1,11)) - │ ├── flags: ∅ - │ ├── else_keyword_loc: (1,8)-(1,9) = ":" - │ ├── statements: - │ │ @ StatementsNode (location: (1,10)-(1,11)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ IntegerNode (location: (1,10)-(1,11)) - │ │ ├── flags: newline, static_literal, decimal - │ │ └── value: 2 - │ └── end_keyword_loc: ∅ - └── end_keyword_loc: ∅ diff --git a/test/prism/snapshots/whitequark/ternary_ambiguous_symbol.txt b/test/prism/snapshots/whitequark/ternary_ambiguous_symbol.txt deleted file mode 100644 index 4d1900fc5f7087..00000000000000 --- a/test/prism/snapshots/whitequark/ternary_ambiguous_symbol.txt +++ /dev/null @@ -1,61 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,13)) -├── flags: ∅ -├── locals: [:t] -└── statements: - @ StatementsNode (location: (1,0)-(1,13)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ LocalVariableWriteNode (location: (1,0)-(1,3)) - │ ├── flags: newline - │ ├── name: :t - │ ├── depth: 0 - │ ├── name_loc: (1,0)-(1,1) = "t" - │ ├── value: - │ │ @ IntegerNode (location: (1,2)-(1,3)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ └── operator_loc: (1,1)-(1,2) = "=" - └── @ IfNode (location: (1,4)-(1,13)) - ├── flags: newline - ├── if_keyword_loc: ∅ - ├── predicate: - │ @ ParenthesesNode (location: (1,4)-(1,9)) - │ ├── flags: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (1,5)-(1,8)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (1,5)-(1,8)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (1,5)-(1,8) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── opening_loc: (1,4)-(1,5) = "(" - │ └── closing_loc: (1,8)-(1,9) = ")" - ├── then_keyword_loc: (1,9)-(1,10) = "?" - ├── statements: - │ @ StatementsNode (location: (1,10)-(1,11)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ LocalVariableReadNode (location: (1,10)-(1,11)) - │ ├── flags: newline - │ ├── name: :t - │ └── depth: 0 - ├── subsequent: - │ @ ElseNode (location: (1,11)-(1,13)) - │ ├── flags: ∅ - │ ├── else_keyword_loc: (1,11)-(1,12) = ":" - │ ├── statements: - │ │ @ StatementsNode (location: (1,12)-(1,13)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ ConstantReadNode (location: (1,12)-(1,13)) - │ │ ├── flags: newline - │ │ └── name: :T - │ └── end_keyword_loc: ∅ - └── end_keyword_loc: ∅ diff --git a/test/prism/snapshots/whitequark/trailing_forward_arg.txt b/test/prism/snapshots/whitequark/trailing_forward_arg.txt deleted file mode 100644 index 3cb3f8ae087101..00000000000000 --- a/test/prism/snapshots/whitequark/trailing_forward_arg.txt +++ /dev/null @@ -1,63 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,40)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,40)) - ├── flags: ∅ - └── body: (length: 1) - └── @ DefNode (location: (1,0)-(1,40)) - ├── flags: newline - ├── name: :foo - ├── name_loc: (1,4)-(1,7) = "foo" - ├── receiver: ∅ - ├── parameters: - │ @ ParametersNode (location: (1,8)-(1,17)) - │ ├── flags: ∅ - │ ├── requireds: (length: 2) - │ │ ├── @ RequiredParameterNode (location: (1,8)-(1,9)) - │ │ │ ├── flags: ∅ - │ │ │ └── name: :a - │ │ └── @ RequiredParameterNode (location: (1,11)-(1,12)) - │ │ ├── flags: ∅ - │ │ └── name: :b - │ ├── optionals: (length: 0) - │ ├── rest: ∅ - │ ├── posts: (length: 0) - │ ├── keywords: (length: 0) - │ ├── keyword_rest: - │ │ @ ForwardingParameterNode (location: (1,14)-(1,17)) - │ │ └── flags: ∅ - │ └── block: ∅ - ├── body: - │ @ StatementsNode (location: (1,20)-(1,35)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,20)-(1,35)) - │ ├── flags: newline, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :bar - │ ├── message_loc: (1,20)-(1,23) = "bar" - │ ├── opening_loc: (1,23)-(1,24) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,24)-(1,34)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 3) - │ │ ├── @ LocalVariableReadNode (location: (1,24)-(1,25)) - │ │ │ ├── flags: ∅ - │ │ │ ├── name: :a - │ │ │ └── depth: 0 - │ │ ├── @ IntegerNode (location: (1,27)-(1,29)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 42 - │ │ └── @ ForwardingArgumentsNode (location: (1,31)-(1,34)) - │ │ └── flags: ∅ - │ ├── closing_loc: (1,34)-(1,35) = ")" - │ └── block: ∅ - ├── locals: [:a, :b] - ├── def_keyword_loc: (1,0)-(1,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: (1,7)-(1,8) = "(" - ├── rparen_loc: (1,17)-(1,18) = ")" - ├── equal_loc: ∅ - └── end_keyword_loc: (1,37)-(1,40) = "end" diff --git a/test/prism/snapshots/whitequark/true.txt b/test/prism/snapshots/whitequark/true.txt deleted file mode 100644 index ba705338bafb88..00000000000000 --- a/test/prism/snapshots/whitequark/true.txt +++ /dev/null @@ -1,9 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,4)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,4)) - ├── flags: ∅ - └── body: (length: 1) - └── @ TrueNode (location: (1,0)-(1,4)) - └── flags: newline, static_literal diff --git a/test/prism/snapshots/whitequark/unary_num_pow_precedence.txt b/test/prism/snapshots/whitequark/unary_num_pow_precedence.txt deleted file mode 100644 index 0f2fb776b4293e..00000000000000 --- a/test/prism/snapshots/whitequark/unary_num_pow_precedence.txt +++ /dev/null @@ -1,84 +0,0 @@ -@ ProgramNode (location: (1,0)-(5,10)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(5,10)) - ├── flags: ∅ - └── body: (length: 3) - ├── @ CallNode (location: (1,0)-(1,10)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ FloatNode (location: (1,0)-(1,4)) - │ │ ├── flags: static_literal - │ │ └── value: 2.0 - │ ├── call_operator_loc: ∅ - │ ├── name: :** - │ ├── message_loc: (1,5)-(1,7) = "**" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,8)-(1,10)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (1,8)-(1,10)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 10 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── @ CallNode (location: (3,0)-(3,8)) - │ ├── flags: newline - │ ├── receiver: - │ │ @ CallNode (location: (3,1)-(3,8)) - │ │ ├── flags: ∅ - │ │ ├── receiver: - │ │ │ @ IntegerNode (location: (3,1)-(3,2)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :** - │ │ ├── message_loc: (3,3)-(3,5) = "**" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (3,6)-(3,8)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (3,6)-(3,8)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 10 - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :-@ - │ ├── message_loc: (3,0)-(3,1) = "-" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── @ CallNode (location: (5,0)-(5,10)) - ├── flags: newline - ├── receiver: - │ @ CallNode (location: (5,1)-(5,10)) - │ ├── flags: ∅ - │ ├── receiver: - │ │ @ FloatNode (location: (5,1)-(5,4)) - │ │ ├── flags: static_literal - │ │ └── value: 2.0 - │ ├── call_operator_loc: ∅ - │ ├── name: :** - │ ├── message_loc: (5,5)-(5,7) = "**" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (5,8)-(5,10)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ IntegerNode (location: (5,8)-(5,10)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 10 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── call_operator_loc: ∅ - ├── name: :-@ - ├── message_loc: (5,0)-(5,1) = "-" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/whitequark/undef.txt b/test/prism/snapshots/whitequark/undef.txt deleted file mode 100644 index a24ba2f86845ba..00000000000000 --- a/test/prism/snapshots/whitequark/undef.txt +++ /dev/null @@ -1,45 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,27)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,27)) - ├── flags: ∅ - └── body: (length: 1) - └── @ UndefNode (location: (1,0)-(1,27)) - ├── flags: newline - ├── names: (length: 3) - │ ├── @ SymbolNode (location: (1,6)-(1,9)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: ∅ - │ │ ├── value_loc: (1,6)-(1,9) = "foo" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "foo" - │ ├── @ SymbolNode (location: (1,11)-(1,15)) - │ │ ├── flags: static_literal, forced_us_ascii_encoding - │ │ ├── opening_loc: (1,11)-(1,12) = ":" - │ │ ├── value_loc: (1,12)-(1,15) = "bar" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "bar" - │ └── @ InterpolatedSymbolNode (location: (1,17)-(1,27)) - │ ├── flags: ∅ - │ ├── opening_loc: (1,17)-(1,19) = ":\"" - │ ├── parts: (length: 2) - │ │ ├── @ StringNode (location: (1,19)-(1,22)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (1,19)-(1,22) = "foo" - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "foo" - │ │ └── @ EmbeddedStatementsNode (location: (1,22)-(1,26)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (1,22)-(1,24) = "\#{" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (1,24)-(1,25)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ IntegerNode (location: (1,24)-(1,25)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── closing_loc: (1,25)-(1,26) = "}" - │ └── closing_loc: (1,26)-(1,27) = "\"" - └── keyword_loc: (1,0)-(1,5) = "undef" diff --git a/test/prism/snapshots/whitequark/unless.txt b/test/prism/snapshots/whitequark/unless.txt deleted file mode 100644 index 3d417e355d456a..00000000000000 --- a/test/prism/snapshots/whitequark/unless.txt +++ /dev/null @@ -1,69 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,20)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,20)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ UnlessNode (location: (1,0)-(1,24)) - │ ├── flags: newline - │ ├── keyword_loc: (1,0)-(1,6) = "unless" - │ ├── predicate: - │ │ @ CallNode (location: (1,7)-(1,10)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (1,7)-(1,10) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── then_keyword_loc: (1,11)-(1,15) = "then" - │ ├── statements: - │ │ @ StatementsNode (location: (1,16)-(1,19)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (1,16)-(1,19)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (1,16)-(1,19) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── else_clause: ∅ - │ └── end_keyword_loc: (1,21)-(1,24) = "end" - └── @ UnlessNode (location: (3,0)-(3,20)) - ├── flags: newline - ├── keyword_loc: (3,0)-(3,6) = "unless" - ├── predicate: - │ @ CallNode (location: (3,7)-(3,10)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (3,7)-(3,10) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── then_keyword_loc: ∅ - ├── statements: - │ @ StatementsNode (location: (3,12)-(3,15)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (3,12)-(3,15)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :bar - │ ├── message_loc: (3,12)-(3,15) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── else_clause: ∅ - └── end_keyword_loc: (3,17)-(3,20) = "end" diff --git a/test/prism/snapshots/whitequark/unless_else.txt b/test/prism/snapshots/whitequark/unless_else.txt deleted file mode 100644 index ffdb21569242a4..00000000000000 --- a/test/prism/snapshots/whitequark/unless_else.txt +++ /dev/null @@ -1,105 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,30)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,30)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ UnlessNode (location: (1,0)-(1,34)) - │ ├── flags: newline - │ ├── keyword_loc: (1,0)-(1,6) = "unless" - │ ├── predicate: - │ │ @ CallNode (location: (1,7)-(1,10)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (1,7)-(1,10) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── then_keyword_loc: (1,11)-(1,15) = "then" - │ ├── statements: - │ │ @ StatementsNode (location: (1,16)-(1,19)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (1,16)-(1,19)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (1,16)-(1,19) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── else_clause: - │ │ @ ElseNode (location: (1,21)-(1,34)) - │ │ ├── flags: ∅ - │ │ ├── else_keyword_loc: (1,21)-(1,25) = "else" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (1,26)-(1,29)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (1,26)-(1,29)) - │ │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :baz - │ │ │ ├── message_loc: (1,26)-(1,29) = "baz" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── end_keyword_loc: (1,31)-(1,34) = "end" - │ └── end_keyword_loc: (1,31)-(1,34) = "end" - └── @ UnlessNode (location: (3,0)-(3,30)) - ├── flags: newline - ├── keyword_loc: (3,0)-(3,6) = "unless" - ├── predicate: - │ @ CallNode (location: (3,7)-(3,10)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (3,7)-(3,10) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── then_keyword_loc: ∅ - ├── statements: - │ @ StatementsNode (location: (3,12)-(3,15)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (3,12)-(3,15)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :bar - │ ├── message_loc: (3,12)-(3,15) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── else_clause: - │ @ ElseNode (location: (3,17)-(3,30)) - │ ├── flags: ∅ - │ ├── else_keyword_loc: (3,17)-(3,21) = "else" - │ ├── statements: - │ │ @ StatementsNode (location: (3,22)-(3,25)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (3,22)-(3,25)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :baz - │ │ ├── message_loc: (3,22)-(3,25) = "baz" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── end_keyword_loc: (3,27)-(3,30) = "end" - └── end_keyword_loc: (3,27)-(3,30) = "end" diff --git a/test/prism/snapshots/whitequark/unless_mod.txt b/test/prism/snapshots/whitequark/unless_mod.txt deleted file mode 100644 index 5dd1c2d25d4270..00000000000000 --- a/test/prism/snapshots/whitequark/unless_mod.txt +++ /dev/null @@ -1,38 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,14)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,14)) - ├── flags: ∅ - └── body: (length: 1) - └── @ UnlessNode (location: (1,0)-(1,14)) - ├── flags: newline - ├── keyword_loc: (1,4)-(1,10) = "unless" - ├── predicate: - │ @ CallNode (location: (1,11)-(1,14)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (1,11)-(1,14) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── then_keyword_loc: ∅ - ├── statements: - │ @ StatementsNode (location: (1,0)-(1,3)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,0)-(1,3)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :bar - │ ├── message_loc: (1,0)-(1,3) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── else_clause: ∅ - └── end_keyword_loc: ∅ diff --git a/test/prism/snapshots/whitequark/until.txt b/test/prism/snapshots/whitequark/until.txt deleted file mode 100644 index 0a0f2b35be89fe..00000000000000 --- a/test/prism/snapshots/whitequark/until.txt +++ /dev/null @@ -1,65 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,19)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,19)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ UntilNode (location: (1,0)-(1,21)) - │ ├── flags: newline - │ ├── keyword_loc: (1,0)-(1,5) = "until" - │ ├── closing_loc: (1,18)-(1,21) = "end" - │ ├── predicate: - │ │ @ CallNode (location: (1,6)-(1,9)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (1,6)-(1,9) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── statements: - │ @ StatementsNode (location: (1,13)-(1,17)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,13)-(1,17)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :meth - │ ├── message_loc: (1,13)-(1,17) = "meth" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── @ UntilNode (location: (3,0)-(3,19)) - ├── flags: newline - ├── keyword_loc: (3,0)-(3,5) = "until" - ├── closing_loc: (3,16)-(3,19) = "end" - ├── predicate: - │ @ CallNode (location: (3,6)-(3,9)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (3,6)-(3,9) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── statements: - @ StatementsNode (location: (3,11)-(3,15)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (3,11)-(3,15)) - ├── flags: newline, variable_call, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :meth - ├── message_loc: (3,11)-(3,15) = "meth" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/whitequark/until_mod.txt b/test/prism/snapshots/whitequark/until_mod.txt deleted file mode 100644 index f491018524dac1..00000000000000 --- a/test/prism/snapshots/whitequark/until_mod.txt +++ /dev/null @@ -1,36 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,14)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,14)) - ├── flags: ∅ - └── body: (length: 1) - └── @ UntilNode (location: (1,0)-(1,14)) - ├── flags: newline - ├── keyword_loc: (1,5)-(1,10) = "until" - ├── closing_loc: ∅ - ├── predicate: - │ @ CallNode (location: (1,11)-(1,14)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (1,11)-(1,14) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── statements: - @ StatementsNode (location: (1,0)-(1,4)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,4)) - ├── flags: newline, variable_call, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :meth - ├── message_loc: (1,0)-(1,4) = "meth" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/whitequark/until_post.txt b/test/prism/snapshots/whitequark/until_post.txt deleted file mode 100644 index c5efd5ebe7a9ab..00000000000000 --- a/test/prism/snapshots/whitequark/until_post.txt +++ /dev/null @@ -1,47 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,24)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,24)) - ├── flags: ∅ - └── body: (length: 1) - └── @ UntilNode (location: (1,0)-(1,24)) - ├── flags: newline, begin_modifier - ├── keyword_loc: (1,15)-(1,20) = "until" - ├── closing_loc: ∅ - ├── predicate: - │ @ CallNode (location: (1,21)-(1,24)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (1,21)-(1,24) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── statements: - @ StatementsNode (location: (1,0)-(1,14)) - ├── flags: ∅ - └── body: (length: 1) - └── @ BeginNode (location: (1,0)-(1,14)) - ├── flags: newline - ├── begin_keyword_loc: (1,0)-(1,5) = "begin" - ├── statements: - │ @ StatementsNode (location: (1,6)-(1,10)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,6)-(1,10)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :meth - │ ├── message_loc: (1,6)-(1,10) = "meth" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── rescue_clause: ∅ - ├── else_clause: ∅ - ├── ensure_clause: ∅ - └── end_keyword_loc: (1,11)-(1,14) = "end" diff --git a/test/prism/snapshots/whitequark/var_and_asgn.txt b/test/prism/snapshots/whitequark/var_and_asgn.txt deleted file mode 100644 index 1fd4b042bf6dba..00000000000000 --- a/test/prism/snapshots/whitequark/var_and_asgn.txt +++ /dev/null @@ -1,17 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,7)) -├── flags: ∅ -├── locals: [:a] -└── statements: - @ StatementsNode (location: (1,0)-(1,7)) - ├── flags: ∅ - └── body: (length: 1) - └── @ LocalVariableAndWriteNode (location: (1,0)-(1,7)) - ├── flags: newline - ├── name_loc: (1,0)-(1,1) = "a" - ├── operator_loc: (1,2)-(1,5) = "&&=" - ├── value: - │ @ IntegerNode (location: (1,6)-(1,7)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── name: :a - └── depth: 0 diff --git a/test/prism/snapshots/whitequark/var_op_asgn.txt b/test/prism/snapshots/whitequark/var_op_asgn.txt deleted file mode 100644 index bc863b31c77bc2..00000000000000 --- a/test/prism/snapshots/whitequark/var_op_asgn.txt +++ /dev/null @@ -1,65 +0,0 @@ -@ ProgramNode (location: (1,0)-(7,23)) -├── flags: ∅ -├── locals: [:a] -└── statements: - @ StatementsNode (location: (1,0)-(7,23)) - ├── flags: ∅ - └── body: (length: 4) - ├── @ ClassVariableOperatorWriteNode (location: (1,0)-(1,11)) - │ ├── flags: newline - │ ├── name: :@@var - │ ├── name_loc: (1,0)-(1,5) = "@@var" - │ ├── binary_operator_loc: (1,6)-(1,8) = "|=" - │ ├── value: - │ │ @ IntegerNode (location: (1,9)-(1,11)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 10 - │ └── binary_operator: :| - ├── @ InstanceVariableOperatorWriteNode (location: (3,0)-(3,7)) - │ ├── flags: newline - │ ├── name: :@a - │ ├── name_loc: (3,0)-(3,2) = "@a" - │ ├── binary_operator_loc: (3,3)-(3,5) = "|=" - │ ├── value: - │ │ @ IntegerNode (location: (3,6)-(3,7)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ └── binary_operator: :| - ├── @ LocalVariableOperatorWriteNode (location: (5,0)-(5,6)) - │ ├── flags: newline - │ ├── name_loc: (5,0)-(5,1) = "a" - │ ├── binary_operator_loc: (5,2)-(5,4) = "+=" - │ ├── value: - │ │ @ IntegerNode (location: (5,5)-(5,6)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 1 - │ ├── name: :a - │ ├── binary_operator: :+ - │ └── depth: 0 - └── @ DefNode (location: (7,0)-(7,23)) - ├── flags: newline - ├── name: :a - ├── name_loc: (7,4)-(7,5) = "a" - ├── receiver: ∅ - ├── parameters: ∅ - ├── body: - │ @ StatementsNode (location: (7,7)-(7,18)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ ClassVariableOperatorWriteNode (location: (7,7)-(7,18)) - │ ├── flags: newline - │ ├── name: :@@var - │ ├── name_loc: (7,7)-(7,12) = "@@var" - │ ├── binary_operator_loc: (7,13)-(7,15) = "|=" - │ ├── value: - │ │ @ IntegerNode (location: (7,16)-(7,18)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 10 - │ └── binary_operator: :| - ├── locals: [] - ├── def_keyword_loc: (7,0)-(7,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: ∅ - ├── rparen_loc: ∅ - ├── equal_loc: ∅ - └── end_keyword_loc: (7,20)-(7,23) = "end" diff --git a/test/prism/snapshots/whitequark/var_op_asgn_cmd.txt b/test/prism/snapshots/whitequark/var_op_asgn_cmd.txt deleted file mode 100644 index 381c98a95a5cca..00000000000000 --- a/test/prism/snapshots/whitequark/var_op_asgn_cmd.txt +++ /dev/null @@ -1,32 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,12)) -├── flags: ∅ -├── locals: [:foo] -└── statements: - @ StatementsNode (location: (1,0)-(1,12)) - ├── flags: ∅ - └── body: (length: 1) - └── @ LocalVariableOperatorWriteNode (location: (1,0)-(1,12)) - ├── flags: newline - ├── name_loc: (1,0)-(1,3) = "foo" - ├── binary_operator_loc: (1,4)-(1,6) = "+=" - ├── value: - │ @ CallNode (location: (1,7)-(1,12)) - │ ├── flags: ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :m - │ ├── message_loc: (1,7)-(1,8) = "m" - │ ├── opening_loc: ∅ - │ ├── arguments: - │ │ @ ArgumentsNode (location: (1,9)-(1,12)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 1) - │ │ └── @ LocalVariableReadNode (location: (1,9)-(1,12)) - │ │ ├── flags: ∅ - │ │ ├── name: :foo - │ │ └── depth: 0 - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── name: :foo - ├── binary_operator: :+ - └── depth: 0 diff --git a/test/prism/snapshots/whitequark/var_or_asgn.txt b/test/prism/snapshots/whitequark/var_or_asgn.txt deleted file mode 100644 index 2d034c7f2d0730..00000000000000 --- a/test/prism/snapshots/whitequark/var_or_asgn.txt +++ /dev/null @@ -1,17 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,7)) -├── flags: ∅ -├── locals: [:a] -└── statements: - @ StatementsNode (location: (1,0)-(1,7)) - ├── flags: ∅ - └── body: (length: 1) - └── @ LocalVariableOrWriteNode (location: (1,0)-(1,7)) - ├── flags: newline - ├── name_loc: (1,0)-(1,1) = "a" - ├── operator_loc: (1,2)-(1,5) = "||=" - ├── value: - │ @ IntegerNode (location: (1,6)-(1,7)) - │ ├── flags: static_literal, decimal - │ └── value: 1 - ├── name: :a - └── depth: 0 diff --git a/test/prism/snapshots/whitequark/when_multi.txt b/test/prism/snapshots/whitequark/when_multi.txt deleted file mode 100644 index b4038b74a81146..00000000000000 --- a/test/prism/snapshots/whitequark/when_multi.txt +++ /dev/null @@ -1,55 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,37)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,37)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CaseNode (location: (1,0)-(1,37)) - ├── flags: newline - ├── predicate: - │ @ CallNode (location: (1,5)-(1,8)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (1,5)-(1,8) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── conditions: (length: 1) - │ └── @ WhenNode (location: (1,10)-(1,32)) - │ ├── flags: ∅ - │ ├── keyword_loc: (1,10)-(1,14) = "when" - │ ├── conditions: (length: 2) - │ │ ├── @ StringNode (location: (1,15)-(1,20)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: (1,15)-(1,16) = "'" - │ │ │ ├── content_loc: (1,16)-(1,19) = "bar" - │ │ │ ├── closing_loc: (1,19)-(1,20) = "'" - │ │ │ └── unescaped: "bar" - │ │ └── @ StringNode (location: (1,22)-(1,27)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: (1,22)-(1,23) = "'" - │ │ ├── content_loc: (1,23)-(1,26) = "baz" - │ │ ├── closing_loc: (1,26)-(1,27) = "'" - │ │ └── unescaped: "baz" - │ ├── then_keyword_loc: ∅ - │ └── statements: - │ @ StatementsNode (location: (1,29)-(1,32)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,29)-(1,32)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :bar - │ ├── message_loc: (1,29)-(1,32) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── else_clause: ∅ - ├── case_keyword_loc: (1,0)-(1,4) = "case" - └── end_keyword_loc: (1,34)-(1,37) = "end" diff --git a/test/prism/snapshots/whitequark/when_splat.txt b/test/prism/snapshots/whitequark/when_splat.txt deleted file mode 100644 index f5d9080539aa28..00000000000000 --- a/test/prism/snapshots/whitequark/when_splat.txt +++ /dev/null @@ -1,80 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,43)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,43)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CaseNode (location: (1,0)-(1,43)) - ├── flags: newline - ├── predicate: - │ @ CallNode (location: (1,5)-(1,8)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (1,5)-(1,8) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── conditions: (length: 2) - │ ├── @ WhenNode (location: (1,10)-(1,27)) - │ │ ├── flags: ∅ - │ │ ├── keyword_loc: (1,10)-(1,14) = "when" - │ │ ├── conditions: (length: 2) - │ │ │ ├── @ IntegerNode (location: (1,15)-(1,16)) - │ │ │ │ ├── flags: static_literal, decimal - │ │ │ │ └── value: 1 - │ │ │ └── @ SplatNode (location: (1,18)-(1,22)) - │ │ │ ├── flags: ∅ - │ │ │ ├── operator_loc: (1,18)-(1,19) = "*" - │ │ │ └── expression: - │ │ │ @ CallNode (location: (1,19)-(1,22)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :baz - │ │ │ ├── message_loc: (1,19)-(1,22) = "baz" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ ├── then_keyword_loc: ∅ - │ │ └── statements: - │ │ @ StatementsNode (location: (1,24)-(1,27)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ CallNode (location: (1,24)-(1,27)) - │ │ ├── flags: newline, variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :bar - │ │ ├── message_loc: (1,24)-(1,27) = "bar" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── @ WhenNode (location: (1,29)-(1,38)) - │ ├── flags: ∅ - │ ├── keyword_loc: (1,29)-(1,33) = "when" - │ ├── conditions: (length: 1) - │ │ └── @ SplatNode (location: (1,34)-(1,38)) - │ │ ├── flags: ∅ - │ │ ├── operator_loc: (1,34)-(1,35) = "*" - │ │ └── expression: - │ │ @ CallNode (location: (1,35)-(1,38)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (1,35)-(1,38) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ ├── then_keyword_loc: ∅ - │ └── statements: ∅ - ├── else_clause: ∅ - ├── case_keyword_loc: (1,0)-(1,4) = "case" - └── end_keyword_loc: (1,40)-(1,43) = "end" diff --git a/test/prism/snapshots/whitequark/when_then.txt b/test/prism/snapshots/whitequark/when_then.txt deleted file mode 100644 index cb964cfb53e3a1..00000000000000 --- a/test/prism/snapshots/whitequark/when_then.txt +++ /dev/null @@ -1,49 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,34)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,34)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CaseNode (location: (1,0)-(1,34)) - ├── flags: newline - ├── predicate: - │ @ CallNode (location: (1,5)-(1,8)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (1,5)-(1,8) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── conditions: (length: 1) - │ └── @ WhenNode (location: (1,10)-(1,29)) - │ ├── flags: ∅ - │ ├── keyword_loc: (1,10)-(1,14) = "when" - │ ├── conditions: (length: 1) - │ │ └── @ StringNode (location: (1,15)-(1,20)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: (1,15)-(1,16) = "'" - │ │ ├── content_loc: (1,16)-(1,19) = "bar" - │ │ ├── closing_loc: (1,19)-(1,20) = "'" - │ │ └── unescaped: "bar" - │ ├── then_keyword_loc: (1,21)-(1,25) = "then" - │ └── statements: - │ @ StatementsNode (location: (1,26)-(1,29)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,26)-(1,29)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :bar - │ ├── message_loc: (1,26)-(1,29) = "bar" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── else_clause: ∅ - ├── case_keyword_loc: (1,0)-(1,4) = "case" - └── end_keyword_loc: (1,31)-(1,34) = "end" diff --git a/test/prism/snapshots/whitequark/while.txt b/test/prism/snapshots/whitequark/while.txt deleted file mode 100644 index 949a3952d379ca..00000000000000 --- a/test/prism/snapshots/whitequark/while.txt +++ /dev/null @@ -1,65 +0,0 @@ -@ ProgramNode (location: (1,0)-(3,19)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(3,19)) - ├── flags: ∅ - └── body: (length: 2) - ├── @ WhileNode (location: (1,0)-(1,21)) - │ ├── flags: newline - │ ├── keyword_loc: (1,0)-(1,5) = "while" - │ ├── closing_loc: (1,18)-(1,21) = "end" - │ ├── predicate: - │ │ @ CallNode (location: (1,6)-(1,9)) - │ │ ├── flags: variable_call, ignore_visibility - │ │ ├── receiver: ∅ - │ │ ├── call_operator_loc: ∅ - │ │ ├── name: :foo - │ │ ├── message_loc: (1,6)-(1,9) = "foo" - │ │ ├── opening_loc: ∅ - │ │ ├── arguments: ∅ - │ │ ├── closing_loc: ∅ - │ │ └── block: ∅ - │ └── statements: - │ @ StatementsNode (location: (1,13)-(1,17)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,13)-(1,17)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :meth - │ ├── message_loc: (1,13)-(1,17) = "meth" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── @ WhileNode (location: (3,0)-(3,19)) - ├── flags: newline - ├── keyword_loc: (3,0)-(3,5) = "while" - ├── closing_loc: (3,16)-(3,19) = "end" - ├── predicate: - │ @ CallNode (location: (3,6)-(3,9)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (3,6)-(3,9) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── statements: - @ StatementsNode (location: (3,11)-(3,15)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (3,11)-(3,15)) - ├── flags: newline, variable_call, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :meth - ├── message_loc: (3,11)-(3,15) = "meth" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/whitequark/while_mod.txt b/test/prism/snapshots/whitequark/while_mod.txt deleted file mode 100644 index 696163e4337c01..00000000000000 --- a/test/prism/snapshots/whitequark/while_mod.txt +++ /dev/null @@ -1,36 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,14)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,14)) - ├── flags: ∅ - └── body: (length: 1) - └── @ WhileNode (location: (1,0)-(1,14)) - ├── flags: newline - ├── keyword_loc: (1,5)-(1,10) = "while" - ├── closing_loc: ∅ - ├── predicate: - │ @ CallNode (location: (1,11)-(1,14)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (1,11)-(1,14) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── statements: - @ StatementsNode (location: (1,0)-(1,4)) - ├── flags: ∅ - └── body: (length: 1) - └── @ CallNode (location: (1,0)-(1,4)) - ├── flags: newline, variable_call, ignore_visibility - ├── receiver: ∅ - ├── call_operator_loc: ∅ - ├── name: :meth - ├── message_loc: (1,0)-(1,4) = "meth" - ├── opening_loc: ∅ - ├── arguments: ∅ - ├── closing_loc: ∅ - └── block: ∅ diff --git a/test/prism/snapshots/whitequark/while_post.txt b/test/prism/snapshots/whitequark/while_post.txt deleted file mode 100644 index 32cef381f14970..00000000000000 --- a/test/prism/snapshots/whitequark/while_post.txt +++ /dev/null @@ -1,47 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,24)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,24)) - ├── flags: ∅ - └── body: (length: 1) - └── @ WhileNode (location: (1,0)-(1,24)) - ├── flags: newline, begin_modifier - ├── keyword_loc: (1,15)-(1,20) = "while" - ├── closing_loc: ∅ - ├── predicate: - │ @ CallNode (location: (1,21)-(1,24)) - │ ├── flags: variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :foo - │ ├── message_loc: (1,21)-(1,24) = "foo" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - └── statements: - @ StatementsNode (location: (1,0)-(1,14)) - ├── flags: ∅ - └── body: (length: 1) - └── @ BeginNode (location: (1,0)-(1,14)) - ├── flags: newline - ├── begin_keyword_loc: (1,0)-(1,5) = "begin" - ├── statements: - │ @ StatementsNode (location: (1,6)-(1,10)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ CallNode (location: (1,6)-(1,10)) - │ ├── flags: newline, variable_call, ignore_visibility - │ ├── receiver: ∅ - │ ├── call_operator_loc: ∅ - │ ├── name: :meth - │ ├── message_loc: (1,6)-(1,10) = "meth" - │ ├── opening_loc: ∅ - │ ├── arguments: ∅ - │ ├── closing_loc: ∅ - │ └── block: ∅ - ├── rescue_clause: ∅ - ├── else_clause: ∅ - ├── ensure_clause: ∅ - └── end_keyword_loc: (1,11)-(1,14) = "end" diff --git a/test/prism/snapshots/whitequark/xstring_interp.txt b/test/prism/snapshots/whitequark/xstring_interp.txt deleted file mode 100644 index 7808b932500a3f..00000000000000 --- a/test/prism/snapshots/whitequark/xstring_interp.txt +++ /dev/null @@ -1,42 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,14)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,14)) - ├── flags: ∅ - └── body: (length: 1) - └── @ InterpolatedXStringNode (location: (1,0)-(1,14)) - ├── flags: newline - ├── opening_loc: (1,0)-(1,1) = "`" - ├── parts: (length: 3) - │ ├── @ StringNode (location: (1,1)-(1,4)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (1,1)-(1,4) = "foo" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: "foo" - │ ├── @ EmbeddedStatementsNode (location: (1,4)-(1,10)) - │ │ ├── flags: ∅ - │ │ ├── opening_loc: (1,4)-(1,6) = "\#{" - │ │ ├── statements: - │ │ │ @ StatementsNode (location: (1,6)-(1,9)) - │ │ │ ├── flags: ∅ - │ │ │ └── body: (length: 1) - │ │ │ └── @ CallNode (location: (1,6)-(1,9)) - │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ ├── receiver: ∅ - │ │ │ ├── call_operator_loc: ∅ - │ │ │ ├── name: :bar - │ │ │ ├── message_loc: (1,6)-(1,9) = "bar" - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── arguments: ∅ - │ │ │ ├── closing_loc: ∅ - │ │ │ └── block: ∅ - │ │ └── closing_loc: (1,9)-(1,10) = "}" - │ └── @ StringNode (location: (1,10)-(1,13)) - │ ├── flags: static_literal, frozen - │ ├── opening_loc: ∅ - │ ├── content_loc: (1,10)-(1,13) = "baz" - │ ├── closing_loc: ∅ - │ └── unescaped: "baz" - └── closing_loc: (1,13)-(1,14) = "`" diff --git a/test/prism/snapshots/whitequark/xstring_plain.txt b/test/prism/snapshots/whitequark/xstring_plain.txt deleted file mode 100644 index dae47ddcffbd36..00000000000000 --- a/test/prism/snapshots/whitequark/xstring_plain.txt +++ /dev/null @@ -1,13 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,8)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,8)) - ├── flags: ∅ - └── body: (length: 1) - └── @ XStringNode (location: (1,0)-(1,8)) - ├── flags: newline - ├── opening_loc: (1,0)-(1,1) = "`" - ├── content_loc: (1,1)-(1,7) = "foobar" - ├── closing_loc: (1,7)-(1,8) = "`" - └── unescaped: "foobar" diff --git a/test/prism/snapshots/whitequark/zsuper.txt b/test/prism/snapshots/whitequark/zsuper.txt deleted file mode 100644 index f64ecb359408f6..00000000000000 --- a/test/prism/snapshots/whitequark/zsuper.txt +++ /dev/null @@ -1,10 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,5)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,5)) - ├── flags: ∅ - └── body: (length: 1) - └── @ ForwardingSuperNode (location: (1,0)-(1,5)) - ├── flags: newline - └── block: ∅ diff --git a/test/prism/snapshots/xstring.txt b/test/prism/snapshots/xstring.txt deleted file mode 100644 index 837cd581a4dac5..00000000000000 --- a/test/prism/snapshots/xstring.txt +++ /dev/null @@ -1,72 +0,0 @@ -@ ProgramNode (location: (1,0)-(13,4)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(13,4)) - ├── flags: ∅ - └── body: (length: 6) - ├── @ XStringNode (location: (1,0)-(1,7)) - │ ├── flags: newline - │ ├── opening_loc: (1,0)-(1,3) = "%x[" - │ ├── content_loc: (1,3)-(1,6) = "foo" - │ ├── closing_loc: (1,6)-(1,7) = "]" - │ └── unescaped: "foo" - ├── @ InterpolatedXStringNode (location: (3,0)-(3,16)) - │ ├── flags: newline - │ ├── opening_loc: (3,0)-(3,1) = "`" - │ ├── parts: (length: 3) - │ │ ├── @ StringNode (location: (3,1)-(3,5)) - │ │ │ ├── flags: static_literal, frozen - │ │ │ ├── opening_loc: ∅ - │ │ │ ├── content_loc: (3,1)-(3,5) = "foo " - │ │ │ ├── closing_loc: ∅ - │ │ │ └── unescaped: "foo " - │ │ ├── @ EmbeddedStatementsNode (location: (3,5)-(3,11)) - │ │ │ ├── flags: ∅ - │ │ │ ├── opening_loc: (3,5)-(3,7) = "\#{" - │ │ │ ├── statements: - │ │ │ │ @ StatementsNode (location: (3,7)-(3,10)) - │ │ │ │ ├── flags: ∅ - │ │ │ │ └── body: (length: 1) - │ │ │ │ └── @ CallNode (location: (3,7)-(3,10)) - │ │ │ │ ├── flags: variable_call, ignore_visibility - │ │ │ │ ├── receiver: ∅ - │ │ │ │ ├── call_operator_loc: ∅ - │ │ │ │ ├── name: :bar - │ │ │ │ ├── message_loc: (3,7)-(3,10) = "bar" - │ │ │ │ ├── opening_loc: ∅ - │ │ │ │ ├── arguments: ∅ - │ │ │ │ ├── closing_loc: ∅ - │ │ │ │ └── block: ∅ - │ │ │ └── closing_loc: (3,10)-(3,11) = "}" - │ │ └── @ StringNode (location: (3,11)-(3,15)) - │ │ ├── flags: static_literal, frozen - │ │ ├── opening_loc: ∅ - │ │ ├── content_loc: (3,11)-(3,15) = " baz" - │ │ ├── closing_loc: ∅ - │ │ └── unescaped: " baz" - │ └── closing_loc: (3,15)-(3,16) = "`" - ├── @ XStringNode (location: (5,0)-(5,5)) - │ ├── flags: newline - │ ├── opening_loc: (5,0)-(5,1) = "`" - │ ├── content_loc: (5,1)-(5,4) = "foo" - │ ├── closing_loc: (5,4)-(5,5) = "`" - │ └── unescaped: "foo" - ├── @ XStringNode (location: (7,0)-(9,1)) - │ ├── flags: newline - │ ├── opening_loc: (7,0)-(7,3) = "%x{" - │ ├── content_loc: (7,3)-(9,0) = "\n foo\n" - │ ├── closing_loc: (9,0)-(9,1) = "}" - │ └── unescaped: "\n foo\n" - ├── @ XStringNode (location: (11,0)-(11,2)) - │ ├── flags: newline - │ ├── opening_loc: (11,0)-(11,1) = "`" - │ ├── content_loc: (11,1)-(11,1) = "" - │ ├── closing_loc: (11,1)-(11,2) = "`" - │ └── unescaped: "" - └── @ XStringNode (location: (13,0)-(13,4)) - ├── flags: newline - ├── opening_loc: (13,0)-(13,3) = "%x{" - ├── content_loc: (13,3)-(13,3) = "" - ├── closing_loc: (13,3)-(13,4) = "}" - └── unescaped: "" diff --git a/test/prism/snapshots/xstring_with_backslash.txt b/test/prism/snapshots/xstring_with_backslash.txt deleted file mode 100644 index ca58f5cd405234..00000000000000 --- a/test/prism/snapshots/xstring_with_backslash.txt +++ /dev/null @@ -1,13 +0,0 @@ -@ ProgramNode (location: (1,0)-(1,6)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(1,6)) - ├── flags: ∅ - └── body: (length: 1) - └── @ XStringNode (location: (1,0)-(1,6)) - ├── flags: newline - ├── opening_loc: (1,0)-(1,1) = "`" - ├── content_loc: (1,1)-(1,5) = "f\\oo" - ├── closing_loc: (1,5)-(1,6) = "`" - └── unescaped: "foo" diff --git a/test/prism/snapshots/yield.txt b/test/prism/snapshots/yield.txt deleted file mode 100644 index c62751b8e67834..00000000000000 --- a/test/prism/snapshots/yield.txt +++ /dev/null @@ -1,117 +0,0 @@ -@ ProgramNode (location: (1,0)-(7,28)) -├── flags: ∅ -├── locals: [] -└── statements: - @ StatementsNode (location: (1,0)-(7,28)) - ├── flags: ∅ - └── body: (length: 4) - ├── @ DefNode (location: (1,0)-(1,19)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (1,4)-(1,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (1,9)-(1,14)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ YieldNode (location: (1,9)-(1,14)) - │ │ ├── flags: newline - │ │ ├── keyword_loc: (1,9)-(1,14) = "yield" - │ │ ├── lparen_loc: ∅ - │ │ ├── arguments: ∅ - │ │ └── rparen_loc: ∅ - │ ├── locals: [] - │ ├── def_keyword_loc: (1,0)-(1,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (1,16)-(1,19) = "end" - ├── @ DefNode (location: (3,0)-(3,21)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (3,4)-(3,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (3,9)-(3,16)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ YieldNode (location: (3,9)-(3,16)) - │ │ ├── flags: newline - │ │ ├── keyword_loc: (3,9)-(3,14) = "yield" - │ │ ├── lparen_loc: (3,14)-(3,15) = "(" - │ │ ├── arguments: ∅ - │ │ └── rparen_loc: (3,15)-(3,16) = ")" - │ ├── locals: [] - │ ├── def_keyword_loc: (3,0)-(3,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (3,18)-(3,21) = "end" - ├── @ DefNode (location: (5,0)-(5,22)) - │ ├── flags: newline - │ ├── name: :foo - │ ├── name_loc: (5,4)-(5,7) = "foo" - │ ├── receiver: ∅ - │ ├── parameters: ∅ - │ ├── body: - │ │ @ StatementsNode (location: (5,9)-(5,17)) - │ │ ├── flags: ∅ - │ │ └── body: (length: 1) - │ │ └── @ YieldNode (location: (5,9)-(5,17)) - │ │ ├── flags: newline - │ │ ├── keyword_loc: (5,9)-(5,14) = "yield" - │ │ ├── lparen_loc: (5,14)-(5,15) = "(" - │ │ ├── arguments: - │ │ │ @ ArgumentsNode (location: (5,15)-(5,16)) - │ │ │ ├── flags: ∅ - │ │ │ └── arguments: (length: 1) - │ │ │ └── @ IntegerNode (location: (5,15)-(5,16)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ └── rparen_loc: (5,16)-(5,17) = ")" - │ ├── locals: [] - │ ├── def_keyword_loc: (5,0)-(5,3) = "def" - │ ├── operator_loc: ∅ - │ ├── lparen_loc: ∅ - │ ├── rparen_loc: ∅ - │ ├── equal_loc: ∅ - │ └── end_keyword_loc: (5,19)-(5,22) = "end" - └── @ DefNode (location: (7,0)-(7,28)) - ├── flags: newline - ├── name: :foo - ├── name_loc: (7,4)-(7,7) = "foo" - ├── receiver: ∅ - ├── parameters: ∅ - ├── body: - │ @ StatementsNode (location: (7,9)-(7,23)) - │ ├── flags: ∅ - │ └── body: (length: 1) - │ └── @ YieldNode (location: (7,9)-(7,23)) - │ ├── flags: newline - │ ├── keyword_loc: (7,9)-(7,14) = "yield" - │ ├── lparen_loc: (7,14)-(7,15) = "(" - │ ├── arguments: - │ │ @ ArgumentsNode (location: (7,15)-(7,22)) - │ │ ├── flags: ∅ - │ │ └── arguments: (length: 3) - │ │ ├── @ IntegerNode (location: (7,15)-(7,16)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 1 - │ │ ├── @ IntegerNode (location: (7,18)-(7,19)) - │ │ │ ├── flags: static_literal, decimal - │ │ │ └── value: 2 - │ │ └── @ IntegerNode (location: (7,21)-(7,22)) - │ │ ├── flags: static_literal, decimal - │ │ └── value: 3 - │ └── rparen_loc: (7,22)-(7,23) = ")" - ├── locals: [] - ├── def_keyword_loc: (7,0)-(7,3) = "def" - ├── operator_loc: ∅ - ├── lparen_loc: ∅ - ├── rparen_loc: ∅ - ├── equal_loc: ∅ - └── end_keyword_loc: (7,25)-(7,28) = "end" diff --git a/test/prism/snapshots_test.rb b/test/prism/snapshots_test.rb deleted file mode 100644 index 0744eafad31fed..00000000000000 --- a/test/prism/snapshots_test.rb +++ /dev/null @@ -1,73 +0,0 @@ -# frozen_string_literal: true - -require_relative "test_helper" - -module Prism - class SnapshotsTest < TestCase - # When we pretty-print the trees to compare against the snapshots, we want - # to be certain that we print with the same external encoding. This is - # because methods like Symbol#inspect take into account external encoding - # and it could change how the snapshot is generated. On machines with - # certain settings (like LANG=C or -Eascii-8bit) this could have been - # changed. So here we're going to force it to be UTF-8 to keep the snapshots - # consistent. - def setup - @previous_default_external = Encoding.default_external - ignore_warnings { Encoding.default_external = Encoding::UTF_8 } - end - - def teardown - ignore_warnings { Encoding.default_external = @previous_default_external } - end - - except = [] - - # These fail on TruffleRuby due to a difference in Symbol#inspect: - # :测试 vs :"测试" - if RUBY_ENGINE == "truffleruby" - except.push( - "emoji_method_calls.txt", - "seattlerb/bug202.txt", - "seattlerb/magic_encoding_comment.txt" - ) - end - - Fixture.each(except: except) do |fixture| - define_method(fixture.test_name) { assert_snapshot(fixture) } - end - - private - - def assert_snapshot(fixture) - source = fixture.read - - result = Prism.parse(source, filepath: fixture.path) - assert result.success? - - printed = PP.pp(result.value, +"", 79) - snapshot = fixture.snapshot_path - - if File.exist?(snapshot) - saved = File.read(snapshot) - - # If the snapshot file exists, but the printed value does not match the - # snapshot, then update the snapshot file. - if printed != saved - File.write(snapshot, printed) - warn("Updated snapshot at #{snapshot}.") - end - - # If the snapshot file exists, then assert that the printed value - # matches the snapshot. - assert_equal(saved, printed) - else - # If the snapshot file does not yet exist, then write it out now. - directory = File.dirname(snapshot) - FileUtils.mkdir_p(directory) unless File.directory?(directory) - - File.write(snapshot, printed) - warn("Created snapshot at #{snapshot}.") - end - end - end -end diff --git a/test/prism/test_helper.rb b/test/prism/test_helper.rb index d6d0abf5482702..b8485002831356 100644 --- a/test/prism/test_helper.rb +++ b/test/prism/test_helper.rb @@ -209,7 +209,7 @@ def self.each_encoding private - if RUBY_ENGINE == "ruby" + if RUBY_ENGINE == "ruby" && RubyVM::InstructionSequence.compile("").to_a[4][:parser] != :prism # Check that the given source is valid syntax by compiling it with RubyVM. def check_syntax(source) ignore_warnings { RubyVM::InstructionSequence.compile(source) } diff --git a/test/prism/version_test.rb b/test/prism/version_test.rb index 29ee6b224cc735..149cfd62b49a8b 100644 --- a/test/prism/version_test.rb +++ b/test/prism/version_test.rb @@ -4,7 +4,7 @@ module Prism class VersionTest < TestCase - def test_version_is_set + def test_prism_version_is_set refute_nil VERSION end end diff --git a/test/psych/test_scalar_scanner.rb b/test/psych/test_scalar_scanner.rb index 02b923afe2192f..8907d1255abb1e 100644 --- a/test/psych/test_scalar_scanner.rb +++ b/test/psych/test_scalar_scanner.rb @@ -126,6 +126,19 @@ def test_scan_strings_ending_with_underscores assert_equal '100_', ss.tokenize('100_') end + def test_scan_strings_with_legacy_int_delimiters + assert_equal '0x_,_', ss.tokenize('0x_,_') + assert_equal '+0__,,', ss.tokenize('+0__,,') + assert_equal '-0b,_,', ss.tokenize('-0b,_,') + end + + def test_scan_strings_with_strict_int_delimiters + scanner = Psych::ScalarScanner.new ClassLoader.new, strict_integer: true + assert_equal '0x___', scanner.tokenize('0x___') + assert_equal '+0____', scanner.tokenize('+0____') + assert_equal '-0b___', scanner.tokenize('-0b___') + end + def test_scan_int_commas_and_underscores # NB: This test is to ensure backward compatibility with prior Psych versions, # not to test against any actual YAML specification. diff --git a/test/rdoc/support/text_formatter_test_case.rb b/test/rdoc/support/text_formatter_test_case.rb index e359028a292259..9b3d7ed626c028 100644 --- a/test/rdoc/support/text_formatter_test_case.rb +++ b/test/rdoc/support/text_formatter_test_case.rb @@ -99,6 +99,23 @@ def test_accept_paragraph_wrap accept_paragraph_wrap end + ## + # Test case that calls @to.accept_table + + def test_accept_table_align + header = ['AA', 'BB', 'CCCCC'] + body = [ + ['', 'bbb', 'c'], + ['aaaa', 'b', ''], + ['a', '', 'cc'] + ] + aligns = [nil, :left, :right] + @to.start_accepting + @to.accept_table header, body, aligns + + accept_table_align + end + ## # Test case that calls @to.attributes with an escaped # cross-reference. If this test doesn't pass something may be very diff --git a/test/rdoc/test_rdoc_markup_to_ansi.rb b/test/rdoc/test_rdoc_markup_to_ansi.rb index 81372c64d284df..893040cb44dc81 100644 --- a/test/rdoc/test_rdoc_markup_to_ansi.rb +++ b/test/rdoc/test_rdoc_markup_to_ansi.rb @@ -348,6 +348,17 @@ def list_verbatim assert_equal expected, @to.end_accepting end + def accept_table_align + expected = "\e[0m" + <<-EXPECTED + AA |BB |CCCCC +----|---|----- + |bbb| c +aaaa|b | + a | | cc + EXPECTED + assert_equal expected, @to.end_accepting + end + # functional test def test_convert_list_note note_list = <<-NOTE_LIST diff --git a/test/rdoc/test_rdoc_markup_to_bs.rb b/test/rdoc/test_rdoc_markup_to_bs.rb index 7ebde481e63ba9..93baa6b59fd6e5 100644 --- a/test/rdoc/test_rdoc_markup_to_bs.rb +++ b/test/rdoc/test_rdoc_markup_to_bs.rb @@ -349,4 +349,15 @@ def list_verbatim assert_equal expected, @to.end_accepting end + def accept_table_align + expected = <<-EXPECTED + AA |BB |CCCCC +----|---|----- + |bbb| c +aaaa|b | + a | | cc + EXPECTED + assert_equal expected, @to.end_accepting + end + end diff --git a/test/rdoc/test_rdoc_markup_to_markdown.rb b/test/rdoc/test_rdoc_markup_to_markdown.rb index 92ed37bc50c602..1b24eb8ef064b0 100644 --- a/test/rdoc/test_rdoc_markup_to_markdown.rb +++ b/test/rdoc/test_rdoc_markup_to_markdown.rb @@ -346,6 +346,17 @@ def list_verbatim assert_equal expected, @to.end_accepting end + def accept_table_align + expected = <<-EXPECTED + AA |BB |CCCCC +----|---|----- + |bbb| c +aaaa|b | + a | | cc + EXPECTED + assert_equal expected, @to.end_accepting + end + def test_convert_RDOCLINK result = @to.convert 'rdoc-garbage:C' diff --git a/test/rdoc/test_rdoc_markup_to_rdoc.rb b/test/rdoc/test_rdoc_markup_to_rdoc.rb index 50f4b6dc8b1e8e..c6f1aeae10f3f4 100644 --- a/test/rdoc/test_rdoc_markup_to_rdoc.rb +++ b/test/rdoc/test_rdoc_markup_to_rdoc.rb @@ -346,6 +346,17 @@ def list_verbatim assert_equal expected, @to.end_accepting end + def accept_table_align + expected = <<-EXPECTED + AA |BB |CCCCC +----|---|----- + |bbb| c +aaaa|b | + a | | cc + EXPECTED + assert_equal expected, @to.end_accepting + end + # functional test def test_convert_list_note note_list = <<-NOTE_LIST diff --git a/test/rdoc/test_rdoc_ri_driver.rb b/test/rdoc/test_rdoc_ri_driver.rb index 39e6e677596dbd..3263e6173ef001 100644 --- a/test/rdoc/test_rdoc_ri_driver.rb +++ b/test/rdoc/test_rdoc_ri_driver.rb @@ -54,10 +54,10 @@ def test_self_dump RDoc::RI::Driver.dump @store1.cache_path end - assert_match %r%:class_methods%, out - assert_match %r%:modules%, out - assert_match %r%:instance_methods%, out - assert_match %r%:ancestors%, out + assert_match %r%:class_methods|class_methods:%, out + assert_match %r%:modules|modules:%, out + assert_match %r%:instance_methods|instance_methods:%, out + assert_match %r%:ancestors|ancestors:%, out end def test_add_also_in_empty diff --git a/test/reline/helper.rb b/test/reline/helper.rb index 9a346a17a1c91f..3d7dc7d812cde6 100644 --- a/test/reline/helper.rb +++ b/test/reline/helper.rb @@ -96,7 +96,7 @@ class Reline::TestCase < Test::Unit::TestCase end }.join rescue Encoding::UndefinedConversionError, Encoding::InvalidByteSequenceError - input.unicode_normalize!(:nfc) + input = input.unicode_normalize(:nfc) if normalized options[:undef] = :replace options[:replace] = '?' diff --git a/test/reline/test_ansi_without_terminfo.rb b/test/reline/test_ansi_without_terminfo.rb index 2db14cf0a05745..62b1e7dec029c6 100644 --- a/test/reline/test_ansi_without_terminfo.rb +++ b/test/reline/test_ansi_without_terminfo.rb @@ -32,25 +32,21 @@ def test_delete def test_up_arrow assert_key_binding("\e[A", :ed_prev_history) # Console (80x25) - assert_key_binding("\eGA", :ed_prev_history) # KDE assert_key_binding("\eOA", :ed_prev_history) end def test_down_arrow assert_key_binding("\e[B", :ed_next_history) # Console (80x25) - assert_key_binding("\eGB", :ed_next_history) # KDE assert_key_binding("\eOB", :ed_next_history) end def test_right_arrow assert_key_binding("\e[C", :ed_next_char) # Console (80x25) - assert_key_binding("\eGC", :ed_next_char) # KDE assert_key_binding("\eOC", :ed_next_char) end def test_left_arrow assert_key_binding("\e[D", :ed_prev_char) # Console (80x25) - assert_key_binding("\eGD", :ed_prev_char) # KDE assert_key_binding("\eOD", :ed_prev_char) end diff --git a/test/reline/test_config.rb b/test/reline/test_config.rb index c14069d11704b3..878477fe5e6075 100644 --- a/test/reline/test_config.rb +++ b/test/reline/test_config.rb @@ -13,6 +13,7 @@ def setup Dir.chdir(@tmpdir) Reline.test_mode @config = Reline::Config.new + @inputrc_backup = ENV['INPUTRC'] end def teardown @@ -20,10 +21,15 @@ def teardown FileUtils.rm_rf(@tmpdir) Reline.test_reset @config.reset + ENV['INPUTRC'] = @inputrc_backup + end + + def get_config_variable(variable) + @config.instance_variable_get(variable) end def additional_key_bindings(keymap_label) - @config.instance_variable_get(:@additional_key_bindings)[keymap_label].instance_variable_get(:@key_bindings) + get_config_variable(:@additional_key_bindings)[keymap_label].instance_variable_get(:@key_bindings) end def registered_key_bindings(keys) @@ -36,7 +42,7 @@ def test_read_lines set show-mode-in-prompt on LINES - assert_equal true, @config.instance_variable_get(:@show_mode_in_prompt) + assert_equal true, get_config_variable(:@show_mode_in_prompt) end def test_read_lines_with_variable @@ -44,7 +50,7 @@ def test_read_lines_with_variable set disable-completion on LINES - assert_equal true, @config.instance_variable_get(:@disable_completion) + assert_equal true, get_config_variable(:@disable_completion) end def test_string_value @@ -53,7 +59,7 @@ def test_string_value set emacs-mode-string Emacs LINES - assert_equal 'Emacs', @config.instance_variable_get(:@emacs_mode_string) + assert_equal 'Emacs', get_config_variable(:@emacs_mode_string) end def test_string_value_with_brackets @@ -62,7 +68,7 @@ def test_string_value_with_brackets set emacs-mode-string [Emacs] LINES - assert_equal '[Emacs]', @config.instance_variable_get(:@emacs_mode_string) + assert_equal '[Emacs]', get_config_variable(:@emacs_mode_string) end def test_string_value_with_brackets_and_quotes @@ -71,7 +77,7 @@ def test_string_value_with_brackets_and_quotes set emacs-mode-string "[Emacs]" LINES - assert_equal '[Emacs]', @config.instance_variable_get(:@emacs_mode_string) + assert_equal '[Emacs]', get_config_variable(:@emacs_mode_string) end def test_string_value_with_parens @@ -80,7 +86,7 @@ def test_string_value_with_parens set emacs-mode-string (Emacs) LINES - assert_equal '(Emacs)', @config.instance_variable_get(:@emacs_mode_string) + assert_equal '(Emacs)', get_config_variable(:@emacs_mode_string) end def test_string_value_with_parens_and_quotes @@ -89,7 +95,7 @@ def test_string_value_with_parens_and_quotes set emacs-mode-string "(Emacs)" LINES - assert_equal '(Emacs)', @config.instance_variable_get(:@emacs_mode_string) + assert_equal '(Emacs)', get_config_variable(:@emacs_mode_string) end def test_encoding_is_ascii @@ -103,7 +109,7 @@ def test_encoding_is_ascii def test_encoding_is_not_ascii @config = Reline::Config.new - assert_equal nil, @config.convert_meta + assert_equal false, @config.convert_meta end def test_invalid_keystroke @@ -120,41 +126,46 @@ def test_invalid_keystroke end def test_bind_key - assert_equal ['input'.bytes, 'abcde'.bytes], @config.bind_key('"input"', '"abcde"') + assert_equal ['input'.bytes, 'abcde'.bytes], @config.parse_key_binding('"input"', '"abcde"') end def test_bind_key_with_macro - assert_equal ['input'.bytes, :abcde], @config.bind_key('"input"', 'abcde') + assert_equal ['input'.bytes, :abcde], @config.parse_key_binding('"input"', 'abcde') end def test_bind_key_with_escaped_chars - assert_equal ['input'.bytes, "\e \\ \" ' \a \b \d \f \n \r \t \v".bytes], @config.bind_key('"input"', '"\\e \\\\ \\" \\\' \\a \\b \\d \\f \\n \\r \\t \\v"') + assert_equal ['input'.bytes, "\e \\ \" ' \a \b \d \f \n \r \t \v".bytes], @config.parse_key_binding('"input"', '"\\e \\\\ \\" \\\' \\a \\b \\d \\f \\n \\r \\t \\v"') end def test_bind_key_with_ctrl_chars - assert_equal ['input'.bytes, "\C-h\C-h".bytes], @config.bind_key('"input"', '"\C-h\C-H"') - assert_equal ['input'.bytes, "\C-h\C-h".bytes], @config.bind_key('"input"', '"\Control-h\Control-H"') + assert_equal ['input'.bytes, "\C-h\C-h\C-_".bytes], @config.parse_key_binding('"input"', '"\C-h\C-H\C-_"') + assert_equal ['input'.bytes, "\C-h\C-h\C-_".bytes], @config.parse_key_binding('"input"', '"\Control-h\Control-H\Control-_"') end def test_bind_key_with_meta_chars - assert_equal ['input'.bytes, "\M-h\M-H".bytes], @config.bind_key('"input"', '"\M-h\M-H"') - assert_equal ['input'.bytes, "\M-h\M-H".bytes], @config.bind_key('"input"', '"\Meta-h\Meta-H"') + assert_equal ['input'.bytes, "\eh\eH\e_".bytes], @config.parse_key_binding('"input"', '"\M-h\M-H\M-_"') + assert_equal ['input'.bytes, "\eh\eH\e_".bytes], @config.parse_key_binding('"input"', '"\Meta-h\Meta-H\M-_"') + end + + def test_bind_key_with_ctrl_meta_chars + assert_equal ['input'.bytes, "\e\C-h\e\C-h\e\C-_".bytes], @config.parse_key_binding('"input"', '"\M-\C-h\C-\M-H\M-\C-_"') + assert_equal ['input'.bytes, "\e\C-h\e\C-_".bytes], @config.parse_key_binding('"input"', '"\Meta-\Control-h\Control-\Meta-_"') end def test_bind_key_with_octal_number input = %w{i n p u t}.map(&:ord) - assert_equal [input, "\1".bytes], @config.bind_key('"input"', '"\1"') - assert_equal [input, "\12".bytes], @config.bind_key('"input"', '"\12"') - assert_equal [input, "\123".bytes], @config.bind_key('"input"', '"\123"') - assert_equal [input, "\123".bytes + '4'.bytes], @config.bind_key('"input"', '"\1234"') + assert_equal [input, "\1".bytes], @config.parse_key_binding('"input"', '"\1"') + assert_equal [input, "\12".bytes], @config.parse_key_binding('"input"', '"\12"') + assert_equal [input, "\123".bytes], @config.parse_key_binding('"input"', '"\123"') + assert_equal [input, "\123".bytes + '4'.bytes], @config.parse_key_binding('"input"', '"\1234"') end def test_bind_key_with_hexadecimal_number input = %w{i n p u t}.map(&:ord) - assert_equal [input, "\x4".bytes], @config.bind_key('"input"', '"\x4"') - assert_equal [input, "\x45".bytes], @config.bind_key('"input"', '"\x45"') - assert_equal [input, "\x45".bytes + '6'.bytes], @config.bind_key('"input"', '"\x456"') + assert_equal [input, "\x4".bytes], @config.parse_key_binding('"input"', '"\x4"') + assert_equal [input, "\x45".bytes], @config.parse_key_binding('"input"', '"\x45"') + assert_equal [input, "\x45".bytes + '6'.bytes], @config.parse_key_binding('"input"', '"\x456"') end def test_include @@ -167,7 +178,7 @@ def test_include $include included_partial LINES - assert_equal true, @config.instance_variable_get(:@show_mode_in_prompt) + assert_equal true, get_config_variable(:@show_mode_in_prompt) end def test_include_expand_path @@ -182,7 +193,7 @@ def test_include_expand_path $include ~/included_partial LINES - assert_equal true, @config.instance_variable_get(:@show_mode_in_prompt) + assert_equal true, get_config_variable(:@show_mode_in_prompt) ensure ENV['HOME'] = home_backup end @@ -196,7 +207,7 @@ def test_if $endif LINES - assert_equal '(cmd)', @config.instance_variable_get(:@vi_cmd_mode_string) + assert_equal '(cmd)', get_config_variable(:@vi_cmd_mode_string) end def test_if_with_false @@ -208,7 +219,7 @@ def test_if_with_false $endif LINES - assert_equal '[cmd]', @config.instance_variable_get(:@vi_cmd_mode_string) + assert_equal '[cmd]', get_config_variable(:@vi_cmd_mode_string) end def test_if_with_indent @@ -222,7 +233,7 @@ def test_if_with_indent $endif LINES - assert_equal '(cmd)', @config.instance_variable_get(:@vi_cmd_mode_string) + assert_equal '(cmd)', get_config_variable(:@vi_cmd_mode_string) end end @@ -378,6 +389,20 @@ def test_additional_key_bindings assert_equal expected, registered_key_bindings(expected.keys) end + def test_unquoted_additional_key_bindings + @config.read_lines(<<~'LINES'.lines) + Meta-a: "Ma" + Control-b: "Cb" + Meta-Control-c: "MCc" + Control-Meta-d: "CMd" + M-C-e: "MCe" + C-M-f: "CMf" + LINES + + expected = { "\ea".bytes => 'Ma'.bytes, "\C-b".bytes => 'Cb'.bytes, "\e\C-c".bytes => 'MCc'.bytes, "\e\C-d".bytes => 'CMd'.bytes, "\e\C-e".bytes => 'MCe'.bytes, "\e\C-f".bytes => 'CMf'.bytes } + assert_equal expected, registered_key_bindings(expected.keys) + end + def test_additional_key_bindings_with_nesting_and_comment_out @config.read_lines(<<~'LINES'.lines) #"ab": "AB" @@ -444,7 +469,7 @@ def test_history_size set history-size 5000 LINES - assert_equal 5000, @config.instance_variable_get(:@history_size) + assert_equal 5000, get_config_variable(:@history_size) history = Reline::History.new(@config) history << "a\n" assert_equal 1, history.size @@ -475,7 +500,7 @@ def test_inputrc_raw_value set vi-ins-mode-string aaa aaa set vi-cmd-mode-string bbb ccc # comment LINES - assert_equal :vi_insert, @config.instance_variable_get(:@editing_mode_label) + assert_equal :vi_insert, get_config_variable(:@editing_mode_label) assert_equal 'aaa aaa', @config.vi_ins_mode_string assert_equal 'bbb ccc # comment', @config.vi_cmd_mode_string end @@ -562,4 +587,21 @@ def test_relative_xdg_config_home ENV['XDG_CONFIG_HOME'] = xdg_config_home_backup ENV['HOME'] = home_backup end + + def test_reload + inputrc = "#{@tmpdir}/inputrc" + ENV['INPUTRC'] = inputrc + + File.write(inputrc, "set emacs-mode-string !") + @config.read + assert_equal '!', @config.emacs_mode_string + + File.write(inputrc, "set emacs-mode-string ?") + @config.reload + assert_equal '?', @config.emacs_mode_string + + File.write(inputrc, "") + @config.reload + assert_equal '@', @config.emacs_mode_string + end end diff --git a/test/reline/test_history.rb b/test/reline/test_history.rb index ddf8fb14726b3b..ea902b065394ce 100644 --- a/test/reline/test_history.rb +++ b/test/reline/test_history.rb @@ -266,6 +266,15 @@ def test_history_size_negative_unlimited assert_equal 5, history.size end + def test_history_encoding_conversion + history = history_new + text1 = String.new("a\u{65535}b\xFFc", encoding: Encoding::UTF_8) + text2 = String.new("d\xFFe", encoding: Encoding::Shift_JIS) + history.push(text1.dup, text2.dup) + expected = [text1, text2].map { |s| s.encode(Reline.encoding_system_needs, invalid: :replace, undef: :replace) } + assert_equal(expected, history.to_a) + end + private def history_new(history_size: 10) diff --git a/test/reline/test_key_actor_emacs.rb b/test/reline/test_key_actor_emacs.rb index 4dddf9c8907ded..dc12c803f57787 100644 --- a/test/reline/test_key_actor_emacs.rb +++ b/test/reline/test_key_actor_emacs.rb @@ -1328,6 +1328,29 @@ def test_incremental_search_history_cancel_by_symbol_key assert_line_around_cursor('abd', 'c') end + def test_incremental_search_history_saves_and_restores_last_input + Reline::HISTORY.concat(['abc', '123']) + input_keys("abcd") + # \C-j: terminate incremental search + input_keys("\C-r12\C-j") + assert_line_around_cursor('', '123') + input_key_by_symbol(:ed_next_history) + assert_line_around_cursor('abcd', '') + # Most non-printable keys also terminates incremental search + input_keys("\C-r12\C-i") + assert_line_around_cursor('', '123') + input_key_by_symbol(:ed_next_history) + assert_line_around_cursor('abcd', '') + # \C-g: cancel incremental search and restore input, cursor position and history index + input_key_by_symbol(:ed_prev_history) + input_keys("\C-b\C-b") + assert_line_around_cursor('1', '23') + input_keys("\C-rab\C-g") + assert_line_around_cursor('1', '23') + input_key_by_symbol(:ed_next_history) + assert_line_around_cursor('abcd', '') + end + # Unicode emoji test def test_ed_insert_for_include_zwj_emoji omit "This test is for UTF-8 but the locale is #{Reline.core.encoding}" if Reline.core.encoding != Encoding::UTF_8 diff --git a/test/reline/test_reline.rb b/test/reline/test_reline.rb index 515805467d7e00..0a4f38986b0173 100644 --- a/test/reline/test_reline.rb +++ b/test/reline/test_reline.rb @@ -1,6 +1,10 @@ require_relative 'helper' require 'reline' require 'stringio' +begin + require "pty" +rescue LoadError # some platforms don't support PTY +end class Reline::Test < Reline::TestCase class DummyCallbackObject @@ -432,6 +436,45 @@ def win? /mswin|mingw/.match?(RUBY_PLATFORM) end + def test_tty_amibuous_width + omit unless defined?(PTY) + ruby_file = Tempfile.create('rubyfile') + ruby_file.write(<<~RUBY) + require 'reline' + Thread.new { sleep 2; puts 'timeout'; exit } + p [Reline.ambiguous_width, gets.chomp] + RUBY + ruby_file.close + lib = File.expand_path('../../lib', __dir__) + cmd = [{ 'TERM' => 'xterm' }, 'ruby', '-I', lib, ruby_file.to_path] + + # Calculate ambiguous width from cursor position + [1, 2].each do |ambiguous_width| + PTY.spawn(*cmd) do |r, w, pid| + loop { break if r.readpartial(1024).include?("\e[6n") } + w.puts "hello\e[10;#{ambiguous_width + 1}Rworld" + assert_include(r.gets, [ambiguous_width, 'helloworld'].inspect) + ensure + r.close + w.close + Process.waitpid pid + end + end + + # Ambiguous width = 1 when cursor pos timed out + PTY.spawn(*cmd) do |r, w, pid| + loop { break if r.readpartial(1024).include?("\e[6n") } + w.puts "hello\e[10;2Sworld" + assert_include(r.gets, [1, "hello\e[10;2Sworld"].inspect) + ensure + r.close + w.close + Process.waitpid pid + end + ensure + File.delete(ruby_file.path) if ruby_file + end + def get_reline_encoding if encoding = Reline.core.encoding encoding diff --git a/test/reline/test_unicode.rb b/test/reline/test_unicode.rb index deba4d4681173c..6aea8df9bb71c3 100644 --- a/test/reline/test_unicode.rb +++ b/test/reline/test_unicode.rb @@ -15,7 +15,7 @@ def test_get_mbchar_width end def test_ambiguous_width - assert_equal 2, Reline::Unicode.calculate_width('√', true) + assert_equal 1, Reline::Unicode.calculate_width('√', true) end def test_csi_regexp @@ -89,4 +89,32 @@ def test_take_mbchar_range assert_equal ["\e[31mc\1ABC\2d\e[0mef", 2, 4], Reline::Unicode.take_mbchar_range("\e[31mabc\1ABC\2d\e[0mefghi", 2, 4) assert_equal ["\e[41m \e[42mã„\e[43m ", 1, 4], Reline::Unicode.take_mbchar_range("\e[41mã‚\e[42mã„\e[43mã†", 1, 4, padding: true) end + + def test_encoding_conversion + texts = [ + String.new("invalid\xFFutf8", encoding: 'utf-8'), + String.new("invalid\xFFsjis", encoding: 'sjis'), + "utf8#{33111.chr('sjis')}convertible", + "utf8#{33222.chr('sjis')}inconvertible", + "sjis->utf8->sjis#{60777.chr('sjis')}irreversible" + ] + utf8_texts = [ + 'invalid�utf8', + 'invalid�sjis', + 'utf8ä»convertible', + 'utf8�inconvertible', + 'sjis->utf8->sjis劦irreversible' + ] + sjis_texts = [ + 'invalid?utf8', + 'invalid?sjis', + "utf8#{33111.chr('sjis')}convertible", + 'utf8?inconvertible', + "sjis->utf8->sjis#{60777.chr('sjis')}irreversible" + ] + assert_equal(utf8_texts, texts.map { |s| Reline::Unicode.safe_encode(s, 'utf-8') }) + assert_equal(utf8_texts, texts.map { |s| Reline::Unicode.safe_encode(s, Encoding::UTF_8) }) + assert_equal(sjis_texts, texts.map { |s| Reline::Unicode.safe_encode(s, 'sjis') }) + assert_equal(sjis_texts, texts.map { |s| Reline::Unicode.safe_encode(s, Encoding::Windows_31J) }) + end end diff --git a/test/reline/windows/test_key_event_record.rb b/test/reline/windows/test_key_event_record.rb index a034d20fe44170..25c860606ac024 100644 --- a/test/reline/windows/test_key_event_record.rb +++ b/test/reline/windows/test_key_event_record.rb @@ -10,31 +10,31 @@ def setup end def test_matches__with_no_arguments_raises_error - assert_raise(ArgumentError) { @key.matches? } + assert_raise(ArgumentError) { @key.match? } end def test_matches_char_code - assert @key.matches?(char_code: 0x1) + assert @key.match?(char_code: 0x1) end def test_matches_virtual_key_code - assert @key.matches?(virtual_key_code: 0x41) + assert @key.match?(virtual_key_code: 0x41) end def test_matches_control_keys - assert @key.matches?(control_keys: :CTRL) + assert @key.match?(control_keys: :CTRL) end def test_doesnt_match_alt - refute @key.matches?(control_keys: :ALT) + refute @key.match?(control_keys: :ALT) end def test_doesnt_match_empty_control_key - refute @key.matches?(control_keys: []) + refute @key.match?(control_keys: []) end def test_matches_control_keys_and_virtual_key_code - assert @key.matches?(control_keys: :CTRL, virtual_key_code: 0x41) + assert @key.match?(control_keys: :CTRL, virtual_key_code: 0x41) end end diff --git a/test/reline/yamatanooroti/test_rendering.rb b/test/reline/yamatanooroti/test_rendering.rb index 883fcf53fb4ec9..414bca5b7cdde5 100644 --- a/test/reline/yamatanooroti/test_rendering.rb +++ b/test/reline/yamatanooroti/test_rendering.rb @@ -56,102 +56,98 @@ def test_history_back start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') write(":a\n") write("\C-p") - close assert_screen(<<~EOC) Multiline REPL. prompt> :a => :a prompt> :a EOC + close end def test_backspace start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') write(":abc\C-h\n") - close assert_screen(<<~EOC) Multiline REPL. prompt> :ab => :ab prompt> EOC + close end def test_autowrap start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') write('01234567890123456789012') - close assert_screen(<<~EOC) Multiline REPL. prompt> 0123456789012345678901 2 EOC + close end def test_fullwidth start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') write(":ã‚\n") - close assert_screen(<<~EOC) Multiline REPL. prompt> :ã‚ => :ã‚ prompt> EOC + close end def test_two_fullwidth start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') write(":ã‚ã„\n") - close assert_screen(<<~EOC) Multiline REPL. prompt> :ã‚ã„ => :ã‚ã„ prompt> EOC + close end def test_finish_autowrapped_line start_terminal(10, 40, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') write("[{'user'=>{'email'=>'a@a', 'id'=>'ABC'}, 'version'=>4, 'status'=>'succeeded'}]\n") - close + expected = [{'user'=>{'email'=>'a@a', 'id'=>'ABC'}, 'version'=>4, 'status'=>'succeeded'}].inspect assert_screen(<<~EOC) Multiline REPL. prompt> [{'user'=>{'email'=>'a@a', 'id'= >'ABC'}, 'version'=>4, 'status'=>'succee ded'}] - => [{"user"=>{"email"=>"a@a", "id"=>"ABC - "}, "version"=>4, "status"=>"succeeded"} - ] + #{fold_multiline("=> " + expected, 40)} prompt> EOC + close end def test_finish_autowrapped_line_in_the_middle_of_lines start_terminal(20, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') write("[{'user'=>{'email'=>'abcdef@abcdef', 'id'=>'ABC'}, 'version'=>4, 'status'=>'succeeded'}]#{"\C-b"*7}") write("\n") - close + expected = [{'user'=>{'email'=>'abcdef@abcdef', 'id'=>'ABC'}, 'version'=>4, 'status'=>'succeeded'}].inspect assert_screen(<<~EOC) Multiline REPL. prompt> [{'user'=>{'email'=>'a bcdef@abcdef', 'id'=>'ABC'}, ' version'=>4, 'status'=>'succee ded'}] - => [{"user"=>{"email"=>"abcdef - @abcdef", "id"=>"ABC"}, "versi - on"=>4, "status"=>"succeeded"} - ] + #{fold_multiline("=> " + expected, 30)} prompt> EOC + close end def test_finish_autowrapped_line_in_the_middle_of_multilines omit if RUBY_VERSION < '2.7' start_terminal(30, 16, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') write("<<~EOM\n ABCDEFG\nEOM\n") - close assert_screen(<<~'EOC') Multiline REPL. prompt> <<~EOM @@ -161,6 +157,7 @@ def test_finish_autowrapped_line_in_the_middle_of_multilines => "ABCDEFG\n" prompt> EOC + close end def test_prompt @@ -169,13 +166,13 @@ def test_prompt LINES start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') write("abc\n") - close assert_screen(<<~EOC) Multiline REPL. prompt> 123 => 123 prompt> EOC + close end def test_mode_string_emacs @@ -183,11 +180,11 @@ def test_mode_string_emacs set show-mode-in-prompt on LINES start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') - close assert_screen(<<~EOC) Multiline REPL. @prompt> EOC + close end def test_mode_string_vi @@ -199,7 +196,6 @@ def test_mode_string_vi write(":a\n\C-[k") write("i\n:a") write("\C-[h") - close assert_screen(<<~EOC) (ins)prompt> :a => :a @@ -207,6 +203,7 @@ def test_mode_string_vi => :a (cmd)prompt> :a EOC + close end def test_original_mode_string_emacs @@ -215,11 +212,11 @@ def test_original_mode_string_emacs set emacs-mode-string [emacs] LINES start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') - close assert_screen(<<~EOC) Multiline REPL. [emacs]prompt> EOC + close end def test_original_mode_string_with_quote @@ -228,11 +225,11 @@ def test_original_mode_string_with_quote set emacs-mode-string "[emacs]" LINES start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') - close assert_screen(<<~EOC) Multiline REPL. [emacs]prompt> EOC + close end def test_original_mode_string_vi @@ -244,13 +241,13 @@ def test_original_mode_string_vi LINES start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') write(":a\n\C-[k") - close assert_screen(<<~EOC) Multiline REPL. {InS}prompt> :a => :a {CmD}prompt> :a EOC + close end def test_mode_string_vi_changing @@ -260,11 +257,11 @@ def test_mode_string_vi_changing LINES start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') write(":a\C-[ab\C-[ac\C-h\C-h\C-h\C-h:a") - close assert_screen(<<~EOC) Multiline REPL. (ins)prompt> :a EOC + close end def test_esc_input @@ -275,31 +272,30 @@ def test_esc_input sleep 1 write("A") write("B\eAC") # ESC + A (M-A, specified ed_unassigned in Reline::KeyActor::Emacs) - close assert_screen(<<~EOC) Multiline REPL. prompt> abcABCdef EOC + close end def test_prompt_with_escape_sequence ENV['RELINE_TEST_PROMPT'] = "\1\e[30m\2prompt> \1\e[m\2" start_terminal(5, 20, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') write("123\n") - close assert_screen(<<~EOC) Multiline REPL. prompt> 123 => 123 prompt> EOC + close end def test_prompt_with_escape_sequence_and_autowrap ENV['RELINE_TEST_PROMPT'] = "\1\e[30m\2prompt> \1\e[m\2" start_terminal(5, 20, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') write("1234567890123\n") - close assert_screen(<<~EOC) Multiline REPL. prompt> 123456789012 @@ -307,6 +303,7 @@ def test_prompt_with_escape_sequence_and_autowrap => 1234567890123 prompt> EOC + close end def test_readline_with_multiline_input @@ -314,7 +311,6 @@ def test_readline_with_multiline_input write("def foo\n bar\nend\n") write("Reline.readline('prompt> ')\n") write("\C-p\C-p") - close assert_screen(<<~EOC) => :foo [0000]> Reline.readline('prompt> ') @@ -322,12 +318,12 @@ def test_readline_with_multiline_input bar end EOC + close end def test_multiline_and_autowrap start_terminal(10, 20, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') write("def aaaaaaaaaa\n 33333333\n end\C-a\C-pputs\C-e\e\C-m888888888888888") - close assert_screen(<<~EOC) Multiline REPL. prompt> def aaaaaaaa @@ -339,6 +335,7 @@ def test_multiline_and_autowrap prompt> e nd EOC + close end def test_multiline_add_new_line_and_autowrap @@ -347,7 +344,6 @@ def test_multiline_add_new_line_and_autowrap write("\n") write(" bbbbbbbbbbbb") write("\n") - close assert_screen(<<~EOC) Multiline REPL. prompt> def aaaaaaaa @@ -356,56 +352,56 @@ def test_multiline_add_new_line_and_autowrap bb prompt> EOC + close end def test_clear start_terminal(10, 15, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') write("3\C-l") - close assert_screen(<<~EOC) prompt> 3 EOC + close end def test_clear_multiline_and_autowrap start_terminal(10, 15, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') write("def aaaaaa\n 3\n\C-lend") - close assert_screen(<<~EOC) prompt> def aaa aaa prompt> 3 prompt> end EOC + close end def test_nearest_cursor start_terminal(10, 20, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') write("def ã‚ã‚\n :ã„ã„\nend\C-pbb\C-pcc") - close assert_screen(<<~EOC) Multiline REPL. prompt> def ccã‚ã‚ prompt> :bbã„ã„ prompt> end EOC + close end def test_delete_line start_terminal(10, 20, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') write("def a\n\nend\C-p\C-h") - close assert_screen(<<~EOC) Multiline REPL. prompt> def a prompt> end EOC + close end def test_last_line_of_screen start_terminal(5, 20, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') write("\n\n\n\n\ndef a\nend") - close assert_screen(<<~EOC) prompt> prompt> @@ -413,13 +409,13 @@ def test_last_line_of_screen prompt> def a prompt> end EOC + close end # c17a09b7454352e2aff5a7d8722e80afb73e454b def test_autowrap_at_last_line_of_screen start_terminal(5, 15, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') write("def a\nend\n\C-p") - close assert_screen(<<~EOC) prompt> def a prompt> end @@ -427,60 +423,60 @@ def test_autowrap_at_last_line_of_screen prompt> def a prompt> end EOC + close end # f002483b27cdb325c5edf9e0fe4fa4e1c71c4b0e def test_insert_line_in_the_middle_of_line start_terminal(5, 20, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') write("333\C-b\C-b\e\C-m8") - close assert_screen(<<~EOC) Multiline REPL. prompt> 3 prompt> 833 EOC + close end # 9d8978961c5de5064f949d56d7e0286df9e18f43 def test_insert_line_in_the_middle_of_line_at_last_line_of_screen start_terminal(3, 20, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') write("333333333333333\C-a\C-f\e\C-m") - close assert_screen(<<~EOC) prompt> 3 prompt> 333333333333 33 EOC + close end def test_insert_after_clear start_terminal(10, 20, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') write("def a\n 01234\nend\C-l\C-p5678") - close assert_screen(<<~EOC) prompt> def a prompt> 056781234 prompt> end EOC + close end def test_foced_newline_insertion start_terminal(10, 20, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') #write("def a\nend\C-p\C-e\e\C-m 3") write("def a\nend\C-p\C-e\e\x0D") - close assert_screen(<<~EOC) Multiline REPL. prompt> def a prompt> prompt> end EOC + close end def test_multiline_incremental_search start_terminal(6, 25, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') write("def a\n 8\nend\ndef b\n 3\nend\C-s8") - close assert_screen(<<~EOC) prompt> 8 prompt> end @@ -489,12 +485,12 @@ def test_multiline_incremental_search (i-search)`8' 8 (i-search)`8'end EOC + close end def test_multiline_incremental_search_finish start_terminal(6, 25, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') write("def a\n 8\nend\ndef b\n 3\nend\C-r8\C-j") - close assert_screen(<<~EOC) prompt> 8 prompt> end @@ -503,6 +499,7 @@ def test_multiline_incremental_search_finish prompt> 8 prompt> end EOC + close end def test_binding_for_vi_movement_mode @@ -512,88 +509,79 @@ def test_binding_for_vi_movement_mode LINES start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') write(":1234\C-ahhhi0") - close assert_screen(<<~EOC) Multiline REPL. prompt> :01234 EOC + close end def test_broken_prompt_list start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --broken-dynamic-prompt}, startup_message: 'Multiline REPL.') write("def hoge\n 3\nend") - close assert_screen(<<~EOC) Multiline REPL. [0000]> def hoge [0001]> 3 [0001]> end EOC + close end def test_no_escape_sequence_passed_to_dynamic_prompt start_terminal(10, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --autocomplete --color-bold --broken-dynamic-prompt-assert-no-escape-sequence}, startup_message: 'Multiline REPL.') write("%[ S") write("\n") - close assert_screen(<<~EOC) Multiline REPL. [0000]> %[ S [0001]> EOC + close end def test_bracketed_paste omit if Reline.core.io_gate.win? start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') write("\e[200~def hoge\r\t3\rend\e[201~") - close assert_screen(<<~EOC) Multiline REPL. prompt> def hoge prompt> 3 prompt> end EOC + close end - def test_bracketed_paste_with_undo + def test_bracketed_paste_with_undo_redo omit if Reline.core.io_gate.win? start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') write("abc") write("\e[200~def hoge\r\t3\rend\e[201~") write("\C-_") - close assert_screen(<<~EOC) Multiline REPL. prompt> abc EOC - end - - def test_bracketed_paste_with_redo - omit if Reline.core.io_gate.win? - start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') - write("abc") - write("\e[200~def hoge\r\t3\rend\e[201~") - write("\C-_") write("\M-\C-_") - close assert_screen(<<~EOC) Multiline REPL. prompt> abcdef hoge prompt> 3 prompt> end EOC + close end def test_backspace_until_returns_to_initial start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') write("ABC") write("\C-h\C-h\C-h") - close assert_screen(<<~EOC) Multiline REPL. prompt> EOC + close end def test_longer_than_screen_height @@ -632,8 +620,6 @@ def each_top_level_statement end end EOC - sleep 1 - close assert_screen(<<~EOC) prompt> prompt prompt> end @@ -641,47 +627,7 @@ def each_top_level_statement prompt> end prompt> end EOC - end - - def test_longer_than_screen_height_with_scroll_back - start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') - write(<<~EOC.chomp) - def each_top_level_statement - initialize_input - catch(:TERM_INPUT) do - loop do - begin - prompt - unless l = lex - throw :TERM_INPUT if @line == '' - else - @line_no += l.count("\n") - next if l == "\n" - @line.concat l - if @code_block_open or @ltype or @continue or @indent > 0 - next - end - end - if @line != "\n" - @line.force_encoding(@io.encoding) - yield @line, @exp_line_no - end - break if @io.eof? - @line = '' - @exp_line_no = @line_no - # - @indent = 0 - rescue TerminateLineInput - initialize_input - prompt - end - end - end - end - EOC - sleep 1 write("\C-p" * 6) - close assert_screen(<<~EOC) prompt> rescue Terminate LineInput @@ -689,54 +635,15 @@ def each_top_level_statement ut prompt> prompt EOC - end - - def test_longer_than_screen_height_with_complex_scroll_back - start_terminal(4, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') - write(<<~EOC.chomp) - def each_top_level_statement - initialize_input - catch(:TERM_INPUT) do - loop do - begin - prompt - unless l = lex - throw :TERM_INPUT if @line == '' - else - @line_no += l.count("\n") - next if l == "\n" - @line.concat l - if @code_block_open or @ltype or @continue or @indent > 0 - next - end - end - if @line != "\n" - @line.force_encoding(@io.encoding) - yield @line, @exp_line_no - end - break if @io.eof? - @line = '' - @exp_line_no = @line_no - # - @indent = 0 - rescue TerminateLineInput - initialize_input - prompt - end - end - end - end - EOC - sleep 1 - write("\C-p" * 5) - write("\C-n" * 3) - close + write("\C-n" * 4) assert_screen(<<~EOC) + prompt> initialize_inp ut prompt> prompt prompt> end prompt> end EOC + close end def test_longer_than_screen_height_nearest_cursor_with_scroll_back @@ -754,7 +661,6 @@ def test_longer_than_screen_height_nearest_cursor_with_scroll_back EOC write("\C-p" * 4 + "\C-e" + "\C-p" * 4) write("2") - close assert_screen(<<~EOC) prompt> if 12 prompt> if 2 @@ -762,6 +668,7 @@ def test_longer_than_screen_height_nearest_cursor_with_scroll_back prompt> if 4 prompt> puts EOC + close end def test_update_cursor_correctly_when_just_cursor_moving @@ -773,12 +680,12 @@ def test_update_cursor_correctly_when_just_cursor_moving write('5') write("\C-e") write('9') - close assert_screen(<<~EOC) Multiline REPL. prompt> def hoge prompt> 0123456789 EOC + close end def test_auto_indent @@ -786,7 +693,6 @@ def test_auto_indent "def hoge\nputs(\n1,\n2\n)\nend".lines do |line| write line end - close assert_screen(<<~EOC) Multiline REPL. prompt> def hoge @@ -796,18 +702,19 @@ def test_auto_indent prompt> ) prompt> end EOC + close end def test_auto_indent_when_inserting_line start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --auto-indent}, startup_message: 'Multiline REPL.') write 'aa(bb(cc(dd(ee(' write "\C-b" * 5 + "\n" - close assert_screen(<<~EOC) Multiline REPL. prompt> aa(bb(cc(d prompt> d(ee( EOC + close end def test_auto_indent_multibyte_insert_line @@ -815,7 +722,6 @@ def test_auto_indent_multibyte_insert_line write "if true\n" write "ã‚ã„ã†ãˆãŠ\n" 4.times { write "\C-b\C-b\C-b\C-b\e\r" } - close assert_screen(<<~EOC) Multiline REPL. prompt> if true @@ -826,26 +732,26 @@ def test_auto_indent_multibyte_insert_line prompt> ㊠prompt> EOC + close end def test_newline_after_wrong_indent start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --auto-indent}, startup_message: 'Multiline REPL.') write "if 1\n aa" write "\n" - close assert_screen(<<~EOC) Multiline REPL. prompt> if 1 prompt> aa prompt> EOC + close end def test_suppress_auto_indent_just_after_pasted start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --auto-indent}, startup_message: 'Multiline REPL.') write("def hoge\n [[\n 3]]\ned") write("\C-bn") - close assert_screen(<<~EOC) Multiline REPL. prompt> def hoge @@ -853,6 +759,7 @@ def test_suppress_auto_indent_just_after_pasted prompt> 3]] prompt> end EOC + close end def test_suppress_auto_indent_for_adding_newlines_in_pasting @@ -860,7 +767,6 @@ def test_suppress_auto_indent_for_adding_newlines_in_pasting write("<<~Q\n") write("{\n #\n}") write("#") - close assert_screen(<<~EOC) Multiline REPL. prompt> <<~Q @@ -868,6 +774,7 @@ def test_suppress_auto_indent_for_adding_newlines_in_pasting prompt> # prompt> }# EOC + close end def test_auto_indent_with_various_spaces @@ -875,13 +782,13 @@ def test_auto_indent_with_various_spaces write "(\n\C-v" write "\C-k\n\C-v" write "\C-k)" - close assert_screen(<<~EOC) Multiline REPL. prompt> ( prompt> ^K prompt> ) EOC + close end def test_autowrap_in_the_middle_of_a_line @@ -890,19 +797,18 @@ def test_autowrap_in_the_middle_of_a_line %w{h i}.each do |c| write(c) end - close assert_screen(<<~EOC) Multiline REPL. prompt> def abcdefgh i; end EOC + close end def test_terminate_in_the_middle_of_lines start_terminal(5, 20, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') write("def hoge\n 1\n 2\n 3\n 4\nend\n") write("\C-p\C-p\C-p\C-e\n") - close assert_screen(<<~EOC) prompt> 3 prompt> 4 @@ -910,12 +816,12 @@ def test_terminate_in_the_middle_of_lines => :hoge prompt> EOC + close end def test_dynamic_prompt_returns_empty start_terminal(5, 20, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --dynamic-prompt-returns-empty}, startup_message: 'Multiline REPL.') write("def hoge\nend\n") - close assert_screen(<<~EOC) Multiline REPL. prompt> def hoge @@ -923,108 +829,106 @@ def test_dynamic_prompt_returns_empty => :hoge prompt> EOC + close end def test_reset_rest_height_when_clear_screen start_terminal(5, 20, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') write("\n\n\n\C-l3\n") - close assert_screen(<<~EOC) prompt> 3 => 3 prompt> EOC + close end def test_meta_key start_terminal(30, 20, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') write("def ge\M-bho") - close assert_screen(<<~EOC) Multiline REPL. prompt> def hoge EOC + close end def test_not_meta_key start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') write("ãŠã ã‚“ã”") # "ã " in UTF-8 contains "\xA0" - close assert_screen(<<~EOC) Multiline REPL. prompt> ãŠã ã‚“ã” EOC + close end def test_force_enter start_terminal(30, 120, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') write("def hoge\nend\C-p\C-e") write("\M-\x0D") - close assert_screen(<<~EOC) Multiline REPL. prompt> def hoge prompt> prompt> end EOC + close end def test_nontty omit if Reline.core.io_gate.win? cmd = %Q{ruby -e 'puts(%Q{ello\C-ah\C-e})' | ruby -I#{@pwd}/lib -rreline -e 'p Reline.readline(%{> })' | ruby -e 'print STDIN.read'} start_terminal(40, 50, ['bash', '-c', cmd]) - sleep 1 - close rescue nil assert_screen(<<~'EOC') > hello "hello" EOC + close end def test_eof_with_newline omit if Reline.core.io_gate.win? cmd = %Q{ruby -e 'print(%Q{abc def \\e\\r})' | ruby -I#{@pwd}/lib -rreline -e 'p Reline.readline(%{> })'} start_terminal(40, 50, ['bash', '-c', cmd]) - sleep 1 - close rescue nil assert_screen(<<~'EOC') > abc def "abc def " EOC + close end def test_eof_without_newline omit if Reline.core.io_gate.win? cmd = %Q{ruby -e 'print(%{hello})' | ruby -I#{@pwd}/lib -rreline -e 'p Reline.readline(%{> })'} start_terminal(40, 50, ['bash', '-c', cmd]) - sleep 1 - close rescue nil assert_screen(<<~'EOC') > hello "hello" EOC + close end def test_em_set_mark_and_em_exchange_mark start_terminal(10, 50, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') write("aaa bbb ccc ddd\M-b\M-b\M-\x20\M-b\C-x\C-xX\C-x\C-xY") - close assert_screen(<<~'EOC') Multiline REPL. prompt> aaa Ybbb Xccc ddd EOC + close end def test_multiline_completion start_terminal(10, 50, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --complete}, startup_message: 'Multiline REPL.') write("def hoge\n St\n St\C-p\t") - close assert_screen(<<~'EOC') Multiline REPL. prompt> def hoge prompt> String prompt> St EOC + close end def test_completion_journey_2nd_line @@ -1033,12 +937,12 @@ def test_completion_journey_2nd_line LINES start_terminal(10, 50, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --complete}, startup_message: 'Multiline REPL.') write("def hoge\n S\C-n") - close assert_screen(<<~'EOC') Multiline REPL. prompt> def hoge prompt> String EOC + close end def test_completion_journey_with_empty_line @@ -1047,23 +951,23 @@ def test_completion_journey_with_empty_line LINES start_terminal(10, 50, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --complete}, startup_message: 'Multiline REPL.') write("\C-n\C-p") - close assert_screen(<<~'EOC') Multiline REPL. prompt> EOC + close end def test_completion_menu_is_displayed_horizontally start_terminal(20, 50, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --complete}, startup_message: 'Multiline REPL.') write("S\t\t") - close assert_screen(<<~'EOC') Multiline REPL. prompt> S ScriptError String Signal SyntaxError EOC + close end def test_show_all_if_ambiguous_on @@ -1072,13 +976,13 @@ def test_show_all_if_ambiguous_on LINES start_terminal(20, 50, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --complete}, startup_message: 'Multiline REPL.') write("S\t") - close assert_screen(<<~'EOC') Multiline REPL. prompt> S ScriptError String Signal SyntaxError EOC + close end def test_show_all_if_ambiguous_on_and_menu_with_perfect_match @@ -1087,12 +991,12 @@ def test_show_all_if_ambiguous_on_and_menu_with_perfect_match LINES start_terminal(20, 50, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --complete-menu-with-perfect-match}, startup_message: 'Multiline REPL.') write("a\t") - close assert_screen(<<~'EOC') Multiline REPL. prompt> abs abs abs2 EOC + close end def test_simple_dialog @@ -1143,7 +1047,6 @@ def test_dialog_scroll_pushup_condition write("\n" * 10) write("if 1\n sSts\nend") write("\C-p\C-h\C-e\C-h") - close assert_screen(<<~'EOC') prompt> prompt> @@ -1156,6 +1059,7 @@ def test_dialog_scroll_pushup_condition prompt> enString Struct EOC + close end end @@ -1179,7 +1083,6 @@ def test_autocomplete_at_bottom start_terminal(15, 50, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --autocomplete}, startup_message: 'Multiline REPL.') write('def hoge' + "\C-m" * 10 + "end\C-p ") write('S') - close assert_screen(<<~'EOC') Multiline REPL. prompt> def hoge @@ -1194,6 +1097,7 @@ def test_autocomplete_at_bottom prompt> S prompt> end EOC + close end def test_autocomplete_return_to_original @@ -1202,13 +1106,13 @@ def test_autocomplete_return_to_original write('t') write('r') 3.times{ write("\C-i") } - close assert_screen(<<~'EOC') Multiline REPL. prompt> Str String Struct EOC + close end def test_autocomplete_target_is_wrapped @@ -1217,7 +1121,6 @@ def test_autocomplete_target_is_wrapped write('S') write('t') write('r') - close assert_screen(<<~'EOC') Multiline REPL. prompt> St @@ -1225,6 +1128,7 @@ def test_autocomplete_target_is_wrapped String Struct EOC + close end def test_autocomplete_target_at_end_of_line @@ -1232,13 +1136,13 @@ def test_autocomplete_target_at_end_of_line write(' ') write('Str') write("\C-i") - close assert_screen(<<~'EOC') Multiline REPL. prompt> Str ing String Struct EOC + close end def test_autocomplete_completed_input_is_wrapped @@ -1246,33 +1150,32 @@ def test_autocomplete_completed_input_is_wrapped write(' ') write('Str') write("\C-i") - close assert_screen(<<~'EOC') Multiline REPL. prompt> Stri ng String Struct EOC + close end def test_force_insert_before_autocomplete start_terminal(20, 20, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --autocomplete}, startup_message: 'Multiline REPL.') write('Sy') write(";St\t\t") - close assert_screen(<<~'EOC') Multiline REPL. prompt> Sy;Struct String Struct EOC + close end def test_simple_dialog_with_scroll_key start_terminal(20, 50, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --dialog long,scrollkey}, startup_message: 'Multiline REPL.') write('a') 5.times{ write('j') } - close assert_screen(<<~'EOC') Multiline REPL. prompt> a @@ -1281,13 +1184,13 @@ def test_simple_dialog_with_scroll_key language with a focus on simplicity EOC + close end def test_simple_dialog_scrollbar_with_moving_to_right start_terminal(20, 50, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --dialog long,scrollkey,scrollbar}, startup_message: 'Multiline REPL.') 6.times{ write('j') } write('a') - close assert_screen(<<~'EOC') Multiline REPL. prompt> a @@ -1296,6 +1199,7 @@ def test_simple_dialog_scrollbar_with_moving_to_right focus on simplicity and productivity. EOC + close end def test_simple_dialog_scrollbar_with_moving_to_left @@ -1303,7 +1207,6 @@ def test_simple_dialog_scrollbar_with_moving_to_left write('a') 6.times{ write('j') } write("\C-h") - close assert_screen(<<~'EOC') Multiline REPL. prompt> @@ -1312,13 +1215,13 @@ def test_simple_dialog_scrollbar_with_moving_to_left focus on simplicity and productivity. EOC + close end def test_dialog_with_fullwidth_chars ENV['RELINE_TEST_PROMPT'] = '> ' start_terminal(20, 5, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --dialog fullwidth,scrollkey,scrollbar}, startup_message: 'Multiline REPL.') 6.times{ write('j') } - close assert_screen(<<~'EOC') Multi line @@ -1329,13 +1232,13 @@ def test_dialog_with_fullwidth_chars å‚™ãˆâ–ˆ ã¡ã€â–ˆ EOC + close end def test_dialog_with_fullwidth_chars_split ENV['RELINE_TEST_PROMPT'] = '> ' start_terminal(20, 6, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --dialog fullwidth,scrollkey,scrollbar}, startup_message: 'Multiline REPL.') 6.times{ write('j') } - close assert_screen(<<~'EOC') Multil ine RE @@ -1346,34 +1249,34 @@ def test_dialog_with_fullwidth_chars_split 備㈠█ ã¡ã€ â–ˆ EOC + close end def test_autocomplete_empty start_terminal(20, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --autocomplete}, startup_message: 'Multiline REPL.') write('Street') - close assert_screen(<<~'EOC') Multiline REPL. prompt> Street EOC + close end def test_autocomplete start_terminal(20, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --autocomplete}, startup_message: 'Multiline REPL.') write('Str') - close assert_screen(<<~'EOC') Multiline REPL. prompt> Str String Struct EOC + close end def test_autocomplete_empty_string start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --autocomplete}, startup_message: 'Multiline REPL.') write("\C-i") - close assert_screen(<<~'EOC') Multiline REPL. prompt> String @@ -1381,12 +1284,12 @@ def test_autocomplete_empty_string Struct â–€ Symbol EOC + close end def test_paste_code_with_tab_indent_does_not_fail start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --autocomplete-empty}, startup_message: 'Multiline REPL.') write("2.times do\n\tputs\n\tputs\nend") - close assert_screen(<<~'EOC') Multiline REPL. prompt> 2.times do @@ -1394,12 +1297,12 @@ def test_paste_code_with_tab_indent_does_not_fail prompt> puts prompt> end EOC + close end def test_autocomplete_after_2nd_line start_terminal(20, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --autocomplete}, startup_message: 'Multiline REPL.') write("def hoge\n Str") - close assert_screen(<<~'EOC') Multiline REPL. prompt> def hoge @@ -1407,13 +1310,13 @@ def test_autocomplete_after_2nd_line String Struct EOC + close end def test_autocomplete_rerender_under_dialog start_terminal(20, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --autocomplete}, startup_message: 'Multiline REPL.') write("def hoge\n\n 123456\n 456789\nend\C-p\C-p\C-p a = Str") write('i') - close assert_screen(<<~'EOC') Multiline REPL. prompt> def hoge @@ -1422,13 +1325,13 @@ def test_autocomplete_rerender_under_dialog prompt> 456789 prompt> end EOC + close end def test_rerender_multiple_dialog start_terminal(20, 60, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --autocomplete --dialog simple}, startup_message: 'Multiline REPL.') write("if\n abcdef\n 123456\n 456789\nend\C-p\C-p\C-p\C-p Str") write("\t") - close assert_screen(<<~'EOC') Multiline REPL. prompt> if String @@ -1439,12 +1342,12 @@ def test_rerender_multiple_dialog syntax that is natural to read and easy to write. EOC + close end def test_autocomplete_long_with_scrollbar start_terminal(20, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --autocomplete-long}, startup_message: 'Multiline REPL.') write('S') - close assert_screen(<<~'EOC') Multiline REPL. prompt> S @@ -1464,12 +1367,7 @@ def test_autocomplete_long_with_scrollbar Socket StringIO EOC - end - - def test_autocomplete_long_with_scrollbar_scroll - start_terminal(20, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --autocomplete-long}, startup_message: 'Multiline REPL.') - write('S' + "\C-i" * 16) - close + write("\C-i" * 16) assert_screen(<<~'EOC') Multiline REPL. prompt> StringScanner @@ -1489,13 +1387,13 @@ def test_autocomplete_long_with_scrollbar_scroll StringIO StringScanner EOC + close end def test_autocomplete_super_long_scroll_to_bottom start_terminal(20, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --autocomplete-super-long}, startup_message: 'Multiline REPL.') shift_tab = [27, 91, 90] write('S' + shift_tab.map(&:chr).join) - close assert_screen(<<~'EOC') Multiline REPL. prompt> Str_BXX @@ -1515,6 +1413,7 @@ def test_autocomplete_super_long_scroll_to_bottom Str_BXW Str_BXXâ–„ EOC + close end def test_autocomplete_super_long_and_backspace @@ -1522,7 +1421,6 @@ def test_autocomplete_super_long_and_backspace shift_tab = [27, 91, 90] write('S' + shift_tab.map(&:chr).join) write("\C-h") - close assert_screen(<<~'EOC') Multiline REPL. prompt> Str_BX @@ -1542,21 +1440,21 @@ def test_autocomplete_super_long_and_backspace Str_BXM Str_BXN EOC + close end def test_dialog_callback_returns_nil start_terminal(20, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --dialog nil}, startup_message: 'Multiline REPL.') write('a') - close assert_screen(<<~'EOC') Multiline REPL. prompt> a EOC + close end def test_dialog_narrower_than_screen start_terminal(20, 11, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --dialog simple}, startup_message: 'Multiline REPL.') - close assert_screen(<<~'EOC') Multiline R EPL. @@ -1568,12 +1466,12 @@ def test_dialog_narrower_than_screen syntax that easy to wri EOC + close end def test_dialog_narrower_than_screen_with_scrollbar start_terminal(20, 11, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --autocomplete-long}, startup_message: 'Multiline REPL.') write('S' + "\C-i" * 3) - close assert_screen(<<~'EOC') Multiline R EPL. @@ -1594,11 +1492,11 @@ def test_dialog_narrower_than_screen_with_scrollbar Socket StringIO EOC + close end def test_dialog_with_fullwidth_scrollbar start_terminal(20, 40, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --dialog simple,scrollkey,alt-scrollbar}, startup_message: 'Multiline REPL.') - close assert_screen(<<~'EOC') Multiline REPL. prompt> @@ -1607,17 +1505,18 @@ def test_dialog_with_fullwidth_scrollbar language with a focus on simplicity'' and productivity. It has an elegant EOC + close end def test_rerender_argument_prompt_after_pasting start_terminal(20, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') write('abcdef') write("\M-3\C-h") - close assert_screen(<<~'EOC') Multiline REPL. prompt> abc EOC + close end def test_autocomplete_old_dialog_width_greater_than_dialog_width @@ -1626,13 +1525,13 @@ def test_autocomplete_old_dialog_width_greater_than_dialog_width write("\C-p") write("r") write("a") - close assert_screen(<<~'EOC') Multiline REPL. prompt> 0+ ra prompt> 123rand 901234 raise EOC + close end def test_scroll_at_bottom_for_dialog @@ -1640,7 +1539,6 @@ def test_scroll_at_bottom_for_dialog write("\n\n\n\n\n\n\n\n\n\n\n") write("def hoge\n\nend\C-p\C-e") write(" S") - close assert_screen(<<~'EOC') prompt> prompt> @@ -1653,63 +1551,64 @@ def test_scroll_at_bottom_for_dialog Struct â–€ Symbol EOC + close end def test_clear_dialog_in_pasting start_terminal(10, 40, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --autocomplete}, startup_message: 'Multiline REPL.') write("S") write("tring ") - close assert_screen(<<~'EOC') Multiline REPL. prompt> String EOC + close end def test_prompt_with_newline ENV['RELINE_TEST_PROMPT'] = "::\n> " start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') write("def hoge\n 3\nend") - close assert_screen(<<~'EOC') Multiline REPL. ::\n> def hoge ::\n> 3 ::\n> end EOC + close end def test_dynamic_prompt_with_newline start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --dynamic-prompt-with-newline}, startup_message: 'Multiline REPL.') write("def hoge\n 3\nend") - close assert_screen(<<~'EOC') Multiline REPL. [0000\n]> def hoge [0001\n]> 3 [0001\n]> end EOC + close end def test_lines_passed_to_dynamic_prompt start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --dynamic-prompt-show-line}, startup_message: 'Multiline REPL.') write("if true") write("\n") - close assert_screen(<<~EOC) Multiline REPL. [if t]> if true [ ]> EOC + close end def test_clear_dialog_when_just_move_cursor_at_last_line start_terminal(10, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --autocomplete}, startup_message: 'Multiline REPL.') write("class A\n 3\nend\n\n\n") write("\C-p\C-p\C-e; S") + assert_screen(/String/) write("\C-n") write(";") - close assert_screen(<<~'EOC') prompt> 3 prompt> end @@ -1720,6 +1619,7 @@ def test_clear_dialog_when_just_move_cursor_at_last_line prompt> 3; S prompt> end; EOC + close end def test_clear_dialog_when_adding_new_line_to_end_of_buffer @@ -1729,7 +1629,6 @@ def test_clear_dialog_when_adding_new_line_to_end_of_buffer write("class S") write("\n") write(" 3") - close assert_screen(<<~'EOC') prompt> def a prompt> 3 @@ -1740,6 +1639,7 @@ def test_clear_dialog_when_adding_new_line_to_end_of_buffer prompt> class S prompt> 3 EOC + close end def test_insert_newline_in_the_middle_of_buffer_just_after_dialog @@ -1749,7 +1649,6 @@ def test_insert_newline_in_the_middle_of_buffer_just_after_dialog write("\C-p\C-p\C-p\C-p\C-p\C-e\C-hS") write("\M-\x0D") write(" 3") - close assert_screen(<<~'EOC') prompt> 3 prompt> end @@ -1762,6 +1661,7 @@ def test_insert_newline_in_the_middle_of_buffer_just_after_dialog prompt> end prompt> end EOC + close end def test_incremental_search_on_not_last_line @@ -1772,7 +1672,6 @@ def test_incremental_search_on_not_last_line write("\C-r") write("a") write("\n\n") - close assert_screen(<<~'EOC') prompt> def abc prompt> end @@ -1785,28 +1684,29 @@ def test_incremental_search_on_not_last_line => :abc prompt> EOC + close end def test_bracket_newline_indent start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --auto-indent}, startup_message: 'Multiline REPL.') write("[\n") write("1") - close assert_screen(<<~EOC) Multiline REPL. prompt> [ prompt> 1 EOC + close end def test_repeated_input_delete start_terminal(5, 30, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.') write("a\C-h" * 4000) - close assert_screen(<<~'EOC') Multiline REPL. prompt> EOC + close end def test_exit_with_ctrl_d @@ -1821,6 +1721,7 @@ def test_exit_with_ctrl_d Multiline REPL. prompt> EOC + close end def test_print_before_readline @@ -1833,12 +1734,48 @@ def test_print_before_readline RUBY start_terminal(6, 30, ['ruby', "-I#{@pwd}/lib", '-rreline', '-e', code], startup_message: 'Multiline REPL.') write "x\n" - close assert_screen(<<~EOC) Multiline REPL. >x > EOC + close + end + + def test_pre_input_hook_with_redisplay + code = <<~'RUBY' + puts 'Multiline REPL.' + Reline.pre_input_hook = -> do + Reline.insert_text 'abc' + Reline.redisplay # Reline doesn't need this but Readline requires calling redisplay + end + Reline.readline('prompt> ') + RUBY + start_terminal(6, 30, ['ruby', "-I#{@pwd}/lib", '-rreline', '-e', code], startup_message: 'Multiline REPL.') + assert_screen(<<~EOC) + Multiline REPL. + prompt> abc + EOC + close + end + + def test_pre_input_hook_with_multiline_text_insert + # Frequently used pattern of pre_input_hook + code = <<~'RUBY' + puts 'Multiline REPL.' + Reline.pre_input_hook = -> do + Reline.insert_text "abc\nef" + end + Reline.readline('>') + RUBY + start_terminal(6, 30, ['ruby', "-I#{@pwd}/lib", '-rreline', '-e', code], startup_message: 'Multiline REPL.') + write("\C-ad") + assert_screen(<<~EOC) + Multiline REPL. + >abc + def + EOC + close end def test_thread_safe @@ -1847,7 +1784,6 @@ def test_thread_safe write("exit\n") write("exit\n") write("42\n") - close assert_screen(<<~EOC) >exit >exit @@ -1856,6 +1792,7 @@ def test_thread_safe => 42 prompt> EOC + close end def test_stop_continue @@ -1868,13 +1805,18 @@ def test_stop_continue rubyfile.close start_terminal(40, 50, ['bash']) write "ruby -I#{@pwd}/lib -rreline #{rubyfile.path}\n" + assert_screen(/^>/) write "abc\ndef\nhi" pid = pidfile.tap(&:rewind).read.to_i Process.kill(:STOP, pid) unless pid.zero? write "fg\n" + assert_screen(/fg\n.*>/m) write "\ebg" + assert_screen(/>abc\n>def\n>ghi\n/) close - assert_include result.join("\n"), ">abc\n>def\n>ghi\n" + ensure + File.delete(rubyfile.path) if rubyfile + File.delete(pidfile.path) if pidfile end def write_inputrc(content) @@ -1882,6 +1824,10 @@ def write_inputrc(content) f.write content end end + + def fold_multiline(str, width) + str.scan(/.{1,#{width}}/).each(&:rstrip!).join("\n") + end end rescue LoadError, NameError # On Ruby repository, this test suit doesn't run because Ruby repo doesn't diff --git a/test/resolv/test_dns.rb b/test/resolv/test_dns.rb index f9224fbebe9fa4..743511c8fb88f1 100644 --- a/test/resolv/test_dns.rb +++ b/test/resolv/test_dns.rb @@ -89,7 +89,7 @@ def with_udp_and_tcp(host, port) u = nil retry end - raise + omit "Could not find a free port after 10 retries" end # If we get to this point, we have a valid t & u socket @@ -382,7 +382,7 @@ def test_query_ipv4_duplicate_responses _, server_port, _, server_address = u.addr begin client_thread = Thread.new { - Resolv::DNS.open(:nameserver_port => [[server_address, server_port]], :search => ['bad1.com', 'bad2.com', 'good.com'], ndots: 5) {|dns| + Resolv::DNS.open(:nameserver_port => [[server_address, server_port]], :search => ['bad1.com', 'bad2.com', 'good.com'], ndots: 5, use_ipv6: false) {|dns| dns.getaddress("example") } } @@ -758,7 +758,10 @@ def test_multiple_servers_with_timeout_and_truncated_tcp_fallback u1.send(msg[0...512], 0, client_address, client_port) end - tcp_server1_thread = Thread.new { t1.accept; t1.close } + tcp_server1_thread = Thread.new do + # Keep this socket open so that the client experiences a timeout + t1.accept + end tcp_server2_thread = Thread.new do ct = t2.accept @@ -800,7 +803,7 @@ def test_multiple_servers_with_timeout_and_truncated_tcp_fallback ct.send(msg, 0) ct.close end - result, = assert_join_threads([client_thread, udp_server1_thread, tcp_server1_thread, tcp_server2_thread]) + result, _, tcp_server1_socket, = assert_join_threads([client_thread, udp_server1_thread, tcp_server1_thread, tcp_server2_thread]) assert_instance_of(Array, result) assert_equal(50, result.length) result.each_with_index do |rr, i| @@ -809,6 +812,8 @@ def test_multiple_servers_with_timeout_and_truncated_tcp_fallback assert_equal("192.0.2.#{i}", rr.address.to_s) assert_equal(3600, rr.ttl) end + ensure + tcp_server1_socket&.close end end end diff --git a/test/ripper/test_scanner_events.rb b/test/ripper/test_scanner_events.rb index 261e259889c12a..ed291c4384ed4b 100644 --- a/test/ripper/test_scanner_events.rb +++ b/test/ripper/test_scanner_events.rb @@ -951,6 +951,10 @@ def test_CHAR assert_equal ["?\\u{41}"], scan('CHAR', "?\\u{41}") + err = nil + assert_equal [], scan('CHAR', '?\\') {|*e| err = e} + assert_equal([:on_parse_error, "Invalid escape character syntax", "?\\"], err) + err = nil assert_equal [], scan('CHAR', '?\\M ') {|*e| err = e} assert_equal([:on_parse_error, "Invalid escape character syntax", "?\\M "], err) diff --git a/test/ruby/test_ast.rb b/test/ruby/test_ast.rb index 936dd6d3e661aa..edfc25c43d91d8 100644 --- a/test/ruby/test_ast.rb +++ b/test/ruby/test_ast.rb @@ -359,7 +359,7 @@ def test_node_id_for_backtrace_location_raises_argument_error end def test_of_proc_and_method - omit if ParserSupport.prism_enabled? + omit if ParserSupport.prism_enabled? || ParserSupport.prism_enabled_in_subprocess? proc = Proc.new { 1 + 2 } method = self.method(__method__) @@ -793,7 +793,7 @@ def test_keep_script_lines_for_of end def test_keep_script_lines_for_of_with_existing_SCRIPT_LINES__that_has__FILE__as_a_key - omit if ParserSupport.prism_enabled? + omit if ParserSupport.prism_enabled? || ParserSupport.prism_enabled_in_subprocess? # This test confirms that the bug that previously occurred because of # `AbstractSyntaxTree.of`s unnecessary dependence on SCRIPT_LINES__ does not reproduce. @@ -803,7 +803,7 @@ def test_keep_script_lines_for_of_with_existing_SCRIPT_LINES__that_has__FILE__as "puts RubyVM::AbstractSyntaxTree.of(->{ 1 + 2 }, keep_script_lines: true).script_lines", "p SCRIPT_LINES__" ] - test_stdout = lines + ['{"-e"=>[]}'] + test_stdout = lines + ['{"-e" => []}'] assert_in_out_err(["-e", lines.join("\n")], "", test_stdout, []) end @@ -862,7 +862,7 @@ def test_encoding_with_keep_script_lines end def test_e_option - omit if ParserSupport.prism_enabled? + omit if ParserSupport.prism_enabled? || ParserSupport.prism_enabled_in_subprocess? assert_in_out_err(["-e", "def foo; end; pp RubyVM::AbstractSyntaxTree.of(method(:foo)).type"], "", [":SCOPE"], []) @@ -1298,7 +1298,12 @@ def test_memory_leak end def test_locations - node = RubyVM::AbstractSyntaxTree.parse("1 + 2") + begin + verbose_bak, $VERBOSE = $VERBOSE, false + node = RubyVM::AbstractSyntaxTree.parse("1 + 2") + ensure + $VERBOSE = verbose_bak + end locations = node.locations assert_equal(RubyVM::AbstractSyntaxTree::Location, locations[0].class) @@ -1326,19 +1331,168 @@ def assert_ast_eqaul(src, expected, **options) class TestLocation < Test::Unit::TestCase def test_lineno_and_column - node = RubyVM::AbstractSyntaxTree.parse("1 + 2") + node = ast_parse("1 + 2") assert_locations(node.locations, [[1, 0, 1, 5]]) end + def test_alias_locations + node = ast_parse("alias foo bar") + assert_locations(node.children[-1].locations, [[1, 0, 1, 13], [1, 0, 1, 5]]) + end + + def test_and_locations + node = ast_parse("1 and 2") + assert_locations(node.children[-1].locations, [[1, 0, 1, 7], [1, 2, 1, 5]]) + + node = ast_parse("1 && 2") + assert_locations(node.children[-1].locations, [[1, 0, 1, 6], [1, 2, 1, 4]]) + end + + def test_block_pass_locations + node = ast_parse("foo(&bar)") + assert_locations(node.children[-1].children[-1].locations, [[1, 4, 1, 8], [1, 4, 1, 5]]) + + node = ast_parse("def a(&); b(&) end") + assert_locations(node.children[-1].children[-1].children[-1].children[-1].children[-1].locations, [[1, 12, 1, 13], [1, 12, 1, 13]]) + end + + def test_break_locations + node = ast_parse("loop { break 1 }") + assert_locations(node.children[-1].children[-1].children[-1].locations, [[1, 7, 1, 14], [1, 7, 1, 12]]) + end + + def test_case_locations + node = ast_parse("case a; when 1; end") + assert_locations(node.children[-1].locations, [[1, 0, 1, 19], [1, 0, 1, 4], [1, 16, 1, 19]]) + end + + def test_case2_locations + node = ast_parse("case; when 1; end") + assert_locations(node.children[-1].locations, [[1, 0, 1, 17], [1, 0, 1, 4], [1, 14, 1, 17]]) + end + + def test_case3_locations + node = ast_parse("case a; in 1; end") + assert_locations(node.children[-1].locations, [[1, 0, 1, 17], [1, 0, 1, 4], [1, 14, 1, 17]]) + end + + def test_next_locations + node = ast_parse("loop { next 1 }") + assert_locations(node.children[-1].children[-1].children[-1].locations, [[1, 7, 1, 13], [1, 7, 1, 11]]) + end + + def test_op_asgn1_locations + node = ast_parse("ary[1] += foo") + assert_locations(node.children[-1].locations, [[1, 0, 1, 13], nil, [1, 3, 1, 4], [1, 5, 1, 6], [1, 7, 1, 9]]) + + node = ast_parse("ary[1, 2] += foo") + assert_locations(node.children[-1].locations, [[1, 0, 1, 16], nil, [1, 3, 1, 4], [1, 8, 1, 9], [1, 10, 1, 12]]) + end + + def test_or_locations + node = ast_parse("1 or 2") + assert_locations(node.children[-1].locations, [[1, 0, 1, 6], [1, 2, 1, 4]]) + + node = ast_parse("1 || 2") + assert_locations(node.children[-1].locations, [[1, 0, 1, 6], [1, 2, 1, 4]]) + end + + def test_op_asgn2_locations + node = ast_parse("a.b += 1") + assert_locations(node.children[-1].locations, [[1, 0, 1, 8], [1, 1, 1, 2], [1, 2, 1, 3], [1, 4, 1, 6]]) + + node = ast_parse("A::B.c += d") + assert_locations(node.children[-1].locations, [[1, 0, 1, 11], [1, 4, 1, 5], [1, 5, 1, 6], [1, 7, 1, 9]]) + + node = ast_parse("a = b.c += d") + assert_locations(node.children[-1].children[-1].locations, [[1, 4, 1, 12], [1, 5, 1, 6], [1, 6, 1, 7], [1, 8, 1, 10]]) + + node = ast_parse("a = A::B.c += d") + assert_locations(node.children[-1].children[-1].locations, [[1, 4, 1, 15], [1, 8, 1, 9], [1, 9, 1, 10], [1, 11, 1, 13]]) + end + + def test_redo_locations + node = ast_parse("loop { redo }") + assert_locations(node.children[-1].children[-1].children[-1].locations, [[1, 7, 1, 11], [1, 7, 1, 11]]) + end + + def test_return_locations + node = ast_parse("return 1") + assert_locations(node.children[-1].locations, [[1, 0, 1, 8], [1, 0, 1, 6]]) + + node = ast_parse("return") + assert_locations(node.children[-1].locations, [[1, 0, 1, 6], [1, 0, 1, 6]]) + end + + def test_splat_locations + node = ast_parse("a = *1") + assert_locations(node.children[-1].children[1].locations, [[1, 4, 1, 6], [1, 4, 1, 5]]) + + node = ast_parse("a = *1, 2") + assert_locations(node.children[-1].children[1].children[0].locations, [[1, 4, 1, 6], [1, 4, 1, 5]]) + + node = ast_parse("case a; when *1; end") + assert_locations(node.children[-1].children[1].children[0].locations, [[1, 13, 1, 15], [1, 13, 1, 14]]) + + node = ast_parse("case a; when *1, 2; end") + assert_locations(node.children[-1].children[1].children[0].children[0].locations, [[1, 13, 1, 15], [1, 13, 1, 14]]) + end + def test_unless_locations - node = RubyVM::AbstractSyntaxTree.parse("unless cond then 1 else 2 end") + node = ast_parse("unless cond then 1 else 2 end") assert_locations(node.children[-1].locations, [[1, 0, 1, 29], [1, 0, 1, 6], [1, 12, 1, 16], [1, 26, 1, 29]]) - node = RubyVM::AbstractSyntaxTree.parse("1 unless 2") + node = ast_parse("1 unless 2") assert_locations(node.children[-1].locations, [[1, 0, 1, 10], [1, 2, 1, 8], nil, nil]) end + def test_undef_locations + node = ast_parse("undef foo") + assert_locations(node.children[-1].locations, [[1, 0, 1, 9], [1, 0, 1, 5]]) + + node = ast_parse("undef foo, bar") + assert_locations(node.children[-1].locations, [[1, 0, 1, 14], [1, 0, 1, 5]]) + end + + def test_valias_locations + node = ast_parse("alias $foo $bar") + assert_locations(node.children[-1].locations, [[1, 0, 1, 15], [1, 0, 1, 5]]) + + node = ast_parse("alias $foo $&") + assert_locations(node.children[-1].locations, [[1, 0, 1, 13], [1, 0, 1, 5]]) + end + + def test_when_locations + node = ast_parse("case a; when 1 then 2; end") + assert_locations(node.children[-1].children[1].locations, [[1, 8, 1, 22], [1, 8, 1, 12], [1, 15, 1, 19]]) + end + + def test_while_locations + node = ast_parse("while cond do 1 end") + assert_locations(node.children[-1].locations, [[1, 0, 1, 19], [1, 0, 1, 5], [1, 16, 1, 19]]) + + node = ast_parse("1 while 2") + assert_locations(node.children[-1].locations, [[1, 0, 1, 9], [1, 2, 1, 7], nil]) + end + + def test_until_locations + node = ast_parse("until cond do 1 end") + assert_locations(node.children[-1].locations, [[1, 0, 1, 19], [1, 0, 1, 5], [1, 16, 1, 19]]) + + node = ast_parse("1 until 2") + assert_locations(node.children[-1].locations, [[1, 0, 1, 9], [1, 2, 1, 7], nil]) + end + private + def ast_parse(src, **options) + begin + verbose_bak, $VERBOSE = $VERBOSE, false + RubyVM::AbstractSyntaxTree.parse(src, **options) + ensure + $VERBOSE = verbose_bak + end + end + def assert_locations(locations, expected) ary = locations.map {|loc| loc && [loc.first_lineno, loc.first_column, loc.last_lineno, loc.last_column] } diff --git a/test/ruby/test_autoload.rb b/test/ruby/test_autoload.rb index 1eb3551e57c351..ca3e3d5f7fe8bf 100644 --- a/test/ruby/test_autoload.rb +++ b/test/ruby/test_autoload.rb @@ -277,7 +277,6 @@ def test_bug_13526 # Skip this on macOS 10.13 because of the following error: # http://rubyci.s3.amazonaws.com/osx1013/ruby-master/log/20231011T014505Z.fail.html.gz require "rbconfig" - omit if RbConfig::CONFIG["target_os"] == "darwin17" script = File.join(__dir__, 'bug-13526.rb') assert_ruby_status([script], '', '[ruby-core:81016] [Bug #13526]') diff --git a/test/ruby/test_call.rb b/test/ruby/test_call.rb index 14847bf6295bf7..ffbda1fdb96e79 100644 --- a/test/ruby/test_call.rb +++ b/test/ruby/test_call.rb @@ -3,7 +3,24 @@ require '-test-/iter' class TestCall < Test::Unit::TestCase - def aaa(a, b=100, *rest) + # These dummy method definitions prevent warnings "the block passed to 'a'..." + def a(&) = nil + def b(&) = nil + def c(&) = nil + def d(&) = nil + def e(&) = nil + def f(&) = nil + def g(&) = nil + def h(&) = nil + def i(&) = nil + def j(&) = nil + def k(&) = nil + def l(&) = nil + def m(&) = nil + def n(&) = nil + def o(&) = nil + + def aaa(a, b=100, *rest, &) res = [a, b] res += rest if rest return res @@ -357,6 +374,21 @@ def o.foo(a, **h)= h[:splat_modified] = true assert_equal({splat_modified: false}, b) end + def test_kwsplat_block_eval_order + def self.t(**kw, &b) [kw, b] end + + pr = ->{} + h = {a: pr} + a = [] + + ary = t(**h, &h.delete(:a)) + assert_equal([{a: pr}, pr], ary) + + h = {a: pr} + ary = t(*a, **h, &h.delete(:a)) + assert_equal([{a: pr}, pr], ary) + end + def test_kwsplat_block_order o = Object.new ary = [] diff --git a/test/ruby/test_case.rb b/test/ruby/test_case.rb index 4a0f1bf78d0f44..9e8502fb275ab5 100644 --- a/test/ruby/test_case.rb +++ b/test/ruby/test_case.rb @@ -68,10 +68,13 @@ def test_case assert(false) end - assert_raise(NameError) do - case - when false, *x, false + begin + verbose_bak, $VERBOSE = $VERBOSE, nil + assert_raise(NameError) do + eval("case; when false, *x, false; end") end + ensure + $VERBOSE = verbose_bak end end diff --git a/test/ruby/test_compile_prism.rb b/test/ruby/test_compile_prism.rb index 66986af82797ad..92c1304e9bf66d 100644 --- a/test/ruby/test_compile_prism.rb +++ b/test/ruby/test_compile_prism.rb @@ -768,6 +768,9 @@ def test_ArrayNode assert_prism_eval("a = [1,2]; [0, *a, 3, 4, *5..6, 7, 8, *9..11]") assert_prism_eval("[[*1..2], 3, *4..5]") + elements = Array.new(64) { ":foo" } + assert_prism_eval("[#{elements.join(", ")}, bar: 1, baz: 2]") + # Test keyword splat inside of array assert_prism_eval("[**{x: 'hello'}]") @@ -842,6 +845,24 @@ def test_RangeNode assert_prism_eval("...2") assert_prism_eval("1..") assert_prism_eval("1...") + assert_prism_eval("a1 = 1; a2 = 2; a1..a2") + assert_prism_eval("a1 = 1; a2 = 2; a1...a2") + assert_prism_eval("a2 = 2; ..a2") + assert_prism_eval("a2 = 2; ...a2") + assert_prism_eval("a1 = 1; a1..") + assert_prism_eval("a1 = 1; a1...") + assert_prism_eval("1..2; nil") + assert_prism_eval("1...2; nil") + assert_prism_eval("..2; nil") + assert_prism_eval("...2; nil") + assert_prism_eval("1..; nil") + assert_prism_eval("1...; nil") + assert_prism_eval("a1 = 1; a2 = 2; a1..a2; nil") + assert_prism_eval("a1 = 1; a2 = 2; a1...a2; nil") + assert_prism_eval("a2 = 2; ..a2; nil") + assert_prism_eval("a2 = 2; ...a2; nil") + assert_prism_eval("a1 = 1; a1..; nil") + assert_prism_eval("a1 = 1; a1...; nil") end def test_SplatNode @@ -2610,7 +2631,7 @@ def test_parse_file def compare_eval(source, raw:, location:) source = raw ? source : "class Prism::TestCompilePrism\n#{source}\nend" - ruby_eval = RubyVM::InstructionSequence.compile(source).eval + ruby_eval = RubyVM::InstructionSequence.compile_parsey(source).eval prism_eval = RubyVM::InstructionSequence.compile_prism(source).eval if ruby_eval.is_a? Proc diff --git a/test/ruby/test_complex.rb b/test/ruby/test_complex.rb index c0cfb732357e4d..bb131cee911e9a 100644 --- a/test/ruby/test_complex.rb +++ b/test/ruby/test_complex.rb @@ -741,6 +741,17 @@ def test_inspect assert_equal('(1+2i)', c.inspect) end + def test_inspect_to_s_frozen_bug_20337 + assert_separately([], <<~'RUBY') + class Numeric + def inspect = super.freeze + end + c = Complex(Numeric.new, 1) + assert_match(/\A\(#0}/m, warning[0]) + assert_match(/test warning.*{uplevel: 0}/m, warning[0]) warning = capture_warning_warn {warn("test warning", **{uplevel: 0})} assert_equal("#{__FILE__}:#{__LINE__-1}: warning: test warning\n", warning[0]) warning = capture_warning_warn {warn("test warning", {uplevel: 0}, **{})} - assert_equal("test warning\n{:uplevel=>0}\n", warning[0]) + assert_equal("test warning\n{uplevel: 0}\n", warning[0]) assert_raise(ArgumentError) {warn("test warning", foo: 1)} end diff --git a/test/ruby/test_file.rb b/test/ruby/test_file.rb index e3aabb42874f93..eae9a8e7b03833 100644 --- a/test/ruby/test_file.rb +++ b/test/ruby/test_file.rb @@ -378,7 +378,7 @@ def test_stat file.close path = file.path - t0 = measure_time do + measure_time do File.write(path, "foo") end diff --git a/test/ruby/test_float.rb b/test/ruby/test_float.rb index 415d62467edc48..f2c56d1b41fe33 100644 --- a/test/ruby/test_float.rb +++ b/test/ruby/test_float.rb @@ -129,9 +129,9 @@ def test_strtod assert_in_delta(a, 0, Float::EPSILON) a = Float("-.0") assert_in_delta(a, 0, Float::EPSILON) - assert_raise(ArgumentError){Float("0.")} - assert_raise(ArgumentError){Float("+0.")} - assert_raise(ArgumentError){Float("-0.")} + assert_equal(0.0, Float("0.")) + assert_equal(0.0, Float("+0.")) + assert_equal(0.0, Float("-0.")) assert_raise(ArgumentError){Float(".")} assert_raise(ArgumentError){Float("+")} assert_raise(ArgumentError){Float("+.")} @@ -139,12 +139,12 @@ def test_strtod assert_raise(ArgumentError){Float("-.")} assert_raise(ArgumentError){Float("1e")} assert_raise(ArgumentError){Float("1__1")} - assert_raise(ArgumentError){Float("1.")} - assert_raise(ArgumentError){Float("1.e+00")} - assert_raise(ArgumentError){Float("0x.1")} - assert_raise(ArgumentError){Float("0x1.")} - assert_raise(ArgumentError){Float("0x1.0")} - assert_raise(ArgumentError){Float("0x1.p+0")} + assert_equal(1.0, Float("1.")) + assert_equal(1.0, Float("1.e+00")) + assert_equal(0.0625, Float("0x.1")) + assert_equal(1.0, Float("0x1.")) + assert_equal(1.0, Float("0x1.0")) + assert_equal(1.0, Float("0x1.p+0")) # add expected behaviour here. assert_equal(10, Float("1_0")) @@ -191,7 +191,7 @@ def test_strtod break end end - assert_nil(x, ->{"%a" % x}) + assert_equal(1.0, x, ->{"%a" % x}) end def test_divmod @@ -833,10 +833,10 @@ def test_Float assert_equal(15, Float('0xf')) assert_equal(15, Float('0xfp0')) assert_raise(ArgumentError) { Float('0xfp') } - assert_raise(ArgumentError) { Float('0xf.') } + assert_equal(15, Float('0xf.')) assert_raise(ArgumentError) { Float('0xf.p') } - assert_raise(ArgumentError) { Float('0xf.p0') } - assert_raise(ArgumentError) { Float('0xf.f') } + assert_equal(15, Float('0xf.p0')) + assert_equal(15.9375, Float('0xf.f')) assert_raise(ArgumentError) { Float('0xf.fp') } begin verbose_bak, $VERBOSE = $VERBOSE, nil @@ -850,6 +850,14 @@ def test_Float o = Object.new def o.to_f; inf = Float::INFINITY; inf/inf; end assert_predicate(Float(o), :nan?) + + assert_raise(Encoding::CompatibilityError) {Float("0".encode("utf-16be"))} + assert_raise(Encoding::CompatibilityError) {Float("0".encode("utf-16le"))} + assert_raise(Encoding::CompatibilityError) {Float("0".encode("utf-32be"))} + assert_raise(Encoding::CompatibilityError) {Float("0".encode("utf-32le"))} + assert_raise(Encoding::CompatibilityError) {Float("0".encode("iso-2022-jp"))} + + assert_raise_with_message(ArgumentError, /\u{1f4a1}/) {Float("\u{1f4a1}")} end def test_invalid_str diff --git a/test/ruby/test_gc.rb b/test/ruby/test_gc.rb index 9029f2bda800b1..31ad71a1a18a1a 100644 --- a/test/ruby/test_gc.rb +++ b/test/ruby/test_gc.rb @@ -40,16 +40,16 @@ def use_rgengc? end def test_enable_disable - GC.enable - assert_equal(false, GC.enable) - assert_equal(false, GC.disable) - assert_equal(true, GC.disable) - assert_equal(true, GC.disable) - assert_nil(GC.start) - assert_equal(true, GC.enable) - assert_equal(false, GC.enable) - ensure - GC.enable + EnvUtil.without_gc do + GC.enable + assert_equal(false, GC.enable) + assert_equal(false, GC.disable) + assert_equal(true, GC.disable) + assert_equal(true, GC.disable) + assert_nil(GC.start) + assert_equal(true, GC.enable) + assert_equal(false, GC.enable) + end end def test_gc_config_full_mark_by_default @@ -208,10 +208,9 @@ def test_stat_constraints # marking_time + sweeping_time could differ from time by 1 because they're stored in nanoseconds assert_in_delta stat[:time], stat[:marking_time] + stat[:sweeping_time], 1 assert_equal stat[:total_allocated_pages], stat[:heap_allocated_pages] + stat[:total_freed_pages] - assert_operator stat[:heap_sorted_length], :>=, stat[:heap_eden_pages] + stat[:heap_allocatable_pages], "stat is: " + stat.inspect assert_equal stat[:heap_available_slots], stat[:heap_live_slots] + stat[:heap_free_slots] + stat[:heap_final_slots] assert_equal stat[:heap_live_slots], stat[:total_allocated_objects] - stat[:total_freed_objects] - stat[:heap_final_slots] - assert_equal stat[:heap_allocated_pages], stat[:heap_eden_pages] + stat[:heap_tomb_pages] + assert_equal stat[:heap_allocated_pages], stat[:heap_eden_pages] if use_rgengc? assert_equal stat[:count], stat[:major_gc_count] + stat[:minor_gc_count] @@ -227,23 +226,16 @@ def test_stat_heap GC.stat_heap(0, stat_heap) GC.stat(stat) - GC::INTERNAL_CONSTANTS[:SIZE_POOL_COUNT].times do |i| - begin - reenable_gc = !GC.disable + GC::INTERNAL_CONSTANTS[:HEAP_COUNT].times do |i| + EnvUtil.without_gc do GC.stat_heap(i, stat_heap) GC.stat(stat) - ensure - GC.enable if reenable_gc end assert_equal (GC::INTERNAL_CONSTANTS[:BASE_SLOT_SIZE] + GC::INTERNAL_CONSTANTS[:RVALUE_OVERHEAD]) * (2**i), stat_heap[:slot_size] - assert_operator stat_heap[:heap_allocatable_pages], :<=, stat[:heap_allocatable_pages] assert_operator stat_heap[:heap_eden_pages], :<=, stat[:heap_eden_pages] assert_operator stat_heap[:heap_eden_slots], :>=, 0 - assert_operator stat_heap[:heap_tomb_pages], :<=, stat[:heap_tomb_pages] - assert_operator stat_heap[:heap_tomb_slots], :>=, 0 assert_operator stat_heap[:total_allocated_pages], :>=, 0 - assert_operator stat_heap[:total_freed_pages], :>=, 0 assert_operator stat_heap[:force_major_gc_count], :>=, 0 assert_operator stat_heap[:force_incremental_marking_finish_count], :>=, 0 assert_operator stat_heap[:total_allocated_objects], :>=, 0 @@ -256,7 +248,7 @@ def test_stat_heap assert_equal stat_heap[:slot_size], GC.stat_heap(0)[:slot_size] assert_raise(ArgumentError) { GC.stat_heap(-1) } - assert_raise(ArgumentError) { GC.stat_heap(GC::INTERNAL_CONSTANTS[:SIZE_POOL_COUNT]) } + assert_raise(ArgumentError) { GC.stat_heap(GC::INTERNAL_CONSTANTS[:HEAP_COUNT]) } end def test_stat_heap_all @@ -267,7 +259,7 @@ def test_stat_heap_all GC.stat_heap(0, stat_heap) GC.stat_heap(nil, stat_heap_all) - GC::INTERNAL_CONSTANTS[:SIZE_POOL_COUNT].times do |i| + GC::INTERNAL_CONSTANTS[:HEAP_COUNT].times do |i| GC.stat_heap(nil, stat_heap_all) GC.stat_heap(i, stat_heap) @@ -297,12 +289,8 @@ def test_stat_heap_constraints hash.each { |k, v| stat_heap_sum[k] += v } end - assert_equal stat[:heap_allocatable_pages], stat_heap_sum[:heap_allocatable_pages] assert_equal stat[:heap_eden_pages], stat_heap_sum[:heap_eden_pages] - assert_equal stat[:heap_tomb_pages], stat_heap_sum[:heap_tomb_pages] - assert_equal stat[:heap_available_slots], stat_heap_sum[:heap_eden_slots] + stat_heap_sum[:heap_tomb_slots] - assert_equal stat[:total_allocated_pages], stat_heap_sum[:total_allocated_pages] - assert_equal stat[:total_freed_pages], stat_heap_sum[:total_freed_pages] + assert_equal stat[:heap_available_slots], stat_heap_sum[:heap_eden_slots] assert_equal stat[:total_allocated_objects], stat_heap_sum[:total_allocated_objects] assert_equal stat[:total_freed_objects], stat_heap_sum[:total_freed_objects] end @@ -329,7 +317,7 @@ def test_latest_gc_info assert_separately([], __FILE__, __LINE__, <<-'RUBY') GC.start - count = GC.stat(:heap_free_slots) + GC.stat(:heap_allocatable_pages) * GC::INTERNAL_CONSTANTS[:HEAP_PAGE_OBJ_LIMIT] + count = GC.stat(:heap_free_slots) + GC.stat(:heap_allocatable_slots) count.times{ "a" + "b" } assert_equal :newobj, GC.latest_gc_info[:gc_by] RUBY @@ -374,19 +362,22 @@ def test_latest_gc_info_need_major_by objects.append(100.times.map { '*' }) end - # We need to ensure that no GC gets ran before the call to GC.start since - # it would trigger a major GC. Assertions could allocate objects and - # trigger a GC so we don't run assertions until we perform the major GC. - need_major_by = GC.latest_gc_info(:need_major_by) - GC.start(full_mark: false) # should be upgraded to major - major_by = GC.latest_gc_info(:major_by) + EnvUtil.without_gc do + # We need to ensure that no GC gets ran before the call to GC.start since + # it would trigger a major GC. Assertions could allocate objects and + # trigger a GC so we don't run assertions until we perform the major GC. + need_major_by = GC.latest_gc_info(:need_major_by) + GC.start(full_mark: false) # should be upgraded to major + major_by = GC.latest_gc_info(:major_by) - assert_not_nil(need_major_by) - assert_not_nil(major_by) + assert_not_nil(need_major_by) + assert_not_nil(major_by) + end end def test_latest_gc_info_weak_references_count assert_separately([], __FILE__, __LINE__, <<~RUBY) + GC.disable count = 10_000 # Some weak references may be created, so allow some margin of error error_tolerance = 100 @@ -541,114 +532,40 @@ def test_gc_parameter end def test_gc_parameter_init_slots - assert_separately([], __FILE__, __LINE__, <<~RUBY) + assert_separately([], __FILE__, __LINE__, <<~RUBY, timeout: 60) # Constant from gc.c. GC_HEAP_INIT_SLOTS = 10_000 - GC.stat_heap.each do |_, s| - multiple = s[:slot_size] / (GC::INTERNAL_CONSTANTS[:BASE_SLOT_SIZE] + GC::INTERNAL_CONSTANTS[:RVALUE_OVERHEAD]) - # Allocatable pages are assumed to have lost 1 slot due to alignment. - slots_per_page = (GC::INTERNAL_CONSTANTS[:HEAP_PAGE_OBJ_LIMIT] / multiple) - 1 - total_slots = s[:heap_eden_slots] + s[:heap_allocatable_pages] * slots_per_page - assert_operator(total_slots, :>=, GC_HEAP_INIT_SLOTS, s) + gc_count = GC.stat(:count) + # Fill up all of the size pools to the init slots + GC::INTERNAL_CONSTANTS[:HEAP_COUNT].times do |i| + capa = (GC.stat_heap(i, :slot_size) - GC::INTERNAL_CONSTANTS[:RVALUE_OVERHEAD] - (2 * RbConfig::SIZEOF["void*"])) / RbConfig::SIZEOF["void*"] + while GC.stat_heap(i, :heap_eden_slots) < GC_HEAP_INIT_SLOTS + Array.new(capa) + end end + + assert_equal gc_count, GC.stat(:count) RUBY env = {} - # Make the heap big enough to ensure the heap never needs to grow. - sizes = GC.stat_heap.keys.reverse.map { |i| (i + 1) * 100_000 } + sizes = GC.stat_heap.keys.reverse.map { 20_000 } GC.stat_heap.keys.each do |heap| env["RUBY_GC_HEAP_#{heap}_INIT_SLOTS"] = sizes[heap].to_s end - assert_separately([env, "-W0"], __FILE__, __LINE__, <<~RUBY) - SIZES = #{sizes} - GC.stat_heap.each do |i, s| - multiple = s[:slot_size] / (GC::INTERNAL_CONSTANTS[:BASE_SLOT_SIZE] + GC::INTERNAL_CONSTANTS[:RVALUE_OVERHEAD]) - # Allocatable pages are assumed to have lost 1 slot due to alignment. - slots_per_page = (GC::INTERNAL_CONSTANTS[:HEAP_PAGE_OBJ_LIMIT] / multiple) - 1 - - total_slots = s[:heap_eden_slots] + s[:heap_allocatable_pages] * slots_per_page - - # The delta is calculated as follows: - # - For allocated pages, each page can vary by 1 slot due to alignment. - # - For allocatable pages, we can end up with at most 1 extra page of slots. - assert_in_delta(SIZES[i], total_slots, s[:heap_eden_pages] + slots_per_page, s) - end - RUBY - - # Check that the configured sizes are "remembered" across GC invocations. - assert_separately([env, "-W0"], __FILE__, __LINE__, <<~RUBY) - SIZES = #{sizes} - - # Fill size pool 0 with transient objects. - ary = [] - while GC.stat_heap(0, :heap_allocatable_pages) != 0 - ary << Object.new - end - ary.clear - ary = nil - - # Clear all the objects that were allocated. - GC.start - - # Check that we still have the same number of slots as initially configured. - GC.stat_heap.each do |i, s| - multiple = s[:slot_size] / (GC::INTERNAL_CONSTANTS[:BASE_SLOT_SIZE] + GC::INTERNAL_CONSTANTS[:RVALUE_OVERHEAD]) - # Allocatable pages are assumed to have lost 1 slot due to alignment. - slots_per_page = (GC::INTERNAL_CONSTANTS[:HEAP_PAGE_OBJ_LIMIT] / multiple) - 1 - - total_slots = s[:heap_eden_slots] + s[:heap_allocatable_pages] * slots_per_page - - # The delta is calculated as follows: - # - For allocated pages, each page can vary by 1 slot due to alignment. - # - For allocatable pages, we can end up with at most 1 extra page of slots. - assert_in_delta(SIZES[i], total_slots, s[:heap_eden_pages] + slots_per_page, s) - end - RUBY - - # Check that we don't grow the heap in minor GC if we have alloctable pages. - env["RUBY_GC_HEAP_FREE_SLOTS_MIN_RATIO"] = "0.3" - env["RUBY_GC_HEAP_FREE_SLOTS_GOAL_RATIO"] = "0.99" - env["RUBY_GC_HEAP_FREE_SLOTS_MAX_RATIO"] = "1.0" - env["RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR"] = "100" # Large value to disable major GC - assert_separately([env, "-W0"], __FILE__, __LINE__, <<~RUBY) + assert_separately([env, "-W0"], __FILE__, __LINE__, <<~RUBY, timeout: 60) SIZES = #{sizes} - # Run a major GC to clear out dead objects. - GC.start - - # Disable GC so we can control when GC is ran. - GC.disable - - # Run minor GC enough times so that we don't grow the heap because we - # haven't yet ran RVALUE_OLD_AGE minor GC cycles. - GC::INTERNAL_CONSTANTS[:RVALUE_OLD_AGE].times { GC.start(full_mark: false) } - - # Fill size pool 0 to over 50% full so that the number of allocatable - # pages that will be created will be over the number in heap_allocatable_pages - # (calculated using RUBY_GC_HEAP_FREE_SLOTS_MIN_RATIO). - # 70% was chosen here to guarantee that. - ary = [] - while GC.stat_heap(0, :heap_allocatable_pages) > - (GC.stat_heap(0, :heap_allocatable_pages) + GC.stat_heap(0, :heap_eden_pages)) * 0.3 - ary << Object.new + gc_count = GC.stat(:count) + # Fill up all of the size pools to the init slots + GC::INTERNAL_CONSTANTS[:HEAP_COUNT].times do |i| + capa = (GC.stat_heap(i, :slot_size) - GC::INTERNAL_CONSTANTS[:RVALUE_OVERHEAD] - (2 * RbConfig::SIZEOF["void*"])) / RbConfig::SIZEOF["void*"] + while GC.stat_heap(i, :heap_eden_slots) < SIZES[i] + Array.new(capa) + end end - GC.start(full_mark: false) - - # Check that we still have the same number of slots as initially configured. - GC.stat_heap.each do |i, s| - multiple = s[:slot_size] / (GC::INTERNAL_CONSTANTS[:BASE_SLOT_SIZE] + GC::INTERNAL_CONSTANTS[:RVALUE_OVERHEAD]) - # Allocatable pages are assumed to have lost 1 slot due to alignment. - slots_per_page = (GC::INTERNAL_CONSTANTS[:HEAP_PAGE_OBJ_LIMIT] / multiple) - 1 - - total_slots = s[:heap_eden_slots] + s[:heap_allocatable_pages] * slots_per_page - - # The delta is calculated as follows: - # - For allocated pages, each page can vary by 1 slot due to alignment. - # - For allocatable pages, we can end up with at most 1 extra page of slots. - assert_in_delta(SIZES[i], total_slots, s[:heap_eden_pages] + slots_per_page, s) - end + assert_equal gc_count, GC.stat(:count) RUBY end @@ -748,7 +665,7 @@ def test_thrashing_for_young_objects # Should not be thrashing in page creation assert_equal before_stats[:heap_allocated_pages], after_stats[:heap_allocated_pages], debug_msg - assert_equal 0, after_stats[:heap_tomb_pages], debug_msg + assert_equal 0, after_stats[:heap_empty_pages], debug_msg assert_equal 0, after_stats[:total_freed_pages], debug_msg # Only young objects, so should not trigger major GC assert_equal before_stats[:major_gc_count], after_stats[:major_gc_count], debug_msg @@ -848,23 +765,17 @@ def test_gc_stress_at_startup end def test_gc_disabled_start - begin - disabled = GC.disable + EnvUtil.without_gc do c = GC.count GC.start assert_equal 1, GC.count - c - ensure - GC.enable unless disabled end - begin - disabled = GC.disable + EnvUtil.without_gc do c = GC.count GC.start(immediate_mark: false, immediate_sweep: false) 10_000.times { Object.new } assert_equal 1, GC.count - c - ensure - GC.enable unless disabled end end @@ -939,28 +850,26 @@ def test_ast_node_buffer end def test_old_to_young_reference - original_gc_disabled = GC.disable + EnvUtil.without_gc do + require "objspace" - require "objspace" + old_obj = Object.new + 4.times { GC.start } - old_obj = Object.new - 4.times { GC.start } + assert_include ObjectSpace.dump(old_obj), '"old":true' - assert_include ObjectSpace.dump(old_obj), '"old":true' + young_obj = Object.new + old_obj.instance_variable_set(:@test, young_obj) - young_obj = Object.new - old_obj.instance_variable_set(:@test, young_obj) + # Not immediately promoted to old generation + 3.times do + assert_not_include ObjectSpace.dump(young_obj), '"old":true' + GC.start + end - # Not immediately promoted to old generation - 3.times do - assert_not_include ObjectSpace.dump(young_obj), '"old":true' + # Takes 4 GC to promote to old generation GC.start + assert_include ObjectSpace.dump(young_obj), '"old":true' end - - # Takes 4 GC to promote to old generation - GC.start - assert_include ObjectSpace.dump(young_obj), '"old":true' - ensure - GC.enable if !original_gc_disabled end end diff --git a/test/ruby/test_gc_compact.rb b/test/ruby/test_gc_compact.rb index c331968b3d5c13..26d7c71687fa96 100644 --- a/test/ruby/test_gc_compact.rb +++ b/test/ruby/test_gc_compact.rb @@ -283,7 +283,7 @@ def test_updating_references_for_embed_frozen_shared_arrays end; end - def test_moving_arrays_down_size_pools + def test_moving_arrays_down_heaps omit if GC::INTERNAL_CONSTANTS[:SIZE_POOL_COUNT] == 1 assert_separately(%w[-robjspace], "#{<<~"begin;"}\n#{<<~"end;"}", timeout: 10) @@ -305,7 +305,7 @@ def test_moving_arrays_down_size_pools end; end - def test_moving_arrays_up_size_pools + def test_moving_arrays_up_heaps omit if GC::INTERNAL_CONSTANTS[:SIZE_POOL_COUNT] == 1 assert_separately(%w[-robjspace], "#{<<~"begin;"}\n#{<<~"end;"}", timeout: 10) @@ -329,7 +329,7 @@ def test_moving_arrays_up_size_pools end; end - def test_moving_objects_between_size_pools + def test_moving_objects_between_heaps omit if GC::INTERNAL_CONSTANTS[:SIZE_POOL_COUNT] == 1 assert_separately(%w[-robjspace], "#{<<~"begin;"}\n#{<<~"end;"}", timeout: 60) @@ -361,7 +361,7 @@ def add_ivars end; end - def test_moving_strings_up_size_pools + def test_moving_strings_up_heaps omit if GC::INTERNAL_CONSTANTS[:SIZE_POOL_COUNT] == 1 assert_separately(%w[-robjspace], "#{<<~"begin;"}\n#{<<~"end;"}", timeout: 30) @@ -382,7 +382,7 @@ def test_moving_strings_up_size_pools end; end - def test_moving_strings_down_size_pools + def test_moving_strings_down_heaps omit if GC::INTERNAL_CONSTANTS[:SIZE_POOL_COUNT] == 1 assert_separately(%w[-robjspace], "#{<<~"begin;"}\n#{<<~"end;"}", timeout: 30) @@ -402,7 +402,7 @@ def test_moving_strings_down_size_pools end; end - def test_moving_hashes_down_size_pools + def test_moving_hashes_down_heaps omit if GC::INTERNAL_CONSTANTS[:SIZE_POOL_COUNT] == 1 # AR and ST hashes are in the same size pool on 32 bit omit unless RbConfig::SIZEOF["uint64_t"] <= RbConfig::SIZEOF["void*"] @@ -425,7 +425,7 @@ def test_moving_hashes_down_size_pools end; end - def test_moving_objects_between_size_pools_keeps_shape_frozen_status + def test_moving_objects_between_heaps_keeps_shape_frozen_status # [Bug #19536] assert_separately([], "#{<<~"begin;"}\n#{<<~"end;"}") begin; diff --git a/test/ruby/test_hash.rb b/test/ruby/test_hash.rb index f60ba0cffd2743..9578e71f0093ca 100644 --- a/test/ruby/test_hash.rb +++ b/test/ruby/test_hash.rb @@ -869,6 +869,33 @@ def test_to_s $, = nil end + def test_inspect + no_quote = '{a: 1, a!: 1, a?: 1}' + quote0 = '{"": 1}' + quote1 = '{"0": 1, "!": 1, "%": 1, "&": 1, "*": 1, "+": 1, "-": 1, "/": 1, "<": 1, ">": 1, "^": 1, "`": 1, "|": 1, "~": 1}' + quote2 = '{"@a": 1, "$a": 1, "+@": 1, "a=": 1, "[]": 1}' + quote3 = '{"a\"b": 1, "@@a": 1, "<=>": 1, "===": 1, "[]=": 1}' + assert_equal(no_quote, eval(no_quote).inspect) + assert_equal(quote0, eval(quote0).inspect) + assert_equal(quote1, eval(quote1).inspect) + assert_equal(quote2, eval(quote2).inspect) + assert_equal(quote3, eval(quote3).inspect) + begin + enc = Encoding.default_external + Encoding.default_external = Encoding::ASCII + utf8_ascii_hash = '{"\\u3042": 1}' + assert_equal(eval(utf8_ascii_hash).inspect, utf8_ascii_hash) + Encoding.default_external = Encoding::UTF_8 + utf8_hash = "{\u3042: 1}" + assert_equal(eval(utf8_hash).inspect, utf8_hash) + Encoding.default_external = Encoding::Windows_31J + sjis_hash = "{\x87]: 1}".force_encoding('sjis') + assert_equal(eval(sjis_hash).inspect, sjis_hash) + ensure + Encoding.default_external = enc + end + end + def test_update h1 = @cls[ 1 => 2, 2 => 3, 3 => 4 ] h2 = @cls[ 2 => 'two', 4 => 'four' ] @@ -2268,7 +2295,7 @@ def test_ar2st_insert h = obj.h h[obj] = true - assert_equal '{0=>0, 1=>1, 2=>2, 3=>3, 4=>4, 5=>5, 6=>6, 7=>7, 8=>8, 9=>9, test=>true}', h.inspect + assert_equal '{0 => 0, 1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5, 6 => 6, 7 => 7, 8 => 8, 9 => 9, test => true}', h.inspect end def test_ar2st_delete @@ -2282,7 +2309,7 @@ def obj2.hash h[obj2] = true h.delete obj - assert_equal '{0=>0, 1=>1, 2=>2, 3=>3, 4=>4, 5=>5, 6=>6, 7=>7, 8=>8, 9=>9}', h.inspect + assert_equal '{0 => 0, 1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5, 6 => 6, 7 => 7, 8 => 8, 9 => 9}', h.inspect end def test_ar2st_lookup diff --git a/test/ruby/test_io.rb b/test/ruby/test_io.rb index 8b4dc1ed98f746..a623fd1d156387 100644 --- a/test/ruby/test_io.rb +++ b/test/ruby/test_io.rb @@ -2002,6 +2002,14 @@ def test_readline_chomp_true end end + def test_readline_incompatible_rs + first_line = File.open(__FILE__, &:gets).encode("utf-32le") + File.open(__FILE__, encoding: "utf-8:utf-32le") {|f| + assert_equal first_line, f.readline + assert_raise(ArgumentError) {f.readline("\0")} + } + end + def test_set_lineno_readline pipe(proc do |w| w.puts "foo" @@ -3876,8 +3884,10 @@ def test_close_uninitialized end def test_open_fifo_does_not_block_other_threads - mkcdtmpdir { + mkcdtmpdir do File.mkfifo("fifo") + rescue NotImplementedError + else assert_separately([], <<-'EOS') t1 = Thread.new { open("fifo", "r") {|r| @@ -3892,8 +3902,32 @@ def test_open_fifo_does_not_block_other_threads t1_value, _ = assert_join_threads([t1, t2]) assert_equal("foo", t1_value) EOS - } - end if /mswin|mingw|bccwin|cygwin/ !~ RUBY_PLATFORM + end + end + + def test_open_fifo_restart_at_signal_intterupt + mkcdtmpdir do + File.mkfifo("fifo") + rescue NotImplementedError + else + wait = EnvUtil.apply_timeout_scale(0.1) + data = "writing to fifo" + + # Do not use assert_separately, because reading from stdin + # prevents to reproduce [Bug #20708] + assert_in_out_err(["-e", "#{<<~"begin;"}\n#{<<~'end;'}"], [], [data]) + wait, data = #{wait}, #{data.dump} + ; + begin; + trap(:USR1) {} + Thread.new do + sleep wait; Process.kill(:USR1, $$) + sleep wait; File.write("fifo", data) + end + puts File.read("fifo") + end; + end + end if Signal.list[:USR1] # Pointless on platforms without signal def test_open_flag make_tempfile do |t| diff --git a/test/ruby/test_io_buffer.rb b/test/ruby/test_io_buffer.rb index 7a58ec0c5a86cf..178ed050031c56 100644 --- a/test/ruby/test_io_buffer.rb +++ b/test/ruby/test_io_buffer.rb @@ -236,6 +236,43 @@ def test_slice_bounds_error end end + def test_slice_readonly + hello = %w"Hello World".join(" ").freeze + buffer = IO::Buffer.for(hello) + slice = buffer.slice + assert_predicate slice, :readonly? + assert_raise IO::Buffer::AccessError do + # This breaks the literal in string pool and many other tests in this file. + slice.set_string("Adios", 0, 5) + end + assert_equal "Hello World", hello + end + + def test_transfer + hello = %w"Hello World".join(" ") + buffer = IO::Buffer.for(hello) + transferred = buffer.transfer + assert_equal "Hello World", transferred.get_string + assert_predicate buffer, :null? + assert_raise IO::Buffer::AccessError do + transferred.set_string("Goodbye") + end + assert_equal "Hello World", hello + end + + def test_transfer_in_block + hello = %w"Hello World".join(" ") + buffer = IO::Buffer.for(hello, &:transfer) + assert_equal "Hello World", buffer.get_string + buffer.set_string("Ciao!") + assert_equal "Ciao! World", hello + hello.freeze + assert_raise IO::Buffer::AccessError do + buffer.set_string("Hola") + end + assert_equal "Ciao! World", hello + end + def test_locked buffer = IO::Buffer.new(128, IO::Buffer::INTERNAL|IO::Buffer::LOCKED) @@ -413,9 +450,11 @@ def test_invalidation input.close end - def hello_world_tempfile + def hello_world_tempfile(repeats = 1) io = Tempfile.new - io.write("Hello World") + repeats.times do + io.write("Hello World") + end io.seek(0) yield io @@ -447,6 +486,15 @@ def test_read_with_with_offset end end + def test_read_with_length_and_offset + hello_world_tempfile(100) do |io| + buffer = IO::Buffer.new(1024) + # Only read 24 bytes from the file, as we are starting at offset 1000 in the buffer. + assert_equal 24, buffer.read(io, 0, 1000) + assert_equal "Hello World", buffer.get_string(1000, 11) + end + end + def test_write io = Tempfile.new @@ -460,6 +508,19 @@ def test_write io.close! end + def test_write_with_length_and_offset + io = Tempfile.new + + buffer = IO::Buffer.new(5) + buffer.set_string("Hello") + buffer.write(io, 4, 1) + + io.seek(0) + assert_equal "ello", io.read(4) + ensure + io.close! + end + def test_pread io = Tempfile.new io.write("Hello World") diff --git a/test/ruby/test_iseq.rb b/test/ruby/test_iseq.rb index b2bccb40f82c80..49aa4c5abd582e 100644 --- a/test/ruby/test_iseq.rb +++ b/test/ruby/test_iseq.rb @@ -591,7 +591,7 @@ def assert_iseq_to_binary(code, mesg = nil) end def test_to_binary_with_hidden_local_variables - assert_iseq_to_binary("for foo in bar; end") + assert_iseq_to_binary("for _foo in bar; end") bin = RubyVM::InstructionSequence.compile(<<-RUBY).to_binary Object.new.instance_eval do @@ -868,7 +868,7 @@ def test_ibf_bignum def test_compile_prism_with_file Tempfile.create(%w"test_iseq .rb") do |f| - f.puts "name = 'Prism'; puts 'hello'" + f.puts "_name = 'Prism'; puts 'hello'" f.close assert_nothing_raised(TypeError) do diff --git a/test/ruby/test_iterator.rb b/test/ruby/test_iterator.rb index 820d5591c1d192..1bb655d52e3d86 100644 --- a/test/ruby/test_iterator.rb +++ b/test/ruby/test_iterator.rb @@ -175,10 +175,13 @@ def m2 end def test_block_given + verbose_bak, $VERBOSE = $VERBOSE, nil assert(m1{p 'test'}) assert(m2{p 'test'}) assert(!m1()) assert(!m2()) + ensure + $VERBOSE = verbose_bak end def m3(var, &block) @@ -308,7 +311,18 @@ def test_proc_return2 def test_ljump assert_raise(LocalJumpError) {get_block{break}.call} - assert_raise(LocalJumpError) {proc_call2(get_block{break}){}} + begin + verbose_bak, $VERBOSE = $VERBOSE, nil + # See the commit https://github.com/ruby/ruby/commit/7d8a415bc2d08a1b5e9d1ea802493b6eeb99c219 + # This block is not used but this is intentional. + # | + # +-----------------------------------------------------+ + # | + # vv + assert_raise(LocalJumpError) {proc_call2(get_block{break}){}} + ensure + $VERBOSE = verbose_bak + end # cannot use assert_nothing_raised due to passing block. begin diff --git a/test/ruby/test_keyword.rb b/test/ruby/test_keyword.rb index 4c6c35e6c332de..6da1b73c151d1c 100644 --- a/test/ruby/test_keyword.rb +++ b/test/ruby/test_keyword.rb @@ -193,7 +193,7 @@ def test_keyword_splat_nil # cfunc call assert_equal(nil, p(**nil)) - def self.a0; end + def self.a0(&); end assert_equal(nil, a0(**nil)) assert_equal(nil, :a0.to_proc.call(self, **nil)) assert_equal(nil, a0(**nil, &:block)) @@ -2863,7 +2863,7 @@ def self.get(_, _, h, &block) end def test_top_ruby2_keywords - assert_in_out_err([], <<-INPUT, ["[1, 2, 3]", "{:k=>1}"], []) + assert_in_out_err([], <<-INPUT, ["[1, 2, 3]", "{k: 1}"], []) def bar(*a, **kw) p a, kw end diff --git a/test/ruby/test_literal.rb b/test/ruby/test_literal.rb index 8732d8f0d0f19a..1fdc6aa853a85e 100644 --- a/test/ruby/test_literal.rb +++ b/test/ruby/test_literal.rb @@ -39,6 +39,8 @@ def test_self end def test_string + verbose_bak, $VERBOSE = $VERBOSE, nil # prevent syntax warnings + assert_instance_of String, ?a assert_equal "a", ?a assert_instance_of String, ?A @@ -94,6 +96,9 @@ def test_string assert_equal "ab", eval("?a 'b'") assert_equal "a\nb", eval("<0}: key not found: :aa") do + assert_raise_with_message(NoMatchingPatternKeyError, "{a: 0}: key not found: :aa") do {a: 0} => {aa:} raise aa # suppress "unused variable: aa" warning rescue NoMatchingPatternKeyError => e @@ -1673,7 +1673,7 @@ def test_single_pattern_error_hash_pattern raise e end - assert_raise_with_message(NoMatchingPatternKeyError, "{:a=>{:b=>0}}: key not found: :bb") do + assert_raise_with_message(NoMatchingPatternKeyError, "{a: {b: 0}}: key not found: :bb") do {a: {b: 0}} => {a: {bb:}} raise bb # suppress "unused variable: bb" warning rescue NoMatchingPatternKeyError => e @@ -1682,15 +1682,15 @@ def test_single_pattern_error_hash_pattern raise e end - assert_raise_with_message(NoMatchingPatternError, "{:a=>0}: 1 === 0 does not return true") do + assert_raise_with_message(NoMatchingPatternError, "{a: 0}: 1 === 0 does not return true") do {a: 0} => {a: 1} end - assert_raise_with_message(NoMatchingPatternError, "{:a=>0}: {:a=>0} is not empty") do + assert_raise_with_message(NoMatchingPatternError, "{a: 0}: {a: 0} is not empty") do {a: 0} => {} end - assert_raise_with_message(NoMatchingPatternError, "[{:a=>0}]: rest of {:a=>0} is not empty") do + assert_raise_with_message(NoMatchingPatternError, "[{a: 0}]: rest of {a: 0} is not empty") do [{a: 0}] => [{**nil}] end end diff --git a/test/ruby/test_proc.rb b/test/ruby/test_proc.rb index 2f91da8aa8f341..dd05d09a49ba03 100644 --- a/test/ruby/test_proc.rb +++ b/test/ruby/test_proc.rb @@ -207,18 +207,24 @@ def test_method_to_proc end def test_block_given_method + verbose_bak, $VERBOSE = $VERBOSE, nil m = method(:m_block_given?) assert(!m.call, "without block") assert(m.call {}, "with block") assert(!m.call, "without block second") + ensure + $VERBOSE = verbose_bak end def test_block_given_method_to_proc + verbose_bak, $VERBOSE = $VERBOSE, nil bug8341 = '[Bug #8341]' m = method(:m_block_given?).to_proc assert(!m.call, "#{bug8341} without block") assert(m.call {}, "#{bug8341} with block") assert(!m.call, "#{bug8341} without block second") + ensure + $VERBOSE = verbose_bak end def test_block_persist_between_calls diff --git a/test/ruby/test_process.rb b/test/ruby/test_process.rb index cdd4d45ffd7e97..a780801ae01463 100644 --- a/test/ruby/test_process.rb +++ b/test/ruby/test_process.rb @@ -1874,8 +1874,6 @@ def test_daemon_default end def test_daemon_noclose - pend "macOS 15 beta is not working with this test" if /darwin/ =~ RUBY_PLATFORM && /15/ =~ `sw_vers -productVersion` - data = IO.popen("-", "r+") do |f| break f.read if f Process.daemon(false, true) @@ -2767,7 +2765,7 @@ def test_warmup_frees_pages begin; GC.start - TIMES = 10_000 + TIMES = 100_000 ary = Array.new(TIMES) TIMES.times do |i| ary[i] = Object.new @@ -2778,15 +2776,12 @@ def test_warmup_frees_pages # Disable GC so we can make sure GC only runs in Process.warmup GC.disable - total_pages_before = GC.stat_heap.map { |_, v| v[:heap_eden_pages] + v[:heap_allocatable_pages] } + total_slots_before = GC.stat(:heap_available_slots) + GC.stat(:heap_allocatable_slots) Process.warmup - # Number of pages freed should cause equal increase in number of allocatable pages. - total_pages_before.each_with_index do |val, i| - assert_equal(val, GC.stat_heap(i, :heap_eden_pages) + GC.stat_heap(i, :heap_allocatable_pages), "size pool: #{i}") - end - assert_equal(0, GC.stat(:heap_tomb_pages)) + assert_equal(total_slots_before, GC.stat(:heap_available_slots) + GC.stat(:heap_allocatable_slots)) + assert_equal(0, GC.stat(:heap_empty_pages)) assert_operator(GC.stat(:total_freed_pages), :>, 0) end; end diff --git a/test/ruby/test_range.rb b/test/ruby/test_range.rb index b7541424d113d5..e0c1d20bd24e82 100644 --- a/test/ruby/test_range.rb +++ b/test/ruby/test_range.rb @@ -427,11 +427,11 @@ def test_step_non_numeric_range assert_raise(ArgumentError) { (...'aaa').step('a') } # step is not provided - assert_raise(ArgumentError) { ('a'...'aaaa').step } + assert_raise(ArgumentError) { (Time.new(2022)...Time.new(2023)).step } # step is incompatible - assert_raise(TypeError) { ('a'...'aaaa').step(1) {} } - assert_raise(TypeError) { ('a'...'aaaa').step(1).to_a } + assert_raise(TypeError) { (Time.new(2022)...Time.new(2023)).step('a') {} } + assert_raise(TypeError) { (Time.new(2022)...Time.new(2023)).step('a').to_a } # step is compatible, but shouldn't convert into numeric domain: a = [] @@ -467,6 +467,110 @@ def test_step_non_numeric_range assert_equal([], a) end + def test_step_string_legacy + # finite + a = [] + ('a'..'g').step(2) { a << _1 } + assert_equal(%w[a c e g], a) + + assert_kind_of(Enumerator, ('a'..'g').step(2)) + assert_equal(%w[a c e g], ('a'..'g').step(2).to_a) + + a = [] + ('a'...'g').step(2) { a << _1 } + assert_equal(%w[a c e], a) + + assert_kind_of(Enumerator, ('a'...'g').step(2)) + assert_equal(%w[a c e], ('a'...'g').step(2).to_a) + + # endless + a = [] + ('a'...).step(2) { a << _1; break if a.size == 3 } + assert_equal(%w[a c e], a) + + assert_kind_of(Enumerator, ('a'...).step(2)) + assert_equal(%w[a c e], ('a'...).step(2).take(3)) + + # beginless + assert_raise(ArgumentError) { (...'g').step(2) {} } + assert_raise(ArgumentError) { (...'g').step(2) } + + # step is not provided + a = [] + ('a'..'d').step { a << _1 } + assert_equal(%w[a b c d], a) + + assert_kind_of(Enumerator, ('a'..'d').step) + assert_equal(%w[a b c d], ('a'..'d').step.to_a) + + a = [] + ('a'...'d').step { a << _1 } + assert_equal(%w[a b c], a) + + assert_kind_of(Enumerator, ('a'...'d').step) + assert_equal(%w[a b c], ('a'...'d').step.to_a) + + # endless + a = [] + ('a'...).step { a << _1; break if a.size == 3 } + assert_equal(%w[a b c], a) + + assert_kind_of(Enumerator, ('a'...).step) + assert_equal(%w[a b c], ('a'...).step.take(3)) + end + + def test_step_symbol_legacy + # finite + a = [] + (:a..:g).step(2) { a << _1 } + assert_equal(%i[a c e g], a) + + assert_kind_of(Enumerator, (:a..:g).step(2)) + assert_equal(%i[a c e g], (:a..:g).step(2).to_a) + + a = [] + (:a...:g).step(2) { a << _1 } + assert_equal(%i[a c e], a) + + assert_kind_of(Enumerator, (:a...:g).step(2)) + assert_equal(%i[a c e], (:a...:g).step(2).to_a) + + # endless + a = [] + (:a...).step(2) { a << _1; break if a.size == 3 } + assert_equal(%i[a c e], a) + + assert_kind_of(Enumerator, (:a...).step(2)) + assert_equal(%i[a c e], (:a...).step(2).take(3)) + + # beginless + assert_raise(ArgumentError) { (...:g).step(2) {} } + assert_raise(ArgumentError) { (...:g).step(2) } + + # step is not provided + a = [] + (:a..:d).step { a << _1 } + assert_equal(%i[a b c d], a) + + assert_kind_of(Enumerator, (:a..:d).step) + assert_equal(%i[a b c d], (:a..:d).step.to_a) + + a = [] + (:a...:d).step { a << _1 } + assert_equal(%i[a b c], a) + + assert_kind_of(Enumerator, (:a...:d).step) + assert_equal(%i[a b c], (:a...:d).step.to_a) + + # endless + a = [] + (:a...).step { a << _1; break if a.size == 3 } + assert_equal(%i[a b c], a) + + assert_kind_of(Enumerator, (:a...).step) + assert_equal(%i[a b c], (:a...).step.take(3)) + end + def test_step_bug15537 assert_equal([10.0, 9.0, 8.0, 7.0], (10 ..).step(-1.0).take(4)) assert_equal([10.0, 9.0, 8.0, 7.0], (10.0 ..).step(-1).take(4)) @@ -1367,6 +1471,7 @@ def test_overlap? assert_operator((..3), :overlap?, (3..)) assert_operator((nil..nil), :overlap?, (3..)) assert_operator((nil...nil), :overlap?, (nil..)) + assert_operator((nil..nil), :overlap?, (..3)) assert_raise(TypeError) { (1..3).overlap?(1) } diff --git a/test/ruby/test_rubyoptions.rb b/test/ruby/test_rubyoptions.rb index 998a8508300408..a14d827bb67e78 100644 --- a/test/ruby/test_rubyoptions.rb +++ b/test/ruby/test_rubyoptions.rb @@ -877,7 +877,7 @@ module SEGVTest end def assert_segv(args, message=nil, list: SEGVTest::ExpectedStderrList, **opt, &block) - pend "macOS 15 beta is not working with this assertion" if /darwin/ =~ RUBY_PLATFORM && /15/ =~ `sw_vers -productVersion` + pend "macOS 15 beta is not working with this assertion" if macos?(15) # We want YJIT to be enabled in the subprocess if it's enabled for us # so that the Ruby description matches. @@ -922,7 +922,7 @@ def test_segv_setproctitle end def assert_crash_report(path, cmd = nil, &block) - pend "macOS 15 beta is not working with this assertion" if /darwin/ =~ RUBY_PLATFORM && /15/ =~ `sw_vers -productVersion` + pend "macOS 15 beta is not working with this assertion" if macos?(15) Dir.mktmpdir("ruby_crash_report") do |dir| list = SEGVTest::ExpectedStderrList diff --git a/test/ruby/test_settracefunc.rb b/test/ruby/test_settracefunc.rb index 1ad86744ef322e..868015947e53dd 100644 --- a/test/ruby/test_settracefunc.rb +++ b/test/ruby/test_settracefunc.rb @@ -2338,7 +2338,6 @@ def check_with_events(trace_point_events, expected_events = trace_point_events) method_for_enable_target1 end - exp_events = all_events assert_equal all_events.keep_if { |(ev)| expected_events.include? ev }, events end diff --git a/test/ruby/test_sleep.rb b/test/ruby/test_sleep.rb index 61002b8b1872d4..991b73ebd50757 100644 --- a/test/ruby/test_sleep.rb +++ b/test/ruby/test_sleep.rb @@ -4,14 +4,13 @@ class TestSleep < Test::Unit::TestCase def test_sleep_5sec - GC.disable - start = Process.clock_gettime(Process::CLOCK_MONOTONIC) - sleep 5 - slept = Process.clock_gettime(Process::CLOCK_MONOTONIC) - start - bottom = 5.0 - assert_operator(slept, :>=, bottom) - assert_operator(slept, :<=, 6.0, "[ruby-core:18015]: longer than expected") - ensure - GC.enable + EnvUtil.without_gc do + start = Process.clock_gettime(Process::CLOCK_MONOTONIC) + sleep 5 + slept = Process.clock_gettime(Process::CLOCK_MONOTONIC) - start + bottom = 5.0 + assert_operator(slept, :>=, bottom) + assert_operator(slept, :<=, 6.0, "[ruby-core:18015]: longer than expected") + end end end diff --git a/test/ruby/test_sprintf.rb b/test/ruby/test_sprintf.rb index 8cf2c63a203dc7..498f93aec4fa37 100644 --- a/test/ruby/test_sprintf.rb +++ b/test/ruby/test_sprintf.rb @@ -235,7 +235,7 @@ def test_rational_precision def test_hash options = {:capture=>/\d+/} - assert_equal("with options {:capture=>/\\d+/}", sprintf("with options %p" % options)) + assert_equal("with options #{options.inspect}", sprintf("with options %p" % options)) end def test_inspect diff --git a/test/ruby/test_string.rb b/test/ruby/test_string.rb index 7b3d63dd1b5c80..ba8d86d442d225 100644 --- a/test/ruby/test_string.rb +++ b/test/ruby/test_string.rb @@ -662,8 +662,8 @@ def test_concat_literals assert_equal(Encoding::UTF_8, "#{s}x".encoding) end - def test_string_interpolations_across_size_pools_get_embedded - omit if GC::INTERNAL_CONSTANTS[:SIZE_POOL_COUNT] == 1 + def test_string_interpolations_across_heaps_get_embedded + omit if GC::INTERNAL_CONSTANTS[:HEAP_COUNT] == 1 require 'objspace' base_slot_size = GC::INTERNAL_CONSTANTS[:BASE_SLOT_SIZE] @@ -3630,6 +3630,55 @@ def test_bytesplice assert_bytesplice_raise(ArgumentError, S("hello"), 0..-1, "bye", 0, 3) end + def test_append_bytes_into_binary + buf = S("".b) + assert_equal Encoding::BINARY, buf.encoding + + buf.append_as_bytes(S("hello")) + assert_equal "hello".b, buf + assert_equal Encoding::BINARY, buf.encoding + + buf.append_as_bytes(S("ã“ã‚“ã«ã¡ã¯")) + assert_equal S("helloã“ã‚“ã«ã¡ã¯".b), buf + assert_equal Encoding::BINARY, buf.encoding + end + + def test_append_bytes_into_utf8 + buf = S("") + assert_equal Encoding::UTF_8, buf.encoding + + buf.append_as_bytes(S("hello")) + assert_equal S("hello"), buf + assert_equal Encoding::UTF_8, buf.encoding + assert_predicate buf, :ascii_only? + assert_predicate buf, :valid_encoding? + + buf.append_as_bytes(S("ã“ã‚“ã«ã¡ã¯")) + assert_equal S("helloã“ã‚“ã«ã¡ã¯"), buf + assert_equal Encoding::UTF_8, buf.encoding + refute_predicate buf, :ascii_only? + assert_predicate buf, :valid_encoding? + + buf.append_as_bytes(S("\xE2\x82".b)) + assert_equal S("helloã“ã‚“ã«ã¡ã¯\xE2\x82"), buf + assert_equal Encoding::UTF_8, buf.encoding + refute_predicate buf, :valid_encoding? + + buf.append_as_bytes(S("\xAC".b)) + assert_equal S("helloã“ã‚“ã«ã¡ã¯â‚¬"), buf + assert_equal Encoding::UTF_8, buf.encoding + assert_predicate buf, :valid_encoding? + end + + def test_append_bytes_into_utf32 + buf = S("abc".encode(Encoding::UTF_32LE)) + assert_equal Encoding::UTF_32LE, buf.encoding + + buf.append_as_bytes("def") + assert_equal Encoding::UTF_32LE, buf.encoding + refute_predicate buf, :valid_encoding? + end + def test_chilled_string chilled_string = eval('"chilled"') diff --git a/test/ruby/test_string_memory.rb b/test/ruby/test_string_memory.rb index e264dd57050f7e..a93a3bd54afcea 100644 --- a/test/ruby/test_string_memory.rb +++ b/test/ruby/test_string_memory.rb @@ -6,32 +6,31 @@ class TestStringMemory < Test::Unit::TestCase def capture_allocations(klass) allocations = [] - GC.start - GC.disable - generation = GC.count + EnvUtil.without_gc do + GC.start + generation = GC.count - ObjectSpace.trace_object_allocations do - yield + ObjectSpace.trace_object_allocations do + yield - ObjectSpace.each_object(klass) do |instance| - allocations << instance if ObjectSpace.allocation_generation(instance) == generation + ObjectSpace.each_object(klass) do |instance| + allocations << instance if ObjectSpace.allocation_generation(instance) == generation + end end - end - return allocations.map do |instance| - [ - ObjectSpace.allocation_sourcefile(instance), - ObjectSpace.allocation_sourceline(instance), - instance.class, - instance, - ] - end.select do |path,| - # drop strings not created in this file - # (the parallel testing framework may create strings in a separate thread) - path == __FILE__ + return allocations.map do |instance| + [ + ObjectSpace.allocation_sourcefile(instance), + ObjectSpace.allocation_sourceline(instance), + instance.class, + instance, + ] + end.select do |path,| + # drop strings not created in this file + # (the parallel testing framework may create strings in a separate thread) + path == __FILE__ + end end - ensure - GC.enable end def test_byteslice_prefix diff --git a/test/ruby/test_super.rb b/test/ruby/test_super.rb index ce78e66c52196a..418f293f661cfa 100644 --- a/test/ruby/test_super.rb +++ b/test/ruby/test_super.rb @@ -8,6 +8,7 @@ def double(a, b) [a,b] end def array(*a) a end def optional(a = 0) a end def keyword(**a) a end + def forward(*a) a end end class Single1 < Base def single(*) super end @@ -63,6 +64,16 @@ def keyword(foo: "keyword2") [x, y] end end + class Forward < Base + def forward(...) + w = super() + x = super + y = super(...) + a = 1 + z = super(a, ...) + [w, x, y, z] + end + end def test_single1 assert_equal(1, Single1.new.single(1)) @@ -133,6 +144,11 @@ def test_keyword1 def test_keyword2 assert_equal([{foo: "changed1"}, {foo: "changed2"}], Keyword2.new.keyword) end + def test_forwardable(...) + assert_equal([[],[],[],[1]], Forward.new.forward()) + assert_equal([[],[1,2],[1,2],[1,1,2]], Forward.new.forward(1,2)) + assert_equal([[],[:test],[:test],[1,:test]], Forward.new.forward(:test, ...)) + end class A def tt(aa) @@ -617,6 +633,35 @@ def test_public_zsuper_with_prepend } end + def test_super_with_included_prepended_module_method_caching_bug_20716 + a = Module.new do + def test(*args) + super + end + end + + b = Module.new do + def test(a) + a + end + end + + c = Class.new + + b.prepend(a) + c.include(b) + + assert_equal(1, c.new.test(1)) + + b.class_eval do + def test + :test + end + end + + assert_equal(:test, c.new.test) + end + class TestFor_super_with_modified_rest_parameter_base def foo *args args diff --git a/test/ruby/test_symbol.rb b/test/ruby/test_symbol.rb index 2275de06a8e94c..c50febf5d1c6fa 100644 --- a/test/ruby/test_symbol.rb +++ b/test/ruby/test_symbol.rb @@ -90,12 +90,15 @@ def test_inspect_suboptimal end def test_inspect_dollar + verbose_bak, $VERBOSE = $VERBOSE, nil # 4) :$- always treats next character literally: assert_raise(SyntaxError) {eval ':$-'} assert_raise(SyntaxError) {eval ":$-\n"} assert_raise(SyntaxError) {eval ":$- "} assert_raise(SyntaxError) {eval ":$-#"} assert_raise(SyntaxError) {eval ':$-('} + ensure + $VERBOSE = verbose_bak end def test_inspect_number diff --git a/test/ruby/test_syntax.rb b/test/ruby/test_syntax.rb index bd15d7c9f3f34b..7a6c66d7824d41 100644 --- a/test/ruby/test_syntax.rb +++ b/test/ruby/test_syntax.rb @@ -330,7 +330,12 @@ def test_keyword_duplicated_splat bug10315 = '[ruby-core:65368] [Bug #10315]' o = KW2.new - assert_equal([23, 2], o.kw(**{k1: 22}, **{k1: 23}), bug10315) + begin + verbose_bak, $VERBOSE = $VERBOSE, nil + assert_equal([23, 2], eval("o.kw(**{k1: 22}, **{k1: 23})"), bug10315) + ensure + $VERBOSE = verbose_bak + end h = {k3: 31} assert_raise(ArgumentError) {o.kw(**h)} @@ -1387,7 +1392,7 @@ def test_cmdarg_in_paren def test_block_after_cmdarg_in_paren bug11873 = '[ruby-core:72482] [Bug #11873]' - def bug11873.p(*);end; + def bug11873.p(*, &);end; assert_raise(LocalJumpError, bug11873) do bug11873.instance_eval do @@ -1963,16 +1968,23 @@ def test_argument_forwarding assert_valid_syntax("def foo b = 1, ...; bar(...); end") assert_valid_syntax("(def foo ...\n bar(...)\nend)") assert_valid_syntax("(def foo ...; bar(...); end)") + assert_valid_syntax("def (1...).foo ...; bar(...); end") + assert_valid_syntax("def (tap{1...}).foo ...; bar(...); end") assert_valid_syntax('def ==(...) end') assert_valid_syntax('def [](...) end') assert_valid_syntax('def nil(...) end') assert_valid_syntax('def true(...) end') assert_valid_syntax('def false(...) end') + assert_valid_syntax('->a=1...{}') unexpected = /unexpected \.{3}/ assert_syntax_error('iter do |...| end', /unexpected/) assert_syntax_error('iter {|...|}', /unexpected/) assert_syntax_error('->... {}', unexpected) assert_syntax_error('->(...) {}', unexpected) + assert_syntax_error('->a,... {}', unexpected) + assert_syntax_error('->(a,...) {}', unexpected) + assert_syntax_error('->a=1,... {}', unexpected) + assert_syntax_error('->(a=1,...) {}', unexpected) assert_syntax_error('def foo(x, y, z) bar(...); end', /unexpected/) assert_syntax_error('def foo(x, y, z) super(...); end', /unexpected/) assert_syntax_error('def foo(...) yield(...); end', /unexpected/) @@ -2222,6 +2234,43 @@ def test_cdhash RUBY end + def test_defined_in_short_circuit_if_condition + bug = '[ruby-core:20501]' + conds = [ + "false && defined?(Some::CONSTANT)", + "true || defined?(Some::CONSTANT)", + "(false && defined?(Some::CONSTANT))", # parens exercise different code path + "(true || defined?(Some::CONSTANT))", + "@val && false && defined?(Some::CONSTANT)", + "@val || true || defined?(Some::CONSTANT)" + ] + + conds.each do |cond| + code = %Q{ + def my_method + var = "there" + if #{cond} + var = "here" + end + raise var + end + begin + my_method + rescue + print 'ok' + else + print 'ng' + end + } + # Invoke in a subprocess because the bug caused a segfault using the parse.y compiler. + # Don't use assert_separately because the bug was best reproducible in a clean slate, + # without test env loaded. + out, _err, status = EnvUtil.invoke_ruby(["--disable-gems"], code, true, false) + assert_predicate(status, :success?, bug) + assert_equal 'ok', out + end + end + private def not_label(x) @result = x; @not_label ||= nil end @@ -2256,7 +2305,7 @@ def with_script_lines end end - def caller_lineno(*) + def caller_lineno(*, &) caller_locations(1, 1)[0].lineno end end diff --git a/test/ruby/test_time.rb b/test/ruby/test_time.rb index 2a541bbe8c8f47..99ee84f247e2d0 100644 --- a/test/ruby/test_time.rb +++ b/test/ruby/test_time.rb @@ -1444,4 +1444,63 @@ def test_deconstruct_keys def test_parse_zero_bigint assert_equal 0, Time.new("2020-10-28T16:48:07.000Z").nsec, '[Bug #19390]' end + + def test_xmlschema_encode + [:xmlschema, :iso8601].each do |method| + bug6100 = '[ruby-core:42997]' + + t = Time.utc(2001, 4, 17, 19, 23, 17, 300000) + assert_equal("2001-04-17T19:23:17Z", t.__send__(method)) + assert_equal("2001-04-17T19:23:17.3Z", t.__send__(method, 1)) + assert_equal("2001-04-17T19:23:17.300000Z", t.__send__(method, 6)) + assert_equal("2001-04-17T19:23:17.3000000Z", t.__send__(method, 7)) + assert_equal("2001-04-17T19:23:17.3Z", t.__send__(method, 1.9), bug6100) + + t = Time.utc(2001, 4, 17, 19, 23, 17, 123456) + assert_equal("2001-04-17T19:23:17.1234560Z", t.__send__(method, 7)) + assert_equal("2001-04-17T19:23:17.123456Z", t.__send__(method, 6)) + assert_equal("2001-04-17T19:23:17.12345Z", t.__send__(method, 5)) + assert_equal("2001-04-17T19:23:17.1Z", t.__send__(method, 1)) + assert_equal("2001-04-17T19:23:17.1Z", t.__send__(method, 1.9), bug6100) + + t = Time.at(2.quo(3)).getlocal("+09:00") + assert_equal("1970-01-01T09:00:00.666+09:00", t.__send__(method, 3)) + assert_equal("1970-01-01T09:00:00.6666666666+09:00", t.__send__(method, 10)) + assert_equal("1970-01-01T09:00:00.66666666666666666666+09:00", t.__send__(method, 20)) + assert_equal("1970-01-01T09:00:00.6+09:00", t.__send__(method, 1.1), bug6100) + assert_equal("1970-01-01T09:00:00.666+09:00", t.__send__(method, 3.2), bug6100) + + t = Time.at(123456789.quo(9999999999)).getlocal("+09:00") + assert_equal("1970-01-01T09:00:00.012+09:00", t.__send__(method, 3)) + assert_equal("1970-01-01T09:00:00.012345678+09:00", t.__send__(method, 9)) + assert_equal("1970-01-01T09:00:00.0123456789+09:00", t.__send__(method, 10)) + assert_equal("1970-01-01T09:00:00.0123456789012345678+09:00", t.__send__(method, 19)) + assert_equal("1970-01-01T09:00:00.01234567890123456789+09:00", t.__send__(method, 20)) + assert_equal("1970-01-01T09:00:00.012+09:00", t.__send__(method, 3.8), bug6100) + + t = Time.utc(1) + assert_equal("0001-01-01T00:00:00Z", t.__send__(method)) + + begin + Time.at(-1) + rescue ArgumentError + # ignore + else + t = Time.utc(1960, 12, 31, 23, 0, 0, 123456) + assert_equal("1960-12-31T23:00:00.123456Z", t.__send__(method, 6)) + end + + t = get_t2000.getlocal("-09:30") # Pacific/Marquesas + assert_equal("1999-12-31T14:30:00-09:30", t.__send__(method)) + + assert_equal("10000-01-01T00:00:00Z", Time.utc(10000).__send__(method)) + assert_equal("9999-01-01T00:00:00Z", Time.utc(9999).__send__(method)) + assert_equal("0001-01-01T00:00:00Z", Time.utc(1).__send__(method)) # 1 AD + assert_equal("0000-01-01T00:00:00Z", Time.utc(0).__send__(method)) # 1 BC + assert_equal("-0001-01-01T00:00:00Z", Time.utc(-1).__send__(method)) # 2 BC + assert_equal("-0004-01-01T00:00:00Z", Time.utc(-4).__send__(method)) # 5 BC + assert_equal("-9999-01-01T00:00:00Z", Time.utc(-9999).__send__(method)) + assert_equal("-10000-01-01T00:00:00Z", Time.utc(-10000).__send__(method)) + end + end end diff --git a/test/ruby/test_transcode.rb b/test/ruby/test_transcode.rb index 144f4d83a1ba92..63d37f4ba4ff90 100644 --- a/test/ruby/test_transcode.rb +++ b/test/ruby/test_transcode.rb @@ -1634,6 +1634,8 @@ def test_to_cp50221 assert_equal("\e$B%*!+%,%I%J!+%N!+%P%\\%^!+%Q%]%\"\e(B".force_encoding("cp50220"), "\xB5\xDE\xB6\xDE\xC4\xDE\xC5\xDE\xC9\xDE\xCA\xDE\xCE\xDE\xCF\xDE\xCA\xDF\xCE\xDF\xB1". encode("cp50220", "sjis")) + assert_equal("\e$B\x21\x23\e(I\x7E\e(B".force_encoding("cp50220"), + "\x8E\xA1\x8E\xFE".encode("cp50220", "cp51932")) end def test_iso_2022_jp_1 diff --git a/test/ruby/test_vm_dump.rb b/test/ruby/test_vm_dump.rb index 86d89adb9699d8..22afee7a247fbd 100644 --- a/test/ruby/test_vm_dump.rb +++ b/test/ruby/test_vm_dump.rb @@ -5,7 +5,7 @@ class TestVMDump < Test::Unit::TestCase def assert_darwin_vm_dump_works(args, timeout=nil) - pend "macOS 15 beta is not working with this assertion" if /darwin/ =~ RUBY_PLATFORM && /15/ =~ `sw_vers -productVersion` + pend "macOS 15 beta is not working with this assertion" if macos?(15) assert_in_out_err(args, "", [], /^\[IMPORTANT\]/, timeout: timeout || 300) end diff --git a/test/ruby/test_yjit.rb b/test/ruby/test_yjit.rb index 96a6100717d039..c91d6312560ec6 100644 --- a/test/ruby/test_yjit.rb +++ b/test/ruby/test_yjit.rb @@ -1638,6 +1638,41 @@ def test = :ok RUBY end + def test_runtime_stats_key_arg + assert_compiles(<<~'RUBY', exits: :any, result: true) + def test = :ok + 3.times { test } + + # Collect single stat. + stat = RubyVM::YJIT.runtime_stats(:ratio_in_yjit) + + # Ensure this invocation had stats. + return true unless RubyVM::YJIT.runtime_stats[:all_stats] + + stat > 0.0 + RUBY + end + + def test_runtime_stats_arg_error + assert_compiles(<<~'RUBY', exits: :any, result: true) + begin + RubyVM::YJIT.runtime_stats(Object.new) + :no_error + rescue TypeError => e + e.message == "non-symbol given" + end + RUBY + end + + def test_runtime_stats_unknown_key + assert_compiles(<<~'RUBY', exits: :any, result: true) + def test = :ok + 3.times { test } + + RubyVM::YJIT.runtime_stats(:some_key_unlikely_to_exist).nil? + RUBY + end + private def code_gc_helpers diff --git a/test/rubygems/installer_test_case.rb b/test/rubygems/installer_test_case.rb index abddcbe8483917..8a34d28db86ec0 100644 --- a/test/rubygems/installer_test_case.rb +++ b/test/rubygems/installer_test_case.rb @@ -64,12 +64,6 @@ class Gem::Installer # A test case for Gem::Installer. class Gem::InstallerTestCase < Gem::TestCase - def setup - super - - Gem::Installer.path_warning = false - end - ## # The path where installed executables live diff --git a/test/rubygems/rubygems/commands/ins_command.rb b/test/rubygems/rubygems/commands/ins_command.rb new file mode 100644 index 00000000000000..8e2ac16f22e5a4 --- /dev/null +++ b/test/rubygems/rubygems/commands/ins_command.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class Gem::Commands::InsCommand < Gem::Command + def initialize + super("ins", "Does something different from install", {}) + end +end diff --git a/test/rubygems/rubygems/commands/interrupt_command.rb b/test/rubygems/rubygems/commands/interrupt_command.rb new file mode 100644 index 00000000000000..88d2ef22e73f5c --- /dev/null +++ b/test/rubygems/rubygems/commands/interrupt_command.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +class Gem::Commands::InterruptCommand < Gem::Command + def initialize + super("interrupt", "Raises an Interrupt Exception", {}) + end + + def execute + raise Interrupt, "Interrupt exception" + end +end diff --git a/test/rubygems/rubygems_plugin.rb b/test/rubygems/rubygems_plugin.rb index 949580f9043faa..f9f2a7d91182b3 100644 --- a/test/rubygems/rubygems_plugin.rb +++ b/test/rubygems/rubygems_plugin.rb @@ -2,23 +2,4 @@ require "rubygems/command_manager" -## -# This is an example of exactly what NOT to do. -# -# DO NOT include code like this in your rubygems_plugin.rb - -module Gem::Commands - remove_const(:InterruptCommand) if defined?(InterruptCommand) -end - -class Gem::Commands::InterruptCommand < Gem::Command - def initialize - super("interrupt", "Raises an Interrupt Exception", {}) - end - - def execute - raise Interrupt, "Interrupt exception" - end -end - Gem::CommandManager.instance.register_command :interrupt diff --git a/test/rubygems/test_gem.rb b/test/rubygems/test_gem.rb index e8a294d65cfeef..0d048b08b7f01f 100644 --- a/test/rubygems/test_gem.rb +++ b/test/rubygems/test_gem.rb @@ -21,8 +21,6 @@ def setup common_installer_setup @additional = %w[a b].map {|d| File.join @tempdir, d } - - util_remove_interrupt_command end def test_self_finish_resolve @@ -1524,8 +1522,6 @@ def test_load_env_plugins nil end - util_remove_interrupt_command - # Should attempt to cause a StandardError with_plugin("standarderror") { Gem.load_env_plugins } begin @@ -1534,8 +1530,6 @@ def test_load_env_plugins nil end - util_remove_interrupt_command - # Should attempt to cause an Exception with_plugin("scripterror") { Gem.load_env_plugins } begin @@ -1791,11 +1785,6 @@ def util_exec_gem spec end - def util_remove_interrupt_command - Gem::Commands.send :remove_const, :InterruptCommand if - Gem::Commands.const_defined? :InterruptCommand - end - def util_cache_dir File.join Gem.dir, "cache" end diff --git a/test/rubygems/test_gem_command_manager.rb b/test/rubygems/test_gem_command_manager.rb index f04ec0cafafab4..f3848e498db8de 100644 --- a/test/rubygems/test_gem_command_manager.rb +++ b/test/rubygems/test_gem_command_manager.rb @@ -50,16 +50,17 @@ def test_find_logout_alias_comamnd end def test_find_command_ambiguous_exact - ins_command = Class.new - Gem::Commands.send :const_set, :InsCommand, ins_command + old_load_path = $:.dup + $: << File.expand_path("test/rubygems", PROJECT_DIR) @command_manager.register_command :ins command = @command_manager.find_command "ins" - assert_kind_of ins_command, command + assert_kind_of Gem::Commands::InsCommand, command ensure - Gem::Commands.send :remove_const, :InsCommand + $:.replace old_load_path + @command_manager.unregister_command :ins end def test_find_command_unknown diff --git a/test/rubygems/test_gem_commands_exec_command.rb b/test/rubygems/test_gem_commands_exec_command.rb index 8d9c810d59ceaa..c632ce62b2d524 100644 --- a/test/rubygems/test_gem_commands_exec_command.rb +++ b/test/rubygems/test_gem_commands_exec_command.rb @@ -493,7 +493,6 @@ def test_version_mismatch assert_equal 2, e.exit_code assert_equal <<~ERR, @ui.error ERROR: Could not find a valid gem 'a' (= 2) in any repository - ERROR: Possible alternatives: a ERR end end @@ -574,7 +573,6 @@ def test_conservative_missing_gem assert_include @ui.output, "a (= 2) not available locally" assert_equal <<~ERROR, @ui.error ERROR: Could not find a valid gem 'a' (= 2) in any repository - ERROR: Possible alternatives: a ERROR end end @@ -749,7 +747,7 @@ def test_gem_exec_gem_uninstall assert_match(/\A\s*\** LOCAL GEMS \**\s*\z/m, @ui.output) invoke "gem", "env", "GEM_HOME" - assert_equal "#{@gem_home}/gem_exec\n", @ui.output + assert_equal "#{@gem_home}\n", @ui.output end end @@ -769,8 +767,7 @@ def test_only_prerelease_available assert_raise Gem::MockGemUi::TermError do invoke "a" end - assert_equal "ERROR: Could not find a valid gem 'a' (>= 0) in any repository\n" \ - "ERROR: Possible alternatives: a\n", @ui.error + assert_equal "ERROR: Could not find a valid gem 'a' (>= 0) in any repository\n", @ui.error assert_empty @ui.output assert_empty @installed_specs end diff --git a/test/rubygems/test_gem_commands_fetch_command.rb b/test/rubygems/test_gem_commands_fetch_command.rb index e8710d3cd13028..bd8f8aa4f921a1 100644 --- a/test/rubygems/test_gem_commands_fetch_command.rb +++ b/test/rubygems/test_gem_commands_fetch_command.rb @@ -21,11 +21,7 @@ def test_execute @cmd.options[:args] = %w[a] - use_ui @ui do - Dir.chdir @tempdir do - @cmd.execute - end - end + execute_with_exit_code a2 = specs["a-2"] @@ -46,11 +42,7 @@ def test_execute_latest @cmd.options[:args] = %w[a] @cmd.options[:version] = req(">= 0.1") - use_ui @ui do - Dir.chdir @tempdir do - @cmd.execute - end - end + execute_with_exit_code a2 = specs["a-2"] assert_path_exist(File.join(@tempdir, a2.file_name), @@ -68,11 +60,7 @@ def test_execute_prerelease @cmd.options[:args] = %w[a] @cmd.options[:prerelease] = true - use_ui @ui do - Dir.chdir @tempdir do - @cmd.execute - end - end + execute_with_exit_code a2 = specs["a-2"] @@ -105,11 +93,7 @@ def test_execute_platform FileUtils.cp a2_universal_darwin, a2_universal_darwin_spec.cache_file util_set_arch "arm64-darwin20" do - use_ui @ui do - Dir.chdir @tempdir do - @cmd.execute - end - end + execute_with_exit_code end assert_path_exist(File.join(@tempdir, a2_universal_darwin_spec.file_name), @@ -126,11 +110,7 @@ def test_execute_specific_prerelease @cmd.options[:prerelease] = true @cmd.options[:version] = "2.a" - use_ui @ui do - Dir.chdir @tempdir do - @cmd.execute - end - end + execute_with_exit_code a2_pre = specs["a-2.a"] @@ -147,11 +127,7 @@ def test_execute_version @cmd.options[:args] = %w[a] @cmd.options[:version] = Gem::Requirement.new "1" - use_ui @ui do - Dir.chdir @tempdir do - @cmd.execute - end - end + execute_with_exit_code a1 = specs["a-1"] @@ -166,11 +142,7 @@ def test_execute_version_specified_by_colon @cmd.options[:args] = %w[a:1] - use_ui @ui do - Dir.chdir @tempdir do - @cmd.execute - end - end + execute_with_exit_code a1 = specs["a-1"] @@ -182,11 +154,7 @@ def test_execute_two_version @cmd.options[:args] = %w[a b] @cmd.options[:version] = Gem::Requirement.new "1" - use_ui @ui do - assert_raise Gem::MockGemUi::TermError, @ui.error do - @cmd.execute - end - end + execute_with_term_error msg = "ERROR: Can't use --version with multiple gems. You can specify multiple gems with" \ " version requirements using `gem fetch 'my_gem:1.0.0' 'my_other_gem:~>2.0.0'`" @@ -203,11 +171,7 @@ def test_execute_two_version_specified_by_colon @cmd.options[:args] = %w[a:1 b:1] - use_ui @ui do - Dir.chdir @tempdir do - @cmd.execute - end - end + execute_with_exit_code a1 = specs["a-1"] b1 = specs["b-1"] @@ -225,9 +189,7 @@ def test_execute_version_nonexistent @cmd.options[:args] = %w[foo:2] - use_ui @ui do - @cmd.execute - end + execute_with_term_error expected = <<-EXPECTED ERROR: Could not find a valid gem 'foo' (2) in any repository @@ -245,9 +207,7 @@ def test_execute_nonexistent_hint_disabled @cmd.options[:args] = %w[foo:2] @cmd.options[:suggest_alternate] = false - use_ui @ui do - @cmd.execute - end + execute_with_term_error expected = <<-EXPECTED ERROR: Could not find a valid gem 'foo' (2) in any repository @@ -255,4 +215,24 @@ def test_execute_nonexistent_hint_disabled assert_equal expected, @ui.error end + + private + + def execute_with_term_error + use_ui @ui do + assert_raise Gem::MockGemUi::TermError, @ui.error do + @cmd.execute + end + end + end + + def execute_with_exit_code + use_ui @ui do + Dir.chdir @tempdir do + assert_raise Gem::MockGemUi::SystemExitException, @ui.error do + @cmd.execute + end + end + end + end end diff --git a/test/rubygems/test_gem_commands_help_command.rb b/test/rubygems/test_gem_commands_help_command.rb index 359da0a6d01146..01ab4aab2fe46d 100644 --- a/test/rubygems/test_gem_commands_help_command.rb +++ b/test/rubygems/test_gem_commands_help_command.rb @@ -11,8 +11,6 @@ def setup super @cmd = Gem::Commands::HelpCommand.new - - load File.expand_path("rubygems_plugin.rb", __dir__) unless Gem::Commands.const_defined? :InterruptCommand end def test_gem_help_bad diff --git a/test/rubygems/test_gem_commands_install_command.rb b/test/rubygems/test_gem_commands_install_command.rb index 5b09512ac45c24..1bd96600f33983 100644 --- a/test/rubygems/test_gem_commands_install_command.rb +++ b/test/rubygems/test_gem_commands_install_command.rb @@ -667,7 +667,7 @@ def test_execute_rdoc assert_path_exist File.join(a2.doc_dir, "ri") assert_path_exist File.join(a2.doc_dir, "rdoc") - end + end if defined?(Gem::RDoc) def test_execute_rdoc_with_path specs = spec_fetcher do |fetcher| @@ -703,7 +703,7 @@ def test_execute_rdoc_with_path wait_for_child_process_to_exit assert_path_exist "whatever/doc/a-2", "documentation not installed" - end + end if defined?(Gem::RDoc) def test_execute_saves_build_args specs = spec_fetcher do |fetcher| diff --git a/test/rubygems/test_gem_commands_pristine_command.rb b/test/rubygems/test_gem_commands_pristine_command.rb index b8b39133ff2ecc..190f78c79f39c3 100644 --- a/test/rubygems/test_gem_commands_pristine_command.rb +++ b/test/rubygems/test_gem_commands_pristine_command.rb @@ -642,7 +642,8 @@ def test_execute_default_gem assert_equal( [ "Restoring gems to pristine condition...", - "Skipped default-2.0.0.0, it is a default gem", + "Cached gem for default-2.0.0.0 not found, attempting to fetch...", + "Skipped default-2.0.0.0, it was not found from cache and remote sources", ], @ui.output.split("\n") ) diff --git a/test/rubygems/test_gem_commands_update_command.rb b/test/rubygems/test_gem_commands_update_command.rb index 194ebb030a8fed..642a62a3736643 100644 --- a/test/rubygems/test_gem_commands_update_command.rb +++ b/test/rubygems/test_gem_commands_update_command.rb @@ -506,7 +506,7 @@ def test_execute_rdoc a2 = @specs["a-2"] assert_path_exist File.join(a2.doc_dir, "rdoc") - end + end if defined?(Gem::RDoc) def test_execute_named spec_fetcher do |fetcher| diff --git a/test/rubygems/test_gem_dependency.rb b/test/rubygems/test_gem_dependency.rb index 2a989a55513b99..a0bfee023936cb 100644 --- a/test/rubygems/test_gem_dependency.rb +++ b/test/rubygems/test_gem_dependency.rb @@ -22,7 +22,7 @@ def test_initialize_type_bad Gem::Dependency.new "monkey" => "1.0" end - assert_equal 'dependency name must be a String, was {"monkey"=>"1.0"}', + assert_equal "dependency name must be a String, was #{{ "monkey" => "1.0" }.inspect}", e.message end diff --git a/test/rubygems/test_gem_dependency_installer.rb b/test/rubygems/test_gem_dependency_installer.rb index 8999723ba1e2dd..56b84160c4d0e4 100644 --- a/test/rubygems/test_gem_dependency_installer.rb +++ b/test/rubygems/test_gem_dependency_installer.rb @@ -819,6 +819,48 @@ def test_install_reinstall assert_equal %w[a-1], inst.installed_gems.map(&:full_name) end + def test_install_dual_repository_and_done_installing_hooks + util_setup_gems + + FileUtils.mv @a1_gem, @tempdir + FileUtils.mv @b1_gem, @tempdir + inst = nil + + # Make sure gem is installed to standard GEM_HOME + + Dir.chdir @tempdir do + inst = Gem::DependencyInstaller.new install_dir: @gemhome + inst.install "b" + end + + # and also to an additional GEM_PATH + + gemhome2 = "#{@gemhome}2" + + Dir.chdir @tempdir do + inst = Gem::DependencyInstaller.new install_dir: gemhome2 + inst.install "b" + end + + # Now install the local gem with the additional GEM_PATH + + ENV["GEM_HOME"] = @gemhome + ENV["GEM_PATH"] = [@gemhome, gemhome2].join File::PATH_SEPARATOR + Gem.clear_paths + + Gem.done_installing do |installer, specs| + refute_nil installer + assert_equal [@b1], specs + end + + Dir.chdir @tempdir do + inst = Gem::DependencyInstaller.new + inst.install "b-1.gem" + end + + assert_equal %w[b-1], inst.installed_gems.map(&:full_name) + end + def test_install_remote util_setup_gems diff --git a/test/rubygems/test_gem_installer.rb b/test/rubygems/test_gem_installer.rb index 52498cdd6d6c8f..12149b9f912c29 100644 --- a/test/rubygems/test_gem_installer.rb +++ b/test/rubygems/test_gem_installer.rb @@ -208,7 +208,7 @@ def test_check_that_user_bin_dir_is_in_path ENV["PATH"] = [ENV["PATH"], bin_dir].join(File::PATH_SEPARATOR) use_ui @ui do - installer.check_that_user_bin_dir_is_in_path + installer.check_that_user_bin_dir_is_in_path(["executable"]) end assert_empty @ui.error @@ -218,7 +218,7 @@ def test_check_that_user_bin_dir_is_in_path ENV["PATH"] = [orig_path, bin_dir.tr(File::SEPARATOR, File::ALT_SEPARATOR)].join(File::PATH_SEPARATOR) use_ui @ui do - installer.check_that_user_bin_dir_is_in_path + installer.check_that_user_bin_dir_is_in_path(["executable"]) end assert_empty @ui.error @@ -236,7 +236,7 @@ def test_check_that_user_bin_dir_is_in_path_tilde installer.bin_dir.replace File.join @userhome, "bin" use_ui @ui do - installer.check_that_user_bin_dir_is_in_path + installer.check_that_user_bin_dir_is_in_path(["executable"]) end assert_empty @ui.error @@ -248,7 +248,7 @@ def test_check_that_user_bin_dir_is_in_path_not_in_path installer = setup_base_installer use_ui @ui do - installer.check_that_user_bin_dir_is_in_path + installer.check_that_user_bin_dir_is_in_path(["executable"]) end expected = installer.bin_dir @@ -258,6 +258,7 @@ def test_check_that_user_bin_dir_is_in_path_not_in_path end assert_match expected, @ui.error + assert_match "(executable)", @ui.error end def test_ensure_dependency @@ -358,10 +359,8 @@ def test_generate_bin_bindir_with_user_install_warning inst = Gem::Installer.at "", options - Gem::Installer.path_warning = false - use_ui @ui do - inst.check_that_user_bin_dir_is_in_path + inst.check_that_user_bin_dir_is_in_path(["executable"]) end assert_equal "", @ui.error @@ -1083,6 +1082,8 @@ def test_install_creates_working_binstub end assert_match(/ran executable/, e.message) + + assert_path_not_exist(File.join(installer.bin_dir, "executable.lock")) end def test_conflicting_binstubs @@ -1131,6 +1132,8 @@ def test_conflicting_binstubs # We expect the bin stub to activate the version that actually contains # the binstub. assert_match("I have an executable", e.message) + + assert_path_not_exist(File.join(installer.bin_dir, "executable.lock")) end def test_install_creates_binstub_that_understand_version @@ -1160,6 +1163,8 @@ def test_install_creates_binstub_that_understand_version end assert_includes(e.message, "can't find gem a (= 3.0)") + + assert_path_not_exist(File.join(installer.bin_dir, "executable.lock")) end def test_install_creates_binstub_that_prefers_user_installed_gem_to_default @@ -1192,6 +1197,8 @@ def test_install_creates_binstub_that_prefers_user_installed_gem_to_default end assert_equal(e.message, "ran executable") + + assert_path_not_exist(File.join(installer.bin_dir, "executable.lock")) end def test_install_creates_binstub_that_dont_trust_encoding @@ -1222,6 +1229,36 @@ def test_install_creates_binstub_that_dont_trust_encoding end assert_match(/ran executable/, e.message) + + assert_path_not_exist(File.join(installer.bin_dir, "executable.lock")) + end + + def test_install_does_not_leave_lockfile_for_binstub + installer = util_setup_installer + + installer.wrappers = true + + File.class_eval do + alias_method :original_chmod, :chmod + define_method(:chmod) do |mode| + original_chmod(mode) + raise Gem::Ext::BuildError if path.end_with?("/executable") + end + end + + assert_raise(Gem::Ext::BuildError) do + installer.install + end + + assert_path_not_exist(File.join(installer.bin_dir, "executable.lock")) + # TODO: remove already copied files at failures. + # assert_path_not_exist(File.join(installer.bin_dir, "executable")) + ensure + File.class_eval do + remove_method :chmod + alias_method :chmod, :original_chmod + remove_method :original_chmod + end end def test_install_with_no_prior_files @@ -2386,10 +2423,10 @@ def test_leaves_no_empty_cached_spec_when_no_more_disk_space installer = Gem::Installer.for_spec @spec installer.gem_home = @gemhome - File.class_eval do - alias_method :original_write, :write + File.singleton_class.class_eval do + alias_method :original_binwrite, :binwrite - def write(data) + def binwrite(path, data) raise Errno::ENOSPC end end @@ -2400,10 +2437,10 @@ def write(data) assert_path_not_exist @spec.spec_file ensure - File.class_eval do - remove_method :write - alias_method :write, :original_write - remove_method :original_write + File.singleton_class.class_eval do + remove_method :binwrite + alias_method :binwrite, :original_binwrite + remove_method :original_binwrite end end diff --git a/test/rubygems/test_gem_rdoc.rb b/test/rubygems/test_gem_rdoc.rb index f9b1df6cd55aa1..19ccf1e5871b70 100644 --- a/test/rubygems/test_gem_rdoc.rb +++ b/test/rubygems/test_gem_rdoc.rb @@ -134,4 +134,4 @@ def test_setup_unwritable FileUtils.rm_r @a.doc_dir end end -end +end if defined?(Gem::RDoc) diff --git a/test/rubygems/test_gem_resolver_api_set.rb b/test/rubygems/test_gem_resolver_api_set.rb index 5781cf37d26e13..b0b4943beafa97 100644 --- a/test/rubygems/test_gem_resolver_api_set.rb +++ b/test/rubygems/test_gem_resolver_api_set.rb @@ -136,6 +136,25 @@ def test_find_all_missing assert_empty set.find_all(a_dep) end + def test_find_all_not_found + spec_fetcher + + @fetcher.data["#{@dep_uri}/a"] = + proc do + raise Gem::RemoteFetcher::FetchError + end + + set = Gem::Resolver::APISet.new @dep_uri + + a_dep = Gem::Resolver::DependencyRequest.new dep("a"), nil + + assert_empty set.find_all(a_dep) + + @fetcher.data.delete "#{@dep_uri}a" + + assert_empty set.find_all(a_dep) + end + def test_prefetch spec_fetcher diff --git a/test/rubygems/test_gem_resolver_best_set.rb b/test/rubygems/test_gem_resolver_best_set.rb index 8a750cdf8fd665..02f542efc07920 100644 --- a/test/rubygems/test_gem_resolver_best_set.rb +++ b/test/rubygems/test_gem_resolver_best_set.rb @@ -9,33 +9,17 @@ def test_initialize assert_empty set.sets end - def test_find_all_index + def test_find_all spec_fetcher do |fetcher| fetcher.spec "a", 1 - fetcher.spec "a", 2 - fetcher.spec "b", 1 end - set = Gem::Resolver::BestSet.new - - dependency = dep "a", "~> 1" - - req = Gem::Resolver::DependencyRequest.new dependency, nil - - found = set.find_all req - - assert_equal %w[a-1], found.map(&:full_name) - end + api_uri = Gem::URI "#{@gem_repo}info/" - def test_find_all_fallback - spec_fetcher do |fetcher| - fetcher.spec "a", 1 - end + @fetcher.data["#{api_uri}a"] = "---\n1 " set = Gem::Resolver::BestSet.new - api_uri = Gem::URI(@gem_repo) - set.sets << Gem::Resolver::APISet.new(api_uri) dependency = dep "a", "~> 1" @@ -90,64 +74,4 @@ def test_prefetch_local assert_empty set.sets end - - def test_replace_failed_api_set - set = Gem::Resolver::BestSet.new - - api_uri = Gem::URI(@gem_repo) + "./info/" - api_set = Gem::Resolver::APISet.new api_uri - - set.sets << api_set - - error_uri = api_uri + "a" - - error = Gem::RemoteFetcher::FetchError.new "bogus", error_uri - - set.replace_failed_api_set error - - assert_equal 1, set.sets.size - - refute_includes set.sets, api_set - - assert_kind_of Gem::Resolver::IndexSet, set.sets.first - end - - def test_replace_failed_api_set_no_api_set - set = Gem::Resolver::BestSet.new - - index_set = Gem::Resolver::IndexSet.new Gem::Source.new @gem_repo - - set.sets << index_set - - error = Gem::RemoteFetcher::FetchError.new "bogus", @gem_repo - - e = assert_raise Gem::RemoteFetcher::FetchError do - set.replace_failed_api_set error - end - - assert_equal error, e - end - - def test_replace_failed_api_set_uri_with_credentials - set = Gem::Resolver::BestSet.new - - api_uri = Gem::URI(@gem_repo) + "./info/" - api_uri.user = "user" - api_uri.password = "pass" - api_set = Gem::Resolver::APISet.new api_uri - - set.sets << api_set - - error_uri = api_uri + "a" - - error = Gem::RemoteFetcher::FetchError.new "bogus", error_uri - - set.replace_failed_api_set error - - assert_equal 1, set.sets.size - - refute_includes set.sets, api_set - - assert_kind_of Gem::Resolver::IndexSet, set.sets.first - end end diff --git a/test/rubygems/test_gem_safe_marshal.rb b/test/rubygems/test_gem_safe_marshal.rb index ebb000a9efba8a..1085aca9fd705e 100644 --- a/test/rubygems/test_gem_safe_marshal.rb +++ b/test/rubygems/test_gem_safe_marshal.rb @@ -305,6 +305,18 @@ def test_rational end end + def test_gem_spec_unmarshall_license + spec = Gem::Specification.new do |s| + s.name = "hi" + s.version = "1.2.3" + s.license = "MIT" + end + + unmarshalled_spec = Gem::SafeMarshal.safe_load(Marshal.dump(spec)) + + assert_equal ["MIT"], unmarshalled_spec.license + end + def test_gem_spec_disallowed_symbol e = assert_raise(Gem::SafeMarshal::Visitors::ToRuby::UnpermittedSymbolError) do spec = Gem::Specification.new do |s| diff --git a/test/rubygems/test_gem_source.rb b/test/rubygems/test_gem_source.rb index 6baa203dcb1829..423abd6dd20a37 100644 --- a/test/rubygems/test_gem_source.rb +++ b/test/rubygems/test_gem_source.rb @@ -46,7 +46,7 @@ def test_dependency_resolver_set_bundler_api response = Gem::Net::HTTPResponse.new "1.1", 200, "OK" response.uri = Gem::URI("http://example") - @fetcher.data[@gem_repo] = response + @fetcher.data["#{@gem_repo}versions"] = response set = @source.dependency_resolver_set diff --git a/test/rubygems/test_gem_source_git.rb b/test/rubygems/test_gem_source_git.rb index 20e750a0d4000d..abcd55907ed096 100644 --- a/test/rubygems/test_gem_source_git.rb +++ b/test/rubygems/test_gem_source_git.rb @@ -292,6 +292,12 @@ def test_uri assert_equal Gem::URI(@repository), @source.uri end + def test_pretty_print + assert_equal "#\n", @source.pretty_inspect + end + def test_uri_hash assert_equal @hash, @source.uri_hash diff --git a/test/rubygems/test_gem_source_installed.rb b/test/rubygems/test_gem_source_installed.rb index 0d6171b0e52682..0ef14d7470cc92 100644 --- a/test/rubygems/test_gem_source_installed.rb +++ b/test/rubygems/test_gem_source_installed.rb @@ -32,4 +32,9 @@ def test_spaceship assert_equal(1, vendor.<=>(installed), "vendor <=> installed") assert_equal(-1, installed.<=>(vendor), "installed <=> vendor") end + + def test_pretty_print + local = Gem::Source::Installed.new + assert_equal "#\n", local.pretty_inspect + end end diff --git a/test/rubygems/test_gem_source_local.rb b/test/rubygems/test_gem_source_local.rb index c15e0e07c0a7f7..ed6aa24f940db1 100644 --- a/test/rubygems/test_gem_source_local.rb +++ b/test/rubygems/test_gem_source_local.rb @@ -104,4 +104,9 @@ def test_spaceship assert_equal(-1, specific.<=>(local), "specific <=> local") assert_equal(1, local.<=>(specific), "local <=> specific") end + + def test_pretty_print + local = Gem::Source::Local.new + assert_equal "#\n", local.pretty_inspect + end end diff --git a/test/rubygems/test_gem_source_specific_file.rb b/test/rubygems/test_gem_source_specific_file.rb index 3bc1901ee19926..bcc41684444f47 100644 --- a/test/rubygems/test_gem_source_specific_file.rb +++ b/test/rubygems/test_gem_source_specific_file.rb @@ -73,4 +73,8 @@ def test_spaceship assert_equal(0, a1_source.<=>(a1_source), "a1_source <=> a1_source") # rubocop:disable Lint/BinaryOperatorWithIdenticalOperands assert_equal(1, a2_source.<=>(a1_source), "a2_source <=> a1_source") end + + def test_pretty_print + assert_equal "#\n", @sf.pretty_inspect + end end diff --git a/test/rubygems/test_gem_source_subpath_problem.rb b/test/rubygems/test_gem_source_subpath_problem.rb index a451a81a25cb4a..ad11529f670572 100644 --- a/test/rubygems/test_gem_source_subpath_problem.rb +++ b/test/rubygems/test_gem_source_subpath_problem.rb @@ -24,7 +24,7 @@ def test_dependency_resolver_set response = Gem::Net::HTTPResponse.new "1.1", 200, "OK" response.uri = Gem::URI("http://example") - @fetcher.data["#{@gem_repo}/"] = response + @fetcher.data["#{@gem_repo}/versions"] = response set = @source.dependency_resolver_set diff --git a/test/rubygems/test_gem_spec_fetcher.rb b/test/rubygems/test_gem_spec_fetcher.rb index cb4a4f7204778e..fac107b576bae8 100644 --- a/test/rubygems/test_gem_spec_fetcher.rb +++ b/test/rubygems/test_gem_spec_fetcher.rb @@ -168,20 +168,22 @@ def src.fetch_spec(name) def test_suggest_gems_from_name_latest spec_fetcher do|fetcher| fetcher.spec "example", 1 - fetcher.spec "other-example", 1 + fetcher.spec "an-example", 1 fetcher.spec "examp", 1 + fetcher.spec "other-example", 1 end suggestions = @sf.suggest_gems_from_name("examplw", :latest, 1) assert_equal ["example"], suggestions - suggestions = @sf.suggest_gems_from_name("other") - assert_equal ["other-example"], suggestions + suggestions = @sf.suggest_gems_from_name("anexample") + assert_equal ["an-example"], suggestions - suggestions = @sf.suggest_gems_from_name("exam") - assert suggestions.any? { ["examp"] } - assert suggestions.any? { ["example"] } - assert suggestions.any? { ["other-example"] } + suggestions = @sf.suggest_gems_from_name("xample") + assert_equal ["example"], suggestions + + suggestions = @sf.suggest_gems_from_name("other-apple") + assert_equal ["other-example"], suggestions end def test_suggest_gems_from_name_prerelease diff --git a/test/rubygems/test_gem_specification.rb b/test/rubygems/test_gem_specification.rb index 81c601f0076f37..d434ea96f31396 100644 --- a/test/rubygems/test_gem_specification.rb +++ b/test/rubygems/test_gem_specification.rb @@ -2368,7 +2368,7 @@ def test_to_ruby_for_cache s.rubygems_version = "#{Gem::VERSION}".freeze s.summary = "this is a summary".freeze - s.installed_by_version = "#{Gem::VERSION}".freeze if s.respond_to? :installed_by_version + s.installed_by_version = "#{Gem::VERSION}".freeze s.specification_version = #{Gem::Specification::CURRENT_SPECIFICATION_VERSION} @@ -3087,6 +3087,40 @@ def test_unresolved_specs_with_versions assert_equal(expected, actual_stderr) end + def test_unresolved_specs_with_duplicated_versions + specification = Gem::Specification.clone + + set_orig specification + + specification.define_singleton_method(:unresolved_deps) do + { b: Gem::Dependency.new("x","1") } + end + + specification.define_singleton_method(:find_all_by_name) do |_dep_name| + [ + specification.new {|s| s.name = "z", s.version = Gem::Version.new("1") }, # default copy + specification.new {|s| s.name = "z", s.version = Gem::Version.new("1") }, # regular copy + specification.new {|s| s.name = "z", s.version = Gem::Version.new("2") }, # regular copy + ] + end + + expected = <<-EXPECTED +WARN: Unresolved or ambiguous specs during Gem::Specification.reset: + x (= 1) + Available/installed versions of this gem: + - 1 + - 2 +WARN: Clearing out unresolved specs. Try 'gem cleanup ' +Please report a bug if this causes problems. + EXPECTED + + actual_stdout, actual_stderr = capture_output do + specification.reset + end + assert_empty actual_stdout + assert_equal(expected, actual_stderr) + end + def test_duplicate_runtime_dependency expected = "WARNING: duplicated b dependency [\"~> 3.0\", \"~> 3.0\"]\n" out, err = capture_output do diff --git a/test/rubygems/test_require.rb b/test/rubygems/test_require.rb index b915a861970bf8..f15e9b624314d2 100644 --- a/test/rubygems/test_require.rb +++ b/test/rubygems/test_require.rb @@ -182,6 +182,22 @@ def test_require_is_not_lazy_with_exact_req assert_equal %w[a-1 b-1], loaded_spec_names end + def test_require_is_not_lazy_with_shadowed_default_gem + b1_default = new_default_spec("b", "1", nil, "foo.rb") + install_default_gems b1_default + + a1 = util_spec "a", "1", { "b" => ">= 1" }, "lib/test_gem_require_a.rb" + b1 = util_spec("b", "1", nil, "lib/foo.rb") + install_specs b1, a1 + + # Load default ruby gems fresh as if we've just started a ruby script. + Gem::Specification.reset + + assert_require "test_gem_require_a" + assert_equal %w[a-1 b-1], loaded_spec_names + assert_equal unresolved_names, [] + end + def test_require_is_lazy_with_inexact_req a1 = util_spec "a", "1", { "b" => ">= 1" }, "lib/test_gem_require_a.rb" b1 = util_spec "b", "1", nil, "lib/b/c.rb" @@ -705,11 +721,11 @@ def test_require_bundler _, err = capture_subprocess_io do system(*ruby_with_rubygems_in_load_path, "-w", "--disable=gems", "-C", dir, "main.rb") end - assert_match(/{:x=>1}\n{:y=>2}\n$/, err) + assert_match(/#{{ x: 1 }.inspect}\n#{{ y: 2 }.inspect}\n$/, err) _, err = capture_subprocess_io do system(*ruby_with_rubygems_in_load_path, "-w", "--enable=gems", "-C", dir, "main.rb") end - assert_match(/{:x=>1}\n{:y=>2}\n$/, err) + assert_match(/#{{ x: 1 }.inspect}\n#{{ y: 2 }.inspect}\n$/, err) end end end diff --git a/test/socket/test_tcp.rb b/test/socket/test_tcp.rb index 7f9dc53cae266b..6a016da71d380b 100644 --- a/test/socket/test_tcp.rb +++ b/test/socket/test_tcp.rb @@ -70,7 +70,7 @@ def test_initialize_resolv_timeout end def test_initialize_connect_timeout - assert_raise(IO::TimeoutError, Errno::ENETUNREACH) do + assert_raise(IO::TimeoutError, Errno::ENETUNREACH, Errno::EACCES) do TCPSocket.new("192.0.2.1", 80, connect_timeout: 0) end end diff --git a/test/strscan/test_stringscanner.rb b/test/strscan/test_stringscanner.rb index 143cf7197df673..9b7b7910d0db81 100644 --- a/test/strscan/test_stringscanner.rb +++ b/test/strscan/test_stringscanner.rb @@ -262,7 +262,7 @@ def test_concat end def test_scan - s = create_string_scanner('stra strb strc', true) + s = create_string_scanner("stra strb\0strc", true) tmp = s.scan(/\w+/) assert_equal 'stra', tmp @@ -270,7 +270,7 @@ def test_scan assert_equal ' ', tmp assert_equal 'strb', s.scan(/\w+/) - assert_equal ' ', s.scan(/\s+/) + assert_equal "\u0000", s.scan(/\0/) tmp = s.scan(/\w+/) assert_equal 'strc', tmp @@ -312,11 +312,14 @@ def test_scan end def test_scan_string - s = create_string_scanner('stra strb strc') + s = create_string_scanner("stra strb\0strc") assert_equal 'str', s.scan('str') assert_equal 'str', s[0] assert_equal 3, s.pos assert_equal 'a ', s.scan('a ') + assert_equal 'strb', s.scan('strb') + assert_equal "\u0000", s.scan("\0") + assert_equal 'strc', s.scan('strc') str = 'stra strb strc'.dup s = create_string_scanner(str, false) @@ -668,13 +671,47 @@ def test_exist_p assert_equal(nil, s.exist?(/e/)) end - def test_exist_p_string + def test_exist_p_invalid_argument s = create_string_scanner("test string") assert_raise(TypeError) do - s.exist?(" ") + s.exist?(1) end end + def test_exist_p_string + omit("not implemented on TruffleRuby") if RUBY_ENGINE == "truffleruby" + s = create_string_scanner("test string") + assert_equal(3, s.exist?("s")) + assert_equal(0, s.pos) + s.scan("test") + assert_equal(2, s.exist?("s")) + assert_equal(4, s.pos) + assert_equal(nil, s.exist?("e")) + end + + def test_scan_until + s = create_string_scanner("Foo Bar\0Baz") + assert_equal("Foo", s.scan_until(/Foo/)) + assert_equal(3, s.pos) + assert_equal(" Bar", s.scan_until(/Bar/)) + assert_equal(7, s.pos) + assert_equal(nil, s.skip_until(/Qux/)) + assert_equal("\u0000Baz", s.scan_until(/Baz/)) + assert_equal(11, s.pos) + end + + def test_scan_until_string + omit("not implemented on TruffleRuby") if RUBY_ENGINE == "truffleruby" + s = create_string_scanner("Foo Bar\0Baz") + assert_equal("Foo", s.scan_until("Foo")) + assert_equal(3, s.pos) + assert_equal(" Bar", s.scan_until("Bar")) + assert_equal(7, s.pos) + assert_equal(nil, s.skip_until("Qux")) + assert_equal("\u0000Baz", s.scan_until("Baz")) + assert_equal(11, s.pos) + end + def test_skip_until s = create_string_scanner("Foo Bar Baz") assert_equal(3, s.skip_until(/Foo/)) @@ -684,6 +721,16 @@ def test_skip_until assert_equal(nil, s.skip_until(/Qux/)) end + def test_skip_until_string + omit("not implemented on TruffleRuby") if RUBY_ENGINE == "truffleruby" + s = create_string_scanner("Foo Bar Baz") + assert_equal(3, s.skip_until("Foo")) + assert_equal(3, s.pos) + assert_equal(4, s.skip_until("Bar")) + assert_equal(7, s.pos) + assert_equal(nil, s.skip_until("Qux")) + end + def test_check_until s = create_string_scanner("Foo Bar Baz") assert_equal("Foo", s.check_until(/Foo/)) @@ -693,6 +740,16 @@ def test_check_until assert_equal(nil, s.check_until(/Qux/)) end + def test_check_until_string + omit("not implemented on TruffleRuby") if RUBY_ENGINE == "truffleruby" + s = create_string_scanner("Foo Bar Baz") + assert_equal("Foo", s.check_until("Foo")) + assert_equal(0, s.pos) + assert_equal("Foo Bar", s.check_until("Bar")) + assert_equal(0, s.pos) + assert_equal(nil, s.check_until("Qux")) + end + def test_search_full s = create_string_scanner("Foo Bar Baz") assert_equal(8, s.search_full(/Bar /, false, false)) @@ -705,6 +762,19 @@ def test_search_full assert_equal(11, s.pos) end + def test_search_full_string + omit("not implemented on TruffleRuby") if RUBY_ENGINE == "truffleruby" + s = create_string_scanner("Foo Bar Baz") + assert_equal(8, s.search_full("Bar ", false, false)) + assert_equal(0, s.pos) + assert_equal("Foo Bar ", s.search_full("Bar ", false, true)) + assert_equal(0, s.pos) + assert_equal(8, s.search_full("Bar ", true, false)) + assert_equal(8, s.pos) + assert_equal("Baz", s.search_full("az", true, true)) + assert_equal(11, s.pos) + end + def test_peek s = create_string_scanner("test string") assert_equal("test st", s.peek(7)) diff --git a/test/test_bundled_gems.rb b/test/test_bundled_gems.rb index 36f73243361bd7..19546dd29606af 100644 --- a/test/test_bundled_gems.rb +++ b/test/test_bundled_gems.rb @@ -12,8 +12,8 @@ def teardown end def test_warning - assert Gem::BUNDLED_GEMS.warning?("rss", specs: {}) - assert_nil Gem::BUNDLED_GEMS.warning?("rss", specs: {}) + assert Gem::BUNDLED_GEMS.warning?("csv", specs: {}) + assert_nil Gem::BUNDLED_GEMS.warning?("csv", specs: {}) end def test_no_warning_warning @@ -22,7 +22,7 @@ def test_no_warning_warning end def test_warning_libdir - path = File.join(::RbConfig::CONFIG.fetch("rubylibdir"), "rss.rb") + path = File.join(::RbConfig::CONFIG.fetch("rubylibdir"), "csv.rb") assert Gem::BUNDLED_GEMS.warning?(path, specs: {}) assert_nil Gem::BUNDLED_GEMS.warning?(path, specs: {}) end diff --git a/test/test_pp.rb b/test/test_pp.rb index 2fdd5df1148a83..e650fca4bc6026 100644 --- a/test/test_pp.rb +++ b/test/test_pp.rb @@ -138,7 +138,6 @@ def test_array def test_hash a = {} a[0] = a - assert_equal("{0=>{...}}\n", PP.pp(a, ''.dup)) assert_equal("#{a.inspect}\n", PP.pp(a, ''.dup)) end @@ -194,10 +193,26 @@ def test_share_nil class PPSingleLineTest < Test::Unit::TestCase def test_hash - assert_equal("{1=>1}", PP.singleline_pp({ 1 => 1}, ''.dup)) # [ruby-core:02699] + assert_equal({1 => 1}.inspect, PP.singleline_pp({1 => 1}, ''.dup)) # [ruby-core:02699] assert_equal("[1#{', 1'*99}]", PP.singleline_pp([1]*100, ''.dup)) end + def test_hash_symbol_colon_key + omit if RUBY_VERSION < "3.4." + no_quote = "{a: 1, a!: 1, a?: 1}" + unicode_quote = "{\u{3042}: 1}" + quote0 = '{"": 1}' + quote1 = '{"0": 1, "!": 1, "%": 1, "&": 1, "*": 1, "+": 1, "-": 1, "/": 1, "<": 1, ">": 1, "^": 1, "`": 1, "|": 1, "~": 1}' + quote2 = '{"@a": 1, "$a": 1, "+@": 1, "a=": 1, "[]": 1}' + quote3 = '{"a\"b": 1, "@@a": 1, "<=>": 1, "===": 1, "[]=": 1}' + assert_equal(no_quote, PP.singleline_pp(eval(no_quote), ''.dup)) + assert_equal({ "\u3042": 1 }.inspect, PP.singleline_pp(eval(unicode_quote), ''.dup)) + assert_equal(quote0, PP.singleline_pp(eval(quote0), ''.dup)) + assert_equal(quote1, PP.singleline_pp(eval(quote1), ''.dup)) + assert_equal(quote2, PP.singleline_pp(eval(quote2), ''.dup)) + assert_equal(quote3, PP.singleline_pp(eval(quote3), ''.dup)) + end + def test_hash_in_array omit if RUBY_ENGINE == "jruby" assert_equal("[{}]", PP.singleline_pp([->(*a){a.last.clear}.ruby2_keywords.call(a: 1)], ''.dup)) @@ -250,7 +265,7 @@ class PPSymbolHash < PP def pp_hash_pair(k, v) case k when Symbol - text k.inspect.delete_prefix(":") + text k.inspect.delete_prefix(":").tr('"', "'") text ":" group(1) { breakable @@ -264,8 +279,9 @@ def pp_hash_pair(k, v) def test_hash_override obj = {k: 1, "": :null, "0": :zero, 100 => :ten} + sep = RUBY_VERSION >= "3.4." ? " => " : "=>" assert_equal <<~EXPECT, PPSymbolHash.pp(obj, "".dup) - {k: 1, "": :null, "0": :zero, 100=>:ten} + {k: 1, '': :null, '0': :zero, 100#{sep}:ten} EXPECT end end diff --git a/test/test_tmpdir.rb b/test/test_tmpdir.rb index 054ca15d7a7634..eae0610c874b66 100644 --- a/test/test_tmpdir.rb +++ b/test/test_tmpdir.rb @@ -104,6 +104,12 @@ def test_mktmpdir_traversal_array end end + def test_mktmpdir_not_empty_parent + assert_raise(ArgumentError) do + Dir.mktmpdir("foo", "") + end + end + def assert_mktmpdir_traversal Dir.mktmpdir do |target| target = target.chomp('/') + '/' diff --git a/test/win32/test_registry.rb b/test/win32/test_registry.rb index 02cafc09b0878f..8a98405a79ec1e 100644 --- a/test/win32/test_registry.rb +++ b/test/win32/test_registry.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + if /mswin|mingw|cygwin/ =~ RUBY_PLATFORM begin require 'win32/registry' @@ -10,7 +12,19 @@ if defined?(Win32::Registry) class TestWin32Registry < Test::Unit::TestCase COMPUTERNAME = 'SYSTEM\\CurrentControlSet\\Control\\ComputerName\\ComputerName' - VOLATILE_ENVIRONMENT = 'Volatile Environment' + + private def backslachs(path) + path.gsub("/", "\\") + end + + TEST_REGISTRY_KEY = "SOFTWARE/ruby-win32-registry-test/" + + def setup + Win32::Registry::HKEY_CURRENT_USER.open(backslachs(File.dirname(TEST_REGISTRY_KEY))) do |reg| + reg.delete_key File.basename(TEST_REGISTRY_KEY), true + end + rescue Win32::Registry::Error + end def test_predefined assert_predefined_key Win32::Registry::HKEY_CLASSES_ROOT @@ -24,6 +38,38 @@ def test_predefined assert_predefined_key Win32::Registry::HKEY_DYN_DATA end + def test_open_no_block + Win32::Registry::HKEY_CURRENT_USER.create(backslachs(TEST_REGISTRY_KEY)).close + + reg = Win32::Registry::HKEY_CURRENT_USER.open(backslachs(TEST_REGISTRY_KEY), Win32::Registry::KEY_ALL_ACCESS) + assert_kind_of Win32::Registry, reg + assert_equal true, reg.open? + assert_equal false, reg.created? + reg["test"] = "abc" + reg.close + assert_raise(Win32::Registry::Error) do + reg["test"] = "abc" + end + end + + def test_open_with_block + Win32::Registry::HKEY_CURRENT_USER.create(backslachs(TEST_REGISTRY_KEY)).close + + regs = [] + Win32::Registry::HKEY_CURRENT_USER.open(backslachs(TEST_REGISTRY_KEY), Win32::Registry::KEY_ALL_ACCESS) do |reg| + regs << reg + assert_equal true, reg.open? + assert_equal false, reg.created? + reg["test"] = "abc" + end + + assert_equal 1, regs.size + assert_kind_of Win32::Registry, regs[0] + assert_raise(Win32::Registry::Error) do + regs[0]["test"] = "abc" + end + end + def test_class_open name1, keys1 = Win32::Registry.open(Win32::Registry::HKEY_LOCAL_MACHINE, "SYSTEM") do |reg| assert_predicate reg, :open? @@ -46,32 +92,145 @@ def test_read end end - def test_create + def test_create_volatile desired = Win32::Registry::KEY_ALL_ACCESS option = Win32::Registry::REG_OPTION_VOLATILE - Win32::Registry::HKEY_CURRENT_USER.open(VOLATILE_ENVIRONMENT, desired) do |reg| - v = self.class.unused_value(reg) - begin - reg.create(v, desired, option) {} - ensure - reg.delete_key(v, true) - end + Win32::Registry::HKEY_CURRENT_USER.create(backslachs(TEST_REGISTRY_KEY), desired) do |reg| + reg.create("volkey", desired, option) {} + reg.delete_key("volkey", true) + end + end + + def test_create_no_block + reg = Win32::Registry::HKEY_CURRENT_USER.create(backslachs(TEST_REGISTRY_KEY)) + assert_kind_of Win32::Registry, reg + assert_equal true, reg.open? + assert_equal true, reg.created? + reg["test"] = "abc" + reg.close + assert_equal false, reg.open? + assert_raise(Win32::Registry::Error) do + reg["test"] = "abc" + end + end + + def test_create_with_block + regs = [] + Win32::Registry::HKEY_CURRENT_USER.create(backslachs(TEST_REGISTRY_KEY)) do |reg| + regs << reg + reg["test"] = "abc" + assert_equal true, reg.open? + assert_equal true, reg.created? + end + + assert_equal 1, regs.size + assert_kind_of Win32::Registry, regs[0] + assert_equal false, regs[0].open? + assert_raise(Win32::Registry::Error) do + regs[0]["test"] = "abc" end end def test_write desired = Win32::Registry::KEY_ALL_ACCESS - Win32::Registry::HKEY_CURRENT_USER.open(VOLATILE_ENVIRONMENT, desired) do |reg| - v = self.class.unused_value(reg) - begin - reg.write_s(v, "data") - assert_equal [Win32::Registry::REG_SZ, "data"], reg.read(v) - reg.write_i(v, 0x5fe79027) - assert_equal [Win32::Registry::REG_DWORD, 0x5fe79027], reg.read(v) - ensure - reg.delete(v) + Win32::Registry::HKEY_CURRENT_USER.create(backslachs(TEST_REGISTRY_KEY), desired) do |reg| + reg.write_s("key1", "data") + assert_equal [Win32::Registry::REG_SZ, "data"], reg.read("key1") + reg.write_i("key2", 0x5fe79027) + assert_equal [Win32::Registry::REG_DWORD, 0x5fe79027], reg.read("key2") + end + end + + def test_accessors + Win32::Registry::HKEY_CURRENT_USER.create(backslachs(TEST_REGISTRY_KEY)) do |reg| + assert_kind_of Integer, reg.hkey + assert_kind_of Win32::Registry, reg.parent + assert_equal "HKEY_CURRENT_USER", reg.parent.name + assert_equal "SOFTWARE\\ruby-win32-registry-test\\", reg.keyname + assert_equal Win32::Registry::REG_CREATED_NEW_KEY, reg.disposition + end + end + + def test_name + Win32::Registry::HKEY_CURRENT_USER.create(backslachs(TEST_REGISTRY_KEY)) do |reg| + assert_equal "HKEY_CURRENT_USER\\SOFTWARE\\ruby-win32-registry-test\\", reg.name + end + end + + def test_keys + Win32::Registry::HKEY_CURRENT_USER.create(backslachs(TEST_REGISTRY_KEY)) do |reg| + reg.create("key1") + assert_equal ["key1"], reg.keys + end + end + + def test_each_key + keys = [] + Win32::Registry::HKEY_CURRENT_USER.create(backslachs(TEST_REGISTRY_KEY)) do |reg| + reg.create("key1") + reg.each_key { |*a| keys << a } + end + assert_equal [2], keys.map(&:size) + assert_equal ["key1"], keys.map(&:first) + assert_in_delta Win32::Registry.time2wtime(Time.now), keys[0][1], 10_000_000_000, "wtime should roughly match Time.now" + end + + def test_each_key_enum + keys = nil + Win32::Registry::HKEY_CURRENT_USER.create(backslachs(TEST_REGISTRY_KEY)) do |reg| + reg.create("key1") + reg.create("key2") + reg.create("key3") + reg["value1"] = "abcd" + keys = reg.each_key.to_a + end + assert_equal 3, keys.size + assert_equal [2, 2, 2], keys.map(&:size) + assert_equal ["key1", "key2", "key3"], keys.map(&:first) + end + + def test_values + Win32::Registry::HKEY_CURRENT_USER.create(backslachs(TEST_REGISTRY_KEY)) do |reg| + reg.create("key1") + reg["value1"] = "abcd" + assert_equal ["abcd"], reg.values + end + end + + def test_each_value + vals = [] + Win32::Registry::HKEY_CURRENT_USER.create(backslachs(TEST_REGISTRY_KEY)) do |reg| + reg.create("key1") + reg["value1"] = "abcd" + reg.each_value { |*a| vals << a } + end + assert_equal [["value1", Win32::Registry::REG_SZ, "abcd"]], vals + end + + def test_each_value_enum + vals = nil + Win32::Registry::HKEY_CURRENT_USER.create(backslachs(TEST_REGISTRY_KEY)) do |reg| + reg.create("key1") + reg["value1"] = "abcd" + reg["value2"] = 42 + vals = reg.each_value.to_a + end + assert_equal [["value1", Win32::Registry::REG_SZ, "abcd"], + ["value2", Win32::Registry::REG_DWORD, 42]], vals + end + + def test_utf8_encoding + keys = [] + Win32::Registry::HKEY_CURRENT_USER.create(backslachs(TEST_REGISTRY_KEY)) do |reg| + reg.create("abc EUR") + reg.create("abc €") + reg.each_key do |subkey| + keys << subkey end end + + assert_equal [Encoding::UTF_8] * 2, keys.map(&:encoding) + assert_equal ["abc EUR", "abc €"], keys end private @@ -79,19 +238,7 @@ def test_write def assert_predefined_key(key) assert_kind_of Win32::Registry, key assert_predicate key, :open? - assert_not_predicate key, :created? - end - - class << self - def unused_value(reg, prefix = "Test_", limit = 100, fail: true) - limit.times do - v = + rand(0x100000).to_s(36) - reg.read(v) - rescue - return v - end - omit "Unused value not found in #{reg}" if fail - end + refute_predicate key, :created? end end end diff --git a/thread.c b/thread.c index 12f78123f9b810..b1ea79cfcda499 100644 --- a/thread.c +++ b/thread.c @@ -1736,7 +1736,12 @@ thread_io_wake_pending_closer(struct waiting_fd *wfd) RB_VM_LOCK_LEAVE(); if (has_waiter) { - rb_thread_wakeup(wfd->busy->closing_thread); + rb_thread_t *th = rb_thread_ptr(wfd->busy->closing_thread); + if (th->scheduler != Qnil) { + rb_fiber_scheduler_unblock(th->scheduler, wfd->busy->closing_thread, wfd->busy->closing_fiber); + } else { + rb_thread_wakeup(wfd->busy->closing_thread); + } rb_mutex_unlock(wfd->busy->wakeup_mutex); } } @@ -2253,30 +2258,6 @@ handle_interrupt_arg_check_i(VALUE key, VALUE val, VALUE args) * resource allocation code. Then, the ensure block is where we can safely * deallocate your resources. * - * ==== Guarding from Timeout::Error - * - * In the next example, we will guard from the Timeout::Error exception. This - * will help prevent from leaking resources when Timeout::Error exceptions occur - * during normal ensure clause. For this example we use the help of the - * standard library Timeout, from lib/timeout.rb - * - * require 'timeout' - * Thread.handle_interrupt(Timeout::Error => :never) { - * timeout(10){ - * # Timeout::Error doesn't occur here - * Thread.handle_interrupt(Timeout::Error => :on_blocking) { - * # possible to be killed by Timeout::Error - * # while blocking operation - * } - * # Timeout::Error doesn't occur here - * } - * } - * - * In the first part of the +timeout+ block, we can rely on Timeout::Error being - * ignored. Then in the Timeout::Error => :on_blocking block, any - * operation that will block the calling thread is susceptible to a - * Timeout::Error exception being raised. - * * ==== Stack control settings * * It's possible to stack multiple levels of ::handle_interrupt blocks in order @@ -2687,6 +2668,7 @@ rb_notify_fd_close(int fd, struct rb_io_close_wait_list *busy) has_any = !ccan_list_empty(&busy->pending_fd_users); busy->closing_thread = rb_thread_current(); + busy->closing_fiber = rb_fiber_current(); wakeup_mutex = Qnil; if (has_any) { wakeup_mutex = rb_mutex_new(); @@ -4589,7 +4571,12 @@ void rb_gc_set_stack_end(VALUE **stack_end_p) { VALUE stack_end; +COMPILER_WARNING_PUSH +#if __has_warning("-Wdangling-pointer") +COMPILER_WARNING_IGNORED(-Wdangling-pointer); +#endif *stack_end_p = &stack_end; +COMPILER_WARNING_POP } #endif diff --git a/thread_none.c b/thread_none.c index 38730df7ba1ff2..158260982123e9 100644 --- a/thread_none.c +++ b/thread_none.c @@ -326,4 +326,10 @@ rb_thread_lock_native_thread(void) return false; } +void * +rb_thread_prevent_fork(void *(*func)(void *), void *data) +{ + return func(data); +} + #endif /* THREAD_SYSTEM_DEPENDENT_IMPLEMENTATION */ diff --git a/thread_pthread.c b/thread_pthread.c index 3ebb67aaa3ac17..c92fd52a663471 100644 --- a/thread_pthread.c +++ b/thread_pthread.c @@ -1320,7 +1320,7 @@ void rb_ractor_sched_sleep(rb_execution_context_t *ec, rb_ractor_t *cr, rb_unblock_function_t *ubf) { // ractor lock of cr is acquired - // r is sleeping statuss + // r is sleeping status rb_thread_t * volatile th = rb_ec_thread_ptr(ec); struct rb_thread_sched *sched = TH_SCHED(th); cr->sync.wait.waiting_thread = th; // TODO: multi-thread @@ -2360,7 +2360,8 @@ rb_threadptr_sched_free(rb_thread_t *th) } ruby_xfree(th->sched.context); - VM_ASSERT((th->sched.context = NULL) == NULL); + th->sched.context = NULL; + // VM_ASSERT(th->sched.context == NULL); #else ruby_xfree(th->sched.context_stack); native_thread_destroy(th->nt); @@ -3346,6 +3347,52 @@ native_sleep(rb_thread_t *th, rb_hrtime_t *rel) RUBY_DEBUG_LOG("wakeup"); } +// fork read-write lock (only for pthread) +static pthread_rwlock_t rb_thread_fork_rw_lock = PTHREAD_RWLOCK_INITIALIZER; + +void +rb_thread_release_fork_lock(void) +{ + int r; + if ((r = pthread_rwlock_unlock(&rb_thread_fork_rw_lock))) { + rb_bug_errno("pthread_rwlock_unlock", r); + } +} + +void +rb_thread_reset_fork_lock(void) +{ + int r; + if ((r = pthread_rwlock_destroy(&rb_thread_fork_rw_lock))) { + rb_bug_errno("pthread_rwlock_destroy", r); + } + + if ((r = pthread_rwlock_init(&rb_thread_fork_rw_lock, NULL))) { + rb_bug_errno("pthread_rwlock_init", r); + } +} + +void * +rb_thread_prevent_fork(void *(*func)(void *), void *data) +{ + int r; + if ((r = pthread_rwlock_rdlock(&rb_thread_fork_rw_lock))) { + rb_bug_errno("pthread_rwlock_rdlock", r); + } + void *result = func(data); + rb_thread_release_fork_lock(); + return result; +} + +void +rb_thread_acquire_fork_lock(void) +{ + int r; + if ((r = pthread_rwlock_wrlock(&rb_thread_fork_rw_lock))) { + rb_bug_errno("pthread_rwlock_wrlock", r); + } +} + // thread internal event hooks (only for pthread) struct rb_internal_thread_event_hook { diff --git a/thread_win32.c b/thread_win32.c index 1e2d4bdd1927c1..3bca58cbac0090 100644 --- a/thread_win32.c +++ b/thread_win32.c @@ -1011,4 +1011,10 @@ rb_thread_lock_native_thread(void) return false; } +void * +rb_thread_prevent_fork(void *(*func)(void *), void *data) +{ + return func(data); +} + #endif /* THREAD_SYSTEM_DEPENDENT_IMPLEMENTATION */ diff --git a/time.c b/time.c index 035d32dd3140f1..54db29c2af1d33 100644 --- a/time.c +++ b/time.c @@ -42,6 +42,7 @@ #include "internal/time.h" #include "internal/variable.h" #include "ruby/encoding.h" +#include "ruby/util.h" #include "timev.h" #include "builtin.h" @@ -570,6 +571,9 @@ num_exact(VALUE v) /* time_t */ +/* TIME_SCALE should be 10000... */ +static const int TIME_SCALE_NUMDIGITS = rb_strlen_lit(STRINGIZE(TIME_SCALE)) - 1; + static wideval_t rb_time_magnify(wideval_t w) { @@ -2643,15 +2647,11 @@ time_init_parse(rb_execution_context_t *ec, VALUE time, VALUE str, VALUE zone, V } if (!NIL_P(subsec)) { /* subseconds is the last using ndigits */ - static const size_t TIME_SCALE_NUMDIGITS = - /* TIME_SCALE should be 10000... */ - rb_strlen_lit(STRINGIZE(TIME_SCALE)) - 1; - - if (ndigits < TIME_SCALE_NUMDIGITS) { + if (ndigits < (size_t)TIME_SCALE_NUMDIGITS) { VALUE mul = rb_int_positive_pow(10, TIME_SCALE_NUMDIGITS - ndigits); subsec = rb_int_mul(subsec, mul); } - else if (ndigits > TIME_SCALE_NUMDIGITS) { + else if (ndigits > (size_t)TIME_SCALE_NUMDIGITS) { VALUE num = rb_int_positive_pow(10, ndigits - TIME_SCALE_NUMDIGITS); subsec = rb_rational_new(subsec, num); } @@ -5215,6 +5215,115 @@ time_strftime(VALUE time, VALUE format) } } +static VALUE +time_xmlschema(int argc, VALUE *argv, VALUE time) +{ + long fraction_digits = 0; + rb_check_arity(argc, 0, 1); + if (argc > 0) { + fraction_digits = NUM2LONG(argv[0]); + if (fraction_digits < 0) { + fraction_digits = 0; + } + } + + struct time_object *tobj; + + GetTimeval(time, tobj); + MAKE_TM(time, tobj); + + const long size_after_year = sizeof("-MM-DDTHH:MM:SS+ZH:ZM") + fraction_digits + + (fraction_digits > 0); + VALUE str; + char *ptr; + +# define fill_digits_long(len, prec, n) \ + for (int fill_it = 1, written = snprintf(ptr, len, "%0*ld", prec, n); \ + fill_it; ptr += written, fill_it = 0) + + if (FIXNUM_P(tobj->vtm.year)) { + long year = FIX2LONG(tobj->vtm.year); + int year_width = (year < 0) + rb_strlen_lit("YYYY"); + int w = (year >= -9999 && year <= 9999 ? year_width : (year < 0) + (int)DECIMAL_SIZE_OF(year)); + str = rb_usascii_str_new(0, w + size_after_year); + ptr = RSTRING_PTR(str); + fill_digits_long(w + 1, year_width, year) { + if (year >= -9999 && year <= 9999) { + RUBY_ASSERT(written == year_width); + } + else { + RUBY_ASSERT(written >= year_width); + RUBY_ASSERT(written <= w); + } + } + } + else { + str = rb_int2str(tobj->vtm.year, 10); + rb_str_modify_expand(str, size_after_year); + ptr = RSTRING_END(str); + } + +# define fill_2(c, n) (*ptr++ = c, *ptr++ = '0' + (n) / 10, *ptr++ = '0' + (n) % 10) + fill_2('-', tobj->vtm.mon); + fill_2('-', tobj->vtm.mday); + fill_2('T', tobj->vtm.hour); + fill_2(':', tobj->vtm.min); + fill_2(':', tobj->vtm.sec); + + if (fraction_digits > 0) { + VALUE subsecx = tobj->vtm.subsecx; + long subsec; + int digits = -1; + *ptr++ = '.'; + if (fraction_digits <= TIME_SCALE_NUMDIGITS) { + digits = TIME_SCALE_NUMDIGITS - (int)fraction_digits; + } + else { + long w = fraction_digits - TIME_SCALE_NUMDIGITS; /* > 0 */ + subsecx = mulv(subsecx, rb_int_positive_pow(10, (unsigned long)w)); + if (!RB_INTEGER_TYPE_P(subsecx)) { /* maybe Rational */ + subsecx = rb_Integer(subsecx); + } + if (FIXNUM_P(subsecx)) digits = 0; + } + if (digits >= 0 && fraction_digits < INT_MAX) { + subsec = NUM2LONG(subsecx); + if (digits > 0) subsec /= (long)pow(10, digits); + fill_digits_long(fraction_digits + 1, (int)fraction_digits, subsec) { + RUBY_ASSERT(written == (int)fraction_digits); + } + } + else { + subsecx = rb_int2str(subsecx, 10); + long len = RSTRING_LEN(subsecx); + if (fraction_digits > len) { + memset(ptr, '0', fraction_digits - len); + } + else { + len = fraction_digits; + } + ptr += fraction_digits; + memcpy(ptr - len, RSTRING_PTR(subsecx), len); + } + } + + if (TZMODE_UTC_P(tobj)) { + *ptr = 'Z'; + ptr++; + } + else { + long offset = NUM2LONG(rb_time_utc_offset(time)); + char sign = offset < 0 ? '-' : '+'; + if (offset < 0) offset = -offset; + offset /= 60; + fill_2(sign, offset / 60); + fill_2(':', offset % 60); + } + const char *const start = RSTRING_PTR(str); + rb_str_set_len(str, ptr - start); // We could skip coderange scanning as we know it's full ASCII. + return str; +} + int ruby_marshal_write_long(long x, char *buf); enum {base_dump_size = 8}; @@ -5842,6 +5951,8 @@ Init_Time(void) rb_define_method(rb_cTime, "subsec", time_subsec, 0); rb_define_method(rb_cTime, "strftime", time_strftime, 1); + rb_define_method(rb_cTime, "xmlschema", time_xmlschema, -1); + rb_define_alias(rb_cTime, "iso8601", "xmlschema"); /* methods for marshaling */ rb_define_private_method(rb_cTime, "_dump", time_dump, -1); diff --git a/tool/bundler/dev_gems.rb b/tool/bundler/dev_gems.rb index 1422cfc7a5238a..9ede9e1d8e8779 100644 --- a/tool/bundler/dev_gems.rb +++ b/tool/bundler/dev_gems.rb @@ -8,7 +8,7 @@ gem "webrick", "~> 1.6" gem "turbo_tests", "~> 2.2.3" -gem "parallel_tests", "< 3.9.0" +gem "parallel_tests", "~> 4.7" gem "parallel", "~> 1.19" gem "rspec-core", "~> 3.12" gem "rspec-expectations", "~> 3.12" diff --git a/tool/bundler/test_gems.rb b/tool/bundler/test_gems.rb index 32cb6b34eef43d..bb7d4edb9a2bd9 100644 --- a/tool/bundler/test_gems.rb +++ b/tool/bundler/test_gems.rb @@ -2,12 +2,13 @@ source "https://rubygems.org" -gem "rack", "~> 2.0" +gem "rack", "~> 3.0" +gem "rackup", "~> 2.1" gem "base64" -gem "webrick", "1.7.0" -gem "rack-test", "~> 1.1" +gem "webrick", "~> 1.8" +gem "rack-test", "~> 2.1" gem "compact_index", "~> 0.15.0" -gem "sinatra", "~> 3.0" +gem "sinatra", "~> 4.0" gem "rake", "~> 13.1" gem "builder", "~> 3.2" gem "rb_sys" diff --git a/tool/bundler/vendor_gems.rb b/tool/bundler/vendor_gems.rb index f02d02656d2e45..4b7cdb67be40f7 100644 --- a/tool/bundler/vendor_gems.rb +++ b/tool/bundler/vendor_gems.rb @@ -4,12 +4,13 @@ gem "fileutils", "1.7.2" gem "molinillo", github: "cocoapods/molinillo" -gem "net-http", "0.4.0" -gem "net-http-persistent", "4.0.2" +gem "net-http", "0.4.1" +gem "net-http-persistent", "4.0.4" gem "net-protocol", "0.2.2" gem "optparse", "0.4.0" gem "pub_grub", github: "jhawthorn/pub_grub" gem "resolv", "0.4.0" +gem "securerandom", "0.3.1" gem "timeout", "0.4.1" gem "thor", "1.3.0" gem "tsort", "0.2.0" diff --git a/tool/format-release b/tool/format-release index 737148e0ce4674..258c25406d2649 100755 --- a/tool/format-release +++ b/tool/format-release @@ -1,6 +1,12 @@ #!/usr/bin/env ruby -# https://rubygems.org/gems/diffy -require "diffy" + +require "bundler/inline" + +gemfile do + source "https://rubygems.org" + gem "diffy" +end + require "open-uri" require "yaml" diff --git a/tool/lib/bundled_gem.rb b/tool/lib/bundled_gem.rb index 8730f0fb3ac535..d870925d05f981 100644 --- a/tool/lib/bundled_gem.rb +++ b/tool/lib/bundled_gem.rb @@ -91,7 +91,10 @@ def dummy_gemspec(gemspec) Dir.chdir(gemdir) do spec = Gem::Specification.new do |s| s.name = gemfile.chomp(".gemspec") - s.version = File.read("lib/#{s.name}.rb")[/VERSION = "(.+?)"/, 1] + s.version = + File.read("lib/#{s.name}.rb")[/VERSION = "(.+?)"/, 1] || + begin File.read("lib/#{s.name}/version.rb")[/VERSION = "(.+?)"/, 1]; rescue; nil; end || + raise("cannot find the version of #{ s.name } gem") s.authors = ["DUMMY"] s.email = ["dummy@ruby-lang.org"] s.files = Dir.glob("{lib,ext}/**/*").select {|f| File.file?(f)} diff --git a/tool/lib/core_assertions.rb b/tool/lib/core_assertions.rb index 361b1a697d4495..62ada2bdca0628 100644 --- a/tool/lib/core_assertions.rb +++ b/tool/lib/core_assertions.rb @@ -861,6 +861,82 @@ def new_test_token token = "\e[7;1m#{$$.to_s}:#{Time.now.strftime('%s.%L')}:#{rand(0x10000).to_s(16)}:\e[m" return token.dump, Regexp.quote(token) end + + # Platform predicates + + def self.mswin? + defined?(@mswin) ? @mswin : @mswin = RUBY_PLATFORM.include?('mswin') + end + private def mswin? + CoreAssertions.mswin? + end + + def self.mingw? + defined?(@mingw) ? @mingw : @mingw = RUBY_PLATFORM.include?('mingw') + end + private def mingw? + CoreAssertions.mingw? + end + + module_function def windows? + mswin? or mingw? + end + + def self.version_compare(expected, actual) + expected.zip(actual).each {|e, a| z = (e <=> a); return z if z.nonzero?} + 0 + end + + def self.version_match?(expected, actual) + if !actual + false + elsif expected.empty? + true + elsif expected.size == 1 and Range === (range = expected.first) + b, e = range.begin, range.end + return false if b and (c = version_compare(Array(b), actual)) > 0 + return false if e and (c = version_compare(Array(e), actual)) < 0 + return false if e and range.exclude_end? and c == 0 + true + else + version_compare(expected, actual).zero? + end + end + + def self.linux?(*ver) + unless defined?(@linux) + @linux = RUBY_PLATFORM.include?('linux') && `uname -r`.scan(/\d+/).map(&:to_i) + end + version_match? ver, @linux + end + private def linux?(*ver) + CoreAssertions.linux?(*ver) + end + + def self.glibc?(*ver) + unless defined?(@glibc) + libc = `/usr/bin/ldd /bin/sh`[/^\s*libc.*=> *\K\S*/] + if libc and /version (\d+)\.(\d+)\.$/ =~ IO.popen([libc], &:read)[] + @glibc = [$1.to_i, $2.to_i] + else + @glibc = false + end + end + version_match? ver, @glibc + end + private def glibc?(*ver) + CoreAssertions.glibc?(*ver) + end + + def self.macos?(*ver) + unless defined?(@macos) + @macos = RUBY_PLATFORM.include?('darwin') && `sw_vers -productVersion`.scan(/\d+/).map(&:to_i) + end + version_match? ver, @macos + end + private def macos?(*ver) + CoreAssertions.macos?(*ver) + end end end end diff --git a/tool/lib/envutil.rb b/tool/lib/envutil.rb index 642965047f7c32..952614b8cf0e12 100644 --- a/tool/lib/envutil.rb +++ b/tool/lib/envutil.rb @@ -165,6 +165,11 @@ def invoke_ruby(args, stdin_data = "", capture_stdout = false, capture_stderr = } args = [args] if args.kind_of?(String) + # use the same parser as current ruby + if args.none? { |arg| arg.start_with?("--parser=") } + current_parser = RUBY_DESCRIPTION =~ /prism/i ? "prism" : "parse.y" + args = ["--parser=#{current_parser}"] + args + end pid = spawn(child_env, *precommand, rubybin, *args, opt) in_c.close out_c&.close diff --git a/tool/lib/leakchecker.rb b/tool/lib/leakchecker.rb index 7518f49ae3e4e3..69aeb2c254cbfd 100644 --- a/tool/lib/leakchecker.rb +++ b/tool/lib/leakchecker.rb @@ -155,8 +155,8 @@ def find_tempfiles(prev_count=-1) if prev_count == count [prev_count, []] else - tempfiles = ObjectSpace.each_object(Tempfile).find_all {|t| - t.instance_variable_defined?(:@tmpfile) and t.path + tempfiles = ObjectSpace.each_object(Tempfile).reject {|t| + t.instance_variables.empty? || t.closed? } [count, tempfiles] end diff --git a/tool/lib/path.rb b/tool/lib/path.rb index 5582b2851e46ba..f16a164338d66a 100644 --- a/tool/lib/path.rb +++ b/tool/lib/path.rb @@ -40,7 +40,7 @@ def clean_link(src, dest) # Extensions to FileUtils module Mswin - def ln_safe(src, dest, *opt) + def ln_safe(src, dest, real_src, *opt) cmd = ["mklink", dest.tr("/", "\\"), src.tr("/", "\\")] cmd[1, 0] = opt return if system("cmd", "/c", *cmd) @@ -48,23 +48,23 @@ def ln_safe(src, dest, *opt) puts cmd.join(" ") end - def ln_dir_safe(src, dest) + def ln_dir_safe(src, dest, real_src) ln_safe(src, dest, "/d") end end module HardlinkExcutable - def ln_exe(src, dest) + def ln_exe(relative_src, dest, src) ln(src, dest, force: true) end end - def ln_safe(src, dest) + def ln_safe(src, dest, real_src) ln_sf(src, dest) rescue Errno::ENOENT # Windows disallows to create broken symboic links, probably because # it is a kind of reparse points. - raise if File.exist?(src) + raise if File.exist?(real_src) end alias ln_dir_safe ln_safe @@ -75,16 +75,16 @@ def ln_relative(src, dest, executable = false) parent = File.dirname(dest) File.directory?(parent) or mkdir_p(parent) if executable - return (ln_exe(src, dest) if File.exist?(src)) + return (ln_exe(relative(src, parent), dest, src) if File.exist?(src)) end - clean_link(relative(src, parent), dest) {|s, d| ln_safe(s, d)} + clean_link(relative(src, parent), dest) {|s, d| ln_safe(s, d, src)} end def ln_dir_relative(src, dest) return if File.identical?(src, dest) parent = File.dirname(dest) File.directory?(parent) or mkdir_p(parent) - clean_link(relative(src, parent), dest) {|s, d| ln_dir_safe(s, d)} + clean_link(relative(src, parent), dest) {|s, d| ln_dir_safe(s, d, src)} end case (CROSS_COMPILING || RUBY_PLATFORM) diff --git a/tool/lib/test/unit/assertions.rb b/tool/lib/test/unit/assertions.rb index aad422f7e7aa33..fe3351107ec407 100644 --- a/tool/lib/test/unit/assertions.rb +++ b/tool/lib/test/unit/assertions.rb @@ -522,7 +522,7 @@ def refute_same exp, act, msg = nil # Skips the current test. Gets listed at the end of the run but # doesn't cause a failure exit code. - def pend msg = nil, bt = caller + def pend msg = nil, bt = caller, &_ msg ||= "Skipped, no message given" @skip = true raise Test::Unit::PendedError, msg, bt diff --git a/tool/lrama/NEWS.md b/tool/lrama/NEWS.md index 96aaaf94f57d5f..0e682b467603f3 100644 --- a/tool/lrama/NEWS.md +++ b/tool/lrama/NEWS.md @@ -1,5 +1,225 @@ # NEWS for Lrama +## Lrama 0.6.10 (2024-09-11) + +### Aliased Named References for actions of RHS in parameterizing rules + +Allow to use aliased named references for actions of RHS in parameterizing rules. + +``` +%rule sum(X, Y): X[summand] '+' Y[addend] { $$ = $summand + $addend } + ; +``` + +https://github.com/ruby/lrama/pull/410 + + +### Named References for actions of RHS in parameterizing rules caller side + +Allow to use named references for actions of RHS in parameterizing rules caller side. + +``` +opt_nl: '\n'?[nl] { $$ = $nl; } + ; +``` + +https://github.com/ruby/lrama/pull/414 + +### Widen the definable position of parameterizing rules + +Allow to define parameterizing rules in the middle of the grammar. + +``` +%rule defined_option(X): /* empty */ + | X + ; + +%% + +program : defined_option(number) + | defined_list(number) + ; + +%rule defined_list(X): /* empty */ /* <--- here */ + | defined_list(X) number + ; +``` + +https://github.com/ruby/lrama/pull/420 + +### Report unused terminal symbols + +Support to report unused terminal symbols. +Run `exe/lrama --report=terms` to show unused terminal symbols. + +``` +⯠exe/lrama --report=terms sample/calc.y + 11 Unused Terms + 0 YYerror + 1 YYUNDEF + 2 '\\\\' + 3 '\\13' + 4 keyword_class2 + 5 tNUMBER + 6 tPLUS + 7 tMINUS + 8 tEQ + 9 tEQEQ + 10 '>' +``` +https://github.com/ruby/lrama/pull/439 + +### Report unused rules + +Support to report unused rules. +Run `exe/lrama --report=rules` to show unused rules. + +``` +⯠exe/lrama --report=rules sample/calc.y + 3 Unused Rules + 0 unused_option + 1 unused_list + 2 unused_nonempty_list +``` + +https://github.com/ruby/lrama/pull/441 + +### Ensure compatibility with Bison for `%locations` directive + +Support `%locations` directive to ensure compatibility with Bison. +Change to `%locations` directive not set by default. + +https://github.com/ruby/lrama/pull/446 + +### Diagnostics report for parameterizing rules redefine + +Support to warning redefined parameterizing rules. +Run `exe/lrama -W` or `exe/lrama --warnings` to show redefined parameterizing rules. + +``` +⯠exe/lrama -W sample/calc.y +parameterizing rule redefined: redefined_method(X) +parameterizing rule redefined: redefined_method(X) +``` + +https://github.com/ruby/lrama/pull/448 + +### Support `-v` and `--verbose` option + +Support to `-v` and `--verbose` option. +These options align with Bison behavior. So same as '--report=state' option. + +https://github.com/ruby/lrama/pull/457 + +## Lrama 0.6.9 (2024-05-02) + +### Callee side tag specification of parameterizing rules + +Allow to specify tag on callee side of parameterizing rules. + +``` +%union { + int i; +} + +%rule with_tag(X) : X { $$ = $1; } + ; +``` + +### Named References for actions of RHS in parameterizing rules + +Allow to use named references for actions of RHS in parameterizing rules. + +``` +%rule option(number): /* empty */ + | number { $$ = $number; } + ; +``` + +## Lrama 0.6.8 (2024-04-29) + +### Nested parameterizing rules with tag + +Allow to nested parameterizing rules with tag. + +``` +%union { + int i; +} + +%rule nested_nested_option(X): /* empty */ + | X + ; + +%rule nested_option(X): /* empty */ + | nested_nested_option(X) + ; + +%rule option(Y): /* empty */ + | nested_option(Y) + ; +``` + +## Lrama 0.6.7 (2024-04-28) + +### RHS of user defined parameterizing rules contains `'symbol'?`, `'symbol'+` and `'symbol'*`. + +User can use `'symbol'?`, `'symbol'+` and `'symbol'*` in RHS of user defined parameterizing rules. + +``` +%rule with_word_seps(X): /* empty */ + | X ' '+ + ; +``` + +## Lrama 0.6.6 (2024-04-27) + +### Trace actions + +Support trace actions for debugging. +Run `exe/lrama --trace=actions` to show grammar rules with actions. + +``` +⯠exe/lrama --trace=actions sample/calc.y +Grammar rules with actions: +$accept -> list, YYEOF {} +list -> ε {} +list -> list, LF {} +list -> list, expr, LF { printf("=> %d\n", $2); } +expr -> NUM {} +expr -> expr, '+', expr { $$ = $1 + $3; } +expr -> expr, '-', expr { $$ = $1 - $3; } +expr -> expr, '*', expr { $$ = $1 * $3; } +expr -> expr, '/', expr { $$ = $1 / $3; } +expr -> '(', expr, ')' { $$ = $2; } +``` + +### Inlining + +Support inlining for rules. +The `%inline` directive causes all references to symbols to be replaced with its definition. + +``` +%rule %inline op: PLUS { + } + | TIMES { * } + ; + +%% + +expr : number { $$ = $1; } + | expr op expr { $$ = $1 $2 $3; } + ; +``` + +as same as + +``` +expr : number { $$ = $1; } + | expr '+' expr { $$ = $1 + $3; } + | expr '*' expr { $$ = $1 * $3; } + ; +``` + ## Lrama 0.6.5 (2024-03-25) ### Typed Midrule Actions diff --git a/tool/lrama/exe/lrama b/tool/lrama/exe/lrama index ba5fb06c82c7dd..1aece5d1410125 100755 --- a/tool/lrama/exe/lrama +++ b/tool/lrama/exe/lrama @@ -1,4 +1,5 @@ #!/usr/bin/env ruby +# frozen_string_literal: true $LOAD_PATH << File.join(__dir__, "../lib") require "lrama" diff --git a/tool/lrama/lib/lrama.rb b/tool/lrama/lib/lrama.rb index 9e517b0d71ada3..fe2e05807c8994 100644 --- a/tool/lrama/lib/lrama.rb +++ b/tool/lrama/lib/lrama.rb @@ -1,17 +1,22 @@ -require "lrama/bitmap" -require "lrama/command" -require "lrama/context" -require "lrama/counterexamples" -require "lrama/digraph" -require "lrama/grammar" -require "lrama/lexer" -require "lrama/option_parser" -require "lrama/options" -require "lrama/output" -require "lrama/parser" -require "lrama/report" -require "lrama/state" -require "lrama/states" -require "lrama/states_reporter" -require "lrama/version" -require "lrama/warning" +# frozen_string_literal: true + +require_relative "lrama/bitmap" +require_relative "lrama/command" +require_relative "lrama/context" +require_relative "lrama/counterexamples" +require_relative "lrama/diagnostics" +require_relative "lrama/digraph" +require_relative "lrama/grammar" +require_relative "lrama/grammar_validator" +require_relative "lrama/lexer" +require_relative "lrama/logger" +require_relative "lrama/option_parser" +require_relative "lrama/options" +require_relative "lrama/output" +require_relative "lrama/parser" +require_relative "lrama/report" +require_relative "lrama/state" +require_relative "lrama/states" +require_relative "lrama/states_reporter" +require_relative "lrama/trace_reporter" +require_relative "lrama/version" diff --git a/tool/lrama/lib/lrama/bitmap.rb b/tool/lrama/lib/lrama/bitmap.rb index 8349a23c344b1a..23cbd30d4c6823 100644 --- a/tool/lrama/lib/lrama/bitmap.rb +++ b/tool/lrama/lib/lrama/bitmap.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama module Bitmap def self.from_array(ary) diff --git a/tool/lrama/lib/lrama/command.rb b/tool/lrama/lib/lrama/command.rb index 12fc4fc7ec5361..0095c1a1190c00 100644 --- a/tool/lrama/lib/lrama/command.rb +++ b/tool/lrama/lib/lrama/command.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class Command LRAMA_LIB = File.realpath(File.join(File.dirname(__FILE__))) @@ -14,7 +16,6 @@ def run(argv) Report::Duration.enable if options.trace_opts[:time] - warning = Lrama::Warning.new text = options.y.read options.y.close if options.y != STDIN begin @@ -31,7 +32,7 @@ def run(argv) message = message.gsub(/.+/, "\e[1m\\&\e[m") if Exception.to_tty? abort message end - states = Lrama::States.new(grammar, warning, trace_state: (options.trace_opts[:automaton] || options.trace_opts[:closure])) + states = Lrama::States.new(grammar, trace_state: (options.trace_opts[:automaton] || options.trace_opts[:closure])) states.compute context = Lrama::Context.new(states) @@ -42,15 +43,8 @@ def run(argv) end end - if options.trace_opts && options.trace_opts[:rules] - puts "Grammar rules:" - puts grammar.rules - end - - if options.trace_opts && options.trace_opts[:actions] - puts "Grammar rules with actions:" - grammar.rules.each { |rule| puts rule.with_actions } - end + reporter = Lrama::TraceReporter.new(grammar) + reporter.report(**options.trace_opts) File.open(options.outfile, "w+") do |f| Lrama::Output.new( @@ -65,9 +59,9 @@ def run(argv) ).render end - if warning.has_error? - exit false - end + logger = Lrama::Logger.new + exit false unless Lrama::GrammarValidator.new(grammar, states, logger).valid? + Lrama::Diagnostics.new(grammar, states, logger).run(options.diagnostic) end end end diff --git a/tool/lrama/lib/lrama/context.rb b/tool/lrama/lib/lrama/context.rb index 32017e65fc7970..4be21988606eda 100644 --- a/tool/lrama/lib/lrama/context.rb +++ b/tool/lrama/lib/lrama/context.rb @@ -1,4 +1,6 @@ -require "lrama/report/duration" +# frozen_string_literal: true + +require_relative "report/duration" module Lrama # This is passed to a template @@ -253,7 +255,7 @@ def compute_yydefact # If no default_reduction_rule, default behavior is an # error then replace ErrorActionNumber with zero. - if !state.default_reduction_rule + unless state.default_reduction_rule actions.map! do |e| if e == ErrorActionNumber 0 @@ -301,10 +303,7 @@ def compute_yydefgoto end @states.nterms.each do |nterm| - if !(states = nterm_to_next_states[nterm]) - default_goto = 0 - not_default_gotos = [] - else + if (states = nterm_to_next_states[nterm]) default_state = states.map(&:last).group_by {|s| s }.max_by {|_, v| v.count }.first default_goto = default_state.id not_default_gotos = [] @@ -312,6 +311,9 @@ def compute_yydefgoto next if to_state.id == default_goto not_default_gotos << [from_state.id, to_state.id] end + else + default_goto = 0 + not_default_gotos = [] end k = nterm_number_to_sequence_number(nterm.number) diff --git a/tool/lrama/lib/lrama/counterexamples.rb b/tool/lrama/lib/lrama/counterexamples.rb index 046265da59a8a2..aaf2bb201f99c3 100644 --- a/tool/lrama/lib/lrama/counterexamples.rb +++ b/tool/lrama/lib/lrama/counterexamples.rb @@ -1,13 +1,15 @@ +# frozen_string_literal: true + require "set" -require "lrama/counterexamples/derivation" -require "lrama/counterexamples/example" -require "lrama/counterexamples/path" -require "lrama/counterexamples/production_path" -require "lrama/counterexamples/start_path" -require "lrama/counterexamples/state_item" -require "lrama/counterexamples/transition_path" -require "lrama/counterexamples/triple" +require_relative "counterexamples/derivation" +require_relative "counterexamples/example" +require_relative "counterexamples/path" +require_relative "counterexamples/production_path" +require_relative "counterexamples/start_path" +require_relative "counterexamples/state_item" +require_relative "counterexamples/transition_path" +require_relative "counterexamples/triple" module Lrama # See: https://www.cs.cornell.edu/andru/papers/cupex/cupex.pdf @@ -171,7 +173,13 @@ def find_shift_conflict_shortest_state_items(reduce_path, conflict_state, confli break end - if !si.item.beginning_of_rule? + if si.item.beginning_of_rule? + key = [si.state, si.item.lhs] + @reverse_productions[key].each do |item| + state_item = StateItem.new(si.state, item) + queue << (sis + [state_item]) + end + else key = [si, si.item.previous_sym] @reverse_transitions[key].each do |prev_target_state_item| next if prev_target_state_item.state != prev_state_item.state @@ -183,12 +191,6 @@ def find_shift_conflict_shortest_state_items(reduce_path, conflict_state, confli queue.clear break end - else - key = [si.state, si.item.lhs] - @reverse_productions[key].each do |item| - state_item = StateItem.new(si.state, item) - queue << (sis + [state_item]) - end end end else diff --git a/tool/lrama/lib/lrama/counterexamples/derivation.rb b/tool/lrama/lib/lrama/counterexamples/derivation.rb index 691e9353563aa4..423e58b829aaa6 100644 --- a/tool/lrama/lib/lrama/counterexamples/derivation.rb +++ b/tool/lrama/lib/lrama/counterexamples/derivation.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class Counterexamples class Derivation diff --git a/tool/lrama/lib/lrama/counterexamples/example.rb b/tool/lrama/lib/lrama/counterexamples/example.rb index 62244a77e0fa01..8dda0d17d5b9b0 100644 --- a/tool/lrama/lib/lrama/counterexamples/example.rb +++ b/tool/lrama/lib/lrama/counterexamples/example.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class Counterexamples class Example diff --git a/tool/lrama/lib/lrama/counterexamples/path.rb b/tool/lrama/lib/lrama/counterexamples/path.rb index edba67a3b61343..243b6b42484685 100644 --- a/tool/lrama/lib/lrama/counterexamples/path.rb +++ b/tool/lrama/lib/lrama/counterexamples/path.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class Counterexamples class Path diff --git a/tool/lrama/lib/lrama/counterexamples/production_path.rb b/tool/lrama/lib/lrama/counterexamples/production_path.rb index d7db68851841d1..0a230c7fce72fd 100644 --- a/tool/lrama/lib/lrama/counterexamples/production_path.rb +++ b/tool/lrama/lib/lrama/counterexamples/production_path.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class Counterexamples class ProductionPath < Path diff --git a/tool/lrama/lib/lrama/counterexamples/start_path.rb b/tool/lrama/lib/lrama/counterexamples/start_path.rb index 4a6821cd0feec6..c0351c8248972a 100644 --- a/tool/lrama/lib/lrama/counterexamples/start_path.rb +++ b/tool/lrama/lib/lrama/counterexamples/start_path.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class Counterexamples class StartPath < Path diff --git a/tool/lrama/lib/lrama/counterexamples/state_item.rb b/tool/lrama/lib/lrama/counterexamples/state_item.rb index 930ff4a5f86493..c919818324c2f4 100644 --- a/tool/lrama/lib/lrama/counterexamples/state_item.rb +++ b/tool/lrama/lib/lrama/counterexamples/state_item.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class Counterexamples class StateItem < Struct.new(:state, :item) diff --git a/tool/lrama/lib/lrama/counterexamples/transition_path.rb b/tool/lrama/lib/lrama/counterexamples/transition_path.rb index 96e611612aa9c2..47bfbc4f98d15d 100644 --- a/tool/lrama/lib/lrama/counterexamples/transition_path.rb +++ b/tool/lrama/lib/lrama/counterexamples/transition_path.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class Counterexamples class TransitionPath < Path diff --git a/tool/lrama/lib/lrama/counterexamples/triple.rb b/tool/lrama/lib/lrama/counterexamples/triple.rb index e802beccf4cffc..64014ee223521b 100644 --- a/tool/lrama/lib/lrama/counterexamples/triple.rb +++ b/tool/lrama/lib/lrama/counterexamples/triple.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class Counterexamples # s: state diff --git a/tool/lrama/lib/lrama/diagnostics.rb b/tool/lrama/lib/lrama/diagnostics.rb new file mode 100644 index 00000000000000..e9da398c89c9c6 --- /dev/null +++ b/tool/lrama/lib/lrama/diagnostics.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +module Lrama + class Diagnostics + def initialize(grammar, states, logger) + @grammar = grammar + @states = states + @logger = logger + end + + def run(diagnostic) + if diagnostic + diagnose_conflict + diagnose_parameterizing_redefined + end + end + + private + + def diagnose_conflict + if @states.sr_conflicts_count != 0 + @logger.warn("shift/reduce conflicts: #{@states.sr_conflicts_count} found") + end + + if @states.rr_conflicts_count != 0 + @logger.warn("reduce/reduce conflicts: #{@states.rr_conflicts_count} found") + end + end + + def diagnose_parameterizing_redefined + @grammar.parameterizing_rule_resolver.redefined_rules.each do |rule| + @logger.warn("parameterizing rule redefined: #{rule}") + end + end + end +end diff --git a/tool/lrama/lib/lrama/digraph.rb b/tool/lrama/lib/lrama/digraph.rb index bbaa86019f5deb..d2bb88101a7830 100644 --- a/tool/lrama/lib/lrama/digraph.rb +++ b/tool/lrama/lib/lrama/digraph.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama # Algorithm Digraph of https://dl.acm.org/doi/pdf/10.1145/69622.357187 (P. 625) class Digraph diff --git a/tool/lrama/lib/lrama/grammar.rb b/tool/lrama/lib/lrama/grammar.rb index a816b8261b368f..3724f828d7a2d0 100644 --- a/tool/lrama/lib/lrama/grammar.rb +++ b/tool/lrama/lib/lrama/grammar.rb @@ -1,43 +1,40 @@ +# frozen_string_literal: true + require "forwardable" -require "lrama/grammar/auxiliary" -require "lrama/grammar/binding" -require "lrama/grammar/code" -require "lrama/grammar/counter" -require "lrama/grammar/destructor" -require "lrama/grammar/error_token" -require "lrama/grammar/parameterizing_rule" -require "lrama/grammar/percent_code" -require "lrama/grammar/precedence" -require "lrama/grammar/printer" -require "lrama/grammar/reference" -require "lrama/grammar/rule" -require "lrama/grammar/rule_builder" -require "lrama/grammar/symbol" -require "lrama/grammar/symbols" -require "lrama/grammar/type" -require "lrama/grammar/union" -require "lrama/lexer" +require_relative "grammar/auxiliary" +require_relative "grammar/binding" +require_relative "grammar/code" +require_relative "grammar/counter" +require_relative "grammar/destructor" +require_relative "grammar/error_token" +require_relative "grammar/parameterizing_rule" +require_relative "grammar/percent_code" +require_relative "grammar/precedence" +require_relative "grammar/printer" +require_relative "grammar/reference" +require_relative "grammar/rule" +require_relative "grammar/rule_builder" +require_relative "grammar/symbol" +require_relative "grammar/symbols" +require_relative "grammar/type" +require_relative "grammar/union" +require_relative "lexer" module Lrama # Grammar is the result of parsing an input grammar file class Grammar extend Forwardable - attr_reader :percent_codes, :eof_symbol, :error_symbol, :undef_symbol, :accept_symbol, :aux - attr_accessor :union, :expect, - :printers, :error_tokens, - :lex_param, :parse_param, :initial_action, + attr_reader :percent_codes, :eof_symbol, :error_symbol, :undef_symbol, :accept_symbol, :aux, :parameterizing_rule_resolver + attr_accessor :union, :expect, :printers, :error_tokens, :lex_param, :parse_param, :initial_action, :after_shift, :before_reduce, :after_reduce, :after_shift_error_token, :after_pop_stack, - :symbols_resolver, :types, - :rules, :rule_builders, - :sym_to_rules, :no_stdlib + :symbols_resolver, :types, :rules, :rule_builders, :sym_to_rules, :no_stdlib, :locations def_delegators "@symbols_resolver", :symbols, :nterms, :terms, :add_nterm, :add_term, :find_symbol_by_number!, :find_symbol_by_id!, :token_to_symbol, :find_symbol_by_s_value!, :fill_symbol_number, :fill_nterm_type, :fill_printer, :fill_destructor, :fill_error_token, :sort_by_number! - def initialize(rule_counter) @rule_counter = rule_counter @@ -59,10 +56,15 @@ def initialize(rule_counter) @accept_symbol = nil @aux = Auxiliary.new @no_stdlib = false + @locations = false append_special_symbols end + def create_rule_builder(rule_counter, midrule_action_counter) + RuleBuilder.new(rule_counter, midrule_action_counter, @parameterizing_rule_resolver) + end + def add_percent_code(id:, code:) @percent_codes << PercentCode.new(id.s_value, code.s_value) end @@ -141,6 +143,7 @@ def epilogue=(epilogue) end def prepare + resolve_inline_rules normalize_rules collect_symbols set_lhs_and_rhs @@ -149,6 +152,7 @@ def prepare fill_sym_to_rules compute_nullable compute_first_set + set_locations end # TODO: More validation methods @@ -255,7 +259,7 @@ def compute_first_set def setup_rules @rule_builders.each do |builder| - builder.setup_rules(@parameterizing_rule_resolver) + builder.setup_rules end end @@ -289,10 +293,23 @@ def append_special_symbols @accept_symbol = term end + def resolve_inline_rules + while @rule_builders.any? {|r| r.has_inline_rules? } do + @rule_builders = @rule_builders.flat_map do |builder| + if builder.has_inline_rules? + builder.resolve_inline_rules + else + builder + end + end + end + end + def normalize_rules # Add $accept rule to the top of rules - lineno = @rule_builders.first ? @rule_builders.first.line : 0 - @rules << Rule.new(id: @rule_counter.increment, _lhs: @accept_symbol.id, _rhs: [@rule_builders.first.lhs, @eof_symbol.id], token_code: nil, lineno: lineno) + rule_builder = @rule_builders.first # : RuleBuilder + lineno = rule_builder ? rule_builder.line : 0 + @rules << Rule.new(id: @rule_counter.increment, _lhs: @accept_symbol.id, _rhs: [rule_builder.lhs, @eof_symbol.id], token_code: nil, lineno: lineno) setup_rules @@ -370,12 +387,16 @@ def validate_rule_lhs_is_nterm! rules.each do |rule| next if rule.lhs.nterm? - errors << "[BUG] LHS of #{rule} (line: #{rule.lineno}) is term. It should be nterm." + errors << "[BUG] LHS of #{rule.display_name} (line: #{rule.lineno}) is term. It should be nterm." end return if errors.empty? raise errors.join("\n") end + + def set_locations + @locations = @locations || @rules.any? {|rule| rule.contains_at_reference? } + end end end diff --git a/tool/lrama/lib/lrama/grammar/auxiliary.rb b/tool/lrama/lib/lrama/grammar/auxiliary.rb index 933574b0f63733..2bacee6f1a87e7 100644 --- a/tool/lrama/lib/lrama/grammar/auxiliary.rb +++ b/tool/lrama/lib/lrama/grammar/auxiliary.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class Grammar # Grammar file information not used by States but by Output diff --git a/tool/lrama/lib/lrama/grammar/binding.rb b/tool/lrama/lib/lrama/grammar/binding.rb index e5ea3fb037c21b..5e6e7c594b6c7d 100644 --- a/tool/lrama/lib/lrama/grammar/binding.rb +++ b/tool/lrama/lib/lrama/grammar/binding.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class Grammar class Binding @@ -16,8 +18,17 @@ def resolve_symbol(symbol) resolved_args = symbol.args.map { |arg| resolve_symbol(arg) } Lrama::Lexer::Token::InstantiateRule.new(s_value: symbol.s_value, location: symbol.location, args: resolved_args, lhs_tag: symbol.lhs_tag) else - @parameter_to_arg[symbol.s_value] || symbol + parameter_to_arg(symbol) || symbol + end + end + + private + + def parameter_to_arg(symbol) + if (arg = @parameter_to_arg[symbol.s_value].dup) + arg.alias_name = symbol.alias_name end + arg end end end diff --git a/tool/lrama/lib/lrama/grammar/code.rb b/tool/lrama/lib/lrama/grammar/code.rb index 3bad599dae564f..b6c1cc49e74287 100644 --- a/tool/lrama/lib/lrama/grammar/code.rb +++ b/tool/lrama/lib/lrama/grammar/code.rb @@ -1,9 +1,11 @@ +# frozen_string_literal: true + require "forwardable" -require "lrama/grammar/code/destructor_code" -require "lrama/grammar/code/initial_action_code" -require "lrama/grammar/code/no_reference_code" -require "lrama/grammar/code/printer_code" -require "lrama/grammar/code/rule_action" +require_relative "code/destructor_code" +require_relative "code/initial_action_code" +require_relative "code/no_reference_code" +require_relative "code/printer_code" +require_relative "code/rule_action" module Lrama class Grammar diff --git a/tool/lrama/lib/lrama/grammar/code/destructor_code.rb b/tool/lrama/lib/lrama/grammar/code/destructor_code.rb index 70360eb90fab38..794017257c5486 100644 --- a/tool/lrama/lib/lrama/grammar/code/destructor_code.rb +++ b/tool/lrama/lib/lrama/grammar/code/destructor_code.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class Grammar class Code diff --git a/tool/lrama/lib/lrama/grammar/code/initial_action_code.rb b/tool/lrama/lib/lrama/grammar/code/initial_action_code.rb index a694f193cb4edd..02f2badc9e32e8 100644 --- a/tool/lrama/lib/lrama/grammar/code/initial_action_code.rb +++ b/tool/lrama/lib/lrama/grammar/code/initial_action_code.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class Grammar class Code diff --git a/tool/lrama/lib/lrama/grammar/code/no_reference_code.rb b/tool/lrama/lib/lrama/grammar/code/no_reference_code.rb index 6e614cc64ae7d0..ab12f32e297567 100644 --- a/tool/lrama/lib/lrama/grammar/code/no_reference_code.rb +++ b/tool/lrama/lib/lrama/grammar/code/no_reference_code.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class Grammar class Code diff --git a/tool/lrama/lib/lrama/grammar/code/printer_code.rb b/tool/lrama/lib/lrama/grammar/code/printer_code.rb index ffccd893950684..c0b8d24306ff05 100644 --- a/tool/lrama/lib/lrama/grammar/code/printer_code.rb +++ b/tool/lrama/lib/lrama/grammar/code/printer_code.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class Grammar class Code diff --git a/tool/lrama/lib/lrama/grammar/code/rule_action.rb b/tool/lrama/lib/lrama/grammar/code/rule_action.rb index d3c0eab64a9177..363ecdf25dfc19 100644 --- a/tool/lrama/lib/lrama/grammar/code/rule_action.rb +++ b/tool/lrama/lib/lrama/grammar/code/rule_action.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class Grammar class Code @@ -41,6 +43,7 @@ def reference_to_c(ref) when ref.type == :dollar && ref.name == "$" # $$ tag = ref.ex_tag || lhs.tag raise_tag_not_found_error(ref) unless tag + # @type var tag: Lexer::Token::Tag "(yyval.#{tag.member})" when ref.type == :at && ref.name == "$" # @$ "(yyloc)" @@ -50,6 +53,7 @@ def reference_to_c(ref) i = -position_in_rhs + ref.index tag = ref.ex_tag || rhs[ref.index - 1].tag raise_tag_not_found_error(ref) unless tag + # @type var tag: Lexer::Token::Tag "(yyvsp[#{i}].#{tag.member})" when ref.type == :at # @n i = -position_in_rhs + ref.index @@ -69,18 +73,18 @@ def position_in_rhs @rule.position_in_original_rule_rhs || @rule.rhs.count end - # If this is midrule action, RHS is a RHS of the original rule. + # If this is midrule action, RHS is an RHS of the original rule. def rhs (@rule.original_rule || @rule).rhs end - # Unlike `rhs`, LHS is always a LHS of the rule. + # Unlike `rhs`, LHS is always an LHS of the rule. def lhs @rule.lhs end def raise_tag_not_found_error(ref) - raise "Tag is not specified for '$#{ref.value}' in '#{@rule}'" + raise "Tag is not specified for '$#{ref.value}' in '#{@rule.display_name}'" end end end diff --git a/tool/lrama/lib/lrama/grammar/counter.rb b/tool/lrama/lib/lrama/grammar/counter.rb index c13f4ec3e382b0..dc91b87b711f2d 100644 --- a/tool/lrama/lib/lrama/grammar/counter.rb +++ b/tool/lrama/lib/lrama/grammar/counter.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class Grammar class Counter diff --git a/tool/lrama/lib/lrama/grammar/destructor.rb b/tool/lrama/lib/lrama/grammar/destructor.rb index 4b7059e9236ccb..a2b6fde0ed5b3d 100644 --- a/tool/lrama/lib/lrama/grammar/destructor.rb +++ b/tool/lrama/lib/lrama/grammar/destructor.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class Grammar class Destructor < Struct.new(:ident_or_tags, :token_code, :lineno, keyword_init: true) diff --git a/tool/lrama/lib/lrama/grammar/error_token.rb b/tool/lrama/lib/lrama/grammar/error_token.rb index 8efde7df33e018..50eaafeebc66fd 100644 --- a/tool/lrama/lib/lrama/grammar/error_token.rb +++ b/tool/lrama/lib/lrama/grammar/error_token.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class Grammar class ErrorToken < Struct.new(:ident_or_tags, :token_code, :lineno, keyword_init: true) diff --git a/tool/lrama/lib/lrama/grammar/parameterizing_rule.rb b/tool/lrama/lib/lrama/grammar/parameterizing_rule.rb index d371805f4b303f..ddc1a467ce974e 100644 --- a/tool/lrama/lib/lrama/grammar/parameterizing_rule.rb +++ b/tool/lrama/lib/lrama/grammar/parameterizing_rule.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require_relative 'parameterizing_rule/resolver' require_relative 'parameterizing_rule/rhs' require_relative 'parameterizing_rule/rule' diff --git a/tool/lrama/lib/lrama/grammar/parameterizing_rule/resolver.rb b/tool/lrama/lib/lrama/grammar/parameterizing_rule/resolver.rb index d8f3ae7897d28d..06f2f1cef7b9e4 100644 --- a/tool/lrama/lib/lrama/grammar/parameterizing_rule/resolver.rb +++ b/tool/lrama/lib/lrama/grammar/parameterizing_rule/resolver.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class Grammar class ParameterizingRule @@ -18,13 +20,17 @@ def find_rule(token) end def find_inline(token) - @rules.select { |rule| rule.name == token.s_value && rule.is_inline }.last + @rules.reverse.find { |rule| rule.name == token.s_value && rule.is_inline } end def created_lhs(lhs_s_value) @created_lhs_list.reverse.find { |created_lhs| created_lhs.s_value == lhs_s_value } end + def redefined_rules + @rules.select { |rule| @rules.count { |r| r.name == rule.name && r.required_parameters_count == rule.required_parameters_count } > 1 } + end + private def select_rules(rules, token) diff --git a/tool/lrama/lib/lrama/grammar/parameterizing_rule/rhs.rb b/tool/lrama/lib/lrama/grammar/parameterizing_rule/rhs.rb index 3eb92f8ef4e05e..d574841d08eee3 100644 --- a/tool/lrama/lib/lrama/grammar/parameterizing_rule/rhs.rb +++ b/tool/lrama/lib/lrama/grammar/parameterizing_rule/rhs.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class Grammar class ParameterizingRule @@ -13,6 +15,7 @@ def initialize def resolve_user_code(bindings) return unless user_code + resolved = Lexer::Token::UserCode.new(s_value: user_code.s_value, location: user_code.location) var_to_arg = {} symbols.each do |sym| resolved_sym = bindings.resolve_symbol(sym) @@ -22,14 +25,14 @@ def resolve_user_code(bindings) end var_to_arg.each do |var, arg| - user_code.references.each do |ref| + resolved.references.each do |ref| if ref.name == var ref.name = arg end end end - return user_code + return resolved end end end diff --git a/tool/lrama/lib/lrama/grammar/parameterizing_rule/rule.rb b/tool/lrama/lib/lrama/grammar/parameterizing_rule/rule.rb index 38f0fca4ea7ef7..cc200d2fb60da9 100644 --- a/tool/lrama/lib/lrama/grammar/parameterizing_rule/rule.rb +++ b/tool/lrama/lib/lrama/grammar/parameterizing_rule/rule.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class Grammar class ParameterizingRule @@ -12,6 +14,10 @@ def initialize(name, parameters, rhs_list, tag: nil, is_inline: false) @is_inline = is_inline @required_parameters_count = parameters.count end + + def to_s + "#{@name}(#{@parameters.map(&:s_value).join(', ')})" + end end end end diff --git a/tool/lrama/lib/lrama/grammar/percent_code.rb b/tool/lrama/lib/lrama/grammar/percent_code.rb index 8cbc5aef2ccf5b..416a2d27534b97 100644 --- a/tool/lrama/lib/lrama/grammar/percent_code.rb +++ b/tool/lrama/lib/lrama/grammar/percent_code.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class Grammar class PercentCode diff --git a/tool/lrama/lib/lrama/grammar/precedence.rb b/tool/lrama/lib/lrama/grammar/precedence.rb index fed739b3c047a4..13cf960c32a5f4 100644 --- a/tool/lrama/lib/lrama/grammar/precedence.rb +++ b/tool/lrama/lib/lrama/grammar/precedence.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class Grammar class Precedence < Struct.new(:type, :precedence, keyword_init: true) diff --git a/tool/lrama/lib/lrama/grammar/printer.rb b/tool/lrama/lib/lrama/grammar/printer.rb index 8984a96e1a65d7..b78459e819a7bf 100644 --- a/tool/lrama/lib/lrama/grammar/printer.rb +++ b/tool/lrama/lib/lrama/grammar/printer.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class Grammar class Printer < Struct.new(:ident_or_tags, :token_code, :lineno, keyword_init: true) diff --git a/tool/lrama/lib/lrama/grammar/reference.rb b/tool/lrama/lib/lrama/grammar/reference.rb index c56e7673a60d45..b044516bdb9a83 100644 --- a/tool/lrama/lib/lrama/grammar/reference.rb +++ b/tool/lrama/lib/lrama/grammar/reference.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class Grammar # type: :dollar or :at diff --git a/tool/lrama/lib/lrama/grammar/rule.rb b/tool/lrama/lib/lrama/grammar/rule.rb index 0e06edc80d6208..1f55bf8bfbdd49 100644 --- a/tool/lrama/lib/lrama/grammar/rule.rb +++ b/tool/lrama/lib/lrama/grammar/rule.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class Grammar # _rhs holds original RHS element. Use rhs to refer to Symbol. @@ -16,8 +18,7 @@ def ==(other) self.lineno == other.lineno end - # TODO: Change this to display_name - def to_s + def display_name l = lhs.id.s_value r = empty_rule? ? "ε" : rhs.map {|r| r.id.s_value }.join(" ") @@ -33,7 +34,7 @@ def as_comment end def with_actions - "#{to_s} {#{token_code&.s_value}}" + "#{display_name} {#{token_code&.s_value}}" end # opt_nl: ε <-- empty_rule @@ -55,6 +56,12 @@ def translated_code Code::RuleAction.new(type: :rule_action, token_code: token_code, rule: self).translated_code end + + def contains_at_reference? + return false unless token_code + + token_code.references.any? {|r| r.type == :at } + end end end end diff --git a/tool/lrama/lib/lrama/grammar/rule_builder.rb b/tool/lrama/lib/lrama/grammar/rule_builder.rb index ccb41e67f85aad..f6df22b6c7417b 100644 --- a/tool/lrama/lib/lrama/grammar/rule_builder.rb +++ b/tool/lrama/lib/lrama/grammar/rule_builder.rb @@ -1,12 +1,15 @@ +# frozen_string_literal: true + module Lrama class Grammar class RuleBuilder attr_accessor :lhs, :line attr_reader :lhs_tag, :rhs, :user_code, :precedence_sym - def initialize(rule_counter, midrule_action_counter, position_in_original_rule_rhs = nil, lhs_tag: nil, skip_preprocess_references: false) + def initialize(rule_counter, midrule_action_counter, parameterizing_rule_resolver, position_in_original_rule_rhs = nil, lhs_tag: nil, skip_preprocess_references: false) @rule_counter = rule_counter @midrule_action_counter = midrule_action_counter + @parameterizing_rule_resolver = parameterizing_rule_resolver @position_in_original_rule_rhs = position_in_original_rule_rhs @skip_preprocess_references = skip_preprocess_references @@ -19,16 +22,12 @@ def initialize(rule_counter, midrule_action_counter, position_in_original_rule_r @rules = [] @rule_builders_for_parameterizing_rules = [] @rule_builders_for_derived_rules = [] - @rule_builders_for_inline_rules = [] @parameterizing_rules = [] - @inline_rules = [] @midrule_action_rules = [] end def add_rhs(rhs) - if !@line - @line = rhs.line - end + @line ||= rhs.line flush_user_code @@ -36,9 +35,7 @@ def add_rhs(rhs) end def user_code=(user_code) - if !@line - @line = user_code&.line - end + @line ||= user_code&.line flush_user_code @@ -55,18 +52,41 @@ def complete_input freeze_rhs end - def setup_rules(parameterizing_rule_resolver) + def setup_rules preprocess_references unless @skip_preprocess_references - if rhs.any? { |token| parameterizing_rule_resolver.find_inline(token) } - resolve_inline(parameterizing_rule_resolver) - else - process_rhs(parameterizing_rule_resolver) - end + process_rhs build_rules end def rules - @parameterizing_rules + @inline_rules + @midrule_action_rules + @rules + @parameterizing_rules + @midrule_action_rules + @rules + end + + def has_inline_rules? + rhs.any? { |token| @parameterizing_rule_resolver.find_inline(token) } + end + + def resolve_inline_rules + resolved_builders = [] + rhs.each_with_index do |token, i| + if (inline_rule = @parameterizing_rule_resolver.find_inline(token)) + inline_rule.rhs_list.each do |inline_rhs| + rule_builder = RuleBuilder.new(@rule_counter, @midrule_action_counter, @parameterizing_rule_resolver, lhs_tag: lhs_tag) + if token.is_a?(Lexer::Token::InstantiateRule) + resolve_inline_rhs(rule_builder, inline_rhs, i, Binding.new(inline_rule, token.args)) + else + resolve_inline_rhs(rule_builder, inline_rhs, i) + end + rule_builder.lhs = lhs + rule_builder.line = line + rule_builder.precedence_sym = precedence_sym + rule_builder.user_code = replace_inline_user_code(inline_rhs, i) + resolved_builders << rule_builder + end + break + end + end + resolved_builders end private @@ -82,31 +102,25 @@ def preprocess_references def build_rules tokens = @replaced_rhs - if tokens - rule = Rule.new( - id: @rule_counter.increment, _lhs: lhs, _rhs: tokens, lhs_tag: lhs_tag, token_code: user_code, - position_in_original_rule_rhs: @position_in_original_rule_rhs, precedence_sym: precedence_sym, lineno: line - ) - @rules = [rule] - @parameterizing_rules = @rule_builders_for_parameterizing_rules.map do |rule_builder| - rule_builder.rules - end.flatten - @midrule_action_rules = @rule_builders_for_derived_rules.map do |rule_builder| - rule_builder.rules - end.flatten - @midrule_action_rules.each do |r| - r.original_rule = rule - end - else - @inline_rules = @rule_builders_for_inline_rules.map do |rule_builder| - rule_builder.rules - end.flatten + rule = Rule.new( + id: @rule_counter.increment, _lhs: lhs, _rhs: tokens, lhs_tag: lhs_tag, token_code: user_code, + position_in_original_rule_rhs: @position_in_original_rule_rhs, precedence_sym: precedence_sym, lineno: line + ) + @rules = [rule] + @parameterizing_rules = @rule_builders_for_parameterizing_rules.map do |rule_builder| + rule_builder.rules + end.flatten + @midrule_action_rules = @rule_builders_for_derived_rules.map do |rule_builder| + rule_builder.rules + end.flatten + @midrule_action_rules.each do |r| + r.original_rule = rule end end # rhs is a mixture of variety type of tokens like `Ident`, `InstantiateRule`, `UserCode` and so on. # `#process_rhs` replaces some kind of tokens to `Ident` so that all `@replaced_rhs` are `Ident` or `Char`. - def process_rhs(parameterizing_rule_resolver) + def process_rhs return if @replaced_rhs @replaced_rhs = [] @@ -118,26 +132,26 @@ def process_rhs(parameterizing_rule_resolver) when Lrama::Lexer::Token::Ident @replaced_rhs << token when Lrama::Lexer::Token::InstantiateRule - parameterizing_rule = parameterizing_rule_resolver.find_rule(token) + parameterizing_rule = @parameterizing_rule_resolver.find_rule(token) raise "Unexpected token. #{token}" unless parameterizing_rule bindings = Binding.new(parameterizing_rule, token.args) lhs_s_value = lhs_s_value(token, bindings) - if (created_lhs = parameterizing_rule_resolver.created_lhs(lhs_s_value)) + if (created_lhs = @parameterizing_rule_resolver.created_lhs(lhs_s_value)) @replaced_rhs << created_lhs else lhs_token = Lrama::Lexer::Token::Ident.new(s_value: lhs_s_value, location: token.location) @replaced_rhs << lhs_token - parameterizing_rule_resolver.created_lhs_list << lhs_token + @parameterizing_rule_resolver.created_lhs_list << lhs_token parameterizing_rule.rhs_list.each do |r| - rule_builder = RuleBuilder.new(@rule_counter, @midrule_action_counter, lhs_tag: token.lhs_tag || parameterizing_rule.tag) + rule_builder = RuleBuilder.new(@rule_counter, @midrule_action_counter, @parameterizing_rule_resolver, lhs_tag: token.lhs_tag || parameterizing_rule.tag) rule_builder.lhs = lhs_token r.symbols.each { |sym| rule_builder.add_rhs(bindings.resolve_symbol(sym)) } rule_builder.line = line rule_builder.precedence_sym = r.precedence_sym rule_builder.user_code = r.resolve_user_code(bindings) rule_builder.complete_input - rule_builder.setup_rules(parameterizing_rule_resolver) + rule_builder.setup_rules @rule_builders_for_parameterizing_rules << rule_builder end end @@ -147,11 +161,11 @@ def process_rhs(parameterizing_rule_resolver) new_token = Lrama::Lexer::Token::Ident.new(s_value: prefix + @midrule_action_counter.increment.to_s) @replaced_rhs << new_token - rule_builder = RuleBuilder.new(@rule_counter, @midrule_action_counter, i, lhs_tag: tag, skip_preprocess_references: true) + rule_builder = RuleBuilder.new(@rule_counter, @midrule_action_counter, @parameterizing_rule_resolver, i, lhs_tag: tag, skip_preprocess_references: true) rule_builder.lhs = new_token rule_builder.user_code = token rule_builder.complete_input - rule_builder.setup_rules(parameterizing_rule_resolver) + rule_builder.setup_rules @rule_builders_for_derived_rules << rule_builder else @@ -172,27 +186,10 @@ def lhs_s_value(token, bindings) "#{token.rule_name}_#{s_values.join('_')}" end - def resolve_inline(parameterizing_rule_resolver) - rhs.each_with_index do |token, i| - if inline_rule = parameterizing_rule_resolver.find_inline(token) - inline_rule.rhs_list.each_with_index do |inline_rhs| - rule_builder = RuleBuilder.new(@rule_counter, @midrule_action_counter, lhs_tag: lhs_tag, skip_preprocess_references: true) - resolve_inline_rhs(rule_builder, inline_rhs, i) - rule_builder.lhs = lhs - rule_builder.line = line - rule_builder.user_code = replace_inline_user_code(inline_rhs, i) - rule_builder.complete_input - rule_builder.setup_rules(parameterizing_rule_resolver) - @rule_builders_for_inline_rules << rule_builder - end - end - end - end - - def resolve_inline_rhs(rule_builder, inline_rhs, index) + def resolve_inline_rhs(rule_builder, inline_rhs, index, bindings = nil) rhs.each_with_index do |token, i| if index == i - inline_rhs.symbols.each { |sym| rule_builder.add_rhs(sym) } + inline_rhs.symbols.each { |sym| rule_builder.add_rhs(bindings.nil? ? sym : bindings.resolve_symbol(sym)) } else rule_builder.add_rhs(token) end @@ -204,6 +201,11 @@ def replace_inline_user_code(inline_rhs, index) return user_code if user_code.nil? code = user_code.s_value.gsub(/\$#{index + 1}/, inline_rhs.user_code.s_value) + user_code.references.each do |ref| + next if ref.index.nil? || ref.index <= index # nil is a case for `$$` + code = code.gsub(/\$#{ref.index}/, "$#{ref.index + (inline_rhs.symbols.count-1)}") + code = code.gsub(/@#{ref.index}/, "@#{ref.index + (inline_rhs.symbols.count-1)}") + end Lrama::Lexer::Token::UserCode.new(s_value: code, location: user_code.location) end @@ -238,9 +240,6 @@ def numberize_references end if ref.number - # TODO: When Inlining is implemented, for example, if `$1` is expanded to multiple RHS tokens, - # `$2` needs to access `$2 + n` to actually access it. So, after the Inlining implementation, - # it needs resolves from number to index. ref.index = ref.number end diff --git a/tool/lrama/lib/lrama/grammar/symbol.rb b/tool/lrama/lib/lrama/grammar/symbol.rb index deb67ad9a82c32..f9dffcad6c6b96 100644 --- a/tool/lrama/lib/lrama/grammar/symbol.rb +++ b/tool/lrama/lib/lrama/grammar/symbol.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # Symbol is both of nterm and term # `number` is both for nterm and term # `token_id` is tokentype for term, internal sequence number for nterm diff --git a/tool/lrama/lib/lrama/grammar/symbols.rb b/tool/lrama/lib/lrama/grammar/symbols.rb index cc9b4ec5599f80..337241d1b2ad47 100644 --- a/tool/lrama/lib/lrama/grammar/symbols.rb +++ b/tool/lrama/lib/lrama/grammar/symbols.rb @@ -1 +1,3 @@ +# frozen_string_literal: true + require_relative "symbols/resolver" diff --git a/tool/lrama/lib/lrama/grammar/symbols/resolver.rb b/tool/lrama/lib/lrama/grammar/symbols/resolver.rb index 1788ed63fabbc5..f245943ce1fb4d 100644 --- a/tool/lrama/lib/lrama/grammar/symbols/resolver.rb +++ b/tool/lrama/lib/lrama/grammar/symbols/resolver.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class Grammar class Symbols @@ -42,7 +44,9 @@ def add_term(id:, alias_name: nil, tag: nil, token_id: nil, replace: false) end def add_nterm(id:, alias_name: nil, tag: nil) - return if find_symbol_by_id(id) + if (sym = find_symbol_by_id(id)) + return sym + end @symbols = nil nterm = Symbol.new( diff --git a/tool/lrama/lib/lrama/grammar/type.rb b/tool/lrama/lib/lrama/grammar/type.rb index 6b4b0961a14177..65537288b310b4 100644 --- a/tool/lrama/lib/lrama/grammar/type.rb +++ b/tool/lrama/lib/lrama/grammar/type.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class Grammar class Type diff --git a/tool/lrama/lib/lrama/grammar/union.rb b/tool/lrama/lib/lrama/grammar/union.rb index 854bffb5c143a3..5f1bee0069af23 100644 --- a/tool/lrama/lib/lrama/grammar/union.rb +++ b/tool/lrama/lib/lrama/grammar/union.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class Grammar class Union < Struct.new(:code, :lineno, keyword_init: true) diff --git a/tool/lrama/lib/lrama/grammar_validator.rb b/tool/lrama/lib/lrama/grammar_validator.rb new file mode 100644 index 00000000000000..7790499589dfcc --- /dev/null +++ b/tool/lrama/lib/lrama/grammar_validator.rb @@ -0,0 +1,37 @@ +# frozen_string_literal: true + +module Lrama + class GrammarValidator + def initialize(grammar, states, logger) + @grammar = grammar + @states = states + @logger = logger + end + + def valid? + conflicts_within_threshold? + end + + private + + def conflicts_within_threshold? + return true unless @grammar.expect + + [sr_conflicts_within_threshold(@grammar.expect), rr_conflicts_within_threshold(0)].all? + end + + def sr_conflicts_within_threshold(expected) + return true if expected == @states.sr_conflicts_count + + @logger.error("shift/reduce conflicts: #{@states.sr_conflicts_count} found, #{expected} expected") + false + end + + def rr_conflicts_within_threshold(expected) + return true if expected == @states.rr_conflicts_count + + @logger.error("reduce/reduce conflicts: #{@states.rr_conflicts_count} found, #{expected} expected") + false + end + end +end diff --git a/tool/lrama/lib/lrama/lexer.rb b/tool/lrama/lib/lrama/lexer.rb index 40622a51b47467..0a8f94334f7f51 100644 --- a/tool/lrama/lib/lrama/lexer.rb +++ b/tool/lrama/lib/lrama/lexer.rb @@ -1,15 +1,17 @@ +# frozen_string_literal: true + require "strscan" -require "lrama/lexer/grammar_file" -require "lrama/lexer/location" -require "lrama/lexer/token" +require_relative "lexer/grammar_file" +require_relative "lexer/location" +require_relative "lexer/token" module Lrama class Lexer attr_reader :head_line, :head_column, :line attr_accessor :status, :end_symbol - SYMBOLS = ['%{', '%}', '%%', '{', '}', '\[', '\]', '\(', '\)', '\,', ':', '\|', ';'] + SYMBOLS = ['%{', '%}', '%%', '{', '}', '\[', '\]', '\(', '\)', '\,', ':', '\|', ';'].freeze PERCENT_TOKENS = %w( %union %token @@ -38,7 +40,8 @@ class Lexer %rule %no-stdlib %inline - ) + %locations + ).freeze def initialize(grammar_file) @grammar_file = grammar_file @@ -71,7 +74,7 @@ def location end def lex_token - while !@scanner.eos? do + until @scanner.eos? do case when @scanner.scan(/\n/) newline @@ -126,7 +129,7 @@ def lex_c_code code = '' reset_first_position - while !@scanner.eos? do + until @scanner.eos? do case when @scanner.scan(/{/) code += @scanner.matched @@ -163,7 +166,7 @@ def lex_c_code private def lex_comment - while !@scanner.eos? do + until @scanner.eos? do case when @scanner.scan(/\n/) newline diff --git a/tool/lrama/lib/lrama/lexer/grammar_file.rb b/tool/lrama/lib/lrama/lexer/grammar_file.rb index 3d3368625da5b6..45c3122975bbc0 100644 --- a/tool/lrama/lib/lrama/lexer/grammar_file.rb +++ b/tool/lrama/lib/lrama/lexer/grammar_file.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class Lexer class GrammarFile diff --git a/tool/lrama/lib/lrama/lexer/location.rb b/tool/lrama/lib/lrama/lexer/location.rb index aefce3e16b91d7..bf8f4f7e3eb11a 100644 --- a/tool/lrama/lib/lrama/lexer/location.rb +++ b/tool/lrama/lib/lrama/lexer/location.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class Lexer class Location diff --git a/tool/lrama/lib/lrama/lexer/token.rb b/tool/lrama/lib/lrama/lexer/token.rb index 59b49d5fba4f72..45a097f682989b 100644 --- a/tool/lrama/lib/lrama/lexer/token.rb +++ b/tool/lrama/lib/lrama/lexer/token.rb @@ -1,8 +1,10 @@ -require 'lrama/lexer/token/char' -require 'lrama/lexer/token/ident' -require 'lrama/lexer/token/instantiate_rule' -require 'lrama/lexer/token/tag' -require 'lrama/lexer/token/user_code' +# frozen_string_literal: true + +require_relative 'token/char' +require_relative 'token/ident' +require_relative 'token/instantiate_rule' +require_relative 'token/tag' +require_relative 'token/user_code' module Lrama class Lexer diff --git a/tool/lrama/lib/lrama/lexer/token/char.rb b/tool/lrama/lib/lrama/lexer/token/char.rb index ec3560ca097230..9e21952c424b0d 100644 --- a/tool/lrama/lib/lrama/lexer/token/char.rb +++ b/tool/lrama/lib/lrama/lexer/token/char.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class Lexer class Token diff --git a/tool/lrama/lib/lrama/lexer/token/ident.rb b/tool/lrama/lib/lrama/lexer/token/ident.rb index e576eaeccd4955..84835c00bc8c8b 100644 --- a/tool/lrama/lib/lrama/lexer/token/ident.rb +++ b/tool/lrama/lib/lrama/lexer/token/ident.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class Lexer class Token diff --git a/tool/lrama/lib/lrama/lexer/token/instantiate_rule.rb b/tool/lrama/lib/lrama/lexer/token/instantiate_rule.rb index 1c4d1095c8f22b..db7e611c5f8a57 100644 --- a/tool/lrama/lib/lrama/lexer/token/instantiate_rule.rb +++ b/tool/lrama/lib/lrama/lexer/token/instantiate_rule.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class Lexer class Token diff --git a/tool/lrama/lib/lrama/lexer/token/tag.rb b/tool/lrama/lib/lrama/lexer/token/tag.rb index e54d77391570f8..52dcb50ce7c249 100644 --- a/tool/lrama/lib/lrama/lexer/token/tag.rb +++ b/tool/lrama/lib/lrama/lexer/token/tag.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class Lexer class Token diff --git a/tool/lrama/lib/lrama/lexer/token/user_code.rb b/tool/lrama/lib/lrama/lexer/token/user_code.rb index 4d487bf01cee4e..971220864270a2 100644 --- a/tool/lrama/lib/lrama/lexer/token/user_code.rb +++ b/tool/lrama/lib/lrama/lexer/token/user_code.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require "strscan" module Lrama @@ -16,7 +18,7 @@ def _references scanner = StringScanner.new(s_value) references = [] - while !scanner.eos? do + until scanner.eos? do case when reference = scan_reference(scanner) references << reference diff --git a/tool/lrama/lib/lrama/warning.rb b/tool/lrama/lib/lrama/logger.rb similarity index 52% rename from tool/lrama/lib/lrama/warning.rb rename to tool/lrama/lib/lrama/logger.rb index 3c99791ebf81dc..e98eef0fa533a8 100644 --- a/tool/lrama/lib/lrama/warning.rb +++ b/tool/lrama/lib/lrama/logger.rb @@ -1,25 +1,17 @@ -module Lrama - class Warning - attr_reader :errors, :warns +# frozen_string_literal: true +module Lrama + class Logger def initialize(out = STDERR) @out = out - @errors = [] - @warns = [] - end - - def error(message) - @out << message << "\n" - @errors << message end def warn(message) @out << message << "\n" - @warns << message end - def has_error? - !@errors.empty? + def error(message) + @out << message << "\n" end end end diff --git a/tool/lrama/lib/lrama/option_parser.rb b/tool/lrama/lib/lrama/option_parser.rb index 1e4d448fd1f1a1..0727d1b37fe7c5 100644 --- a/tool/lrama/lib/lrama/option_parser.rb +++ b/tool/lrama/lib/lrama/option_parser.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + require 'optparse' module Lrama @@ -16,7 +18,7 @@ def parse(argv) @options.report_opts = validate_report(@report) @options.grammar_file = argv.shift - if !@options.grammar_file + unless @options.grammar_file abort "File should be specified\n" end @@ -63,20 +65,35 @@ def parse_by_option_parser(argv) o.separator 'Output:' o.on('-H', '--header=[FILE]', 'also produce a header file named FILE') {|v| @options.header = true; @options.header_file = v } o.on('-d', 'also produce a header file') { @options.header = true } - o.on('-r', '--report=THINGS', Array, 'also produce details on the automaton') {|v| @report = v } + o.on('-r', '--report=REPORTS', Array, 'also produce details on the automaton') {|v| @report = v } o.on_tail '' - o.on_tail 'Valid Reports:' - o.on_tail " #{VALID_REPORTS.join(' ')}" - + o.on_tail 'REPORTS is a list of comma-separated words that can include:' + o.on_tail ' states describe the states' + o.on_tail ' itemsets complete the core item sets with their closure' + o.on_tail ' lookaheads explicitly associate lookahead tokens to items' + o.on_tail ' solved describe shift/reduce conflicts solving' + o.on_tail ' counterexamples, cex generate conflict counterexamples' + o.on_tail ' rules list unused rules' + o.on_tail ' terms list unused terminals' + o.on_tail ' verbose report detailed internal state and analysis results' + o.on_tail ' all include all the above reports' + o.on_tail ' none disable all reports' o.on('--report-file=FILE', 'also produce details on the automaton output to a file named FILE') {|v| @options.report_file = v } o.on('-o', '--output=FILE', 'leave output to FILE') {|v| @options.outfile = v } - - o.on('--trace=THINGS', Array, 'also output trace logs at runtime') {|v| @trace = v } + o.on('--trace=TRACES', Array, 'also output trace logs at runtime') {|v| @trace = v } o.on_tail '' - o.on_tail 'Valid Traces:' - o.on_tail " #{VALID_TRACES.join(' ')}" - - o.on('-v', 'reserved, do nothing') { } + o.on_tail 'TRACES is a list of comma-separated words that can include:' + o.on_tail ' automaton display states' + o.on_tail ' closure display states' + o.on_tail ' rules display grammar rules' + o.on_tail ' actions display grammar rules with actions' + o.on_tail ' time display generation time' + o.on_tail ' all include all the above traces' + o.on_tail ' none disable all traces' + o.on('-v', '--verbose', "same as '--report=state'") {|_v| @report << 'states' } + o.separator '' + o.separator 'Diagnostics:' + o.on('-W', '--warnings', 'report the warnings') {|v| @options.diagnostic = true } o.separator '' o.separator 'Error Recovery:' o.on('-e', 'enable error recovery') {|v| @options.error_recovery = true } @@ -89,47 +106,55 @@ def parse_by_option_parser(argv) end end - BISON_REPORTS = %w[states itemsets lookaheads solved counterexamples cex all none] - OTHER_REPORTS = %w[verbose] - NOT_SUPPORTED_REPORTS = %w[cex none] - VALID_REPORTS = BISON_REPORTS + OTHER_REPORTS - NOT_SUPPORTED_REPORTS + ALIASED_REPORTS = { cex: :counterexamples }.freeze + VALID_REPORTS = %i[states itemsets lookaheads solved counterexamples rules terms verbose].freeze def validate_report(report) - list = VALID_REPORTS h = { grammar: true } + return h if report.empty? + return {} if report == ['none'] + if report == ['all'] + VALID_REPORTS.each { |r| h[r] = true } + return h + end report.each do |r| - if list.include?(r) - h[r.to_sym] = true + aliased = aliased_report_option(r) + if VALID_REPORTS.include?(aliased) + h[aliased] = true else raise "Invalid report option \"#{r}\"." end end - if h[:all] - (BISON_REPORTS - NOT_SUPPORTED_REPORTS).each do |r| - h[r.to_sym] = true - end - - h.delete(:all) - end - return h end + def aliased_report_option(opt) + (ALIASED_REPORTS[opt.to_sym] || opt).to_sym + end + VALID_TRACES = %w[ - none locations scan parse automaton bitsets - closure grammar rules actions resource - sets muscles tools m4-early m4 skeleton time - ielr cex all - ] + locations scan parse automaton bitsets closure + grammar rules actions resource sets muscles + tools m4-early m4 skeleton time ielr cex + ].freeze + NOT_SUPPORTED_TRACES = %w[ + locations scan parse bitsets grammar resource + sets muscles tools m4-early m4 skeleton ielr cex + ].freeze def validate_trace(trace) - list = VALID_TRACES h = {} + return h if trace.empty? || trace == ['none'] + supported = VALID_TRACES - NOT_SUPPORTED_TRACES + if trace == ['all'] + supported.each { |t| h[t.to_sym] = true } + return h + end trace.each do |t| - if list.include?(t) + if supported.include?(t) h[t.to_sym] = true else raise "Invalid trace option \"#{t}\"." diff --git a/tool/lrama/lib/lrama/options.rb b/tool/lrama/lib/lrama/options.rb index 739ca16f5598f9..ccd7680348bbff 100644 --- a/tool/lrama/lib/lrama/options.rb +++ b/tool/lrama/lib/lrama/options.rb @@ -1,11 +1,13 @@ +# frozen_string_literal: true + module Lrama # Command line options. class Options attr_accessor :skeleton, :header, :header_file, :report_file, :outfile, :error_recovery, :grammar_file, - :trace_opts, :report_opts, :y, - :debug + :trace_opts, :report_opts, + :diagnostic, :y, :debug def initialize @skeleton = "bison/yacc.c" @@ -17,6 +19,7 @@ def initialize @grammar_file = nil @trace_opts = nil @report_opts = nil + @diagnostic = false @y = STDIN @debug = false end diff --git a/tool/lrama/lib/lrama/output.rb b/tool/lrama/lib/lrama/output.rb index 642c8b4708f07c..3c7316ac6d871c 100644 --- a/tool/lrama/lib/lrama/output.rb +++ b/tool/lrama/lib/lrama/output.rb @@ -1,6 +1,8 @@ +# frozen_string_literal: true + require "erb" require "forwardable" -require "lrama/report/duration" +require_relative "report/duration" module Lrama class Output @@ -63,37 +65,29 @@ def render # A part of b4_token_enums def token_enums - str = "" - - @context.yytokentype.each do |s_value, token_id, display_name| + @context.yytokentype.map do |s_value, token_id, display_name| s = sprintf("%s = %d%s", s_value, token_id, token_id == yymaxutok ? "" : ",") if display_name - str << sprintf(" %-30s /* %s */\n", s, display_name) + sprintf(" %-30s /* %s */\n", s, display_name) else - str << sprintf(" %s\n", s) + sprintf(" %s\n", s) end - end - - str + end.join end # b4_symbol_enum def symbol_enum - str = "" - last_sym_number = @context.yysymbol_kind_t.last[1] - @context.yysymbol_kind_t.each do |s_value, sym_number, display_name| + @context.yysymbol_kind_t.map do |s_value, sym_number, display_name| s = sprintf("%s = %d%s", s_value, sym_number, (sym_number == last_sym_number) ? "" : ",") if display_name - str << sprintf(" %-40s /* %s */\n", s, display_name) + sprintf(" %-40s /* %s */\n", s, display_name) else - str << sprintf(" %s\n", s) + sprintf(" %s\n", s) end - end - - str + end.join end def yytranslate @@ -132,12 +126,10 @@ def int_type_for(ary) end def symbol_actions_for_printer - str = "" - - @grammar.symbols.each do |sym| + @grammar.symbols.map do |sym| next unless sym.printer - str << <<-STR + <<-STR case #{sym.enum_name}: /* #{sym.comment} */ #line #{sym.printer.lineno} "#{@grammar_file_path}" {#{sym.printer.translated_code(sym.tag)}} @@ -145,18 +137,14 @@ def symbol_actions_for_printer break; STR - end - - str + end.join end def symbol_actions_for_destructor - str = "" - - @grammar.symbols.each do |sym| + @grammar.symbols.map do |sym| next unless sym.destructor - str << <<-STR + <<-STR case #{sym.enum_name}: /* #{sym.comment} */ #line #{sym.destructor.lineno} "#{@grammar_file_path}" {#{sym.destructor.translated_code(sym.tag)}} @@ -164,9 +152,7 @@ def symbol_actions_for_destructor break; STR - end - - str + end.join end # b4_user_initial_action @@ -236,12 +222,10 @@ def after_pop_stack_function(len, comment = "") end def symbol_actions_for_error_token - str = "" - - @grammar.symbols.each do |sym| + @grammar.symbols.map do |sym| next unless sym.error_token - str << <<-STR + <<-STR case #{sym.enum_name}: /* #{sym.comment} */ #line #{sym.error_token.lineno} "#{@grammar_file_path}" {#{sym.error_token.translated_code(sym.tag)}} @@ -249,22 +233,18 @@ def symbol_actions_for_error_token break; STR - end - - str + end.join end # b4_user_actions def user_actions - str = "" - - @context.states.rules.each do |rule| + action = @context.states.rules.map do |rule| next unless rule.token_code code = rule.token_code spaces = " " * (code.column - 1) - str << <<-STR + <<-STR case #{rule.id + 1}: /* #{rule.as_comment} */ #line #{code.line} "#{@grammar_file_path}" #{spaces}{#{rule.translated_code}} @@ -272,14 +252,12 @@ def user_actions break; STR - end + end.join - str << <<-STR + action + <<-STR #line [@oline@] [@ofile@] STR - - str end def omit_blanks(param) @@ -343,7 +321,7 @@ def lex_param_name # b4_parse_param_use def parse_param_use(val, loc) - str = <<-STR + str = <<-STR.dup YY_USE (#{val}); YY_USE (#{loc}); STR @@ -357,7 +335,8 @@ def parse_param_use(val, loc) # b4_yylex_formals def yylex_formals - ary = ["&yylval", "&yylloc"] + ary = ["&yylval"] + ary << "&yylloc" if @grammar.locations if @grammar.lex_param ary << lex_param_name @@ -397,17 +376,9 @@ def aux def int_array_to_string(ary) last = ary.count - 1 - s = ary.each_with_index.each_slice(10).map do |slice| - str = " " - - slice.each do |e, i| - str << sprintf("%6d%s", e, (i == last) ? "" : ",") - end - - str - end - - s.join("\n") + ary.each_with_index.each_slice(10).map do |slice| + " " + slice.map { |e, i| sprintf("%6d%s", e, (i == last) ? "" : ",") }.join + end.join("\n") end def spec_mapped_header_file @@ -457,26 +428,24 @@ def partial_file(file) end def template_dir - File.expand_path("../../../template", __FILE__) + File.expand_path('../../template', __dir__) end def string_array_to_string(ary) - str = "" + result = "" tmp = " " ary.each do |s| - s = s.gsub('\\', '\\\\\\\\') - s = s.gsub('"', '\\"') - - if (tmp + s + " \"\",").length > 75 - str << tmp << "\n" - tmp = " \"#{s}\"," + replaced = s.gsub('\\', '\\\\\\\\').gsub('"', '\\"') + if (tmp + replaced + " \"\",").length > 75 + result = "#{result}#{tmp}\n" + tmp = " \"#{replaced}\"," else - tmp << " \"#{s}\"," + tmp = "#{tmp} \"#{replaced}\"," end end - str << tmp + result + tmp end def replace_special_variables(str, ofile) diff --git a/tool/lrama/lib/lrama/parser.rb b/tool/lrama/lib/lrama/parser.rb index 04603105b4d96a..6a35dba290e432 100644 --- a/tool/lrama/lib/lrama/parser.rb +++ b/tool/lrama/lib/lrama/parser.rb @@ -1,6 +1,6 @@ # # DO NOT MODIFY!!!! -# This file is automatically generated by Racc 1.7.3 +# This file is automatically generated by Racc 1.8.1 # from Racc grammar file "parser.y". # @@ -23,7 +23,7 @@ $".push "#{__dir__}/racc/info.rb" module Racc - VERSION = '1.7.3' + VERSION = '1.8.1' Version = VERSION Copyright = 'Copyright (c) 1999-2006 Minero Aoki' end @@ -31,10 +31,6 @@ module Racc end -unless defined?(NotImplementedError) - NotImplementedError = NotImplementError # :nodoc: -end - module Racc class ParseError < StandardError; end end @@ -42,7 +38,7 @@ class ParseError < StandardError; end ParseError = Racc::ParseError # :nodoc: end -# Racc is a LALR(1) parser generator. +# Racc is an LALR(1) parser generator. # It is written in Ruby itself, and generates Ruby programs. # # == Command-line Reference @@ -658,7 +654,7 @@ def token_to_str(t) module Lrama class Parser < Racc::Parser -module_eval(<<'...end parser.y/module_eval...', 'parser.y', 536) +module_eval(<<'...end parser.y/module_eval...', 'parser.y', 417) include Lrama::Report::Duration @@ -732,322 +728,297 @@ def raise_parse_error(error_message, location) ##### State transition tables begin ### racc_action_table = [ - 98, 51, 99, 163, 88, 79, 51, 51, 180, 163, - 79, 79, 51, 162, 180, 156, 79, 165, 157, 51, - 3, 50, 181, 165, 70, 51, 8, 50, 181, 79, - 75, 51, 6, 50, 7, 161, 82, 47, 51, 51, - 50, 50, 89, 82, 82, 166, 41, 51, 100, 50, - 182, 166, 82, 51, 48, 50, 182, 23, 25, 26, + 94, 48, 95, 166, 48, 77, 172, 48, 77, 166, + 48, 77, 172, 48, 77, 47, 6, 85, 69, 48, + 48, 47, 47, 77, 74, 81, 48, 48, 47, 47, + 40, 81, 81, 48, 41, 47, 92, 48, 81, 47, + 44, 77, 103, 168, 169, 45, 175, 169, 96, 168, + 169, 52, 175, 169, 86, 20, 24, 25, 26, 27, + 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, + 38, 92, 48, 4, 47, 5, 77, 103, 48, 48, + 47, 47, 77, 103, 116, 48, 4, 47, 5, 77, + 20, 24, 25, 26, 27, 28, 29, 30, 31, 32, + 33, 34, 35, 36, 37, 38, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 52, 20, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, - 37, 38, 47, 51, 51, 50, 50, 93, 79, 197, - 51, 51, 50, 50, 79, 197, 51, 51, 50, 50, - 79, 197, 23, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 9, 51, 54, - 50, 14, 15, 16, 17, 18, 19, 54, 54, 20, - 21, 22, 23, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 51, 51, - 50, 50, 79, 197, 51, 51, 50, 50, 79, 197, - 51, 51, 50, 50, 79, 197, 51, 51, 50, 50, - 79, 79, 51, 51, 50, 50, 79, 79, 51, 51, - 50, 50, 79, 79, 51, 51, 50, 207, 79, 79, - 51, 51, 207, 207, 79, 79, 51, 51, 50, 50, - 79, 187, 188, 189, 96, 187, 188, 189, 96, 217, - 221, 229, 218, 218, 218, 51, 51, 50, 50, 187, - 188, 189, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 90, 94, 96, 101, 101, 101, 103, - 109, 113, 114, 117, 117, 117, 117, 120, 47, 124, - 125, 127, 129, 130, 131, 132, 133, 136, 140, 141, - 142, 143, 146, 147, 148, 150, 160, 168, 170, 171, - 172, 173, 174, 176, 177, 178, 146, 184, 192, 193, - 200, 160, 204, 176, 211, 160, 215, 216, 178, 176, - 226, 176, 228, 96, 96, 176 ] + 37, 38, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 43, 20, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, 48, 48, + 47, 47, 77, 103, 48, 48, 47, 47, 77, 77, + 48, 48, 47, 47, 77, 77, 48, 48, 196, 196, + 77, 77, 48, 48, 47, 196, 77, 77, 148, 170, + 52, 149, 149, 180, 181, 182, 131, 180, 181, 182, + 131, 203, 208, 215, 204, 204, 204, 48, 48, 47, + 47, 48, 48, 47, 47, 48, 48, 47, 47, 180, + 181, 182, 119, 120, 55, 52, 52, 52, 52, 52, + 61, 62, 63, 64, 65, 87, 52, 52, 106, 109, + 111, 118, 125, 126, 128, 131, 132, 77, 140, 141, + 142, 143, 145, 146, 153, 140, 155, 153, 159, 160, + 161, 163, 164, 171, 176, 153, 183, 131, 187, 153, + 189, 131, 153, 198, 153, 131, 161, 164, 205, 164, + 161, 161, 213, 131, 161 ] racc_action_check = [ - 49, 145, 49, 145, 39, 145, 159, 183, 159, 183, - 159, 183, 201, 144, 201, 139, 201, 145, 139, 33, - 1, 33, 159, 183, 33, 34, 3, 34, 201, 34, - 34, 35, 2, 35, 2, 144, 35, 9, 36, 37, - 36, 37, 39, 36, 37, 145, 7, 38, 49, 38, - 159, 183, 38, 15, 14, 15, 201, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 42, 69, 172, 69, 172, 42, 172, 172, - 173, 70, 173, 70, 173, 173, 174, 81, 174, 81, - 174, 174, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 4, 82, 16, - 82, 4, 4, 4, 4, 4, 4, 17, 18, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 194, 109, - 194, 109, 194, 194, 198, 111, 198, 111, 198, 198, - 199, 117, 199, 117, 199, 199, 74, 75, 74, 75, - 74, 75, 114, 116, 114, 116, 114, 116, 137, 166, - 137, 166, 137, 166, 182, 184, 182, 184, 182, 184, - 204, 216, 204, 216, 204, 216, 218, 119, 218, 119, - 218, 164, 164, 164, 164, 179, 179, 179, 179, 208, - 214, 223, 208, 214, 223, 134, 138, 134, 138, 209, - 209, 209, 19, 20, 23, 25, 26, 27, 28, 29, - 30, 31, 32, 40, 45, 46, 53, 55, 56, 57, - 68, 72, 73, 80, 85, 86, 87, 88, 89, 95, - 96, 102, 104, 105, 106, 107, 108, 112, 120, 121, - 122, 123, 124, 125, 126, 128, 141, 149, 151, 152, - 153, 154, 155, 156, 157, 158, 161, 163, 167, 169, - 175, 178, 180, 186, 190, 200, 205, 207, 213, 217, - 220, 221, 222, 226, 228, 230 ] + 46, 151, 46, 151, 157, 151, 157, 177, 157, 177, + 188, 177, 188, 32, 188, 32, 1, 38, 32, 33, + 34, 33, 34, 33, 33, 34, 35, 36, 35, 36, + 5, 35, 36, 37, 6, 37, 44, 58, 37, 58, + 9, 58, 58, 151, 151, 11, 157, 157, 46, 177, + 177, 13, 188, 188, 38, 44, 44, 44, 44, 44, + 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, + 44, 88, 59, 0, 59, 0, 59, 59, 60, 79, + 60, 79, 60, 60, 79, 72, 2, 72, 2, 72, + 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 14, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 100, 12, + 100, 12, 100, 100, 74, 111, 74, 111, 74, 111, + 168, 175, 168, 175, 168, 175, 183, 189, 183, 189, + 183, 189, 204, 205, 204, 205, 204, 205, 139, 154, + 15, 139, 154, 165, 165, 165, 165, 173, 173, 173, + 173, 195, 200, 212, 195, 200, 212, 67, 69, 67, + 69, 81, 106, 81, 106, 114, 116, 114, 116, 197, + 197, 197, 86, 86, 16, 17, 20, 24, 25, 26, + 27, 28, 29, 30, 31, 39, 50, 55, 66, 70, + 71, 85, 89, 90, 91, 92, 98, 110, 118, 119, + 120, 121, 130, 131, 141, 142, 144, 145, 146, 147, + 148, 149, 150, 156, 162, 164, 166, 167, 170, 171, + 172, 174, 176, 186, 187, 191, 192, 194, 196, 199, + 201, 203, 207, 208, 214 ] racc_action_pointer = [ - nil, 20, 22, 26, 98, nil, nil, 39, nil, 33, - nil, nil, nil, nil, 48, 50, 90, 98, 99, 207, - 194, nil, nil, 195, nil, 196, 197, 198, 213, 214, - 215, 216, 217, 16, 22, 28, 35, 36, 44, -1, - 221, nil, 68, nil, nil, 201, 174, nil, nil, -5, - nil, nil, nil, 207, nil, 208, 209, 210, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 222, 70, - 78, nil, 225, 224, 153, 154, nil, nil, nil, nil, - 225, 84, 105, nil, nil, 226, 227, 228, 197, 234, - nil, nil, nil, nil, nil, 197, 235, nil, nil, nil, - nil, nil, 239, nil, 240, 241, 242, 243, 244, 136, - nil, 142, 240, nil, 159, nil, 160, 148, nil, 184, - 243, 207, 239, 249, 206, 201, 252, nil, 253, nil, - nil, nil, nil, nil, 202, nil, nil, 165, 203, -26, - nil, 210, nil, nil, -10, -2, nil, nil, nil, 237, - nil, 238, 239, 240, 241, 242, 255, 259, 220, 3, - nil, 220, nil, 227, 143, nil, 166, 248, nil, 249, - nil, nil, 71, 77, 83, 228, nil, nil, 225, 147, - 232, nil, 171, 4, 172, nil, 265, nil, nil, nil, - 272, nil, nil, nil, 135, nil, nil, nil, 141, 147, - 229, 9, nil, nil, 177, 274, nil, 237, 158, 161, - nil, nil, nil, 233, 159, nil, 178, 271, 183, nil, - 260, 273, 262, 160, nil, nil, 232, nil, 233, nil, - 277, nil, nil ] + 63, 16, 76, 93, nil, 23, 34, nil, 119, 31, + nil, 39, 156, 5, 69, 144, 219, 179, nil, nil, + 180, nil, nil, nil, 181, 182, 183, 225, 226, 227, + 228, 229, 10, 16, 17, 23, 24, 30, 12, 233, + nil, nil, nil, nil, 32, nil, -5, nil, nil, nil, + 190, nil, nil, nil, nil, 191, nil, nil, 34, 69, + 75, nil, nil, nil, nil, nil, 230, 204, nil, 205, + 233, 232, 82, nil, 161, nil, nil, nil, nil, 76, + nil, 208, nil, nil, nil, 202, 218, nil, 67, 233, + 221, 222, 194, nil, nil, nil, nil, nil, 244, nil, + 155, nil, nil, nil, nil, nil, 209, nil, nil, nil, + 240, 162, nil, nil, 212, nil, 213, nil, 243, 208, + 211, 240, nil, nil, nil, nil, nil, nil, nil, nil, + 211, 248, nil, nil, nil, nil, nil, nil, nil, 148, + nil, 200, 250, nil, 254, 203, 206, 212, 252, 256, + 218, -2, nil, nil, 149, nil, 219, 1, nil, nil, + nil, nil, 223, nil, 211, 145, 227, 216, 167, nil, + 227, 215, 231, 149, 220, 168, 218, 4, nil, nil, + nil, nil, nil, 173, nil, nil, 271, 220, 7, 174, + nil, 224, 268, nil, 233, 161, 239, 171, nil, 235, + 162, 272, nil, 273, 179, 180, nil, 235, 232, nil, + nil, nil, 163, nil, 276, nil, nil ] racc_action_default = [ - -2, -138, -8, -138, -138, -3, -4, -138, 233, -138, - -9, -10, -11, -12, -138, -138, -138, -138, -138, -138, - -138, -24, -25, -138, -29, -138, -138, -138, -138, -138, - -138, -138, -138, -138, -138, -138, -138, -138, -138, -138, - -138, -7, -123, -96, -98, -138, -120, -122, -13, -127, - -94, -95, -126, -15, -85, -16, -17, -138, -21, -26, - -30, -33, -36, -39, -40, -41, -42, -43, -44, -50, - -138, -53, -71, -45, -75, -138, -78, -80, -81, -135, - -46, -88, -138, -91, -93, -47, -48, -49, -138, -138, - -5, -1, -97, -124, -99, -138, -138, -14, -128, -129, - -130, -82, -138, -18, -138, -138, -138, -138, -138, -138, - -54, -51, -73, -72, -138, -79, -76, -138, -92, -89, - -138, -138, -138, -138, -104, -138, -138, -86, -138, -22, - -27, -31, -34, -37, -52, -55, -74, -77, -90, -138, - -58, -62, -6, -125, -100, -101, -105, -121, -83, -138, - -19, -138, -138, -138, -138, -138, -136, -138, -57, -60, - -63, -104, -103, -94, -120, -109, -138, -138, -87, -138, - -23, -28, -138, -138, -138, -138, -137, -59, -62, -120, - -94, -67, -138, -102, -138, -106, -136, -113, -114, -115, - -138, -112, -84, -20, -32, -131, -133, -134, -35, -38, - -62, -61, -64, -65, -138, -138, -70, -94, -138, -116, - -107, -110, -132, -56, -138, -68, -138, -136, -138, -118, - -138, -136, -138, -138, -108, -117, -120, -66, -120, -119, - -136, -69, -111 ] + -1, -127, -1, -3, -10, -127, -127, -2, -3, -127, + -16, -127, -127, -127, -127, -127, -127, -127, -24, -25, + -127, -30, -31, -32, -127, -127, -127, -127, -127, -127, + -127, -127, -127, -127, -127, -127, -127, -127, -127, -127, + -13, 217, -4, -26, -127, -17, -118, -89, -90, -117, + -14, -19, -81, -20, -21, -127, -23, -29, -127, -127, + -127, -36, -37, -38, -39, -40, -41, -47, -49, -127, + -52, -42, -74, -76, -127, -79, -80, -126, -43, -84, + -86, -127, -44, -45, -46, -127, -127, -11, -5, -7, + -91, -127, -64, -18, -119, -120, -121, -15, -127, -22, + -27, -33, -122, -123, -34, -35, -127, -48, -50, -53, + -72, -127, -75, -77, -84, -85, -127, -87, -127, -127, + -127, -127, -6, -8, -9, -115, -92, -93, -94, -65, + -127, -127, -82, -28, -51, -54, -73, -78, -88, -127, + -60, -124, -127, -12, -127, -124, -127, -127, -55, -127, + -58, -62, -66, -125, -127, -116, -95, -96, -98, -114, + -83, -56, -127, -61, -124, -64, -89, -64, -127, -111, + -127, -124, -89, -64, -64, -127, -124, -63, -67, -68, + -104, -105, -106, -127, -70, -71, -127, -124, -97, -127, + -99, -64, -55, -103, -57, -127, -89, -107, -112, -59, + -127, -55, -102, -55, -127, -127, -109, -127, -64, -100, + -69, -108, -127, -113, -55, -110, -101 ] racc_goto_table = [ - 76, 95, 69, 52, 74, 158, 110, 175, 118, 119, - 145, 208, 1, 212, 186, 2, 43, 212, 212, 4, - 42, 72, 91, 84, 84, 84, 84, 5, 40, 203, - 122, 214, 80, 85, 86, 87, 10, 210, 11, 111, - 115, 76, 12, 223, 138, 116, 118, 183, 110, 92, - 53, 55, 56, 194, 198, 199, 13, 72, 72, 219, - 49, 97, 128, 169, 213, 118, 104, 151, 224, 84, - 84, 110, 227, 105, 152, 106, 153, 107, 134, 154, - 76, 232, 115, 108, 137, 155, 68, 73, 112, 135, - 139, 121, 201, 205, 222, 126, 167, 72, 102, 72, - 149, 144, 190, 115, 220, 84, 123, 84, nil, nil, - nil, 164, nil, nil, nil, nil, nil, nil, nil, 185, - nil, nil, 72, nil, nil, 179, 84, nil, nil, nil, - nil, nil, 191, nil, 202, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 206, 164, - 209, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 179, nil, nil, - 209, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 230, 209, 231, 225 ] + 102, 102, 102, 49, 130, 73, 68, 89, 162, 91, + 150, 139, 101, 104, 105, 1, 9, 174, 51, 53, + 54, 42, 115, 70, 117, 79, 79, 79, 79, 56, + 123, 3, 57, 7, 124, 154, 58, 59, 60, 179, + 158, 107, 102, 108, 112, 194, 113, 191, 174, 157, + 39, 122, 202, 91, 133, 97, 199, 115, 70, 138, + 70, 209, 195, 210, 121, 46, 158, 99, 200, 93, + 114, 206, 114, 66, 216, 188, 71, 178, 135, 184, + 134, 110, 177, 137, 212, 190, 192, 78, 82, 83, + 84, 136, 98, 165, 147, 127, 156, 70, 186, 173, + 207, 144, nil, 201, nil, 114, nil, 114, nil, nil, + 185, nil, nil, nil, nil, nil, nil, 193, nil, 165, + 214, nil, nil, nil, nil, 197, nil, nil, nil, nil, + 173, 197, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, 211, 197 ] racc_goto_check = [ - 43, 44, 33, 35, 49, 40, 34, 39, 56, 55, - 60, 46, 1, 64, 45, 2, 57, 64, 64, 3, - 4, 35, 5, 35, 35, 35, 35, 6, 7, 45, - 8, 46, 32, 32, 32, 32, 9, 39, 10, 33, - 43, 43, 11, 46, 55, 49, 56, 60, 34, 57, - 15, 15, 15, 21, 21, 21, 12, 35, 35, 45, - 13, 14, 16, 17, 40, 56, 18, 19, 39, 35, - 35, 34, 39, 22, 23, 24, 25, 26, 33, 27, - 43, 39, 43, 28, 49, 29, 30, 31, 36, 37, - 38, 41, 42, 47, 48, 51, 52, 35, 53, 35, - 54, 59, 61, 43, 62, 35, 63, 35, nil, nil, - nil, 43, nil, nil, nil, nil, nil, nil, nil, 44, - nil, nil, 35, nil, nil, 43, 35, nil, nil, nil, - nil, nil, 43, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 43, 43, - 43, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 43, nil, nil, - 43, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 44, 43, 44, 43 ] + 35, 35, 35, 27, 40, 42, 26, 8, 32, 12, + 31, 30, 21, 21, 21, 1, 7, 39, 16, 16, + 16, 7, 45, 27, 45, 27, 27, 27, 27, 15, + 5, 6, 15, 6, 9, 30, 15, 15, 15, 37, + 34, 26, 35, 26, 42, 31, 42, 37, 39, 49, + 10, 8, 32, 12, 21, 16, 31, 45, 27, 45, + 27, 32, 38, 32, 11, 13, 34, 15, 38, 14, + 27, 37, 27, 22, 32, 49, 23, 40, 28, 40, + 26, 29, 33, 42, 38, 40, 40, 24, 24, 24, + 24, 41, 43, 35, 44, 47, 48, 27, 50, 35, + 51, 52, nil, 40, nil, 27, nil, 27, nil, nil, + 35, nil, nil, nil, nil, nil, nil, 35, nil, 35, + 40, nil, nil, nil, nil, 35, nil, nil, nil, nil, + 35, 35, nil, nil, nil, nil, nil, nil, nil, nil, + nil, nil, nil, nil, nil, nil, 35, 35 ] racc_goto_pointer = [ - nil, 12, 15, 17, 11, -20, 25, 22, -60, 32, - 34, 38, 52, 45, 12, 34, -41, -87, 8, -62, - nil, -119, 14, -56, 15, -55, 16, -53, 21, -48, - 53, 53, -3, -31, -63, -12, 16, -23, -30, -149, - -136, 2, -86, -34, -45, -150, -173, -88, -121, -30, - nil, -6, -52, 44, -27, -73, -73, 7, nil, -23, - -114, -63, -107, 13, -181 ] + nil, 15, nil, nil, nil, -59, 31, 13, -37, -55, + 46, -23, -35, 53, 23, 12, 5, nil, nil, nil, + nil, -46, 41, 43, 53, nil, -26, -9, -32, 11, + -107, -131, -140, -82, -105, -58, nil, -126, -121, -140, + -88, -19, -28, 40, -38, -57, nil, 5, -49, -96, + -71, -98, -24 ] racc_goto_default = [ - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 45, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 24, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 71, 77, nil, nil, nil, nil, - nil, 46, 159, 196, nil, nil, nil, nil, nil, nil, - 78, nil, nil, nil, nil, 81, 83, nil, 44, nil, - nil, nil, nil, nil, 195 ] + nil, nil, 2, 8, 88, nil, nil, nil, nil, nil, + nil, nil, 10, nil, nil, 50, nil, 21, 22, 23, + 100, nil, nil, nil, nil, 67, nil, 75, nil, nil, + nil, nil, nil, 151, 152, 72, 129, nil, nil, 167, + nil, 76, nil, nil, nil, 80, 90, nil, nil, nil, + nil, nil, nil ] racc_reduce_table = [ 0, 0, :racc_error, - 5, 55, :_reduce_none, - 0, 56, :_reduce_none, - 2, 56, :_reduce_none, - 0, 61, :_reduce_4, - 0, 62, :_reduce_5, - 5, 60, :_reduce_6, - 2, 60, :_reduce_none, - 0, 57, :_reduce_8, - 2, 57, :_reduce_none, - 1, 63, :_reduce_none, - 1, 63, :_reduce_none, - 1, 63, :_reduce_none, - 2, 63, :_reduce_13, - 3, 63, :_reduce_none, - 2, 63, :_reduce_none, - 2, 63, :_reduce_16, - 2, 63, :_reduce_17, - 0, 70, :_reduce_18, - 0, 71, :_reduce_19, - 7, 63, :_reduce_20, - 0, 72, :_reduce_21, - 0, 73, :_reduce_22, - 6, 63, :_reduce_23, - 1, 63, :_reduce_24, - 1, 63, :_reduce_none, - 0, 76, :_reduce_26, - 0, 77, :_reduce_27, - 6, 64, :_reduce_28, + 0, 61, :_reduce_1, + 2, 61, :_reduce_2, + 0, 62, :_reduce_3, + 2, 62, :_reduce_4, + 1, 63, :_reduce_5, + 2, 63, :_reduce_6, + 0, 64, :_reduce_none, 1, 64, :_reduce_none, - 0, 78, :_reduce_30, - 0, 79, :_reduce_31, - 7, 64, :_reduce_32, - 0, 80, :_reduce_33, - 0, 81, :_reduce_34, - 7, 64, :_reduce_35, - 0, 82, :_reduce_36, - 0, 83, :_reduce_37, - 7, 64, :_reduce_38, - 2, 64, :_reduce_39, - 2, 64, :_reduce_40, - 2, 64, :_reduce_41, - 2, 64, :_reduce_42, - 2, 64, :_reduce_43, - 2, 74, :_reduce_none, - 2, 74, :_reduce_45, - 2, 74, :_reduce_46, - 2, 74, :_reduce_47, - 2, 74, :_reduce_48, - 2, 74, :_reduce_49, - 1, 84, :_reduce_50, - 2, 84, :_reduce_51, - 3, 84, :_reduce_52, - 1, 87, :_reduce_53, - 2, 87, :_reduce_54, - 3, 88, :_reduce_55, - 8, 65, :_reduce_56, - 5, 66, :_reduce_57, - 1, 92, :_reduce_58, - 3, 92, :_reduce_59, - 1, 94, :_reduce_60, - 3, 94, :_reduce_61, - 0, 96, :_reduce_62, - 1, 96, :_reduce_63, - 3, 96, :_reduce_64, - 3, 96, :_reduce_65, - 6, 96, :_reduce_66, - 0, 101, :_reduce_67, - 0, 102, :_reduce_68, - 7, 96, :_reduce_69, - 3, 96, :_reduce_70, - 0, 90, :_reduce_none, - 1, 90, :_reduce_none, - 0, 91, :_reduce_none, - 1, 91, :_reduce_none, - 1, 85, :_reduce_75, - 2, 85, :_reduce_76, - 3, 85, :_reduce_77, - 1, 103, :_reduce_78, - 2, 103, :_reduce_79, - 1, 97, :_reduce_none, - 1, 97, :_reduce_none, - 0, 105, :_reduce_82, - 0, 106, :_reduce_83, - 6, 69, :_reduce_84, - 0, 107, :_reduce_85, - 0, 108, :_reduce_86, - 5, 69, :_reduce_87, - 1, 86, :_reduce_88, - 2, 86, :_reduce_89, - 3, 86, :_reduce_90, - 1, 109, :_reduce_91, - 2, 109, :_reduce_92, - 1, 110, :_reduce_none, - 1, 89, :_reduce_94, - 1, 89, :_reduce_95, + 5, 56, :_reduce_none, + 0, 65, :_reduce_10, + 0, 66, :_reduce_11, + 5, 57, :_reduce_12, + 2, 57, :_reduce_none, + 1, 71, :_reduce_14, + 2, 71, :_reduce_15, 1, 58, :_reduce_none, + 2, 58, :_reduce_17, + 3, 58, :_reduce_none, 2, 58, :_reduce_none, - 1, 111, :_reduce_none, - 2, 111, :_reduce_none, - 4, 112, :_reduce_100, - 1, 113, :_reduce_101, - 3, 113, :_reduce_102, - 2, 113, :_reduce_none, - 0, 114, :_reduce_104, - 1, 114, :_reduce_105, - 3, 114, :_reduce_106, - 4, 114, :_reduce_107, - 6, 114, :_reduce_108, - 0, 115, :_reduce_109, - 0, 116, :_reduce_110, - 8, 114, :_reduce_111, - 3, 114, :_reduce_112, - 1, 99, :_reduce_113, - 1, 99, :_reduce_114, - 1, 99, :_reduce_115, - 1, 100, :_reduce_116, - 3, 100, :_reduce_117, - 2, 100, :_reduce_118, - 4, 100, :_reduce_119, - 0, 98, :_reduce_none, - 3, 98, :_reduce_121, - 1, 95, :_reduce_none, - 0, 59, :_reduce_none, - 0, 117, :_reduce_124, - 3, 59, :_reduce_125, + 2, 58, :_reduce_20, + 2, 58, :_reduce_21, + 3, 58, :_reduce_22, + 2, 58, :_reduce_23, + 1, 58, :_reduce_24, + 1, 58, :_reduce_25, + 2, 58, :_reduce_none, + 1, 76, :_reduce_27, + 2, 76, :_reduce_28, + 2, 67, :_reduce_29, 1, 67, :_reduce_none, - 0, 68, :_reduce_none, - 1, 68, :_reduce_none, - 1, 68, :_reduce_none, + 1, 67, :_reduce_none, + 1, 67, :_reduce_none, + 3, 67, :_reduce_33, + 3, 67, :_reduce_34, + 3, 67, :_reduce_35, + 2, 67, :_reduce_36, + 2, 67, :_reduce_37, + 2, 67, :_reduce_38, + 2, 67, :_reduce_39, + 2, 67, :_reduce_40, + 2, 72, :_reduce_none, + 2, 72, :_reduce_42, + 2, 72, :_reduce_43, + 2, 72, :_reduce_44, + 2, 72, :_reduce_45, + 2, 72, :_reduce_46, + 1, 81, :_reduce_47, + 2, 81, :_reduce_48, + 1, 77, :_reduce_49, + 2, 77, :_reduce_50, + 3, 77, :_reduce_51, + 0, 84, :_reduce_none, + 1, 84, :_reduce_none, + 3, 80, :_reduce_54, + 0, 87, :_reduce_none, + 1, 87, :_reduce_none, + 8, 73, :_reduce_57, + 5, 74, :_reduce_58, + 8, 74, :_reduce_59, + 1, 85, :_reduce_60, + 3, 85, :_reduce_61, + 1, 86, :_reduce_62, + 3, 86, :_reduce_63, + 0, 95, :_reduce_none, + 1, 95, :_reduce_none, + 1, 88, :_reduce_66, + 3, 88, :_reduce_67, + 3, 88, :_reduce_68, + 6, 88, :_reduce_69, + 3, 88, :_reduce_70, + 3, 88, :_reduce_71, + 0, 83, :_reduce_none, + 1, 83, :_reduce_73, + 1, 97, :_reduce_74, + 2, 97, :_reduce_75, + 1, 78, :_reduce_76, + 2, 78, :_reduce_77, + 3, 78, :_reduce_78, + 1, 90, :_reduce_none, + 1, 90, :_reduce_none, + 0, 98, :_reduce_81, + 0, 99, :_reduce_82, + 5, 70, :_reduce_83, + 1, 100, :_reduce_84, + 2, 100, :_reduce_85, + 1, 79, :_reduce_86, + 2, 79, :_reduce_87, + 3, 79, :_reduce_88, + 1, 82, :_reduce_89, + 1, 82, :_reduce_90, + 0, 102, :_reduce_none, + 1, 102, :_reduce_none, + 2, 59, :_reduce_none, + 2, 59, :_reduce_none, + 4, 101, :_reduce_95, + 1, 103, :_reduce_96, + 3, 103, :_reduce_97, + 1, 104, :_reduce_98, + 3, 104, :_reduce_99, + 5, 104, :_reduce_100, + 7, 104, :_reduce_101, + 4, 104, :_reduce_102, + 3, 104, :_reduce_103, + 1, 92, :_reduce_104, + 1, 92, :_reduce_105, + 1, 92, :_reduce_106, + 1, 93, :_reduce_107, + 3, 93, :_reduce_108, + 2, 93, :_reduce_109, + 4, 93, :_reduce_110, + 0, 105, :_reduce_111, + 0, 106, :_reduce_112, + 5, 94, :_reduce_113, + 3, 91, :_reduce_114, + 0, 107, :_reduce_115, + 3, 60, :_reduce_116, 1, 68, :_reduce_none, - 1, 75, :_reduce_131, - 2, 75, :_reduce_132, - 1, 118, :_reduce_none, - 1, 118, :_reduce_none, - 1, 104, :_reduce_135, - 0, 93, :_reduce_none, - 1, 93, :_reduce_none ] + 0, 69, :_reduce_none, + 1, 69, :_reduce_none, + 1, 69, :_reduce_none, + 1, 69, :_reduce_none, + 1, 75, :_reduce_none, + 1, 75, :_reduce_none, + 0, 89, :_reduce_none, + 1, 89, :_reduce_none, + 1, 96, :_reduce_126 ] -racc_reduce_n = 138 +racc_reduce_n = 127 -racc_shift_n = 233 +racc_shift_n = 217 racc_token_table = { false => 0, @@ -1069,43 +1040,44 @@ def raise_parse_error(error_message, location) "%lex-param" => 16, "%parse-param" => 17, "%code" => 18, - "{" => 19, - "}" => 20, - "%initial-action" => 21, - "%no-stdlib" => 22, - ";" => 23, - "%union" => 24, - "%destructor" => 25, - "%printer" => 26, - "%error-token" => 27, - "%after-shift" => 28, - "%before-reduce" => 29, - "%after-reduce" => 30, - "%after-shift-error-token" => 31, - "%after-pop-stack" => 32, - "%token" => 33, - "%type" => 34, - "%left" => 35, - "%right" => 36, - "%precedence" => 37, - "%nonassoc" => 38, - "%rule" => 39, - "(" => 40, - ")" => 41, - ":" => 42, - "%inline" => 43, - "," => 44, - "|" => 45, - "%empty" => 46, - "%prec" => 47, + "%initial-action" => 19, + "%no-stdlib" => 20, + "%locations" => 21, + ";" => 22, + "%union" => 23, + "%destructor" => 24, + "%printer" => 25, + "%error-token" => 26, + "%after-shift" => 27, + "%before-reduce" => 28, + "%after-reduce" => 29, + "%after-shift-error-token" => 30, + "%after-pop-stack" => 31, + "%token" => 32, + "%type" => 33, + "%left" => 34, + "%right" => 35, + "%precedence" => 36, + "%nonassoc" => 37, + "%rule" => 38, + "(" => 39, + ")" => 40, + ":" => 41, + "%inline" => 42, + "," => 43, + "|" => 44, + "%prec" => 45, + "{" => 46, + "}" => 47, "?" => 48, "+" => 49, "*" => 50, "[" => 51, "]" => 52, - "{...}" => 53 } + "{...}" => 53, + "%empty" => 54 } -racc_nt_base = 54 +racc_nt_base = 55 racc_use_result_var = true @@ -1146,10 +1118,9 @@ def raise_parse_error(error_message, location) "\"%lex-param\"", "\"%parse-param\"", "\"%code\"", - "\"{\"", - "\"}\"", "\"%initial-action\"", "\"%no-stdlib\"", + "\"%locations\"", "\";\"", "\"%union\"", "\"%destructor\"", @@ -1173,79 +1144,69 @@ def raise_parse_error(error_message, location) "\"%inline\"", "\",\"", "\"|\"", - "\"%empty\"", "\"%prec\"", + "\"{\"", + "\"}\"", "\"?\"", "\"+\"", "\"*\"", "\"[\"", "\"]\"", "\"{...}\"", + "\"%empty\"", "$start", "input", - "prologue_declarations", - "bison_declarations", - "grammar", - "epilogue_opt", "prologue_declaration", + "bison_declaration", + "rules_or_grammar_declaration", + "epilogue_declaration", + "\"-many@prologue_declaration\"", + "\"-many@bison_declaration\"", + "\"-many1@rules_or_grammar_declaration\"", + "\"-option@epilogue_declaration\"", "@1", "@2", - "bison_declaration", "grammar_declaration", - "rule_declaration", - "inline_declaration", "variable", "value", - "params", - "@3", - "@4", - "@5", - "@6", + "param", + "\"-many1@param\"", "symbol_declaration", - "generic_symlist", - "@7", - "@8", - "@9", - "@10", - "@11", - "@12", - "@13", - "@14", + "rule_declaration", + "inline_declaration", + "generic_symbol", + "\"-many1@generic_symbol\"", "token_declarations", "symbol_declarations", "token_declarations_for_precedence", - "token_declaration_list", "token_declaration", + "\"-many1@token_declaration\"", "id", - "int_opt", "alias", + "\"-option@INTEGER\"", "rule_args", - "tag_opt", "rule_rhs_list", - "id_colon", + "\"-option@TAG\"", "rule_rhs", + "empty", "symbol", - "named_ref_opt", + "named_ref", "parameterizing_suffix", "parameterizing_args", - "@15", - "@16", - "symbol_declaration_list", + "midrule_action", + "\"-option@named_ref\"", "string_as_id", - "@17", - "@18", - "@19", - "@20", - "token_declaration_list_for_precedence", - "token_declaration_for_precedence", - "rules_or_grammar_declaration", + "\"-many1@symbol\"", + "@3", + "@4", + "\"-many1@id\"", "rules", + "\"-option@;\"", "rhs_list", "rhs", - "@21", - "@22", - "@23", - "generic_symlist_item" ] + "@5", + "@6", + "@7" ] Ractor.make_shareable(Racc_token_to_s_table) if defined?(Ractor) Racc_debug_parser = true @@ -1254,299 +1215,271 @@ def raise_parse_error(error_message, location) # reduce 0 omitted -# reduce 1 omitted +module_eval(<<'.,.,', 'parser.y', 11) + def _reduce_1(val, _values, result) + result = val[1] ? val[1].unshift(val[0]) : val + result + end +.,., -# reduce 2 omitted +module_eval(<<'.,.,', 'parser.y', 11) + def _reduce_2(val, _values, result) + result = val[1] ? val[1].unshift(val[0]) : val + result + end +.,., -# reduce 3 omitted +module_eval(<<'.,.,', 'parser.y', 11) + def _reduce_3(val, _values, result) + result = val[1] ? val[1].unshift(val[0]) : val + result + end +.,., -module_eval(<<'.,.,', 'parser.y', 14) +module_eval(<<'.,.,', 'parser.y', 11) def _reduce_4(val, _values, result) - begin_c_declaration("%}") - @grammar.prologue_first_lineno = @lexer.line - + result = val[1] ? val[1].unshift(val[0]) : val result end .,., -module_eval(<<'.,.,', 'parser.y', 19) +module_eval(<<'.,.,', 'parser.y', 11) def _reduce_5(val, _values, result) - end_c_declaration - + result = val[1] ? val[1].unshift(val[0]) : val result end .,., -module_eval(<<'.,.,', 'parser.y', 23) +module_eval(<<'.,.,', 'parser.y', 11) def _reduce_6(val, _values, result) - @grammar.prologue = val[2].s_value - + result = val[1] ? val[1].unshift(val[0]) : val result end .,., # reduce 7 omitted -module_eval(<<'.,.,', 'parser.y', 27) - def _reduce_8(val, _values, result) - result = "" - result - end -.,., +# reduce 8 omitted # reduce 9 omitted -# reduce 10 omitted - -# reduce 11 omitted - -# reduce 12 omitted +module_eval(<<'.,.,', 'parser.y', 12) + def _reduce_10(val, _values, result) + begin_c_declaration("%}") + @grammar.prologue_first_lineno = @lexer.line -module_eval(<<'.,.,', 'parser.y', 33) - def _reduce_13(val, _values, result) - @grammar.expect = val[1] result end .,., -# reduce 14 omitted - -# reduce 15 omitted - -module_eval(<<'.,.,', 'parser.y', 38) - def _reduce_16(val, _values, result) - val[1].each {|token| - @grammar.lex_param = Grammar::Code::NoReferenceCode.new(type: :lex_param, token_code: token).token_code.s_value - } +module_eval(<<'.,.,', 'parser.y', 17) + def _reduce_11(val, _values, result) + end_c_declaration result end .,., -module_eval(<<'.,.,', 'parser.y', 44) - def _reduce_17(val, _values, result) - val[1].each {|token| - @grammar.parse_param = Grammar::Code::NoReferenceCode.new(type: :parse_param, token_code: token).token_code.s_value - } +module_eval(<<'.,.,', 'parser.y', 21) + def _reduce_12(val, _values, result) + @grammar.prologue = val[2].s_value result end .,., -module_eval(<<'.,.,', 'parser.y', 50) - def _reduce_18(val, _values, result) - begin_c_declaration("}") +# reduce 13 omitted +module_eval(<<'.,.,', 'parser.y', 54) + def _reduce_14(val, _values, result) + result = val[1] ? val[1].unshift(val[0]) : val result end .,., module_eval(<<'.,.,', 'parser.y', 54) - def _reduce_19(val, _values, result) - end_c_declaration + def _reduce_15(val, _values, result) + result = val[1] ? val[1].unshift(val[0]) : val + result + end +.,., + +# reduce 16 omitted +module_eval(<<'.,.,', 'parser.y', 26) + def _reduce_17(val, _values, result) + @grammar.expect = val[1] result end .,., -module_eval(<<'.,.,', 'parser.y', 58) +# reduce 18 omitted + +# reduce 19 omitted + +module_eval(<<'.,.,', 'parser.y', 31) def _reduce_20(val, _values, result) - @grammar.add_percent_code(id: val[1], code: val[4]) + val[1].each {|token| + @grammar.lex_param = Grammar::Code::NoReferenceCode.new(type: :lex_param, token_code: token).token_code.s_value + } result end .,., -module_eval(<<'.,.,', 'parser.y', 62) +module_eval(<<'.,.,', 'parser.y', 37) def _reduce_21(val, _values, result) - begin_c_declaration("}") + val[1].each {|token| + @grammar.parse_param = Grammar::Code::NoReferenceCode.new(type: :parse_param, token_code: token).token_code.s_value + } result end .,., -module_eval(<<'.,.,', 'parser.y', 66) +module_eval(<<'.,.,', 'parser.y', 43) def _reduce_22(val, _values, result) - end_c_declaration + @grammar.add_percent_code(id: val[1], code: val[2]) result end .,., -module_eval(<<'.,.,', 'parser.y', 70) +module_eval(<<'.,.,', 'parser.y', 47) def _reduce_23(val, _values, result) - @grammar.initial_action = Grammar::Code::InitialActionCode.new(type: :initial_action, token_code: val[3]) + @grammar.initial_action = Grammar::Code::InitialActionCode.new(type: :initial_action, token_code: val[1]) result end .,., -module_eval(<<'.,.,', 'parser.y', 72) +module_eval(<<'.,.,', 'parser.y', 49) def _reduce_24(val, _values, result) @grammar.no_stdlib = true result end .,., -# reduce 25 omitted - -module_eval(<<'.,.,', 'parser.y', 77) - def _reduce_26(val, _values, result) - begin_c_declaration("}") - +module_eval(<<'.,.,', 'parser.y', 50) + def _reduce_25(val, _values, result) + @grammar.locations = true result end .,., -module_eval(<<'.,.,', 'parser.y', 81) - def _reduce_27(val, _values, result) - end_c_declaration +# reduce 26 omitted +module_eval(<<'.,.,', 'parser.y', 109) + def _reduce_27(val, _values, result) + result = val[1] ? val[1].unshift(val[0]) : val result end .,., -module_eval(<<'.,.,', 'parser.y', 85) +module_eval(<<'.,.,', 'parser.y', 109) def _reduce_28(val, _values, result) - @grammar.set_union( - Grammar::Code::NoReferenceCode.new(type: :union, token_code: val[3]), - val[3].line - ) - + result = val[1] ? val[1].unshift(val[0]) : val result end .,., -# reduce 29 omitted - -module_eval(<<'.,.,', 'parser.y', 93) - def _reduce_30(val, _values, result) - begin_c_declaration("}") +module_eval(<<'.,.,', 'parser.y', 55) + def _reduce_29(val, _values, result) + @grammar.set_union( + Grammar::Code::NoReferenceCode.new(type: :union, token_code: val[1]), + val[1].line + ) result end .,., -module_eval(<<'.,.,', 'parser.y', 97) - def _reduce_31(val, _values, result) - end_c_declaration - - result - end -.,., +# reduce 30 omitted -module_eval(<<'.,.,', 'parser.y', 101) - def _reduce_32(val, _values, result) - @grammar.add_destructor( - ident_or_tags: val[6], - token_code: val[3], - lineno: val[3].line - ) +# reduce 31 omitted - result - end -.,., +# reduce 32 omitted -module_eval(<<'.,.,', 'parser.y', 109) +module_eval(<<'.,.,', 'parser.y', 65) def _reduce_33(val, _values, result) - begin_c_declaration("}") + @grammar.add_destructor( + ident_or_tags: val[2], + token_code: val[1], + lineno: val[1].line + ) result end .,., -module_eval(<<'.,.,', 'parser.y', 113) +module_eval(<<'.,.,', 'parser.y', 73) def _reduce_34(val, _values, result) - end_c_declaration - - result - end -.,., - -module_eval(<<'.,.,', 'parser.y', 117) - def _reduce_35(val, _values, result) @grammar.add_printer( - ident_or_tags: val[6], - token_code: val[3], - lineno: val[3].line + ident_or_tags: val[2], + token_code: val[1], + lineno: val[1].line ) result end .,., -module_eval(<<'.,.,', 'parser.y', 125) - def _reduce_36(val, _values, result) - begin_c_declaration("}") - - result - end -.,., - -module_eval(<<'.,.,', 'parser.y', 129) - def _reduce_37(val, _values, result) - end_c_declaration - - result - end -.,., - -module_eval(<<'.,.,', 'parser.y', 133) - def _reduce_38(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 81) + def _reduce_35(val, _values, result) @grammar.add_error_token( - ident_or_tags: val[6], - token_code: val[3], - lineno: val[3].line + ident_or_tags: val[2], + token_code: val[1], + lineno: val[1].line ) result end .,., -module_eval(<<'.,.,', 'parser.y', 141) - def _reduce_39(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 89) + def _reduce_36(val, _values, result) @grammar.after_shift = val[1] result end .,., -module_eval(<<'.,.,', 'parser.y', 145) - def _reduce_40(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 93) + def _reduce_37(val, _values, result) @grammar.before_reduce = val[1] result end .,., -module_eval(<<'.,.,', 'parser.y', 149) - def _reduce_41(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 97) + def _reduce_38(val, _values, result) @grammar.after_reduce = val[1] result end .,., -module_eval(<<'.,.,', 'parser.y', 153) - def _reduce_42(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 101) + def _reduce_39(val, _values, result) @grammar.after_shift_error_token = val[1] result end .,., -module_eval(<<'.,.,', 'parser.y', 157) - def _reduce_43(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 105) + def _reduce_40(val, _values, result) @grammar.after_pop_stack = val[1] result end .,., -# reduce 44 omitted +# reduce 41 omitted -module_eval(<<'.,.,', 'parser.y', 163) - def _reduce_45(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 111) + def _reduce_42(val, _values, result) val[1].each {|hash| hash[:tokens].each {|id| @grammar.add_type(id: id, tag: hash[:tag]) @@ -1557,8 +1490,8 @@ def _reduce_45(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 171) - def _reduce_46(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 119) + def _reduce_43(val, _values, result) val[1].each {|hash| hash[:tokens].each {|id| sym = @grammar.add_term(id: id) @@ -1571,8 +1504,8 @@ def _reduce_46(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 181) - def _reduce_47(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 129) + def _reduce_44(val, _values, result) val[1].each {|hash| hash[:tokens].each {|id| sym = @grammar.add_term(id: id) @@ -1585,8 +1518,8 @@ def _reduce_47(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 191) - def _reduce_48(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 139) + def _reduce_45(val, _values, result) val[1].each {|hash| hash[:tokens].each {|id| sym = @grammar.add_term(id: id) @@ -1599,8 +1532,8 @@ def _reduce_48(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 201) - def _reduce_49(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 149) + def _reduce_46(val, _values, result) val[1].each {|hash| hash[:tokens].each {|id| sym = @grammar.add_term(id: id) @@ -1613,8 +1546,22 @@ def _reduce_49(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 212) - def _reduce_50(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 178) + def _reduce_47(val, _values, result) + result = val[1] ? val[1].unshift(val[0]) : val + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 178) + def _reduce_48(val, _values, result) + result = val[1] ? val[1].unshift(val[0]) : val + result + end +.,., + +module_eval(<<'.,.,', 'parser.y', 160) + def _reduce_49(val, _values, result) val[0].each {|token_declaration| @grammar.add_term(id: token_declaration[0], alias_name: token_declaration[2], token_id: token_declaration[1], tag: nil, replace: true) } @@ -1623,8 +1570,8 @@ def _reduce_50(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 218) - def _reduce_51(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 166) + def _reduce_50(val, _values, result) val[1].each {|token_declaration| @grammar.add_term(id: token_declaration[0], alias_name: token_declaration[2], token_id: token_declaration[1], tag: val[0], replace: true) } @@ -1633,8 +1580,8 @@ def _reduce_51(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 224) - def _reduce_52(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 172) + def _reduce_51(val, _values, result) val[2].each {|token_declaration| @grammar.add_term(id: token_declaration[0], alias_name: token_declaration[2], token_id: token_declaration[1], tag: val[1], replace: true) } @@ -1643,61 +1590,64 @@ def _reduce_52(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 229) - def _reduce_53(val, _values, result) - result = [val[0]] - result - end -.,., +# reduce 52 omitted + +# reduce 53 omitted -module_eval(<<'.,.,', 'parser.y', 230) +module_eval(<<'.,.,', 'parser.y', 177) def _reduce_54(val, _values, result) - result = val[0].append(val[1]) + result = val result end .,., -module_eval(<<'.,.,', 'parser.y', 232) - def _reduce_55(val, _values, result) - result = val +# reduce 55 omitted + +# reduce 56 omitted + +module_eval(<<'.,.,', 'parser.y', 181) + def _reduce_57(val, _values, result) + rule = Grammar::ParameterizingRule::Rule.new(val[1].s_value, val[3], val[7], tag: val[5]) + @grammar.add_parameterizing_rule(rule) + result end .,., -module_eval(<<'.,.,', 'parser.y', 236) - def _reduce_56(val, _values, result) - rule = Grammar::ParameterizingRule::Rule.new(val[1].s_value, val[3], val[7], tag: val[5]) +module_eval(<<'.,.,', 'parser.y', 187) + def _reduce_58(val, _values, result) + rule = Grammar::ParameterizingRule::Rule.new(val[2].s_value, [], val[4], is_inline: true) @grammar.add_parameterizing_rule(rule) result end .,., -module_eval(<<'.,.,', 'parser.y', 242) - def _reduce_57(val, _values, result) - rule = Grammar::ParameterizingRule::Rule.new(val[2].s_value, [], val[4], is_inline: true) +module_eval(<<'.,.,', 'parser.y', 192) + def _reduce_59(val, _values, result) + rule = Grammar::ParameterizingRule::Rule.new(val[2].s_value, val[4], val[7], is_inline: true) @grammar.add_parameterizing_rule(rule) result end .,., -module_eval(<<'.,.,', 'parser.y', 246) - def _reduce_58(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 196) + def _reduce_60(val, _values, result) result = [val[0]] result end .,., -module_eval(<<'.,.,', 'parser.y', 247) - def _reduce_59(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 197) + def _reduce_61(val, _values, result) result = val[0].append(val[2]) result end .,., -module_eval(<<'.,.,', 'parser.y', 251) - def _reduce_60(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 201) + def _reduce_62(val, _values, result) builder = val[0] result = [builder] @@ -1705,8 +1655,8 @@ def _reduce_60(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 256) - def _reduce_61(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 206) + def _reduce_63(val, _values, result) builder = val[2] result = val[0].append(builder) @@ -1714,17 +1664,12 @@ def _reduce_61(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 262) - def _reduce_62(val, _values, result) - reset_precs - result = Grammar::ParameterizingRule::Rhs.new +# reduce 64 omitted - result - end -.,., +# reduce 65 omitted -module_eval(<<'.,.,', 'parser.y', 267) - def _reduce_63(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 212) + def _reduce_66(val, _values, result) reset_precs result = Grammar::ParameterizingRule::Rhs.new @@ -1732,8 +1677,8 @@ def _reduce_63(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 272) - def _reduce_64(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 217) + def _reduce_67(val, _values, result) token = val[1] token.alias_name = val[2] builder = val[0] @@ -1744,8 +1689,8 @@ def _reduce_64(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 280) - def _reduce_65(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 225) + def _reduce_68(val, _values, result) builder = val[0] builder.symbols << Lrama::Lexer::Token::InstantiateRule.new(s_value: val[2], location: @lexer.location, args: [val[1]]) result = builder @@ -1754,8 +1699,8 @@ def _reduce_65(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 286) - def _reduce_66(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 231) + def _reduce_69(val, _values, result) builder = val[0] builder.symbols << Lrama::Lexer::Token::InstantiateRule.new(s_value: val[1].s_value, location: @lexer.location, args: val[3], lhs_tag: val[5]) result = builder @@ -1764,30 +1709,10 @@ def _reduce_66(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 292) - def _reduce_67(val, _values, result) - if @prec_seen - on_action_error("multiple User_code after %prec", val[0]) if @code_after_prec - @code_after_prec = true - end - begin_c_declaration("}") - - result - end -.,., - -module_eval(<<'.,.,', 'parser.y', 300) - def _reduce_68(val, _values, result) - end_c_declaration - - result - end -.,., - -module_eval(<<'.,.,', 'parser.y', 304) - def _reduce_69(val, _values, result) - user_code = val[3] - user_code.alias_name = val[6] +module_eval(<<'.,.,', 'parser.y', 237) + def _reduce_70(val, _values, result) + user_code = val[1] + user_code.alias_name = val[2] builder = val[0] builder.user_code = user_code result = builder @@ -1796,8 +1721,8 @@ def _reduce_69(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 312) - def _reduce_70(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 245) + def _reduce_71(val, _values, result) sym = @grammar.find_symbol_by_id!(val[2]) @prec_seen = true builder = val[0] @@ -1808,168 +1733,137 @@ def _reduce_70(val, _values, result) end .,., -# reduce 71 omitted - # reduce 72 omitted -# reduce 73 omitted +module_eval(<<'.,.,', 'parser.y', 253) + def _reduce_73(val, _values, result) + result = val[0].s_value + result + end +.,., -# reduce 74 omitted +module_eval(<<'.,.,', 'parser.y', 260) + def _reduce_74(val, _values, result) + result = val[1] ? val[1].unshift(val[0]) : val + result + end +.,., -module_eval(<<'.,.,', 'parser.y', 327) +module_eval(<<'.,.,', 'parser.y', 260) def _reduce_75(val, _values, result) - result = [{tag: nil, tokens: val[0]}] - + result = val[1] ? val[1].unshift(val[0]) : val result end .,., -module_eval(<<'.,.,', 'parser.y', 331) +module_eval(<<'.,.,', 'parser.y', 255) def _reduce_76(val, _values, result) - result = [{tag: val[0], tokens: val[1]}] - + result = [{tag: nil, tokens: val[0]}] result end .,., -module_eval(<<'.,.,', 'parser.y', 335) +module_eval(<<'.,.,', 'parser.y', 256) def _reduce_77(val, _values, result) - result = val[0].append({tag: val[1], tokens: val[2]}) - + result = [{tag: val[0], tokens: val[1]}] result end .,., -module_eval(<<'.,.,', 'parser.y', 338) +module_eval(<<'.,.,', 'parser.y', 257) def _reduce_78(val, _values, result) - result = [val[0]] + result = val[0].append({tag: val[1], tokens: val[2]}) result end .,., -module_eval(<<'.,.,', 'parser.y', 339) - def _reduce_79(val, _values, result) - result = val[0].append(val[1]) - result - end -.,., +# reduce 79 omitted # reduce 80 omitted -# reduce 81 omitted +module_eval(<<'.,.,', 'parser.y', 263) + def _reduce_81(val, _values, result) + begin_c_declaration("}") + + result + end +.,., -module_eval(<<'.,.,', 'parser.y', 346) +module_eval(<<'.,.,', 'parser.y', 267) def _reduce_82(val, _values, result) - begin_c_declaration("}") + end_c_declaration result end .,., -module_eval(<<'.,.,', 'parser.y', 350) +module_eval(<<'.,.,', 'parser.y', 271) def _reduce_83(val, _values, result) - end_c_declaration + result = val[2] result end .,., -module_eval(<<'.,.,', 'parser.y', 354) +module_eval(<<'.,.,', 'parser.y', 279) def _reduce_84(val, _values, result) - result = val[0].append(val[3]) - + result = val[1] ? val[1].unshift(val[0]) : val result end .,., -module_eval(<<'.,.,', 'parser.y', 358) +module_eval(<<'.,.,', 'parser.y', 279) def _reduce_85(val, _values, result) - begin_c_declaration("}") - + result = val[1] ? val[1].unshift(val[0]) : val result end .,., -module_eval(<<'.,.,', 'parser.y', 362) +module_eval(<<'.,.,', 'parser.y', 274) def _reduce_86(val, _values, result) - end_c_declaration - + result = [{tag: nil, tokens: val[0]}] result end .,., -module_eval(<<'.,.,', 'parser.y', 366) +module_eval(<<'.,.,', 'parser.y', 275) def _reduce_87(val, _values, result) - result = [val[2]] - + result = [{tag: val[0], tokens: val[1]}] result end .,., -module_eval(<<'.,.,', 'parser.y', 371) +module_eval(<<'.,.,', 'parser.y', 276) def _reduce_88(val, _values, result) - result = [{tag: nil, tokens: val[0]}] - + result = val[0].append({tag: val[1], tokens: val[2]}) result end .,., -module_eval(<<'.,.,', 'parser.y', 375) +module_eval(<<'.,.,', 'parser.y', 278) def _reduce_89(val, _values, result) - result = [{tag: val[0], tokens: val[1]}] - + on_action_error("ident after %prec", val[0]) if @prec_seen result end .,., -module_eval(<<'.,.,', 'parser.y', 379) +module_eval(<<'.,.,', 'parser.y', 279) def _reduce_90(val, _values, result) - result = val[0].append({tag: val[1], tokens: val[2]}) - + on_action_error("char after %prec", val[0]) if @prec_seen result end .,., -module_eval(<<'.,.,', 'parser.y', 382) - def _reduce_91(val, _values, result) - result = [val[0]] - result - end -.,., +# reduce 91 omitted -module_eval(<<'.,.,', 'parser.y', 383) - def _reduce_92(val, _values, result) - result = val[0].append(val[1]) - result - end -.,., +# reduce 92 omitted # reduce 93 omitted -module_eval(<<'.,.,', 'parser.y', 387) - def _reduce_94(val, _values, result) - on_action_error("ident after %prec", val[0]) if @prec_seen - result - end -.,., +# reduce 94 omitted -module_eval(<<'.,.,', 'parser.y', 388) +module_eval(<<'.,.,', 'parser.y', 287) def _reduce_95(val, _values, result) - on_action_error("char after %prec", val[0]) if @prec_seen - result - end -.,., - -# reduce 96 omitted - -# reduce 97 omitted - -# reduce 98 omitted - -# reduce 99 omitted - -module_eval(<<'.,.,', 'parser.y', 398) - def _reduce_100(val, _values, result) lhs = val[0] lhs.alias_name = val[1] val[3].each do |builder| @@ -1982,8 +1876,8 @@ def _reduce_100(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 409) - def _reduce_101(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 298) + def _reduce_96(val, _values, result) builder = val[0] if !builder.line builder.line = @lexer.line - 1 @@ -1994,8 +1888,8 @@ def _reduce_101(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 417) - def _reduce_102(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 306) + def _reduce_97(val, _values, result) builder = val[2] if !builder.line builder.line = @lexer.line - 1 @@ -2006,28 +1900,17 @@ def _reduce_102(val, _values, result) end .,., -# reduce 103 omitted - -module_eval(<<'.,.,', 'parser.y', 427) - def _reduce_104(val, _values, result) - reset_precs - result = Grammar::RuleBuilder.new(@rule_counter, @midrule_action_counter) - - result - end -.,., - -module_eval(<<'.,.,', 'parser.y', 432) - def _reduce_105(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 315) + def _reduce_98(val, _values, result) reset_precs - result = Grammar::RuleBuilder.new(@rule_counter, @midrule_action_counter) + result = @grammar.create_rule_builder(@rule_counter, @midrule_action_counter) result end .,., -module_eval(<<'.,.,', 'parser.y', 437) - def _reduce_106(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 320) + def _reduce_99(val, _values, result) token = val[1] token.alias_name = val[2] builder = val[0] @@ -2038,9 +1921,9 @@ def _reduce_106(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 445) - def _reduce_107(val, _values, result) - token = Lrama::Lexer::Token::InstantiateRule.new(s_value: val[2], location: @lexer.location, args: [val[1]], lhs_tag: val[3]) +module_eval(<<'.,.,', 'parser.y', 328) + def _reduce_100(val, _values, result) + token = Lrama::Lexer::Token::InstantiateRule.new(s_value: val[2], alias_name: val[3], location: @lexer.location, args: [val[1]], lhs_tag: val[4]) builder = val[0] builder.add_rhs(token) builder.line = val[1].first_line @@ -2050,9 +1933,9 @@ def _reduce_107(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 453) - def _reduce_108(val, _values, result) - token = Lrama::Lexer::Token::InstantiateRule.new(s_value: val[1].s_value, location: @lexer.location, args: val[3], lhs_tag: val[5]) +module_eval(<<'.,.,', 'parser.y', 336) + def _reduce_101(val, _values, result) + token = Lrama::Lexer::Token::InstantiateRule.new(s_value: val[1].s_value, alias_name: val[5], location: @lexer.location, args: val[3], lhs_tag: val[6]) builder = val[0] builder.add_rhs(token) builder.line = val[1].first_line @@ -2062,31 +1945,11 @@ def _reduce_108(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 461) - def _reduce_109(val, _values, result) - if @prec_seen - on_action_error("multiple User_code after %prec", val[0]) if @code_after_prec - @code_after_prec = true - end - begin_c_declaration("}") - - result - end -.,., - -module_eval(<<'.,.,', 'parser.y', 469) - def _reduce_110(val, _values, result) - end_c_declaration - - result - end -.,., - -module_eval(<<'.,.,', 'parser.y', 473) - def _reduce_111(val, _values, result) - user_code = val[3] - user_code.alias_name = val[6] - user_code.tag = val[7] +module_eval(<<'.,.,', 'parser.y', 344) + def _reduce_102(val, _values, result) + user_code = val[1] + user_code.alias_name = val[2] + user_code.tag = val[3] builder = val[0] builder.user_code = user_code result = builder @@ -2095,8 +1958,8 @@ def _reduce_111(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 482) - def _reduce_112(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 353) + def _reduce_103(val, _values, result) sym = @grammar.find_symbol_by_id!(val[2]) @prec_seen = true builder = val[0] @@ -2107,125 +1970,133 @@ def _reduce_112(val, _values, result) end .,., -module_eval(<<'.,.,', 'parser.y', 489) - def _reduce_113(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 360) + def _reduce_104(val, _values, result) result = "option" result end .,., -module_eval(<<'.,.,', 'parser.y', 490) - def _reduce_114(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 361) + def _reduce_105(val, _values, result) result = "nonempty_list" result end .,., -module_eval(<<'.,.,', 'parser.y', 491) - def _reduce_115(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 362) + def _reduce_106(val, _values, result) result = "list" result end .,., -module_eval(<<'.,.,', 'parser.y', 493) - def _reduce_116(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 364) + def _reduce_107(val, _values, result) result = [val[0]] result end .,., -module_eval(<<'.,.,', 'parser.y', 494) - def _reduce_117(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 365) + def _reduce_108(val, _values, result) result = val[0].append(val[2]) result end .,., -module_eval(<<'.,.,', 'parser.y', 495) - def _reduce_118(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 366) + def _reduce_109(val, _values, result) result = [Lrama::Lexer::Token::InstantiateRule.new(s_value: val[1].s_value, location: @lexer.location, args: val[0])] result end .,., -module_eval(<<'.,.,', 'parser.y', 496) - def _reduce_119(val, _values, result) +module_eval(<<'.,.,', 'parser.y', 367) + def _reduce_110(val, _values, result) result = [Lrama::Lexer::Token::InstantiateRule.new(s_value: val[0].s_value, location: @lexer.location, args: val[2])] result end .,., -# reduce 120 omitted +module_eval(<<'.,.,', 'parser.y', 371) + def _reduce_111(val, _values, result) + if @prec_seen + on_action_error("multiple User_code after %prec", val[0]) if @code_after_prec + @code_after_prec = true + end + begin_c_declaration("}") -module_eval(<<'.,.,', 'parser.y', 499) - def _reduce_121(val, _values, result) - result = val[1].s_value result end .,., -# reduce 122 omitted - -# reduce 123 omitted - -module_eval(<<'.,.,', 'parser.y', 506) - def _reduce_124(val, _values, result) - begin_c_declaration('\Z') - @grammar.epilogue_first_lineno = @lexer.line + 1 +module_eval(<<'.,.,', 'parser.y', 379) + def _reduce_112(val, _values, result) + end_c_declaration result end .,., -module_eval(<<'.,.,', 'parser.y', 511) - def _reduce_125(val, _values, result) - end_c_declaration - @grammar.epilogue = val[2].s_value +module_eval(<<'.,.,', 'parser.y', 383) + def _reduce_113(val, _values, result) + result = val[2] result end .,., -# reduce 126 omitted - -# reduce 127 omitted - -# reduce 128 omitted - -# reduce 129 omitted +module_eval(<<'.,.,', 'parser.y', 386) + def _reduce_114(val, _values, result) + result = val[1].s_value + result + end +.,., -# reduce 130 omitted +module_eval(<<'.,.,', 'parser.y', 390) + def _reduce_115(val, _values, result) + begin_c_declaration('\Z') + @grammar.epilogue_first_lineno = @lexer.line + 1 -module_eval(<<'.,.,', 'parser.y', 522) - def _reduce_131(val, _values, result) - result = [val[0]] result end .,., -module_eval(<<'.,.,', 'parser.y', 523) - def _reduce_132(val, _values, result) - result = val[0].append(val[1]) +module_eval(<<'.,.,', 'parser.y', 395) + def _reduce_116(val, _values, result) + end_c_declaration + @grammar.epilogue = val[2].s_value + result end .,., -# reduce 133 omitted +# reduce 117 omitted + +# reduce 118 omitted -# reduce 134 omitted +# reduce 119 omitted -module_eval(<<'.,.,', 'parser.y', 528) - def _reduce_135(val, _values, result) +# reduce 120 omitted + +# reduce 121 omitted + +# reduce 122 omitted + +# reduce 123 omitted + +# reduce 124 omitted + +# reduce 125 omitted + +module_eval(<<'.,.,', 'parser.y', 412) + def _reduce_126(val, _values, result) result = Lrama::Lexer::Token::Ident.new(s_value: val[0]) result end .,., -# reduce 136 omitted - -# reduce 137 omitted - def _reduce_none(val, _values, result) val[0] end diff --git a/tool/lrama/lib/lrama/report.rb b/tool/lrama/lib/lrama/report.rb index 650ac09d52e4a2..890e5f1e8c5cc4 100644 --- a/tool/lrama/lib/lrama/report.rb +++ b/tool/lrama/lib/lrama/report.rb @@ -1,2 +1,4 @@ -require 'lrama/report/duration' -require 'lrama/report/profile' +# frozen_string_literal: true + +require_relative 'report/duration' +require_relative 'report/profile' diff --git a/tool/lrama/lib/lrama/report/duration.rb b/tool/lrama/lib/lrama/report/duration.rb index 7afe284f1a1aaa..fe09a0d028f501 100644 --- a/tool/lrama/lib/lrama/report/duration.rb +++ b/tool/lrama/lib/lrama/report/duration.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class Report module Duration diff --git a/tool/lrama/lib/lrama/report/profile.rb b/tool/lrama/lib/lrama/report/profile.rb index 36156800a4ec8c..10488cf9130bd1 100644 --- a/tool/lrama/lib/lrama/report/profile.rb +++ b/tool/lrama/lib/lrama/report/profile.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class Report module Profile diff --git a/tool/lrama/lib/lrama/state.rb b/tool/lrama/lib/lrama/state.rb index ceb74d856af187..c2623746aabb16 100644 --- a/tool/lrama/lib/lrama/state.rb +++ b/tool/lrama/lib/lrama/state.rb @@ -1,8 +1,10 @@ -require "lrama/state/reduce" -require "lrama/state/reduce_reduce_conflict" -require "lrama/state/resolved_conflict" -require "lrama/state/shift" -require "lrama/state/shift_reduce_conflict" +# frozen_string_literal: true + +require_relative "state/reduce" +require_relative "state/reduce_reduce_conflict" +require_relative "state/resolved_conflict" +require_relative "state/shift" +require_relative "state/shift_reduce_conflict" module Lrama class State diff --git a/tool/lrama/lib/lrama/state/reduce.rb b/tool/lrama/lib/lrama/state/reduce.rb index 8ba51f45f2f41d..a2b7c26cfee570 100644 --- a/tool/lrama/lib/lrama/state/reduce.rb +++ b/tool/lrama/lib/lrama/state/reduce.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class State class Reduce @@ -25,6 +27,7 @@ def add_not_selected_symbol(sym) def selected_look_ahead if @look_ahead + # @type ivar @look_ahead: Array @look_ahead - @not_selected_symbols else [] diff --git a/tool/lrama/lib/lrama/state/reduce_reduce_conflict.rb b/tool/lrama/lib/lrama/state/reduce_reduce_conflict.rb index 0a0e4dc20ae7f3..736d08376a73c7 100644 --- a/tool/lrama/lib/lrama/state/reduce_reduce_conflict.rb +++ b/tool/lrama/lib/lrama/state/reduce_reduce_conflict.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class State class ReduceReduceConflict < Struct.new(:symbols, :reduce1, :reduce2, keyword_init: true) diff --git a/tool/lrama/lib/lrama/state/resolved_conflict.rb b/tool/lrama/lib/lrama/state/resolved_conflict.rb index 02ea8921475fd4..3bb3d1446e7214 100644 --- a/tool/lrama/lib/lrama/state/resolved_conflict.rb +++ b/tool/lrama/lib/lrama/state/resolved_conflict.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class State # * symbol: A symbol under discussion @@ -6,7 +8,7 @@ class State class ResolvedConflict < Struct.new(:symbol, :reduce, :which, :same_prec, keyword_init: true) def report_message s = symbol.display_name - r = reduce.rule.precedence_sym.display_name + r = reduce.rule.precedence_sym&.display_name case when which == :shift && same_prec msg = "resolved as #{which} (%right #{s})" diff --git a/tool/lrama/lib/lrama/state/shift.rb b/tool/lrama/lib/lrama/state/shift.rb index 2021eb61f61041..81ef013a17c009 100644 --- a/tool/lrama/lib/lrama/state/shift.rb +++ b/tool/lrama/lib/lrama/state/shift.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class State class Shift diff --git a/tool/lrama/lib/lrama/state/shift_reduce_conflict.rb b/tool/lrama/lib/lrama/state/shift_reduce_conflict.rb index f80bd5f352453f..fd66834539e924 100644 --- a/tool/lrama/lib/lrama/state/shift_reduce_conflict.rb +++ b/tool/lrama/lib/lrama/state/shift_reduce_conflict.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class State class ShiftReduceConflict < Struct.new(:symbols, :shift, :reduce, keyword_init: true) diff --git a/tool/lrama/lib/lrama/states.rb b/tool/lrama/lib/lrama/states.rb index 290e996b822b08..0ed4bff9c1ee61 100644 --- a/tool/lrama/lib/lrama/states.rb +++ b/tool/lrama/lib/lrama/states.rb @@ -1,6 +1,8 @@ +# frozen_string_literal: true + require "forwardable" -require "lrama/report/duration" -require "lrama/states/item" +require_relative "report/duration" +require_relative "states/item" module Lrama # States is passed to a template file @@ -16,9 +18,8 @@ class States attr_reader :states, :reads_relation, :includes_relation, :lookback_relation - def initialize(grammar, warning, trace_state: false) + def initialize(grammar, trace_state: false) @grammar = grammar - @warning = warning @trace_state = trace_state @states = [] @@ -89,8 +90,6 @@ def compute report_duration(:compute_conflicts) { compute_conflicts } report_duration(:compute_default_reduction) { compute_default_reduction } - - check_conflicts end def reporter @@ -125,16 +124,16 @@ def la end end - private - - def sr_conflicts - @states.flat_map(&:sr_conflicts) + def sr_conflicts_count + @sr_conflicts_count ||= @states.flat_map(&:sr_conflicts).count end - def rr_conflicts - @states.flat_map(&:rr_conflicts) + def rr_conflicts_count + @rr_conflicts_count ||= @states.flat_map(&:rr_conflicts).count end + private + def trace_state if @trace_state yield STDERR @@ -350,7 +349,7 @@ def compute_includes_relation # TODO: need to omit if state == state2 ? @includes_relation[key] ||= [] @includes_relation[key] << [state.id, nterm.token_id] - break if !sym.nullable + break unless sym.nullable i -= 1 end end @@ -385,7 +384,7 @@ def compute_look_ahead_sets @states.each do |state| rules.each do |rule| ary = @lookback_relation[[state.id, rule.id]] - next if !ary + next unless ary ary.each do |state2_id, nterm_token_id| # q = state, A -> ω = rule, p = state2, A = nterm @@ -428,7 +427,7 @@ def compute_shift_reduce_conflicts sym = shift.next_sym next unless reduce.look_ahead - next if !reduce.look_ahead.include?(sym) + next unless reduce.look_ahead.include?(sym) # Shift/Reduce conflict shift_prec = sym.precedence @@ -492,17 +491,17 @@ def compute_reduce_reduce_conflicts states.each do |state| count = state.reduces.count - for i in 0...count do + (0...count).each do |i| reduce1 = state.reduces[i] next if reduce1.look_ahead.nil? - for j in (i+1)...count do + ((i+1)...count).each do |j| reduce2 = state.reduces[j] next if reduce2.look_ahead.nil? intersection = reduce1.look_ahead & reduce2.look_ahead - if !intersection.empty? + unless intersection.empty? state.conflicts << State::ReduceReduceConflict.new(symbols: intersection, reduce1: reduce1, reduce2: reduce2) end end @@ -514,7 +513,7 @@ def compute_default_reduction states.each do |state| next if state.reduces.empty? # Do not set, if conflict exist - next if !state.conflicts.empty? + next unless state.conflicts.empty? # Do not set, if shift with `error` exists. next if state.shifts.map(&:next_sym).include?(@grammar.error_symbol) @@ -525,32 +524,5 @@ def compute_default_reduction end.first end end - - def check_conflicts - sr_count = sr_conflicts.count - rr_count = rr_conflicts.count - - if @grammar.expect - - expected_sr_conflicts = @grammar.expect - expected_rr_conflicts = 0 - - if expected_sr_conflicts != sr_count - @warning.error("shift/reduce conflicts: #{sr_count} found, #{expected_sr_conflicts} expected") - end - - if expected_rr_conflicts != rr_count - @warning.error("reduce/reduce conflicts: #{rr_count} found, #{expected_rr_conflicts} expected") - end - else - if sr_count != 0 - @warning.warn("shift/reduce conflicts: #{sr_count} found") - end - - if rr_count != 0 - @warning.warn("reduce/reduce conflicts: #{rr_count} found") - end - end - end end end diff --git a/tool/lrama/lib/lrama/states/item.rb b/tool/lrama/lib/lrama/states/item.rb index 31b74b9d34e9a5..5074e943b749c9 100644 --- a/tool/lrama/lib/lrama/states/item.rb +++ b/tool/lrama/lib/lrama/states/item.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + # TODO: Validate position is not over rule rhs require "forwardable" @@ -54,11 +56,11 @@ def new_by_next_position Item.new(rule: rule, position: position + 1) end - def symbols_before_dot + def symbols_before_dot # steep:ignore rhs[0...position] end - def symbols_after_dot + def symbols_after_dot # steep:ignore rhs[position..-1] end @@ -73,7 +75,7 @@ def display_name # Right after position def display_rest - r = rhs[position..-1].map(&:display_name).join(" ") + r = symbols_after_dot.map(&:display_name).join(" ") ". #{r} (rule #{rule_id})" end end diff --git a/tool/lrama/lib/lrama/states_reporter.rb b/tool/lrama/lib/lrama/states_reporter.rb index 6f96cc6f65bdc0..64ff4de1006c58 100644 --- a/tool/lrama/lib/lrama/states_reporter.rb +++ b/tool/lrama/lib/lrama/states_reporter.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama class StatesReporter include Lrama::Report::Duration @@ -14,15 +16,54 @@ def report(io, **options) private - def _report(io, grammar: false, states: false, itemsets: false, lookaheads: false, solved: false, counterexamples: false, verbose: false) - # TODO: Unused terms - # TODO: Unused rules - + def _report(io, grammar: false, rules: false, terms: false, states: false, itemsets: false, lookaheads: false, solved: false, counterexamples: false, verbose: false) + report_unused_rules(io) if rules + report_unused_terms(io) if terms report_conflicts(io) report_grammar(io) if grammar report_states(io, itemsets, lookaheads, solved, counterexamples, verbose) end + def report_unused_terms(io) + look_aheads = @states.states.each do |state| + state.reduces.flat_map do |reduce| + reduce.look_ahead unless reduce.look_ahead.nil? + end + end + + next_terms = @states.states.flat_map do |state| + state.shifts.map(&:next_sym).select(&:term?) + end + + unused_symbols = @states.terms.select do |term| + !(look_aheads + next_terms).include?(term) + end + + unless unused_symbols.empty? + io << "#{unused_symbols.count} Unused Terms\n\n" + unused_symbols.each_with_index do |term, index| + io << sprintf("%5d %s\n", index, term.id.s_value) + end + io << "\n\n" + end + end + + def report_unused_rules(io) + used_rules = @states.rules.flat_map(&:rhs) + + unused_rules = @states.rules.map(&:lhs).select do |rule| + !used_rules.include?(rule) && rule.token_id != 0 + end + + unless unused_rules.empty? + io << "#{unused_rules.count} Unused Rules\n\n" + unused_rules.each_with_index do |rule, index| + io << sprintf("%5d %s\n", index, rule.display_name) + end + io << "\n\n" + end + end + def report_conflicts(io) has_conflict = false @@ -37,7 +78,7 @@ def report_conflicts(io) messages << "#{cs[:reduce_reduce].count} reduce/reduce" end - if !messages.empty? + unless messages.empty? has_conflict = true io << "State #{state.id} conflicts: #{messages.join(', ')}\n" end @@ -98,7 +139,7 @@ def report_states(io, itemsets, lookaheads, solved, counterexamples, verbose) if lookaheads && item.end_of_rule? reduce = state.find_reduce_by_item!(item) look_ahead = reduce.selected_look_ahead - if !look_ahead.empty? + unless look_ahead.empty? la = " [#{look_ahead.map(&:display_name).join(", ")}]" end end @@ -118,7 +159,7 @@ def report_states(io, itemsets, lookaheads, solved, counterexamples, verbose) tmp.each do |term, state_id| io << " #{term.display_name.ljust(max_len)} shift, and go to state #{state_id}\n" end - io << "\n" if !tmp.empty? + io << "\n" unless tmp.empty? # Report error caused by %nonassoc nl = false @@ -132,7 +173,7 @@ def report_states(io, itemsets, lookaheads, solved, counterexamples, verbose) nl = true io << " #{name.ljust(max_len)} error (nonassociative)\n" end - io << "\n" if !tmp.empty? + io << "\n" unless tmp.empty? # Report reduces nl = false @@ -181,14 +222,14 @@ def report_states(io, itemsets, lookaheads, solved, counterexamples, verbose) tmp.each do |nterm, state_id| io << " #{nterm.id.s_value.ljust(max_len)} go to state #{state_id}\n" end - io << "\n" if !tmp.empty? + io << "\n" unless tmp.empty? if solved # Report conflict resolutions state.resolved_conflicts.each do |resolved| io << " #{resolved.report_message}\n" end - io << "\n" if !state.resolved_conflicts.empty? + io << "\n" unless state.resolved_conflicts.empty? end if counterexamples && state.has_conflicts? @@ -219,7 +260,7 @@ def report_states(io, itemsets, lookaheads, solved, counterexamples, verbose) direct_read_sets = @states.direct_read_sets @states.nterms.each do |nterm| terms = direct_read_sets[[state.id, nterm.token_id]] - next if !terms + next unless terms next if terms.empty? str = terms.map {|sym| sym.id.s_value }.join(", ") @@ -231,7 +272,7 @@ def report_states(io, itemsets, lookaheads, solved, counterexamples, verbose) io << " [Reads Relation]\n" @states.nterms.each do |nterm| a = @states.reads_relation[[state.id, nterm.token_id]] - next if !a + next unless a a.each do |state_id2, nterm_id2| n = @states.nterms.find {|n| n.token_id == nterm_id2 } @@ -245,7 +286,7 @@ def report_states(io, itemsets, lookaheads, solved, counterexamples, verbose) read_sets = @states.read_sets @states.nterms.each do |nterm| terms = read_sets[[state.id, nterm.token_id]] - next if !terms + next unless terms next if terms.empty? terms.each do |sym| @@ -258,7 +299,7 @@ def report_states(io, itemsets, lookaheads, solved, counterexamples, verbose) io << " [Includes Relation]\n" @states.nterms.each do |nterm| a = @states.includes_relation[[state.id, nterm.token_id]] - next if !a + next unless a a.each do |state_id2, nterm_id2| n = @states.nterms.find {|n| n.token_id == nterm_id2 } @@ -271,11 +312,11 @@ def report_states(io, itemsets, lookaheads, solved, counterexamples, verbose) io << " [Lookback Relation]\n" @states.rules.each do |rule| a = @states.lookback_relation[[state.id, rule.id]] - next if !a + next unless a a.each do |state_id2, nterm_id2| n = @states.nterms.find {|n| n.token_id == nterm_id2 } - io << " (Rule: #{rule}) -> (State #{state_id2}, #{n.id.s_value})\n" + io << " (Rule: #{rule.display_name}) -> (State #{state_id2}, #{n.id.s_value})\n" end end io << "\n" @@ -286,7 +327,7 @@ def report_states(io, itemsets, lookaheads, solved, counterexamples, verbose) @states.nterms.each do |nterm| terms = follow_sets[[state.id, nterm.token_id]] - next if !terms + next unless terms terms.each do |sym| io << " #{nterm.id.s_value} -> #{sym.id.s_value}\n" @@ -300,7 +341,7 @@ def report_states(io, itemsets, lookaheads, solved, counterexamples, verbose) max_len = 0 @states.rules.each do |rule| syms = @states.la[[state.id, rule.id]] - next if !syms + next unless syms tmp << [rule, syms] max_len = ([max_len] + syms.map {|s| s.id.s_value.length }).max @@ -310,7 +351,7 @@ def report_states(io, itemsets, lookaheads, solved, counterexamples, verbose) io << " #{sym.id.s_value.ljust(max_len)} reduce using rule #{rule.id} (#{rule.lhs.id.s_value})\n" end end - io << "\n" if !tmp.empty? + io << "\n" unless tmp.empty? end # End of Report State diff --git a/tool/lrama/lib/lrama/trace_reporter.rb b/tool/lrama/lib/lrama/trace_reporter.rb new file mode 100644 index 00000000000000..87c01a4c8aef5e --- /dev/null +++ b/tool/lrama/lib/lrama/trace_reporter.rb @@ -0,0 +1,30 @@ +# frozen_string_literal: true + +module Lrama + class TraceReporter + def initialize(grammar) + @grammar = grammar + end + + def report(**options) + _report(**options) + end + + private + + def _report(rules: false, actions: false, **_) + report_rules if rules + report_actions if actions + end + + def report_rules + puts "Grammar rules:" + @grammar.rules.each { |rule| puts rule.display_name } + end + + def report_actions + puts "Grammar rules with actions:" + @grammar.rules.each { |rule| puts rule.with_actions } + end + end +end diff --git a/tool/lrama/lib/lrama/version.rb b/tool/lrama/lib/lrama/version.rb index ef840ce4353070..d452430b3e09a4 100644 --- a/tool/lrama/lib/lrama/version.rb +++ b/tool/lrama/lib/lrama/version.rb @@ -1,3 +1,5 @@ +# frozen_string_literal: true + module Lrama - VERSION = "0.6.9".freeze + VERSION = "0.6.10".freeze end diff --git a/tool/lrama/template/bison/yacc.c b/tool/lrama/template/bison/yacc.c index 2d6753c2829090..6edd59a0d562cb 100644 --- a/tool/lrama/template/bison/yacc.c +++ b/tool/lrama/template/bison/yacc.c @@ -1166,9 +1166,9 @@ yydestruct (const char *yymsg, #endif enum yy_repair_type { - insert, - delete, - shift, + inserting, + deleting, + shifting, }; struct yy_repair { @@ -1401,27 +1401,27 @@ yyrecover(yy_state_t *yyss, yy_state_t *yyssp, int yychar<%= output.user_formals if (current->repair_length + 1 > YYMAXREPAIR(<%= output.parse_param_name %>)) continue; - yy_repairs *new = (yy_repairs *) YYMALLOC (sizeof (yy_repairs)); - new->id = count; - new->next = 0; - new->stack_length = stack_length; - new->states = (yy_state_t *) YYMALLOC (sizeof (yy_state_t) * (stack_length)); - new->state = new->states + (current->state - current->states); - YYCOPY (new->states, current->states, current->state - current->states + 1); - new->repair_length = current->repair_length + 1; - new->prev_repair = current; - new->repair.type = insert; - new->repair.term = (yysymbol_kind_t) yyx; + yy_repairs *reps = (yy_repairs *) YYMALLOC (sizeof (yy_repairs)); + reps->id = count; + reps->next = 0; + reps->stack_length = stack_length; + reps->states = (yy_state_t *) YYMALLOC (sizeof (yy_state_t) * (stack_length)); + reps->state = reps->states + (current->state - current->states); + YYCOPY (reps->states, current->states, current->state - current->states + 1); + reps->repair_length = current->repair_length + 1; + reps->prev_repair = current; + reps->repair.type = inserting; + reps->repair.term = (yysymbol_kind_t) yyx; /* Process PDA assuming next token is yyx */ - if (! yy_process_repairs (new, yyx)) + if (! yy_process_repairs (reps, (yysymbol_kind_t)yyx)) { - YYFREE (new); + YYFREE (reps); continue; } - tail->next = new; - tail = new; + tail->next = reps; + tail = reps; count++; if (yyx == yytoken) @@ -1437,7 +1437,7 @@ yyrecover(yy_state_t *yyss, yy_state_t *yyssp, int yychar<%= output.user_formals YYDPRINTF ((stderr, "New repairs is enqueued. count: %d, yystate: %d, yyx: %d\n", count, yystate, yyx)); - yy_print_repairs (new<%= output.user_args %>); + yy_print_repairs (reps<%= output.user_args %>); } } } @@ -1475,7 +1475,12 @@ int yychar; /* The semantic value of the lookahead symbol. */ /* Default value used for initialization, for pacifying older GCCs or non-GCC compilers. */ +#ifdef __cplusplus +static const YYSTYPE yyval_default = {}; +(void) yyval_default; +#else YY_INITIAL_VALUE (static const YYSTYPE yyval_default;) +#endif YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); /* Location data for the lookahead symbol. */ diff --git a/tool/make-snapshot b/tool/make-snapshot index 7446f18578da83..3479e2ac85f10b 100755 --- a/tool/make-snapshot +++ b/tool/make-snapshot @@ -56,7 +56,7 @@ PACKAGES = { DEFAULT_PACKAGES = PACKAGES.keys - ["tar"] if !$no7z and system("7z", out: IO::NULL) PACKAGES["gzip"] = %w".tar.gz 7z a dummy -tgzip -mx -so" - PACKAGES["zip"] = %w".zip 7z a -tzip -l -mx -mtc=off" << {out: IO::NULL} + PACKAGES["zip"] = %w".zip 7z a -tzip -mx -mtc=off" << {out: IO::NULL} elsif gzip = ENV.delete("GZIP") PACKAGES["gzip"].concat(gzip.shellsplit) end diff --git a/tool/mk_builtin_loader.rb b/tool/mk_builtin_loader.rb index 5afef655f4c536..c45b89c05de699 100644 --- a/tool/mk_builtin_loader.rb +++ b/tool/mk_builtin_loader.rb @@ -8,6 +8,22 @@ REQUIRED = {} BUILTIN_ATTRS = %w[leaf inline_block use_block] +module CompileWarning + @@warnings = 0 + + def warn(message) + @@warnings += 1 + super + end + + def self.reset + w, @@warnings = @@warnings, 0 + w.nonzero? + end +end + +Warning.extend CompileWarning + def string_literal(lit, str = []) while lit case lit.first @@ -300,7 +316,15 @@ def mk_builtin_header file # bs = { func_name => argc } code = File.read(file) - collect_iseq RubyVM::InstructionSequence.compile(code).to_a + begin + verbose, $VERBOSE = $VERBOSE, true + collect_iseq RubyVM::InstructionSequence.compile(code, base).to_a + ensure + $VERBOSE = verbose + end + if warnings = CompileWarning.reset + raise "#{warnings} warnings in #{file}" + end collect_builtin(base, Ripper.sexp(code), 'top', bs = {}, inlines = {}) StringIO.open do |f| diff --git a/tool/mk_rbbin.rb b/tool/mk_rbbin.rb new file mode 100755 index 00000000000000..991230f0947be2 --- /dev/null +++ b/tool/mk_rbbin.rb @@ -0,0 +1,48 @@ +#!ruby -s + +OPTIMIZATION = { + inline_const_cache: true, + peephole_optimization: true, + tailcall_optimization: false, + specialized_instruction: true, + operands_unification: true, + instructions_unification: true, + frozen_string_literal: true, + debug_frozen_string_literal: false, + coverage_enabled: false, + debug_level: 0, +} + +file = File.basename(ARGV[0], ".rb") +name = "" +iseq = RubyVM::InstructionSequence.compile(ARGF.read, name, name, **OPTIMIZATION) +puts <\h{40})$/ =~ log - end - if log && rev - str = log[/merge revision\(s\) ([^:]+)(?=:)/] - if str - str.sub!(/\Amerge/, 'merged') - str.gsub!(/\h{8,40}/, 'commit:\0') - str = "ruby_#{TARGET_VERSION.tr('.','_')} commit:#{rev} #{str}." + if rev && has_commit(rev, "ruby_#{TARGET_VERSION.tr('.','_')}") + notes = "ruby_#{TARGET_VERSION.tr('.','_')} commit:#{rev}." + elsif rev.nil? && (log = find_git_log("##@issue]")) && !(revs = log.scan(/^commit (\h{40})$/).flatten).empty? + commits = revs.map { |rev| "commit:#{rev}" }.join(", ") + if merged_revs = log[/merge revision\(s\) ([^:]+)(?=:)/] + merged_revs.sub!(/\Amerge/, 'merged') + merged_revs.gsub!(/\h{8,40}/, 'commit:\0') + str = "ruby_#{TARGET_VERSION.tr('.','_')} #{commits} #{merged_revs}." else - str = "ruby_#{TARGET_VERSION.tr('.','_')} commit:#{rev}." + str = "ruby_#{TARGET_VERSION.tr('.','_')} #{commits}." end if notes str << "\n" str << notes end notes = str - elsif rev && has_commit(rev, "ruby_#{TARGET_VERSION.tr('.','_')}") - # Backport commit's log doesn't have the issue number. - # Instead of that manually it's provided. - notes = "ruby_#{TARGET_VERSION.tr('.','_')} commit:#{rev}." else puts "no commit is found whose log include ##@issue" next diff --git a/tool/release.sh b/tool/release.sh index 6b8cf3ea504bfc..d467d8f24b8b38 100755 --- a/tool/release.sh +++ b/tool/release.sh @@ -5,6 +5,11 @@ # tool/release.sh 3.0.0-rc1 EXTS='.tar.gz .tar.xz .zip' +if [[ -n $AWS_ACCESS_KEY_ID ]]; then + AWS_CLI_OPTS="" +else + AWS_CLI_OPTS="--profile ruby" +fi ver=$1 if [[ $ver =~ ^([1-9]\.[0-9])\.([0-9]|[1-9][0-9]|0-(preview[1-9]|rc[1-9]))$ ]]; then @@ -18,5 +23,5 @@ short=${BASH_REMATCH[1]} echo $ver echo $short for ext in $EXTS; do - aws --profile ruby s3 cp s3://ftp.r-l.o/pub/tmp/ruby-$ver-draft$ext s3://ftp.r-l.o/pub/ruby/$short/ruby-$ver$ext + aws $AWS_CLI_OPTS s3 cp s3://ftp.r-l.o/pub/tmp/ruby-$ver-draft$ext s3://ftp.r-l.o/pub/ruby/$short/ruby-$ver$ext done diff --git a/tool/sync_default_gems.rb b/tool/sync_default_gems.rb index 11a3a1a0da8727..a7ad331c999894 100755 --- a/tool/sync_default_gems.rb +++ b/tool/sync_default_gems.rb @@ -18,6 +18,7 @@ module SyncDefaultGems "net-http": "ruby/net-http", "net-protocol": "ruby/net-protocol", "open-uri": "ruby/open-uri", + "win32-registry": "ruby/win32-registry", English: "ruby/English", benchmark: "ruby/benchmark", cgi: "ruby/cgi", @@ -35,7 +36,7 @@ module SyncDefaultGems forwardable: "ruby/forwardable", ipaddr: 'ruby/ipaddr', irb: 'ruby/irb', - json: 'flori/json', + json: 'ruby/json', logger: 'ruby/logger', open3: "ruby/open3", openssl: "ruby/openssl", @@ -383,6 +384,9 @@ def sync_default_gems(gem) rm_rf("prism/templates/rbi") rm_rf("prism/templates/sig") + rm("test/prism/snapshots_test.rb") + rm_rf("test/prism/snapshots") + rm("prism/extconf.rb") when "resolv" rm_rf(%w[lib/resolv.* ext/win32/resolv test/resolv ext/win32/lib/win32/resolv.rb]) @@ -393,15 +397,48 @@ def sync_default_gems(gem) rm_rf("ext/win32/resolv/lib") # Clean up empty directory cp_r("#{upstream}/test/resolv", "test") `git checkout ext/win32/resolv/depend` + when "win32-registry" + rm_rf(%w[ext/win32/lib/win32/registry.rb test/win32/test_registry.rb]) + cp_r("#{upstream}/lib/win32/registry.rb", "ext/win32/lib/win32") + cp_r("#{upstream}/test/win32/test_registry.rb", "test/win32") + cp_r("#{upstream}/win32-registry.gemspec", "ext/win32") else sync_lib gem, upstream end + check_prerelease_version(gem) + # Architecture-dependent files must not pollute libdir. rm_rf(Dir["lib/**/*.#{RbConfig::CONFIG['DLEXT']}"]) replace_rdoc_ref_all end + def check_prerelease_version(gem) + return if gem == "rubygems" + + gem = gem.downcase + + require "net/https" + require "json" + require "uri" + + uri = URI("https://rubygems.org/api/v1/versions/#{gem}/latest.json") + response = Net::HTTP.get(uri) + latest_version = JSON.parse(response)["version"] + + gemspec = [ + "lib/#{gem}/#{gem}.gemspec", + "lib/#{gem}.gemspec", + "ext/#{gem}/#{gem}.gemspec", + "ext/#{gem.split("-").join("/")}/#{gem}.gemspec", + "lib/#{gem.split("-").first}/#{gem}.gemspec", + "ext/#{gem.split("-").first}/#{gem}.gemspec", + "lib/#{gem.split("-").join("/")}/#{gem}.gemspec", + ].find{|gemspec| File.exist?(gemspec)} + spec = Gem::Specification.load(gemspec) + puts "#{gem}-#{spec.version} is not latest version of rubygems.org" if spec.version.to_s != latest_version + end + def ignore_file_pattern_for(gem) patterns = [] diff --git a/tool/test/testunit/test_assertion.rb b/tool/test/testunit/test_assertion.rb index 1e19c102b8ef90..65c11fda420714 100644 --- a/tool/test/testunit/test_assertion.rb +++ b/tool/test/testunit/test_assertion.rb @@ -63,4 +63,109 @@ def test_caller_bactrace_location def assert_fail_for_backtrace_location assert false end + + VersionClass = Struct.new(:version) do + def version?(*ver) + Test::Unit::CoreAssertions.version_match?(ver, self.version) + end + end + + V14_6_0 = VersionClass.new([14, 6, 0]) + V15_0_0 = VersionClass.new([15, 0, 0]) + + def test_version_match_integer + assert_not_operator(V14_6_0, :version?, 13) + assert_operator(V14_6_0, :version?, 14) + assert_not_operator(V14_6_0, :version?, 15) + assert_not_operator(V15_0_0, :version?, 14) + assert_operator(V15_0_0, :version?, 15) + end + + def test_version_match_integer_range + assert_operator(V14_6_0, :version?, 13..14) + assert_not_operator(V15_0_0, :version?, 13..14) + assert_not_operator(V14_6_0, :version?, 13...14) + assert_not_operator(V15_0_0, :version?, 13...14) + end + + def test_version_match_array_range + assert_operator(V14_6_0, :version?, [14, 0]..[14, 6]) + assert_not_operator(V15_0_0, :version?, [14, 0]..[14, 6]) + assert_not_operator(V14_6_0, :version?, [14, 0]...[14, 6]) + assert_not_operator(V15_0_0, :version?, [14, 0]...[14, 6]) + assert_operator(V14_6_0, :version?, [14, 0]..[15]) + assert_operator(V15_0_0, :version?, [14, 0]..[15]) + assert_operator(V14_6_0, :version?, [14, 0]...[15]) + assert_not_operator(V15_0_0, :version?, [14, 0]...[15]) + end + + def test_version_match_integer_endless_range + assert_operator(V14_6_0, :version?, 14..) + assert_operator(V15_0_0, :version?, 14..) + assert_not_operator(V14_6_0, :version?, 15..) + assert_operator(V15_0_0, :version?, 15..) + end + + def test_version_match_integer_endless_range_exclusive + assert_operator(V14_6_0, :version?, 14...) + assert_operator(V15_0_0, :version?, 14...) + assert_not_operator(V14_6_0, :version?, 15...) + assert_operator(V15_0_0, :version?, 15...) + end + + def test_version_match_array_endless_range + assert_operator(V14_6_0, :version?, [14, 5]..) + assert_operator(V15_0_0, :version?, [14, 5]..) + assert_not_operator(V14_6_0, :version?, [14, 7]..) + assert_operator(V15_0_0, :version?, [14, 7]..) + assert_not_operator(V14_6_0, :version?, [15]..) + assert_operator(V15_0_0, :version?, [15]..) + assert_not_operator(V14_6_0, :version?, [15, 0]..) + assert_operator(V15_0_0, :version?, [15, 0]..) + end + + def test_version_match_array_endless_range_exclude_end + assert_operator(V14_6_0, :version?, [14, 5]...) + assert_operator(V15_0_0, :version?, [14, 5]...) + assert_not_operator(V14_6_0, :version?, [14, 7]...) + assert_operator(V15_0_0, :version?, [14, 7]...) + assert_not_operator(V14_6_0, :version?, [15]...) + assert_operator(V15_0_0, :version?, [15]...) + assert_not_operator(V14_6_0, :version?, [15, 0]...) + assert_operator(V15_0_0, :version?, [15, 0]...) + end + + def test_version_match_integer_beginless_range + assert_operator(V14_6_0, :version?, ..14) + assert_not_operator(V15_0_0, :version?, ..14) + assert_operator(V14_6_0, :version?, ..15) + assert_operator(V15_0_0, :version?, ..15) + + assert_not_operator(V14_6_0, :version?, ...14) + assert_not_operator(V15_0_0, :version?, ...14) + assert_operator(V14_6_0, :version?, ...15) + assert_not_operator(V15_0_0, :version?, ...15) + end + + def test_version_match_array_beginless_range + assert_not_operator(V14_6_0, :version?, ..[14, 5]) + assert_not_operator(V15_0_0, :version?, ..[14, 5]) + assert_operator(V14_6_0, :version?, ..[14, 6]) + assert_not_operator(V15_0_0, :version?, ..[14, 6]) + assert_operator(V14_6_0, :version?, ..[15]) + assert_operator(V15_0_0, :version?, ..[15]) + assert_operator(V14_6_0, :version?, ..[15, 0]) + assert_operator(V15_0_0, :version?, ..[15, 0]) + end + + def test_version_match_array_beginless_range_exclude_end + assert_not_operator(V14_6_0, :version?, ...[14, 5]) + assert_not_operator(V15_0_0, :version?, ...[14, 5]) + assert_not_operator(V14_6_0, :version?, ...[14, 6]) + assert_not_operator(V15_0_0, :version?, ...[14, 6]) + assert_operator(V14_6_0, :version?, ...[15]) + assert_not_operator(V15_0_0, :version?, ...[15]) + assert_operator(V14_6_0, :version?, ...[15, 0]) + assert_not_operator(V15_0_0, :version?, ...[15, 0]) + end end diff --git a/tool/test_for_warn_bundled_gems/test.sh b/tool/test_for_warn_bundled_gems/test.sh index 7f92217b4280c2..a21f2f14b6e607 100755 --- a/tool/test_for_warn_bundled_gems/test.sh +++ b/tool/test_for_warn_bundled_gems/test.sh @@ -59,3 +59,7 @@ echo echo "* Show warning with bootsnap and some gem in Gemfile" ruby test_warn_bootsnap_and_gem.rb echo + +echo "* Don't show warning for reline when using irb from standard library" +bundle exec ruby -rirb -e '' +echo diff --git a/tool/test_for_warn_bundled_gems/test_no_warn_dash_gem.rb b/tool/test_for_warn_bundled_gems/test_no_warn_dash_gem.rb index 72ae23b040b0f4..0c6e1c9354bf45 100644 --- a/tool/test_for_warn_bundled_gems/test_no_warn_dash_gem.rb +++ b/tool/test_for_warn_bundled_gems/test_no_warn_dash_gem.rb @@ -1,3 +1,6 @@ +require "bundler" +Bundler::Definition.no_lock = true + require "bundler/inline" gemfile do diff --git a/tool/test_for_warn_bundled_gems/test_no_warn_dependency.rb b/tool/test_for_warn_bundled_gems/test_no_warn_dependency.rb index 94a32a910881b7..11178b5bd18cdb 100644 --- a/tool/test_for_warn_bundled_gems/test_no_warn_dependency.rb +++ b/tool/test_for_warn_bundled_gems/test_no_warn_dependency.rb @@ -1,3 +1,6 @@ +require "bundler" +Bundler::Definition.no_lock = true + require "bundler/inline" gemfile do diff --git a/tool/test_for_warn_bundled_gems/test_no_warn_sub_feature.rb b/tool/test_for_warn_bundled_gems/test_no_warn_sub_feature.rb index 7d62a2f9d041f8..d2b96615cf9285 100644 --- a/tool/test_for_warn_bundled_gems/test_no_warn_sub_feature.rb +++ b/tool/test_for_warn_bundled_gems/test_no_warn_sub_feature.rb @@ -1,3 +1,6 @@ +require "bundler" +Bundler::Definition.no_lock = true + require "bundler/inline" gemfile do diff --git a/tool/test_for_warn_bundled_gems/test_warn_bootsnap.rb b/tool/test_for_warn_bundled_gems/test_warn_bootsnap.rb index eac58de97479c3..230ed3ece9424f 100644 --- a/tool/test_for_warn_bundled_gems/test_warn_bootsnap.rb +++ b/tool/test_for_warn_bundled_gems/test_warn_bootsnap.rb @@ -1,3 +1,6 @@ +require "bundler" +Bundler::Definition.no_lock = true + require "bundler/inline" gemfile do diff --git a/tool/test_for_warn_bundled_gems/test_warn_bootsnap_and_gem.rb b/tool/test_for_warn_bundled_gems/test_warn_bootsnap_and_gem.rb index d154b460224c7e..00fd7709e9709f 100644 --- a/tool/test_for_warn_bundled_gems/test_warn_bootsnap_and_gem.rb +++ b/tool/test_for_warn_bundled_gems/test_warn_bootsnap_and_gem.rb @@ -1,3 +1,6 @@ +require "bundler" +Bundler::Definition.no_lock = true + require "bundler/inline" gemfile do diff --git a/tool/test_for_warn_bundled_gems/test_warn_bootsnap_rubyarchdir_gem.rb b/tool/test_for_warn_bundled_gems/test_warn_bootsnap_rubyarchdir_gem.rb index 477933f6f21a47..866da9c0653e8d 100644 --- a/tool/test_for_warn_bundled_gems/test_warn_bootsnap_rubyarchdir_gem.rb +++ b/tool/test_for_warn_bundled_gems/test_warn_bootsnap_rubyarchdir_gem.rb @@ -1,3 +1,6 @@ +require "bundler" +Bundler::Definition.no_lock = true + require "bundler/inline" gemfile do diff --git a/tool/test_for_warn_bundled_gems/test_warn_bundled_gems.rb b/tool/test_for_warn_bundled_gems/test_warn_bundled_gems.rb index 13168292e39031..a8f065a6b08ded 100644 --- a/tool/test_for_warn_bundled_gems/test_warn_bundled_gems.rb +++ b/tool/test_for_warn_bundled_gems/test_warn_bundled_gems.rb @@ -1,8 +1,13 @@ +require "bundler" +Bundler::Definition.no_lock = true + require "bundler/inline" gemfile do source "https://rubygems.org" end +Object.send(:remove_const, :Bundler) + require "mutex_m" require "rss" diff --git a/tool/test_for_warn_bundled_gems/test_warn_dash_gem.rb b/tool/test_for_warn_bundled_gems/test_warn_dash_gem.rb index 04ef2a52c02391..49c7d9be464d2f 100644 --- a/tool/test_for_warn_bundled_gems/test_warn_dash_gem.rb +++ b/tool/test_for_warn_bundled_gems/test_warn_dash_gem.rb @@ -1,3 +1,6 @@ +require "bundler" +Bundler::Definition.no_lock = true + require "bundler/inline" gemfile do diff --git a/tool/test_for_warn_bundled_gems/test_warn_dependency.rb b/tool/test_for_warn_bundled_gems/test_warn_dependency.rb index 9be3a2f6d91642..31e416624c502d 100644 --- a/tool/test_for_warn_bundled_gems/test_warn_dependency.rb +++ b/tool/test_for_warn_bundled_gems/test_warn_dependency.rb @@ -1,3 +1,6 @@ +require "bundler" +Bundler::Definition.no_lock = true + require "bundler/inline" gemfile do diff --git a/tool/test_for_warn_bundled_gems/test_warn_redefined.rb b/tool/test_for_warn_bundled_gems/test_warn_redefined.rb index a898a8c07cfe0f..3aee2b0991c922 100644 --- a/tool/test_for_warn_bundled_gems/test_warn_redefined.rb +++ b/tool/test_for_warn_bundled_gems/test_warn_redefined.rb @@ -1,3 +1,6 @@ +require "bundler" +Bundler::Definition.no_lock = true + module My def warn(msg) end diff --git a/tool/test_for_warn_bundled_gems/test_warn_sub_feature.rb b/tool/test_for_warn_bundled_gems/test_warn_sub_feature.rb index bf7eb3572d5222..586a8a13be3c01 100644 --- a/tool/test_for_warn_bundled_gems/test_warn_sub_feature.rb +++ b/tool/test_for_warn_bundled_gems/test_warn_sub_feature.rb @@ -1,3 +1,6 @@ +require "bundler" +Bundler::Definition.no_lock = true + require "bundler/inline" gemfile do diff --git a/tool/test_for_warn_bundled_gems/test_warn_zeitwerk.rb b/tool/test_for_warn_bundled_gems/test_warn_zeitwerk.rb index d554a0e6756845..2076af040808bd 100644 --- a/tool/test_for_warn_bundled_gems/test_warn_zeitwerk.rb +++ b/tool/test_for_warn_bundled_gems/test_warn_zeitwerk.rb @@ -1,3 +1,6 @@ +require "bundler" +Bundler::Definition.no_lock = true + require "bundler/inline" gemfile do diff --git a/tool/update-NEWS-gemlist.rb b/tool/update-NEWS-gemlist.rb index 8e4d39046b9502..e1535eb400bc7e 100755 --- a/tool/update-NEWS-gemlist.rb +++ b/tool/update-NEWS-gemlist.rb @@ -15,13 +15,18 @@ item[$1 || "* "] end end -ARGV.each do |type| - last = JSON.parse(File.read("#{type}_gems.json"))['gems'].filter_map do |g| + +load_gems_json = ->(type) do + JSON.parse(File.read("#{type}_gems.json"))['gems'].filter_map do |g| v = g['versions'].values_at(*prevs).compact.first g = g['gem'] g = 'RubyGems' if g == 'rubygems' [g, v] if v end.to_h +end + +ARGV.each do |type| + last = load_gems_json[type] changed = File.foreach("gems/#{type}_gems").filter_map do |l| next if l.start_with?("#") g, v = l.split(" ", 3) @@ -32,7 +37,13 @@ update[changed, type] or next if added and !added.empty? if type == 'bundled' - update[added, type, 'promoted from default gems'] or next + default_gems = load_gems_json['default'] + promoted = {} + added.delete_if do |k, v| + default_gems.key?(k) && promoted[k] = v + end + update[added, type, 'added'] + update[promoted, type, 'promoted from default gems'] or next else update[added, type, 'added'] or next end diff --git a/universal_parser.c b/universal_parser.c index d2105a946509cd..4a85d8b55fec49 100644 --- a/universal_parser.c +++ b/universal_parser.c @@ -26,10 +26,6 @@ #define rb_strlen_lit(str) (sizeof(str "") - 1) #undef FIXNUM_MAX #define FIXNUM_MAX (LONG_MAX / 2) -#undef RSTRING_GETMEM -#define RSTRING_GETMEM(str, ptrvar, lenvar) \ - ((ptrvar) = RSTRING_PTR(str), \ - (lenvar) = RSTRING_LEN(str)) /* parser_st */ #define st_table parser_st_table @@ -119,23 +115,17 @@ #define rb_str_catf p->config->str_catf #undef rb_str_cat_cstr #define rb_str_cat_cstr p->config->str_cat_cstr -#define rb_str_modify p->config->str_modify -#define rb_str_set_len p->config->str_set_len -#define rb_str_cat p->config->str_cat #define rb_str_resize p->config->str_resize #undef rb_str_new #define rb_str_new p->config->str_new #undef rb_str_new_cstr #define rb_str_new_cstr p->config->str_new_cstr #define rb_str_to_interned_str p->config->str_to_interned_str -#define is_ascii_string p->config->is_ascii_string #define rb_enc_str_new p->config->enc_str_new #define rb_str_vcatf p->config->str_vcatf #define rb_sprintf p->config->rb_sprintf #undef RSTRING_PTR #define RSTRING_PTR p->config->rstring_ptr -#undef RSTRING_END -#define RSTRING_END p->config->rstring_end #undef RSTRING_LEN #define RSTRING_LEN p->config->rstring_len #define rb_obj_as_string p->config->obj_as_string diff --git a/variable.c b/variable.c index 66551dc2dba4ec..545586eefc6892 100644 --- a/variable.c +++ b/variable.c @@ -44,6 +44,9 @@ #include "internal/mmtk.h" #endif +// conditional compilation macros for MMTk +#include "internal/mmtk_macros.h" + RUBY_EXTERN rb_serial_t ruby_vm_global_cvar_state; #define GET_GLOBAL_CVAR_STATE() (ruby_vm_global_cvar_state) @@ -101,6 +104,8 @@ rb_namespace_p(VALUE obj) * to not be anonymous. *permanent is set to 1 * if +classpath+ has no anonymous components. There is no builtin * Ruby level APIs that can change a permanent +classpath+. + * + * YJIT needs this function to not allocate. */ static VALUE classname(VALUE klass, bool *permanent) @@ -131,6 +136,7 @@ rb_mod_name0(VALUE klass, bool *permanent) VALUE rb_mod_name(VALUE mod) { + // YJIT needs this function to not allocate. bool permanent; return classname(mod, &permanent); } @@ -1111,20 +1117,21 @@ gen_ivtbl_resize(struct gen_ivtbl *old, uint32_t n) void rb_mark_generic_ivar(VALUE obj) { - struct gen_ivtbl *ivtbl; + st_data_t data; -#if USE_MMTK int r = 0; - if (rb_mmtk_enabled_p()) { - ivtbl = mmtk_get_givtbl_during_gc((MMTk_ObjectReference)obj); - r = (ivtbl != NULL); - } else { - r = rb_gen_ivtbl_get(obj, 0, &ivtbl); - } + WHEN_USING_MMTK2({ + // When using copying GC, if `obj` is alredy moved, we won't find it in `generic_iv_tbl_` + // because `generic_iv_tbl_` is not updated yet. The Rust part of the binding maintains + // another table for moved objects. We call into the Rust part. + data = (st_data_t)mmtk_get_givtbl_during_gc((MMTk_ObjectReference)obj); + r = (data != 0); + }, { + r = st_lookup(generic_ivtbl_no_ractor_check(obj), (st_data_t)obj, &data); + }) + if (r) { -#else - if (rb_gen_ivtbl_get(obj, 0, &ivtbl)) { -#endif + struct gen_ivtbl *ivtbl = (struct gen_ivtbl *)data; if (rb_shape_obj_too_complex(obj)) { rb_mark_tbl_no_pin(ivtbl->as.complex.table); } diff --git a/version.c b/version.c index 9bf9245597ded3..ba592b246d5762 100644 --- a/version.c +++ b/version.c @@ -10,6 +10,7 @@ **********************************************************************/ #include "internal/cmdlineopt.h" +#include "internal/parse.h" #include "ruby/ruby.h" #include "version.h" #include "vm_core.h" @@ -22,6 +23,9 @@ #include "internal/mmtk.h" #endif +// conditional compilation macros for MMTk +#include "internal/mmtk_macros.h" + #ifndef EXIT_SUCCESS #define EXIT_SUCCESS 0 #endif @@ -146,7 +150,22 @@ Init_version(void) int ruby_mn_threads_enabled; -bool * rb_ruby_prism_ptr(void); +#ifndef RB_DEFAULT_PARSER +#define RB_DEFAULT_PARSER RB_DEFAULT_PARSER_PRISM +#endif +static ruby_default_parser_enum default_parser = RB_DEFAULT_PARSER; + +ruby_default_parser_enum +rb_ruby_default_parser(void) +{ + return default_parser; +} + +void +rb_ruby_default_parser_set(ruby_default_parser_enum parser) +{ + default_parser = parser; +} static void define_ruby_description(const char *const jit_opt) @@ -162,32 +181,20 @@ define_ruby_description(const char *const jit_opt) + rb_strlen_lit(" +PRISM") ]; - const char *const threads_opt = ruby_mn_threads_enabled ? " +MN" : ""; - const char *const parser_opt = (*rb_ruby_prism_ptr()) ? " +PRISM" : ""; - -#if USE_MMTK - const char *const mmtk_opt1 = rb_mmtk_enabled_p() ? " +MMTk(" : ""; - const char *const mmtk_opt2 = rb_mmtk_enabled_p() ? mmtk_plan_name() : ""; - const char *const mmtk_opt3 = rb_mmtk_enabled_p() ? ")" : ""; -#endif - - int n = snprintf(desc, sizeof(desc), - "%.*s" - "%s" // jit_opt - "%s" // threads_opts - "%s" // parser_opt -#if USE_MMTK - "%s%s%s" // mmtk_opt1, mmtk_opt2, mmtk_opt3 -#endif - "%s", - ruby_description_opt_point, ruby_description, - jit_opt, - threads_opt, - parser_opt, -#if USE_MMTK - mmtk_opt1, mmtk_opt2, mmtk_opt3, -#endif - ruby_description + ruby_description_opt_point); + int n = ruby_description_opt_point; + memcpy(desc, ruby_description, n); +# define append(s) (n += (int)strlcpy(desc + n, s, sizeof(desc) - n)) + if (*jit_opt) append(jit_opt); + RUBY_ASSERT(n <= ruby_description_opt_point + (int)rb_strlen_lit(YJIT_DESCRIPTION)); + if (ruby_mn_threads_enabled) append(" +MN"); + if (rb_ruby_prism_p()) append(" +PRISM"); + WHEN_USING_MMTK({ + append(" +MMTk("); + append(mmtk_plan_name()); + append(")"); + }) + append(ruby_description + ruby_description_opt_point); +# undef append VALUE description = rb_obj_freeze(rb_usascii_str_new_static(desc, n)); rb_dynamic_description = desc; diff --git a/vm.c b/vm.c index 294a5ac94d48c9..4e3804ffb4ac0f 100644 --- a/vm.c +++ b/vm.c @@ -2240,7 +2240,7 @@ vm_init_redefined_flag(void) OP(EmptyP, EMPTY_P), (C(Array), C(String), C(Hash)); OP(Succ, SUCC), (C(Integer), C(String)); OP(EqTilde, MATCH), (C(Regexp), C(String)); - OP(Freeze, FREEZE), (C(String)); + OP(Freeze, FREEZE), (C(String), C(Array), C(Hash)); OP(UMinus, UMINUS), (C(String)); OP(Max, MAX), (C(Array)); OP(Min, MIN), (C(Array)); @@ -3107,7 +3107,7 @@ ruby_vm_destruct(rb_vm_t *vm) } } - struct rb_objspace *objspace = vm->objspace; + struct rb_objspace *objspace = vm->gc.objspace; rb_vm_living_threads_init(vm); ruby_vm_run_at_exit_hooks(vm); @@ -4236,7 +4236,7 @@ Init_VM(void) #endif #ifdef _WIN32 - rb_objspace_gc_enable(vm->objspace); + rb_objspace_gc_enable(vm->gc.objspace); #endif } vm_init_redefined_flag(); @@ -4494,14 +4494,6 @@ rb_ruby_verbose_ptr(void) return &cr->verbose; } -static bool prism = (RB_DEFAULT_PARSER == 1); - -bool * -rb_ruby_prism_ptr(void) -{ - return &prism; -} - VALUE * rb_ruby_debug_ptr(void) { diff --git a/vm_core.h b/vm_core.h index fd56dc8635938e..b85d2937b7d81a 100644 --- a/vm_core.h +++ b/vm_core.h @@ -753,7 +753,13 @@ typedef struct rb_vm_struct { VALUE coverages, me2counter; int coverage_mode; - struct rb_objspace *objspace; + struct { + struct rb_objspace *objspace; + struct gc_mark_func_data_struct { + void *data; + void (*mark_func)(VALUE v, void *data); + } *mark_func_data; + } gc; rb_at_exit_list *at_exit; diff --git a/vm_dump.c b/vm_dump.c index 37ac2bd85272a7..7d90c3884a5e80 100644 --- a/vm_dump.c +++ b/vm_dump.c @@ -494,7 +494,8 @@ rb_vmdebug_thread_dump_state(FILE *errout, VALUE self) } #if defined __APPLE__ -# if __DARWIN_UNIX03 +# include +# if defined(MAC_OS_X_VERSION_10_5) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5 # define MCTX_SS_REG(reg) __ss.__##reg # else # define MCTX_SS_REG(reg) ss.reg @@ -506,7 +507,8 @@ rb_vmdebug_thread_dump_state(FILE *errout, VALUE self) # ifdef HAVE_LIBUNWIND # undef backtrace # define backtrace unw_backtrace -# elif defined(__APPLE__) && defined(HAVE_LIBUNWIND_H) +# elif defined(__APPLE__) && defined(HAVE_LIBUNWIND_H) \ + && defined(MAC_OS_X_VERSION_10_6) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6 # define UNW_LOCAL_ONLY # include # include @@ -1001,26 +1003,24 @@ rb_dump_machine_register(FILE *errout, const ucontext_t *ctx) dump_machine_register(mctx->__gregs[REG_S2+9], "s11"); # elif defined __loongarch64 dump_machine_register(mctx->__gregs[LARCH_REG_SP], "sp"); - dump_machine_register(mctx->__gregs[LARCH_REG_S0], "s0"); - dump_machine_register(mctx->__gregs[LARCH_REG_S1], "s1"); dump_machine_register(mctx->__gregs[LARCH_REG_A0], "a0"); - dump_machine_register(mctx->__gregs[LARCH_REG_A0+1], "a1"); - dump_machine_register(mctx->__gregs[LARCH_REG_A0+2], "a2"); - dump_machine_register(mctx->__gregs[LARCH_REG_A0+3], "a3"); - dump_machine_register(mctx->__gregs[LARCH_REG_A0+4], "a4"); - dump_machine_register(mctx->__gregs[LARCH_REG_A0+5], "a5"); - dump_machine_register(mctx->__gregs[LARCH_REG_A0+6], "a6"); - dump_machine_register(mctx->__gregs[LARCH_REG_A0+7], "a7"); - dump_machine_register(mctx->__gregs[LARCH_REG_A0+7], "a7"); + dump_machine_register(mctx->__gregs[LARCH_REG_A1], "a1"); + dump_machine_register(mctx->__gregs[LARCH_REG_A2], "a2"); + dump_machine_register(mctx->__gregs[LARCH_REG_A3], "a3"); + dump_machine_register(mctx->__gregs[LARCH_REG_A4], "a4"); + dump_machine_register(mctx->__gregs[LARCH_REG_A5], "a5"); + dump_machine_register(mctx->__gregs[LARCH_REG_A6], "a6"); + dump_machine_register(mctx->__gregs[LARCH_REG_A7], "a7"); + dump_machine_register(mctx->__gregs[LARCH_REG_FP], "fp"); dump_machine_register(mctx->__gregs[LARCH_REG_S0], "s0"); - dump_machine_register(mctx->__gregs[LARCH_REG_S0+1], "s1"); - dump_machine_register(mctx->__gregs[LARCH_REG_S0+2], "s2"); - dump_machine_register(mctx->__gregs[LARCH_REG_S0+3], "s3"); - dump_machine_register(mctx->__gregs[LARCH_REG_S0+4], "s4"); - dump_machine_register(mctx->__gregs[LARCH_REG_S0+5], "s5"); - dump_machine_register(mctx->__gregs[LARCH_REG_S0+6], "s6"); - dump_machine_register(mctx->__gregs[LARCH_REG_S0+7], "s7"); - dump_machine_register(mctx->__gregs[LARCH_REG_S0+8], "s8"); + dump_machine_register(mctx->__gregs[LARCH_REG_S1], "s1"); + dump_machine_register(mctx->__gregs[LARCH_REG_S2], "s2"); + dump_machine_register(mctx->__gregs[LARCH_REG_S3], "s3"); + dump_machine_register(mctx->__gregs[LARCH_REG_S4], "s4"); + dump_machine_register(mctx->__gregs[LARCH_REG_S5], "s5"); + dump_machine_register(mctx->__gregs[LARCH_REG_S6], "s6"); + dump_machine_register(mctx->__gregs[LARCH_REG_S7], "s7"); + dump_machine_register(mctx->__gregs[LARCH_REG_S8], "s8"); # endif } # elif defined __APPLE__ diff --git a/vm_eval.c b/vm_eval.c index 9834b7ff9e15da..ff8e2e6780ffd7 100644 --- a/vm_eval.c +++ b/vm_eval.c @@ -1719,7 +1719,9 @@ pm_eval_make_iseq(VALUE src, VALUE fname, int line, // Add our empty local scope at the very end of the array for our eval // scope's locals. pm_options_scope_init(&result.options.scopes[scopes_count], 0); - VALUE error = pm_parse_string(&result, src, fname, NULL); + + VALUE script_lines; + VALUE error = pm_parse_string(&result, src, fname, ruby_vm_keep_script_lines ? &script_lines : NULL); // If the parse failed, clean up and raise. if (error != Qnil) { @@ -1769,6 +1771,8 @@ pm_eval_make_iseq(VALUE src, VALUE fname, int line, pm_scope_node_t *prev = result.node.previous; while (prev) { pm_scope_node_t *next = prev->previous; + pm_constant_id_list_free(&prev->locals); + pm_scope_node_destroy(prev); ruby_xfree(prev); prev = next; } @@ -1783,7 +1787,7 @@ static const rb_iseq_t * eval_make_iseq(VALUE src, VALUE fname, int line, const struct rb_block *base_block) { - if (*rb_ruby_prism_ptr()) { + if (rb_ruby_prism_p()) { return pm_eval_make_iseq(src, fname, line, base_block); } const VALUE parser = rb_parser_new(); diff --git a/vm_insnhelper.c b/vm_insnhelper.c index 227bfa20047d48..695332272743b6 100644 --- a/vm_insnhelper.c +++ b/vm_insnhelper.c @@ -2309,8 +2309,10 @@ typedef union { VALUE (*f15)(VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE, VALUE); VALUE (*fm1)(int, union { VALUE *x; const VALUE *y; } __attribute__((__transparent_union__)), VALUE); } __attribute__((__transparent_union__)) cfunc_type; +# define make_cfunc_type(f) (cfunc_type){.anyargs = (VALUE (*)(ANYARGS))(f)} #else typedef VALUE (*cfunc_type)(ANYARGS); +# define make_cfunc_type(f) (cfunc_type)(f) #endif static inline int @@ -2344,6 +2346,9 @@ vm_method_cfunc_is(const rb_iseq_t *iseq, CALL_DATA cd, VALUE recv, cfunc_type f return check_cfunc(vm_cc_cme(cc), func); } +#define check_cfunc(me, func) check_cfunc(me, make_cfunc_type(func)) +#define vm_method_cfunc_is(iseq, cd, recv, func) vm_method_cfunc_is(iseq, cd, recv, make_cfunc_type(func)) + #define EQ_UNREDEFINED_P(t) BASIC_OP_UNREDEFINED_P(BOP_EQ, t##_REDEFINED_OP_FLAG) static inline bool @@ -3018,7 +3023,8 @@ vm_call_single_noarg_leaf_builtin(rb_execution_context_t *ec, rb_control_frame_t { const struct rb_builtin_function *bf = calling->cc->aux_.bf; cfp->sp -= (calling->argc + 1); - return builtin_invoker0(ec, calling->recv, NULL, (rb_insn_func_t)bf->func_ptr); + rb_insn_func_t func_ptr = (rb_insn_func_t)(uintptr_t)bf->func_ptr; + return builtin_invoker0(ec, calling->recv, NULL, func_ptr); } VALUE rb_gen_method_name(VALUE owner, VALUE name); // in vm_backtrace.c @@ -6109,6 +6115,28 @@ vm_objtostring(const rb_iseq_t *iseq, VALUE recv, CALL_DATA cd) return Qundef; } +static VALUE +vm_opt_ary_freeze(VALUE ary, int bop, ID id) +{ + if (BASIC_OP_UNREDEFINED_P(bop, ARRAY_REDEFINED_OP_FLAG)) { + return ary; + } + else { + return Qundef; + } +} + +static VALUE +vm_opt_hash_freeze(VALUE hash, int bop, ID id) +{ + if (BASIC_OP_UNREDEFINED_P(bop, HASH_REDEFINED_OP_FLAG)) { + return hash; + } + else { + return Qundef; + } +} + static VALUE vm_opt_str_freeze(VALUE str, int bop, ID id) { @@ -7298,7 +7326,8 @@ invoke_bf(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, const struct { const bool canary_p = ISEQ_BODY(reg_cfp->iseq)->builtin_attrs & BUILTIN_ATTR_LEAF; // Verify an assumption of `Primitive.attr! :leaf` SETUP_CANARY(canary_p); - VALUE ret = (*lookup_builtin_invoker(bf->argc))(ec, reg_cfp->self, argv, (rb_insn_func_t)bf->func_ptr); + rb_insn_func_t func_ptr = (rb_insn_func_t)(uintptr_t)bf->func_ptr; + VALUE ret = (*lookup_builtin_invoker(bf->argc))(ec, reg_cfp->self, argv, func_ptr); CHECK_CANARY(canary_p, BIN(invokebuiltin)); return ret; } @@ -7317,7 +7346,8 @@ vm_invoke_builtin_delegate(rb_execution_context_t *ec, rb_control_frame_t *cfp, for (int i=0; iargc; i++) { ruby_debug_printf(":%s ", rb_id2name(ISEQ_BODY(cfp->iseq)->local_table[i+start_index])); } - ruby_debug_printf("\n" "%s %s(%d):%p\n", RUBY_FUNCTION_NAME_STRING, bf->name, bf->argc, bf->func_ptr); + ruby_debug_printf("\n" "%s %s(%d):%p\n", RUBY_FUNCTION_NAME_STRING, bf->name, bf->argc, + (void *)(uintptr_t)bf->func_ptr); } if (bf->argc == 0) { diff --git a/vm_method.c b/vm_method.c index 4f82efbf005f73..e436538f566b57 100644 --- a/vm_method.c +++ b/vm_method.c @@ -434,14 +434,12 @@ rb_vm_ci_lookup(ID mid, unsigned int flag, unsigned int argc, const struct rb_ca void rb_vm_ci_free(const struct rb_callinfo *ci) { + ASSERT_vm_locking(); + rb_vm_t *vm = GET_VM(); - RB_VM_LOCK_ENTER(); - { - st_data_t key = (st_data_t)ci; - st_delete(vm->ci_table, &key, NULL); - } - RB_VM_LOCK_LEAVE(); + st_data_t key = (st_data_t)ci; + st_delete(vm->ci_table, &key, NULL); } void @@ -761,6 +759,9 @@ static rb_method_entry_t * rb_method_entry_alloc(ID called_id, VALUE owner, VALUE defined_class, rb_method_definition_t *def, bool complement) { if (def) method_definition_addref(def, complement); + VM_ASSERT(!defined_class || + NIL_P(defined_class) || // negative cache + RB_TYPE_P(defined_class, T_CLASS) || RB_TYPE_P(defined_class, T_ICLASS)); rb_method_entry_t *me = IMEMO_NEW(rb_method_entry_t, imemo_ment, defined_class); *((rb_method_definition_t **)&me->def) = def; me->called_id = called_id; @@ -876,8 +877,9 @@ make_method_entry_refined(VALUE owner, rb_method_entry_t *me) rb_vm_check_redefinition_opt_method(me, me->owner); struct rb_method_entry_struct *orig_me = - rb_method_entry_alloc(me->called_id, me->owner, - me->defined_class ? me->defined_class : owner, + rb_method_entry_alloc(me->called_id, + me->owner, + me->defined_class, me->def, true); METHOD_ENTRY_FLAGS_COPY(orig_me, me); @@ -1060,7 +1062,7 @@ rb_method_entry_make(VALUE klass, ID mid, VALUE defined_class, rb_method_visibil } /* check mid */ if (mid == object_id || mid == id__send__) { - if (type == VM_METHOD_TYPE_ISEQ && search_method(klass, mid, 0)) { + if (type != VM_METHOD_TYPE_CFUNC && search_method(klass, mid, 0)) { rb_warn("redefining '%s' may cause serious problems", rb_id2name(mid)); } } diff --git a/vm_trace.c b/vm_trace.c index 7f3f3cd6f4facb..f7baf3b3092659 100644 --- a/vm_trace.c +++ b/vm_trace.c @@ -1760,7 +1760,7 @@ rb_postponed_job_preregister(unsigned int flags, rb_postponed_job_func_t func, v rb_postponed_job_queues_t *pjq = GET_VM()->postponed_job_queue; for (unsigned int i = 0; i < PJOB_TABLE_SIZE; i++) { /* Try and set this slot to equal `func` */ - rb_postponed_job_func_t existing_func = (rb_postponed_job_func_t)RUBY_ATOMIC_PTR_CAS(pjq->table[i], NULL, (void *)func); + rb_postponed_job_func_t existing_func = (rb_postponed_job_func_t)(uintptr_t)RUBY_ATOMIC_PTR_CAS(pjq->table[i].func, NULL, (void *)(uintptr_t)func); if (existing_func == NULL || existing_func == func) { /* Either this slot was NULL, and we set it to func, or, this slot was already equal to func. * In either case, clobber the data with our data. Note that concurrent calls to diff --git a/weakmap.c b/weakmap.c index a9d0a6a12b0967..3ca8927a9907e0 100644 --- a/weakmap.c +++ b/weakmap.c @@ -1113,7 +1113,7 @@ wkmap_inspect(VALUE self) * end * * This will result in +make_value+ returning the same object for same set of attributes - * always, but the values that aren't needed anymore woudn't be sitting in the cache forever. + * always, but the values that aren't needed anymore wouldn't be sitting in the cache forever. */ void diff --git a/win32/Makefile.sub b/win32/Makefile.sub index aad64ca8f1ea1d..6dbb7316f717d8 100644 --- a/win32/Makefile.sub +++ b/win32/Makefile.sub @@ -547,11 +547,6 @@ MINIPRELUDE_C = $(srcdir)/miniprelude.c !else MINIPRELUDE_C = miniprelude.c !endif -!if !exist(golf_prelude.c) && exist($(srcdir)/golf_prelude.c) -GOLF_PRELUDE_C = $(srcdir)/golf_prelude.c -!else -GOLF_PRELUDE_C = golf_prelude.c -!endif RBCONFIG = ./.rbconfig.time !if "$(GITHUB_ACTIONS)" == "true" @@ -868,6 +863,9 @@ $(CONFIG_H): $(MKFILES) $(srcdir)/win32/Makefile.sub $(win_srcdir)/Makefile.sub #define HAVE_STRCHR 1 #define HAVE_STRSTR 1 #define HAVE_FLOCK 1 +!if $(MSC_VER) >= 1800 +#define HAVE_ISINF 1 +!endif #define HAVE_ISNAN 1 #define HAVE_FINITE 1 !if $(RT_VER) >= 120 @@ -1083,6 +1081,7 @@ s,@RUBY_SO_NAME@,$(RUBY_SO_NAME),;t t s,@LIBRUBY_A@,$$(RUBY_SO_NAME)-static.lib,;t t s,@LIBRUBY_SO@,$$(RUBY_SO_NAME).dll,;t t s,@LIBRUBY_ALIASES@,$(LIBRUBY_ALIASES),;t t +s,@LIBRUBY_RELATIVE@,$(LIBRUBY_RELATIVE),;t t s,@LIBRUBY@,$$(RUBY_SO_NAME).lib,;t t s,@LIBRUBYARG@,$$(LIBRUBYARG_SHARED),;t t s,@LIBRUBYARG_STATIC@,$$(LIBRUBY_A) $$(MAINLIBS),;t t @@ -1097,7 +1096,7 @@ s,@CSRCFLAG@,$(CSRCFLAG),;t t s,@CPPOUTFILE@,-P,;t t s,@PRELOADENV@,,;t t s,@LIBPATHENV@,PATH,;t t -s,@LIBPATHFLAG@, -libpath:%s,;t t +s,@LIBPATHFLAG@,-libpath:%s,;t t s,@RPATHFLAG@,,;t t s,@LIBARG@,%s.lib,;t t s,@LINK_SO@,$$(LDSHARED) -Fe$$(@) $$(OBJS) $$(LIBS) $$(LOCAL_LIBS) -link $$(DLDFLAGS) -implib:$$(*F:.so=)-$$(arch).lib -pdb:$$(*F:.so=)-$$(arch).pdb -def:$$(DEFFILE),;t t diff --git a/win32/dir.h b/win32/dir.h index 0292c27c9c6c2b..da1c4b76afae14 100644 --- a/win32/dir.h +++ b/win32/dir.h @@ -36,7 +36,7 @@ struct direct* rb_w32_ureaddir(DIR *); long rb_w32_telldir(DIR *); void rb_w32_seekdir(DIR *, long); void rb_w32_rewinddir(DIR *); -void rb_w32_closedir(DIR *); +int rb_w32_closedir(DIR *); char *rb_w32_ugetcwd(char *, int); #define opendir(s) rb_w32_uopendir((s)) diff --git a/win32/file.c b/win32/file.c index 5f5590d3c8d084..f137f04c43db94 100644 --- a/win32/file.c +++ b/win32/file.c @@ -332,7 +332,7 @@ rb_file_expand_path_internal(VALUE fname, VALUE dname, int abs_mode, int long_na if (!IS_ABSOLUTE_PATH_P(whome, whome_len)) { free(wpath); - xfree(whome); + free(whome); rb_raise(rb_eArgError, "non-absolute home"); } @@ -411,7 +411,7 @@ rb_file_expand_path_internal(VALUE fname, VALUE dname, int abs_mode, int long_na if (!IS_ABSOLUTE_PATH_P(whome, whome_len)) { free(wpath); free(wdir); - xfree(whome); + free(whome); rb_raise(rb_eArgError, "non-absolute home"); } @@ -572,7 +572,7 @@ rb_file_expand_path_internal(VALUE fname, VALUE dname, int abs_mode, int long_na xfree(buffer); free(wpath); free(wdir); - xfree(whome); + free(whome); if (wfullpath != wfullpath_buffer) xfree(wfullpath); diff --git a/win32/win32.c b/win32/win32.c index 23ab773eec23e8..897f3fc0874887 100644 --- a/win32/win32.c +++ b/win32/win32.c @@ -559,8 +559,9 @@ rb_w32_home_dir(void) } } - /* allocate buffer */ - buffer = ALLOC_N(WCHAR, buffer_len); + /* can't use xmalloc here, since it's called too early from init_env() */ + buffer = malloc(sizeof(WCHAR) * buffer_len); + if (buffer == NULL) return NULL; switch (home_type) { case ENV_HOME: @@ -576,10 +577,10 @@ rb_w32_home_dir(void) default: if (!get_special_folder(CSIDL_PROFILE, buffer, buffer_len) && !get_special_folder(CSIDL_PERSONAL, buffer, buffer_len)) { - xfree(buffer); + free(buffer); return NULL; } - REALLOC_N(buffer, WCHAR, lstrlenW(buffer) + 1); + buffer = realloc(buffer, sizeof(WCHAR) * (lstrlenW(buffer) + 1)); break; } @@ -593,54 +594,24 @@ rb_w32_home_dir(void) static void init_env(void) { - static const WCHAR TMPDIR[] = L"TMPDIR"; - struct {WCHAR name[6], eq, val[ENV_MAX];} wk; - DWORD len; - BOOL f; -#define env wk.val -#define set_env_val(vname) do { \ - typedef char wk_name_offset[(numberof(wk.name) - (numberof(vname) - 1)) * 2 + 1]; \ - WCHAR *const buf = wk.name + sizeof(wk_name_offset) / 2; \ - MEMCPY(buf, vname, WCHAR, numberof(vname) - 1); \ - _wputenv(buf); \ - } while (0) - - wk.eq = L'='; + WCHAR env[ENV_MAX]; if (!GetEnvironmentVariableW(L"HOME", env, numberof(env))) { - f = FALSE; - if (GetEnvironmentVariableW(L"USERPROFILE", env, numberof(env))) { - f = TRUE; - } - else { - if (GetEnvironmentVariableW(L"HOMEDRIVE", env, numberof(env))) - len = lstrlenW(env); - else - len = 0; - - if (GetEnvironmentVariableW(L"HOMEPATH", env + len, numberof(env) - len) || len) { - f = TRUE; - } - else if (get_special_folder(CSIDL_PROFILE, env, numberof(env))) { - f = TRUE; - } - else if (get_special_folder(CSIDL_PERSONAL, env, numberof(env))) { - f = TRUE; - } - } - if (f) { - regulate_path(env); - set_env_val(L"HOME"); + WCHAR *whome = rb_w32_home_dir(); + if (whome) { + _wputenv_s(L"HOME", whome); + free(whome); } } if (!GetEnvironmentVariableW(L"USER", env, numberof(env))) { + DWORD len; if (!GetEnvironmentVariableW(L"USERNAME", env, numberof(env)) && !GetUserNameW(env, (len = numberof(env), &len))) { NTLoginName = ""; } else { - set_env_val(L"USER"); + _wputenv_s(L"USER", env); NTLoginName = rb_w32_wstr_to_mbstr(CP_UTF8, env, -1, NULL); } } @@ -648,15 +619,12 @@ init_env(void) NTLoginName = rb_w32_wstr_to_mbstr(CP_UTF8, env, -1, NULL); } - if (!GetEnvironmentVariableW(TMPDIR, env, numberof(env)) && + if (!GetEnvironmentVariableW(L"TMPDIR", env, numberof(env)) && !GetEnvironmentVariableW(L"TMP", env, numberof(env)) && !GetEnvironmentVariableW(L"TEMP", env, numberof(env)) && rb_w32_system_tmpdir(env, numberof(env))) { - set_env_val(TMPDIR); + _wputenv_s(L"TMPDIR", env); } - -#undef env -#undef set_env_val } static void init_stdhandle(void); @@ -2461,7 +2429,7 @@ rb_w32_rewinddir(DIR *dirp) // /* License: Artistic or GPL */ -void +int rb_w32_closedir(DIR *dirp) { if (dirp) { @@ -2471,6 +2439,7 @@ rb_w32_closedir(DIR *dirp) free(dirp->bits); free(dirp); } + return 0; } #if RUBY_MSVCRT_VERSION >= 140 diff --git a/yjit.c b/yjit.c index fe2301a1a6720f..93d8fe5c9f18be 100644 --- a/yjit.c +++ b/yjit.c @@ -272,7 +272,7 @@ rb_yjit_reserve_addr_space(uint32_t mem_size) // On Linux #if defined(MAP_FIXED_NOREPLACE) && defined(_SC_PAGESIZE) uint32_t const page_size = (uint32_t)sysconf(_SC_PAGESIZE); - uint8_t *const cfunc_sample_addr = (void *)&rb_yjit_reserve_addr_space; + uint8_t *const cfunc_sample_addr = (void *)(uintptr_t)&rb_yjit_reserve_addr_space; uint8_t *const probe_region_end = cfunc_sample_addr + INT32_MAX; // Align the requested address to page size uint8_t *req_addr = align_ptr(cfunc_sample_addr, page_size); @@ -583,7 +583,7 @@ rb_get_mct_argc(const rb_method_cfunc_t *mct) void * rb_get_mct_func(const rb_method_cfunc_t *mct) { - return (void*)mct->func; // this field is defined as type VALUE (*func)(ANYARGS) + return (void*)(uintptr_t)mct->func; // this field is defined as type VALUE (*func)(ANYARGS) } const rb_iseq_t * @@ -1139,7 +1139,7 @@ rb_yjit_compile_iseq(const rb_iseq_t *iseq, rb_execution_context_t *ec, bool jit // Compile a block version starting at the current instruction uint8_t *rb_yjit_iseq_gen_entry_point(const rb_iseq_t *iseq, rb_execution_context_t *ec, bool jit_exception); // defined in Rust - uint8_t *code_ptr = rb_yjit_iseq_gen_entry_point(iseq, ec, jit_exception); + uintptr_t code_ptr = (uintptr_t)rb_yjit_iseq_gen_entry_point(iseq, ec, jit_exception); if (jit_exception) { iseq->body->jit_exception = (rb_jit_func_t)code_ptr; @@ -1227,7 +1227,7 @@ rb_yjit_set_exception_return(rb_control_frame_t *cfp, void *leave_exit, void *le VALUE rb_yjit_stats_enabled_p(rb_execution_context_t *ec, VALUE self); VALUE rb_yjit_print_stats_p(rb_execution_context_t *ec, VALUE self); VALUE rb_yjit_trace_exit_locations_enabled_p(rb_execution_context_t *ec, VALUE self); -VALUE rb_yjit_get_stats(rb_execution_context_t *ec, VALUE self); +VALUE rb_yjit_get_stats(rb_execution_context_t *ec, VALUE self, VALUE key); VALUE rb_yjit_reset_stats_bang(rb_execution_context_t *ec, VALUE self); VALUE rb_yjit_disasm_iseq(rb_execution_context_t *ec, VALUE self, VALUE iseq); VALUE rb_yjit_insns_compiled(rb_execution_context_t *ec, VALUE self, VALUE iseq); diff --git a/yjit.rb b/yjit.rb index 7630db30165160..5483e39bf3e7cf 100644 --- a/yjit.rb +++ b/yjit.rb @@ -155,8 +155,12 @@ def self.dump_exit_locations(filename) # Return a hash for statistics generated for the `--yjit-stats` command line option. # Return `nil` when option is not passed or unavailable. - def self.runtime_stats() - Primitive.rb_yjit_get_stats + # If a symbol argument is provided, return only the value for the named stat. + # If any other type is provided, raises TypeError. + def self.runtime_stats(key = nil) + raise TypeError, "non-symbol given" unless key.nil? || Symbol === key + + Primitive.rb_yjit_get_stats(key) end # Format and print out counters as a String. This returns a non-empty diff --git a/yjit/bindgen/src/main.rs b/yjit/bindgen/src/main.rs index ea60dd23b91f08..28e7ac3e9c7a63 100644 --- a/yjit/bindgen/src/main.rs +++ b/yjit/bindgen/src/main.rs @@ -378,6 +378,7 @@ fn main() { .allowlist_function("rb_attr_get") .allowlist_function("rb_ivar_defined") .allowlist_function("rb_ivar_get") + .allowlist_function("rb_mod_name") // From internal/vm.h .allowlist_var("rb_vm_insns_count") diff --git a/yjit/src/asm/mod.rs b/yjit/src/asm/mod.rs index bd56074b96e7f7..ed6feb3174dc98 100644 --- a/yjit/src/asm/mod.rs +++ b/yjit/src/asm/mod.rs @@ -432,7 +432,7 @@ impl CodeBlock { } /// Convert an address range to memory page indexes against a num_pages()-sized array. - pub fn addrs_to_pages(&self, start_addr: CodePtr, end_addr: CodePtr) -> Vec { + pub fn addrs_to_pages(&self, start_addr: CodePtr, end_addr: CodePtr) -> impl Iterator { let mem_start = self.mem_block.borrow().start_ptr().raw_addr(self); let mem_end = self.mem_block.borrow().mapped_end_ptr().raw_addr(self); assert!(mem_start <= start_addr.raw_addr(self)); @@ -441,12 +441,12 @@ impl CodeBlock { // Ignore empty code ranges if start_addr == end_addr { - return vec![]; + return (0..0).into_iter(); } let start_page = (start_addr.raw_addr(self) - mem_start) / self.page_size; let end_page = (end_addr.raw_addr(self) - mem_start - 1) / self.page_size; - (start_page..=end_page).collect() // TODO: consider returning an iterator + (start_page..end_page + 1).into_iter() } /// Get a (possibly dangling) direct pointer to the current write position @@ -686,7 +686,7 @@ impl CodeBlock { let alloc = TestingAllocator::new(mem_size); let mem_start: *const u8 = alloc.mem_start(); - let virt_mem = VirtualMem::new(alloc, 1, NonNull::new(mem_start as *mut u8).unwrap(), mem_size); + let virt_mem = VirtualMem::new(alloc, 1, NonNull::new(mem_start as *mut u8).unwrap(), mem_size, 128 * 1024 * 1024); Self::new(Rc::new(RefCell::new(virt_mem)), false, Rc::new(None), true) } @@ -704,7 +704,7 @@ impl CodeBlock { let alloc = TestingAllocator::new(mem_size); let mem_start: *const u8 = alloc.mem_start(); - let virt_mem = VirtualMem::new(alloc, 1, NonNull::new(mem_start as *mut u8).unwrap(), mem_size); + let virt_mem = VirtualMem::new(alloc, 1, NonNull::new(mem_start as *mut u8).unwrap(), mem_size, 128 * 1024 * 1024); Self::new(Rc::new(RefCell::new(virt_mem)), false, Rc::new(Some(freed_pages)), true) } diff --git a/yjit/src/codegen.rs b/yjit/src/codegen.rs index 493e61c28b55b4..7e69ba32facbe8 100644 --- a/yjit/src/codegen.rs +++ b/yjit/src/codegen.rs @@ -4187,6 +4187,40 @@ fn gen_opt_str_freeze( Some(KeepCompiling) } +fn gen_opt_ary_freeze( + jit: &mut JITState, + asm: &mut Assembler, +) -> Option { + if !assume_bop_not_redefined(jit, asm, ARRAY_REDEFINED_OP_FLAG, BOP_FREEZE) { + return None; + } + + let str = jit.get_arg(0); + + // Push the return value onto the stack + let stack_ret = asm.stack_push(Type::CArray); + asm.mov(stack_ret, str.into()); + + Some(KeepCompiling) +} + +fn gen_opt_hash_freeze( + jit: &mut JITState, + asm: &mut Assembler, +) -> Option { + if !assume_bop_not_redefined(jit, asm, HASH_REDEFINED_OP_FLAG, BOP_FREEZE) { + return None; + } + + let str = jit.get_arg(0); + + // Push the return value onto the stack + let stack_ret = asm.stack_push(Type::CHash); + asm.mov(stack_ret, str.into()); + + Some(KeepCompiling) +} + fn gen_opt_str_uminus( jit: &mut JITState, asm: &mut Assembler, @@ -5101,6 +5135,33 @@ fn jit_rb_mod_eqq( return true; } +// Substitution for rb_mod_name(). Returns the name of a module/class. +fn jit_rb_mod_name( + _jit: &mut JITState, + asm: &mut Assembler, + _ci: *const rb_callinfo, + _cme: *const rb_callable_method_entry_t, + _block: Option, + argc: i32, + _known_recv_class: Option, +) -> bool { + if argc != 0 { + return false; + } + + asm_comment!(asm, "Module#name"); + + // rb_mod_name() never allocates, so no preparation needed. + let name = asm.ccall(rb_mod_name as _, vec![asm.stack_opnd(0)]); + + let _ = asm.stack_pop(1); // pop self + // call-seq: mod.name -> string or nil + let ret = asm.stack_push(Type::Unknown); + asm.mov(ret, name); + + true +} + // Codegen for rb_obj_equal() // object identity comparison fn jit_rb_obj_equal( @@ -10228,6 +10289,8 @@ fn get_gen_fn(opcode: VALUE) -> Option { YARVINSN_opt_gt => Some(gen_opt_gt), YARVINSN_opt_ge => Some(gen_opt_ge), YARVINSN_opt_mod => Some(gen_opt_mod), + YARVINSN_opt_ary_freeze => Some(gen_opt_ary_freeze), + YARVINSN_opt_hash_freeze => Some(gen_opt_hash_freeze), YARVINSN_opt_str_freeze => Some(gen_opt_str_freeze), YARVINSN_opt_str_uminus => Some(gen_opt_str_uminus), YARVINSN_opt_newarray_send => Some(gen_opt_newarray_send), @@ -10337,6 +10400,7 @@ pub fn yjit_reg_method_codegen_fns() { yjit_reg_method(rb_mKernel, "eql?", jit_rb_obj_equal); yjit_reg_method(rb_cModule, "==", jit_rb_obj_equal); yjit_reg_method(rb_cModule, "===", jit_rb_mod_eqq); + yjit_reg_method(rb_cModule, "name", jit_rb_mod_name); yjit_reg_method(rb_cSymbol, "==", jit_rb_obj_equal); yjit_reg_method(rb_cSymbol, "===", jit_rb_obj_equal); yjit_reg_method(rb_cInteger, "==", jit_rb_int_equal); @@ -10468,11 +10532,11 @@ impl CodegenGlobals { /// Initialize the codegen globals pub fn init() { // Executable memory and code page size in bytes - let mem_size = get_option!(exec_mem_size); + let exec_mem_size = get_option!(exec_mem_size).unwrap_or(get_option!(mem_size)); #[cfg(not(test))] let (mut cb, mut ocb) = { - let virt_block: *mut u8 = unsafe { rb_yjit_reserve_addr_space(mem_size as u32) }; + let virt_block: *mut u8 = unsafe { rb_yjit_reserve_addr_space(exec_mem_size as u32) }; // Memory protection syscalls need page-aligned addresses, so check it here. Assuming // `virt_block` is page-aligned, `second_half` should be page-aligned as long as the @@ -10494,7 +10558,8 @@ impl CodegenGlobals { SystemAllocator {}, page_size, NonNull::new(virt_block).unwrap(), - mem_size, + exec_mem_size, + get_option!(mem_size), ); let mem_block = Rc::new(RefCell::new(mem_block)); @@ -10510,9 +10575,9 @@ impl CodegenGlobals { // In test mode we're not linking with the C code // so we don't allocate executable memory #[cfg(test)] - let mut cb = CodeBlock::new_dummy(mem_size / 2); + let mut cb = CodeBlock::new_dummy(exec_mem_size / 2); #[cfg(test)] - let mut ocb = OutlinedCb::wrap(CodeBlock::new_dummy(mem_size / 2)); + let mut ocb = OutlinedCb::wrap(CodeBlock::new_dummy(exec_mem_size / 2)); let ocb_start_addr = ocb.unwrap().get_write_ptr(); let leave_exit_code = gen_leave_exit(&mut ocb).unwrap(); @@ -10527,7 +10592,7 @@ impl CodegenGlobals { let cfunc_exit_code = gen_full_cfunc_return(&mut ocb).unwrap(); let ocb_end_addr = ocb.unwrap().get_write_ptr(); - let ocb_pages = ocb.unwrap().addrs_to_pages(ocb_start_addr, ocb_end_addr); + let ocb_pages = ocb.unwrap().addrs_to_pages(ocb_start_addr, ocb_end_addr).collect(); // Mark all code memory as executable cb.mark_all_executable(); diff --git a/yjit/src/core.rs b/yjit/src/core.rs index 1f96dd453f8a33..732c5cbe2f1fc2 100644 --- a/yjit/src/core.rs +++ b/yjit/src/core.rs @@ -870,16 +870,23 @@ enum CtxOp { } // Number of entries in the context cache -const CTX_CACHE_SIZE: usize = 1024; +const CTX_ENCODE_CACHE_SIZE: usize = 1024; +const CTX_DECODE_CACHE_SIZE: usize = 1024; -// Cache of the last contexts encoded -// Empirically this saves a few percent of memory +// Cache of the last contexts encoded/decoded +// Empirically this saves a few percent of memory and speeds up compilation // We can experiment with varying the size of this cache -pub type CtxCacheTbl = [(Context, u32); CTX_CACHE_SIZE]; -static mut CTX_CACHE: Option> = None; +pub type CtxEncodeCache = [(Context, u32); CTX_ENCODE_CACHE_SIZE]; +static mut CTX_ENCODE_CACHE: Option> = None; + +// Cache of the last contexts encoded/decoded +// This speeds up compilation +pub type CtxDecodeCache = [(Context, u32); CTX_DECODE_CACHE_SIZE]; +static mut CTX_DECODE_CACHE: Option> = None; // Size of the context cache in bytes -pub const CTX_CACHE_BYTES: usize = std::mem::size_of::(); +pub const CTX_ENCODE_CACHE_BYTES: usize = std::mem::size_of::(); +pub const CTX_DECODE_CACHE_BYTES: usize = std::mem::size_of::(); impl Context { // Encode a context into the global context data, or return @@ -892,7 +899,7 @@ impl Context { return 0; } - if let Some(idx) = Self::cache_get(self) { + if let Some(idx) = Self::encode_cache_get(self) { incr_counter!(context_cache_hits); debug_assert!(Self::decode(idx) == *self); return idx; @@ -910,7 +917,8 @@ impl Context { let idx: u32 = idx.try_into().unwrap(); // Save this offset into the cache - Self::cache_set(self, idx); + Self::encode_cache_set(self, idx); + Self::decode_cache_set(self, idx); // In debug mode, check that the round-trip decoding always matches debug_assert!(Self::decode(idx) == *self); @@ -923,16 +931,21 @@ impl Context { return Context::default(); }; + if let Some(ctx) = Self::decode_cache_get(start_idx) { + return ctx; + } + let context_data = CodegenGlobals::get_context_data(); let ctx = Self::decode_from(context_data, start_idx as usize); - Self::cache_set(&ctx, start_idx); + Self::encode_cache_set(&ctx, start_idx); + Self::decode_cache_set(&ctx, start_idx); ctx } - // Store an entry in a cache of recently encoded/decoded contexts - fn cache_set(ctx: &Context, idx: u32) + // Store an entry in a cache of recently encoded/decoded contexts for encoding + fn encode_cache_set(ctx: &Context, idx: u32) { // Compute the hash for this context let mut hasher = DefaultHasher::new(); @@ -941,21 +954,38 @@ impl Context { unsafe { // Lazily initialize the context cache - if CTX_CACHE == None { + if CTX_ENCODE_CACHE == None { + // Here we use the vec syntax to avoid allocating the large table on the stack, + // as this can cause a stack overflow + let tbl = vec![(Context::default(), 0); CTX_ENCODE_CACHE_SIZE].into_boxed_slice().try_into().unwrap(); + CTX_ENCODE_CACHE = Some(tbl); + } + + // Write a cache entry for this context + let cache = CTX_ENCODE_CACHE.as_mut().unwrap(); + cache[ctx_hash % CTX_ENCODE_CACHE_SIZE] = (*ctx, idx); + } + } + + // Store an entry in a cache of recently encoded/decoded contexts for decoding + fn decode_cache_set(ctx: &Context, idx: u32) { + unsafe { + // Lazily initialize the context cache + if CTX_DECODE_CACHE == None { // Here we use the vec syntax to avoid allocating the large table on the stack, // as this can cause a stack overflow - let tbl = vec![(Context::default(), 0); CTX_CACHE_SIZE].into_boxed_slice().try_into().unwrap(); - CTX_CACHE = Some(tbl); + let tbl = vec![(Context::default(), 0); CTX_ENCODE_CACHE_SIZE].into_boxed_slice().try_into().unwrap(); + CTX_DECODE_CACHE = Some(tbl); } // Write a cache entry for this context - let cache = CTX_CACHE.as_mut().unwrap(); - cache[ctx_hash % CTX_CACHE_SIZE] = (*ctx, idx); + let cache = CTX_DECODE_CACHE.as_mut().unwrap(); + cache[idx as usize % CTX_ENCODE_CACHE_SIZE] = (*ctx, idx); } } - // Lookup the context in a cache of recently encoded/decoded contexts - fn cache_get(ctx: &Context) -> Option + // Lookup the context in a cache of recently encoded/decoded contexts for encoding + fn encode_cache_get(ctx: &Context) -> Option { // Compute the hash for this context let mut hasher = DefaultHasher::new(); @@ -963,14 +993,14 @@ impl Context { let ctx_hash = hasher.finish() as usize; unsafe { - if CTX_CACHE == None { + if CTX_ENCODE_CACHE == None { return None; } - let cache = CTX_CACHE.as_mut().unwrap(); + let cache = CTX_ENCODE_CACHE.as_mut().unwrap(); - // Check that the context for this cache entry mmatches - let cache_entry = &cache[ctx_hash % CTX_CACHE_SIZE]; + // Check that the context for this cache entry matches + let cache_entry = &cache[ctx_hash % CTX_ENCODE_CACHE_SIZE]; if cache_entry.0 == *ctx { debug_assert!(cache_entry.1 != 0); return Some(cache_entry.1); @@ -980,6 +1010,25 @@ impl Context { } } + // Lookup the context in a cache of recently encoded/decoded contexts for decoding + fn decode_cache_get(start_idx: u32) -> Option { + unsafe { + if CTX_DECODE_CACHE == None { + return None; + } + + let cache = CTX_DECODE_CACHE.as_mut().unwrap(); + + // Check that the start_idx for this cache entry matches + let cache_entry = &cache[start_idx as usize % CTX_DECODE_CACHE_SIZE]; + if cache_entry.1 == start_idx { + return Some(cache_entry.0); + } + + return None; + } + } + // Encode into a compressed context representation in a bit vector fn encode_into(&self, bits: &mut BitVector) -> usize { let start_idx = bits.num_bits(); diff --git a/yjit/src/cruby.rs b/yjit/src/cruby.rs index 0709e2a0797913..702aaf51bc4e7c 100644 --- a/yjit/src/cruby.rs +++ b/yjit/src/cruby.rs @@ -541,9 +541,7 @@ impl VALUE { ptr } -} -impl VALUE { pub fn fixnum_from_usize(item: usize) -> Self { assert!(item <= (RUBY_FIXNUM_MAX as usize)); // An unsigned will always be greater than RUBY_FIXNUM_MIN let k: usize = item.wrapping_add(item.wrapping_add(1)); diff --git a/yjit/src/cruby_bindings.inc.rs b/yjit/src/cruby_bindings.inc.rs index aa64d1d80e98f4..3b1ee622fbca2e 100644 --- a/yjit/src/cruby_bindings.inc.rs +++ b/yjit/src/cruby_bindings.inc.rs @@ -650,7 +650,7 @@ pub struct rb_shape { pub next_iv_index: attr_index_t, pub capacity: u32, pub type_: u8, - pub size_pool_index: u8, + pub heap_index: u8, pub parent_id: shape_id_t, pub ancestor_index: *mut redblack_node_t, } @@ -785,162 +785,166 @@ pub const YARVINSN_send: ruby_vminsn_type = 55; pub const YARVINSN_sendforward: ruby_vminsn_type = 56; pub const YARVINSN_opt_send_without_block: ruby_vminsn_type = 57; pub const YARVINSN_objtostring: ruby_vminsn_type = 58; -pub const YARVINSN_opt_str_freeze: ruby_vminsn_type = 59; -pub const YARVINSN_opt_nil_p: ruby_vminsn_type = 60; -pub const YARVINSN_opt_str_uminus: ruby_vminsn_type = 61; -pub const YARVINSN_opt_newarray_send: ruby_vminsn_type = 62; -pub const YARVINSN_invokesuper: ruby_vminsn_type = 63; -pub const YARVINSN_invokesuperforward: ruby_vminsn_type = 64; -pub const YARVINSN_invokeblock: ruby_vminsn_type = 65; -pub const YARVINSN_leave: ruby_vminsn_type = 66; -pub const YARVINSN_throw: ruby_vminsn_type = 67; -pub const YARVINSN_jump: ruby_vminsn_type = 68; -pub const YARVINSN_branchif: ruby_vminsn_type = 69; -pub const YARVINSN_branchunless: ruby_vminsn_type = 70; -pub const YARVINSN_branchnil: ruby_vminsn_type = 71; -pub const YARVINSN_once: ruby_vminsn_type = 72; -pub const YARVINSN_opt_case_dispatch: ruby_vminsn_type = 73; -pub const YARVINSN_opt_plus: ruby_vminsn_type = 74; -pub const YARVINSN_opt_minus: ruby_vminsn_type = 75; -pub const YARVINSN_opt_mult: ruby_vminsn_type = 76; -pub const YARVINSN_opt_div: ruby_vminsn_type = 77; -pub const YARVINSN_opt_mod: ruby_vminsn_type = 78; -pub const YARVINSN_opt_eq: ruby_vminsn_type = 79; -pub const YARVINSN_opt_neq: ruby_vminsn_type = 80; -pub const YARVINSN_opt_lt: ruby_vminsn_type = 81; -pub const YARVINSN_opt_le: ruby_vminsn_type = 82; -pub const YARVINSN_opt_gt: ruby_vminsn_type = 83; -pub const YARVINSN_opt_ge: ruby_vminsn_type = 84; -pub const YARVINSN_opt_ltlt: ruby_vminsn_type = 85; -pub const YARVINSN_opt_and: ruby_vminsn_type = 86; -pub const YARVINSN_opt_or: ruby_vminsn_type = 87; -pub const YARVINSN_opt_aref: ruby_vminsn_type = 88; -pub const YARVINSN_opt_aset: ruby_vminsn_type = 89; -pub const YARVINSN_opt_aset_with: ruby_vminsn_type = 90; -pub const YARVINSN_opt_aref_with: ruby_vminsn_type = 91; -pub const YARVINSN_opt_length: ruby_vminsn_type = 92; -pub const YARVINSN_opt_size: ruby_vminsn_type = 93; -pub const YARVINSN_opt_empty_p: ruby_vminsn_type = 94; -pub const YARVINSN_opt_succ: ruby_vminsn_type = 95; -pub const YARVINSN_opt_not: ruby_vminsn_type = 96; -pub const YARVINSN_opt_regexpmatch2: ruby_vminsn_type = 97; -pub const YARVINSN_invokebuiltin: ruby_vminsn_type = 98; -pub const YARVINSN_opt_invokebuiltin_delegate: ruby_vminsn_type = 99; -pub const YARVINSN_opt_invokebuiltin_delegate_leave: ruby_vminsn_type = 100; -pub const YARVINSN_getlocal_WC_0: ruby_vminsn_type = 101; -pub const YARVINSN_getlocal_WC_1: ruby_vminsn_type = 102; -pub const YARVINSN_setlocal_WC_0: ruby_vminsn_type = 103; -pub const YARVINSN_setlocal_WC_1: ruby_vminsn_type = 104; -pub const YARVINSN_putobject_INT2FIX_0_: ruby_vminsn_type = 105; -pub const YARVINSN_putobject_INT2FIX_1_: ruby_vminsn_type = 106; -pub const YARVINSN_trace_nop: ruby_vminsn_type = 107; -pub const YARVINSN_trace_getlocal: ruby_vminsn_type = 108; -pub const YARVINSN_trace_setlocal: ruby_vminsn_type = 109; -pub const YARVINSN_trace_getblockparam: ruby_vminsn_type = 110; -pub const YARVINSN_trace_setblockparam: ruby_vminsn_type = 111; -pub const YARVINSN_trace_getblockparamproxy: ruby_vminsn_type = 112; -pub const YARVINSN_trace_getspecial: ruby_vminsn_type = 113; -pub const YARVINSN_trace_setspecial: ruby_vminsn_type = 114; -pub const YARVINSN_trace_getinstancevariable: ruby_vminsn_type = 115; -pub const YARVINSN_trace_setinstancevariable: ruby_vminsn_type = 116; -pub const YARVINSN_trace_getclassvariable: ruby_vminsn_type = 117; -pub const YARVINSN_trace_setclassvariable: ruby_vminsn_type = 118; -pub const YARVINSN_trace_opt_getconstant_path: ruby_vminsn_type = 119; -pub const YARVINSN_trace_getconstant: ruby_vminsn_type = 120; -pub const YARVINSN_trace_setconstant: ruby_vminsn_type = 121; -pub const YARVINSN_trace_getglobal: ruby_vminsn_type = 122; -pub const YARVINSN_trace_setglobal: ruby_vminsn_type = 123; -pub const YARVINSN_trace_putnil: ruby_vminsn_type = 124; -pub const YARVINSN_trace_putself: ruby_vminsn_type = 125; -pub const YARVINSN_trace_putobject: ruby_vminsn_type = 126; -pub const YARVINSN_trace_putspecialobject: ruby_vminsn_type = 127; -pub const YARVINSN_trace_putstring: ruby_vminsn_type = 128; -pub const YARVINSN_trace_putchilledstring: ruby_vminsn_type = 129; -pub const YARVINSN_trace_concatstrings: ruby_vminsn_type = 130; -pub const YARVINSN_trace_anytostring: ruby_vminsn_type = 131; -pub const YARVINSN_trace_toregexp: ruby_vminsn_type = 132; -pub const YARVINSN_trace_intern: ruby_vminsn_type = 133; -pub const YARVINSN_trace_newarray: ruby_vminsn_type = 134; -pub const YARVINSN_trace_pushtoarraykwsplat: ruby_vminsn_type = 135; -pub const YARVINSN_trace_duparray: ruby_vminsn_type = 136; -pub const YARVINSN_trace_duphash: ruby_vminsn_type = 137; -pub const YARVINSN_trace_expandarray: ruby_vminsn_type = 138; -pub const YARVINSN_trace_concatarray: ruby_vminsn_type = 139; -pub const YARVINSN_trace_concattoarray: ruby_vminsn_type = 140; -pub const YARVINSN_trace_pushtoarray: ruby_vminsn_type = 141; -pub const YARVINSN_trace_splatarray: ruby_vminsn_type = 142; -pub const YARVINSN_trace_splatkw: ruby_vminsn_type = 143; -pub const YARVINSN_trace_newhash: ruby_vminsn_type = 144; -pub const YARVINSN_trace_newrange: ruby_vminsn_type = 145; -pub const YARVINSN_trace_pop: ruby_vminsn_type = 146; -pub const YARVINSN_trace_dup: ruby_vminsn_type = 147; -pub const YARVINSN_trace_dupn: ruby_vminsn_type = 148; -pub const YARVINSN_trace_swap: ruby_vminsn_type = 149; -pub const YARVINSN_trace_opt_reverse: ruby_vminsn_type = 150; -pub const YARVINSN_trace_topn: ruby_vminsn_type = 151; -pub const YARVINSN_trace_setn: ruby_vminsn_type = 152; -pub const YARVINSN_trace_adjuststack: ruby_vminsn_type = 153; -pub const YARVINSN_trace_defined: ruby_vminsn_type = 154; -pub const YARVINSN_trace_definedivar: ruby_vminsn_type = 155; -pub const YARVINSN_trace_checkmatch: ruby_vminsn_type = 156; -pub const YARVINSN_trace_checkkeyword: ruby_vminsn_type = 157; -pub const YARVINSN_trace_checktype: ruby_vminsn_type = 158; -pub const YARVINSN_trace_defineclass: ruby_vminsn_type = 159; -pub const YARVINSN_trace_definemethod: ruby_vminsn_type = 160; -pub const YARVINSN_trace_definesmethod: ruby_vminsn_type = 161; -pub const YARVINSN_trace_send: ruby_vminsn_type = 162; -pub const YARVINSN_trace_sendforward: ruby_vminsn_type = 163; -pub const YARVINSN_trace_opt_send_without_block: ruby_vminsn_type = 164; -pub const YARVINSN_trace_objtostring: ruby_vminsn_type = 165; -pub const YARVINSN_trace_opt_str_freeze: ruby_vminsn_type = 166; -pub const YARVINSN_trace_opt_nil_p: ruby_vminsn_type = 167; -pub const YARVINSN_trace_opt_str_uminus: ruby_vminsn_type = 168; -pub const YARVINSN_trace_opt_newarray_send: ruby_vminsn_type = 169; -pub const YARVINSN_trace_invokesuper: ruby_vminsn_type = 170; -pub const YARVINSN_trace_invokesuperforward: ruby_vminsn_type = 171; -pub const YARVINSN_trace_invokeblock: ruby_vminsn_type = 172; -pub const YARVINSN_trace_leave: ruby_vminsn_type = 173; -pub const YARVINSN_trace_throw: ruby_vminsn_type = 174; -pub const YARVINSN_trace_jump: ruby_vminsn_type = 175; -pub const YARVINSN_trace_branchif: ruby_vminsn_type = 176; -pub const YARVINSN_trace_branchunless: ruby_vminsn_type = 177; -pub const YARVINSN_trace_branchnil: ruby_vminsn_type = 178; -pub const YARVINSN_trace_once: ruby_vminsn_type = 179; -pub const YARVINSN_trace_opt_case_dispatch: ruby_vminsn_type = 180; -pub const YARVINSN_trace_opt_plus: ruby_vminsn_type = 181; -pub const YARVINSN_trace_opt_minus: ruby_vminsn_type = 182; -pub const YARVINSN_trace_opt_mult: ruby_vminsn_type = 183; -pub const YARVINSN_trace_opt_div: ruby_vminsn_type = 184; -pub const YARVINSN_trace_opt_mod: ruby_vminsn_type = 185; -pub const YARVINSN_trace_opt_eq: ruby_vminsn_type = 186; -pub const YARVINSN_trace_opt_neq: ruby_vminsn_type = 187; -pub const YARVINSN_trace_opt_lt: ruby_vminsn_type = 188; -pub const YARVINSN_trace_opt_le: ruby_vminsn_type = 189; -pub const YARVINSN_trace_opt_gt: ruby_vminsn_type = 190; -pub const YARVINSN_trace_opt_ge: ruby_vminsn_type = 191; -pub const YARVINSN_trace_opt_ltlt: ruby_vminsn_type = 192; -pub const YARVINSN_trace_opt_and: ruby_vminsn_type = 193; -pub const YARVINSN_trace_opt_or: ruby_vminsn_type = 194; -pub const YARVINSN_trace_opt_aref: ruby_vminsn_type = 195; -pub const YARVINSN_trace_opt_aset: ruby_vminsn_type = 196; -pub const YARVINSN_trace_opt_aset_with: ruby_vminsn_type = 197; -pub const YARVINSN_trace_opt_aref_with: ruby_vminsn_type = 198; -pub const YARVINSN_trace_opt_length: ruby_vminsn_type = 199; -pub const YARVINSN_trace_opt_size: ruby_vminsn_type = 200; -pub const YARVINSN_trace_opt_empty_p: ruby_vminsn_type = 201; -pub const YARVINSN_trace_opt_succ: ruby_vminsn_type = 202; -pub const YARVINSN_trace_opt_not: ruby_vminsn_type = 203; -pub const YARVINSN_trace_opt_regexpmatch2: ruby_vminsn_type = 204; -pub const YARVINSN_trace_invokebuiltin: ruby_vminsn_type = 205; -pub const YARVINSN_trace_opt_invokebuiltin_delegate: ruby_vminsn_type = 206; -pub const YARVINSN_trace_opt_invokebuiltin_delegate_leave: ruby_vminsn_type = 207; -pub const YARVINSN_trace_getlocal_WC_0: ruby_vminsn_type = 208; -pub const YARVINSN_trace_getlocal_WC_1: ruby_vminsn_type = 209; -pub const YARVINSN_trace_setlocal_WC_0: ruby_vminsn_type = 210; -pub const YARVINSN_trace_setlocal_WC_1: ruby_vminsn_type = 211; -pub const YARVINSN_trace_putobject_INT2FIX_0_: ruby_vminsn_type = 212; -pub const YARVINSN_trace_putobject_INT2FIX_1_: ruby_vminsn_type = 213; -pub const VM_INSTRUCTION_SIZE: ruby_vminsn_type = 214; +pub const YARVINSN_opt_ary_freeze: ruby_vminsn_type = 59; +pub const YARVINSN_opt_hash_freeze: ruby_vminsn_type = 60; +pub const YARVINSN_opt_str_freeze: ruby_vminsn_type = 61; +pub const YARVINSN_opt_nil_p: ruby_vminsn_type = 62; +pub const YARVINSN_opt_str_uminus: ruby_vminsn_type = 63; +pub const YARVINSN_opt_newarray_send: ruby_vminsn_type = 64; +pub const YARVINSN_invokesuper: ruby_vminsn_type = 65; +pub const YARVINSN_invokesuperforward: ruby_vminsn_type = 66; +pub const YARVINSN_invokeblock: ruby_vminsn_type = 67; +pub const YARVINSN_leave: ruby_vminsn_type = 68; +pub const YARVINSN_throw: ruby_vminsn_type = 69; +pub const YARVINSN_jump: ruby_vminsn_type = 70; +pub const YARVINSN_branchif: ruby_vminsn_type = 71; +pub const YARVINSN_branchunless: ruby_vminsn_type = 72; +pub const YARVINSN_branchnil: ruby_vminsn_type = 73; +pub const YARVINSN_once: ruby_vminsn_type = 74; +pub const YARVINSN_opt_case_dispatch: ruby_vminsn_type = 75; +pub const YARVINSN_opt_plus: ruby_vminsn_type = 76; +pub const YARVINSN_opt_minus: ruby_vminsn_type = 77; +pub const YARVINSN_opt_mult: ruby_vminsn_type = 78; +pub const YARVINSN_opt_div: ruby_vminsn_type = 79; +pub const YARVINSN_opt_mod: ruby_vminsn_type = 80; +pub const YARVINSN_opt_eq: ruby_vminsn_type = 81; +pub const YARVINSN_opt_neq: ruby_vminsn_type = 82; +pub const YARVINSN_opt_lt: ruby_vminsn_type = 83; +pub const YARVINSN_opt_le: ruby_vminsn_type = 84; +pub const YARVINSN_opt_gt: ruby_vminsn_type = 85; +pub const YARVINSN_opt_ge: ruby_vminsn_type = 86; +pub const YARVINSN_opt_ltlt: ruby_vminsn_type = 87; +pub const YARVINSN_opt_and: ruby_vminsn_type = 88; +pub const YARVINSN_opt_or: ruby_vminsn_type = 89; +pub const YARVINSN_opt_aref: ruby_vminsn_type = 90; +pub const YARVINSN_opt_aset: ruby_vminsn_type = 91; +pub const YARVINSN_opt_aset_with: ruby_vminsn_type = 92; +pub const YARVINSN_opt_aref_with: ruby_vminsn_type = 93; +pub const YARVINSN_opt_length: ruby_vminsn_type = 94; +pub const YARVINSN_opt_size: ruby_vminsn_type = 95; +pub const YARVINSN_opt_empty_p: ruby_vminsn_type = 96; +pub const YARVINSN_opt_succ: ruby_vminsn_type = 97; +pub const YARVINSN_opt_not: ruby_vminsn_type = 98; +pub const YARVINSN_opt_regexpmatch2: ruby_vminsn_type = 99; +pub const YARVINSN_invokebuiltin: ruby_vminsn_type = 100; +pub const YARVINSN_opt_invokebuiltin_delegate: ruby_vminsn_type = 101; +pub const YARVINSN_opt_invokebuiltin_delegate_leave: ruby_vminsn_type = 102; +pub const YARVINSN_getlocal_WC_0: ruby_vminsn_type = 103; +pub const YARVINSN_getlocal_WC_1: ruby_vminsn_type = 104; +pub const YARVINSN_setlocal_WC_0: ruby_vminsn_type = 105; +pub const YARVINSN_setlocal_WC_1: ruby_vminsn_type = 106; +pub const YARVINSN_putobject_INT2FIX_0_: ruby_vminsn_type = 107; +pub const YARVINSN_putobject_INT2FIX_1_: ruby_vminsn_type = 108; +pub const YARVINSN_trace_nop: ruby_vminsn_type = 109; +pub const YARVINSN_trace_getlocal: ruby_vminsn_type = 110; +pub const YARVINSN_trace_setlocal: ruby_vminsn_type = 111; +pub const YARVINSN_trace_getblockparam: ruby_vminsn_type = 112; +pub const YARVINSN_trace_setblockparam: ruby_vminsn_type = 113; +pub const YARVINSN_trace_getblockparamproxy: ruby_vminsn_type = 114; +pub const YARVINSN_trace_getspecial: ruby_vminsn_type = 115; +pub const YARVINSN_trace_setspecial: ruby_vminsn_type = 116; +pub const YARVINSN_trace_getinstancevariable: ruby_vminsn_type = 117; +pub const YARVINSN_trace_setinstancevariable: ruby_vminsn_type = 118; +pub const YARVINSN_trace_getclassvariable: ruby_vminsn_type = 119; +pub const YARVINSN_trace_setclassvariable: ruby_vminsn_type = 120; +pub const YARVINSN_trace_opt_getconstant_path: ruby_vminsn_type = 121; +pub const YARVINSN_trace_getconstant: ruby_vminsn_type = 122; +pub const YARVINSN_trace_setconstant: ruby_vminsn_type = 123; +pub const YARVINSN_trace_getglobal: ruby_vminsn_type = 124; +pub const YARVINSN_trace_setglobal: ruby_vminsn_type = 125; +pub const YARVINSN_trace_putnil: ruby_vminsn_type = 126; +pub const YARVINSN_trace_putself: ruby_vminsn_type = 127; +pub const YARVINSN_trace_putobject: ruby_vminsn_type = 128; +pub const YARVINSN_trace_putspecialobject: ruby_vminsn_type = 129; +pub const YARVINSN_trace_putstring: ruby_vminsn_type = 130; +pub const YARVINSN_trace_putchilledstring: ruby_vminsn_type = 131; +pub const YARVINSN_trace_concatstrings: ruby_vminsn_type = 132; +pub const YARVINSN_trace_anytostring: ruby_vminsn_type = 133; +pub const YARVINSN_trace_toregexp: ruby_vminsn_type = 134; +pub const YARVINSN_trace_intern: ruby_vminsn_type = 135; +pub const YARVINSN_trace_newarray: ruby_vminsn_type = 136; +pub const YARVINSN_trace_pushtoarraykwsplat: ruby_vminsn_type = 137; +pub const YARVINSN_trace_duparray: ruby_vminsn_type = 138; +pub const YARVINSN_trace_duphash: ruby_vminsn_type = 139; +pub const YARVINSN_trace_expandarray: ruby_vminsn_type = 140; +pub const YARVINSN_trace_concatarray: ruby_vminsn_type = 141; +pub const YARVINSN_trace_concattoarray: ruby_vminsn_type = 142; +pub const YARVINSN_trace_pushtoarray: ruby_vminsn_type = 143; +pub const YARVINSN_trace_splatarray: ruby_vminsn_type = 144; +pub const YARVINSN_trace_splatkw: ruby_vminsn_type = 145; +pub const YARVINSN_trace_newhash: ruby_vminsn_type = 146; +pub const YARVINSN_trace_newrange: ruby_vminsn_type = 147; +pub const YARVINSN_trace_pop: ruby_vminsn_type = 148; +pub const YARVINSN_trace_dup: ruby_vminsn_type = 149; +pub const YARVINSN_trace_dupn: ruby_vminsn_type = 150; +pub const YARVINSN_trace_swap: ruby_vminsn_type = 151; +pub const YARVINSN_trace_opt_reverse: ruby_vminsn_type = 152; +pub const YARVINSN_trace_topn: ruby_vminsn_type = 153; +pub const YARVINSN_trace_setn: ruby_vminsn_type = 154; +pub const YARVINSN_trace_adjuststack: ruby_vminsn_type = 155; +pub const YARVINSN_trace_defined: ruby_vminsn_type = 156; +pub const YARVINSN_trace_definedivar: ruby_vminsn_type = 157; +pub const YARVINSN_trace_checkmatch: ruby_vminsn_type = 158; +pub const YARVINSN_trace_checkkeyword: ruby_vminsn_type = 159; +pub const YARVINSN_trace_checktype: ruby_vminsn_type = 160; +pub const YARVINSN_trace_defineclass: ruby_vminsn_type = 161; +pub const YARVINSN_trace_definemethod: ruby_vminsn_type = 162; +pub const YARVINSN_trace_definesmethod: ruby_vminsn_type = 163; +pub const YARVINSN_trace_send: ruby_vminsn_type = 164; +pub const YARVINSN_trace_sendforward: ruby_vminsn_type = 165; +pub const YARVINSN_trace_opt_send_without_block: ruby_vminsn_type = 166; +pub const YARVINSN_trace_objtostring: ruby_vminsn_type = 167; +pub const YARVINSN_trace_opt_ary_freeze: ruby_vminsn_type = 168; +pub const YARVINSN_trace_opt_hash_freeze: ruby_vminsn_type = 169; +pub const YARVINSN_trace_opt_str_freeze: ruby_vminsn_type = 170; +pub const YARVINSN_trace_opt_nil_p: ruby_vminsn_type = 171; +pub const YARVINSN_trace_opt_str_uminus: ruby_vminsn_type = 172; +pub const YARVINSN_trace_opt_newarray_send: ruby_vminsn_type = 173; +pub const YARVINSN_trace_invokesuper: ruby_vminsn_type = 174; +pub const YARVINSN_trace_invokesuperforward: ruby_vminsn_type = 175; +pub const YARVINSN_trace_invokeblock: ruby_vminsn_type = 176; +pub const YARVINSN_trace_leave: ruby_vminsn_type = 177; +pub const YARVINSN_trace_throw: ruby_vminsn_type = 178; +pub const YARVINSN_trace_jump: ruby_vminsn_type = 179; +pub const YARVINSN_trace_branchif: ruby_vminsn_type = 180; +pub const YARVINSN_trace_branchunless: ruby_vminsn_type = 181; +pub const YARVINSN_trace_branchnil: ruby_vminsn_type = 182; +pub const YARVINSN_trace_once: ruby_vminsn_type = 183; +pub const YARVINSN_trace_opt_case_dispatch: ruby_vminsn_type = 184; +pub const YARVINSN_trace_opt_plus: ruby_vminsn_type = 185; +pub const YARVINSN_trace_opt_minus: ruby_vminsn_type = 186; +pub const YARVINSN_trace_opt_mult: ruby_vminsn_type = 187; +pub const YARVINSN_trace_opt_div: ruby_vminsn_type = 188; +pub const YARVINSN_trace_opt_mod: ruby_vminsn_type = 189; +pub const YARVINSN_trace_opt_eq: ruby_vminsn_type = 190; +pub const YARVINSN_trace_opt_neq: ruby_vminsn_type = 191; +pub const YARVINSN_trace_opt_lt: ruby_vminsn_type = 192; +pub const YARVINSN_trace_opt_le: ruby_vminsn_type = 193; +pub const YARVINSN_trace_opt_gt: ruby_vminsn_type = 194; +pub const YARVINSN_trace_opt_ge: ruby_vminsn_type = 195; +pub const YARVINSN_trace_opt_ltlt: ruby_vminsn_type = 196; +pub const YARVINSN_trace_opt_and: ruby_vminsn_type = 197; +pub const YARVINSN_trace_opt_or: ruby_vminsn_type = 198; +pub const YARVINSN_trace_opt_aref: ruby_vminsn_type = 199; +pub const YARVINSN_trace_opt_aset: ruby_vminsn_type = 200; +pub const YARVINSN_trace_opt_aset_with: ruby_vminsn_type = 201; +pub const YARVINSN_trace_opt_aref_with: ruby_vminsn_type = 202; +pub const YARVINSN_trace_opt_length: ruby_vminsn_type = 203; +pub const YARVINSN_trace_opt_size: ruby_vminsn_type = 204; +pub const YARVINSN_trace_opt_empty_p: ruby_vminsn_type = 205; +pub const YARVINSN_trace_opt_succ: ruby_vminsn_type = 206; +pub const YARVINSN_trace_opt_not: ruby_vminsn_type = 207; +pub const YARVINSN_trace_opt_regexpmatch2: ruby_vminsn_type = 208; +pub const YARVINSN_trace_invokebuiltin: ruby_vminsn_type = 209; +pub const YARVINSN_trace_opt_invokebuiltin_delegate: ruby_vminsn_type = 210; +pub const YARVINSN_trace_opt_invokebuiltin_delegate_leave: ruby_vminsn_type = 211; +pub const YARVINSN_trace_getlocal_WC_0: ruby_vminsn_type = 212; +pub const YARVINSN_trace_getlocal_WC_1: ruby_vminsn_type = 213; +pub const YARVINSN_trace_setlocal_WC_0: ruby_vminsn_type = 214; +pub const YARVINSN_trace_setlocal_WC_1: ruby_vminsn_type = 215; +pub const YARVINSN_trace_putobject_INT2FIX_0_: ruby_vminsn_type = 216; +pub const YARVINSN_trace_putobject_INT2FIX_1_: ruby_vminsn_type = 217; +pub const VM_INSTRUCTION_SIZE: ruby_vminsn_type = 218; pub type ruby_vminsn_type = u32; pub type rb_iseq_callback = ::std::option::Option< unsafe extern "C" fn(arg1: *const rb_iseq_t, arg2: *mut ::std::os::raw::c_void), @@ -1034,6 +1038,7 @@ extern "C" { pub fn rb_str_buf_append(dst: VALUE, src: VALUE) -> VALUE; pub fn rb_str_dup(str_: VALUE) -> VALUE; pub fn rb_str_intern(str_: VALUE) -> VALUE; + pub fn rb_mod_name(mod_: VALUE) -> VALUE; pub fn rb_ivar_get(obj: VALUE, name: ID) -> VALUE; pub fn rb_ivar_defined(obj: VALUE, name: ID) -> VALUE; pub fn rb_attr_get(obj: VALUE, name: ID) -> VALUE; diff --git a/yjit/src/invariants.rs b/yjit/src/invariants.rs index 98516aa400c811..d468cfebd9b9fa 100644 --- a/yjit/src/invariants.rs +++ b/yjit/src/invariants.rs @@ -30,7 +30,6 @@ pub struct Invariants { /// quick access to all of the blocks that are making this assumption when /// the operator is redefined. basic_operator_blocks: HashMap<(RedefinitionFlag, ruby_basic_operators), HashSet>, - /// A map from a block to a set of classes and their associated basic /// operators that the block is assuming are not redefined. This is used for /// quick access to all of the assumptions that a block is making when it @@ -48,7 +47,6 @@ pub struct Invariants { /// a constant `A::B` is redefined, then all blocks that are assuming that /// `A` and `B` have not be redefined must be invalidated. constant_state_blocks: HashMap>, - /// A map from a block to a set of IDs that it is assuming have not been /// redefined. block_constant_states: HashMap>, @@ -57,6 +55,9 @@ pub struct Invariants { /// will have no singleton class. When the set is empty, it means that /// there has been a singleton class for the class after boot, so you cannot /// assume no singleton class going forward. + /// For now, the key can be only Array, Hash, or String. Consider making + /// an inverted HashMap if we start using this for user-defined classes + /// to maintain the performance of block_assumptions_free(). no_singleton_classes: HashMap>, /// A map from an ISEQ to a set of blocks that assume base pointer is equal @@ -462,11 +463,15 @@ pub fn block_assumptions_free(blockref: BlockRef) { } // Remove tracking for blocks assuming no singleton class + // NOTE: no_singleton_class has up to 3 keys (Array, Hash, or String) for now. + // This is effectively an O(1) access unless we start using it for more classes. for (_, blocks) in invariants.no_singleton_classes.iter_mut() { blocks.remove(&blockref); } + // Remove tracking for blocks assuming EP doesn't escape - for (_, blocks) in invariants.no_ep_escape_iseqs.iter_mut() { + let iseq = unsafe { blockref.as_ref() }.get_blockid().iseq; + if let Some(blocks) = invariants.no_ep_escape_iseqs.get_mut(&iseq) { blocks.remove(&blockref); } } diff --git a/yjit/src/options.rs b/yjit/src/options.rs index 85d068595ade94..c91c36573890fa 100644 --- a/yjit/src/options.rs +++ b/yjit/src/options.rs @@ -27,9 +27,14 @@ pub static mut rb_yjit_cold_threshold: u64 = 200_000; #[derive(Debug)] #[repr(C)] pub struct Options { - // Size of the executable memory block to allocate in bytes - // Note that the command line argument is expressed in MiB and not bytes - pub exec_mem_size: usize, + /// Soft limit of all memory used by YJIT in bytes + /// VirtualMem avoids allocating new pages if code_region_size + yjit_alloc_size + /// is larger than this threshold. Rust may still allocate memory beyond this limit. + pub mem_size: usize, + + /// Hard limit of the executable memory block to allocate in bytes + /// Note that the command line argument is expressed in MiB and not bytes + pub exec_mem_size: Option, // Disable the propagation of type information pub no_type_prop: bool, @@ -81,7 +86,8 @@ pub struct Options { // Initialize the options to default values pub static mut OPTIONS: Options = Options { - exec_mem_size: 48 * 1024 * 1024, + mem_size: 128 * 1024 * 1024, + exec_mem_size: None, no_type_prop: false, max_versions: 4, num_temp_regs: 5, @@ -100,8 +106,10 @@ pub static mut OPTIONS: Options = Options { }; /// YJIT option descriptions for `ruby --help`. -static YJIT_OPTIONS: [(&str, &str); 9] = [ - ("--yjit-exec-mem-size=num", "Size of executable memory block in MiB (default: 48)."), +/// Note that --help allows only 80 characters per line, including indentation. 80-character limit --> | +pub const YJIT_OPTIONS: &'static [(&str, &str)] = &[ + ("--yjit-mem-size=num", "Soft limit on YJIT memory usage in MiB (default: 128)."), + ("--yjit-exec-mem-size=num", "Hard limit on executable memory block in MiB."), ("--yjit-call-threshold=num", "Number of calls to trigger JIT."), ("--yjit-cold-threshold=num", "Global calls after which ISEQs not compiled (default: 200K)."), ("--yjit-stats", "Enable collecting YJIT statistics."), @@ -183,6 +191,20 @@ pub fn parse_option(str_ptr: *const std::os::raw::c_char) -> Option<()> { match (opt_name, opt_val) { ("", "") => (), // Simply --yjit + ("mem-size", _) => match opt_val.parse::() { + Ok(n) => { + if n == 0 || n > 2 * 1024 * 1024 { + return None + } + + // Convert from MiB to bytes internally for convenience + unsafe { OPTIONS.mem_size = n * 1024 * 1024 } + } + Err(_) => { + return None; + } + }, + ("exec-mem-size", _) => match opt_val.parse::() { Ok(n) => { if n == 0 || n > 2 * 1024 * 1024 { @@ -190,7 +212,7 @@ pub fn parse_option(str_ptr: *const std::os::raw::c_char) -> Option<()> { } // Convert from MiB to bytes internally for convenience - unsafe { OPTIONS.exec_mem_size = n * 1024 * 1024 } + unsafe { OPTIONS.exec_mem_size = Some(n * 1024 * 1024) } } Err(_) => { return None; diff --git a/yjit/src/stats.rs b/yjit/src/stats.rs index 37ef02b440e201..a6dffe9103b5e6 100644 --- a/yjit/src/stats.rs +++ b/yjit/src/stats.rs @@ -56,6 +56,11 @@ unsafe impl GlobalAlloc for StatsAlloc { } } +/// The number of bytes YJIT has allocated on the Rust heap. +pub fn yjit_alloc_size() -> usize { + GLOBAL_ALLOCATOR.alloc_size.load(Ordering::SeqCst) +} + /// Mapping of C function / ISEQ name to integer indices /// This is accessed at compilation time only (protected by a lock) static mut CFUNC_NAME_TO_IDX: Option> = None; @@ -650,8 +655,8 @@ pub extern "C" fn rb_yjit_print_stats_p(_ec: EcPtr, _ruby_self: VALUE) -> VALUE /// Primitive called in yjit.rb. /// Export all YJIT statistics as a Ruby hash. #[no_mangle] -pub extern "C" fn rb_yjit_get_stats(_ec: EcPtr, _ruby_self: VALUE) -> VALUE { - with_vm_lock(src_loc!(), || rb_yjit_gen_stats_dict()) +pub extern "C" fn rb_yjit_get_stats(_ec: EcPtr, _ruby_self: VALUE, key: VALUE) -> VALUE { + with_vm_lock(src_loc!(), || rb_yjit_gen_stats_dict(key)) } /// Primitive called in yjit.rb @@ -709,25 +714,41 @@ pub extern "C" fn rb_yjit_incr_counter(counter_name: *const std::os::raw::c_char unsafe { *counter_ptr += 1 }; } -fn hash_aset_usize(hash: VALUE, key: &str, value: usize) { - let rb_key = rust_str_to_sym(key); - let rb_value = VALUE::fixnum_from_usize(value); - unsafe { rb_hash_aset(hash, rb_key, rb_value); } -} - -fn hash_aset_double(hash: VALUE, key: &str, value: f64) { - let rb_key = rust_str_to_sym(key); - unsafe { rb_hash_aset(hash, rb_key, rb_float_new(value)); } -} - /// Export all YJIT statistics as a Ruby hash. -fn rb_yjit_gen_stats_dict() -> VALUE { +fn rb_yjit_gen_stats_dict(key: VALUE) -> VALUE { // If YJIT is not enabled, return Qnil if !yjit_enabled_p() { return Qnil; } - let hash = unsafe { rb_hash_new() }; + let hash = if key == Qnil { + unsafe { rb_hash_new() } + } else { + Qnil + }; + + macro_rules! set_stat { + ($hash:ident, $name:expr, $value:expr) => { + let rb_key = rust_str_to_sym($name); + if key == rb_key { + return $value; + } else if hash != Qnil { + rb_hash_aset($hash, rb_key, $value); + } + } + } + + macro_rules! set_stat_usize { + ($hash:ident, $name:expr, $value:expr) => { + set_stat!($hash, $name, VALUE::fixnum_from_usize($value)); + } + } + + macro_rules! set_stat_double { + ($hash:ident, $name:expr, $value:expr) => { + set_stat!($hash, $name, rb_float_new($value)); + } + } unsafe { // Get the inline and outlined code blocks @@ -735,39 +756,39 @@ fn rb_yjit_gen_stats_dict() -> VALUE { let ocb = CodegenGlobals::get_outlined_cb(); // Inline code size - hash_aset_usize(hash, "inline_code_size", cb.code_size()); + set_stat_usize!(hash, "inline_code_size", cb.code_size()); // Outlined code size - hash_aset_usize(hash, "outlined_code_size", ocb.unwrap().code_size()); + set_stat_usize!(hash, "outlined_code_size", ocb.unwrap().code_size()); // GCed pages let freed_page_count = cb.num_freed_pages(); - hash_aset_usize(hash, "freed_page_count", freed_page_count); + set_stat_usize!(hash, "freed_page_count", freed_page_count); // GCed code size - hash_aset_usize(hash, "freed_code_size", freed_page_count * cb.page_size()); + set_stat_usize!(hash, "freed_code_size", freed_page_count * cb.page_size()); // Live pages - hash_aset_usize(hash, "live_page_count", cb.num_mapped_pages() - freed_page_count); + set_stat_usize!(hash, "live_page_count", cb.num_mapped_pages() - freed_page_count); // Size of memory region allocated for JIT code - hash_aset_usize(hash, "code_region_size", cb.mapped_region_size()); + set_stat_usize!(hash, "code_region_size", cb.mapped_region_size()); // Rust global allocations in bytes - hash_aset_usize(hash, "yjit_alloc_size", GLOBAL_ALLOCATOR.alloc_size.load(Ordering::SeqCst)); + set_stat_usize!(hash, "yjit_alloc_size", yjit_alloc_size()); // How many bytes we are using to store context data let context_data = CodegenGlobals::get_context_data(); - hash_aset_usize(hash, "context_data_bytes", context_data.num_bytes()); - hash_aset_usize(hash, "context_cache_bytes", crate::core::CTX_CACHE_BYTES); + set_stat_usize!(hash, "context_data_bytes", context_data.num_bytes()); + set_stat_usize!(hash, "context_cache_bytes", crate::core::CTX_ENCODE_CACHE_BYTES + crate::core::CTX_DECODE_CACHE_BYTES); // VM instructions count - hash_aset_usize(hash, "vm_insns_count", rb_vm_insns_count as usize); + set_stat_usize!(hash, "vm_insns_count", rb_vm_insns_count as usize); - hash_aset_usize(hash, "live_iseq_count", rb_yjit_live_iseq_count as usize); - hash_aset_usize(hash, "iseq_alloc_count", rb_yjit_iseq_alloc_count as usize); + set_stat_usize!(hash, "live_iseq_count", rb_yjit_live_iseq_count as usize); + set_stat_usize!(hash, "iseq_alloc_count", rb_yjit_iseq_alloc_count as usize); - rb_hash_aset(hash, rust_str_to_sym("object_shape_count"), rb_object_shape_count()); + set_stat!(hash, "object_shape_count", rb_object_shape_count()); } // If we're not generating stats, put only default counters @@ -778,9 +799,9 @@ fn rb_yjit_gen_stats_dict() -> VALUE { let counter_val = unsafe { *counter_ptr }; // Put counter into hash - let key = rust_str_to_sym(&counter.get_name()); + let key = &counter.get_name(); let value = VALUE::fixnum_from_usize(counter_val as usize); - unsafe { rb_hash_aset(hash, key, value); } + unsafe { set_stat!(hash, key, value); } } return hash; @@ -788,18 +809,14 @@ fn rb_yjit_gen_stats_dict() -> VALUE { unsafe { // Indicate that the complete set of stats is available - rb_hash_aset(hash, rust_str_to_sym("all_stats"), Qtrue); + set_stat!(hash, "all_stats", Qtrue); // For each counter we track for counter_name in COUNTER_NAMES { // Get the counter value let counter_ptr = get_counter_ptr(counter_name); let counter_val = *counter_ptr; - - // Put counter into hash - let key = rust_str_to_sym(counter_name); - let value = VALUE::fixnum_from_usize(counter_val as usize); - rb_hash_aset(hash, key, value); + set_stat_usize!(hash, counter_name, counter_val as usize); } let mut side_exits = 0; @@ -809,17 +826,15 @@ fn rb_yjit_gen_stats_dict() -> VALUE { for op_idx in 0..VM_INSTRUCTION_SIZE_USIZE { let op_name = insn_name(op_idx); let key_string = "exit_".to_owned() + &op_name; - let key = rust_str_to_sym(&key_string); let count = EXIT_OP_COUNT[op_idx]; side_exits += count; - let value = VALUE::fixnum_from_usize(count as usize); - rb_hash_aset(hash, key, value); + set_stat_usize!(hash, &key_string, count as usize); } - hash_aset_usize(hash, "side_exit_count", side_exits as usize); + set_stat_usize!(hash, "side_exit_count", side_exits as usize); let total_exits = side_exits + *get_counter_ptr(&Counter::leave_interp_return.get_name()); - hash_aset_usize(hash, "total_exit_count", total_exits as usize); + set_stat_usize!(hash, "total_exit_count", total_exits as usize); // Number of instructions that finish executing in YJIT. // See :count-placement: about the subtraction. @@ -831,14 +846,14 @@ fn rb_yjit_gen_stats_dict() -> VALUE { } else { 0_f64 }; - hash_aset_double(hash, "avg_len_in_yjit", avg_len_in_yjit); + set_stat_double!(hash, "avg_len_in_yjit", avg_len_in_yjit); // Proportion of instructions that retire in YJIT let total_insns_count = retired_in_yjit + rb_vm_insns_count; - hash_aset_usize(hash, "total_insns_count", total_insns_count as usize); + set_stat_usize!(hash, "total_insns_count", total_insns_count as usize); let ratio_in_yjit: f64 = 100.0 * retired_in_yjit as f64 / total_insns_count as f64; - hash_aset_double(hash, "ratio_in_yjit", ratio_in_yjit); + set_stat_double!(hash, "ratio_in_yjit", ratio_in_yjit); // Set method call counts in a Ruby dict fn set_call_counts( @@ -871,14 +886,18 @@ fn rb_yjit_gen_stats_dict() -> VALUE { } // Create a hash for the cfunc call counts - let cfunc_calls = rb_hash_new(); - rb_hash_aset(hash, rust_str_to_sym("cfunc_calls"), cfunc_calls); - set_call_counts(cfunc_calls, &mut *addr_of_mut!(CFUNC_NAME_TO_IDX), &mut *addr_of_mut!(CFUNC_CALL_COUNT)); + set_stat!(hash, "cfunc_calls", { + let cfunc_calls = rb_hash_new(); + set_call_counts(cfunc_calls, &mut *addr_of_mut!(CFUNC_NAME_TO_IDX), &mut *addr_of_mut!(CFUNC_CALL_COUNT)); + cfunc_calls + }); // Create a hash for the ISEQ call counts - let iseq_calls = rb_hash_new(); - rb_hash_aset(hash, rust_str_to_sym("iseq_calls"), iseq_calls); - set_call_counts(iseq_calls, &mut *addr_of_mut!(ISEQ_NAME_TO_IDX), &mut *addr_of_mut!(ISEQ_CALL_COUNT)); + set_stat!(hash, "iseq_calls", { + let iseq_calls = rb_hash_new(); + set_call_counts(iseq_calls, &mut *addr_of_mut!(ISEQ_NAME_TO_IDX), &mut *addr_of_mut!(ISEQ_CALL_COUNT)); + iseq_calls + }); } hash diff --git a/yjit/src/virtualmem.rs b/yjit/src/virtualmem.rs index f3c0ceefffc804..f56b0d8213e94f 100644 --- a/yjit/src/virtualmem.rs +++ b/yjit/src/virtualmem.rs @@ -5,7 +5,7 @@ use std::ptr::NonNull; -use crate::{utils::IntoUsize, backend::ir::Target}; +use crate::{backend::ir::Target, stats::yjit_alloc_size, utils::IntoUsize}; #[cfg(not(test))] pub type VirtualMem = VirtualMemory; @@ -26,9 +26,12 @@ pub struct VirtualMemory { /// Location of the virtual memory region. region_start: NonNull, - /// Size of the region in bytes. + /// Size of this virtual memory region in bytes. region_size_bytes: usize, + /// mapped_region_bytes + yjit_alloc_size may not increase beyond this limit. + memory_limit_bytes: usize, + /// Number of bytes per "page", memory protection permission can only be controlled at this /// granularity. page_size_bytes: usize, @@ -106,13 +109,20 @@ use WriteError::*; impl VirtualMemory { /// Bring a part of the address space under management. - pub fn new(allocator: A, page_size: u32, virt_region_start: NonNull, size_bytes: usize) -> Self { + pub fn new( + allocator: A, + page_size: u32, + virt_region_start: NonNull, + region_size_bytes: usize, + memory_limit_bytes: usize, + ) -> Self { assert_ne!(0, page_size); let page_size_bytes = page_size.as_usize(); Self { region_start: virt_region_start, - region_size_bytes: size_bytes, + region_size_bytes, + memory_limit_bytes, page_size_bytes, mapped_region_bytes: 0, current_write_page: None, @@ -176,7 +186,8 @@ impl VirtualMemory { } self.current_write_page = Some(page_addr); - } else if (start..whole_region_end).contains(&raw) { + } else if (start..whole_region_end).contains(&raw) && + (page_addr + page_size - start as usize) + yjit_alloc_size() < self.memory_limit_bytes { // Writing to a brand new page let mapped_region_end_addr = mapped_region_end as usize; let alloc_size = page_addr - mapped_region_end_addr + page_size; @@ -368,6 +379,7 @@ pub mod tests { PAGE_SIZE.try_into().unwrap(), NonNull::new(mem_start as *mut u8).unwrap(), mem_size, + 128 * 1024 * 1024, ) }