From 90c30d8a29ff930bae6c06dd58c0aef0731d6895 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Tue, 6 Dec 2022 16:23:45 +0000 Subject: [PATCH] Release prep v0.0.2 --- CHANGELOG.md | 7 + vendor/bundle/ruby/2.7.0/cache/json-2.6.3.gem | Bin 0 -> 67072 bytes .../2.7.0/json-2.6.3/gem.build_complete | 0 .../2.7.0/json-2.6.3/gem_make.out | 13 + .../2.7.0/json-2.6.3/json/ext/generator.so | Bin 0 -> 102000 bytes .../2.7.0/json-2.6.3/json/ext/parser.so | Bin 0 -> 67200 bytes .../x86_64-linux/2.7.0/json-2.6.3/mkmf.log | 120 + .../ruby/2.7.0/gems/json-2.6.3/CHANGES.md | 457 +++ .../bundle/ruby/2.7.0/gems/json-2.6.3/LICENSE | 56 + .../ruby/2.7.0/gems/json-2.6.3/README.md | 425 +++ .../bundle/ruby/2.7.0/gems/json-2.6.3/VERSION | 1 + .../2.7.0/gems/json-2.6.3/ext/json/Makefile | 203 + .../json-2.6.3/ext/json/ext/fbuffer/fbuffer.h | 187 + .../generator/.sitearchdir.-.json.-.ext.time | 0 .../ext/json/ext/generator/Makefile | 268 ++ .../json-2.6.3/ext/json/ext/generator/depend | 1 + .../ext/json/ext/generator/extconf.rb | 4 + .../ext/json/ext/generator/generator.c | 1608 ++++++++ .../ext/json/ext/generator/generator.h | 174 + .../ext/json/ext/generator/generator.o | Bin 0 -> 349088 bytes .../ext/json/ext/generator/generator.so | Bin 0 -> 102000 bytes .../ext/parser/.sitearchdir.-.json.-.ext.time | 0 .../json-2.6.3/ext/json/ext/parser/Makefile | 268 ++ .../json-2.6.3/ext/json/ext/parser/depend | 1 + .../json-2.6.3/ext/json/ext/parser/extconf.rb | 32 + .../json-2.6.3/ext/json/ext/parser/parser.c | 3347 +++++++++++++++++ .../json-2.6.3/ext/json/ext/parser/parser.h | 96 + .../json-2.6.3/ext/json/ext/parser/parser.o | Bin 0 -> 163368 bytes .../json-2.6.3/ext/json/ext/parser/parser.rl | 986 +++++ .../json-2.6.3/ext/json/ext/parser/parser.so | Bin 0 -> 67200 bytes .../2.7.0/gems/json-2.6.3/ext/json/extconf.rb | 3 + .../ruby/2.7.0/gems/json-2.6.3/json.gemspec | 67 + .../ruby/2.7.0/gems/json-2.6.3/lib/json.rb | 583 +++ .../json-2.6.3/lib/json/add/bigdecimal.rb | 29 + .../gems/json-2.6.3/lib/json/add/complex.rb | 28 + .../gems/json-2.6.3/lib/json/add/core.rb | 12 + .../gems/json-2.6.3/lib/json/add/date.rb | 34 + .../gems/json-2.6.3/lib/json/add/date_time.rb | 50 + .../gems/json-2.6.3/lib/json/add/exception.rb | 31 + .../gems/json-2.6.3/lib/json/add/ostruct.rb | 31 + .../gems/json-2.6.3/lib/json/add/range.rb | 29 + .../gems/json-2.6.3/lib/json/add/rational.rb | 27 + .../gems/json-2.6.3/lib/json/add/regexp.rb | 30 + .../2.7.0/gems/json-2.6.3/lib/json/add/set.rb | 29 + .../gems/json-2.6.3/lib/json/add/struct.rb | 30 + .../gems/json-2.6.3/lib/json/add/symbol.rb | 25 + .../gems/json-2.6.3/lib/json/add/time.rb | 38 + .../2.7.0/gems/json-2.6.3/lib/json/common.rb | 703 ++++ .../2.7.0/gems/json-2.6.3/lib/json/ext.rb | 15 + .../gems/json-2.6.3/lib/json/ext/generator.so | Bin 0 -> 102000 bytes .../gems/json-2.6.3/lib/json/ext/parser.so | Bin 0 -> 67200 bytes .../json-2.6.3/lib/json/generic_object.rb | 71 + .../2.7.0/gems/json-2.6.3/lib/json/pure.rb | 15 + .../json-2.6.3/lib/json/pure/generator.rb | 479 +++ .../gems/json-2.6.3/lib/json/pure/parser.rb | 337 ++ .../2.7.0/gems/json-2.6.3/lib/json/version.rb | 9 + .../2.7.0/specifications/json-2.6.3.gemspec | Bin 0 -> 1720 bytes 57 files changed, 10959 insertions(+) create mode 100644 vendor/bundle/ruby/2.7.0/cache/json-2.6.3.gem create mode 100644 vendor/bundle/ruby/2.7.0/extensions/x86_64-linux/2.7.0/json-2.6.3/gem.build_complete create mode 100644 vendor/bundle/ruby/2.7.0/extensions/x86_64-linux/2.7.0/json-2.6.3/gem_make.out create mode 100755 vendor/bundle/ruby/2.7.0/extensions/x86_64-linux/2.7.0/json-2.6.3/json/ext/generator.so create mode 100755 vendor/bundle/ruby/2.7.0/extensions/x86_64-linux/2.7.0/json-2.6.3/json/ext/parser.so create mode 100644 vendor/bundle/ruby/2.7.0/extensions/x86_64-linux/2.7.0/json-2.6.3/mkmf.log create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/CHANGES.md create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/LICENSE create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/README.md create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/VERSION create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/Makefile create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/fbuffer/fbuffer.h create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/generator/.sitearchdir.-.json.-.ext.time create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/generator/Makefile create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/generator/depend create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/generator/extconf.rb create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/generator/generator.c create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/generator/generator.h create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/generator/generator.o create mode 100755 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/generator/generator.so create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/parser/.sitearchdir.-.json.-.ext.time create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/parser/Makefile create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/parser/depend create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/parser/extconf.rb create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/parser/parser.c create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/parser/parser.h create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/parser/parser.o create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/parser/parser.rl create mode 100755 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/parser/parser.so create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/extconf.rb create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/json.gemspec create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json.rb create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/bigdecimal.rb create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/complex.rb create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/core.rb create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/date.rb create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/date_time.rb create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/exception.rb create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/ostruct.rb create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/range.rb create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/rational.rb create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/regexp.rb create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/set.rb create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/struct.rb create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/symbol.rb create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/time.rb create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/common.rb create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/ext.rb create mode 100755 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/ext/generator.so create mode 100755 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/ext/parser.so create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/generic_object.rb create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/pure.rb create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/pure/generator.rb create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/pure/parser.rb create mode 100644 vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/version.rb create mode 100644 vendor/bundle/ruby/2.7.0/specifications/json-2.6.3.gemspec diff --git a/CHANGELOG.md b/CHANGELOG.md index 157acb0..ca2a7c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org). +## [v0.0.2](https://github.com/puppetlabs/puppet-lint-check_unsafe_interpolations/tree/v0.0.2) - 2022-12-06 + +[Full Changelog](https://github.com/puppetlabs/puppet-lint-check_unsafe_interpolations/compare/v0.0.1...v0.0.2) + +### Changed +- (CONT-332) Change puppet-lint version dependency [#24](https://github.com/puppetlabs/puppet-lint-check_unsafe_interpolations/pull/24) ([GSPatton](https://github.com/GSPatton)) + ## [v0.0.1](https://github.com/puppetlabs/puppet-lint-check_unsafe_interpolations/tree/v0.0.1) - 2022-12-01 [Full Changelog](https://github.com/puppetlabs/puppet-lint-check_unsafe_interpolations/compare/6fdffece89c70b016174b766d57ecf22064b20d2...v0.0.1) diff --git a/vendor/bundle/ruby/2.7.0/cache/json-2.6.3.gem b/vendor/bundle/ruby/2.7.0/cache/json-2.6.3.gem new file mode 100644 index 0000000000000000000000000000000000000000..f76ee7480565db8e1050f4777d633c6ef98a709f GIT binary patch literal 67072 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 + 4: + 5: /*top*/ + 6: extern int t(void); + 7: int main(int argc, char **argv) + 8: { + 9: if (argc > 1000000) { +10: int (* volatile tp)(void)=(int (*)(void))&t; +11: printf("%d", (*tp)()); +12: } +13: +14: return !!argv[argc]; +15: } +16: int t(void) { void ((*volatile p)()); p = (void ((*)()))rb_enc_raise; return !p; } +/* end */ + +"gcc -o conftest -I/opt/hostedtoolcache/Ruby/2.7.7/x64/include/ruby-2.7.0/x86_64-linux -I/opt/hostedtoolcache/Ruby/2.7.7/x64/include/ruby-2.7.0/ruby/backward -I/opt/hostedtoolcache/Ruby/2.7.7/x64/include/ruby-2.7.0 -I. -I/opt/hostedtoolcache/Ruby/2.7.7/x64/include -DENABLE_PATH_CHECK=0 -g -O2 -fPIC conftest.c -L. -L/opt/hostedtoolcache/Ruby/2.7.7/x64/lib -Wl,-rpath,/opt/hostedtoolcache/Ruby/2.7.7/x64/lib -L. -L/opt/hostedtoolcache/Ruby/2.7.7/x64/lib -fstack-protector-strong -rdynamic -Wl,-export-dynamic -Wl,-rpath,/opt/hostedtoolcache/Ruby/2.7.7/x64/lib -L/opt/hostedtoolcache/Ruby/2.7.7/x64/lib -lruby -lm -lc" +checked program was: +/* begin */ + 1: #include "ruby.h" + 2: + 3: #include + 4: + 5: /*top*/ + 6: extern int t(void); + 7: int main(int argc, char **argv) + 8: { + 9: if (argc > 1000000) { +10: int (* volatile tp)(void)=(int (*)(void))&t; +11: printf("%d", (*tp)()); +12: } +13: +14: return !!argv[argc]; +15: } +16: extern void rb_enc_raise(); +17: int t(void) { rb_enc_raise(); return 0; } +/* end */ + +-------------------- + +have_func: checking for rb_enc_interned_str() in ruby.h... -------------------- no + +"gcc -o conftest -I/opt/hostedtoolcache/Ruby/2.7.7/x64/include/ruby-2.7.0/x86_64-linux -I/opt/hostedtoolcache/Ruby/2.7.7/x64/include/ruby-2.7.0/ruby/backward -I/opt/hostedtoolcache/Ruby/2.7.7/x64/include/ruby-2.7.0 -I. -I/opt/hostedtoolcache/Ruby/2.7.7/x64/include -DENABLE_PATH_CHECK=0 -g -O2 -fPIC conftest.c -L. -L/opt/hostedtoolcache/Ruby/2.7.7/x64/lib -Wl,-rpath,/opt/hostedtoolcache/Ruby/2.7.7/x64/lib -L. -L/opt/hostedtoolcache/Ruby/2.7.7/x64/lib -fstack-protector-strong -rdynamic -Wl,-export-dynamic -Wl,-rpath,/opt/hostedtoolcache/Ruby/2.7.7/x64/lib -L/opt/hostedtoolcache/Ruby/2.7.7/x64/lib -lruby -lm -lc" +conftest.c: In function ‘t’: +conftest.c:16:57: error: ‘rb_enc_interned_str’ undeclared (first use in this function); did you mean ‘rb_sym_interned_p’? + 16 | int t(void) { void ((*volatile p)()); p = (void ((*)()))rb_enc_interned_str; return !p; } + | ^~~~~~~~~~~~~~~~~~~ + | rb_sym_interned_p +conftest.c:16:57: note: each undeclared identifier is reported only once for each function it appears in +checked program was: +/* begin */ + 1: #include "ruby.h" + 2: + 3: #include + 4: + 5: /*top*/ + 6: extern int t(void); + 7: int main(int argc, char **argv) + 8: { + 9: if (argc > 1000000) { +10: int (* volatile tp)(void)=(int (*)(void))&t; +11: printf("%d", (*tp)()); +12: } +13: +14: return !!argv[argc]; +15: } +16: int t(void) { void ((*volatile p)()); p = (void ((*)()))rb_enc_interned_str; return !p; } +/* end */ + +"gcc -o conftest -I/opt/hostedtoolcache/Ruby/2.7.7/x64/include/ruby-2.7.0/x86_64-linux -I/opt/hostedtoolcache/Ruby/2.7.7/x64/include/ruby-2.7.0/ruby/backward -I/opt/hostedtoolcache/Ruby/2.7.7/x64/include/ruby-2.7.0 -I. -I/opt/hostedtoolcache/Ruby/2.7.7/x64/include -DENABLE_PATH_CHECK=0 -g -O2 -fPIC conftest.c -L. -L/opt/hostedtoolcache/Ruby/2.7.7/x64/lib -Wl,-rpath,/opt/hostedtoolcache/Ruby/2.7.7/x64/lib -L. -L/opt/hostedtoolcache/Ruby/2.7.7/x64/lib -fstack-protector-strong -rdynamic -Wl,-export-dynamic -Wl,-rpath,/opt/hostedtoolcache/Ruby/2.7.7/x64/lib -L/opt/hostedtoolcache/Ruby/2.7.7/x64/lib -lruby -lm -lc" +/usr/bin/ld: /tmp/cc6RUtBd.o: in function `t': +/home/runner/work/puppet-lint-check_unsafe_interpolations/puppet-lint-check_unsafe_interpolations/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/parser/conftest.c:17: undefined reference to `rb_enc_interned_str' +collect2: error: ld returned 1 exit status +checked program was: +/* begin */ + 1: #include "ruby.h" + 2: + 3: #include + 4: + 5: /*top*/ + 6: extern int t(void); + 7: int main(int argc, char **argv) + 8: { + 9: if (argc > 1000000) { +10: int (* volatile tp)(void)=(int (*)(void))&t; +11: printf("%d", (*tp)()); +12: } +13: +14: return !!argv[argc]; +15: } +16: extern void rb_enc_interned_str(); +17: int t(void) { rb_enc_interned_str(); return 0; } +/* end */ + +-------------------- + diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/CHANGES.md b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/CHANGES.md new file mode 100644 index 0000000..ba66514 --- /dev/null +++ b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/CHANGES.md @@ -0,0 +1,457 @@ +# Changes + +### 2021-10-24 (2.6.1) + +* Restore version.rb with 2.6.1 + +### 2021-10-14 (2.6.0) + +* Use `rb_enc_interned_str` if available to reduce allocations in `freeze: true` mode. #451. +* Bump required_ruby_version to 2.3. +* Fix compatibility with `GC.compact`. +* Fix some compilation warnings. #469 + +## 2020-12-22 (2.5.1) + +* Restore the compatibility for constants of JSON class. + +## 2020-12-22 (2.5.0) + +* Ready to Ractor-safe at Ruby 3.0. + +## 2020-12-17 (2.4.1) + +* Restore version.rb with 2.4.1 + +## 2020-12-15 (2.4.0) + +* Implement a freeze: parser option #447 +* Fix an issue with generate_pretty and empty objects in the Ruby and Java implementations #449 +* Fix JSON.load_file doc #448 +* Fix pure parser with unclosed arrays / objects #425 +* bundle the LICENSE file in the gem #444 +* Add an option to escape forward slash character #405 +* RDoc for JSON #439 #446 #442 #434 #433 #430 + +## 2020-06-30 (2.3.1) + +* Spelling and grammar fixes for comments. Pull request #191 by Josh + Kline. +* Enhance generic JSON and #generate docs. Pull request #347 by Victor + Shepelev. +* Add :nodoc: for GeneratorMethods. Pull request #349 by Victor Shepelev. +* Baseline changes to help (JRuby) development. Pull request #371 by Karol + Bucek. +* Add metadata for rubygems.org. Pull request #379 by Alexandre ZANNI. +* Remove invalid JSON.generate description from JSON module rdoc. Pull + request #384 by Jeremy Evans. +* Test with TruffleRuby in CI. Pull request #402 by Benoit Daloze. +* Rdoc enhancements. Pull request #413 by Burdette Lamar. +* Fixtures/ are not being tested... Pull request #416 by Marc-André + Lafortune. +* Use frozen string for hash key. Pull request #420 by Marc-André + Lafortune. +* Added :call-seq: to RDoc for some methods. Pull request #422 by Burdette + Lamar. +* Small typo fix. Pull request #423 by Marc-André Lafortune. + +## 2019-12-11 (2.3.0) + * Fix default of `create_additions` to always be `false` for `JSON(user_input)` + and `JSON.parse(user_input, nil)`. + Note that `JSON.load` remains with default `true` and is meant for internal + serialization of trusted data. [CVE-2020-10663] + * Fix passing args all #to_json in json/add/*. + * Fix encoding issues + * Fix issues of keyword vs positional parameter + * Fix JSON::Parser against bigdecimal updates + * Bug fixes to JRuby port + +## 2019-02-21 (2.2.0) + * Adds support for 2.6 BigDecimal and ruby standard library Set datetype. + +## 2017-04-18 (2.1.0) + * Allow passing of `decimal_class` option to specify a class as which to parse + JSON float numbers. +## 2017-03-23 (2.0.4) + * Raise exception for incomplete unicode surrogates/character escape + sequences. This problem was reported by Daniel Gollahon (dgollahon). + * Fix arbitrary heap exposure problem. This problem was reported by Ahmad + Sherif (ahmadsherif). + +## 2017-01-12 (2.0.3) + * Set `required_ruby_version` to 1.9 + * Some small fixes + +## 2016-07-26 (2.0.2) + * Specify `required_ruby_version` for json\_pure. + * Fix issue #295 failure when parsing frozen strings. + +## 2016-07-01 (2.0.1) + * Fix problem when requiring json\_pure and Parser constant was defined top + level. + * Add `RB_GC_GUARD` to avoid possible GC problem via Pete Johns. + * Store `current_nesting` on stack by Aaron Patterson. + +## 2015-09-11 (2.0.0) + * Now complies to newest JSON RFC 7159. + * Implements compatibility to ruby 2.4 integer unification. + * Drops support for old rubies whose life has ended, that is rubies < 2.0. + Also see https://www.ruby-lang.org/en/news/2014/07/01/eol-for-1-8-7-and-1-9-2/ + * There were still some mentions of dual GPL licensing in the source, but JSON + has just the Ruby license that itself includes an explicit dual-licensing + clause that allows covered software to be distributed under the terms of + the Simplified BSD License instead for all ruby versions >= 1.9.3. This is + however a GPL compatible license according to the Free Software Foundation. + I changed these mentions to be consistent with the Ruby license setting in + the gemspec files which were already correct now. + +## 2015-06-01 (1.8.3) + * Fix potential memory leak, thx to nobu. + +## 2015-01-08 (1.8.2) + * Some performance improvements by Vipul A M . + * Fix by Jason R. Clark to avoid mutation of + `JSON.dump_default_options`. + * More tests by Michael Mac-Vicar and fixing + `space_before` accessor in generator. + * Performance on Jruby improved by Ben Browning . + * Some fixes to be compatible with the new Ruby 2.2 by Zachary Scott + and SHIBATA Hiroshi . + +## 2013-05-13 (1.8.1) + * Remove Rubinius exception since transcoding should be working now. + +## 2013-05-13 (1.8.0) + * Fix https://github.com/flori/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. + * Applied patch by ginriki@github to remove unnecessary if. + * Add load/dump interface to `JSON::GenericObject` to make + serialize :some_attribute, `JSON::GenericObject` + work in Rails active models for convenient `SomeModel#some_attribute.foo.bar` + access to serialised JSON data. + +## 2013-02-04 (1.7.7) + * Security fix for JSON create_additions default value and + `JSON::GenericObject`. It should not be possible to create additions unless + explicitly requested by setting the create_additions argument to true or + using the JSON.load/dump interface. If `JSON::GenericObject` is supposed to + be automatically deserialised, this has to be explicitly enabled by + setting + JSON::GenericObject.json_creatable = true + as well. + * Remove useless assert in fbuffer implementation. + * Apply patch attached to https://github.com/flori/json/issues#issue/155 + provided by John Shahid , Thx! + * Add license information to rubygems spec data, reported by Jordi Massaguer Pla . + * Improve documentation, thx to Zachary Scott . + +## 2012-11-29 (1.7.6) + * Add `GeneratorState#merge` alias for JRuby, fix state accessor methods. Thx to + jvshahid@github. + * Increase hash likeness of state objects. + +## 2012-08-17 (1.7.5) + * Fix compilation of extension on older rubies. + +## 2012-07-26 (1.7.4) + * Fix compilation problem on AIX, see https://github.com/flori/json/issues/142 + +## 2012-05-12 (1.7.3) + * Work around Rubinius encoding issues using iconv for conversion instead. + +## 2012-05-11 (1.7.2) + * Fix some encoding issues, that cause problems for the pure and the + extension variant in jruby 1.9 mode. + +## 2012-04-28 (1.7.1) + * Some small fixes for building + +## 2012-04-28 (1.7.0) + * Add `JSON::GenericObject` for method access to objects transmitted via JSON. + +## 2012-04-27 (1.6.7) + * Fix possible crash when trying to parse nil value. + +## 2012-02-11 (1.6.6) + * Propagate src encoding to values made from it (fixes 1.9 mode converting + everything to ascii-8bit; harmless for 1.8 mode too) (Thomas E. Enebo + ), should fix + https://github.com/flori/json/issues#issue/119. + * Fix https://github.com/flori/json/issues#issue/124 Thx to Jason Hutchens. + * Fix https://github.com/flori/json/issues#issue/117 + +## 2012-01-15 (1.6.5) + * Vit Ondruch reported a bug that shows up when using + optimisation under GCC 4.7. Thx to him, Bohuslav Kabrda + and Yui NARUSE for debugging and + developing a patch fix. + +## 2011-12-24 (1.6.4) + * Patches that improve speed on JRuby contributed by Charles Oliver Nutter + . + * Support `object_class`/`array_class` with duck typed hash/array. + +## 2011-12-01 (1.6.3) + * Let `JSON.load('')` return nil as well to make mysql text columns (default to + `''`) work better for serialization. + +## 2011-11-21 (1.6.2) + * Add support for OpenStruct and BigDecimal. + * Fix bug when parsing nil in `quirks_mode`. + * Make JSON.dump and JSON.load methods better cooperate with Rails' serialize + method. Just use: + serialize :value, JSON + * Fix bug with time serialization concerning nanoseconds. Thanks for the + patch go to Josh Partlow (jpartlow@github). + * Improve parsing speed for JSON numbers (integers and floats) in a similar way to + what Evan Phoenix suggested in: + https://github.com/flori/json/pull/103 + +## 2011-09-18 (1.6.1) + * Using -target 1.5 to force Java bits to compile with 1.5. + +## 2011-09-12 (1.6.0) + * Extract utilities (prettifier and GUI-editor) in its own gem json-utils. + * Split json/add/core into different files for classes to be serialised. + +## 2011-08-31 (1.5.4) + * Fix memory leak when used from multiple JRuby. (Patch by + jfirebaugh@github). + * Apply patch by Eric Wong that fixes garbage collection problem + reported in https://github.com/flori/json/issues/46. + * Add :quirks_mode option to parser and generator. + * Add support for Rational and Complex number additions via json/add/complex + and json/add/rational requires. + +## 2011-06-20 (1.5.3) + * Alias State#configure method as State#merge to increase duck type synonymy with Hash. + * Add `as_json` methods in json/add/core, so rails can create its json objects + the new way. + +## 2011-05-11 (1.5.2) + * Apply documentation patch by Cory Monty . + * Add gemspecs for json and json\_pure. + * Fix bug in jruby pretty printing. + * Fix bug in `object_class` and `array_class` when inheriting from Hash or + Array. + +## 2011-01-24 (1.5.1) + * Made rake-compiler build a fat binary gem. This should fix issue + https://github.com/flori/json/issues#issue/54. + +## 2011-01-22 (1.5.0) + * Included Java source codes for the Jruby extension made by Daniel Luz + . + * Output full exception message of `deep_const_get` to aid debugging. + * Fixed an issue with ruby 1.9 `Module#const_defined?` method, that was + reported by Riley Goodside. + +## 2010-08-09 (1.4.6) + * Fixed oversight reported in http://github.com/flori/json/issues/closed#issue/23, + always create a new object from the state prototype. + * Made pure and ext api more similar again. + +## 2010-08-07 (1.4.5) + * Manage data structure nesting depth in state object during generation. This + should reduce problems with `to_json` method definіtions that only have one + argument. + * Some fixes in the state objects and additional tests. +## 2010-08-06 (1.4.4) + * Fixes build problem for rubinius under OS X, http://github.com/flori/json/issues/closed#issue/25 + * Fixes crashes described in http://github.com/flori/json/issues/closed#issue/21 and + http://github.com/flori/json/issues/closed#issue/23 +## 2010-05-05 (1.4.3) + * Fixed some test assertions, from Ruby r27587 and r27590, patch by nobu. + * Fixed issue http://github.com/flori/json/issues/#issue/20 reported by + electronicwhisper@github. Thx! + +## 2010-04-26 (1.4.2) + * Applied patch from naruse Yui NARUSE to make building with + Microsoft Visual C possible again. + * Applied patch from devrandom in order to allow building of + json_pure if extensiontask is not present. + * Thanks to Dustin Schneider , who reported a memory + leak, which is fixed in this release. + * Applied 993f261ccb8f911d2ae57e9db48ec7acd0187283 patch from josh@github. + +## 2010-04-25 (1.4.1) + * Fix for a bug reported by Dan DeLeo , caused by T_FIXNUM + being different on 32bit/64bit architectures. + +## 2010-04-23 (1.4.0) + * Major speed improvements and building with simplified + directory/file-structure. + * Extension should at least be compatible with MRI, YARV and Rubinius. + +## 2010-04-07 (1.2.4) + * Triger const_missing callback to make Rails' dynamic class loading work. + +## 2010-03-11 (1.2.3) + * Added a `State#[]` method which returns an attribute's value in order to + increase duck type compatibility to Hash. + +## 2010-02-27 (1.2.2) + * Made some changes to make the building of the parser/generator compatible + to Rubinius. + +## 2009-11-25 (1.2.1) + * Added `:symbolize_names` option to Parser, which returns symbols instead of + strings in object names/keys. + +## 2009-10-01 (1.2.0) + * `fast_generate` now raises an exception for nan and infinite floats. + * On Ruby 1.8 json supports parsing of UTF-8, UTF-16BE, UTF-16LE, UTF-32BE, + and UTF-32LE JSON documents now. Under Ruby 1.9 the M17n conversion + functions are used to convert from all supported encodings. ASCII-8BIT + encoded strings are handled like all strings under Ruby 1.8 were. + * Better documentation + +## 2009-08-23 (1.1.9) + * Added forgotten main doc file `extra_rdoc_files`. + +## 2009-08-23 (1.1.8) + * Applied a patch by OZAWA Sakuro to make json/pure + work in environments that don't provide iconv. + * Applied patch by okkez_ in order to fix Ruby Bug #1768: + http://redmine.ruby-lang.org/issues/show/1768. + * Finally got around to avoid the rather paranoid escaping of ?/ characters + in the generator's output. The parsers aren't affected by this change. + Thanks to Rich Apodaca for the suggestion. + +## 2009-06-29 (1.1.7) + * Security Fix for JSON::Pure::Parser. A specially designed string could + cause catastrophic backtracking in one of the parser's regular expressions + in earlier 1.1.x versions. JSON::Ext::Parser isn't affected by this issue. + Thanks to Bartosz Blimke for reporting this + problem. + * This release also uses a less strict ruby version requirement for the + creation of the mswin32 native gem. + +## 2009-05-10 (1.1.6) + * No changes. І tested native linux gems in the last release and they don't + play well with different ruby versions other than the one the gem was built + with. This release is just to bump the version number in order to skip the + native gem on rubyforge. + +## 2009-05-10 (1.1.5) + * Started to build gems with rake-compiler gem. + * Applied patch object/array class patch from Brian Candler + and fixes. + +## 2009-04-01 (1.1.4) + * Fixed a bug in the creation of serialized generic rails objects reported by + Friedrich Graeter . + * Deleted tests/runner.rb, we're using testrb instead. + * Editor supports Infinity in numbers now. + * Made some changes in order to get the library to compile/run under Ruby + 1.9. + * Improved speed of the code path for the fast_generate method in the pure + variant. + +## 2008-07-10 (1.1.3) + * Wesley Beary reported a bug in json/add/core's DateTime + handling: If the nominator and denominator of the offset were divisible by + each other Ruby's Rational#to_s returns them as an integer not a fraction + with '/'. This caused a ZeroDivisionError during parsing. + * Use Date#start and DateTime#start instead of sg method, while + remaining backwards compatible. + * Supports ragel >= 6.0 now. + * Corrected some tests. + * Some minor changes. + +## 2007-11-27 (1.1.2) + * Remember default dir (last used directory) in editor. + * JSON::Editor.edit method added, the editor can now receive json texts from + the clipboard via C-v. + * Load json texts from an URL pasted via middle button press. + * Added :create_additions option to Parser. This makes it possible to disable + the creation of additions by force, in order to treat json texts as data + while having additions loaded. + * Jacob Maine reported, that JSON(:foo) outputs a JSON + object if the rails addition is enabled, which is wrong. It now outputs a + JSON string "foo" instead, like suggested by Jacob Maine. + * Discovered a bug in the Ruby Bugs Tracker on rubyforge, that was reported + by John Evans lgastako@gmail.com. He could produce a crash in the JSON + generator by returning something other than a String instance from a + to_json method. I now guard against this by doing a rather crude type + check, which raises an exception instead of crashing. + +## 2007-07-06 (1.1.1) + * Yui NARUSE sent some patches to fix tests for Ruby + 1.9. I applied them and adapted some of them a bit to run both on 1.8 and + 1.9. + * Introduced a `JSON.parse!` method without depth checking for people who + like danger. + * Made generate and `pretty_generate` methods configurable by an options hash. + * Added :allow_nan option to parser and generator in order to handle NaN, + Infinity, and -Infinity correctly - if requested. Floats, which aren't numbers, + aren't valid JSON according to RFC4627, so by default an exception will be + raised if any of these symbols are encountered. Thanks to Andrea Censi + for his hint about this. + * Fixed some more tests for Ruby 1.9. + * Implemented dump/load interface of Marshal as suggested in ruby-core:11405 + by murphy . + * Implemented the `max_nesting` feature for generate methods, too. + * Added some implementations for ruby core's custom objects for + serialisation/deserialisation purposes. + +## 2007-05-21 (1.1.0) + * Implemented max_nesting feature for parser to avoid stack overflows for + data from untrusted sources. If you trust the source, you can disable it + with the option max_nesting => false. + * Piers Cawley reported a bug, that not every + character can be escaped by `\` as required by RFC4627. There's a + contradiction between David Crockford's JSON checker test vectors (in + tests/fixtures) and RFC4627, though. I decided to stick to the RFC, because + the JSON checker seems to be a bit older than the RFC. + * Extended license to Ruby License, which includes the GPL. + * Added keyboard shortcuts, and 'Open location' menu item to edit_json.rb. + +## 2007-05-09 (1.0.4) + * Applied a patch from Yui NARUSE to make JSON compile + under Ruby 1.9. Thank you very much for mailing it to me! + * Made binary variants of JSON fail early, instead of falling back to the + pure version. This should avoid overshadowing of eventual problems while + loading of the binary. + +## 2007-03-24 (1.0.3) + * Improved performance of pure variant a bit. + * The ext variant of this release supports the mswin32 platform. Ugh! + +## 2007-03-24 (1.0.2) + * Ext Parser didn't parse 0e0 correctly into 0.0: Fixed! + +## 2007-03-24 (1.0.1) + * Forgot some object files in the build dir. I really like that - not! + +## 2007-03-24 (1.0.0) + * Added C implementations for the JSON generator and a ragel based JSON + parser in C. + * Much more tests, especially fixtures from json.org. + * Further improved conformance to RFC4627. + +## 2007-02-09 (0.4.3) + * Conform more to RFC4627 for JSON: This means JSON strings + now always must contain exactly one object `"{ ... }"` or array `"[ ... ]"` in + order to be parsed without raising an exception. The definition of what + constitutes a whitespace is narrower in JSON than in Ruby ([ \t\r\n]), and + there are differences in floats and integers (no octals or hexadecimals) as + well. + * Added aliases generate and `pretty_generate` of unparse and `pretty_unparse`. + * Fixed a test case. + * Catch an `Iconv::InvalidEncoding` exception, that seems to occur on some Sun + boxes with SunOS 5.8, if iconv doesn't support utf16 conversions. This was + reported by Andrew R Jackson , thanks a bunch! + +## 2006-08-25 (0.4.2) + * Fixed a bug in handling solidi (/-characters), that was reported by + Kevin Gilpin . + +## 2006-02-06 (0.4.1) + * Fixed a bug related to escaping with backslashes. Thanks for the report go + to Florian Munz . + +## 2005-09-23 (0.4.0) + * Initial Rubyforge Version diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/LICENSE b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/LICENSE new file mode 100644 index 0000000..426810a --- /dev/null +++ b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/LICENSE @@ -0,0 +1,56 @@ +Ruby is copyrighted free software by Yukihiro Matsumoto . +You can redistribute it and/or modify it under either the terms of the +2-clause BSDL (see the file BSDL), or the conditions below: + + 1. You may make and give away verbatim copies of the source form of the + software without restriction, provided that you duplicate all of the + original copyright notices and associated disclaimers. + + 2. You may modify your copy of the software in any way, provided that + you do at least ONE of the following: + + a) place your modifications in the Public Domain or otherwise + make them Freely Available, such as by posting said + modifications to Usenet or an equivalent medium, or by allowing + the author to include your modifications in the software. + + b) use the modified software only within your corporation or + organization. + + c) give non-standard binaries non-standard names, with + instructions on where to get the original software distribution. + + d) make other distribution arrangements with the author. + + 3. You may distribute the software in object code or binary form, + provided that you do at least ONE of the following: + + a) distribute the binaries and library files of the software, + together with instructions (in the manual page or equivalent) + on where to get the original distribution. + + b) accompany the distribution with the machine-readable source of + the software. + + c) give non-standard binaries non-standard names, with + instructions on where to get the original software distribution. + + d) make other distribution arrangements with the author. + + 4. You may modify and include the part of the software into any other + software (possibly commercial). But some files in the distribution + are not written by the author, so that they are not under these terms. + + For the list of those files and their copying conditions, see the + file LEGAL. + + 5. The scripts and library files supplied as input to or produced as + output from the software do not automatically fall under the + copyright of the software, but belong to whomever generated them, + and may be sold commercially, and may be aggregated with this + software. + + 6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE. diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/README.md b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/README.md new file mode 100644 index 0000000..288ccdf --- /dev/null +++ b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/README.md @@ -0,0 +1,425 @@ +# JSON implementation for Ruby + +[![CI](https://github.com/flori/json/actions/workflows/ci.yml/badge.svg)](https://github.com/flori/json/actions/workflows/ci.yml) + +## Description + +This is a implementation of the JSON specification according to RFC 7159 +http://www.ietf.org/rfc/rfc7159.txt . Starting from version 1.0.0 on there +will be two variants available: + +* A pure ruby variant, that relies on the iconv and the stringscan + extensions, which are both part of the ruby standard library. +* The quite a bit faster native extension variant, which is in parts + implemented in C or Java and comes with its own unicode conversion + functions and a parser generated by the ragel state machine compiler + http://www.complang.org/ragel/ . + +Both variants of the JSON generator generate UTF-8 character sequences by +default. If an :ascii\_only option with a true value is given, they escape all +non-ASCII and control characters with \uXXXX escape sequences, and support +UTF-16 surrogate pairs in order to be able to generate the whole range of +unicode code points. + +All strings, that are to be encoded as JSON strings, should be UTF-8 byte +sequences on the Ruby side. To encode raw binary strings, that aren't UTF-8 +encoded, please use the to\_json\_raw\_object method of String (which produces +an object, that contains a byte array) and decode the result on the receiving +endpoint. + +## Installation + +It's recommended to use the extension variant of JSON, because it's faster than +the pure ruby variant. If you cannot build it on your system, you can settle +for the latter. + +Just type into the command line as root: + +``` +# rake install +``` + +The above command will build the extensions and install them on your system. + +``` +# rake install_pure +``` + +or + +``` +# ruby install.rb +``` + +will just install the pure ruby implementation of JSON. + +If you use Rubygems you can type + +``` +# gem install json +``` + +instead, to install the newest JSON version. + +There is also a pure ruby json only variant of the gem, that can be installed +with: + +``` +# gem install json_pure +``` + +## Compiling the extensions yourself + +If you want to create the `parser.c` file from its `parser.rl` file or draw nice +graphviz images of the state machines, you need ragel from: +http://www.complang.org/ragel/ + +## Usage + +To use JSON you can + +```ruby +require 'json' +``` + +to load the installed variant (either the extension `'json'` or the pure +variant `'json_pure'`). If you have installed the extension variant, you can +pick either the extension variant or the pure variant by typing + +```ruby +require 'json/ext' +``` + +or + +```ruby +require 'json/pure' +``` + +Now you can parse a JSON document into a ruby data structure by calling + +```ruby +JSON.parse(document) +``` + +If you want to generate a JSON document from a ruby data structure call +```ruby +JSON.generate(data) +``` + +You can also use the `pretty_generate` method (which formats the output more +verbosely and nicely) or `fast_generate` (which doesn't do any of the security +checks generate performs, e. g. nesting deepness checks). + +There are also the JSON and JSON[] methods which use parse on a String or +generate a JSON document from an array or hash: + +```ruby +document = JSON 'test' => 23 # => "{\"test\":23}" +document = JSON['test' => 23] # => "{\"test\":23}" +``` + +and + +```ruby +data = JSON '{"test":23}' # => {"test"=>23} +data = JSON['{"test":23}'] # => {"test"=>23} +``` + +You can choose to load a set of common additions to ruby core's objects if +you + +```ruby +require 'json/add/core' +``` + +After requiring this you can, e. g., serialise/deserialise Ruby ranges: + +```ruby +JSON JSON(1..10) # => 1..10 +``` + +To find out how to add JSON support to other or your own classes, read the +section "More Examples" below. + +To get the best compatibility to rails' JSON implementation, you can + +```ruby +require 'json/add/rails' +``` + +Both of the additions attempt to require `'json'` (like above) first, if it has +not been required yet. + +## Serializing exceptions + +The JSON module doesn't extend `Exception` by default. If you convert an `Exception` +object to JSON, it will by default only include the exception message. + +To include the full details, you must either load the `json/add/core` mentioned +above, or specifically load the exception addition: + +```ruby +require 'json/add/exception' +``` + +## More Examples + +To create a JSON document from a ruby data structure, you can call +`JSON.generate` like that: + +```ruby +json = JSON.generate [1, 2, {"a"=>3.141}, false, true, nil, 4..10] +# => "[1,2,{\"a\":3.141},false,true,null,\"4..10\"]" +``` + +To get back a ruby data structure from a JSON document, you have to call +JSON.parse on it: + +```ruby +JSON.parse json +# => [1, 2, {"a"=>3.141}, false, true, nil, "4..10"] +``` + +Note, that the range from the original data structure is a simple +string now. The reason for this is, that JSON doesn't support ranges +or arbitrary classes. In this case the json library falls back to call +`Object#to_json`, which is the same as `#to_s.to_json`. + +It's possible to add JSON support serialization to arbitrary classes by +simply implementing a more specialized version of the `#to_json method`, that +should return a JSON object (a hash converted to JSON with `#to_json`) like +this (don't forget the `*a` for all the arguments): + +```ruby +class Range + def to_json(*a) + { + 'json_class' => self.class.name, # = 'Range' + 'data' => [ first, last, exclude_end? ] + }.to_json(*a) + end +end +``` + +The hash key `json_class` is the class, that will be asked to deserialise the +JSON representation later. In this case it's `Range`, but any namespace of +the form `A::B` or `::A::B` will do. All other keys are arbitrary and can be +used to store the necessary data to configure the object to be deserialised. + +If the key `json_class` is found in a JSON object, the JSON parser checks +if the given class responds to the `json_create` class method. If so, it is +called with the JSON object converted to a Ruby hash. So a range can +be deserialised by implementing `Range.json_create` like this: + +```ruby +class Range + def self.json_create(o) + new(*o['data']) + end +end +``` + +Now it possible to serialise/deserialise ranges as well: + +```ruby +json = JSON.generate [1, 2, {"a"=>3.141}, false, true, nil, 4..10] +# => "[1,2,{\"a\":3.141},false,true,null,{\"json_class\":\"Range\",\"data\":[4,10,false]}]" +JSON.parse json +# => [1, 2, {"a"=>3.141}, false, true, nil, 4..10] +json = JSON.generate [1, 2, {"a"=>3.141}, false, true, nil, 4..10] +# => "[1,2,{\"a\":3.141},false,true,null,{\"json_class\":\"Range\",\"data\":[4,10,false]}]" +JSON.parse json, :create_additions => true +# => [1, 2, {"a"=>3.141}, false, true, nil, 4..10] +``` + +`JSON.generate` always creates the shortest possible string representation of a +ruby data structure in one line. This is good for data storage or network +protocols, but not so good for humans to read. Fortunately there's also +`JSON.pretty_generate` (or `JSON.pretty_generate`) that creates a more readable +output: + +```ruby + puts JSON.pretty_generate([1, 2, {"a"=>3.141}, false, true, nil, 4..10]) + [ + 1, + 2, + { + "a": 3.141 + }, + false, + true, + null, + { + "json_class": "Range", + "data": [ + 4, + 10, + false + ] + } + ] +``` + +There are also the methods `Kernel#j` for generate, and `Kernel#jj` for +`pretty_generate` output to the console, that work analogous to Core Ruby's `p` and +the `pp` library's `pp` methods. + +The script `tools/server.rb` contains a small example if you want to test, how +receiving a JSON object from a webrick server in your browser with the +JavaScript prototype library http://www.prototypejs.org works. + +## Speed Comparisons + +I have created some benchmark results (see the benchmarks/data-p4-3Ghz +subdir of the package) for the JSON-parser to estimate the speed up in the C +extension: + +``` + Comparing times (call_time_mean): + 1 ParserBenchmarkExt#parser 900 repeats: + 553.922304770 ( real) -> 21.500x + 0.001805307 + 2 ParserBenchmarkYAML#parser 1000 repeats: + 224.513358139 ( real) -> 8.714x + 0.004454078 + 3 ParserBenchmarkPure#parser 1000 repeats: + 26.755020642 ( real) -> 1.038x + 0.037376163 + 4 ParserBenchmarkRails#parser 1000 repeats: + 25.763381731 ( real) -> 1.000x + 0.038814780 + calls/sec ( time) -> speed covers + secs/call +``` + +In the table above 1 is `JSON::Ext::Parser`, 2 is `YAML.load` with YAML +compatible JSON document, 3 is is `JSON::Pure::Parser`, and 4 is +`ActiveSupport::JSON.decode`. The ActiveSupport JSON-decoder converts the +input first to YAML and then uses the YAML-parser, the conversion seems to +slow it down so much that it is only as fast as the `JSON::Pure::Parser`! + +If you look at the benchmark data you can see that this is mostly caused by +the frequent high outliers - the median of the Rails-parser runs is still +overall smaller than the median of the `JSON::Pure::Parser` runs: + +``` + Comparing times (call_time_median): + 1 ParserBenchmarkExt#parser 900 repeats: + 800.592479481 ( real) -> 26.936x + 0.001249075 + 2 ParserBenchmarkYAML#parser 1000 repeats: + 271.002390644 ( real) -> 9.118x + 0.003690004 + 3 ParserBenchmarkRails#parser 1000 repeats: + 30.227910865 ( real) -> 1.017x + 0.033082008 + 4 ParserBenchmarkPure#parser 1000 repeats: + 29.722384421 ( real) -> 1.000x + 0.033644676 + calls/sec ( time) -> speed covers + secs/call +``` + +I have benchmarked the `JSON-Generator` as well. This generated a few more +values, because there are different modes that also influence the achieved +speed: + +``` + Comparing times (call_time_mean): + 1 GeneratorBenchmarkExt#generator_fast 1000 repeats: + 547.354332608 ( real) -> 15.090x + 0.001826970 + 2 GeneratorBenchmarkExt#generator_safe 1000 repeats: + 443.968212317 ( real) -> 12.240x + 0.002252414 + 3 GeneratorBenchmarkExt#generator_pretty 900 repeats: + 375.104545883 ( real) -> 10.341x + 0.002665923 + 4 GeneratorBenchmarkPure#generator_fast 1000 repeats: + 49.978706968 ( real) -> 1.378x + 0.020008521 + 5 GeneratorBenchmarkRails#generator 1000 repeats: + 38.531868759 ( real) -> 1.062x + 0.025952543 + 6 GeneratorBenchmarkPure#generator_safe 1000 repeats: + 36.927649925 ( real) -> 1.018x 7 (>=3859) + 0.027079979 + 7 GeneratorBenchmarkPure#generator_pretty 1000 repeats: + 36.272134441 ( real) -> 1.000x 6 (>=3859) + 0.027569373 + calls/sec ( time) -> speed covers + secs/call +``` + +In the table above 1-3 are `JSON::Ext::Generator` methods. 4, 6, and 7 are +`JSON::Pure::Generator` methods and 5 is the Rails JSON generator. It is now a +bit faster than the `generator_safe` and `generator_pretty` methods of the pure +variant but slower than the others. + +To achieve the fastest JSON document output, you can use the `fast_generate` +method. Beware, that this will disable the checking for circular Ruby data +structures, which may cause JSON to go into an infinite loop. + +Here are the median comparisons for completeness' sake: + +``` + Comparing times (call_time_median): + 1 GeneratorBenchmarkExt#generator_fast 1000 repeats: + 708.258020939 ( real) -> 16.547x + 0.001411915 + 2 GeneratorBenchmarkExt#generator_safe 1000 repeats: + 569.105020353 ( real) -> 13.296x + 0.001757145 + 3 GeneratorBenchmarkExt#generator_pretty 900 repeats: + 482.825371244 ( real) -> 11.280x + 0.002071142 + 4 GeneratorBenchmarkPure#generator_fast 1000 repeats: + 62.717626652 ( real) -> 1.465x + 0.015944481 + 5 GeneratorBenchmarkRails#generator 1000 repeats: + 43.965681162 ( real) -> 1.027x + 0.022745013 + 6 GeneratorBenchmarkPure#generator_safe 1000 repeats: + 43.929073409 ( real) -> 1.026x 7 (>=3859) + 0.022763968 + 7 GeneratorBenchmarkPure#generator_pretty 1000 repeats: + 42.802514491 ( real) -> 1.000x 6 (>=3859) + 0.023363113 + calls/sec ( time) -> speed covers + secs/call +``` + +## Development + +### Release + +Update the json.gemspec and json-java.gemspec. + +``` +rbenv shell 2.6.5 +rake build +gem push pkg/json-2.3.0.gem + +rbenv shell jruby-9.2.9.0 +rake build +gem push pkg/json-2.3.0-java.gem +``` + +## Author + +Florian Frank + +## License + +Ruby License, see https://www.ruby-lang.org/en/about/license.txt. + +## Download + +The latest version of this library can be downloaded at + +* https://rubygems.org/gems/json + +Online Documentation should be located at + +* https://www.rubydoc.info/gems/json diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/VERSION b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/VERSION new file mode 100644 index 0000000..ec1cf33 --- /dev/null +++ b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/VERSION @@ -0,0 +1 @@ +2.6.3 diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/Makefile b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/Makefile new file mode 100644 index 0000000..0cfb845 --- /dev/null +++ b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/Makefile @@ -0,0 +1,203 @@ + +SHELL = /bin/sh + +# V=0 quiet, V=1 verbose. other values don't work. +V = 0 +Q1 = $(V:1=) +Q = $(Q1:0=@) +ECHO1 = $(V:1=@ :) +ECHO = $(ECHO1:0=@ echo) +NULLCMD = : + +#### Start of system configuration section. #### + +srcdir = . +topdir = /opt/hostedtoolcache/Ruby/2.7.7/x64/include/ruby-2.7.0 +hdrdir = $(topdir) +arch_hdrdir = /opt/hostedtoolcache/Ruby/2.7.7/x64/include/ruby-2.7.0/x86_64-linux +PATH_SEPARATOR = : +VPATH = $(srcdir):$(arch_hdrdir)/ruby:$(hdrdir)/ruby +prefix = $(DESTDIR)/opt/hostedtoolcache/Ruby/2.7.7/x64 +rubysitearchprefix = $(rubylibprefix)/$(sitearch) +rubyarchprefix = $(rubylibprefix)/$(arch) +rubylibprefix = $(libdir)/$(RUBY_BASE_NAME) +exec_prefix = $(prefix) +vendorarchhdrdir = $(vendorhdrdir)/$(sitearch) +sitearchhdrdir = $(sitehdrdir)/$(sitearch) +rubyarchhdrdir = $(rubyhdrdir)/$(arch) +vendorhdrdir = $(rubyhdrdir)/vendor_ruby +sitehdrdir = $(rubyhdrdir)/site_ruby +rubyhdrdir = $(includedir)/$(RUBY_VERSION_NAME) +vendorarchdir = $(vendorlibdir)/$(sitearch) +vendorlibdir = $(vendordir)/$(ruby_version) +vendordir = $(rubylibprefix)/vendor_ruby +sitearchdir = $(DESTDIR)./.gem.20221206-1722-34paq +sitelibdir = $(DESTDIR)./.gem.20221206-1722-34paq +sitedir = $(rubylibprefix)/site_ruby +rubyarchdir = $(rubylibdir)/$(arch) +rubylibdir = $(rubylibprefix)/$(ruby_version) +sitearchincludedir = $(includedir)/$(sitearch) +archincludedir = $(includedir)/$(arch) +sitearchlibdir = $(libdir)/$(sitearch) +archlibdir = $(libdir)/$(arch) +ridir = $(datarootdir)/$(RI_BASE_NAME) +mandir = $(datarootdir)/man +localedir = $(datarootdir)/locale +libdir = $(exec_prefix)/lib +psdir = $(docdir) +pdfdir = $(docdir) +dvidir = $(docdir) +htmldir = $(docdir) +infodir = $(datarootdir)/info +docdir = $(datarootdir)/doc/$(PACKAGE) +oldincludedir = $(DESTDIR)/usr/include +includedir = $(prefix)/include +runstatedir = $(localstatedir)/run +localstatedir = $(prefix)/var +sharedstatedir = $(prefix)/com +sysconfdir = $(prefix)/etc +datadir = $(datarootdir) +datarootdir = $(prefix)/share +libexecdir = $(exec_prefix)/libexec +sbindir = $(exec_prefix)/sbin +bindir = $(exec_prefix)/bin +archdir = $(rubyarchdir) + + +CC_WRAPPER = +CC = gcc +CXX = g++ +LIBRUBY = $(LIBRUBY_SO) +LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a +LIBRUBYARG_SHARED = -Wl,-rpath,$(libdir) -L$(libdir) -l$(RUBY_SO_NAME) +LIBRUBYARG_STATIC = -Wl,-rpath,$(libdir) -L$(libdir) -l$(RUBY_SO_NAME)-static $(MAINLIBS) +empty = +OUTFLAG = -o $(empty) +COUTFLAG = -o $(empty) +CSRCFLAG = $(empty) + +RUBY_EXTCONF_H = +cflags = $(optflags) $(debugflags) $(warnflags) +cxxflags = +optflags = -O3 +debugflags = -ggdb3 +warnflags = -Wall -Wextra -Wdeprecated-declarations -Wduplicated-cond -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wwrite-strings -Wimplicit-fallthrough=0 -Wmissing-noreturn -Wno-cast-function-type -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-packed-bitfield-compat -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wsuggest-attribute=format -Wsuggest-attribute=noreturn -Wunused-variable +cppflags = +CCDLFLAGS = -fPIC +CFLAGS = $(CCDLFLAGS) -g -O2 -fPIC $(ARCH_FLAG) +INCFLAGS = -I. -I$(arch_hdrdir) -I$(hdrdir)/ruby/backward -I$(hdrdir) -I$(srcdir) +DEFS = +CPPFLAGS = -I/opt/hostedtoolcache/Ruby/2.7.7/x64/include -DENABLE_PATH_CHECK=0 $(DEFS) $(cppflags) +CXXFLAGS = $(CCDLFLAGS) -g -O2 $(ARCH_FLAG) +ldflags = -L. -L/opt/hostedtoolcache/Ruby/2.7.7/x64/lib -fstack-protector-strong -rdynamic -Wl,-export-dynamic +dldflags = -L/opt/hostedtoolcache/Ruby/2.7.7/x64/lib -Wl,--compress-debug-sections=zlib +ARCH_FLAG = +DLDFLAGS = $(ldflags) $(dldflags) $(ARCH_FLAG) +LDSHARED = $(CC) -shared +LDSHAREDXX = $(CXX) -shared +AR = ar +EXEEXT = + +RUBY_INSTALL_NAME = $(RUBY_BASE_NAME) +RUBY_SO_NAME = ruby +RUBYW_INSTALL_NAME = +RUBY_VERSION_NAME = $(RUBY_BASE_NAME)-$(ruby_version) +RUBYW_BASE_NAME = rubyw +RUBY_BASE_NAME = ruby + +arch = x86_64-linux +sitearch = $(arch) +ruby_version = 2.7.0 +ruby = $(bindir)/$(RUBY_BASE_NAME) +RUBY = $(ruby) +BUILTRUBY = $(bindir)/$(RUBY_BASE_NAME) +ruby_headers = $(hdrdir)/ruby.h $(hdrdir)/ruby/backward.h $(hdrdir)/ruby/ruby.h $(hdrdir)/ruby/defines.h $(hdrdir)/ruby/missing.h $(hdrdir)/ruby/intern.h $(hdrdir)/ruby/st.h $(hdrdir)/ruby/subst.h $(arch_hdrdir)/ruby/config.h + +RM = rm -f +RM_RF = $(RUBY) -run -e rm -- -rf +RMDIRS = rmdir --ignore-fail-on-non-empty -p +MAKEDIRS = /usr/bin/mkdir -p +INSTALL = /usr/bin/install -c +INSTALL_PROG = $(INSTALL) -m 0755 +INSTALL_DATA = $(INSTALL) -m 644 +COPY = cp +TOUCH = exit > + +#### End of system configuration section. #### + +preload = +libpath = . $(libdir) +LIBPATH = -L. -L$(libdir) -Wl,-rpath,$(libdir) +DEFFILE = + +CLEANFILES = mkmf.log +DISTCLEANFILES = +DISTCLEANDIRS = + +extout = +extout_prefix = +target_prefix = +LOCAL_LIBS = +LIBS = $(LIBRUBYARG_SHARED) -lm -lc +ORIG_SRCS = +SRCS = $(ORIG_SRCS) +OBJS = +HDRS = +LOCAL_HDRS = +TARGET = +TARGET_NAME = +TARGET_ENTRY = Init_$(TARGET_NAME) +DLLIB = +EXTSTATIC = +STATIC_LIB = + +TIMESTAMP_DIR = . +BINDIR = $(bindir) +RUBYCOMMONDIR = $(sitedir)$(target_prefix) +RUBYLIBDIR = $(sitelibdir)$(target_prefix) +RUBYARCHDIR = $(sitearchdir)$(target_prefix) +HDRDIR = $(rubyhdrdir)/ruby$(target_prefix) +ARCHHDRDIR = $(rubyhdrdir)/$(arch)/ruby$(target_prefix) +TARGET_SO_DIR = +TARGET_SO = $(TARGET_SO_DIR)$(DLLIB) +CLEANLIBS = +CLEANOBJS = *.o *.bak + +all: Makefile +static: $(STATIC_LIB) +.PHONY: all install static install-so install-rb +.PHONY: clean clean-so clean-static clean-rb + +clean-static:: +clean-rb-default:: +clean-rb:: +clean-so:: +clean: clean-so clean-static clean-rb-default clean-rb + -$(Q)$(RM) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES) .*.time + +distclean-rb-default:: +distclean-rb:: +distclean-so:: +distclean-static:: +distclean: clean distclean-so distclean-static distclean-rb-default distclean-rb + -$(Q)$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log + -$(Q)$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES) + -$(Q)$(RMDIRS) $(DISTCLEANDIRS) 2> /dev/null || true + +realclean: distclean +install: install-so install-rb + +install-so: Makefile +install-rb: pre-install-rb do-install-rb install-rb-default +install-rb-default: pre-install-rb-default do-install-rb-default +pre-install-rb: Makefile +pre-install-rb-default: Makefile +do-install-rb: +do-install-rb-default: +pre-install-rb-default: + @$(NULLCMD) + +site-install: site-install-so site-install-rb +site-install-so: install-so +site-install-rb: install-rb + diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/fbuffer/fbuffer.h b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/fbuffer/fbuffer.h new file mode 100644 index 0000000..dc8f406 --- /dev/null +++ b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/fbuffer/fbuffer.h @@ -0,0 +1,187 @@ + +#ifndef _FBUFFER_H_ +#define _FBUFFER_H_ + +#include "ruby.h" + +#ifndef RHASH_SIZE +#define RHASH_SIZE(hsh) (RHASH(hsh)->tbl->num_entries) +#endif + +#ifndef RFLOAT_VALUE +#define RFLOAT_VALUE(val) (RFLOAT(val)->value) +#endif + +#ifndef RARRAY_LEN +#define RARRAY_LEN(ARRAY) RARRAY(ARRAY)->len +#endif +#ifndef RSTRING_PTR +#define RSTRING_PTR(string) RSTRING(string)->ptr +#endif +#ifndef RSTRING_LEN +#define RSTRING_LEN(string) RSTRING(string)->len +#endif + +#ifdef PRIsVALUE +# define RB_OBJ_CLASSNAME(obj) rb_obj_class(obj) +# define RB_OBJ_STRING(obj) (obj) +#else +# define PRIsVALUE "s" +# define RB_OBJ_CLASSNAME(obj) rb_obj_classname(obj) +# 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 +#define RB_GC_GUARD(object) +#endif + +typedef struct FBufferStruct { + unsigned long initial_length; + char *ptr; + unsigned long len; + unsigned long capa; +} FBuffer; + +#define FBUFFER_INITIAL_LENGTH_DEFAULT 1024 + +#define FBUFFER_PTR(fb) (fb->ptr) +#define FBUFFER_LEN(fb) (fb->len) +#define FBUFFER_CAPA(fb) (fb->capa) +#define FBUFFER_PAIR(fb) FBUFFER_PTR(fb), FBUFFER_LEN(fb) + +static FBuffer *fbuffer_alloc(unsigned long initial_length); +static void fbuffer_free(FBuffer *fb); +static void fbuffer_clear(FBuffer *fb); +static void fbuffer_append(FBuffer *fb, const char *newstr, unsigned long len); +#ifdef JSON_GENERATOR +static void fbuffer_append_long(FBuffer *fb, long number); +#endif +static void fbuffer_append_char(FBuffer *fb, char newchr); +#ifdef JSON_GENERATOR +static FBuffer *fbuffer_dup(FBuffer *fb); +static VALUE fbuffer_to_s(FBuffer *fb); +#endif + +static FBuffer *fbuffer_alloc(unsigned long initial_length) +{ + FBuffer *fb; + if (initial_length <= 0) initial_length = FBUFFER_INITIAL_LENGTH_DEFAULT; + fb = ALLOC(FBuffer); + memset((void *) fb, 0, sizeof(FBuffer)); + fb->initial_length = initial_length; + return fb; +} + +static void fbuffer_free(FBuffer *fb) +{ + if (fb->ptr) ruby_xfree(fb->ptr); + ruby_xfree(fb); +} + +static void fbuffer_clear(FBuffer *fb) +{ + fb->len = 0; +} + +static void fbuffer_inc_capa(FBuffer *fb, unsigned long requested) +{ + unsigned long required; + + if (!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); + + if (required > fb->capa) { + REALLOC_N(fb->ptr, char, required); + fb->capa = required; + } +} + +static void fbuffer_append(FBuffer *fb, const char *newstr, unsigned long len) +{ + if (len > 0) { + fbuffer_inc_capa(fb, len); + MEMCPY(fb->ptr + fb->len, newstr, char, len); + fb->len += len; + } +} + +#ifdef JSON_GENERATOR +static void fbuffer_append_str(FBuffer *fb, VALUE str) +{ + const char *newstr = StringValuePtr(str); + unsigned long len = RSTRING_LEN(str); + + RB_GC_GUARD(str); + + fbuffer_append(fb, newstr, len); +} +#endif + +static void fbuffer_append_char(FBuffer *fb, char newchr) +{ + fbuffer_inc_capa(fb, 1); + *(fb->ptr + fb->len) = newchr; + fb->len++; +} + +#ifdef JSON_GENERATOR +static void freverse(char *start, char *end) +{ + char c; + + while (end > start) { + c = *end, *end-- = *start, *start++ = c; + } +} + +static long fltoa(long number, char *buf) +{ + static char digits[] = "0123456789"; + long sign = number; + char* tmp = buf; + + if (sign < 0) number = -number; + do *tmp++ = digits[number % 10]; while (number /= 10); + if (sign < 0) *tmp++ = '-'; + freverse(buf, tmp - 1); + return tmp - buf; +} + +static void fbuffer_append_long(FBuffer *fb, long number) +{ + char buf[20]; + unsigned long len = fltoa(number, buf); + fbuffer_append(fb, buf, len); +} + +static FBuffer *fbuffer_dup(FBuffer *fb) +{ + unsigned long len = fb->len; + FBuffer *result; + + result = fbuffer_alloc(len); + fbuffer_append(result, FBUFFER_PAIR(fb)); + return result; +} + +static VALUE fbuffer_to_s(FBuffer *fb) +{ + VALUE result = rb_str_new(FBUFFER_PTR(fb), FBUFFER_LEN(fb)); + fbuffer_free(fb); + FORCE_UTF8(result); + return result; +} +#endif +#endif diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/generator/.sitearchdir.-.json.-.ext.time b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/generator/.sitearchdir.-.json.-.ext.time new file mode 100644 index 0000000..e69de29 diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/generator/Makefile b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/generator/Makefile new file mode 100644 index 0000000..b361731 --- /dev/null +++ b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/generator/Makefile @@ -0,0 +1,268 @@ + +SHELL = /bin/sh + +# V=0 quiet, V=1 verbose. other values don't work. +V = 0 +Q1 = $(V:1=) +Q = $(Q1:0=@) +ECHO1 = $(V:1=@ :) +ECHO = $(ECHO1:0=@ echo) +NULLCMD = : + +#### Start of system configuration section. #### + +srcdir = . +topdir = /opt/hostedtoolcache/Ruby/2.7.7/x64/include/ruby-2.7.0 +hdrdir = $(topdir) +arch_hdrdir = /opt/hostedtoolcache/Ruby/2.7.7/x64/include/ruby-2.7.0/x86_64-linux +PATH_SEPARATOR = : +VPATH = $(srcdir):$(arch_hdrdir)/ruby:$(hdrdir)/ruby +prefix = $(DESTDIR)/opt/hostedtoolcache/Ruby/2.7.7/x64 +rubysitearchprefix = $(rubylibprefix)/$(sitearch) +rubyarchprefix = $(rubylibprefix)/$(arch) +rubylibprefix = $(libdir)/$(RUBY_BASE_NAME) +exec_prefix = $(prefix) +vendorarchhdrdir = $(vendorhdrdir)/$(sitearch) +sitearchhdrdir = $(sitehdrdir)/$(sitearch) +rubyarchhdrdir = $(rubyhdrdir)/$(arch) +vendorhdrdir = $(rubyhdrdir)/vendor_ruby +sitehdrdir = $(rubyhdrdir)/site_ruby +rubyhdrdir = $(includedir)/$(RUBY_VERSION_NAME) +vendorarchdir = $(vendorlibdir)/$(sitearch) +vendorlibdir = $(vendordir)/$(ruby_version) +vendordir = $(rubylibprefix)/vendor_ruby +sitearchdir = $(DESTDIR)./.gem.20221206-1722-1uxqcka +sitelibdir = $(DESTDIR)./.gem.20221206-1722-1uxqcka +sitedir = $(rubylibprefix)/site_ruby +rubyarchdir = $(rubylibdir)/$(arch) +rubylibdir = $(rubylibprefix)/$(ruby_version) +sitearchincludedir = $(includedir)/$(sitearch) +archincludedir = $(includedir)/$(arch) +sitearchlibdir = $(libdir)/$(sitearch) +archlibdir = $(libdir)/$(arch) +ridir = $(datarootdir)/$(RI_BASE_NAME) +mandir = $(datarootdir)/man +localedir = $(datarootdir)/locale +libdir = $(exec_prefix)/lib +psdir = $(docdir) +pdfdir = $(docdir) +dvidir = $(docdir) +htmldir = $(docdir) +infodir = $(datarootdir)/info +docdir = $(datarootdir)/doc/$(PACKAGE) +oldincludedir = $(DESTDIR)/usr/include +includedir = $(prefix)/include +runstatedir = $(localstatedir)/run +localstatedir = $(prefix)/var +sharedstatedir = $(prefix)/com +sysconfdir = $(prefix)/etc +datadir = $(datarootdir) +datarootdir = $(prefix)/share +libexecdir = $(exec_prefix)/libexec +sbindir = $(exec_prefix)/sbin +bindir = $(exec_prefix)/bin +archdir = $(rubyarchdir) + + +CC_WRAPPER = +CC = gcc +CXX = g++ +LIBRUBY = $(LIBRUBY_SO) +LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a +LIBRUBYARG_SHARED = -Wl,-rpath,$(libdir) -L$(libdir) -l$(RUBY_SO_NAME) +LIBRUBYARG_STATIC = -Wl,-rpath,$(libdir) -L$(libdir) -l$(RUBY_SO_NAME)-static $(MAINLIBS) +empty = +OUTFLAG = -o $(empty) +COUTFLAG = -o $(empty) +CSRCFLAG = $(empty) + +RUBY_EXTCONF_H = +cflags = $(optflags) $(debugflags) $(warnflags) +cxxflags = +optflags = -O3 +debugflags = -ggdb3 +warnflags = -Wall -Wextra -Wdeprecated-declarations -Wduplicated-cond -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wwrite-strings -Wimplicit-fallthrough=0 -Wmissing-noreturn -Wno-cast-function-type -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-packed-bitfield-compat -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wsuggest-attribute=format -Wsuggest-attribute=noreturn -Wunused-variable +cppflags = +CCDLFLAGS = -fPIC +CFLAGS = $(CCDLFLAGS) -g -O2 -fPIC $(ARCH_FLAG) +INCFLAGS = -I. -I$(arch_hdrdir) -I$(hdrdir)/ruby/backward -I$(hdrdir) -I$(srcdir) +DEFS = +CPPFLAGS = -DJSON_GENERATOR -I/opt/hostedtoolcache/Ruby/2.7.7/x64/include -DENABLE_PATH_CHECK=0 $(DEFS) $(cppflags) +CXXFLAGS = $(CCDLFLAGS) -g -O2 $(ARCH_FLAG) +ldflags = -L. -L/opt/hostedtoolcache/Ruby/2.7.7/x64/lib -fstack-protector-strong -rdynamic -Wl,-export-dynamic +dldflags = -L/opt/hostedtoolcache/Ruby/2.7.7/x64/lib -Wl,--compress-debug-sections=zlib +ARCH_FLAG = +DLDFLAGS = $(ldflags) $(dldflags) $(ARCH_FLAG) +LDSHARED = $(CC) -shared +LDSHAREDXX = $(CXX) -shared +AR = ar +EXEEXT = + +RUBY_INSTALL_NAME = $(RUBY_BASE_NAME) +RUBY_SO_NAME = ruby +RUBYW_INSTALL_NAME = +RUBY_VERSION_NAME = $(RUBY_BASE_NAME)-$(ruby_version) +RUBYW_BASE_NAME = rubyw +RUBY_BASE_NAME = ruby + +arch = x86_64-linux +sitearch = $(arch) +ruby_version = 2.7.0 +ruby = $(bindir)/$(RUBY_BASE_NAME) +RUBY = $(ruby) +BUILTRUBY = $(bindir)/$(RUBY_BASE_NAME) +ruby_headers = $(hdrdir)/ruby.h $(hdrdir)/ruby/backward.h $(hdrdir)/ruby/ruby.h $(hdrdir)/ruby/defines.h $(hdrdir)/ruby/missing.h $(hdrdir)/ruby/intern.h $(hdrdir)/ruby/st.h $(hdrdir)/ruby/subst.h $(arch_hdrdir)/ruby/config.h + +RM = rm -f +RM_RF = $(RUBY) -run -e rm -- -rf +RMDIRS = rmdir --ignore-fail-on-non-empty -p +MAKEDIRS = /usr/bin/mkdir -p +INSTALL = /usr/bin/install -c +INSTALL_PROG = $(INSTALL) -m 0755 +INSTALL_DATA = $(INSTALL) -m 644 +COPY = cp +TOUCH = exit > + +#### End of system configuration section. #### + +preload = +libpath = . $(libdir) +LIBPATH = -L. -L$(libdir) -Wl,-rpath,$(libdir) +DEFFILE = + +CLEANFILES = mkmf.log +DISTCLEANFILES = +DISTCLEANDIRS = + +extout = +extout_prefix = +target_prefix = /json/ext +LOCAL_LIBS = +LIBS = $(LIBRUBYARG_SHARED) -lm -lc +ORIG_SRCS = generator.c +SRCS = $(ORIG_SRCS) +OBJS = generator.o +HDRS = $(srcdir)/generator.h +LOCAL_HDRS = +TARGET = generator +TARGET_NAME = generator +TARGET_ENTRY = Init_$(TARGET_NAME) +DLLIB = $(TARGET).so +EXTSTATIC = +STATIC_LIB = + +TIMESTAMP_DIR = . +BINDIR = $(bindir) +RUBYCOMMONDIR = $(sitedir)$(target_prefix) +RUBYLIBDIR = $(sitelibdir)$(target_prefix) +RUBYARCHDIR = $(sitearchdir)$(target_prefix) +HDRDIR = $(rubyhdrdir)/ruby$(target_prefix) +ARCHHDRDIR = $(rubyhdrdir)/$(arch)/ruby$(target_prefix) +TARGET_SO_DIR = +TARGET_SO = $(TARGET_SO_DIR)$(DLLIB) +CLEANLIBS = $(TARGET_SO) +CLEANOBJS = *.o *.bak + +all: $(DLLIB) +static: $(STATIC_LIB) +.PHONY: all install static install-so install-rb +.PHONY: clean clean-so clean-static clean-rb + +clean-static:: +clean-rb-default:: +clean-rb:: +clean-so:: +clean: clean-so clean-static clean-rb-default clean-rb + -$(Q)$(RM) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES) .*.time + +distclean-rb-default:: +distclean-rb:: +distclean-so:: +distclean-static:: +distclean: clean distclean-so distclean-static distclean-rb-default distclean-rb + -$(Q)$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log + -$(Q)$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES) + -$(Q)$(RMDIRS) $(DISTCLEANDIRS) 2> /dev/null || true + +realclean: distclean +install: install-so install-rb + +install-so: $(DLLIB) $(TIMESTAMP_DIR)/.sitearchdir.-.json.-.ext.time + $(INSTALL_PROG) $(DLLIB) $(RUBYARCHDIR) +clean-static:: + -$(Q)$(RM) $(STATIC_LIB) +install-rb: pre-install-rb do-install-rb install-rb-default +install-rb-default: pre-install-rb-default do-install-rb-default +pre-install-rb: Makefile +pre-install-rb-default: Makefile +do-install-rb: +do-install-rb-default: +pre-install-rb-default: + @$(NULLCMD) +$(TIMESTAMP_DIR)/.sitearchdir.-.json.-.ext.time: + $(Q) $(MAKEDIRS) $(@D) $(RUBYARCHDIR) + $(Q) $(TOUCH) $@ + +site-install: site-install-so site-install-rb +site-install-so: install-so +site-install-rb: install-rb + +.SUFFIXES: .c .m .cc .mm .cxx .cpp .o .S + +.cc.o: + $(ECHO) compiling $(<) + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$< + +.cc.S: + $(ECHO) translating $(<) + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$< + +.mm.o: + $(ECHO) compiling $(<) + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$< + +.mm.S: + $(ECHO) translating $(<) + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$< + +.cxx.o: + $(ECHO) compiling $(<) + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$< + +.cxx.S: + $(ECHO) translating $(<) + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$< + +.cpp.o: + $(ECHO) compiling $(<) + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$< + +.cpp.S: + $(ECHO) translating $(<) + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$< + +.c.o: + $(ECHO) compiling $(<) + $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$< + +.c.S: + $(ECHO) translating $(<) + $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$< + +.m.o: + $(ECHO) compiling $(<) + $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$< + +.m.S: + $(ECHO) translating $(<) + $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$< + +$(TARGET_SO): $(OBJS) Makefile + $(ECHO) linking shared-object json/ext/$(DLLIB) + -$(Q)$(RM) $(@) + $(Q) $(LDSHARED) -o $@ $(OBJS) $(LIBPATH) $(DLDFLAGS) $(LOCAL_LIBS) $(LIBS) + + + +### +generator.o: generator.c generator.h $(srcdir)/../fbuffer/fbuffer.h diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/generator/depend b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/generator/depend new file mode 100644 index 0000000..1a042a2 --- /dev/null +++ b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/generator/depend @@ -0,0 +1 @@ +generator.o: generator.c generator.h $(srcdir)/../fbuffer/fbuffer.h diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/generator/extconf.rb b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/generator/extconf.rb new file mode 100644 index 0000000..8627c5f --- /dev/null +++ b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/generator/extconf.rb @@ -0,0 +1,4 @@ +require 'mkmf' + +$defs << "-DJSON_GENERATOR" +create_makefile 'json/ext/generator' diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/generator/generator.c b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/generator/generator.c new file mode 100644 index 0000000..98d0ea4 --- /dev/null +++ b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/generator/generator.c @@ -0,0 +1,1608 @@ +#include "../fbuffer/fbuffer.h" +#include "generator.h" + +static VALUE mJSON, mExt, mGenerator, cState, mGeneratorMethods, mObject, + mHash, mArray, +#ifdef RUBY_INTEGER_UNIFICATION + mInteger, +#else + mFixnum, mBignum, +#endif + mFloat, mString, mString_Extend, + mTrueClass, mFalseClass, mNilClass, eGeneratorError, + eNestingError; + +static ID i_to_s, i_to_json, i_new, i_indent, i_space, i_space_before, + i_object_nl, i_array_nl, i_max_nesting, i_allow_nan, i_ascii_only, + i_pack, i_unpack, i_create_id, i_extend, i_key_p, + i_aref, i_send, i_respond_to_p, i_match, i_keys, i_depth, + i_buffer_initial_length, i_dup, i_escape_slash; + +/* + * Copyright 2001-2004 Unicode, Inc. + * + * Disclaimer + * + * 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. + * + * Limitations on Rights to Redistribute This Code + * + * 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. + */ +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) +{ + 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]; +} + +/* 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); +} + +/* 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 escape_slash) +{ + const UTF8 *source = (UTF8 *) RSTRING_PTR(string); + const UTF8 *sourceEnd = source + RSTRING_LEN(string); + char buf[6] = { '\\', 'u' }; + + 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]; + + 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 */ + 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(escape_slash) { + 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; + } + } + } + } 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)); + } + } + 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 escape_slash) +{ + 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(escape_slash) { + escape = "\\/"; + escape_len = 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 (!isLegalUTF8((UTF8 *) p, clen)) { + rb_raise(rb_path2class("JSON::GeneratorError"), + "source sequence is illegal/malformed utf-8"); + } + } + end += clen; + } + continue; + break; + } + } + fbuffer_append(buffer, ptr + start, end - start); + fbuffer_append(buffer, escape, escape_len); + start = ++end; + escape = NULL; + } + fbuffer_append(buffer, ptr + start, end - start); +} + +static char *fstrndup(const char *ptr, unsigned long len) { + char *result; + if (len <= 0) return NULL; + result = ALLOC_N(char, len); + memcpy(result, ptr, len); + return result; +} + +/* + * Document-module: JSON::Ext::Generator + * + * This is the JSON generator implemented as a C extension. It can be + * configured to be used by setting + * + * JSON.generator = JSON::Ext::Generator + * + * with the method generator= in JSON. + * + */ + +/* Explanation of the following: that's the only way to not pollute + * standard library's docs with GeneratorMethods:: which + * are uninformative and take a large place in a list of classes + */ + +/* + * Document-module: JSON::Ext::Generator::GeneratorMethods + * :nodoc: + */ + +/* + * Document-module: JSON::Ext::Generator::GeneratorMethods::Array + * :nodoc: + */ + +/* + * Document-module: JSON::Ext::Generator::GeneratorMethods::Bignum + * :nodoc: + */ + +/* + * Document-module: JSON::Ext::Generator::GeneratorMethods::FalseClass + * :nodoc: + */ + +/* + * Document-module: JSON::Ext::Generator::GeneratorMethods::Fixnum + * :nodoc: + */ + +/* + * Document-module: JSON::Ext::Generator::GeneratorMethods::Float + * :nodoc: + */ + +/* + * Document-module: JSON::Ext::Generator::GeneratorMethods::Hash + * :nodoc: + */ + +/* + * Document-module: JSON::Ext::Generator::GeneratorMethods::Integer + * :nodoc: + */ + +/* + * Document-module: JSON::Ext::Generator::GeneratorMethods::NilClass + * :nodoc: + */ + +/* + * Document-module: JSON::Ext::Generator::GeneratorMethods::Object + * :nodoc: + */ + +/* + * Document-module: JSON::Ext::Generator::GeneratorMethods::String + * :nodoc: + */ + +/* + * Document-module: JSON::Ext::Generator::GeneratorMethods::String::Extend + * :nodoc: + */ + +/* + * Document-module: JSON::Ext::Generator::GeneratorMethods::TrueClass + * :nodoc: + */ + +/* + * call-seq: to_json(state = nil) + * + * Returns a JSON string containing a JSON object, that is generated from + * this Hash instance. + * _state_ is a JSON::State object, that can also be used to configure the + * produced JSON string output further. + */ +static VALUE mHash_to_json(int argc, VALUE *argv, VALUE self) +{ + GENERATE_JSON(object); +} + +/* + * call-seq: to_json(state = nil) + * + * Returns a JSON string containing a JSON array, that is generated from + * this Array instance. + * _state_ is a JSON::State object, that can also be used to configure the + * produced JSON string output further. + */ +static VALUE mArray_to_json(int argc, VALUE *argv, VALUE self) { + GENERATE_JSON(array); +} + +#ifdef RUBY_INTEGER_UNIFICATION +/* + * call-seq: to_json(*) + * + * Returns a JSON string representation for this Integer number. + */ +static VALUE mInteger_to_json(int argc, VALUE *argv, VALUE self) +{ + GENERATE_JSON(integer); +} + +#else +/* + * call-seq: to_json(*) + * + * Returns a JSON string representation for this Integer number. + */ +static VALUE mFixnum_to_json(int argc, VALUE *argv, VALUE self) +{ + GENERATE_JSON(fixnum); +} + +/* + * call-seq: to_json(*) + * + * Returns a JSON string representation for this Integer number. + */ +static VALUE mBignum_to_json(int argc, VALUE *argv, VALUE self) +{ + GENERATE_JSON(bignum); +} +#endif + +/* + * call-seq: to_json(*) + * + * Returns a JSON string representation for this Float number. + */ +static VALUE mFloat_to_json(int argc, VALUE *argv, VALUE self) +{ + GENERATE_JSON(float); +} + +/* + * call-seq: String.included(modul) + * + * Extends _modul_ with the String::Extend module. + */ +static VALUE mString_included_s(VALUE self, VALUE modul) { + VALUE result = rb_funcall(modul, i_extend, 1, mString_Extend); + return result; +} + +/* + * call-seq: to_json(*) + * + * This string should be encoded with UTF-8 A call to this method + * returns a JSON string encoded with UTF16 big endian characters as + * \u????. + */ +static VALUE mString_to_json(int argc, VALUE *argv, VALUE self) +{ + GENERATE_JSON(string); +} + +/* + * call-seq: to_json_raw_object() + * + * This method creates a raw object hash, that can be nested into + * other data structures and will be generated as a raw string. This + * method should be used, if you want to convert raw strings to JSON + * instead of UTF-8 strings, e. g. binary data. + */ +static VALUE mString_to_json_raw_object(VALUE self) +{ + VALUE ary; + VALUE result = rb_hash_new(); + rb_hash_aset(result, rb_funcall(mJSON, i_create_id, 0), rb_class_name(rb_obj_class(self))); + ary = rb_funcall(self, i_unpack, 1, rb_str_new2("C*")); + rb_hash_aset(result, rb_str_new2("raw"), ary); + return result; +} + +/* + * call-seq: to_json_raw(*args) + * + * This method creates a JSON text from the result of a call to + * to_json_raw_object of this String. + */ +static VALUE mString_to_json_raw(int argc, VALUE *argv, VALUE self) +{ + VALUE obj = mString_to_json_raw_object(self); + Check_Type(obj, T_HASH); + return mHash_to_json(argc, argv, obj); +} + +/* + * call-seq: json_create(o) + * + * Raw Strings are JSON Objects (the raw bytes are stored in an array for the + * key "raw"). The Ruby String can be created by this module method. + */ +static VALUE mString_Extend_json_create(VALUE self, VALUE o) +{ + VALUE ary; + Check_Type(o, T_HASH); + ary = rb_hash_aref(o, rb_str_new2("raw")); + return rb_funcall(ary, i_pack, 1, rb_str_new2("C*")); +} + +/* + * call-seq: to_json(*) + * + * Returns a JSON string for true: 'true'. + */ +static VALUE mTrueClass_to_json(int argc, VALUE *argv, VALUE self) +{ + GENERATE_JSON(true); +} + +/* + * call-seq: to_json(*) + * + * Returns a JSON string for false: 'false'. + */ +static VALUE mFalseClass_to_json(int argc, VALUE *argv, VALUE self) +{ + GENERATE_JSON(false); +} + +/* + * call-seq: to_json(*) + * + * Returns a JSON string for nil: 'null'. + */ +static VALUE mNilClass_to_json(int argc, VALUE *argv, VALUE self) +{ + GENERATE_JSON(null); +} + +/* + * call-seq: to_json(*) + * + * Converts this object to a string (calling #to_s), converts + * it to a JSON string, and returns the result. This is a fallback, if no + * special method #to_json was defined for some object. + */ +static VALUE mObject_to_json(int argc, VALUE *argv, VALUE self) +{ + VALUE state; + VALUE string = rb_funcall(self, i_to_s, 0); + rb_scan_args(argc, argv, "01", &state); + Check_Type(string, T_STRING); + state = cState_from_state_s(cState, state); + return cState_partial_generate(state, string); +} + +static void State_free(void *ptr) +{ + JSON_Generator_State *state = ptr; + if (state->indent) ruby_xfree(state->indent); + if (state->space) ruby_xfree(state->space); + if (state->space_before) ruby_xfree(state->space_before); + if (state->object_nl) ruby_xfree(state->object_nl); + if (state->array_nl) ruby_xfree(state->array_nl); + if (state->array_delim) fbuffer_free(state->array_delim); + if (state->object_delim) fbuffer_free(state->object_delim); + if (state->object_delim2) fbuffer_free(state->object_delim2); + ruby_xfree(state); +} + +static size_t State_memsize(const void *ptr) +{ + const JSON_Generator_State *state = ptr; + size_t size = sizeof(*state); + if (state->indent) size += state->indent_len + 1; + if (state->space) size += state->space_len + 1; + if (state->space_before) size += state->space_before_len + 1; + if (state->object_nl) size += state->object_nl_len + 1; + if (state->array_nl) size += state->array_nl_len + 1; + if (state->array_delim) size += FBUFFER_CAPA(state->array_delim); + if (state->object_delim) size += FBUFFER_CAPA(state->object_delim); + if (state->object_delim2) size += FBUFFER_CAPA(state->object_delim2); + return size; +} + +#ifndef HAVE_RB_EXT_RACTOR_SAFE +# undef RUBY_TYPED_FROZEN_SHAREABLE +# define RUBY_TYPED_FROZEN_SHAREABLE 0 +#endif + +#ifdef NEW_TYPEDDATA_WRAPPER +static const rb_data_type_t JSON_Generator_State_type = { + "JSON/Generator/State", + {NULL, State_free, State_memsize,}, +#ifdef RUBY_TYPED_FREE_IMMEDIATELY + 0, 0, + RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_FROZEN_SHAREABLE, +#endif +}; +#endif + +static VALUE cState_s_allocate(VALUE klass) +{ + JSON_Generator_State *state; + return TypedData_Make_Struct(klass, JSON_Generator_State, + &JSON_Generator_State_type, state); +} + +/* + * call-seq: configure(opts) + * + * Configure this State instance with the Hash _opts_, and return + * itself. + */ +static VALUE cState_configure(VALUE self, VALUE opts) +{ + VALUE tmp; + GET_STATE(self); + tmp = rb_check_convert_type(opts, T_HASH, "Hash", "to_hash"); + if (NIL_P(tmp)) tmp = rb_convert_type(opts, T_HASH, "Hash", "to_h"); + opts = tmp; + tmp = rb_hash_aref(opts, ID2SYM(i_indent)); + if (RTEST(tmp)) { + unsigned long len; + Check_Type(tmp, T_STRING); + len = RSTRING_LEN(tmp); + state->indent = fstrndup(RSTRING_PTR(tmp), len + 1); + state->indent_len = len; + } + tmp = rb_hash_aref(opts, ID2SYM(i_space)); + if (RTEST(tmp)) { + unsigned long len; + Check_Type(tmp, T_STRING); + len = RSTRING_LEN(tmp); + state->space = fstrndup(RSTRING_PTR(tmp), len + 1); + state->space_len = len; + } + tmp = rb_hash_aref(opts, ID2SYM(i_space_before)); + if (RTEST(tmp)) { + unsigned long len; + Check_Type(tmp, T_STRING); + len = RSTRING_LEN(tmp); + state->space_before = fstrndup(RSTRING_PTR(tmp), len + 1); + state->space_before_len = len; + } + tmp = rb_hash_aref(opts, ID2SYM(i_array_nl)); + if (RTEST(tmp)) { + unsigned long len; + Check_Type(tmp, T_STRING); + len = RSTRING_LEN(tmp); + state->array_nl = fstrndup(RSTRING_PTR(tmp), len + 1); + state->array_nl_len = len; + } + tmp = rb_hash_aref(opts, ID2SYM(i_object_nl)); + if (RTEST(tmp)) { + unsigned long len; + Check_Type(tmp, T_STRING); + len = RSTRING_LEN(tmp); + state->object_nl = fstrndup(RSTRING_PTR(tmp), len + 1); + state->object_nl_len = len; + } + tmp = ID2SYM(i_max_nesting); + state->max_nesting = 100; + if (option_given_p(opts, tmp)) { + VALUE max_nesting = rb_hash_aref(opts, tmp); + if (RTEST(max_nesting)) { + Check_Type(max_nesting, T_FIXNUM); + state->max_nesting = FIX2LONG(max_nesting); + } else { + state->max_nesting = 0; + } + } + tmp = ID2SYM(i_depth); + state->depth = 0; + if (option_given_p(opts, tmp)) { + VALUE depth = rb_hash_aref(opts, tmp); + if (RTEST(depth)) { + Check_Type(depth, T_FIXNUM); + state->depth = FIX2LONG(depth); + } else { + state->depth = 0; + } + } + tmp = ID2SYM(i_buffer_initial_length); + if (option_given_p(opts, tmp)) { + VALUE buffer_initial_length = rb_hash_aref(opts, tmp); + if (RTEST(buffer_initial_length)) { + long initial_length; + Check_Type(buffer_initial_length, T_FIXNUM); + initial_length = FIX2LONG(buffer_initial_length); + if (initial_length > 0) state->buffer_initial_length = initial_length; + } + } + tmp = rb_hash_aref(opts, ID2SYM(i_allow_nan)); + state->allow_nan = RTEST(tmp); + tmp = rb_hash_aref(opts, ID2SYM(i_ascii_only)); + state->ascii_only = RTEST(tmp); + tmp = rb_hash_aref(opts, ID2SYM(i_escape_slash)); + state->escape_slash = RTEST(tmp); + return self; +} + +static void set_state_ivars(VALUE hash, VALUE state) +{ + VALUE ivars = rb_obj_instance_variables(state); + int i = 0; + for (i = 0; i < RARRAY_LEN(ivars); i++) { + VALUE key = rb_funcall(rb_ary_entry(ivars, i), i_to_s, 0); + long key_len = RSTRING_LEN(key); + VALUE value = rb_iv_get(state, StringValueCStr(key)); + rb_hash_aset(hash, rb_str_intern(rb_str_substr(key, 1, key_len - 1)), value); + } +} + +/* + * call-seq: to_h + * + * Returns the configuration instance variables as a hash, that can be + * passed to the configure method. + */ +static VALUE cState_to_h(VALUE self) +{ + VALUE result = rb_hash_new(); + GET_STATE(self); + set_state_ivars(result, self); + rb_hash_aset(result, ID2SYM(i_indent), rb_str_new(state->indent, state->indent_len)); + rb_hash_aset(result, ID2SYM(i_space), rb_str_new(state->space, state->space_len)); + rb_hash_aset(result, ID2SYM(i_space_before), rb_str_new(state->space_before, state->space_before_len)); + rb_hash_aset(result, ID2SYM(i_object_nl), rb_str_new(state->object_nl, state->object_nl_len)); + rb_hash_aset(result, ID2SYM(i_array_nl), rb_str_new(state->array_nl, state->array_nl_len)); + rb_hash_aset(result, ID2SYM(i_allow_nan), state->allow_nan ? Qtrue : Qfalse); + rb_hash_aset(result, ID2SYM(i_ascii_only), state->ascii_only ? Qtrue : Qfalse); + rb_hash_aset(result, ID2SYM(i_max_nesting), LONG2FIX(state->max_nesting)); + rb_hash_aset(result, ID2SYM(i_escape_slash), state->escape_slash ? Qtrue : Qfalse); + rb_hash_aset(result, ID2SYM(i_depth), LONG2FIX(state->depth)); + rb_hash_aset(result, ID2SYM(i_buffer_initial_length), LONG2FIX(state->buffer_initial_length)); + return result; +} + +/* +* call-seq: [](name) +* +* Returns the value returned by method +name+. +*/ +static VALUE cState_aref(VALUE self, VALUE name) +{ + name = rb_funcall(name, i_to_s, 0); + if (RTEST(rb_funcall(self, i_respond_to_p, 1, name))) { + return rb_funcall(self, i_send, 1, name); + } else { + return rb_attr_get(self, rb_intern_str(rb_str_concat(rb_str_new2("@"), name))); + } +} + +/* +* call-seq: []=(name, value) +* +* Sets the attribute name to value. +*/ +static VALUE cState_aset(VALUE self, VALUE name, VALUE value) +{ + VALUE name_writer; + + name = rb_funcall(name, i_to_s, 0); + name_writer = rb_str_cat2(rb_str_dup(name), "="); + if (RTEST(rb_funcall(self, i_respond_to_p, 1, name_writer))) { + return rb_funcall(self, i_send, 2, name_writer, value); + } else { + rb_ivar_set(self, rb_intern_str(rb_str_concat(rb_str_new2("@"), name)), value); + } + return Qnil; +} + +struct hash_foreach_arg { + FBuffer *buffer; + JSON_Generator_State *state; + VALUE Vstate; + int iter; +}; + +static int +json_object_i(VALUE key, VALUE val, VALUE _arg) +{ + struct hash_foreach_arg *arg = (struct hash_foreach_arg *)_arg; + FBuffer *buffer = arg->buffer; + JSON_Generator_State *state = arg->state; + VALUE Vstate = arg->Vstate; + + char *object_nl = state->object_nl; + long object_nl_len = state->object_nl_len; + char *indent = state->indent; + long indent_len = state->indent_len; + char *delim = FBUFFER_PTR(state->object_delim); + long delim_len = FBUFFER_LEN(state->object_delim); + char *delim2 = FBUFFER_PTR(state->object_delim2); + 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) { + fbuffer_append(buffer, object_nl, object_nl_len); + } + if (indent) { + for (j = 0; j < depth; j++) { + fbuffer_append(buffer, indent, indent_len); + } + } + + klass = CLASS_OF(key); + if (klass == rb_cString) { + key_to_s = key; + } else if (klass == rb_cSymbol) { + key_to_s = rb_id2str(SYM2ID(key)); + } else { + key_to_s = rb_funcall(key, i_to_s, 0); + } + 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); + + arg->iter++; + return ST_CONTINUE; +} + +static void generate_json_object(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj) +{ + char *object_nl = state->object_nl; + long object_nl_len = state->object_nl_len; + char *indent = state->indent; + long indent_len = state->indent_len; + long max_nesting = state->max_nesting; + long depth = ++state->depth; + int j; + struct hash_foreach_arg arg; + + if (max_nesting != 0 && depth > max_nesting) { + fbuffer_free(buffer); + rb_raise(eNestingError, "nesting of %ld is too deep", --state->depth); + } + fbuffer_append_char(buffer, '{'); + + arg.buffer = buffer; + arg.state = state; + arg.Vstate = Vstate; + arg.iter = 0; + rb_hash_foreach(obj, json_object_i, (VALUE)&arg); + + depth = --state->depth; + if (object_nl) { + fbuffer_append(buffer, object_nl, object_nl_len); + if (indent) { + for (j = 0; j < depth; j++) { + fbuffer_append(buffer, indent, indent_len); + } + } + } + fbuffer_append_char(buffer, '}'); +} + +static void generate_json_array(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj) +{ + char *array_nl = state->array_nl; + long array_nl_len = state->array_nl_len; + char *indent = state->indent; + long indent_len = state->indent_len; + long max_nesting = state->max_nesting; + char *delim = FBUFFER_PTR(state->array_delim); + long delim_len = FBUFFER_LEN(state->array_delim); + long depth = ++state->depth; + int i, j; + if (max_nesting != 0 && depth > max_nesting) { + fbuffer_free(buffer); + rb_raise(eNestingError, "nesting of %ld is too deep", --state->depth); + } + fbuffer_append_char(buffer, '['); + if (array_nl) fbuffer_append(buffer, array_nl, array_nl_len); + for(i = 0; i < RARRAY_LEN(obj); i++) { + if (i > 0) fbuffer_append(buffer, delim, delim_len); + if (indent) { + for (j = 0; j < depth; j++) { + fbuffer_append(buffer, indent, indent_len); + } + } + generate_json(buffer, Vstate, state, rb_ary_entry(obj, i)); + } + state->depth = --depth; + if (array_nl) { + fbuffer_append(buffer, array_nl, array_nl_len); + if (indent) { + for (j = 0; j < depth; j++) { + fbuffer_append(buffer, indent, indent_len); + } + } + } + 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->escape_slash); + } else { + convert_UTF8_to_JSON(buffer, obj, state->escape_slash); + } + fbuffer_append_char(buffer, '"'); +} + +static void generate_json_null(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj) +{ + fbuffer_append(buffer, "null", 4); +} + +static void generate_json_false(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj) +{ + fbuffer_append(buffer, "false", 5); +} + +static void generate_json_true(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj) +{ + fbuffer_append(buffer, "true", 4); +} + +static void generate_json_fixnum(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj) +{ + fbuffer_append_long(buffer, FIX2LONG(obj)); +} + +static void generate_json_bignum(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj) +{ + VALUE tmp = rb_funcall(obj, i_to_s, 0); + fbuffer_append_str(buffer, tmp); +} + +#ifdef RUBY_INTEGER_UNIFICATION +static void generate_json_integer(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj) +{ + if (FIXNUM_P(obj)) + generate_json_fixnum(buffer, Vstate, state, obj); + else + generate_json_bignum(buffer, Vstate, state, obj); +} +#endif +static void generate_json_float(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj) +{ + double value = RFLOAT_VALUE(obj); + char allow_nan = state->allow_nan; + VALUE tmp = rb_funcall(obj, i_to_s, 0); + if (!allow_nan) { + if (isinf(value)) { + fbuffer_free(buffer); + rb_raise(eGeneratorError, "%"PRIsVALUE" not allowed in JSON", RB_OBJ_STRING(tmp)); + } else if (isnan(value)) { + fbuffer_free(buffer); + rb_raise(eGeneratorError, "%"PRIsVALUE" not allowed in JSON", RB_OBJ_STRING(tmp)); + } + } + fbuffer_append_str(buffer, tmp); +} + +static void generate_json(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj) +{ + VALUE tmp; + VALUE klass = CLASS_OF(obj); + if (klass == rb_cHash) { + generate_json_object(buffer, Vstate, state, obj); + } else if (klass == rb_cArray) { + generate_json_array(buffer, Vstate, state, obj); + } else if (klass == rb_cString) { + generate_json_string(buffer, Vstate, state, obj); + } else if (obj == Qnil) { + generate_json_null(buffer, Vstate, state, obj); + } else if (obj == Qfalse) { + generate_json_false(buffer, Vstate, state, obj); + } else if (obj == Qtrue) { + generate_json_true(buffer, Vstate, state, obj); + } else if (FIXNUM_P(obj)) { + generate_json_fixnum(buffer, Vstate, state, obj); + } else if (RB_TYPE_P(obj, T_BIGNUM)) { + generate_json_bignum(buffer, Vstate, state, obj); + } else if (klass == rb_cFloat) { + generate_json_float(buffer, Vstate, state, obj); + } else if (rb_respond_to(obj, i_to_json)) { + tmp = rb_funcall(obj, i_to_json, 1, Vstate); + Check_Type(tmp, T_STRING); + fbuffer_append_str(buffer, tmp); + } else { + tmp = rb_funcall(obj, i_to_s, 0); + Check_Type(tmp, T_STRING); + generate_json_string(buffer, Vstate, state, tmp); + } +} + +static FBuffer *cState_prepare_buffer(VALUE self) +{ + FBuffer *buffer; + GET_STATE(self); + buffer = fbuffer_alloc(state->buffer_initial_length); + + if (state->object_delim) { + fbuffer_clear(state->object_delim); + } else { + state->object_delim = fbuffer_alloc(16); + } + fbuffer_append_char(state->object_delim, ','); + if (state->object_delim2) { + fbuffer_clear(state->object_delim2); + } else { + state->object_delim2 = fbuffer_alloc(16); + } + if (state->space_before) fbuffer_append(state->object_delim2, state->space_before, state->space_before_len); + fbuffer_append_char(state->object_delim2, ':'); + if (state->space) fbuffer_append(state->object_delim2, state->space, state->space_len); + + if (state->array_delim) { + fbuffer_clear(state->array_delim); + } else { + state->array_delim = fbuffer_alloc(16); + } + fbuffer_append_char(state->array_delim, ','); + if (state->array_nl) fbuffer_append(state->array_delim, state->array_nl, state->array_nl_len); + return buffer; +} + +static VALUE cState_partial_generate(VALUE self, VALUE obj) +{ + FBuffer *buffer = cState_prepare_buffer(self); + GET_STATE(self); + generate_json(buffer, self, state, obj); + return fbuffer_to_s(buffer); +} + +/* + * call-seq: generate(obj) + * + * Generates a valid JSON document from object +obj+ and returns the + * result. If no valid JSON document can be created this method raises a + * GeneratorError exception. + */ +static VALUE cState_generate(VALUE self, VALUE obj) +{ + VALUE result = cState_partial_generate(self, obj); + GET_STATE(self); + (void)state; + return result; +} + +/* + * call-seq: new(opts = {}) + * + * Instantiates a new State object, configured by _opts_. + * + * _opts_ can have the following keys: + * + * * *indent*: a string used to indent levels (default: ''), + * * *space*: a string that is put after, a : or , delimiter (default: ''), + * * *space_before*: a string that is put before a : pair delimiter (default: ''), + * * *object_nl*: a string that is put at the end of a JSON object (default: ''), + * * *array_nl*: a string that is put at the end of a JSON array (default: ''), + * * *allow_nan*: true if NaN, Infinity, and -Infinity should be + * generated, otherwise an exception is thrown, if these values are + * encountered. This options defaults to false. + * * *ascii_only*: true if only ASCII characters should be generated. This + * option defaults to false. + * * *buffer_initial_length*: sets the initial length of the generator's + * internal buffer. + */ +static VALUE cState_initialize(int argc, VALUE *argv, VALUE self) +{ + VALUE opts; + GET_STATE(self); + state->max_nesting = 100; + state->buffer_initial_length = FBUFFER_INITIAL_LENGTH_DEFAULT; + rb_scan_args(argc, argv, "01", &opts); + if (!NIL_P(opts)) cState_configure(self, opts); + return self; +} + +/* + * call-seq: initialize_copy(orig) + * + * Initializes this object from orig if it can be duplicated/cloned and returns + * it. +*/ +static VALUE cState_init_copy(VALUE obj, VALUE orig) +{ + JSON_Generator_State *objState, *origState; + + if (obj == orig) return obj; + GET_STATE_TO(obj, objState); + GET_STATE_TO(orig, origState); + if (!objState) rb_raise(rb_eArgError, "unallocated JSON::State"); + + MEMCPY(objState, origState, JSON_Generator_State, 1); + objState->indent = fstrndup(origState->indent, origState->indent_len); + objState->space = fstrndup(origState->space, origState->space_len); + objState->space_before = fstrndup(origState->space_before, origState->space_before_len); + objState->object_nl = fstrndup(origState->object_nl, origState->object_nl_len); + objState->array_nl = fstrndup(origState->array_nl, origState->array_nl_len); + if (origState->array_delim) objState->array_delim = fbuffer_dup(origState->array_delim); + if (origState->object_delim) objState->object_delim = fbuffer_dup(origState->object_delim); + if (origState->object_delim2) objState->object_delim2 = fbuffer_dup(origState->object_delim2); + return obj; +} + +/* + * call-seq: from_state(opts) + * + * Creates a State object from _opts_, which ought to be Hash to create a + * new State instance configured by _opts_, something else to create an + * unconfigured instance. If _opts_ is a State object, it is just returned. + */ +static VALUE cState_from_state_s(VALUE self, VALUE opts) +{ + if (rb_obj_is_kind_of(opts, self)) { + return opts; + } else if (rb_obj_is_kind_of(opts, rb_cHash)) { + return rb_funcall(self, i_new, 1, opts); + } else { + return rb_class_new_instance(0, NULL, cState); + } +} + +/* + * call-seq: indent() + * + * Returns the string that is used to indent levels in the JSON text. + */ +static VALUE cState_indent(VALUE self) +{ + GET_STATE(self); + return state->indent ? rb_str_new(state->indent, state->indent_len) : rb_str_new2(""); +} + +/* + * call-seq: indent=(indent) + * + * Sets the string that is used to indent levels in the JSON text. + */ +static VALUE cState_indent_set(VALUE self, VALUE indent) +{ + unsigned long len; + GET_STATE(self); + Check_Type(indent, T_STRING); + len = RSTRING_LEN(indent); + if (len == 0) { + if (state->indent) { + ruby_xfree(state->indent); + state->indent = NULL; + state->indent_len = 0; + } + } else { + if (state->indent) ruby_xfree(state->indent); + state->indent = fstrndup(RSTRING_PTR(indent), len); + state->indent_len = len; + } + return Qnil; +} + +/* + * call-seq: space() + * + * Returns the string that is used to insert a space between the tokens in a JSON + * string. + */ +static VALUE cState_space(VALUE self) +{ + GET_STATE(self); + return state->space ? rb_str_new(state->space, state->space_len) : rb_str_new2(""); +} + +/* + * call-seq: space=(space) + * + * Sets _space_ to the string that is used to insert a space between the tokens in a JSON + * string. + */ +static VALUE cState_space_set(VALUE self, VALUE space) +{ + unsigned long len; + GET_STATE(self); + Check_Type(space, T_STRING); + len = RSTRING_LEN(space); + if (len == 0) { + if (state->space) { + ruby_xfree(state->space); + state->space = NULL; + state->space_len = 0; + } + } else { + if (state->space) ruby_xfree(state->space); + state->space = fstrndup(RSTRING_PTR(space), len); + state->space_len = len; + } + return Qnil; +} + +/* + * call-seq: space_before() + * + * Returns the string that is used to insert a space before the ':' in JSON objects. + */ +static VALUE cState_space_before(VALUE self) +{ + GET_STATE(self); + return state->space_before ? rb_str_new(state->space_before, state->space_before_len) : rb_str_new2(""); +} + +/* + * call-seq: space_before=(space_before) + * + * Sets the string that is used to insert a space before the ':' in JSON objects. + */ +static VALUE cState_space_before_set(VALUE self, VALUE space_before) +{ + unsigned long len; + GET_STATE(self); + Check_Type(space_before, T_STRING); + len = RSTRING_LEN(space_before); + if (len == 0) { + if (state->space_before) { + ruby_xfree(state->space_before); + state->space_before = NULL; + state->space_before_len = 0; + } + } else { + if (state->space_before) ruby_xfree(state->space_before); + state->space_before = fstrndup(RSTRING_PTR(space_before), len); + state->space_before_len = len; + } + return Qnil; +} + +/* + * call-seq: object_nl() + * + * This string is put at the end of a line that holds a JSON object (or + * Hash). + */ +static VALUE cState_object_nl(VALUE self) +{ + GET_STATE(self); + return state->object_nl ? rb_str_new(state->object_nl, state->object_nl_len) : rb_str_new2(""); +} + +/* + * call-seq: object_nl=(object_nl) + * + * This string is put at the end of a line that holds a JSON object (or + * Hash). + */ +static VALUE cState_object_nl_set(VALUE self, VALUE object_nl) +{ + unsigned long len; + GET_STATE(self); + Check_Type(object_nl, T_STRING); + len = RSTRING_LEN(object_nl); + if (len == 0) { + if (state->object_nl) { + ruby_xfree(state->object_nl); + state->object_nl = NULL; + } + } else { + if (state->object_nl) ruby_xfree(state->object_nl); + state->object_nl = fstrndup(RSTRING_PTR(object_nl), len); + state->object_nl_len = len; + } + return Qnil; +} + +/* + * call-seq: array_nl() + * + * This string is put at the end of a line that holds a JSON array. + */ +static VALUE cState_array_nl(VALUE self) +{ + GET_STATE(self); + return state->array_nl ? rb_str_new(state->array_nl, state->array_nl_len) : rb_str_new2(""); +} + +/* + * call-seq: array_nl=(array_nl) + * + * This string is put at the end of a line that holds a JSON array. + */ +static VALUE cState_array_nl_set(VALUE self, VALUE array_nl) +{ + unsigned long len; + GET_STATE(self); + Check_Type(array_nl, T_STRING); + len = RSTRING_LEN(array_nl); + if (len == 0) { + if (state->array_nl) { + ruby_xfree(state->array_nl); + state->array_nl = NULL; + } + } else { + if (state->array_nl) ruby_xfree(state->array_nl); + state->array_nl = fstrndup(RSTRING_PTR(array_nl), len); + state->array_nl_len = len; + } + return Qnil; +} + + +/* +* call-seq: check_circular? +* +* Returns true, if circular data structures should be checked, +* otherwise returns false. +*/ +static VALUE cState_check_circular_p(VALUE self) +{ + GET_STATE(self); + return state->max_nesting ? Qtrue : Qfalse; +} + +/* + * call-seq: max_nesting + * + * This integer returns the maximum level of data structure nesting in + * the generated JSON, max_nesting = 0 if no maximum is checked. + */ +static VALUE cState_max_nesting(VALUE self) +{ + GET_STATE(self); + return LONG2FIX(state->max_nesting); +} + +/* + * call-seq: max_nesting=(depth) + * + * This sets the maximum level of data structure nesting in the generated JSON + * to the integer depth, max_nesting = 0 if no maximum should be checked. + */ +static VALUE cState_max_nesting_set(VALUE self, VALUE depth) +{ + GET_STATE(self); + Check_Type(depth, T_FIXNUM); + return state->max_nesting = FIX2LONG(depth); +} + +/* + * call-seq: escape_slash + * + * If this boolean is true, the forward slashes will be escaped in + * the json output. + */ +static VALUE cState_escape_slash(VALUE self) +{ + GET_STATE(self); + return state->escape_slash ? Qtrue : Qfalse; +} + +/* + * call-seq: escape_slash=(depth) + * + * This sets whether or not the forward slashes will be escaped in + * the json output. + */ +static VALUE cState_escape_slash_set(VALUE self, VALUE enable) +{ + GET_STATE(self); + state->escape_slash = RTEST(enable); + return Qnil; +} + +/* + * call-seq: allow_nan? + * + * Returns true, if NaN, Infinity, and -Infinity should be generated, otherwise + * returns false. + */ +static VALUE cState_allow_nan_p(VALUE self) +{ + GET_STATE(self); + return state->allow_nan ? Qtrue : Qfalse; +} + +/* + * call-seq: ascii_only? + * + * Returns true, if only ASCII characters should be generated. Otherwise + * returns false. + */ +static VALUE cState_ascii_only_p(VALUE self) +{ + GET_STATE(self); + return state->ascii_only ? Qtrue : Qfalse; +} + +/* + * call-seq: depth + * + * This integer returns the current depth of data structure nesting. + */ +static VALUE cState_depth(VALUE self) +{ + GET_STATE(self); + return LONG2FIX(state->depth); +} + +/* + * call-seq: depth=(depth) + * + * This sets the maximum level of data structure nesting in the generated JSON + * to the integer depth, max_nesting = 0 if no maximum should be checked. + */ +static VALUE cState_depth_set(VALUE self, VALUE depth) +{ + GET_STATE(self); + Check_Type(depth, T_FIXNUM); + state->depth = FIX2LONG(depth); + return Qnil; +} + +/* + * call-seq: buffer_initial_length + * + * This integer returns the current initial length of the buffer. + */ +static VALUE cState_buffer_initial_length(VALUE self) +{ + GET_STATE(self); + return LONG2FIX(state->buffer_initial_length); +} + +/* + * call-seq: buffer_initial_length=(length) + * + * This sets the initial length of the buffer to +length+, if +length+ > 0, + * otherwise its value isn't changed. + */ +static VALUE cState_buffer_initial_length_set(VALUE self, VALUE buffer_initial_length) +{ + long initial_length; + GET_STATE(self); + Check_Type(buffer_initial_length, T_FIXNUM); + initial_length = FIX2LONG(buffer_initial_length); + if (initial_length > 0) { + state->buffer_initial_length = initial_length; + } + return Qnil; +} + +/* + * + */ +void Init_generator(void) +{ +#ifdef HAVE_RB_EXT_RACTOR_SAFE + rb_ext_ractor_safe(true); +#endif + +#undef rb_intern + rb_require("json/common"); + + mJSON = rb_define_module("JSON"); + mExt = rb_define_module_under(mJSON, "Ext"); + mGenerator = rb_define_module_under(mExt, "Generator"); + + eGeneratorError = rb_path2class("JSON::GeneratorError"); + eNestingError = rb_path2class("JSON::NestingError"); + rb_gc_register_mark_object(eGeneratorError); + rb_gc_register_mark_object(eNestingError); + + cState = rb_define_class_under(mGenerator, "State", rb_cObject); + rb_define_alloc_func(cState, cState_s_allocate); + rb_define_singleton_method(cState, "from_state", cState_from_state_s, 1); + rb_define_method(cState, "initialize", cState_initialize, -1); + rb_define_method(cState, "initialize_copy", cState_init_copy, 1); + rb_define_method(cState, "indent", cState_indent, 0); + rb_define_method(cState, "indent=", cState_indent_set, 1); + rb_define_method(cState, "space", cState_space, 0); + rb_define_method(cState, "space=", cState_space_set, 1); + rb_define_method(cState, "space_before", cState_space_before, 0); + rb_define_method(cState, "space_before=", cState_space_before_set, 1); + rb_define_method(cState, "object_nl", cState_object_nl, 0); + rb_define_method(cState, "object_nl=", cState_object_nl_set, 1); + rb_define_method(cState, "array_nl", cState_array_nl, 0); + rb_define_method(cState, "array_nl=", cState_array_nl_set, 1); + rb_define_method(cState, "max_nesting", cState_max_nesting, 0); + rb_define_method(cState, "max_nesting=", cState_max_nesting_set, 1); + rb_define_method(cState, "escape_slash", cState_escape_slash, 0); + rb_define_method(cState, "escape_slash?", cState_escape_slash, 0); + rb_define_method(cState, "escape_slash=", cState_escape_slash_set, 1); + rb_define_method(cState, "check_circular?", cState_check_circular_p, 0); + rb_define_method(cState, "allow_nan?", cState_allow_nan_p, 0); + rb_define_method(cState, "ascii_only?", cState_ascii_only_p, 0); + rb_define_method(cState, "depth", cState_depth, 0); + rb_define_method(cState, "depth=", cState_depth_set, 1); + rb_define_method(cState, "buffer_initial_length", cState_buffer_initial_length, 0); + rb_define_method(cState, "buffer_initial_length=", cState_buffer_initial_length_set, 1); + rb_define_method(cState, "configure", cState_configure, 1); + rb_define_alias(cState, "merge", "configure"); + rb_define_method(cState, "to_h", cState_to_h, 0); + rb_define_alias(cState, "to_hash", "to_h"); + rb_define_method(cState, "[]", cState_aref, 1); + rb_define_method(cState, "[]=", cState_aset, 2); + rb_define_method(cState, "generate", cState_generate, 1); + + mGeneratorMethods = rb_define_module_under(mGenerator, "GeneratorMethods"); + mObject = rb_define_module_under(mGeneratorMethods, "Object"); + rb_define_method(mObject, "to_json", mObject_to_json, -1); + mHash = rb_define_module_under(mGeneratorMethods, "Hash"); + rb_define_method(mHash, "to_json", mHash_to_json, -1); + mArray = rb_define_module_under(mGeneratorMethods, "Array"); + rb_define_method(mArray, "to_json", mArray_to_json, -1); +#ifdef RUBY_INTEGER_UNIFICATION + mInteger = rb_define_module_under(mGeneratorMethods, "Integer"); + rb_define_method(mInteger, "to_json", mInteger_to_json, -1); +#else + mFixnum = rb_define_module_under(mGeneratorMethods, "Fixnum"); + rb_define_method(mFixnum, "to_json", mFixnum_to_json, -1); + mBignum = rb_define_module_under(mGeneratorMethods, "Bignum"); + rb_define_method(mBignum, "to_json", mBignum_to_json, -1); +#endif + mFloat = rb_define_module_under(mGeneratorMethods, "Float"); + rb_define_method(mFloat, "to_json", mFloat_to_json, -1); + mString = rb_define_module_under(mGeneratorMethods, "String"); + rb_define_singleton_method(mString, "included", mString_included_s, 1); + rb_define_method(mString, "to_json", mString_to_json, -1); + rb_define_method(mString, "to_json_raw", mString_to_json_raw, -1); + rb_define_method(mString, "to_json_raw_object", mString_to_json_raw_object, 0); + mString_Extend = rb_define_module_under(mString, "Extend"); + rb_define_method(mString_Extend, "json_create", mString_Extend_json_create, 1); + mTrueClass = rb_define_module_under(mGeneratorMethods, "TrueClass"); + rb_define_method(mTrueClass, "to_json", mTrueClass_to_json, -1); + mFalseClass = rb_define_module_under(mGeneratorMethods, "FalseClass"); + rb_define_method(mFalseClass, "to_json", mFalseClass_to_json, -1); + mNilClass = rb_define_module_under(mGeneratorMethods, "NilClass"); + rb_define_method(mNilClass, "to_json", mNilClass_to_json, -1); + + i_to_s = rb_intern("to_s"); + i_to_json = rb_intern("to_json"); + i_new = rb_intern("new"); + i_indent = rb_intern("indent"); + i_space = rb_intern("space"); + i_space_before = rb_intern("space_before"); + i_object_nl = rb_intern("object_nl"); + i_array_nl = rb_intern("array_nl"); + i_max_nesting = rb_intern("max_nesting"); + i_escape_slash = rb_intern("escape_slash"); + i_allow_nan = rb_intern("allow_nan"); + i_ascii_only = rb_intern("ascii_only"); + i_depth = rb_intern("depth"); + i_buffer_initial_length = rb_intern("buffer_initial_length"); + i_pack = rb_intern("pack"); + i_unpack = rb_intern("unpack"); + i_create_id = rb_intern("create_id"); + i_extend = rb_intern("extend"); + i_key_p = rb_intern("key?"); + i_aref = rb_intern("[]"); + i_send = rb_intern("__send__"); + i_respond_to_p = rb_intern("respond_to?"); + i_match = rb_intern("match"); + i_keys = rb_intern("keys"); + i_dup = rb_intern("dup"); +} diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/generator/generator.h b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/generator/generator.h new file mode 100644 index 0000000..3ebd622 --- /dev/null +++ b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/generator/generator.h @@ -0,0 +1,174 @@ +#ifndef _GENERATOR_H_ +#define _GENERATOR_H_ + +#include +#include + +#include "ruby.h" + +#ifdef HAVE_RUBY_RE_H +#include "ruby/re.h" +#else +#include "re.h" +#endif + +#ifndef rb_intern_str +#define rb_intern_str(string) SYM2ID(rb_str_intern(string)) +#endif + +#ifndef rb_obj_instance_variables +#define rb_obj_instance_variables(object) rb_funcall(object, rb_intern("instance_variables"), 0) +#endif + +#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 escape_slash); +static void convert_UTF8_to_JSON(FBuffer *buffer, VALUE string, char escape_slash); +static char *fstrndup(const char *ptr, unsigned long len); + +/* ruby api and some helpers */ + +typedef struct JSON_Generator_StateStruct { + char *indent; + long indent_len; + char *space; + long space_len; + char *space_before; + long space_before_len; + char *object_nl; + long object_nl_len; + char *array_nl; + long array_nl_len; + FBuffer *array_delim; + FBuffer *object_delim; + FBuffer *object_delim2; + long max_nesting; + char allow_nan; + char ascii_only; + char escape_slash; + long depth; + long buffer_initial_length; +} JSON_Generator_State; + +#define GET_STATE_TO(self, state) \ + TypedData_Get_Struct(self, JSON_Generator_State, &JSON_Generator_State_type, state) + +#define GET_STATE(self) \ + JSON_Generator_State *state; \ + GET_STATE_TO(self, state) + +#define GENERATE_JSON(type) \ + FBuffer *buffer; \ + VALUE Vstate; \ + JSON_Generator_State *state; \ + \ + rb_scan_args(argc, argv, "01", &Vstate); \ + Vstate = cState_from_state_s(cState, Vstate); \ + TypedData_Get_Struct(Vstate, JSON_Generator_State, &JSON_Generator_State_type, state); \ + buffer = cState_prepare_buffer(Vstate); \ + generate_json_##type(buffer, Vstate, state, self); \ + return fbuffer_to_s(buffer) + +static VALUE mHash_to_json(int argc, VALUE *argv, VALUE self); +static VALUE mArray_to_json(int argc, VALUE *argv, VALUE self); +#ifdef RUBY_INTEGER_UNIFICATION +static VALUE mInteger_to_json(int argc, VALUE *argv, VALUE self); +#else +static VALUE mFixnum_to_json(int argc, VALUE *argv, VALUE self); +static VALUE mBignum_to_json(int argc, VALUE *argv, VALUE self); +#endif +static VALUE mFloat_to_json(int argc, VALUE *argv, VALUE self); +static VALUE mString_included_s(VALUE self, VALUE modul); +static VALUE mString_to_json(int argc, VALUE *argv, VALUE self); +static VALUE mString_to_json_raw_object(VALUE self); +static VALUE mString_to_json_raw(int argc, VALUE *argv, VALUE self); +static VALUE mString_Extend_json_create(VALUE self, VALUE o); +static VALUE mTrueClass_to_json(int argc, VALUE *argv, VALUE self); +static VALUE mFalseClass_to_json(int argc, VALUE *argv, VALUE self); +static VALUE mNilClass_to_json(int argc, VALUE *argv, VALUE self); +static VALUE mObject_to_json(int argc, VALUE *argv, VALUE self); +static void State_free(void *state); +static VALUE cState_s_allocate(VALUE klass); +static VALUE cState_configure(VALUE self, VALUE opts); +static VALUE cState_to_h(VALUE self); +static void generate_json(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj); +static void generate_json_object(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj); +static void generate_json_array(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj); +static void generate_json_string(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj); +static void generate_json_null(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj); +static void generate_json_false(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj); +static void generate_json_true(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj); +#ifdef RUBY_INTEGER_UNIFICATION +static void generate_json_integer(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj); +#endif +static void generate_json_fixnum(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj); +static void generate_json_bignum(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj); +static void generate_json_float(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj); +static VALUE cState_partial_generate(VALUE self, VALUE obj); +static VALUE cState_generate(VALUE self, VALUE obj); +static VALUE cState_initialize(int argc, VALUE *argv, VALUE self); +static VALUE cState_from_state_s(VALUE self, VALUE opts); +static VALUE cState_indent(VALUE self); +static VALUE cState_indent_set(VALUE self, VALUE indent); +static VALUE cState_space(VALUE self); +static VALUE cState_space_set(VALUE self, VALUE space); +static VALUE cState_space_before(VALUE self); +static VALUE cState_space_before_set(VALUE self, VALUE space_before); +static VALUE cState_object_nl(VALUE self); +static VALUE cState_object_nl_set(VALUE self, VALUE object_nl); +static VALUE cState_array_nl(VALUE self); +static VALUE cState_array_nl_set(VALUE self, VALUE array_nl); +static VALUE cState_max_nesting(VALUE self); +static VALUE cState_max_nesting_set(VALUE self, VALUE depth); +static VALUE cState_allow_nan_p(VALUE self); +static VALUE cState_ascii_only_p(VALUE self); +static VALUE cState_depth(VALUE self); +static VALUE cState_depth_set(VALUE self, VALUE depth); +static VALUE cState_escape_slash(VALUE self); +static VALUE cState_escape_slash_set(VALUE self, VALUE depth); +static FBuffer *cState_prepare_buffer(VALUE self); +#ifndef ZALLOC +#define ZALLOC(type) ((type *)ruby_zalloc(sizeof(type))) +static inline void *ruby_zalloc(size_t n) +{ + void *p = ruby_xmalloc(n); + memset(p, 0, n); + return p; +} +#endif +#ifdef TypedData_Make_Struct +static const rb_data_type_t JSON_Generator_State_type; +#define NEW_TYPEDDATA_WRAPPER 1 +#else +#define TypedData_Make_Struct(klass, type, ignore, json) Data_Make_Struct(klass, type, NULL, State_free, json) +#define TypedData_Get_Struct(self, JSON_Generator_State, ignore, json) Data_Get_Struct(self, JSON_Generator_State, json) +#endif + +#endif diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/generator/generator.o b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/generator/generator.o new file mode 100644 index 0000000000000000000000000000000000000000..c07db53b9f31692098184302c1472807e9e76956 GIT binary patch literal 349088 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 QtzV&*Z@e?DKu<&e2Qa0AG5`Po literal 0 HcmV?d00001 diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/generator/generator.so b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/generator/generator.so new file mode 100755 index 0000000000000000000000000000000000000000..d8731fc748d5417c4d3eb14e11e3a80ca78b029a GIT binary patch literal 102000 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

JIrahDatoWorpXKb76Y1iX=Pf11(R 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 literal 0 HcmV?d00001 diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/parser/.sitearchdir.-.json.-.ext.time b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/parser/.sitearchdir.-.json.-.ext.time new file mode 100644 index 0000000..e69de29 diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/parser/Makefile b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/parser/Makefile new file mode 100644 index 0000000..a30be36 --- /dev/null +++ b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/parser/Makefile @@ -0,0 +1,268 @@ + +SHELL = /bin/sh + +# V=0 quiet, V=1 verbose. other values don't work. +V = 0 +Q1 = $(V:1=) +Q = $(Q1:0=@) +ECHO1 = $(V:1=@ :) +ECHO = $(ECHO1:0=@ echo) +NULLCMD = : + +#### Start of system configuration section. #### + +srcdir = . +topdir = /opt/hostedtoolcache/Ruby/2.7.7/x64/include/ruby-2.7.0 +hdrdir = $(topdir) +arch_hdrdir = /opt/hostedtoolcache/Ruby/2.7.7/x64/include/ruby-2.7.0/x86_64-linux +PATH_SEPARATOR = : +VPATH = $(srcdir):$(arch_hdrdir)/ruby:$(hdrdir)/ruby +prefix = $(DESTDIR)/opt/hostedtoolcache/Ruby/2.7.7/x64 +rubysitearchprefix = $(rubylibprefix)/$(sitearch) +rubyarchprefix = $(rubylibprefix)/$(arch) +rubylibprefix = $(libdir)/$(RUBY_BASE_NAME) +exec_prefix = $(prefix) +vendorarchhdrdir = $(vendorhdrdir)/$(sitearch) +sitearchhdrdir = $(sitehdrdir)/$(sitearch) +rubyarchhdrdir = $(rubyhdrdir)/$(arch) +vendorhdrdir = $(rubyhdrdir)/vendor_ruby +sitehdrdir = $(rubyhdrdir)/site_ruby +rubyhdrdir = $(includedir)/$(RUBY_VERSION_NAME) +vendorarchdir = $(vendorlibdir)/$(sitearch) +vendorlibdir = $(vendordir)/$(ruby_version) +vendordir = $(rubylibprefix)/vendor_ruby +sitearchdir = $(DESTDIR)./.gem.20221206-1722-pjmzva +sitelibdir = $(DESTDIR)./.gem.20221206-1722-pjmzva +sitedir = $(rubylibprefix)/site_ruby +rubyarchdir = $(rubylibdir)/$(arch) +rubylibdir = $(rubylibprefix)/$(ruby_version) +sitearchincludedir = $(includedir)/$(sitearch) +archincludedir = $(includedir)/$(arch) +sitearchlibdir = $(libdir)/$(sitearch) +archlibdir = $(libdir)/$(arch) +ridir = $(datarootdir)/$(RI_BASE_NAME) +mandir = $(datarootdir)/man +localedir = $(datarootdir)/locale +libdir = $(exec_prefix)/lib +psdir = $(docdir) +pdfdir = $(docdir) +dvidir = $(docdir) +htmldir = $(docdir) +infodir = $(datarootdir)/info +docdir = $(datarootdir)/doc/$(PACKAGE) +oldincludedir = $(DESTDIR)/usr/include +includedir = $(prefix)/include +runstatedir = $(localstatedir)/run +localstatedir = $(prefix)/var +sharedstatedir = $(prefix)/com +sysconfdir = $(prefix)/etc +datadir = $(datarootdir) +datarootdir = $(prefix)/share +libexecdir = $(exec_prefix)/libexec +sbindir = $(exec_prefix)/sbin +bindir = $(exec_prefix)/bin +archdir = $(rubyarchdir) + + +CC_WRAPPER = +CC = gcc +CXX = g++ +LIBRUBY = $(LIBRUBY_SO) +LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a +LIBRUBYARG_SHARED = -Wl,-rpath,$(libdir) -L$(libdir) -l$(RUBY_SO_NAME) +LIBRUBYARG_STATIC = -Wl,-rpath,$(libdir) -L$(libdir) -l$(RUBY_SO_NAME)-static $(MAINLIBS) +empty = +OUTFLAG = -o $(empty) +COUTFLAG = -o $(empty) +CSRCFLAG = $(empty) + +RUBY_EXTCONF_H = +cflags = $(optflags) $(debugflags) $(warnflags) +cxxflags = +optflags = -O3 +debugflags = -ggdb3 +warnflags = -Wall -Wextra -Wdeprecated-declarations -Wduplicated-cond -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wwrite-strings -Wimplicit-fallthrough=0 -Wmissing-noreturn -Wno-cast-function-type -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-packed-bitfield-compat -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wsuggest-attribute=format -Wsuggest-attribute=noreturn -Wunused-variable +cppflags = +CCDLFLAGS = -fPIC +CFLAGS = $(CCDLFLAGS) -g -O2 -fPIC -DSTR_UMINUS_DEDUPE=1 -DSTR_UMINUS_DEDUPE_FROZEN=0 $(ARCH_FLAG) +INCFLAGS = -I. -I$(arch_hdrdir) -I$(hdrdir)/ruby/backward -I$(hdrdir) -I$(srcdir) +DEFS = +CPPFLAGS = -DHAVE_RB_ENC_RAISE -I/opt/hostedtoolcache/Ruby/2.7.7/x64/include -DENABLE_PATH_CHECK=0 $(DEFS) $(cppflags) +CXXFLAGS = $(CCDLFLAGS) -g -O2 $(ARCH_FLAG) +ldflags = -L. -L/opt/hostedtoolcache/Ruby/2.7.7/x64/lib -fstack-protector-strong -rdynamic -Wl,-export-dynamic +dldflags = -L/opt/hostedtoolcache/Ruby/2.7.7/x64/lib -Wl,--compress-debug-sections=zlib +ARCH_FLAG = +DLDFLAGS = $(ldflags) $(dldflags) $(ARCH_FLAG) +LDSHARED = $(CC) -shared +LDSHAREDXX = $(CXX) -shared +AR = ar +EXEEXT = + +RUBY_INSTALL_NAME = $(RUBY_BASE_NAME) +RUBY_SO_NAME = ruby +RUBYW_INSTALL_NAME = +RUBY_VERSION_NAME = $(RUBY_BASE_NAME)-$(ruby_version) +RUBYW_BASE_NAME = rubyw +RUBY_BASE_NAME = ruby + +arch = x86_64-linux +sitearch = $(arch) +ruby_version = 2.7.0 +ruby = $(bindir)/$(RUBY_BASE_NAME) +RUBY = $(ruby) +BUILTRUBY = $(bindir)/$(RUBY_BASE_NAME) +ruby_headers = $(hdrdir)/ruby.h $(hdrdir)/ruby/backward.h $(hdrdir)/ruby/ruby.h $(hdrdir)/ruby/defines.h $(hdrdir)/ruby/missing.h $(hdrdir)/ruby/intern.h $(hdrdir)/ruby/st.h $(hdrdir)/ruby/subst.h $(arch_hdrdir)/ruby/config.h + +RM = rm -f +RM_RF = $(RUBY) -run -e rm -- -rf +RMDIRS = rmdir --ignore-fail-on-non-empty -p +MAKEDIRS = /usr/bin/mkdir -p +INSTALL = /usr/bin/install -c +INSTALL_PROG = $(INSTALL) -m 0755 +INSTALL_DATA = $(INSTALL) -m 644 +COPY = cp +TOUCH = exit > + +#### End of system configuration section. #### + +preload = +libpath = . $(libdir) +LIBPATH = -L. -L$(libdir) -Wl,-rpath,$(libdir) +DEFFILE = + +CLEANFILES = mkmf.log +DISTCLEANFILES = +DISTCLEANDIRS = + +extout = +extout_prefix = +target_prefix = /json/ext +LOCAL_LIBS = +LIBS = $(LIBRUBYARG_SHARED) -lm -lc +ORIG_SRCS = parser.c +SRCS = $(ORIG_SRCS) +OBJS = parser.o +HDRS = $(srcdir)/parser.h +LOCAL_HDRS = +TARGET = parser +TARGET_NAME = parser +TARGET_ENTRY = Init_$(TARGET_NAME) +DLLIB = $(TARGET).so +EXTSTATIC = +STATIC_LIB = + +TIMESTAMP_DIR = . +BINDIR = $(bindir) +RUBYCOMMONDIR = $(sitedir)$(target_prefix) +RUBYLIBDIR = $(sitelibdir)$(target_prefix) +RUBYARCHDIR = $(sitearchdir)$(target_prefix) +HDRDIR = $(rubyhdrdir)/ruby$(target_prefix) +ARCHHDRDIR = $(rubyhdrdir)/$(arch)/ruby$(target_prefix) +TARGET_SO_DIR = +TARGET_SO = $(TARGET_SO_DIR)$(DLLIB) +CLEANLIBS = $(TARGET_SO) +CLEANOBJS = *.o *.bak + +all: $(DLLIB) +static: $(STATIC_LIB) +.PHONY: all install static install-so install-rb +.PHONY: clean clean-so clean-static clean-rb + +clean-static:: +clean-rb-default:: +clean-rb:: +clean-so:: +clean: clean-so clean-static clean-rb-default clean-rb + -$(Q)$(RM) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES) .*.time + +distclean-rb-default:: +distclean-rb:: +distclean-so:: +distclean-static:: +distclean: clean distclean-so distclean-static distclean-rb-default distclean-rb + -$(Q)$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log + -$(Q)$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES) + -$(Q)$(RMDIRS) $(DISTCLEANDIRS) 2> /dev/null || true + +realclean: distclean +install: install-so install-rb + +install-so: $(DLLIB) $(TIMESTAMP_DIR)/.sitearchdir.-.json.-.ext.time + $(INSTALL_PROG) $(DLLIB) $(RUBYARCHDIR) +clean-static:: + -$(Q)$(RM) $(STATIC_LIB) +install-rb: pre-install-rb do-install-rb install-rb-default +install-rb-default: pre-install-rb-default do-install-rb-default +pre-install-rb: Makefile +pre-install-rb-default: Makefile +do-install-rb: +do-install-rb-default: +pre-install-rb-default: + @$(NULLCMD) +$(TIMESTAMP_DIR)/.sitearchdir.-.json.-.ext.time: + $(Q) $(MAKEDIRS) $(@D) $(RUBYARCHDIR) + $(Q) $(TOUCH) $@ + +site-install: site-install-so site-install-rb +site-install-so: install-so +site-install-rb: install-rb + +.SUFFIXES: .c .m .cc .mm .cxx .cpp .o .S + +.cc.o: + $(ECHO) compiling $(<) + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$< + +.cc.S: + $(ECHO) translating $(<) + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$< + +.mm.o: + $(ECHO) compiling $(<) + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$< + +.mm.S: + $(ECHO) translating $(<) + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$< + +.cxx.o: + $(ECHO) compiling $(<) + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$< + +.cxx.S: + $(ECHO) translating $(<) + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$< + +.cpp.o: + $(ECHO) compiling $(<) + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$< + +.cpp.S: + $(ECHO) translating $(<) + $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$< + +.c.o: + $(ECHO) compiling $(<) + $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$< + +.c.S: + $(ECHO) translating $(<) + $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$< + +.m.o: + $(ECHO) compiling $(<) + $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$< + +.m.S: + $(ECHO) translating $(<) + $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$< + +$(TARGET_SO): $(OBJS) Makefile + $(ECHO) linking shared-object json/ext/$(DLLIB) + -$(Q)$(RM) $(@) + $(Q) $(LDSHARED) -o $@ $(OBJS) $(LIBPATH) $(DLDFLAGS) $(LOCAL_LIBS) $(LIBS) + + + +### +parser.o: parser.c parser.h $(srcdir)/../fbuffer/fbuffer.h diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/parser/depend b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/parser/depend new file mode 100644 index 0000000..498ffa9 --- /dev/null +++ b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/parser/depend @@ -0,0 +1 @@ +parser.o: parser.c parser.h $(srcdir)/../fbuffer/fbuffer.h diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/parser/extconf.rb b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/parser/extconf.rb new file mode 100644 index 0000000..feb586e --- /dev/null +++ b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/parser/extconf.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: false +require 'mkmf' + +have_func("rb_enc_raise", "ruby.h") +have_func("rb_enc_interned_str", "ruby.h") + +# checking if String#-@ (str_uminus) dedupes... ' +begin + a = -(%w(t e s t).join) + b = -(%w(t e s t).join) + if a.equal?(b) + $CFLAGS << ' -DSTR_UMINUS_DEDUPE=1 ' + else + $CFLAGS << ' -DSTR_UMINUS_DEDUPE=0 ' + end +rescue NoMethodError + $CFLAGS << ' -DSTR_UMINUS_DEDUPE=0 ' +end + +# checking if String#-@ (str_uminus) directly interns frozen strings... ' +begin + s = rand.to_s.freeze + if (-s).equal?(s) && (-s.dup).equal?(s) + $CFLAGS << ' -DSTR_UMINUS_DEDUPE_FROZEN=1 ' + else + $CFLAGS << ' -DSTR_UMINUS_DEDUPE_FROZEN=0 ' + end +rescue NoMethodError + $CFLAGS << ' -DSTR_UMINUS_DEDUPE_FROZEN=0 ' +end + +create_makefile 'json/ext/parser' diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/parser/parser.c b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/parser/parser.c new file mode 100644 index 0000000..9bd7f19 --- /dev/null +++ b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/parser/parser.c @@ -0,0 +1,3347 @@ +/* This file is automatically generated from parser.rl by using ragel */ +#line 1 "parser.rl" +#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] = { + -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, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, + -1, -1, -1, -1, -1, -1, 10, 11, 12, 13, 14, 15, -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, + 10, 11, 12, 13, 14, 15, -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, + -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, -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, -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, -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 +}; + +static UTF32 unescape_unicode(const unsigned char *p) +{ + signed char b; + UTF32 result = 0; + b = digit_values[p[0]]; + if (b < 0) return UNI_REPLACEMENT_CHAR; + result = (result << 4) | (unsigned char)b; + b = digit_values[p[1]]; + if (b < 0) return UNI_REPLACEMENT_CHAR; + result = (result << 4) | (unsigned char)b; + b = digit_values[p[2]]; + if (b < 0) return UNI_REPLACEMENT_CHAR; + result = (result << 4) | (unsigned char)b; + b = digit_values[p[3]]; + if (b < 0) return UNI_REPLACEMENT_CHAR; + result = (result << 4) | (unsigned char)b; + return result; +} + +static int convert_UTF32_to_UTF8(char *buf, UTF32 ch) +{ + int len = 1; + if (ch <= 0x7F) { + buf[0] = (char) ch; + } else if (ch <= 0x07FF) { + buf[0] = (char) ((ch >> 6) | 0xC0); + buf[1] = (char) ((ch & 0x3F) | 0x80); + len++; + } else if (ch <= 0xFFFF) { + buf[0] = (char) ((ch >> 12) | 0xE0); + buf[1] = (char) (((ch >> 6) & 0x3F) | 0x80); + buf[2] = (char) ((ch & 0x3F) | 0x80); + len += 2; + } else if (ch <= 0x1fffff) { + buf[0] =(char) ((ch >> 18) | 0xF0); + buf[1] =(char) (((ch >> 12) & 0x3F) | 0x80); + buf[2] =(char) (((ch >> 6) & 0x3F) | 0x80); + buf[3] =(char) ((ch & 0x3F) | 0x80); + len += 3; + } else { + buf[0] = '?'; + } + return len; +} + +static VALUE mJSON, mExt, cParser, eParserError, eNestingError; +static VALUE CNaN, CInfinity, CMinusInfinity; + +static ID i_json_creatable_p, i_json_create, i_create_id, i_create_additions, +i_chr, i_max_nesting, i_allow_nan, i_symbolize_names, +i_object_class, i_array_class, i_decimal_class, i_key_p, +i_deep_const_get, i_match, i_match_string, i_aset, i_aref, +i_leftshift, i_new, i_try_convert, i_freeze, i_uminus; + + +#line 125 "parser.rl" + + + +enum {JSON_object_start = 1}; +enum {JSON_object_first_final = 27}; +enum {JSON_object_error = 0}; + +enum {JSON_object_en_main = 1}; + +static const char MAYBE_UNUSED(_JSON_object_nfa_targs)[] = { + 0, 0 +}; + +static const char MAYBE_UNUSED(_JSON_object_nfa_offsets)[] = { + 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 +}; + +static const char MAYBE_UNUSED(_JSON_object_nfa_push_actions)[] = { + 0, 0 +}; + +static const char MAYBE_UNUSED(_JSON_object_nfa_pop_trans)[] = { + 0, 0 +}; + + +#line 167 "parser.rl" + + +static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting) +{ + int cs = EVIL; + VALUE last_name = Qnil; + VALUE object_class = json->object_class; + + if (json->max_nesting && current_nesting > json->max_nesting) { + rb_raise(eNestingError, "nesting of %d is too deep", current_nesting); + } + + *result = NIL_P(object_class) ? rb_hash_new() : rb_class_new_instance(0, 0, object_class); + + + { + cs = (int)JSON_object_start; + } + + #line 182 "parser.rl" + + + { + if ( p == pe ) + goto _test_eof; + switch ( cs ) + { + case 1: + goto st_case_1; + case 0: + goto st_case_0; + case 2: + goto st_case_2; + case 3: + goto st_case_3; + case 4: + goto st_case_4; + case 5: + goto st_case_5; + case 6: + goto st_case_6; + case 7: + goto st_case_7; + case 8: + goto st_case_8; + case 9: + goto st_case_9; + case 10: + goto st_case_10; + case 11: + goto st_case_11; + case 12: + goto st_case_12; + case 13: + goto st_case_13; + case 14: + goto st_case_14; + case 15: + goto st_case_15; + case 16: + goto st_case_16; + case 17: + goto st_case_17; + case 18: + goto st_case_18; + case 27: + goto st_case_27; + case 19: + goto st_case_19; + case 20: + goto st_case_20; + case 21: + goto st_case_21; + case 22: + goto st_case_22; + case 23: + goto st_case_23; + case 24: + goto st_case_24; + case 25: + goto st_case_25; + case 26: + goto st_case_26; + } + goto st_out; + st_case_1: + if ( ( (*( p))) == 123 ) { + goto st2; + } + { + goto st0; + } + st_case_0: + st0: + cs = 0; + goto _out; + st2: + p+= 1; + if ( p == pe ) + goto _test_eof2; + st_case_2: + switch( ( (*( p))) ) { + case 13: { + goto st2; + } + case 32: { + goto st2; + } + case 34: { + goto ctr2; + } + case 47: { + goto st23; + } + case 125: { + goto ctr4; + } + } + if ( 9 <= ( (*( p))) && ( (*( p))) <= 10 ) { + goto st2; + } + { + goto st0; + } + ctr2: + { + #line 149 "parser.rl" + + char *np; + json->parsing_name = 1; + np = JSON_parse_string(json, p, pe, &last_name); + json->parsing_name = 0; + if (np == NULL) { {p = p - 1; } {p+= 1; cs = 3; goto _out;} } else {p = (( np))-1;} + + } + + goto st3; + st3: + p+= 1; + if ( p == pe ) + goto _test_eof3; + st_case_3: + switch( ( (*( p))) ) { + case 13: { + goto st3; + } + case 32: { + goto st3; + } + case 47: { + goto st4; + } + case 58: { + goto st8; + } + } + if ( 9 <= ( (*( p))) && ( (*( p))) <= 10 ) { + goto st3; + } + { + goto st0; + } + st4: + p+= 1; + if ( p == pe ) + goto _test_eof4; + st_case_4: + switch( ( (*( p))) ) { + case 42: { + goto st5; + } + case 47: { + goto st7; + } + } + { + goto st0; + } + st5: + p+= 1; + if ( p == pe ) + goto _test_eof5; + st_case_5: + if ( ( (*( p))) == 42 ) { + goto st6; + } + { + goto st5; + } + st6: + p+= 1; + if ( p == pe ) + goto _test_eof6; + st_case_6: + switch( ( (*( p))) ) { + case 42: { + goto st6; + } + case 47: { + goto st3; + } + } + { + goto st5; + } + st7: + p+= 1; + if ( p == pe ) + goto _test_eof7; + st_case_7: + if ( ( (*( p))) == 10 ) { + goto st3; + } + { + goto st7; + } + st8: + p+= 1; + if ( p == pe ) + goto _test_eof8; + st_case_8: + switch( ( (*( p))) ) { + case 13: { + goto st8; + } + case 32: { + goto st8; + } + case 34: { + goto ctr11; + } + case 45: { + goto ctr11; + } + case 47: { + goto st19; + } + case 73: { + goto ctr11; + } + case 78: { + goto ctr11; + } + case 91: { + goto ctr11; + } + case 102: { + goto ctr11; + } + case 110: { + goto ctr11; + } + case 116: { + goto ctr11; + } + case 123: { + goto ctr11; + } + } + if ( ( (*( p))) > 10 ) { + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto ctr11; + } + } else if ( ( (*( p))) >= 9 ) { + goto st8; + } + { + goto st0; + } + ctr11: + { + #line 133 "parser.rl" + + VALUE v = Qnil; + char *np = JSON_parse_value(json, p, pe, &v, current_nesting); + if (np == NULL) { + {p = p - 1; } {p+= 1; cs = 9; goto _out;} + } else { + if (NIL_P(json->object_class)) { + OBJ_FREEZE(last_name); + rb_hash_aset(*result, last_name, v); + } else { + rb_funcall(*result, i_aset, 2, last_name, v); + } + {p = (( np))-1;} + + } + } + + goto st9; + st9: + p+= 1; + if ( p == pe ) + goto _test_eof9; + st_case_9: + switch( ( (*( p))) ) { + case 13: { + goto st9; + } + case 32: { + goto st9; + } + case 44: { + goto st10; + } + case 47: { + goto st15; + } + case 125: { + goto ctr4; + } + } + if ( 9 <= ( (*( p))) && ( (*( p))) <= 10 ) { + goto st9; + } + { + goto st0; + } + st10: + p+= 1; + if ( p == pe ) + goto _test_eof10; + st_case_10: + switch( ( (*( p))) ) { + case 13: { + goto st10; + } + case 32: { + goto st10; + } + case 34: { + goto ctr2; + } + case 47: { + goto st11; + } + } + if ( 9 <= ( (*( p))) && ( (*( p))) <= 10 ) { + goto st10; + } + { + goto st0; + } + st11: + p+= 1; + if ( p == pe ) + goto _test_eof11; + st_case_11: + switch( ( (*( p))) ) { + case 42: { + goto st12; + } + case 47: { + goto st14; + } + } + { + goto st0; + } + st12: + p+= 1; + if ( p == pe ) + goto _test_eof12; + st_case_12: + if ( ( (*( p))) == 42 ) { + goto st13; + } + { + goto st12; + } + st13: + p+= 1; + if ( p == pe ) + goto _test_eof13; + st_case_13: + switch( ( (*( p))) ) { + case 42: { + goto st13; + } + case 47: { + goto st10; + } + } + { + goto st12; + } + st14: + p+= 1; + if ( p == pe ) + goto _test_eof14; + st_case_14: + if ( ( (*( p))) == 10 ) { + goto st10; + } + { + goto st14; + } + st15: + p+= 1; + if ( p == pe ) + goto _test_eof15; + st_case_15: + switch( ( (*( p))) ) { + case 42: { + goto st16; + } + case 47: { + goto st18; + } + } + { + goto st0; + } + st16: + p+= 1; + if ( p == pe ) + goto _test_eof16; + st_case_16: + if ( ( (*( p))) == 42 ) { + goto st17; + } + { + goto st16; + } + st17: + p+= 1; + if ( p == pe ) + goto _test_eof17; + st_case_17: + switch( ( (*( p))) ) { + case 42: { + goto st17; + } + case 47: { + goto st9; + } + } + { + goto st16; + } + st18: + p+= 1; + if ( p == pe ) + goto _test_eof18; + st_case_18: + if ( ( (*( p))) == 10 ) { + goto st9; + } + { + goto st18; + } + ctr4: + { + #line 157 "parser.rl" + {p = p - 1; } {p+= 1; cs = 27; goto _out;} } + + goto st27; + st27: + p+= 1; + if ( p == pe ) + goto _test_eof27; + st_case_27: + { + goto st0; + } + st19: + p+= 1; + if ( p == pe ) + goto _test_eof19; + st_case_19: + switch( ( (*( p))) ) { + case 42: { + goto st20; + } + case 47: { + goto st22; + } + } + { + goto st0; + } + st20: + p+= 1; + if ( p == pe ) + goto _test_eof20; + st_case_20: + if ( ( (*( p))) == 42 ) { + goto st21; + } + { + goto st20; + } + st21: + p+= 1; + if ( p == pe ) + goto _test_eof21; + st_case_21: + switch( ( (*( p))) ) { + case 42: { + goto st21; + } + case 47: { + goto st8; + } + } + { + goto st20; + } + st22: + p+= 1; + if ( p == pe ) + goto _test_eof22; + st_case_22: + if ( ( (*( p))) == 10 ) { + goto st8; + } + { + goto st22; + } + st23: + p+= 1; + if ( p == pe ) + goto _test_eof23; + st_case_23: + switch( ( (*( p))) ) { + case 42: { + goto st24; + } + case 47: { + goto st26; + } + } + { + goto st0; + } + st24: + p+= 1; + if ( p == pe ) + goto _test_eof24; + st_case_24: + if ( ( (*( p))) == 42 ) { + goto st25; + } + { + goto st24; + } + st25: + p+= 1; + if ( p == pe ) + goto _test_eof25; + st_case_25: + switch( ( (*( p))) ) { + case 42: { + goto st25; + } + case 47: { + goto st2; + } + } + { + goto st24; + } + st26: + p+= 1; + if ( p == pe ) + goto _test_eof26; + st_case_26: + if ( ( (*( p))) == 10 ) { + goto st2; + } + { + goto st26; + } + st_out: + _test_eof2: cs = 2; goto _test_eof; + _test_eof3: cs = 3; goto _test_eof; + _test_eof4: cs = 4; goto _test_eof; + _test_eof5: cs = 5; goto _test_eof; + _test_eof6: cs = 6; goto _test_eof; + _test_eof7: cs = 7; goto _test_eof; + _test_eof8: cs = 8; goto _test_eof; + _test_eof9: cs = 9; goto _test_eof; + _test_eof10: cs = 10; goto _test_eof; + _test_eof11: cs = 11; goto _test_eof; + _test_eof12: cs = 12; goto _test_eof; + _test_eof13: cs = 13; goto _test_eof; + _test_eof14: cs = 14; goto _test_eof; + _test_eof15: cs = 15; goto _test_eof; + _test_eof16: cs = 16; goto _test_eof; + _test_eof17: cs = 17; goto _test_eof; + _test_eof18: cs = 18; goto _test_eof; + _test_eof27: cs = 27; goto _test_eof; + _test_eof19: cs = 19; goto _test_eof; + _test_eof20: cs = 20; goto _test_eof; + _test_eof21: cs = 21; goto _test_eof; + _test_eof22: cs = 22; goto _test_eof; + _test_eof23: cs = 23; goto _test_eof; + _test_eof24: cs = 24; goto _test_eof; + _test_eof25: cs = 25; goto _test_eof; + _test_eof26: cs = 26; goto _test_eof; + + _test_eof: {} + _out: {} + } + + #line 183 "parser.rl" + + + if (cs >= JSON_object_first_final) { + if (json->create_additions) { + VALUE klassname; + if (NIL_P(json->object_class)) { + klassname = rb_hash_aref(*result, json->create_id); + } else { + klassname = rb_funcall(*result, i_aref, 1, json->create_id); + } + if (!NIL_P(klassname)) { + VALUE klass = rb_funcall(mJSON, i_deep_const_get, 1, klassname); + if (RTEST(rb_funcall(klass, i_json_creatable_p, 0))) { + *result = rb_funcall(klass, i_json_create, 1, *result); + } + } + } + return p + 1; + } else { + return NULL; + } +} + + + +enum {JSON_value_start = 1}; +enum {JSON_value_first_final = 29}; +enum {JSON_value_error = 0}; + +enum {JSON_value_en_main = 1}; + +static const char MAYBE_UNUSED(_JSON_value_nfa_targs)[] = { + 0, 0 +}; + +static const char MAYBE_UNUSED(_JSON_value_nfa_offsets)[] = { + 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 +}; + +static const char MAYBE_UNUSED(_JSON_value_nfa_push_actions)[] = { + 0, 0 +}; + +static const char MAYBE_UNUSED(_JSON_value_nfa_pop_trans)[] = { + 0, 0 +}; + + +#line 283 "parser.rl" + + +static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting) +{ + int cs = EVIL; + + + { + cs = (int)JSON_value_start; + } + + #line 290 "parser.rl" + + + { + if ( p == pe ) + goto _test_eof; + switch ( cs ) + { + case 1: + goto st_case_1; + case 0: + goto st_case_0; + case 29: + goto st_case_29; + case 2: + goto st_case_2; + case 3: + goto st_case_3; + case 4: + goto st_case_4; + case 5: + goto st_case_5; + case 6: + goto st_case_6; + case 7: + goto st_case_7; + case 8: + goto st_case_8; + case 9: + goto st_case_9; + case 10: + goto st_case_10; + case 11: + goto st_case_11; + case 12: + goto st_case_12; + case 13: + goto st_case_13; + case 14: + goto st_case_14; + case 15: + goto st_case_15; + case 16: + goto st_case_16; + case 17: + goto st_case_17; + case 18: + goto st_case_18; + case 19: + goto st_case_19; + case 20: + goto st_case_20; + case 21: + goto st_case_21; + case 22: + goto st_case_22; + case 23: + goto st_case_23; + case 24: + goto st_case_24; + case 25: + goto st_case_25; + case 26: + goto st_case_26; + case 27: + goto st_case_27; + case 28: + goto st_case_28; + } + goto st_out; + st1: + p+= 1; + if ( p == pe ) + goto _test_eof1; + st_case_1: + switch( ( (*( p))) ) { + case 13: { + goto st1; + } + case 32: { + goto st1; + } + case 34: { + goto ctr2; + } + case 45: { + goto ctr3; + } + case 47: { + goto st6; + } + case 73: { + goto st10; + } + case 78: { + goto st17; + } + case 91: { + goto ctr7; + } + case 102: { + goto st19; + } + case 110: { + goto st23; + } + case 116: { + goto st26; + } + case 123: { + goto ctr11; + } + } + if ( ( (*( p))) > 10 ) { + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto ctr3; + } + } else if ( ( (*( p))) >= 9 ) { + goto st1; + } + { + goto st0; + } + st_case_0: + st0: + cs = 0; + goto _out; + ctr2: + { + #line 235 "parser.rl" + + char *np = JSON_parse_string(json, p, pe, result); + if (np == NULL) { {p = p - 1; } {p+= 1; cs = 29; goto _out;} } else {p = (( np))-1;} + + } + + goto st29; + ctr3: + { + #line 240 "parser.rl" + + char *np; + if(pe > p + 8 && !strncmp(MinusInfinity, p, 9)) { + if (json->allow_nan) { + *result = CMinusInfinity; + {p = (( p + 10))-1;} + + {p = p - 1; } {p+= 1; cs = 29; goto _out;} + } else { + rb_enc_raise(EXC_ENCODING eParserError, "unexpected token at '%s'", p); + } + } + np = JSON_parse_float(json, p, pe, result); + if (np != NULL) {p = (( np))-1;} + + np = JSON_parse_integer(json, p, pe, result); + if (np != NULL) {p = (( np))-1;} + + {p = p - 1; } {p+= 1; cs = 29; goto _out;} + } + + goto st29; + ctr7: + { + #line 258 "parser.rl" + + char *np; + np = JSON_parse_array(json, p, pe, result, current_nesting + 1); + if (np == NULL) { {p = p - 1; } {p+= 1; cs = 29; goto _out;} } else {p = (( np))-1;} + + } + + goto st29; + ctr11: + { + #line 264 "parser.rl" + + char *np; + np = JSON_parse_object(json, p, pe, result, current_nesting + 1); + if (np == NULL) { {p = p - 1; } {p+= 1; cs = 29; goto _out;} } else {p = (( np))-1;} + + } + + goto st29; + ctr25: + { + #line 228 "parser.rl" + + if (json->allow_nan) { + *result = CInfinity; + } else { + rb_enc_raise(EXC_ENCODING eParserError, "unexpected token at '%s'", p - 8); + } + } + + goto st29; + ctr27: + { + #line 221 "parser.rl" + + if (json->allow_nan) { + *result = CNaN; + } else { + rb_enc_raise(EXC_ENCODING eParserError, "unexpected token at '%s'", p - 2); + } + } + + goto st29; + ctr31: + { + #line 215 "parser.rl" + + *result = Qfalse; + } + + goto st29; + ctr34: + { + #line 212 "parser.rl" + + *result = Qnil; + } + + goto st29; + ctr37: + { + #line 218 "parser.rl" + + *result = Qtrue; + } + + goto st29; + st29: + p+= 1; + if ( p == pe ) + goto _test_eof29; + st_case_29: + { + #line 270 "parser.rl" + {p = p - 1; } {p+= 1; cs = 29; goto _out;} } + switch( ( (*( p))) ) { + case 13: { + goto st29; + } + case 32: { + goto st29; + } + case 47: { + goto st2; + } + } + if ( 9 <= ( (*( p))) && ( (*( p))) <= 10 ) { + goto st29; + } + { + goto st0; + } + st2: + p+= 1; + if ( p == pe ) + goto _test_eof2; + st_case_2: + switch( ( (*( p))) ) { + case 42: { + goto st3; + } + case 47: { + goto st5; + } + } + { + goto st0; + } + st3: + p+= 1; + if ( p == pe ) + goto _test_eof3; + st_case_3: + if ( ( (*( p))) == 42 ) { + goto st4; + } + { + goto st3; + } + st4: + p+= 1; + if ( p == pe ) + goto _test_eof4; + st_case_4: + switch( ( (*( p))) ) { + case 42: { + goto st4; + } + case 47: { + goto st29; + } + } + { + goto st3; + } + st5: + p+= 1; + if ( p == pe ) + goto _test_eof5; + st_case_5: + if ( ( (*( p))) == 10 ) { + goto st29; + } + { + goto st5; + } + st6: + p+= 1; + if ( p == pe ) + goto _test_eof6; + st_case_6: + switch( ( (*( p))) ) { + case 42: { + goto st7; + } + case 47: { + goto st9; + } + } + { + goto st0; + } + st7: + p+= 1; + if ( p == pe ) + goto _test_eof7; + st_case_7: + if ( ( (*( p))) == 42 ) { + goto st8; + } + { + goto st7; + } + st8: + p+= 1; + if ( p == pe ) + goto _test_eof8; + st_case_8: + switch( ( (*( p))) ) { + case 42: { + goto st8; + } + case 47: { + goto st1; + } + } + { + goto st7; + } + st9: + p+= 1; + if ( p == pe ) + goto _test_eof9; + st_case_9: + if ( ( (*( p))) == 10 ) { + goto st1; + } + { + goto st9; + } + st10: + p+= 1; + if ( p == pe ) + goto _test_eof10; + st_case_10: + if ( ( (*( p))) == 110 ) { + goto st11; + } + { + goto st0; + } + st11: + p+= 1; + if ( p == pe ) + goto _test_eof11; + st_case_11: + if ( ( (*( p))) == 102 ) { + goto st12; + } + { + goto st0; + } + st12: + p+= 1; + if ( p == pe ) + goto _test_eof12; + st_case_12: + if ( ( (*( p))) == 105 ) { + goto st13; + } + { + goto st0; + } + st13: + p+= 1; + if ( p == pe ) + goto _test_eof13; + st_case_13: + if ( ( (*( p))) == 110 ) { + goto st14; + } + { + goto st0; + } + st14: + p+= 1; + if ( p == pe ) + goto _test_eof14; + st_case_14: + if ( ( (*( p))) == 105 ) { + goto st15; + } + { + goto st0; + } + st15: + p+= 1; + if ( p == pe ) + goto _test_eof15; + st_case_15: + if ( ( (*( p))) == 116 ) { + goto st16; + } + { + goto st0; + } + st16: + p+= 1; + if ( p == pe ) + goto _test_eof16; + st_case_16: + if ( ( (*( p))) == 121 ) { + goto ctr25; + } + { + goto st0; + } + st17: + p+= 1; + if ( p == pe ) + goto _test_eof17; + st_case_17: + if ( ( (*( p))) == 97 ) { + goto st18; + } + { + goto st0; + } + st18: + p+= 1; + if ( p == pe ) + goto _test_eof18; + st_case_18: + if ( ( (*( p))) == 78 ) { + goto ctr27; + } + { + goto st0; + } + st19: + p+= 1; + if ( p == pe ) + goto _test_eof19; + st_case_19: + if ( ( (*( p))) == 97 ) { + goto st20; + } + { + goto st0; + } + st20: + p+= 1; + if ( p == pe ) + goto _test_eof20; + st_case_20: + if ( ( (*( p))) == 108 ) { + goto st21; + } + { + goto st0; + } + st21: + p+= 1; + if ( p == pe ) + goto _test_eof21; + st_case_21: + if ( ( (*( p))) == 115 ) { + goto st22; + } + { + goto st0; + } + st22: + p+= 1; + if ( p == pe ) + goto _test_eof22; + st_case_22: + if ( ( (*( p))) == 101 ) { + goto ctr31; + } + { + goto st0; + } + st23: + p+= 1; + if ( p == pe ) + goto _test_eof23; + st_case_23: + if ( ( (*( p))) == 117 ) { + goto st24; + } + { + goto st0; + } + st24: + p+= 1; + if ( p == pe ) + goto _test_eof24; + st_case_24: + if ( ( (*( p))) == 108 ) { + goto st25; + } + { + goto st0; + } + st25: + p+= 1; + if ( p == pe ) + goto _test_eof25; + st_case_25: + if ( ( (*( p))) == 108 ) { + goto ctr34; + } + { + goto st0; + } + st26: + p+= 1; + if ( p == pe ) + goto _test_eof26; + st_case_26: + if ( ( (*( p))) == 114 ) { + goto st27; + } + { + goto st0; + } + st27: + p+= 1; + if ( p == pe ) + goto _test_eof27; + st_case_27: + if ( ( (*( p))) == 117 ) { + goto st28; + } + { + goto st0; + } + st28: + p+= 1; + if ( p == pe ) + goto _test_eof28; + st_case_28: + if ( ( (*( p))) == 101 ) { + goto ctr37; + } + { + goto st0; + } + st_out: + _test_eof1: cs = 1; goto _test_eof; + _test_eof29: cs = 29; goto _test_eof; + _test_eof2: cs = 2; goto _test_eof; + _test_eof3: cs = 3; goto _test_eof; + _test_eof4: cs = 4; goto _test_eof; + _test_eof5: cs = 5; goto _test_eof; + _test_eof6: cs = 6; goto _test_eof; + _test_eof7: cs = 7; goto _test_eof; + _test_eof8: cs = 8; goto _test_eof; + _test_eof9: cs = 9; goto _test_eof; + _test_eof10: cs = 10; goto _test_eof; + _test_eof11: cs = 11; goto _test_eof; + _test_eof12: cs = 12; goto _test_eof; + _test_eof13: cs = 13; goto _test_eof; + _test_eof14: cs = 14; goto _test_eof; + _test_eof15: cs = 15; goto _test_eof; + _test_eof16: cs = 16; goto _test_eof; + _test_eof17: cs = 17; goto _test_eof; + _test_eof18: cs = 18; goto _test_eof; + _test_eof19: cs = 19; goto _test_eof; + _test_eof20: cs = 20; goto _test_eof; + _test_eof21: cs = 21; goto _test_eof; + _test_eof22: cs = 22; goto _test_eof; + _test_eof23: cs = 23; goto _test_eof; + _test_eof24: cs = 24; goto _test_eof; + _test_eof25: cs = 25; goto _test_eof; + _test_eof26: cs = 26; goto _test_eof; + _test_eof27: cs = 27; goto _test_eof; + _test_eof28: cs = 28; goto _test_eof; + + _test_eof: {} + _out: {} + } + + #line 291 "parser.rl" + + + if (json->freeze) { + OBJ_FREEZE(*result); + } + + if (cs >= JSON_value_first_final) { + return p; + } else { + return NULL; + } +} + + +enum {JSON_integer_start = 1}; +enum {JSON_integer_first_final = 3}; +enum {JSON_integer_error = 0}; + +enum {JSON_integer_en_main = 1}; + +static const char MAYBE_UNUSED(_JSON_integer_nfa_targs)[] = { + 0, 0 +}; + +static const char MAYBE_UNUSED(_JSON_integer_nfa_offsets)[] = { + 0, 0, 0, 0, 0, 0, 0 +}; + +static const char MAYBE_UNUSED(_JSON_integer_nfa_push_actions)[] = { + 0, 0 +}; + +static const char MAYBE_UNUSED(_JSON_integer_nfa_pop_trans)[] = { + 0, 0 +}; + + +#line 311 "parser.rl" + + +static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *result) +{ + int cs = EVIL; + + + { + cs = (int)JSON_integer_start; + } + + #line 318 "parser.rl" + + json->memo = p; + + { + if ( p == pe ) + goto _test_eof; + switch ( cs ) + { + case 1: + goto st_case_1; + case 0: + goto st_case_0; + case 2: + goto st_case_2; + case 3: + goto st_case_3; + case 4: + goto st_case_4; + case 5: + goto st_case_5; + } + goto st_out; + st_case_1: + switch( ( (*( p))) ) { + case 45: { + goto st2; + } + case 48: { + goto st3; + } + } + if ( 49 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto st5; + } + { + goto st0; + } + st_case_0: + st0: + cs = 0; + goto _out; + st2: + p+= 1; + if ( p == pe ) + goto _test_eof2; + st_case_2: + if ( ( (*( p))) == 48 ) { + goto st3; + } + if ( 49 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto st5; + } + { + goto st0; + } + st3: + p+= 1; + if ( p == pe ) + goto _test_eof3; + st_case_3: + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto st0; + } + { + goto ctr4; + } + ctr4: + { + #line 308 "parser.rl" + {p = p - 1; } {p+= 1; cs = 4; goto _out;} } + + goto st4; + st4: + p+= 1; + if ( p == pe ) + goto _test_eof4; + st_case_4: + { + goto st0; + } + st5: + p+= 1; + if ( p == pe ) + goto _test_eof5; + st_case_5: + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto st5; + } + { + goto ctr4; + } + st_out: + _test_eof2: cs = 2; goto _test_eof; + _test_eof3: cs = 3; goto _test_eof; + _test_eof4: cs = 4; goto _test_eof; + _test_eof5: cs = 5; goto _test_eof; + + _test_eof: {} + _out: {} + } + + #line 320 "parser.rl" + + + if (cs >= JSON_integer_first_final) { + long len = p - json->memo; + fbuffer_clear(json->fbuffer); + fbuffer_append(json->fbuffer, json->memo, len); + fbuffer_append_char(json->fbuffer, '\0'); + *result = rb_cstr2inum(FBUFFER_PTR(json->fbuffer), 10); + return p + 1; + } else { + return NULL; + } +} + + +enum {JSON_float_start = 1}; +enum {JSON_float_first_final = 8}; +enum {JSON_float_error = 0}; + +enum {JSON_float_en_main = 1}; + +static const char MAYBE_UNUSED(_JSON_float_nfa_targs)[] = { + 0, 0 +}; + +static const char MAYBE_UNUSED(_JSON_float_nfa_offsets)[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0 +}; + +static const char MAYBE_UNUSED(_JSON_float_nfa_push_actions)[] = { + 0, 0 +}; + +static const char MAYBE_UNUSED(_JSON_float_nfa_pop_trans)[] = { + 0, 0 +}; + + +#line 345 "parser.rl" + + +static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *result) +{ + int cs = EVIL; + + + { + cs = (int)JSON_float_start; + } + + #line 352 "parser.rl" + + json->memo = p; + + { + if ( p == pe ) + goto _test_eof; + switch ( cs ) + { + case 1: + goto st_case_1; + case 0: + goto st_case_0; + case 2: + goto st_case_2; + case 3: + goto st_case_3; + case 4: + goto st_case_4; + case 8: + goto st_case_8; + case 9: + goto st_case_9; + case 5: + goto st_case_5; + case 6: + goto st_case_6; + case 10: + goto st_case_10; + case 7: + goto st_case_7; + } + goto st_out; + st_case_1: + switch( ( (*( p))) ) { + case 45: { + goto st2; + } + case 48: { + goto st3; + } + } + if ( 49 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto st7; + } + { + goto st0; + } + st_case_0: + st0: + cs = 0; + goto _out; + st2: + p+= 1; + if ( p == pe ) + goto _test_eof2; + st_case_2: + if ( ( (*( p))) == 48 ) { + goto st3; + } + if ( 49 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto st7; + } + { + goto st0; + } + st3: + p+= 1; + if ( p == pe ) + goto _test_eof3; + st_case_3: + switch( ( (*( p))) ) { + case 46: { + goto st4; + } + case 69: { + goto st5; + } + case 101: { + goto st5; + } + } + { + goto st0; + } + st4: + p+= 1; + if ( p == pe ) + goto _test_eof4; + st_case_4: + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto st8; + } + { + goto st0; + } + st8: + p+= 1; + if ( p == pe ) + goto _test_eof8; + st_case_8: + switch( ( (*( p))) ) { + case 69: { + goto st5; + } + case 101: { + goto st5; + } + } + if ( ( (*( p))) > 46 ) { + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto st8; + } + } else if ( ( (*( p))) >= 45 ) { + goto st0; + } + { + goto ctr9; + } + ctr9: + { + #line 339 "parser.rl" + {p = p - 1; } {p+= 1; cs = 9; goto _out;} } + + goto st9; + st9: + p+= 1; + if ( p == pe ) + goto _test_eof9; + st_case_9: + { + goto st0; + } + st5: + p+= 1; + if ( p == pe ) + goto _test_eof5; + st_case_5: + switch( ( (*( p))) ) { + case 43: { + goto st6; + } + case 45: { + goto st6; + } + } + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto st10; + } + { + goto st0; + } + st6: + p+= 1; + if ( p == pe ) + goto _test_eof6; + st_case_6: + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto st10; + } + { + goto st0; + } + st10: + p+= 1; + if ( p == pe ) + goto _test_eof10; + st_case_10: + switch( ( (*( p))) ) { + case 69: { + goto st0; + } + case 101: { + goto st0; + } + } + if ( ( (*( p))) > 46 ) { + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto st10; + } + } else if ( ( (*( p))) >= 45 ) { + goto st0; + } + { + goto ctr9; + } + st7: + p+= 1; + if ( p == pe ) + goto _test_eof7; + st_case_7: + switch( ( (*( p))) ) { + case 46: { + goto st4; + } + case 69: { + goto st5; + } + case 101: { + goto st5; + } + } + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto st7; + } + { + goto st0; + } + st_out: + _test_eof2: cs = 2; goto _test_eof; + _test_eof3: cs = 3; goto _test_eof; + _test_eof4: cs = 4; goto _test_eof; + _test_eof8: cs = 8; goto _test_eof; + _test_eof9: cs = 9; goto _test_eof; + _test_eof5: cs = 5; goto _test_eof; + _test_eof6: cs = 6; goto _test_eof; + _test_eof10: cs = 10; goto _test_eof; + _test_eof7: cs = 7; goto _test_eof; + + _test_eof: {} + _out: {} + } + + #line 354 "parser.rl" + + + if (cs >= JSON_float_first_final) { + VALUE mod = Qnil; + ID method_id = 0; + if (rb_respond_to(json->decimal_class, i_try_convert)) { + mod = json->decimal_class; + method_id = i_try_convert; + } else if (rb_respond_to(json->decimal_class, i_new)) { + mod = json->decimal_class; + method_id = i_new; + } else if (RB_TYPE_P(json->decimal_class, T_CLASS)) { + VALUE name = rb_class_name(json->decimal_class); + const char *name_cstr = RSTRING_PTR(name); + const char *last_colon = strrchr(name_cstr, ':'); + if (last_colon) { + const char *mod_path_end = last_colon - 1; + VALUE mod_path = rb_str_substr(name, 0, mod_path_end - name_cstr); + mod = rb_path_to_class(mod_path); + + const char *method_name_beg = last_colon + 1; + long before_len = method_name_beg - name_cstr; + long len = RSTRING_LEN(name) - before_len; + VALUE method_name = rb_str_substr(name, before_len, len); + method_id = SYM2ID(rb_str_intern(method_name)); + } else { + mod = rb_mKernel; + method_id = SYM2ID(rb_str_intern(name)); + } + } + + long len = p - json->memo; + fbuffer_clear(json->fbuffer); + fbuffer_append(json->fbuffer, json->memo, len); + fbuffer_append_char(json->fbuffer, '\0'); + + if (method_id) { + VALUE text = rb_str_new2(FBUFFER_PTR(json->fbuffer)); + *result = rb_funcallv(mod, method_id, 1, &text); + } else { + *result = DBL2NUM(rb_cstr_to_dbl(FBUFFER_PTR(json->fbuffer), 1)); + } + + return p + 1; + } else { + return NULL; + } +} + + + +enum {JSON_array_start = 1}; +enum {JSON_array_first_final = 17}; +enum {JSON_array_error = 0}; + +enum {JSON_array_en_main = 1}; + +static const char MAYBE_UNUSED(_JSON_array_nfa_targs)[] = { + 0, 0 +}; + +static const char MAYBE_UNUSED(_JSON_array_nfa_offsets)[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0 +}; + +static const char MAYBE_UNUSED(_JSON_array_nfa_push_actions)[] = { + 0, 0 +}; + +static const char MAYBE_UNUSED(_JSON_array_nfa_pop_trans)[] = { + 0, 0 +}; + + +#line 432 "parser.rl" + + +static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting) +{ + int cs = EVIL; + VALUE array_class = json->array_class; + + if (json->max_nesting && current_nesting > json->max_nesting) { + rb_raise(eNestingError, "nesting of %d is too deep", current_nesting); + } + *result = NIL_P(array_class) ? rb_ary_new() : rb_class_new_instance(0, 0, array_class); + + + { + cs = (int)JSON_array_start; + } + + #line 445 "parser.rl" + + + { + if ( p == pe ) + goto _test_eof; + switch ( cs ) + { + case 1: + goto st_case_1; + case 0: + goto st_case_0; + case 2: + goto st_case_2; + case 3: + goto st_case_3; + case 4: + goto st_case_4; + case 5: + goto st_case_5; + case 6: + goto st_case_6; + case 7: + goto st_case_7; + case 8: + goto st_case_8; + case 9: + goto st_case_9; + case 10: + goto st_case_10; + case 11: + goto st_case_11; + case 12: + goto st_case_12; + case 17: + goto st_case_17; + case 13: + goto st_case_13; + case 14: + goto st_case_14; + case 15: + goto st_case_15; + case 16: + goto st_case_16; + } + goto st_out; + st_case_1: + if ( ( (*( p))) == 91 ) { + goto st2; + } + { + goto st0; + } + st_case_0: + st0: + cs = 0; + goto _out; + st2: + p+= 1; + if ( p == pe ) + goto _test_eof2; + st_case_2: + switch( ( (*( p))) ) { + case 13: { + goto st2; + } + case 32: { + goto st2; + } + case 34: { + goto ctr2; + } + case 45: { + goto ctr2; + } + case 47: { + goto st13; + } + case 73: { + goto ctr2; + } + case 78: { + goto ctr2; + } + case 91: { + goto ctr2; + } + case 93: { + goto ctr4; + } + case 102: { + goto ctr2; + } + case 110: { + goto ctr2; + } + case 116: { + goto ctr2; + } + case 123: { + goto ctr2; + } + } + if ( ( (*( p))) > 10 ) { + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto ctr2; + } + } else if ( ( (*( p))) >= 9 ) { + goto st2; + } + { + goto st0; + } + ctr2: + { + #line 409 "parser.rl" + + VALUE v = Qnil; + char *np = JSON_parse_value(json, p, pe, &v, current_nesting); + if (np == NULL) { + {p = p - 1; } {p+= 1; cs = 3; goto _out;} + } else { + if (NIL_P(json->array_class)) { + rb_ary_push(*result, v); + } else { + rb_funcall(*result, i_leftshift, 1, v); + } + {p = (( np))-1;} + + } + } + + goto st3; + st3: + p+= 1; + if ( p == pe ) + goto _test_eof3; + st_case_3: + switch( ( (*( p))) ) { + case 13: { + goto st3; + } + case 32: { + goto st3; + } + case 44: { + goto st4; + } + case 47: { + goto st9; + } + case 93: { + goto ctr4; + } + } + if ( 9 <= ( (*( p))) && ( (*( p))) <= 10 ) { + goto st3; + } + { + goto st0; + } + st4: + p+= 1; + if ( p == pe ) + goto _test_eof4; + st_case_4: + switch( ( (*( p))) ) { + case 13: { + goto st4; + } + case 32: { + goto st4; + } + case 34: { + goto ctr2; + } + case 45: { + goto ctr2; + } + case 47: { + goto st5; + } + case 73: { + goto ctr2; + } + case 78: { + goto ctr2; + } + case 91: { + goto ctr2; + } + case 102: { + goto ctr2; + } + case 110: { + goto ctr2; + } + case 116: { + goto ctr2; + } + case 123: { + goto ctr2; + } + } + if ( ( (*( p))) > 10 ) { + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto ctr2; + } + } else if ( ( (*( p))) >= 9 ) { + goto st4; + } + { + goto st0; + } + st5: + p+= 1; + if ( p == pe ) + goto _test_eof5; + st_case_5: + switch( ( (*( p))) ) { + case 42: { + goto st6; + } + case 47: { + goto st8; + } + } + { + goto st0; + } + st6: + p+= 1; + if ( p == pe ) + goto _test_eof6; + st_case_6: + if ( ( (*( p))) == 42 ) { + goto st7; + } + { + goto st6; + } + st7: + p+= 1; + if ( p == pe ) + goto _test_eof7; + st_case_7: + switch( ( (*( p))) ) { + case 42: { + goto st7; + } + case 47: { + goto st4; + } + } + { + goto st6; + } + st8: + p+= 1; + if ( p == pe ) + goto _test_eof8; + st_case_8: + if ( ( (*( p))) == 10 ) { + goto st4; + } + { + goto st8; + } + st9: + p+= 1; + if ( p == pe ) + goto _test_eof9; + st_case_9: + switch( ( (*( p))) ) { + case 42: { + goto st10; + } + case 47: { + goto st12; + } + } + { + goto st0; + } + st10: + p+= 1; + if ( p == pe ) + goto _test_eof10; + st_case_10: + if ( ( (*( p))) == 42 ) { + goto st11; + } + { + goto st10; + } + st11: + p+= 1; + if ( p == pe ) + goto _test_eof11; + st_case_11: + switch( ( (*( p))) ) { + case 42: { + goto st11; + } + case 47: { + goto st3; + } + } + { + goto st10; + } + st12: + p+= 1; + if ( p == pe ) + goto _test_eof12; + st_case_12: + if ( ( (*( p))) == 10 ) { + goto st3; + } + { + goto st12; + } + ctr4: + { + #line 424 "parser.rl" + {p = p - 1; } {p+= 1; cs = 17; goto _out;} } + + goto st17; + st17: + p+= 1; + if ( p == pe ) + goto _test_eof17; + st_case_17: + { + goto st0; + } + st13: + p+= 1; + if ( p == pe ) + goto _test_eof13; + st_case_13: + switch( ( (*( p))) ) { + case 42: { + goto st14; + } + case 47: { + goto st16; + } + } + { + goto st0; + } + st14: + p+= 1; + if ( p == pe ) + goto _test_eof14; + st_case_14: + if ( ( (*( p))) == 42 ) { + goto st15; + } + { + goto st14; + } + st15: + p+= 1; + if ( p == pe ) + goto _test_eof15; + st_case_15: + switch( ( (*( p))) ) { + case 42: { + goto st15; + } + case 47: { + goto st2; + } + } + { + goto st14; + } + st16: + p+= 1; + if ( p == pe ) + goto _test_eof16; + st_case_16: + if ( ( (*( p))) == 10 ) { + goto st2; + } + { + goto st16; + } + st_out: + _test_eof2: cs = 2; goto _test_eof; + _test_eof3: cs = 3; goto _test_eof; + _test_eof4: cs = 4; goto _test_eof; + _test_eof5: cs = 5; goto _test_eof; + _test_eof6: cs = 6; goto _test_eof; + _test_eof7: cs = 7; goto _test_eof; + _test_eof8: cs = 8; goto _test_eof; + _test_eof9: cs = 9; goto _test_eof; + _test_eof10: cs = 10; goto _test_eof; + _test_eof11: cs = 11; goto _test_eof; + _test_eof12: cs = 12; goto _test_eof; + _test_eof17: cs = 17; goto _test_eof; + _test_eof13: cs = 13; goto _test_eof; + _test_eof14: cs = 14; goto _test_eof; + _test_eof15: cs = 15; goto _test_eof; + _test_eof16: cs = 16; goto _test_eof; + + _test_eof: {} + _out: {} + } + + #line 446 "parser.rl" + + + if(cs >= JSON_array_first_final) { + return p + 1; + } else { + rb_enc_raise(EXC_ENCODING eParserError, "unexpected token at '%s'", p); + return NULL; + } +} + +static const size_t MAX_STACK_BUFFER_SIZE = 128; +static VALUE json_string_unescape(char *string, char *stringEnd, int intern, int symbolize) +{ + VALUE result = Qnil; + size_t bufferSize = stringEnd - string; + char *p = string, *pe = string, *unescape, *bufferStart, *buffer; + int unescape_len; + char buf[4]; + + if (bufferSize > MAX_STACK_BUFFER_SIZE) { +# ifdef HAVE_RB_ENC_INTERNED_STR + bufferStart = buffer = ALLOC_N(char, bufferSize ? bufferSize : 1); +# else + bufferStart = buffer = ALLOC_N(char, bufferSize); +# endif + } else { +# ifdef HAVE_RB_ENC_INTERNED_STR + bufferStart = buffer = ALLOCA_N(char, bufferSize ? bufferSize : 1); +# else + bufferStart = buffer = ALLOCA_N(char, bufferSize); +# endif + } + + while (pe < stringEnd) { + if (*pe == '\\') { + unescape = (char *) "?"; + unescape_len = 1; + if (pe > p) { + MEMCPY(buffer, p, char, pe - p); + buffer += pe - p; + } + switch (*++pe) { + case 'n': + unescape = (char *) "\n"; + break; + case 'r': + unescape = (char *) "\r"; + break; + case 't': + unescape = (char *) "\t"; + break; + case '"': + unescape = (char *) "\""; + break; + case '\\': + unescape = (char *) "\\"; + break; + case 'b': + unescape = (char *) "\b"; + break; + case 'f': + unescape = (char *) "\f"; + break; + case 'u': + if (pe > stringEnd - 4) { + if (bufferSize > MAX_STACK_BUFFER_SIZE) { + free(bufferStart); + } + rb_enc_raise( + EXC_ENCODING eParserError, + "incomplete unicode character escape sequence at '%s'", p + ); + } else { + UTF32 ch = unescape_unicode((unsigned char *) ++pe); + pe += 3; + if (UNI_SUR_HIGH_START == (ch & 0xFC00)) { + pe++; + if (pe > stringEnd - 6) { + if (bufferSize > MAX_STACK_BUFFER_SIZE) { + free(bufferStart); + } + rb_enc_raise( + EXC_ENCODING eParserError, + "incomplete surrogate pair at '%s'", p + ); + } + if (pe[0] == '\\' && pe[1] == 'u') { + UTF32 sur = unescape_unicode((unsigned char *) pe + 2); + ch = (((ch & 0x3F) << 10) | ((((ch >> 6) & 0xF) + 1) << 16) + | (sur & 0x3FF)); + pe += 5; + } else { + unescape = (char *) "?"; + break; + } + } + unescape_len = convert_UTF32_to_UTF8(buf, ch); + unescape = buf; + } + break; + default: + p = pe; + continue; + } + MEMCPY(buffer, unescape, char, unescape_len); + buffer += unescape_len; + p = ++pe; + } else { + pe++; + } + } + + if (pe > p) { + MEMCPY(buffer, p, char, pe - p); + buffer += pe - p; + } + + # ifdef HAVE_RB_ENC_INTERNED_STR + if (intern) { + result = rb_enc_interned_str(bufferStart, (long)(buffer - bufferStart), rb_utf8_encoding()); + } else { + result = rb_utf8_str_new(bufferStart, (long)(buffer - bufferStart)); + } + if (bufferSize > MAX_STACK_BUFFER_SIZE) { + free(bufferStart); + } + # else + result = rb_utf8_str_new(bufferStart, (long)(buffer - bufferStart)); + + if (bufferSize > MAX_STACK_BUFFER_SIZE) { + free(bufferStart); + } + + if (intern) { + # if STR_UMINUS_DEDUPE_FROZEN + // Starting from MRI 2.8 it is preferable to freeze the string + // before deduplication so that it can be interned directly + // otherwise it would be duplicated first which is wasteful. + result = rb_funcall(rb_str_freeze(result), i_uminus, 0); + # elif STR_UMINUS_DEDUPE + // MRI 2.5 and older do not deduplicate strings that are already + // frozen. + result = rb_funcall(result, i_uminus, 0); + # else + result = rb_str_freeze(result); + # endif + } + # endif + + if (symbolize) { + result = rb_str_intern(result); + } + + return result; +} + + +enum {JSON_string_start = 1}; +enum {JSON_string_first_final = 8}; +enum {JSON_string_error = 0}; + +enum {JSON_string_en_main = 1}; + +static const char MAYBE_UNUSED(_JSON_string_nfa_targs)[] = { + 0, 0 +}; + +static const char MAYBE_UNUSED(_JSON_string_nfa_offsets)[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0 +}; + +static const char MAYBE_UNUSED(_JSON_string_nfa_push_actions)[] = { + 0, 0 +}; + +static const char MAYBE_UNUSED(_JSON_string_nfa_pop_trans)[] = { + 0, 0 +}; + + +#line 612 "parser.rl" + + +static int +match_i(VALUE regexp, VALUE klass, VALUE memo) +{ + if (regexp == Qundef) return ST_STOP; + if (RTEST(rb_funcall(klass, i_json_creatable_p, 0)) && + RTEST(rb_funcall(regexp, i_match, 1, rb_ary_entry(memo, 0)))) { + rb_ary_push(memo, klass); + return ST_STOP; + } + return ST_CONTINUE; +} + +static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *result) +{ + int cs = EVIL; + VALUE match_string; + + + { + cs = (int)JSON_string_start; + } + + #line 632 "parser.rl" + + json->memo = p; + + { + if ( p == pe ) + goto _test_eof; + switch ( cs ) + { + case 1: + goto st_case_1; + case 0: + goto st_case_0; + case 2: + goto st_case_2; + case 8: + goto st_case_8; + case 3: + goto st_case_3; + case 4: + goto st_case_4; + case 5: + goto st_case_5; + case 6: + goto st_case_6; + case 7: + goto st_case_7; + } + goto st_out; + st_case_1: + if ( ( (*( p))) == 34 ) { + goto st2; + } + { + goto st0; + } + st_case_0: + st0: + cs = 0; + goto _out; + st2: + p+= 1; + if ( p == pe ) + goto _test_eof2; + st_case_2: + switch( ( (*( p))) ) { + case 34: { + goto ctr2; + } + case 92: { + goto st3; + } + } + if ( 0 <= (signed char)(*(p)) && (*(p)) <= 31 ) { + goto st0; + } + { + goto st2; + } + ctr2: + { + #line 599 "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)) { + {p = p - 1; } + {p+= 1; cs = 8; goto _out;} + } else { + {p = (( p + 1))-1;} + + } + } + { + #line 609 "parser.rl" + {p = p - 1; } {p+= 1; cs = 8; goto _out;} } + + goto st8; + st8: + p+= 1; + if ( p == pe ) + goto _test_eof8; + st_case_8: + { + goto st0; + } + st3: + p+= 1; + if ( p == pe ) + goto _test_eof3; + st_case_3: + if ( ( (*( p))) == 117 ) { + goto st4; + } + if ( 0 <= (signed char)(*(p)) && (*(p)) <= 31 ) { + goto st0; + } + { + goto st2; + } + st4: + p+= 1; + if ( p == pe ) + goto _test_eof4; + st_case_4: + if ( ( (*( p))) < 65 ) { + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto st5; + } + } else if ( ( (*( p))) > 70 ) { + if ( 97 <= ( (*( p))) && ( (*( p))) <= 102 ) { + goto st5; + } + } else { + goto st5; + } + { + goto st0; + } + st5: + p+= 1; + if ( p == pe ) + goto _test_eof5; + st_case_5: + if ( ( (*( p))) < 65 ) { + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto st6; + } + } else if ( ( (*( p))) > 70 ) { + if ( 97 <= ( (*( p))) && ( (*( p))) <= 102 ) { + goto st6; + } + } else { + goto st6; + } + { + goto st0; + } + st6: + p+= 1; + if ( p == pe ) + goto _test_eof6; + st_case_6: + if ( ( (*( p))) < 65 ) { + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto st7; + } + } else if ( ( (*( p))) > 70 ) { + if ( 97 <= ( (*( p))) && ( (*( p))) <= 102 ) { + goto st7; + } + } else { + goto st7; + } + { + goto st0; + } + st7: + p+= 1; + if ( p == pe ) + goto _test_eof7; + st_case_7: + if ( ( (*( p))) < 65 ) { + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto st2; + } + } else if ( ( (*( p))) > 70 ) { + if ( 97 <= ( (*( p))) && ( (*( p))) <= 102 ) { + goto st2; + } + } else { + goto st2; + } + { + goto st0; + } + st_out: + _test_eof2: cs = 2; goto _test_eof; + _test_eof8: cs = 8; goto _test_eof; + _test_eof3: cs = 3; goto _test_eof; + _test_eof4: cs = 4; goto _test_eof; + _test_eof5: cs = 5; goto _test_eof; + _test_eof6: cs = 6; goto _test_eof; + _test_eof7: cs = 7; goto _test_eof; + + _test_eof: {} + _out: {} + } + + #line 634 "parser.rl" + + + if (json->create_additions && RTEST(match_string = json->match_string)) { + VALUE klass; + VALUE memo = rb_ary_new2(2); + rb_ary_push(memo, *result); + rb_hash_foreach(match_string, match_i, memo); + klass = rb_ary_entry(memo, 1); + if (RTEST(klass)) { + *result = rb_funcall(klass, i_json_create, 1, *result); + } + } + + if (cs >= JSON_string_first_final) { + return p + 1; + } else { + return NULL; + } +} + +/* +* Document-class: JSON::Ext::Parser +* +* This is the JSON parser implemented as a C extension. It can be configured +* to be used by setting +* +* JSON.parser = JSON::Ext::Parser +* +* with the method parser= in JSON. +* +*/ + +static VALUE convert_encoding(VALUE source) +{ + #ifdef HAVE_RUBY_ENCODING_H + rb_encoding *enc = rb_enc_get(source); + if (enc == rb_ascii8bit_encoding()) { + if (OBJ_FROZEN(source)) { + source = rb_str_dup(source); + } + FORCE_UTF8(source); + } else { + source = rb_str_conv_enc(source, rb_enc_get(source), rb_utf8_encoding()); + } + #endif + return source; +} + +/* +* call-seq: new(source, opts => {}) +* +* Creates a new JSON::Ext::Parser instance for the string _source_. +* +* Creates a new JSON::Ext::Parser instance for the string _source_. +* +* It will be configured by the _opts_ hash. _opts_ can have the following +* keys: +* +* _opts_ can have the following keys: +* * *max_nesting*: The maximum depth of nesting allowed in the parsed data +* structures. Disable depth checking with :max_nesting => false|nil|0, it +* defaults to 100. +* * *allow_nan*: If set to true, allow NaN, Infinity and -Infinity in +* defiance of RFC 4627 to be parsed by the Parser. This option defaults to +* false. +* * *symbolize_names*: If set to true, returns symbols for the names +* (keys) in a JSON object. Otherwise strings are returned, which is +* also the default. It's not possible to use this option in +* conjunction with the *create_additions* option. +* * *create_additions*: If set to false, the Parser doesn't create +* additions even if a matching class and create_id was found. This option +* defaults to false. +* * *object_class*: Defaults to Hash +* * *array_class*: Defaults to Array +*/ +static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self) +{ + VALUE source, opts; + GET_PARSER_INIT; + + if (json->Vsource) { + rb_raise(rb_eTypeError, "already initialized instance"); + } + #ifdef HAVE_RB_SCAN_ARGS_OPTIONAL_HASH + rb_scan_args(argc, argv, "1:", &source, &opts); + #else + rb_scan_args(argc, argv, "11", &source, &opts); + #endif + if (!NIL_P(opts)) { + #ifndef HAVE_RB_SCAN_ARGS_OPTIONAL_HASH + opts = rb_convert_type(opts, T_HASH, "Hash", "to_hash"); + if (NIL_P(opts)) { + rb_raise(rb_eArgError, "opts needs to be like a hash"); + } else { + #endif + VALUE tmp = ID2SYM(i_max_nesting); + if (option_given_p(opts, tmp)) { + VALUE max_nesting = rb_hash_aref(opts, tmp); + if (RTEST(max_nesting)) { + Check_Type(max_nesting, T_FIXNUM); + json->max_nesting = FIX2INT(max_nesting); + } else { + json->max_nesting = 0; + } + } else { + json->max_nesting = 100; + } + tmp = ID2SYM(i_allow_nan); + if (option_given_p(opts, tmp)) { + json->allow_nan = RTEST(rb_hash_aref(opts, tmp)) ? 1 : 0; + } else { + json->allow_nan = 0; + } + tmp = ID2SYM(i_symbolize_names); + if (option_given_p(opts, tmp)) { + json->symbolize_names = RTEST(rb_hash_aref(opts, tmp)) ? 1 : 0; + } else { + json->symbolize_names = 0; + } + tmp = ID2SYM(i_freeze); + if (option_given_p(opts, tmp)) { + json->freeze = RTEST(rb_hash_aref(opts, tmp)) ? 1 : 0; + } else { + json->freeze = 0; + } + tmp = ID2SYM(i_create_additions); + if (option_given_p(opts, tmp)) { + json->create_additions = RTEST(rb_hash_aref(opts, tmp)); + } else { + json->create_additions = 0; + } + if (json->symbolize_names && json->create_additions) { + rb_raise(rb_eArgError, + "options :symbolize_names and :create_additions cannot be " + " used in conjunction"); + } + tmp = ID2SYM(i_create_id); + if (option_given_p(opts, tmp)) { + json->create_id = rb_hash_aref(opts, tmp); + } else { + json->create_id = rb_funcall(mJSON, i_create_id, 0); + } + tmp = ID2SYM(i_object_class); + if (option_given_p(opts, tmp)) { + json->object_class = rb_hash_aref(opts, tmp); + } else { + json->object_class = Qnil; + } + tmp = ID2SYM(i_array_class); + if (option_given_p(opts, tmp)) { + json->array_class = rb_hash_aref(opts, tmp); + } else { + json->array_class = Qnil; + } + tmp = ID2SYM(i_decimal_class); + if (option_given_p(opts, tmp)) { + json->decimal_class = rb_hash_aref(opts, tmp); + } else { + json->decimal_class = Qnil; + } + tmp = ID2SYM(i_match_string); + if (option_given_p(opts, tmp)) { + VALUE match_string = rb_hash_aref(opts, tmp); + json->match_string = RTEST(match_string) ? match_string : Qnil; + } else { + json->match_string = Qnil; + } + #ifndef HAVE_RB_SCAN_ARGS_OPTIONAL_HASH + } + #endif + } else { + json->max_nesting = 100; + json->allow_nan = 0; + json->create_additions = 0; + json->create_id = rb_funcall(mJSON, i_create_id, 0); + json->object_class = Qnil; + json->array_class = Qnil; + json->decimal_class = Qnil; + } + source = convert_encoding(StringValue(source)); + StringValue(source); + json->len = RSTRING_LEN(source); + json->source = RSTRING_PTR(source);; + json->Vsource = source; + return self; +} + + +enum {JSON_start = 1}; +enum {JSON_first_final = 10}; +enum {JSON_error = 0}; + +enum {JSON_en_main = 1}; + +static const char MAYBE_UNUSED(_JSON_nfa_targs)[] = { + 0, 0 +}; + +static const char MAYBE_UNUSED(_JSON_nfa_offsets)[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0 +}; + +static const char MAYBE_UNUSED(_JSON_nfa_push_actions)[] = { + 0, 0 +}; + +static const char MAYBE_UNUSED(_JSON_nfa_pop_trans)[] = { + 0, 0 +}; + + +#line 835 "parser.rl" + + +/* +* call-seq: parse() +* +* Parses the current JSON text _source_ and returns the complete data +* structure as a result. +* It raises JSON::ParseError if fail to parse. +*/ +static VALUE cParser_parse(VALUE self) +{ + char *p, *pe; + int cs = EVIL; + VALUE result = Qnil; + GET_PARSER; + + + { + cs = (int)JSON_start; + } + + #line 851 "parser.rl" + + p = json->source; + pe = p + json->len; + + { + if ( p == pe ) + goto _test_eof; + switch ( cs ) + { + case 1: + goto st_case_1; + case 0: + goto st_case_0; + case 10: + goto st_case_10; + case 2: + goto st_case_2; + case 3: + goto st_case_3; + case 4: + goto st_case_4; + case 5: + goto st_case_5; + case 6: + goto st_case_6; + case 7: + goto st_case_7; + case 8: + goto st_case_8; + case 9: + goto st_case_9; + } + goto st_out; + st1: + p+= 1; + if ( p == pe ) + goto _test_eof1; + st_case_1: + switch( ( (*( p))) ) { + case 13: { + goto st1; + } + case 32: { + goto st1; + } + case 34: { + goto ctr2; + } + case 45: { + goto ctr2; + } + case 47: { + goto st6; + } + case 73: { + goto ctr2; + } + case 78: { + goto ctr2; + } + case 91: { + goto ctr2; + } + case 102: { + goto ctr2; + } + case 110: { + goto ctr2; + } + case 116: { + goto ctr2; + } + case 123: { + goto ctr2; + } + } + if ( ( (*( p))) > 10 ) { + if ( 48 <= ( (*( p))) && ( (*( p))) <= 57 ) { + goto ctr2; + } + } else if ( ( (*( p))) >= 9 ) { + goto st1; + } + { + goto st0; + } + st_case_0: + st0: + cs = 0; + goto _out; + ctr2: + { + #line 827 "parser.rl" + + char *np = JSON_parse_value(json, p, pe, &result, 0); + if (np == NULL) { {p = p - 1; } {p+= 1; cs = 10; goto _out;} } else {p = (( np))-1;} + + } + + goto st10; + st10: + p+= 1; + if ( p == pe ) + goto _test_eof10; + st_case_10: + switch( ( (*( p))) ) { + case 13: { + goto st10; + } + case 32: { + goto st10; + } + case 47: { + goto st2; + } + } + if ( 9 <= ( (*( p))) && ( (*( p))) <= 10 ) { + goto st10; + } + { + goto st0; + } + st2: + p+= 1; + if ( p == pe ) + goto _test_eof2; + st_case_2: + switch( ( (*( p))) ) { + case 42: { + goto st3; + } + case 47: { + goto st5; + } + } + { + goto st0; + } + st3: + p+= 1; + if ( p == pe ) + goto _test_eof3; + st_case_3: + if ( ( (*( p))) == 42 ) { + goto st4; + } + { + goto st3; + } + st4: + p+= 1; + if ( p == pe ) + goto _test_eof4; + st_case_4: + switch( ( (*( p))) ) { + case 42: { + goto st4; + } + case 47: { + goto st10; + } + } + { + goto st3; + } + st5: + p+= 1; + if ( p == pe ) + goto _test_eof5; + st_case_5: + if ( ( (*( p))) == 10 ) { + goto st10; + } + { + goto st5; + } + st6: + p+= 1; + if ( p == pe ) + goto _test_eof6; + st_case_6: + switch( ( (*( p))) ) { + case 42: { + goto st7; + } + case 47: { + goto st9; + } + } + { + goto st0; + } + st7: + p+= 1; + if ( p == pe ) + goto _test_eof7; + st_case_7: + if ( ( (*( p))) == 42 ) { + goto st8; + } + { + goto st7; + } + st8: + p+= 1; + if ( p == pe ) + goto _test_eof8; + st_case_8: + switch( ( (*( p))) ) { + case 42: { + goto st8; + } + case 47: { + goto st1; + } + } + { + goto st7; + } + st9: + p+= 1; + if ( p == pe ) + goto _test_eof9; + st_case_9: + if ( ( (*( p))) == 10 ) { + goto st1; + } + { + goto st9; + } + st_out: + _test_eof1: cs = 1; goto _test_eof; + _test_eof10: cs = 10; goto _test_eof; + _test_eof2: cs = 2; goto _test_eof; + _test_eof3: cs = 3; goto _test_eof; + _test_eof4: cs = 4; goto _test_eof; + _test_eof5: cs = 5; goto _test_eof; + _test_eof6: cs = 6; goto _test_eof; + _test_eof7: cs = 7; goto _test_eof; + _test_eof8: cs = 8; goto _test_eof; + _test_eof9: cs = 9; goto _test_eof; + + _test_eof: {} + _out: {} + } + + #line 854 "parser.rl" + + + if (cs >= JSON_first_final && p == pe) { + return result; + } else { + rb_enc_raise(EXC_ENCODING eParserError, "unexpected token at '%s'", p); + return Qnil; + } +} + +static void JSON_mark(void *ptr) +{ + JSON_Parser *json = ptr; + rb_gc_mark_maybe(json->Vsource); + rb_gc_mark_maybe(json->create_id); + rb_gc_mark_maybe(json->object_class); + rb_gc_mark_maybe(json->array_class); + rb_gc_mark_maybe(json->decimal_class); + rb_gc_mark_maybe(json->match_string); +} + +static void JSON_free(void *ptr) +{ + JSON_Parser *json = ptr; + fbuffer_free(json->fbuffer); + ruby_xfree(json); +} + +static size_t JSON_memsize(const void *ptr) +{ + const JSON_Parser *json = ptr; + return sizeof(*json) + FBUFFER_CAPA(json->fbuffer); +} + +#ifdef NEW_TYPEDDATA_WRAPPER +static const rb_data_type_t JSON_Parser_type = { + "JSON/Parser", + {JSON_mark, JSON_free, JSON_memsize,}, + #ifdef RUBY_TYPED_FREE_IMMEDIATELY + 0, 0, + RUBY_TYPED_FREE_IMMEDIATELY, + #endif +}; +#endif + +static VALUE cJSON_parser_s_allocate(VALUE klass) +{ + JSON_Parser *json; + VALUE obj = TypedData_Make_Struct(klass, JSON_Parser, &JSON_Parser_type, json); + json->fbuffer = fbuffer_alloc(0); + return obj; +} + +/* +* call-seq: source() +* +* Returns a copy of the current _source_ string, that was used to construct +* this Parser. +*/ +static VALUE cParser_source(VALUE self) +{ + GET_PARSER; + return rb_str_dup(json->Vsource); +} + +void Init_parser(void) +{ + #ifdef HAVE_RB_EXT_RACTOR_SAFE + rb_ext_ractor_safe(true); + #endif + + #undef rb_intern + rb_require("json/common"); + mJSON = rb_define_module("JSON"); + mExt = rb_define_module_under(mJSON, "Ext"); + cParser = rb_define_class_under(mExt, "Parser", rb_cObject); + eParserError = rb_path2class("JSON::ParserError"); + eNestingError = rb_path2class("JSON::NestingError"); + rb_gc_register_mark_object(eParserError); + rb_gc_register_mark_object(eNestingError); + rb_define_alloc_func(cParser, cJSON_parser_s_allocate); + rb_define_method(cParser, "initialize", cParser_initialize, -1); + rb_define_method(cParser, "parse", cParser_parse, 0); + rb_define_method(cParser, "source", cParser_source, 0); + + CNaN = rb_const_get(mJSON, rb_intern("NaN")); + rb_gc_register_mark_object(CNaN); + + CInfinity = rb_const_get(mJSON, rb_intern("Infinity")); + rb_gc_register_mark_object(CInfinity); + + CMinusInfinity = rb_const_get(mJSON, rb_intern("MinusInfinity")); + rb_gc_register_mark_object(CMinusInfinity); + + i_json_creatable_p = rb_intern("json_creatable?"); + i_json_create = rb_intern("json_create"); + i_create_id = rb_intern("create_id"); + i_create_additions = rb_intern("create_additions"); + i_chr = rb_intern("chr"); + i_max_nesting = rb_intern("max_nesting"); + i_allow_nan = rb_intern("allow_nan"); + i_symbolize_names = rb_intern("symbolize_names"); + i_object_class = rb_intern("object_class"); + i_array_class = rb_intern("array_class"); + i_decimal_class = rb_intern("decimal_class"); + i_match = rb_intern("match"); + i_match_string = rb_intern("match_string"); + i_key_p = rb_intern("key?"); + i_deep_const_get = rb_intern("deep_const_get"); + i_aset = rb_intern("[]="); + i_aref = rb_intern("[]"); + i_leftshift = rb_intern("<<"); + i_new = rb_intern("new"); + i_try_convert = rb_intern("try_convert"); + i_freeze = rb_intern("freeze"); + i_uminus = rb_intern("-@"); +} + +/* +* Local variables: +* mode: c +* c-file-style: ruby +* indent-tabs-mode: nil +* End: +*/ diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/parser/parser.h b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/parser/parser.h new file mode 100644 index 0000000..92ed3fd --- /dev/null +++ b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/parser/parser.h @@ -0,0 +1,96 @@ +#ifndef _PARSER_H_ +#define _PARSER_H_ + +#include "ruby.h" + +#ifndef HAVE_RUBY_RE_H +#include "re.h" +#endif + +#ifdef HAVE_RUBY_ST_H +#include "ruby/st.h" +#else +#include "st.h" +#endif + +#ifndef MAYBE_UNUSED +# define MAYBE_UNUSED(x) x +#endif + +#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; + long len; + char *memo; + VALUE create_id; + int max_nesting; + int allow_nan; + int parsing_name; + int symbolize_names; + int freeze; + VALUE object_class; + VALUE array_class; + VALUE decimal_class; + int create_additions; + VALUE match_string; + FBuffer *fbuffer; +} JSON_Parser; + +#define GET_PARSER \ + GET_PARSER_INIT; \ + if (!json->Vsource) rb_raise(rb_eTypeError, "uninitialized instance") +#define GET_PARSER_INIT \ + JSON_Parser *json; \ + TypedData_Get_Struct(self, JSON_Parser, &JSON_Parser_type, json) + +#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 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); +static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *result); +static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting); +static VALUE json_string_unescape(char *string, char *stringEnd, int intern, int symbolize); +static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *result); +static VALUE convert_encoding(VALUE source); +static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self); +static VALUE cParser_parse(VALUE self); +static void JSON_mark(void *json); +static void JSON_free(void *json); +static VALUE cJSON_parser_s_allocate(VALUE klass); +static VALUE cParser_source(VALUE self); +#ifndef ZALLOC +#define ZALLOC(type) ((type *)ruby_zalloc(sizeof(type))) +static inline void *ruby_zalloc(size_t n) +{ + void *p = ruby_xmalloc(n); + memset(p, 0, n); + return p; +} +#endif +#ifdef TypedData_Make_Struct +static const rb_data_type_t JSON_Parser_type; +#define NEW_TYPEDDATA_WRAPPER 1 +#else +#define TypedData_Make_Struct(klass, type, ignore, json) Data_Make_Struct(klass, type, NULL, JSON_free, json) +#define TypedData_Get_Struct(self, JSON_Parser, ignore, json) Data_Get_Struct(self, JSON_Parser, json) +#endif + +#endif diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/parser/parser.o b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/parser/parser.o new file mode 100644 index 0000000000000000000000000000000000000000..300c32bd154db44f04fecc43f4317ac29261906b GIT binary patch literal 163368 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

Ua%MA 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 literal 0 HcmV?d00001 diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/extconf.rb b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/extconf.rb new file mode 100644 index 0000000..8a99b6a --- /dev/null +++ b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/extconf.rb @@ -0,0 +1,3 @@ +require 'mkmf' + +create_makefile('json') diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/json.gemspec b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/json.gemspec new file mode 100644 index 0000000..948e92c --- /dev/null +++ b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/json.gemspec @@ -0,0 +1,67 @@ +# -*- encoding: utf-8 -*- + +Gem::Specification.new do |s| + s.name = "json" + s.version = File.read(File.expand_path('../VERSION', __FILE__)).chomp + + s.summary = "JSON Implementation for Ruby" + s.description = "This is a JSON implementation as a Ruby extension in C." + s.licenses = ["Ruby"] + s.authors = ["Florian Frank"] + s.email = "flori@ping.de" + + s.extensions = ["ext/json/ext/generator/extconf.rb", "ext/json/ext/parser/extconf.rb", "ext/json/extconf.rb"] + s.extra_rdoc_files = ["README.md"] + s.rdoc_options = ["--title", "JSON implementation for Ruby", "--main", "README.md"] + s.files = [ + "CHANGES.md", + "LICENSE", + "README.md", + "VERSION", + "ext/json/ext/fbuffer/fbuffer.h", + "ext/json/ext/generator/depend", + "ext/json/ext/generator/extconf.rb", + "ext/json/ext/generator/generator.c", + "ext/json/ext/generator/generator.h", + "ext/json/ext/parser/depend", + "ext/json/ext/parser/extconf.rb", + "ext/json/ext/parser/parser.c", + "ext/json/ext/parser/parser.h", + "ext/json/ext/parser/parser.rl", + "ext/json/extconf.rb", + "json.gemspec", + "lib/json.rb", + "lib/json/add/bigdecimal.rb", + "lib/json/add/complex.rb", + "lib/json/add/core.rb", + "lib/json/add/date.rb", + "lib/json/add/date_time.rb", + "lib/json/add/exception.rb", + "lib/json/add/ostruct.rb", + "lib/json/add/range.rb", + "lib/json/add/rational.rb", + "lib/json/add/regexp.rb", + "lib/json/add/set.rb", + "lib/json/add/struct.rb", + "lib/json/add/symbol.rb", + "lib/json/add/time.rb", + "lib/json/common.rb", + "lib/json/ext.rb", + "lib/json/generic_object.rb", + "lib/json/pure.rb", + "lib/json/pure/generator.rb", + "lib/json/pure/parser.rb", + "lib/json/version.rb", + ] + s.homepage = "http://flori.github.com/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' => 'http://flori.github.io/json/doc/index.html', + 'homepage_uri' => 'http://flori.github.io/json/', + 'source_code_uri' => 'https://github.com/flori/json', + 'wiki_uri' => 'https://github.com/flori/json/wiki' + } + + s.required_ruby_version = Gem::Requirement.new(">= 2.3") +end diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json.rb b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json.rb new file mode 100644 index 0000000..1e64bfc --- /dev/null +++ b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json.rb @@ -0,0 +1,583 @@ +#frozen_string_literal: false +require 'json/common' + +## +# = JavaScript \Object Notation (\JSON) +# +# \JSON is a lightweight data-interchange format. +# +# A \JSON value is one of the following: +# - Double-quoted text: "foo". +# - Number: +1+, +1.0+, +2.0e2+. +# - Boolean: +true+, +false+. +# - Null: +null+. +# - \Array: an ordered list of values, enclosed by square brackets: +# ["foo", 1, 1.0, 2.0e2, true, false, null] +# +# - \Object: a collection of name/value pairs, enclosed by curly braces; +# each name is double-quoted text; +# the values may be any \JSON values: +# {"a": "foo", "b": 1, "c": 1.0, "d": 2.0e2, "e": true, "f": false, "g": null} +# +# A \JSON array or object may contain nested arrays, objects, and scalars +# to any depth: +# {"foo": {"bar": 1, "baz": 2}, "bat": [0, 1, 2]} +# [{"foo": 0, "bar": 1}, ["baz", 2]] +# +# == Using \Module \JSON +# +# To make module \JSON available in your code, begin with: +# require 'json' +# +# All examples here assume that this has been done. +# +# === Parsing \JSON +# +# You can parse a \String containing \JSON data using +# either of two methods: +# - JSON.parse(source, opts) +# - JSON.parse!(source, opts) +# +# where +# - +source+ is a Ruby object. +# - +opts+ is a \Hash object containing options +# that control both input allowed and output formatting. +# +# The difference between the two methods +# is that JSON.parse! omits some checks +# and may not be safe for some +source+ data; +# use it only for data from trusted sources. +# Use the safer method JSON.parse for less trusted sources. +# +# ==== Parsing \JSON Arrays +# +# When +source+ is a \JSON array, JSON.parse by default returns a Ruby \Array: +# json = '["foo", 1, 1.0, 2.0e2, true, false, null]' +# ruby = JSON.parse(json) +# ruby # => ["foo", 1, 1.0, 200.0, true, false, nil] +# ruby.class # => Array +# +# The \JSON array may contain nested arrays, objects, and scalars +# to any depth: +# json = '[{"foo": 0, "bar": 1}, ["baz", 2]]' +# JSON.parse(json) # => [{"foo"=>0, "bar"=>1}, ["baz", 2]] +# +# ==== Parsing \JSON \Objects +# +# When the source is a \JSON object, JSON.parse by default returns a Ruby \Hash: +# json = '{"a": "foo", "b": 1, "c": 1.0, "d": 2.0e2, "e": true, "f": false, "g": null}' +# ruby = JSON.parse(json) +# ruby # => {"a"=>"foo", "b"=>1, "c"=>1.0, "d"=>200.0, "e"=>true, "f"=>false, "g"=>nil} +# ruby.class # => Hash +# +# The \JSON object may contain nested arrays, objects, and scalars +# to any depth: +# json = '{"foo": {"bar": 1, "baz": 2}, "bat": [0, 1, 2]}' +# JSON.parse(json) # => {"foo"=>{"bar"=>1, "baz"=>2}, "bat"=>[0, 1, 2]} +# +# ==== Parsing \JSON Scalars +# +# When the source is a \JSON scalar (not an array or object), +# JSON.parse returns a Ruby scalar. +# +# \String: +# ruby = JSON.parse('"foo"') +# ruby # => 'foo' +# ruby.class # => String +# \Integer: +# ruby = JSON.parse('1') +# ruby # => 1 +# ruby.class # => Integer +# \Float: +# ruby = JSON.parse('1.0') +# ruby # => 1.0 +# ruby.class # => Float +# ruby = JSON.parse('2.0e2') +# ruby # => 200 +# ruby.class # => Float +# Boolean: +# ruby = JSON.parse('true') +# ruby # => true +# ruby.class # => TrueClass +# ruby = JSON.parse('false') +# ruby # => false +# ruby.class # => FalseClass +# Null: +# ruby = JSON.parse('null') +# ruby # => nil +# ruby.class # => NilClass +# +# ==== Parsing Options +# +# ====== Input Options +# +# Option +max_nesting+ (\Integer) specifies the maximum nesting depth allowed; +# defaults to +100+; specify +false+ to disable depth checking. +# +# With the default, +false+: +# source = '[0, [1, [2, [3]]]]' +# ruby = JSON.parse(source) +# ruby # => [0, [1, [2, [3]]]] +# Too deep: +# # Raises JSON::NestingError (nesting of 2 is too deep): +# JSON.parse(source, {max_nesting: 1}) +# Bad value: +# # Raises TypeError (wrong argument type Symbol (expected Fixnum)): +# JSON.parse(source, {max_nesting: :foo}) +# +# --- +# +# Option +allow_nan+ (boolean) specifies whether to allow +# NaN, Infinity, and MinusInfinity in +source+; +# defaults to +false+. +# +# With the default, +false+: +# # Raises JSON::ParserError (225: unexpected token at '[NaN]'): +# JSON.parse('[NaN]') +# # Raises JSON::ParserError (232: unexpected token at '[Infinity]'): +# JSON.parse('[Infinity]') +# # Raises JSON::ParserError (248: unexpected token at '[-Infinity]'): +# JSON.parse('[-Infinity]') +# Allow: +# source = '[NaN, Infinity, -Infinity]' +# ruby = JSON.parse(source, {allow_nan: true}) +# ruby # => [NaN, Infinity, -Infinity] +# +# ====== Output Options +# +# Option +symbolize_names+ (boolean) specifies whether returned \Hash keys +# should be Symbols; +# defaults to +false+ (use Strings). +# +# With the default, +false+: +# source = '{"a": "foo", "b": 1.0, "c": true, "d": false, "e": null}' +# ruby = JSON.parse(source) +# ruby # => {"a"=>"foo", "b"=>1.0, "c"=>true, "d"=>false, "e"=>nil} +# Use Symbols: +# ruby = JSON.parse(source, {symbolize_names: true}) +# ruby # => {:a=>"foo", :b=>1.0, :c=>true, :d=>false, :e=>nil} +# +# --- +# +# Option +object_class+ (\Class) specifies the Ruby class to be used +# for each \JSON object; +# defaults to \Hash. +# +# With the default, \Hash: +# source = '{"a": "foo", "b": 1.0, "c": true, "d": false, "e": null}' +# ruby = JSON.parse(source) +# ruby.class # => Hash +# Use class \OpenStruct: +# ruby = JSON.parse(source, {object_class: OpenStruct}) +# ruby # => # +# +# --- +# +# Option +array_class+ (\Class) specifies the Ruby class to be used +# for each \JSON array; +# defaults to \Array. +# +# With the default, \Array: +# source = '["foo", 1.0, true, false, null]' +# ruby = JSON.parse(source) +# ruby.class # => Array +# Use class \Set: +# ruby = JSON.parse(source, {array_class: Set}) +# ruby # => # +# +# --- +# +# Option +create_additions+ (boolean) specifies whether to use \JSON additions in parsing. +# See {\JSON Additions}[#module-JSON-label-JSON+Additions]. +# +# === Generating \JSON +# +# To generate a Ruby \String containing \JSON data, +# use method JSON.generate(source, opts), where +# - +source+ is a Ruby object. +# - +opts+ is a \Hash object containing options +# that control both input allowed and output formatting. +# +# ==== Generating \JSON from Arrays +# +# When the source is a Ruby \Array, JSON.generate returns +# a \String containing a \JSON array: +# ruby = [0, 's', :foo] +# json = JSON.generate(ruby) +# json # => '[0,"s","foo"]' +# +# The Ruby \Array array may contain nested arrays, hashes, and scalars +# to any depth: +# ruby = [0, [1, 2], {foo: 3, bar: 4}] +# json = JSON.generate(ruby) +# json # => '[0,[1,2],{"foo":3,"bar":4}]' +# +# ==== Generating \JSON from Hashes +# +# When the source is a Ruby \Hash, JSON.generate returns +# a \String containing a \JSON object: +# ruby = {foo: 0, bar: 's', baz: :bat} +# json = JSON.generate(ruby) +# json # => '{"foo":0,"bar":"s","baz":"bat"}' +# +# The Ruby \Hash array may contain nested arrays, hashes, and scalars +# to any depth: +# ruby = {foo: [0, 1], bar: {baz: 2, bat: 3}, bam: :bad} +# json = JSON.generate(ruby) +# json # => '{"foo":[0,1],"bar":{"baz":2,"bat":3},"bam":"bad"}' +# +# ==== Generating \JSON from Other Objects +# +# When the source is neither an \Array nor a \Hash, +# the generated \JSON data depends on the class of the source. +# +# When the source is a Ruby \Integer or \Float, JSON.generate returns +# a \String containing a \JSON number: +# JSON.generate(42) # => '42' +# JSON.generate(0.42) # => '0.42' +# +# When the source is a Ruby \String, JSON.generate returns +# a \String containing a \JSON string (with double-quotes): +# JSON.generate('A string') # => '"A string"' +# +# When the source is +true+, +false+ or +nil+, JSON.generate returns +# a \String containing the corresponding \JSON token: +# JSON.generate(true) # => 'true' +# JSON.generate(false) # => 'false' +# JSON.generate(nil) # => 'null' +# +# When the source is none of the above, JSON.generate returns +# a \String containing a \JSON string representation of the source: +# JSON.generate(:foo) # => '"foo"' +# JSON.generate(Complex(0, 0)) # => '"0+0i"' +# JSON.generate(Dir.new('.')) # => '"#

"' +# +# ==== Generating Options +# +# ====== Input Options +# +# Option +allow_nan+ (boolean) specifies whether +# +NaN+, +Infinity+, and -Infinity may be generated; +# defaults to +false+. +# +# With the default, +false+: +# # Raises JSON::GeneratorError (920: NaN not allowed in JSON): +# JSON.generate(JSON::NaN) +# # Raises JSON::GeneratorError (917: Infinity not allowed in JSON): +# JSON.generate(JSON::Infinity) +# # Raises JSON::GeneratorError (917: -Infinity not allowed in JSON): +# JSON.generate(JSON::MinusInfinity) +# +# Allow: +# ruby = [Float::NaN, Float::Infinity, Float::MinusInfinity] +# JSON.generate(ruby, allow_nan: true) # => '[NaN,Infinity,-Infinity]' +# +# --- +# +# Option +max_nesting+ (\Integer) specifies the maximum nesting depth +# in +obj+; defaults to +100+. +# +# With the default, +100+: +# obj = [[[[[[0]]]]]] +# JSON.generate(obj) # => '[[[[[[0]]]]]]' +# +# Too deep: +# # Raises JSON::NestingError (nesting of 2 is too deep): +# JSON.generate(obj, max_nesting: 2) +# +# ====== Output Options +# +# The default formatting options generate the most compact +# \JSON data, all on one line and with no whitespace. +# +# You can use these formatting options to generate +# \JSON data in a more open format, using whitespace. +# See also JSON.pretty_generate. +# +# - Option +array_nl+ (\String) specifies a string (usually a newline) +# to be inserted after each \JSON array; defaults to the empty \String, ''. +# - Option +object_nl+ (\String) specifies a string (usually a newline) +# to be inserted after each \JSON object; defaults to the empty \String, ''. +# - Option +indent+ (\String) specifies the string (usually spaces) to be +# used for indentation; defaults to the empty \String, ''; +# defaults to the empty \String, ''; +# has no effect unless options +array_nl+ or +object_nl+ specify newlines. +# - Option +space+ (\String) specifies a string (usually a space) to be +# inserted after the colon in each \JSON object's pair; +# defaults to the empty \String, ''. +# - Option +space_before+ (\String) specifies a string (usually a space) to be +# inserted before the colon in each \JSON object's pair; +# defaults to the empty \String, ''. +# +# In this example, +obj+ is used first to generate the shortest +# \JSON data (no whitespace), then again with all formatting options +# specified: +# +# obj = {foo: [:bar, :baz], bat: {bam: 0, bad: 1}} +# json = JSON.generate(obj) +# puts 'Compact:', json +# opts = { +# array_nl: "\n", +# object_nl: "\n", +# indent: ' ', +# space_before: ' ', +# space: ' ' +# } +# puts 'Open:', JSON.generate(obj, opts) +# +# Output: +# Compact: +# {"foo":["bar","baz"],"bat":{"bam":0,"bad":1}} +# Open: +# { +# "foo" : [ +# "bar", +# "baz" +# ], +# "bat" : { +# "bam" : 0, +# "bad" : 1 +# } +# } +# +# == \JSON Additions +# +# When you "round trip" a non-\String object from Ruby to \JSON and back, +# you have a new \String, instead of the object you began with: +# ruby0 = Range.new(0, 2) +# json = JSON.generate(ruby0) +# json # => '0..2"' +# ruby1 = JSON.parse(json) +# ruby1 # => '0..2' +# ruby1.class # => String +# +# You can use \JSON _additions_ to preserve the original object. +# The addition is an extension of a ruby class, so that: +# - \JSON.generate stores more information in the \JSON string. +# - \JSON.parse, called with option +create_additions+, +# uses that information to create a proper Ruby object. +# +# This example shows a \Range being generated into \JSON +# and parsed back into Ruby, both without and with +# the addition for \Range: +# ruby = Range.new(0, 2) +# # This passage does not use the addition for Range. +# json0 = JSON.generate(ruby) +# ruby0 = JSON.parse(json0) +# # This passage uses the addition for Range. +# require 'json/add/range' +# json1 = JSON.generate(ruby) +# ruby1 = JSON.parse(json1, create_additions: true) +# # Make a nice display. +# display = <require 'json/add/bigdecimal' +# - Complex: require 'json/add/complex' +# - Date: require 'json/add/date' +# - DateTime: require 'json/add/date_time' +# - Exception: require 'json/add/exception' +# - OpenStruct: require 'json/add/ostruct' +# - Range: require 'json/add/range' +# - Rational: require 'json/add/rational' +# - Regexp: require 'json/add/regexp' +# - Set: require 'json/add/set' +# - Struct: require 'json/add/struct' +# - Symbol: require 'json/add/symbol' +# - Time: require 'json/add/time' +# +# To reduce punctuation clutter, the examples below +# show the generated \JSON via +puts+, rather than the usual +inspect+, +# +# \BigDecimal: +# require 'json/add/bigdecimal' +# ruby0 = BigDecimal(0) # 0.0 +# json = JSON.generate(ruby0) # {"json_class":"BigDecimal","b":"27:0.0"} +# ruby1 = JSON.parse(json, create_additions: true) # 0.0 +# ruby1.class # => BigDecimal +# +# \Complex: +# require 'json/add/complex' +# ruby0 = Complex(1+0i) # 1+0i +# json = JSON.generate(ruby0) # {"json_class":"Complex","r":1,"i":0} +# ruby1 = JSON.parse(json, create_additions: true) # 1+0i +# ruby1.class # Complex +# +# \Date: +# require 'json/add/date' +# ruby0 = Date.today # 2020-05-02 +# json = JSON.generate(ruby0) # {"json_class":"Date","y":2020,"m":5,"d":2,"sg":2299161.0} +# ruby1 = JSON.parse(json, create_additions: true) # 2020-05-02 +# ruby1.class # Date +# +# \DateTime: +# require 'json/add/date_time' +# ruby0 = DateTime.now # 2020-05-02T10:38:13-05:00 +# json = JSON.generate(ruby0) # {"json_class":"DateTime","y":2020,"m":5,"d":2,"H":10,"M":38,"S":13,"of":"-5/24","sg":2299161.0} +# ruby1 = JSON.parse(json, create_additions: true) # 2020-05-02T10:38:13-05:00 +# ruby1.class # DateTime +# +# \Exception (and its subclasses including \RuntimeError): +# require 'json/add/exception' +# ruby0 = Exception.new('A message') # A message +# json = JSON.generate(ruby0) # {"json_class":"Exception","m":"A message","b":null} +# ruby1 = JSON.parse(json, create_additions: true) # A message +# ruby1.class # Exception +# ruby0 = RuntimeError.new('Another message') # Another message +# json = JSON.generate(ruby0) # {"json_class":"RuntimeError","m":"Another message","b":null} +# ruby1 = JSON.parse(json, create_additions: true) # Another message +# ruby1.class # RuntimeError +# +# \OpenStruct: +# require 'json/add/ostruct' +# ruby0 = OpenStruct.new(name: 'Matz', language: 'Ruby') # # +# json = JSON.generate(ruby0) # {"json_class":"OpenStruct","t":{"name":"Matz","language":"Ruby"}} +# ruby1 = JSON.parse(json, create_additions: true) # # +# ruby1.class # OpenStruct +# +# \Range: +# require 'json/add/range' +# ruby0 = Range.new(0, 2) # 0..2 +# json = JSON.generate(ruby0) # {"json_class":"Range","a":[0,2,false]} +# ruby1 = JSON.parse(json, create_additions: true) # 0..2 +# ruby1.class # Range +# +# \Rational: +# require 'json/add/rational' +# ruby0 = Rational(1, 3) # 1/3 +# json = JSON.generate(ruby0) # {"json_class":"Rational","n":1,"d":3} +# ruby1 = JSON.parse(json, create_additions: true) # 1/3 +# ruby1.class # Rational +# +# \Regexp: +# require 'json/add/regexp' +# ruby0 = Regexp.new('foo') # (?-mix:foo) +# json = JSON.generate(ruby0) # {"json_class":"Regexp","o":0,"s":"foo"} +# ruby1 = JSON.parse(json, create_additions: true) # (?-mix:foo) +# ruby1.class # Regexp +# +# \Set: +# require 'json/add/set' +# ruby0 = Set.new([0, 1, 2]) # # +# json = JSON.generate(ruby0) # {"json_class":"Set","a":[0,1,2]} +# ruby1 = JSON.parse(json, create_additions: true) # # +# ruby1.class # Set +# +# \Struct: +# require 'json/add/struct' +# Customer = Struct.new(:name, :address) # Customer +# ruby0 = Customer.new("Dave", "123 Main") # # +# json = JSON.generate(ruby0) # {"json_class":"Customer","v":["Dave","123 Main"]} +# ruby1 = JSON.parse(json, create_additions: true) # # +# ruby1.class # Customer +# +# \Symbol: +# require 'json/add/symbol' +# ruby0 = :foo # foo +# json = JSON.generate(ruby0) # {"json_class":"Symbol","s":"foo"} +# ruby1 = JSON.parse(json, create_additions: true) # foo +# ruby1.class # Symbol +# +# \Time: +# require 'json/add/time' +# ruby0 = Time.now # 2020-05-02 11:28:26 -0500 +# json = JSON.generate(ruby0) # {"json_class":"Time","s":1588436906,"n":840560000} +# ruby1 = JSON.parse(json, create_additions: true) # 2020-05-02 11:28:26 -0500 +# ruby1.class # Time +# +# +# === Custom \JSON Additions +# +# In addition to the \JSON additions provided, +# you can craft \JSON additions of your own, +# either for Ruby built-in classes or for user-defined classes. +# +# Here's a user-defined class +Foo+: +# class Foo +# attr_accessor :bar, :baz +# def initialize(bar, baz) +# self.bar = bar +# self.baz = baz +# end +# end +# +# Here's the \JSON addition for it: +# # Extend class Foo with JSON addition. +# class Foo +# # Serialize Foo object with its class name and arguments +# def to_json(*args) +# { +# JSON.create_id => self.class.name, +# 'a' => [ bar, baz ] +# }.to_json(*args) +# end +# # Deserialize JSON string by constructing new Foo object with arguments. +# def self.json_create(object) +# new(*object['a']) +# end +# end +# +# Demonstration: +# require 'json' +# # This Foo object has no custom addition. +# foo0 = Foo.new(0, 1) +# json0 = JSON.generate(foo0) +# obj0 = JSON.parse(json0) +# # Lood the custom addition. +# require_relative 'foo_addition' +# # This foo has the custom addition. +# foo1 = Foo.new(0, 1) +# json1 = JSON.generate(foo1) +# obj1 = JSON.parse(json1, create_additions: true) +# # Make a nice display. +# display = <" (String) +# With custom addition: {"json_class":"Foo","a":[0,1]} (String) +# Parsed JSON: +# Without custom addition: "#" (String) +# With custom addition: # (Foo) +# +module JSON + require 'json/version' + + begin + require 'json/ext' + rescue LoadError + require 'json/pure' + end +end diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/bigdecimal.rb b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/bigdecimal.rb new file mode 100644 index 0000000..c8b4f56 --- /dev/null +++ b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/bigdecimal.rb @@ -0,0 +1,29 @@ +#frozen_string_literal: false +unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED + require 'json' +end +defined?(::BigDecimal) or require 'bigdecimal' + +class BigDecimal + # Import a JSON Marshalled object. + # + # method used for JSON marshalling support. + def self.json_create(object) + BigDecimal._load object['b'] + end + + # Marshal the object to JSON. + # + # method used for JSON marshalling support. + def as_json(*) + { + JSON.create_id => self.class.name, + 'b' => _dump, + } + end + + # return the JSON value + def to_json(*args) + as_json.to_json(*args) + end +end diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/complex.rb b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/complex.rb new file mode 100644 index 0000000..e63e29f --- /dev/null +++ b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/complex.rb @@ -0,0 +1,28 @@ +#frozen_string_literal: false +unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED + require 'json' +end + +class Complex + + # Deserializes JSON string by converting Real value r, imaginary + # value i, to a Complex object. + def self.json_create(object) + Complex(object['r'], object['i']) + end + + # Returns a hash, that will be turned into a JSON object and represent this + # object. + def as_json(*) + { + JSON.create_id => self.class.name, + 'r' => real, + 'i' => imag, + } + end + + # Stores class name (Complex) along with real value r and imaginary value i as JSON string + def to_json(*args) + as_json.to_json(*args) + end +end diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/core.rb b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/core.rb new file mode 100644 index 0000000..bfb017c --- /dev/null +++ b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/core.rb @@ -0,0 +1,12 @@ +#frozen_string_literal: false +# This file requires the implementations of ruby core's custom objects for +# serialisation/deserialisation. + +require 'json/add/date' +require 'json/add/date_time' +require 'json/add/exception' +require 'json/add/range' +require 'json/add/regexp' +require 'json/add/struct' +require 'json/add/symbol' +require 'json/add/time' diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/date.rb b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/date.rb new file mode 100644 index 0000000..2552356 --- /dev/null +++ b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/date.rb @@ -0,0 +1,34 @@ +#frozen_string_literal: false +unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED + require 'json' +end +require 'date' + +class Date + + # Deserializes JSON string by converting Julian year y, month + # m, day d and Day of Calendar Reform sg to Date. + def self.json_create(object) + civil(*object.values_at('y', 'm', 'd', 'sg')) + end + + alias start sg unless method_defined?(:start) + + # Returns a hash, that will be turned into a JSON object and represent this + # object. + def as_json(*) + { + JSON.create_id => self.class.name, + 'y' => year, + 'm' => month, + 'd' => day, + 'sg' => start, + } + end + + # Stores class name (Date) with Julian year y, month m, day + # d and Day of Calendar Reform sg as JSON string + def to_json(*args) + as_json.to_json(*args) + end +end diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/date_time.rb b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/date_time.rb new file mode 100644 index 0000000..38b0e86 --- /dev/null +++ b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/date_time.rb @@ -0,0 +1,50 @@ +#frozen_string_literal: false +unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED + require 'json' +end +require 'date' + +class DateTime + + # Deserializes JSON string by converting year y, month m, + # day d, hour H, minute M, second S, + # offset of and Day of Calendar Reform sg to DateTime. + def self.json_create(object) + args = object.values_at('y', 'm', 'd', 'H', 'M', 'S') + of_a, of_b = object['of'].split('/') + if of_b and of_b != '0' + args << Rational(of_a.to_i, of_b.to_i) + else + args << of_a + end + args << object['sg'] + civil(*args) + end + + alias start sg unless method_defined?(:start) + + # Returns a hash, that will be turned into a JSON object and represent this + # object. + def as_json(*) + { + JSON.create_id => self.class.name, + 'y' => year, + 'm' => month, + 'd' => day, + 'H' => hour, + 'M' => min, + 'S' => sec, + 'of' => offset.to_s, + 'sg' => start, + } + end + + # Stores class name (DateTime) with Julian year y, month m, + # day d, hour H, minute M, second S, + # offset of and Day of Calendar Reform sg as JSON string + def to_json(*args) + as_json.to_json(*args) + end +end + + diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/exception.rb b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/exception.rb new file mode 100644 index 0000000..a107e5b --- /dev/null +++ b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/exception.rb @@ -0,0 +1,31 @@ +#frozen_string_literal: false +unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED + require 'json' +end + +class Exception + + # Deserializes JSON string by constructing new Exception object with message + # m and backtrace b serialized with to_json + def self.json_create(object) + result = new(object['m']) + result.set_backtrace object['b'] + result + end + + # Returns a hash, that will be turned into a JSON object and represent this + # object. + def as_json(*) + { + JSON.create_id => self.class.name, + 'm' => message, + 'b' => backtrace, + } + end + + # Stores class name (Exception) with message m and backtrace array + # b as JSON string + def to_json(*args) + as_json.to_json(*args) + end +end diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/ostruct.rb b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/ostruct.rb new file mode 100644 index 0000000..686cf00 --- /dev/null +++ b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/ostruct.rb @@ -0,0 +1,31 @@ +#frozen_string_literal: false +unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED + require 'json' +end +require 'ostruct' + +class OpenStruct + + # Deserializes JSON string by constructing new Struct object with values + # t serialized by to_json. + def self.json_create(object) + new(object['t'] || object[:t]) + end + + # Returns a hash, that will be turned into a JSON object and represent this + # object. + def as_json(*) + klass = self.class.name + klass.to_s.empty? and raise JSON::JSONError, "Only named structs are supported!" + { + JSON.create_id => klass, + 't' => table, + } + end + + # Stores class name (OpenStruct) with this struct's values t as a + # JSON string. + def to_json(*args) + as_json.to_json(*args) + end +end diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/range.rb b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/range.rb new file mode 100644 index 0000000..93529fb --- /dev/null +++ b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/range.rb @@ -0,0 +1,29 @@ +#frozen_string_literal: false +unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED + require 'json' +end + +class Range + + # Deserializes JSON string by constructing new Range object with arguments + # a serialized by to_json. + def self.json_create(object) + new(*object['a']) + end + + # Returns a hash, that will be turned into a JSON object and represent this + # object. + def as_json(*) + { + JSON.create_id => self.class.name, + 'a' => [ first, last, exclude_end? ] + } + end + + # Stores class name (Range) with JSON array of arguments a which + # include first (integer), last (integer), and + # exclude_end? (boolean) as JSON string. + def to_json(*args) + as_json.to_json(*args) + end +end diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/rational.rb b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/rational.rb new file mode 100644 index 0000000..f776226 --- /dev/null +++ b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/rational.rb @@ -0,0 +1,27 @@ +#frozen_string_literal: false +unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED + require 'json' +end + +class Rational + # Deserializes JSON string by converting numerator value n, + # denominator value d, to a Rational object. + def self.json_create(object) + Rational(object['n'], object['d']) + end + + # Returns a hash, that will be turned into a JSON object and represent this + # object. + def as_json(*) + { + JSON.create_id => self.class.name, + 'n' => numerator, + 'd' => denominator, + } + end + + # Stores class name (Rational) along with numerator value n and denominator value d as JSON string + def to_json(*args) + as_json.to_json(*args) + end +end diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/regexp.rb b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/regexp.rb new file mode 100644 index 0000000..39d69fe --- /dev/null +++ b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/regexp.rb @@ -0,0 +1,30 @@ +#frozen_string_literal: false +unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED + require 'json' +end + +class Regexp + + # Deserializes JSON string by constructing new Regexp object with source + # s (Regexp or String) and options o serialized by + # to_json + def self.json_create(object) + new(object['s'], object['o']) + end + + # Returns a hash, that will be turned into a JSON object and represent this + # object. + def as_json(*) + { + JSON.create_id => self.class.name, + 'o' => options, + 's' => source, + } + end + + # Stores class name (Regexp) with options o and source s + # (Regexp or String) as JSON string + def to_json(*args) + as_json.to_json(*args) + end +end diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/set.rb b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/set.rb new file mode 100644 index 0000000..71e2a0a --- /dev/null +++ b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/set.rb @@ -0,0 +1,29 @@ +unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED + require 'json' +end +defined?(::Set) or require 'set' + +class Set + # Import a JSON Marshalled object. + # + # method used for JSON marshalling support. + def self.json_create(object) + new object['a'] + end + + # Marshal the object to JSON. + # + # method used for JSON marshalling support. + def as_json(*) + { + JSON.create_id => self.class.name, + 'a' => to_a, + } + end + + # return the JSON value + def to_json(*args) + as_json.to_json(*args) + end +end + diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/struct.rb b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/struct.rb new file mode 100644 index 0000000..e8395ed --- /dev/null +++ b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/struct.rb @@ -0,0 +1,30 @@ +#frozen_string_literal: false +unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED + require 'json' +end + +class Struct + + # Deserializes JSON string by constructing new Struct object with values + # v serialized by to_json. + def self.json_create(object) + new(*object['v']) + end + + # Returns a hash, that will be turned into a JSON object and represent this + # object. + def as_json(*) + klass = self.class.name + klass.to_s.empty? and raise JSON::JSONError, "Only named structs are supported!" + { + JSON.create_id => klass, + 'v' => values, + } + end + + # Stores class name (Struct) with Struct values v as a JSON string. + # Only named structs are supported. + def to_json(*args) + as_json.to_json(*args) + end +end diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/symbol.rb b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/symbol.rb new file mode 100644 index 0000000..74b13a4 --- /dev/null +++ b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/symbol.rb @@ -0,0 +1,25 @@ +#frozen_string_literal: false +unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED + require 'json' +end + +class Symbol + # Returns a hash, that will be turned into a JSON object and represent this + # object. + def as_json(*) + { + JSON.create_id => self.class.name, + 's' => to_s, + } + end + + # Stores class name (Symbol) with String representation of Symbol as a JSON string. + def to_json(*a) + as_json.to_json(*a) + end + + # Deserializes JSON string by converting the string value stored in the object to a Symbol + def self.json_create(o) + o['s'].to_sym + end +end diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/time.rb b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/time.rb new file mode 100644 index 0000000..b73acc4 --- /dev/null +++ b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/add/time.rb @@ -0,0 +1,38 @@ +#frozen_string_literal: false +unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED + require 'json' +end + +class Time + + # Deserializes JSON string by converting time since epoch to Time + def self.json_create(object) + if usec = object.delete('u') # used to be tv_usec -> tv_nsec + object['n'] = usec * 1000 + end + if method_defined?(:tv_nsec) + at(object['s'], Rational(object['n'], 1000)) + else + at(object['s'], object['n'] / 1000) + end + end + + # Returns a hash, that will be turned into a JSON object and represent this + # object. + def as_json(*) + nanoseconds = [ tv_usec * 1000 ] + respond_to?(:tv_nsec) and nanoseconds << tv_nsec + nanoseconds = nanoseconds.max + { + JSON.create_id => self.class.name, + 's' => tv_sec, + 'n' => nanoseconds, + } + end + + # Stores class name (Time) with number of seconds since epoch and number of + # microseconds for Time as JSON string + def to_json(*args) + as_json.to_json(*args) + end +end diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/common.rb b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/common.rb new file mode 100644 index 0000000..ea46896 --- /dev/null +++ b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/common.rb @@ -0,0 +1,703 @@ +#frozen_string_literal: false +require 'json/version' +require 'json/generic_object' + +module JSON + class << self + # :call-seq: + # JSON[object] -> new_array or new_string + # + # If +object+ is a \String, + # calls JSON.parse with +object+ and +opts+ (see method #parse): + # json = '[0, 1, null]' + # JSON[json]# => [0, 1, nil] + # + # Otherwise, calls JSON.generate with +object+ and +opts+ (see method #generate): + # ruby = [0, 1, nil] + # JSON[ruby] # => '[0,1,null]' + def [](object, opts = {}) + if object.respond_to? :to_str + JSON.parse(object.to_str, opts) + else + JSON.generate(object, opts) + end + end + + # Returns the JSON parser class that is used by JSON. This is either + # JSON::Ext::Parser or JSON::Pure::Parser: + # JSON.parser # => JSON::Ext::Parser + attr_reader :parser + + # Set the JSON parser class _parser_ to be used by JSON. + def parser=(parser) # :nodoc: + @parser = parser + remove_const :Parser if const_defined?(:Parser, false) + const_set :Parser, parser + end + + # Return the constant located at _path_. The format of _path_ has to be + # either ::A::B::C or A::B::C. In any case, A has to be located at the top + # level (absolute namespace path?). If there doesn't exist a constant at + # the given path, an ArgumentError is raised. + def deep_const_get(path) # :nodoc: + path.to_s.split(/::/).inject(Object) do |p, c| + case + when c.empty? then p + when p.const_defined?(c, true) then p.const_get(c) + else + begin + p.const_missing(c) + rescue NameError => e + raise ArgumentError, "can't get const #{path}: #{e}" + end + end + end + end + + # Set the module _generator_ to be used by JSON. + def generator=(generator) # :nodoc: + old, $VERBOSE = $VERBOSE, nil + @generator = generator + generator_methods = generator::GeneratorMethods + for const in generator_methods.constants + klass = deep_const_get(const) + modul = generator_methods.const_get(const) + klass.class_eval do + instance_methods(false).each do |m| + m.to_s == 'to_json' and remove_method m + end + include modul + end + end + self.state = generator::State + const_set :State, self.state + const_set :SAFE_STATE_PROTOTYPE, State.new # for JRuby + const_set :FAST_STATE_PROTOTYPE, create_fast_state + const_set :PRETTY_STATE_PROTOTYPE, create_pretty_state + ensure + $VERBOSE = old + end + + def create_fast_state + State.new( + :indent => '', + :space => '', + :object_nl => "", + :array_nl => "", + :max_nesting => false + ) + end + + def create_pretty_state + State.new( + :indent => ' ', + :space => ' ', + :object_nl => "\n", + :array_nl => "\n" + ) + end + + # Returns the JSON generator module that is used by JSON. This is + # either JSON::Ext::Generator or JSON::Pure::Generator: + # JSON.generator # => JSON::Ext::Generator + attr_reader :generator + + # Sets or Returns the JSON generator state class that is used by JSON. This is + # either JSON::Ext::Generator::State or JSON::Pure::Generator::State: + # JSON.state # => JSON::Ext::Generator::State + attr_accessor :state + end + + DEFAULT_CREATE_ID = 'json_class'.freeze + private_constant :DEFAULT_CREATE_ID + + CREATE_ID_TLS_KEY = "JSON.create_id".freeze + private_constant :CREATE_ID_TLS_KEY + + # Sets create identifier, which is used to decide if the _json_create_ + # hook of a class should be called; initial value is +json_class+: + # JSON.create_id # => 'json_class' + def self.create_id=(new_value) + Thread.current[CREATE_ID_TLS_KEY] = new_value.dup.freeze + end + + # Returns the current create identifier. + # See also JSON.create_id=. + def self.create_id + Thread.current[CREATE_ID_TLS_KEY] || DEFAULT_CREATE_ID + end + + NaN = 0.0/0 + + Infinity = 1.0/0 + + MinusInfinity = -Infinity + + # The base exception for JSON errors. + class JSONError < StandardError + def self.wrap(exception) + obj = new("Wrapped(#{exception.class}): #{exception.message.inspect}") + obj.set_backtrace exception.backtrace + obj + end + end + + # This exception is raised if a parser error occurs. + class ParserError < JSONError; end + + # This exception is raised if the nesting of parsed data structures is too + # deep. + class NestingError < ParserError; end + + # :stopdoc: + class CircularDatastructure < NestingError; end + # :startdoc: + + # This exception is raised if a generator or unparser error occurs. + class GeneratorError < JSONError; end + # For backwards compatibility + UnparserError = GeneratorError # :nodoc: + + # This exception is raised if the required unicode support is missing on the + # system. Usually this means that the iconv library is not installed. + class MissingUnicodeSupport < JSONError; end + + module_function + + # :call-seq: + # JSON.parse(source, opts) -> object + # + # Returns the Ruby objects created by parsing the given +source+. + # + # Argument +source+ contains the \String to be parsed. + # + # Argument +opts+, if given, contains a \Hash of options for the parsing. + # See {Parsing Options}[#module-JSON-label-Parsing+Options]. + # + # --- + # + # When +source+ is a \JSON array, returns a Ruby \Array: + # source = '["foo", 1.0, true, false, null]' + # ruby = JSON.parse(source) + # ruby # => ["foo", 1.0, true, false, nil] + # ruby.class # => Array + # + # When +source+ is a \JSON object, returns a Ruby \Hash: + # source = '{"a": "foo", "b": 1.0, "c": true, "d": false, "e": null}' + # ruby = JSON.parse(source) + # ruby # => {"a"=>"foo", "b"=>1.0, "c"=>true, "d"=>false, "e"=>nil} + # ruby.class # => Hash + # + # For examples of parsing for all \JSON data types, see + # {Parsing \JSON}[#module-JSON-label-Parsing+JSON]. + # + # Parses nested JSON objects: + # source = <<-EOT + # { + # "name": "Dave", + # "age" :40, + # "hats": [ + # "Cattleman's", + # "Panama", + # "Tophat" + # ] + # } + # EOT + # ruby = JSON.parse(source) + # ruby # => {"name"=>"Dave", "age"=>40, "hats"=>["Cattleman's", "Panama", "Tophat"]} + # + # --- + # + # Raises an exception if +source+ is not valid JSON: + # # Raises JSON::ParserError (783: unexpected token at ''): + # JSON.parse('') + # + def parse(source, opts = {}) + Parser.new(source, **(opts||{})).parse + end + + # :call-seq: + # JSON.parse!(source, opts) -> object + # + # Calls + # parse(source, opts) + # with +source+ and possibly modified +opts+. + # + # Differences from JSON.parse: + # - Option +max_nesting+, if not provided, defaults to +false+, + # which disables checking for nesting depth. + # - Option +allow_nan+, if not provided, defaults to +true+. + def parse!(source, opts = {}) + opts = { + :max_nesting => false, + :allow_nan => true + }.merge(opts) + Parser.new(source, **(opts||{})).parse + end + + # :call-seq: + # JSON.load_file(path, opts={}) -> object + # + # Calls: + # parse(File.read(path), opts) + # + # See method #parse. + def load_file(filespec, opts = {}) + parse(File.read(filespec), opts) + end + + # :call-seq: + # JSON.load_file!(path, opts = {}) + # + # Calls: + # JSON.parse!(File.read(path, opts)) + # + # See method #parse! + def load_file!(filespec, opts = {}) + parse!(File.read(filespec), opts) + end + + # :call-seq: + # JSON.generate(obj, opts = nil) -> new_string + # + # Returns a \String containing the generated \JSON data. + # + # See also JSON.fast_generate, JSON.pretty_generate. + # + # Argument +obj+ is the Ruby object to be converted to \JSON. + # + # Argument +opts+, if given, contains a \Hash of options for the generation. + # See {Generating Options}[#module-JSON-label-Generating+Options]. + # + # --- + # + # When +obj+ is an \Array, returns a \String containing a \JSON array: + # obj = ["foo", 1.0, true, false, nil] + # json = JSON.generate(obj) + # json # => '["foo",1.0,true,false,null]' + # + # When +obj+ is a \Hash, returns a \String containing a \JSON object: + # obj = {foo: 0, bar: 's', baz: :bat} + # json = JSON.generate(obj) + # json # => '{"foo":0,"bar":"s","baz":"bat"}' + # + # For examples of generating from other Ruby objects, see + # {Generating \JSON from Other Objects}[#module-JSON-label-Generating+JSON+from+Other+Objects]. + # + # --- + # + # Raises an exception if any formatting option is not a \String. + # + # Raises an exception if +obj+ contains circular references: + # a = []; b = []; a.push(b); b.push(a) + # # Raises JSON::NestingError (nesting of 100 is too deep): + # JSON.generate(a) + # + def generate(obj, opts = nil) + if State === opts + state, opts = opts, nil + else + state = State.new + end + if opts + if opts.respond_to? :to_hash + opts = opts.to_hash + elsif opts.respond_to? :to_h + opts = opts.to_h + else + raise TypeError, "can't convert #{opts.class} into Hash" + end + state = state.configure(opts) + end + state.generate(obj) + end + + # :stopdoc: + # I want to deprecate these later, so I'll first be silent about them, and + # later delete them. + alias unparse generate + module_function :unparse + # :startdoc: + + # :call-seq: + # JSON.fast_generate(obj, opts) -> new_string + # + # Arguments +obj+ and +opts+ here are the same as + # arguments +obj+ and +opts+ in JSON.generate. + # + # By default, generates \JSON data without checking + # for circular references in +obj+ (option +max_nesting+ set to +false+, disabled). + # + # Raises an exception if +obj+ contains circular references: + # a = []; b = []; a.push(b); b.push(a) + # # Raises SystemStackError (stack level too deep): + # JSON.fast_generate(a) + def fast_generate(obj, opts = nil) + if State === opts + state, opts = opts, nil + else + state = JSON.create_fast_state + end + if opts + if opts.respond_to? :to_hash + opts = opts.to_hash + elsif opts.respond_to? :to_h + opts = opts.to_h + else + raise TypeError, "can't convert #{opts.class} into Hash" + end + state.configure(opts) + end + state.generate(obj) + end + + # :stopdoc: + # I want to deprecate these later, so I'll first be silent about them, and later delete them. + alias fast_unparse fast_generate + module_function :fast_unparse + # :startdoc: + + # :call-seq: + # JSON.pretty_generate(obj, opts = nil) -> new_string + # + # Arguments +obj+ and +opts+ here are the same as + # arguments +obj+ and +opts+ in JSON.generate. + # + # Default options are: + # { + # indent: ' ', # Two spaces + # space: ' ', # One space + # array_nl: "\n", # Newline + # object_nl: "\n" # Newline + # } + # + # Example: + # obj = {foo: [:bar, :baz], bat: {bam: 0, bad: 1}} + # json = JSON.pretty_generate(obj) + # puts json + # Output: + # { + # "foo": [ + # "bar", + # "baz" + # ], + # "bat": { + # "bam": 0, + # "bad": 1 + # } + # } + # + def pretty_generate(obj, opts = nil) + if State === opts + state, opts = opts, nil + else + state = JSON.create_pretty_state + end + if opts + if opts.respond_to? :to_hash + opts = opts.to_hash + elsif opts.respond_to? :to_h + opts = opts.to_h + else + raise TypeError, "can't convert #{opts.class} into Hash" + end + state.configure(opts) + end + state.generate(obj) + end + + # :stopdoc: + # I want to deprecate these later, so I'll first be silent about them, and later delete them. + alias pretty_unparse pretty_generate + module_function :pretty_unparse + # :startdoc: + + class << self + # Sets or returns default options for the JSON.load method. + # Initially: + # opts = JSON.load_default_options + # opts # => {:max_nesting=>false, :allow_nan=>true, :allow_blank=>true, :create_additions=>true} + attr_accessor :load_default_options + end + self.load_default_options = { + :max_nesting => false, + :allow_nan => true, + :allow_blank => true, + :create_additions => true, + } + + # :call-seq: + # JSON.load(source, proc = nil, options = {}) -> object + # + # Returns the Ruby objects created by parsing the given +source+. + # + # - Argument +source+ must be, or be convertible to, a \String: + # - If +source+ responds to instance method +to_str+, + # source.to_str becomes the source. + # - If +source+ responds to instance method +to_io+, + # source.to_io.read becomes the source. + # - If +source+ responds to instance method +read+, + # source.read becomes the source. + # - If both of the following are true, source becomes the \String 'null': + # - Option +allow_blank+ specifies a truthy value. + # - The source, as defined above, is +nil+ or the empty \String ''. + # - Otherwise, +source+ remains the source. + # - Argument +proc+, if given, must be a \Proc that accepts one argument. + # It will be called recursively with each result (depth-first order). + # See details below. + # BEWARE: This method is meant to serialise data from trusted user input, + # like from your own database server or clients under your control, it could + # be dangerous to allow untrusted users to pass JSON sources into it. + # - Argument +opts+, if given, contains a \Hash of options for the parsing. + # See {Parsing Options}[#module-JSON-label-Parsing+Options]. + # The default options can be changed via method JSON.load_default_options=. + # + # --- + # + # When no +proc+ is given, modifies +source+ as above and returns the result of + # parse(source, opts); see #parse. + # + # Source for following examples: + # source = <<-EOT + # { + # "name": "Dave", + # "age" :40, + # "hats": [ + # "Cattleman's", + # "Panama", + # "Tophat" + # ] + # } + # EOT + # + # Load a \String: + # ruby = JSON.load(source) + # ruby # => {"name"=>"Dave", "age"=>40, "hats"=>["Cattleman's", "Panama", "Tophat"]} + # + # Load an \IO object: + # require 'stringio' + # object = JSON.load(StringIO.new(source)) + # object # => {"name"=>"Dave", "age"=>40, "hats"=>["Cattleman's", "Panama", "Tophat"]} + # + # Load a \File object: + # path = 't.json' + # File.write(path, source) + # File.open(path) do |file| + # JSON.load(file) + # end # => {"name"=>"Dave", "age"=>40, "hats"=>["Cattleman's", "Panama", "Tophat"]} + # + # --- + # + # When +proc+ is given: + # - Modifies +source+ as above. + # - Gets the +result+ from calling parse(source, opts). + # - Recursively calls proc(result). + # - Returns the final result. + # + # Example: + # require 'json' + # + # # Some classes for the example. + # class Base + # def initialize(attributes) + # @attributes = attributes + # end + # end + # class User < Base; end + # class Account < Base; end + # class Admin < Base; end + # # The JSON source. + # json = <<-EOF + # { + # "users": [ + # {"type": "User", "username": "jane", "email": "jane@example.com"}, + # {"type": "User", "username": "john", "email": "john@example.com"} + # ], + # "accounts": [ + # {"account": {"type": "Account", "paid": true, "account_id": "1234"}}, + # {"account": {"type": "Account", "paid": false, "account_id": "1235"}} + # ], + # "admins": {"type": "Admin", "password": "0wn3d"} + # } + # EOF + # # Deserializer method. + # def deserialize_obj(obj, safe_types = %w(User Account Admin)) + # type = obj.is_a?(Hash) && obj["type"] + # safe_types.include?(type) ? Object.const_get(type).new(obj) : obj + # end + # # Call to JSON.load + # ruby = JSON.load(json, proc {|obj| + # case obj + # when Hash + # obj.each {|k, v| obj[k] = deserialize_obj v } + # when Array + # obj.map! {|v| deserialize_obj v } + # end + # }) + # pp ruby + # Output: + # {"users"=> + # [#"User", "username"=>"jane", "email"=>"jane@example.com"}>, + # #"User", "username"=>"john", "email"=>"john@example.com"}>], + # "accounts"=> + # [{"account"=> + # #"Account", "paid"=>true, "account_id"=>"1234"}>}, + # {"account"=> + # #"Account", "paid"=>false, "account_id"=>"1235"}>}], + # "admins"=> + # #"Admin", "password"=>"0wn3d"}>} + # + def load(source, proc = nil, options = {}) + opts = load_default_options.merge options + if source.respond_to? :to_str + source = source.to_str + elsif source.respond_to? :to_io + source = source.to_io.read + elsif source.respond_to?(:read) + source = source.read + end + if opts[:allow_blank] && (source.nil? || source.empty?) + source = 'null' + end + result = parse(source, opts) + recurse_proc(result, &proc) if proc + result + end + + # Recursively calls passed _Proc_ if the parsed data structure is an _Array_ or _Hash_ + def recurse_proc(result, &proc) # :nodoc: + case result + when Array + result.each { |x| recurse_proc x, &proc } + proc.call result + when Hash + result.each { |x, y| recurse_proc x, &proc; recurse_proc y, &proc } + proc.call result + else + proc.call result + end + end + + alias restore load + module_function :restore + + class << self + # Sets or returns the default options for the JSON.dump method. + # Initially: + # opts = JSON.dump_default_options + # opts # => {:max_nesting=>false, :allow_nan=>true, :escape_slash=>false} + attr_accessor :dump_default_options + end + self.dump_default_options = { + :max_nesting => false, + :allow_nan => true, + :escape_slash => false, + } + + # :call-seq: + # JSON.dump(obj, io = nil, limit = nil) + # + # Dumps +obj+ as a \JSON string, i.e. calls generate on the object and returns the result. + # + # The default options can be changed via method JSON.dump_default_options. + # + # - Argument +io+, if given, should respond to method +write+; + # the \JSON \String is written to +io+, and +io+ is returned. + # If +io+ is not given, the \JSON \String is returned. + # - Argument +limit+, if given, is passed to JSON.generate as option +max_nesting+. + # + # --- + # + # When argument +io+ is not given, returns the \JSON \String generated from +obj+: + # obj = {foo: [0, 1], bar: {baz: 2, bat: 3}, bam: :bad} + # json = JSON.dump(obj) + # json # => "{\"foo\":[0,1],\"bar\":{\"baz\":2,\"bat\":3},\"bam\":\"bad\"}" + # + # When argument +io+ is given, writes the \JSON \String to +io+ and returns +io+: + # path = 't.json' + # File.open(path, 'w') do |file| + # JSON.dump(obj, file) + # end # => # + # puts File.read(path) + # Output: + # {"foo":[0,1],"bar":{"baz":2,"bat":3},"bam":"bad"} + def dump(obj, anIO = nil, limit = nil) + if anIO and limit.nil? + anIO = anIO.to_io if anIO.respond_to?(:to_io) + unless anIO.respond_to?(:write) + limit = anIO + anIO = nil + end + end + opts = JSON.dump_default_options + opts = opts.merge(:max_nesting => limit) if limit + result = generate(obj, opts) + if anIO + anIO.write result + anIO + else + result + end + rescue JSON::NestingError + raise ArgumentError, "exceed depth limit" + end + + # Encodes string using String.encode. + def self.iconv(to, from, string) + string.encode(to, from) + end +end + +module ::Kernel + private + + # Outputs _objs_ to STDOUT as JSON strings in the shortest form, that is in + # one line. + def j(*objs) + objs.each do |obj| + puts JSON::generate(obj, :allow_nan => true, :max_nesting => false) + end + nil + end + + # Outputs _objs_ to STDOUT as JSON strings in a pretty format, with + # indentation and over many lines. + def jj(*objs) + objs.each do |obj| + puts JSON::pretty_generate(obj, :allow_nan => true, :max_nesting => false) + end + nil + end + + # If _object_ is string-like, parse the string and return the parsed result as + # a Ruby data structure. Otherwise, generate a JSON text from the Ruby data + # structure object and return it. + # + # The _opts_ argument is passed through to generate/parse respectively. See + # generate and parse for their documentation. + def JSON(object, *args) + if object.respond_to? :to_str + JSON.parse(object.to_str, args.first) + else + JSON.generate(object, args.first) + end + end +end + +# Extends any Class to include _json_creatable?_ method. +class ::Class + # Returns true if this class can be used to create an instance + # from a serialised JSON string. The class has to implement a class + # method _json_create_ that expects a hash as first parameter. The hash + # should include the required data. + def json_creatable? + respond_to?(:json_create) + end +end diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/ext.rb b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/ext.rb new file mode 100644 index 0000000..7264a85 --- /dev/null +++ b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/ext.rb @@ -0,0 +1,15 @@ +require 'json/common' + +module JSON + # This module holds all the modules/classes that implement JSON's + # functionality as C extensions. + module Ext + require 'json/ext/parser' + require 'json/ext/generator' + $DEBUG and warn "Using Ext extension for JSON." + JSON.parser = Parser + JSON.generator = Generator + end + + JSON_LOADED = true unless defined?(::JSON::JSON_LOADED) +end diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/ext/generator.so b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/ext/generator.so new file mode 100755 index 0000000000000000000000000000000000000000..d8731fc748d5417c4d3eb14e11e3a80ca78b029a GIT binary patch literal 102000 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

JIrahDatoWorpXKb76Y1iX=Pf11(R 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 literal 0 HcmV?d00001 diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/ext/parser.so b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/ext/parser.so new file mode 100755 index 0000000000000000000000000000000000000000..0938a60e3b8cd60045c60f6954b19d00ad77d4c3 GIT binary patch literal 67200 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

Ua%MA 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 literal 0 HcmV?d00001 diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/generic_object.rb b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/generic_object.rb new file mode 100644 index 0000000..108309d --- /dev/null +++ b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/generic_object.rb @@ -0,0 +1,71 @@ +#frozen_string_literal: false +require 'ostruct' + +module JSON + class GenericObject < OpenStruct + class << self + alias [] new + + def json_creatable? + @json_creatable + end + + attr_writer :json_creatable + + def json_create(data) + data = data.dup + data.delete JSON.create_id + self[data] + end + + def from_hash(object) + case + when object.respond_to?(:to_hash) + result = new + object.to_hash.each do |key, value| + result[key] = from_hash(value) + end + result + when object.respond_to?(:to_ary) + object.to_ary.map { |a| from_hash(a) } + else + object + end + end + + def load(source, proc = nil, opts = {}) + result = ::JSON.load(source, proc, opts.merge(:object_class => self)) + result.nil? ? new : result + end + + def dump(obj, *args) + ::JSON.dump(obj, *args) + end + end + self.json_creatable = false + + def to_hash + table + end + + def [](name) + __send__(name) + end unless method_defined?(:[]) + + def []=(name, value) + __send__("#{name}=", value) + end unless method_defined?(:[]=) + + def |(other) + self.class[other.to_hash.merge(to_hash)] + end + + def as_json(*) + { JSON.create_id => self.class.name }.merge to_hash + end + + def to_json(*a) + as_json.to_json(*a) + end + end +end diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/pure.rb b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/pure.rb new file mode 100644 index 0000000..53178b3 --- /dev/null +++ b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/pure.rb @@ -0,0 +1,15 @@ +require 'json/common' + +module JSON + # This module holds all the modules/classes that implement JSON's + # functionality in pure ruby. + module Pure + require 'json/pure/parser' + require 'json/pure/generator' + $DEBUG and warn "Using Pure library for JSON." + JSON.parser = Parser + JSON.generator = Generator + end + + JSON_LOADED = true unless defined?(::JSON::JSON_LOADED) +end diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/pure/generator.rb b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/pure/generator.rb new file mode 100644 index 0000000..2257ee3 --- /dev/null +++ b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/pure/generator.rb @@ -0,0 +1,479 @@ +#frozen_string_literal: false +module JSON + MAP = { + "\x0" => '\u0000', + "\x1" => '\u0001', + "\x2" => '\u0002', + "\x3" => '\u0003', + "\x4" => '\u0004', + "\x5" => '\u0005', + "\x6" => '\u0006', + "\x7" => '\u0007', + "\b" => '\b', + "\t" => '\t', + "\n" => '\n', + "\xb" => '\u000b', + "\f" => '\f', + "\r" => '\r', + "\xe" => '\u000e', + "\xf" => '\u000f', + "\x10" => '\u0010', + "\x11" => '\u0011', + "\x12" => '\u0012', + "\x13" => '\u0013', + "\x14" => '\u0014', + "\x15" => '\u0015', + "\x16" => '\u0016', + "\x17" => '\u0017', + "\x18" => '\u0018', + "\x19" => '\u0019', + "\x1a" => '\u001a', + "\x1b" => '\u001b', + "\x1c" => '\u001c', + "\x1d" => '\u001d', + "\x1e" => '\u001e', + "\x1f" => '\u001f', + '"' => '\"', + '\\' => '\\\\', + } # :nodoc: + + ESCAPE_SLASH_MAP = MAP.merge( + '/' => '\\/', + ) + + # Convert a UTF8 encoded Ruby string _string_ to a JSON string, encoded with + # UTF16 big endian characters as \u????, and return it. + def utf8_to_json(string, escape_slash = false) # :nodoc: + string = string.dup + string.force_encoding(::Encoding::ASCII_8BIT) + map = escape_slash ? ESCAPE_SLASH_MAP : MAP + string.gsub!(/[\/"\\\x0-\x1f]/) { map[$&] || $& } + string.force_encoding(::Encoding::UTF_8) + string + end + + def utf8_to_json_ascii(string, escape_slash = false) # :nodoc: + string = string.dup + string.force_encoding(::Encoding::ASCII_8BIT) + map = escape_slash ? ESCAPE_SLASH_MAP : MAP + string.gsub!(/[\/"\\\x0-\x1f]/n) { map[$&] || $& } + string.gsub!(/( + (?: + [\xc2-\xdf][\x80-\xbf] | + [\xe0-\xef][\x80-\xbf]{2} | + [\xf0-\xf4][\x80-\xbf]{3} + )+ | + [\x80-\xc1\xf5-\xff] # invalid + )/nx) { |c| + c.size == 1 and raise GeneratorError, "invalid utf8 byte: '#{c}'" + s = JSON.iconv('utf-16be', 'utf-8', c).unpack('H*')[0] + s.force_encoding(::Encoding::ASCII_8BIT) + s.gsub!(/.{4}/n, '\\\\u\&') + s.force_encoding(::Encoding::UTF_8) + } + string.force_encoding(::Encoding::UTF_8) + string + rescue => e + raise GeneratorError.wrap(e) + end + + def valid_utf8?(string) + encoding = string.encoding + (encoding == Encoding::UTF_8 || encoding == Encoding::ASCII) && + string.valid_encoding? + end + module_function :utf8_to_json, :utf8_to_json_ascii, :valid_utf8? + + module Pure + module Generator + # This class is used to create State instances, that are use to hold data + # while generating a JSON text from a Ruby data structure. + class State + # Creates a State object from _opts_, which ought to be Hash to create + # a new State instance configured by _opts_, something else to create + # an unconfigured instance. If _opts_ is a State object, it is just + # returned. + def self.from_state(opts) + case + when self === opts + opts + when opts.respond_to?(:to_hash) + new(opts.to_hash) + when opts.respond_to?(:to_h) + new(opts.to_h) + else + SAFE_STATE_PROTOTYPE.dup + end + end + + # Instantiates a new State object, configured by _opts_. + # + # _opts_ can have the following keys: + # + # * *indent*: a string used to indent levels (default: ''), + # * *space*: a string that is put after, a : or , delimiter (default: ''), + # * *space_before*: a string that is put before a : pair delimiter (default: ''), + # * *object_nl*: a string that is put at the end of a JSON object (default: ''), + # * *array_nl*: a string that is put at the end of a JSON array (default: ''), + # * *escape_slash*: true if forward slash (/) should be escaped (default: false) + # * *check_circular*: is deprecated now, use the :max_nesting option instead, + # * *max_nesting*: sets the maximum level of data structure nesting in + # the generated JSON, max_nesting = 0 if no maximum should be checked. + # * *allow_nan*: true if NaN, Infinity, and -Infinity should be + # generated, otherwise an exception is thrown, if these values are + # encountered. This options defaults to false. + def initialize(opts = {}) + @indent = '' + @space = '' + @space_before = '' + @object_nl = '' + @array_nl = '' + @allow_nan = false + @ascii_only = false + @escape_slash = false + @buffer_initial_length = 1024 + configure opts + end + + # This string is used to indent levels in the JSON text. + attr_accessor :indent + + # This string is used to insert a space between the tokens in a JSON + # string. + attr_accessor :space + + # This string is used to insert a space before the ':' in JSON objects. + attr_accessor :space_before + + # This string is put at the end of a line that holds a JSON object (or + # Hash). + attr_accessor :object_nl + + # This string is put at the end of a line that holds a JSON array. + attr_accessor :array_nl + + # This integer returns the maximum level of data structure nesting in + # the generated JSON, max_nesting = 0 if no maximum is checked. + attr_accessor :max_nesting + + # If this attribute is set to true, forward slashes will be escaped in + # all json strings. + attr_accessor :escape_slash + + # :stopdoc: + attr_reader :buffer_initial_length + + def buffer_initial_length=(length) + if length > 0 + @buffer_initial_length = length + end + end + # :startdoc: + + # This integer returns the current depth data structure nesting in the + # generated JSON. + attr_accessor :depth + + def check_max_nesting # :nodoc: + return if @max_nesting.zero? + current_nesting = depth + 1 + current_nesting > @max_nesting and + raise NestingError, "nesting of #{current_nesting} is too deep" + end + + # Returns true, if circular data structures are checked, + # otherwise returns false. + def check_circular? + !@max_nesting.zero? + end + + # Returns true if NaN, Infinity, and -Infinity should be considered as + # valid JSON and output. + def allow_nan? + @allow_nan + end + + # Returns true, if only ASCII characters should be generated. Otherwise + # returns false. + def ascii_only? + @ascii_only + end + + # Returns true, if forward slashes are escaped. Otherwise returns false. + def escape_slash? + @escape_slash + end + + # Configure this State instance with the Hash _opts_, and return + # itself. + def configure(opts) + if opts.respond_to?(:to_hash) + opts = opts.to_hash + elsif opts.respond_to?(:to_h) + opts = opts.to_h + else + raise TypeError, "can't convert #{opts.class} into Hash" + end + for key, value in opts + instance_variable_set "@#{key}", value + end + @indent = opts[:indent] if opts.key?(:indent) + @space = opts[:space] if opts.key?(:space) + @space_before = opts[:space_before] if opts.key?(:space_before) + @object_nl = opts[:object_nl] if opts.key?(:object_nl) + @array_nl = opts[:array_nl] if opts.key?(:array_nl) + @allow_nan = !!opts[:allow_nan] if opts.key?(:allow_nan) + @ascii_only = opts[:ascii_only] if opts.key?(:ascii_only) + @depth = opts[:depth] || 0 + @buffer_initial_length ||= opts[:buffer_initial_length] + @escape_slash = !!opts[:escape_slash] if opts.key?(:escape_slash) + + if !opts.key?(:max_nesting) # defaults to 100 + @max_nesting = 100 + elsif opts[:max_nesting] + @max_nesting = opts[:max_nesting] + else + @max_nesting = 0 + end + self + end + alias merge configure + + # Returns the configuration instance variables as a hash, that can be + # passed to the configure method. + def to_h + result = {} + for iv in instance_variables + iv = iv.to_s[1..-1] + result[iv.to_sym] = self[iv] + end + result + end + + alias to_hash to_h + + # Generates a valid JSON document from object +obj+ and + # returns the result. If no valid JSON document can be + # created this method raises a + # GeneratorError exception. + def generate(obj) + result = obj.to_json(self) + JSON.valid_utf8?(result) or raise GeneratorError, + "source sequence #{result.inspect} is illegal/malformed utf-8" + result + end + + # Return the value returned by method +name+. + def [](name) + if respond_to?(name) + __send__(name) + else + instance_variable_get("@#{name}") if + instance_variables.include?("@#{name}".to_sym) # avoid warning + end + end + + def []=(name, value) + if respond_to?(name_writer = "#{name}=") + __send__ name_writer, value + else + instance_variable_set "@#{name}", value + end + end + end + + module GeneratorMethods + module Object + # Converts this object to a string (calling #to_s), converts + # it to a JSON string, and returns the result. This is a fallback, if no + # special method #to_json was defined for some object. + def to_json(*) to_s.to_json end + end + + module Hash + # Returns a JSON string containing a JSON object, that is unparsed from + # this Hash instance. + # _state_ is a JSON::State object, that can also be used to configure the + # produced JSON string output further. + # _depth_ is used to find out nesting depth, to indent accordingly. + def to_json(state = nil, *) + state = State.from_state(state) + state.check_max_nesting + json_transform(state) + end + + private + + def json_shift(state) + state.object_nl.empty? or return '' + state.indent * state.depth + end + + def json_transform(state) + delim = ',' + delim << state.object_nl + result = '{' + result << state.object_nl + depth = state.depth += 1 + first = true + indent = !state.object_nl.empty? + each { |key,value| + result << delim unless first + result << state.indent * depth if indent + result << key.to_s.to_json(state) + result << state.space_before + result << ':' + result << state.space + if value.respond_to?(:to_json) + result << value.to_json(state) + else + result << %{"#{String(value)}"} + end + first = false + } + depth = state.depth -= 1 + unless first + result << state.object_nl + result << state.indent * depth if indent + end + result << '}' + result + end + end + + module Array + # Returns a JSON string containing a JSON array, that is unparsed from + # this Array instance. + # _state_ is a JSON::State object, that can also be used to configure the + # produced JSON string output further. + def to_json(state = nil, *) + state = State.from_state(state) + state.check_max_nesting + json_transform(state) + end + + private + + def json_transform(state) + delim = ',' + delim << state.array_nl + result = '[' + result << state.array_nl + depth = state.depth += 1 + first = true + indent = !state.array_nl.empty? + each { |value| + result << delim unless first + result << state.indent * depth if indent + if value.respond_to?(:to_json) + result << value.to_json(state) + else + result << %{"#{String(value)}"} + end + first = false + } + depth = state.depth -= 1 + result << state.array_nl + result << state.indent * depth if indent + result << ']' + end + end + + module Integer + # Returns a JSON string representation for this Integer number. + def to_json(*) to_s end + end + + module Float + # Returns a JSON string representation for this Float number. + def to_json(state = nil, *) + state = State.from_state(state) + case + when infinite? + if state.allow_nan? + to_s + else + raise GeneratorError, "#{self} not allowed in JSON" + end + when nan? + if state.allow_nan? + to_s + else + raise GeneratorError, "#{self} not allowed in JSON" + end + else + to_s + end + end + end + + module String + # This string should be encoded with UTF-8 A call to this method + # returns a JSON string encoded with UTF16 big endian characters as + # \u????. + def to_json(state = nil, *args) + state = State.from_state(state) + if encoding == ::Encoding::UTF_8 + string = self + else + string = encode(::Encoding::UTF_8) + end + if state.ascii_only? + '"' << JSON.utf8_to_json_ascii(string, state.escape_slash) << '"' + else + '"' << JSON.utf8_to_json(string, state.escape_slash) << '"' + end + end + + # Module that holds the extending methods if, the String module is + # included. + module Extend + # Raw Strings are JSON Objects (the raw bytes are stored in an + # array for the key "raw"). The Ruby String can be created by this + # module method. + def json_create(o) + o['raw'].pack('C*') + end + end + + # Extends _modul_ with the String::Extend module. + def self.included(modul) + modul.extend Extend + end + + # This method creates a raw object hash, that can be nested into + # other data structures and will be unparsed as a raw string. This + # method should be used, if you want to convert raw strings to JSON + # instead of UTF-8 strings, e. g. binary data. + def to_json_raw_object + { + JSON.create_id => self.class.name, + 'raw' => self.unpack('C*'), + } + end + + # This method creates a JSON text from the result of + # a call to to_json_raw_object of this String. + def to_json_raw(*args) + to_json_raw_object.to_json(*args) + end + end + + module TrueClass + # Returns a JSON string for true: 'true'. + def to_json(*) 'true' end + end + + module FalseClass + # Returns a JSON string for false: 'false'. + def to_json(*) 'false' end + end + + module NilClass + # Returns a JSON string for nil: 'null'. + def to_json(*) 'null' end + end + end + end + end +end diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/pure/parser.rb b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/pure/parser.rb new file mode 100644 index 0000000..be48c60 --- /dev/null +++ b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/pure/parser.rb @@ -0,0 +1,337 @@ +#frozen_string_literal: false +require 'strscan' + +module JSON + module Pure + # This class implements the JSON parser that is used to parse a JSON string + # into a Ruby data structure. + class Parser < StringScanner + STRING = /" ((?:[^\x0-\x1f"\\] | + # escaped special characters: + \\["\\\/bfnrt] | + \\u[0-9a-fA-F]{4} | + # match all but escaped special characters: + \\[\x20-\x21\x23-\x2e\x30-\x5b\x5d-\x61\x63-\x65\x67-\x6d\x6f-\x71\x73\x75-\xff])*) + "/nx + INTEGER = /(-?0|-?[1-9]\d*)/ + FLOAT = /(-? + (?:0|[1-9]\d*) + (?: + \.\d+(?i:e[+-]?\d+) | + \.\d+ | + (?i:e[+-]?\d+) + ) + )/x + NAN = /NaN/ + INFINITY = /Infinity/ + MINUS_INFINITY = /-Infinity/ + OBJECT_OPEN = /\{/ + OBJECT_CLOSE = /\}/ + ARRAY_OPEN = /\[/ + ARRAY_CLOSE = /\]/ + PAIR_DELIMITER = /:/ + COLLECTION_DELIMITER = /,/ + TRUE = /true/ + FALSE = /false/ + NULL = /null/ + IGNORE = %r( + (?: + //[^\n\r]*[\n\r]| # line comments + /\* # c-style comments + (?: + [^*/]| # normal chars + /[^*]| # slashes that do not start a nested comment + \*[^/]| # asterisks that do not end this comment + /(?=\*/) # single slash before this comment's end + )* + \*/ # the End of this comment + |[ \t\r\n]+ # whitespaces: space, horizontal tab, lf, cr + )+ + )mx + + UNPARSED = Object.new.freeze + + # Creates a new JSON::Pure::Parser instance for the string _source_. + # + # It will be configured by the _opts_ hash. _opts_ can have the following + # keys: + # * *max_nesting*: The maximum depth of nesting allowed in the parsed data + # structures. Disable depth checking with :max_nesting => false|nil|0, + # it defaults to 100. + # * *allow_nan*: If set to true, allow NaN, Infinity and -Infinity in + # defiance of RFC 7159 to be parsed by the Parser. This option defaults + # to false. + # * *freeze*: If set to true, all parsed objects will be frozen. Parsed + # string will be deduplicated if possible. + # * *symbolize_names*: If set to true, returns symbols for the names + # (keys) in a JSON object. Otherwise strings are returned, which is + # also the default. It's not possible to use this option in + # conjunction with the *create_additions* option. + # * *create_additions*: If set to true, the Parser creates + # additions when a matching class and create_id are found. This + # option defaults to false. + # * *object_class*: Defaults to Hash + # * *array_class*: Defaults to Array + # * *decimal_class*: Specifies which class to use instead of the default + # (Float) when parsing decimal numbers. This class must accept a single + # string argument in its constructor. + def initialize(source, opts = {}) + opts ||= {} + source = convert_encoding source + super source + if !opts.key?(:max_nesting) # defaults to 100 + @max_nesting = 100 + elsif opts[:max_nesting] + @max_nesting = opts[:max_nesting] + else + @max_nesting = 0 + end + @allow_nan = !!opts[:allow_nan] + @symbolize_names = !!opts[:symbolize_names] + @freeze = !!opts[:freeze] + if opts.key?(:create_additions) + @create_additions = !!opts[:create_additions] + else + @create_additions = false + end + @symbolize_names && @create_additions and raise ArgumentError, + 'options :symbolize_names and :create_additions cannot be used '\ + 'in conjunction' + @create_id = @create_additions ? JSON.create_id : nil + @object_class = opts[:object_class] || Hash + @array_class = opts[:array_class] || Array + @decimal_class = opts[:decimal_class] + @match_string = opts[:match_string] + end + + alias source string + + def reset + super + @current_nesting = 0 + end + + # Parses the current JSON string _source_ and returns the + # complete data structure as a result. + def parse + reset + obj = nil + while !eos? && skip(IGNORE) do end + if eos? + raise ParserError, "source is not valid JSON!" + else + obj = parse_value + UNPARSED.equal?(obj) and raise ParserError, + "source is not valid JSON!" + obj.freeze if @freeze + end + while !eos? && skip(IGNORE) do end + eos? or raise ParserError, "source is not valid JSON!" + obj + end + + private + + def convert_encoding(source) + if source.respond_to?(:to_str) + source = source.to_str + else + raise TypeError, + "#{source.inspect} is not like a string" + end + if source.encoding != ::Encoding::ASCII_8BIT + source = source.encode(::Encoding::UTF_8) + source.force_encoding(::Encoding::ASCII_8BIT) + end + source + end + + # Unescape characters in strings. + UNESCAPE_MAP = Hash.new { |h, k| h[k] = k.chr } + UNESCAPE_MAP.update({ + ?" => '"', + ?\\ => '\\', + ?/ => '/', + ?b => "\b", + ?f => "\f", + ?n => "\n", + ?r => "\r", + ?t => "\t", + ?u => nil, + }) + + EMPTY_8BIT_STRING = '' + if ::String.method_defined?(:encode) + EMPTY_8BIT_STRING.force_encoding Encoding::ASCII_8BIT + end + + STR_UMINUS = ''.respond_to?(:-@) + def parse_string + if scan(STRING) + return '' if self[1].empty? + string = self[1].gsub(%r((?:\\[\\bfnrt"/]|(?:\\u(?:[A-Fa-f\d]{4}))+|\\[\x20-\xff]))n) do |c| + if u = UNESCAPE_MAP[$&[1]] + u + else # \uXXXX + bytes = EMPTY_8BIT_STRING.dup + i = 0 + while c[6 * i] == ?\\ && c[6 * i + 1] == ?u + bytes << c[6 * i + 2, 2].to_i(16) << c[6 * i + 4, 2].to_i(16) + i += 1 + end + JSON.iconv('utf-8', 'utf-16be', bytes).force_encoding(::Encoding::ASCII_8BIT) + end + end + if string.respond_to?(:force_encoding) + string.force_encoding(::Encoding::UTF_8) + end + + if @freeze + if STR_UMINUS + string = -string + else + string.freeze + end + end + + if @create_additions and @match_string + for (regexp, klass) in @match_string + klass.json_creatable? or next + string =~ regexp and return klass.json_create(string) + end + end + string + else + UNPARSED + end + rescue => e + raise ParserError, "Caught #{e.class} at '#{peek(20)}': #{e}" + end + + def parse_value + case + when scan(FLOAT) + if @decimal_class then + if @decimal_class == BigDecimal then + BigDecimal(self[1]) + else + @decimal_class.new(self[1]) || Float(self[1]) + end + else + Float(self[1]) + end + when scan(INTEGER) + Integer(self[1]) + when scan(TRUE) + true + when scan(FALSE) + false + when scan(NULL) + nil + when !UNPARSED.equal?(string = parse_string) + string + when scan(ARRAY_OPEN) + @current_nesting += 1 + ary = parse_array + @current_nesting -= 1 + ary + when scan(OBJECT_OPEN) + @current_nesting += 1 + obj = parse_object + @current_nesting -= 1 + obj + when @allow_nan && scan(NAN) + NaN + when @allow_nan && scan(INFINITY) + Infinity + when @allow_nan && scan(MINUS_INFINITY) + MinusInfinity + else + UNPARSED + end + end + + def parse_array + raise NestingError, "nesting of #@current_nesting is too deep" if + @max_nesting.nonzero? && @current_nesting > @max_nesting + result = @array_class.new + delim = false + loop do + case + when eos? + raise ParserError, "unexpected end of string while parsing array" + when !UNPARSED.equal?(value = parse_value) + delim = false + result << value + skip(IGNORE) + if scan(COLLECTION_DELIMITER) + delim = true + elsif match?(ARRAY_CLOSE) + ; + else + raise ParserError, "expected ',' or ']' in array at '#{peek(20)}'!" + end + when scan(ARRAY_CLOSE) + if delim + raise ParserError, "expected next element in array at '#{peek(20)}'!" + end + break + when skip(IGNORE) + ; + else + raise ParserError, "unexpected token in array at '#{peek(20)}'!" + end + end + result + end + + def parse_object + raise NestingError, "nesting of #@current_nesting is too deep" if + @max_nesting.nonzero? && @current_nesting > @max_nesting + result = @object_class.new + delim = false + loop do + case + when eos? + raise ParserError, "unexpected end of string while parsing object" + when !UNPARSED.equal?(string = parse_string) + skip(IGNORE) + unless scan(PAIR_DELIMITER) + raise ParserError, "expected ':' in object at '#{peek(20)}'!" + end + skip(IGNORE) + unless UNPARSED.equal?(value = parse_value) + result[@symbolize_names ? string.to_sym : string] = value + delim = false + skip(IGNORE) + if scan(COLLECTION_DELIMITER) + delim = true + elsif match?(OBJECT_CLOSE) + ; + else + raise ParserError, "expected ',' or '}' in object at '#{peek(20)}'!" + end + else + raise ParserError, "expected value in object at '#{peek(20)}'!" + end + when scan(OBJECT_CLOSE) + if delim + raise ParserError, "expected next name, value pair in object at '#{peek(20)}'!" + end + if @create_additions and klassname = result[@create_id] + klass = JSON.deep_const_get klassname + break unless klass and klass.json_creatable? + result = klass.json_create(result) + end + break + when skip(IGNORE) + ; + else + raise ParserError, "unexpected token in object at '#{peek(20)}'!" + end + end + result + end + end + end +end diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/version.rb b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/version.rb new file mode 100644 index 0000000..3d4326d --- /dev/null +++ b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/lib/json/version.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: false +module JSON + # JSON version + VERSION = '2.6.3' + VERSION_ARRAY = VERSION.split(/\./).map { |x| x.to_i } # :nodoc: + VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc: + VERSION_MINOR = VERSION_ARRAY[1] # :nodoc: + VERSION_BUILD = VERSION_ARRAY[2] # :nodoc: +end diff --git a/vendor/bundle/ruby/2.7.0/specifications/json-2.6.3.gemspec b/vendor/bundle/ruby/2.7.0/specifications/json-2.6.3.gemspec new file mode 100644 index 0000000000000000000000000000000000000000..d41efd4bfeecb9a7d47d32841424e5199b3012b5 GIT binary patch literal 1720 zcmcgsU2oGc6y-U;;>vqrh&Wv*CRC||X>xiCJt1+hHq=|Bmf6g>)_2 z6H*^i-*Z3Dx%U9#XEC76Rl#L7gU*)mOaB%ffU#XRgRe$On9>t^47$r!(C}U!eVm7;OG3O=EndM4SiMLQFxHtC^fT5BJ zggFqOo6u4t{=i`Pj@mf9w}p~P6rMGH>$t`u^&M0wO!@~HvMqanKxuuhr{r`FlOggU z@X{sKXj&zU)T&o7+Z%Bn5(>1eV3xT;eget5Dz%#BH>lH2a{}{IAhorvnI%cZZQW%w zS0X7JrFlP4ZcK-UJO`53Ojg*a>ang_qq0OWW8J9F-=1AvF0QF4e5gX@oo_MBbR5nV z60*~EIb8L1IG2RW0`F*TMdO3iN?^+>e4M}cFsjozrcPp8PJ7$;Ubp;)k8|vWCmu`S z*AAWrB6?cZtfeipwQ<~hCQi)*&0hj@th2S!z45~H!6aO0CU3?tM{ZEybTXaBN7H!n zf&}*hO|E(CMe9ZQspbaUkHP!vk5|A&+u())VBWCwOXb!CWl%1ca88F@AtVaM8y_qX z^tyF>N(&rA2KT=1(bDZ&%fZ==d4zqipnHJpRUNGT^}h8HT}2x2VwhB`{mqT3BREa4o<^!N8He?qjKD5n1%{+=;sl~mfL2-o@;iO zFiNF^E{0$Z7ROEon`7r5_Dptkm>zTHru2A7a~Slt<3^HWdPGkKSU{Oh2&PwlSfPV= hV`*=9(BEM$jb%;a4so{ntG0Fc9qYTxAwpS1zX3s)M

M>|CJ}={Wi5$B45N~HwV9Cye3~1#Lc)a2 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 T$LFWnR&}$@FeS5Y@-Xzje=W{x literal 0 HcmV?d00001 diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/parser/parser.rl b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/parser/parser.rl new file mode 100644 index 0000000..2dbdc7e --- /dev/null +++ b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/parser/parser.rl @@ -0,0 +1,986 @@ +#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] = { + -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, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, + -1, -1, -1, -1, -1, -1, 10, 11, 12, 13, 14, 15, -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, + 10, 11, 12, 13, 14, 15, -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, + -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, -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, -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, -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 +}; + +static UTF32 unescape_unicode(const unsigned char *p) +{ + signed char b; + UTF32 result = 0; + b = digit_values[p[0]]; + if (b < 0) return UNI_REPLACEMENT_CHAR; + result = (result << 4) | (unsigned char)b; + b = digit_values[p[1]]; + if (b < 0) return UNI_REPLACEMENT_CHAR; + result = (result << 4) | (unsigned char)b; + b = digit_values[p[2]]; + if (b < 0) return UNI_REPLACEMENT_CHAR; + result = (result << 4) | (unsigned char)b; + b = digit_values[p[3]]; + if (b < 0) return UNI_REPLACEMENT_CHAR; + result = (result << 4) | (unsigned char)b; + return result; +} + +static int convert_UTF32_to_UTF8(char *buf, UTF32 ch) +{ + int len = 1; + if (ch <= 0x7F) { + buf[0] = (char) ch; + } else if (ch <= 0x07FF) { + buf[0] = (char) ((ch >> 6) | 0xC0); + buf[1] = (char) ((ch & 0x3F) | 0x80); + len++; + } else if (ch <= 0xFFFF) { + buf[0] = (char) ((ch >> 12) | 0xE0); + buf[1] = (char) (((ch >> 6) & 0x3F) | 0x80); + buf[2] = (char) ((ch & 0x3F) | 0x80); + len += 2; + } else if (ch <= 0x1fffff) { + buf[0] =(char) ((ch >> 18) | 0xF0); + buf[1] =(char) (((ch >> 12) & 0x3F) | 0x80); + buf[2] =(char) (((ch >> 6) & 0x3F) | 0x80); + buf[3] =(char) ((ch & 0x3F) | 0x80); + len += 3; + } else { + buf[0] = '?'; + } + return len; +} + +static VALUE mJSON, mExt, cParser, eParserError, eNestingError; +static VALUE CNaN, CInfinity, CMinusInfinity; + +static ID i_json_creatable_p, i_json_create, i_create_id, i_create_additions, + i_chr, i_max_nesting, i_allow_nan, i_symbolize_names, + i_object_class, i_array_class, i_decimal_class, i_key_p, + i_deep_const_get, i_match, i_match_string, i_aset, i_aref, + i_leftshift, i_new, i_try_convert, i_freeze, i_uminus; + +%%{ + machine JSON_common; + + cr = '\n'; + cr_neg = [^\n]; + ws = [ \t\r\n]; + c_comment = '/*' ( any* - (any* '*/' any* ) ) '*/'; + cpp_comment = '//' cr_neg* cr; + comment = c_comment | cpp_comment; + ignore = ws | comment; + name_separator = ':'; + value_separator = ','; + Vnull = 'null'; + Vfalse = 'false'; + Vtrue = 'true'; + VNaN = 'NaN'; + VInfinity = 'Infinity'; + VMinusInfinity = '-Infinity'; + begin_value = [nft\"\-\[\{NI] | digit; + begin_object = '{'; + end_object = '}'; + begin_array = '['; + end_array = ']'; + begin_string = '"'; + begin_name = begin_string; + begin_number = digit | '-'; +}%% + +%%{ + machine JSON_object; + include JSON_common; + + write data; + + action parse_value { + VALUE v = Qnil; + char *np = JSON_parse_value(json, fpc, pe, &v, current_nesting); + if (np == NULL) { + fhold; fbreak; + } else { + if (NIL_P(json->object_class)) { + OBJ_FREEZE(last_name); + rb_hash_aset(*result, last_name, v); + } else { + rb_funcall(*result, i_aset, 2, last_name, v); + } + fexec np; + } + } + + action parse_name { + char *np; + json->parsing_name = 1; + np = JSON_parse_string(json, fpc, pe, &last_name); + json->parsing_name = 0; + if (np == NULL) { fhold; fbreak; } else fexec np; + } + + action exit { fhold; fbreak; } + + pair = ignore* begin_name >parse_name ignore* name_separator ignore* begin_value >parse_value; + next_pair = ignore* value_separator pair; + + main := ( + begin_object + (pair (next_pair)*)? ignore* + end_object + ) @exit; +}%% + +static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting) +{ + int cs = EVIL; + VALUE last_name = Qnil; + VALUE object_class = json->object_class; + + if (json->max_nesting && current_nesting > json->max_nesting) { + rb_raise(eNestingError, "nesting of %d is too deep", current_nesting); + } + + *result = NIL_P(object_class) ? rb_hash_new() : rb_class_new_instance(0, 0, object_class); + + %% write init; + %% write exec; + + if (cs >= JSON_object_first_final) { + if (json->create_additions) { + VALUE klassname; + if (NIL_P(json->object_class)) { + klassname = rb_hash_aref(*result, json->create_id); + } else { + klassname = rb_funcall(*result, i_aref, 1, json->create_id); + } + if (!NIL_P(klassname)) { + VALUE klass = rb_funcall(mJSON, i_deep_const_get, 1, klassname); + if (RTEST(rb_funcall(klass, i_json_creatable_p, 0))) { + *result = rb_funcall(klass, i_json_create, 1, *result); + } + } + } + return p + 1; + } else { + return NULL; + } +} + + +%%{ + machine JSON_value; + include JSON_common; + + write data; + + action parse_null { + *result = Qnil; + } + action parse_false { + *result = Qfalse; + } + action parse_true { + *result = Qtrue; + } + action parse_nan { + if (json->allow_nan) { + *result = CNaN; + } else { + rb_enc_raise(EXC_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 - 8); + } + } + action parse_string { + char *np = JSON_parse_string(json, fpc, pe, result); + if (np == NULL) { fhold; fbreak; } else fexec np; + } + + action parse_number { + char *np; + if(pe > fpc + 8 && !strncmp(MinusInfinity, fpc, 9)) { + if (json->allow_nan) { + *result = CMinusInfinity; + fexec p + 10; + fhold; fbreak; + } else { + rb_enc_raise(EXC_ENCODING eParserError, "unexpected token at '%s'", p); + } + } + np = JSON_parse_float(json, fpc, pe, result); + if (np != NULL) fexec np; + np = JSON_parse_integer(json, fpc, pe, result); + if (np != NULL) fexec np; + fhold; fbreak; + } + + action parse_array { + char *np; + np = JSON_parse_array(json, fpc, pe, result, current_nesting + 1); + if (np == NULL) { fhold; fbreak; } else fexec np; + } + + action parse_object { + char *np; + np = JSON_parse_object(json, fpc, pe, result, current_nesting + 1); + if (np == NULL) { fhold; fbreak; } else fexec np; + } + + action exit { fhold; fbreak; } + +main := ignore* ( + Vnull @parse_null | + Vfalse @parse_false | + Vtrue @parse_true | + VNaN @parse_nan | + VInfinity @parse_infinity | + begin_number >parse_number | + begin_string >parse_string | + begin_array >parse_array | + begin_object >parse_object + ) ignore* %*exit; +}%% + +static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting) +{ + int cs = EVIL; + + %% write init; + %% write exec; + + if (json->freeze) { + OBJ_FREEZE(*result); + } + + if (cs >= JSON_value_first_final) { + return p; + } else { + return NULL; + } +} + +%%{ + machine JSON_integer; + + write data; + + action exit { fhold; fbreak; } + + main := '-'? ('0' | [1-9][0-9]*) (^[0-9]? @exit); +}%% + +static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *result) +{ + int cs = EVIL; + + %% write init; + json->memo = p; + %% write exec; + + if (cs >= JSON_integer_first_final) { + long len = p - json->memo; + fbuffer_clear(json->fbuffer); + fbuffer_append(json->fbuffer, json->memo, len); + fbuffer_append_char(json->fbuffer, '\0'); + *result = rb_cstr2inum(FBUFFER_PTR(json->fbuffer), 10); + return p + 1; + } else { + return NULL; + } +} + +%%{ + machine JSON_float; + include JSON_common; + + write data; + + action exit { fhold; fbreak; } + + main := '-'? ( + (('0' | [1-9][0-9]*) '.' [0-9]+ ([Ee] [+\-]?[0-9]+)?) + | (('0' | [1-9][0-9]*) ([Ee] [+\-]?[0-9]+)) + ) (^[0-9Ee.\-]? @exit ); +}%% + +static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *result) +{ + int cs = EVIL; + + %% write init; + json->memo = p; + %% write exec; + + if (cs >= JSON_float_first_final) { + VALUE mod = Qnil; + ID method_id = 0; + if (rb_respond_to(json->decimal_class, i_try_convert)) { + mod = json->decimal_class; + method_id = i_try_convert; + } else if (rb_respond_to(json->decimal_class, i_new)) { + mod = json->decimal_class; + method_id = i_new; + } else if (RB_TYPE_P(json->decimal_class, T_CLASS)) { + VALUE name = rb_class_name(json->decimal_class); + const char *name_cstr = RSTRING_PTR(name); + const char *last_colon = strrchr(name_cstr, ':'); + if (last_colon) { + const char *mod_path_end = last_colon - 1; + VALUE mod_path = rb_str_substr(name, 0, mod_path_end - name_cstr); + mod = rb_path_to_class(mod_path); + + const char *method_name_beg = last_colon + 1; + long before_len = method_name_beg - name_cstr; + long len = RSTRING_LEN(name) - before_len; + VALUE method_name = rb_str_substr(name, before_len, len); + method_id = SYM2ID(rb_str_intern(method_name)); + } else { + mod = rb_mKernel; + method_id = SYM2ID(rb_str_intern(name)); + } + } + + long len = p - json->memo; + fbuffer_clear(json->fbuffer); + fbuffer_append(json->fbuffer, json->memo, len); + fbuffer_append_char(json->fbuffer, '\0'); + + if (method_id) { + VALUE text = rb_str_new2(FBUFFER_PTR(json->fbuffer)); + *result = rb_funcallv(mod, method_id, 1, &text); + } else { + *result = DBL2NUM(rb_cstr_to_dbl(FBUFFER_PTR(json->fbuffer), 1)); + } + + return p + 1; + } else { + return NULL; + } +} + + +%%{ + machine JSON_array; + include JSON_common; + + write data; + + action parse_value { + VALUE v = Qnil; + char *np = JSON_parse_value(json, fpc, pe, &v, current_nesting); + if (np == NULL) { + fhold; fbreak; + } else { + if (NIL_P(json->array_class)) { + rb_ary_push(*result, v); + } else { + rb_funcall(*result, i_leftshift, 1, v); + } + fexec np; + } + } + + action exit { fhold; fbreak; } + + next_element = value_separator ignore* begin_value >parse_value; + + main := begin_array ignore* + ((begin_value >parse_value ignore*) + (ignore* next_element ignore*)*)? + end_array @exit; +}%% + +static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting) +{ + int cs = EVIL; + VALUE array_class = json->array_class; + + if (json->max_nesting && current_nesting > json->max_nesting) { + rb_raise(eNestingError, "nesting of %d is too deep", current_nesting); + } + *result = NIL_P(array_class) ? rb_ary_new() : rb_class_new_instance(0, 0, array_class); + + %% write init; + %% write exec; + + if(cs >= JSON_array_first_final) { + return p + 1; + } else { + rb_enc_raise(EXC_ENCODING eParserError, "unexpected token at '%s'", p); + return NULL; + } +} + +static const size_t MAX_STACK_BUFFER_SIZE = 128; +static VALUE json_string_unescape(char *string, char *stringEnd, int intern, int symbolize) +{ + VALUE result = Qnil; + size_t bufferSize = stringEnd - string; + char *p = string, *pe = string, *unescape, *bufferStart, *buffer; + int unescape_len; + char buf[4]; + + if (bufferSize > MAX_STACK_BUFFER_SIZE) { +# ifdef HAVE_RB_ENC_INTERNED_STR + bufferStart = buffer = ALLOC_N(char, bufferSize ? bufferSize : 1); +# else + bufferStart = buffer = ALLOC_N(char, bufferSize); +# endif + } else { +# ifdef HAVE_RB_ENC_INTERNED_STR + bufferStart = buffer = ALLOCA_N(char, bufferSize ? bufferSize : 1); +# else + bufferStart = buffer = ALLOCA_N(char, bufferSize); +# endif + } + + while (pe < stringEnd) { + if (*pe == '\\') { + unescape = (char *) "?"; + unescape_len = 1; + if (pe > p) { + MEMCPY(buffer, p, char, pe - p); + buffer += pe - p; + } + switch (*++pe) { + case 'n': + unescape = (char *) "\n"; + break; + case 'r': + unescape = (char *) "\r"; + break; + case 't': + unescape = (char *) "\t"; + break; + case '"': + unescape = (char *) "\""; + break; + case '\\': + unescape = (char *) "\\"; + break; + case 'b': + unescape = (char *) "\b"; + break; + case 'f': + unescape = (char *) "\f"; + break; + case 'u': + if (pe > stringEnd - 4) { + if (bufferSize > MAX_STACK_BUFFER_SIZE) { + free(bufferStart); + } + rb_enc_raise( + EXC_ENCODING eParserError, + "incomplete unicode character escape sequence at '%s'", p + ); + } else { + UTF32 ch = unescape_unicode((unsigned char *) ++pe); + pe += 3; + if (UNI_SUR_HIGH_START == (ch & 0xFC00)) { + pe++; + if (pe > stringEnd - 6) { + if (bufferSize > MAX_STACK_BUFFER_SIZE) { + free(bufferStart); + } + rb_enc_raise( + EXC_ENCODING eParserError, + "incomplete surrogate pair at '%s'", p + ); + } + if (pe[0] == '\\' && pe[1] == 'u') { + UTF32 sur = unescape_unicode((unsigned char *) pe + 2); + ch = (((ch & 0x3F) << 10) | ((((ch >> 6) & 0xF) + 1) << 16) + | (sur & 0x3FF)); + pe += 5; + } else { + unescape = (char *) "?"; + break; + } + } + unescape_len = convert_UTF32_to_UTF8(buf, ch); + unescape = buf; + } + break; + default: + p = pe; + continue; + } + MEMCPY(buffer, unescape, char, unescape_len); + buffer += unescape_len; + p = ++pe; + } else { + pe++; + } + } + + if (pe > p) { + MEMCPY(buffer, p, char, pe - p); + buffer += pe - p; + } + +# ifdef HAVE_RB_ENC_INTERNED_STR + if (intern) { + result = rb_enc_interned_str(bufferStart, (long)(buffer - bufferStart), rb_utf8_encoding()); + } else { + result = rb_utf8_str_new(bufferStart, (long)(buffer - bufferStart)); + } + if (bufferSize > MAX_STACK_BUFFER_SIZE) { + free(bufferStart); + } +# else + result = rb_utf8_str_new(bufferStart, (long)(buffer - bufferStart)); + + if (bufferSize > MAX_STACK_BUFFER_SIZE) { + free(bufferStart); + } + + if (intern) { + # if STR_UMINUS_DEDUPE_FROZEN + // Starting from MRI 2.8 it is preferable to freeze the string + // before deduplication so that it can be interned directly + // otherwise it would be duplicated first which is wasteful. + result = rb_funcall(rb_str_freeze(result), i_uminus, 0); + # elif STR_UMINUS_DEDUPE + // MRI 2.5 and older do not deduplicate strings that are already + // frozen. + result = rb_funcall(result, i_uminus, 0); + # else + result = rb_str_freeze(result); + # endif + } +# endif + + if (symbolize) { + result = rb_str_intern(result); + } + + return result; +} + +%%{ + machine JSON_string; + include JSON_common; + + write data; + + action parse_string { + *result = json_string_unescape(json->memo + 1, p, json->parsing_name || json-> freeze, json->parsing_name && json->symbolize_names); + if (NIL_P(*result)) { + fhold; + fbreak; + } else { + fexec p + 1; + } + } + + action exit { fhold; fbreak; } + + main := '"' ((^([\"\\] | 0..0x1f) | '\\'[\"\\/bfnrt] | '\\u'[0-9a-fA-F]{4} | '\\'^([\"\\/bfnrtu]|0..0x1f))* %parse_string) '"' @exit; +}%% + +static int +match_i(VALUE regexp, VALUE klass, VALUE memo) +{ + if (regexp == Qundef) return ST_STOP; + if (RTEST(rb_funcall(klass, i_json_creatable_p, 0)) && + RTEST(rb_funcall(regexp, i_match, 1, rb_ary_entry(memo, 0)))) { + rb_ary_push(memo, klass); + return ST_STOP; + } + return ST_CONTINUE; +} + +static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *result) +{ + int cs = EVIL; + VALUE match_string; + + %% write init; + json->memo = p; + %% write exec; + + if (json->create_additions && RTEST(match_string = json->match_string)) { + VALUE klass; + VALUE memo = rb_ary_new2(2); + rb_ary_push(memo, *result); + rb_hash_foreach(match_string, match_i, memo); + klass = rb_ary_entry(memo, 1); + if (RTEST(klass)) { + *result = rb_funcall(klass, i_json_create, 1, *result); + } + } + + if (cs >= JSON_string_first_final) { + return p + 1; + } else { + return NULL; + } +} + +/* + * Document-class: JSON::Ext::Parser + * + * This is the JSON parser implemented as a C extension. It can be configured + * to be used by setting + * + * JSON.parser = JSON::Ext::Parser + * + * with the method parser= in JSON. + * + */ + +static VALUE convert_encoding(VALUE source) +{ +#ifdef HAVE_RUBY_ENCODING_H + rb_encoding *enc = rb_enc_get(source); + if (enc == rb_ascii8bit_encoding()) { + if (OBJ_FROZEN(source)) { + source = rb_str_dup(source); + } + FORCE_UTF8(source); + } else { + source = rb_str_conv_enc(source, rb_enc_get(source), rb_utf8_encoding()); + } +#endif + return source; +} + +/* + * call-seq: new(source, opts => {}) + * + * Creates a new JSON::Ext::Parser instance for the string _source_. + * + * Creates a new JSON::Ext::Parser instance for the string _source_. + * + * It will be configured by the _opts_ hash. _opts_ can have the following + * keys: + * + * _opts_ can have the following keys: + * * *max_nesting*: The maximum depth of nesting allowed in the parsed data + * structures. Disable depth checking with :max_nesting => false|nil|0, it + * defaults to 100. + * * *allow_nan*: If set to true, allow NaN, Infinity and -Infinity in + * defiance of RFC 4627 to be parsed by the Parser. This option defaults to + * false. + * * *symbolize_names*: If set to true, returns symbols for the names + * (keys) in a JSON object. Otherwise strings are returned, which is + * also the default. It's not possible to use this option in + * conjunction with the *create_additions* option. + * * *create_additions*: If set to false, the Parser doesn't create + * additions even if a matching class and create_id was found. This option + * defaults to false. + * * *object_class*: Defaults to Hash + * * *array_class*: Defaults to Array + */ +static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self) +{ + VALUE source, opts; + GET_PARSER_INIT; + + if (json->Vsource) { + rb_raise(rb_eTypeError, "already initialized instance"); + } +#ifdef HAVE_RB_SCAN_ARGS_OPTIONAL_HASH + rb_scan_args(argc, argv, "1:", &source, &opts); +#else + rb_scan_args(argc, argv, "11", &source, &opts); +#endif + if (!NIL_P(opts)) { +#ifndef HAVE_RB_SCAN_ARGS_OPTIONAL_HASH + opts = rb_convert_type(opts, T_HASH, "Hash", "to_hash"); + if (NIL_P(opts)) { + rb_raise(rb_eArgError, "opts needs to be like a hash"); + } else { +#endif + VALUE tmp = ID2SYM(i_max_nesting); + if (option_given_p(opts, tmp)) { + VALUE max_nesting = rb_hash_aref(opts, tmp); + if (RTEST(max_nesting)) { + Check_Type(max_nesting, T_FIXNUM); + json->max_nesting = FIX2INT(max_nesting); + } else { + json->max_nesting = 0; + } + } else { + json->max_nesting = 100; + } + tmp = ID2SYM(i_allow_nan); + if (option_given_p(opts, tmp)) { + json->allow_nan = RTEST(rb_hash_aref(opts, tmp)) ? 1 : 0; + } else { + json->allow_nan = 0; + } + tmp = ID2SYM(i_symbolize_names); + if (option_given_p(opts, tmp)) { + json->symbolize_names = RTEST(rb_hash_aref(opts, tmp)) ? 1 : 0; + } else { + json->symbolize_names = 0; + } + tmp = ID2SYM(i_freeze); + if (option_given_p(opts, tmp)) { + json->freeze = RTEST(rb_hash_aref(opts, tmp)) ? 1 : 0; + } else { + json->freeze = 0; + } + tmp = ID2SYM(i_create_additions); + if (option_given_p(opts, tmp)) { + json->create_additions = RTEST(rb_hash_aref(opts, tmp)); + } else { + json->create_additions = 0; + } + if (json->symbolize_names && json->create_additions) { + rb_raise(rb_eArgError, + "options :symbolize_names and :create_additions cannot be " + " used in conjunction"); + } + tmp = ID2SYM(i_create_id); + if (option_given_p(opts, tmp)) { + json->create_id = rb_hash_aref(opts, tmp); + } else { + json->create_id = rb_funcall(mJSON, i_create_id, 0); + } + tmp = ID2SYM(i_object_class); + if (option_given_p(opts, tmp)) { + json->object_class = rb_hash_aref(opts, tmp); + } else { + json->object_class = Qnil; + } + tmp = ID2SYM(i_array_class); + if (option_given_p(opts, tmp)) { + json->array_class = rb_hash_aref(opts, tmp); + } else { + json->array_class = Qnil; + } + tmp = ID2SYM(i_decimal_class); + if (option_given_p(opts, tmp)) { + json->decimal_class = rb_hash_aref(opts, tmp); + } else { + json->decimal_class = Qnil; + } + tmp = ID2SYM(i_match_string); + if (option_given_p(opts, tmp)) { + VALUE match_string = rb_hash_aref(opts, tmp); + json->match_string = RTEST(match_string) ? match_string : Qnil; + } else { + json->match_string = Qnil; + } +#ifndef HAVE_RB_SCAN_ARGS_OPTIONAL_HASH + } +#endif + } else { + json->max_nesting = 100; + json->allow_nan = 0; + json->create_additions = 0; + json->create_id = rb_funcall(mJSON, i_create_id, 0); + json->object_class = Qnil; + json->array_class = Qnil; + json->decimal_class = Qnil; + } + source = convert_encoding(StringValue(source)); + StringValue(source); + json->len = RSTRING_LEN(source); + json->source = RSTRING_PTR(source);; + json->Vsource = source; + return self; +} + +%%{ + machine JSON; + + write data; + + include JSON_common; + + action parse_value { + char *np = JSON_parse_value(json, fpc, pe, &result, 0); + if (np == NULL) { fhold; fbreak; } else fexec np; + } + + main := ignore* ( + begin_value >parse_value + ) ignore*; +}%% + +/* + * call-seq: parse() + * + * Parses the current JSON text _source_ and returns the complete data + * structure as a result. + * It raises JSON::ParseError if fail to parse. + */ +static VALUE cParser_parse(VALUE self) +{ + char *p, *pe; + int cs = EVIL; + VALUE result = Qnil; + GET_PARSER; + + %% write init; + p = json->source; + pe = p + json->len; + %% write exec; + + if (cs >= JSON_first_final && p == pe) { + return result; + } else { + rb_enc_raise(EXC_ENCODING eParserError, "unexpected token at '%s'", p); + return Qnil; + } +} + +static void JSON_mark(void *ptr) +{ + JSON_Parser *json = ptr; + rb_gc_mark_maybe(json->Vsource); + rb_gc_mark_maybe(json->create_id); + rb_gc_mark_maybe(json->object_class); + rb_gc_mark_maybe(json->array_class); + rb_gc_mark_maybe(json->decimal_class); + rb_gc_mark_maybe(json->match_string); +} + +static void JSON_free(void *ptr) +{ + JSON_Parser *json = ptr; + fbuffer_free(json->fbuffer); + ruby_xfree(json); +} + +static size_t JSON_memsize(const void *ptr) +{ + const JSON_Parser *json = ptr; + return sizeof(*json) + FBUFFER_CAPA(json->fbuffer); +} + +#ifdef NEW_TYPEDDATA_WRAPPER +static const rb_data_type_t JSON_Parser_type = { + "JSON/Parser", + {JSON_mark, JSON_free, JSON_memsize,}, +#ifdef RUBY_TYPED_FREE_IMMEDIATELY + 0, 0, + RUBY_TYPED_FREE_IMMEDIATELY, +#endif +}; +#endif + +static VALUE cJSON_parser_s_allocate(VALUE klass) +{ + JSON_Parser *json; + VALUE obj = TypedData_Make_Struct(klass, JSON_Parser, &JSON_Parser_type, json); + json->fbuffer = fbuffer_alloc(0); + return obj; +} + +/* + * call-seq: source() + * + * Returns a copy of the current _source_ string, that was used to construct + * this Parser. + */ +static VALUE cParser_source(VALUE self) +{ + GET_PARSER; + return rb_str_dup(json->Vsource); +} + +void Init_parser(void) +{ +#ifdef HAVE_RB_EXT_RACTOR_SAFE + rb_ext_ractor_safe(true); +#endif + +#undef rb_intern + rb_require("json/common"); + mJSON = rb_define_module("JSON"); + mExt = rb_define_module_under(mJSON, "Ext"); + cParser = rb_define_class_under(mExt, "Parser", rb_cObject); + eParserError = rb_path2class("JSON::ParserError"); + eNestingError = rb_path2class("JSON::NestingError"); + rb_gc_register_mark_object(eParserError); + rb_gc_register_mark_object(eNestingError); + rb_define_alloc_func(cParser, cJSON_parser_s_allocate); + rb_define_method(cParser, "initialize", cParser_initialize, -1); + rb_define_method(cParser, "parse", cParser_parse, 0); + rb_define_method(cParser, "source", cParser_source, 0); + + CNaN = rb_const_get(mJSON, rb_intern("NaN")); + rb_gc_register_mark_object(CNaN); + + CInfinity = rb_const_get(mJSON, rb_intern("Infinity")); + rb_gc_register_mark_object(CInfinity); + + CMinusInfinity = rb_const_get(mJSON, rb_intern("MinusInfinity")); + rb_gc_register_mark_object(CMinusInfinity); + + i_json_creatable_p = rb_intern("json_creatable?"); + i_json_create = rb_intern("json_create"); + i_create_id = rb_intern("create_id"); + i_create_additions = rb_intern("create_additions"); + i_chr = rb_intern("chr"); + i_max_nesting = rb_intern("max_nesting"); + i_allow_nan = rb_intern("allow_nan"); + i_symbolize_names = rb_intern("symbolize_names"); + i_object_class = rb_intern("object_class"); + i_array_class = rb_intern("array_class"); + i_decimal_class = rb_intern("decimal_class"); + i_match = rb_intern("match"); + i_match_string = rb_intern("match_string"); + i_key_p = rb_intern("key?"); + i_deep_const_get = rb_intern("deep_const_get"); + i_aset = rb_intern("[]="); + i_aref = rb_intern("[]"); + i_leftshift = rb_intern("<<"); + i_new = rb_intern("new"); + i_try_convert = rb_intern("try_convert"); + i_freeze = rb_intern("freeze"); + i_uminus = rb_intern("-@"); +} + +/* + * Local variables: + * mode: c + * c-file-style: ruby + * indent-tabs-mode: nil + * End: + */ diff --git a/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/parser/parser.so b/vendor/bundle/ruby/2.7.0/gems/json-2.6.3/ext/json/ext/parser/parser.so new file mode 100755 index 0000000000000000000000000000000000000000..0938a60e3b8cd60045c60f6954b19d00ad77d4c3 GIT binary patch literal 67200 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